xref: /netbsd-src/crypto/external/bsd/openssl/dist/test/chacha_internal_test.c (revision 4778aede4608a995eaeedca856a7a71a2fa5c675)
113d40330Schristos /*
2*4778aedeSchristos  * Copyright 2017-2023 The OpenSSL Project Authors. All Rights Reserved.
313d40330Schristos  *
4b0d17251Schristos  * Licensed under the Apache License 2.0 (the "License").  You may not use
513d40330Schristos  * this file except in compliance with the License.  You can obtain a copy
613d40330Schristos  * in the file LICENSE in the source distribution or at
713d40330Schristos  * https://www.openssl.org/source/license.html
813d40330Schristos  */
913d40330Schristos 
1013d40330Schristos /*
1113d40330Schristos  * Internal tests for the chacha module. EVP tests would exercise
1213d40330Schristos  * complete 32-byte blocks. This test goes per byte...
1313d40330Schristos  */
1413d40330Schristos 
1513d40330Schristos #include <string.h>
1613d40330Schristos #include <openssl/opensslconf.h>
1713d40330Schristos #include "testutil.h"
187d004720Schristos #include "crypto/chacha.h"
1913d40330Schristos 
2013d40330Schristos static const unsigned int key[] = {
2113d40330Schristos     0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c,
2213d40330Schristos     0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c
2313d40330Schristos };
2413d40330Schristos 
2513d40330Schristos static const unsigned int ivp[] = {
2613d40330Schristos     0x00000000, 0x00000000, 0x03020100, 0x07060504
2713d40330Schristos };
2813d40330Schristos 
2913d40330Schristos static const unsigned char ref[] = {
3013d40330Schristos     0xf7, 0x98, 0xa1, 0x89, 0xf1, 0x95, 0xe6, 0x69,
3113d40330Schristos     0x82, 0x10, 0x5f, 0xfb, 0x64, 0x0b, 0xb7, 0x75,
3213d40330Schristos     0x7f, 0x57, 0x9d, 0xa3, 0x16, 0x02, 0xfc, 0x93,
3313d40330Schristos     0xec, 0x01, 0xac, 0x56, 0xf8, 0x5a, 0xc3, 0xc1,
3413d40330Schristos     0x34, 0xa4, 0x54, 0x7b, 0x73, 0x3b, 0x46, 0x41,
3513d40330Schristos     0x30, 0x42, 0xc9, 0x44, 0x00, 0x49, 0x17, 0x69,
3613d40330Schristos     0x05, 0xd3, 0xbe, 0x59, 0xea, 0x1c, 0x53, 0xf1,
3713d40330Schristos     0x59, 0x16, 0x15, 0x5c, 0x2b, 0xe8, 0x24, 0x1a,
3813d40330Schristos     0x38, 0x00, 0x8b, 0x9a, 0x26, 0xbc, 0x35, 0x94,
3913d40330Schristos     0x1e, 0x24, 0x44, 0x17, 0x7c, 0x8a, 0xde, 0x66,
4013d40330Schristos     0x89, 0xde, 0x95, 0x26, 0x49, 0x86, 0xd9, 0x58,
4113d40330Schristos     0x89, 0xfb, 0x60, 0xe8, 0x46, 0x29, 0xc9, 0xbd,
4213d40330Schristos     0x9a, 0x5a, 0xcb, 0x1c, 0xc1, 0x18, 0xbe, 0x56,
4313d40330Schristos     0x3e, 0xb9, 0xb3, 0xa4, 0xa4, 0x72, 0xf8, 0x2e,
4413d40330Schristos     0x09, 0xa7, 0xe7, 0x78, 0x49, 0x2b, 0x56, 0x2e,
4513d40330Schristos     0xf7, 0x13, 0x0e, 0x88, 0xdf, 0xe0, 0x31, 0xc7,
4613d40330Schristos     0x9d, 0xb9, 0xd4, 0xf7, 0xc7, 0xa8, 0x99, 0x15,
4713d40330Schristos     0x1b, 0x9a, 0x47, 0x50, 0x32, 0xb6, 0x3f, 0xc3,
4813d40330Schristos     0x85, 0x24, 0x5f, 0xe0, 0x54, 0xe3, 0xdd, 0x5a,
4913d40330Schristos     0x97, 0xa5, 0xf5, 0x76, 0xfe, 0x06, 0x40, 0x25,
5013d40330Schristos     0xd3, 0xce, 0x04, 0x2c, 0x56, 0x6a, 0xb2, 0xc5,
5113d40330Schristos     0x07, 0xb1, 0x38, 0xdb, 0x85, 0x3e, 0x3d, 0x69,
5213d40330Schristos     0x59, 0x66, 0x09, 0x96, 0x54, 0x6c, 0xc9, 0xc4,
5313d40330Schristos     0xa6, 0xea, 0xfd, 0xc7, 0x77, 0xc0, 0x40, 0xd7,
5413d40330Schristos     0x0e, 0xaf, 0x46, 0xf7, 0x6d, 0xad, 0x39, 0x79,
5513d40330Schristos     0xe5, 0xc5, 0x36, 0x0c, 0x33, 0x17, 0x16, 0x6a,
5613d40330Schristos     0x1c, 0x89, 0x4c, 0x94, 0xa3, 0x71, 0x87, 0x6a,
5713d40330Schristos     0x94, 0xdf, 0x76, 0x28, 0xfe, 0x4e, 0xaa, 0xf2,
5813d40330Schristos     0xcc, 0xb2, 0x7d, 0x5a, 0xaa, 0xe0, 0xad, 0x7a,
5913d40330Schristos     0xd0, 0xf9, 0xd4, 0xb6, 0xad, 0x3b, 0x54, 0x09,
6013d40330Schristos     0x87, 0x46, 0xd4, 0x52, 0x4d, 0x38, 0x40, 0x7a,
6113d40330Schristos     0x6d, 0xeb, 0x3a, 0xb7, 0x8f, 0xab, 0x78, 0xc9,
6213d40330Schristos     0x42, 0x13, 0x66, 0x8b, 0xbb, 0xd3, 0x94, 0xc5,
6313d40330Schristos     0xde, 0x93, 0xb8, 0x53, 0x17, 0x8a, 0xdd, 0xd6,
6413d40330Schristos     0xb9, 0x7f, 0x9f, 0xa1, 0xec, 0x3e, 0x56, 0xc0,
6513d40330Schristos     0x0c, 0x9d, 0xdf, 0xf0, 0xa4, 0x4a, 0x20, 0x42,
6613d40330Schristos     0x41, 0x17, 0x5a, 0x4c, 0xab, 0x0f, 0x96, 0x1b,
6713d40330Schristos     0xa5, 0x3e, 0xde, 0x9b, 0xdf, 0x96, 0x0b, 0x94,
6813d40330Schristos     0xf9, 0x82, 0x9b, 0x1f, 0x34, 0x14, 0x72, 0x64,
6913d40330Schristos     0x29, 0xb3, 0x62, 0xc5, 0xb5, 0x38, 0xe3, 0x91,
7013d40330Schristos     0x52, 0x0f, 0x48, 0x9b, 0x7e, 0xd8, 0xd2, 0x0a,
7113d40330Schristos     0xe3, 0xfd, 0x49, 0xe9, 0xe2, 0x59, 0xe4, 0x43,
7213d40330Schristos     0x97, 0x51, 0x4d, 0x61, 0x8c, 0x96, 0xc4, 0x84,
7313d40330Schristos     0x6b, 0xe3, 0xc6, 0x80, 0xbd, 0xc1, 0x1c, 0x71,
7413d40330Schristos     0xdc, 0xbb, 0xe2, 0x9c, 0xcf, 0x80, 0xd6, 0x2a,
7513d40330Schristos     0x09, 0x38, 0xfa, 0x54, 0x93, 0x91, 0xe6, 0xea,
7613d40330Schristos     0x57, 0xec, 0xbe, 0x26, 0x06, 0x79, 0x0e, 0xc1,
7713d40330Schristos     0x5d, 0x22, 0x24, 0xae, 0x30, 0x7c, 0x14, 0x42,
7813d40330Schristos     0x26, 0xb7, 0xc4, 0xe8, 0xc2, 0xf9, 0x7d, 0x2a,
7913d40330Schristos     0x1d, 0x67, 0x85, 0x2d, 0x29, 0xbe, 0xba, 0x11,
8013d40330Schristos     0x0e, 0xdd, 0x44, 0x51, 0x97, 0x01, 0x20, 0x62,
8113d40330Schristos     0xa3, 0x93, 0xa9, 0xc9, 0x28, 0x03, 0xad, 0x3b,
8213d40330Schristos     0x4f, 0x31, 0xd7, 0xbc, 0x60, 0x33, 0xcc, 0xf7,
8313d40330Schristos     0x93, 0x2c, 0xfe, 0xd3, 0xf0, 0x19, 0x04, 0x4d,
8413d40330Schristos     0x25, 0x90, 0x59, 0x16, 0x77, 0x72, 0x86, 0xf8,
8513d40330Schristos     0x2f, 0x9a, 0x4c, 0xc1, 0xff, 0xe4, 0x30, 0xff,
8613d40330Schristos     0xd1, 0xdc, 0xfc, 0x27, 0xde, 0xed, 0x32, 0x7b,
8713d40330Schristos     0x9f, 0x96, 0x30, 0xd2, 0xfa, 0x96, 0x9f, 0xb6,
8813d40330Schristos     0xf0, 0x60, 0x3c, 0xd1, 0x9d, 0xd9, 0xa9, 0x51,
8913d40330Schristos     0x9e, 0x67, 0x3b, 0xcf, 0xcd, 0x90, 0x14, 0x12,
9013d40330Schristos     0x52, 0x91, 0xa4, 0x46, 0x69, 0xef, 0x72, 0x85,
9113d40330Schristos     0xe7, 0x4e, 0xd3, 0x72, 0x9b, 0x67, 0x7f, 0x80,
9213d40330Schristos     0x1c, 0x3c, 0xdf, 0x05, 0x8c, 0x50, 0x96, 0x31,
9313d40330Schristos     0x68, 0xb4, 0x96, 0x04, 0x37, 0x16, 0xc7, 0x30,
9413d40330Schristos     0x7c, 0xd9, 0xe0, 0xcd, 0xd1, 0x37, 0xfc, 0xcb,
9513d40330Schristos     0x0f, 0x05, 0xb4, 0x7c, 0xdb, 0xb9, 0x5c, 0x5f,
9613d40330Schristos     0x54, 0x83, 0x16, 0x22, 0xc3, 0x65, 0x2a, 0x32,
9713d40330Schristos     0xb2, 0x53, 0x1f, 0xe3, 0x26, 0xbc, 0xd6, 0xe2,
9813d40330Schristos     0xbb, 0xf5, 0x6a, 0x19, 0x4f, 0xa1, 0x96, 0xfb,
9913d40330Schristos     0xd1, 0xa5, 0x49, 0x52, 0x11, 0x0f, 0x51, 0xc7,
10013d40330Schristos     0x34, 0x33, 0x86, 0x5f, 0x76, 0x64, 0xb8, 0x36,
10113d40330Schristos     0x68, 0x5e, 0x36, 0x64, 0xb3, 0xd8, 0x44, 0x4a,
10213d40330Schristos     0xf8, 0x9a, 0x24, 0x28, 0x05, 0xe1, 0x8c, 0x97,
10313d40330Schristos     0x5f, 0x11, 0x46, 0x32, 0x49, 0x96, 0xfd, 0xe1,
10413d40330Schristos     0x70, 0x07, 0xcf, 0x3e, 0x6e, 0x8f, 0x4e, 0x76,
10513d40330Schristos     0x40, 0x22, 0x53, 0x3e, 0xdb, 0xfe, 0x07, 0xd4,
10613d40330Schristos     0x73, 0x3e, 0x48, 0xbb, 0x37, 0x2d, 0x75, 0xb0,
10713d40330Schristos     0xef, 0x48, 0xec, 0x98, 0x3e, 0xb7, 0x85, 0x32,
10813d40330Schristos     0x16, 0x1c, 0xc5, 0x29, 0xe5, 0xab, 0xb8, 0x98,
10913d40330Schristos     0x37, 0xdf, 0xcc, 0xa6, 0x26, 0x1d, 0xbb, 0x37,
11013d40330Schristos     0xc7, 0xc5, 0xe6, 0xa8, 0x74, 0x78, 0xbf, 0x41,
11113d40330Schristos     0xee, 0x85, 0xa5, 0x18, 0xc0, 0xf4, 0xef, 0xa9,
11213d40330Schristos     0xbd, 0xe8, 0x28, 0xc5, 0xa7, 0x1b, 0x8e, 0x46,
11313d40330Schristos     0x59, 0x7b, 0x63, 0x4a, 0xfd, 0x20, 0x4d, 0x3c,
11413d40330Schristos     0x50, 0x13, 0x34, 0x23, 0x9c, 0x34, 0x14, 0x28,
11513d40330Schristos     0x5e, 0xd7, 0x2d, 0x3a, 0x91, 0x69, 0xea, 0xbb,
11613d40330Schristos     0xd4, 0xdc, 0x25, 0xd5, 0x2b, 0xb7, 0x51, 0x6d,
11713d40330Schristos     0x3b, 0xa7, 0x12, 0xd7, 0x5a, 0xd8, 0xc0, 0xae,
11813d40330Schristos     0x5d, 0x49, 0x3c, 0x19, 0xe3, 0x8a, 0x77, 0x93,
11913d40330Schristos     0x9e, 0x7a, 0x05, 0x8d, 0x71, 0x3e, 0x9c, 0xcc,
12013d40330Schristos     0xca, 0x58, 0x04, 0x5f, 0x43, 0x6b, 0x43, 0x4b,
12113d40330Schristos     0x1c, 0x80, 0xd3, 0x65, 0x47, 0x24, 0x06, 0xe3,
12213d40330Schristos     0x92, 0x95, 0x19, 0x87, 0xdb, 0x69, 0x05, 0xc8,
12313d40330Schristos     0x0d, 0x43, 0x1d, 0xa1, 0x84, 0x51, 0x13, 0x5b,
12413d40330Schristos     0xe7, 0xe8, 0x2b, 0xca, 0xb3, 0x58, 0xcb, 0x39,
12513d40330Schristos     0x71, 0xe6, 0x14, 0x05, 0xb2, 0xff, 0x17, 0x98,
12613d40330Schristos     0x0d, 0x6e, 0x7e, 0x67, 0xe8, 0x61, 0xe2, 0x82,
12713d40330Schristos     0x01, 0xc1, 0xee, 0x30, 0xb4, 0x41, 0x04, 0x0f,
12813d40330Schristos     0xd0, 0x68, 0x78, 0xd6, 0x50, 0x42, 0xc9, 0x55,
12913d40330Schristos     0x82, 0xa4, 0x31, 0x82, 0x07, 0xbf, 0xc7, 0x00,
13013d40330Schristos     0xbe, 0x0c, 0xe3, 0x28, 0x89, 0xae, 0xc2, 0xff,
13113d40330Schristos     0xe5, 0x08, 0x5e, 0x89, 0x67, 0x91, 0x0d, 0x87,
13213d40330Schristos     0x9f, 0xa0, 0xe8, 0xc0, 0xff, 0x85, 0xfd, 0xc5,
13313d40330Schristos     0x10, 0xb9, 0xff, 0x2f, 0xbf, 0x87, 0xcf, 0xcb,
13413d40330Schristos     0x29, 0x57, 0x7d, 0x68, 0x09, 0x9e, 0x04, 0xff,
13513d40330Schristos     0xa0, 0x5f, 0x75, 0x2a, 0x73, 0xd3, 0x77, 0xc7,
13613d40330Schristos     0x0d, 0x3a, 0x8b, 0xc2, 0xda, 0x80, 0xe6, 0xe7,
13713d40330Schristos     0x80, 0xec, 0x05, 0x71, 0x82, 0xc3, 0x3a, 0xd1,
13813d40330Schristos     0xde, 0x38, 0x72, 0x52, 0x25, 0x8a, 0x1e, 0x18,
13913d40330Schristos     0xe6, 0xfa, 0xd9, 0x10, 0x32, 0x7c, 0xe7, 0xf4,
14013d40330Schristos     0x2f, 0xd1, 0xe1, 0xe0, 0x51, 0x5f, 0x95, 0x86,
14113d40330Schristos     0xe2, 0xf2, 0xef, 0xcb, 0x9f, 0x47, 0x2b, 0x1d,
14213d40330Schristos     0xbd, 0xba, 0xc3, 0x54, 0xa4, 0x16, 0x21, 0x51,
14313d40330Schristos     0xe9, 0xd9, 0x2c, 0x79, 0xfb, 0x08, 0xbb, 0x4d,
14413d40330Schristos     0xdc, 0x56, 0xf1, 0x94, 0x48, 0xc0, 0x17, 0x5a,
14513d40330Schristos     0x46, 0xe2, 0xe6, 0xc4, 0x91, 0xfe, 0xc7, 0x14,
14613d40330Schristos     0x19, 0xaa, 0x43, 0xa3, 0x49, 0xbe, 0xa7, 0x68,
14713d40330Schristos     0xa9, 0x2c, 0x75, 0xde, 0x68, 0xfd, 0x95, 0x91,
14813d40330Schristos     0xe6, 0x80, 0x67, 0xf3, 0x19, 0x70, 0x94, 0xd3,
14913d40330Schristos     0xfb, 0x87, 0xed, 0x81, 0x78, 0x5e, 0xa0, 0x75,
15013d40330Schristos     0xe4, 0xb6, 0x5e, 0x3e, 0x4c, 0x78, 0xf8, 0x1d,
15113d40330Schristos     0xa9, 0xb7, 0x51, 0xc5, 0xef, 0xe0, 0x24, 0x15,
15213d40330Schristos     0x23, 0x01, 0xc4, 0x8e, 0x63, 0x24, 0x5b, 0x55,
15313d40330Schristos     0x6c, 0x4c, 0x67, 0xaf, 0xf8, 0x57, 0xe5, 0xea,
15413d40330Schristos     0x15, 0xa9, 0x08, 0xd8, 0x3a, 0x1d, 0x97, 0x04,
15513d40330Schristos     0xf8, 0xe5, 0x5e, 0x73, 0x52, 0xb2, 0x0b, 0x69,
15613d40330Schristos     0x4b, 0xf9, 0x97, 0x02, 0x98, 0xe6, 0xb5, 0xaa,
15713d40330Schristos     0xd3, 0x3e, 0xa2, 0x15, 0x5d, 0x10, 0x5d, 0x4e
15813d40330Schristos };
15913d40330Schristos 
test_cha_cha_internal(int n)16013d40330Schristos static int test_cha_cha_internal(int n)
16113d40330Schristos {
16213d40330Schristos     unsigned char buf[sizeof(ref)];
16313d40330Schristos     unsigned int i = n + 1, j;
16413d40330Schristos 
16513d40330Schristos     memset(buf, 0, i);
16613d40330Schristos     memcpy(buf + i, ref + i, sizeof(ref) - i);
16713d40330Schristos 
16813d40330Schristos     ChaCha20_ctr32(buf, buf, i, key, ivp);
16913d40330Schristos 
17013d40330Schristos     /*
17113d40330Schristos      * Idea behind checking for whole sizeof(ref) is that if
17213d40330Schristos      * ChaCha20_ctr32 oversteps i-th byte, then we'd know
17313d40330Schristos      */
17413d40330Schristos     for (j = 0; j < sizeof(ref); j++)
17513d40330Schristos         if (!TEST_uchar_eq(buf[j], ref[j])) {
17613d40330Schristos             TEST_info("%d failed at %u (%02x)\n", i, j, buf[j]);
17713d40330Schristos             return 0;
17813d40330Schristos         }
17913d40330Schristos     return 1;
18013d40330Schristos }
18113d40330Schristos 
setup_tests(void)18213d40330Schristos int setup_tests(void)
18313d40330Schristos {
184*4778aedeSchristos #ifdef OPENSSL_CPUID_OBJ
18513d40330Schristos     OPENSSL_cpuid_setup();
18613d40330Schristos #endif
18713d40330Schristos 
18813d40330Schristos     ADD_ALL_TESTS(test_cha_cha_internal, sizeof(ref));
18913d40330Schristos     return 1;
19013d40330Schristos }
191