diff options
author | Christian Fuchs <christian.fuchs@cfuchs.net> | 2014-01-26 17:49:27 +0000 |
---|---|---|
committer | Christian Fuchs <christian.fuchs@cfuchs.net> | 2014-01-26 17:49:27 +0000 |
commit | d91dfa3baa460287122c9ea5eee832929b0a6c57 (patch) | |
tree | 1d5da7d4b6ec91ebbffe814a4fe19092b5005b61 /src/util/test_crypto_paillier.c | |
parent | d412dbaf5d4014aa1a491ebf0a2a5aaa50e588fe (diff) | |
download | gnunet-d91dfa3baa460287122c9ea5eee832929b0a6c57.tar.gz gnunet-d91dfa3baa460287122c9ea5eee832929b0a6c57.zip |
- wrote a proper test for crypto-paillier
Diffstat (limited to 'src/util/test_crypto_paillier.c')
-rw-r--r-- | src/util/test_crypto_paillier.c | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/src/util/test_crypto_paillier.c b/src/util/test_crypto_paillier.c index f380b56f0..386f21d7c 100644 --- a/src/util/test_crypto_paillier.c +++ b/src/util/test_crypto_paillier.c | |||
@@ -31,25 +31,47 @@ | |||
31 | int | 31 | int |
32 | main (int argc, char *argv[]) | 32 | main (int argc, char *argv[]) |
33 | { | 33 | { |
34 | struct GNUNET_CRYPTO_PaillierPlaintext plaintext; | 34 | int ret; |
35 | struct GNUNET_CRYPTO_PaillierPlaintext plaintext_result; | 35 | gcry_mpi_t m1; |
36 | struct GNUNET_CRYPTO_PaillierCiphertext ciphertext; | 36 | gcry_mpi_t m2; |
37 | gcry_mpi_t result; | ||
38 | gcry_mpi_t hom_result; | ||
39 | struct GNUNET_CRYPTO_PaillierCiphertext c1; | ||
40 | struct GNUNET_CRYPTO_PaillierCiphertext c2; | ||
41 | struct GNUNET_CRYPTO_PaillierCiphertext c_result; | ||
42 | |||
37 | struct GNUNET_CRYPTO_PaillierPublicKey public_key; | 43 | struct GNUNET_CRYPTO_PaillierPublicKey public_key; |
38 | struct GNUNET_CRYPTO_PaillierPrivateKey private_key; | 44 | struct GNUNET_CRYPTO_PaillierPrivateKey private_key; |
39 | 45 | ||
40 | GNUNET_CRYPTO_paillier_create (&public_key, &private_key); | 46 | GNUNET_CRYPTO_paillier_create (&public_key, &private_key); |
41 | 47 | ||
42 | GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, &plaintext, sizeof plaintext); | 48 | GNUNET_assert (NULL != (m1 = gcry_mpi_new (GNUNET_CRYPTO_PAILLIER_BITS-1))); |
43 | plaintext.bits[0] = 0; | 49 | GNUNET_assert (NULL != (m2 = gcry_mpi_new (GNUNET_CRYPTO_PAILLIER_BITS-1))); |
50 | GNUNET_assert (NULL != (hom_result = gcry_mpi_new (GNUNET_CRYPTO_PAILLIER_BITS))); | ||
51 | gcry_mpi_randomize (m1, GNUNET_CRYPTO_PAILLIER_BITS-1, GCRY_WEAK_RANDOM); | ||
52 | gcry_mpi_randomize (m2, GNUNET_CRYPTO_PAILLIER_BITS-1, GCRY_WEAK_RANDOM); | ||
53 | gcry_mpi_add(result,m1,m2); | ||
44 | 54 | ||
45 | GNUNET_CRYPTO_paillier_encrypt (&public_key, &plaintext, &ciphertext); | 55 | if (1 != (ret = GNUNET_CRYPTO_paillier_encrypt (&public_key, m1, &c1))){ |
56 | printf ("GNUNET_CRYPTO_paillier_encrypt failed, should return 1 allowed operation, got %d!\n", ret); | ||
57 | return 1; | ||
58 | } | ||
59 | |||
60 | GNUNET_CRYPTO_paillier_encrypt (&public_key, m2, &c2); | ||
46 | 61 | ||
62 | if (0 != (ret = GNUNET_CRYPTO_paillier_hom_add (&public_key, &c1,&c2, &c_result))){ | ||
63 | printf ("GNUNET_CRYPTO_paillier_hom_add failed, expected 0 remaining operations, got %d!\n", ret); | ||
64 | return 1; | ||
65 | } | ||
66 | |||
47 | GNUNET_CRYPTO_paillier_decrypt (&private_key, &public_key, | 67 | GNUNET_CRYPTO_paillier_decrypt (&private_key, &public_key, |
48 | &ciphertext, &plaintext_result); | 68 | &c_result, hom_result); |
49 | 69 | ||
50 | if (0 != memcmp (&plaintext, &plaintext_result, sizeof plaintext)) | 70 | if (0 != gcry_mpi_cmp(result, hom_result)) |
71 | printf ("GNUNET_CRYPTO_paillier miscalculated!\n"); | ||
51 | return 1; | 72 | return 1; |
73 | |||
52 | return 0; | 74 | return 0; |
53 | } | 75 | } |
54 | 76 | ||
55 | /* end of test_crypto_paillier.c */ | 77 | /* end of test_crypto_paillier.c */ \ No newline at end of file |