From d38c13b2fe1293b499312bb4cfd66a56108c4b5e Mon Sep 17 00:00:00 2001 From: bigfoot547 Date: Mon, 8 Jan 2024 12:17:20 -0600 Subject: WIP: JRE stuff --- src/digest/digest.h | 19 +++++++++++++------ src/digest/sha1.c | 26 +++++++++++++++++++++----- 2 files changed, 34 insertions(+), 11 deletions(-) (limited to 'src/digest') diff --git a/src/digest/digest.h b/src/digest/digest.h index d047b8e..2887b8a 100644 --- a/src/digest/digest.h +++ b/src/digest/digest.h @@ -4,20 +4,24 @@ #include #include -#define L2_SHA1_BLOCKLEN (64) /* 512 / 8 = 64 */ -#define L2_SHA1_DIGESTLEN (5) /* 160 / 32 = 5 */ +#include "macros.h" + +#define L2_SHA1__BLOCKLEN (64) /* 512 / 8 = 64 */ +#define L2_SHA1__DIGESTLEN (5) /* 160 / 32 = 5 */ + #define L2_SHA1_HEX_STRLEN (40) +#define L2_SHA1_DIGEST_BYTES (20) typedef struct tag_l2_sha1_state { /* struct members are internal do not use directly */ - uint32_t state[L2_SHA1_DIGESTLEN]; - uint8_t chunk[L2_SHA1_BLOCKLEN]; + uint32_t state[L2_SHA1__DIGESTLEN]; + uint8_t chunk[L2_SHA1__BLOCKLEN]; size_t nchunk; uint64_t totallen; } l2_sha1_state_t; typedef struct tag_l2_sha1_digest { - uint32_t state[L2_SHA1_DIGESTLEN]; + uint32_t state[L2_SHA1__DIGESTLEN]; } l2_sha1_digest_t; void l2_sha1_init(l2_sha1_state_t *st); @@ -25,8 +29,11 @@ void l2_sha1_update(l2_sha1_state_t *st, const void *data, size_t sz); void l2_sha1_finalize(l2_sha1_state_t *st, l2_sha1_digest_t *digest); int l2_sha1_digest_compare(const l2_sha1_digest_t *d1, const l2_sha1_digest_t *d2); -void l2_sha1_digest_copy(l2_sha1_digest_t *restrict dest, const l2_sha1_digest_t *restrict src); +void l2_sha1_digest_copy(l2_sha1_digest_t *L2_RESTRICT dest, const l2_sha1_digest_t *L2_RESTRICT src); void l2_sha1_digest_to_hex(const l2_sha1_digest_t *dg, char *out); int l2_sha1_digest_from_hex(l2_sha1_digest_t *dg, const char *in); +void l2_sha1_digest_to_buffer(const l2_sha1_digest_t *dg, void *odata); +void l2_sha1_digest_from_buffer(l2_sha1_digest_t *dg, const void *data); + #endif /* include guard */ diff --git a/src/digest/sha1.c b/src/digest/sha1.c index b8f697e..3998a3b 100644 --- a/src/digest/sha1.c +++ b/src/digest/sha1.c @@ -24,7 +24,7 @@ void l2_sha1_init(l2_sha1_state_t *st) st->state[3] = L2_SHA1_H3; st->state[4] = L2_SHA1_H4; - memset(st->chunk, 0, L2_SHA1_BLOCKLEN); + memset(st->chunk, 0, L2_SHA1__BLOCKLEN); st->nchunk = 0; st->totallen = 0; } @@ -90,7 +90,7 @@ void l2_sha1_update(l2_sha1_state_t *st, const void *data, size_t sz) size_t rem; st->totallen += sz; - while (sz >= (rem = (L2_SHA1_BLOCKLEN - st->nchunk))) { + while (sz >= (rem = (L2_SHA1__BLOCKLEN - st->nchunk))) { memcpy(st->chunk + st->nchunk, dbytes, rem); l2_sha1__update_int(st); @@ -109,14 +109,14 @@ void l2_sha1_finalize(l2_sha1_state_t *st, l2_sha1_digest_t *digest) { st->chunk[st->nchunk] = UINT8_C(0x80); ++st->nchunk; - if (st->nchunk > (L2_SHA1_BLOCKLEN - 8)) { + if (st->nchunk > (L2_SHA1__BLOCKLEN - 8)) { /* must pad the rest of the way */ - memset(st->chunk + st->nchunk, 0, L2_SHA1_BLOCKLEN - st->nchunk); + memset(st->chunk + st->nchunk, 0, L2_SHA1__BLOCKLEN - st->nchunk); l2_sha1__update_int(st); st->nchunk = 0; } - size_t rem = (L2_SHA1_BLOCKLEN - st->nchunk) - 8; + size_t rem = (L2_SHA1__BLOCKLEN - st->nchunk) - 8; uint64_t len = l2_htobe64(st->totallen * 8); memset(st->chunk + st->nchunk, 0, rem); st->nchunk += rem; @@ -209,6 +209,22 @@ int l2_sha1__hex_to_uint32(const char *in, uint32_t *out) return 0; } +void l2_sha1_digest_to_buffer(const l2_sha1_digest_t *dg, void *odata) +{ + uint32_t *data = odata; + for (int i = 0; i < L2_SHA1__DIGESTLEN; ++i) { + data[i] = l2_htobe32(dg->state[i]); + } +} + +void l2_sha1_digest_from_buffer(l2_sha1_digest_t *dg, const void *data) +{ + const uint32_t *pstate = data; + for (int i = 0; i < L2_SHA1__DIGESTLEN; ++i) { + dg->state[i] = l2_betoh32(pstate[i]); + } +} + #if L2_SHA1_STANDALONE_TEST int main(int argc, char **argv) { -- cgit v1.2.3-70-g09d2