2 * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the OpenSSL license (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
11 * Internal tests for the chacha module. EVP tests would exercise
12 * complete 32-byte blocks. This test goes per byte...
18 #include <openssl/opensslconf.h>
19 #include "internal/chacha.h"
21 const static unsigned int key[] = {
22 0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c,
23 0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c
26 const static unsigned int ivp[] = {
27 0x00000000, 0x00000000, 0x03020100, 0x07060504
30 const static unsigned char ref[] = {
31 0xf7, 0x98, 0xa1, 0x89, 0xf1, 0x95, 0xe6, 0x69,
32 0x82, 0x10, 0x5f, 0xfb, 0x64, 0x0b, 0xb7, 0x75,
33 0x7f, 0x57, 0x9d, 0xa3, 0x16, 0x02, 0xfc, 0x93,
34 0xec, 0x01, 0xac, 0x56, 0xf8, 0x5a, 0xc3, 0xc1,
35 0x34, 0xa4, 0x54, 0x7b, 0x73, 0x3b, 0x46, 0x41,
36 0x30, 0x42, 0xc9, 0x44, 0x00, 0x49, 0x17, 0x69,
37 0x05, 0xd3, 0xbe, 0x59, 0xea, 0x1c, 0x53, 0xf1,
38 0x59, 0x16, 0x15, 0x5c, 0x2b, 0xe8, 0x24, 0x1a,
39 0x38, 0x00, 0x8b, 0x9a, 0x26, 0xbc, 0x35, 0x94,
40 0x1e, 0x24, 0x44, 0x17, 0x7c, 0x8a, 0xde, 0x66,
41 0x89, 0xde, 0x95, 0x26, 0x49, 0x86, 0xd9, 0x58,
42 0x89, 0xfb, 0x60, 0xe8, 0x46, 0x29, 0xc9, 0xbd,
43 0x9a, 0x5a, 0xcb, 0x1c, 0xc1, 0x18, 0xbe, 0x56,
44 0x3e, 0xb9, 0xb3, 0xa4, 0xa4, 0x72, 0xf8, 0x2e,
45 0x09, 0xa7, 0xe7, 0x78, 0x49, 0x2b, 0x56, 0x2e,
46 0xf7, 0x13, 0x0e, 0x88, 0xdf, 0xe0, 0x31, 0xc7,
47 0x9d, 0xb9, 0xd4, 0xf7, 0xc7, 0xa8, 0x99, 0x15,
48 0x1b, 0x9a, 0x47, 0x50, 0x32, 0xb6, 0x3f, 0xc3,
49 0x85, 0x24, 0x5f, 0xe0, 0x54, 0xe3, 0xdd, 0x5a,
50 0x97, 0xa5, 0xf5, 0x76, 0xfe, 0x06, 0x40, 0x25,
51 0xd3, 0xce, 0x04, 0x2c, 0x56, 0x6a, 0xb2, 0xc5,
52 0x07, 0xb1, 0x38, 0xdb, 0x85, 0x3e, 0x3d, 0x69,
53 0x59, 0x66, 0x09, 0x96, 0x54, 0x6c, 0xc9, 0xc4,
54 0xa6, 0xea, 0xfd, 0xc7, 0x77, 0xc0, 0x40, 0xd7,
55 0x0e, 0xaf, 0x46, 0xf7, 0x6d, 0xad, 0x39, 0x79,
56 0xe5, 0xc5, 0x36, 0x0c, 0x33, 0x17, 0x16, 0x6a,
57 0x1c, 0x89, 0x4c, 0x94, 0xa3, 0x71, 0x87, 0x6a,
58 0x94, 0xdf, 0x76, 0x28, 0xfe, 0x4e, 0xaa, 0xf2,
59 0xcc, 0xb2, 0x7d, 0x5a, 0xaa, 0xe0, 0xad, 0x7a,
60 0xd0, 0xf9, 0xd4, 0xb6, 0xad, 0x3b, 0x54, 0x09,
61 0x87, 0x46, 0xd4, 0x52, 0x4d, 0x38, 0x40, 0x7a,
62 0x6d, 0xeb, 0x3a, 0xb7, 0x8f, 0xab, 0x78, 0xc9,
63 0x42, 0x13, 0x66, 0x8b, 0xbb, 0xd3, 0x94, 0xc5,
64 0xde, 0x93, 0xb8, 0x53, 0x17, 0x8a, 0xdd, 0xd6,
65 0xb9, 0x7f, 0x9f, 0xa1, 0xec, 0x3e, 0x56, 0xc0,
66 0x0c, 0x9d, 0xdf, 0xf0, 0xa4, 0x4a, 0x20, 0x42,
67 0x41, 0x17, 0x5a, 0x4c, 0xab, 0x0f, 0x96, 0x1b,
68 0xa5, 0x3e, 0xde, 0x9b, 0xdf, 0x96, 0x0b, 0x94,
69 0xf9, 0x82, 0x9b, 0x1f, 0x34, 0x14, 0x72, 0x64,
70 0x29, 0xb3, 0x62, 0xc5, 0xb5, 0x38, 0xe3, 0x91,
71 0x52, 0x0f, 0x48, 0x9b, 0x7e, 0xd8, 0xd2, 0x0a,
72 0xe3, 0xfd, 0x49, 0xe9, 0xe2, 0x59, 0xe4, 0x43,
73 0x97, 0x51, 0x4d, 0x61, 0x8c, 0x96, 0xc4, 0x84,
74 0x6b, 0xe3, 0xc6, 0x80, 0xbd, 0xc1, 0x1c, 0x71,
75 0xdc, 0xbb, 0xe2, 0x9c, 0xcf, 0x80, 0xd6, 0x2a,
76 0x09, 0x38, 0xfa, 0x54, 0x93, 0x91, 0xe6, 0xea,
77 0x57, 0xec, 0xbe, 0x26, 0x06, 0x79, 0x0e, 0xc1,
78 0x5d, 0x22, 0x24, 0xae, 0x30, 0x7c, 0x14, 0x42,
79 0x26, 0xb7, 0xc4, 0xe8, 0xc2, 0xf9, 0x7d, 0x2a,
80 0x1d, 0x67, 0x85, 0x2d, 0x29, 0xbe, 0xba, 0x11,
81 0x0e, 0xdd, 0x44, 0x51, 0x97, 0x01, 0x20, 0x62,
82 0xa3, 0x93, 0xa9, 0xc9, 0x28, 0x03, 0xad, 0x3b,
83 0x4f, 0x31, 0xd7, 0xbc, 0x60, 0x33, 0xcc, 0xf7,
84 0x93, 0x2c, 0xfe, 0xd3, 0xf0, 0x19, 0x04, 0x4d,
85 0x25, 0x90, 0x59, 0x16, 0x77, 0x72, 0x86, 0xf8,
86 0x2f, 0x9a, 0x4c, 0xc1, 0xff, 0xe4, 0x30, 0xff,
87 0xd1, 0xdc, 0xfc, 0x27, 0xde, 0xed, 0x32, 0x7b,
88 0x9f, 0x96, 0x30, 0xd2, 0xfa, 0x96, 0x9f, 0xb6,
89 0xf0, 0x60, 0x3c, 0xd1, 0x9d, 0xd9, 0xa9, 0x51,
90 0x9e, 0x67, 0x3b, 0xcf, 0xcd, 0x90, 0x14, 0x12,
91 0x52, 0x91, 0xa4, 0x46, 0x69, 0xef, 0x72, 0x85,
92 0xe7, 0x4e, 0xd3, 0x72, 0x9b, 0x67, 0x7f, 0x80,
93 0x1c, 0x3c, 0xdf, 0x05, 0x8c, 0x50, 0x96, 0x31,
94 0x68, 0xb4, 0x96, 0x04, 0x37, 0x16, 0xc7, 0x30,
95 0x7c, 0xd9, 0xe0, 0xcd, 0xd1, 0x37, 0xfc, 0xcb,
96 0x0f, 0x05, 0xb4, 0x7c, 0xdb, 0xb9, 0x5c, 0x5f,
97 0x54, 0x83, 0x16, 0x22, 0xc3, 0x65, 0x2a, 0x32,
98 0xb2, 0x53, 0x1f, 0xe3, 0x26, 0xbc, 0xd6, 0xe2,
99 0xbb, 0xf5, 0x6a, 0x19, 0x4f, 0xa1, 0x96, 0xfb,
100 0xd1, 0xa5, 0x49, 0x52, 0x11, 0x0f, 0x51, 0xc7,
101 0x34, 0x33, 0x86, 0x5f, 0x76, 0x64, 0xb8, 0x36,
102 0x68, 0x5e, 0x36, 0x64, 0xb3, 0xd8, 0x44, 0x4a,
103 0xf8, 0x9a, 0x24, 0x28, 0x05, 0xe1, 0x8c, 0x97,
104 0x5f, 0x11, 0x46, 0x32, 0x49, 0x96, 0xfd, 0xe1,
105 0x70, 0x07, 0xcf, 0x3e, 0x6e, 0x8f, 0x4e, 0x76,
106 0x40, 0x22, 0x53, 0x3e, 0xdb, 0xfe, 0x07, 0xd4,
107 0x73, 0x3e, 0x48, 0xbb, 0x37, 0x2d, 0x75, 0xb0,
108 0xef, 0x48, 0xec, 0x98, 0x3e, 0xb7, 0x85, 0x32,
109 0x16, 0x1c, 0xc5, 0x29, 0xe5, 0xab, 0xb8, 0x98,
110 0x37, 0xdf, 0xcc, 0xa6, 0x26, 0x1d, 0xbb, 0x37,
111 0xc7, 0xc5, 0xe6, 0xa8, 0x74, 0x78, 0xbf, 0x41,
112 0xee, 0x85, 0xa5, 0x18, 0xc0, 0xf4, 0xef, 0xa9,
113 0xbd, 0xe8, 0x28, 0xc5, 0xa7, 0x1b, 0x8e, 0x46,
114 0x59, 0x7b, 0x63, 0x4a, 0xfd, 0x20, 0x4d, 0x3c,
115 0x50, 0x13, 0x34, 0x23, 0x9c, 0x34, 0x14, 0x28,
116 0x5e, 0xd7, 0x2d, 0x3a, 0x91, 0x69, 0xea, 0xbb,
117 0xd4, 0xdc, 0x25, 0xd5, 0x2b, 0xb7, 0x51, 0x6d,
118 0x3b, 0xa7, 0x12, 0xd7, 0x5a, 0xd8, 0xc0, 0xae,
119 0x5d, 0x49, 0x3c, 0x19, 0xe3, 0x8a, 0x77, 0x93,
120 0x9e, 0x7a, 0x05, 0x8d, 0x71, 0x3e, 0x9c, 0xcc,
121 0xca, 0x58, 0x04, 0x5f, 0x43, 0x6b, 0x43, 0x4b,
122 0x1c, 0x80, 0xd3, 0x65, 0x47, 0x24, 0x06, 0xe3,
123 0x92, 0x95, 0x19, 0x87, 0xdb, 0x69, 0x05, 0xc8,
124 0x0d, 0x43, 0x1d, 0xa1, 0x84, 0x51, 0x13, 0x5b,
125 0xe7, 0xe8, 0x2b, 0xca, 0xb3, 0x58, 0xcb, 0x39,
126 0x71, 0xe6, 0x14, 0x05, 0xb2, 0xff, 0x17, 0x98,
127 0x0d, 0x6e, 0x7e, 0x67, 0xe8, 0x61, 0xe2, 0x82,
128 0x01, 0xc1, 0xee, 0x30, 0xb4, 0x41, 0x04, 0x0f,
129 0xd0, 0x68, 0x78, 0xd6, 0x50, 0x42, 0xc9, 0x55,
130 0x82, 0xa4, 0x31, 0x82, 0x07, 0xbf, 0xc7, 0x00,
131 0xbe, 0x0c, 0xe3, 0x28, 0x89, 0xae, 0xc2, 0xff,
132 0xe5, 0x08, 0x5e, 0x89, 0x67, 0x91, 0x0d, 0x87,
133 0x9f, 0xa0, 0xe8, 0xc0, 0xff, 0x85, 0xfd, 0xc5,
134 0x10, 0xb9, 0xff, 0x2f, 0xbf, 0x87, 0xcf, 0xcb,
135 0x29, 0x57, 0x7d, 0x68, 0x09, 0x9e, 0x04, 0xff,
136 0xa0, 0x5f, 0x75, 0x2a, 0x73, 0xd3, 0x77, 0xc7,
137 0x0d, 0x3a, 0x8b, 0xc2, 0xda, 0x80, 0xe6, 0xe7,
138 0x80, 0xec, 0x05, 0x71, 0x82, 0xc3, 0x3a, 0xd1,
139 0xde, 0x38, 0x72, 0x52, 0x25, 0x8a, 0x1e, 0x18,
140 0xe6, 0xfa, 0xd9, 0x10, 0x32, 0x7c, 0xe7, 0xf4,
141 0x2f, 0xd1, 0xe1, 0xe0, 0x51, 0x5f, 0x95, 0x86,
142 0xe2, 0xf2, 0xef, 0xcb, 0x9f, 0x47, 0x2b, 0x1d,
143 0xbd, 0xba, 0xc3, 0x54, 0xa4, 0x16, 0x21, 0x51,
144 0xe9, 0xd9, 0x2c, 0x79, 0xfb, 0x08, 0xbb, 0x4d,
145 0xdc, 0x56, 0xf1, 0x94, 0x48, 0xc0, 0x17, 0x5a,
146 0x46, 0xe2, 0xe6, 0xc4, 0x91, 0xfe, 0xc7, 0x14,
147 0x19, 0xaa, 0x43, 0xa3, 0x49, 0xbe, 0xa7, 0x68,
148 0xa9, 0x2c, 0x75, 0xde, 0x68, 0xfd, 0x95, 0x91,
149 0xe6, 0x80, 0x67, 0xf3, 0x19, 0x70, 0x94, 0xd3,
150 0xfb, 0x87, 0xed, 0x81, 0x78, 0x5e, 0xa0, 0x75,
151 0xe4, 0xb6, 0x5e, 0x3e, 0x4c, 0x78, 0xf8, 0x1d,
152 0xa9, 0xb7, 0x51, 0xc5, 0xef, 0xe0, 0x24, 0x15,
153 0x23, 0x01, 0xc4, 0x8e, 0x63, 0x24, 0x5b, 0x55,
154 0x6c, 0x4c, 0x67, 0xaf, 0xf8, 0x57, 0xe5, 0xea,
155 0x15, 0xa9, 0x08, 0xd8, 0x3a, 0x1d, 0x97, 0x04,
156 0xf8, 0xe5, 0x5e, 0x73, 0x52, 0xb2, 0x0b, 0x69,
157 0x4b, 0xf9, 0x97, 0x02, 0x98, 0xe6, 0xb5, 0xaa,
158 0xd3, 0x3e, 0xa2, 0x15, 0x5d, 0x10, 0x5d, 0x4e
163 unsigned char buf[sizeof(ref)];
168 OPENSSL_cpuid_setup();
171 for (i = 1; i <= sizeof(ref); i++) {
173 memcpy(buf + i, ref + i, sizeof(ref) - i);
175 ChaCha20_ctr32(buf, buf, i, key, ivp);
178 * Idea behind checking for whole sizeof(ref) is that if
179 * ChaCha20_ctr32 oversteps i-th byte, then we'd know
181 for (j = 0; j < sizeof(ref); j++) {
182 if (buf[j] != ref[j]) {
183 fprintf(stderr, "%u failed at %u (%02x)\n", i, j, buf[j]);