[Title] Add packaging/nettle.spec to build nettle on OBS system
[external/nettle.git] / testsuite / rsa-encrypt-test.c
1 #include "testutils.h"
2
3 #include "rsa.h"
4 #include "knuth-lfib.h"
5
6 int
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   unsigned msg_length;
16
17   uint8_t *decrypted;
18   unsigned decrypted_length;
19   
20   mpz_t gibberish;
21
22   rsa_private_key_init(&key);
23   rsa_public_key_init(&pub);
24   mpz_init(gibberish);
25
26   knuth_lfib_init(&lfib, 17);
27   
28   test_rsa_set_key_1(&pub, &key);
29   msg_length = strlen(msg);
30
31   if (verbose)
32     fprintf(stderr, "msg: `%s', length = %d\n", msg, msg_length);
33   
34   ASSERT(rsa_encrypt(&pub,
35                      &lfib, (nettle_random_func *) knuth_lfib_random,
36                      msg_length, msg,
37                      gibberish));
38
39   if (verbose)
40     {
41       /* In which GMP version was gmp_fprintf introduced? */
42       fprintf(stderr, "encrypted: ");
43       mpz_out_str(stderr, 10, gibberish);
44     }
45   
46   decrypted = xalloc(msg_length + 1);
47
48   decrypted_length = msg_length - 1;
49   ASSERT(!rsa_decrypt(&key, &decrypted_length, decrypted, gibberish));
50
51   decrypted_length = msg_length;
52   ASSERT(rsa_decrypt(&key, &decrypted_length, decrypted, gibberish));
53   ASSERT(decrypted_length == msg_length);
54   ASSERT(MEMEQ(msg_length, msg, decrypted));
55
56   decrypted_length = key.size;
57   ASSERT(rsa_decrypt(&key, &decrypted_length, decrypted, gibberish));
58   ASSERT(decrypted_length == msg_length);
59   ASSERT(MEMEQ(msg_length, msg, decrypted));
60   
61   rsa_private_key_clear(&key);
62   rsa_public_key_clear(&pub);
63   mpz_clear(gibberish);
64   free(decrypted);
65   SUCCESS();
66 }
67