2025-04-11 13:51:48 +01:00
|
|
|
// SHA-224. Adapted from LibTomCrypt. This code is Public Domain
|
|
|
|
|
#include "hash.h"
|
|
|
|
|
|
2026-03-16 10:35:43 +00:00
|
|
|
#include <fx/core/hash.h>
|
2025-04-11 13:51:48 +01:00
|
|
|
#include <string.h>
|
|
|
|
|
|
2026-03-16 10:35:43 +00:00
|
|
|
extern void z__fx_sha2_256_update(
|
|
|
|
|
struct fx_hash_ctx *md, const void *src, size_t inlen);
|
|
|
|
|
extern void z__fx_sha2_256_finish(struct fx_hash_ctx *md, void *out, size_t max);
|
2025-04-11 13:51:48 +01:00
|
|
|
|
2026-03-16 10:35:43 +00:00
|
|
|
static void sha_init(struct fx_hash_ctx *md)
|
2025-04-11 13:51:48 +01:00
|
|
|
{
|
|
|
|
|
md->ctx_state.sha2_256.curlen = 0;
|
|
|
|
|
md->ctx_state.sha2_256.length = 0;
|
|
|
|
|
md->ctx_state.sha2_256.state[0] = 0xc1059ed8UL;
|
|
|
|
|
md->ctx_state.sha2_256.state[1] = 0x367cd507UL;
|
|
|
|
|
md->ctx_state.sha2_256.state[2] = 0x3070dd17UL;
|
|
|
|
|
md->ctx_state.sha2_256.state[3] = 0xf70e5939UL;
|
|
|
|
|
md->ctx_state.sha2_256.state[4] = 0xffc00b31UL;
|
|
|
|
|
md->ctx_state.sha2_256.state[5] = 0x68581511UL;
|
|
|
|
|
md->ctx_state.sha2_256.state[6] = 0x64f98fa7UL;
|
|
|
|
|
md->ctx_state.sha2_256.state[7] = 0xbefa4fa4UL;
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-16 10:35:43 +00:00
|
|
|
static void sha_update(struct fx_hash_ctx *md, const void *in, size_t inlen)
|
2025-04-11 13:51:48 +01:00
|
|
|
{
|
2026-03-16 10:35:43 +00:00
|
|
|
z__fx_sha2_256_update(md, in, inlen);
|
2025-04-11 13:51:48 +01:00
|
|
|
}
|
|
|
|
|
|
2026-03-16 10:35:43 +00:00
|
|
|
static void sha_finish(struct fx_hash_ctx *md, void *out, size_t max)
|
2025-04-11 13:51:48 +01:00
|
|
|
{
|
2026-03-16 10:35:43 +00:00
|
|
|
unsigned char res[FX_DIGEST_LENGTH_SHA2_256];
|
|
|
|
|
z__fx_sha2_256_finish(md, res, max);
|
2025-04-11 13:51:48 +01:00
|
|
|
/* truncate the digest to 224 bits */
|
2026-03-16 10:35:43 +00:00
|
|
|
memcpy(out, res, fx_min(size_t, max, FX_DIGEST_LENGTH_224));
|
2025-04-11 13:51:48 +01:00
|
|
|
}
|
|
|
|
|
|
2026-03-16 10:35:43 +00:00
|
|
|
struct fx_hash_function_ops z__fx_sha2_224_ops = {
|
2025-04-11 13:51:48 +01:00
|
|
|
.hash_init = sha_init,
|
|
|
|
|
.hash_update = sha_update,
|
|
|
|
|
.hash_finish = sha_finish,
|
|
|
|
|
};
|