X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Ftest_crypto_rsa.c;h=70b388b8f768990bd17702371a386681e07fec3c;hb=2587d268f7c92b09bfc1b0130105b378d6055329;hp=e58a0960a0600384d99db5334f044d7cedfd99ad;hpb=94d1277e5e5cac0a9f66e4b5b058b4c37e718f13;p=oweals%2Fgnunet.git diff --git a/src/util/test_crypto_rsa.c b/src/util/test_crypto_rsa.c index e58a0960a..70b388b8f 100644 --- a/src/util/test_crypto_rsa.c +++ b/src/util/test_crypto_rsa.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet - (C) 2014 Christian Grothoff (and other contributing authors) + Copyright (C) 2014,2015 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -32,9 +32,12 @@ main (int argc, #define RND_BLK_SIZE 4096 unsigned char rnd_blk[RND_BLK_SIZE]; struct GNUNET_CRYPTO_rsa_PrivateKey *priv; + struct GNUNET_CRYPTO_rsa_PrivateKey *priv_copy; struct GNUNET_CRYPTO_rsa_PublicKey *pub; + struct GNUNET_CRYPTO_rsa_PublicKey *pub_copy; struct GNUNET_CRYPTO_rsa_BlindingKey *bkey; struct GNUNET_CRYPTO_rsa_Signature *sig; + struct GNUNET_CRYPTO_rsa_Signature *sig_copy; struct GNUNET_CRYPTO_rsa_Signature *bsig; struct GNUNET_HashCode hash; char *blind_buf; @@ -48,14 +51,37 @@ main (int argc, RND_BLK_SIZE, &hash); priv = GNUNET_CRYPTO_rsa_private_key_create (KEY_SIZE); + priv_copy = GNUNET_CRYPTO_rsa_private_key_dup (priv); + GNUNET_assert (NULL != priv_copy); + GNUNET_assert (0 == GNUNET_CRYPTO_rsa_private_key_cmp (priv, priv_copy)); pub = GNUNET_CRYPTO_rsa_private_key_get_public (priv); + /* Encoding */ + size_t size; + char *enc; + enc = NULL; + size = GNUNET_CRYPTO_rsa_private_key_encode (priv, &enc); + /* Decoding */ + GNUNET_CRYPTO_rsa_private_key_free (priv); + priv = NULL; + priv = GNUNET_CRYPTO_rsa_private_key_decode (enc, size); + GNUNET_assert (NULL != priv); + GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, + enc, size); + GNUNET_assert (NULL == GNUNET_CRYPTO_rsa_private_key_decode (enc, size)); + (void) fprintf (stderr, "The above warning is expected.\n"); + GNUNET_free (enc); + /* try ordinary sig first */ sig = GNUNET_CRYPTO_rsa_sign (priv, &hash, sizeof (hash)); + sig_copy = GNUNET_CRYPTO_rsa_signature_dup (sig); + GNUNET_assert (NULL != sig); + GNUNET_assert (0 == GNUNET_CRYPTO_rsa_signature_cmp (sig, sig_copy)); + pub_copy = GNUNET_CRYPTO_rsa_public_key_dup (pub); + GNUNET_assert (NULL != pub_copy); GNUNET_assert (GNUNET_OK == - GNUNET_CRYPTO_rsa_verify (&hash, sig, pub)); - GNUNET_CRYPTO_rsa_signature_free (sig); + GNUNET_CRYPTO_rsa_verify (&hash, sig, pub_copy)); /* corrupt our hash and see if the signature is still valid */ GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, &hash, sizeof (struct GNUNET_HashCode)); @@ -63,6 +89,7 @@ main (int argc, sig, pub)); (void) fprintf (stderr, "The above warning is expected.\n"); + GNUNET_CRYPTO_rsa_signature_free (sig); /* test blind signing */ @@ -83,8 +110,11 @@ main (int argc, GNUNET_assert (GNUNET_OK == GNUNET_CRYPTO_rsa_verify (&hash, sig, pub)); GNUNET_CRYPTO_rsa_signature_free (sig); + GNUNET_CRYPTO_rsa_signature_free (sig_copy); GNUNET_CRYPTO_rsa_private_key_free (priv); + GNUNET_CRYPTO_rsa_private_key_free (priv_copy); GNUNET_CRYPTO_rsa_public_key_free (pub); + GNUNET_CRYPTO_rsa_public_key_free (pub_copy); GNUNET_CRYPTO_rsa_blinding_key_free (bkey); return 0; }