gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]