| 7 | #include <string.h> |
| 8 | |
| 9 | CHMAC_SHA256::CHMAC_SHA256(const unsigned char* key, size_t keylen) |
| 10 | { |
| 11 | unsigned char rkey[64]; |
| 12 | if (keylen <= 64) { |
| 13 | memcpy(rkey, key, keylen); |
| 14 | memset(rkey + keylen, 0, 64 - keylen); |
| 15 | } else { |
| 16 | CSHA256().Write(key, keylen).Finalize(rkey); |
| 17 | memset(rkey + 32, 0, 32); |
| 18 | } |
| 19 | |
| 20 | for (int n = 0; n < 64; n++) |
| 21 | rkey[n] ^= 0x5c; |
| 22 | outer.Write(rkey, 64); |
| 23 | |
| 24 | for (int n = 0; n < 64; n++) |
| 25 | rkey[n] ^= 0x5c ^ 0x36; |
| 26 | inner.Write(rkey, 64); |
| 27 | } |
| 28 | |
| 29 | void CHMAC_SHA256::Finalize(unsigned char hash[OUTPUT_SIZE]) |
| 30 | { |