diff options
Diffstat (limited to 'src/kdf')
-rw-r--r-- | src/kdf/kdf2/kdf2.cpp | 2 | ||||
-rw-r--r-- | src/kdf/ssl_prf/prf_ssl3.cpp | 2 | ||||
-rw-r--r-- | src/kdf/tls_prf/prf_tls.cpp | 19 |
3 files changed, 12 insertions, 11 deletions
diff --git a/src/kdf/kdf2/kdf2.cpp b/src/kdf/kdf2/kdf2.cpp index b9e785942..8106ba07d 100644 --- a/src/kdf/kdf2/kdf2.cpp +++ b/src/kdf/kdf2/kdf2.cpp @@ -29,7 +29,7 @@ SecureVector<byte> KDF2::derive(u32bit out_len, SecureVector<byte> hash_result = hash->final(); u32bit added = std::min<u32bit>(hash_result.size(), out_len); - output.append(hash_result, added); + output.append(&hash_result[0], added); out_len -= added; ++counter; diff --git a/src/kdf/ssl_prf/prf_ssl3.cpp b/src/kdf/ssl_prf/prf_ssl3.cpp index 2b67644d2..1d896a63c 100644 --- a/src/kdf/ssl_prf/prf_ssl3.cpp +++ b/src/kdf/ssl_prf/prf_ssl3.cpp @@ -39,7 +39,7 @@ OctetString next_hash(u32bit where, u32bit want, md5.update(sha1_hash); SecureVector<byte> md5_hash = md5.final(); - return OctetString(md5_hash, want); + return OctetString(&md5_hash[0], want); } } diff --git a/src/kdf/tls_prf/prf_tls.cpp b/src/kdf/tls_prf/prf_tls.cpp index 7345f11c5..fa4552474 100644 --- a/src/kdf/tls_prf/prf_tls.cpp +++ b/src/kdf/tls_prf/prf_tls.cpp @@ -18,7 +18,7 @@ namespace { /* * TLS PRF P_hash function */ -void P_hash(byte output[], u32bit output_len, +void P_hash(MemoryRegion<byte>& output, MessageAuthenticationCode* mac, const byte secret[], u32bit secret_len, const byte seed[], u32bit seed_len) @@ -27,10 +27,12 @@ void P_hash(byte output[], u32bit output_len, SecureVector<byte> A(seed, seed_len); - while(output_len) + u32bit offset = 0; + + while(offset != output.size()) { const u32bit this_block_len = - std::min(mac->OUTPUT_LENGTH, output_len); + std::min<u32bit>(mac->OUTPUT_LENGTH, output.size() - offset); A = mac->process(A); @@ -38,9 +40,8 @@ void P_hash(byte output[], u32bit output_len, mac->update(seed, seed_len); SecureVector<byte> block = mac->final(); - xor_buf(output, &block[0], this_block_len); - output_len -= this_block_len; - output += this_block_len; + xor_buf(&output[offset], &block[0], this_block_len); + offset += this_block_len; } } @@ -75,8 +76,8 @@ SecureVector<byte> TLS_PRF::derive(u32bit key_len, const byte* S1 = secret; const byte* S2 = secret + (secret_len - S2_len); - P_hash(output, key_len, hmac_md5, S1, S1_len, seed, seed_len); - P_hash(output, key_len, hmac_sha1, S2, S2_len, seed, seed_len); + P_hash(output, hmac_md5, S1, S1_len, seed, seed_len); + P_hash(output, hmac_sha1, S2, S2_len, seed, seed_len); return output; } @@ -100,7 +101,7 @@ SecureVector<byte> TLS_12_PRF::derive(u32bit key_len, { SecureVector<byte> output(key_len); - P_hash(output, key_len, hmac, secret, secret_len, seed, seed_len); + P_hash(output, hmac, secret, secret_len, seed, seed_len); return output; } |