From 17f8218833f473d2c954113617ae63cb5dc9400f Mon Sep 17 00:00:00 2001
From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net>
Date: Mon, 21 Oct 2019 01:26:07 +0700
Subject: [PATCH] [*] Some refactoring with valgrind

---
 include/dap_enc_dilithium.h        | 7 ++++++-
 include/dap_enc_tesla.h            | 5 ++---
 src/dap_enc_dilithium.c            | 9 ++++++---
 src/dap_enc_tesla.c                | 7 ++++++-
 src/sig_dilithium/dilithium_sign.c | 4 ++--
 5 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/include/dap_enc_dilithium.h b/include/dap_enc_dilithium.h
index ba63e2f..7f28558 100755
--- a/include/dap_enc_dilithium.h
+++ b/include/dap_enc_dilithium.h
@@ -25,7 +25,12 @@ size_t dap_enc_sig_dilithium_verify_sign(struct dap_enc_key * key,const void * m
 
 void dap_enc_sig_dilithium_key_delete(struct dap_enc_key * key);
 
-size_t dap_enc_dilithium_calc_signature_size(void);
+size_t dap_enc_dilithium_calc_signature_unserialized_size(void);
+
+static inline size_t dap_enc_dilithium_calc_signagture_size(dilithium_signature_t* a_sign)
+{
+    return sizeof(size_t) + sizeof(dilithium_kind_t) + a_sign->sig_len + sizeof(unsigned long long);
+}
 
 uint8_t* dap_enc_dilithium_write_signature(dilithium_signature_t* a_sign, size_t *a_sign_out);
 dilithium_signature_t* dap_enc_dilithium_read_signature(uint8_t *a_buf, size_t a_buflen);
diff --git a/include/dap_enc_tesla.h b/include/dap_enc_tesla.h
index ce33495..7ed2bea 100755
--- a/include/dap_enc_tesla.h
+++ b/include/dap_enc_tesla.h
@@ -1,5 +1,4 @@
-#ifndef _DAP_ENC_TESLA_H_
-#define _DAP_ENC_TESLA_H_
+#pragma once
 
 #include "sig_tesla/tesla_params.h"
 #include "dap_enc_key.h"
@@ -26,6 +25,7 @@ size_t dap_enc_sig_tesla_verify_sign(struct dap_enc_key * key,const void * msg,
 void dap_enc_sig_tesla_key_delete(struct dap_enc_key * key);
 
 size_t dap_enc_tesla_calc_signature_size(void);
+size_t dap_enc_tesla_calc_signature_serialized_size(tesla_signature_t* a_sign);
 
 uint8_t* dap_enc_tesla_write_signature(tesla_signature_t* a_sign, size_t *a_sign_out);
 tesla_signature_t* dap_enc_tesla_read_signature(uint8_t *a_buf, size_t a_buflen);
@@ -34,4 +34,3 @@ uint8_t* dap_enc_tesla_write_public_key(const tesla_public_key_t* a_public_key,
 tesla_private_key_t* dap_enc_tesla_read_private_key(const uint8_t *a_buf, size_t a_buflen);
 tesla_public_key_t* dap_enc_tesla_read_public_key(const uint8_t *a_buf, size_t a_buflen);
 
-#endif
diff --git a/src/dap_enc_dilithium.c b/src/dap_enc_dilithium.c
index da925e0..5ddd872 100755
--- a/src/dap_enc_dilithium.c
+++ b/src/dap_enc_dilithium.c
@@ -98,19 +98,22 @@ void dap_enc_sig_dilithium_key_delete(struct dap_enc_key * key)
 
 }
 
-size_t dap_enc_dilithium_calc_signature_size(void)
+size_t dap_enc_dilithium_calc_signature_unserialized_size(void)
 {
     return sizeof(dilithium_signature_t);
 }
 
+
+
+
 /* Serialize a signature */
 uint8_t* dap_enc_dilithium_write_signature(dilithium_signature_t* a_sign, size_t *a_sign_out)
 {
-    if(!a_sign || *a_sign_out!=sizeof(dilithium_signature_t)) {
+    if(!a_sign ) {
         return NULL ;
     }
     size_t l_shift_mem = 0;
-    size_t l_buflen = sizeof(size_t) + sizeof(dilithium_kind_t) + a_sign->sig_len + sizeof(unsigned long long);
+    size_t l_buflen = dap_enc_dilithium_calc_signagture_size(a_sign);
 
     uint8_t *l_buf = DAP_NEW_SIZE(uint8_t, l_buflen);
     memcpy(l_buf, &l_buflen, sizeof(size_t));
diff --git a/src/dap_enc_tesla.c b/src/dap_enc_tesla.c
index 775eab1..1bba317 100755
--- a/src/dap_enc_tesla.c
+++ b/src/dap_enc_tesla.c
@@ -103,6 +103,11 @@ size_t dap_enc_tesla_calc_signature_size(void)
     return sizeof(tesla_signature_t);
 }
 
+size_t dap_enc_tesla_calc_signature_serialized_size(tesla_signature_t* a_sign)
+{
+    return sizeof(size_t) + sizeof(tesla_kind_t) + a_sign->sig_len + sizeof(unsigned long long);
+}
+
 /* Serialize a signature */
 uint8_t* dap_enc_tesla_write_signature(tesla_signature_t* a_sign, size_t *a_sign_out)
 {
@@ -110,7 +115,7 @@ uint8_t* dap_enc_tesla_write_signature(tesla_signature_t* a_sign, size_t *a_sign
         return NULL ;
     }
     size_t l_shift_mem = 0;
-    size_t l_buflen = sizeof(size_t) + sizeof(tesla_kind_t) + a_sign->sig_len + sizeof(unsigned long long);
+    size_t l_buflen = dap_enc_tesla_calc_signature_serialized_size(a_sign);
 
     uint8_t *l_buf = DAP_NEW_SIZE(uint8_t, l_buflen);
     memcpy(l_buf, &l_buflen, sizeof(size_t));
diff --git a/src/sig_dilithium/dilithium_sign.c b/src/sig_dilithium/dilithium_sign.c
index 4b2a59e..28a5ec9 100755
--- a/src/sig_dilithium/dilithium_sign.c
+++ b/src/sig_dilithium/dilithium_sign.c
@@ -195,7 +195,7 @@ int dilithium_crypto_sign_keypair(dilithium_public_key_t *public_key, dilithium_
 /*************************************************/
 int dilithium_crypto_sign( dilithium_signature_t *sig, const unsigned char *m, unsigned long long mlen, const dilithium_private_key_t *private_key)
 {
-    dilithium_param_t *p = malloc(sizeof(dilithium_param_t));
+    dilithium_param_t *p = DAP_NEW_Z(dilithium_param_t);
     if (! dilithium_params_init( p, private_key->kind)) {
         free(p);
         return 1;
@@ -218,7 +218,7 @@ int dilithium_crypto_sign( dilithium_signature_t *sig, const unsigned char *m, u
     dilithium_unpack_sk(rho, key, tr, &s1, &s2, &t0, private_key->data, p);
 
     sig->sig_len = mlen + p->CRYPTO_BYTES;
-    sig->sig_data = malloc( sig->sig_len);
+    sig->sig_data = DAP_NEW_Z_SIZE(unsigned char, sig->sig_len);
 
     for(i = 1; i <= mlen; ++i)
         sig->sig_data[p->CRYPTO_BYTES + mlen - i] = m[mlen - i];
-- 
GitLab