Browse Source

Add an ed25519_copy; use it in a couple of places dgoulet suggested.

Nick Mathewson 7 years ago
parent
commit
937aef48ee
3 changed files with 17 additions and 3 deletions
  1. 12 0
      src/common/crypto_ed25519.c
  2. 3 0
      src/common/crypto_ed25519.h
  3. 2 3
      src/or/circuitbuild.c

+ 12 - 0
src/common/crypto_ed25519.c

@@ -628,6 +628,18 @@ ed25519_pubkey_eq(const ed25519_public_key_t *key1,
   return tor_memeq(key1->pubkey, key2->pubkey, ED25519_PUBKEY_LEN);
 }
 
+/**
+ * Set <b>dest</b> to contain the same key as <b>src</b>.
+ */
+void
+ed25519_pubkey_copy(ed25519_public_key_t *dest,
+                    const ed25519_public_key_t *src)
+{
+  tor_assert(dest);
+  tor_assert(src);
+  memcpy(dest, src, sizeof(ed25519_public_key_t));
+}
+
 /** Check whether the given Ed25519 implementation seems to be working.
  * If so, return 0; otherwise return -1. */
 static int

+ 3 - 0
src/common/crypto_ed25519.h

@@ -121,6 +121,9 @@ void ed25519_keypair_free(ed25519_keypair_t *kp);
 
 int ed25519_pubkey_eq(const ed25519_public_key_t *key1,
                       const ed25519_public_key_t *key2);
+void ed25519_pubkey_copy(ed25519_public_key_t *dest,
+                         const ed25519_public_key_t *src);
+
 
 void ed25519_set_impl_params(int use_donna);
 void ed25519_init(void);

+ 2 - 3
src/or/circuitbuild.c

@@ -1045,8 +1045,7 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
     memcpy(ec.node_id, hop->extend_info->identity_digest, DIGEST_LEN);
     /* Set the ED25519 identity too -- it will only get included
      * in the extend2 cell if we're configured to use it, though. */
-    memcpy(&ec.ed_pubkey, &hop->extend_info->ed_identity,
-           sizeof(ed25519_public_key_t));
+    ed25519_pubkey_copy(&ec.ed_pubkey, &hop->extend_info->ed_identity);
 
     len = onion_skin_create(ec.create_cell.handshake_type,
                             hop->extend_info,
@@ -1183,7 +1182,7 @@ circuit_extend(cell_t *cell, circuit_t *circ)
     if (node &&
         node_supports_ed25519_link_authentication(node) &&
         (node_ed_id = node_get_ed25519_id(node))) {
-      memcpy(ec.ed_pubkey.pubkey, node_ed_id->pubkey, ED25519_PUBKEY_LEN);
+      ed25519_pubkey_copy(&ec.ed_pubkey, node_ed_id);
     }
   }