/root/bitcoin/src/crypto/hmac_sha512.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) 2014-present 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 <crypto/sha512.h> |
8 | | |
9 | | #include <cstring> |
10 | | |
11 | | CHMAC_SHA512::CHMAC_SHA512(const unsigned char* key, size_t keylen) |
12 | 3.20k | { |
13 | 3.20k | unsigned char rkey[128]; |
14 | 3.20k | if (keylen <= 128) { |
15 | 3.20k | memcpy(rkey, key, keylen); |
16 | 3.20k | memset(rkey + keylen, 0, 128 - keylen); |
17 | 3.20k | } else { |
18 | 0 | CSHA512().Write(key, keylen).Finalize(rkey); |
19 | 0 | memset(rkey + 64, 0, 64); |
20 | 0 | } |
21 | | |
22 | 413k | for (int n = 0; n < 128; n++) |
23 | 410k | rkey[n] ^= 0x5c; |
24 | 3.20k | outer.Write(rkey, 128); |
25 | | |
26 | 413k | for (int n = 0; n < 128; n++) |
27 | 410k | rkey[n] ^= 0x5c ^ 0x36; |
28 | 3.20k | inner.Write(rkey, 128); |
29 | 3.20k | } |
30 | | |
31 | | void CHMAC_SHA512::Finalize(unsigned char hash[OUTPUT_SIZE]) |
32 | 3.20k | { |
33 | 3.20k | unsigned char temp[64]; |
34 | 3.20k | inner.Finalize(temp); |
35 | 3.20k | outer.Write(temp, 64).Finalize(hash); |
36 | 3.20k | } |