diff --git a/.gitignore b/.gitignore index db22438..72a5dd9 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,4 @@ m4/lt~obsolete.m4 # (which is called by configure script)) Makefile src/Example.jpg +Example.jpg diff --git a/config.h b/config.h index 21b5317..be6d700 100644 --- a/config.h +++ b/config.h @@ -28,6 +28,9 @@ /* Define to 1 if you have the `gd' library (-lgd). */ #define HAVE_LIBGD 1 +/* Define to 1 if you have the `gmp' library (-lgmp). */ +#define HAVE_LIBGMP 1 + /* Define to 1 if you have the `iniparser' library (-liniparser). */ #define HAVE_LIBINIPARSER 1 diff --git a/config.h.in b/config.h.in index 8aa3462..5cf039f 100644 --- a/config.h.in +++ b/config.h.in @@ -27,6 +27,9 @@ /* Define to 1 if you have the `gd' library (-lgd). */ #undef HAVE_LIBGD +/* Define to 1 if you have the `gmp' library (-lgmp). */ +#undef HAVE_LIBGMP + /* Define to 1 if you have the `iniparser' library (-liniparser). */ #undef HAVE_LIBINIPARSER diff --git a/configure b/configure index f9490de..bbbc17a 100755 --- a/configure +++ b/configure @@ -4322,6 +4322,45 @@ _ACEOF fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgmp" >&5 +$as_echo_n "checking for main in -lgmp... " >&6; } +if ${ac_cv_lib_gmp_main+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgmp $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_gmp_main=yes +else + ac_cv_lib_gmp_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gmp_main" >&5 +$as_echo "$ac_cv_lib_gmp_main" >&6; } +if test "x$ac_cv_lib_gmp_main" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBGMP 1 +_ACEOF + + LIBS="-lgmp $LIBS" + +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lz" >&5 $as_echo_n "checking for main in -lz... " >&6; } if ${ac_cv_lib_z_main+:} false; then : diff --git a/libbacteria/Makefile.am b/libbacteria/Makefile.am index 144ee0b..f05ba40 100644 --- a/libbacteria/Makefile.am +++ b/libbacteria/Makefile.am @@ -2,7 +2,7 @@ AUTOMAKE_OPTIONS = subdir-objects lib_LIBRARIES = libbacteria.a libbacteria_a_SOURCES = cryptocoins.c cryptocoins.h json_rpc.c macros.h\ - lua/afirst.c lua/libcrypto.c lua/libjson.c lua/libencdec.c lua/libimages.c \ + lua/afirst.c lua/libcrypto.c lua/libjson.c lua/libencdec.c lua/libimages.c lua/libgmp.c \ encdec/async/x25519.c encdec/sync/AES.c \ images/images.c libbacteria_a_CFLAGS = -g -I /usr/include/luajit-2.1/ -I$(topdir)/libbacteria/ -I$(topdir)/luasql/src -L$(topdir)/luasql/src -I/usr/include/lua5.1/ diff --git a/libbacteria/assets/gmp.c b/libbacteria/assets/gmp.c index e47ab4b..7bc54ce 100644 --- a/libbacteria/assets/gmp.c +++ b/libbacteria/assets/gmp.c @@ -1,17 +1,39 @@ #include #include + + +void mul(mpz_t result, const mpz_t param, unsigned long n){ + unsigned long i; + mpz_mul_ui(result, param, n); + for(i = 1; i +//static void gmpZToBuf(mpz_t v, char * buf, size_t bufSize){ +// gmp_snprintf(buf, bufSize, "%Zd", v); +//} + +int luaopen_liblgmp(lua_State *L){ + luaL_openlib(L, "lgmp", lgmp, 0); + return 1; +} + +/*Integer*/ +#define GETMP(prefix,name,where)\ + mp##prefix * l##name = (mp##prefix *)lua_touserdata(L, where); + +INITLUAFUNC(mpz_init){ + mpz_t * rt = malloc(sizeof(mpz_t) * 1); + mpz_init(*rt); + lua_pushlightuserdata(L, rt); + return 1; +} + +INITLUAFUNC(mpz_init_str){ + mpz_t * rt = malloc(sizeof(mpz_t) * 1); + const char * val = (const char*)luaL_checkstring(L, 2); + mpz_init_set_str(*rt,val,0); + lua_pushlightuserdata(L, rt); + return 1; +} + +INITLUAFUNC(mpz_add){ + GETMP(z_t, a,1); + GETMP(z_t, b,2); + GETMP(z_t, c,3); + mpz_add(*la,*lb,*lc); + return 0; +} + +INITLUAFUNC(mpz_add_ui){ + GETMP(z_t, a,1); + GETMP(z_t, b,2); + int c = luaL_checknumber(L,3); + mpz_add_ui(*la,*lb,c); + return 0; +} + +INITLUAFUNC(mpz_getstr){ + GETMP(z_t, a,1); + int c = luaL_checknumber(L,2); + char buf[c]; + gmp_snprintf(buf,c, "%Zd", *la); + lua_pushstring(L,buf); + return 1; +} + +INITLUAFUNC(mpz_clear){ + GETMP(z_t, a,1); + if( *la == NULL )luaL_error(L,"Invalid mpz pointer"); + mpz_clear(*la); + free(la); + return 0; +} + +/*Float*/ +INITLUAFUNC(mpf_init){ + +} + +INITLUAFUNC(mpf_add){ + +} + +INITLUAFUNC(mpf_add_ui){ + +} + +INITLUAFUNC(mpf_getstr){ + +} + +INITLUAFUNC(mpf_init_str){ + +} + +INITLUAFUNC(mpf_clear){ + +} + + +/*Rational*/ + +INITLUAFUNC(mpq_init){ + +} + +INITLUAFUNC(mpq_add){ + +} + +INITLUAFUNC(mpq_add_ui){ + +} +INITLUAFUNC(mpq_init_str){ + +} + +INITLUAFUNC(mpq_getstr){ + +} + +INITLUAFUNC(mpq_clear){ + +} diff --git a/libbacteria/lua/libgmp.h b/libbacteria/lua/libgmp.h new file mode 100644 index 0000000..d03eb85 --- /dev/null +++ b/libbacteria/lua/libgmp.h @@ -0,0 +1,50 @@ +#pragma once +#include"lua.h" +#include + + INITLUAFUNC(mpz_init); + INITLUAFUNC(mpz_init_str); + INITLUAFUNC(mpz_getstr); + INITLUAFUNC(mpz_add); + INITLUAFUNC(mpz_add_ui); + INITLUAFUNC(mpz_clear); + + INITLUAFUNC(mpf_init); + INITLUAFUNC(mpf_add); + INITLUAFUNC(mpf_add_ui); + INITLUAFUNC(mpf_getstr); + INITLUAFUNC(mpf_init_str); + INITLUAFUNC(mpf_clear); + + INITLUAFUNC(mpq_init); + INITLUAFUNC(mpq_add); + INITLUAFUNC(mpq_add_ui); + INITLUAFUNC(mpq_getstr); + INITLUAFUNC(mpq_init_str); + INITLUAFUNC(mpq_clear); + +static const struct luaL_reg lgmp [] = { + LUAPAIR(mpz_init) + LUAPAIR(mpz_init_str) + LUAPAIR(mpz_getstr) + LUAPAIR(mpz_add) + LUAPAIR(mpz_add_ui) + LUAPAIR(mpz_clear) + + LUAPAIR(mpf_init) + LUAPAIR(mpf_add) + LUAPAIR(mpf_add_ui) + LUAPAIR(mpf_getstr) + LUAPAIR(mpf_init_str) + LUAPAIR(mpf_clear) + + LUAPAIR(mpq_init) + LUAPAIR(mpq_add) + LUAPAIR(mpq_add_ui) + LUAPAIR(mpq_getstr) + LUAPAIR(mpq_init_str) + LUAPAIR(mpq_clear) + {NULL,NULL} +}; + +int luaopen_liblgmp(lua_State *L); diff --git a/src/Example.jpg b/src/Example.jpg deleted file mode 100644 index c4c8797..0000000 Binary files a/src/Example.jpg and /dev/null differ diff --git a/src/luasubmodules/init.lua b/src/luasubmodules/init.lua index 540b46a..4cbf3d6 100644 --- a/src/luasubmodules/init.lua +++ b/src/luasubmodules/init.lua @@ -34,17 +34,20 @@ local function check_leak_memory(fcoin,scoin) --print(tmp) print(tmp['result']) end ---tgst=cryptocoins.gettable(t,'tgst') ---tdash=cryptocoins.gettable(t,'tdash') -tgst = bacteria.coins['tgst'] -tdash = bacteria.coins['tdash'] -check_leak_memory(tgst,tdash) + +local function CryptocoinsTest() + --tgst=cryptocoins.gettable(t,'tgst') + --tdash=cryptocoins.gettable(t,'tdash') + tgst = bacteria.coins['tgst'] + tdash = bacteria.coins['tdash'] + check_leak_memory(tgst,tdash) --- example in luasubmodules/bencdec.lua ---key,iv=bacteria_aes.genKeyIV() + -- example in luasubmodules/bencdec.lua + --key,iv=bacteria_aes.genKeyIV() +end + -msg="Hello AES_ECB, AES_CBC, ChaCha20! " local function addChar(ch,time) ret="" while time > 0 do @@ -53,10 +56,7 @@ local function addChar(ch,time) end return ret end -msg=msg .. addChar("s",666) -b=bacteria_aes.new() --("mysmallkey") -- ("mykey","myiv") 32,16 bytes ---print("key:", b:getKey(), "IV: ",b:getIV()) local function checkAllTypes(b,msg) -- b:encrypt(msg) -- b:decrypt( b:getAESData_rawEnc() ) @@ -83,50 +83,57 @@ local function checkAllTypes(b,msg) end -print("AES check!") -checkAllTypes(b,"is example message aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafasdjasdjkfsdfjasdfjiaodfasdfjiasdijfasidfadfiaojsdijfoasdfiaojsdfiojasdfijasdfuhasdufhasdiufhasidufashdfiasudhfiasudhfiuasdfihuSOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFSDJKFASDJFASJDFQJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") -print("\n\n\n\n\n\n\n\n\n\nx25519 + AES check!\n\n\n\n\n\n\n\n\n\n") -k1 = bacteria_aes:newKeyPair() -k2 = bacteria_aes:newKeyPair() -k1:initKeyPair() -k2:initKeyPair() -pub1 = k1:getPubKey() -pub2 = k2:getPubKey() -priv2 = k2:getPrivKey() +local function EncDecTest() + msg="Hello AES_ECB, AES_CBC, ChaCha20! " + msg=msg .. addChar("s",666) + + b=bacteria_aes.new() --("mysmallkey") -- ("mykey","myiv") 32,16 bytes + --print("key:", b:getKey(), "IV: ",b:getIV()) + print("AES check!") + checkAllTypes(b,"is example message aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafasdjasdjkfsdfjasdfjiaodfasdfjiasdijfasidfadfiaojsdijfoasdfiaojsdfiojasdfijasdfuhasdufhasdiufhasidufashdfiasudhfiasudhfiuasdfihuSOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFSDJKFASDJFASJDFQJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") + print("\n\n\n\n\n\n\n\n\n\nx25519 + AES check!\n\n\n\n\n\n\n\n\n\n") + k1 = bacteria_aes:newKeyPair() + k2 = bacteria_aes:newKeyPair() + k1:initKeyPair() + k2:initKeyPair() + pub1 = k1:getPubKey() + pub2 = k2:getPubKey() + priv2 = k2:getPrivKey() -print("Pub1: ", string.tohex(pub1), string.fromhex(string.tohex(pub1)) == pub1 ) -print("Pub2: ", string.tohex(pub2), string.fromhex(string.tohex(pub2)) == pub2 ) + print("Pub1: ", string.tohex(pub1), string.fromhex(string.tohex(pub1)) == pub1 ) + print("Pub2: ", string.tohex(pub2), string.fromhex(string.tohex(pub2)) == pub2 ) -k3 = bacteria_aes:newKeyPair() -k3:initKeyPair(pub2,priv2) ---print("Pub1: ", pub1) ---print("Priv2: ", priv2) ---print("Pub2: ", pub2) + k3 = bacteria_aes:newKeyPair() + k3:initKeyPair(pub2,priv2) + --print("Pub1: ", pub1) + --print("Priv2: ", priv2) + --print("Pub2: ", pub2) -pub3 = k3:getPubKey() -priv3 = k3:getPrivKey() + pub3 = k3:getPubKey() + priv3 = k3:getPrivKey() ---print("Pub3: ", pub3) ---print("Priv3: ", priv3) + --print("Pub3: ", pub3) + --print("Priv3: ", priv3) -shared0=k1:getSharedKey(pub2) -shared1=k2:getSharedKey(pub1) -shared2=k3:getSharedKey(pub1) ---print("Shared0:", shared0) ---print("Shared1:", shared1) + shared0=k1:getSharedKey(pub2) + shared1=k2:getSharedKey(pub1) + shared2=k3:getSharedKey(pub1) + --print("Shared0:", shared0) + --print("Shared1:", shared1) -aes1=bacteria_aes:new(shared0, "123456789012345") -aes=bacteria_aes:new(shared1, "123456789012345") -aes1:encrypt("TestMsg W10013291825328197ASHFASDF8932ASDF8532BUSAFD893251BSDFA78532BFW783125HBSFAD789aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafasdjasdjkfsdfjasdfjiaodfasdfjiasdijfasidfadfiaojsdijfoasdfiaojsdfiojasdfijasdfuhasdufhasdiufhasidufashdfiasudhfiasudhfiuasdfihuSOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFSDJKFASDJFASJDFQJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") ---print("Encrypted") -aes:decrypt(aes1:getAESData_rawEnc()) -aesdata_dec,saesdata_dec=aes:getAESData_dec() -print("Decrypted: ", aesdata_dec) + aes1=bacteria_aes:new(shared0, "123456789012345") + aes=bacteria_aes:new(shared1, "123456789012345") + aes1:encrypt("TestMsg W10013291825328197ASHFASDF8932ASDF8532BUSAFD893251BSDFA78532BFW783125HBSFAD789aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafasdjasdjkfsdfjasdfjiaodfasdfjiasdijfasidfadfiaojsdijfoasdfiaojsdfiojasdfijasdfuhasdufhasdiufhasidufashdfiasudhfiasudhfiuasdfihuSOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFSDJKFASDJFASJDFQJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") + --print("Encrypted") + aes:decrypt(aes1:getAESData_rawEnc()) + aesdata_dec,saesdata_dec=aes:getAESData_dec() + print("Decrypted: ", aesdata_dec) -k1.clear() -k2.clear() -k3.clear() + k1.clear() + k2.clear() + k3.clear() +end local function checkGD(width,height,quality) width = width or 120 @@ -171,7 +178,14 @@ local function checkGD(width,height,quality) --print((c), "size: ",s) images.gdFree(img) end -checkGD(120,120,100) - +--CryptocoinsTest() +--checkGD(120,120,100) +--EncDecTest() +print("GMP") +myZ = lgmp.mpz_init() +lgmp.mpz_add_ui(myZ,myZ, 1024) +lgmp.mpz_add_ui(myZ,myZ, 4201) +print("New value is:",lgmp.mpz_getstr(myZ, 128)) +lgmp.mpz_clear(myZ)