diff options
| author | ame <[email protected]> | 2024-04-06 16:50:38 -0500 |
|---|---|---|
| committer | ame <[email protected]> | 2024-04-06 16:50:38 -0500 |
| commit | 7fbafae25ca81e9acb745fd75ef7f1be55ad7d92 (patch) | |
| tree | 639c6d618b44f0ff2a4fcac9f557b906f37cbec3 | |
| parent | b8c10dac99316974d142c530356ad5cd8fdf9afa (diff) | |
changed the add metamethod
| -rw-r--r-- | docs/crypto.md | 6 | ||||
| -rw-r--r-- | src/crypto.h | 23 | ||||
| -rw-r--r-- | src/hash/adler.c | 2 | ||||
| -rw-r--r-- | src/hash/bsdchecksum.c | 2 | ||||
| -rw-r--r-- | src/hash/crc.c | 4 | ||||
| -rw-r--r-- | src/hash/djb2.c | 2 | ||||
| -rw-r--r-- | src/hash/fletcher.c | 4 | ||||
| -rw-r--r-- | src/hash/fnv.c | 4 | ||||
| -rw-r--r-- | src/hash/jenkins.c | 1 | ||||
| -rw-r--r-- | src/hash/loselose.c | 1 | ||||
| -rw-r--r-- | src/hash/md5.c | 1 | ||||
| -rw-r--r-- | src/hash/pearson.c | 1 | ||||
| -rw-r--r-- | src/hash/pjw.c | 1 | ||||
| -rw-r--r-- | src/hash/sdbm.c | 1 | ||||
| -rw-r--r-- | src/hash/sha01.c | 2 | ||||
| -rw-r--r-- | src/hash/sha2-256.c | 13 | ||||
| -rw-r--r-- | src/hash/sysvchecksum.c | 1 | ||||
| -rw-r--r-- | src/hash/xor.c | 1 | ||||
| -rw-r--r-- | tests/hash.lua | 7 |
19 files changed, 66 insertions, 11 deletions
diff --git a/docs/crypto.md b/docs/crypto.md index 75ae5f0..10401ab 100644 --- a/docs/crypto.md +++ b/docs/crypto.md @@ -87,10 +87,10 @@ obj = llib.crypto.adler32() obj:update("meow") hash = obj:final() --043c01b9s (the same) ---along with the + operator being overloaded to work as obj:update and returning the current final +--along with the + operator being overloaded to work as obj:update and returning a seperate object obj = llib.crypto.adler32() -hash = obj + meow -- (the same again) -hash = obj:final() -- (the same, again) +hash = (obj + "meow"):final() -- (the same again) +hash = obj:update("meow"):final() -- you get the point --and of course, the single function method still works too (will still do init-update-final in the backend) hash = llib.crypto.adler32("meow") --043c01b9s (the same) diff --git a/src/crypto.h b/src/crypto.h index e58d3a7..03a9728 100644 --- a/src/crypto.h +++ b/src/crypto.h @@ -45,11 +45,24 @@ int tp(lua_State*); #define lua_common_hash_init_update(hashname, luaname) lua_common_hash_init(hashname, luaname) lua_common_hash_update(hashname, luaname) #define lua_common_hash_init(hashname, luaname) lua_common_hash_init_ni(hashname, luaname, hashname##_init()) +#define common_hash_clone(hashname) lua_common_hash_clone(hashname, hashname) +#define lua_common_hash_clone(hashname, luaname) lua_common_hash_clone_oargs(hashname, luaname, l_##luaname##_init(L)) +#define lua_common_hash_clone_oargs(hashname, luaname, oinit)\ +int l_##luaname##_clone(lua_State* L){\ + struct hashname##_hash* a = (struct hashname##_hash*)lua_touserdata(L, -1);\ + oinit;\ + struct hashname##_hash* b = (struct hashname##_hash*)lua_touserdata(L, -1);\ + *b = *a;\ + return 1;\ +} + #define lua_common_hash_meta(luaname)\ int _##luaname##_hash_add(lua_State*L){\ - l_##luaname##_update(L);\ lua_pushvalue(L, 1);\ - return l_##luaname##_final(L);\ + l_##luaname##_clone(L);\ + lua_pushvalue(L, -1);\ + lua_pushvalue(L, 2);\ + return l_##luaname##_update(L);\ }\ int _##luaname##_common_hash(lua_State* L){\ lua_newtable(L);\ @@ -84,13 +97,13 @@ int _##luaname##_common_hash(lua_State* L){\ #define lua_common_hash_update(hashname, luaname)\ int l_##luaname##_update(lua_State* L){\ - struct hashname##_hash* a = (struct hashname##_hash*)lua_touserdata(L, 1);\ + struct hashname##_hash* a = (struct hashname##_hash*)lua_touserdata(L, -2);\ size_t len = 0;\ - uint8_t* b = (uint8_t*)luaL_checklstring(L, 2, &len);\ + uint8_t* b = (uint8_t*)luaL_checklstring(L, -1, &len);\ \ hashname##_update(b, len, a);\ \ - lua_pushvalue(L, 1);\ + lua_pushvalue(L, -2);\ return 1;\ } diff --git a/src/hash/adler.c b/src/hash/adler.c index 932c02c..daca0d7 100644 --- a/src/hash/adler.c +++ b/src/hash/adler.c @@ -23,6 +23,8 @@ uint32_t adler32(uint8_t* aa, size_t len){ return adler32_final(&dig); } +common_hash_clone(adler32); + common_hash_init_update(adler32); int l_adler32_final(lua_State* L){ diff --git a/src/hash/bsdchecksum.c b/src/hash/bsdchecksum.c index ebcf091..3fbbe77 100644 --- a/src/hash/bsdchecksum.c +++ b/src/hash/bsdchecksum.c @@ -25,6 +25,8 @@ uint16_t bsdchecksum(uint8_t* a, size_t len){ return bsdchecksum_final(&b); } +common_hash_clone(bsdchecksum); + common_hash_init_update(bsdchecksum); int l_bsdchecksum_final(lua_State* L){ diff --git a/src/hash/crc.c b/src/hash/crc.c index f52e005..acb6984 100644 --- a/src/hash/crc.c +++ b/src/hash/crc.c @@ -82,6 +82,10 @@ uint8_t crc8(uint8_t *aa, size_t len){ return crc8_final(&a); } +common_hash_clone(crc32); +common_hash_clone(crc16); +common_hash_clone(crc8); + common_hash_init_update(crc32); common_hash_init_update(crc16); common_hash_init_update(crc8); diff --git a/src/hash/djb2.c b/src/hash/djb2.c index 99f2a75..ed01345 100644 --- a/src/hash/djb2.c +++ b/src/hash/djb2.c @@ -23,6 +23,8 @@ uint32_t djb2(uint8_t * in, size_t len){ return djb2_final(&a); } +common_hash_clone(djb2); + common_hash_init_update(djb2); int l_djb2_final(lua_State* L){ diff --git a/src/hash/fletcher.c b/src/hash/fletcher.c index 16c8b40..be618bf 100644 --- a/src/hash/fletcher.c +++ b/src/hash/fletcher.c @@ -65,6 +65,10 @@ uint32_t fletcher32(uint8_t *aa, size_t len){ return fletcher32_final(&a); } +common_hash_clone(fletcher32); +common_hash_clone(fletcher16); +common_hash_clone(fletcher8); + common_hash_init_update(fletcher8); common_hash_init_update(fletcher16); common_hash_init_update(fletcher32); diff --git a/src/hash/fnv.c b/src/hash/fnv.c index 10c8ca2..c8e62c6 100644 --- a/src/hash/fnv.c +++ b/src/hash/fnv.c @@ -35,6 +35,10 @@ uint64_t fnv_1(uint8_t* in, size_t len, enum fnv_version A){ return fnv_1_final(&a); } +lua_common_hash_clone(fnv_1, fnv_0); +lua_common_hash_clone(fnv_1, fnv_1); +lua_common_hash_clone(fnv_1, fnv_a); + lua_common_hash_update(fnv_1, fnv_1); lua_common_hash_update(fnv_1, fnv_0); lua_common_hash_update(fnv_1, fnv_a); diff --git a/src/hash/jenkins.c b/src/hash/jenkins.c index dc96ff6..b75d4e9 100644 --- a/src/hash/jenkins.c +++ b/src/hash/jenkins.c @@ -31,6 +31,7 @@ uint32_t jenkins_oaat(uint8_t* in, size_t len){ return jenkins_oaat_final(&a); } +lua_common_hash_clone(jenkins_oaat, oaat); lua_common_hash_init_update(jenkins_oaat, oaat); int l_oaat_final(lua_State* L){ diff --git a/src/hash/loselose.c b/src/hash/loselose.c index 6ab8677..bfdc017 100644 --- a/src/hash/loselose.c +++ b/src/hash/loselose.c @@ -24,6 +24,7 @@ uint64_t loselose(uint8_t* in, size_t len){ return loselose_final(&a); } +common_hash_clone(loselose); common_hash_init_update(loselose); int l_loselose_final(lua_State* L){ diff --git a/src/hash/md5.c b/src/hash/md5.c index 014eefa..26f89e2 100644 --- a/src/hash/md5.c +++ b/src/hash/md5.c @@ -133,6 +133,7 @@ void md5_final(struct md5_hash* hash, char out_stream[64]){ } +common_hash_clone(md5); lua_common_hash_init_ni(md5, md5, md5_init_l(L)); lua_common_hash_update(md5, md5); //common_hash_init_update(md5); diff --git a/src/hash/pearson.c b/src/hash/pearson.c index c5fcf19..d42c9fe 100644 --- a/src/hash/pearson.c +++ b/src/hash/pearson.c @@ -59,6 +59,7 @@ int l_setpearson(lua_State* L){ return 0; } +common_hash_clone(pearson); common_hash_init_update(pearson); int l_pearson_final(lua_State* L){ diff --git a/src/hash/pjw.c b/src/hash/pjw.c index ce2c38c..ca3341a 100644 --- a/src/hash/pjw.c +++ b/src/hash/pjw.c @@ -27,6 +27,7 @@ uint32_t pjw(uint8_t* in, size_t len){ return pjw_final(&a); } +common_hash_clone(pjw); common_hash_init_update(pjw); int l_pjw_final(lua_State* L){ diff --git a/src/hash/sdbm.c b/src/hash/sdbm.c index 7b79526..f3457ff 100644 --- a/src/hash/sdbm.c +++ b/src/hash/sdbm.c @@ -23,6 +23,7 @@ uint64_t sdbm(uint8_t* in, size_t len){ return sdbm_final(&a); } +common_hash_clone(sdbm); common_hash_init_update(sdbm); int l_sdbm_final(lua_State* L){ diff --git a/src/hash/sha01.c b/src/hash/sha01.c index 3605dcd..dffe690 100644 --- a/src/hash/sha01.c +++ b/src/hash/sha01.c @@ -172,9 +172,11 @@ void sha1(uint8_t* a, size_t len, char* out_stream){ sha1_final(&aa, out_stream); } +common_hash_clone(sha1); lua_common_hash_init_ni(sha1, sha1, sha01_init_l(1, L)); lua_common_hash_update(sha1, sha1); +common_hash_clone(sha0); lua_common_hash_init_ni(sha0, sha0, sha01_init_l(0, L)); lua_common_hash_update(sha0, sha0); diff --git a/src/hash/sha2-256.c b/src/hash/sha2-256.c index f102a00..5327209 100644 --- a/src/hash/sha2-256.c +++ b/src/hash/sha2-256.c @@ -239,6 +239,7 @@ struct iv sha_iv_gen(int i){ return (struct iv){.h0 = a.h0, .h1 = a.h1, .h2 = a.h2, .h3 = a.h3, .h4 = a.h4, .h5 = a.h5, .h6 = a.h6, .h7 = a.h7}; } +common_hash_clone(sha512); lua_common_hash_init_ni(sha512, sha512, sha512_t_init_l(sha512_iv, L)); lua_common_hash_update(sha512, sha512); @@ -252,6 +253,7 @@ int l_sha512_final(lua_State* L){ return 1; } +common_hash_clone(sha384); lua_common_hash_init_ni(sha384, sha384, sha512_t_init_l(sha384_iv, L)); lua_common_hash_update(sha384, sha384); @@ -265,9 +267,18 @@ int l_sha384_final(lua_State* L){ return 1; } +int l_sha512_t_clone(lua_State* L){ + struct sha512_hash* a = (struct sha512_hash*)lua_touserdata(L, -1); + lua_pushinteger(L, a->t); + l_sha512_t_init(L); + struct sha512_hash* b = (struct sha512_hash*)lua_touserdata(L, -1); + *b = *a; + return 1; +} + lua_common_hash_meta(sha512_t); int l_sha512_t_init(lua_State* L){ - int tt = luaL_checkinteger(L, 1); + int tt = luaL_checkinteger(L, -1); lua_newtable(L); int t = lua_gettop(L); diff --git a/src/hash/sysvchecksum.c b/src/hash/sysvchecksum.c index 71f203b..221a6dd 100644 --- a/src/hash/sysvchecksum.c +++ b/src/hash/sysvchecksum.c @@ -23,6 +23,7 @@ uint32_t sysvchecksum(uint8_t* aa, size_t len){ return sysvchecksum_final(&a); } +common_hash_clone(sysvchecksum); common_hash_init_update(sysvchecksum); int l_sysvchecksum_final(lua_State* L){ diff --git a/src/hash/xor.c b/src/hash/xor.c index f2e4ff0..205408f 100644 --- a/src/hash/xor.c +++ b/src/hash/xor.c @@ -21,6 +21,7 @@ uint8_t xor8(uint8_t* aa, size_t len){ return xor8_final(&a); } +common_hash_clone(xor8) common_hash_init_update(xor8); int l_xor8_final(lua_State* L){ diff --git a/tests/hash.lua b/tests/hash.lua index edc754b..1f99aca 100644 --- a/tests/hash.lua +++ b/tests/hash.lua @@ -13,6 +13,7 @@ function test(name,b,exp,oargs) local hash4 local hash5 local hash6 + local hash7 local add = "" if oargs == nil then hash = llib.crypto[name](b) @@ -26,12 +27,14 @@ function test(name,b,exp,oargs) hash2 = llib.crypto[name]():update(b):final() hash5 = llib.crypto[name]() hash6 = hash5 + b; - hash5 = hash5:final() + hash6 = hash6:final() + hash5 = hash5:update(b):final() else hash2 = llib.crypto[name](table.unpack(oargs)):update(b):final() hash5 = llib.crypto[name](table.unpack(oargs)) hash6 = hash5 + b; - hash5 = hash5:final() + hash6 = hash6:final() + hash5 = hash5:update(b):final() end if(hash5 ~= exp) then |
