From d6b2f2cdd1d2635a76e6232d79f79efd0739fec6 Mon Sep 17 00:00:00 2001
From: Alexey Stratulat <alexey.stratulat@demlabs.net>
Date: Tue, 10 Sep 2019 14:42:58 +0700
Subject: [PATCH] [+] Added new objects of type CryptoKeyType - implements an
 enumeration of the types of supported keys, and CryptoDataKey - implements an
 enumeration of the types of transmitted data.

---
 include/libdap_crypto_data_type.h       | 74 ++++++++++++++++++
 include/libdap_crypto_key_type_python.h | 99 +++++++++++++++++++++++++
 src/libdap_crypto_key_type_python.c     | 56 ++++++++++++++
 3 files changed, 229 insertions(+)
 create mode 100644 include/libdap_crypto_data_type.h
 create mode 100644 include/libdap_crypto_key_type_python.h
 create mode 100644 src/libdap_crypto_key_type_python.c

diff --git a/include/libdap_crypto_data_type.h b/include/libdap_crypto_data_type.h
new file mode 100644
index 00000000..15a8599c
--- /dev/null
+++ b/include/libdap_crypto_data_type.h
@@ -0,0 +1,74 @@
+#include "Python.h"
+#include "dap_enc_key.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct PyCryptoDataType{
+    PyObject_HEAD
+}PyCryptoDataTypeObjecy;
+
+static PyObject *get_ENC_DATA_TYPE_RAW(){
+    return PyLong_FromLong(DAP_ENC_DATA_TYPE_RAW);
+}
+static PyObject *get_ENC_DATA_TYPE_B64(){
+    return PyLong_FromLong(DAP_ENC_DATA_TYPE_B64);
+}
+static PyObject *get_ENC_DATA_TYPE_B64_URLSAFE(){
+    return PyLong_FromLong(DAP_ENC_DATA_TYPE_B64_URLSAFE);
+}
+
+static PyMethodDef PyCryptoDataTypeObjecyMethods[] = {
+        {"DAP_ENC_DATA_TYPE_RAW", (PyCFunction)get_ENC_DATA_TYPE_RAW, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_DATA_TYPE_B64", (PyCFunction)get_ENC_DATA_TYPE_B64, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_DATA_TYPE_B64_URLSAFE", (PyCFunction)get_ENC_DATA_TYPE_B64_URLSAFE, METH_NOARGS | METH_STATIC, ""},
+
+        {NULL, NULL, 0, NULL}
+};
+
+static PyTypeObject CryptoDataTypeObjecy_CryptoDataTypeObjecyType = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "libCellFrame.CryptoDataType",             /* tp_name */
+    sizeof(PyCryptoDataTypeObjecy),             /* tp_basicsize */
+    0,                         /* tp_itemsize */
+    0,//(destructor)Noddy_dealloc, /* tp_dealloc */
+    0,                         /* tp_print */
+    0,                         /* tp_getattr */
+    0,                         /* tp_setattr */
+    0,                         /* tp_reserved */
+    0,                         /* tp_repr */
+    0,                         /* tp_as_number */
+    0,                         /* tp_as_sequence */
+    0,                         /* tp_as_mapping */
+    0,                         /* tp_hash  */
+    0,                         /* tp_call */
+    0,                         /* tp_str */
+    0,                         /* tp_getattro */
+    0,                         /* tp_setattro */
+    0,                         /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT |
+        Py_TPFLAGS_BASETYPE,   /* tp_flags */
+    "Crypto data type objects",           /* tp_doc */
+    0,		               /* tp_traverse */
+    0,		               /* tp_clear */
+    0,		               /* tp_richcompare */
+    0,		               /* tp_weaklistoffset */
+    0,		               /* tp_iter */
+    0,		               /* tp_iternext */
+    PyCryptoDataTypeObjecyMethods,             /* tp_methods */
+    0,                         /* tp_members */
+    0,                         /* tp_getset */
+    0,                         /* tp_base */
+    0,                         /* tp_dict */
+    0,                         /* tp_descr_get */
+    0,                         /* tp_descr_set */
+    0,                         /* tp_dictoffset */
+    0,//(initproc)PyDapEventsObject_init,//(initproc)Noddy_init,      /* tp_init */
+    0,                         /* tp_alloc */
+    PyType_GenericNew,//PyDapEventsObject_new,//Noddy_new,                 /* tp_new */
+};
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/include/libdap_crypto_key_type_python.h b/include/libdap_crypto_key_type_python.h
new file mode 100644
index 00000000..1f60614a
--- /dev/null
+++ b/include/libdap_crypto_key_type_python.h
@@ -0,0 +1,99 @@
+#include "Python.h"
+#include "dap_enc_key.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct PyCryptoKeyType{
+    PyObject_HEAD
+}PyCryptoKeyTypeObjecy;
+
+PyObject *get_ENC_KEY_TYPE_IAES();
+PyObject *get_ENC_KEY_TYPE_OAES();
+PyObject *get_ENC_KEY_TYPE_RLWE_NEWHOPE();
+PyObject *get_ENC_KEY_TYPE_SIDH_CLN16();
+PyObject *get_ENC_KEY_TYPE_DEFEO();
+PyObject *get_ENC_KEY_TYPE_MSRLN();
+PyObject *get_ENC_KEY_TYPE_MSRLN16();
+PyObject *get_ENC_KEY_TYPE_RLWE_BCNS15();
+PyObject *get_ENC_KEY_TYPE_LWE_FRODO();
+PyObject *get_ENC_KEY_TYPE_SIDH_IQC_REF();
+PyObject *get_ENC_KEY_TYPE_CODE_MCBITS();
+PyObject *get_ENC_KEY_TYPE_NTRU();
+PyObject *get_ENC_KEY_TYPE_MLWE_KYBER();
+PyObject *get_ENC_KEY_TYPE_SIG_PICNIC();
+PyObject *get_ENC_KEY_TYPE_SIG_BLISS();
+PyObject *get_ENC_KEY_TYPE_SIG_TESLA();
+PyObject *get_ENC_KEY_TYPE_SIG_DILITHIUM();
+PyObject *get_ENC_KEY_TYPE_NULL();
+
+static PyMethodDef PyCryptoKeyTypeObjecyMethods[] = {
+        {"DAP_ENC_KEY_TYPE_IAES", (PyCFunction)get_ENC_KEY_TYPE_IAES, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_OAES", (PyCFunction)get_ENC_KEY_TYPE_OAES, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_RLWE_NEWHOPE", (PyCFunction)get_ENC_KEY_TYPE_RLWE_NEWHOPE, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_SIDH_CLN16", (PyCFunction)get_ENC_KEY_TYPE_SIDH_CLN16, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_DEFEO", (PyCFunction)get_ENC_KEY_TYPE_DEFEO, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_MSRLN", (PyCFunction)get_ENC_KEY_TYPE_MSRLN, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_MSRLN16", (PyCFunction)get_ENC_KEY_TYPE_MSRLN16, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_RLWE_BCNS15", (PyCFunction)get_ENC_KEY_TYPE_RLWE_BCNS15, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_LWE_FRODO", (PyCFunction)get_ENC_KEY_TYPE_LWE_FRODO, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_SIDH_IQC_REF", (PyCFunction)get_ENC_KEY_TYPE_SIDH_IQC_REF, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_CODE_MCBITS", (PyCFunction)get_ENC_KEY_TYPE_CODE_MCBITS, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_NTRU", (PyCFunction)get_ENC_KEY_TYPE_NTRU, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_MLWE_KYBER", (PyCFunction)get_ENC_KEY_TYPE_MLWE_KYBER, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_SIG_PICNIC", (PyCFunction)get_ENC_KEY_TYPE_SIG_PICNIC, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_SIG_BLISS", (PyCFunction)get_ENC_KEY_TYPE_SIG_BLISS, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_SIG_TESLA", (PyCFunction)get_ENC_KEY_TYPE_SIG_TESLA, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_SIG_DILITHIUM", (PyCFunction)get_ENC_KEY_TYPE_SIG_DILITHIUM, METH_NOARGS | METH_STATIC, ""},
+        {"DAP_ENC_KEY_TYPE_NULL", (PyCFunction)get_ENC_KEY_TYPE_NULL, METH_NOARGS | METH_STATIC, ""},
+
+
+        {NULL, NULL, 0, NULL}
+};
+
+static PyTypeObject CryptoKeyTypeObjecy_CryptoKeyTypeObjecyType = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "libCellFrame.CryptoKeyType",             /* tp_name */
+    sizeof(PyCryptoKeyTypeObjecy),             /* tp_basicsize */
+    0,                         /* tp_itemsize */
+    0,//(destructor)Noddy_dealloc, /* tp_dealloc */
+    0,                         /* tp_print */
+    0,                         /* tp_getattr */
+    0,                         /* tp_setattr */
+    0,                         /* tp_reserved */
+    0,                         /* tp_repr */
+    0,                         /* tp_as_number */
+    0,                         /* tp_as_sequence */
+    0,                         /* tp_as_mapping */
+    0,                         /* tp_hash  */
+    0,                         /* tp_call */
+    0,                         /* tp_str */
+    0,                         /* tp_getattro */
+    0,                         /* tp_setattro */
+    0,                         /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT |
+        Py_TPFLAGS_BASETYPE,   /* tp_flags */
+    "Crypto keys type objects",           /* tp_doc */
+    0,		               /* tp_traverse */
+    0,		               /* tp_clear */
+    0,		               /* tp_richcompare */
+    0,		               /* tp_weaklistoffset */
+    0,		               /* tp_iter */
+    0,		               /* tp_iternext */
+    PyCryptoKeyTypeObjecyMethods,             /* tp_methods */
+    0,                         /* tp_members */
+    0,                         /* tp_getset */
+    0,                         /* tp_base */
+    0,                         /* tp_dict */
+    0,                         /* tp_descr_get */
+    0,                         /* tp_descr_set */
+    0,                         /* tp_dictoffset */
+    0,//(initproc)PyDapEventsObject_init,//(initproc)Noddy_init,      /* tp_init */
+    0,                         /* tp_alloc */
+    PyType_GenericNew,//PyDapEventsObject_new,//Noddy_new,                 /* tp_new */
+};
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/src/libdap_crypto_key_type_python.c b/src/libdap_crypto_key_type_python.c
new file mode 100644
index 00000000..f0ac5f0f
--- /dev/null
+++ b/src/libdap_crypto_key_type_python.c
@@ -0,0 +1,56 @@
+#include "libdap_crypto_key_type_python.h"
+
+PyObject *get_ENC_KEY_TYPE_IAES(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_IAES);
+}
+PyObject *get_ENC_KEY_TYPE_OAES(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_OAES);
+}
+PyObject *get_ENC_KEY_TYPE_RLWE_NEWHOPE(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_RLWE_NEWHOPE);
+}
+PyObject *get_ENC_KEY_TYPE_SIDH_CLN16(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_SIDH_CLN16);
+}
+PyObject *get_ENC_KEY_TYPE_DEFEO(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_DEFEO);
+}
+PyObject *get_ENC_KEY_TYPE_MSRLN(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_MSRLN);
+}
+PyObject *get_ENC_KEY_TYPE_MSRLN16(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_RLWE_MSRLN16);
+}
+PyObject *get_ENC_KEY_TYPE_RLWE_BCNS15(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_RLWE_BCNS15);
+}
+PyObject *get_ENC_KEY_TYPE_LWE_FRODO(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_LWE_FRODO);
+}
+PyObject *get_ENC_KEY_TYPE_SIDH_IQC_REF(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_SIDH_IQC_REF);
+}
+PyObject *get_ENC_KEY_TYPE_CODE_MCBITS(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_CODE_MCBITS);
+}
+PyObject *get_ENC_KEY_TYPE_NTRU(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_NTRU);
+}
+PyObject *get_ENC_KEY_TYPE_MLWE_KYBER(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_MLWE_KYBER);
+}
+PyObject *get_ENC_KEY_TYPE_SIG_PICNIC(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_SIG_PICNIC);
+}
+PyObject *get_ENC_KEY_TYPE_SIG_BLISS(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_SIG_BLISS);
+}
+PyObject *get_ENC_KEY_TYPE_SIG_TESLA(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_SIG_TESLA);
+}
+PyObject *get_ENC_KEY_TYPE_SIG_DILITHIUM(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_SIG_DILITHIUM);
+}
+PyObject *get_ENC_KEY_TYPE_NULL(){
+    return PyLong_FromLong(DAP_ENC_KEY_TYPE_NULL);
+}
-- 
GitLab