]> git.ipfire.org Git - thirdparty/openssl.git/blame - test/evp_extra_test.c
EVP: Don't shadow EVP_PKEY_CTX_new* error records
[thirdparty/openssl.git] / test / evp_extra_test.c
CommitLineData
440e5d80 1/*
33388b44 2 * Copyright 2015-2020 The OpenSSL Project Authors. All Rights Reserved.
71ea6b48 3 *
909f1a2e 4 * Licensed under the Apache License 2.0 (the "License"). You may not use
440e5d80
RS
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
71ea6b48
MC
8 */
9
41bbba53
P
10/* We need to use some deprecated APIs */
11#define OPENSSL_SUPPRESS_DEPRECATED
12
71ea6b48
MC
13#include <stdio.h>
14#include <stdlib.h>
bb5f281a 15#include <string.h>
71ea6b48 16#include <openssl/bio.h>
7bb82f92 17#include <openssl/conf.h>
71ea6b48
MC
18#include <openssl/crypto.h>
19#include <openssl/err.h>
20#include <openssl/evp.h>
21#include <openssl/rsa.h>
22#include <openssl/x509.h>
4803717f 23#include <openssl/pem.h>
10d5b415 24#include <openssl/kdf.h>
847d0f81 25#include <openssl/provider.h>
9c45222d 26#include <openssl/core_names.h>
f54a4101 27#include <openssl/params.h>
9c45222d 28#include <openssl/dsa.h>
e295de1d 29#include <openssl/dh.h>
e5bc0ce2 30#include <openssl/aes.h>
adcd8e37 31#include "testutil.h"
176db6dc 32#include "internal/nelem.h"
00bc1ad9 33#include "internal/sizes.h"
25f2138b 34#include "crypto/evp.h"
71ea6b48 35
a10847c4
RL
36#ifndef OPENSSL_NO_SM2
37/*
38 * TODO(3.0) remove when provider SM2 keymgmt is implemented and
39 * EVP_PKEY_set_alias_type() works with provider-native keys.
40 */
41# define TMP_SM2_HACK
42#endif
43
86dc26ba
MC
44static OPENSSL_CTX *testctx = NULL;
45
71ea6b48
MC
46/*
47 * kExampleRSAKeyDER is an RSA private key in ASN.1, DER format. Of course, you
48 * should never use this key anywhere but in an example.
49 */
50static const unsigned char kExampleRSAKeyDER[] = {
51 0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xf8,
52 0xb8, 0x6c, 0x83, 0xb4, 0xbc, 0xd9, 0xa8, 0x57, 0xc0, 0xa5, 0xb4, 0x59,
53 0x76, 0x8c, 0x54, 0x1d, 0x79, 0xeb, 0x22, 0x52, 0x04, 0x7e, 0xd3, 0x37,
54 0xeb, 0x41, 0xfd, 0x83, 0xf9, 0xf0, 0xa6, 0x85, 0x15, 0x34, 0x75, 0x71,
55 0x5a, 0x84, 0xa8, 0x3c, 0xd2, 0xef, 0x5a, 0x4e, 0xd3, 0xde, 0x97, 0x8a,
56 0xdd, 0xff, 0xbb, 0xcf, 0x0a, 0xaa, 0x86, 0x92, 0xbe, 0xb8, 0x50, 0xe4,
57 0xcd, 0x6f, 0x80, 0x33, 0x30, 0x76, 0x13, 0x8f, 0xca, 0x7b, 0xdc, 0xec,
58 0x5a, 0xca, 0x63, 0xc7, 0x03, 0x25, 0xef, 0xa8, 0x8a, 0x83, 0x58, 0x76,
59 0x20, 0xfa, 0x16, 0x77, 0xd7, 0x79, 0x92, 0x63, 0x01, 0x48, 0x1a, 0xd8,
60 0x7b, 0x67, 0xf1, 0x52, 0x55, 0x49, 0x4e, 0xd6, 0x6e, 0x4a, 0x5c, 0xd7,
61 0x7a, 0x37, 0x36, 0x0c, 0xde, 0xdd, 0x8f, 0x44, 0xe8, 0xc2, 0xa7, 0x2c,
62 0x2b, 0xb5, 0xaf, 0x64, 0x4b, 0x61, 0x07, 0x02, 0x03, 0x01, 0x00, 0x01,
63 0x02, 0x81, 0x80, 0x74, 0x88, 0x64, 0x3f, 0x69, 0x45, 0x3a, 0x6d, 0xc7,
64 0x7f, 0xb9, 0xa3, 0xc0, 0x6e, 0xec, 0xdc, 0xd4, 0x5a, 0xb5, 0x32, 0x85,
65 0x5f, 0x19, 0xd4, 0xf8, 0xd4, 0x3f, 0x3c, 0xfa, 0xc2, 0xf6, 0x5f, 0xee,
66 0xe6, 0xba, 0x87, 0x74, 0x2e, 0xc7, 0x0c, 0xd4, 0x42, 0xb8, 0x66, 0x85,
67 0x9c, 0x7b, 0x24, 0x61, 0xaa, 0x16, 0x11, 0xf6, 0xb5, 0xb6, 0xa4, 0x0a,
68 0xc9, 0x55, 0x2e, 0x81, 0xa5, 0x47, 0x61, 0xcb, 0x25, 0x8f, 0xc2, 0x15,
69 0x7b, 0x0e, 0x7c, 0x36, 0x9f, 0x3a, 0xda, 0x58, 0x86, 0x1c, 0x5b, 0x83,
70 0x79, 0xe6, 0x2b, 0xcc, 0xe6, 0xfa, 0x2c, 0x61, 0xf2, 0x78, 0x80, 0x1b,
71 0xe2, 0xf3, 0x9d, 0x39, 0x2b, 0x65, 0x57, 0x91, 0x3d, 0x71, 0x99, 0x73,
72 0xa5, 0xc2, 0x79, 0x20, 0x8c, 0x07, 0x4f, 0xe5, 0xb4, 0x60, 0x1f, 0x99,
73 0xa2, 0xb1, 0x4f, 0x0c, 0xef, 0xbc, 0x59, 0x53, 0x00, 0x7d, 0xb1, 0x02,
74 0x41, 0x00, 0xfc, 0x7e, 0x23, 0x65, 0x70, 0xf8, 0xce, 0xd3, 0x40, 0x41,
75 0x80, 0x6a, 0x1d, 0x01, 0xd6, 0x01, 0xff, 0xb6, 0x1b, 0x3d, 0x3d, 0x59,
76 0x09, 0x33, 0x79, 0xc0, 0x4f, 0xde, 0x96, 0x27, 0x4b, 0x18, 0xc6, 0xd9,
77 0x78, 0xf1, 0xf4, 0x35, 0x46, 0xe9, 0x7c, 0x42, 0x7a, 0x5d, 0x9f, 0xef,
78 0x54, 0xb8, 0xf7, 0x9f, 0xc4, 0x33, 0x6c, 0xf3, 0x8c, 0x32, 0x46, 0x87,
79 0x67, 0x30, 0x7b, 0xa7, 0xac, 0xe3, 0x02, 0x41, 0x00, 0xfc, 0x2c, 0xdf,
80 0x0c, 0x0d, 0x88, 0xf5, 0xb1, 0x92, 0xa8, 0x93, 0x47, 0x63, 0x55, 0xf5,
81 0xca, 0x58, 0x43, 0xba, 0x1c, 0xe5, 0x9e, 0xb6, 0x95, 0x05, 0xcd, 0xb5,
82 0x82, 0xdf, 0xeb, 0x04, 0x53, 0x9d, 0xbd, 0xc2, 0x38, 0x16, 0xb3, 0x62,
83 0xdd, 0xa1, 0x46, 0xdb, 0x6d, 0x97, 0x93, 0x9f, 0x8a, 0xc3, 0x9b, 0x64,
84 0x7e, 0x42, 0xe3, 0x32, 0x57, 0x19, 0x1b, 0xd5, 0x6e, 0x85, 0xfa, 0xb8,
85 0x8d, 0x02, 0x41, 0x00, 0xbc, 0x3d, 0xde, 0x6d, 0xd6, 0x97, 0xe8, 0xba,
86 0x9e, 0x81, 0x37, 0x17, 0xe5, 0xa0, 0x64, 0xc9, 0x00, 0xb7, 0xe7, 0xfe,
87 0xf4, 0x29, 0xd9, 0x2e, 0x43, 0x6b, 0x19, 0x20, 0xbd, 0x99, 0x75, 0xe7,
88 0x76, 0xf8, 0xd3, 0xae, 0xaf, 0x7e, 0xb8, 0xeb, 0x81, 0xf4, 0x9d, 0xfe,
89 0x07, 0x2b, 0x0b, 0x63, 0x0b, 0x5a, 0x55, 0x90, 0x71, 0x7d, 0xf1, 0xdb,
90 0xd9, 0xb1, 0x41, 0x41, 0x68, 0x2f, 0x4e, 0x39, 0x02, 0x40, 0x5a, 0x34,
91 0x66, 0xd8, 0xf5, 0xe2, 0x7f, 0x18, 0xb5, 0x00, 0x6e, 0x26, 0x84, 0x27,
92 0x14, 0x93, 0xfb, 0xfc, 0xc6, 0x0f, 0x5e, 0x27, 0xe6, 0xe1, 0xe9, 0xc0,
93 0x8a, 0xe4, 0x34, 0xda, 0xe9, 0xa2, 0x4b, 0x73, 0xbc, 0x8c, 0xb9, 0xba,
94 0x13, 0x6c, 0x7a, 0x2b, 0x51, 0x84, 0xa3, 0x4a, 0xe0, 0x30, 0x10, 0x06,
95 0x7e, 0xed, 0x17, 0x5a, 0x14, 0x00, 0xc9, 0xef, 0x85, 0xea, 0x52, 0x2c,
96 0xbc, 0x65, 0x02, 0x40, 0x51, 0xe3, 0xf2, 0x83, 0x19, 0x9b, 0xc4, 0x1e,
97 0x2f, 0x50, 0x3d, 0xdf, 0x5a, 0xa2, 0x18, 0xca, 0x5f, 0x2e, 0x49, 0xaf,
98 0x6f, 0xcc, 0xfa, 0x65, 0x77, 0x94, 0xb5, 0xa1, 0x0a, 0xa9, 0xd1, 0x8a,
99 0x39, 0x37, 0xf4, 0x0b, 0xa0, 0xd7, 0x82, 0x27, 0x5e, 0xae, 0x17, 0x17,
100 0xa1, 0x1e, 0x54, 0x34, 0xbf, 0x6e, 0xc4, 0x8e, 0x99, 0x5d, 0x08, 0xf1,
101 0x2d, 0x86, 0x9d, 0xa5, 0x20, 0x1b, 0xe5, 0xdf,
102};
103
59d0e6c8
MC
104/*
105* kExampleDSAKeyDER is a DSA private key in ASN.1, DER format. Of course, you
106 * should never use this key anywhere but in an example.
107 */
f650ab47 108#ifndef OPENSSL_NO_DSA
59d0e6c8
MC
109static const unsigned char kExampleDSAKeyDER[] = {
110 0x30, 0x82, 0x01, 0xba, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0x9a,
111 0x05, 0x6d, 0x33, 0xcd, 0x5d, 0x78, 0xa1, 0xbb, 0xcb, 0x7d, 0x5b, 0x8d,
112 0xb4, 0xcc, 0xbf, 0x03, 0x99, 0x64, 0xde, 0x38, 0x78, 0x06, 0x15, 0x2f,
113 0x86, 0x26, 0x77, 0xf3, 0xb1, 0x85, 0x00, 0xed, 0xfc, 0x28, 0x3a, 0x42,
114 0x4d, 0xab, 0xab, 0xdf, 0xbc, 0x9c, 0x16, 0xd0, 0x22, 0x50, 0xd1, 0x38,
115 0xdd, 0x3f, 0x64, 0x05, 0x9e, 0x68, 0x7a, 0x1e, 0xf1, 0x56, 0xbf, 0x1e,
116 0x2c, 0xc5, 0x97, 0x2a, 0xfe, 0x7a, 0x22, 0xdc, 0x6c, 0x68, 0xb8, 0x2e,
117 0x06, 0xdb, 0x41, 0xca, 0x98, 0xd8, 0x54, 0xc7, 0x64, 0x48, 0x24, 0x04,
118 0x20, 0xbc, 0x59, 0xe3, 0x6b, 0xea, 0x7e, 0xfc, 0x7e, 0xc5, 0x4e, 0xd4,
119 0xd8, 0x3a, 0xed, 0xcd, 0x5d, 0x99, 0xb8, 0x5c, 0xa2, 0x8b, 0xbb, 0x0b,
120 0xac, 0xe6, 0x8e, 0x25, 0x56, 0x22, 0x3a, 0x2d, 0x3a, 0x56, 0x41, 0x14,
121 0x1f, 0x1c, 0x8f, 0x53, 0x46, 0x13, 0x85, 0x02, 0x15, 0x00, 0x98, 0x7e,
122 0x92, 0x81, 0x88, 0xc7, 0x3f, 0x70, 0x49, 0x54, 0xf6, 0x76, 0xb4, 0xa3,
123 0x9e, 0x1d, 0x45, 0x98, 0x32, 0x7f, 0x02, 0x81, 0x80, 0x69, 0x4d, 0xef,
124 0x55, 0xff, 0x4d, 0x59, 0x2c, 0x01, 0xfa, 0x6a, 0x38, 0xe0, 0x70, 0x9f,
125 0x9e, 0x66, 0x8e, 0x3e, 0x8c, 0x52, 0x22, 0x9d, 0x15, 0x7e, 0x3c, 0xef,
126 0x4c, 0x7a, 0x61, 0x26, 0xe0, 0x2b, 0x81, 0x3f, 0xeb, 0xaf, 0x35, 0x38,
127 0x8d, 0xfe, 0xed, 0x46, 0xff, 0x5f, 0x03, 0x9b, 0x81, 0x92, 0xe7, 0x6f,
128 0x76, 0x4f, 0x1d, 0xd9, 0xbb, 0x89, 0xc9, 0x3e, 0xd9, 0x0b, 0xf9, 0xf4,
129 0x78, 0x11, 0x59, 0xc0, 0x1d, 0xcd, 0x0e, 0xa1, 0x6f, 0x15, 0xf1, 0x4d,
130 0xc1, 0xc9, 0x22, 0xed, 0x8d, 0xad, 0x67, 0xc5, 0x4b, 0x95, 0x93, 0x86,
131 0xa6, 0xaf, 0x8a, 0xee, 0x06, 0x89, 0x2f, 0x37, 0x7e, 0x64, 0xaa, 0xf6,
132 0xe7, 0xb1, 0x5a, 0x0a, 0x93, 0x95, 0x5d, 0x3e, 0x53, 0x9a, 0xde, 0x8a,
133 0xc2, 0x95, 0x45, 0x81, 0xbe, 0x5c, 0x2f, 0xc2, 0xb2, 0x92, 0x58, 0x19,
134 0x72, 0x80, 0xe9, 0x79, 0xa1, 0x02, 0x81, 0x80, 0x07, 0xd7, 0x62, 0xff,
135 0xdf, 0x1a, 0x3f, 0xed, 0x32, 0xd4, 0xd4, 0x88, 0x7b, 0x2c, 0x63, 0x7f,
136 0x97, 0xdc, 0x44, 0xd4, 0x84, 0xa2, 0xdd, 0x17, 0x16, 0x85, 0x13, 0xe0,
137 0xac, 0x51, 0x8d, 0x29, 0x1b, 0x75, 0x9a, 0xe4, 0xe3, 0x8a, 0x92, 0x69,
138 0x09, 0x03, 0xc5, 0x68, 0xae, 0x5e, 0x94, 0xfe, 0xc9, 0x92, 0x6c, 0x07,
139 0xb4, 0x1e, 0x64, 0x62, 0x87, 0xc6, 0xa4, 0xfd, 0x0d, 0x5f, 0xe5, 0xf9,
140 0x1b, 0x4f, 0x85, 0x5f, 0xae, 0xf3, 0x11, 0xe5, 0x18, 0xd4, 0x4d, 0x79,
141 0x9f, 0xc4, 0x79, 0x26, 0x04, 0x27, 0xf0, 0x0b, 0xee, 0x2b, 0x86, 0x9f,
142 0x86, 0x61, 0xe6, 0x51, 0xce, 0x04, 0x9b, 0x5d, 0x6b, 0x34, 0x43, 0x8c,
143 0x85, 0x3c, 0xf1, 0x51, 0x9b, 0x08, 0x23, 0x1b, 0xf5, 0x7e, 0x33, 0x12,
144 0xea, 0xab, 0x1f, 0xb7, 0x2d, 0xe2, 0x5f, 0xe6, 0x97, 0x99, 0xb5, 0x45,
145 0x16, 0x5b, 0xc3, 0x41, 0x02, 0x14, 0x61, 0xbf, 0x51, 0x60, 0xcf, 0xc8,
146 0xf1, 0x8c, 0x82, 0x97, 0xf2, 0xf4, 0x19, 0xba, 0x2b, 0xf3, 0x16, 0xbe,
147 0x40, 0x48
148};
f650ab47 149#endif
59d0e6c8 150
2aee35d3
PY
151/*
152 * kExampleBadRSAKeyDER is an RSA private key in ASN.1, DER format. The private
153 * components are not correct.
154 */
155static const unsigned char kExampleBadRSAKeyDER[] = {
156 0x30, 0x82, 0x04, 0x27, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00,
157 0xa6, 0x1a, 0x1e, 0x6e, 0x7b, 0xee, 0xc6, 0x89, 0x66, 0xe7, 0x93, 0xef,
158 0x54, 0x12, 0x68, 0xea, 0xbf, 0x86, 0x2f, 0xdd, 0xd2, 0x79, 0xb8, 0xa9,
159 0x6e, 0x03, 0xc2, 0xa3, 0xb9, 0xa3, 0xe1, 0x4b, 0x2a, 0xb3, 0xf8, 0xb4,
160 0xcd, 0xea, 0xbe, 0x24, 0xa6, 0x57, 0x5b, 0x83, 0x1f, 0x0f, 0xf2, 0xd3,
161 0xb7, 0xac, 0x7e, 0xd6, 0x8e, 0x6e, 0x1e, 0xbf, 0xb8, 0x73, 0x8c, 0x05,
162 0x56, 0xe6, 0x35, 0x1f, 0xe9, 0x04, 0x0b, 0x09, 0x86, 0x7d, 0xf1, 0x26,
163 0x08, 0x99, 0xad, 0x7b, 0xc8, 0x4d, 0x94, 0xb0, 0x0b, 0x8b, 0x38, 0xa0,
164 0x5c, 0x62, 0xa0, 0xab, 0xd3, 0x8f, 0xd4, 0x09, 0x60, 0x72, 0x1e, 0x33,
165 0x50, 0x80, 0x6e, 0x22, 0xa6, 0x77, 0x57, 0x6b, 0x9a, 0x33, 0x21, 0x66,
166 0x87, 0x6e, 0x21, 0x7b, 0xc7, 0x24, 0x0e, 0xd8, 0x13, 0xdf, 0x83, 0xde,
167 0xcd, 0x40, 0x58, 0x1d, 0x84, 0x86, 0xeb, 0xb8, 0x12, 0x4e, 0xd2, 0xfa,
168 0x80, 0x1f, 0xe4, 0xe7, 0x96, 0x29, 0xb8, 0xcc, 0xce, 0x66, 0x6d, 0x53,
169 0xca, 0xb9, 0x5a, 0xd7, 0xf6, 0x84, 0x6c, 0x2d, 0x9a, 0x1a, 0x14, 0x1c,
170 0x4e, 0x93, 0x39, 0xba, 0x74, 0xed, 0xed, 0x87, 0x87, 0x5e, 0x48, 0x75,
171 0x36, 0xf0, 0xbc, 0x34, 0xfb, 0x29, 0xf9, 0x9f, 0x96, 0x5b, 0x0b, 0xa7,
172 0x54, 0x30, 0x51, 0x29, 0x18, 0x5b, 0x7d, 0xac, 0x0f, 0xd6, 0x5f, 0x7c,
173 0xf8, 0x98, 0x8c, 0xd8, 0x86, 0x62, 0xb3, 0xdc, 0xff, 0x0f, 0xff, 0x7a,
174 0xaf, 0x5c, 0x4c, 0x61, 0x49, 0x2e, 0xc8, 0x95, 0x86, 0xc4, 0x0e, 0x87,
175 0xfc, 0x1d, 0xcf, 0x8b, 0x7c, 0x61, 0xf6, 0xd8, 0xd0, 0x69, 0xf6, 0xcd,
176 0x8a, 0x8c, 0xf6, 0x62, 0xa2, 0x56, 0xa9, 0xe3, 0xd1, 0xcf, 0x4d, 0xa0,
177 0xf6, 0x2d, 0x20, 0x0a, 0x04, 0xb7, 0xa2, 0xf7, 0xb5, 0x99, 0x47, 0x18,
178 0x56, 0x85, 0x87, 0xc7, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01,
179 0x01, 0x00, 0x99, 0x41, 0x38, 0x1a, 0xd0, 0x96, 0x7a, 0xf0, 0x83, 0xd5,
180 0xdf, 0x94, 0xce, 0x89, 0x3d, 0xec, 0x7a, 0x52, 0x21, 0x10, 0x16, 0x06,
181 0xe0, 0xee, 0xd2, 0xe6, 0xfd, 0x4b, 0x7b, 0x19, 0x4d, 0xe1, 0xc0, 0xc0,
182 0xd5, 0x14, 0x5d, 0x79, 0xdd, 0x7e, 0x8b, 0x4b, 0xc6, 0xcf, 0xb0, 0x75,
183 0x52, 0xa3, 0x2d, 0xb1, 0x26, 0x46, 0x68, 0x9c, 0x0a, 0x1a, 0xf2, 0xe1,
184 0x09, 0xac, 0x53, 0x85, 0x8c, 0x36, 0xa9, 0x14, 0x65, 0xea, 0xa0, 0x00,
185 0xcb, 0xe3, 0x3f, 0xc4, 0x2b, 0x61, 0x2e, 0x6b, 0x06, 0x69, 0x77, 0xfd,
186 0x38, 0x7e, 0x1d, 0x3f, 0x92, 0xe7, 0x77, 0x08, 0x19, 0xa7, 0x9d, 0x29,
187 0x2d, 0xdc, 0x42, 0xc6, 0x7c, 0xd7, 0xd3, 0xa8, 0x01, 0x2c, 0xf2, 0xd5,
188 0x82, 0x57, 0xcb, 0x55, 0x3d, 0xe7, 0xaa, 0xd2, 0x06, 0x30, 0x30, 0x05,
189 0xe6, 0xf2, 0x47, 0x86, 0xba, 0xc6, 0x61, 0x64, 0xeb, 0x4f, 0x2a, 0x5e,
190 0x07, 0x29, 0xe0, 0x96, 0xb2, 0x43, 0xff, 0x5f, 0x1a, 0x54, 0x16, 0xcf,
191 0xb5, 0x56, 0x5c, 0xa0, 0x9b, 0x0c, 0xfd, 0xb3, 0xd2, 0xe3, 0x79, 0x1d,
192 0x21, 0xe2, 0xd6, 0x13, 0xc4, 0x74, 0xa6, 0xf5, 0x8e, 0x8e, 0x81, 0xbb,
193 0xb4, 0xad, 0x8a, 0xf0, 0x93, 0x0a, 0xd8, 0x0a, 0x42, 0x36, 0xbc, 0xe5,
194 0x26, 0x2a, 0x0d, 0x5d, 0x57, 0x13, 0xc5, 0x4e, 0x2f, 0x12, 0x0e, 0xef,
195 0xa7, 0x81, 0x1e, 0xc3, 0xa5, 0xdb, 0xc9, 0x24, 0xeb, 0x1a, 0xa1, 0xf9,
196 0xf6, 0xa1, 0x78, 0x98, 0x93, 0x77, 0x42, 0x45, 0x03, 0xe2, 0xc9, 0xa2,
197 0xfe, 0x2d, 0x77, 0xc8, 0xc6, 0xac, 0x9b, 0x98, 0x89, 0x6d, 0x9a, 0xe7,
198 0x61, 0x63, 0xb7, 0xf2, 0xec, 0xd6, 0xb1, 0xa1, 0x6e, 0x0a, 0x1a, 0xff,
199 0xfd, 0x43, 0x28, 0xc3, 0x0c, 0xdc, 0xf2, 0x47, 0x4f, 0x27, 0xaa, 0x99,
200 0x04, 0x8e, 0xac, 0xe8, 0x7c, 0x01, 0x02, 0x04, 0x12, 0x34, 0x56, 0x78,
201 0x02, 0x81, 0x81, 0x00, 0xca, 0x69, 0xe5, 0xbb, 0x3a, 0x90, 0x82, 0xcb,
202 0x82, 0x50, 0x2f, 0x29, 0xe2, 0x76, 0x6a, 0x57, 0x55, 0x45, 0x4e, 0x35,
203 0x18, 0x61, 0xe0, 0x12, 0x70, 0xc0, 0xab, 0xc7, 0x80, 0xa2, 0xd4, 0x46,
204 0x34, 0x03, 0xa0, 0x19, 0x26, 0x23, 0x9e, 0xef, 0x1a, 0xcb, 0x75, 0xd6,
205 0xba, 0x81, 0xf4, 0x7e, 0x52, 0xe5, 0x2a, 0xe8, 0xf1, 0x49, 0x6c, 0x0f,
206 0x1a, 0xa0, 0xf9, 0xc6, 0xe7, 0xec, 0x60, 0xe4, 0xcb, 0x2a, 0xb5, 0x56,
207 0xe9, 0x9c, 0xcd, 0x19, 0x75, 0x92, 0xb1, 0x66, 0xce, 0xc3, 0xd9, 0x3d,
208 0x11, 0xcb, 0xc4, 0x09, 0xce, 0x1e, 0x30, 0xba, 0x2f, 0x60, 0x60, 0x55,
209 0x8d, 0x02, 0xdc, 0x5d, 0xaf, 0xf7, 0x52, 0x31, 0x17, 0x07, 0x53, 0x20,
210 0x33, 0xad, 0x8c, 0xd5, 0x2f, 0x5a, 0xd0, 0x57, 0xd7, 0xd1, 0x80, 0xd6,
211 0x3a, 0x9b, 0x04, 0x4f, 0x35, 0xbf, 0xe7, 0xd5, 0xbc, 0x8f, 0xd4, 0x81,
212 0x02, 0x81, 0x81, 0x00, 0xc0, 0x9f, 0xf8, 0xcd, 0xf7, 0x3f, 0x26, 0x8a,
213 0x3d, 0x4d, 0x2b, 0x0c, 0x01, 0xd0, 0xa2, 0xb4, 0x18, 0xfe, 0xf7, 0x5e,
214 0x2f, 0x06, 0x13, 0xcd, 0x63, 0xaa, 0x12, 0xa9, 0x24, 0x86, 0xe3, 0xf3,
215 0x7b, 0xda, 0x1a, 0x3c, 0xb1, 0x38, 0x80, 0x80, 0xef, 0x64, 0x64, 0xa1,
216 0x9b, 0xfe, 0x76, 0x63, 0x8e, 0x83, 0xd2, 0xd9, 0xb9, 0x86, 0xb0, 0xe6,
217 0xa6, 0x0c, 0x7e, 0xa8, 0x84, 0x90, 0x98, 0x0c, 0x1e, 0xf3, 0x14, 0x77,
218 0xe0, 0x5f, 0x81, 0x08, 0x11, 0x8f, 0xa6, 0x23, 0xc4, 0xba, 0xc0, 0x8a,
219 0xe4, 0xc6, 0xe3, 0x5c, 0xbe, 0xc5, 0xec, 0x2c, 0xb9, 0xd8, 0x8c, 0x4d,
220 0x1a, 0x9d, 0xe7, 0x7c, 0x85, 0x4c, 0x0d, 0x71, 0x4e, 0x72, 0x33, 0x1b,
221 0xfe, 0xa9, 0x17, 0x72, 0x76, 0x56, 0x9d, 0x74, 0x7e, 0x52, 0x67, 0x9a,
222 0x87, 0x9a, 0xdb, 0x30, 0xde, 0xe4, 0x49, 0x28, 0x3b, 0xd2, 0x67, 0xaf,
223 0x02, 0x81, 0x81, 0x00, 0x89, 0x74, 0x9a, 0x8e, 0xa7, 0xb9, 0xa5, 0x28,
224 0xc0, 0x68, 0xe5, 0x6e, 0x63, 0x1c, 0x99, 0x20, 0x8f, 0x86, 0x8e, 0x12,
225 0x9e, 0x69, 0x30, 0xfa, 0x34, 0xd9, 0x92, 0x8d, 0xdb, 0x7c, 0x37, 0xfd,
226 0x28, 0xab, 0x61, 0x98, 0x52, 0x7f, 0x14, 0x1a, 0x39, 0xae, 0xfb, 0x6a,
227 0x03, 0xa3, 0xe6, 0xbd, 0xb6, 0x5b, 0x6b, 0xe5, 0x5e, 0x9d, 0xc6, 0xa5,
228 0x07, 0x27, 0x54, 0x17, 0xd0, 0x3d, 0x84, 0x9b, 0x3a, 0xa0, 0xd9, 0x1e,
229 0x99, 0x6c, 0x63, 0x17, 0xab, 0xf1, 0x1f, 0x49, 0xba, 0x95, 0xe3, 0x3b,
230 0x86, 0x8f, 0x42, 0xa4, 0x89, 0xf5, 0x94, 0x8f, 0x8b, 0x46, 0xbe, 0x84,
231 0xba, 0x4a, 0xbc, 0x0d, 0x5f, 0x46, 0xeb, 0xe8, 0xec, 0x43, 0x8c, 0x1e,
232 0xad, 0x19, 0x69, 0x2f, 0x08, 0x86, 0x7a, 0x3f, 0x7d, 0x0f, 0x07, 0x97,
233 0xf3, 0x9a, 0x7b, 0xb5, 0xb2, 0xc1, 0x8c, 0x95, 0x68, 0x04, 0xa0, 0x81,
234 0x02, 0x81, 0x80, 0x4e, 0xbf, 0x7e, 0x1b, 0xcb, 0x13, 0x61, 0x75, 0x3b,
235 0xdb, 0x59, 0x5f, 0xb1, 0xd4, 0xb8, 0xeb, 0x9e, 0x73, 0xb5, 0xe7, 0xf6,
236 0x89, 0x3d, 0x1c, 0xda, 0xf0, 0x36, 0xff, 0x35, 0xbd, 0x1e, 0x0b, 0x74,
237 0xe3, 0x9e, 0xf0, 0xf2, 0xf7, 0xd7, 0x82, 0xb7, 0x7b, 0x6a, 0x1b, 0x0e,
238 0x30, 0x4a, 0x98, 0x0e, 0xb4, 0xf9, 0x81, 0x07, 0xe4, 0x75, 0x39, 0xe9,
239 0x53, 0xca, 0xbb, 0x5c, 0xaa, 0x93, 0x07, 0x0e, 0xa8, 0x2f, 0xba, 0x98,
240 0x49, 0x30, 0xa7, 0xcc, 0x1a, 0x3c, 0x68, 0x0c, 0xe1, 0xa4, 0xb1, 0x05,
241 0xe6, 0xe0, 0x25, 0x78, 0x58, 0x14, 0x37, 0xf5, 0x1f, 0xe3, 0x22, 0xef,
242 0xa8, 0x0e, 0x22, 0xa0, 0x94, 0x3a, 0xf6, 0xc9, 0x13, 0xe6, 0x06, 0xbf,
243 0x7f, 0x99, 0xc6, 0xcc, 0xd8, 0xc6, 0xbe, 0xd9, 0x2e, 0x24, 0xc7, 0x69,
244 0x8c, 0x95, 0xba, 0xf6, 0x04, 0xb3, 0x0a, 0xf4, 0xcb, 0xf0, 0xce,
245};
246
71ea6b48
MC
247static const unsigned char kMsg[] = { 1, 2, 3, 4 };
248
249static const unsigned char kSignature[] = {
250 0xa5, 0xf0, 0x8a, 0x47, 0x5d, 0x3c, 0xb3, 0xcc, 0xa9, 0x79, 0xaf, 0x4d,
251 0x8c, 0xae, 0x4c, 0x14, 0xef, 0xc2, 0x0b, 0x34, 0x36, 0xde, 0xf4, 0x3e,
252 0x3d, 0xbb, 0x4a, 0x60, 0x5c, 0xc8, 0x91, 0x28, 0xda, 0xfb, 0x7e, 0x04,
253 0x96, 0x7e, 0x63, 0x13, 0x90, 0xce, 0xb9, 0xb4, 0x62, 0x7a, 0xfd, 0x09,
254 0x3d, 0xc7, 0x67, 0x78, 0x54, 0x04, 0xeb, 0x52, 0x62, 0x6e, 0x24, 0x67,
255 0xb4, 0x40, 0xfc, 0x57, 0x62, 0xc6, 0xf1, 0x67, 0xc1, 0x97, 0x8f, 0x6a,
256 0xa8, 0xae, 0x44, 0x46, 0x5e, 0xab, 0x67, 0x17, 0x53, 0x19, 0x3a, 0xda,
257 0x5a, 0xc8, 0x16, 0x3e, 0x86, 0xd5, 0xc5, 0x71, 0x2f, 0xfc, 0x23, 0x48,
258 0xd9, 0x0b, 0x13, 0xdd, 0x7b, 0x5a, 0x25, 0x79, 0xef, 0xa5, 0x7b, 0x04,
259 0xed, 0x44, 0xf6, 0x18, 0x55, 0xe4, 0x0a, 0xe9, 0x57, 0x79, 0x5d, 0xd7,
260 0x55, 0xa7, 0xab, 0x45, 0x02, 0x97, 0x60, 0x42,
261};
262
263/*
264 * kExampleRSAKeyPKCS8 is kExampleRSAKeyDER encoded in a PKCS #8
265 * PrivateKeyInfo.
266 */
267static const unsigned char kExampleRSAKeyPKCS8[] = {
268 0x30, 0x82, 0x02, 0x76, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a,
269 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82,
270 0x02, 0x60, 0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81,
271 0x00, 0xf8, 0xb8, 0x6c, 0x83, 0xb4, 0xbc, 0xd9, 0xa8, 0x57, 0xc0, 0xa5,
272 0xb4, 0x59, 0x76, 0x8c, 0x54, 0x1d, 0x79, 0xeb, 0x22, 0x52, 0x04, 0x7e,
273 0xd3, 0x37, 0xeb, 0x41, 0xfd, 0x83, 0xf9, 0xf0, 0xa6, 0x85, 0x15, 0x34,
274 0x75, 0x71, 0x5a, 0x84, 0xa8, 0x3c, 0xd2, 0xef, 0x5a, 0x4e, 0xd3, 0xde,
275 0x97, 0x8a, 0xdd, 0xff, 0xbb, 0xcf, 0x0a, 0xaa, 0x86, 0x92, 0xbe, 0xb8,
276 0x50, 0xe4, 0xcd, 0x6f, 0x80, 0x33, 0x30, 0x76, 0x13, 0x8f, 0xca, 0x7b,
277 0xdc, 0xec, 0x5a, 0xca, 0x63, 0xc7, 0x03, 0x25, 0xef, 0xa8, 0x8a, 0x83,
278 0x58, 0x76, 0x20, 0xfa, 0x16, 0x77, 0xd7, 0x79, 0x92, 0x63, 0x01, 0x48,
279 0x1a, 0xd8, 0x7b, 0x67, 0xf1, 0x52, 0x55, 0x49, 0x4e, 0xd6, 0x6e, 0x4a,
280 0x5c, 0xd7, 0x7a, 0x37, 0x36, 0x0c, 0xde, 0xdd, 0x8f, 0x44, 0xe8, 0xc2,
281 0xa7, 0x2c, 0x2b, 0xb5, 0xaf, 0x64, 0x4b, 0x61, 0x07, 0x02, 0x03, 0x01,
282 0x00, 0x01, 0x02, 0x81, 0x80, 0x74, 0x88, 0x64, 0x3f, 0x69, 0x45, 0x3a,
283 0x6d, 0xc7, 0x7f, 0xb9, 0xa3, 0xc0, 0x6e, 0xec, 0xdc, 0xd4, 0x5a, 0xb5,
284 0x32, 0x85, 0x5f, 0x19, 0xd4, 0xf8, 0xd4, 0x3f, 0x3c, 0xfa, 0xc2, 0xf6,
285 0x5f, 0xee, 0xe6, 0xba, 0x87, 0x74, 0x2e, 0xc7, 0x0c, 0xd4, 0x42, 0xb8,
286 0x66, 0x85, 0x9c, 0x7b, 0x24, 0x61, 0xaa, 0x16, 0x11, 0xf6, 0xb5, 0xb6,
287 0xa4, 0x0a, 0xc9, 0x55, 0x2e, 0x81, 0xa5, 0x47, 0x61, 0xcb, 0x25, 0x8f,
288 0xc2, 0x15, 0x7b, 0x0e, 0x7c, 0x36, 0x9f, 0x3a, 0xda, 0x58, 0x86, 0x1c,
289 0x5b, 0x83, 0x79, 0xe6, 0x2b, 0xcc, 0xe6, 0xfa, 0x2c, 0x61, 0xf2, 0x78,
290 0x80, 0x1b, 0xe2, 0xf3, 0x9d, 0x39, 0x2b, 0x65, 0x57, 0x91, 0x3d, 0x71,
291 0x99, 0x73, 0xa5, 0xc2, 0x79, 0x20, 0x8c, 0x07, 0x4f, 0xe5, 0xb4, 0x60,
292 0x1f, 0x99, 0xa2, 0xb1, 0x4f, 0x0c, 0xef, 0xbc, 0x59, 0x53, 0x00, 0x7d,
293 0xb1, 0x02, 0x41, 0x00, 0xfc, 0x7e, 0x23, 0x65, 0x70, 0xf8, 0xce, 0xd3,
294 0x40, 0x41, 0x80, 0x6a, 0x1d, 0x01, 0xd6, 0x01, 0xff, 0xb6, 0x1b, 0x3d,
295 0x3d, 0x59, 0x09, 0x33, 0x79, 0xc0, 0x4f, 0xde, 0x96, 0x27, 0x4b, 0x18,
296 0xc6, 0xd9, 0x78, 0xf1, 0xf4, 0x35, 0x46, 0xe9, 0x7c, 0x42, 0x7a, 0x5d,
297 0x9f, 0xef, 0x54, 0xb8, 0xf7, 0x9f, 0xc4, 0x33, 0x6c, 0xf3, 0x8c, 0x32,
298 0x46, 0x87, 0x67, 0x30, 0x7b, 0xa7, 0xac, 0xe3, 0x02, 0x41, 0x00, 0xfc,
299 0x2c, 0xdf, 0x0c, 0x0d, 0x88, 0xf5, 0xb1, 0x92, 0xa8, 0x93, 0x47, 0x63,
300 0x55, 0xf5, 0xca, 0x58, 0x43, 0xba, 0x1c, 0xe5, 0x9e, 0xb6, 0x95, 0x05,
301 0xcd, 0xb5, 0x82, 0xdf, 0xeb, 0x04, 0x53, 0x9d, 0xbd, 0xc2, 0x38, 0x16,
302 0xb3, 0x62, 0xdd, 0xa1, 0x46, 0xdb, 0x6d, 0x97, 0x93, 0x9f, 0x8a, 0xc3,
303 0x9b, 0x64, 0x7e, 0x42, 0xe3, 0x32, 0x57, 0x19, 0x1b, 0xd5, 0x6e, 0x85,
304 0xfa, 0xb8, 0x8d, 0x02, 0x41, 0x00, 0xbc, 0x3d, 0xde, 0x6d, 0xd6, 0x97,
305 0xe8, 0xba, 0x9e, 0x81, 0x37, 0x17, 0xe5, 0xa0, 0x64, 0xc9, 0x00, 0xb7,
306 0xe7, 0xfe, 0xf4, 0x29, 0xd9, 0x2e, 0x43, 0x6b, 0x19, 0x20, 0xbd, 0x99,
307 0x75, 0xe7, 0x76, 0xf8, 0xd3, 0xae, 0xaf, 0x7e, 0xb8, 0xeb, 0x81, 0xf4,
308 0x9d, 0xfe, 0x07, 0x2b, 0x0b, 0x63, 0x0b, 0x5a, 0x55, 0x90, 0x71, 0x7d,
309 0xf1, 0xdb, 0xd9, 0xb1, 0x41, 0x41, 0x68, 0x2f, 0x4e, 0x39, 0x02, 0x40,
310 0x5a, 0x34, 0x66, 0xd8, 0xf5, 0xe2, 0x7f, 0x18, 0xb5, 0x00, 0x6e, 0x26,
311 0x84, 0x27, 0x14, 0x93, 0xfb, 0xfc, 0xc6, 0x0f, 0x5e, 0x27, 0xe6, 0xe1,
312 0xe9, 0xc0, 0x8a, 0xe4, 0x34, 0xda, 0xe9, 0xa2, 0x4b, 0x73, 0xbc, 0x8c,
313 0xb9, 0xba, 0x13, 0x6c, 0x7a, 0x2b, 0x51, 0x84, 0xa3, 0x4a, 0xe0, 0x30,
314 0x10, 0x06, 0x7e, 0xed, 0x17, 0x5a, 0x14, 0x00, 0xc9, 0xef, 0x85, 0xea,
315 0x52, 0x2c, 0xbc, 0x65, 0x02, 0x40, 0x51, 0xe3, 0xf2, 0x83, 0x19, 0x9b,
316 0xc4, 0x1e, 0x2f, 0x50, 0x3d, 0xdf, 0x5a, 0xa2, 0x18, 0xca, 0x5f, 0x2e,
317 0x49, 0xaf, 0x6f, 0xcc, 0xfa, 0x65, 0x77, 0x94, 0xb5, 0xa1, 0x0a, 0xa9,
318 0xd1, 0x8a, 0x39, 0x37, 0xf4, 0x0b, 0xa0, 0xd7, 0x82, 0x27, 0x5e, 0xae,
319 0x17, 0x17, 0xa1, 0x1e, 0x54, 0x34, 0xbf, 0x6e, 0xc4, 0x8e, 0x99, 0x5d,
320 0x08, 0xf1, 0x2d, 0x86, 0x9d, 0xa5, 0x20, 0x1b, 0xe5, 0xdf,
321};
322
a9880362 323#ifndef OPENSSL_NO_EC
71ea6b48
MC
324/*
325 * kExampleECKeyDER is a sample EC private key encoded as an ECPrivateKey
326 * structure.
327 */
328static const unsigned char kExampleECKeyDER[] = {
329 0x30, 0x77, 0x02, 0x01, 0x01, 0x04, 0x20, 0x07, 0x0f, 0x08, 0x72, 0x7a,
330 0xd4, 0xa0, 0x4a, 0x9c, 0xdd, 0x59, 0xc9, 0x4d, 0x89, 0x68, 0x77, 0x08,
331 0xb5, 0x6f, 0xc9, 0x5d, 0x30, 0x77, 0x0e, 0xe8, 0xd1, 0xc9, 0xce, 0x0a,
332 0x8b, 0xb4, 0x6a, 0xa0, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
333 0x03, 0x01, 0x07, 0xa1, 0x44, 0x03, 0x42, 0x00, 0x04, 0xe6, 0x2b, 0x69,
334 0xe2, 0xbf, 0x65, 0x9f, 0x97, 0xbe, 0x2f, 0x1e, 0x0d, 0x94, 0x8a, 0x4c,
335 0xd5, 0x97, 0x6b, 0xb7, 0xa9, 0x1e, 0x0d, 0x46, 0xfb, 0xdd, 0xa9, 0xa9,
336 0x1e, 0x9d, 0xdc, 0xba, 0x5a, 0x01, 0xe7, 0xd6, 0x97, 0xa8, 0x0a, 0x18,
337 0xf9, 0xc3, 0xc4, 0xa3, 0x1e, 0x56, 0xe2, 0x7c, 0x83, 0x48, 0xdb, 0x16,
338 0x1a, 0x1c, 0xf5, 0x1d, 0x7e, 0xf1, 0x94, 0x2d, 0x4b, 0xcf, 0x72, 0x22,
339 0xc1,
340};
341
342/*
343 * kExampleBadECKeyDER is a sample EC private key encoded as an ECPrivateKey
344 * structure. The private key is equal to the order and will fail to import
345 */
346static const unsigned char kExampleBadECKeyDER[] = {
347 0x30, 0x66, 0x02, 0x01, 0x00, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48,
348 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03,
349 0x01, 0x07, 0x04, 0x4C, 0x30, 0x4A, 0x02, 0x01, 0x01, 0x04, 0x20, 0xFF,
350 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
351 0xFF, 0xFF, 0xFF, 0xBC, 0xE6, 0xFA, 0xAD, 0xA7, 0x17, 0x9E, 0x84, 0xF3,
352 0xB9, 0xCA, 0xC2, 0xFC, 0x63, 0x25, 0x51, 0xA1, 0x23, 0x03, 0x21, 0x00,
353 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
354 0xFF, 0xFF, 0xFF, 0xFF, 0xBC, 0xE6, 0xFA, 0xAD, 0xA7, 0x17, 0x9E, 0x84,
355 0xF3, 0xB9, 0xCA, 0xC2, 0xFC, 0x63, 0x25, 0x51
356};
b0004708
PY
357
358/* prime256v1 */
359static const unsigned char kExampleECPubKeyDER[] = {
360 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
361 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03,
362 0x42, 0x00, 0x04, 0xba, 0xeb, 0x83, 0xfb, 0x3b, 0xb2, 0xff, 0x30, 0x53,
363 0xdb, 0xce, 0x32, 0xf2, 0xac, 0xae, 0x44, 0x0d, 0x3d, 0x13, 0x53, 0xb8,
364 0xd1, 0x68, 0x55, 0xde, 0x44, 0x46, 0x05, 0xa6, 0xc9, 0xd2, 0x04, 0xb7,
365 0xe3, 0xa2, 0x96, 0xc8, 0xb2, 0x5e, 0x22, 0x03, 0xd7, 0x03, 0x7a, 0x8b,
366 0x13, 0x5c, 0x42, 0x49, 0xc2, 0xab, 0x86, 0xd6, 0xac, 0x6b, 0x93, 0x20,
367 0x56, 0x6a, 0xc6, 0xc8, 0xa5, 0x0b, 0xe5
368};
369
5dc40a83 370/*
87762939 371 * kExampleBadECPubKeyDER is a sample EC public key with a wrong OID
5dc40a83
BE
372 * 1.2.840.10045.2.2 instead of 1.2.840.10045.2.1 - EC Public Key
373 */
374static const unsigned char kExampleBadECPubKeyDER[] = {
375 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
376 0x02, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03,
377 0x42, 0x00, 0x04, 0xba, 0xeb, 0x83, 0xfb, 0x3b, 0xb2, 0xff, 0x30, 0x53,
378 0xdb, 0xce, 0x32, 0xf2, 0xac, 0xae, 0x44, 0x0d, 0x3d, 0x13, 0x53, 0xb8,
379 0xd1, 0x68, 0x55, 0xde, 0x44, 0x46, 0x05, 0xa6, 0xc9, 0xd2, 0x04, 0xb7,
380 0xe3, 0xa2, 0x96, 0xc8, 0xb2, 0x5e, 0x22, 0x03, 0xd7, 0x03, 0x7a, 0x8b,
381 0x13, 0x5c, 0x42, 0x49, 0xc2, 0xab, 0x86, 0xd6, 0xac, 0x6b, 0x93, 0x20,
382 0x56, 0x6a, 0xc6, 0xc8, 0xa5, 0x0b, 0xe5
383};
384
b0004708
PY
385static const unsigned char pExampleECParamDER[] = {
386 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07
387};
a9880362 388#endif
71ea6b48 389
adcd8e37
RS
390typedef struct APK_DATA_st {
391 const unsigned char *kder;
392 size_t size;
393 int evptype;
2aee35d3 394 int check;
b0004708
PY
395 int pub_check;
396 int param_check;
397 int type; /* 0 for private, 1 for public, 2 for params */
adcd8e37
RS
398} APK_DATA;
399
400static APK_DATA keydata[] = {
401 {kExampleRSAKeyDER, sizeof(kExampleRSAKeyDER), EVP_PKEY_RSA},
402 {kExampleRSAKeyPKCS8, sizeof(kExampleRSAKeyPKCS8), EVP_PKEY_RSA},
aa24cd1b 403#ifndef OPENSSL_NO_EC
adcd8e37 404 {kExampleECKeyDER, sizeof(kExampleECKeyDER), EVP_PKEY_EC}
aa24cd1b 405#endif
adcd8e37
RS
406};
407
2aee35d3 408static APK_DATA keycheckdata[] = {
b0004708
PY
409 {kExampleRSAKeyDER, sizeof(kExampleRSAKeyDER), EVP_PKEY_RSA, 1, -2, -2, 0},
410 {kExampleBadRSAKeyDER, sizeof(kExampleBadRSAKeyDER), EVP_PKEY_RSA,
411 0, -2, -2, 0},
2aee35d3 412#ifndef OPENSSL_NO_EC
b0004708
PY
413 {kExampleECKeyDER, sizeof(kExampleECKeyDER), EVP_PKEY_EC, 1, 1, 1, 0},
414 /* group is also associated in our pub key */
415 {kExampleECPubKeyDER, sizeof(kExampleECPubKeyDER), EVP_PKEY_EC, 0, 1, 1, 1},
416 {pExampleECParamDER, sizeof(pExampleECParamDER), EVP_PKEY_EC, 0, 0, 1, 2}
2aee35d3
PY
417#endif
418};
419
71ea6b48
MC
420static EVP_PKEY *load_example_rsa_key(void)
421{
422 EVP_PKEY *ret = NULL;
423 const unsigned char *derp = kExampleRSAKeyDER;
424 EVP_PKEY *pkey = NULL;
425 RSA *rsa = NULL;
426
adcd8e37 427 if (!TEST_true(d2i_RSAPrivateKey(&rsa, &derp, sizeof(kExampleRSAKeyDER))))
71ea6b48 428 return NULL;
71ea6b48 429
adcd8e37
RS
430 if (!TEST_ptr(pkey = EVP_PKEY_new())
431 || !TEST_true(EVP_PKEY_set1_RSA(pkey, rsa)))
432 goto end;
71ea6b48
MC
433
434 ret = pkey;
435 pkey = NULL;
436
adcd8e37 437end:
c5ba2d99 438 EVP_PKEY_free(pkey);
d6407083 439 RSA_free(rsa);
71ea6b48
MC
440
441 return ret;
442}
443
f650ab47 444#ifndef OPENSSL_NO_DSA
59d0e6c8
MC
445static EVP_PKEY *load_example_dsa_key(void)
446{
447 EVP_PKEY *ret = NULL;
448 const unsigned char *derp = kExampleDSAKeyDER;
449 EVP_PKEY *pkey = NULL;
450 DSA *dsa = NULL;
451
452 if (!TEST_true(d2i_DSAPrivateKey(&dsa, &derp, sizeof(kExampleDSAKeyDER))))
453 return NULL;
454
455 if (!TEST_ptr(pkey = EVP_PKEY_new())
456 || !TEST_true(EVP_PKEY_set1_DSA(pkey, dsa)))
457 goto end;
458
459 ret = pkey;
460 pkey = NULL;
461
462end:
463 EVP_PKEY_free(pkey);
464 DSA_free(dsa);
465
466 return ret;
467}
f650ab47 468#endif
59d0e6c8 469
6d242fa5
MC
470static EVP_PKEY *load_example_hmac_key(void)
471{
472 EVP_PKEY *pkey = NULL;
473 unsigned char key[] = {
474 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
475 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
476 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
477 };
478
479 pkey = EVP_PKEY_new_raw_private_key(EVP_PKEY_HMAC, NULL, key, sizeof(key));
480 if (!TEST_ptr(pkey))
481 return NULL;
482
483 return pkey;
484}
485
f9e504e8
P
486static int test_EVP_set_default_properties(void)
487{
488 OPENSSL_CTX *ctx;
489 EVP_MD *md = NULL;
490 int res = 0;
491
492 if (!TEST_ptr(ctx = OPENSSL_CTX_new())
493 || !TEST_ptr(md = EVP_MD_fetch(ctx, "sha256", NULL)))
494 goto err;
495 EVP_MD_free(md);
496 md = NULL;
497
498 if (!TEST_true(EVP_set_default_properties(ctx, "provider=fizzbang"))
499 || !TEST_ptr_null(md = EVP_MD_fetch(ctx, "sha256", NULL))
500 || !TEST_ptr(md = EVP_MD_fetch(ctx, "sha256", "-provider")))
501 goto err;
502 EVP_MD_free(md);
503 md = NULL;
504
505 if (!TEST_true(EVP_set_default_properties(ctx, NULL))
506 || !TEST_ptr(md = EVP_MD_fetch(ctx, "sha256", NULL)))
507 goto err;
508 res = 1;
509err:
510 EVP_MD_free(md);
511 OPENSSL_CTX_free(ctx);
512 return res;
513}
514
2eb2b4f3
SL
515static int test_EVP_Enveloped(void)
516{
517 int ret = 0;
518 EVP_CIPHER_CTX *ctx = NULL;
519 EVP_PKEY *keypair = NULL;
520 unsigned char *kek = NULL;
521 unsigned char iv[EVP_MAX_IV_LENGTH];
522 static const unsigned char msg[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
523 int len, kek_len, ciphertext_len, plaintext_len;
524 unsigned char ciphertext[32], plaintext[16];
525 const EVP_CIPHER *type = EVP_aes_256_cbc();
526
527 if (!TEST_ptr(keypair = load_example_rsa_key())
528 || !TEST_ptr(kek = OPENSSL_zalloc(EVP_PKEY_size(keypair)))
529 || !TEST_ptr(ctx = EVP_CIPHER_CTX_new())
530 || !TEST_true(EVP_SealInit(ctx, type, &kek, &kek_len, iv,
531 &keypair, 1))
532 || !TEST_true(EVP_SealUpdate(ctx, ciphertext, &ciphertext_len,
533 msg, sizeof(msg)))
534 || !TEST_true(EVP_SealFinal(ctx, ciphertext + ciphertext_len,
535 &len)))
536 goto err;
537
538 ciphertext_len += len;
539
540 if (!TEST_true(EVP_OpenInit(ctx, type, kek, kek_len, iv, keypair))
541 || !TEST_true(EVP_OpenUpdate(ctx, plaintext, &plaintext_len,
542 ciphertext, ciphertext_len))
543 || !TEST_true(EVP_OpenFinal(ctx, plaintext + plaintext_len, &len)))
544 goto err;
545
546 plaintext_len += len;
547 if (!TEST_mem_eq(msg, sizeof(msg), plaintext, plaintext_len))
548 goto err;
549
550 ret = 1;
551err:
552 OPENSSL_free(kek);
553 EVP_PKEY_free(keypair);
554 EVP_CIPHER_CTX_free(ctx);
555 return ret;
556}
557
59d0e6c8 558/*
6d242fa5
MC
559 * Test 0: Standard calls to EVP_DigestSignInit/Update/Final (Implicit fetch digest, RSA)
560 * Test 1: Standard calls to EVP_DigestSignInit/Update/Final (Implicit fetch digest, DSA)
561 * Test 2: Standard calls to EVP_DigestSignInit/Update/Final (Implicit fetch digest, HMAC)
562 * Test 3: Standard calls to EVP_DigestSignInit/Update/Final (Explicit fetch digest, RSA)
563 * Test 4: Standard calls to EVP_DigestSignInit/Update/Final (Explicit fetch digest, DSA)
564 * Test 5: Standard calls to EVP_DigestSignInit/Update/Final (Explicit fetch diegst, HMAC)
565 * Test 6: Use an MD BIO to do the Update calls instead (RSA)
566 * Test 7: Use an MD BIO to do the Update calls instead (DSA)
567 * Test 8: Use an MD BIO to do the Update calls instead (HMAC)
59d0e6c8
MC
568 */
569static int test_EVP_DigestSignInit(int tst)
71ea6b48
MC
570{
571 int ret = 0;
572 EVP_PKEY *pkey = NULL;
573 unsigned char *sig = NULL;
574 size_t sig_len = 0;
59d0e6c8
MC
575 EVP_MD_CTX *md_ctx = NULL, *md_ctx_verify = NULL;
576 EVP_MD_CTX *a_md_ctx = NULL, *a_md_ctx_verify = NULL;
577 BIO *mdbio = NULL, *membio = NULL;
578 size_t written;
6d242fa5
MC
579 const EVP_MD *md;
580 EVP_MD *mdexp = NULL;
59d0e6c8 581
6d242fa5 582 if (tst >= 6) {
59d0e6c8
MC
583 membio = BIO_new(BIO_s_mem());
584 mdbio = BIO_new(BIO_f_md());
585 if (!TEST_ptr(membio) || !TEST_ptr(mdbio))
586 goto out;
587 BIO_push(mdbio, membio);
588 if (!TEST_int_gt(BIO_get_md_ctx(mdbio, &md_ctx), 0))
589 goto out;
590 } else {
591 if (!TEST_ptr(a_md_ctx = md_ctx = EVP_MD_CTX_new())
592 || !TEST_ptr(a_md_ctx_verify = md_ctx_verify = EVP_MD_CTX_new()))
593 goto out;
594 }
71ea6b48 595
6d242fa5 596 if (tst == 0 || tst == 3 || tst == 6) {
59d0e6c8
MC
597 if (!TEST_ptr(pkey = load_example_rsa_key()))
598 goto out;
6d242fa5 599 } else if (tst == 1 || tst == 4 || tst == 7) {
f650ab47 600#ifndef OPENSSL_NO_DSA
59d0e6c8
MC
601 if (!TEST_ptr(pkey = load_example_dsa_key()))
602 goto out;
f650ab47
MC
603#else
604 ret = 1;
605 goto out;
606#endif
6d242fa5
MC
607 } else {
608 if (!TEST_ptr(pkey = load_example_hmac_key()))
609 goto out;
59d0e6c8 610 }
71ea6b48 611
6d242fa5
MC
612 if (tst >= 3 && tst <= 5)
613 md = mdexp = EVP_MD_fetch(NULL, "SHA256", NULL);
614 else
615 md = EVP_sha256();
616
617 if (!TEST_true(EVP_DigestSignInit(md_ctx, NULL, md, NULL, pkey)))
71ea6b48 618 goto out;
adcd8e37 619
6d242fa5 620 if (tst >= 6) {
59d0e6c8
MC
621 if (!BIO_write_ex(mdbio, kMsg, sizeof(kMsg), &written))
622 goto out;
623 } else {
624 if (!TEST_true(EVP_DigestSignUpdate(md_ctx, kMsg, sizeof(kMsg))))
625 goto out;
626 }
627
71ea6b48 628 /* Determine the size of the signature. */
adcd8e37 629 if (!TEST_true(EVP_DigestSignFinal(md_ctx, NULL, &sig_len))
0a054d2a 630 || !TEST_ptr(sig = OPENSSL_malloc(sig_len))
adcd8e37 631 || !TEST_true(EVP_DigestSignFinal(md_ctx, sig, &sig_len)))
71ea6b48 632 goto out;
71ea6b48 633
6d242fa5 634 if (tst >= 6) {
59d0e6c8
MC
635 if (!TEST_int_gt(BIO_reset(mdbio), 0)
636 || !TEST_int_gt(BIO_get_md_ctx(mdbio, &md_ctx_verify), 0))
637 goto out;
638 }
639
6d242fa5
MC
640 /*
641 * Ensure that the signature round-trips (Verification isn't supported for
642 * HMAC via EVP_DigestVerify*)
643 */
644 if (tst != 2 && tst != 5 && tst != 8) {
645 if (!TEST_true(EVP_DigestVerifyInit(md_ctx_verify, NULL, md,
646 NULL, pkey)))
59d0e6c8 647 goto out;
6d242fa5
MC
648
649 if (tst >= 6) {
650 if (!TEST_true(BIO_write_ex(mdbio, kMsg, sizeof(kMsg), &written)))
651 goto out;
652 } else {
653 if (!TEST_true(EVP_DigestVerifyUpdate(md_ctx_verify, kMsg,
654 sizeof(kMsg))))
655 goto out;
656 }
657 if (!TEST_true(EVP_DigestVerifyFinal(md_ctx_verify, sig, sig_len)))
59d0e6c8
MC
658 goto out;
659 }
71ea6b48
MC
660
661 ret = 1;
662
663 out:
59d0e6c8
MC
664 BIO_free(membio);
665 BIO_free(mdbio);
666 EVP_MD_CTX_free(a_md_ctx);
667 EVP_MD_CTX_free(a_md_ctx_verify);
c5ba2d99 668 EVP_PKEY_free(pkey);
b548a1f1 669 OPENSSL_free(sig);
6d242fa5 670 EVP_MD_free(mdexp);
71ea6b48
MC
671
672 return ret;
673}
674
675static int test_EVP_DigestVerifyInit(void)
676{
677 int ret = 0;
678 EVP_PKEY *pkey = NULL;
adcd8e37 679 EVP_MD_CTX *md_ctx = NULL;
71ea6b48 680
adcd8e37
RS
681 if (!TEST_ptr(md_ctx = EVP_MD_CTX_new())
682 || !TEST_ptr(pkey = load_example_rsa_key()))
683 goto out;
71ea6b48 684
adcd8e37
RS
685 if (!TEST_true(EVP_DigestVerifyInit(md_ctx, NULL, EVP_sha256(), NULL, pkey))
686 || !TEST_true(EVP_DigestVerifyUpdate(md_ctx, kMsg, sizeof(kMsg)))
687 || !TEST_true(EVP_DigestVerifyFinal(md_ctx, kSignature,
688 sizeof(kSignature))))
71ea6b48 689 goto out;
71ea6b48
MC
690 ret = 1;
691
692 out:
bfb0641f 693 EVP_MD_CTX_free(md_ctx);
c5ba2d99 694 EVP_PKEY_free(pkey);
71ea6b48
MC
695 return ret;
696}
697
adcd8e37 698static int test_d2i_AutoPrivateKey(int i)
71ea6b48
MC
699{
700 int ret = 0;
701 const unsigned char *p;
702 EVP_PKEY *pkey = NULL;
adcd8e37
RS
703 const APK_DATA *ak = &keydata[i];
704 const unsigned char *input = ak->kder;
705 size_t input_len = ak->size;
706 int expected_id = ak->evptype;
71ea6b48
MC
707
708 p = input;
adcd8e37
RS
709 if (!TEST_ptr(pkey = d2i_AutoPrivateKey(NULL, &p, input_len))
710 || !TEST_ptr_eq(p, input + input_len)
711 || !TEST_int_eq(EVP_PKEY_id(pkey), expected_id))
71ea6b48 712 goto done;
71ea6b48
MC
713
714 ret = 1;
715
716 done:
c5ba2d99 717 EVP_PKEY_free(pkey);
71ea6b48
MC
718 return ret;
719}
720
a9880362 721#ifndef OPENSSL_NO_EC
cad8347b
SL
722
723static const unsigned char ec_public_sect163k1_validxy[] = {
724 0x30, 0x40, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
725 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x01, 0x03, 0x2c, 0x00, 0x04,
726 0x02, 0x84, 0x58, 0xa6, 0xd4, 0xa0, 0x35, 0x2b, 0xae, 0xf0, 0xc0, 0x69,
727 0x05, 0xcf, 0x2a, 0x50, 0x33, 0xf9, 0xe3, 0x92, 0x79, 0x02, 0xd1, 0x7b,
728 0x9f, 0x22, 0x00, 0xf0, 0x3b, 0x0e, 0x5d, 0x2e, 0xb7, 0x23, 0x24, 0xf3,
729 0x6a, 0xd8, 0x17, 0x65, 0x41, 0x2f
730};
731
732static const unsigned char ec_public_sect163k1_badx[] = {
733 0x30, 0x40, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
734 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x01, 0x03, 0x2c, 0x00, 0x04,
735 0x0a, 0x84, 0x58, 0xa6, 0xd4, 0xa0, 0x35, 0x2b, 0xae, 0xf0, 0xc0, 0x69,
736 0x05, 0xcf, 0x2a, 0x50, 0x33, 0xf9, 0xe3, 0x92, 0xb0, 0x02, 0xd1, 0x7b,
737 0x9f, 0x22, 0x00, 0xf0, 0x3b, 0x0e, 0x5d, 0x2e, 0xb7, 0x23, 0x24, 0xf3,
738 0x6a, 0xd8, 0x17, 0x65, 0x41, 0x2f
739};
740
741static const unsigned char ec_public_sect163k1_bady[] = {
742 0x30, 0x40, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
743 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x01, 0x03, 0x2c, 0x00, 0x04,
744 0x02, 0x84, 0x58, 0xa6, 0xd4, 0xa0, 0x35, 0x2b, 0xae, 0xf0, 0xc0, 0x69,
745 0x05, 0xcf, 0x2a, 0x50, 0x33, 0xf9, 0xe3, 0x92, 0x79, 0x0a, 0xd1, 0x7b,
746 0x9f, 0x22, 0x00, 0xf0, 0x3b, 0x0e, 0x5d, 0x2e, 0xb7, 0x23, 0x24, 0xf3,
747 0x6a, 0xd8, 0x17, 0x65, 0x41, 0xe6
748};
749
750static struct ec_der_pub_keys_st {
751 const unsigned char *der;
752 size_t len;
753 int valid;
754} ec_der_pub_keys[] = {
755 { ec_public_sect163k1_validxy, sizeof(ec_public_sect163k1_validxy), 1 },
756 { ec_public_sect163k1_badx, sizeof(ec_public_sect163k1_badx), 0 },
757 { ec_public_sect163k1_bady, sizeof(ec_public_sect163k1_bady), 0 },
758};
759
760/*
761 * Tests the range of the decoded EC char2 public point.
762 * See ec_GF2m_simple_oct2point().
763 */
764static int test_invalide_ec_char2_pub_range_decode(int id)
765{
766 int ret = 0;
767 BIO *bio = NULL;
768 EC_KEY *eckey = NULL;
769
770 if (!TEST_ptr(bio = BIO_new_mem_buf(ec_der_pub_keys[id].der,
771 ec_der_pub_keys[id].len)))
772 goto err;
773 eckey = d2i_EC_PUBKEY_bio(bio, NULL);
774 ret = (ec_der_pub_keys[id].valid && TEST_ptr(eckey))
775 || TEST_ptr_null(eckey);
776err:
777 EC_KEY_free(eckey);
778 BIO_free(bio);
779 return ret;
780}
781
71ea6b48
MC
782/* Tests loading a bad key in PKCS8 format */
783static int test_EVP_PKCS82PKEY(void)
784{
785 int ret = 0;
786 const unsigned char *derp = kExampleBadECKeyDER;
787 PKCS8_PRIV_KEY_INFO *p8inf = NULL;
788 EVP_PKEY *pkey = NULL;
789
adcd8e37
RS
790 if (!TEST_ptr(p8inf = d2i_PKCS8_PRIV_KEY_INFO(NULL, &derp,
791 sizeof(kExampleBadECKeyDER))))
792 goto done;
71ea6b48 793
adcd8e37
RS
794 if (!TEST_ptr_eq(derp,
795 kExampleBadECKeyDER + sizeof(kExampleBadECKeyDER)))
71ea6b48 796 goto done;
71ea6b48 797
adcd8e37 798 if (!TEST_ptr_null(pkey = EVP_PKCS82PKEY(p8inf)))
71ea6b48 799 goto done;
71ea6b48
MC
800
801 ret = 1;
802
803 done:
e0e920b1 804 PKCS8_PRIV_KEY_INFO_free(p8inf);
c5ba2d99 805 EVP_PKEY_free(pkey);
71ea6b48
MC
806
807 return ret;
808}
a9880362 809#endif
71ea6b48 810
29c49b25
RL
811/* This uses kExampleRSAKeyDER and kExampleRSAKeyPKCS8 to verify encoding */
812static int test_privatekey_to_pkcs8(void)
813{
814 EVP_PKEY *pkey = NULL;
815 BIO *membio = NULL;
816 char *membuf = NULL;
e2cc68c8 817 long membuf_len = 0;
29c49b25
RL
818 int ok = 0;
819
820 if (!TEST_ptr(membio = BIO_new(BIO_s_mem()))
821 || !TEST_ptr(pkey = load_example_rsa_key())
822 || !TEST_int_gt(i2d_PKCS8PrivateKey_bio(membio, pkey, NULL,
823 NULL, 0, NULL, NULL),
824 0)
e2cc68c8
SL
825 || !TEST_int_gt(membuf_len = BIO_get_mem_data(membio, &membuf), 0)
826 || !TEST_ptr(membuf)
827 || !TEST_mem_eq(membuf, (size_t)membuf_len,
29c49b25
RL
828 kExampleRSAKeyPKCS8, sizeof(kExampleRSAKeyPKCS8))
829 /*
830 * We try to write PEM as well, just to see that it doesn't err, but
831 * assume that the result is correct.
832 */
833 || !TEST_int_gt(PEM_write_bio_PKCS8PrivateKey(membio, pkey, NULL,
834 NULL, 0, NULL, NULL),
835 0))
836 goto done;
837
838 ok = 1;
839 done:
840 EVP_PKEY_free(pkey);
841 BIO_free_all(membio);
842 return ok;
843}
844
f844f9eb 845#if !defined(OPENSSL_NO_SM2) && !defined(FIPS_MODULE)
ddb634fe 846
a6c4cb84
JL
847static int test_EVP_SM2_verify(void)
848{
849 /* From https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02#appendix-A */
850 const char *pubkey =
851 "-----BEGIN PUBLIC KEY-----\n"
852 "MIIBMzCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEAhULWnkwETxjouSQ1\n"
853 "v2/33kVyg5FcRVF9ci7biwjx38MwRAQgeHlotPoyw/0kF4Quc7v+/y88hItoMdfg\n"
854 "7GUiizk35JgEIGPkxtOyOwyEnPhCQUhL/kj2HVmlsWugbm4S0donxSSaBEEEQh3r\n"
855 "1hti6rZ0ZDTrw8wxXjIiCzut1QvcTE5sFH/t1D0GgFEry7QsB9RzSdIVO3DE5df9\n"
856 "/L+jbqGoWEG55G4JogIhAIVC1p5MBE8Y6LkkNb9v990pdyBjBIVijVrnTufDLnm3\n"
857 "AgEBA0IABArkx3mKoPEZRxvuEYJb5GICu3nipYRElel8BP9N8lSKfAJA+I8c1OFj\n"
858 "Uqc8F7fxbwc1PlOhdtaEqf4Ma7eY6Fc=\n"
859 "-----END PUBLIC KEY-----\n";
860
861 const char *msg = "message digest";
862 const char *id = "ALICE123@YAHOO.COM";
863
864 const uint8_t signature[] = {
865 0x30, 0x44, 0x02, 0x20,
866
867 0x40, 0xF1, 0xEC, 0x59, 0xF7, 0x93, 0xD9, 0xF4, 0x9E, 0x09, 0xDC,
868 0xEF, 0x49, 0x13, 0x0D, 0x41, 0x94, 0xF7, 0x9F, 0xB1, 0xEE, 0xD2,
869 0xCA, 0xA5, 0x5B, 0xAC, 0xDB, 0x49, 0xC4, 0xE7, 0x55, 0xD1,
870
871 0x02, 0x20,
872
873 0x6F, 0xC6, 0xDA, 0xC3, 0x2C, 0x5D, 0x5C, 0xF1, 0x0C, 0x77, 0xDF,
874 0xB2, 0x0F, 0x7C, 0x2E, 0xB6, 0x67, 0xA4, 0x57, 0x87, 0x2F, 0xB0,
875 0x9E, 0xC5, 0x63, 0x27, 0xA6, 0x7E, 0xC7, 0xDE, 0xEB, 0xE7
876 };
877
878 int rc = 0;
879 BIO *bio = NULL;
880 EVP_PKEY *pkey = NULL;
881 EVP_MD_CTX *mctx = NULL;
882 EVP_PKEY_CTX *pctx = NULL;
883
884 bio = BIO_new_mem_buf(pubkey, strlen(pubkey));
885 if (!TEST_true(bio != NULL))
886 goto done;
887
888 pkey = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL);
889 if (!TEST_true(pkey != NULL))
890 goto done;
891
a10847c4
RL
892#ifdef TMP_SM2_HACK
893 if (!TEST_ptr(EVP_PKEY_get0(pkey)))
894 goto done;
895#endif
896
a6c4cb84
JL
897 if (!TEST_true(EVP_PKEY_set_alias_type(pkey, EVP_PKEY_SM2)))
898 goto done;
899
900 if (!TEST_ptr(mctx = EVP_MD_CTX_new()))
901 goto done;
902
903 if (!TEST_ptr(pctx = EVP_PKEY_CTX_new(pkey, NULL)))
904 goto done;
905
906 if (!TEST_int_gt(EVP_PKEY_CTX_set1_id(pctx, (const uint8_t *)id,
907 strlen(id)), 0))
908 goto done;
909
910 EVP_MD_CTX_set_pkey_ctx(mctx, pctx);
911
912 if (!TEST_true(EVP_DigestVerifyInit(mctx, NULL, EVP_sm3(), NULL, pkey)))
913 goto done;
914
915 if (!TEST_true(EVP_DigestVerifyUpdate(mctx, msg, strlen(msg))))
916 goto done;
917
918 if (!TEST_true(EVP_DigestVerifyFinal(mctx, signature, sizeof(signature))))
919 goto done;
920 rc = 1;
921
922 done:
923 BIO_free(bio);
924 EVP_PKEY_free(pkey);
925 EVP_PKEY_CTX_free(pctx);
926 EVP_MD_CTX_free(mctx);
927 return rc;
928}
929
ddb634fe
JL
930static int test_EVP_SM2(void)
931{
932 int ret = 0;
933 EVP_PKEY *pkey = NULL;
934 EVP_PKEY *params = NULL;
935 EVP_PKEY_CTX *pctx = NULL;
936 EVP_PKEY_CTX *kctx = NULL;
4803717f 937 EVP_PKEY_CTX *sctx = NULL;
ddb634fe
JL
938 size_t sig_len = 0;
939 unsigned char *sig = NULL;
940 EVP_MD_CTX *md_ctx = NULL;
941 EVP_MD_CTX *md_ctx_verify = NULL;
942 EVP_PKEY_CTX *cctx = NULL;
943
944 uint8_t ciphertext[128];
945 size_t ctext_len = sizeof(ciphertext);
946
947 uint8_t plaintext[8];
948 size_t ptext_len = sizeof(plaintext);
949
4803717f
PY
950 uint8_t sm2_id[] = {1, 2, 3, 4, 'l', 'e', 't', 't', 'e', 'r'};
951
ddb634fe
JL
952 pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL);
953 if (!TEST_ptr(pctx))
954 goto done;
955
956 if (!TEST_true(EVP_PKEY_paramgen_init(pctx) == 1))
957 goto done;
958
959 if (!TEST_true(EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx, NID_sm2)))
960 goto done;
961
962 if (!TEST_true(EVP_PKEY_paramgen(pctx, &params)))
963 goto done;
964
965 kctx = EVP_PKEY_CTX_new(params, NULL);
966 if (!TEST_ptr(kctx))
967 goto done;
968
969 if (!TEST_true(EVP_PKEY_keygen_init(kctx)))
970 goto done;
971
972 if (!TEST_true(EVP_PKEY_keygen(kctx, &pkey)))
973 goto done;
974
975 if (!TEST_true(EVP_PKEY_set_alias_type(pkey, EVP_PKEY_SM2)))
976 goto done;
977
978 if (!TEST_ptr(md_ctx = EVP_MD_CTX_new()))
979 goto done;
980
981 if (!TEST_ptr(md_ctx_verify = EVP_MD_CTX_new()))
982 goto done;
983
4803717f
PY
984 if (!TEST_ptr(sctx = EVP_PKEY_CTX_new(pkey, NULL)))
985 goto done;
986
987 EVP_MD_CTX_set_pkey_ctx(md_ctx, sctx);
988 EVP_MD_CTX_set_pkey_ctx(md_ctx_verify, sctx);
989
990 if (!TEST_int_gt(EVP_PKEY_CTX_set1_id(sctx, sm2_id, sizeof(sm2_id)), 0))
991 goto done;
992
ddb634fe
JL
993 if (!TEST_true(EVP_DigestSignInit(md_ctx, NULL, EVP_sm3(), NULL, pkey)))
994 goto done;
995
996 if(!TEST_true(EVP_DigestSignUpdate(md_ctx, kMsg, sizeof(kMsg))))
997 goto done;
998
999 /* Determine the size of the signature. */
1000 if (!TEST_true(EVP_DigestSignFinal(md_ctx, NULL, &sig_len)))
1001 goto done;
1002
ddb634fe
JL
1003 if (!TEST_ptr(sig = OPENSSL_malloc(sig_len)))
1004 goto done;
1005
1006 if (!TEST_true(EVP_DigestSignFinal(md_ctx, sig, &sig_len)))
1007 goto done;
1008
1009 /* Ensure that the signature round-trips. */
1010
1011 if (!TEST_true(EVP_DigestVerifyInit(md_ctx_verify, NULL, EVP_sm3(), NULL, pkey)))
1012 goto done;
1013
1014 if (!TEST_true(EVP_DigestVerifyUpdate(md_ctx_verify, kMsg, sizeof(kMsg))))
1015 goto done;
1016
1017 if (!TEST_true(EVP_DigestVerifyFinal(md_ctx_verify, sig, sig_len)))
1018 goto done;
1019
1020 /* now check encryption/decryption */
1021
1022 if (!TEST_ptr(cctx = EVP_PKEY_CTX_new(pkey, NULL)))
1023 goto done;
1024
1025 if (!TEST_true(EVP_PKEY_encrypt_init(cctx)))
1026 goto done;
1027
1028 if (!TEST_true(EVP_PKEY_encrypt(cctx, ciphertext, &ctext_len, kMsg, sizeof(kMsg))))
1029 goto done;
1030
1031 if (!TEST_true(EVP_PKEY_decrypt_init(cctx)))
1032 goto done;
1033
1034 if (!TEST_true(EVP_PKEY_decrypt(cctx, plaintext, &ptext_len, ciphertext, ctext_len)))
1035 goto done;
1036
1037 if (!TEST_true(ptext_len == sizeof(kMsg)))
1038 goto done;
1039
1040 if (!TEST_true(memcmp(plaintext, kMsg, sizeof(kMsg)) == 0))
1041 goto done;
1042
1043 ret = 1;
1044done:
1045 EVP_PKEY_CTX_free(pctx);
1046 EVP_PKEY_CTX_free(kctx);
4803717f 1047 EVP_PKEY_CTX_free(sctx);
ddb634fe
JL
1048 EVP_PKEY_CTX_free(cctx);
1049 EVP_PKEY_free(pkey);
1050 EVP_PKEY_free(params);
1051 EVP_MD_CTX_free(md_ctx);
1052 EVP_MD_CTX_free(md_ctx_verify);
1053 OPENSSL_free(sig);
1054 return ret;
1055}
1056
1057#endif
1058
bb5f281a
MC
1059static struct keys_st {
1060 int type;
1061 char *priv;
1062 char *pub;
1063} keys[] = {
1064 {
1065 EVP_PKEY_HMAC, "0123456789", NULL
1066 }, {
1067 EVP_PKEY_POLY1305, "01234567890123456789012345678901", NULL
1068 }, {
1069 EVP_PKEY_SIPHASH, "0123456789012345", NULL
896dcb80
MC
1070 },
1071#ifndef OPENSSL_NO_EC
1072 {
bb5f281a
MC
1073 EVP_PKEY_X25519, "01234567890123456789012345678901",
1074 "abcdefghijklmnopqrstuvwxyzabcdef"
1075 }, {
1076 EVP_PKEY_ED25519, "01234567890123456789012345678901",
1077 "abcdefghijklmnopqrstuvwxyzabcdef"
1078 }, {
1079 EVP_PKEY_X448,
1080 "01234567890123456789012345678901234567890123456789012345",
1081 "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
1082 }, {
1083 EVP_PKEY_ED448,
1084 "012345678901234567890123456789012345678901234567890123456",
1085 "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcde"
1086 }
896dcb80 1087#endif
bb5f281a
MC
1088};
1089
86dc26ba 1090static int test_set_get_raw_keys_int(int tst, int pub, int uselibctx)
bb5f281a
MC
1091{
1092 int ret = 0;
1093 unsigned char buf[80];
1094 unsigned char *in;
1095 size_t inlen, len = 0;
1096 EVP_PKEY *pkey;
1097
1098 /* Check if this algorithm supports public keys */
1099 if (keys[tst].pub == NULL)
1100 return 1;
1101
1102 memset(buf, 0, sizeof(buf));
1103
1104 if (pub) {
1105 inlen = strlen(keys[tst].pub);
1106 in = (unsigned char *)keys[tst].pub;
86dc26ba
MC
1107 if (uselibctx) {
1108 pkey = EVP_PKEY_new_raw_public_key_with_libctx(
1109 testctx,
1110 OBJ_nid2sn(keys[tst].type),
1111 NULL,
1112 in,
1113 inlen);
1114 } else {
1115 pkey = EVP_PKEY_new_raw_public_key(keys[tst].type,
1116 NULL,
1117 in,
1118 inlen);
1119 }
bb5f281a
MC
1120 } else {
1121 inlen = strlen(keys[tst].priv);
1122 in = (unsigned char *)keys[tst].priv;
86dc26ba
MC
1123 if (uselibctx) {
1124 pkey = EVP_PKEY_new_raw_private_key_with_libctx(
1125 testctx, OBJ_nid2sn(keys[tst].type),
1126 NULL,
1127 in,
1128 inlen);
1129 } else {
1130 pkey = EVP_PKEY_new_raw_private_key(keys[tst].type,
1131 NULL,
1132 in,
1133 inlen);
1134 }
bb5f281a
MC
1135 }
1136
1137 if (!TEST_ptr(pkey)
1138 || (!pub && !TEST_true(EVP_PKEY_get_raw_private_key(pkey, NULL, &len)))
1139 || (pub && !TEST_true(EVP_PKEY_get_raw_public_key(pkey, NULL, &len)))
1140 || !TEST_true(len == inlen)
1141 || (!pub && !TEST_true(EVP_PKEY_get_raw_private_key(pkey, buf, &len)))
1142 || (pub && !TEST_true(EVP_PKEY_get_raw_public_key(pkey, buf, &len)))
1143 || !TEST_mem_eq(in, inlen, buf, len))
1144 goto done;
1145
1146 ret = 1;
1147 done:
1148 EVP_PKEY_free(pkey);
1149 return ret;
1150}
1151
1152static int test_set_get_raw_keys(int tst)
1153{
86dc26ba
MC
1154 return test_set_get_raw_keys_int(tst, 0, 0)
1155 && test_set_get_raw_keys_int(tst, 0, 1)
1156 && test_set_get_raw_keys_int(tst, 1, 0)
1157 && test_set_get_raw_keys_int(tst, 1, 1);
bb5f281a
MC
1158}
1159
41bbba53 1160#ifndef OPENSSL_NO_DEPRECATED_3_0
2aee35d3
PY
1161static int pkey_custom_check(EVP_PKEY *pkey)
1162{
1163 return 0xbeef;
1164}
1165
b0004708
PY
1166static int pkey_custom_pub_check(EVP_PKEY *pkey)
1167{
1168 return 0xbeef;
1169}
1170
1171static int pkey_custom_param_check(EVP_PKEY *pkey)
1172{
1173 return 0xbeef;
1174}
1175
2aee35d3 1176static EVP_PKEY_METHOD *custom_pmeth;
41bbba53 1177#endif
2aee35d3
PY
1178
1179static int test_EVP_PKEY_check(int i)
1180{
1181 int ret = 0;
1182 const unsigned char *p;
1183 EVP_PKEY *pkey = NULL;
8a8bc665 1184#ifndef OPENSSL_NO_EC
b0004708 1185 EC_KEY *eckey = NULL;
8a8bc665 1186#endif
2aee35d3 1187 EVP_PKEY_CTX *ctx = NULL;
41bbba53 1188#ifndef OPENSSL_NO_DEPRECATED_3_0
2aee35d3 1189 EVP_PKEY_CTX *ctx2 = NULL;
41bbba53 1190#endif
2aee35d3
PY
1191 const APK_DATA *ak = &keycheckdata[i];
1192 const unsigned char *input = ak->kder;
1193 size_t input_len = ak->size;
1194 int expected_id = ak->evptype;
1195 int expected_check = ak->check;
b0004708
PY
1196 int expected_pub_check = ak->pub_check;
1197 int expected_param_check = ak->param_check;
1198 int type = ak->type;
1199 BIO *pubkey = NULL;
2aee35d3
PY
1200
1201 p = input;
b0004708 1202
35db366c
DMSP
1203 switch (type) {
1204 case 0:
1205 if (!TEST_ptr(pkey = d2i_AutoPrivateKey(NULL, &p, input_len))
1206 || !TEST_ptr_eq(p, input + input_len)
1207 || !TEST_int_eq(EVP_PKEY_id(pkey), expected_id))
1208 goto done;
1209 break;
8a8bc665 1210#ifndef OPENSSL_NO_EC
35db366c
DMSP
1211 case 1:
1212 if (!TEST_ptr(pubkey = BIO_new_mem_buf(input, input_len))
1213 || !TEST_ptr(eckey = d2i_EC_PUBKEY_bio(pubkey, NULL))
1214 || !TEST_ptr(pkey = EVP_PKEY_new())
1215 || !TEST_true(EVP_PKEY_assign_EC_KEY(pkey, eckey)))
1216 goto done;
1217 break;
1218 case 2:
1219 if (!TEST_ptr(eckey = d2i_ECParameters(NULL, &p, input_len))
1220 || !TEST_ptr_eq(p, input + input_len)
1221 || !TEST_ptr(pkey = EVP_PKEY_new())
1222 || !TEST_true(EVP_PKEY_assign_EC_KEY(pkey, eckey)))
1223 goto done;
1224 break;
8a8bc665 1225#endif
35db366c
DMSP
1226 default:
1227 return 0;
1228 }
2aee35d3
PY
1229
1230 if (!TEST_ptr(ctx = EVP_PKEY_CTX_new(pkey, NULL)))
1231 goto done;
1232
b0004708
PY
1233 if (!TEST_int_eq(EVP_PKEY_check(ctx), expected_check))
1234 goto done;
1235
1236 if (!TEST_int_eq(EVP_PKEY_public_check(ctx), expected_pub_check))
1237 goto done;
1238
1239 if (!TEST_int_eq(EVP_PKEY_param_check(ctx), expected_param_check))
1240 goto done;
2aee35d3 1241
41bbba53 1242#ifndef OPENSSL_NO_DEPRECATED_3_0
2aee35d3
PY
1243 ctx2 = EVP_PKEY_CTX_new_id(0xdefaced, NULL);
1244 /* assign the pkey directly, as an internal test */
1245 EVP_PKEY_up_ref(pkey);
1246 ctx2->pkey = pkey;
1247
1248 if (!TEST_int_eq(EVP_PKEY_check(ctx2), 0xbeef))
1249 goto done;
1250
b0004708
PY
1251 if (!TEST_int_eq(EVP_PKEY_public_check(ctx2), 0xbeef))
1252 goto done;
1253
1254 if (!TEST_int_eq(EVP_PKEY_param_check(ctx2), 0xbeef))
1255 goto done;
41bbba53 1256#endif
b0004708 1257
2aee35d3
PY
1258 ret = 1;
1259
1260 done:
1261 EVP_PKEY_CTX_free(ctx);
41bbba53 1262#ifndef OPENSSL_NO_DEPRECATED_3_0
2aee35d3 1263 EVP_PKEY_CTX_free(ctx2);
41bbba53 1264#endif
2aee35d3 1265 EVP_PKEY_free(pkey);
b0004708 1266 BIO_free(pubkey);
2aee35d3
PY
1267 return ret;
1268}
1269
fab8fde3 1270#ifndef OPENSSL_NO_CMAC
e5bc0ce2
MC
1271static int get_cmac_val(EVP_PKEY *pkey, unsigned char *mac)
1272{
1273 EVP_MD_CTX *mdctx = EVP_MD_CTX_new();
1274 const char msg[] = "Hello World";
1275 size_t maclen;
1276 int ret = 1;
1277
1278 if (!TEST_ptr(mdctx)
1279 || !TEST_true(EVP_DigestSignInit(mdctx, NULL, NULL, NULL, pkey))
1280 || !TEST_true(EVP_DigestSignUpdate(mdctx, msg, sizeof(msg)))
1281 || !TEST_true(EVP_DigestSignFinal(mdctx, mac, &maclen))
1282 || !TEST_size_t_eq(maclen, AES_BLOCK_SIZE))
1283 ret = 0;
1284
1285 EVP_MD_CTX_free(mdctx);
1286
1287 return ret;
1288}
a87820e1
RL
1289static int test_CMAC_keygen(void)
1290{
e5bc0ce2
MC
1291 static unsigned char key[] = {
1292 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
1293 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1294 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
1295 };
a87820e1
RL
1296 /*
1297 * This is a legacy method for CMACs, but should still work.
1298 * This verifies that it works without an ENGINE.
1299 */
1300 EVP_PKEY_CTX *kctx = EVP_PKEY_CTX_new_id(EVP_PKEY_CMAC, NULL);
1301 int ret = 0;
e5bc0ce2
MC
1302 EVP_PKEY *pkey = NULL;
1303 unsigned char mac[AES_BLOCK_SIZE], mac2[AES_BLOCK_SIZE];
1304
1305 /* Test a CMAC key created using the "generated" method */
1306 if (!TEST_int_gt(EVP_PKEY_keygen_init(kctx), 0)
1307 || !TEST_int_gt(EVP_PKEY_CTX_ctrl(kctx, -1, EVP_PKEY_OP_KEYGEN,
1308 EVP_PKEY_CTRL_CIPHER,
1309 0, (void *)EVP_aes_256_ecb()), 0)
1310 || !TEST_int_gt(EVP_PKEY_CTX_ctrl(kctx, -1, EVP_PKEY_OP_KEYGEN,
1311 EVP_PKEY_CTRL_SET_MAC_KEY,
1312 sizeof(key), (void *)key), 0)
1313 || !TEST_int_gt(EVP_PKEY_keygen(kctx, &pkey), 0)
1314 || !TEST_ptr(pkey)
1315 || !TEST_true(get_cmac_val(pkey, mac)))
1316 goto done;
a87820e1 1317
e5bc0ce2
MC
1318 EVP_PKEY_free(pkey);
1319
1320 /*
1321 * Test a CMAC key using the direct method, and compare with the mac
1322 * created above.
1323 */
1324 pkey = EVP_PKEY_new_CMAC_key(NULL, key, sizeof(key), EVP_aes_256_ecb());
1325 if (!TEST_ptr(pkey)
1326 || !TEST_true(get_cmac_val(pkey, mac2))
1327 || !TEST_mem_eq(mac, sizeof(mac), mac2, sizeof(mac2)))
a87820e1 1328 goto done;
e5bc0ce2 1329
a87820e1
RL
1330 ret = 1;
1331
1332 done:
e5bc0ce2 1333 EVP_PKEY_free(pkey);
a87820e1
RL
1334 EVP_PKEY_CTX_free(kctx);
1335 return ret;
1336}
fab8fde3 1337#endif
a87820e1 1338
10d5b415
MC
1339static int test_HKDF(void)
1340{
1341 EVP_PKEY_CTX *pctx;
1342 unsigned char out[20];
1343 size_t outlen;
1344 int i, ret = 0;
1345 unsigned char salt[] = "0123456789";
1346 unsigned char key[] = "012345678901234567890123456789";
1347 unsigned char info[] = "infostring";
1348 const unsigned char expected[] = {
1349 0xe5, 0x07, 0x70, 0x7f, 0xc6, 0x78, 0xd6, 0x54, 0x32, 0x5f, 0x7e, 0xc5,
1350 0x7b, 0x59, 0x3e, 0xd8, 0x03, 0x6b, 0xed, 0xca
1351 };
1352 size_t expectedlen = sizeof(expected);
1353
1354 if (!TEST_ptr(pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF, NULL)))
1355 goto done;
1356
1357 /* We do this twice to test reuse of the EVP_PKEY_CTX */
1358 for (i = 0; i < 2; i++) {
1359 outlen = sizeof(out);
1360 memset(out, 0, outlen);
1361
1362 if (!TEST_int_gt(EVP_PKEY_derive_init(pctx), 0)
1363 || !TEST_int_gt(EVP_PKEY_CTX_set_hkdf_md(pctx, EVP_sha256()), 0)
1364 || !TEST_int_gt(EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt,
1365 sizeof(salt) - 1), 0)
1366 || !TEST_int_gt(EVP_PKEY_CTX_set1_hkdf_key(pctx, key,
1367 sizeof(key) - 1), 0)
1368 || !TEST_int_gt(EVP_PKEY_CTX_add1_hkdf_info(pctx, info,
1369 sizeof(info) - 1), 0)
1370 || !TEST_int_gt(EVP_PKEY_derive(pctx, out, &outlen), 0)
1371 || !TEST_mem_eq(out, outlen, expected, expectedlen))
1372 goto done;
1373 }
1374
1375 ret = 1;
1376
1377 done:
1378 EVP_PKEY_CTX_free(pctx);
1379
1380 return ret;
1381}
1382
2cd3ebc7
BK
1383static int test_emptyikm_HKDF(void)
1384{
1385 EVP_PKEY_CTX *pctx;
1386 unsigned char out[20];
1387 size_t outlen;
1388 int ret = 0;
1389 unsigned char salt[] = "9876543210";
1390 unsigned char key[] = "";
1391 unsigned char info[] = "stringinfo";
1392 const unsigned char expected[] = {
1393 0x68, 0x81, 0xa5, 0x3e, 0x5b, 0x9c, 0x7b, 0x6f, 0x2e, 0xec, 0xc8, 0x47,
1394 0x7c, 0xfa, 0x47, 0x35, 0x66, 0x82, 0x15, 0x30
1395 };
1396 size_t expectedlen = sizeof(expected);
1397
1398 if (!TEST_ptr(pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF, NULL)))
1399 goto done;
1400
1401 outlen = sizeof(out);
1402 memset(out, 0, outlen);
1403
1404 if (!TEST_int_gt(EVP_PKEY_derive_init(pctx), 0)
1405 || !TEST_int_gt(EVP_PKEY_CTX_set_hkdf_md(pctx, EVP_sha256()), 0)
1406 || !TEST_int_gt(EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt,
1407 sizeof(salt) - 1), 0)
1408 || !TEST_int_gt(EVP_PKEY_CTX_set1_hkdf_key(pctx, key,
1409 sizeof(key) - 1), 0)
1410 || !TEST_int_gt(EVP_PKEY_CTX_add1_hkdf_info(pctx, info,
1411 sizeof(info) - 1), 0)
1412 || !TEST_int_gt(EVP_PKEY_derive(pctx, out, &outlen), 0)
1413 || !TEST_mem_eq(out, outlen, expected, expectedlen))
1414 goto done;
1415
1416 ret = 1;
1417
1418 done:
1419 EVP_PKEY_CTX_free(pctx);
1420
1421 return ret;
1422}
1423
5dc40a83
BE
1424#ifndef OPENSSL_NO_EC
1425static int test_X509_PUBKEY_inplace(void)
1426{
1427 int ret = 0;
1428 X509_PUBKEY *xp = NULL;
1429 const unsigned char *p = kExampleECPubKeyDER;
1430 size_t input_len = sizeof(kExampleECPubKeyDER);
1431
1432 if (!TEST_ptr(xp = d2i_X509_PUBKEY(NULL, &p, input_len)))
1433 goto done;
1434
1435 if (!TEST_ptr(X509_PUBKEY_get0(xp)))
1436 goto done;
1437
1438 p = kExampleBadECPubKeyDER;
1439 input_len = sizeof(kExampleBadECPubKeyDER);
1440
1441 if (!TEST_ptr(xp = d2i_X509_PUBKEY(&xp, &p, input_len)))
1442 goto done;
1443
1444 if (!TEST_true(X509_PUBKEY_get0(xp) == NULL))
1445 goto done;
1446
1447 ret = 1;
1448
1449done:
1450 X509_PUBKEY_free(xp);
1451 return ret;
1452}
7bb82f92 1453#endif /* OPENSSL_NO_EC */
784883fc 1454
9c45222d 1455/* Test getting and setting parameters on an EVP_PKEY_CTX */
f54a4101 1456static int test_EVP_PKEY_CTX_get_set_params(EVP_PKEY *pkey)
9c45222d 1457{
9a071fef 1458 EVP_MD_CTX *mdctx = NULL;
9c45222d 1459 EVP_PKEY_CTX *ctx = NULL;
9c45222d 1460 const OSSL_PARAM *params;
00bc1ad9 1461 OSSL_PARAM ourparams[2], *param = ourparams, *param_md;
9c45222d
MC
1462 int ret = 0;
1463 const EVP_MD *md;
00bc1ad9 1464 char mdname[OSSL_MAX_NAME_SIZE];
9a071fef 1465 char ssl3ms[48];
9c45222d 1466
9c45222d
MC
1467 /* Initialise a sign operation */
1468 ctx = EVP_PKEY_CTX_new(pkey, NULL);
9c45222d 1469 if (!TEST_ptr(ctx)
c9c4a356 1470 || !TEST_int_gt(EVP_PKEY_sign_init(ctx), 0))
9c45222d
MC
1471 goto err;
1472
1473 /*
f54a4101 1474 * We should be able to query the parameters now.
9c45222d
MC
1475 */
1476 params = EVP_PKEY_CTX_settable_params(ctx);
1477 if (!TEST_ptr(params)
0cb3f4f9
RL
1478 || !TEST_ptr(OSSL_PARAM_locate_const(params,
1479 OSSL_SIGNATURE_PARAM_DIGEST)))
9c45222d
MC
1480 goto err;
1481
9c45222d
MC
1482 params = EVP_PKEY_CTX_gettable_params(ctx);
1483 if (!TEST_ptr(params)
0cb3f4f9
RL
1484 || !TEST_ptr(OSSL_PARAM_locate_const(params,
1485 OSSL_SIGNATURE_PARAM_ALGORITHM_ID))
0cb3f4f9
RL
1486 || !TEST_ptr(OSSL_PARAM_locate_const(params,
1487 OSSL_SIGNATURE_PARAM_DIGEST)))
9c45222d
MC
1488 goto err;
1489
1490 /*
1491 * Test getting and setting params via EVP_PKEY_CTX_set_params() and
1492 * EVP_PKEY_CTX_get_params()
1493 */
00bc1ad9
RL
1494 strcpy(mdname, "SHA512");
1495 param_md = param;
1496 *param++ = OSSL_PARAM_construct_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST,
1497 mdname, 0);
9c45222d
MC
1498 *param++ = OSSL_PARAM_construct_end();
1499
1500 if (!TEST_true(EVP_PKEY_CTX_set_params(ctx, ourparams)))
1501 goto err;
1502
00bc1ad9
RL
1503 mdname[0] = '\0';
1504 *param_md = OSSL_PARAM_construct_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST,
1505 mdname, sizeof(mdname));
9c45222d 1506 if (!TEST_true(EVP_PKEY_CTX_get_params(ctx, ourparams))
00bc1ad9 1507 || !TEST_str_eq(mdname, "SHA512"))
9c45222d
MC
1508 goto err;
1509
1510 /*
1511 * Test the TEST_PKEY_CTX_set_signature_md() and
1512 * TEST_PKEY_CTX_get_signature_md() functions
1513 */
1514 if (!TEST_int_gt(EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()), 0)
1515 || !TEST_int_gt(EVP_PKEY_CTX_get_signature_md(ctx, &md), 0)
1516 || !TEST_ptr_eq(md, EVP_sha256()))
1517 goto err;
1518
9a071fef
MC
1519 /*
1520 * Test getting MD parameters via an associated EVP_PKEY_CTX
1521 */
1522 mdctx = EVP_MD_CTX_new();
1523 if (!TEST_ptr(mdctx)
0ab18e79
SL
1524 || !TEST_true(EVP_DigestSignInit_with_libctx(mdctx, NULL,
1525 "SHA1", NULL, NULL,
1526 pkey)))
9a071fef
MC
1527 goto err;
1528
1529 /*
1530 * We now have an EVP_MD_CTX with an EVP_PKEY_CTX inside it. We should be
1531 * able to obtain the digest's settable parameters from the provider.
1532 */
1533 params = EVP_MD_CTX_settable_params(mdctx);
1534 if (!TEST_ptr(params)
1535 || !TEST_int_eq(strcmp(params[0].key, OSSL_DIGEST_PARAM_SSL3_MS), 0)
1536 /* The final key should be NULL */
1537 || !TEST_ptr_null(params[1].key))
1538 goto err;
1539
1540 param = ourparams;
1541 memset(ssl3ms, 0, sizeof(ssl3ms));
1542 *param++ = OSSL_PARAM_construct_octet_string(OSSL_DIGEST_PARAM_SSL3_MS,
1543 ssl3ms, sizeof(ssl3ms));
1544 *param++ = OSSL_PARAM_construct_end();
1545
1546 if (!TEST_true(EVP_MD_CTX_set_params(mdctx, ourparams)))
1547 goto err;
1548
9c45222d
MC
1549 ret = 1;
1550
1551 err:
9a071fef 1552 EVP_MD_CTX_free(mdctx);
9c45222d 1553 EVP_PKEY_CTX_free(ctx);
f54a4101
RL
1554
1555 return ret;
1556}
1557
1558#ifndef OPENSSL_NO_DSA
1559static int test_DSA_get_set_params(void)
1560{
1561 DSA *dsa = NULL;
1562 BIGNUM *p = NULL, *q = NULL, *g = NULL, *pub = NULL, *priv = NULL;
1563 EVP_PKEY *pkey = NULL;
1564 int ret = 0;
1565
1566 /*
1567 * Setup the parameters for our DSA object. For our purposes they don't
1568 * have to actually be *valid* parameters. We just need to set something.
1569 */
1570 dsa = DSA_new();
1571 p = BN_new();
1572 q = BN_new();
1573 g = BN_new();
1574 pub = BN_new();
1575 priv = BN_new();
1576 if (!TEST_ptr(dsa)
1577 || !TEST_ptr(p)
1578 || !TEST_ptr(q)
1579 || !TEST_ptr(g)
1580 || !TEST_ptr(pub)
1581 || !DSA_set0_pqg(dsa, p, q, g)
1582 || !DSA_set0_key(dsa, pub, priv))
1583 goto err;
1584 p = q = g = pub = priv = NULL;
1585
1586 pkey = EVP_PKEY_new();
1587 if (!TEST_ptr(pkey)
1588 || !TEST_true(EVP_PKEY_assign_DSA(pkey, dsa)))
1589 goto err;
1590
1591 dsa = NULL;
1592
1593 ret = test_EVP_PKEY_CTX_get_set_params(pkey);
1594
1595 err:
9c45222d
MC
1596 EVP_PKEY_free(pkey);
1597 DSA_free(dsa);
1598 BN_free(p);
1599 BN_free(q);
1600 BN_free(g);
cd32a0f5
RL
1601 BN_free(pub);
1602 BN_free(priv);
9c45222d
MC
1603
1604 return ret;
1605}
8d0f8c81 1606#endif
9c45222d 1607
f54a4101
RL
1608static int test_RSA_get_set_params(void)
1609{
1610 RSA *rsa = NULL;
1611 BIGNUM *n = NULL, *e = NULL, *d = NULL;
1612 EVP_PKEY *pkey = NULL;
1613 int ret = 0;
1614
1615 /*
1616 * Setup the parameters for our RSA object. For our purposes they don't
1617 * have to actually be *valid* parameters. We just need to set something.
1618 */
1619 rsa = RSA_new();
1620 n = BN_new();
1621 e = BN_new();
1622 d = BN_new();
1623 if (!TEST_ptr(rsa)
1624 || !TEST_ptr(n)
1625 || !TEST_ptr(e)
1626 || !TEST_ptr(d)
1627 || !RSA_set0_key(rsa, n, e, d))
1628 goto err;
1629 n = e = d = NULL;
1630
1631 pkey = EVP_PKEY_new();
1632 if (!TEST_ptr(pkey)
1633 || !TEST_true(EVP_PKEY_assign_RSA(pkey, rsa)))
1634 goto err;
1635
1636 rsa = NULL;
1637
1638 ret = test_EVP_PKEY_CTX_get_set_params(pkey);
1639
1640 err:
1641 EVP_PKEY_free(pkey);
1642 RSA_free(rsa);
1643 BN_free(n);
1644 BN_free(e);
1645 BN_free(d);
1646
1647 return ret;
1648}
1649
b4be6937
MC
1650#if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
1651static int test_decrypt_null_chunks(void)
1652{
1653 EVP_CIPHER_CTX* ctx = NULL;
1654 const unsigned char key[32] = {
1655 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
1656 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1657 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1
1658 };
1659 unsigned char iv[12] = {
1660 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b
1661 };
1662 unsigned char msg[] = "It was the best of times, it was the worst of times";
1663 unsigned char ciphertext[80];
1664 unsigned char plaintext[80];
1665 /* We initialise tmp to a non zero value on purpose */
1666 int ctlen, ptlen, tmp = 99;
1667 int ret = 0;
1668 const int enc_offset = 10, dec_offset = 20;
1669
1670 if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new())
1671 || !TEST_true(EVP_EncryptInit_ex(ctx, EVP_chacha20_poly1305(), NULL,
1672 key, iv))
1673 || !TEST_true(EVP_EncryptUpdate(ctx, ciphertext, &ctlen, msg,
1674 enc_offset))
1675 /* Deliberate add a zero length update */
1676 || !TEST_true(EVP_EncryptUpdate(ctx, ciphertext + ctlen, &tmp, NULL,
1677 0))
1678 || !TEST_int_eq(tmp, 0)
1679 || !TEST_true(EVP_EncryptUpdate(ctx, ciphertext + ctlen, &tmp,
1680 msg + enc_offset,
1681 sizeof(msg) - enc_offset))
1682 || !TEST_int_eq(ctlen += tmp, sizeof(msg))
1683 || !TEST_true(EVP_EncryptFinal(ctx, ciphertext + ctlen, &tmp))
1684 || !TEST_int_eq(tmp, 0))
1685 goto err;
1686
1687 /* Deliberately initialise tmp to a non zero value */
1688 tmp = 99;
1689 if (!TEST_true(EVP_DecryptInit_ex(ctx, EVP_chacha20_poly1305(), NULL, key,
1690 iv))
1691 || !TEST_true(EVP_DecryptUpdate(ctx, plaintext, &ptlen, ciphertext,
1692 dec_offset))
1693 /*
1694 * Deliberately add a zero length update. We also deliberately do
1695 * this at a different offset than for encryption.
1696 */
1697 || !TEST_true(EVP_DecryptUpdate(ctx, plaintext + ptlen, &tmp, NULL,
1698 0))
1699 || !TEST_int_eq(tmp, 0)
1700 || !TEST_true(EVP_DecryptUpdate(ctx, plaintext + ptlen, &tmp,
1701 ciphertext + dec_offset,
1702 ctlen - dec_offset))
1703 || !TEST_int_eq(ptlen += tmp, sizeof(msg))
1704 || !TEST_true(EVP_DecryptFinal(ctx, plaintext + ptlen, &tmp))
1705 || !TEST_int_eq(tmp, 0)
1706 || !TEST_mem_eq(msg, sizeof(msg), plaintext, ptlen))
1707 goto err;
1708
1709 ret = 1;
1710 err:
1711 EVP_CIPHER_CTX_free(ctx);
1712 return ret;
1713}
1714#endif /* !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) */
1715
501fcfb8 1716#ifndef OPENSSL_NO_DH
e295de1d
MC
1717static int test_EVP_PKEY_set1_DH(void)
1718{
ca2bf555
SL
1719 DH *x942dh = NULL, *noqdh = NULL;
1720 EVP_PKEY *pkey1 = NULL, *pkey2 = NULL;
e295de1d 1721 int ret = 0;
ca2bf555
SL
1722 BIGNUM *p, *g = NULL;
1723
1724 if (!TEST_ptr(p = BN_new())
1725 || !TEST_ptr(g = BN_new())
1726 || !BN_set_word(p, 9999)
1727 || !BN_set_word(g, 2)
1728 || !TEST_ptr(noqdh = DH_new())
1729 || !DH_set0_pqg(noqdh, p, NULL, g))
1730 goto err;
1731 p = g = NULL;
e295de1d
MC
1732
1733 x942dh = DH_get_2048_256();
e295de1d
MC
1734 pkey1 = EVP_PKEY_new();
1735 pkey2 = EVP_PKEY_new();
1736 if (!TEST_ptr(x942dh)
ca2bf555 1737 || !TEST_ptr(noqdh)
e295de1d
MC
1738 || !TEST_ptr(pkey1)
1739 || !TEST_ptr(pkey2))
1740 goto err;
1741
1742 if(!TEST_true(EVP_PKEY_set1_DH(pkey1, x942dh))
1743 || !TEST_int_eq(EVP_PKEY_id(pkey1), EVP_PKEY_DHX))
1744 goto err;
1745
ca2bf555 1746 if(!TEST_true(EVP_PKEY_set1_DH(pkey2, noqdh))
e295de1d
MC
1747 || !TEST_int_eq(EVP_PKEY_id(pkey2), EVP_PKEY_DH))
1748 goto err;
1749
1750 ret = 1;
1751 err:
ca2bf555
SL
1752 BN_free(p);
1753 BN_free(g);
e295de1d
MC
1754 EVP_PKEY_free(pkey1);
1755 EVP_PKEY_free(pkey2);
1756 DH_free(x942dh);
ca2bf555 1757 DH_free(noqdh);
e295de1d
MC
1758
1759 return ret;
1760}
501fcfb8 1761#endif
e295de1d 1762
8a5cb596
RL
1763/*
1764 * We test what happens with an empty template. For the sake of this test,
1765 * the template must be ignored, and we know that's the case for RSA keys
1766 * (this might arguably be a misfeature, but that's what we currently do,
1767 * even in provider code, since that's how the legacy RSA implementation
1768 * does things)
1769 */
1770static int test_keygen_with_empty_template(int n)
1771{
1772 EVP_PKEY_CTX *ctx = NULL;
1773 EVP_PKEY *pkey = NULL;
1774 EVP_PKEY *tkey = NULL;
1775 int ret = 0;
1776
1777 switch (n) {
1778 case 0:
1779 /* We do test with no template at all as well */
1780 if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL)))
1781 goto err;
1782 break;
1783 case 1:
1784 /* Here we create an empty RSA key that serves as our template */
1785 if (!TEST_ptr(tkey = EVP_PKEY_new())
1786 || !TEST_true(EVP_PKEY_set_type(tkey, EVP_PKEY_RSA))
1787 || !TEST_ptr(ctx = EVP_PKEY_CTX_new(tkey, NULL)))
1788 goto err;
1789 break;
1790 }
1791
1792 if (!TEST_int_gt(EVP_PKEY_keygen_init(ctx), 0)
1793 || !TEST_int_gt(EVP_PKEY_keygen(ctx, &pkey), 0))
1794 goto err;
1795
1796 ret = 1;
1797 err:
1798 EVP_PKEY_CTX_free(ctx);
1799 EVP_PKEY_free(pkey);
1800 EVP_PKEY_free(tkey);
1801 return ret;
1802}
1803
5ddec6a7
MC
1804/*
1805 * Test that we fail if we attempt to use an algorithm that is not available
1806 * in the current library context (unless we are using an algorithm that should
1807 * be made available via legacy codepaths).
1808 */
1809static int test_pkey_ctx_fail_without_provider(int tst)
1810{
1811 OPENSSL_CTX *tmpctx = OPENSSL_CTX_new();
1812 OSSL_PROVIDER *nullprov = NULL;
1813 EVP_PKEY_CTX *pctx = NULL;
1814 int ret = 0;
1815
1816 if (!TEST_ptr(tmpctx))
1817 goto err;
1818
1819 nullprov = OSSL_PROVIDER_load(tmpctx, "null");
1820 if (!TEST_ptr(nullprov))
1821 goto err;
1822
1bf62504 1823 pctx = EVP_PKEY_CTX_new_from_name(tmpctx, tst == 0 ? "RSA" : "SM2", "");
5ddec6a7
MC
1824
1825 /* RSA is not available via any provider so we expect this to fail */
1826 if (tst == 0 && !TEST_ptr_null(pctx))
1827 goto err;
1828
1829 /*
1bf62504 1830 * SM2 is always available because it is implemented via legacy codepaths
5ddec6a7 1831 * and not in a provider at all. We expect this to pass.
1bf62504
MC
1832 * TODO(3.0): This can be removed once there are no more algorithms
1833 * available via legacy codepaths
5ddec6a7
MC
1834 */
1835 if (tst == 1 && !TEST_ptr(pctx))
1836 goto err;
1837
1838 ret = 1;
1839
1840 err:
1841 EVP_PKEY_CTX_free(pctx);
1842 OSSL_PROVIDER_unload(nullprov);
1843 OPENSSL_CTX_free(tmpctx);
1844 return ret;
1845}
1846
1c19ff3c
P
1847static int test_rand_agglomeration(void)
1848{
1849 EVP_RAND *rand;
1850 EVP_RAND_CTX *ctx;
1851 OSSL_PARAM params[3], *p = params;
1852 int res;
1853 unsigned int step = 7;
1854 static unsigned char seed[] = "It does not matter how slowly you go "
1855 "as long as you do not stop.";
1856 unsigned char out[sizeof(seed)];
1857
1858 if (!TEST_int_ne(sizeof(seed) % step, 0)
1859 || !TEST_ptr(rand = EVP_RAND_fetch(NULL, "TEST-RAND", NULL)))
1860 return 0;
1861 ctx = EVP_RAND_CTX_new(rand, NULL);
1862 EVP_RAND_free(rand);
1863 if (!TEST_ptr(ctx))
1864 return 0;
1865
1866 memset(out, 0, sizeof(out));
1867 *p++ = OSSL_PARAM_construct_octet_string(OSSL_RAND_PARAM_TEST_ENTROPY,
1868 seed, sizeof(seed));
1869 *p++ = OSSL_PARAM_construct_uint(OSSL_DRBG_PARAM_MAX_REQUEST, &step);
1870 *p = OSSL_PARAM_construct_end();
1871 res = TEST_true(EVP_RAND_set_ctx_params(ctx, params))
1872 && TEST_true(EVP_RAND_generate(ctx, out, sizeof(out), 0, 1, NULL, 0))
1873 && TEST_mem_eq(seed, sizeof(seed), out, sizeof(out));
1874 EVP_RAND_CTX_free(ctx);
1875 return res;
1876}
1877
440b852a
BK
1878/*
1879 * Test that we correctly return the original or "running" IV after
1880 * an encryption operation.
1881 * Run multiple times for some different relevant algorithms/modes.
1882 */
1883static int test_evp_iv(int idx)
1884{
1885 int ret = 0;
1886 EVP_CIPHER_CTX *ctx = NULL;
1887 unsigned char key[16] = {0x4c, 0x43, 0xdb, 0xdd, 0x42, 0x73, 0x47, 0xd1,
1888 0xe5, 0x62, 0x7d, 0xcd, 0x4d, 0x76, 0x4d, 0x57};
1889 unsigned char init_iv[EVP_MAX_IV_LENGTH] =
1890 {0x57, 0x71, 0x7d, 0xad, 0xdb, 0x9b, 0x98, 0x82,
1891 0x5a, 0x55, 0x91, 0x81, 0x42, 0xa8, 0x89, 0x34};
1892 static const unsigned char msg[] = { 1, 2, 3, 4, 5, 6, 7, 8,
1893 9, 10, 11, 12, 13, 14, 15, 16 };
1894 unsigned char ciphertext[32], oiv[16], iv[16];
1895 unsigned char *ref_iv;
1896 unsigned char cbc_state[16] = {0x10, 0x2f, 0x05, 0xcc, 0xc2, 0x55, 0x72, 0xb9,
1897 0x88, 0xe6, 0x4a, 0x17, 0x10, 0x74, 0x22, 0x5e};
1898
1899 unsigned char ofb_state[16] = {0x76, 0xe6, 0x66, 0x61, 0xd0, 0x8a, 0xe4, 0x64,
1900 0xdd, 0x66, 0xbf, 0x00, 0xf0, 0xe3, 0x6f, 0xfd};
1901 unsigned char gcm_state[12] = {0x57, 0x71, 0x7d, 0xad, 0xdb, 0x9b,
1902 0x98, 0x82, 0x5a, 0x55, 0x91, 0x81};
1903 unsigned char ccm_state[7] = {0x57, 0x71, 0x7d, 0xad, 0xdb, 0x9b, 0x98};
1904#ifndef OPENSSL_NO_OCB
1905 unsigned char ocb_state[12] = {0x57, 0x71, 0x7d, 0xad, 0xdb, 0x9b,
1906 0x98, 0x82, 0x5a, 0x55, 0x91, 0x81};
1907#endif
1908 int len = sizeof(ciphertext);
1909 size_t ivlen, ref_len;
1910 const EVP_CIPHER *type = NULL;
1911
1912 switch(idx) {
1913 case 0:
1914 type = EVP_aes_128_cbc();
1915 /* FALLTHROUGH */
1916 case 5:
1917 type = (type != NULL) ? type :
1918 EVP_CIPHER_fetch(testctx, "aes-128-cbc", NULL);
1919 ref_iv = cbc_state;
1920 ref_len = sizeof(cbc_state);
1921 break;
1922 case 1:
1923 type = EVP_aes_128_ofb();
1924 /* FALLTHROUGH */
1925 case 6:
1926 type = (type != NULL) ? type :
1927 EVP_CIPHER_fetch(testctx, "aes-128-ofb", NULL);
1928 ref_iv = ofb_state;
1929 ref_len = sizeof(ofb_state);
1930 break;
1931 case 2:
1932 type = EVP_aes_128_gcm();
1933 /* FALLTHROUGH */
1934 case 7:
1935 type = (type != NULL) ? type :
1936 EVP_CIPHER_fetch(testctx, "aes-128-gcm", NULL);
1937 ref_iv = gcm_state;
1938 ref_len = sizeof(gcm_state);
1939 break;
1940 case 3:
1941 type = EVP_aes_128_ccm();
1942 /* FALLTHROUGH */
1943 case 8:
1944 type = (type != NULL) ? type :
1945 EVP_CIPHER_fetch(testctx, "aes-128-ccm", NULL);
1946 ref_iv = ccm_state;
1947 ref_len = sizeof(ccm_state);
1948 break;
1949#ifdef OPENSSL_NO_OCB
1950 case 4:
1951 case 9:
1952 return 1;
1953#else
1954 case 4:
1955 type = EVP_aes_128_ocb();
1956 /* FALLTHROUGH */
1957 case 9:
1958 type = (type != NULL) ? type :
1959 EVP_CIPHER_fetch(testctx, "aes-128-ocb", NULL);
1960 ref_iv = ocb_state;
1961 ref_len = sizeof(ocb_state);
1962 break;
1963#endif
1964 default:
1965 return 0;
1966 }
1967
1968 if (!TEST_ptr(type)
1969 || !TEST_ptr((ctx = EVP_CIPHER_CTX_new()))
1970 || !TEST_true(EVP_EncryptInit_ex(ctx, type, NULL, key, init_iv))
1971 || !TEST_true(EVP_EncryptUpdate(ctx, ciphertext, &len, msg,
1972 (int)sizeof(msg)))
1973 || !TEST_true(EVP_CIPHER_CTX_get_iv(ctx, oiv, sizeof(oiv)))
1974 || !TEST_true(EVP_CIPHER_CTX_get_iv_state(ctx, iv, sizeof(iv)))
1975 || !TEST_true(EVP_EncryptFinal_ex(ctx, ciphertext, &len)))
1976 goto err;
1977 ivlen = EVP_CIPHER_CTX_iv_length(ctx);
1978 if (!TEST_mem_eq(init_iv, ivlen, oiv, ivlen)
1979 || !TEST_mem_eq(ref_iv, ref_len, iv, ivlen))
1980 goto err;
1981
1982 ret = 1;
1983err:
1984 EVP_CIPHER_CTX_free(ctx);
1985 if (idx >= 5)
1986 EVP_CIPHER_free((EVP_CIPHER *)type);
1987 return ret;
1988}
1989
ad887416 1990int setup_tests(void)
71ea6b48 1991{
86dc26ba
MC
1992 testctx = OPENSSL_CTX_new();
1993
1994 if (!TEST_ptr(testctx))
1995 return 0;
1996
f9e504e8 1997 ADD_TEST(test_EVP_set_default_properties);
6d242fa5 1998 ADD_ALL_TESTS(test_EVP_DigestSignInit, 9);
adcd8e37 1999 ADD_TEST(test_EVP_DigestVerifyInit);
2eb2b4f3 2000 ADD_TEST(test_EVP_Enveloped);
ad887416 2001 ADD_ALL_TESTS(test_d2i_AutoPrivateKey, OSSL_NELEM(keydata));
29c49b25 2002 ADD_TEST(test_privatekey_to_pkcs8);
a9880362 2003#ifndef OPENSSL_NO_EC
adcd8e37 2004 ADD_TEST(test_EVP_PKCS82PKEY);
ddb634fe 2005#endif
f844f9eb 2006#if !defined(OPENSSL_NO_SM2) && !defined(FIPS_MODULE)
ddb634fe 2007 ADD_TEST(test_EVP_SM2);
a6c4cb84 2008 ADD_TEST(test_EVP_SM2_verify);
a9880362 2009#endif
bb5f281a 2010 ADD_ALL_TESTS(test_set_get_raw_keys, OSSL_NELEM(keys));
41bbba53 2011#ifndef OPENSSL_NO_DEPRECATED_3_0
2aee35d3
PY
2012 custom_pmeth = EVP_PKEY_meth_new(0xdefaced, 0);
2013 if (!TEST_ptr(custom_pmeth))
2014 return 0;
2015 EVP_PKEY_meth_set_check(custom_pmeth, pkey_custom_check);
b0004708
PY
2016 EVP_PKEY_meth_set_public_check(custom_pmeth, pkey_custom_pub_check);
2017 EVP_PKEY_meth_set_param_check(custom_pmeth, pkey_custom_param_check);
2aee35d3
PY
2018 if (!TEST_int_eq(EVP_PKEY_meth_add0(custom_pmeth), 1))
2019 return 0;
41bbba53 2020#endif
2aee35d3 2021 ADD_ALL_TESTS(test_EVP_PKEY_check, OSSL_NELEM(keycheckdata));
fab8fde3 2022#ifndef OPENSSL_NO_CMAC
a87820e1 2023 ADD_TEST(test_CMAC_keygen);
fab8fde3 2024#endif
10d5b415 2025 ADD_TEST(test_HKDF);
2cd3ebc7 2026 ADD_TEST(test_emptyikm_HKDF);
5dc40a83
BE
2027#ifndef OPENSSL_NO_EC
2028 ADD_TEST(test_X509_PUBKEY_inplace);
cad8347b
SL
2029 ADD_ALL_TESTS(test_invalide_ec_char2_pub_range_decode,
2030 OSSL_NELEM(ec_der_pub_keys));
5dc40a83 2031#endif
8d0f8c81 2032#ifndef OPENSSL_NO_DSA
f54a4101 2033 ADD_TEST(test_DSA_get_set_params);
b4be6937 2034#endif
f54a4101 2035 ADD_TEST(test_RSA_get_set_params);
b4be6937
MC
2036#if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
2037 ADD_TEST(test_decrypt_null_chunks);
8d0f8c81 2038#endif
501fcfb8 2039#ifndef OPENSSL_NO_DH
e295de1d 2040 ADD_TEST(test_EVP_PKEY_set1_DH);
501fcfb8 2041#endif
8a5cb596 2042 ADD_ALL_TESTS(test_keygen_with_empty_template, 2);
5ddec6a7 2043 ADD_ALL_TESTS(test_pkey_ctx_fail_without_provider, 2);
e295de1d 2044
1c19ff3c 2045 ADD_TEST(test_rand_agglomeration);
440b852a 2046 ADD_ALL_TESTS(test_evp_iv, 10);
1c19ff3c 2047
ad887416 2048 return 1;
71ea6b48 2049}
86dc26ba
MC
2050
2051void cleanup_tests(void)
2052{
2053 OPENSSL_CTX_free(testctx);
2054}