[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet] 01/02: -more return value for payload processing that may fail
From: |
gnunet |
Subject: |
[gnunet] 01/02: -more return value for payload processing that may fail |
Date: |
Thu, 01 Dec 2022 10:34:37 +0100 |
This is an automated email from the git hooks/post-receive script.
martin-schanzenbach pushed a commit to branch master
in repository gnunet.
commit a25fa8cf399e0257a71a7c854fe9055ed0c58ab6
Author: Martin Schanzenbach <schanzen@gnunet.org>
AuthorDate: Thu Dec 1 18:31:59 2022 +0900
-more return value for payload processing that may fail
---
src/transport/gnunet-service-tng.c | 39 ++++++++++++++++++++++++++++----------
1 file changed, 29 insertions(+), 10 deletions(-)
diff --git a/src/transport/gnunet-service-tng.c
b/src/transport/gnunet-service-tng.c
index e7bb813b7..dc470ca0e 100644
--- a/src/transport/gnunet-service-tng.c
+++ b/src/transport/gnunet-service-tng.c
@@ -4680,8 +4680,9 @@ dv_setup_key_state_from_km (const struct GNUNET_HashCode
*km,
* @param target the target peer to encrypt to
* @param iv unique IV to use
* @param[out] key set to the key material
+ * @return GNUNET_OK on success
*/
-static void
+static enum GNUNET_GenericReturnValue
dh_key_derive_eph_pid (
const struct GNUNET_CRYPTO_EcdhePrivateKey *priv_ephemeral,
const struct GNUNET_PeerIdentity *target,
@@ -4690,10 +4691,14 @@ dh_key_derive_eph_pid (
{
struct GNUNET_HashCode km;
- GNUNET_assert (GNUNET_YES == GNUNET_CRYPTO_ecdh_eddsa (priv_ephemeral,
- &target->public_key,
- &km));
+ if (GNUNET_YES != GNUNET_CRYPTO_ecdh_eddsa (priv_ephemeral,
+ &target->public_key,
+ &km))
+ return GNUNET_SYSERR;
+ // FIXME: Possibly also add return values here. We are processing
+ // Input from other peers...
dv_setup_key_state_from_km (&km, iv, key);
+ return GNUNET_OK;
}
@@ -4705,18 +4710,21 @@ dh_key_derive_eph_pid (
* @param target the target peer to encrypt to
* @param iv unique IV to use
* @param[out] key set to the key material
+ * @return GNUNET_OK on success
*/
-static void
+static enum GNUNET_GenericReturnValue
dh_key_derive_eph_pub (const struct GNUNET_CRYPTO_EcdhePublicKey
*pub_ephemeral,
const struct GNUNET_ShortHashCode *iv,
struct DVKeyState *key)
{
struct GNUNET_HashCode km;
- GNUNET_assert (GNUNET_YES == GNUNET_CRYPTO_eddsa_ecdh (GST_my_private_key,
- pub_ephemeral,
- &km));
+ if (GNUNET_YES != GNUNET_CRYPTO_eddsa_ecdh (GST_my_private_key,
+ pub_ephemeral,
+ &km))
+ return GNUNET_SYSERR;
dv_setup_key_state_from_km (&km, iv, key);
+ return GNUNET_OK;
}
@@ -4850,7 +4858,11 @@ encapsulate_for_dv (struct DistanceVector *dv,
GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE,
&box_hdr.iv,
sizeof(box_hdr.iv));
- dh_key_derive_eph_pid (&dv->private_key, &dv->target, &box_hdr.iv, key);
+ // We are creating this key, so this must work.
+ GNUNET_assert (GNUNET_OK ==
+ dh_key_derive_eph_pid (&dv->private_key,
+ &dv->target,
+ &box_hdr.iv, key));
payload_hdr.sender = GST_my_identity;
payload_hdr.monotonic_time = GNUNET_TIME_absolute_hton (dv->monotime);
dv_encrypt (key, &payload_hdr, enc, sizeof(payload_hdr));
@@ -8228,7 +8240,14 @@ handle_dv_box (void *cls, const struct
TransportDVBoxMessage *dvb)
GNUNET_NO);
cmc->total_hops = ntohs (dvb->total_hops);
- dh_key_derive_eph_pub (&dvb->ephemeral_key, &dvb->iv, &key);
+ // DH key derivation with received DV, could be garbage.
+ if (GNUNET_OK !=
+ dh_key_derive_eph_pub (&dvb->ephemeral_key, &dvb->iv, &key))
+ {
+ GNUNET_break_op (0);
+ finish_cmc_handling (cmc);
+ return;
+ }
hdr = (const char *) &dvb[1];
hdr_len = ntohs (dvb->orig_size) - sizeof(*dvb) - sizeof(struct
GNUNET_PeerIdentity)
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.