From af975d63f67e6cc2d17f1804acb66328905f8701 Mon Sep 17 00:00:00 2001 From: amelia squires Date: Mon, 21 Apr 2025 20:43:51 -0500 Subject: better version support, fixes, and memory saftey --- src/hash/blake2.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) (limited to 'src/hash/blake2.c') diff --git a/src/hash/blake2.c b/src/hash/blake2.c index adb1419..42dc0ab 100644 --- a/src/hash/blake2.c +++ b/src/hash/blake2.c @@ -161,9 +161,9 @@ struct blake2b_hash blake2b_init(char* key, int key_len, int digest_len){ struct blake2b_hash blake2b_init_l(lua_State* L, char* key, int key_len, int digest_len){ struct blake2b_hash a = {.bufflen = key_len, .total = 0, .compressed = 0, .keylen = key_len, .digest_len = digest_len}; - a.buffer = lua_newuserdata(L, sizeof * a.buffer * bs_2); - a.hash = lua_newuserdata(L, sizeof * a.hash * 8); - a.key = lua_newuserdata(L, sizeof* a.key * key_len); + a.buffer = calloc(sizeof * a.buffer, bs_2); + a.hash = calloc(sizeof * a.hash, 8); + a.key = calloc(sizeof* a.key, key_len); memset(a.buffer, 0, bs_2); memcpy(a.key, key, key_len); memcpy(a.buffer, key, key_len); @@ -188,6 +188,22 @@ struct blake2b_hash blake2b_init_l(lua_State* L, char* key, int key_len, int dig return a; } +int blake2b_free_l(lua_State* L){ + struct blake2b_hash* h = lua_touserdata(L, -1); + free(h->buffer); + free(h->hash); + free(h->key); + return 0; +} + +int blake2s_free_l(lua_State* L){ + struct blake2b_hash* h = lua_touserdata(L, -1); + free(h->buffer); + free(h->hash); + free(h->key); + return 0; +} + void blake2b_update(uint8_t* input, size_t len, struct blake2b_hash* hash){ hash->total += len; size_t total_add = len + hash->bufflen; @@ -286,9 +302,9 @@ struct blake2s_hash blake2s_init(char* key, int key_len, int digest_len){ struct blake2s_hash blake2s_init_l(lua_State* L, char* key, int key_len, int digest_len){ struct blake2s_hash a = {.bufflen = key_len, .total = 0, .compressed = 0, .keylen = key_len, .digest_len = digest_len}; - a.buffer = lua_newuserdata(L, sizeof * a.buffer * bs); - a.hash = lua_newuserdata(L, sizeof * a.hash * 8); - a.key = lua_newuserdata(L, sizeof* a.key * key_len); + a.buffer = calloc(sizeof * a.buffer, bs); + a.hash = calloc(sizeof * a.hash, 8); + a.key = calloc(sizeof* a.key, key_len); memcpy(a.key, key, key_len); memset(a.buffer, 0, bs); memcpy(a.buffer, key, key_len); @@ -413,7 +429,7 @@ int l_blake2b_init(lua_State* L){ struct blake2b_hash* a = (struct blake2b_hash*)lua_newuserdata(L, sizeof * a); int ud = lua_gettop(L); *a = blake2b_init_l(L, key, keylen, outlen); - lua_common_hash_meta_def(blake2b); + lua_common_hash_meta_def(blake2b, blake2b_free_l); lua_pushvalue(L, ud); return 1; } @@ -490,7 +506,7 @@ int l_blake2s_init(lua_State* L){ struct blake2s_hash* a = (struct blake2s_hash*)lua_newuserdata(L, sizeof * a); int ud = lua_gettop(L); *a = blake2s_init_l(L, key, keylen, outlen); - lua_common_hash_meta_def(blake2s); + lua_common_hash_meta_def(blake2s, blake2s_free_l); lua_pushvalue(L, ud); return 1; } -- cgit v1.2.3