diff --git a/dap_chain_cert.c b/dap_chain_cert.c index f87982634de623145966a1d2ff19c08e3b2e80d4..b785f94af9ee4659f4aded5bfef3e2fbb84be2d1 100755 --- a/dap_chain_cert.c +++ b/dap_chain_cert.c @@ -21,9 +21,12 @@ You should have received a copy of the GNU General Public License along with any DAP based project. If not, see <http://www.gnu.org/licenses/>. */ +#include <sys/types.h> +#include <dirent.h> #include <string.h> #include <stdio.h> #include <unistd.h> + #include "uthash.h" #include "utlist.h" #include "dap_common.h" @@ -55,7 +58,8 @@ typedef struct dap_chain_cert_pvt #define PVT(a) ( ( dap_chain_cert_pvt_t *)(a->_pvt) ) -dap_chain_cert_item_t * s_certs = NULL; +static dap_chain_cert_item_t * s_certs = NULL; + dap_chain_cert_t * dap_chain_cert_new(const char * a_name); void dap_chain_cert_delete(dap_chain_cert_t * a_cert); /** @@ -179,7 +183,7 @@ dap_chain_cert_t * dap_chain_cert_generate(const char * a_cert_name { dap_chain_cert_t * l_cert = dap_chain_cert_generate_mem(a_cert_name,a_key_type); if ( l_cert){ - if ( dap_chain_cert_save_file(l_cert, a_file_path) == 0 ){ + if ( dap_chain_cert_file_save(l_cert, a_file_path) == 0 ){ return l_cert; } else{ dap_chain_cert_delete(l_cert); @@ -285,6 +289,23 @@ dap_chain_cert_t * dap_chain_cert_add_file(const char * a_cert_name,const char * return l_cert; } +/** + * @brief dap_chain_cert_save_to_folder + * @param a_cert + * @param a_file_dir_path + */ +int dap_chain_cert_save_to_folder(dap_chain_cert_t * a_cert, const char *a_file_dir_path) +{ + int ret = 0; + const char * l_cert_name = a_cert->name; + size_t l_cert_path_length = strlen(l_cert_name)+8+strlen(a_file_dir_path); + char * l_cert_path = DAP_NEW_Z_SIZE(char,l_cert_path_length); + snprintf(l_cert_path,l_cert_path_length,"%s/%s.dcert",a_file_dir_path,l_cert_name); + ret = dap_chain_cert_file_save(a_cert,l_cert_path); + DAP_DELETE( l_cert_path); + return ret; +} + /** * @brief dap_chain_cert_to_pkey * @param a_cert @@ -339,21 +360,27 @@ void dap_chain_cert_dump(dap_chain_cert_t * a_cert) { printf ("Certificate name: %s\n",a_cert->name); printf ("Signature type: %s\n", dap_chain_sign_type_to_str( dap_chain_sign_type_from_key_type(a_cert->enc_key->type) ) ); - printf ("Private key size: %u\n",a_cert->enc_key->priv_key_data_size); - printf ("Public key size: %u\n", a_cert->enc_key->pub_key_data_size); - printf ("Metadata section size: %u\n",a_cert->metadata?strlen(a_cert->metadata):0); - printf ("Certificates signatures chain size: %u\n",dap_chain_cert_count_cert_sign (a_cert)); + printf ("Private key size: %lu\n",a_cert->enc_key->priv_key_data_size); + printf ("Public key size: %lu\n", a_cert->enc_key->pub_key_data_size); + printf ("Metadata section size: %lu\n",a_cert->metadata?strlen(a_cert->metadata):0); + printf ("Certificates signatures chain size: %lu\n",dap_chain_cert_count_cert_sign (a_cert)); } /** * @brief dap_chain_cert_add_folder - * @param a_cert_name_prefix * @param a_folder_path */ -void dap_chain_cert_add_folder(const char * a_cert_name_prefix,const char *a_folder_path) +void dap_chain_cert_add_folder(const char *a_folder_path) { - + DIR * l_dir = opendir(a_folder_path); + if( l_dir ) { + struct dirent * l_dir_entry; + while((l_dir_entry=readdir(l_dir))!=NULL){ + log_it(L_DEBUG,"%s",l_dir_entry->d_name); + } + closedir(l_dir); + } } /** diff --git a/dap_chain_cert.h b/dap_chain_cert.h index 385edd983ae534c08de1d5bac7f6592394b38493..3a49f5ede91dc130fc70733f18084dae24a3b0ad 100755 --- a/dap_chain_cert.h +++ b/dap_chain_cert.h @@ -44,6 +44,7 @@ int dap_chain_cert_init(); dap_chain_cert_t * dap_chain_cert_new(const char * a_name); + dap_chain_cert_t * dap_chain_cert_generate(const char * a_cert_name,const char * a_file_path,dap_enc_key_type_t a_key_type ); dap_chain_cert_t * dap_chain_cert_generate_mem(const char * a_cert_name, @@ -52,7 +53,8 @@ dap_chain_cert_t * dap_chain_cert_generate_mem(const char * a_cert_name, dap_chain_addr_t * dap_chain_cert_to_addr(dap_chain_cert_t * a_cert, dap_chain_net_id_t a_net_id); dap_chain_cert_t * dap_chain_cert_add_file(const char * a_cert_name,const char *a_file_path); -void dap_chain_cert_add_folder(const char* a_cert_name_prefix,const char *a_folder_path); +int dap_chain_cert_save_to_folder(dap_chain_cert_t * a_cert, const char *a_file_dir_path); +void dap_chain_cert_add_folder(const char *a_folder_path); void dap_chain_cert_dump(dap_chain_cert_t * a_cert); dap_chain_pkey_t * dap_chain_cert_to_pkey(dap_chain_cert_t * a_cert); diff --git a/dap_chain_cert_file.c b/dap_chain_cert_file.c index 348b43b0bc663f0f4e296d326470010571664c37..c7e8c2e476200bbdda624672173902343564b624 100755 --- a/dap_chain_cert_file.c +++ b/dap_chain_cert_file.c @@ -38,12 +38,12 @@ * @param a_cert_file_path * @return */ -int dap_chain_cert_save_file(dap_chain_cert_t * a_cert, const char * a_cert_file_path) +int dap_chain_cert_file_save(dap_chain_cert_t * a_cert, const char * a_cert_file_path) { FILE * l_file = fopen(a_cert_file_path,"w"); if( l_file ){ uint32_t l_data_size = 0; - void * l_data = dap_chain_cert_save_mem(a_cert, &l_data_size); + void * l_data = dap_chain_cert_mem_save(a_cert, &l_data_size); if ( l_data ){ size_t l_retbytes; if ( (l_retbytes = fwrite(l_data,1,l_data_size,l_file)) != l_data_size ){ @@ -70,16 +70,21 @@ int dap_chain_cert_save_file(dap_chain_cert_t * a_cert, const char * a_cert_file * @param a_cert_size_out * @return */ -uint8_t* dap_chain_cert_save_mem(dap_chain_cert_t * a_cert, uint32_t *a_cert_size_out) +uint8_t* dap_chain_cert_mem_save(dap_chain_cert_t * a_cert, uint32_t *a_cert_size_out) { dap_chain_cert_file_hdr_t l_hdr={0}; uint32_t l_data_offset = 0; dap_enc_key_t * l_key = a_cert->enc_key; uint8_t *l_data = NULL; - size_t l_priv_key_data_size, l_pub_key_data_size; - uint8_t *l_pub_key_data = dap_enc_key_serealize_pub_key(l_key, &l_pub_key_data_size); - uint8_t *l_priv_key_data = dap_enc_key_serealize_priv_key(l_key, &l_priv_key_data_size); + size_t l_priv_key_data_size = a_cert->enc_key->priv_key_data, + l_pub_key_data_size = a_cert->enc_key->pub_key_data_size; + uint8_t *l_pub_key_data = a_cert->enc_key->pub_key_data_size ? + dap_enc_key_serealize_pub_key(l_key, &l_pub_key_data_size) : + NULL; + uint8_t *l_priv_key_data = a_cert->enc_key->priv_key_data ? + dap_enc_key_serealize_priv_key(l_key, &l_priv_key_data_size) : + NULL; l_hdr.sign = DAP_CHAIN_CERT_FILE_HDR_SIGN; l_hdr.type = DAP_CHAIN_CERT_FILE_TYPE_PUBLIC; @@ -115,13 +120,15 @@ uint8_t* dap_chain_cert_save_mem(dap_chain_cert_t * a_cert, uint32_t *a_cert_siz memcpy(l_data +l_data_offset, l_pub_key_data ,l_pub_key_data_size ); l_data_offset += l_pub_key_data_size; - memcpy(l_data +l_data_offset, l_priv_key_data ,l_priv_key_data_size ); - l_data_offset += l_priv_key_data_size; - - memcpy(l_data +l_data_offset, l_key->_inheritor ,l_key->_inheritor_size ); - l_data_offset += l_key->_inheritor_size; - + if ( l_priv_key_data_size ) { + memcpy(l_data +l_data_offset, l_priv_key_data ,l_priv_key_data_size ); + l_data_offset += l_priv_key_data_size; + } + if ( l_key->_inheritor_size ) { + memcpy(l_data +l_data_offset, l_key->_inheritor ,l_key->_inheritor_size ); + l_data_offset += l_key->_inheritor_size; + } lb_exit: DAP_DELETE(l_pub_key_data); DAP_DELETE(l_priv_key_data); diff --git a/dap_chain_cert_file.h b/dap_chain_cert_file.h index 30f2ec9e73265708be451f0137d673fea0381ca8..a15f71b3d67fe11dd08a78c7b2bd1ac98b5f34bd 100755 --- a/dap_chain_cert_file.h +++ b/dap_chain_cert_file.h @@ -53,8 +53,8 @@ typedef struct dap_chain_cert_file{ uint8_t data[]; }DAP_ALIGN_PACKED dap_chain_cert_file_t; -int dap_chain_cert_save_file(dap_chain_cert_t * a_cert, const char * a_cert_file_path); -uint8_t* dap_chain_cert_save_mem(dap_chain_cert_t * a_cert, uint32_t *a_cert_size_out); +int dap_chain_cert_file_save(dap_chain_cert_t * a_cert, const char * a_cert_file_path); +uint8_t* dap_chain_cert_mem_save(dap_chain_cert_t * a_cert, uint32_t *a_cert_size_out); dap_chain_cert_t* dap_chain_cert_file_load(const char * a_cert_file_path); dap_chain_cert_t* dap_chain_cert_mem_load(void * a_data, size_t a_data_size); diff --git a/dap_chain_sign.c b/dap_chain_sign.c index 856266ea99a6f63841ed857a66ad1257b2a2f415..d784e1fcb6c195c05b270aebc99e57b6b6f92a89 100755 --- a/dap_chain_sign.c +++ b/dap_chain_sign.c @@ -194,7 +194,7 @@ dap_chain_sign_t * dap_chain_sign_create(dap_enc_key_t *a_key, const void * a_da * @param a_sign_out * @return */ -const uint8_t* dap_chain_sign_get_sign(const dap_chain_sign_t *a_sign, size_t *a_sign_out) +uint8_t* dap_chain_sign_get_sign(dap_chain_sign_t *a_sign, size_t *a_sign_out) { if(!a_sign) return NULL; @@ -209,7 +209,7 @@ const uint8_t* dap_chain_sign_get_sign(const dap_chain_sign_t *a_sign, size_t *a * @param a_pub_key_out * @return */ -const uint8_t* dap_chain_sign_get_pkey(const dap_chain_sign_t *a_sign, size_t *a_pub_key_out) +uint8_t* dap_chain_sign_get_pkey(dap_chain_sign_t *a_sign, size_t *a_pub_key_out) { if(!a_sign) return NULL; @@ -227,7 +227,7 @@ dap_enc_key_t *dap_chain_sign_to_enc_key(dap_chain_sign_t * a_chain_sign) { dap_enc_key_t * l_ret = dap_enc_key_new( dap_chain_sign_type_to_key_type( a_chain_sign->header.type ) ); size_t l_pkey_size = 0; - uint8_t *l_pkey = dap_chain_sign_get_pkey(a_chain_sign, &l_pkey_size); + const uint8_t *l_pkey = dap_chain_sign_get_pkey(a_chain_sign, &l_pkey_size); // deserialize public key dap_enc_key_deserealize_pub_key(l_ret, l_pkey, l_pkey_size); return l_ret; diff --git a/dap_chain_sign.h b/dap_chain_sign.h index 0cd308b308086973fa362700937a9095774938ca..a5def39e94267468f052a61acd2e20c4a2cae62d 100755 --- a/dap_chain_sign.h +++ b/dap_chain_sign.h @@ -61,8 +61,8 @@ size_t dap_chain_sign_create_output_cals_size(dap_enc_key_t * a_key,size_t a_out dap_chain_sign_type_t dap_chain_sign_type_from_key_type( dap_enc_key_type_t a_key_type); dap_enc_key_type_t dap_chain_sign_type_to_key_type(dap_chain_sign_type_t a_chain_sign_type); -const uint8_t* dap_chain_sign_get_sign(const dap_chain_sign_t *a_sign, size_t *a_sign_out); -const uint8_t* dap_chain_sign_get_pkey(const dap_chain_sign_t *a_sign, size_t *a_pub_key_out); +uint8_t* dap_chain_sign_get_sign(dap_chain_sign_t *a_sign, size_t *a_sign_out); +uint8_t* dap_chain_sign_get_pkey(dap_chain_sign_t *a_sign, size_t *a_pub_key_out); dap_enc_key_t *dap_chain_sign_to_enc_key(dap_chain_sign_t * a_chain_sign); const char * dap_chain_sign_type_to_str(dap_chain_sign_type_t a_chain_sign_type); diff --git a/monero_crypto/common/int-util.h b/monero_crypto/common/int-util.h index 7cec571ad8364146acef48ac744d111ca7165deb..780cb06eb41e415673e7a714669da275a3afee75 100755 --- a/monero_crypto/common/int-util.h +++ b/monero_crypto/common/int-util.h @@ -166,6 +166,7 @@ static inline uint64_t swap64(uint64_t x) { #endif /* __OpenBSD__ */ #if defined(__GNUC__) +#undef UNUSED #define UNUSED __attribute__((unused)) #else #define UNUSED