diff --git a/include/python-cellframe.h b/include/python-cellframe.h
index b826755bc36ddc177f080c9fcf79123292206449..8276ff2809f85054753258330d32c3154e6e2381 100644
--- a/include/python-cellframe.h
+++ b/include/python-cellframe.h
@@ -2,7 +2,9 @@
 #include "Python.h"
 #include "libdap-python.h"
 #include "libdap-crypto-python.h"
-#include "libdap-server-core-python.h"
+#include "libdap_server_core_python.h"
+#include "libdap_crypto_key_type_python.h"
+#include "libdap_crypto_data_type.h"
 #include "dap_common.h"
 
 
diff --git a/src/python-cellframe.c b/src/python-cellframe.c
index 93ffe29fadfd747d0c5d1df8314f76e0089e0388..492c8501500407d7d884c0362115481ca26edee6 100644
--- a/src/python-cellframe.c
+++ b/src/python-cellframe.c
@@ -5,7 +5,9 @@ PyMODINIT_FUNC PyInit_libCellFrame(void){
 
     if (PyType_Ready(&DapObject_DapObjectType) < 0 || PyType_Ready(&dapCrypto_dapCryptoType) < 0 ||
             PyType_Ready(&ServerCore_ServerCoreType) < 0 || PyType_Ready(&dapEvents_dapEventsType) < 0 ||
-            PyType_Ready(&dapEventsSocket_dapEventsSocketType) < 0)
+            PyType_Ready(&dapEventsSocket_dapEventsSocketType) < 0 ||
+            PyType_Ready(&CryptoKeyTypeObjecy_CryptoKeyTypeObjecyType) < 0 ||
+            PyType_Ready(&CryptoDataTypeObjecy_CryptoDataTypeObjecyType) < 0)
                return NULL;
 
     PyObject *module = PyModule_Create(&CellFramePythonModule);
@@ -28,6 +30,9 @@ PyMODINIT_FUNC PyInit_libCellFrame(void){
     PyModule_AddObject(module, "Events", (PyObject*)&dapEvents_dapEventsType);
     PyModule_AddObject(module, "EventsSocket", (PyObject*)&dapEventsSocket_dapEventsSocketType);
 
+    PyModule_AddObject(module, "CryptoKeyType", (PyObject*)&CryptoKeyTypeObjecy_CryptoKeyTypeObjecyType);
+    PyModule_AddObject(module, "CryptoDataType", (PyObject*)&CryptoDataTypeObjecy_CryptoDataTypeObjecyType);
+
 
     //PyModule_AddObject(module, "Dap", (PyObject*)&DapObject_DapObjectType);
     return module;
diff --git a/test/main_test.py b/test/main_test.py
index 762d68ea0fc97336d6543961df8a825f6de26a8b..60e6ad88e5f404d300601f70ad676ac891529a28 100644
--- a/test/main_test.py
+++ b/test/main_test.py
@@ -1,4 +1,5 @@
 from libCellFrame import *
+import pickle
 import os
 import sys
 
@@ -12,9 +13,8 @@ app_name = "testAPP"
 print("Create config file")
 create_config_file(app_name)
 
-
 json_string = """{
-    "modules": "",
+    "modules": ["crypto"],
     "DAP": {
        "config_dir": \""""+os.getcwd()+"""\",
        "log_level": "L_DEBUG",
@@ -23,6 +23,8 @@ json_string = """{
     }
     }"""
 
+
+print("init start")
 init(json_string)
 logItInfo("Initialization of the DAP done")
 setLogLevel(DEBUG)
@@ -34,6 +36,79 @@ logItInfo("Output [server] 'listen_address' = "+res1+"\n")
 res2 = configGetItemDefault("server1", "listen_address", "8.8.8.8")
 logItInfo("Output default value '8.8.8.8' [server1] 'listen_address' = "+res2+"\n")
 logItInfo( "TEST. Get default config done")
+
+logItInfo ("Create KEY")
+key = Crypto.newKey(CryptoKeyType.DAP_ENC_KEY_TYPE_IAES())
+del key
+logItInfo("Create KEY TWO")
+key2 = Crypto.newKey(CryptoKeyType.DAP_ENC_KEY_TYPE_OAES())
+logItInfo ("Dellete key")
+del key2
+
+logItInfo("TEST BASE58. START...")
+s = """Test! I will crush Base58!"""
+base_in = pickle.dumps(s)
+crypt = Crypto.encodeBase58(base_in)
+decrypt = Crypto.decodeBase58(crypt)
+out_data = pickle.loads(decrypt)
+if s == out_data:
+    logItInfo ("TEST 1. Encode/Decode base58 done")
+else:
+    logItInfo ("TEST 1. Encode/Decode base58 faild")
+    sys.exit(1)
+logItInfo("TEST. BASE64 START...")
+s = "Test! I will crush Base64!"
+crypt = Crypto.encodeBase64(bytes(s, "utf-8"), CryptoDataType.DAP_ENC_DATA_TYPE_B64())
+decrypt = Crypto.decodeBase64(crypt, CryptoDataType.DAP_ENC_DATA_TYPE_B64())
+if bytes(s, "utf-8") == decrypt:
+    logItInfo ("TEST 1. Encode/Decode base64 done")
+else:
+    logItInfo ("TEST 1. Encode/Decode base64 faild")
+    sys.exit(1)
+logItInfo ("TEST.BASE64 URLSAFE START...")
+u = "http://kelvin.foundation/"
+crypt_u = Crypto.encodeBase64(bytes(u, "utf-8"), CryptoDataType.DAP_ENC_DATA_TYPE_B64_URLSAFE())
+decrypt_u = Crypto.decodeBase64(crypt_u, CryptoDataType.DAP_ENC_DATA_TYPE_B64_URLSAFE())
+if bytes(u, "utf-8") == decrypt_u:
+     logItInfo ("TEST 2. Encode/Decode base64 urlsafe done")
+else:
+     logItInfo ("TEST 2. Encode/Decode base64 urlsafe faild")
+     sys.exit(2)
+
+logItInfo ("TEST. IAES256 CBC START...")
+s = "Test! I will crush iaes256!"
+kex_buff = bytes("123", "utf-8")
+size_kex_buff = len(kex_buff)
+seed = bytes(112771128)
+seed_size = len(seed)
+key_n = Crypto.generateNewKey(CryptoKeyType.DAP_ENC_KEY_TYPE_IAES(), kex_buff, size_kex_buff, seed, seed_size, 0)
+source = bytes(s, "utf-8")
+enc = Crypto.encryptIAES256CBCFast(key_n, source, len(source), 2048)
+decrypt = Crypto.decryptIAES256CBCFast(key_n, enc, len(enc), 2048)
+if bytes(s, "utf-8") == decrypt:
+    logItInfo ("TEST 1. Encode/Decode IAES256 CBC FAST done")
+else:
+    logItInfo ("TEST 1. Encode/Decode IAES256 CBC FAST faild")
+    sys.exit(1)
+
+logItInfo ("TEST. OAES START...")
+s = "Test! I will crush OAES!"
+kex_buff = bytes("114151400014314485131FGXVGHcJFIH", "utf-8")
+size_kex_buff = len(kex_buff)
+seed = bytes(112771128)
+seed_size = len(seed)
+key_id = Crypto.generateNewKey(CryptoKeyType.DAP_ENC_KEY_TYPE_OAES(), 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)
+if bytes(s, "utf-8") == decrypt:
+    logItInfo ("TEST 1. Encode/Decode OAES FAST done")
+else:
+    logItInfo ("TEST 1. Encode/Decode OAES CBC FAST faild")
+    sys.exit(1)
+
+
+
 deinit()
 logItInfo("Deinitialization done")