summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2019-08-24 10:16:15 -0700
committerKaz Kylheku <kaz@kylheku.com>2019-08-24 10:16:15 -0700
commit3c0df649d00d55a31e6f92c29bc3976fdba27f8e (patch)
tree757e2dd23ee7b2a72ea7e40b34c72ac06522b89c
parent8a10829e5e35e5b0721260e0a7b31554ec21d766 (diff)
downloadtxr-3c0df649d00d55a31e6f92c29bc3976fdba27f8e.tar.gz
txr-3c0df649d00d55a31e6f92c29bc3976fdba27f8e.tar.bz2
txr-3c0df649d00d55a31e6f92c29bc3976fdba27f8e.zip
sha256/md5: hash string more efficiently.
* chksum.c (sha256_str, md5_str): Don't construct a byte input stream for hashing a string. Just convert whole thing to temporary UTF-8, hash, and free.
-rw-r--r--chksum.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/chksum.c b/chksum.c
index 776fe3d1..09e9f3b5 100644
--- a/chksum.c
+++ b/chksum.c
@@ -141,8 +141,12 @@ static void sha256_buf(val buf, unsigned char *hash)
static void sha256_str(val str, unsigned char *hash)
{
- val s = make_byte_input_stream(str);
- sha256_stream_impl(s, nil, hash);
+ char *s = utf8_dup_to(c_str(str));
+ SHA256_t s256;
+ SHA256_init(&s256);
+ SHA256_update(&s256, coerce(const unsigned char *, s), strlen(s));
+ free(s);
+ SHA256_final(&s256, hash);
}
val sha256(val obj, val buf_in)
@@ -378,8 +382,12 @@ static void md5_buf(val buf, unsigned char *hash)
static void md5_str(val str, unsigned char *hash)
{
- val s = make_byte_input_stream(str);
- md5_stream_impl(s, nil, hash);
+ char *s = utf8_dup_to(c_str(str));
+ MD5_t md5;
+ MD5_init(&md5);
+ MD5_update(&md5, coerce(const unsigned char *, s), strlen(s));
+ free(s);
+ MD5_final(&md5, hash);
}
val md5(val obj, val buf_in)