This library implements some hash and cryptographic algorithms.

Dependents:   ES_CW2_Starter_JIN EMBEDDED_CW2 EMBEDDED_CW2_Final Spinnybois ... more

Fork of Crypto by Francois Berder

Committer:
estott
Date:
Fri Mar 09 10:10:16 2018 +0000
Revision:
15:634f9c4cbab1
Parent:
11:96d87a5394ee
Reduced flash footprint by removing __forceinline directive in SHA2_32.c

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