diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2019-08-24 10:16:15 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2019-08-24 10:16:15 -0700 |
commit | 3c0df649d00d55a31e6f92c29bc3976fdba27f8e (patch) | |
tree | 757e2dd23ee7b2a72ea7e40b34c72ac06522b89c /chksum.c | |
parent | 8a10829e5e35e5b0721260e0a7b31554ec21d766 (diff) | |
download | txr-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.
Diffstat (limited to 'chksum.c')
-rw-r--r-- | chksum.c | 16 |
1 files changed, 12 insertions, 4 deletions
@@ -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) |