aboutsummaryrefslogtreecommitdiffstats
path: root/src/digest
diff options
context:
space:
mode:
Diffstat (limited to 'src/digest')
-rw-r--r--src/digest/digest.h19
-rw-r--r--src/digest/sha1.c26
2 files changed, 34 insertions, 11 deletions
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 <stdint.h>
#include <stddef.h>
-#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)
{