x25519 pre init

master
wipedlife 2021-06-24 04:04:59 +03:00
parent 53e658fa7b
commit 19ac791138
5 changed files with 64 additions and 25 deletions

View File

@ -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;
}

View File

@ -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;

View File

@ -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}
};

View File

@ -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

View File

@ -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()