Fork of François Berder Crypto, fixed AES CBC and small rework

Dependents:   AES_example shaun_larada Smartage

Fork of Crypto by Francois Berder

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?

UserRevisionLine numberNew 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