/* Copyright (c) 2017-2018 (c) Project "DeM Labs Inc" https://github.com/demlabsinc All rights reserved. This file is part of DAP (Deus Applications Prototypes) the open source project DAP (Deus Applicaions Prototypes) is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. DAP is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with any DAP based project. If not, see <http://www.gnu.org/licenses/>. */ #include <stdlib.h> #include <string.h> #include "dap_enc_aes.h" #include "dap_enc_key.h" #define LOG_TAG "dap_enc_key" struct dap_enc_key_callbacks{ const char * name; dap_enc_callback_dataop_t enc; dap_enc_callback_dataop_t dec; dap_enc_callback_data_t new_from_callback; dap_enc_callback_t new_generate_callback; dap_enc_callback_t delete_callback; } s_callbacks[]={ [DAP_ENC_KEY_TYPE_AES]={ .name = "AES", .enc = dap_enc_aes_encode, .dec = dap_enc_aes_decode, .new_generate_callback = dap_enc_aes_key_new_generate, .new_from_callback = dap_enc_aes_key_new_from } }; /** * @brief dap_enc_key_init * @return */ int dap_enc_key_init() { size_t i; for( i = 0; i< sizeof(s_callbacks)/sizeof(s_callbacks[0]); i++ ){ switch ((dap_enc_key_type_t) i) { case DAP_ENC_KEY_CODE_MCBITS: case DAP_ENC_KEY_LWE_FRODO: case DAP_ENC_KEY_MLWE_KYBER: case DAP_ENC_KEY_NTRU: case DAP_ENC_KEY_RLWE_BCNS15: case DAP_ENC_KEY_RLWE_MSRLN16: case DAP_ENC_KEY_RLWE_NEWHOPE: case DAP_ENC_KEY_SIDH_CLN16: case DAP_ENC_KEY_SIDH_IQC_REF: case DAP_ENC_KEY_SIG_PICNIC: case DAP_ENC_KEY_TYPE_AES: continue; default: memset(&s_callbacks[i],0,sizeof(s_callbacks[0])); } } return 0; } /** * @brief dap_enc_key_deinit */ void dap_enc_key_deinit() { } /** * @brief dap_enc_key_new * @param key_type * @return */ dap_enc_key_t *dap_enc_key_new(dap_enc_key_type_t key_type) { } /** * @brief dap_enc_key_new_generate * @param key_type * @param key_size * @return */ dap_enc_key_t *dap_enc_key_new_generate(dap_enc_key_type_t key_type, size_t key_size) { if(s_callbacks[key_type].name ){ dap_enc_key_t * ret = dap_enc_ke_n s_callbacks[key_type].new_generate_callback() } return NULL; } dap_enc_key_t *dap_enc_key_new_from_str(dap_enc_key_type_t a_type, const char *a_key_str) { enc_key_t * ret= (enc_key_t *) calloc(1,sizeof(enc_key_t) ); size_t input_size=strlen(key_input); switch(v_type){ case ENC_KEY_TYPE_AES:{ enc_aes_key_create(ret,key_input); }break; case ENC_KEY_TYPE_FNAM2:{ ret->data = (unsigned char*) calloc(1,input_size*2); ret->data_size= enc_base64_decode(key_input,input_size,ret->data); }break; } ret->type=v_type; return ret; } /** * @brief dap_enc_key_new_from_data * @param a_type * @param a_key_input * @param a_key_input_size * @return */ dap_enc_key_t *dap_enc_key_new_from_data(dap_enc_key_type_t a_type, void * a_key_input, size_t a_key_input_size) { } /** * @brief dap_enc_key_delete * @param a_key */ void dap_enc_key_delete(dap_enc_key_t * a_key) { if( a_key->delete_callback ) a_key->delete_callback( a_key ); if( a_key->data ) free( a_key->data ); if( a_key->_inheritor ) free( a_key->_inheritor ); free(a_key); }