cadeda5f2ba809001eb69065ee1538c2b8877b02
[platform/upstream/nettle.git] / testsuite / blowfish-test.c
1 #include "testutils.h"
2 #include "nettle-internal.h"
3 #include "blowfish.h"
4
5 static void
6 test_blowfish(const struct tstring *key,
7               const struct tstring *cleartext,
8               const struct tstring *ciphertext)
9 {
10   struct blowfish_ctx ctx;
11   uint8_t *data = xalloc(cleartext->length);
12   size_t length;
13   ASSERT (cleartext->length == ciphertext->length);
14   length = cleartext->length;
15
16   blowfish_set_key(&ctx, key->length, key->data);
17   blowfish_encrypt(&ctx, length, data, cleartext->data);
18
19   if (!MEMEQ(length, data, ciphertext->data))
20     {
21       fprintf(stderr, "Encrypt failed:\nInput:");
22       tstring_print_hex(cleartext);
23       fprintf(stderr, "\nOutput: ");
24       print_hex(length, data);
25       fprintf(stderr, "\nExpected:");
26       tstring_print_hex(ciphertext);
27       fprintf(stderr, "\n");
28       FAIL();
29     }
30   blowfish_set_key(&ctx, key->length, key->data);
31   blowfish_decrypt(&ctx, length, data, data);
32
33   if (!MEMEQ(length, data, cleartext->data))
34     {
35       fprintf(stderr, "Decrypt failed:\nInput:");
36       tstring_print_hex(ciphertext);
37       fprintf(stderr, "\nOutput: ");
38       print_hex(length, data);
39       fprintf(stderr, "\nExpected:");
40       tstring_print_hex(cleartext);
41       fprintf(stderr, "\n");
42       FAIL();
43     }
44
45   free(data);
46 }
47
48 void
49 test_main(void)
50 {
51   /* 208 bit key. Test from GNUPG. */
52   test_blowfish(SDATA("abcdefghijklmnopqrstuvwxyz"),
53                 SDATA("BLOWFISH"),
54                 SHEX("32 4E D0 FE F4 13 A2 03"));
55 }