From 19ac791138552494003aebc41d054f6f1aec7c17 Mon Sep 17 00:00:00 2001 From: wipedlife Date: Thu, 24 Jun 2021 04:04:59 +0300 Subject: [PATCH] x25519 pre init --- libbacteria/encdec/async/x25519.c | 12 ++++----- libbacteria/lua/libencdec.c | 13 +++++++--- libbacteria/lua/libencdec.h | 5 +++- src/luasubmodules/bencdec.lua | 18 +++++++++++--- src/luasubmodules/init.lua | 41 ++++++++++++++++++++++--------- 5 files changed, 64 insertions(+), 25 deletions(-) diff --git a/libbacteria/encdec/async/x25519.c b/libbacteria/encdec/async/x25519.c index bd8f0e3..c53f868 100644 --- a/libbacteria/encdec/async/x25519.c +++ b/libbacteria/encdec/async/x25519.c @@ -3,18 +3,18 @@ static size_t len_key = LENKEY; struct keysPair createKeyPair(const uint8_t *priv, const uint8_t *pub) { struct keysPair ret; bzero(ret.pubKey, sizeof(ret.pubKey)); - EVP_PKEY_CTX *ctx = - /*(EVP_CIPHER_CTX*)*/ EVP_PKEY_CTX_new_id(NID_X25519, NULL); + EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new_id(NID_X25519, NULL); if (!ctx) { fprintf(stderr, "Cant create x25519 pair\n"); return ret; } - EVP_PKEY *privKey = - EVP_PKEY_new_raw_private_key(EVP_PKEY_X25519, NULL, priv, len_key); + EVP_PKEY * privKey = EVP_PKEY_new_raw_private_key(EVP_PKEY_X25519, NULL, priv, len_key); getRawPubKey(privKey, ret.pubKey); // EVP_PKEY_get_raw_public_key(privKey, ret.pubKey, &len_key); ret.privKey = privKey; // ret.pubKey = pubKey; + EVP_PKEY_CTX_free(ctx); + ctx = EVP_PKEY_CTX_new(privKey, NULL); ret.pKeyCtx = ctx; return ret; } @@ -86,9 +86,9 @@ uint8_t *getSharedKey(struct keysPair *pair, const uint8_t *pubPeer, EVP_PKEY *pkey = EVP_PKEY_new_raw_public_key(NID_X25519, NULL, pubPeer, len_key); - + if (EVP_PKEY_derive_set_peer(pair->pKeyCtx, pkey) <= 0) { - fprintf(stderr, "Seet peer key error\n"); + fprintf(stderr, "Set peer key error\n"); EVP_PKEY_free(pkey); return NULL; } diff --git a/libbacteria/lua/libencdec.c b/libbacteria/lua/libencdec.c index 819bbef..6abbc40 100644 --- a/libbacteria/lua/libencdec.c +++ b/libbacteria/lua/libencdec.c @@ -213,9 +213,7 @@ int lua_freeKeyPair(lua_State *L) { return 1; } -int lua_freeSharedKey(lua_State *L) { - -} +//int lua_freeSharedKey(lua_State *L) {} int lua_createKeyPair(lua_State *L) { uint8_t *pub = (uint8_t *)luaL_checkstring(L, 1); @@ -240,6 +238,15 @@ INITLUAFUNC(getPubKey){ lua_pushstring(L,in->pubKey); return 1; } +INITLUAFUNC(getPrivKey){ + struct keysPair *in = (struct keysPair *)lua_touserdata(L, 1); + if(in == NULL) luaL_error(L,"KeysPair broken"); + uint8_t retStr[LENKEY+1]; + retStr[LENKEY]=0; + getRawPrivKey(in->privKey,retStr); + lua_pushlstring(L, retStr, LENKEY+1); + return 1; +} int lua_getSharedKey(lua_State *L) { size_t skeylen; diff --git a/libbacteria/lua/libencdec.h b/libbacteria/lua/libencdec.h index 8758268..d9ed538 100644 --- a/libbacteria/lua/libencdec.h +++ b/libbacteria/lua/libencdec.h @@ -21,6 +21,7 @@ INITLUAFUNC(getAESData); INITLUAFUNC(getAESData_len); INITLUAFUNC(createAESData); INITLUAFUNC(getPubKey); +INITLUAFUNC(getPrivKey); //INITLUAFUNC(setKeyPair); struct lua_AESData{ @@ -28,13 +29,14 @@ struct lua_AESData{ size_t size; }; + static const struct luaL_reg encdeclib [] = { {"genRandBytes", lua_genRandBytes}, {"AESenc", lua_AESenc}, {"AESdec", lua_AESdec}, {"getKeyPair", lua_getKeyPair}, {"freeKeyPair", lua_freeKeyPair}, - {"freeSharedKey", lua_freeSharedKey}, + //{"freeSharedKey", lua_freeSharedKey}, {"getSharedKey", lua_getSharedKey}, {"createKeyPair", lua_createKeyPair}, {"getSharedKey", lua_getSharedKey}, @@ -43,6 +45,7 @@ static const struct luaL_reg encdeclib [] = { LUAPAIR(getAESData_len) LUAPAIR(createAESData) LUAPAIR(getPubKey) + LUAPAIR(getPrivKey) // LUAPAIR(setKeyPair) {NULL, NULL} }; diff --git a/src/luasubmodules/bencdec.lua b/src/luasubmodules/bencdec.lua index c9868a3..21ce167 100644 --- a/src/luasubmodules/bencdec.lua +++ b/src/luasubmodules/bencdec.lua @@ -3,16 +3,18 @@ baes = {} function baes:newKeyPair(keyPair) local obj = {} obj.keyPair=keyPair or {} - function obj.initKeyPair(pub,priv) + function obj:initKeyPair(pub,priv) + --print("init") if not obj.keyPair == {} then return false end keyPair = {} p = priv or nil pb = pub or nil if p == nil or pb == nil then - --print("geKeyPair()") + -- print("geKeyPair()") keyPair = encdec.getKeyPair(); else - --print("p != {} and pb != {}") + -- print("p != {} and pb != {}") + -- print("Pub: ", pub, "priv: ",priv) keyPair = encdec.createKeyPair(pub,priv) end obj.keyPair = keyPair @@ -30,7 +32,15 @@ function baes:newKeyPair(keyPair) --print("ret pub key",encdec.getPubKey(obj.keyPair)) return encdec.getPubKey(obj.keyPair) end - function obj.getSharedKey(key) + function obj:getPrivKey() + if obj.keyPair == nil then + print("PubKey is nil") + return nil + end + --print("ret pub key",encdec.getPubKey(obj.keyPair)) + return encdec.getPrivKey(obj.keyPair) + end + function obj:getSharedKey(key) --print("getSharedKey and pub is: ", key) if obj.keyPair == {} then return nil end if key == nil then error("PubKey not will be nil") end diff --git a/src/luasubmodules/init.lua b/src/luasubmodules/init.lua index 94781da..48d6e15 100644 --- a/src/luasubmodules/init.lua +++ b/src/luasubmodules/init.lua @@ -83,26 +83,45 @@ 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() ---checkAllTypes(b,"is example message aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafasdjasdjkfsdfjasdfjiaodfasdfjiasdijfasidfadfiaojsdijfoasdfiaojsdfiojasdfijasdfuhasdufhasdiufhasidufashdfiasudhfiasudhfiuasdfihuSOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFSDJKFASDJFASJDFQJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") -k1 = bacteria_aes.newKeyPair() -k2 = bacteria_aes.newKeyPair() -k1.initKeyPair() -k2.initKeyPair() -pub1 = k1.getPubKey() -pub2 = k2.getPubKey() + + +k3 = bacteria_aes:newKeyPair() +k3:initKeyPair(pub2,priv2) --print("Pub1: ", pub1) +--print("Priv2: ", priv2) --print("Pub2: ", pub2) -shared0=k1.getSharedKey(pub2) -shared1=k2.getSharedKey(pub1) + +pub3 = k3:getPubKey() +priv3 = k3:getPrivKey() + +--print("Pub3: ", pub3) +--print("Priv3: ", priv3) + +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=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()