/root/bitcoin/src/crypto/hmac_sha512.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) 2014-2018 The Bitcoin Core developers |
2 | | // Distributed under the MIT software license, see the accompanying |
3 | | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
4 | | |
5 | | #include <crypto/hmac_sha512.h> |
6 | | |
7 | | #include <string.h> |
8 | | |
9 | | CHMAC_SHA512::CHMAC_SHA512(const unsigned char* key, size_t keylen) |
10 | 0 | { |
11 | 0 | unsigned char rkey[128]; |
12 | 0 | if (keylen <= 128) { |
13 | 0 | memcpy(rkey, key, keylen); |
14 | 0 | memset(rkey + keylen, 0, 128 - keylen); |
15 | 0 | } else { |
16 | 0 | CSHA512().Write(key, keylen).Finalize(rkey); |
17 | 0 | memset(rkey + 64, 0, 64); |
18 | 0 | } |
19 | |
|
20 | 0 | for (int n = 0; n < 128; n++) |
21 | 0 | rkey[n] ^= 0x5c; |
22 | 0 | outer.Write(rkey, 128); |
23 | |
|
24 | 0 | for (int n = 0; n < 128; n++) |
25 | 0 | rkey[n] ^= 0x5c ^ 0x36; |
26 | 0 | inner.Write(rkey, 128); |
27 | 0 | } |
28 | | |
29 | | void CHMAC_SHA512::Finalize(unsigned char hash[OUTPUT_SIZE]) |
30 | 0 | { |
31 | 0 | unsigned char temp[64]; |
32 | 0 | inner.Finalize(temp); |
33 | 0 | outer.Write(temp, 64).Finalize(hash); |
34 | 0 | } |