add packaging
[platform/upstream/nettle.git] / testsuite / camellia-test.c
1 #include "testutils.h"
2 #include "camellia.h"
3
4 static void
5 test_invert(const struct tstring *key,
6             const struct tstring *cleartext,
7             const struct tstring *ciphertext)
8 {
9   struct camellia_ctx encrypt;
10   struct camellia_ctx decrypt;
11   uint8_t *data;
12   unsigned length;
13
14   ASSERT (cleartext->length == ciphertext->length);
15   length = cleartext->length;
16
17   data = xalloc(length);
18
19   camellia_set_encrypt_key (&encrypt, key->length, key->data);
20   camellia_crypt (&encrypt, length, data, cleartext->data);
21   
22   if (!MEMEQ(length, data, ciphertext->data))
23     {
24       tstring_print_hex(cleartext);
25       fprintf(stderr, "\nOutput: ");
26       print_hex(length, data);
27       fprintf(stderr, "\nExpected:");
28       tstring_print_hex(ciphertext);
29       fprintf(stderr, "\n");
30       FAIL();
31     }
32
33   camellia_invert_key (&decrypt, &encrypt);
34   camellia_crypt (&decrypt, length, data, data);
35
36   if (!MEMEQ(length, data, cleartext->data))
37     {
38       fprintf(stderr, "test_invert: Decrypt failed:\nInput:");
39       tstring_print_hex(ciphertext);
40       fprintf(stderr, "\nOutput: ");
41       print_hex(length, data);
42       fprintf(stderr, "\nExpected:");
43       tstring_print_hex(cleartext);
44       fprintf(stderr, "\n");
45       FAIL();
46     }
47   free (data);
48 }
49
50 void
51 test_main(void)
52 {
53   /* Test vectors from RFC 3713 */
54   /* 128 bit keys */
55   test_cipher(&nettle_camellia128,
56               SHEX("01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10"),
57               SHEX("01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10"),
58               SHEX("67 67 31 38 54 96 69 73 08 57 06 56 48 ea be 43"));
59
60   /* 192 bit keys */
61   test_cipher(&nettle_camellia192, 
62               SHEX("01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10"
63                    "00 11 22 33 44 55 66 77"),
64               SHEX("01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10"),
65               SHEX("b4 99 34 01 b3 e9 96 f8 4e e5 ce e7 d7 9b 09 b9"));
66
67   /* 256 bit keys */
68   test_cipher(&nettle_camellia256, 
69               SHEX("01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10"
70                    "00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff"),
71               SHEX("01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10"),
72               SHEX("9a cc 23 7d ff 16 d7 6c 20 ef 7c 91 9e 3a 75 09"));
73
74   /* Test camellia_invert_key with src != dst */
75   test_invert(SHEX("01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10"),
76               SHEX("01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10"),
77               SHEX("67 67 31 38 54 96 69 73 08 57 06 56 48 ea be 43"));
78   
79   test_invert(SHEX("01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10"
80                    "00 11 22 33 44 55 66 77"),
81               SHEX("01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10"),
82               SHEX("b4 99 34 01 b3 e9 96 f8 4e e5 ce e7 d7 9b 09 b9"));
83
84   test_invert(SHEX("01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10"
85                    "00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff"),
86               SHEX("01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10"),
87               SHEX("9a cc 23 7d ff 16 d7 6c 20 ef 7c 91 9e 3a 75 09"));
88 }