Fork of François Berder Crypto, fixed AES CBC and small rework
Dependents: AES_example shaun_larada Smartage
Fork of Crypto by
hash/HMAC.cpp@16:4399e2e6260b, 2015-01-28 (annotated)
- Committer:
- Geremia
- Date:
- Wed Jan 28 17:55:13 2015 +0000
- Revision:
- 16:4399e2e6260b
- Parent:
- 11:96d87a5394ee
AES: bugfixed CBC, added PCBC (i could add CFB and OFB if needed), added public setIV(), moved keyExpansion() to public, in and out buffers can be the same
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
feb11 | 10:bc9c23aa3870 | 1 | #include "HMAC.h" |
feb11 | 10:bc9c23aa3870 | 2 | #include <string.h> |
feb11 | 10:bc9c23aa3870 | 3 | |
feb11 | 10:bc9c23aa3870 | 4 | HMAC::HMAC(HashAlgorithm *hashAlgo, uint8_t *k, uint32_t kl): |
feb11 | 10:bc9c23aa3870 | 5 | algo(hashAlgo), |
feb11 | 10:bc9c23aa3870 | 6 | keyLength(kl) |
feb11 | 10:bc9c23aa3870 | 7 | { |
feb11 | 10:bc9c23aa3870 | 8 | memcpy(key, k, keyLength); |
feb11 | 10:bc9c23aa3870 | 9 | uint8_t buffer[64]; |
feb11 | 10:bc9c23aa3870 | 10 | memcpy(buffer, key, keyLength); |
feb11 | 10:bc9c23aa3870 | 11 | memset(&buffer[keyLength], 0, 64-keyLength); |
feb11 | 10:bc9c23aa3870 | 12 | |
feb11 | 10:bc9c23aa3870 | 13 | for(int i = 0; i < 64; ++i) |
feb11 | 10:bc9c23aa3870 | 14 | buffer[i] ^= 0x36; |
feb11 | 10:bc9c23aa3870 | 15 | |
feb11 | 10:bc9c23aa3870 | 16 | algo->update(buffer, 64); |
feb11 | 10:bc9c23aa3870 | 17 | } |
feb11 | 10:bc9c23aa3870 | 18 | |
feb11 | 10:bc9c23aa3870 | 19 | HMAC::~HMAC() |
feb11 | 10:bc9c23aa3870 | 20 | { |
feb11 | 10:bc9c23aa3870 | 21 | delete algo; |
feb11 | 10:bc9c23aa3870 | 22 | } |
feb11 | 10:bc9c23aa3870 | 23 | |
feb11 | 10:bc9c23aa3870 | 24 | void HMAC::update(uint8_t *data, uint32_t length) |
feb11 | 10:bc9c23aa3870 | 25 | { |
feb11 | 10:bc9c23aa3870 | 26 | algo->update(data, length); |
feb11 | 10:bc9c23aa3870 | 27 | } |
feb11 | 10:bc9c23aa3870 | 28 | |
feb11 | 10:bc9c23aa3870 | 29 | void HMAC::finalize(uint8_t *hash) |
feb11 | 10:bc9c23aa3870 | 30 | { |
feb11 | 10:bc9c23aa3870 | 31 | uint8_t buffer[64], buffer2[64]; |
feb11 | 10:bc9c23aa3870 | 32 | algo->finalize(buffer); |
feb11 | 10:bc9c23aa3870 | 33 | |
feb11 | 10:bc9c23aa3870 | 34 | memcpy(buffer2, key, keyLength); |
feb11 | 11:96d87a5394ee | 35 | memset(&buffer2[keyLength], 0, 64-keyLength); |
feb11 | 10:bc9c23aa3870 | 36 | for(int i = 0; i < 64; ++i) |
feb11 | 10:bc9c23aa3870 | 37 | buffer2[i] ^= 0x5C; |
feb11 | 10:bc9c23aa3870 | 38 | |
feb11 | 10:bc9c23aa3870 | 39 | algo->update(buffer2, 64); |
feb11 | 10:bc9c23aa3870 | 40 | algo->update(buffer, algo->outputSize()); |
feb11 | 10:bc9c23aa3870 | 41 | algo->finalize(hash); |
feb11 | 10:bc9c23aa3870 | 42 | } |
feb11 | 10:bc9c23aa3870 | 43 |