diff options
author | Sree Harsha Totakura <totakura@in.tum.de> | 2015-05-27 07:42:45 +0000 |
---|---|---|
committer | Sree Harsha Totakura <totakura@in.tum.de> | 2015-05-27 07:42:45 +0000 |
commit | 9469cd334f29ca9437e13eb951b53b7690f10be9 (patch) | |
tree | ea5bd88f9b566355bd39f2063ee697b0774c0165 /src/util | |
parent | fd40063b16d12f18145a583ef10b925feb8d57df (diff) | |
download | gnunet-9469cd334f29ca9437e13eb951b53b7690f10be9.tar.gz gnunet-9469cd334f29ca9437e13eb951b53b7690f10be9.zip |
validate the parsed RSA private key
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/crypto_rsa.c | 12 | ||||
-rw-r--r-- | src/util/test_crypto_rsa.c | 9 |
2 files changed, 18 insertions, 3 deletions
diff --git a/src/util/crypto_rsa.c b/src/util/crypto_rsa.c index 9896d8dce..2aadf2fc4 100644 --- a/src/util/crypto_rsa.c +++ b/src/util/crypto_rsa.c | |||
@@ -222,7 +222,6 @@ GNUNET_CRYPTO_rsa_private_key_decode (const char *buf, | |||
222 | size_t len) | 222 | size_t len) |
223 | { | 223 | { |
224 | struct GNUNET_CRYPTO_rsa_PrivateKey *key; | 224 | struct GNUNET_CRYPTO_rsa_PrivateKey *key; |
225 | |||
226 | key = GNUNET_new (struct GNUNET_CRYPTO_rsa_PrivateKey); | 225 | key = GNUNET_new (struct GNUNET_CRYPTO_rsa_PrivateKey); |
227 | if (0 != | 226 | if (0 != |
228 | gcry_sexp_new (&key->sexp, | 227 | gcry_sexp_new (&key->sexp, |
@@ -230,11 +229,18 @@ GNUNET_CRYPTO_rsa_private_key_decode (const char *buf, | |||
230 | len, | 229 | len, |
231 | 0)) | 230 | 0)) |
232 | { | 231 | { |
233 | GNUNET_break_op (0); | 232 | LOG (GNUNET_ERROR_TYPE_WARNING, |
233 | "Decoded private key is not valid\n"); | ||
234 | GNUNET_free (key); | 234 | GNUNET_free (key); |
235 | return NULL; | 235 | return NULL; |
236 | } | 236 | } |
237 | /* FIXME: verify that this is an RSA private key */ | 237 | if (0 != gcry_pk_testkey (key->sexp)) |
238 | { | ||
239 | LOG (GNUNET_ERROR_TYPE_WARNING, | ||
240 | "Decoded private key is not valid\n"); | ||
241 | GNUNET_CRYPTO_rsa_private_key_free (key); | ||
242 | return NULL; | ||
243 | } | ||
238 | return key; | 244 | return key; |
239 | } | 245 | } |
240 | 246 | ||
diff --git a/src/util/test_crypto_rsa.c b/src/util/test_crypto_rsa.c index fc41dc24f..b2d749ab9 100644 --- a/src/util/test_crypto_rsa.c +++ b/src/util/test_crypto_rsa.c | |||
@@ -54,6 +54,15 @@ main (int argc, | |||
54 | char *enc; | 54 | char *enc; |
55 | enc = NULL; | 55 | enc = NULL; |
56 | size = GNUNET_CRYPTO_rsa_private_key_encode (priv, &enc); | 56 | size = GNUNET_CRYPTO_rsa_private_key_encode (priv, &enc); |
57 | /* Decoding */ | ||
58 | GNUNET_CRYPTO_rsa_private_key_free (priv); | ||
59 | priv = NULL; | ||
60 | priv = GNUNET_CRYPTO_rsa_private_key_decode (enc, size); | ||
61 | GNUNET_assert (NULL != priv); | ||
62 | GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, | ||
63 | enc, size); | ||
64 | GNUNET_assert (NULL == GNUNET_CRYPTO_rsa_private_key_decode (enc, size)); | ||
65 | (void) fprintf (stderr, "The above warning is expected.\n"); | ||
57 | GNUNET_free (enc); | 66 | GNUNET_free (enc); |
58 | 67 | ||
59 | /* try ordinary sig first */ | 68 | /* try ordinary sig first */ |