33 lines
784 B
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);
|
|
} |