|
|
1.1.1.5 root 1: /*
1.1.1.7 root 2: Legal Notice: Some portions of the source code contained in this file were
3: derived from the source code of Encryption for the Masses 2.02a, which is
4: Copyright (c) 1998-2000 Paul Le Roux and which is governed by the 'License
5: Agreement for Encryption for the Masses'. Modifications and additions to
6: the original source code (contained in this file) and all other portions of
1.1.1.11 root 7: this file are Copyright (c) 2003-2009 TrueCrypt Foundation and are governed
1.1.1.12! root 8: by the TrueCrypt License 2.7 the full text of which is contained in the
1.1.1.7 root 9: file License.txt included in TrueCrypt binary and source code distribution
1.1.1.5 root 10: packages. */
1.1 root 11:
12: #include "Tcdefs.h"
13: #include "Crc.h"
14: #include "Crypto.h"
1.1.1.5 root 15: #include "Common/Endian.h"
1.1 root 16: #include "Tests.h"
1.1.1.7 root 17: #include "Xts.h"
1.1.1.5 root 18: #include <string.h>
1.1 root 19: #include "Pkcs5.h"
20:
1.1.1.7 root 21: typedef struct {
22: unsigned __int8 key1[32];
23: unsigned __int8 key2[32];
24: unsigned __int8 dataUnitNo[8];
25: unsigned int blockNo;
26: unsigned __int8 plaintext[ENCRYPTION_DATA_UNIT_SIZE];
27: unsigned __int8 ciphertext[ENCRYPTION_DATA_UNIT_SIZE];
28: } XTS_TEST;
29:
30: #define XTS_TEST_COUNT 5
31:
32: XTS_TEST XTS_vectors[XTS_TEST_COUNT] = {
33: /* XTS-AES-256 */
34: {
35: // IEEE 1619 - Vector 10
36:
37: { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, 0x62, 0x49, 0x77, 0x57, 0x24, 0x70, 0x93, 0x69, 0x99, 0x59, 0x57, 0x49, 0x66, 0x96, 0x76, 0x27 },
38: { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, 0x02, 0x88, 0x41, 0x97, 0x16, 0x93, 0x99, 0x37, 0x51, 0x05, 0x82, 0x09, 0x74, 0x94, 0x45, 0x92 },
39: { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff },
40: 0,
41: {
42: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
43: 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
44: 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
45: 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
46: 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
47: 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
48: 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
49: 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
50: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
51: 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
52: 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
53: 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
54: 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
55: 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
56: 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
57: 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
58: },
59: {
60: 0x1c, 0x3b, 0x3a, 0x10, 0x2f, 0x77, 0x03, 0x86, 0xe4, 0x83, 0x6c, 0x99, 0xe3, 0x70, 0xcf, 0x9b, 0xea, 0x00, 0x80, 0x3f, 0x5e, 0x48, 0x23, 0x57, 0xa4, 0xae, 0x12, 0xd4, 0x14, 0xa3, 0xe6, 0x3b,
61: 0x5d, 0x31, 0xe2, 0x76, 0xf8, 0xfe, 0x4a, 0x8d, 0x66, 0xb3, 0x17, 0xf9, 0xac, 0x68, 0x3f, 0x44, 0x68, 0x0a, 0x86, 0xac, 0x35, 0xad, 0xfc, 0x33, 0x45, 0xbe, 0xfe, 0xcb, 0x4b, 0xb1, 0x88, 0xfd,
62: 0x57, 0x76, 0x92, 0x6c, 0x49, 0xa3, 0x09, 0x5e, 0xb1, 0x08, 0xfd, 0x10, 0x98, 0xba, 0xec, 0x70, 0xaa, 0xa6, 0x69, 0x99, 0xa7, 0x2a, 0x82, 0xf2, 0x7d, 0x84, 0x8b, 0x21, 0xd4, 0xa7, 0x41, 0xb0,
63: 0xc5, 0xcd, 0x4d, 0x5f, 0xff, 0x9d, 0xac, 0x89, 0xae, 0xba, 0x12, 0x29, 0x61, 0xd0, 0x3a, 0x75, 0x71, 0x23, 0xe9, 0x87, 0x0f, 0x8a, 0xcf, 0x10, 0x00, 0x02, 0x08, 0x87, 0x89, 0x14, 0x29, 0xca,
64: 0x2a, 0x3e, 0x7a, 0x7d, 0x7d, 0xf7, 0xb1, 0x03, 0x55, 0x16, 0x5c, 0x8b, 0x9a, 0x6d, 0x0a, 0x7d, 0xe8, 0xb0, 0x62, 0xc4, 0x50, 0x0d, 0xc4, 0xcd, 0x12, 0x0c, 0x0f, 0x74, 0x18, 0xda, 0xe3, 0xd0,
65: 0xb5, 0x78, 0x1c, 0x34, 0x80, 0x3f, 0xa7, 0x54, 0x21, 0xc7, 0x90, 0xdf, 0xe1, 0xde, 0x18, 0x34, 0xf2, 0x80, 0xd7, 0x66, 0x7b, 0x32, 0x7f, 0x6c, 0x8c, 0xd7, 0x55, 0x7e, 0x12, 0xac, 0x3a, 0x0f,
66: 0x93, 0xec, 0x05, 0xc5, 0x2e, 0x04, 0x93, 0xef, 0x31, 0xa1, 0x2d, 0x3d, 0x92, 0x60, 0xf7, 0x9a, 0x28, 0x9d, 0x6a, 0x37, 0x9b, 0xc7, 0x0c, 0x50, 0x84, 0x14, 0x73, 0xd1, 0xa8, 0xcc, 0x81, 0xec,
67: 0x58, 0x3e, 0x96, 0x45, 0xe0, 0x7b, 0x8d, 0x96, 0x70, 0x65, 0x5b, 0xa5, 0xbb, 0xcf, 0xec, 0xc6, 0xdc, 0x39, 0x66, 0x38, 0x0a, 0xd8, 0xfe, 0xcb, 0x17, 0xb6, 0xba, 0x02, 0x46, 0x9a, 0x02, 0x0a,
68: 0x84, 0xe1, 0x8e, 0x8f, 0x84, 0x25, 0x20, 0x70, 0xc1, 0x3e, 0x9f, 0x1f, 0x28, 0x9b, 0xe5, 0x4f, 0xbc, 0x48, 0x14, 0x57, 0x77, 0x8f, 0x61, 0x60, 0x15, 0xe1, 0x32, 0x7a, 0x02, 0xb1, 0x40, 0xf1,
69: 0x50, 0x5e, 0xb3, 0x09, 0x32, 0x6d, 0x68, 0x37, 0x8f, 0x83, 0x74, 0x59, 0x5c, 0x84, 0x9d, 0x84, 0xf4, 0xc3, 0x33, 0xec, 0x44, 0x23, 0x88, 0x51, 0x43, 0xcb, 0x47, 0xbd, 0x71, 0xc5, 0xed, 0xae,
70: 0x9b, 0xe6, 0x9a, 0x2f, 0xfe, 0xce, 0xb1, 0xbe, 0xc9, 0xde, 0x24, 0x4f, 0xbe, 0x15, 0x99, 0x2b, 0x11, 0xb7, 0x7c, 0x04, 0x0f, 0x12, 0xbd, 0x8f, 0x6a, 0x97, 0x5a, 0x44, 0xa0, 0xf9, 0x0c, 0x29,
71: 0xa9, 0xab, 0xc3, 0xd4, 0xd8, 0x93, 0x92, 0x72, 0x84, 0xc5, 0x87, 0x54, 0xcc, 0xe2, 0x94, 0x52, 0x9f, 0x86, 0x14, 0xdc, 0xd2, 0xab, 0xa9, 0x91, 0x92, 0x5f, 0xed, 0xc4, 0xae, 0x74, 0xff, 0xac,
72: 0x6e, 0x33, 0x3b, 0x93, 0xeb, 0x4a, 0xff, 0x04, 0x79, 0xda, 0x9a, 0x41, 0x0e, 0x44, 0x50, 0xe0, 0xdd, 0x7a, 0xe4, 0xc6, 0xe2, 0x91, 0x09, 0x00, 0x57, 0x5d, 0xa4, 0x01, 0xfc, 0x07, 0x05, 0x9f,
73: 0x64, 0x5e, 0x8b, 0x7e, 0x9b, 0xfd, 0xef, 0x33, 0x94, 0x30, 0x54, 0xff, 0x84, 0x01, 0x14, 0x93, 0xc2, 0x7b, 0x34, 0x29, 0xea, 0xed, 0xb4, 0xed, 0x53, 0x76, 0x44, 0x1a, 0x77, 0xed, 0x43, 0x85,
74: 0x1a, 0xd7, 0x7f, 0x16, 0xf5, 0x41, 0xdf, 0xd2, 0x69, 0xd5, 0x0d, 0x6a, 0x5f, 0x14, 0xfb, 0x0a, 0xab, 0x1c, 0xbb, 0x4c, 0x15, 0x50, 0xbe, 0x97, 0xf7, 0xab, 0x40, 0x66, 0x19, 0x3c, 0x4c, 0xaa,
75: 0x77, 0x3d, 0xad, 0x38, 0x01, 0x4b, 0xd2, 0x09, 0x2f, 0xa7, 0x55, 0xc8, 0x24, 0xbb, 0x5e, 0x54, 0xc4, 0xf3, 0x6f, 0xfd, 0xa9, 0xfc, 0xea, 0x70, 0xb9, 0xc6, 0xe6, 0x93, 0xe1, 0x48, 0xc1, 0x51
76: }
77: },
78: {
79: // IEEE 1619 - Vector 11
80:
81: { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, 0x62, 0x49, 0x77, 0x57, 0x24, 0x70, 0x93, 0x69, 0x99, 0x59, 0x57, 0x49, 0x66, 0x96, 0x76, 0x27 },
82: { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, 0x02, 0x88, 0x41, 0x97, 0x16, 0x93, 0x99, 0x37, 0x51, 0x05, 0x82, 0x09, 0x74, 0x94, 0x45, 0x92 },
83: { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff },
84: 0,
85: {
86: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
87: 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
88: 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
89: 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
90: 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
91: 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
92: 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
93: 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
94: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
95: 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
96: 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
97: 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
98: 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
99: 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
100: 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
101: 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
102: },
103: {
104: 0x77, 0xa3, 0x12, 0x51, 0x61, 0x8a, 0x15, 0xe6, 0xb9, 0x2d, 0x1d, 0x66, 0xdf, 0xfe, 0x7b, 0x50, 0xb5, 0x0b, 0xad, 0x55, 0x23, 0x05, 0xba, 0x02, 0x17, 0xa6, 0x10, 0x68, 0x8e, 0xff, 0x7e, 0x11,
105: 0xe1, 0xd0, 0x22, 0x54, 0x38, 0xe0, 0x93, 0x24, 0x2d, 0x6d, 0xb2, 0x74, 0xfd, 0xe8, 0x01, 0xd4, 0xca, 0xe0, 0x6f, 0x20, 0x92, 0xc7, 0x28, 0xb2, 0x47, 0x85, 0x59, 0xdf, 0x58, 0xe8, 0x37, 0xc2,
106: 0x46, 0x9e, 0xe4, 0xa4, 0xfa, 0x79, 0x4e, 0x4b, 0xbc, 0x7f, 0x39, 0xbc, 0x02, 0x6e, 0x3c, 0xb7, 0x2c, 0x33, 0xb0, 0x88, 0x8f, 0x25, 0xb4, 0xac, 0xf5, 0x6a, 0x2a, 0x98, 0x04, 0xf1, 0xce, 0x6d,
107: 0x3d, 0x6e, 0x1d, 0xc6, 0xca, 0x18, 0x1d, 0x4b, 0x54, 0x61, 0x79, 0xd5, 0x55, 0x44, 0xaa, 0x77, 0x60, 0xc4, 0x0d, 0x06, 0x74, 0x15, 0x39, 0xc7, 0xe3, 0xcd, 0x9d, 0x2f, 0x66, 0x50, 0xb2, 0x01,
108: 0x3f, 0xd0, 0xee, 0xb8, 0xc2, 0xb8, 0xe3, 0xd8, 0xd2, 0x40, 0xcc, 0xae, 0x2d, 0x4c, 0x98, 0x32, 0x0a, 0x74, 0x42, 0xe1, 0xc8, 0xd7, 0x5a, 0x42, 0xd6, 0xe6, 0xcf, 0xa4, 0xc2, 0xec, 0xa1, 0x79,
109: 0x8d, 0x15, 0x8c, 0x7a, 0xec, 0xdf, 0x82, 0x49, 0x0f, 0x24, 0xbb, 0x9b, 0x38, 0xe1, 0x08, 0xbc, 0xda, 0x12, 0xc3, 0xfa, 0xf9, 0xa2, 0x11, 0x41, 0xc3, 0x61, 0x3b, 0x58, 0x36, 0x7f, 0x92, 0x2a,
110: 0xaa, 0x26, 0xcd, 0x22, 0xf2, 0x3d, 0x70, 0x8d, 0xae, 0x69, 0x9a, 0xd7, 0xcb, 0x40, 0xa8, 0xad, 0x0b, 0x6e, 0x27, 0x84, 0x97, 0x3d, 0xcb, 0x60, 0x56, 0x84, 0xc0, 0x8b, 0x8d, 0x69, 0x98, 0xc6,
111: 0x9a, 0xac, 0x04, 0x99, 0x21, 0x87, 0x1e, 0xbb, 0x65, 0x30, 0x1a, 0x46, 0x19, 0xca, 0x80, 0xec, 0xb4, 0x85, 0xa3, 0x1d, 0x74, 0x42, 0x23, 0xce, 0x8d, 0xdc, 0x23, 0x94, 0x82, 0x8d, 0x6a, 0x80,
112: 0x47, 0x0c, 0x09, 0x2f, 0x5b, 0xa4, 0x13, 0xc3, 0x37, 0x8f, 0xa6, 0x05, 0x42, 0x55, 0xc6, 0xf9, 0xdf, 0x44, 0x95, 0x86, 0x2b, 0xbb, 0x32, 0x87, 0x68, 0x1f, 0x93, 0x1b, 0x68, 0x7c, 0x88, 0x8a,
113: 0xbf, 0x84, 0x4d, 0xfc, 0x8f, 0xc2, 0x83, 0x31, 0xe5, 0x79, 0x92, 0x8c, 0xd1, 0x2b, 0xd2, 0x39, 0x0a, 0xe1, 0x23, 0xcf, 0x03, 0x81, 0x8d, 0x14, 0xde, 0xdd, 0xe5, 0xc0, 0xc2, 0x4c, 0x8a, 0xb0,
114: 0x18, 0xbf, 0xca, 0x75, 0xca, 0x09, 0x6f, 0x2d, 0x53, 0x1f, 0x3d, 0x16, 0x19, 0xe7, 0x85, 0xf1, 0xad, 0xa4, 0x37, 0xca, 0xb9, 0x2e, 0x98, 0x05, 0x58, 0xb3, 0xdc, 0xe1, 0x47, 0x4a, 0xfb, 0x75,
115: 0xbf, 0xed, 0xbf, 0x8f, 0xf5, 0x4c, 0xb2, 0x61, 0x8e, 0x02, 0x44, 0xc9, 0xac, 0x0d, 0x3c, 0x66, 0xfb, 0x51, 0x59, 0x8c, 0xd2, 0xdb, 0x11, 0xf9, 0xbe, 0x39, 0x79, 0x1a, 0xbe, 0x44, 0x7c, 0x63,
116: 0x09, 0x4f, 0x7c, 0x45, 0x3b, 0x7f, 0xf8, 0x7c, 0xb5, 0xbb, 0x36, 0xb7, 0xc7, 0x9e, 0xfb, 0x08, 0x72, 0xd1, 0x70, 0x58, 0xb8, 0x3b, 0x15, 0xab, 0x08, 0x66, 0xad, 0x8a, 0x58, 0x65, 0x6c, 0x5a,
117: 0x7e, 0x20, 0xdb, 0xdf, 0x30, 0x8b, 0x24, 0x61, 0xd9, 0x7c, 0x0e, 0xc0, 0x02, 0x4a, 0x27, 0x15, 0x05, 0x52, 0x49, 0xcf, 0x3b, 0x47, 0x8d, 0xdd, 0x47, 0x40, 0xde, 0x65, 0x4f, 0x75, 0xca, 0x68,
118: 0x6e, 0x0d, 0x73, 0x45, 0xc6, 0x9e, 0xd5, 0x0c, 0xdc, 0x2a, 0x8b, 0x33, 0x2b, 0x1f, 0x88, 0x24, 0x10, 0x8a, 0xc9, 0x37, 0xeb, 0x05, 0x05, 0x85, 0x60, 0x8e, 0xe7, 0x34, 0x09, 0x7f, 0xc0, 0x90,
119: 0x54, 0xfb, 0xff, 0x89, 0xee, 0xae, 0xea, 0x79, 0x1f, 0x4a, 0x7a, 0xb1, 0xf9, 0x86, 0x82, 0x94, 0xa4, 0xf9, 0xe2, 0x7b, 0x42, 0xaf, 0x81, 0x00, 0xcb, 0x9d, 0x59, 0xce, 0xf9, 0x64, 0x58, 0x03
120: }
121: },
122: {
123: // IEEE 1619 - Vector 12
124:
125: { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, 0x62, 0x49, 0x77, 0x57, 0x24, 0x70, 0x93, 0x69, 0x99, 0x59, 0x57, 0x49, 0x66, 0x96, 0x76, 0x27 },
126: { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, 0x02, 0x88, 0x41, 0x97, 0x16, 0x93, 0x99, 0x37, 0x51, 0x05, 0x82, 0x09, 0x74, 0x94, 0x45, 0x92 },
127: { 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff },
128: 0,
129: {
130: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
131: 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
132: 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
133: 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
134: 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
135: 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
136: 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
137: 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
138: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
139: 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
140: 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
141: 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
142: 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
143: 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
144: 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
145: 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
146: },
147: {
148: 0xe3, 0x87, 0xaa, 0xa5, 0x8b, 0xa4, 0x83, 0xaf, 0xa7, 0xe8, 0xeb, 0x46, 0x97, 0x78, 0x31, 0x7e, 0xcf, 0x4c, 0xf5, 0x73, 0xaa, 0x9d, 0x4e, 0xac, 0x23, 0xf2, 0xcd, 0xf9, 0x14, 0xe4, 0xe2, 0x00,
149: 0xa8, 0xb4, 0x90, 0xe4, 0x2e, 0xe6, 0x46, 0x80, 0x2d, 0xc6, 0xee, 0x2b, 0x47, 0x1b, 0x27, 0x81, 0x95, 0xd6, 0x09, 0x18, 0xec, 0xec, 0xb4, 0x4b, 0xf7, 0x99, 0x66, 0xf8, 0x3f, 0xab, 0xa0, 0x49,
150: 0x92, 0x98, 0xeb, 0xc6, 0x99, 0xc0, 0xc8, 0x63, 0x47, 0x15, 0xa3, 0x20, 0xbb, 0x4f, 0x07, 0x5d, 0x62, 0x2e, 0x74, 0xc8, 0xc9, 0x32, 0x00, 0x4f, 0x25, 0xb4, 0x1e, 0x36, 0x10, 0x25, 0xb5, 0xa8,
151: 0x78, 0x15, 0x39, 0x1f, 0x61, 0x08, 0xfc, 0x4a, 0xfa, 0x6a, 0x05, 0xd9, 0x30, 0x3c, 0x6b, 0xa6, 0x8a, 0x12, 0x8a, 0x55, 0x70, 0x5d, 0x41, 0x59, 0x85, 0x83, 0x2f, 0xde, 0xaa, 0xe6, 0xc8, 0xe1,
152: 0x91, 0x10, 0xe8, 0x4d, 0x1b, 0x1f, 0x19, 0x9a, 0x26, 0x92, 0x11, 0x9e, 0xdc, 0x96, 0x13, 0x26, 0x58, 0xf0, 0x9d, 0xa7, 0xc6, 0x23, 0xef, 0xce, 0xc7, 0x12, 0x53, 0x7a, 0x3d, 0x94, 0xc0, 0xbf,
153: 0x5d, 0x7e, 0x35, 0x2e, 0xc9, 0x4a, 0xe5, 0x79, 0x7f, 0xdb, 0x37, 0x7d, 0xc1, 0x55, 0x11, 0x50, 0x72, 0x1a, 0xdf, 0x15, 0xbd, 0x26, 0xa8, 0xef, 0xc2, 0xfc, 0xaa, 0xd5, 0x68, 0x81, 0xfa, 0x9e,
154: 0x62, 0x46, 0x2c, 0x28, 0xf3, 0x0a, 0xe1, 0xce, 0xac, 0xa9, 0x3c, 0x34, 0x5c, 0xf2, 0x43, 0xb7, 0x3f, 0x54, 0x2e, 0x20, 0x74, 0xa7, 0x05, 0xbd, 0x26, 0x43, 0xbb, 0x9f, 0x7c, 0xc7, 0x9b, 0xb6,
155: 0xe7, 0x09, 0x1e, 0xa6, 0xe2, 0x32, 0xdf, 0x0f, 0x9a, 0xd0, 0xd6, 0xcf, 0x50, 0x23, 0x27, 0x87, 0x6d, 0x82, 0x20, 0x7a, 0xbf, 0x21, 0x15, 0xcd, 0xac, 0xf6, 0xd5, 0xa4, 0x8f, 0x6c, 0x18, 0x79,
156: 0xa6, 0x5b, 0x11, 0x5f, 0x0f, 0x8b, 0x3c, 0xb3, 0xc5, 0x9d, 0x15, 0xdd, 0x8c, 0x76, 0x9b, 0xc0, 0x14, 0x79, 0x5a, 0x18, 0x37, 0xf3, 0x90, 0x1b, 0x58, 0x45, 0xeb, 0x49, 0x1a, 0xdf, 0xef, 0xe0,
157: 0x97, 0xb1, 0xfa, 0x30, 0xa1, 0x2f, 0xc1, 0xf6, 0x5b, 0xa2, 0x29, 0x05, 0x03, 0x15, 0x39, 0x97, 0x1a, 0x10, 0xf2, 0xf3, 0x6c, 0x32, 0x1b, 0xb5, 0x13, 0x31, 0xcd, 0xef, 0xb3, 0x9e, 0x39, 0x64,
158: 0xc7, 0xef, 0x07, 0x99, 0x94, 0xf5, 0xb6, 0x9b, 0x2e, 0xdd, 0x83, 0xa7, 0x1e, 0xf5, 0x49, 0x97, 0x1e, 0xe9, 0x3f, 0x44, 0xea, 0xc3, 0x93, 0x8f, 0xcd, 0xd6, 0x1d, 0x01, 0xfa, 0x71, 0x79, 0x9d,
159: 0xa3, 0xa8, 0x09, 0x1c, 0x4c, 0x48, 0xaa, 0x9e, 0xd2, 0x63, 0xff, 0x07, 0x49, 0xdf, 0x95, 0xd4, 0x4f, 0xef, 0x6a, 0x0b, 0xb5, 0x78, 0xec, 0x69, 0x45, 0x6a, 0xa5, 0x40, 0x8a, 0xe3, 0x2c, 0x7a,
160: 0xf0, 0x8a, 0xd7, 0xba, 0x89, 0x21, 0x28, 0x7e, 0x3b, 0xbe, 0xe3, 0x1b, 0x76, 0x7b, 0xe0, 0x6a, 0x0e, 0x70, 0x5c, 0x86, 0x4a, 0x76, 0x91, 0x37, 0xdf, 0x28, 0x29, 0x22, 0x83, 0xea, 0x81, 0xa2,
161: 0x48, 0x02, 0x41, 0xb4, 0x4d, 0x99, 0x21, 0xcd, 0xbe, 0xc1, 0xbc, 0x28, 0xdc, 0x1f, 0xda, 0x11, 0x4b, 0xd8, 0xe5, 0x21, 0x7a, 0xc9, 0xd8, 0xeb, 0xaf, 0xa7, 0x20, 0xe9, 0xda, 0x4f, 0x9a, 0xce,
162: 0x23, 0x1c, 0xc9, 0x49, 0xe5, 0xb9, 0x6f, 0xe7, 0x6f, 0xfc, 0x21, 0x06, 0x3f, 0xdd, 0xc8, 0x3a, 0x6b, 0x86, 0x79, 0xc0, 0x0d, 0x35, 0xe0, 0x95, 0x76, 0xa8, 0x75, 0x30, 0x5b, 0xed, 0x5f, 0x36,
163: 0xed, 0x24, 0x2c, 0x89, 0x00, 0xdd, 0x1f, 0xa9, 0x65, 0xbc, 0x95, 0x0d, 0xfc, 0xe0, 0x9b, 0x13, 0x22, 0x63, 0xa1, 0xee, 0xf5, 0x2d, 0xd6, 0x88, 0x8c, 0x30, 0x9f, 0x5a, 0x7d, 0x71, 0x28, 0x26
164: }
165: },
166: {
167: // IEEE 1619 - Vector 13
168:
169: { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, 0x62, 0x49, 0x77, 0x57, 0x24, 0x70, 0x93, 0x69, 0x99, 0x59, 0x57, 0x49, 0x66, 0x96, 0x76, 0x27 },
170: { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, 0x02, 0x88, 0x41, 0x97, 0x16, 0x93, 0x99, 0x37, 0x51, 0x05, 0x82, 0x09, 0x74, 0x94, 0x45, 0x92 },
171: { 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff },
172: 0,
173: {
174: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
175: 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
176: 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
177: 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
178: 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
179: 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
180: 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
181: 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
182: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
183: 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
184: 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
185: 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
186: 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
187: 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
188: 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
189: 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
190: },
191: {
192: 0xbf, 0x53, 0xd2, 0xda, 0xde, 0x78, 0xe8, 0x22, 0xa4, 0xd9, 0x49, 0xa9, 0xbc, 0x67, 0x66, 0xb0, 0x1b, 0x06, 0xa8, 0xef, 0x70, 0xd2, 0x67, 0x48, 0xc6, 0xa7, 0xfc, 0x36, 0xd8, 0x0a, 0xe4, 0xc5,
193: 0x52, 0x0f, 0x7c, 0x4a, 0xb0, 0xac, 0x85, 0x44, 0x42, 0x4f, 0xa4, 0x05, 0x16, 0x2f, 0xef, 0x5a, 0x6b, 0x7f, 0x22, 0x94, 0x98, 0x06, 0x36, 0x18, 0xd3, 0x9f, 0x00, 0x03, 0xcb, 0x5f, 0xb8, 0xd1,
194: 0xc8, 0x6b, 0x64, 0x34, 0x97, 0xda, 0x1f, 0xf9, 0x45, 0xc8, 0xd3, 0xbe, 0xde, 0xca, 0x4f, 0x47, 0x97, 0x02, 0xa7, 0xa7, 0x35, 0xf0, 0x43, 0xdd, 0xb1, 0xd6, 0xaa, 0xad, 0xe3, 0xc4, 0xa0, 0xac,
195: 0x7c, 0xa7, 0xf3, 0xfa, 0x52, 0x79, 0xbe, 0xf5, 0x6f, 0x82, 0xcd, 0x7a, 0x2f, 0x38, 0x67, 0x2e, 0x82, 0x48, 0x14, 0xe1, 0x07, 0x00, 0x30, 0x0a, 0x05, 0x5e, 0x16, 0x30, 0xb8, 0xf1, 0xcb, 0x0e,
196: 0x91, 0x9f, 0x5e, 0x94, 0x20, 0x10, 0xa4, 0x16, 0xe2, 0xbf, 0x48, 0xcb, 0x46, 0x99, 0x3d, 0x3c, 0xb6, 0xa5, 0x1c, 0x19, 0xba, 0xcf, 0x86, 0x47, 0x85, 0xa0, 0x0b, 0xc2, 0xec, 0xff, 0x15, 0xd3,
197: 0x50, 0x87, 0x5b, 0x24, 0x6e, 0xd5, 0x3e, 0x68, 0xbe, 0x6f, 0x55, 0xbd, 0x7e, 0x05, 0xcf, 0xc2, 0xb2, 0xed, 0x64, 0x32, 0x19, 0x8a, 0x64, 0x44, 0xb6, 0xd8, 0xc2, 0x47, 0xfa, 0xb9, 0x41, 0xf5,
198: 0x69, 0x76, 0x8b, 0x5c, 0x42, 0x93, 0x66, 0xf1, 0xd3, 0xf0, 0x0f, 0x03, 0x45, 0xb9, 0x61, 0x23, 0xd5, 0x62, 0x04, 0xc0, 0x1c, 0x63, 0xb2, 0x2c, 0xe7, 0x8b, 0xaf, 0x11, 0x6e, 0x52, 0x5e, 0xd9,
199: 0x0f, 0xde, 0xa3, 0x9f, 0xa4, 0x69, 0x49, 0x4d, 0x38, 0x66, 0xc3, 0x1e, 0x05, 0xf2, 0x95, 0xff, 0x21, 0xfe, 0xa8, 0xd4, 0xe6, 0xe1, 0x3d, 0x67, 0xe4, 0x7c, 0xe7, 0x22, 0xe9, 0x69, 0x8a, 0x1c,
200: 0x10, 0x48, 0xd6, 0x8e, 0xbc, 0xde, 0x76, 0xb8, 0x6f, 0xcf, 0x97, 0x6e, 0xab, 0x8a, 0xa9, 0x79, 0x02, 0x68, 0xb7, 0x06, 0x8e, 0x01, 0x7a, 0x8b, 0x9b, 0x74, 0x94, 0x09, 0x51, 0x4f, 0x10, 0x53,
201: 0x02, 0x7f, 0xd1, 0x6c, 0x37, 0x86, 0xea, 0x1b, 0xac, 0x5f, 0x15, 0xcb, 0x79, 0x71, 0x1e, 0xe2, 0xab, 0xe8, 0x2f, 0x5c, 0xf8, 0xb1, 0x3a, 0xe7, 0x30, 0x30, 0xef, 0x5b, 0x9e, 0x44, 0x57, 0xe7,
202: 0x5d, 0x13, 0x04, 0xf9, 0x88, 0xd6, 0x2d, 0xd6, 0xfc, 0x4b, 0x94, 0xed, 0x38, 0xba, 0x83, 0x1d, 0xa4, 0xb7, 0x63, 0x49, 0x71, 0xb6, 0xcd, 0x8e, 0xc3, 0x25, 0xd9, 0xc6, 0x1c, 0x00, 0xf1, 0xdf,
203: 0x73, 0x62, 0x7e, 0xd3, 0x74, 0x5a, 0x5e, 0x84, 0x89, 0xf3, 0xa9, 0x5c, 0x69, 0x63, 0x9c, 0x32, 0xcd, 0x6e, 0x1d, 0x53, 0x7a, 0x85, 0xf7, 0x5c, 0xc8, 0x44, 0x72, 0x6e, 0x8a, 0x72, 0xfc, 0x00,
204: 0x77, 0xad, 0x22, 0x00, 0x0f, 0x1d, 0x50, 0x78, 0xf6, 0xb8, 0x66, 0x31, 0x8c, 0x66, 0x8f, 0x1a, 0xd0, 0x3d, 0x5a, 0x5f, 0xce, 0xd5, 0x21, 0x9f, 0x2e, 0xab, 0xbd, 0x0a, 0xa5, 0xc0, 0xf4, 0x60,
205: 0xd1, 0x83, 0xf0, 0x44, 0x04, 0xa0, 0xd6, 0xf4, 0x69, 0x55, 0x8e, 0x81, 0xfa, 0xb2, 0x4a, 0x16, 0x79, 0x05, 0xab, 0x4c, 0x78, 0x78, 0x50, 0x2a, 0xd3, 0xe3, 0x8f, 0xdb, 0xe6, 0x2a, 0x41, 0x55,
206: 0x6c, 0xec, 0x37, 0x32, 0x57, 0x59, 0x53, 0x3c, 0xe8, 0xf2, 0x5f, 0x36, 0x7c, 0x87, 0xbb, 0x55, 0x78, 0xd6, 0x67, 0xae, 0x93, 0xf9, 0xe2, 0xfd, 0x99, 0xbc, 0xbc, 0x5f, 0x2f, 0xbb, 0xa8, 0x8c,
207: 0xf6, 0x51, 0x61, 0x39, 0x42, 0x0f, 0xcf, 0xf3, 0xb7, 0x36, 0x1d, 0x86, 0x32, 0x2c, 0x4b, 0xd8, 0x4c, 0x82, 0xf3, 0x35, 0xab, 0xb1, 0x52, 0xc4, 0xa9, 0x34, 0x11, 0x37, 0x3a, 0xaa, 0x82, 0x20
208: }
209: },
210: {
211: // IEEE 1619 - Vector 14
212:
213: /* This vector must always be the last one in XTS_vectors[] because TestSectorBufEncryption() relies on it. */
214:
215: { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, 0x62, 0x49, 0x77, 0x57, 0x24, 0x70, 0x93, 0x69, 0x99, 0x59, 0x57, 0x49, 0x66, 0x96, 0x76, 0x27 },
216: { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, 0x02, 0x88, 0x41, 0x97, 0x16, 0x93, 0x99, 0x37, 0x51, 0x05, 0x82, 0x09, 0x74, 0x94, 0x45, 0x92 },
217: { 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff },
218: 0,
219: {
220: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
221: 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
222: 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
223: 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
224: 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
225: 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
226: 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
227: 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
228: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
229: 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
230: 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
231: 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
232: 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
233: 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
234: 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
235: 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
236: },
237: {
238: 0x64, 0x49, 0x7e, 0x5a, 0x83, 0x1e, 0x4a, 0x93, 0x2c, 0x09, 0xbe, 0x3e, 0x53, 0x93, 0x37, 0x6d, 0xaa, 0x59, 0x95, 0x48, 0xb8, 0x16, 0x03, 0x1d, 0x22, 0x4b, 0xbf, 0x50, 0xa8, 0x18, 0xed, 0x23,
239: 0x50, 0xea, 0xe7, 0xe9, 0x60, 0x87, 0xc8, 0xa0, 0xdb, 0x51, 0xad, 0x29, 0x0b, 0xd0, 0x0c, 0x1a, 0xc1, 0x62, 0x08, 0x57, 0x63, 0x5b, 0xf2, 0x46, 0xc1, 0x76, 0xab, 0x46, 0x3b, 0xe3, 0x0b, 0x80,
240: 0x8d, 0xa5, 0x48, 0x08, 0x1a, 0xc8, 0x47, 0xb1, 0x58, 0xe1, 0x26, 0x4b, 0xe2, 0x5b, 0xb0, 0x91, 0x0b, 0xbc, 0x92, 0x64, 0x71, 0x08, 0x08, 0x94, 0x15, 0xd4, 0x5f, 0xab, 0x1b, 0x3d, 0x26, 0x04,
241: 0xe8, 0xa8, 0xef, 0xf1, 0xae, 0x40, 0x20, 0xcf, 0xa3, 0x99, 0x36, 0xb6, 0x68, 0x27, 0xb2, 0x3f, 0x37, 0x1b, 0x92, 0x20, 0x0b, 0xe9, 0x02, 0x51, 0xe6, 0xd7, 0x3c, 0x5f, 0x86, 0xde, 0x5f, 0xd4,
242: 0xa9, 0x50, 0x78, 0x19, 0x33, 0xd7, 0x9a, 0x28, 0x27, 0x2b, 0x78, 0x2a, 0x2e, 0xc3, 0x13, 0xef, 0xdf, 0xcc, 0x06, 0x28, 0xf4, 0x3d, 0x74, 0x4c, 0x2d, 0xc2, 0xff, 0x3d, 0xcb, 0x66, 0x99, 0x9b,
243: 0x50, 0xc7, 0xca, 0x89, 0x5b, 0x0c, 0x64, 0x79, 0x1e, 0xea, 0xa5, 0xf2, 0x94, 0x99, 0xfb, 0x1c, 0x02, 0x6f, 0x84, 0xce, 0x5b, 0x5c, 0x72, 0xba, 0x10, 0x83, 0xcd, 0xdb, 0x5c, 0xe4, 0x54, 0x34,
244: 0x63, 0x16, 0x65, 0xc3, 0x33, 0xb6, 0x0b, 0x11, 0x59, 0x3f, 0xb2, 0x53, 0xc5, 0x17, 0x9a, 0x2c, 0x8d, 0xb8, 0x13, 0x78, 0x2a, 0x00, 0x48, 0x56, 0xa1, 0x65, 0x30, 0x11, 0xe9, 0x3f, 0xb6, 0xd8,
245: 0x76, 0xc1, 0x83, 0x66, 0xdd, 0x86, 0x83, 0xf5, 0x34, 0x12, 0xc0, 0xc1, 0x80, 0xf9, 0xc8, 0x48, 0x59, 0x2d, 0x59, 0x3f, 0x86, 0x09, 0xca, 0x73, 0x63, 0x17, 0xd3, 0x56, 0xe1, 0x3e, 0x2b, 0xff,
246: 0x3a, 0x9f, 0x59, 0xcd, 0x9a, 0xeb, 0x19, 0xcd, 0x48, 0x25, 0x93, 0xd8, 0xc4, 0x61, 0x28, 0xbb, 0x32, 0x42, 0x3b, 0x37, 0xa9, 0xad, 0xfb, 0x48, 0x2b, 0x99, 0x45, 0x3f, 0xbe, 0x25, 0xa4, 0x1b,
247: 0xf6, 0xfe, 0xb4, 0xaa, 0x0b, 0xef, 0x5e, 0xd2, 0x4b, 0xf7, 0x3c, 0x76, 0x29, 0x78, 0x02, 0x54, 0x82, 0xc1, 0x31, 0x15, 0xe4, 0x01, 0x5a, 0xac, 0x99, 0x2e, 0x56, 0x13, 0xa3, 0xb5, 0xc2, 0xf6,
248: 0x85, 0xb8, 0x47, 0x95, 0xcb, 0x6e, 0x9b, 0x26, 0x56, 0xd8, 0xc8, 0x81, 0x57, 0xe5, 0x2c, 0x42, 0xf9, 0x78, 0xd8, 0x63, 0x4c, 0x43, 0xd0, 0x6f, 0xea, 0x92, 0x8f, 0x28, 0x22, 0xe4, 0x65, 0xaa,
249: 0x65, 0x76, 0xe9, 0xbf, 0x41, 0x93, 0x84, 0x50, 0x6c, 0xc3, 0xce, 0x3c, 0x54, 0xac, 0x1a, 0x6f, 0x67, 0xdc, 0x66, 0xf3, 0xb3, 0x01, 0x91, 0xe6, 0x98, 0x38, 0x0b, 0xc9, 0x99, 0xb0, 0x5a, 0xbc,
250: 0xe1, 0x9d, 0xc0, 0xc6, 0xdc, 0xc2, 0xdd, 0x00, 0x1e, 0xc5, 0x35, 0xba, 0x18, 0xde, 0xb2, 0xdf, 0x1a, 0x10, 0x10, 0x23, 0x10, 0x83, 0x18, 0xc7, 0x5d, 0xc9, 0x86, 0x11, 0xa0, 0x9d, 0xc4, 0x8a,
251: 0x0a, 0xcd, 0xec, 0x67, 0x6f, 0xab, 0xdf, 0x22, 0x2f, 0x07, 0xe0, 0x26, 0xf0, 0x59, 0xb6, 0x72, 0xb5, 0x6e, 0x5c, 0xbc, 0x8e, 0x1d, 0x21, 0xbb, 0xd8, 0x67, 0xdd, 0x92, 0x72, 0x12, 0x05, 0x46,
252: 0x81, 0xd7, 0x0e, 0xa7, 0x37, 0x13, 0x4c, 0xdf, 0xce, 0x93, 0xb6, 0xf8, 0x2a, 0xe2, 0x24, 0x23, 0x27, 0x4e, 0x58, 0xa0, 0x82, 0x1c, 0xc5, 0x50, 0x2e, 0x2d, 0x0a, 0xb4, 0x58, 0x5e, 0x94, 0xde,
253: 0x69, 0x75, 0xbe, 0x5e, 0x0b, 0x4e, 0xfc, 0xe5, 0x1c, 0xd3, 0xe7, 0x0c, 0x25, 0xa1, 0xfb, 0xbb, 0xd6, 0x09, 0xd2, 0x73, 0xad, 0x5b, 0x0d, 0x59, 0x63, 0x1c, 0x53, 0x1f, 0x6a, 0x0a, 0x57, 0xb9
254: }
255: } }; // XTS_TEST XTS_vectors[]
256:
257:
258: BOOL XTSAesTest (PCRYPTO_INFO ci)
259: {
260: unsigned __int8 p[ENCRYPTION_DATA_UNIT_SIZE];
261: UINT64_STRUCT dataUnitNo;
262: int i;
263:
264: for (i = 0; i < XTS_TEST_COUNT; i++)
265: {
266: ci->ea = EAGetByName ("AES");
267: if (ci->ea == 0)
268: return FALSE;
269:
270: ci->mode = XTS;
271:
272: if (EAInit (ci->ea, XTS_vectors[i].key1, ci->ks) != ERR_SUCCESS)
273: return FALSE;
274:
275: memcpy (&ci->k2, XTS_vectors[i].key2, sizeof (XTS_vectors[i].key2));
276:
277: if (!EAInitMode (ci))
278: return FALSE;
279:
280: memcpy (p, XTS_vectors[i].plaintext, sizeof (p));
281:
282: dataUnitNo.Value = BE64 (*((unsigned __int64 *) XTS_vectors[i].dataUnitNo));
283:
284: EncryptBufferXTS (p, sizeof (p), &dataUnitNo, XTS_vectors[i].blockNo, (unsigned char *) (ci->ks), (unsigned char *) ci->ks2, AES);
285:
286: if (memcmp (XTS_vectors[i].ciphertext, p, sizeof (p)) != 0)
287: return FALSE;
288: }
289:
290: return TRUE;
291: }
292:
1.1.1.6 root 293: /* Blowfish Test Vectors (deprecated/legacy) */
1.1 root 294:
295: /* Blowfish test vectors from www.counterpane.com/blowfish.html */
296:
297: #define BF_TEST_COUNT 34
298:
299: typedef struct {
300: unsigned char key[8];
301: unsigned char plaintext[8];
302: unsigned char ciphertext[8];
303: } BF_TEST;
304:
305: BF_TEST bf_ecb_vectors[BF_TEST_COUNT] = {
306: "\x00\x00\x00\x00\x00\x00\x00\x00","\x00\x00\x00\x00\x00\x00\x00\x00","\x4E\xF9\x97\x45\x61\x98\xDD\x78",
307: "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF","\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF","\x51\x86\x6F\xD5\xB8\x5E\xCB\x8A",
308: "\x30\x00\x00\x00\x00\x00\x00\x00","\x10\x00\x00\x00\x00\x00\x00\x01","\x7D\x85\x6F\x9A\x61\x30\x63\xF2",
309: "\x11\x11\x11\x11\x11\x11\x11\x11","\x11\x11\x11\x11\x11\x11\x11\x11","\x24\x66\xDD\x87\x8B\x96\x3C\x9D",
310: "\x01\x23\x45\x67\x89\xAB\xCD\xEF","\x11\x11\x11\x11\x11\x11\x11\x11","\x61\xF9\xC3\x80\x22\x81\xB0\x96",
311: "\x11\x11\x11\x11\x11\x11\x11\x11","\x01\x23\x45\x67\x89\xAB\xCD\xEF","\x7D\x0C\xC6\x30\xAF\xDA\x1E\xC7",
312: "\x00\x00\x00\x00\x00\x00\x00\x00","\x00\x00\x00\x00\x00\x00\x00\x00","\x4E\xF9\x97\x45\x61\x98\xDD\x78",
313: "\xFE\xDC\xBA\x98\x76\x54\x32\x10","\x01\x23\x45\x67\x89\xAB\xCD\xEF","\x0A\xCE\xAB\x0F\xC6\xA0\xA2\x8D",
314: "\x7C\xA1\x10\x45\x4A\x1A\x6E\x57","\x01\xA1\xD6\xD0\x39\x77\x67\x42","\x59\xC6\x82\x45\xEB\x05\x28\x2B",
315: "\x01\x31\xD9\x61\x9D\xC1\x37\x6E","\x5C\xD5\x4C\xA8\x3D\xEF\x57\xDA","\xB1\xB8\xCC\x0B\x25\x0F\x09\xA0",
316: "\x07\xA1\x13\x3E\x4A\x0B\x26\x86","\x02\x48\xD4\x38\x06\xF6\x71\x72","\x17\x30\xE5\x77\x8B\xEA\x1D\xA4",
317: "\x38\x49\x67\x4C\x26\x02\x31\x9E","\x51\x45\x4B\x58\x2D\xDF\x44\x0A","\xA2\x5E\x78\x56\xCF\x26\x51\xEB",
318: "\x04\xB9\x15\xBA\x43\xFE\xB5\xB6","\x42\xFD\x44\x30\x59\x57\x7F\xA2","\x35\x38\x82\xB1\x09\xCE\x8F\x1A",
319: "\x01\x13\xB9\x70\xFD\x34\xF2\xCE","\x05\x9B\x5E\x08\x51\xCF\x14\x3A","\x48\xF4\xD0\x88\x4C\x37\x99\x18",
320: "\x01\x70\xF1\x75\x46\x8F\xB5\xE6","\x07\x56\xD8\xE0\x77\x47\x61\xD2","\x43\x21\x93\xB7\x89\x51\xFC\x98",
321: "\x43\x29\x7F\xAD\x38\xE3\x73\xFE","\x76\x25\x14\xB8\x29\xBF\x48\x6A","\x13\xF0\x41\x54\xD6\x9D\x1A\xE5",
322: "\x07\xA7\x13\x70\x45\xDA\x2A\x16","\x3B\xDD\x11\x90\x49\x37\x28\x02","\x2E\xED\xDA\x93\xFF\xD3\x9C\x79",
323: "\x04\x68\x91\x04\xC2\xFD\x3B\x2F","\x26\x95\x5F\x68\x35\xAF\x60\x9A","\xD8\x87\xE0\x39\x3C\x2D\xA6\xE3",
324: "\x37\xD0\x6B\xB5\x16\xCB\x75\x46","\x16\x4D\x5E\x40\x4F\x27\x52\x32","\x5F\x99\xD0\x4F\x5B\x16\x39\x69",
325: "\x1F\x08\x26\x0D\x1A\xC2\x46\x5E","\x6B\x05\x6E\x18\x75\x9F\x5C\xCA","\x4A\x05\x7A\x3B\x24\xD3\x97\x7B",
326: "\x58\x40\x23\x64\x1A\xBA\x61\x76","\x00\x4B\xD6\xEF\x09\x17\x60\x62","\x45\x20\x31\xC1\xE4\xFA\xDA\x8E",
327: "\x02\x58\x16\x16\x46\x29\xB0\x07","\x48\x0D\x39\x00\x6E\xE7\x62\xF2","\x75\x55\xAE\x39\xF5\x9B\x87\xBD",
328: "\x49\x79\x3E\xBC\x79\xB3\x25\x8F","\x43\x75\x40\xC8\x69\x8F\x3C\xFA","\x53\xC5\x5F\x9C\xB4\x9F\xC0\x19",
329: "\x4F\xB0\x5E\x15\x15\xAB\x73\xA7","\x07\x2D\x43\xA0\x77\x07\x52\x92","\x7A\x8E\x7B\xFA\x93\x7E\x89\xA3",
330: "\x49\xE9\x5D\x6D\x4C\xA2\x29\xBF","\x02\xFE\x55\x77\x81\x17\xF1\x2A","\xCF\x9C\x5D\x7A\x49\x86\xAD\xB5",
331: "\x01\x83\x10\xDC\x40\x9B\x26\xD6","\x1D\x9D\x5C\x50\x18\xF7\x28\xC2","\xD1\xAB\xB2\x90\x65\x8B\xC7\x78",
332: "\x1C\x58\x7F\x1C\x13\x92\x4F\xEF","\x30\x55\x32\x28\x6D\x6F\x29\x5A","\x55\xCB\x37\x74\xD1\x3E\xF2\x01",
333: "\x01\x01\x01\x01\x01\x01\x01\x01","\x01\x23\x45\x67\x89\xAB\xCD\xEF","\xFA\x34\xEC\x48\x47\xB2\x68\xB2",
334: "\x1F\x1F\x1F\x1F\x0E\x0E\x0E\x0E","\x01\x23\x45\x67\x89\xAB\xCD\xEF","\xA7\x90\x79\x51\x08\xEA\x3C\xAE",
335: "\xE0\xFE\xE0\xFE\xF1\xFE\xF1\xFE","\x01\x23\x45\x67\x89\xAB\xCD\xEF","\xC3\x9E\x07\x2D\x9F\xAC\x63\x1D",
336: "\x00\x00\x00\x00\x00\x00\x00\x00","\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF","\x01\x49\x33\xE0\xCD\xAF\xF6\xE4",
337: "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF","\x00\x00\x00\x00\x00\x00\x00\x00","\xF2\x1E\x9A\x77\xB7\x1C\x49\xBC",
338: "\x01\x23\x45\x67\x89\xAB\xCD\xEF","\x00\x00\x00\x00\x00\x00\x00\x00","\x24\x59\x46\x88\x57\x54\x36\x9A",
339: "\xFE\xDC\xBA\x98\x76\x54\x32\x10","\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF","\x6B\x5C\x5A\x9C\x5D\x9E\x0A\x5A"
340: };
341:
342:
343: #define TRIPLEDES_TEST_COUNT 1
344:
345: typedef struct {
346: unsigned char key[24];
347: unsigned char plaintext[8];
348: unsigned char ciphertext[8];
349: } TRIPLEDES_TEST;
350:
351: TRIPLEDES_TEST tripledes_vectors[TRIPLEDES_TEST_COUNT] = {
352: 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98,
353: 0x76, 0x54, 0x32, 0x10, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67,
354:
355: 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
356:
357: 0xde, 0x0b, 0x7c, 0x06, 0xae, 0x5e, 0x0e, 0xd5
358: };
359:
1.1.1.6 root 360: /* CAST-128 Test Vectors from RFC2144 (deprecated/legacy) */
1.1 root 361:
362: #define CAST_TEST_COUNT 1
363:
364: typedef struct {
365: unsigned char key[16];
366: unsigned char plaintext[8];
367: unsigned char ciphertext[8];
368: } CAST_TEST;
369:
370:
371: CAST_TEST cast_ecb_vectors[CAST_TEST_COUNT] = {
372: "\x01\x23\x45\x67\x12\x34\x56\x78\x23\x45\x67\x89\x34\x56\x78\x9A",
373: "\x01\x23\x45\x67\x89\xAB\xCD\xEF",
374: "\x23\x8B\x4F\xE5\x84\x7E\x44\xB2"
375: };
376:
377: // AES ECB test vectors FIPS-197
378:
379: #define AES_TEST_COUNT 1
380:
381: typedef struct {
382: unsigned char key[32];
383: unsigned char plaintext[16];
384: unsigned char ciphertext[16];
385: } AES_TEST;
386:
387: AES_TEST aes_ecb_vectors[AES_TEST_COUNT] = {
388: 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
389: 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
390:
391: 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff,
392:
393: 0x8e,0xa2,0xb7,0xca,0x51,0x67,0x45,0xbf,0xea,0xfc,0x49,0x90,0x4b,0x49,0x60,0x89
394: };
395:
396: // Serpent ECB test vectors
397:
398: #define SERPENT_TEST_COUNT 1
399:
400: typedef struct {
401: unsigned char key[32];
402: unsigned char plaintext[16];
403: unsigned char ciphertext[16];
404: } SERPENT_TEST;
405:
406: SERPENT_TEST serpent_vectors[SERPENT_TEST_COUNT] = {
407: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
408: 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
409:
410: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
411: 0xde, 0x26, 0x9f, 0xf8, 0x33, 0xe4, 0x32, 0xb8, 0x5b, 0x2e, 0x88, 0xd2, 0x70, 0x1c, 0xe7, 0x5c
412: };
413:
414: // Twofish ECB test vectors
415:
416: #define TWOFISH_TEST_COUNT 1
417:
418: typedef struct {
419: unsigned char key[32];
420: unsigned char plaintext[16];
421: unsigned char ciphertext[16];
422: } TWOFISH_TEST;
423:
424: TWOFISH_TEST twofish_vectors[TWOFISH_TEST_COUNT] = {
425: 0xD4, 0x3B, 0xB7, 0x55, 0x6E, 0xA3, 0x2E, 0x46, 0xF2, 0xA2, 0x82, 0xB7, 0xD4, 0x5B, 0x4E, 0x0D,
426: 0x57, 0xFF, 0x73, 0x9D, 0x4D, 0xC9, 0x2C, 0x1B, 0xD7, 0xFC, 0x01, 0x70, 0x0C, 0xC8, 0x21, 0x6F,
427:
428: 0x90, 0xAF, 0xE9, 0x1B, 0xB2, 0x88, 0x54, 0x4F, 0x2C, 0x32, 0xDC, 0x23, 0x9B, 0x26, 0x35, 0xE6,
429: 0x6C, 0xB4, 0x56, 0x1C, 0x40, 0xBF, 0x0A, 0x97, 0x05, 0x93, 0x1C, 0xB6, 0xD4, 0x08, 0xE7, 0xFA
430: };
431:
1.1.1.7 root 432: /* Test vectors from FIPS 198a, RFC 4231, RFC 2104, RFC 2202, and other sources. */
433:
434: char *hmac_sha512_test_keys[] =
435: {
436: "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
437: "Jefe",
438: "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
439: "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19",
440: "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
441: "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
442: };
443:
444: char *hmac_sha512_test_data[] =
445: {
446: "Hi There",
447: "what do ya want for nothing?",
448: "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
449: "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
450: "Test Using Larger Than Block-Size Key - Hash Key First",
451: "This is a test using a larger than block-size key and a larger than block-size data. The key needs to be hashed before being used by the HMAC algorithm.",
452: };
453:
454: char *hmac_sha512_test_vectors[] =
455: {
456: "\x87\xaa\x7c\xde\xa5\xef\x61\x9d\x4f\xf0\xb4\x24\x1a\x1d\x6c\xb0\x23\x79\xf4\xe2\xce\x4e\xc2\x78\x7a\xd0\xb3\x05\x45\xe1\x7c\xde\xda\xa8\x33\xb7\xd6\xb8\xa7\x02\x03\x8b\x27\x4e\xae\xa3\xf4\xe4\xbe\x9d\x91\x4e\xeb\x61\xf1\x70\x2e\x69\x6c\x20\x3a\x12\x68\x54",
457: "\x16\x4b\x7a\x7b\xfc\xf8\x19\xe2\xe3\x95\xfb\xe7\x3b\x56\xe0\xa3\x87\xbd\x64\x22\x2e\x83\x1f\xd6\x10\x27\x0c\xd7\xea\x25\x05\x54\x97\x58\xbf\x75\xc0\x5a\x99\x4a\x6d\x03\x4f\x65\xf8\xf0\xe6\xfd\xca\xea\xb1\xa3\x4d\x4a\x6b\x4b\x63\x6e\x07\x0a\x38\xbc\xe7\x37",
458: "\xfa\x73\xb0\x08\x9d\x56\xa2\x84\xef\xb0\xf0\x75\x6c\x89\x0b\xe9\xb1\xb5\xdb\xdd\x8e\xe8\x1a\x36\x55\xf8\x3e\x33\xb2\x27\x9d\x39\xbf\x3e\x84\x82\x79\xa7\x22\xc8\x06\xb4\x85\xa4\x7e\x67\xc8\x07\xb9\x46\xa3\x37\xbe\xe8\x94\x26\x74\x27\x88\x59\xe1\x32\x92\xfb",
459: "\xb0\xba\x46\x56\x37\x45\x8c\x69\x90\xe5\xa8\xc5\xf6\x1d\x4a\xf7\xe5\x76\xd9\x7f\xf9\x4b\x87\x2d\xe7\x6f\x80\x50\x36\x1e\xe3\xdb\xa9\x1c\xa5\xc1\x1a\xa2\x5e\xb4\xd6\x79\x27\x5c\xc5\x78\x80\x63\xa5\xf1\x97\x41\x12\x0c\x4f\x2d\xe2\xad\xeb\xeb\x10\xa2\x98\xdd",
460: "\x80\xb2\x42\x63\xc7\xc1\xa3\xeb\xb7\x14\x93\xc1\xdd\x7b\xe8\xb4\x9b\x46\xd1\xf4\x1b\x4a\xee\xc1\x12\x1b\x01\x37\x83\xf8\xf3\x52\x6b\x56\xd0\x37\xe0\x5f\x25\x98\xbd\x0f\xd2\x21\x5d\x6a\x1e\x52\x95\xe6\x4f\x73\xf6\x3f\x0a\xec\x8b\x91\x5a\x98\x5d\x78\x65\x98",
461: "\xe3\x7b\x6a\x77\x5d\xc8\x7d\xba\xa4\xdf\xa9\xf9\x6e\x5e\x3f\xfd\xde\xbd\x71\xf8\x86\x72\x89\x86\x5d\xf5\xa3\x2d\x20\xcd\xc9\x44\xb6\x02\x2c\xac\x3c\x49\x82\xb1\x0d\x5e\xeb\x55\xc3\xe4\xde\x15\x13\x46\x76\xfb\x6d\xe0\x44\x60\x65\xc9\x74\x40\xfa\x8c\x6a\x58",
462: };
1.1 root 463:
464: char *hmac_sha1_test_keys[] =
465: {
1.1.1.7 root 466: // Deprecated/legacy
1.1 root 467: "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3",
468: "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
469: "Jefe",
470: "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
471: };
472:
473: char *hmac_sha1_test_data[] =
474: {
1.1.1.7 root 475: // Deprecated/legacy
1.1 root 476: "Sample #3",
477: "Hi There",
478: "what do ya want for nothing?",
479: "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
480: "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
481: "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
482: };
483:
484: char *hmac_sha1_test_vectors[] =
485: {
1.1.1.7 root 486: // Deprecated/legacy
1.1 root 487: "\xbc\xf4\x1e\xab\x8b\xb2\xd8\x02\xf3\xd0\x5c\xaf\x7c\xb0\x92\xec\xf8\xd1\xa3\xaa",
488: "\xb6\x17\x31\x86\x55\x05\x72\x64\xe2\x8b\xc0\xb6\xfb\x37\x8c\x8e\xf1\x46\xbe\x00",
489: "\xef\xfc\xdf\x6a\xe5\xeb\x2f\xa2\xd2\x74\x16\xd5\xf1\x84\xdf\x9c\x25\x9a\x7c\x79",
490: "\x12\x5d\x73\x42\xb9\xac\x11\xcd\x91\xa3\x9a\xf4\x8a\xa1\x7b\x4f\x63\xf1\x75\xd3"
491: };
492:
493: char *hmac_ripemd160_test_keys[] =
494: {
495: "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff\x01\x23\x45\x67",
496: "\x01\x23\x45\x67\x89\xab\xcd\xef\xfe\xdc\xba\x98\x76\x54\x32\x10\x00\x11\x22\x33",
497: };
498:
499: char *hmac_ripemd160_test_data[] =
500: {
501: "message digest",
502: "12345678901234567890123456789012345678901234567890123456789012345678901234567890",
503: };
504:
505: char *hmac_ripemd160_test_vectors[] =
506: {
507: "\xf8\x36\x62\xcc\x8d\x33\x9c\x22\x7e\x60\x0f\xcd\x63\x6c\x57\xd2\x57\x1b\x1c\x34",
508: "\x85\xf1\x64\x70\x3e\x61\xa6\x31\x31\xbe\x7e\x45\x95\x8e\x07\x94\x12\x39\x04\xf9",
509: };
510:
511: char *hmac_whirlpool_test_key =
512: {
513: "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF\x01\x23\x45\x67\x89\xAB\xCD\xEF\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF\x01\x23\x45\x67\x89\xAB\xCD\xEF\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF"
514: };
515:
516: char *hmac_whirlpool_test_data =
517: {
518: "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
519: };
520:
521: char *hmac_whirlpool_test_vectors =
522: {
523: "\x03\x91\xd2\x80\x00\xb6\x62\xbb\xb8\xe6\x23\x3e\xe8\x6c\xf2\xb2\x84\x74\x4c\x73"
524: "\x8b\x58\x00\xba\x28\x12\xed\x52\x6f\xe3\x15\x3a\xb1\xba\xe7\xe2\x36\xbe\x96\x54"
525: "\x49\x3f\x19\xfa\xce\xa6\x44\x1f\x60\xf5\xf0\x18\x93\x09\x11\xa5\xe5\xce\xd8\xf2"
526: "\x6a\xbf\xa4\x02"
527: };
528:
529: unsigned char ks_tmp[MAX_EXPANDED_KEY];
530:
1.1.1.7 root 531: void CipherInit2(int cipher, void* key, void* ks, int key_len)
1.1 root 532: {
533: switch (cipher)
534: {
535: case BLOWFISH:
1.1.1.6 root 536: /* Deprecated/legacy */
1.1.1.10 root 537: BlowfishSetKey (ks, key_len, key);
1.1 root 538: break;
539:
540: case AES:
541: CipherInit(cipher,key,ks);
542: break;
543:
544: case CAST:
1.1.1.6 root 545: /* Deprecated/legacy */
1.1 root 546: CipherInit(cipher,key,ks);
547: break;
548:
549: case SERPENT:
550: CipherInit(cipher,key,ks);
551: break;
552:
553: case TRIPLEDES:
1.1.1.6 root 554: /* Deprecated/legacy */
1.1 root 555: CipherInit(cipher,key,ks);
556: break;
557:
558: case TWOFISH:
559: CipherInit(cipher,key,ks);
560: break;
1.1.1.7 root 561:
562: default:
563: /* Unknown/wrong ID */
564: TC_THROW_FATAL_EXCEPTION;
1.1 root 565: }
566: }
567:
568:
1.1.1.7 root 569: /* Deprecated/legacy */
1.1.1.2 root 570: typedef struct {
571: unsigned __int8 key1[32];
572: unsigned __int8 key2[16];
573: unsigned __int8 index[16];
574: unsigned __int8 plaintext[16];
575: unsigned __int8 ciphertext[16];
576: } LRW_TEST;
1.1 root 577:
1.1.1.2 root 578: #define LRW_TEST_COUNT 2
1.1 root 579:
1.1.1.7 root 580: /* Deprecated/legacy */
1.1.1.2 root 581: LRW_TEST lrw_vectors[LRW_TEST_COUNT] = {
1.1 root 582: {
1.1.1.2 root 583: { 0xf8, 0xd4, 0x76, 0xff, 0xd6, 0x46, 0xee, 0x6c, 0x23, 0x84, 0xcb, 0x1c, 0x77, 0xd6, 0x19, 0x5d,
584: 0xfe, 0xf1, 0xa9, 0xf3, 0x7b, 0xbc, 0x8d, 0x21, 0xa7, 0x9c, 0x21, 0xf8, 0xcb, 0x90, 0x02, 0x89 },
585: { 0xa8, 0x45, 0x34, 0x8e, 0xc8, 0xc5, 0xb5, 0xf1, 0x26, 0xf5, 0x0e, 0x76, 0xfe, 0xfd, 0x1b, 0x1e },
586: { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
587: { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
588: { 0xbd, 0x06, 0xb8, 0xe1, 0xdb, 0x98, 0x89, 0x9e, 0xc4, 0x98, 0xe4, 0x91, 0xcf, 0x1c, 0x70, 0x2b }
589: },
590: {
591: { 0xfb, 0x76, 0x15, 0xb2, 0x3d, 0x80, 0x89, 0x1d, 0xd4, 0x70, 0x98, 0x0b, 0xc7, 0x95, 0x84, 0xc8,
592: 0xb2, 0xfb, 0x64, 0xce, 0x60, 0x97, 0x87, 0x8d, 0x17, 0xfc, 0xe4, 0x5a, 0x49, 0xe8, 0x30, 0xb7 },
593: { 0x6e, 0x78, 0x17, 0xe7, 0x2d, 0x5e, 0x12, 0xd4, 0x60, 0x64, 0x04, 0x7a, 0xf1, 0x2f, 0x9e, 0x0c },
594: { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 },
595: { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
596: { 0x5b, 0x90, 0x8e, 0xc1, 0xab, 0xdd, 0x67, 0x5f, 0x3d, 0x69, 0x8a, 0x95, 0x53, 0xc8, 0x9c, 0xe5 }
597: }
598: };
1.1 root 599:
600:
1.1.1.2 root 601: BOOL LRWAesTest (PCRYPTO_INFO ci)
602: {
1.1.1.7 root 603: /* Deprecated/legacy */
604:
1.1.1.2 root 605: unsigned __int8 p[16];
606: int i;
1.1 root 607:
1.1.1.2 root 608: for (i = 0; i < LRW_TEST_COUNT; i++)
609: {
610: ci->ea = EAGetByName ("AES");
611: if (ci->ea == 0)
1.1.1.7 root 612: return FALSE;
1.1.1.2 root 613:
614: ci->mode = LRW;
1.1 root 615:
1.1.1.7 root 616: if (EAInit (ci->ea, lrw_vectors[i].key1, ci->ks) != ERR_SUCCESS)
1.1 root 617: return FALSE;
618:
1.1.1.7 root 619: memcpy (&ci->k2, lrw_vectors[i].key2, sizeof (lrw_vectors[i].key2));
1.1.1.2 root 620: if (!EAInitMode (ci))
1.1 root 621: return FALSE;
622:
1.1.1.2 root 623: memcpy (p, lrw_vectors[i].plaintext, sizeof (p));
1.1 root 624:
1.1.1.2 root 625: EncryptBufferLRW128 (p, sizeof (p), BE64(((unsigned __int64 *)(lrw_vectors[i].index))[1]), ci);
1.1 root 626:
1.1.1.2 root 627: if (memcmp (lrw_vectors[i].ciphertext, p, sizeof (p)) != 0)
1.1 root 628: return FALSE;
1.1.1.2 root 629: }
630:
631: return TRUE;
632: }
633:
634:
635: BOOL TestSectorBufEncryption (PCRYPTO_INFO ci)
636: {
1.1.1.7 root 637: unsigned char buf [ENCRYPTION_DATA_UNIT_SIZE * 4];
1.1.1.2 root 638: unsigned int i;
639: char name[64];
640: unsigned __int32 crc;
1.1.1.7 root 641: UINT64_STRUCT unitNo;
642: TC_LARGEST_COMPILER_UINT nbrUnits;
643: unsigned __int64 writeOffset;
644: int testCase = 0;
645: int nTestsPerformed = 0;
646:
647: static unsigned char key1[] =
648: {
649: 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, 0x62, 0x49, 0x77, 0x57, 0x24, 0x70, 0x93, 0x69, 0x99, 0x59, 0x57, 0x49, 0x66, 0x96, 0x76, 0x27,
650: 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, 0x02, 0x88, 0x41, 0x97, 0x16, 0x93, 0x99, 0x37, 0x51, 0x05, 0x82, 0x09, 0x74, 0x94, 0x45, 0x92,
651: 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13
652: };
653:
654: if (!TestLegacySectorBufEncryption (ci))
655: return FALSE;
656:
657:
658: /* Encryption/decryption of data units (typically, volume data sectors) */
659:
660: nbrUnits = sizeof (buf) / ENCRYPTION_DATA_UNIT_SIZE;
661:
662: ci->mode = XTS; // Other modes of operation are tested in TestLegacySectorBufEncryption()
663:
664: /* The buffer can accommodate 4 data units and we'll test 4 cases by "scrolling". The data unit 0xFFFFFFFFFF
665: will "move" from the start of the buffer to its end. For a 512-byte data unit, the byte offset 562949953420800
666: corresponds to the data unit 0xFFFFFFFFFF. */
667: for (writeOffset = 562949953420800LL;
668: writeOffset > 562949953420800LL - nbrUnits * ENCRYPTION_DATA_UNIT_SIZE;
669: writeOffset -= ENCRYPTION_DATA_UNIT_SIZE)
670: {
671: unitNo.Value = writeOffset / ENCRYPTION_DATA_UNIT_SIZE;
672:
673: // Test all EAs that support this mode of operation
674: for (ci->ea = EAGetFirst (); ci->ea != 0; ci->ea = EAGetNext (ci->ea))
675: {
676: if (!EAIsModeSupported (ci->ea, ci->mode))
677: continue;
678:
679: EAGetName (name, ci->ea);
680:
681: if (EAInit (ci->ea, key1, ci->ks) != ERR_SUCCESS)
682: return FALSE;
683:
684: for (i = 0; i < sizeof (ci->k2); i++)
685: ci->k2[i] = (unsigned char) i;
686:
687: memcpy (&ci->k2, XTS_vectors[XTS_TEST_COUNT-1].key2, sizeof (XTS_vectors[XTS_TEST_COUNT-1].key2));
688:
689: if (!EAInitMode (ci))
690: return FALSE;
691:
692: // Each data unit will contain the same plaintext
693: for (i = 0; i < nbrUnits; i++)
694: {
695: memcpy ((unsigned char *) buf + i * ENCRYPTION_DATA_UNIT_SIZE,
696: XTS_vectors[XTS_TEST_COUNT-1].plaintext,
697: ENCRYPTION_DATA_UNIT_SIZE);
698: }
699:
700: EncryptDataUnits (buf, &unitNo, nbrUnits, ci);
701:
702: crc = GetCrc32 (buf, sizeof (buf));
703:
704: if (strcmp (name, "AES") == 0)
705: {
706: // Verify the ciphertext of the "moving" data unit using the IEEE test vector #14
707: if (memcmp (XTS_vectors[XTS_TEST_COUNT-1].ciphertext,
708: (unsigned char *) buf + testCase * ENCRYPTION_DATA_UNIT_SIZE,
709: ENCRYPTION_DATA_UNIT_SIZE) != 0)
710: {
711: return FALSE;
712: }
713:
714: // CRC of all data units in the buffer for each test case
715: switch (testCase)
716: {
717: case 0:
718: if (crc != 0x888f2990)
719: return FALSE;
720: nTestsPerformed++;
721: break;
722: case 1:
723: if (crc != 0xea28ea34)
724: return FALSE;
725: nTestsPerformed++;
726: break;
727: case 2:
728: if (crc != 0xe058f5a2)
729: return FALSE;
730: nTestsPerformed++;
731: break;
732: case 3:
733: if (crc != 0x10473dc9)
734: return FALSE;
735: nTestsPerformed++;
736: break;
737: }
738: }
739: else if (strcmp (name, "Serpent") == 0)
740: {
741: switch (testCase)
742: {
743: case 0:
744: if (crc != 0x7edfecb3)
745: return FALSE;
746: nTestsPerformed++;
747: break;
748: case 1:
749: if (crc != 0x357baaaa)
750: return FALSE;
751: nTestsPerformed++;
752: break;
753: case 2:
754: if (crc != 0xc7b9fca5)
755: return FALSE;
756: nTestsPerformed++;
757: break;
758: case 3:
759: if (crc != 0xb5263e0c)
760: return FALSE;
761: nTestsPerformed++;
762: break;
763: }
764: }
765: else if (strcmp (name, "Twofish") == 0)
766: {
767: switch (testCase)
768: {
769: case 0:
770: if (crc != 0x91525124)
771: return FALSE;
772: nTestsPerformed++;
773: break;
774: case 1:
775: if (crc != 0x2895cc47)
776: return FALSE;
777: nTestsPerformed++;
778: break;
779: case 2:
780: if (crc != 0x6bee346d)
781: return FALSE;
782: nTestsPerformed++;
783: break;
784: case 3:
785: if (crc != 0xb1c45759)
786: return FALSE;
787: nTestsPerformed++;
788: break;
789: }
790: }
791: else if (strcmp (name, "AES-Twofish") == 0)
792: {
793: switch (testCase)
794: {
795: case 0:
796: if (crc != 0x6cea7fa2)
797: return FALSE;
798: nTestsPerformed++;
799: break;
800: case 1:
801: if (crc != 0x69052c4c)
802: return FALSE;
803: nTestsPerformed++;
804: break;
805: case 2:
806: if (crc != 0x88db8de5)
807: return FALSE;
808: nTestsPerformed++;
809: break;
810: case 3:
811: if (crc != 0xf16fd8c5)
812: return FALSE;
813: nTestsPerformed++;
814: break;
815: }
816: }
817: else if (strcmp (name, "AES-Twofish-Serpent") == 0)
818: {
819: switch (testCase)
820: {
821: case 0:
822: if (crc != 0xa2d7d82a)
823: return FALSE;
824: nTestsPerformed++;
825: break;
826: case 1:
827: if (crc != 0xdbf76412)
828: return FALSE;
829: nTestsPerformed++;
830: break;
831: case 2:
832: if (crc != 0xdf0ea03e)
833: return FALSE;
834: nTestsPerformed++;
835: break;
836: case 3:
837: if (crc != 0xdadedff7)
838: return FALSE;
839: nTestsPerformed++;
840: break;
841: }
842: }
843: else if (strcmp (name, "Serpent-AES") == 0)
844: {
845: switch (testCase)
846: {
847: case 0:
848: if (crc != 0x6dd133b3)
849: return FALSE;
850: nTestsPerformed++;
851: break;
852: case 1:
853: if (crc != 0x0e5717d2)
854: return FALSE;
855: nTestsPerformed++;
856: break;
857: case 2:
858: if (crc != 0x39f83cd9)
859: return FALSE;
860: nTestsPerformed++;
861: break;
862: case 3:
863: if (crc != 0x8a79fa2c)
864: return FALSE;
865: nTestsPerformed++;
866: break;
867: }
868: }
869: else if (strcmp (name, "Serpent-Twofish-AES") == 0)
870: {
871: switch (testCase)
872: {
873: case 0:
874: if (crc != 0xe536daf8)
875: return FALSE;
876: nTestsPerformed++;
877: break;
878: case 1:
879: if (crc != 0x3ae89e7f)
880: return FALSE;
881: nTestsPerformed++;
882: break;
883: case 2:
884: if (crc != 0x2cc1301a)
885: return FALSE;
886: nTestsPerformed++;
887: break;
888: case 3:
889: if (crc != 0xcac7bdc7)
890: return FALSE;
891: nTestsPerformed++;
892: break;
893: }
894: }
895: else if (strcmp (name, "Twofish-Serpent") == 0)
896: {
897: switch (testCase)
898: {
899: case 0:
900: if (crc != 0x2686c859)
901: return FALSE;
902: nTestsPerformed++;
903: break;
904: case 1:
905: if (crc != 0x8a201780)
906: return FALSE;
907: nTestsPerformed++;
908: break;
909: case 2:
910: if (crc != 0x8dd13796)
911: return FALSE;
912: nTestsPerformed++;
913: break;
914: case 3:
915: if (crc != 0xe95196cb)
916: return FALSE;
917: nTestsPerformed++;
918: break;
919: }
920: }
921:
922: if (crc == 0x9f5edd58)
923: return FALSE;
924:
925: DecryptDataUnits (buf, &unitNo, nbrUnits, ci);
926:
927: if (GetCrc32 (buf, sizeof (buf)) != 0x9f5edd58)
928: return FALSE;
929:
930: nTestsPerformed++;
931: }
932: testCase++;
933: }
934:
935: /* Encryption/decryption of a buffer (typically, a volume header) */
936:
937: nbrUnits = sizeof (buf) / ENCRYPTION_DATA_UNIT_SIZE;
938:
939: // Test all EAs that support this mode of operation
940: for (ci->ea = EAGetFirst (); ci->ea != 0; ci->ea = EAGetNext (ci->ea))
941: {
942: if (!EAIsModeSupported (ci->ea, ci->mode))
943: continue;
944:
945: EAGetName (name, ci->ea);
946:
947: if (EAInit (ci->ea, key1, ci->ks) != ERR_SUCCESS)
948: return FALSE;
949:
950: memcpy (&ci->k2, XTS_vectors[XTS_TEST_COUNT-1].key2, sizeof (XTS_vectors[XTS_TEST_COUNT-1].key2));
951:
952: if (!EAInitMode (ci))
953: return FALSE;
954:
955: // Each data unit will contain the same plaintext
956: for (i = 0; i < nbrUnits; i++)
957: {
958: memcpy ((unsigned char *) buf + i * ENCRYPTION_DATA_UNIT_SIZE,
959: XTS_vectors[XTS_TEST_COUNT-1].plaintext,
960: ENCRYPTION_DATA_UNIT_SIZE);
961: }
962:
963: EncryptBuffer (buf, sizeof (buf), ci);
964:
965: crc = GetCrc32 (buf, sizeof (buf));
966:
967: if (strcmp (name, "AES") == 0)
968: {
969: if (crc != 0x33b91fab)
970: return FALSE;
971: nTestsPerformed++;
972: }
973: else if (strcmp (name, "Serpent") == 0)
974: {
975: if (crc != 0x3494d480)
976: return FALSE;
977: nTestsPerformed++;
978: }
979: else if (strcmp (name, "Twofish") == 0)
980: {
981: if (crc != 0xc4d65b46)
982: return FALSE;
983: nTestsPerformed++;
984: }
985: else if (strcmp (name, "AES-Twofish") == 0)
986: {
987: if (crc != 0x14ce7385)
988: return FALSE;
989: nTestsPerformed++;
990: }
991: else if (strcmp (name, "AES-Twofish-Serpent") == 0)
992: {
993: if (crc != 0x0ec81bf7)
994: return FALSE;
995: nTestsPerformed++;
996: }
997: else if (strcmp (name, "Serpent-AES") == 0)
998: {
999: if (crc != 0x42f919ad)
1000: return FALSE;
1001: nTestsPerformed++;
1002: }
1003: else if (strcmp (name, "Serpent-Twofish-AES") == 0)
1004: {
1005: if (crc != 0x208d5c58)
1006: return FALSE;
1007: nTestsPerformed++;
1008: }
1009: else if (strcmp (name, "Twofish-Serpent") == 0)
1010: {
1011: if (crc != 0xbe78cec1)
1012: return FALSE;
1013: nTestsPerformed++;
1014: }
1015:
1016: if (crc == 0x9f5edd58)
1017: return FALSE;
1018:
1019: DecryptBuffer (buf, sizeof (buf), ci);
1020:
1021: if (GetCrc32 (buf, sizeof (buf)) != 0x9f5edd58)
1022: return FALSE;
1023:
1024: nTestsPerformed++;
1025: }
1026:
1027: return (nTestsPerformed == 80);
1028: }
1029:
1030:
1031: BOOL TestLegacySectorBufEncryption (PCRYPTO_INFO ci)
1032: {
1033: unsigned char buf [ENCRYPTION_DATA_UNIT_SIZE * 2];
1034: unsigned int i;
1035: char name[64];
1036: unsigned __int32 crc;
1037: UINT64_STRUCT unitNo;
1038: TC_LARGEST_COMPILER_UINT nbrUnits;
1.1.1.2 root 1039: int blockSize;
1040: BOOL lrw64InitDone = FALSE;
1041: BOOL lrw128InitDone = FALSE;
1.1.1.7 root 1042: int nTestsPerformed = 0;
1043:
1044: unitNo.Value = 0x0234567890ABCDEFull;
1045: nbrUnits = sizeof (buf) / ENCRYPTION_DATA_UNIT_SIZE;
1.1 root 1046:
1.1.1.2 root 1047: for (i = 0; i < sizeof (buf); i++)
1048: buf[i] = (unsigned char) i;
1049:
1.1.1.7 root 1050: for (i = 0; i < sizeof (ci->k2); i++)
1051: ci->k2[i] = (unsigned char) i;
1.1.1.2 root 1052:
1053: // Test all EAs
1054: for (ci->ea = EAGetFirst (); ci->ea != 0; ci->ea = EAGetNext (ci->ea))
1055: {
1056: EAGetName (name, ci->ea);
1057: blockSize = CipherGetBlockSize (EAGetFirstCipher (ci->ea));
1058:
1059: if (EAInit (ci->ea, (unsigned char *)buf, ci->ks) == ERR_CIPHER_INIT_FAILURE)
1.1 root 1060: return FALSE;
1.1.1.2 root 1061:
1.1.1.11 root 1062: // Test all deprecated modes of operation
1.1.1.2 root 1063: for (ci->mode = EAGetFirstMode (ci->ea);
1064: ci->mode != 0;
1065: ci->mode = EAGetNextMode (ci->ea, ci->mode))
1066: {
1.1.1.11 root 1067: // Skip modes that are not deprecated
1.1.1.7 root 1068: if (ci->mode == XTS)
1.1.1.11 root 1069: continue;
1.1.1.7 root 1070:
1.1.1.2 root 1071: if (ci->mode == LRW
1072: && (blockSize == 8 && !lrw64InitDone || blockSize == 16 && !lrw128InitDone ))
1073: {
1074: if (!EAInitMode (ci))
1075: return FALSE;
1076:
1.1.1.7 root 1077: if (blockSize == 8)
1.1.1.2 root 1078: lrw64InitDone = TRUE;
1079: else if (blockSize == 16)
1080: lrw128InitDone = TRUE;
1081: }
1082:
1.1.1.7 root 1083: EncryptDataUnits (buf, &unitNo, nbrUnits, ci);
1084: crc = GetCrc32 (buf, sizeof (buf));
1.1.1.2 root 1085:
1086: switch (ci->mode)
1087: {
1.1.1.7 root 1088: case LRW: // Deprecated/legacy
1089: if (strcmp (name, "AES") == 0)
1090: {
1091: if (crc != 0x5237acf9)
1092: return FALSE;
1093: nTestsPerformed++;
1094: }
1095: else if (strcmp (name, "Blowfish") == 0) // Deprecated/legacy
1096: {
1097: if (crc != 0xf94d5300)
1098: return FALSE;
1099: nTestsPerformed++;
1100: }
1101: else if (strcmp (name, "CAST5") == 0) // Deprecated/legacy
1102: {
1103: if (crc != 0x33971e82)
1104: return FALSE;
1105: nTestsPerformed++;
1106: }
1107: else if (strcmp (name, "Serpent") == 0)
1108: {
1109: if (crc != 0x7fb86805)
1110: return FALSE;
1111: nTestsPerformed++;
1112: }
1113: else if (strcmp (name, "Triple DES") == 0) // Deprecated/legacy
1114: {
1115: if (crc != 0x2b20bb84)
1116: return FALSE;
1117: nTestsPerformed++;
1118: }
1119: else if (strcmp (name, "Twofish") == 0)
1120: {
1121: if (crc != 0xa9de0f0b)
1122: return FALSE;
1123: nTestsPerformed++;
1124: }
1125: else if (strcmp (name, "AES-Twofish") == 0)
1126: {
1127: if (crc != 0x4ed0fd80)
1128: return FALSE;
1129: nTestsPerformed++;
1130: }
1131: else if (strcmp (name, "AES-Twofish-Serpent") == 0)
1132: {
1133: if (crc != 0xea04b3cf)
1134: return FALSE;
1135: nTestsPerformed++;
1136: }
1137: else if (strcmp (name, "Serpent-AES") == 0)
1138: {
1139: if (crc != 0x0d33596a)
1140: return FALSE;
1141: nTestsPerformed++;
1142: }
1143: else if (strcmp (name, "Serpent-Twofish-AES") == 0)
1144: {
1145: if (crc != 0x2845d0e3)
1146: return FALSE;
1147: nTestsPerformed++;
1148: }
1149: else if (strcmp (name, "Twofish-Serpent") == 0)
1150: {
1151: if (crc != 0xca65c5cd)
1152: return FALSE;
1153: nTestsPerformed++;
1154: }
1.1.1.2 root 1155: break;
1156:
1.1.1.6 root 1157: case CBC: // Deprecated/legacy
1158: case INNER_CBC: // Deprecated/legacy
1159: case OUTER_CBC: // Deprecated/legacy
1.1.1.7 root 1160: if (strcmp (name, "AES") == 0)
1161: {
1162: if (crc != 0x2274f53d)
1163: return FALSE;
1164: nTestsPerformed++;
1165: }
1166: else if (strcmp (name, "Blowfish") == 0) // Deprecated/legacy
1167: {
1168: if (crc != 0x033899a1)
1169: return FALSE;
1170: nTestsPerformed++;
1171: }
1172: else if (strcmp (name, "CAST5") == 0) // Deprecated/legacy
1173: {
1174: if (crc != 0x331cecc7)
1175: return FALSE;
1176: nTestsPerformed++;
1177: }
1178: else if (strcmp (name, "Serpent") == 0)
1179: {
1180: if (crc != 0x42dff3d4)
1181: return FALSE;
1182: nTestsPerformed++;
1183: }
1184: else if (strcmp (name, "Triple DES") == 0) // Deprecated/legacy
1185: {
1186: if (crc != 0xfe497d0c)
1187: return FALSE;
1188: nTestsPerformed++;
1189: }
1190: else if (strcmp (name, "AES-Blowfish") == 0) // Deprecated/legacy
1191: {
1192: if (crc != 0xa7a80c84)
1193: return FALSE;
1194: nTestsPerformed++;
1195: }
1196: else if (strcmp (name, "AES-Blowfish-Serpent") == 0) // Deprecated/legacy
1197: {
1198: if (crc != 0xa0584562)
1199: return FALSE;
1200: nTestsPerformed++;
1201: }
1202: else if (strcmp (name, "AES-Twofish") == 0)
1203: {
1204: if (crc != 0x3c226444)
1205: return FALSE;
1206: nTestsPerformed++;
1207: }
1208: else if (strcmp (name, "AES-Twofish-Serpent") == 0)
1209: {
1210: if (crc != 0x5e5e77fd)
1211: return FALSE;
1212: nTestsPerformed++;
1213: }
1214: else if (strcmp (name, "Serpent-AES") == 0)
1215: {
1216: if (crc != 0x57c612d5)
1217: return FALSE;
1218: nTestsPerformed++;
1219: }
1220: else if (strcmp (name, "Serpent-Twofish-AES") == 0)
1221: {
1222: if (crc != 0x081e045a)
1223: return FALSE;
1224: nTestsPerformed++;
1225: }
1226: else if (strcmp (name, "Twofish-Serpent") == 0)
1227: {
1228: if (crc != 0xa7b659f3)
1229: return FALSE;
1230: nTestsPerformed++;
1231: }
1.1.1.2 root 1232: break;
1233: }
1234:
1235: if (crc == 0xb70b4c26)
1236: return FALSE;
1237:
1.1.1.7 root 1238: DecryptDataUnits (buf, &unitNo, nbrUnits, ci);
1.1.1.2 root 1239:
1.1.1.7 root 1240: if (GetCrc32 (buf, sizeof (buf)) != 0xb70b4c26)
1.1.1.2 root 1241: return FALSE;
1242:
1.1.1.7 root 1243: nTestsPerformed++;
1244:
1245: EncryptBuffer (buf, sizeof (buf), ci);
1246: crc = GetCrc32 (buf, sizeof (buf));
1.1.1.2 root 1247:
1248: switch (ci->mode)
1249: {
1.1.1.7 root 1250: case LRW: // Deprecated/legacy
1251: if (strcmp (name, "AES") == 0)
1252: {
1253: if (crc != 0x5ae1e3d8)
1254: return FALSE;
1255: nTestsPerformed++;
1256: }
1257: else if (strcmp (name, "Blowfish") == 0) // Deprecated/legacy
1258: {
1259: if (crc != 0x2738426f)
1260: return FALSE;
1261: nTestsPerformed++;
1262: }
1263: else if (strcmp (name, "AES-Twofish-Serpent") == 0)
1264: {
1265: if (crc != 0x14f2948a)
1266: return FALSE;
1267: nTestsPerformed++;
1268: }
1.1.1.2 root 1269: break;
1270:
1.1.1.6 root 1271: case CBC: // Deprecated/legacy
1272: case INNER_CBC: // Deprecated/legacy
1273: case OUTER_CBC: // Deprecated/legacy
1.1.1.7 root 1274: if (strcmp (name, "AES") == 0)
1275: {
1276: if (crc != 0x960f740e)
1277: return FALSE;
1278: nTestsPerformed++;
1279: }
1280: else if (strcmp (name, "Blowfish") == 0) // Deprecated/legacy
1281: {
1282: if (crc != 0x7e1cfabb)
1283: return FALSE;
1284: nTestsPerformed++;
1285: }
1286: else if (strcmp (name, "CAST5") == 0) // Deprecated/legacy
1287: {
1288: if (crc != 0xeaae21c8)
1289: return FALSE;
1290: nTestsPerformed++;
1291: }
1292: else if (strcmp (name, "Serpent") == 0)
1293: {
1294: if (crc != 0xa8139d62)
1295: return FALSE;
1296: nTestsPerformed++;
1297: }
1298: else if (strcmp (name, "Triple DES") == 0) // Deprecated/legacy
1299: {
1300: if (crc != 0xecf5d7d0)
1301: return FALSE;
1302: nTestsPerformed++;
1303: }
1304: else if (strcmp (name, "AES-Blowfish") == 0) // Deprecated/legacy
1305: {
1306: if (crc != 0xb70171b6)
1307: return FALSE;
1308: nTestsPerformed++;
1309: }
1310: else if (strcmp (name, "AES-Blowfish-Serpent") == 0) // Deprecated/legacy
1311: {
1312: if (crc != 0x1e749a87)
1313: return FALSE;
1314: nTestsPerformed++;
1315: }
1316: else if (strcmp (name, "AES-Twofish") == 0)
1317: {
1318: if (crc != 0xb4b8bb9b)
1319: return FALSE;
1320: nTestsPerformed++;
1321: }
1322: else if (strcmp (name, "AES-Twofish-Serpent") == 0)
1323: {
1324: if (crc != 0x76b6c1cb)
1325: return FALSE;
1326: nTestsPerformed++;
1327: }
1328: else if (strcmp (name, "Serpent-AES") == 0)
1329: {
1330: if (crc != 0x634f12ed)
1331: return FALSE;
1332: nTestsPerformed++;
1333: }
1334: else if (strcmp (name, "Serpent-Twofish-AES") == 0)
1335: {
1336: if (crc != 0xe54bc1b9)
1337: return FALSE;
1338: nTestsPerformed++;
1339: }
1340: else if (strcmp (name, "Twofish-Serpent") == 0)
1341: {
1342: if (crc != 0x21cdb382)
1343: return FALSE;
1344: nTestsPerformed++;
1345: }
1.1.1.2 root 1346: break;
1347: }
1348:
1349: if (crc == 0xb70b4c26)
1350: return FALSE;
1351:
1.1.1.7 root 1352: DecryptBuffer (buf, sizeof (buf), ci);
1.1.1.2 root 1353:
1.1.1.7 root 1354: if (GetCrc32 (buf, sizeof (buf)) != 0xb70b4c26)
1.1.1.2 root 1355: return FALSE;
1.1.1.7 root 1356:
1357: nTestsPerformed++;
1.1.1.2 root 1358: }
1.1 root 1359: }
1.1.1.7 root 1360: return (nTestsPerformed == 86);
1.1 root 1361: }
1362:
1363:
1364: BOOL AutoTestAlgorithms (void)
1365: {
1.1.1.2 root 1366: PCRYPTO_INFO ci;
1.1 root 1367: char key[32];
1368: unsigned char tmp[16];
1369: BOOL bFailed = FALSE;
1370: int i;
1371:
1.1.1.2 root 1372: ci = crypto_open ();
1373: if (!ci)
1374: return FALSE;
1375:
1376: memset (ci, 0, sizeof (*ci));
1377:
1.1.1.6 root 1378: /* Blowfish (deprecated/legacy) */
1.1 root 1379:
1380: for (i=0;i<BF_TEST_COUNT;i++)
1.1.1.10 root 1381: {
1.1 root 1382: memcpy(key, bf_ecb_vectors[i].key, 8);
1383: memcpy(tmp, bf_ecb_vectors[i].plaintext, 8);
1384: CipherInit2(BLOWFISH, key, ks_tmp, 8);
1.1.1.10 root 1385:
1386: ((uint32 *)tmp)[0] = BE32 (((uint32 *)tmp)[0]);
1387: ((uint32 *)tmp)[1] = BE32 (((uint32 *)tmp)[1]);
1388:
1389: BlowfishEncryptLE (tmp,tmp,(BF_KEY *)ks_tmp,1);
1390: BlowfishEncryptLE (tmp,tmp,(BF_KEY *)ks_tmp,0);
1391: BlowfishEncryptLE (tmp,tmp,(BF_KEY *)ks_tmp,1);
1392:
1393: ((uint32 *)tmp)[0] = BE32 (((uint32 *)tmp)[0]);
1394: ((uint32 *)tmp)[1] = BE32 (((uint32 *)tmp)[1]);
1395:
1.1 root 1396: if (memcmp(bf_ecb_vectors[i].ciphertext,tmp,8)!=0)
1397: break;
1398: }
1399:
1.1.1.10 root 1400: if (i != BF_TEST_COUNT)
1.1 root 1401: bFailed = TRUE;
1402:
1.1.1.6 root 1403: /* CAST5 (deprecated/legacy) */
1.1 root 1404:
1405: for (i=0;i<CAST_TEST_COUNT;i++)
1406: {
1407: int cipher = CAST;
1408: memcpy(key, cast_ecb_vectors[i].key, 16);
1409: memcpy(tmp, cast_ecb_vectors[i].plaintext, 8);
1410: CipherInit2(cipher, key, ks_tmp, 16);
1.1.1.10 root 1411:
1412: EncipherBlock(cipher, tmp, ks_tmp);
1413: DecipherBlock(cipher, tmp, ks_tmp);
1.1 root 1414: EncipherBlock(cipher, tmp, ks_tmp);
1.1.1.10 root 1415:
1.1 root 1416: if (memcmp(cast_ecb_vectors[i].ciphertext, tmp,8)!=0)
1417: break;
1418: }
1419:
1420: if (i!=CAST_TEST_COUNT)
1421: bFailed = TRUE;
1422:
1423:
1.1.1.6 root 1424: /* Triple DES (TECB, EDE) - deprecated/legacy */
1.1 root 1425:
1426: for (i = 0; i < TRIPLEDES_TEST_COUNT; i++)
1427: {
1428: int cipher = TRIPLEDES;
1429: memcpy(key, tripledes_vectors[i].key, sizeof(tripledes_vectors->key));
1430: memcpy(tmp, tripledes_vectors[i].plaintext, sizeof(tripledes_vectors->plaintext));
1.1.1.10 root 1431:
1.1 root 1432: CipherInit(cipher, key, ks_tmp);
1433:
1434: EncipherBlock(cipher, tmp, ks_tmp);
1435: if (memcmp(tripledes_vectors[i].ciphertext, tmp, sizeof(tripledes_vectors->ciphertext)) != 0)
1436: break;
1437:
1438: DecipherBlock(cipher, tmp, ks_tmp);
1439: if (memcmp(tripledes_vectors[i].plaintext, tmp, sizeof(tripledes_vectors->plaintext)) != 0)
1440: break;
1441: }
1442: if (i != TRIPLEDES_TEST_COUNT)
1443: bFailed = TRUE;
1444:
1445:
1446: /* AES */
1447:
1448: for (i = 0; i < AES_TEST_COUNT; i++)
1449: {
1450: int cipher = AES;
1451: memcpy(key, aes_ecb_vectors[i].key, 32);
1452: memcpy(tmp, aes_ecb_vectors[i].plaintext, 16);
1453: CipherInit(cipher, key, ks_tmp);
1454:
1455: EncipherBlock(cipher, tmp, ks_tmp);
1456: if (memcmp(aes_ecb_vectors[i].ciphertext, tmp, 16) != 0)
1457: break;
1458:
1459: DecipherBlock(cipher, tmp, ks_tmp);
1460: if (memcmp(aes_ecb_vectors[i].plaintext, tmp, 16) != 0)
1461: break;
1462: }
1463: if (i != AES_TEST_COUNT)
1464: bFailed = TRUE;
1465:
1466:
1467: /* Serpent */
1468:
1469: for (i = 0; i < SERPENT_TEST_COUNT; i++)
1470: {
1471: int cipher = SERPENT;
1472: memcpy(key, serpent_vectors[i].key, 32);
1473: memcpy(tmp, serpent_vectors[i].plaintext, 16);
1474: CipherInit(cipher, key, ks_tmp);
1475:
1476: EncipherBlock(cipher, tmp, ks_tmp);
1477: if (memcmp(serpent_vectors[i].ciphertext, tmp, 16) != 0)
1478: break;
1479:
1480: DecipherBlock(cipher, tmp, ks_tmp);
1481: if (memcmp(serpent_vectors[i].plaintext, tmp, 16) != 0)
1482: break;
1483: }
1484: if (i != SERPENT_TEST_COUNT)
1485: bFailed = TRUE;
1486:
1487:
1488: /* Twofish */
1489:
1490: for (i = 0; i < TWOFISH_TEST_COUNT; i++)
1491: {
1492: int cipher = TWOFISH;
1493: memcpy(key, twofish_vectors[i].key, 32);
1494: memcpy(tmp, twofish_vectors[i].plaintext, 16);
1495: CipherInit(cipher, key, ks_tmp);
1496:
1497: EncipherBlock(cipher, tmp, ks_tmp);
1498: if (memcmp(twofish_vectors[i].ciphertext, tmp, 16) != 0)
1499: break;
1500:
1501: DecipherBlock(cipher, tmp, ks_tmp);
1502: if (memcmp(twofish_vectors[i].plaintext, tmp, 16) != 0)
1503: break;
1504: }
1505: if (i != TWOFISH_TEST_COUNT)
1506: bFailed = TRUE;
1507:
1508:
1509: /* PKCS #5 and HMACs */
1510: if (!test_pkcs5 ())
1511: bFailed = TRUE;
1512:
1513: /* CRC-32 */
1514: if (!crc32_selftests ())
1515: bFailed = TRUE;
1516:
1.1.1.2 root 1517: /* GF multiplicator */
1518: #if 0
1519: if (!GfMulSelfTest ())
1520: bFailed = TRUE;
1521: #endif
1522:
1.1.1.7 root 1523: /* XTS-AES */
1524: if (!XTSAesTest (ci))
1525: bFailed = TRUE;
1526:
1527: /* LRW-AES (deprecated/legacy) */
1.1.1.2 root 1528: if (!LRWAesTest (ci))
1529: bFailed = TRUE;
1530:
1.1.1.7 root 1531: /* Sector and buffer related algorithms */
1.1.1.2 root 1532: if (!TestSectorBufEncryption (ci))
1.1 root 1533: bFailed = TRUE;
1534:
1.1.1.2 root 1535: crypto_close (ci);
1.1 root 1536: return !bFailed;
1537: }
1538:
1.1.1.7 root 1539: BOOL test_hmac_sha512 ()
1540: {
1541: unsigned int i;
1542: int nTestsPerformed = 0;
1543:
1544: for (i = 0; i < sizeof (hmac_sha512_test_data) / sizeof(char *); i++)
1545: {
1546: char digest[SHA512_DIGESTSIZE];
1547: hmac_sha512 (hmac_sha512_test_keys[i], strlen (hmac_sha512_test_keys[i]), hmac_sha512_test_data[i], strlen (hmac_sha512_test_data[i]), digest, SHA512_DIGESTSIZE);
1548: if (memcmp (digest, hmac_sha512_test_vectors[i], SHA512_DIGESTSIZE) != 0)
1549: return FALSE;
1550: else
1551: nTestsPerformed++;
1552: }
1553:
1554: return (nTestsPerformed == 6);
1555: }
1556:
1.1 root 1557: BOOL test_hmac_sha1 ()
1558: {
1.1.1.7 root 1559: // Deprecated/legacy
1560:
1561: int nTestsPerformed = 0;
1.1 root 1562: int i;
1563:
1564: for (i = 0; i < 3; i++)
1565: {
1566: char digest[SHA1_DIGESTSIZE];
1567: hmac_sha1 (hmac_sha1_test_keys[i], strlen (hmac_sha1_test_keys[i]), hmac_sha1_test_data[i], strlen (hmac_sha1_test_data[i]), digest, SHA1_DIGESTSIZE);
1568: if (memcmp (digest, hmac_sha1_test_vectors[i], SHA1_DIGESTSIZE) != 0)
1569: return FALSE;
1.1.1.7 root 1570: else
1571: nTestsPerformed++;
1.1 root 1572: }
1573:
1.1.1.7 root 1574: return (nTestsPerformed == 3);
1.1 root 1575: }
1576:
1577: BOOL test_hmac_ripemd160 ()
1578: {
1.1.1.7 root 1579: int nTestsPerformed = 0;
1.1 root 1580: unsigned int i;
1.1.1.7 root 1581:
1.1 root 1582: for (i = 0; i < sizeof (hmac_ripemd160_test_data) / sizeof(char *); i++)
1583: {
1584: char digest[RIPEMD160_DIGESTSIZE];
1585: hmac_ripemd160 (hmac_ripemd160_test_keys[i], RIPEMD160_DIGESTSIZE, hmac_ripemd160_test_data[i], strlen (hmac_ripemd160_test_data[i]), digest);
1586: if (memcmp (digest, hmac_ripemd160_test_vectors[i], RIPEMD160_DIGESTSIZE) != 0)
1587: return FALSE;
1.1.1.7 root 1588: else
1589: nTestsPerformed++;
1.1 root 1590: }
1591:
1.1.1.7 root 1592: return (nTestsPerformed == 2);
1.1 root 1593: }
1594:
1595: BOOL test_hmac_whirlpool ()
1596: {
1597: unsigned char digest[WHIRLPOOL_DIGESTSIZE];
1598:
1599: hmac_whirlpool (hmac_whirlpool_test_key, 64, hmac_whirlpool_test_data, strlen (hmac_whirlpool_test_data), digest, WHIRLPOOL_DIGESTSIZE);
1600: if (memcmp (digest, hmac_whirlpool_test_vectors, WHIRLPOOL_DIGESTSIZE) != 0)
1601: return FALSE;
1602:
1603: return TRUE;
1604: }
1605:
1606: BOOL test_pkcs5 ()
1607: {
1.1.1.7 root 1608: char dk[144];
1.1 root 1609:
1.1.1.7 root 1610: /* HMAC-SHA-512 tests */
1611: if (!test_hmac_sha512())
1612: return FALSE;
1613:
1614: /* HMAC-SHA-1 tests (deprecated/legacy) */
1.1 root 1615: if (test_hmac_sha1() == FALSE)
1616: return FALSE;
1617:
1618: /* HMAC-RIPEMD-160 tests */
1619: if (test_hmac_ripemd160() == FALSE)
1620: return FALSE;
1621:
1622: /* HMAC-Whirlpool tests */
1623: if (test_hmac_whirlpool() == FALSE)
1624: return FALSE;
1625:
1.1.1.7 root 1626: /* PKCS-5 test 1 with HMAC-SHA-512 used as the PRF */
1627: derive_key_sha512 ("password", 8, "\x12\x34\x56\x78", 4, 5, dk, 4);
1628: if (memcmp (dk, "\x13\x64\xae\xf8", 4) != 0)
1629: return FALSE;
1630:
1631: /* PKCS-5 test 2 with HMAC-SHA-512 used as the PRF (derives a key longer than the underlying
1632: hash output size and block size) */
1633: derive_key_sha512 ("password", 8, "\x12\x34\x56\x78", 4, 5, dk, 144);
1634: if (memcmp (dk, "\x13\x64\xae\xf8\x0d\xf5\x57\x6c\x30\xd5\x71\x4c\xa7\x75\x3f\xfd\x00\xe5\x25\x8b\x39\xc7\x44\x7f\xce\x23\x3d\x08\x75\xe0\x2f\x48\xd6\x30\xd7\x00\xb6\x24\xdb\xe0\x5a\xd7\x47\xef\x52\xca\xa6\x34\x83\x47\xe5\xcb\xe9\x87\xf1\x20\x59\x6a\xe6\xa9\xcf\x51\x78\xc6\xb6\x23\xa6\x74\x0d\xe8\x91\xbe\x1a\xd0\x28\xcc\xce\x16\x98\x9a\xbe\xfb\xdc\x78\xc9\xe1\x7d\x72\x67\xce\xe1\x61\x56\x5f\x96\x68\xe6\xe1\xdd\xf4\xbf\x1b\x80\xe0\x19\x1c\xf4\xc4\xd3\xdd\xd5\xd5\x57\x2d\x83\xc7\xa3\x37\x87\xf4\x4e\xe0\xf6\xd8\x6d\x65\xdc\xa0\x52\xa3\x13\xbe\x81\xfc\x30\xbe\x7d\x69\x58\x34\xb6\xdd\x41\xc6", 144) != 0)
1635: return FALSE;
1636:
1637: /* PKCS-5 test 1 with HMAC-SHA-1 (deprecated/legacy) used as the PRF (derives a key longer than the underlying hash) */
1638: derive_key_sha1 ("password", 8, "\x12\x34\x56\x78", 4, 5, dk, 48);
1639: if (memcmp (dk, "\x5c\x75\xce\xf0\x1a\x96\x0d\xf7\x4c\xb6\xb4\x9b\x9e\x38\xe6\xb5\x3b\x11\x80\xe3\x2f\xf7\xe0\xdd\xaa\xca\x8f\x81\x27\xf6\x9f\x4f\x1d\xc8\x2f\x48\x2d\xdb\x1a\x0a\xca\x90\xcb\x80\xb9\x2e\x90\x9e", 48) != 0)
1640: return FALSE;
1641:
1642: /* PKCS-5 test 2 with HMAC-SHA-1 (deprecated/legacy) used as the PRF */
1.1 root 1643: derive_key_sha1 ("password", 8, "\x12\x34\x56\x78", 4, 5, dk, 4);
1644: if (memcmp (dk, "\x5c\x75\xce\xf0", 4) != 0)
1645: return FALSE;
1646:
1.1.1.7 root 1647: #if 0 // This test is disabled because it uses 1200 iterations (to prevent startup slowdown)
1648: /* PKCS-5 test 3 with HMAC-SHA-1 (deprecated/legacy) used as the PRF */
1649: derive_key_sha1 ("password", 8, "ATHENA.MIT.EDUraeburn", 21, 1200, dk, 16);
1650: if (memcmp (dk, "\x5c\x08\xeb\x61\xfd\xf7\x1e\x4e\x4e\xc3\xcf\x6b\xa1\xf5\x51\x2b", 16) != 0)
1651: return FALSE;
1652: #endif
1653:
1654: /* PKCS-5 test 1 with HMAC-RIPEMD-160 used as the PRF */
1.1 root 1655: derive_key_ripemd160 ("password", 8, "\x12\x34\x56\x78", 4, 5, dk, 4);
1656: if (memcmp (dk, "\x7a\x3d\x7c\x03", 4) != 0)
1657: return FALSE;
1658:
1.1.1.7 root 1659: /* PKCS-5 test 2 with HMAC-RIPEMD-160 used as the PRF (derives a key longer than the underlying hash) */
1660: derive_key_ripemd160 ("password", 8, "\x12\x34\x56\x78", 4, 5, dk, 48);
1661: if (memcmp (dk, "\x7a\x3d\x7c\x03\xe7\x26\x6b\xf8\x3d\x78\xfb\x29\xd2\x64\x1f\x56\xea\xf0\xe5\xf5\xcc\xc4\x3a\x31\xa8\x84\x70\xbf\xbd\x6f\x8e\x78\x24\x5a\xc0\x0a\xf6\xfa\xf0\xf6\xe9\x00\x47\x5f\x73\xce\xe1\x43", 48) != 0)
1662: return FALSE;
1663:
1664: /* PKCS-5 test 1 with HMAC-Whirlpool used as the PRF */
1.1 root 1665: derive_key_whirlpool ("password", 8, "\x12\x34\x56\x78", 4, 5, dk, 4);
1666: if (memcmp (dk, "\x50\x7c\x36\x6f", 4) != 0)
1667: return FALSE;
1668:
1.1.1.7 root 1669: /* PKCS-5 test 2 with HMAC-Whirlpool used as the PRF (derives a key longer than the underlying hash) */
1670: derive_key_whirlpool ("password", 8, "\x12\x34\x56\x78", 4, 5, dk, 96);
1671: if (memcmp (dk, "\x50\x7c\x36\x6f\xee\x10\x2e\x9a\xe2\x8a\xd5\x82\x72\x7d\x27\x0f\xe8\x4d\x7f\x68\x7a\xcf\xb5\xe7\x43\x67\xaa\x98\x93\x52\x2b\x09\x6e\x42\xdf\x2c\x59\x4a\x91\x6d\x7e\x10\xae\xb2\x1a\x89\x8f\xb9\x8f\xe6\x31\xa9\xd8\x9f\x98\x26\xf4\xda\xcd\x7d\x65\x65\xde\x10\x95\x91\xb4\x84\x26\xae\x43\xa1\x00\x5b\x1e\xb8\x38\x97\xa4\x1e\x4b\xd2\x65\x64\xbc\xfa\x1f\x35\x85\xdb\x4f\x97\x65\x6f\xbd\x24", 96) != 0)
1672: return FALSE;
1673:
1.1 root 1674: return TRUE;
1675: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.