blob: 0c9569f1d84a67375022121553760ceabe5d62fc [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
21
Alex Gaynor1fe70b12013-10-16 11:59:17 -070022from cryptography.primitives.block import ciphers, modes
Donald Stufftec672e82013-08-09 01:20:03 -040023
Alex Gaynor1fe70b12013-10-16 11:59:17 -070024from .utils import generate_encrypt_test
Donald Stufftec672e82013-08-09 01:20:03 -040025from ..utils import load_nist_vectors_from_file
26
27
Alex Gaynoraef7ee82013-08-08 22:31:11 -070028class TestAES_CBC(object):
Alex Gaynor1fe70b12013-10-16 11:59:17 -070029 test_KAT = generate_encrypt_test(
30 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
31 "AES",
32 "KAT",
Paul Kehrer2354fcd2013-09-10 19:15:36 -050033 [
34 "CBCGFSbox128.rsp",
35 "CBCGFSbox192.rsp",
36 "CBCGFSbox256.rsp",
37 "CBCKeySbox128.rsp",
38 "CBCKeySbox192.rsp",
39 "CBCKeySbox256.rsp",
40 "CBCVarKey128.rsp",
41 "CBCVarKey192.rsp",
42 "CBCVarKey256.rsp",
43 "CBCVarTxt128.rsp",
44 "CBCVarTxt192.rsp",
45 "CBCVarTxt256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -070046 ],
47 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
48 lambda key, iv: modes.CBC(binascii.unhexlify(iv)),
Paul Kehrer2354fcd2013-09-10 19:15:36 -050049 )
Donald Stufftec672e82013-08-09 01:20:03 -040050
Alex Gaynor1fe70b12013-10-16 11:59:17 -070051 test_MMT = generate_encrypt_test(
52 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
53 "AES",
54 "MMT",
Paul Kehrer2354fcd2013-09-10 19:15:36 -050055 [
56 "CBCMMT128.rsp",
57 "CBCMMT192.rsp",
58 "CBCMMT256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -070059 ],
60 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
61 lambda key, iv: modes.CBC(binascii.unhexlify(iv)),
Paul Kehrer2354fcd2013-09-10 19:15:36 -050062 )
Paul Kehrer13f108f2013-09-09 21:41:03 -050063
64
65class TestAES_ECB(object):
Alex Gaynor1fe70b12013-10-16 11:59:17 -070066 test_KAT = generate_encrypt_test(
67 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
68 "AES",
69 "KAT",
Paul Kehrer13f108f2013-09-09 21:41:03 -050070 [
71 "ECBGFSbox128.rsp",
72 "ECBGFSbox192.rsp",
73 "ECBGFSbox256.rsp",
74 "ECBKeySbox128.rsp",
75 "ECBKeySbox192.rsp",
76 "ECBKeySbox256.rsp",
77 "ECBVarKey128.rsp",
78 "ECBVarKey192.rsp",
79 "ECBVarKey256.rsp",
80 "ECBVarTxt128.rsp",
81 "ECBVarTxt192.rsp",
82 "ECBVarTxt256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -070083 ],
84 lambda key: ciphers.AES(binascii.unhexlify(key)),
85 lambda key: modes.ECB(),
Paul Kehrer13f108f2013-09-09 21:41:03 -050086 )
Paul Kehrer13f108f2013-09-09 21:41:03 -050087
Alex Gaynor1fe70b12013-10-16 11:59:17 -070088 test_MMT = generate_encrypt_test(
89 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
90 "AES",
91 "MMT",
Paul Kehrer13f108f2013-09-09 21:41:03 -050092 [
93 "ECBMMT128.rsp",
94 "ECBMMT192.rsp",
95 "ECBMMT256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -070096 ],
97 lambda key: ciphers.AES(binascii.unhexlify(key)),
98 lambda key: modes.ECB(),
Paul Kehrer13f108f2013-09-09 21:41:03 -050099 )
Paul Kehrer6f412a02013-09-10 21:30:50 -0500100
101
102class TestAES_OFB(object):
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700103 test_KAT = generate_encrypt_test(
104 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
105 "AES",
106 "KAT",
Paul Kehrer6f412a02013-09-10 21:30:50 -0500107 [
108 "OFBGFSbox128.rsp",
109 "OFBGFSbox192.rsp",
110 "OFBGFSbox256.rsp",
111 "OFBKeySbox128.rsp",
112 "OFBKeySbox192.rsp",
113 "OFBKeySbox256.rsp",
114 "OFBVarKey128.rsp",
115 "OFBVarKey192.rsp",
116 "OFBVarKey256.rsp",
117 "OFBVarTxt128.rsp",
118 "OFBVarTxt192.rsp",
119 "OFBVarTxt256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700120 ],
121 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
122 lambda key, iv: modes.OFB(binascii.unhexlify(iv)),
Paul Kehrer6f412a02013-09-10 21:30:50 -0500123 )
Paul Kehrer6f412a02013-09-10 21:30:50 -0500124
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700125 test_MMT = generate_encrypt_test(
126 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
127 "AES",
128 "MMT",
Paul Kehrer6f412a02013-09-10 21:30:50 -0500129 [
130 "OFBMMT128.rsp",
131 "OFBMMT192.rsp",
132 "OFBMMT256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700133 ],
134 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
135 lambda key, iv: modes.OFB(binascii.unhexlify(iv)),
Paul Kehrer6f412a02013-09-10 21:30:50 -0500136 )
Paul Kehrera1ec2622013-09-11 09:38:45 -0500137
138
139class TestAES_CFB(object):
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700140 test_KAT = generate_encrypt_test(
141 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
142 "AES",
143 "KAT",
Paul Kehrera1ec2622013-09-11 09:38:45 -0500144 [
145 "CFB128GFSbox128.rsp",
146 "CFB128GFSbox192.rsp",
147 "CFB128GFSbox256.rsp",
148 "CFB128KeySbox128.rsp",
149 "CFB128KeySbox192.rsp",
150 "CFB128KeySbox256.rsp",
151 "CFB128VarKey128.rsp",
152 "CFB128VarKey192.rsp",
153 "CFB128VarKey256.rsp",
154 "CFB128VarTxt128.rsp",
155 "CFB128VarTxt192.rsp",
156 "CFB128VarTxt256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700157 ],
158 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
159 lambda key, iv: modes.CFB(binascii.unhexlify(iv)),
Paul Kehrera1ec2622013-09-11 09:38:45 -0500160 )
Paul Kehrera1ec2622013-09-11 09:38:45 -0500161
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700162
163 test_MMT = generate_encrypt_test(
164 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
165 "AES",
166 "MMT",
Paul Kehrera1ec2622013-09-11 09:38:45 -0500167 [
168 "CFB128MMT128.rsp",
169 "CFB128MMT192.rsp",
170 "CFB128MMT256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700171 ],
172 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
173 lambda key, iv: modes.CFB(binascii.unhexlify(iv)),
Paul Kehrera1ec2622013-09-11 09:38:45 -0500174 )