From 3059e97ef13936a3b60dfbcccf59a643667e339a Mon Sep 17 00:00:00 2001
From: armatusmiles <akurotych@gmail.com>
Date: Mon, 12 Nov 2018 10:04:49 +0200
Subject: [PATCH] [*] optimize dap_enc

---
 crypto/dap_enc.c        | 14 +++++++++++---
 crypto/dap_enc_base64.c |  2 --
 crypto/dap_enc_base64.h |  6 ------
 test/libdap-test        |  2 +-
 4 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/crypto/dap_enc.c b/crypto/dap_enc.c
index c9f1c4e..1639cd4 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 cd2df7f..f9c878d 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 c73d461..427717a 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 982e8d9..e542fdb 160000
--- a/test/libdap-test
+++ b/test/libdap-test
@@ -1 +1 @@
-Subproject commit 982e8d9e7726918ce622b42b5335f324e738c6dc
+Subproject commit e542fdbcbced6ce9b1c4cae4a92fa8580403941e
-- 
GitLab