From 6fef53aa9dc297394a4691e6c9ebe2806ae0647c Mon Sep 17 00:00:00 2001
From: Alexey Stratulat <alexey.stratulat@demlabs.net>
Date: Thu, 25 Jul 2019 17:09:47 +0700
Subject: [PATCH] [*] Fix.

---
 include/key_list.h         |  6 ++++++
 src/key_list.c             |  2 +-
 src/libdap-crypto-python.c |  1 +
 src/wrapping_dap_enc_key.c | 35 +++++++++++++++++++++--------------
 4 files changed, 29 insertions(+), 15 deletions(-)

diff --git a/include/key_list.h b/include/key_list.h
index fffa8638..2159cb9f 100644
--- a/include/key_list.h
+++ b/include/key_list.h
@@ -1,3 +1,7 @@
+#ifndef KEY_LIST_H
+#define KEY_LIST_H
+
+
 #include "dap_common.h"
 #include "dap_enc_key.h"
 #include <stdint.h>
@@ -24,3 +28,5 @@ dap_enc_key_t *key_list_get_key(key_list_t *list, uint8_t key);
 #ifdef __cplusplus
 }
 #endif
+
+#endif
diff --git a/src/key_list.c b/src/key_list.c
index 9f09de1a..83e35a9d 100644
--- a/src/key_list.c
+++ b/src/key_list.c
@@ -54,4 +54,4 @@ dap_enc_key_t *key_list_get_key(key_list_t *list, uint8_t key){
         return NULL;
     }
     return list->keys[index];
-}
\ No newline at end of file
+}
diff --git a/src/libdap-crypto-python.c b/src/libdap-crypto-python.c
index 51d93c61..8baebb89 100644
--- a/src/libdap-crypto-python.c
+++ b/src/libdap-crypto-python.c
@@ -11,6 +11,7 @@ static PyObject* dap_crypto_init(PyObject *self, PyObject *args){
         return PyLong_FromLong(-2);
     }
     keys = key_list_init();
+    keys_iaes = keys;
     return PyLong_FromLong(0);
 }
 
diff --git a/src/wrapping_dap_enc_key.c b/src/wrapping_dap_enc_key.c
index a07892a4..5e608da7 100644
--- a/src/wrapping_dap_enc_key.c
+++ b/src/wrapping_dap_enc_key.c
@@ -32,11 +32,11 @@ PyObject* dap_enc_key_get_dec_size_py(PyObject *self, PyObject *args){
 
 // allocate memory for key struct
 PyObject* dap_enc_key_new_py(PyObject *self, PyObject *args){
-    int type_key;
-    if(!PyArg_ParseTuple(args, "i", &type_key)){
+    uint8_t type_key;
+    if(!PyArg_ParseTuple(args, "h", &type_key)){
         return NULL;
     }
-    if (type_key < 0 || type_key > 16){
+    if (type_key > 16){
         return PyLong_FromLong(-1);
     }
     dap_enc_key_t *new_key = dap_enc_key_new(type_key);
@@ -45,18 +45,25 @@ PyObject* dap_enc_key_new_py(PyObject *self, PyObject *args){
 }
 
 /// default gen key
-PyObject *dap_enc_key_new_generate_py(PyObject *self, PyObject *args){ ///!!!!!!! ERR
-    /*int type_key;
-    PyObject *kex_buf;
-    size_t kex_size;
-    PyObject* seed,
-    size_t seed_size;
-    size_t key_size
-    if (PyArg_ParseTuple(args, "i|O|n|O|n|n", &type_key, &kex_buf, &kex_size, &seed, &seed_size, &key_size)){
+PyObject *dap_enc_key_new_generate_py(PyObject *self, PyObject *args){
+    uint8_t in_type_key;
+    PyBytesObject *in_kex_buf;
+    size_t in_kex_size;
+    PyBytesObject *in_seed;
+    size_t in_seed_size;
+    size_t in_key_size;
+    if (!PyArg_ParseTuple(args, "h|S|n|S|n|n", &in_type_key, &in_kex_buf, &in_kex_size, &in_seed,
+                         &in_seed_size, &in_key_size)){
         return NULL;
     }
-    //dap_enc_key_new_generate - restart*/
-    return PyLong_FromLong(0);
+    if (in_type_key > 16){
+        return PyLong_FromLong(-1);
+    }
+    void *kex_buf = PyBytes_AsString((PyObject*)in_kex_buf);
+    void *seed = PyBytes_AsString((PyObject*)in_seed);
+    dap_enc_key_t *new_key = dap_enc_key_new_generate(in_type_key, kex_buf, in_kex_size, seed, in_seed_size, in_key_size);
+    uint8_t new_key_id = key_list_add_element(keys, new_key);
+    return PyLong_FromLong(new_key_id);
 }
 
 // update struct dap_enc_key_t after insert foreign keys
@@ -134,4 +141,4 @@ PyObject *dap_enc_key_delete_py(PyObject *self, PyObject *args){
     key_list_del_element(keys, key_id);
     dap_enc_key_delete(key);
     return PyLong_FromLong(0);
-}
\ No newline at end of file
+}
-- 
GitLab