diff --git a/include/dap_enc_dilithium.h b/include/dap_enc_dilithium.h index ba63e2f0759e4b46354cafdf7d7149889852c6be..7f285580f12b1e512c1275f5a9dd1549deb5d57c 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 ce33495a42df0a69067141b96fcbea66c64584a9..7ed2bea0efab795cfcdd884d931b4b730ad066e5 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 da925e026fe307d7e70b3fd75e88286bc77e5e85..5ddd872e306f0c67cd58c56cf567171c34c4ef99 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 775eab1f64ba731ce64f4e621d749348df3b96d8..1bba317a8100d9ed031f4e4c15f06f6a18817c60 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 4b2a59e34742ced37c42ca6ca2f74ed3a37f6cfb..28a5ec9e93c5d16f2aff98600e50858739733043 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];