Botan 1.10.17
tls_handshake_hash.cpp
Go to the documentation of this file.
1/*
2* TLS Handshake Hash
3* (C) 2004-2006 Jack Lloyd
4*
5* Released under the terms of the Botan license
6*/
7
8#include <botan/internal/tls_handshake_hash.h>
9#include <botan/md5.h>
10#include <botan/sha160.h>
11#include <memory>
12
13namespace Botan {
14
15/**
16* Return a TLS Handshake Hash
17*/
19 {
20 MD5 md5;
21 SHA_160 sha1;
22
23 md5.update(data);
24 sha1.update(data);
25
26 SecureVector<byte> output;
27 output += md5.final();
28 output += sha1.final();
29 return output;
30 }
31
32/**
33* Return a SSLv3 Handshake Hash
34*/
36 {
37 const byte PAD_INNER = 0x36, PAD_OUTER = 0x5C;
38
39 MD5 md5;
40 SHA_160 sha1;
41
42 md5.update(data);
43 sha1.update(data);
44
45 md5.update(secret);
46 sha1.update(secret);
47
48 for(size_t i = 0; i != 48; ++i)
49 md5.update(PAD_INNER);
50 for(size_t i = 0; i != 40; ++i)
51 sha1.update(PAD_INNER);
52
53 SecureVector<byte> inner_md5 = md5.final(), inner_sha1 = sha1.final();
54
55 md5.update(secret);
56 sha1.update(secret);
57 for(size_t i = 0; i != 48; ++i)
58 md5.update(PAD_OUTER);
59 for(size_t i = 0; i != 40; ++i)
60 sha1.update(PAD_OUTER);
61 md5.update(inner_md5);
62 sha1.update(inner_sha1);
63
64 SecureVector<byte> output;
65 output += md5.final();
66 output += sha1.final();
67 return output;
68 }
69
70}
void update(const byte in[], size_t length)
Definition buf_comp.h:33
void final(byte out[])
Definition buf_comp.h:80
SecureVector< byte > final()
SecureVector< byte > final_ssl3(const MemoryRegion< byte > &)