aboutsummaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-03-19 13:21:30 +0000
committerChristian Grothoff <christian@grothoff.org>2015-03-19 13:21:30 +0000
commitc641b74c2e060528100168f44c074526798c1623 (patch)
treef4a56b64f3483c03d77f4b2722c416e55e5d4c15 /src/util
parent7e76381a7d5ff4fe908542f17f76f81b99a5fb04 (diff)
downloadgnunet-c641b74c2e060528100168f44c074526798c1623.tar.gz
gnunet-c641b74c2e060528100168f44c074526798c1623.zip
-also cover private key case
Diffstat (limited to 'src/util')
-rw-r--r--src/util/crypto_ecc.c23
-rw-r--r--src/util/test_crypto_ecdh_ecdsa.c36
2 files changed, 37 insertions, 22 deletions
diff --git a/src/util/crypto_ecc.c b/src/util/crypto_ecc.c
index 25393cbf6..429d2bf4b 100644
--- a/src/util/crypto_ecc.c
+++ b/src/util/crypto_ecc.c
@@ -1561,4 +1561,27 @@ GNUNET_CRYPTO_ecdsa_public_to_ecdhe (const struct GNUNET_CRYPTO_EcdsaPublicKey *
1561} 1561}
1562 1562
1563 1563
1564
1565/**
1566 * @ingroup crypto
1567 * Convert ECDSA private key to ECDHE private key.
1568 * Please be very careful when using this function, as mixing
1569 * cryptographic primitives is not always healthy.
1570 *
1571 * @param ecdsa ecdsa private key
1572 * @param ecdhe[OUT] ecdhe private key
1573 */
1574void
1575GNUNET_CRYPTO_ecdsa_private_to_ecdhe (const struct GNUNET_CRYPTO_EcdsaPrivateKey *ecdsa,
1576 struct GNUNET_CRYPTO_EcdhePrivateKey *ecdhe)
1577{
1578 GNUNET_assert (sizeof (struct GNUNET_CRYPTO_EcdhePrivateKey) ==
1579 sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey));
1580 memcpy (ecdhe,
1581 ecdsa,
1582 sizeof (struct GNUNET_CRYPTO_EcdhePrivateKey));
1583
1584}
1585
1586
1564/* end of crypto_ecc.c */ 1587/* end of crypto_ecc.c */
diff --git a/src/util/test_crypto_ecdh_ecdsa.c b/src/util/test_crypto_ecdh_ecdsa.c
index 8eb2055ae..39e68abfc 100644
--- a/src/util/test_crypto_ecdh_ecdsa.c
+++ b/src/util/test_crypto_ecdh_ecdsa.c
@@ -40,10 +40,8 @@ test_pk()
40 40
41 /* Generate, cast keys */ 41 /* Generate, cast keys */
42 priv1 = GNUNET_CRYPTO_ecdsa_key_create (); 42 priv1 = GNUNET_CRYPTO_ecdsa_key_create ();
43 memcpy (&priv2, 43 GNUNET_CRYPTO_ecdsa_private_to_ecdhe (priv1,
44 priv1, 44 &priv2);
45 sizeof (priv2));
46
47 /* Extract public keys */ 45 /* Extract public keys */
48 GNUNET_CRYPTO_ecdsa_key_get_public (priv1, &pub1); 46 GNUNET_CRYPTO_ecdsa_key_get_public (priv1, &pub1);
49 GNUNET_CRYPTO_ecdhe_key_get_public (&priv2, &pub2); 47 GNUNET_CRYPTO_ecdhe_key_get_public (&priv2, &pub2);
@@ -71,48 +69,42 @@ test_ecdh()
71 struct GNUNET_CRYPTO_EcdhePublicKey id1c; 69 struct GNUNET_CRYPTO_EcdhePublicKey id1c;
72 struct GNUNET_CRYPTO_EcdhePublicKey id2c; 70 struct GNUNET_CRYPTO_EcdhePublicKey id2c;
73 71
74 struct GNUNET_CRYPTO_EcdhePrivateKey *priv1; 72 struct GNUNET_CRYPTO_EcdhePrivateKey priv1;
75 struct GNUNET_CRYPTO_EcdhePrivateKey *priv2; 73 struct GNUNET_CRYPTO_EcdhePrivateKey priv2;
76 struct GNUNET_CRYPTO_EcdhePublicKey pub2; 74 struct GNUNET_CRYPTO_EcdhePublicKey pub2;
77 struct GNUNET_HashCode dh[3]; 75 struct GNUNET_HashCode dh[3];
78 76
79 /* Generate, cast keys */ 77 /* Generate, cast keys */
80 priv_dsa1 = GNUNET_CRYPTO_ecdsa_key_create (); 78 priv_dsa1 = GNUNET_CRYPTO_ecdsa_key_create ();
81 priv_dsa2 = GNUNET_CRYPTO_ecdsa_key_create (); 79 priv_dsa2 = GNUNET_CRYPTO_ecdsa_key_create ();
82 priv1 = (struct GNUNET_CRYPTO_EcdhePrivateKey *) priv_dsa1; 80 GNUNET_CRYPTO_ecdsa_private_to_ecdhe (priv_dsa1,
83 priv2 = (struct GNUNET_CRYPTO_EcdhePrivateKey *) priv_dsa2; 81 &priv1);
84 82
83 GNUNET_CRYPTO_ecdsa_private_to_ecdhe (priv_dsa2,
84 &priv2);
85 /* Extract public keys */ 85 /* Extract public keys */
86 GNUNET_CRYPTO_ecdsa_key_get_public (priv_dsa1, &id1); 86 GNUNET_CRYPTO_ecdsa_key_get_public (priv_dsa1, &id1);
87 GNUNET_CRYPTO_ecdsa_key_get_public (priv_dsa2, &id2); 87 GNUNET_CRYPTO_ecdsa_key_get_public (priv_dsa2, &id2);
88 GNUNET_CRYPTO_ecdhe_key_get_public (priv2, &pub2); 88 GNUNET_CRYPTO_ecdhe_key_get_public (&priv2, &pub2);
89 89
90 /* Do ECDH */ 90 /* Do ECDH */
91 GNUNET_CRYPTO_ecdsa_public_to_ecdhe (&id2, 91 GNUNET_CRYPTO_ecdsa_public_to_ecdhe (&id2,
92 &id2c); 92 &id2c);
93 GNUNET_CRYPTO_ecdsa_public_to_ecdhe (&id1, 93 GNUNET_CRYPTO_ecdsa_public_to_ecdhe (&id1,
94 &id1c); 94 &id1c);
95 GNUNET_CRYPTO_ecc_ecdh (priv1, 95 GNUNET_CRYPTO_ecc_ecdh (&priv1,
96 &id2c, 96 &id2c,
97 &dh[0]); 97 &dh[0]);
98 GNUNET_CRYPTO_ecc_ecdh (priv2, 98 GNUNET_CRYPTO_ecc_ecdh (&priv2,
99 &id1c, 99 &id1c,
100 &dh[1]); 100 &dh[1]);
101 GNUNET_CRYPTO_ecc_ecdh (priv1, &pub2, &dh[2]); 101 GNUNET_CRYPTO_ecc_ecdh (&priv1, &pub2, &dh[2]);
102 102
103 /* Check that both DH results are equal. */ 103 /* Check that both DH results are equal. */
104 GNUNET_assert (0 == memcmp (&dh[0], &dh[1], 104 GNUNET_assert (0 == memcmp (&dh[0], &dh[1],
105 sizeof (struct GNUNET_HashCode))); 105 sizeof (struct GNUNET_HashCode)));
106 106 GNUNET_free (priv_dsa1);
107 /* FIXME: Maybe it should be the same as with ECDHE. */ 107 GNUNET_free (priv_dsa2);
108 // GNUNET_assert (0 == memcmp (&dh[1], &dh[2],
109 // sizeof (struct GNUNET_HashCode)));
110 // GNUNET_assert (0 == memcmp (&id1, &pub1,
111 // sizeof (struct GNUNET_CRYPTO_EcdhePublicKey)));
112
113 /* Free */
114 GNUNET_free (priv1);
115 GNUNET_free (priv2);
116 return 0; 108 return 0;
117} 109}
118 110