d20dee9127e69934744d5615a5b61fba86f3b4d5
[platform/upstream/nettle.git] / testsuite / rsa-encrypt-test.c
1 #include "testutils.h"
2
3 #include "rsa.h"
4 #include "knuth-lfib.h"
5
6 void
7 test_main(void)
8 {
9   struct rsa_public_key pub;
10   struct rsa_private_key key;
11   struct knuth_lfib_ctx lfib;
12
13   /* FIXME: How is this spelled? */
14   const uint8_t *msg = "Squemish ossifrage";
15   size_t msg_length;
16
17   uint8_t *decrypted;
18   size_t decrypted_length;
19   uint8_t after;
20
21   mpz_t gibberish;
22
23   rsa_private_key_init(&key);
24   rsa_public_key_init(&pub);
25   mpz_init(gibberish);
26
27   knuth_lfib_init(&lfib, 17);
28   
29   test_rsa_set_key_1(&pub, &key);
30   msg_length = strlen(msg);
31
32   if (verbose)
33     fprintf(stderr, "msg: `%s', length = %d\n", msg, (int) msg_length);
34   
35   ASSERT(rsa_encrypt(&pub,
36                      &lfib, (nettle_random_func *) knuth_lfib_random,
37                      msg_length, msg,
38                      gibberish));
39
40   if (verbose)
41     {
42       fprintf(stderr, "encrypted: ");
43       mpz_out_str(stderr, 10, gibberish);
44     }
45   
46   decrypted = xalloc(msg_length + 1);
47
48   knuth_lfib_random (&lfib, msg_length + 1, decrypted);
49   after = decrypted[msg_length];
50   
51   decrypted_length = msg_length - 1;
52   ASSERT(!rsa_decrypt(&key, &decrypted_length, decrypted, gibberish));
53
54   decrypted_length = msg_length;
55   ASSERT(rsa_decrypt(&key, &decrypted_length, decrypted, gibberish));
56   ASSERT(decrypted_length == msg_length);
57   ASSERT(MEMEQ(msg_length, msg, decrypted));
58   ASSERT(decrypted[msg_length] == after);
59
60   knuth_lfib_random (&lfib, msg_length + 1, decrypted);
61   after = decrypted[msg_length];
62
63   decrypted_length = key.size;
64   ASSERT(rsa_decrypt(&key, &decrypted_length, decrypted, gibberish));
65   ASSERT(decrypted_length == msg_length);
66   ASSERT(MEMEQ(msg_length, msg, decrypted));
67   ASSERT(decrypted[msg_length] == after);
68   
69   knuth_lfib_random (&lfib, msg_length + 1, decrypted);
70   after = decrypted[msg_length];
71
72   decrypted_length = msg_length;
73   ASSERT(rsa_decrypt_tr(&pub, &key,
74                         &lfib, (nettle_random_func *) knuth_lfib_random,
75                         &decrypted_length, decrypted, gibberish));
76   ASSERT(decrypted_length == msg_length);
77   ASSERT(MEMEQ(msg_length, msg, decrypted));
78   ASSERT(decrypted[msg_length] == after);
79
80   /* Test invalid key. */
81   mpz_add_ui (key.q, key.q, 2);
82   decrypted_length = key.size;
83   ASSERT(!rsa_decrypt_tr(&pub, &key,
84                          &lfib, (nettle_random_func *) knuth_lfib_random,
85                          &decrypted_length, decrypted, gibberish));
86
87   rsa_private_key_clear(&key);
88   rsa_public_key_clear(&pub);
89   mpz_clear(gibberish);
90   free(decrypted);
91 }
92