#include #define HASH_LENGTH 20 #define BLOCK_LENGTH 64 union _buffer { uint8_t b[BLOCK_LENGTH]; uint32_t w[BLOCK_LENGTH/4]; } buffer; union _state { uint8_t b[HASH_LENGTH]; uint32_t w[HASH_LENGTH/4]; } state; uint8_t bufferOffset; uint32_t byteCount; uint8_t keyBuffer[BLOCK_LENGTH]; uint8_t innerHash[HASH_LENGTH]; void init(void); void initHmac(const uint8_t* secret, uint8_t secretLength); uint8_t* result(void); uint8_t* resultHmac(void); void write(uint8_t); void writeArray(uint8_t *buffer, uint8_t size);