4 #include "knuth-lfib.h"
9 struct rsa_public_key pub;
10 struct rsa_private_key key;
11 struct knuth_lfib_ctx lfib;
13 /* FIXME: How is this spelled? */
14 const uint8_t *msg = "Squemish ossifrage";
18 size_t decrypted_length;
23 rsa_private_key_init(&key);
24 rsa_public_key_init(&pub);
27 knuth_lfib_init(&lfib, 17);
29 test_rsa_set_key_1(&pub, &key);
30 msg_length = strlen(msg);
33 fprintf(stderr, "msg: `%s', length = %d\n", msg, (int) msg_length);
35 ASSERT(rsa_encrypt(&pub,
36 &lfib, (nettle_random_func *) knuth_lfib_random,
42 fprintf(stderr, "encrypted: ");
43 mpz_out_str(stderr, 10, gibberish);
46 decrypted = xalloc(msg_length + 1);
48 knuth_lfib_random (&lfib, msg_length + 1, decrypted);
49 after = decrypted[msg_length];
51 decrypted_length = msg_length - 1;
52 ASSERT(!rsa_decrypt(&key, &decrypted_length, decrypted, gibberish));
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);
60 knuth_lfib_random (&lfib, msg_length + 1, decrypted);
61 after = decrypted[msg_length];
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);
69 knuth_lfib_random (&lfib, msg_length + 1, decrypted);
70 after = decrypted[msg_length];
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);
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));
87 rsa_private_key_clear(&key);
88 rsa_public_key_clear(&pub);