Skip to content
Snippets Groups Projects
Commit 0e32b72b authored by alexey.stratulat's avatar alexey.stratulat
Browse files

[+] Made wrapping implementation of fast encryption algorithm AES, OAES....

[+] Made wrapping implementation of fast encryption algorithm AES, OAES. Written test for checking this wrapping
parent 6fef53aa
No related branches found
No related tags found
1 merge request!26Support 3689
......@@ -7,6 +7,7 @@
#include "wrapping_base64.h"
#include "wrapping_dap_enc_key.h"
#include "wrapping_dap_enc_iaes.h"
#include "wrapping_dap_enc_oaes.h"
#ifdef __cplusplus
extern "C" {
......@@ -40,10 +41,19 @@ static PyMethodDef DapCryptoMethods[] = {
/*IAES256*/
{"newKeyIAES", dap_enc_iaes_key_new_py, METH_VARARGS, ""},
{"deleteKeyIAES", dap_enc_iaes_key_delete_py, METH_VARARGS, ""},
{"generateKeyIAES", dap_enc_iaes_key_generate_py, METH_VARARGS, ""},
{"encodeSizeIAES256", dap_enc_iaes256_calc_encode_size_py, METH_VARARGS, ""},
{"decodeSizeIAES256", dap_enc_iaes256_calc_decode_size_py, METH_VARARGS, ""},
{"encryptIAES256CBCFast", dap_enc_iaes256_cbc_encrypt_fast_py, METH_VARARGS, ""},
{"decryptIAES256CBCFast", dap_enc_iaes256_cbc_decrypt_fast_py, METH_VARARGS, ""},
/*OAES*/
{"newKeyOAES", dap_enc_oaes_key_new_py, METH_VARARGS, ""},
{"deleteKeyOAES", dap_enc_oaes_key_delete_py, METH_VARARGS, ""},
{"generateKeyOAES", dap_enc_oaes_key_generate_py, METH_VARARGS, ""},
{"encodeSizeOAES", dap_enc_oaes_calc_encode_size_py, METH_VARARGS, ""},
{"decodeSizeOAES", dap_enc_oaes_calc_decode_size_py, METH_VARARGS, ""},
{"encryptOAESFast", dap_enc_oaes_encrypt_fast_py, METH_VARARGS, ""},
{"decryptOAESFast", dap_enc_oaes_decrypt_fast_py, METH_VARARGS, ""},
{NULL, NULL, 0, NULL}
};
......
#include "Python.h"
#include "dap_enc_oaes.h"
#include "key_list.h"
#ifdef __cplusplus
extern "C" {
#endif
key_list_t *keys_oaes;
PyObject *dap_enc_oaes_key_new_py(PyObject *self, PyObject *args);//struct dap_enc_key * a_key);
PyObject *dap_enc_oaes_key_delete_py(PyObject *self, PyObject *args);//struct dap_enc_key *a_key);
PyObject *dap_enc_oaes_key_generate_py(PyObject *self, PyObject *args);//struct dap_enc_key * a_key, const void *kex_buf,
//size_t kex_size, const void * seed, size_t seed_size, size_t key_size);
PyObject *dap_enc_oaes_calc_decode_size_py(PyObject *self, PyObject *args);//const size_t size_in);
PyObject *dap_enc_oaes_calc_encode_size_py(PyObject *self, PyObject *args);//const size_t size_in);
PyObject *dap_enc_oaes_decrypt_py(PyObject *self, PyObject *args);//struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out);
PyObject *dap_enc_oaes_encrypt_py(PyObject *self, PyObject *args);//struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out);
// Writes result ( out ) in already allocated buffer
PyObject *dap_enc_oaes_decrypt_fast_py(PyObject *self, PyObject *args);//struct dap_enc_key * a_key, const void * a_in,
//size_t a_in_size, void * buf_out, size_t buf_out_size);
// Writes result ( out ) in already allocated buffer
PyObject *dap_enc_oaes_encrypt_fast_py(PyObject *self, PyObject *args);//struct dap_enc_key * a_key, const void * a_in,
//size_t a_in_size, void * buf_out, size_t buf_out_size);
#ifdef __cplusplus
}
#endif
......@@ -12,6 +12,7 @@ static PyObject* dap_crypto_init(PyObject *self, PyObject *args){
}
keys = key_list_init();
keys_iaes = keys;
keys_oaes = keys;
return PyLong_FromLong(0);
}
......
#include "wrapping_dap_enc_oaes.h"
PyObject *dap_enc_oaes_key_new_py(PyObject *self, PyObject *args){
uint8_t key_id;
if (PyArg_ParseTuple(args, "h", &key_id)){
return NULL;
}
dap_enc_key_t *key = key_list_get_key(keys_oaes, key_id);
if (key == NULL){
return NULL;
}
dap_enc_oaes_key_new(key);
return PyLong_FromLong(0);
}
PyObject *dap_enc_oaes_key_delete_py(PyObject *self, PyObject *args){
uint8_t key_id;
if (PyArg_ParseTuple(args, "h", &key_id)){
return NULL;
}
dap_enc_key_t *key = key_list_get_key(keys_oaes, key_id);
if (key == NULL){
return NULL;
}
dap_enc_key_delete(key);
return PyLong_FromLong(0);
}
PyObject *dap_enc_oaes_key_generate_py(PyObject *self, PyObject *args){
uint8_t in_key_id;
PyBytesObject *in_kex_buf;
size_t in_kex_size;
PyBytesObject *in_seed;
size_t in_seed_size;
if (PyArg_ParseTuple(args, "h|S|n|S|n", &in_key_id, &in_kex_buf, &in_kex_size, &in_seed, &in_seed_size)){
return NULL;
}
dap_enc_key_t *key = key_list_get_key(keys_oaes, in_key_id);
if (key == NULL){
return NULL;
}
size_t key_size = sizeof(key);
void* kex_buf = NULL;
PyBytes_AsStringAndSize((PyObject*)in_kex_buf, kex_buf, (Py_ssize_t*)in_kex_size);
void* seed_buf = NULL;
PyBytes_AsStringAndSize((PyObject*)in_seed, seed_buf, (Py_ssize_t*)in_seed_size);
dap_enc_oaes_key_generate(key, kex_buf, in_kex_size, seed_buf, in_seed_size, key_size);
return PyLong_FromLong(0);
}
PyObject *dap_enc_oaes_calc_decode_size_py(PyObject *self, PyObject *args){
size_t size;
if (!PyArg_ParseTuple(args, "n", &size)){
return NULL;
}
size_t new_size = dap_enc_oaes_calc_decode_size(size);
return PyLong_FromSize_t(new_size);
}
PyObject *dap_enc_oaes_calc_encode_size_py(PyObject *self, PyObject *args){
size_t size;
if (!PyArg_ParseTuple(args, "n", &size)){
return NULL;
}
size_t new_size = dap_enc_oaes_calc_encode_size(size);
return PyLong_FromSize_t(new_size);
}
PyObject *dap_enc_oaes_decrypt_py(PyObject *self, PyObject *args){
//TODO
return PyLong_FromLong(0);
}
PyObject *dap_enc_oaes_encrypt_py(PyObject *self, PyObject *args){
//TODO
return PyLong_FromLong(0);
}
// Writes result ( out ) in already allocated buffer
PyObject *dap_enc_oaes_decrypt_fast_py(PyObject *self, PyObject *args){
uint8_t key_id;
PyBytesObject *a_in;
size_t a_in_size;
size_t buf_out_size;
if (!PyArg_ParseTuple(args, "h|S|n|n", &key_id, &a_in, &a_in_size, &buf_out_size)){
return NULL;
}
dap_enc_key_t *key = key_list_get_key(keys_oaes, key_id);
if (key == NULL){
return NULL;
}
void *in = PyBytes_AsString((PyObject*)a_in);
void *out = DAP_NEW_SIZE(void*, buf_out_size);
size_t res_denc_size = dap_enc_oaes_decrypt_fast(key, in, a_in_size, out, buf_out_size);
PyBytesObject *bytes_out = (PyBytesObject*)PyBytes_FromStringAndSize(out, (Py_ssize_t)res_denc_size);
return Py_BuildValue("S", bytes_out);
}
// Writes result ( out ) in already allocated buffer
PyObject *dap_enc_oaes_encrypt_fast_py(PyObject *self, PyObject *args){
uint8_t key_id;
PyBytesObject *a_in;
size_t a_in_size;
size_t buf_out_size;
if (!PyArg_ParseTuple(args, "h|S|n|n", &key_id, &a_in, &a_in_size, &buf_out_size)){
return NULL;
}
dap_enc_key_t *key = key_list_get_key(keys_oaes, key_id);
if (key == NULL){
return NULL;
}
void *in = PyBytes_AsString((PyObject*)a_in);
void *out = DAP_NEW_SIZE(void*, buf_out_size);
size_t res_enc_size = dap_enc_oaes_encrypt_fast(key, in, a_in_size, out, buf_out_size);
PyBytesObject *bytes_out = (PyBytesObject*)PyBytes_FromStringAndSize(out, (Py_ssize_t)res_enc_size);
return Py_BuildValue("S", bytes_out);
}
import libdap_crypto_python_module as crypto
import sys
print ("Start test crypto OAES")
s = "Test! I will crush OAES!"
print ("Input data: "+s)
kex_buff = bytes("114151400014314485131FGXVGHcJFIH", "utf-8")
size_kex_buff = len(kex_buff)
seed = bytes(112771128)
seed_size = len(seed)
crypto.init()
key_id = crypto.generateNewKey(1, kex_buff, size_kex_buff, seed, seed_size, 32)
source = bytes(s, "utf-8")
enc = crypto.encryptOAESFast(key_id, source, len(source), 2048)
decrypt = crypto.decryptOAESFast(key_id, enc, len(enc), 2048)
print (decrypt)
if bytes(s, "utf-8") == decrypt:
print ("TEST 1. Encode/Decode OAES FAST done")
else:
print ("TEST 1. Encode/Decode OAES CBC FAST faild")
#print ("Test Base64 URLSAFE")
#u = "http://kelvin.foundation/"
#crypt_u = crypto.encodeBase64(bytes(u, "utf-8"), 2)
#decrypt_u = crypto.decodeBase64(crypt_u)
#if bytes(u, "utf-8") == decrypt_u:
# print ("TEST 2. Encode/Decode base64 urlsafe done")
#else:
# print ("TEST 2. Encode/Decode base64 urlsafe faild")
#
sys.exit(0)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment