[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-anastasis] 01/08: optimized error handling in anastasis_crypto
From: |
gnunet |
Subject: |
[taler-anastasis] 01/08: optimized error handling in anastasis_crypto |
Date: |
Sun, 26 Apr 2020 21:33:44 +0200 |
This is an automated email from the git hooks/post-receive script.
dennis-neufeld pushed a commit to branch master
in repository anastasis.
commit bdcc0d532dd666cbc31d38b1abe9301ffb2164b2
Author: Dennis Neufeld <address@hidden>
AuthorDate: Sat Apr 25 12:41:04 2020 +0000
optimized error handling in anastasis_crypto
---
src/util/anastasis_crypto.c | 142 +++++++++++++++++++++++++++++---------------
1 file changed, 94 insertions(+), 48 deletions(-)
diff --git a/src/util/anastasis_crypto.c b/src/util/anastasis_crypto.c
index 89ee857..2e88a36 100644
--- a/src/util/anastasis_crypto.c
+++ b/src/util/anastasis_crypto.c
@@ -57,19 +57,23 @@ get_iv_key (const void *key_material,
char res[sizeof (struct ANASTASIS_CRYPTO_SymKey)
+ sizeof (struct ANASTASIS_CRYPTO_Iv)];
- GNUNET_assert (GNUNET_YES ==
- GNUNET_CRYPTO_hkdf (res,
- sizeof (res),
- GCRY_MD_SHA512,
- GCRY_MD_SHA256,
- key_material,
- key_m_len,
- nonce,
- sizeof (struct ANASTASIS_CRYPTO_Nonce),
- salt,
- strlen (salt),
- NULL,
- 0));
+ if (GNUNET_YES !=
+ GNUNET_CRYPTO_hkdf (res,
+ sizeof (res),
+ GCRY_MD_SHA512,
+ GCRY_MD_SHA256,
+ key_material,
+ key_m_len,
+ nonce,
+ sizeof (struct ANASTASIS_CRYPTO_Nonce),
+ salt,
+ strlen (salt),
+ NULL,
+ 0))
+ {
+ GNUNET_break (0);
+ return;
+ }
memcpy (key,
res,
sizeof (*key));
@@ -119,10 +123,19 @@ anastasis_encrypt (const void *key,
*res_size = data_size
+ sizeof (struct ANASTASIS_CRYPTO_Nonce)
+ sizeof (struct ANASTASIS_CRYPTO_AesTag);
+ if (*res_size <= data_size)
+ {
+ GNUNET_break (0);
+ return;
+ }
*res = GNUNET_malloc (*res_size);
- GNUNET_assert (*res_size == data_size
- + sizeof (struct ANASTASIS_CRYPTO_Nonce)
- + sizeof (struct ANASTASIS_CRYPTO_AesTag));
+ if (*res_size != data_size
+ + sizeof (struct ANASTASIS_CRYPTO_Nonce)
+ + sizeof (struct ANASTASIS_CRYPTO_AesTag))
+ {
+ GNUNET_break (0);
+ return;
+ }
nonce = (struct ANASTASIS_CRYPTO_Nonce *) *res;
tag = (struct ANASTASIS_CRYPTO_AesTag *) &nonce[1];
ciphertext = (char *) &tag[1];
@@ -220,10 +233,20 @@ anastasis_decrypt (const void *key,
*res_size = data_size
- sizeof (struct ANASTASIS_CRYPTO_Nonce)
- sizeof (struct ANASTASIS_CRYPTO_AesTag);
+ if (*res_size >= data_size)
+ {
+ GNUNET_break (0);
+ return;
+ }
*res = GNUNET_malloc (*res_size);
- GNUNET_assert (*res_size == data_size
- - sizeof (struct ANASTASIS_CRYPTO_Nonce)
- - sizeof (struct ANASTASIS_CRYPTO_AesTag));
+ if (*res_size != data_size
+ - sizeof (struct ANASTASIS_CRYPTO_Nonce)
+ - sizeof (struct ANASTASIS_CRYPTO_AesTag))
+ {
+ GNUNET_break (0);
+ GNUNET_free (*res);
+ return;
+ }
nonce = (const struct ANASTASIS_CRYPTO_Nonce *) data;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -272,11 +295,16 @@ anastasis_decrypt (const void *key,
"At %s:%d PLAINTEXT_D is %s-%llu b\n", __FILE__, __LINE__,
TALER_b2s (*res, *res_size),
(unsigned long long) *res_size);
- GNUNET_assert (0 ==
- gcry_cipher_checktag (cipher,
- tag,
- sizeof (struct
- ANASTASIS_CRYPTO_AesTag)));
+ if (0 !=
+ gcry_cipher_checktag (cipher,
+ tag,
+ sizeof (struct
+ ANASTASIS_CRYPTO_AesTag)))
+ {
+ GNUNET_break (0);
+ GNUNET_free (*res);
+ return;
+ }
gcry_cipher_close (cipher);
}
@@ -296,17 +324,21 @@ ANASTASIS_CRYPTO_user_identifier_derive (
{
char *json_enc;
json_enc = json_dumps (id_data, 0);
- GNUNET_assert (0 ==
- gcry_kdf_derive (json_enc,
- strlen (json_enc),
- GCRY_KDF_SCRYPT,
- 1, // subalgo
- server_salt->salt,
- strlen (server_salt->salt),
- SCRYPT_ITERATION, // iterations
- sizeof (struct
- ANASTASIS_CRYPTO_UserIdentifier),
- id));
+ if (0 !=
+ gcry_kdf_derive (json_enc,
+ strlen (json_enc),
+ GCRY_KDF_SCRYPT,
+ 1, // subalgo
+ server_salt->salt,
+ strlen (server_salt->salt),
+ SCRYPT_ITERATION, // iterations
+ sizeof (struct
+ ANASTASIS_CRYPTO_UserIdentifier),
+ id))
+ {
+ GNUNET_break (0);
+ return;
+ }
free (json_enc);
}
@@ -322,16 +354,21 @@ ANASTASIS_CRYPTO_account_private_key_derive (
struct GNUNET_CRYPTO_EddsaPrivateKey *priv_key)
{
/* priv_key = ver_secret */
- GNUNET_CRYPTO_hkdf (priv_key,
- sizeof (*priv_key),
- GCRY_MD_SHA512,
- GCRY_MD_SHA256,
- id,
- sizeof (struct ANASTASIS_CRYPTO_UserIdentifier),
- "ver",
- strlen ("ver"),
- NULL,
- 0);
+ if (GNUNET_YES !=
+ GNUNET_CRYPTO_hkdf (priv_key,
+ sizeof (*priv_key),
+ GCRY_MD_SHA512,
+ GCRY_MD_SHA256,
+ id,
+ sizeof (struct ANASTASIS_CRYPTO_UserIdentifier),
+ "ver",
+ strlen ("ver"),
+ NULL,
+ 0))
+ {
+ GNUNET_break (0);
+ return;
+ }
/* go from ver_secret to proper private key (eddsa_d_to_a() in spec) */
priv_key->d[0] = (priv_key->d[0] & 0x7f) | 0x40;
priv_key->d[31] &= 0xf8;
@@ -443,8 +480,12 @@ ANASTASIS_CRYPTO_keyshare_encrypt (
salt,
(void **) enc_key_share,
&eks_size);
- GNUNET_assert (eks_size == sizeof (struct
- ANASTASIS_CRYPTO_EncryptedKeyShare));
+ if (eks_size !=
+ sizeof (struct ANASTASIS_CRYPTO_EncryptedKeyShare))
+ {
+ GNUNET_break (0);
+ return;
+ }
}
@@ -470,7 +511,12 @@ ANASTASIS_CRYPTO_keyshare_decrypt (
salt,
(void **) key_share,
&ks_size);
- GNUNET_assert (ks_size == sizeof (struct ANASTASIS_CRYPTO_KeyShare));
+ if (ks_size !=
+ sizeof (struct ANASTASIS_CRYPTO_KeyShare))
+ {
+ GNUNET_break (0);
+ return;
+ }
}
--
To stop receiving notification emails like this one, please contact
address@hidden.
- [taler-anastasis] branch master updated (0ca921b -> 432c38c), gnunet, 2020/04/26
- [taler-anastasis] 04/08: const in decryption routine, gnunet, 2020/04/26
- [taler-anastasis] 06/08: fixed salt api, gnunet, 2020/04/26
- [taler-anastasis] 08/08: packed structs in crypto lib, gnunet, 2020/04/26
- [taler-anastasis] 03/08: ANASTASIS_CRYPTO_Iv set to 16 Byte length, gnunet, 2020/04/26
- [taler-anastasis] 05/08: modified salt api, gnunet, 2020/04/26
- [taler-anastasis] 02/08: ANASTASIS_CRYPTO_Iv set to 16 Byte length, gnunet, 2020/04/26
- [taler-anastasis] 07/08: fix json_pack, gnunet, 2020/04/26
- [taler-anastasis] 01/08: optimized error handling in anastasis_crypto,
gnunet <=