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