aboutsummaryrefslogtreecommitdiffstats
path: root/src/digest/digest.h
diff options
context:
space:
mode:
authorLibravatar bigfoot547 <[email protected]>2023-12-27 06:51:29 -0600
committerLibravatar bigfoot547 <[email protected]>2023-12-27 06:51:29 -0600
commit5e141e336c3a2cb8921edcd7af6f14a29ff63942 (patch)
tree80df676cd02693746b505aecbec5c9ee529b5e7b /src/digest/digest.h
parentrefactor instances (diff)
add cheap SHA1 implementation
Diffstat (limited to 'src/digest/digest.h')
-rw-r--r--src/digest/digest.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/digest/digest.h b/src/digest/digest.h
new file mode 100644
index 0000000..d047b8e
--- /dev/null
+++ b/src/digest/digest.h
@@ -0,0 +1,32 @@
+#ifndef L2SU_DIGEST_H_INCLUDED
+#define L2SU_DIGEST_H_INCLUDED
+
+#include <stdint.h>
+#include <stddef.h>
+
+#define L2_SHA1_BLOCKLEN (64) /* 512 / 8 = 64 */
+#define L2_SHA1_DIGESTLEN (5) /* 160 / 32 = 5 */
+#define L2_SHA1_HEX_STRLEN (40)
+
+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];
+ size_t nchunk;
+ uint64_t totallen;
+} l2_sha1_state_t;
+
+typedef struct tag_l2_sha1_digest {
+ uint32_t state[L2_SHA1_DIGESTLEN];
+} l2_sha1_digest_t;
+
+void l2_sha1_init(l2_sha1_state_t *st);
+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_to_hex(const l2_sha1_digest_t *dg, char *out);
+int l2_sha1_digest_from_hex(l2_sha1_digest_t *dg, const char *in);
+
+#endif /* include guard */