diff --git a/crypto/dap_enc.c b/crypto/dap_enc.c index c9f1c4ebd4eb234eea06bac45c979e064ef5f282..1639cd46cad79cc1098352e8ab3d05e4c767ca43 100644 --- a/crypto/dap_enc.c +++ b/crypto/dap_enc.c @@ -50,6 +50,7 @@ void dap_enc_deinit() } + /** * @brief dap_enc_code Encode data with key * @param key_private Private key @@ -70,7 +71,7 @@ size_t dap_enc_code(struct dap_enc_key * key,const void * buf,const size_t buf_s size_t ret = key->enc(key, buf, buf_size, &proc_buf); if(data_type_out == DAP_ENC_DATA_TYPE_B64 || data_type_out == DAP_ENC_DATA_TYPE_B64_URLSAFE) { *buf_out = malloc(DAP_ENC_BASE64_ENCODE_SIZE(ret)); - ret=dap_enc_base64_encode(proc_buf, ret,(char*)*buf_out, data_type_out); + ret=dap_enc_base64_encode(proc_buf, ret, *buf_out, data_type_out); free(proc_buf); } else { log_it(L_ERROR, "Unknown dap_enc_data_type"); @@ -101,7 +102,7 @@ size_t dap_enc_decode(struct dap_enc_key * key,const void * buf, const size_t bu switch(data_type_in){ case DAP_ENC_DATA_TYPE_B64: case DAP_ENC_DATA_TYPE_B64_URLSAFE: - proc_buf=calloc(1,buf_size); + proc_buf=calloc(1,DAP_ENC_BASE64_ENCODE_SIZE(buf_size)); proc_buf_size= dap_enc_base64_decode((const char*) buf,buf_size,proc_buf,data_type_in); proc_buf_const=proc_buf; break; @@ -112,12 +113,19 @@ size_t dap_enc_decode(struct dap_enc_key * key,const void * buf, const size_t bu } if(key->dec) { - size_t ret=key->dec(key,proc_buf_const,proc_buf_size,buf_out); + if(proc_buf_size == 0) { + log_it(L_ERROR, "Buf is null. dap_enc_base64_decode is failed"); + return 0; + } + size_t ret = key->dec(key,proc_buf_const,proc_buf_size, buf_out); + if(data_type_in==DAP_ENC_DATA_TYPE_B64 || data_type_in == DAP_ENC_DATA_TYPE_B64_URLSAFE) free(proc_buf); return ret; } else { log_it(L_WARNING, "key->dec is NULL"); + if(proc_buf_size) + free(proc_buf); return 0; } } diff --git a/crypto/dap_enc_base64.c b/crypto/dap_enc_base64.c index cd2df7fffdb5c9894989e7d2ff329749afc3069d..f9c878d69954b656e1f7e729808f10a4606e9c95 100755 --- a/crypto/dap_enc_base64.c +++ b/crypto/dap_enc_base64.c @@ -117,8 +117,6 @@ static const char* b64_table_by_standard(dap_enc_data_type_t standard) */ size_t dap_enc_base64_decode(const char * in, size_t in_size,void * out, dap_enc_data_type_t standard) { - //B64_Decode( in, in_size, (byte*) out ); - //return B64_GetSize( in_size,0 ); uint8_t * out_bytes = (uint8_t*) out; int j = 0; diff --git a/crypto/dap_enc_base64.h b/crypto/dap_enc_base64.h index c73d4619b1e27135ce3e232c637f02889f4dcbdd..427717acb3d9fd78892aa82895b0ee877937b6c0 100755 --- a/crypto/dap_enc_base64.h +++ b/crypto/dap_enc_base64.h @@ -6,12 +6,6 @@ extern "C" { #endif - -typedef enum dap_enc_b64_standard { - DAP_ENC_STANDARD_B64, - DAP_ENC_STANDARD_B64_URLSAFE, -} dap_enc_b64_standard_t; - /* * Calculates encode size from input size */ diff --git a/test/libdap-test b/test/libdap-test index 982e8d9e7726918ce622b42b5335f324e738c6dc..e542fdbcbced6ce9b1c4cae4a92fa8580403941e 160000 --- a/test/libdap-test +++ b/test/libdap-test @@ -1 +1 @@ -Subproject commit 982e8d9e7726918ce622b42b5335f324e738c6dc +Subproject commit e542fdbcbced6ce9b1c4cae4a92fa8580403941e