blob: 8c8a3818c1120cd0406233f08401ca09feae227d [file] [log] [blame]
Alex Gaynora2e1f542013-08-10 08:59:11 -04001# Licensed under the Apache License, Version 2.0 (the "License");
2# you may not use this file except in compliance with the License.
3# You may obtain a copy of the License at
4#
5# http://www.apache.org/licenses/LICENSE-2.0
6#
7# Unless required by applicable law or agreed to in writing, software
8# distributed under the License is distributed on an "AS IS" BASIS,
9# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
10# implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
Donald Stufftec672e82013-08-09 01:20:03 -040014"""
15Test using the NIST Test Vectors
16"""
Hynek Schlawack425f5842013-08-11 09:54:59 +020017
18from __future__ import absolute_import, division, print_function
19
Donald Stufftec672e82013-08-09 01:20:03 -040020import binascii
Alex Gaynoraef7ee82013-08-08 22:31:11 -070021import os
Donald Stufftec672e82013-08-09 01:20:03 -040022
Alex Gaynor1fe70b12013-10-16 11:59:17 -070023from cryptography.primitives.block import ciphers, modes
Donald Stufftec672e82013-08-09 01:20:03 -040024
Alex Gaynor1fe70b12013-10-16 11:59:17 -070025from .utils import generate_encrypt_test
Donald Stufftec672e82013-08-09 01:20:03 -040026from ..utils import load_nist_vectors_from_file
27
28
Alex Gaynoref2f91e2013-10-16 17:15:04 -070029def load_3des_nist_vectors_from_file(path, op):
30 vectors = load_nist_vectors_from_file(path, op)
31 for vector in vectors:
32 vector["ciphertext"] = vector["ciphertext3"]
33 del vector["ciphertext1"]
34 del vector["ciphertext2"]
35 del vector["ciphertext3"]
36 return vectors
37
38
Alex Gaynoraef7ee82013-08-08 22:31:11 -070039class TestAES_CBC(object):
Alex Gaynor1fe70b12013-10-16 11:59:17 -070040 test_KAT = generate_encrypt_test(
41 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
Alex Gaynor016eed12013-10-16 14:16:04 -070042 os.path.join("AES", "KAT"),
Alex Gaynor920e3302013-09-10 16:55:52 -070043 [
44 "CBCGFSbox128.rsp",
45 "CBCGFSbox192.rsp",
46 "CBCGFSbox256.rsp",
47 "CBCKeySbox128.rsp",
48 "CBCKeySbox192.rsp",
49 "CBCKeySbox256.rsp",
50 "CBCVarKey128.rsp",
51 "CBCVarKey192.rsp",
52 "CBCVarKey256.rsp",
53 "CBCVarTxt128.rsp",
54 "CBCVarTxt192.rsp",
55 "CBCVarTxt256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -070056 ],
57 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
58 lambda key, iv: modes.CBC(binascii.unhexlify(iv)),
Alex Gaynor920e3302013-09-10 16:55:52 -070059 )
Donald Stufftec672e82013-08-09 01:20:03 -040060
Alex Gaynor1fe70b12013-10-16 11:59:17 -070061 test_MMT = generate_encrypt_test(
62 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
Alex Gaynor016eed12013-10-16 14:16:04 -070063 os.path.join("AES", "MMT"),
Alex Gaynor920e3302013-09-10 16:55:52 -070064 [
65 "CBCMMT128.rsp",
66 "CBCMMT192.rsp",
67 "CBCMMT256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -070068 ],
69 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
70 lambda key, iv: modes.CBC(binascii.unhexlify(iv)),
Alex Gaynor920e3302013-09-10 16:55:52 -070071 )
Paul Kehrer13f108f2013-09-09 21:41:03 -050072
73
74class TestAES_ECB(object):
Alex Gaynor1fe70b12013-10-16 11:59:17 -070075 test_KAT = generate_encrypt_test(
76 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
Alex Gaynor016eed12013-10-16 14:16:04 -070077 os.path.join("AES", "KAT"),
Paul Kehrer13f108f2013-09-09 21:41:03 -050078 [
79 "ECBGFSbox128.rsp",
80 "ECBGFSbox192.rsp",
81 "ECBGFSbox256.rsp",
82 "ECBKeySbox128.rsp",
83 "ECBKeySbox192.rsp",
84 "ECBKeySbox256.rsp",
85 "ECBVarKey128.rsp",
86 "ECBVarKey192.rsp",
87 "ECBVarKey256.rsp",
88 "ECBVarTxt128.rsp",
89 "ECBVarTxt192.rsp",
90 "ECBVarTxt256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -070091 ],
92 lambda key: ciphers.AES(binascii.unhexlify(key)),
93 lambda key: modes.ECB(),
Paul Kehrer13f108f2013-09-09 21:41:03 -050094 )
Paul Kehrer13f108f2013-09-09 21:41:03 -050095
Alex Gaynor1fe70b12013-10-16 11:59:17 -070096 test_MMT = generate_encrypt_test(
97 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
Alex Gaynor016eed12013-10-16 14:16:04 -070098 os.path.join("AES", "MMT"),
Paul Kehrer13f108f2013-09-09 21:41:03 -050099 [
100 "ECBMMT128.rsp",
101 "ECBMMT192.rsp",
102 "ECBMMT256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700103 ],
104 lambda key: ciphers.AES(binascii.unhexlify(key)),
105 lambda key: modes.ECB(),
Paul Kehrer13f108f2013-09-09 21:41:03 -0500106 )
Paul Kehrer6f412a02013-09-10 21:30:50 -0500107
108
109class TestAES_OFB(object):
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700110 test_KAT = generate_encrypt_test(
111 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
Alex Gaynor016eed12013-10-16 14:16:04 -0700112 os.path.join("AES", "KAT"),
Paul Kehrer6f412a02013-09-10 21:30:50 -0500113 [
114 "OFBGFSbox128.rsp",
115 "OFBGFSbox192.rsp",
116 "OFBGFSbox256.rsp",
117 "OFBKeySbox128.rsp",
118 "OFBKeySbox192.rsp",
119 "OFBKeySbox256.rsp",
120 "OFBVarKey128.rsp",
121 "OFBVarKey192.rsp",
122 "OFBVarKey256.rsp",
123 "OFBVarTxt128.rsp",
124 "OFBVarTxt192.rsp",
125 "OFBVarTxt256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700126 ],
127 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
128 lambda key, iv: modes.OFB(binascii.unhexlify(iv)),
Paul Kehrer6f412a02013-09-10 21:30:50 -0500129 )
Paul Kehrer6f412a02013-09-10 21:30:50 -0500130
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700131 test_MMT = generate_encrypt_test(
132 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
Alex Gaynor016eed12013-10-16 14:16:04 -0700133 os.path.join("AES", "MMT"),
Paul Kehrer6f412a02013-09-10 21:30:50 -0500134 [
135 "OFBMMT128.rsp",
136 "OFBMMT192.rsp",
137 "OFBMMT256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700138 ],
139 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
140 lambda key, iv: modes.OFB(binascii.unhexlify(iv)),
Paul Kehrer6f412a02013-09-10 21:30:50 -0500141 )
Paul Kehrera1ec2622013-09-11 09:38:45 -0500142
143
144class TestAES_CFB(object):
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700145 test_KAT = generate_encrypt_test(
146 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
Alex Gaynor016eed12013-10-16 14:16:04 -0700147 os.path.join("AES", "KAT"),
Paul Kehrera1ec2622013-09-11 09:38:45 -0500148 [
149 "CFB128GFSbox128.rsp",
150 "CFB128GFSbox192.rsp",
151 "CFB128GFSbox256.rsp",
152 "CFB128KeySbox128.rsp",
153 "CFB128KeySbox192.rsp",
154 "CFB128KeySbox256.rsp",
155 "CFB128VarKey128.rsp",
156 "CFB128VarKey192.rsp",
157 "CFB128VarKey256.rsp",
158 "CFB128VarTxt128.rsp",
159 "CFB128VarTxt192.rsp",
160 "CFB128VarTxt256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700161 ],
162 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
163 lambda key, iv: modes.CFB(binascii.unhexlify(iv)),
Paul Kehrera1ec2622013-09-11 09:38:45 -0500164 )
Paul Kehrera1ec2622013-09-11 09:38:45 -0500165
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700166 test_MMT = generate_encrypt_test(
167 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
Alex Gaynor016eed12013-10-16 14:16:04 -0700168 os.path.join("AES", "MMT"),
Paul Kehrera1ec2622013-09-11 09:38:45 -0500169 [
170 "CFB128MMT128.rsp",
171 "CFB128MMT192.rsp",
172 "CFB128MMT256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700173 ],
174 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
175 lambda key, iv: modes.CFB(binascii.unhexlify(iv)),
Paul Kehrera1ec2622013-09-11 09:38:45 -0500176 )
Alex Gaynor9f44cab2013-09-09 19:04:16 -0700177
178
179class TestTripleDES_CBC(object):
Alex Gaynore761f8b2013-10-16 16:55:40 -0700180 test_KAT1 = generate_encrypt_test(
181 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
182 os.path.join("3DES", "KAT"),
Alex Gaynor920e3302013-09-10 16:55:52 -0700183 [
184 "TCBCinvperm.rsp",
185 "TCBCpermop.rsp",
186 "TCBCsubtab.rsp",
187 "TCBCvarkey.rsp",
188 "TCBCvartext.rsp",
Alex Gaynore761f8b2013-10-16 16:55:40 -0700189 ],
190 lambda keys, iv: ciphers.TripleDES(binascii.unhexlify(keys)),
191 lambda keys, iv: modes.CBC(iv),
Alex Gaynor920e3302013-09-10 16:55:52 -0700192 )
Alex Gaynor9f44cab2013-09-09 19:04:16 -0700193
Alex Gaynore761f8b2013-10-16 16:55:40 -0700194 test_KAT2 = generate_encrypt_test(
Alex Gaynoref2f91e2013-10-16 17:15:04 -0700195 lambda path: load_3des_nist_vectors_from_file(path, "ENCRYPT"),
Alex Gaynore761f8b2013-10-16 16:55:40 -0700196 os.path.join("3DES", "KAT"),
Alex Gaynor920e3302013-09-10 16:55:52 -0700197 [
198 "TCBCIpermop.rsp",
199 "TCBCIsubtab.rsp",
200 "TCBCIvarkey.rsp",
201 "TCBCIvartext.rsp",
Alex Gaynore761f8b2013-10-16 16:55:40 -0700202 ],
203 lambda keys, iv1, iv2, iv3: ciphers.TripleDES(binascii.unhexlify(keys)),
204 lambda keys, iv1, iv2, iv3: modes.CBC(iv1 + iv2 + iv3),
Alex Gaynor920e3302013-09-10 16:55:52 -0700205 )
Alex Gaynor920e3302013-09-10 16:55:52 -0700206
Alex Gaynor6abac462013-10-16 16:57:20 -0700207 test_KAT3 = generate_encrypt_test(
208 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
209 os.path.join("3DES", "KAT"),
Alex Gaynor920e3302013-09-10 16:55:52 -0700210 [
211 "TCBCIinvperm.rsp",
Alex Gaynor6abac462013-10-16 16:57:20 -0700212 ],
213 lambda keys, iv1, iv2, iv3: ciphers.TripleDES(binascii.unhexlify(keys)),
214 lambda keys, iv1, iv2, iv3: modes.CBC(iv1 + iv2 + iv3),
Alex Gaynor920e3302013-09-10 16:55:52 -0700215 )
Alex Gaynor920e3302013-09-10 16:55:52 -0700216
Alex Gaynore761f8b2013-10-16 16:55:40 -0700217 test_MMT1 = generate_encrypt_test(
218 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
219 os.path.join("3DES", "MMT"),
Alex Gaynor920e3302013-09-10 16:55:52 -0700220 [
221 "TCBCIMMT1.rsp",
222 "TCBCIMMT2.rsp",
223 "TCBCIMMT3.rsp",
Alex Gaynore761f8b2013-10-16 16:55:40 -0700224 ],
225 lambda key1, key2, key3, iv1, iv2, iv3: ciphers.TripleDES(binascii.unhexlify(key1 + key2 + key3)),
226 lambda key1, key2, key3, iv1, iv2, iv3: modes.CBC(iv1 + iv2 + iv3),
Alex Gaynor920e3302013-09-10 16:55:52 -0700227 )
Alex Gaynor920e3302013-09-10 16:55:52 -0700228
Alex Gaynore761f8b2013-10-16 16:55:40 -0700229 test_MMT1 = generate_encrypt_test(
230 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
231 os.path.join("3DES", "MMT"),
Alex Gaynor920e3302013-09-10 16:55:52 -0700232 [
233 "TCBCMMT1.rsp",
234 "TCBCMMT2.rsp",
235 "TCBCMMT3.rsp",
Alex Gaynore761f8b2013-10-16 16:55:40 -0700236 ],
237 lambda key1, key2, key3, iv: ciphers.TripleDES(binascii.unhexlify(key1 + key2 + key3)),
238 lambda key1, key2, key3, iv: modes.CBC(iv),
Alex Gaynor920e3302013-09-10 16:55:52 -0700239 )