add packaging
[platform/upstream/nettle.git] / testsuite / ctr-test.c
1 #include "testutils.h"
2 #include "aes.h"
3 #include "ctr.h"
4
5 void
6 test_main(void)
7 {
8   /* From NIST spec 800-38a on AES modes,
9    *
10    * http://csrc.nist.gov/CryptoToolkit/modes/800-38_Series_Publications/SP800-38A.pdf
11    *
12    * F.5  CTR Example Vectors
13    */
14
15   /* Zero-length data. Exposes bug reported by Tim Kosse, where
16      ctr_crypt increment the ctr when it shouldn't. */
17   test_cipher_ctr(&nettle_aes128,
18                   SHEX("2b7e151628aed2a6abf7158809cf4f3c"),
19                   SHEX(""), SHEX(""),
20                   SHEX("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff"));
21   
22   /* F.5.1  CTR-AES128.Encrypt */
23   test_cipher_ctr(&nettle_aes128,
24                   SHEX("2b7e151628aed2a6abf7158809cf4f3c"),
25                   SHEX("6bc1bee22e409f96e93d7e117393172a"
26                        "ae2d8a571e03ac9c9eb76fac45af8e51"
27                        "30c81c46a35ce411e5fbc1191a0a52ef"
28                        "f69f2445df4f9b17ad2b417be66c3710"),
29                   SHEX("874d6191b620e3261bef6864990db6ce"
30                        "9806f66b7970fdff8617187bb9fffdff"
31                        "5ae4df3edbd5d35e5b4f09020db03eab"
32                        "1e031dda2fbe03d1792170a0f3009cee"),
33                   SHEX("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff"));
34
35   /* F.5.3  CTR-AES192.Encrypt */
36   test_cipher_ctr(&nettle_aes192,
37                   SHEX("8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b"),
38                   SHEX("6bc1bee22e409f96e93d7e117393172a"
39                        "ae2d8a571e03ac9c9eb76fac45af8e51"
40                        "30c81c46a35ce411e5fbc1191a0a52ef"
41                        "f69f2445df4f9b17ad2b417be66c3710"),
42                   SHEX("1abc932417521ca24f2b0459fe7e6e0b"
43                        "090339ec0aa6faefd5ccc2c6f4ce8e94"
44                        "1e36b26bd1ebc670d1bd1d665620abf7"
45                        "4f78a7f6d29809585a97daec58c6b050"),
46                   SHEX("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff"));
47
48   /* F.5.5  CTR-AES256.Encrypt */
49   test_cipher_ctr(&nettle_aes256,
50                   SHEX("603deb1015ca71be2b73aef0857d7781"
51                        "1f352c073b6108d72d9810a30914dff4"),
52                   SHEX("6bc1bee22e409f96e93d7e117393172a"
53                        "ae2d8a571e03ac9c9eb76fac45af8e51"
54                        "30c81c46a35ce411e5fbc1191a0a52ef"
55                        "f69f2445df4f9b17ad2b417be66c3710"),
56                   SHEX("601ec313775789a5b7a7f504bbf3d228"
57                        "f443e3ca4d62b59aca84e990cacaf5c5"
58                        "2b0930daa23de94ce87017ba2d84988d"
59                        "dfc9c58db67aada613c2dd08457941a6"),
60                   SHEX("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff"));
61 }
62
63 /*
64   F.5.1  CTR-AES128.Encrypt
65   Key            2b7e151628aed2a6abf7158809cf4f3c
66   Init. Counter f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
67   Block #1
68   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
69   Output Block   ec8cdf7398607cb0f2d21675ea9ea1e4
70   Plaintext      6bc1bee22e409f96e93d7e117393172a
71   Ciphertext     874d6191b620e3261bef6864990db6ce
72   Block #2
73   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdff00
74   Output Block   362b7c3c6773516318a077d7fc5073ae
75   Plaintext      ae2d8a571e03ac9c9eb76fac45af8e51
76   Ciphertext     9806f66b7970fdff8617187bb9fffdff
77   Block #3
78   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdff01
79   Output Block   6a2cc3787889374fbeb4c81b17ba6c44
80   Plaintext      30c81c46a35ce411e5fbc1191a0a52ef
81   Ciphertext     5ae4df3edbd5d35e5b4f09020db03eab
82   Block #4
83   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdff02
84   Output Block   e89c399ff0f198c6d40a31db156cabfe
85   Plaintext      f69f2445df4f9b17ad2b417be66c3710
86   Ciphertext     1e031dda2fbe03d1792170a0f3009cee
87   
88   F.5.2  CTR-AES128.Decrypt
89   Key            2b7e151628aed2a6abf7158809cf4f3c
90   Init. Counter f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
91   Block #1
92   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
93   Output Block   ec8cdf7398607cb0f2d21675ea9ea1e4
94   Ciphertext     874d6191b620e3261bef6864990db6ce
95   Plaintext      6bc1bee22e409f96e93d7e117393172a
96   Block #2
97   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdff00
98   Output Block   362b7c3c6773516318a077d7fc5073ae
99   Ciphertext     9806f66b7970fdff8617187bb9fffdff
100   Plaintext      ae2d8a571e03ac9c9eb76fac45af8e51
101   Block #3
102   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdff01
103   Output Block   6a2cc3787889374fbeb4c81b17ba6c44
104   Ciphertext     5ae4df3edbd5d35e5b4f09020db03eab
105   Plaintext      30c81c46a35ce411e5fbc1191a0a52ef
106   Block #4
107   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdff02
108   Output Block   e89c399ff0f198c6d40a31db156cabfe
109   Ciphertext     1e031dda2fbe03d1792170a0f3009cee
110   Plaintext      f69f2445df4f9b17ad2b417be66c3710
111   
112   F.5.3  CTR-AES192.Encrypt
113   Key            8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b
114   Init. Counter f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
115   Block #1
116   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
117   Output Block   717d2dc639128334a6167a488ded7921
118   Plaintext      6bc1bee22e409f96e93d7e117393172a
119   Ciphertext     1abc932417521ca24f2b0459fe7e6e0b
120   Block #2
121   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdff00
122   Output Block   a72eb3bb14a556734b7bad6ab16100c5
123   Plaintext      ae2d8a571e03ac9c9eb76fac45af8e51
124   Ciphertext     090339ec0aa6faefd5ccc2c6f4ce8e94
125   Block #3
126   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdff01
127   Output Block   2efeae2d72b722613446dc7f4c2af918
128   Plaintext      30c81c46a35ce411e5fbc1191a0a52ef
129   Ciphertext     1e36b26bd1ebc670d1bd1d665620abf7
130   Block #4
131   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdff02
132   Output Block   b9e783b30dd7924ff7bc9b97beaa8740
133   Plaintext      f69f2445df4f9b17ad2b417be66c3710
134   Ciphertext     4f78a7f6d29809585a97daec58c6b050
135   
136   F.5.4  CTR-AES192.Decrypt
137   Key            8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b
138   Init. Counter f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
139   Block #1
140   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
141   Output Block   717d2dc639128334a6167a488ded7921
142   Ciphertext     1abc932417521ca24f2b0459fe7e6e0b
143   Plaintext      6bc1bee22e409f96e93d7e117393172a
144   Block #2
145   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdff00
146   Output Block   a72eb3bb14a556734b7bad6ab16100c5
147   Ciphertext     090339ec0aa6faefd5ccc2c6f4ce8e94
148   Plaintext      ae2d8a571e03ac9c9eb76fac45af8e51
149   Block #3
150   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdff01
151   Output Block   2efeae2d72b722613446dc7f4c2af918
152   Ciphertext     1e36b26bd1ebc670d1bd1d665620abf7
153   Plaintext      30c81c46a35ce411e5fbc1191a0a52ef
154   Block #4
155   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdff02
156   Output Block   b9e783b30dd7924ff7bc9b97beaa8740
157   Ciphertext     4f78a7f6d29809585a97daec58c6b050
158   Plaintext      f69f2445df4f9b17ad2b417be66c3710
159   
160   F.5.5  CTR-AES256.Encrypt
161   Key            603deb1015ca71be2b73aef0857d7781
162                  1f352c073b6108d72d9810a30914dff4
163   Init. Counter f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
164   Block #1
165   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
166   Output Block   0bdf7df1591716335e9a8b15c860c502
167   Plaintext      6bc1bee22e409f96e93d7e117393172a
168   Ciphertext     601ec313775789a5b7a7f504bbf3d228
169   Block #2
170   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdff00
171   Output Block   5a6e699d536119065433863c8f657b94
172   Plaintext      ae2d8a571e03ac9c9eb76fac45af8e51
173   Ciphertext     f443e3ca4d62b59aca84e990cacaf5c5
174   Block #3
175   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdff01
176   Output Block   1bc12c9c01610d5d0d8bd6a3378eca62
177   Plaintext      30c81c46a35ce411e5fbc1191a0a52ef
178   Ciphertext     2b0930daa23de94ce87017ba2d84988d
179   Block #4
180   Input Block    f0f1f2f3f4f5f6f7f8f9fafbfcfdff02
181   Output Block   2956e1c8693536b1bee99c73a31576b6
182   Plaintext      f69f2445df4f9b17ad2b417be66c3710
183   Ciphertext     dfc9c58db67aada613c2dd08457941a6
184   
185   F.5.6  CTR-AES256.Decrypt
186   Key            603deb1015ca71be2b73aef0857d7781
187                  1f352c073b6108d72d9810a30914dff4
188   Init. Counter f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
189   Block #1
190   Input Block  f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
191   Output Block 0bdf7df1591716335e9a8b15c860c502
192   Ciphertext   601ec313775789a5b7a7f504bbf3d228
193   Plaintext    6bc1bee22e409f96e93d7e117393172a
194   Block #2
195   Input Block  f0f1f2f3f4f5f6f7f8f9fafbfcfdff00
196   Output Block 5a6e699d536119065433863c8f657b94
197   Ciphertext   f443e3ca4d62b59aca84e990cacaf5c5
198   Plaintext    ae2d8a571e03ac9c9eb76fac45af8e51
199   Block #3
200   Input Block  f0f1f2f3f4f5f6f7f8f9fafbfcfdff01
201   Output Block 1bc12c9c01610d5d0d8bd6a3378eca62
202   Ciphertext   2b0930daa23de94ce87017ba2d84988d
203   Plaintext    30c81c46a35ce411e5fbc1191a0a52ef
204   Block #4
205   Input Block  f0f1f2f3f4f5f6f7f8f9fafbfcfdff02
206   Output Block 2956e1c8693536b1bee99c73a31576b6
207   Ciphertext   dfc9c58db67aada613c2dd08457941a6
208   Plaintext    f69f2445df4f9b17ad2b417be66c3710
209 */