diff options
author | Christian Grothoff <christian@grothoff.org> | 2015-03-19 13:21:30 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2015-03-19 13:21:30 +0000 |
commit | c641b74c2e060528100168f44c074526798c1623 (patch) | |
tree | f4a56b64f3483c03d77f4b2722c416e55e5d4c15 /src/util | |
parent | 7e76381a7d5ff4fe908542f17f76f81b99a5fb04 (diff) | |
download | gnunet-c641b74c2e060528100168f44c074526798c1623.tar.gz gnunet-c641b74c2e060528100168f44c074526798c1623.zip |
-also cover private key case
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/crypto_ecc.c | 23 | ||||
-rw-r--r-- | src/util/test_crypto_ecdh_ecdsa.c | 36 |
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 | */ | ||
1574 | void | ||
1575 | GNUNET_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 | ||