1 /* 2 * Copyright 2021-2025 The OpenSSL Project Authors. All Rights Reserved. 3 * 4 * Licensed under the Apache License 2.0 (the "License"). You may not use 5 * this file except in compliance with the License. You can obtain a copy 6 * in the file LICENSE in the source distribution or at 7 * https://www.openssl.org/source/license.html 8 */ 9 10 #include <stddef.h> 11 #include <string.h> 12 #include <openssl/provider.h> 13 #include <openssl/params.h> 14 #include <openssl/core_names.h> 15 #include <openssl/evp.h> 16 #include <openssl/store.h> 17 #include <openssl/ui.h> 18 #include "testutil.h" 19 #include "fake_rsaprov.h" 20 21 static OSSL_LIB_CTX *libctx = NULL; 22 extern int key_deleted; /* From fake_rsaprov.c */ 23 24 /* Fetch SIGNATURE method using a libctx and propq */ 25 static int fetch_sig(OSSL_LIB_CTX *ctx, const char *alg, const char *propq, 26 OSSL_PROVIDER *expected_prov) 27 { 28 OSSL_PROVIDER *prov; 29 EVP_SIGNATURE *sig = EVP_SIGNATURE_fetch(ctx, "RSA", propq); 30 int ret = 0; 31 32 if (!TEST_ptr(sig)) 33 return 0; 34 35 if (!TEST_ptr(prov = EVP_SIGNATURE_get0_provider(sig))) 36 goto end; 37 38 if (!TEST_ptr_eq(prov, expected_prov)) { 39 TEST_info("Fetched provider: %s, Expected provider: %s", 40 OSSL_PROVIDER_get0_name(prov), 41 OSSL_PROVIDER_get0_name(expected_prov)); 42 goto end; 43 } 44 45 ret = 1; 46 end: 47 EVP_SIGNATURE_free(sig); 48 return ret; 49 } 50 51 static int test_pkey_sig(void) 52 { 53 OSSL_PROVIDER *deflt = NULL; 54 OSSL_PROVIDER *fake_rsa = NULL; 55 int i, ret = 0; 56 EVP_PKEY *pkey = NULL; 57 EVP_PKEY_CTX *ctx = NULL; 58 59 if (!TEST_ptr(fake_rsa = fake_rsa_start(libctx))) 60 return 0; 61 62 if (!TEST_ptr(deflt = OSSL_PROVIDER_load(libctx, "default"))) 63 goto end; 64 65 /* Do a direct fetch to see it works */ 66 if (!TEST_true(fetch_sig(libctx, "RSA", "provider=fake-rsa", fake_rsa)) 67 || !TEST_true(fetch_sig(libctx, "RSA", "?provider=fake-rsa", fake_rsa))) 68 goto end; 69 70 /* Construct a pkey using precise propq to use our provider */ 71 if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA", 72 "provider=fake-rsa")) 73 || !TEST_true(EVP_PKEY_fromdata_init(ctx)) 74 || !TEST_true(EVP_PKEY_fromdata(ctx, &pkey, EVP_PKEY_KEYPAIR, NULL)) 75 || !TEST_ptr(pkey)) 76 goto end; 77 78 EVP_PKEY_CTX_free(ctx); 79 ctx = NULL; 80 81 /* try exercising signature_init ops a few times */ 82 for (i = 0; i < 3; i++) { 83 size_t siglen; 84 85 /* 86 * Create a signing context for our pkey with optional propq. 87 * The sign init should pick both keymgmt and signature from 88 * fake-rsa as the key is not exportable. 89 */ 90 if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_pkey(libctx, pkey, 91 "?provider=default"))) 92 goto end; 93 94 /* 95 * If this picks the wrong signature without realizing it 96 * we can get a segfault or some internal error. At least watch 97 * whether fake-rsa sign_init is exercised by calling sign. 98 */ 99 if (!TEST_int_eq(EVP_PKEY_sign_init(ctx), 1)) 100 goto end; 101 102 if (!TEST_int_eq(EVP_PKEY_sign(ctx, NULL, &siglen, NULL, 0), 1) 103 || !TEST_size_t_eq(siglen, 256)) 104 goto end; 105 106 EVP_PKEY_CTX_free(ctx); 107 ctx = NULL; 108 } 109 110 ret = 1; 111 112 end: 113 fake_rsa_finish(fake_rsa); 114 OSSL_PROVIDER_unload(deflt); 115 EVP_PKEY_CTX_free(ctx); 116 EVP_PKEY_free(pkey); 117 return ret; 118 } 119 120 static int test_alternative_keygen_init(void) 121 { 122 EVP_PKEY_CTX *ctx = NULL; 123 OSSL_PROVIDER *deflt = NULL; 124 OSSL_PROVIDER *fake_rsa = NULL; 125 const OSSL_PROVIDER *provider; 126 const char *provname; 127 int ret = 0; 128 129 if (!TEST_ptr(deflt = OSSL_PROVIDER_load(libctx, "default"))) 130 goto end; 131 132 /* first try without the fake RSA provider loaded */ 133 if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA", NULL))) 134 goto end; 135 136 if (!TEST_int_gt(EVP_PKEY_keygen_init(ctx), 0)) 137 goto end; 138 139 if (!TEST_ptr(provider = EVP_PKEY_CTX_get0_provider(ctx))) 140 goto end; 141 142 if (!TEST_ptr(provname = OSSL_PROVIDER_get0_name(provider))) 143 goto end; 144 145 if (!TEST_str_eq(provname, "default")) 146 goto end; 147 148 EVP_PKEY_CTX_free(ctx); 149 ctx = NULL; 150 151 /* now load fake RSA and try again */ 152 if (!TEST_ptr(fake_rsa = fake_rsa_start(libctx))) 153 return 0; 154 155 if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA", 156 "?provider=fake-rsa"))) 157 goto end; 158 159 if (!TEST_int_gt(EVP_PKEY_keygen_init(ctx), 0)) 160 goto end; 161 162 if (!TEST_ptr(provider = EVP_PKEY_CTX_get0_provider(ctx))) 163 goto end; 164 165 if (!TEST_ptr(provname = OSSL_PROVIDER_get0_name(provider))) 166 goto end; 167 168 if (!TEST_str_eq(provname, "fake-rsa")) 169 goto end; 170 171 ret = 1; 172 173 end: 174 fake_rsa_finish(fake_rsa); 175 OSSL_PROVIDER_unload(deflt); 176 EVP_PKEY_CTX_free(ctx); 177 return ret; 178 } 179 180 static int test_pkey_eq(void) 181 { 182 OSSL_PROVIDER *deflt = NULL; 183 OSSL_PROVIDER *fake_rsa = NULL; 184 EVP_PKEY *pkey_fake = NULL; 185 EVP_PKEY *pkey_dflt = NULL; 186 EVP_PKEY_CTX *ctx = NULL; 187 OSSL_PARAM *params = NULL; 188 int ret = 0; 189 190 if (!TEST_ptr(fake_rsa = fake_rsa_start(libctx))) 191 return 0; 192 193 if (!TEST_ptr(deflt = OSSL_PROVIDER_load(libctx, "default"))) 194 goto end; 195 196 /* Construct a public key for fake-rsa */ 197 if (!TEST_ptr(params = fake_rsa_key_params(0)) 198 || !TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA", 199 "provider=fake-rsa")) 200 || !TEST_true(EVP_PKEY_fromdata_init(ctx)) 201 || !TEST_true(EVP_PKEY_fromdata(ctx, &pkey_fake, EVP_PKEY_PUBLIC_KEY, 202 params)) 203 || !TEST_ptr(pkey_fake)) 204 goto end; 205 206 EVP_PKEY_CTX_free(ctx); 207 ctx = NULL; 208 OSSL_PARAM_free(params); 209 params = NULL; 210 211 /* Construct a public key for default */ 212 if (!TEST_ptr(params = fake_rsa_key_params(0)) 213 || !TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA", 214 "provider=default")) 215 || !TEST_true(EVP_PKEY_fromdata_init(ctx)) 216 || !TEST_true(EVP_PKEY_fromdata(ctx, &pkey_dflt, EVP_PKEY_PUBLIC_KEY, 217 params)) 218 || !TEST_ptr(pkey_dflt)) 219 goto end; 220 221 EVP_PKEY_CTX_free(ctx); 222 ctx = NULL; 223 OSSL_PARAM_free(params); 224 params = NULL; 225 226 /* now test for equality */ 227 if (!TEST_int_eq(EVP_PKEY_eq(pkey_fake, pkey_dflt), 1)) 228 goto end; 229 230 ret = 1; 231 end: 232 fake_rsa_finish(fake_rsa); 233 OSSL_PROVIDER_unload(deflt); 234 EVP_PKEY_CTX_free(ctx); 235 EVP_PKEY_free(pkey_fake); 236 EVP_PKEY_free(pkey_dflt); 237 OSSL_PARAM_free(params); 238 return ret; 239 } 240 241 static int test_pkey_can_sign(void) 242 { 243 OSSL_PROVIDER *fake_rsa = NULL; 244 EVP_PKEY *pkey_fake = NULL; 245 EVP_PKEY_CTX *ctx = NULL; 246 OSSL_PARAM *params = NULL; 247 int ret = 0; 248 249 if (!TEST_ptr(fake_rsa = fake_rsa_start(libctx))) 250 return 0; 251 252 /* 253 * Ensure other tests did not forget to reset fake_rsa_query_operation_name 254 * to its default value: 0 255 */ 256 if (!TEST_int_eq(fake_rsa_query_operation_name, 0)) 257 goto end; 258 259 if (!TEST_ptr(params = fake_rsa_key_params(0)) 260 || !TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA", 261 "provider=fake-rsa")) 262 || !TEST_true(EVP_PKEY_fromdata_init(ctx)) 263 || !TEST_true(EVP_PKEY_fromdata(ctx, &pkey_fake, EVP_PKEY_PUBLIC_KEY, 264 params)) 265 || !TEST_true(EVP_PKEY_can_sign(pkey_fake)) 266 || !TEST_ptr(pkey_fake)) 267 goto end; 268 269 EVP_PKEY_CTX_free(ctx); 270 ctx = NULL; 271 EVP_PKEY_free(pkey_fake); 272 pkey_fake = NULL; 273 OSSL_PARAM_free(params); 274 params = NULL; 275 276 /* 277 * Documented behavior for OSSL_FUNC_keymgmt_query_operation_name() 278 * allows it to return NULL, in which case the fallback should be to use 279 * EVP_KEYMGMT_get0_name(). That is exactly the thing we are testing here. 280 */ 281 fake_rsa_query_operation_name = 1; 282 283 if (!TEST_ptr(params = fake_rsa_key_params(0)) 284 || !TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA", 285 "provider=fake-rsa")) 286 || !TEST_true(EVP_PKEY_fromdata_init(ctx)) 287 || !TEST_true(EVP_PKEY_fromdata(ctx, &pkey_fake, EVP_PKEY_PUBLIC_KEY, 288 params)) 289 || !TEST_true(EVP_PKEY_can_sign(pkey_fake)) 290 || !TEST_ptr(pkey_fake)) 291 goto end; 292 293 EVP_PKEY_CTX_free(ctx); 294 ctx = NULL; 295 EVP_PKEY_free(pkey_fake); 296 pkey_fake = NULL; 297 OSSL_PARAM_free(params); 298 params = NULL; 299 300 ret = 1; 301 end: 302 303 EVP_PKEY_CTX_free(ctx); 304 EVP_PKEY_free(pkey_fake); 305 OSSL_PARAM_free(params); 306 fake_rsa_query_operation_name = 0; 307 308 fake_rsa_finish(fake_rsa); 309 return ret; 310 } 311 312 static int test_pkey_store(int idx) 313 { 314 OSSL_PROVIDER *deflt = NULL; 315 OSSL_PROVIDER *fake_rsa = NULL; 316 int ret = 0; 317 EVP_PKEY *pkey = NULL; 318 OSSL_STORE_LOADER *loader = NULL; 319 OSSL_STORE_CTX *ctx = NULL; 320 OSSL_STORE_INFO *info; 321 const char *propq = idx == 0 ? "?provider=fake-rsa" 322 : "?provider=default"; 323 324 /* It's important to load the default provider first for this test */ 325 if (!TEST_ptr(deflt = OSSL_PROVIDER_load(libctx, "default"))) 326 goto end; 327 328 if (!TEST_ptr(fake_rsa = fake_rsa_start(libctx))) 329 goto end; 330 331 if (!TEST_ptr(loader = OSSL_STORE_LOADER_fetch(libctx, "fake_rsa", 332 propq))) 333 goto end; 334 335 OSSL_STORE_LOADER_free(loader); 336 337 if (!TEST_ptr(ctx = OSSL_STORE_open_ex("fake_rsa:test", libctx, propq, 338 NULL, NULL, NULL, NULL, NULL))) 339 goto end; 340 341 while (!OSSL_STORE_eof(ctx) 342 && (info = OSSL_STORE_load(ctx)) != NULL 343 && pkey == NULL) { 344 if (OSSL_STORE_INFO_get_type(info) == OSSL_STORE_INFO_PKEY) 345 pkey = OSSL_STORE_INFO_get1_PKEY(info); 346 OSSL_STORE_INFO_free(info); 347 info = NULL; 348 } 349 350 if (!TEST_ptr(pkey) || !TEST_int_eq(EVP_PKEY_is_a(pkey, "RSA"), 1)) 351 goto end; 352 353 ret = 1; 354 355 end: 356 fake_rsa_finish(fake_rsa); 357 OSSL_PROVIDER_unload(deflt); 358 OSSL_STORE_close(ctx); 359 EVP_PKEY_free(pkey); 360 return ret; 361 } 362 363 static int test_pkey_delete(void) 364 { 365 OSSL_PROVIDER *deflt = NULL; 366 OSSL_PROVIDER *fake_rsa = NULL; 367 int ret = 0; 368 EVP_PKEY *pkey = NULL; 369 OSSL_STORE_LOADER *loader = NULL; 370 OSSL_STORE_CTX *ctx = NULL; 371 OSSL_STORE_INFO *info; 372 const char *propq = "?provider=fake-rsa"; 373 374 /* It's important to load the default provider first for this test */ 375 if (!TEST_ptr(deflt = OSSL_PROVIDER_load(libctx, "default"))) 376 goto end; 377 378 if (!TEST_ptr(fake_rsa = fake_rsa_start(libctx))) 379 goto end; 380 381 if (!TEST_ptr(loader = OSSL_STORE_LOADER_fetch(libctx, "fake_rsa", 382 propq))) 383 goto end; 384 385 OSSL_STORE_LOADER_free(loader); 386 387 /* First iteration: load key, check it, delete it */ 388 if (!TEST_ptr(ctx = OSSL_STORE_open_ex("fake_rsa:test", libctx, propq, 389 NULL, NULL, NULL, NULL, NULL))) 390 goto end; 391 392 while (!OSSL_STORE_eof(ctx) 393 && (info = OSSL_STORE_load(ctx)) != NULL 394 && pkey == NULL) { 395 if (OSSL_STORE_INFO_get_type(info) == OSSL_STORE_INFO_PKEY) 396 pkey = OSSL_STORE_INFO_get1_PKEY(info); 397 OSSL_STORE_INFO_free(info); 398 info = NULL; 399 } 400 401 if (!TEST_ptr(pkey) || !TEST_int_eq(EVP_PKEY_is_a(pkey, "RSA"), 1)) 402 goto end; 403 EVP_PKEY_free(pkey); 404 pkey = NULL; 405 406 if (!TEST_int_eq(OSSL_STORE_delete("fake_rsa:test", libctx, propq, 407 NULL, NULL, NULL), 408 1)) 409 goto end; 410 if (!TEST_int_eq(OSSL_STORE_close(ctx), 1)) 411 goto end; 412 413 /* Second iteration: load key should fail */ 414 if (!TEST_ptr(ctx = OSSL_STORE_open_ex("fake_rsa:test", libctx, propq, 415 NULL, NULL, NULL, NULL, NULL))) 416 goto end; 417 418 while (!OSSL_STORE_eof(ctx)) { 419 info = OSSL_STORE_load(ctx); 420 if (!TEST_ptr_null(info)) 421 goto end; 422 } 423 424 ret = 1; 425 426 end: 427 fake_rsa_finish(fake_rsa); 428 OSSL_PROVIDER_unload(deflt); 429 OSSL_STORE_close(ctx); 430 fake_rsa_restore_store_state(); 431 return ret; 432 } 433 434 static int fake_pw_read_string(UI *ui, UI_STRING *uis) 435 { 436 const char *passphrase = FAKE_PASSPHRASE; 437 438 if (UI_get_string_type(uis) == UIT_PROMPT) { 439 UI_set_result(ui, uis, passphrase); 440 return 1; 441 } 442 443 return 0; 444 } 445 446 static int test_pkey_store_open_ex(void) 447 { 448 OSSL_PROVIDER *deflt = NULL; 449 OSSL_PROVIDER *fake_rsa = NULL; 450 int ret = 0; 451 EVP_PKEY *pkey = NULL; 452 OSSL_STORE_LOADER *loader = NULL; 453 OSSL_STORE_CTX *ctx = NULL; 454 const char *propq = "?provider=fake-rsa"; 455 UI_METHOD *ui_method = NULL; 456 457 /* It's important to load the default provider first for this test */ 458 if (!TEST_ptr(deflt = OSSL_PROVIDER_load(libctx, "default"))) 459 goto end; 460 461 if (!TEST_ptr(fake_rsa = fake_rsa_start(libctx))) 462 goto end; 463 464 if (!TEST_ptr(loader = OSSL_STORE_LOADER_fetch(libctx, "fake_rsa", 465 propq))) 466 goto end; 467 468 OSSL_STORE_LOADER_free(loader); 469 470 if (!TEST_ptr(ui_method = UI_create_method("PW Callbacks"))) 471 goto end; 472 473 if (UI_method_set_reader(ui_method, fake_pw_read_string)) 474 goto end; 475 476 if (!TEST_ptr(ctx = OSSL_STORE_open_ex("fake_rsa:openpwtest", libctx, propq, 477 ui_method, NULL, NULL, NULL, NULL))) 478 goto end; 479 480 /* retry w/o ui_method to ensure we actually enter pw checks and fail */ 481 OSSL_STORE_close(ctx); 482 if (!TEST_ptr_null(ctx = OSSL_STORE_open_ex("fake_rsa:openpwtest", libctx, 483 propq, NULL, NULL, NULL, NULL, 484 NULL))) 485 goto end; 486 487 ret = 1; 488 489 end: 490 UI_destroy_method(ui_method); 491 fake_rsa_finish(fake_rsa); 492 OSSL_PROVIDER_unload(deflt); 493 OSSL_STORE_close(ctx); 494 EVP_PKEY_free(pkey); 495 return ret; 496 } 497 498 #define DEFAULT_PROVIDER_IDX 0 499 #define FAKE_RSA_PROVIDER_IDX 1 500 501 static int reset_ctx_providers(OSSL_LIB_CTX **ctx, OSSL_PROVIDER *providers[2], const char *prop) 502 { 503 OSSL_PROVIDER_unload(providers[DEFAULT_PROVIDER_IDX]); 504 providers[DEFAULT_PROVIDER_IDX] = NULL; 505 fake_rsa_finish(providers[FAKE_RSA_PROVIDER_IDX]); 506 providers[FAKE_RSA_PROVIDER_IDX] = NULL; 507 OSSL_LIB_CTX_free(*ctx); 508 *ctx = NULL; 509 510 if (!TEST_ptr(*ctx = OSSL_LIB_CTX_new()) 511 || !TEST_ptr(providers[DEFAULT_PROVIDER_IDX] = OSSL_PROVIDER_load(*ctx, "default")) 512 || !TEST_ptr(providers[FAKE_RSA_PROVIDER_IDX] = fake_rsa_start(*ctx)) 513 || !TEST_true(EVP_set_default_properties(*ctx, prop))) 514 return 0; 515 return 1; 516 } 517 518 struct test_pkey_decoder_properties_t { 519 const char *provider_props; 520 const char *explicit_props; 521 int curr_provider_idx; 522 }; 523 524 static int test_pkey_provider_decoder_props(void) 525 { 526 OSSL_LIB_CTX *my_libctx = NULL; 527 OSSL_PROVIDER *providers[2] = { NULL }; 528 struct test_pkey_decoder_properties_t properties_test[] = { 529 { "?provider=fake-rsa", NULL, FAKE_RSA_PROVIDER_IDX }, 530 { "?provider=default", NULL, DEFAULT_PROVIDER_IDX }, 531 { NULL, "?provider=fake-rsa", FAKE_RSA_PROVIDER_IDX }, 532 { NULL, "?provider=default", DEFAULT_PROVIDER_IDX }, 533 { NULL, "provider=fake-rsa", FAKE_RSA_PROVIDER_IDX }, 534 { NULL, "provider=default", DEFAULT_PROVIDER_IDX }, 535 }; 536 EVP_PKEY *pkey = NULL; 537 BIO *bio_priv = NULL; 538 unsigned char *encoded_pub = NULL; 539 int len_pub; 540 const unsigned char *p; 541 PKCS8_PRIV_KEY_INFO *p8 = NULL; 542 size_t i; 543 int ret = 0; 544 const char pem_rsa_priv_key[] = { 545 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 546 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 547 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x49, 0x49, 0x45, 0x76, 0x51, 0x49, 0x42, 548 0x41, 0x44, 0x41, 0x4E, 0x42, 0x67, 0x6B, 0x71, 0x68, 0x6B, 0x69, 0x47, 549 0x39, 0x77, 0x30, 0x42, 0x41, 0x51, 0x45, 0x46, 0x41, 0x41, 0x53, 0x43, 550 0x42, 0x4B, 0x63, 0x77, 0x67, 0x67, 0x53, 0x6A, 0x41, 0x67, 0x45, 0x41, 551 0x41, 0x6F, 0x49, 0x42, 0x41, 0x51, 0x44, 0x45, 0x6B, 0x43, 0x34, 0x5A, 552 0x57, 0x76, 0x33, 0x75, 0x63, 0x46, 0x62, 0x55, 0x0A, 0x46, 0x38, 0x59, 553 0x77, 0x6C, 0x55, 0x72, 0x6D, 0x51, 0x6C, 0x4C, 0x43, 0x5A, 0x77, 0x41, 554 0x67, 0x72, 0x34, 0x44, 0x50, 0x55, 0x41, 0x46, 0x56, 0x48, 0x6C, 0x2B, 555 0x77, 0x46, 0x63, 0x58, 0x79, 0x70, 0x56, 0x67, 0x53, 0x63, 0x56, 0x59, 556 0x34, 0x4B, 0x37, 0x51, 0x6D, 0x64, 0x57, 0x4B, 0x73, 0x59, 0x71, 0x62, 557 0x38, 0x74, 0x70, 0x4F, 0x78, 0x71, 0x77, 0x30, 0x4E, 0x77, 0x5A, 0x57, 558 0x58, 0x0A, 0x4F, 0x2B, 0x74, 0x61, 0x34, 0x2B, 0x79, 0x32, 0x37, 0x43, 559 0x4F, 0x75, 0x66, 0x6F, 0x4F, 0x68, 0x52, 0x54, 0x4D, 0x77, 0x4E, 0x79, 560 0x4E, 0x32, 0x4C, 0x77, 0x53, 0x4E, 0x54, 0x50, 0x4E, 0x33, 0x65, 0x45, 561 0x6B, 0x34, 0x65, 0x65, 0x35, 0x51, 0x6E, 0x70, 0x70, 0x45, 0x79, 0x44, 562 0x72, 0x71, 0x6F, 0x43, 0x67, 0x76, 0x54, 0x6C, 0x41, 0x41, 0x64, 0x54, 563 0x6F, 0x46, 0x61, 0x58, 0x76, 0x6A, 0x0A, 0x78, 0x31, 0x33, 0x59, 0x62, 564 0x6A, 0x37, 0x6A, 0x66, 0x68, 0x77, 0x4E, 0x37, 0x34, 0x71, 0x4B, 0x64, 565 0x71, 0x73, 0x53, 0x45, 0x74, 0x50, 0x57, 0x79, 0x67, 0x67, 0x65, 0x6F, 566 0x74, 0x69, 0x51, 0x53, 0x50, 0x79, 0x36, 0x4B, 0x79, 0x42, 0x49, 0x75, 567 0x57, 0x74, 0x49, 0x78, 0x50, 0x41, 0x41, 0x38, 0x6A, 0x41, 0x76, 0x66, 568 0x41, 0x6E, 0x51, 0x6A, 0x31, 0x65, 0x58, 0x68, 0x67, 0x68, 0x46, 0x0A, 569 0x4E, 0x32, 0x4E, 0x78, 0x6B, 0x71, 0x67, 0x78, 0x76, 0x42, 0x59, 0x64, 570 0x4E, 0x79, 0x31, 0x6D, 0x33, 0x2B, 0x6A, 0x58, 0x41, 0x43, 0x50, 0x4C, 571 0x52, 0x7A, 0x63, 0x31, 0x31, 0x5A, 0x62, 0x4E, 0x48, 0x4B, 0x69, 0x77, 572 0x68, 0x43, 0x59, 0x31, 0x2F, 0x48, 0x69, 0x53, 0x42, 0x6B, 0x77, 0x48, 573 0x6C, 0x49, 0x4B, 0x2B, 0x2F, 0x56, 0x4C, 0x6A, 0x32, 0x73, 0x6D, 0x43, 574 0x4B, 0x64, 0x55, 0x51, 0x0A, 0x67, 0x76, 0x4C, 0x58, 0x53, 0x6E, 0x6E, 575 0x56, 0x67, 0x51, 0x75, 0x6C, 0x48, 0x69, 0x6F, 0x44, 0x36, 0x55, 0x67, 576 0x59, 0x38, 0x78, 0x41, 0x32, 0x61, 0x34, 0x4D, 0x31, 0x72, 0x68, 0x59, 577 0x75, 0x54, 0x56, 0x38, 0x42, 0x72, 0x50, 0x52, 0x5A, 0x34, 0x42, 0x46, 578 0x78, 0x32, 0x6F, 0x30, 0x6A, 0x59, 0x57, 0x76, 0x47, 0x62, 0x41, 0x2F, 579 0x48, 0x6C, 0x70, 0x37, 0x66, 0x54, 0x4F, 0x79, 0x2B, 0x0A, 0x46, 0x35, 580 0x4F, 0x6B, 0x69, 0x48, 0x53, 0x37, 0x41, 0x67, 0x4D, 0x42, 0x41, 0x41, 581 0x45, 0x43, 0x67, 0x67, 0x45, 0x41, 0x59, 0x67, 0x43, 0x75, 0x38, 0x31, 582 0x5A, 0x69, 0x51, 0x42, 0x56, 0x44, 0x76, 0x57, 0x69, 0x44, 0x47, 0x4B, 583 0x72, 0x2B, 0x31, 0x70, 0x49, 0x66, 0x32, 0x43, 0x78, 0x70, 0x72, 0x47, 584 0x4A, 0x45, 0x6D, 0x31, 0x68, 0x38, 0x36, 0x5A, 0x63, 0x45, 0x78, 0x33, 585 0x4C, 0x37, 0x0A, 0x71, 0x46, 0x44, 0x57, 0x2B, 0x67, 0x38, 0x48, 0x47, 586 0x57, 0x64, 0x30, 0x34, 0x53, 0x33, 0x71, 0x76, 0x68, 0x39, 0x4C, 0x75, 587 0x62, 0x6C, 0x41, 0x4A, 0x7A, 0x65, 0x74, 0x41, 0x50, 0x78, 0x52, 0x58, 588 0x4C, 0x39, 0x7A, 0x78, 0x33, 0x50, 0x58, 0x6A, 0x4A, 0x5A, 0x73, 0x37, 589 0x65, 0x33, 0x48, 0x4C, 0x45, 0x75, 0x6E, 0x79, 0x33, 0x54, 0x61, 0x57, 590 0x65, 0x7A, 0x30, 0x58, 0x49, 0x30, 0x4F, 0x0A, 0x34, 0x4C, 0x53, 0x59, 591 0x38, 0x53, 0x38, 0x64, 0x36, 0x70, 0x56, 0x42, 0x50, 0x6D, 0x55, 0x45, 592 0x74, 0x77, 0x47, 0x57, 0x4E, 0x34, 0x76, 0x59, 0x71, 0x48, 0x6E, 0x4B, 593 0x4C, 0x58, 0x4F, 0x62, 0x34, 0x51, 0x51, 0x41, 0x58, 0x73, 0x34, 0x4D, 594 0x7A, 0x66, 0x6B, 0x4D, 0x2F, 0x4D, 0x65, 0x2F, 0x62, 0x2B, 0x7A, 0x64, 595 0x75, 0x31, 0x75, 0x6D, 0x77, 0x6A, 0x4D, 0x6C, 0x33, 0x44, 0x75, 0x64, 596 0x0A, 0x35, 0x72, 0x56, 0x68, 0x6B, 0x67, 0x76, 0x74, 0x38, 0x75, 0x68, 597 0x44, 0x55, 0x47, 0x33, 0x58, 0x53, 0x48, 0x65, 0x6F, 0x4A, 0x59, 0x42, 598 0x4D, 0x62, 0x54, 0x39, 0x69, 0x6B, 0x4A, 0x44, 0x56, 0x4D, 0x4A, 0x35, 599 0x31, 0x72, 0x72, 0x65, 0x2F, 0x31, 0x52, 0x69, 0x64, 0x64, 0x67, 0x78, 600 0x70, 0x38, 0x53, 0x6B, 0x74, 0x56, 0x6B, 0x76, 0x47, 0x6D, 0x4D, 0x6C, 601 0x39, 0x6B, 0x51, 0x52, 0x38, 0x0A, 0x38, 0x64, 0x76, 0x33, 0x50, 0x78, 602 0x2F, 0x6B, 0x54, 0x4E, 0x39, 0x34, 0x45, 0x75, 0x52, 0x67, 0x30, 0x43, 603 0x6B, 0x58, 0x42, 0x68, 0x48, 0x70, 0x6F, 0x47, 0x6F, 0x34, 0x71, 0x6E, 604 0x4D, 0x33, 0x51, 0x33, 0x42, 0x35, 0x50, 0x6C, 0x6D, 0x53, 0x4B, 0x35, 605 0x67, 0x6B, 0x75, 0x50, 0x76, 0x57, 0x79, 0x39, 0x6C, 0x38, 0x4C, 0x2F, 606 0x54, 0x56, 0x74, 0x38, 0x4C, 0x62, 0x36, 0x2F, 0x7A, 0x4C, 0x0A, 0x42, 607 0x79, 0x51, 0x57, 0x2B, 0x67, 0x30, 0x32, 0x77, 0x78, 0x65, 0x4E, 0x47, 608 0x68, 0x77, 0x31, 0x66, 0x6B, 0x44, 0x2B, 0x58, 0x46, 0x48, 0x37, 0x4B, 609 0x6B, 0x53, 0x65, 0x57, 0x6C, 0x2B, 0x51, 0x6E, 0x72, 0x4C, 0x63, 0x65, 610 0x50, 0x4D, 0x30, 0x68, 0x51, 0x4B, 0x42, 0x67, 0x51, 0x44, 0x78, 0x6F, 611 0x71, 0x55, 0x6B, 0x30, 0x50, 0x4C, 0x4F, 0x59, 0x35, 0x57, 0x67, 0x4F, 612 0x6B, 0x67, 0x72, 0x0A, 0x75, 0x6D, 0x67, 0x69, 0x65, 0x2F, 0x4B, 0x31, 613 0x57, 0x4B, 0x73, 0x2B, 0x69, 0x7A, 0x54, 0x74, 0x41, 0x70, 0x6A, 0x7A, 614 0x63, 0x4D, 0x37, 0x36, 0x73, 0x7A, 0x61, 0x36, 0x33, 0x62, 0x35, 0x52, 615 0x39, 0x77, 0x2B, 0x50, 0x2B, 0x4E, 0x73, 0x73, 0x4D, 0x56, 0x34, 0x61, 616 0x65, 0x56, 0x39, 0x65, 0x70, 0x45, 0x47, 0x5A, 0x4F, 0x36, 0x38, 0x49, 617 0x55, 0x6D, 0x69, 0x30, 0x51, 0x6A, 0x76, 0x51, 0x0A, 0x6E, 0x70, 0x6C, 618 0x75, 0x51, 0x6F, 0x61, 0x64, 0x46, 0x59, 0x77, 0x65, 0x46, 0x77, 0x53, 619 0x51, 0x31, 0x31, 0x42, 0x58, 0x48, 0x6F, 0x65, 0x51, 0x42, 0x41, 0x34, 620 0x6E, 0x4E, 0x70, 0x6B, 0x72, 0x56, 0x35, 0x38, 0x68, 0x67, 0x7A, 0x5A, 621 0x4E, 0x33, 0x6D, 0x39, 0x4A, 0x4C, 0x52, 0x37, 0x4A, 0x78, 0x79, 0x72, 622 0x49, 0x71, 0x58, 0x73, 0x52, 0x6E, 0x55, 0x7A, 0x6C, 0x31, 0x33, 0x4B, 623 0x6A, 0x0A, 0x47, 0x7A, 0x5A, 0x42, 0x43, 0x4A, 0x78, 0x43, 0x70, 0x4A, 624 0x6A, 0x66, 0x54, 0x7A, 0x65, 0x2F, 0x79, 0x6D, 0x65, 0x38, 0x64, 0x33, 625 0x70, 0x61, 0x35, 0x51, 0x4B, 0x42, 0x67, 0x51, 0x44, 0x51, 0x50, 0x35, 626 0x6D, 0x42, 0x34, 0x6A, 0x49, 0x2B, 0x67, 0x33, 0x58, 0x48, 0x33, 0x4D, 627 0x75, 0x4C, 0x79, 0x42, 0x6A, 0x4D, 0x6F, 0x54, 0x49, 0x76, 0x6F, 0x79, 628 0x37, 0x43, 0x59, 0x4D, 0x68, 0x5A, 0x0A, 0x36, 0x2F, 0x2B, 0x4B, 0x6B, 629 0x70, 0x77, 0x31, 0x33, 0x32, 0x4A, 0x31, 0x36, 0x6D, 0x71, 0x6B, 0x4C, 630 0x72, 0x77, 0x55, 0x4F, 0x5A, 0x66, 0x54, 0x30, 0x65, 0x31, 0x72, 0x4A, 631 0x42, 0x73, 0x43, 0x55, 0x6B, 0x45, 0x6F, 0x42, 0x6D, 0x67, 0x4B, 0x4E, 632 0x74, 0x52, 0x6B, 0x48, 0x6F, 0x33, 0x2F, 0x53, 0x6A, 0x55, 0x49, 0x2F, 633 0x39, 0x66, 0x48, 0x6A, 0x33, 0x75, 0x53, 0x74, 0x50, 0x48, 0x56, 0x0A, 634 0x6F, 0x50, 0x63, 0x66, 0x58, 0x6A, 0x2F, 0x67, 0x46, 0x52, 0x55, 0x6B, 635 0x44, 0x44, 0x7A, 0x59, 0x2B, 0x61, 0x75, 0x42, 0x33, 0x64, 0x48, 0x4F, 636 0x4E, 0x46, 0x31, 0x55, 0x31, 0x7A, 0x30, 0x36, 0x45, 0x41, 0x4E, 0x6B, 637 0x6B, 0x50, 0x43, 0x43, 0x33, 0x61, 0x35, 0x33, 0x38, 0x55, 0x41, 0x4E, 638 0x42, 0x49, 0x61, 0x50, 0x6A, 0x77, 0x70, 0x52, 0x64, 0x42, 0x7A, 0x4E, 639 0x77, 0x31, 0x78, 0x6C, 0x0A, 0x62, 0x76, 0x6E, 0x35, 0x61, 0x43, 0x74, 640 0x33, 0x48, 0x77, 0x4B, 0x42, 0x67, 0x42, 0x66, 0x4F, 0x6C, 0x34, 0x6A, 641 0x47, 0x45, 0x58, 0x59, 0x6D, 0x4E, 0x36, 0x4B, 0x2B, 0x75, 0x30, 0x65, 642 0x62, 0x71, 0x52, 0x44, 0x6B, 0x74, 0x32, 0x67, 0x49, 0x6F, 0x57, 0x36, 643 0x62, 0x46, 0x6F, 0x37, 0x58, 0x64, 0x36, 0x78, 0x63, 0x69, 0x2F, 0x67, 644 0x46, 0x57, 0x6A, 0x6F, 0x56, 0x43, 0x4F, 0x42, 0x59, 0x0A, 0x67, 0x43, 645 0x38, 0x47, 0x4C, 0x4D, 0x6E, 0x77, 0x33, 0x7A, 0x32, 0x71, 0x67, 0x61, 646 0x76, 0x34, 0x63, 0x51, 0x49, 0x67, 0x38, 0x45, 0x44, 0x59, 0x70, 0x62, 647 0x70, 0x45, 0x34, 0x46, 0x48, 0x51, 0x6E, 0x6E, 0x74, 0x50, 0x6B, 0x4B, 648 0x57, 0x2F, 0x62, 0x72, 0x75, 0x30, 0x4E, 0x74, 0x33, 0x79, 0x61, 0x4E, 649 0x62, 0x38, 0x69, 0x67, 0x79, 0x31, 0x61, 0x5A, 0x4F, 0x52, 0x66, 0x49, 650 0x76, 0x5A, 0x0A, 0x71, 0x54, 0x4D, 0x4C, 0x45, 0x33, 0x6D, 0x65, 0x6C, 651 0x63, 0x5A, 0x57, 0x37, 0x4C, 0x61, 0x69, 0x71, 0x65, 0x4E, 0x31, 0x56, 652 0x30, 0x76, 0x48, 0x2F, 0x4D, 0x43, 0x55, 0x64, 0x70, 0x58, 0x39, 0x59, 653 0x31, 0x34, 0x4B, 0x39, 0x43, 0x4A, 0x59, 0x78, 0x7A, 0x73, 0x52, 0x4F, 654 0x67, 0x50, 0x71, 0x64, 0x45, 0x67, 0x4D, 0x57, 0x59, 0x44, 0x46, 0x41, 655 0x6F, 0x47, 0x41, 0x41, 0x65, 0x39, 0x6C, 0x0A, 0x58, 0x4D, 0x69, 0x65, 656 0x55, 0x4F, 0x68, 0x6C, 0x30, 0x73, 0x71, 0x68, 0x64, 0x5A, 0x59, 0x52, 657 0x62, 0x4F, 0x31, 0x65, 0x69, 0x77, 0x54, 0x49, 0x4C, 0x58, 0x51, 0x36, 658 0x79, 0x47, 0x4D, 0x69, 0x42, 0x38, 0x61, 0x65, 0x2F, 0x76, 0x30, 0x70, 659 0x62, 0x42, 0x45, 0x57, 0x6C, 0x70, 0x6E, 0x38, 0x6B, 0x32, 0x2B, 0x4A, 660 0x6B, 0x71, 0x56, 0x54, 0x77, 0x48, 0x67, 0x67, 0x62, 0x43, 0x41, 0x5A, 661 0x0A, 0x6A, 0x4F, 0x61, 0x71, 0x56, 0x74, 0x58, 0x31, 0x6D, 0x55, 0x79, 662 0x54, 0x59, 0x7A, 0x6A, 0x73, 0x54, 0x7A, 0x34, 0x5A, 0x59, 0x6A, 0x68, 663 0x61, 0x48, 0x4A, 0x33, 0x6A, 0x31, 0x57, 0x6C, 0x65, 0x67, 0x6F, 0x4D, 664 0x63, 0x73, 0x74, 0x64, 0x66, 0x54, 0x2B, 0x74, 0x78, 0x4D, 0x55, 0x37, 665 0x34, 0x6F, 0x67, 0x64, 0x4F, 0x71, 0x4D, 0x7A, 0x68, 0x78, 0x53, 0x55, 666 0x4F, 0x34, 0x35, 0x67, 0x38, 0x0A, 0x66, 0x39, 0x57, 0x38, 0x39, 0x6D, 667 0x70, 0x61, 0x38, 0x62, 0x42, 0x6A, 0x4F, 0x50, 0x75, 0x2B, 0x79, 0x46, 668 0x79, 0x36, 0x36, 0x74, 0x44, 0x61, 0x5A, 0x36, 0x73, 0x57, 0x45, 0x37, 669 0x63, 0x35, 0x53, 0x58, 0x45, 0x48, 0x58, 0x6C, 0x38, 0x43, 0x67, 0x59, 670 0x45, 0x41, 0x74, 0x41, 0x57, 0x77, 0x46, 0x50, 0x6F, 0x44, 0x53, 0x54, 671 0x64, 0x7A, 0x6F, 0x58, 0x41, 0x77, 0x52, 0x6F, 0x66, 0x30, 0x0A, 0x51, 672 0x4D, 0x4F, 0x30, 0x38, 0x2B, 0x50, 0x6E, 0x51, 0x47, 0x6F, 0x50, 0x62, 673 0x4D, 0x4A, 0x54, 0x71, 0x72, 0x67, 0x78, 0x72, 0x48, 0x59, 0x43, 0x53, 674 0x38, 0x75, 0x34, 0x63, 0x59, 0x53, 0x48, 0x64, 0x44, 0x4D, 0x4A, 0x44, 675 0x43, 0x4F, 0x4D, 0x6F, 0x35, 0x67, 0x46, 0x58, 0x79, 0x43, 0x2B, 0x35, 676 0x46, 0x66, 0x54, 0x69, 0x47, 0x77, 0x42, 0x68, 0x79, 0x35, 0x38, 0x7A, 677 0x35, 0x62, 0x37, 0x0A, 0x67, 0x42, 0x77, 0x46, 0x4B, 0x49, 0x39, 0x52, 678 0x67, 0x52, 0x66, 0x56, 0x31, 0x44, 0x2F, 0x4E, 0x69, 0x6D, 0x78, 0x50, 679 0x72, 0x6C, 0x6A, 0x33, 0x57, 0x48, 0x79, 0x65, 0x63, 0x31, 0x2F, 0x43, 680 0x73, 0x2B, 0x42, 0x72, 0x2B, 0x2F, 0x76, 0x65, 0x6B, 0x4D, 0x56, 0x46, 681 0x67, 0x35, 0x67, 0x65, 0x6B, 0x65, 0x48, 0x72, 0x34, 0x61, 0x47, 0x53, 682 0x46, 0x34, 0x62, 0x6B, 0x30, 0x41, 0x6A, 0x56, 0x0A, 0x54, 0x76, 0x2F, 683 0x70, 0x51, 0x6A, 0x79, 0x52, 0x75, 0x5A, 0x41, 0x74, 0x36, 0x36, 0x49, 684 0x62, 0x52, 0x5A, 0x64, 0x6C, 0x32, 0x49, 0x49, 0x3D, 0x0A, 0x2D, 0x2D, 685 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 686 0x54, 0x45, 0x20, 0x4B, 0x45, 0x59, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D 687 }; 688 /* 689 * PEM of pem_rsa_priv_key: 690 * -----BEGIN PRIVATE KEY----- 691 * MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEkC4ZWv3ucFbU 692 * F8YwlUrmQlLCZwAgr4DPUAFVHl+wFcXypVgScVY4K7QmdWKsYqb8tpOxqw0NwZWX 693 * O+ta4+y27COufoOhRTMwNyN2LwSNTPN3eEk4ee5QnppEyDrqoCgvTlAAdToFaXvj 694 * x13Ybj7jfhwN74qKdqsSEtPWyggeotiQSPy6KyBIuWtIxPAA8jAvfAnQj1eXhghF 695 * N2NxkqgxvBYdNy1m3+jXACPLRzc11ZbNHKiwhCY1/HiSBkwHlIK+/VLj2smCKdUQ 696 * gvLXSnnVgQulHioD6UgY8xA2a4M1rhYuTV8BrPRZ4BFx2o0jYWvGbA/Hlp7fTOy+ 697 * F5OkiHS7AgMBAAECggEAYgCu81ZiQBVDvWiDGKr+1pIf2CxprGJEm1h86ZcEx3L7 698 * qFDW+g8HGWd04S3qvh9LublAJzetAPxRXL9zx3PXjJZs7e3HLEuny3TaWez0XI0O 699 * 4LSY8S8d6pVBPmUEtwGWN4vYqHnKLXOb4QQAXs4MzfkM/Me/b+zdu1umwjMl3Dud 700 * 5rVhkgvt8uhDUG3XSHeoJYBMbT9ikJDVMJ51rre/1Riddgxp8SktVkvGmMl9kQR8 701 * 8dv3Px/kTN94EuRg0CkXBhHpoGo4qnM3Q3B5PlmSK5gkuPvWy9l8L/TVt8Lb6/zL 702 * ByQW+g02wxeNGhw1fkD+XFH7KkSeWl+QnrLcePM0hQKBgQDxoqUk0PLOY5WgOkgr 703 * umgie/K1WKs+izTtApjzcM76sza63b5R9w+P+NssMV4aeV9epEGZO68IUmi0QjvQ 704 * npluQoadFYweFwSQ11BXHoeQBA4nNpkrV58hgzZN3m9JLR7JxyrIqXsRnUzl13Kj 705 * GzZBCJxCpJjfTze/yme8d3pa5QKBgQDQP5mB4jI+g3XH3MuLyBjMoTIvoy7CYMhZ 706 * 6/+Kkpw132J16mqkLrwUOZfT0e1rJBsCUkEoBmgKNtRkHo3/SjUI/9fHj3uStPHV 707 * oPcfXj/gFRUkDDzY+auB3dHONF1U1z06EANkkPCC3a538UANBIaPjwpRdBzNw1xl 708 * bvn5aCt3HwKBgBfOl4jGEXYmN6K+u0ebqRDkt2gIoW6bFo7Xd6xci/gFWjoVCOBY 709 * gC8GLMnw3z2qgav4cQIg8EDYpbpE4FHQnntPkKW/bru0Nt3yaNb8igy1aZORfIvZ 710 * qTMLE3melcZW7LaiqeN1V0vH/MCUdpX9Y14K9CJYxzsROgPqdEgMWYDFAoGAAe9l 711 * XMieUOhl0sqhdZYRbO1eiwTILXQ6yGMiB8ae/v0pbBEWlpn8k2+JkqVTwHggbCAZ 712 * jOaqVtX1mUyTYzjsTz4ZYjhaHJ3j1WlegoMcstdfT+txMU74ogdOqMzhxSUO45g8 713 * f9W89mpa8bBjOPu+yFy66tDaZ6sWE7c5SXEHXl8CgYEAtAWwFPoDSTdzoXAwRof0 714 * QMO08+PnQGoPbMJTqrgxrHYCS8u4cYSHdDMJDCOMo5gFXyC+5FfTiGwBhy58z5b7 715 * gBwFKI9RgRfV1D/NimxPrlj3WHyec1/Cs+Br+/vekMVFg5gekeHr4aGSF4bk0AjV 716 * Tv/pQjyRuZAt66IbRZdl2II= 717 * -----END PRIVATE KEY----- 718 */ 719 720 /* Load private key BIO, DER-encoded public key and PKCS#8 private key for testing */ 721 if (!TEST_ptr(bio_priv = BIO_new(BIO_s_mem())) 722 || !TEST_int_gt(BIO_write(bio_priv, pem_rsa_priv_key, sizeof(pem_rsa_priv_key)), 0) 723 || !TEST_ptr(pkey = PEM_read_bio_PrivateKey_ex(bio_priv, NULL, NULL, NULL, NULL, NULL)) 724 || !TEST_int_ge(BIO_seek(bio_priv, 0), 0) 725 || !TEST_int_gt((len_pub = i2d_PUBKEY(pkey, &encoded_pub)), 0) 726 || !TEST_ptr(p8 = EVP_PKEY2PKCS8(pkey))) 727 goto end; 728 EVP_PKEY_free(pkey); 729 pkey = NULL; 730 731 for (i = 0; i < OSSL_NELEM(properties_test); i++) { 732 const char *libctx_prop = properties_test[i].provider_props; 733 const char *explicit_prop = properties_test[i].explicit_props; 734 /* *curr_provider will be updated in reset_ctx_providers */ 735 OSSL_PROVIDER **curr_provider = &providers[properties_test[i].curr_provider_idx]; 736 737 /* 738 * Decoding a PEM-encoded key uses the properties to select the right provider. 739 * Using a PEM-encoding adds an extra decoder before the key is created. 740 */ 741 if (!TEST_int_eq(reset_ctx_providers(&my_libctx, providers, libctx_prop), 1)) 742 goto end; 743 if (!TEST_int_ge(BIO_seek(bio_priv, 0), 0) 744 || !TEST_ptr(pkey = PEM_read_bio_PrivateKey_ex(bio_priv, NULL, NULL, NULL, my_libctx, 745 explicit_prop)) 746 || !TEST_ptr_eq(EVP_PKEY_get0_provider(pkey), *curr_provider)) 747 goto end; 748 EVP_PKEY_free(pkey); 749 pkey = NULL; 750 751 /* Decoding a DER-encoded X509_PUBKEY uses the properties to select the right provider */ 752 if (!TEST_int_eq(reset_ctx_providers(&my_libctx, providers, libctx_prop), 1)) 753 goto end; 754 p = encoded_pub; 755 if (!TEST_ptr(pkey = d2i_PUBKEY_ex(NULL, &p, len_pub, my_libctx, explicit_prop)) 756 || !TEST_ptr_eq(EVP_PKEY_get0_provider(pkey), *curr_provider)) 757 goto end; 758 EVP_PKEY_free(pkey); 759 pkey = NULL; 760 761 /* Decoding a PKCS8_PRIV_KEY_INFO uses the properties to select the right provider */ 762 if (!TEST_int_eq(reset_ctx_providers(&my_libctx, providers, libctx_prop), 1)) 763 goto end; 764 if (!TEST_ptr(pkey = EVP_PKCS82PKEY_ex(p8, my_libctx, explicit_prop)) 765 || !TEST_ptr_eq(EVP_PKEY_get0_provider(pkey), *curr_provider)) 766 goto end; 767 EVP_PKEY_free(pkey); 768 pkey = NULL; 769 } 770 771 ret = 1; 772 773 end: 774 PKCS8_PRIV_KEY_INFO_free(p8); 775 BIO_free(bio_priv); 776 OPENSSL_free(encoded_pub); 777 EVP_PKEY_free(pkey); 778 OSSL_PROVIDER_unload(providers[DEFAULT_PROVIDER_IDX]); 779 fake_rsa_finish(providers[FAKE_RSA_PROVIDER_IDX]); 780 OSSL_LIB_CTX_free(my_libctx); 781 return ret; 782 } 783 784 int setup_tests(void) 785 { 786 libctx = OSSL_LIB_CTX_new(); 787 if (libctx == NULL) 788 return 0; 789 790 ADD_TEST(test_pkey_sig); 791 ADD_TEST(test_alternative_keygen_init); 792 ADD_TEST(test_pkey_eq); 793 ADD_TEST(test_pkey_can_sign); 794 ADD_ALL_TESTS(test_pkey_store, 2); 795 ADD_TEST(test_pkey_delete); 796 ADD_TEST(test_pkey_store_open_ex); 797 ADD_TEST(test_pkey_provider_decoder_props); 798 799 return 1; 800 } 801 802 void cleanup_tests(void) 803 { 804 OSSL_LIB_CTX_free(libctx); 805 } 806