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