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/blake.c | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) (limited to 'src/hash/blake.c') diff --git a/src/hash/blake.c b/src/hash/blake.c index cf948f1..e5e9b16 100644 --- a/src/hash/blake.c +++ b/src/hash/blake.c @@ -104,8 +104,8 @@ struct blake256_hash blake256_init(){ struct blake256_hash blake256_init_l(lua_State* L){ struct blake256_hash a = {.bufflen = 0, .total = 0, .compressed = 0}; - a.buffer = lua_newuserdata(L, sizeof * a.buffer * bs); - a.hash = lua_newuserdata(L, sizeof * a.hash * 8); + a.buffer = calloc(sizeof * a.buffer, bs); + a.hash = calloc(sizeof * a.hash, 8); memset(a.buffer, 0, bs); a.hash[0] = 0x6a09e667; a.hash[1] = 0xbb67ae85; @@ -135,8 +135,8 @@ struct blake256_hash blake224_init(){ struct blake256_hash blake224_init_l(lua_State* L){ struct blake256_hash a = {.bufflen = 0, .total = 0, .compressed = 0}; - a.buffer = lua_newuserdata(L, sizeof * a.buffer * bs); - a.hash = lua_newuserdata(L, sizeof * a.hash * 8); + a.buffer = calloc(sizeof * a.buffer, bs); + a.hash = calloc(sizeof * a.hash, 8); memset(a.buffer, 0, bs); a.hash[0] = 0xc1059ed8; a.hash[1] = 0x367cd507; @@ -149,6 +149,15 @@ struct blake256_hash blake224_init_l(lua_State* L){ return a; } +int blake256_free_l(lua_State* L){ + struct blake256_hash* h = lua_touserdata(L, -1); + free(h->buffer); + free(h->hash); + return 0; +} + +#define blake224_free_l blake256_free_l + void blake256_round(struct blake256_hash* hash){ compress256(hash->hash, (char*)hash->buffer, hash->compressed * 8); } @@ -326,8 +335,8 @@ struct blake512_hash blake512_init(){ struct blake512_hash blake512_init_l(lua_State* L){ struct blake512_hash a = {.bufflen = 0, .total = 0, .compressed = 0}; - a.buffer = lua_newuserdata(L, sizeof * a.buffer * bs_2); - a.hash = lua_newuserdata(L, sizeof * a.hash * 8); + a.buffer = calloc(sizeof * a.buffer, bs_2); + a.hash = calloc(sizeof * a.hash, 8); memset(a.buffer, 0, bs_2); a.hash[0] = 0x6a09e667f3bcc908ULL; a.hash[1] = 0xbb67ae8584caa73bULL; @@ -357,8 +366,8 @@ struct blake384_hash blake384_init(){ struct blake384_hash blake384_init_l(lua_State* L){ struct blake384_hash a = {.bufflen = 0, .total = 0, .compressed = 0}; - a.buffer = lua_newuserdata(L, sizeof * a.buffer * bs_2); - a.hash = lua_newuserdata(L, sizeof * a.hash * 8); + a.buffer = calloc(sizeof * a.buffer, bs_2); + a.hash = calloc(sizeof * a.hash, 8); memset(a.buffer, 0, bs_2); a.hash[0] = 0xcbbb9d5dc1059ed8ULL; a.hash[1] = 0x629a292a367cd507ULL; @@ -371,6 +380,15 @@ struct blake384_hash blake384_init_l(lua_State* L){ return a; } +int blake512_free_l(lua_State* L){ + struct blake512_hash* h = lua_touserdata(L, -1); + free(h->buffer); + free(h->hash); + return 0; +} + +#define blake384_free_l blake512_free_l + void blake512_round(struct blake512_hash* hash){ compress512(hash->hash, hash->buffer, hash->compressed * 8); } -- cgit v1.2.3