gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r35409 - in gnunet/src: include util


From: gnunet
Subject: [GNUnet-SVN] r35409 - in gnunet/src: include util
Date: Thu, 19 Mar 2015 14:21:30 +0100

Author: grothoff
Date: 2015-03-19 14:21:30 +0100 (Thu, 19 Mar 2015)
New Revision: 35409

Modified:
   gnunet/src/include/gnunet_crypto_lib.h
   gnunet/src/util/crypto_ecc.c
   gnunet/src/util/test_crypto_ecdh_ecdsa.c
Log:
-also cover private key case

Modified: gnunet/src/include/gnunet_crypto_lib.h
===================================================================
--- gnunet/src/include/gnunet_crypto_lib.h      2015-03-19 13:15:55 UTC (rev 
35408)
+++ gnunet/src/include/gnunet_crypto_lib.h      2015-03-19 13:21:30 UTC (rev 
35409)
@@ -1055,6 +1055,20 @@
 
 /**
  * @ingroup crypto
+ * Convert ECDSA private key to ECDHE private key.
+ * Please be very careful when using this function, as mixing
+ * cryptographic primitives is not always healthy.
+ *
+ * @param ecdsa ecdsa private key
+ * @param ecdhe[OUT] ecdhe private key
+ */
+void
+GNUNET_CRYPTO_ecdsa_private_to_ecdhe (const struct 
GNUNET_CRYPTO_EcdsaPrivateKey *ecdsa,
+                                     struct GNUNET_CRYPTO_EcdhePrivateKey 
*ecdhe);
+
+
+/**
+ * @ingroup crypto
  * Extract the public key for the given private key.
  *
  * @param priv the private key

Modified: gnunet/src/util/crypto_ecc.c
===================================================================
--- gnunet/src/util/crypto_ecc.c        2015-03-19 13:15:55 UTC (rev 35408)
+++ gnunet/src/util/crypto_ecc.c        2015-03-19 13:21:30 UTC (rev 35409)
@@ -1561,4 +1561,27 @@
 }
 
 
+
+/**
+ * @ingroup crypto
+ * Convert ECDSA private key to ECDHE private key.
+ * Please be very careful when using this function, as mixing
+ * cryptographic primitives is not always healthy.
+ *
+ * @param ecdsa ecdsa private key
+ * @param ecdhe[OUT] ecdhe private key
+ */
+void
+GNUNET_CRYPTO_ecdsa_private_to_ecdhe (const struct 
GNUNET_CRYPTO_EcdsaPrivateKey *ecdsa,
+                                     struct GNUNET_CRYPTO_EcdhePrivateKey 
*ecdhe)
+{
+  GNUNET_assert (sizeof (struct GNUNET_CRYPTO_EcdhePrivateKey) ==
+                 sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey));
+  memcpy (ecdhe,
+          ecdsa,
+          sizeof (struct GNUNET_CRYPTO_EcdhePrivateKey));
+
+}
+
+
 /* end of crypto_ecc.c */

Modified: gnunet/src/util/test_crypto_ecdh_ecdsa.c
===================================================================
--- gnunet/src/util/test_crypto_ecdh_ecdsa.c    2015-03-19 13:15:55 UTC (rev 
35408)
+++ gnunet/src/util/test_crypto_ecdh_ecdsa.c    2015-03-19 13:21:30 UTC (rev 
35409)
@@ -40,10 +40,8 @@
 
   /* Generate, cast keys */
   priv1 = GNUNET_CRYPTO_ecdsa_key_create ();
-  memcpy (&priv2,
-          priv1,
-          sizeof (priv2));
-
+  GNUNET_CRYPTO_ecdsa_private_to_ecdhe (priv1,
+                                        &priv2);
   /* Extract public keys */
   GNUNET_CRYPTO_ecdsa_key_get_public (priv1, &pub1);
   GNUNET_CRYPTO_ecdhe_key_get_public (&priv2, &pub2);
@@ -71,48 +69,42 @@
   struct GNUNET_CRYPTO_EcdhePublicKey id1c;
   struct GNUNET_CRYPTO_EcdhePublicKey id2c;
 
-  struct GNUNET_CRYPTO_EcdhePrivateKey *priv1;
-  struct GNUNET_CRYPTO_EcdhePrivateKey *priv2;
+  struct GNUNET_CRYPTO_EcdhePrivateKey priv1;
+  struct GNUNET_CRYPTO_EcdhePrivateKey priv2;
   struct GNUNET_CRYPTO_EcdhePublicKey pub2;
   struct GNUNET_HashCode dh[3];
 
   /* Generate, cast keys */
   priv_dsa1 = GNUNET_CRYPTO_ecdsa_key_create ();
   priv_dsa2 = GNUNET_CRYPTO_ecdsa_key_create ();
-  priv1 = (struct GNUNET_CRYPTO_EcdhePrivateKey *) priv_dsa1;
-  priv2 = (struct GNUNET_CRYPTO_EcdhePrivateKey *) priv_dsa2;
+  GNUNET_CRYPTO_ecdsa_private_to_ecdhe (priv_dsa1,
+                                        &priv1);
 
+  GNUNET_CRYPTO_ecdsa_private_to_ecdhe (priv_dsa2,
+                                        &priv2);
   /* Extract public keys */
   GNUNET_CRYPTO_ecdsa_key_get_public (priv_dsa1, &id1);
   GNUNET_CRYPTO_ecdsa_key_get_public (priv_dsa2, &id2);
-  GNUNET_CRYPTO_ecdhe_key_get_public (priv2, &pub2);
+  GNUNET_CRYPTO_ecdhe_key_get_public (&priv2, &pub2);
 
   /* Do ECDH */
   GNUNET_CRYPTO_ecdsa_public_to_ecdhe (&id2,
                                        &id2c);
   GNUNET_CRYPTO_ecdsa_public_to_ecdhe (&id1,
                                        &id1c);
-  GNUNET_CRYPTO_ecc_ecdh (priv1,
+  GNUNET_CRYPTO_ecc_ecdh (&priv1,
                           &id2c,
                           &dh[0]);
-  GNUNET_CRYPTO_ecc_ecdh (priv2,
+  GNUNET_CRYPTO_ecc_ecdh (&priv2,
                           &id1c,
                           &dh[1]);
-  GNUNET_CRYPTO_ecc_ecdh (priv1, &pub2, &dh[2]);
+  GNUNET_CRYPTO_ecc_ecdh (&priv1, &pub2, &dh[2]);
 
   /* Check that both DH results are equal. */
   GNUNET_assert (0 == memcmp (&dh[0], &dh[1],
                              sizeof (struct GNUNET_HashCode)));
-
-  /* FIXME: Maybe it should be the same as with ECDHE. */
-  // GNUNET_assert (0 == memcmp (&dh[1], &dh[2],
-  //                            sizeof (struct GNUNET_HashCode)));
-  // GNUNET_assert (0 == memcmp (&id1, &pub1,
-  //                            sizeof (struct GNUNET_CRYPTO_EcdhePublicKey)));
-
-  /* Free */
-  GNUNET_free (priv1);
-  GNUNET_free (priv2);
+  GNUNET_free (priv_dsa1);
+  GNUNET_free (priv_dsa2);
   return 0;
 }
 




reply via email to

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