gra-projekt/Implementierung/src/md2_impls/md2_0.c

33 lines
784 B
C

#include "../../lib/md2_impls/md2_0.h"
#include "../../lib/md2_impls/md2_common.h"
void md2_hash_0(size_t len, const uint8_t buf[len], uint8_t out[16]) {
// === step 1 ===
uint8_t* newBuf = md2_add_padding_and_space_for_checksum(buf, &len);
if (newBuf == NULL) {
return;
}
// === step 2 ===
md2_checksum(len, newBuf);
// === step 3 ===
uint8_t* messageDigestBuf = calloc(48, sizeof(uint8_t));
if (messageDigestBuf == NULL) {
return;
}
// === step 4 ===
// <= because we need to hash the last block (the checksum) too
for (size_t i = 0; i <= (len) / 16; i++) {
md2_first_loop(newBuf, messageDigestBuf, i);
md2_second_loop(messageDigestBuf);
}
END_MARK
memcpy(out, messageDigestBuf, 16);
free(messageDigestBuf);
free(newBuf);
}