1 /* Microsoft Reference Implementation for TPM 2.0
2  *
3  *  The copyright in this software is being made available under the BSD License,
4  *  included below. This software may be subject to other third party and
5  *  contributor rights, including patent rights, and no such rights are granted
6  *  under this license.
7  *
8  *  Copyright (c) Microsoft Corporation
9  *
10  *  All rights reserved.
11  *
12  *  BSD License
13  *
14  *  Redistribution and use in source and binary forms, with or without modification,
15  *  are permitted provided that the following conditions are met:
16  *
17  *  Redistributions of source code must retain the above copyright notice, this list
18  *  of conditions and the following disclaimer.
19  *
20  *  Redistributions in binary form must reproduce the above copyright notice, this
21  *  list of conditions and the following disclaimer in the documentation and/or
22  *  other materials provided with the distribution.
23  *
24  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ""AS IS""
25  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27  *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
28  *  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29  *  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30  *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
31  *  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33  *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34  */
35 // This is a vector for testing either encrypt or decrypt. The premise for decrypt
36 // is that the IV for decryption is the same as the IV for encryption. However,
37 // the ivOut value may be different for encryption and decryption. We will encrypt
38 // at least two blocks. This means that the chaining value will be used for each
39 // of the schemes (if any) and that implicitly checks that the chaining value
40 // is handled properly.
41 
42 
43 #if AES_128
44 
45 const BYTE  key_AES128 [] = {
46                 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
47                 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c};
48 
49 const BYTE  dataIn_AES128 [] = {
50                 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
51                 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
52                 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
53                 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51};
54 
55 
56 const BYTE  dataOut_AES128_ECB [] = {
57                 0x3a, 0xd7, 0x7b, 0xb4, 0x0d, 0x7a, 0x36, 0x60,
58                 0xa8, 0x9e, 0xca, 0xf3, 0x24, 0x66, 0xef, 0x97,
59                 0xf5, 0xd3, 0xd5, 0x85, 0x03, 0xb9, 0x69, 0x9d,
60                 0xe7, 0x85, 0x89, 0x5a, 0x96, 0xfd, 0xba, 0xaf};
61 
62 const BYTE  dataOut_AES128_CBC [] = {
63                 0x76, 0x49, 0xab, 0xac, 0x81, 0x19, 0xb2, 0x46,
64                 0xce, 0xe9, 0x8e, 0x9b, 0x12, 0xe9, 0x19, 0x7d,
65                 0x50, 0x86, 0xcb, 0x9b, 0x50, 0x72, 0x19, 0xee,
66                 0x95, 0xdb, 0x11, 0x3a, 0x91, 0x76, 0x78, 0xb2};
67 
68 const BYTE  dataOut_AES128_CFB [] = {
69                 0x3b, 0x3f, 0xd9, 0x2e, 0xb7, 0x2d, 0xad, 0x20,
70                 0x33, 0x34, 0x49, 0xf8, 0xe8, 0x3c, 0xfb, 0x4a,
71                 0xc8, 0xa6, 0x45, 0x37, 0xa0, 0xb3, 0xa9, 0x3f,
72                 0xcd, 0xe3, 0xcd, 0xad, 0x9f, 0x1c, 0xe5, 0x8b};
73 
74 const BYTE  dataOut_AES128_OFB [] = {
75                 0x3b, 0x3f, 0xd9, 0x2e, 0xb7, 0x2d, 0xad, 0x20,
76                 0x33, 0x34, 0x49, 0xf8, 0xe8, 0x3c, 0xfb, 0x4a,
77                 0x77, 0x89, 0x50, 0x8d, 0x16, 0x91, 0x8f, 0x03,
78                 0xf5, 0x3c, 0x52, 0xda, 0xc5, 0x4e, 0xd8, 0x25};
79 
80 
81 const BYTE  dataOut_AES128_CTR [] = {
82                 0x87, 0x4d, 0x61, 0x91, 0xb6, 0x20, 0xe3, 0x26,
83                 0x1b, 0xef, 0x68, 0x64, 0x99, 0x0d, 0xb6, 0xce,
84                 0x98, 0x06, 0xf6, 0x6b, 0x79, 0x70, 0xfd, 0xff,
85                 0x86, 0x17, 0x18, 0x7b, 0xb9, 0xff, 0xfd, 0xff};
86 #endif
87 
88 #if AES_192
89 
90 const BYTE  key_AES192 [] = {
91                 0x8e, 0x73, 0xb0, 0xf7, 0xda, 0x0e, 0x64, 0x52,
92                 0xc8, 0x10, 0xf3, 0x2b, 0x80, 0x90, 0x79, 0xe5,
93                 0x62, 0xf8, 0xea, 0xd2, 0x52, 0x2c, 0x6b, 0x7b};
94 
95 const BYTE  dataIn_AES192 [] = {
96                 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
97                 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
98                 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
99                 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51};
100 
101 const BYTE  dataOut_AES192_ECB [] = {
102                 0xbd, 0x33, 0x4f, 0x1d, 0x6e, 0x45, 0xf2, 0x5f,
103                 0xf7, 0x12, 0xa2, 0x14, 0x57, 0x1f, 0xa5, 0xcc,
104                 0x97, 0x41, 0x04, 0x84, 0x6d, 0x0a, 0xd3, 0xad,
105                 0x77, 0x34, 0xec, 0xb3, 0xec, 0xee, 0x4e, 0xef};
106 
107 const BYTE  dataOut_AES192_CBC [] = {
108                 0x4f, 0x02, 0x1d, 0xb2, 0x43, 0xbc, 0x63, 0x3d,
109                 0x71, 0x78, 0x18, 0x3a, 0x9f, 0xa0, 0x71, 0xe8,
110                 0xb4, 0xd9, 0xad, 0xa9, 0xad, 0x7d, 0xed, 0xf4,
111                 0xe5, 0xe7, 0x38, 0x76, 0x3f, 0x69, 0x14, 0x5a};
112 
113 const BYTE  dataOut_AES192_CFB [] = {
114                 0xcd, 0xc8, 0x0d, 0x6f, 0xdd, 0xf1, 0x8c, 0xab,
115                 0x34, 0xc2, 0x59, 0x09, 0xc9, 0x9a, 0x41, 0x74,
116                 0x67, 0xce, 0x7f, 0x7f, 0x81, 0x17, 0x36, 0x21,
117                 0x96, 0x1a, 0x2b, 0x70, 0x17, 0x1d, 0x3d, 0x7a};
118 
119 const BYTE  dataOut_AES192_OFB [] = {
120                 0xcd, 0xc8, 0x0d, 0x6f, 0xdd, 0xf1, 0x8c, 0xab,
121                 0x34, 0xc2, 0x59, 0x09, 0xc9, 0x9a, 0x41, 0x74,
122                 0xfc, 0xc2, 0x8b, 0x8d, 0x4c, 0x63, 0x83, 0x7c,
123                 0x09, 0xe8, 0x17, 0x00, 0xc1, 0x10, 0x04, 0x01};
124 
125 const BYTE  dataOut_AES192_CTR [] = {
126                 0x1a, 0xbc, 0x93, 0x24, 0x17, 0x52, 0x1c, 0xa2,
127                 0x4f, 0x2b, 0x04, 0x59, 0xfe, 0x7e, 0x6e, 0x0b,
128                 0x09, 0x03, 0x39, 0xec, 0x0a, 0xa6, 0xfa, 0xef,
129                 0xd5, 0xcc, 0xc2, 0xc6, 0xf4, 0xce, 0x8e, 0x94};
130 #endif
131 
132 #if AES_256
133 
134 const BYTE  key_AES256 [] = {
135                 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe,
136                 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81,
137                 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7,
138                 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4};
139 
140 const BYTE  dataIn_AES256 [] = {
141                 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
142                 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
143                 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
144                 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51};
145 
146 const BYTE  dataOut_AES256_ECB [] = {
147                 0xf3, 0xee, 0xd1, 0xbd, 0xb5, 0xd2, 0xa0, 0x3c,
148                 0x06, 0x4b, 0x5a, 0x7e, 0x3d, 0xb1, 0x81, 0xf8,
149                 0x59, 0x1c, 0xcb, 0x10, 0xd4, 0x10, 0xed, 0x26,
150                 0xdc, 0x5b, 0xa7, 0x4a, 0x31, 0x36, 0x28, 0x70};
151 
152 const BYTE  dataOut_AES256_CBC [] = {
153                 0xf5, 0x8c, 0x4c, 0x04, 0xd6, 0xe5, 0xf1, 0xba,
154                 0x77, 0x9e, 0xab, 0xfb, 0x5f, 0x7b, 0xfb, 0xd6,
155                 0x9c, 0xfc, 0x4e, 0x96, 0x7e, 0xdb, 0x80, 0x8d,
156                 0x67, 0x9f, 0x77, 0x7b, 0xc6, 0x70, 0x2c, 0x7d};
157 
158 const BYTE  dataOut_AES256_CFB [] = {
159                 0xdc, 0x7e, 0x84, 0xbf, 0xda, 0x79, 0x16, 0x4b,
160                 0x7e, 0xcd, 0x84, 0x86, 0x98, 0x5d, 0x38, 0x60,
161                 0x39, 0xff, 0xed, 0x14, 0x3b, 0x28, 0xb1, 0xc8,
162                 0x32, 0x11, 0x3c, 0x63, 0x31, 0xe5, 0x40, 0x7b};
163 
164 const BYTE  dataOut_AES256_OFB [] = {
165                 0xdc, 0x7e, 0x84, 0xbf, 0xda, 0x79, 0x16, 0x4b,
166                 0x7e, 0xcd, 0x84, 0x86, 0x98, 0x5d, 0x38, 0x60,
167                 0x4f, 0xeb, 0xdc, 0x67, 0x40, 0xd2, 0x0b, 0x3a,
168                 0xc8, 0x8f, 0x6a, 0xd8, 0x2a, 0x4f, 0xb0, 0x8d};
169 
170 const BYTE  dataOut_AES256_CTR [] = {
171                 0x60, 0x1e, 0xc3, 0x13, 0x77, 0x57, 0x89, 0xa5,
172                 0xb7, 0xa7, 0xf5, 0x04, 0xbb, 0xf3, 0xd2, 0x28,
173                 0xf4, 0x43, 0xe3, 0xca, 0x4d, 0x62, 0xb5, 0x9a,
174                 0xca, 0x84, 0xe9, 0x90, 0xca, 0xca, 0xf5, 0xc5};
175 #endif
176 
177 
178 
179