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