blob: d97b207b54522ac9597db513cb844ffc01ee5a89 [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 Gaynor016eed12013-10-16 14:16:04 -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 Gaynoraef7ee82013-08-08 22:31:11 -070029class TestAES_CBC(object):
Alex Gaynor1fe70b12013-10-16 11:59:17 -070030 test_KAT = generate_encrypt_test(
31 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
Alex Gaynor016eed12013-10-16 14:16:04 -070032 os.path.join("AES", "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"),
Alex Gaynor016eed12013-10-16 14:16:04 -070053 os.path.join("AES", "MMT"),
Paul Kehrer2354fcd2013-09-10 19:15:36 -050054 [
55 "CBCMMT128.rsp",
56 "CBCMMT192.rsp",
57 "CBCMMT256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -070058 ],
59 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
60 lambda key, iv: modes.CBC(binascii.unhexlify(iv)),
Paul Kehrer2354fcd2013-09-10 19:15:36 -050061 )
Paul Kehrer13f108f2013-09-09 21:41:03 -050062
63
64class TestAES_ECB(object):
Alex Gaynor1fe70b12013-10-16 11:59:17 -070065 test_KAT = generate_encrypt_test(
66 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
Alex Gaynor016eed12013-10-16 14:16:04 -070067 os.path.join("AES", "KAT"),
Paul Kehrer13f108f2013-09-09 21:41:03 -050068 [
69 "ECBGFSbox128.rsp",
70 "ECBGFSbox192.rsp",
71 "ECBGFSbox256.rsp",
72 "ECBKeySbox128.rsp",
73 "ECBKeySbox192.rsp",
74 "ECBKeySbox256.rsp",
75 "ECBVarKey128.rsp",
76 "ECBVarKey192.rsp",
77 "ECBVarKey256.rsp",
78 "ECBVarTxt128.rsp",
79 "ECBVarTxt192.rsp",
80 "ECBVarTxt256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -070081 ],
82 lambda key: ciphers.AES(binascii.unhexlify(key)),
83 lambda key: modes.ECB(),
Paul Kehrer13f108f2013-09-09 21:41:03 -050084 )
Paul Kehrer13f108f2013-09-09 21:41:03 -050085
Alex Gaynor1fe70b12013-10-16 11:59:17 -070086 test_MMT = generate_encrypt_test(
87 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
Alex Gaynor016eed12013-10-16 14:16:04 -070088 os.path.join("AES", "MMT"),
Paul Kehrer13f108f2013-09-09 21:41:03 -050089 [
90 "ECBMMT128.rsp",
91 "ECBMMT192.rsp",
92 "ECBMMT256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -070093 ],
94 lambda key: ciphers.AES(binascii.unhexlify(key)),
95 lambda key: modes.ECB(),
Paul Kehrer13f108f2013-09-09 21:41:03 -050096 )
Paul Kehrer6f412a02013-09-10 21:30:50 -050097
98
99class TestAES_OFB(object):
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700100 test_KAT = generate_encrypt_test(
101 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
Alex Gaynor016eed12013-10-16 14:16:04 -0700102 os.path.join("AES", "KAT"),
Paul Kehrer6f412a02013-09-10 21:30:50 -0500103 [
104 "OFBGFSbox128.rsp",
105 "OFBGFSbox192.rsp",
106 "OFBGFSbox256.rsp",
107 "OFBKeySbox128.rsp",
108 "OFBKeySbox192.rsp",
109 "OFBKeySbox256.rsp",
110 "OFBVarKey128.rsp",
111 "OFBVarKey192.rsp",
112 "OFBVarKey256.rsp",
113 "OFBVarTxt128.rsp",
114 "OFBVarTxt192.rsp",
115 "OFBVarTxt256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700116 ],
117 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
118 lambda key, iv: modes.OFB(binascii.unhexlify(iv)),
Paul Kehrer6f412a02013-09-10 21:30:50 -0500119 )
Paul Kehrer6f412a02013-09-10 21:30:50 -0500120
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700121 test_MMT = generate_encrypt_test(
122 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
Alex Gaynor016eed12013-10-16 14:16:04 -0700123 os.path.join("AES", "MMT"),
Paul Kehrer6f412a02013-09-10 21:30:50 -0500124 [
125 "OFBMMT128.rsp",
126 "OFBMMT192.rsp",
127 "OFBMMT256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700128 ],
129 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
130 lambda key, iv: modes.OFB(binascii.unhexlify(iv)),
Paul Kehrer6f412a02013-09-10 21:30:50 -0500131 )
Paul Kehrera1ec2622013-09-11 09:38:45 -0500132
133
134class TestAES_CFB(object):
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700135 test_KAT = generate_encrypt_test(
136 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
Alex Gaynor016eed12013-10-16 14:16:04 -0700137 os.path.join("AES", "KAT"),
Paul Kehrera1ec2622013-09-11 09:38:45 -0500138 [
139 "CFB128GFSbox128.rsp",
140 "CFB128GFSbox192.rsp",
141 "CFB128GFSbox256.rsp",
142 "CFB128KeySbox128.rsp",
143 "CFB128KeySbox192.rsp",
144 "CFB128KeySbox256.rsp",
145 "CFB128VarKey128.rsp",
146 "CFB128VarKey192.rsp",
147 "CFB128VarKey256.rsp",
148 "CFB128VarTxt128.rsp",
149 "CFB128VarTxt192.rsp",
150 "CFB128VarTxt256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700151 ],
152 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
153 lambda key, iv: modes.CFB(binascii.unhexlify(iv)),
Paul Kehrera1ec2622013-09-11 09:38:45 -0500154 )
Paul Kehrera1ec2622013-09-11 09:38:45 -0500155
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700156 test_MMT = generate_encrypt_test(
157 lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
Alex Gaynor016eed12013-10-16 14:16:04 -0700158 os.path.join("AES", "MMT"),
Paul Kehrera1ec2622013-09-11 09:38:45 -0500159 [
160 "CFB128MMT128.rsp",
161 "CFB128MMT192.rsp",
162 "CFB128MMT256.rsp",
Alex Gaynor1fe70b12013-10-16 11:59:17 -0700163 ],
164 lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
165 lambda key, iv: modes.CFB(binascii.unhexlify(iv)),
Paul Kehrera1ec2622013-09-11 09:38:45 -0500166 )