diff options
author | Martin Schanzenbach <mschanzenbach@posteo.de> | 2021-05-03 18:49:17 +0200 |
---|---|---|
committer | Martin Schanzenbach <mschanzenbach@posteo.de> | 2021-05-03 18:49:17 +0200 |
commit | d552acf5e7114f92d8251276ef76827a9db92257 (patch) | |
tree | 4b5ed54763b6acbd8292d52ef9fda9a789c56ec8 /src/util | |
parent | 5bb2578678064ff4d537fcbc8d9a552a6779892d (diff) | |
download | gnunet-d552acf5e7114f92d8251276ef76827a9db92257.tar.gz gnunet-d552acf5e7114f92d8251276ef76827a9db92257.zip |
-add more tests for eddsa and gnsrecord
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/crypto_ecc_gnsrecord.c | 24 | ||||
-rw-r--r-- | src/util/test_crypto_eddsa.c | 74 |
2 files changed, 95 insertions, 3 deletions
diff --git a/src/util/crypto_ecc_gnsrecord.c b/src/util/crypto_ecc_gnsrecord.c index 59efff8ab..a78511105 100644 --- a/src/util/crypto_ecc_gnsrecord.c +++ b/src/util/crypto_ecc_gnsrecord.c | |||
@@ -114,8 +114,8 @@ GNUNET_CRYPTO_eddsa_sign_with_scalar ( | |||
114 | * Calculate the derived zone key zk' from the | 114 | * Calculate the derived zone key zk' from the |
115 | * derived private scalar. | 115 | * derived private scalar. |
116 | */ | 116 | */ |
117 | crypto_scalarmult_ed25519_base (zk, | 117 | crypto_scalarmult_ed25519_base_noclamp (zk, |
118 | sk); | 118 | sk); |
119 | 119 | ||
120 | /** | 120 | /** |
121 | * Calculate r: | 121 | * Calculate r: |
@@ -352,7 +352,7 @@ GNUNET_CRYPTO_eddsa_private_key_derive ( | |||
352 | GNUNET_CRYPTO_mpi_print_unsigned (dc, sizeof(dc), d); | 352 | GNUNET_CRYPTO_mpi_print_unsigned (dc, sizeof(dc), d); |
353 | /** | 353 | /** |
354 | * Note that we copy all of SHA512(d) into the result and | 354 | * Note that we copy all of SHA512(d) into the result and |
355 | * then overrwrite the derived private scalar. | 355 | * then overwrite the derived private scalar. |
356 | * This means that we re-use SHA512(d)[32..63] | 356 | * This means that we re-use SHA512(d)[32..63] |
357 | * FIXME: Do we want to derive this part as well?? | 357 | * FIXME: Do we want to derive this part as well?? |
358 | */ | 358 | */ |
@@ -420,3 +420,21 @@ GNUNET_CRYPTO_eddsa_public_key_derive ( | |||
420 | gcry_ctx_release (ctx); | 420 | gcry_ctx_release (ctx); |
421 | 421 | ||
422 | } | 422 | } |
423 | |||
424 | |||
425 | void | ||
426 | GNUNET_CRYPTO_eddsa_key_get_public_from_scalar ( | ||
427 | const struct GNUNET_CRYPTO_EddsaPrivateScalar *priv, | ||
428 | struct GNUNET_CRYPTO_EddsaPublicKey *pkey) | ||
429 | { | ||
430 | unsigned char sk[32]; | ||
431 | |||
432 | memcpy (sk, priv->s, 32); | ||
433 | |||
434 | /** | ||
435 | * Calculate the derived zone key zk' from the | ||
436 | * derived private scalar. | ||
437 | */ | ||
438 | crypto_scalarmult_ed25519_base_noclamp (pkey->q_y, | ||
439 | sk); | ||
440 | } | ||
diff --git a/src/util/test_crypto_eddsa.c b/src/util/test_crypto_eddsa.c index 5baf696b1..10d6a4e91 100644 --- a/src/util/test_crypto_eddsa.c +++ b/src/util/test_crypto_eddsa.c | |||
@@ -100,6 +100,73 @@ testSignVerify (void) | |||
100 | } | 100 | } |
101 | 101 | ||
102 | 102 | ||
103 | static int | ||
104 | testDeriveSignVerify (void) | ||
105 | { | ||
106 | struct GNUNET_CRYPTO_EddsaSignature sig; | ||
107 | struct GNUNET_CRYPTO_EccSignaturePurpose purp; | ||
108 | struct GNUNET_CRYPTO_EddsaPrivateScalar dpriv; | ||
109 | struct GNUNET_CRYPTO_EddsaPublicKey pkey; | ||
110 | struct GNUNET_CRYPTO_EddsaPublicKey dpub; | ||
111 | struct GNUNET_CRYPTO_EddsaPublicKey dpub2; | ||
112 | |||
113 | GNUNET_CRYPTO_eddsa_private_key_derive (&key, | ||
114 | "test-derive", | ||
115 | "test-CTX", | ||
116 | &dpriv); | ||
117 | GNUNET_CRYPTO_eddsa_key_get_public (&key, | ||
118 | &pkey); | ||
119 | GNUNET_CRYPTO_eddsa_public_key_derive (&pkey, | ||
120 | "test-derive", | ||
121 | "test-CTX", | ||
122 | &dpub); | ||
123 | GNUNET_CRYPTO_eddsa_key_get_public_from_scalar (&dpriv, &dpub2); | ||
124 | purp.size = htonl (sizeof(struct GNUNET_CRYPTO_EccSignaturePurpose)); | ||
125 | purp.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_TEST); | ||
126 | |||
127 | if (0 != GNUNET_memcmp (&dpub.q_y, &dpub2.q_y)) | ||
128 | { | ||
129 | fprintf (stderr, "%s", "key derivation failed\n"); | ||
130 | return GNUNET_SYSERR; | ||
131 | } | ||
132 | |||
133 | GNUNET_CRYPTO_eddsa_sign_with_scalar (&dpriv, | ||
134 | &purp, | ||
135 | &sig); | ||
136 | if (GNUNET_SYSERR == | ||
137 | GNUNET_CRYPTO_eddsa_verify_ (GNUNET_SIGNATURE_PURPOSE_TEST, | ||
138 | &purp, | ||
139 | &sig, | ||
140 | &dpub)) | ||
141 | { | ||
142 | fprintf (stderr, | ||
143 | "GNUNET_CRYPTO_eddsa_verify failed!\n"); | ||
144 | return GNUNET_SYSERR; | ||
145 | } | ||
146 | if (GNUNET_SYSERR != | ||
147 | GNUNET_CRYPTO_eddsa_verify_ (GNUNET_SIGNATURE_PURPOSE_TEST, | ||
148 | &purp, | ||
149 | &sig, | ||
150 | &pkey)) | ||
151 | { | ||
152 | fprintf (stderr, | ||
153 | "GNUNET_CRYPTO_eddsa_verify failed to fail!\n"); | ||
154 | return GNUNET_SYSERR; | ||
155 | } | ||
156 | if (GNUNET_SYSERR != | ||
157 | GNUNET_CRYPTO_eddsa_verify_ (GNUNET_SIGNATURE_PURPOSE_TRANSPORT_PONG_OWN, | ||
158 | &purp, | ||
159 | &sig, | ||
160 | &dpub)) | ||
161 | { | ||
162 | fprintf (stderr, | ||
163 | "GNUNET_CRYPTO_eddsa_verify failed to fail!\n"); | ||
164 | return GNUNET_SYSERR; | ||
165 | } | ||
166 | return GNUNET_OK; | ||
167 | } | ||
168 | |||
169 | |||
103 | #if PERF | 170 | #if PERF |
104 | static int | 171 | static int |
105 | testSignPerformance () | 172 | testSignPerformance () |
@@ -217,6 +284,13 @@ main (int argc, char *argv[]) | |||
217 | "WARNING", | 284 | "WARNING", |
218 | NULL); | 285 | NULL); |
219 | GNUNET_CRYPTO_eddsa_key_create (&key); | 286 | GNUNET_CRYPTO_eddsa_key_create (&key); |
287 | if (GNUNET_OK != testDeriveSignVerify ()) | ||
288 | { | ||
289 | failure_count++; | ||
290 | fprintf (stderr, | ||
291 | "\n\n%d TESTS FAILED!\n\n", failure_count); | ||
292 | return -1; | ||
293 | } | ||
220 | #if PERF | 294 | #if PERF |
221 | if (GNUNET_OK != testSignPerformance ()) | 295 | if (GNUNET_OK != testSignPerformance ()) |
222 | failure_count++; | 296 | failure_count++; |