aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorame <[email protected]>2024-04-06 16:50:38 -0500
committerame <[email protected]>2024-04-06 16:50:38 -0500
commitd3f3a8a1f3e786965ae473c046db2c34d7d3adb6 (patch)
tree639c6d618b44f0ff2a4fcac9f557b906f37cbec3 /src
parent6dbb6dc2104237299cca414cd3a86256122e4abf (diff)
changed the add metamethod
Diffstat (limited to 'src')
-rw-r--r--src/crypto.h23
-rw-r--r--src/hash/adler.c2
-rw-r--r--src/hash/bsdchecksum.c2
-rw-r--r--src/hash/crc.c4
-rw-r--r--src/hash/djb2.c2
-rw-r--r--src/hash/fletcher.c4
-rw-r--r--src/hash/fnv.c4
-rw-r--r--src/hash/jenkins.c1
-rw-r--r--src/hash/loselose.c1
-rw-r--r--src/hash/md5.c1
-rw-r--r--src/hash/pearson.c1
-rw-r--r--src/hash/pjw.c1
-rw-r--r--src/hash/sdbm.c1
-rw-r--r--src/hash/sha01.c2
-rw-r--r--src/hash/sha2-256.c13
-rw-r--r--src/hash/sysvchecksum.c1
-rw-r--r--src/hash/xor.c1
17 files changed, 58 insertions, 6 deletions
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){