summaryrefslogtreecommitdiffstats
path: root/chksum.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2023-07-08 13:09:19 -0700
committerKaz Kylheku <kaz@kylheku.com>2023-07-08 13:09:19 -0700
commit1807b7d221cf815aad9576fdab2172915cb86e06 (patch)
treebe5662ef0b155958d1b87da3ea7eed7f1eb32917 /chksum.c
parenteb576809489a7b1aa15425dfbb5047dac449bd05 (diff)
downloadtxr-1807b7d221cf815aad9576fdab2172915cb86e06.tar.gz
txr-1807b7d221cf815aad9576fdab2172915cb86e06.tar.bz2
txr-1807b7d221cf815aad9576fdab2172915cb86e06.zip
Adding SHA-1 hash.
* chksums/sha1.c, chksums/sha1.h: New files. * LICENSE, METALICENSE: Mention new code. * chksum.c (sha1_ctx_s, sha1_ctx_cls): New static variables. (chksum_init): Register sha-ctx symbol, and sha_ctx_s COBJ class. Register sha1-stream, sha1, sha1-begin, sha1-hash and sha1-end intrinsics. (sha1_stream_impl, sha1_stream, sha1_szmax_upd, sha1_buf, sha1_str, sha1, sha1_ops, sha1_begin, sha1_utf8_byte_callback, sha1_hash, sha1_end): These functions and variables are generated by a call to the cksum_impl macro. * Makefile (OBJS): add chksums/sha1.o object file.
Diffstat (limited to 'chksum.c')
-rw-r--r--chksum.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/chksum.c b/chksum.c
index 1058b247..2db37b17 100644
--- a/chksum.c
+++ b/chksum.c
@@ -43,13 +43,14 @@
#include "stream.h"
#include "utf8.h"
#include "buf.h"
+#include "chksums/sha1.h"
#include "chksums/sha256.h"
#include "chksums/crc32.h"
#include "chksums/md5.h"
#include "chksum.h"
-static val sha256_ctx_s, md5_ctx_s;
-static struct cobj_class *sha256_ctx_cls, *md5_ctx_cls;
+static val sha1_ctx_s, sha256_ctx_s, md5_ctx_s;
+static struct cobj_class *sha1_ctx_cls, *sha256_ctx_cls, *md5_ctx_cls;
static val chksum_ensure_buf(val self, val buf_in,
val len, unsigned char **phash,
@@ -276,6 +277,9 @@ static val chksum_ensure_buf(val self, val buf_in,
return buf; \
}
+chksum_impl(sha1, SHA1_t, "SHA-1", SHA1_DIGEST_LENGTH,
+ SHA1_init, SHA1_update, SHA1_final);
+
chksum_impl(sha256, SHA256_t, "SHA-256", SHA256_DIGEST_LENGTH,
SHA256_init, SHA256_update, SHA256_final);
@@ -370,10 +374,17 @@ static val crc32(val obj, val init)
void chksum_init(void)
{
+ sha1_ctx_s = intern(lit("sha1-ctx"), user_package);
sha256_ctx_s = intern(lit("sha256-ctx"), user_package);
md5_ctx_s = intern(lit("md5-ctx"), user_package);
+ sha1_ctx_cls = cobj_register(sha1_ctx_s);
sha256_ctx_cls = cobj_register(sha256_ctx_s);
md5_ctx_cls = cobj_register(md5_ctx_s);
+ reg_fun(intern(lit("sha1-stream"), user_package), func_n3o(sha1_stream, 1));
+ reg_fun(intern(lit("sha1"), user_package), func_n2o(sha1, 1));
+ reg_fun(intern(lit("sha1-begin"), user_package), func_n0(sha1_begin));
+ reg_fun(intern(lit("sha1-hash"), user_package), func_n2(sha1_hash));
+ reg_fun(intern(lit("sha1-end"), user_package), func_n2o(sha1_end, 1));
reg_fun(intern(lit("sha256-stream"), user_package), func_n3o(sha256_stream, 1));
reg_fun(intern(lit("sha256"), user_package), func_n2o(sha256, 1));
reg_fun(intern(lit("sha256-begin"), user_package), func_n0(sha256_begin));