8 #include "heivs/hash_stm32_md5.h"
21 static status_e init(
struct heivs_hash_t *hash,
void *_state,
size_t state_size)
23 struct md5_state_t *state = (
struct md5_state_t *)_state;
28 memset(state, 0x0,
sizeof(*state));
30 RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_HASH, ENABLE);
37 HASH->DIN = 0xdeadbeaf;
38 if (HASH->DIN != 0xdeadbeaf)
50 HASH_Init(&MD5_HASH_InitStructure);
55 static status_e run(
struct heivs_hash_t *hash,
void *_state,
const void *_data,
size_t size)
57 struct md5_state_t *state = (
struct md5_state_t *)_state;
59 uint8_t *inputaddr = (uint8_t *)_data;
62 if (state->bytes_left)
65 return ERROR_NOT_YET_IMPLEMENTED;
69 for( i = 0; i < size/4; i++)
71 HASH_DataIn(*(uint32_t*)inputaddr);
75 state->bytes_left = size % 4;
76 memcpy(state->buffer, inputaddr, state->bytes_left);
81 static status_e finish(
struct heivs_hash_t *hash,
void *_state)
84 struct md5_state_t *state = (
struct md5_state_t *)_state;
85 uint32_t nbvalidbitsdata;
88 uint32_t outputaddr = (uint32_t)_state;
92 nbvalidbitsdata = 8 * (state->bytes_left % 4);
94 if (state->bytes_left)
96 uint32_t *data = (uint32_t *)state->buffer;
101 HASH_SetLastWordValidBitsNbr(nbvalidbitsdata);
116 memset(state, 0x0,
sizeof(*state));
119 HASH_GetDigest(&MD5_MessageDigest);
120 *(uint32_t*)(outputaddr) = __REV(MD5_MessageDigest.
Data[0]);
122 *(uint32_t*)(outputaddr) = __REV(MD5_MessageDigest.
Data[1]);
124 *(uint32_t*)(outputaddr) = __REV(MD5_MessageDigest.
Data[2]);
126 *(uint32_t*)(outputaddr) = __REV(MD5_MessageDigest.
Data[3]);
129 RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_HASH, DISABLE);
135 struct heivs_hash_t hash_stm32_md5 =
137 .name =
"hash_stm32_md5",
This file contains all the functions prototypes for the RCC firmware library.
void * memcpy(void *dest, const void *src, size_t n)
void * memset(void *dest, int n, size_t n)
uint32_t HASH_AlgoSelection
static uint32_t time_elapsed(timeout_t timeout)
Is this time passed?
This file contains all the functions prototypes for the HASH firmware library.
#define HASH_AlgoSelection_MD5
#define HASH_AlgoMode_HASH
You should check your solder/cables.
HASH message digest result structure definition.
timeout_t time_set_timeout_ms(uint32_t ms)
Set an obscure time at least ms milliseconds in the future.
HASH Init structure definition.