1 /* 2 * Copyright 2020-2021 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 /* 11 * Low level APIs are deprecated for public use, but still ok for internal use. 12 */ 13 #include "internal/deprecated.h" 14 15 #include <openssl/core.h> 16 #include <openssl/core_dispatch.h> 17 #include <openssl/core_names.h> 18 #include <openssl/crypto.h> 19 #include <openssl/params.h> 20 #include <openssl/asn1.h> 21 #include <openssl/err.h> 22 #include <openssl/pem.h> 23 #include <openssl/x509.h> 24 #include <openssl/pkcs12.h> /* PKCS8_encrypt() */ 25 #include <openssl/dh.h> 26 #include <openssl/dsa.h> 27 #include <openssl/ec.h> 28 #include <openssl/proverr.h> 29 #include "internal/passphrase.h" 30 #include "internal/cryptlib.h" 31 #include "crypto/ecx.h" 32 #include "crypto/rsa.h" 33 #include "prov/implementations.h" 34 #include "prov/bio.h" 35 #include "prov/provider_ctx.h" 36 #include "prov/der_rsa.h" 37 #include "endecoder_local.h" 38 39 #if defined(OPENSSL_NO_DH) && defined(OPENSSL_NO_DSA) && defined(OPENSSL_NO_EC) 40 # define OPENSSL_NO_KEYPARAMS 41 #endif 42 43 struct key2any_ctx_st { 44 PROV_CTX *provctx; 45 46 /* Set to 0 if parameters should not be saved (dsa only) */ 47 int save_parameters; 48 49 /* Set to 1 if intending to encrypt/decrypt, otherwise 0 */ 50 int cipher_intent; 51 52 EVP_CIPHER *cipher; 53 54 struct ossl_passphrase_data_st pwdata; 55 }; 56 57 typedef int check_key_type_fn(const void *key, int nid); 58 typedef int key_to_paramstring_fn(const void *key, int nid, int save, 59 void **str, int *strtype); 60 typedef int key_to_der_fn(BIO *out, const void *key, 61 int key_nid, const char *pemname, 62 key_to_paramstring_fn *p2s, i2d_of_void *k2d, 63 struct key2any_ctx_st *ctx); 64 typedef int write_bio_of_void_fn(BIO *bp, const void *x); 65 66 67 /* Free the blob allocated during key_to_paramstring_fn */ 68 static void free_asn1_data(int type, void *data) 69 { 70 switch(type) { 71 case V_ASN1_OBJECT: 72 ASN1_OBJECT_free(data); 73 break; 74 case V_ASN1_SEQUENCE: 75 ASN1_STRING_free(data); 76 break; 77 } 78 } 79 80 static PKCS8_PRIV_KEY_INFO *key_to_p8info(const void *key, int key_nid, 81 void *params, int params_type, 82 i2d_of_void *k2d) 83 { 84 /* der, derlen store the key DER output and its length */ 85 unsigned char *der = NULL; 86 int derlen; 87 /* The final PKCS#8 info */ 88 PKCS8_PRIV_KEY_INFO *p8info = NULL; 89 90 if ((p8info = PKCS8_PRIV_KEY_INFO_new()) == NULL 91 || (derlen = k2d(key, &der)) <= 0 92 || !PKCS8_pkey_set0(p8info, OBJ_nid2obj(key_nid), 0, 93 params_type, params, der, derlen)) { 94 ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE); 95 PKCS8_PRIV_KEY_INFO_free(p8info); 96 OPENSSL_free(der); 97 p8info = NULL; 98 } 99 100 return p8info; 101 } 102 103 static X509_SIG *p8info_to_encp8(PKCS8_PRIV_KEY_INFO *p8info, 104 struct key2any_ctx_st *ctx) 105 { 106 X509_SIG *p8 = NULL; 107 char kstr[PEM_BUFSIZE]; 108 size_t klen = 0; 109 OSSL_LIB_CTX *libctx = PROV_LIBCTX_OF(ctx->provctx); 110 111 if (ctx->cipher == NULL) 112 return NULL; 113 114 if (!ossl_pw_get_passphrase(kstr, sizeof(kstr), &klen, NULL, 1, 115 &ctx->pwdata)) { 116 ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_GET_PASSPHRASE); 117 return NULL; 118 } 119 /* First argument == -1 means "standard" */ 120 p8 = PKCS8_encrypt_ex(-1, ctx->cipher, kstr, klen, NULL, 0, 0, p8info, libctx, NULL); 121 OPENSSL_cleanse(kstr, klen); 122 return p8; 123 } 124 125 static X509_SIG *key_to_encp8(const void *key, int key_nid, 126 void *params, int params_type, 127 i2d_of_void *k2d, struct key2any_ctx_st *ctx) 128 { 129 PKCS8_PRIV_KEY_INFO *p8info = 130 key_to_p8info(key, key_nid, params, params_type, k2d); 131 X509_SIG *p8 = NULL; 132 133 if (p8info == NULL) { 134 free_asn1_data(params_type, params); 135 } else { 136 p8 = p8info_to_encp8(p8info, ctx); 137 PKCS8_PRIV_KEY_INFO_free(p8info); 138 } 139 return p8; 140 } 141 142 static X509_PUBKEY *key_to_pubkey(const void *key, int key_nid, 143 void *params, int params_type, 144 i2d_of_void k2d) 145 { 146 /* der, derlen store the key DER output and its length */ 147 unsigned char *der = NULL; 148 int derlen; 149 /* The final X509_PUBKEY */ 150 X509_PUBKEY *xpk = NULL; 151 152 153 if ((xpk = X509_PUBKEY_new()) == NULL 154 || (derlen = k2d(key, &der)) <= 0 155 || !X509_PUBKEY_set0_param(xpk, OBJ_nid2obj(key_nid), 156 params_type, params, der, derlen)) { 157 ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE); 158 X509_PUBKEY_free(xpk); 159 OPENSSL_free(der); 160 xpk = NULL; 161 } 162 163 return xpk; 164 } 165 166 /* 167 * key_to_epki_* produce encoded output with the private key data in a 168 * EncryptedPrivateKeyInfo structure (defined by PKCS#8). They require 169 * that there's an intent to encrypt, anything else is an error. 170 * 171 * key_to_pki_* primarly produce encoded output with the private key data 172 * in a PrivateKeyInfo structure (also defined by PKCS#8). However, if 173 * there is an intent to encrypt the data, the corresponding key_to_epki_* 174 * function is used instead. 175 * 176 * key_to_spki_* produce encoded output with the public key data in an 177 * X.509 SubjectPublicKeyInfo. 178 * 179 * Key parameters don't have any defined envelopment of this kind, but are 180 * included in some manner in the output from the functions described above, 181 * either in the AlgorithmIdentifier's parameter field, or as part of the 182 * key data itself. 183 */ 184 185 static int key_to_epki_der_priv_bio(BIO *out, const void *key, 186 int key_nid, 187 ossl_unused const char *pemname, 188 key_to_paramstring_fn *p2s, 189 i2d_of_void *k2d, 190 struct key2any_ctx_st *ctx) 191 { 192 int ret = 0; 193 void *str = NULL; 194 int strtype = V_ASN1_UNDEF; 195 X509_SIG *p8; 196 197 if (!ctx->cipher_intent) 198 return 0; 199 200 if (p2s != NULL && !p2s(key, key_nid, ctx->save_parameters, 201 &str, &strtype)) 202 return 0; 203 204 p8 = key_to_encp8(key, key_nid, str, strtype, k2d, ctx); 205 if (p8 != NULL) 206 ret = i2d_PKCS8_bio(out, p8); 207 208 X509_SIG_free(p8); 209 210 return ret; 211 } 212 213 static int key_to_epki_pem_priv_bio(BIO *out, const void *key, 214 int key_nid, 215 ossl_unused const char *pemname, 216 key_to_paramstring_fn *p2s, 217 i2d_of_void *k2d, 218 struct key2any_ctx_st *ctx) 219 { 220 int ret = 0; 221 void *str = NULL; 222 int strtype = V_ASN1_UNDEF; 223 X509_SIG *p8; 224 225 if (!ctx->cipher_intent) 226 return 0; 227 228 if (p2s != NULL && !p2s(key, key_nid, ctx->save_parameters, 229 &str, &strtype)) 230 return 0; 231 232 p8 = key_to_encp8(key, key_nid, str, strtype, k2d, ctx); 233 if (p8 != NULL) 234 ret = PEM_write_bio_PKCS8(out, p8); 235 236 X509_SIG_free(p8); 237 238 return ret; 239 } 240 241 static int key_to_pki_der_priv_bio(BIO *out, const void *key, 242 int key_nid, 243 ossl_unused const char *pemname, 244 key_to_paramstring_fn *p2s, 245 i2d_of_void *k2d, 246 struct key2any_ctx_st *ctx) 247 { 248 int ret = 0; 249 void *str = NULL; 250 int strtype = V_ASN1_UNDEF; 251 PKCS8_PRIV_KEY_INFO *p8info; 252 253 if (ctx->cipher_intent) 254 return key_to_epki_der_priv_bio(out, key, key_nid, pemname, 255 p2s, k2d, ctx); 256 257 if (p2s != NULL && !p2s(key, key_nid, ctx->save_parameters, 258 &str, &strtype)) 259 return 0; 260 261 p8info = key_to_p8info(key, key_nid, str, strtype, k2d); 262 263 if (p8info != NULL) 264 ret = i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8info); 265 else 266 free_asn1_data(strtype, str); 267 268 PKCS8_PRIV_KEY_INFO_free(p8info); 269 270 return ret; 271 } 272 273 static int key_to_pki_pem_priv_bio(BIO *out, const void *key, 274 int key_nid, 275 ossl_unused const char *pemname, 276 key_to_paramstring_fn *p2s, 277 i2d_of_void *k2d, 278 struct key2any_ctx_st *ctx) 279 { 280 int ret = 0; 281 void *str = NULL; 282 int strtype = V_ASN1_UNDEF; 283 PKCS8_PRIV_KEY_INFO *p8info; 284 285 if (ctx->cipher_intent) 286 return key_to_epki_pem_priv_bio(out, key, key_nid, pemname, 287 p2s, k2d, ctx); 288 289 if (p2s != NULL && !p2s(key, key_nid, ctx->save_parameters, 290 &str, &strtype)) 291 return 0; 292 293 p8info = key_to_p8info(key, key_nid, str, strtype, k2d); 294 295 if (p8info != NULL) 296 ret = PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8info); 297 else 298 free_asn1_data(strtype, str); 299 300 PKCS8_PRIV_KEY_INFO_free(p8info); 301 302 return ret; 303 } 304 305 static int key_to_spki_der_pub_bio(BIO *out, const void *key, 306 int key_nid, 307 ossl_unused const char *pemname, 308 key_to_paramstring_fn *p2s, 309 i2d_of_void *k2d, 310 struct key2any_ctx_st *ctx) 311 { 312 int ret = 0; 313 void *str = NULL; 314 int strtype = V_ASN1_UNDEF; 315 X509_PUBKEY *xpk = NULL; 316 317 if (p2s != NULL && !p2s(key, key_nid, ctx->save_parameters, 318 &str, &strtype)) 319 return 0; 320 321 xpk = key_to_pubkey(key, key_nid, str, strtype, k2d); 322 323 if (xpk != NULL) 324 ret = i2d_X509_PUBKEY_bio(out, xpk); 325 326 /* Also frees |str| */ 327 X509_PUBKEY_free(xpk); 328 return ret; 329 } 330 331 static int key_to_spki_pem_pub_bio(BIO *out, const void *key, 332 int key_nid, 333 ossl_unused const char *pemname, 334 key_to_paramstring_fn *p2s, 335 i2d_of_void *k2d, 336 struct key2any_ctx_st *ctx) 337 { 338 int ret = 0; 339 void *str = NULL; 340 int strtype = V_ASN1_UNDEF; 341 X509_PUBKEY *xpk = NULL; 342 343 if (p2s != NULL && !p2s(key, key_nid, ctx->save_parameters, 344 &str, &strtype)) 345 return 0; 346 347 xpk = key_to_pubkey(key, key_nid, str, strtype, k2d); 348 349 if (xpk != NULL) 350 ret = PEM_write_bio_X509_PUBKEY(out, xpk); 351 else 352 free_asn1_data(strtype, str); 353 354 /* Also frees |str| */ 355 X509_PUBKEY_free(xpk); 356 return ret; 357 } 358 359 /* 360 * key_to_type_specific_* produce encoded output with type specific key data, 361 * no envelopment; the same kind of output as the type specific i2d_ and 362 * PEM_write_ functions, which is often a simple SEQUENCE of INTEGER. 363 * 364 * OpenSSL tries to discourage production of new keys in this form, because 365 * of the ambiguity when trying to recognise them, but can't deny that PKCS#1 366 * et al still are live standards. 367 * 368 * Note that these functions completely ignore p2s, and rather rely entirely 369 * on k2d to do the complete work. 370 */ 371 static int key_to_type_specific_der_bio(BIO *out, const void *key, 372 int key_nid, 373 ossl_unused const char *pemname, 374 key_to_paramstring_fn *p2s, 375 i2d_of_void *k2d, 376 struct key2any_ctx_st *ctx) 377 { 378 unsigned char *der = NULL; 379 int derlen; 380 int ret; 381 382 if ((derlen = k2d(key, &der)) <= 0) { 383 ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE); 384 return 0; 385 } 386 387 ret = BIO_write(out, der, derlen); 388 OPENSSL_free(der); 389 return ret > 0; 390 } 391 #define key_to_type_specific_der_priv_bio key_to_type_specific_der_bio 392 #define key_to_type_specific_der_pub_bio key_to_type_specific_der_bio 393 #define key_to_type_specific_der_param_bio key_to_type_specific_der_bio 394 395 static int key_to_type_specific_pem_bio_cb(BIO *out, const void *key, 396 int key_nid, const char *pemname, 397 key_to_paramstring_fn *p2s, 398 i2d_of_void *k2d, 399 struct key2any_ctx_st *ctx, 400 pem_password_cb *cb, void *cbarg) 401 { 402 return 403 PEM_ASN1_write_bio(k2d, pemname, out, key, ctx->cipher, 404 NULL, 0, cb, cbarg) > 0; 405 } 406 407 static int key_to_type_specific_pem_priv_bio(BIO *out, const void *key, 408 int key_nid, const char *pemname, 409 key_to_paramstring_fn *p2s, 410 i2d_of_void *k2d, 411 struct key2any_ctx_st *ctx) 412 { 413 return key_to_type_specific_pem_bio_cb(out, key, key_nid, pemname, 414 p2s, k2d, ctx, 415 ossl_pw_pem_password, &ctx->pwdata); 416 } 417 418 static int key_to_type_specific_pem_pub_bio(BIO *out, const void *key, 419 int key_nid, const char *pemname, 420 key_to_paramstring_fn *p2s, 421 i2d_of_void *k2d, 422 struct key2any_ctx_st *ctx) 423 { 424 return key_to_type_specific_pem_bio_cb(out, key, key_nid, pemname, 425 p2s, k2d, ctx, NULL, NULL); 426 } 427 428 #ifndef OPENSSL_NO_KEYPARAMS 429 static int key_to_type_specific_pem_param_bio(BIO *out, const void *key, 430 int key_nid, const char *pemname, 431 key_to_paramstring_fn *p2s, 432 i2d_of_void *k2d, 433 struct key2any_ctx_st *ctx) 434 { 435 return key_to_type_specific_pem_bio_cb(out, key, key_nid, pemname, 436 p2s, k2d, ctx, NULL, NULL); 437 } 438 #endif 439 440 /* ---------------------------------------------------------------------- */ 441 442 #ifndef OPENSSL_NO_DH 443 static int prepare_dh_params(const void *dh, int nid, int save, 444 void **pstr, int *pstrtype) 445 { 446 ASN1_STRING *params = ASN1_STRING_new(); 447 448 if (params == NULL) { 449 ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE); 450 return 0; 451 } 452 453 if (nid == EVP_PKEY_DHX) 454 params->length = i2d_DHxparams(dh, ¶ms->data); 455 else 456 params->length = i2d_DHparams(dh, ¶ms->data); 457 458 if (params->length <= 0) { 459 ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE); 460 ASN1_STRING_free(params); 461 return 0; 462 } 463 params->type = V_ASN1_SEQUENCE; 464 465 *pstr = params; 466 *pstrtype = V_ASN1_SEQUENCE; 467 return 1; 468 } 469 470 static int dh_spki_pub_to_der(const void *dh, unsigned char **pder) 471 { 472 const BIGNUM *bn = NULL; 473 ASN1_INTEGER *pub_key = NULL; 474 int ret; 475 476 if ((bn = DH_get0_pub_key(dh)) == NULL) { 477 ERR_raise(ERR_LIB_PROV, PROV_R_NOT_A_PUBLIC_KEY); 478 return 0; 479 } 480 if ((pub_key = BN_to_ASN1_INTEGER(bn, NULL)) == NULL) { 481 ERR_raise(ERR_LIB_PROV, PROV_R_BN_ERROR); 482 return 0; 483 } 484 485 ret = i2d_ASN1_INTEGER(pub_key, pder); 486 487 ASN1_STRING_clear_free(pub_key); 488 return ret; 489 } 490 491 static int dh_pki_priv_to_der(const void *dh, unsigned char **pder) 492 { 493 const BIGNUM *bn = NULL; 494 ASN1_INTEGER *priv_key = NULL; 495 int ret; 496 497 if ((bn = DH_get0_priv_key(dh)) == NULL) { 498 ERR_raise(ERR_LIB_PROV, PROV_R_NOT_A_PRIVATE_KEY); 499 return 0; 500 } 501 if ((priv_key = BN_to_ASN1_INTEGER(bn, NULL)) == NULL) { 502 ERR_raise(ERR_LIB_PROV, PROV_R_BN_ERROR); 503 return 0; 504 } 505 506 ret = i2d_ASN1_INTEGER(priv_key, pder); 507 508 ASN1_STRING_clear_free(priv_key); 509 return ret; 510 } 511 512 # define dh_epki_priv_to_der dh_pki_priv_to_der 513 514 static int dh_type_specific_params_to_der(const void *dh, unsigned char **pder) 515 { 516 if (DH_test_flags(dh, DH_FLAG_TYPE_DHX)) 517 return i2d_DHxparams(dh, pder); 518 return i2d_DHparams(dh, pder); 519 } 520 521 /* 522 * DH doesn't have i2d_DHPrivateKey or i2d_DHPublicKey, so we can't make 523 * corresponding functions here. 524 */ 525 # define dh_type_specific_priv_to_der NULL 526 # define dh_type_specific_pub_to_der NULL 527 528 static int dh_check_key_type(const void *dh, int expected_type) 529 { 530 int type = 531 DH_test_flags(dh, DH_FLAG_TYPE_DHX) ? EVP_PKEY_DHX : EVP_PKEY_DH; 532 533 return type == expected_type; 534 } 535 536 # define dh_evp_type EVP_PKEY_DH 537 # define dhx_evp_type EVP_PKEY_DHX 538 # define dh_input_type "DH" 539 # define dhx_input_type "DHX" 540 # define dh_pem_type "DH" 541 # define dhx_pem_type "X9.42 DH" 542 #endif 543 544 /* ---------------------------------------------------------------------- */ 545 546 #ifndef OPENSSL_NO_DSA 547 static int encode_dsa_params(const void *dsa, int nid, 548 void **pstr, int *pstrtype) 549 { 550 ASN1_STRING *params = ASN1_STRING_new(); 551 552 if (params == NULL) { 553 ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE); 554 return 0; 555 } 556 557 params->length = i2d_DSAparams(dsa, ¶ms->data); 558 559 if (params->length <= 0) { 560 ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE); 561 ASN1_STRING_free(params); 562 return 0; 563 } 564 565 *pstrtype = V_ASN1_SEQUENCE; 566 *pstr = params; 567 return 1; 568 } 569 570 static int prepare_dsa_params(const void *dsa, int nid, int save, 571 void **pstr, int *pstrtype) 572 { 573 const BIGNUM *p = DSA_get0_p(dsa); 574 const BIGNUM *q = DSA_get0_q(dsa); 575 const BIGNUM *g = DSA_get0_g(dsa); 576 577 if (save && p != NULL && q != NULL && g != NULL) 578 return encode_dsa_params(dsa, nid, pstr, pstrtype); 579 580 *pstr = NULL; 581 *pstrtype = V_ASN1_UNDEF; 582 return 1; 583 } 584 585 static int dsa_spki_pub_to_der(const void *dsa, unsigned char **pder) 586 { 587 const BIGNUM *bn = NULL; 588 ASN1_INTEGER *pub_key = NULL; 589 int ret; 590 591 if ((bn = DSA_get0_pub_key(dsa)) == NULL) { 592 ERR_raise(ERR_LIB_PROV, PROV_R_NOT_A_PUBLIC_KEY); 593 return 0; 594 } 595 if ((pub_key = BN_to_ASN1_INTEGER(bn, NULL)) == NULL) { 596 ERR_raise(ERR_LIB_PROV, PROV_R_BN_ERROR); 597 return 0; 598 } 599 600 ret = i2d_ASN1_INTEGER(pub_key, pder); 601 602 ASN1_STRING_clear_free(pub_key); 603 return ret; 604 } 605 606 static int dsa_pki_priv_to_der(const void *dsa, unsigned char **pder) 607 { 608 const BIGNUM *bn = NULL; 609 ASN1_INTEGER *priv_key = NULL; 610 int ret; 611 612 if ((bn = DSA_get0_priv_key(dsa)) == NULL) { 613 ERR_raise(ERR_LIB_PROV, PROV_R_NOT_A_PRIVATE_KEY); 614 return 0; 615 } 616 if ((priv_key = BN_to_ASN1_INTEGER(bn, NULL)) == NULL) { 617 ERR_raise(ERR_LIB_PROV, PROV_R_BN_ERROR); 618 return 0; 619 } 620 621 ret = i2d_ASN1_INTEGER(priv_key, pder); 622 623 ASN1_STRING_clear_free(priv_key); 624 return ret; 625 } 626 627 # define dsa_epki_priv_to_der dsa_pki_priv_to_der 628 629 # define dsa_type_specific_priv_to_der (i2d_of_void *)i2d_DSAPrivateKey 630 # define dsa_type_specific_pub_to_der (i2d_of_void *)i2d_DSAPublicKey 631 # define dsa_type_specific_params_to_der (i2d_of_void *)i2d_DSAparams 632 633 # define dsa_check_key_type NULL 634 # define dsa_evp_type EVP_PKEY_DSA 635 # define dsa_input_type "DSA" 636 # define dsa_pem_type "DSA" 637 #endif 638 639 /* ---------------------------------------------------------------------- */ 640 641 #ifndef OPENSSL_NO_EC 642 static int prepare_ec_explicit_params(const void *eckey, 643 void **pstr, int *pstrtype) 644 { 645 ASN1_STRING *params = ASN1_STRING_new(); 646 647 if (params == NULL) { 648 ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE); 649 return 0; 650 } 651 652 params->length = i2d_ECParameters(eckey, ¶ms->data); 653 if (params->length <= 0) { 654 ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE); 655 ASN1_STRING_free(params); 656 return 0; 657 } 658 659 *pstrtype = V_ASN1_SEQUENCE; 660 *pstr = params; 661 return 1; 662 } 663 664 /* 665 * This implements EcpkParameters, where the CHOICE is based on whether there 666 * is a curve name (curve nid) to be found or not. See RFC 3279 for details. 667 */ 668 static int prepare_ec_params(const void *eckey, int nid, int save, 669 void **pstr, int *pstrtype) 670 { 671 int curve_nid; 672 const EC_GROUP *group = EC_KEY_get0_group(eckey); 673 ASN1_OBJECT *params = NULL; 674 675 if (group == NULL) 676 return 0; 677 curve_nid = EC_GROUP_get_curve_name(group); 678 if (curve_nid != NID_undef) { 679 params = OBJ_nid2obj(curve_nid); 680 if (params == NULL) 681 return 0; 682 } 683 684 if (curve_nid != NID_undef 685 && (EC_GROUP_get_asn1_flag(group) & OPENSSL_EC_NAMED_CURVE)) { 686 /* The CHOICE came to namedCurve */ 687 if (OBJ_length(params) == 0) { 688 /* Some curves might not have an associated OID */ 689 ERR_raise(ERR_LIB_PROV, PROV_R_MISSING_OID); 690 ASN1_OBJECT_free(params); 691 return 0; 692 } 693 *pstr = params; 694 *pstrtype = V_ASN1_OBJECT; 695 return 1; 696 } else { 697 /* The CHOICE came to ecParameters */ 698 return prepare_ec_explicit_params(eckey, pstr, pstrtype); 699 } 700 } 701 702 static int ec_spki_pub_to_der(const void *eckey, unsigned char **pder) 703 { 704 if (EC_KEY_get0_public_key(eckey) == NULL) { 705 ERR_raise(ERR_LIB_PROV, PROV_R_NOT_A_PUBLIC_KEY); 706 return 0; 707 } 708 return i2o_ECPublicKey(eckey, pder); 709 } 710 711 static int ec_pki_priv_to_der(const void *veckey, unsigned char **pder) 712 { 713 EC_KEY *eckey = (EC_KEY *)veckey; 714 unsigned int old_flags; 715 int ret = 0; 716 717 /* 718 * For PKCS8 the curve name appears in the PKCS8_PRIV_KEY_INFO object 719 * as the pkeyalg->parameter field. (For a named curve this is an OID) 720 * The pkey field is an octet string that holds the encoded 721 * ECPrivateKey SEQUENCE with the optional parameters field omitted. 722 * We omit this by setting the EC_PKEY_NO_PARAMETERS flag. 723 */ 724 old_flags = EC_KEY_get_enc_flags(eckey); /* save old flags */ 725 EC_KEY_set_enc_flags(eckey, old_flags | EC_PKEY_NO_PARAMETERS); 726 ret = i2d_ECPrivateKey(eckey, pder); 727 EC_KEY_set_enc_flags(eckey, old_flags); /* restore old flags */ 728 return ret; /* return the length of the der encoded data */ 729 } 730 731 # define ec_epki_priv_to_der ec_pki_priv_to_der 732 733 # define ec_type_specific_params_to_der (i2d_of_void *)i2d_ECParameters 734 /* No ec_type_specific_pub_to_der, there simply is no such thing */ 735 # define ec_type_specific_priv_to_der (i2d_of_void *)i2d_ECPrivateKey 736 737 # define ec_check_key_type NULL 738 # define ec_evp_type EVP_PKEY_EC 739 # define ec_input_type "EC" 740 # define ec_pem_type "EC" 741 742 # ifndef OPENSSL_NO_SM2 743 # define sm2_evp_type EVP_PKEY_SM2 744 # define sm2_input_type "SM2" 745 # define sm2_pem_type "SM2" 746 # endif 747 #endif 748 749 /* ---------------------------------------------------------------------- */ 750 751 #ifndef OPENSSL_NO_EC 752 # define prepare_ecx_params NULL 753 754 static int ecx_spki_pub_to_der(const void *vecxkey, unsigned char **pder) 755 { 756 const ECX_KEY *ecxkey = vecxkey; 757 unsigned char *keyblob; 758 759 if (ecxkey == NULL) { 760 ERR_raise(ERR_LIB_PROV, ERR_R_PASSED_NULL_PARAMETER); 761 return 0; 762 } 763 764 keyblob = OPENSSL_memdup(ecxkey->pubkey, ecxkey->keylen); 765 if (keyblob == NULL) { 766 ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE); 767 return 0; 768 } 769 770 *pder = keyblob; 771 return ecxkey->keylen; 772 } 773 774 static int ecx_pki_priv_to_der(const void *vecxkey, unsigned char **pder) 775 { 776 const ECX_KEY *ecxkey = vecxkey; 777 ASN1_OCTET_STRING oct; 778 int keybloblen; 779 780 if (ecxkey == NULL || ecxkey->privkey == NULL) { 781 ERR_raise(ERR_LIB_PROV, ERR_R_PASSED_NULL_PARAMETER); 782 return 0; 783 } 784 785 oct.data = ecxkey->privkey; 786 oct.length = ecxkey->keylen; 787 oct.flags = 0; 788 789 keybloblen = i2d_ASN1_OCTET_STRING(&oct, pder); 790 if (keybloblen < 0) { 791 ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE); 792 return 0; 793 } 794 795 return keybloblen; 796 } 797 798 # define ecx_epki_priv_to_der ecx_pki_priv_to_der 799 800 /* 801 * ED25519, ED448, X25519 and X448 only has PKCS#8 / SubjectPublicKeyInfo 802 * representation, so we don't define ecx_type_specific_[priv,pub,params]_to_der. 803 */ 804 805 # define ecx_check_key_type NULL 806 807 # define ed25519_evp_type EVP_PKEY_ED25519 808 # define ed448_evp_type EVP_PKEY_ED448 809 # define x25519_evp_type EVP_PKEY_X25519 810 # define x448_evp_type EVP_PKEY_X448 811 # define ed25519_input_type "ED25519" 812 # define ed448_input_type "ED448" 813 # define x25519_input_type "X25519" 814 # define x448_input_type "X448" 815 # define ed25519_pem_type "ED25519" 816 # define ed448_pem_type "ED448" 817 # define x25519_pem_type "X25519" 818 # define x448_pem_type "X448" 819 #endif 820 821 /* ---------------------------------------------------------------------- */ 822 823 /* 824 * Helper functions to prepare RSA-PSS params for encoding. We would 825 * have simply written the whole AlgorithmIdentifier, but existing libcrypto 826 * functionality doesn't allow that. 827 */ 828 829 static int prepare_rsa_params(const void *rsa, int nid, int save, 830 void **pstr, int *pstrtype) 831 { 832 const RSA_PSS_PARAMS_30 *pss = ossl_rsa_get0_pss_params_30((RSA *)rsa); 833 834 *pstr = NULL; 835 836 switch (RSA_test_flags(rsa, RSA_FLAG_TYPE_MASK)) { 837 case RSA_FLAG_TYPE_RSA: 838 /* If plain RSA, the parameters shall be NULL */ 839 *pstrtype = V_ASN1_NULL; 840 return 1; 841 case RSA_FLAG_TYPE_RSASSAPSS: 842 if (ossl_rsa_pss_params_30_is_unrestricted(pss)) { 843 *pstrtype = V_ASN1_UNDEF; 844 return 1; 845 } else { 846 ASN1_STRING *astr = NULL; 847 WPACKET pkt; 848 unsigned char *str = NULL; 849 size_t str_sz = 0; 850 int i; 851 852 for (i = 0; i < 2; i++) { 853 switch (i) { 854 case 0: 855 if (!WPACKET_init_null_der(&pkt)) 856 goto err; 857 break; 858 case 1: 859 if ((str = OPENSSL_malloc(str_sz)) == NULL 860 || !WPACKET_init_der(&pkt, str, str_sz)) { 861 goto err; 862 } 863 break; 864 } 865 if (!ossl_DER_w_RSASSA_PSS_params(&pkt, -1, pss) 866 || !WPACKET_finish(&pkt) 867 || !WPACKET_get_total_written(&pkt, &str_sz)) 868 goto err; 869 WPACKET_cleanup(&pkt); 870 871 /* 872 * If no PSS parameters are going to be written, there's no 873 * point going for another iteration. 874 * This saves us from getting |str| allocated just to have it 875 * immediately de-allocated. 876 */ 877 if (str_sz == 0) 878 break; 879 } 880 881 if ((astr = ASN1_STRING_new()) == NULL) 882 goto err; 883 *pstrtype = V_ASN1_SEQUENCE; 884 ASN1_STRING_set0(astr, str, (int)str_sz); 885 *pstr = astr; 886 887 return 1; 888 err: 889 OPENSSL_free(str); 890 return 0; 891 } 892 } 893 894 /* Currently unsupported RSA key type */ 895 return 0; 896 } 897 898 /* 899 * RSA is extremely simple, as PKCS#1 is used for the PKCS#8 |privateKey| 900 * field as well as the SubjectPublicKeyInfo |subjectPublicKey| field. 901 */ 902 #define rsa_pki_priv_to_der rsa_type_specific_priv_to_der 903 #define rsa_epki_priv_to_der rsa_type_specific_priv_to_der 904 #define rsa_spki_pub_to_der rsa_type_specific_pub_to_der 905 #define rsa_type_specific_priv_to_der (i2d_of_void *)i2d_RSAPrivateKey 906 #define rsa_type_specific_pub_to_der (i2d_of_void *)i2d_RSAPublicKey 907 #define rsa_type_specific_params_to_der NULL 908 909 static int rsa_check_key_type(const void *rsa, int expected_type) 910 { 911 switch (RSA_test_flags(rsa, RSA_FLAG_TYPE_MASK)) { 912 case RSA_FLAG_TYPE_RSA: 913 return expected_type == EVP_PKEY_RSA; 914 case RSA_FLAG_TYPE_RSASSAPSS: 915 return expected_type == EVP_PKEY_RSA_PSS; 916 } 917 918 /* Currently unsupported RSA key type */ 919 return EVP_PKEY_NONE; 920 } 921 922 #define rsa_evp_type EVP_PKEY_RSA 923 #define rsapss_evp_type EVP_PKEY_RSA_PSS 924 #define rsa_input_type "RSA" 925 #define rsapss_input_type "RSA-PSS" 926 #define rsa_pem_type "RSA" 927 #define rsapss_pem_type "RSA-PSS" 928 929 /* ---------------------------------------------------------------------- */ 930 931 static OSSL_FUNC_decoder_newctx_fn key2any_newctx; 932 static OSSL_FUNC_decoder_freectx_fn key2any_freectx; 933 934 static void *key2any_newctx(void *provctx) 935 { 936 struct key2any_ctx_st *ctx = OPENSSL_zalloc(sizeof(*ctx)); 937 938 if (ctx != NULL) { 939 ctx->provctx = provctx; 940 ctx->save_parameters = 1; 941 } 942 943 return ctx; 944 } 945 946 static void key2any_freectx(void *vctx) 947 { 948 struct key2any_ctx_st *ctx = vctx; 949 950 ossl_pw_clear_passphrase_data(&ctx->pwdata); 951 EVP_CIPHER_free(ctx->cipher); 952 OPENSSL_free(ctx); 953 } 954 955 static const OSSL_PARAM *key2any_settable_ctx_params(ossl_unused void *provctx) 956 { 957 static const OSSL_PARAM settables[] = { 958 OSSL_PARAM_utf8_string(OSSL_ENCODER_PARAM_CIPHER, NULL, 0), 959 OSSL_PARAM_utf8_string(OSSL_ENCODER_PARAM_PROPERTIES, NULL, 0), 960 OSSL_PARAM_END, 961 }; 962 963 return settables; 964 } 965 966 static int key2any_set_ctx_params(void *vctx, const OSSL_PARAM params[]) 967 { 968 struct key2any_ctx_st *ctx = vctx; 969 OSSL_LIB_CTX *libctx = ossl_prov_ctx_get0_libctx(ctx->provctx); 970 const OSSL_PARAM *cipherp = 971 OSSL_PARAM_locate_const(params, OSSL_ENCODER_PARAM_CIPHER); 972 const OSSL_PARAM *propsp = 973 OSSL_PARAM_locate_const(params, OSSL_ENCODER_PARAM_PROPERTIES); 974 const OSSL_PARAM *save_paramsp = 975 OSSL_PARAM_locate_const(params, OSSL_ENCODER_PARAM_SAVE_PARAMETERS); 976 977 if (cipherp != NULL) { 978 const char *ciphername = NULL; 979 const char *props = NULL; 980 981 if (!OSSL_PARAM_get_utf8_string_ptr(cipherp, &ciphername)) 982 return 0; 983 if (propsp != NULL && !OSSL_PARAM_get_utf8_string_ptr(propsp, &props)) 984 return 0; 985 986 EVP_CIPHER_free(ctx->cipher); 987 ctx->cipher = NULL; 988 ctx->cipher_intent = ciphername != NULL; 989 if (ciphername != NULL 990 && ((ctx->cipher = 991 EVP_CIPHER_fetch(libctx, ciphername, props)) == NULL)) 992 return 0; 993 } 994 995 if (save_paramsp != NULL) { 996 if (!OSSL_PARAM_get_int(save_paramsp, &ctx->save_parameters)) 997 return 0; 998 } 999 return 1; 1000 } 1001 1002 static int key2any_check_selection(int selection, int selection_mask) 1003 { 1004 /* 1005 * The selections are kinda sorta "levels", i.e. each selection given 1006 * here is assumed to include those following. 1007 */ 1008 int checks[] = { 1009 OSSL_KEYMGMT_SELECT_PRIVATE_KEY, 1010 OSSL_KEYMGMT_SELECT_PUBLIC_KEY, 1011 OSSL_KEYMGMT_SELECT_ALL_PARAMETERS 1012 }; 1013 size_t i; 1014 1015 /* The decoder implementations made here support guessing */ 1016 if (selection == 0) 1017 return 1; 1018 1019 for (i = 0; i < OSSL_NELEM(checks); i++) { 1020 int check1 = (selection & checks[i]) != 0; 1021 int check2 = (selection_mask & checks[i]) != 0; 1022 1023 /* 1024 * If the caller asked for the currently checked bit(s), return 1025 * whether the decoder description says it's supported. 1026 */ 1027 if (check1) 1028 return check2; 1029 } 1030 1031 /* This should be dead code, but just to be safe... */ 1032 return 0; 1033 } 1034 1035 static int key2any_encode(struct key2any_ctx_st *ctx, OSSL_CORE_BIO *cout, 1036 const void *key, int type, const char *pemname, 1037 check_key_type_fn *checker, 1038 key_to_der_fn *writer, 1039 OSSL_PASSPHRASE_CALLBACK *pwcb, void *pwcbarg, 1040 key_to_paramstring_fn *key2paramstring, 1041 i2d_of_void *key2der) 1042 { 1043 int ret = 0; 1044 1045 if (key == NULL) { 1046 ERR_raise(ERR_LIB_PROV, ERR_R_PASSED_NULL_PARAMETER); 1047 } else if (writer != NULL 1048 && (checker == NULL || checker(key, type))) { 1049 BIO *out = ossl_bio_new_from_core_bio(ctx->provctx, cout); 1050 1051 if (out != NULL 1052 && (pwcb == NULL 1053 || ossl_pw_set_ossl_passphrase_cb(&ctx->pwdata, pwcb, pwcbarg))) 1054 ret = 1055 writer(out, key, type, pemname, key2paramstring, key2der, ctx); 1056 1057 BIO_free(out); 1058 } else { 1059 ERR_raise(ERR_LIB_PROV, ERR_R_PASSED_INVALID_ARGUMENT); 1060 } 1061 return ret; 1062 } 1063 1064 #define DO_PRIVATE_KEY_selection_mask OSSL_KEYMGMT_SELECT_PRIVATE_KEY 1065 #define DO_PRIVATE_KEY(impl, type, kind, output) \ 1066 if ((selection & DO_PRIVATE_KEY_selection_mask) != 0) \ 1067 return key2any_encode(ctx, cout, key, impl##_evp_type, \ 1068 impl##_pem_type " PRIVATE KEY", \ 1069 type##_check_key_type, \ 1070 key_to_##kind##_##output##_priv_bio, \ 1071 cb, cbarg, prepare_##type##_params, \ 1072 type##_##kind##_priv_to_der); 1073 1074 #define DO_PUBLIC_KEY_selection_mask OSSL_KEYMGMT_SELECT_PUBLIC_KEY 1075 #define DO_PUBLIC_KEY(impl, type, kind, output) \ 1076 if ((selection & DO_PUBLIC_KEY_selection_mask) != 0) \ 1077 return key2any_encode(ctx, cout, key, impl##_evp_type, \ 1078 impl##_pem_type " PUBLIC KEY", \ 1079 type##_check_key_type, \ 1080 key_to_##kind##_##output##_pub_bio, \ 1081 cb, cbarg, prepare_##type##_params, \ 1082 type##_##kind##_pub_to_der); 1083 1084 #define DO_PARAMETERS_selection_mask OSSL_KEYMGMT_SELECT_ALL_PARAMETERS 1085 #define DO_PARAMETERS(impl, type, kind, output) \ 1086 if ((selection & DO_PARAMETERS_selection_mask) != 0) \ 1087 return key2any_encode(ctx, cout, key, impl##_evp_type, \ 1088 impl##_pem_type " PARAMETERS", \ 1089 type##_check_key_type, \ 1090 key_to_##kind##_##output##_param_bio, \ 1091 NULL, NULL, NULL, \ 1092 type##_##kind##_params_to_der); 1093 1094 /*- 1095 * Implement the kinds of output structure that can be produced. They are 1096 * referred to by name, and for each name, the following macros are defined 1097 * (braces not included): 1098 * 1099 * DO_{kind}_selection_mask 1100 * 1101 * A mask of selection bits that must not be zero. This is used as a 1102 * selection criterion for each implementation. 1103 * This mask must never be zero. 1104 * 1105 * DO_{kind} 1106 * 1107 * The performing macro. It must use the DO_ macros defined above, 1108 * always in this order: 1109 * 1110 * - DO_PRIVATE_KEY 1111 * - DO_PUBLIC_KEY 1112 * - DO_PARAMETERS 1113 * 1114 * Any of those may be omitted, but the relative order must still be 1115 * the same. 1116 */ 1117 1118 /* 1119 * PKCS#8 defines two structures for private keys only: 1120 * - PrivateKeyInfo (raw unencrypted form) 1121 * - EncryptedPrivateKeyInfo (encrypted wrapping) 1122 * 1123 * To allow a certain amount of flexibility, we allow the routines 1124 * for PrivateKeyInfo to also produce EncryptedPrivateKeyInfo if a 1125 * passphrase callback has been passed to them. 1126 */ 1127 #define DO_PrivateKeyInfo_selection_mask DO_PRIVATE_KEY_selection_mask 1128 #define DO_PrivateKeyInfo(impl, type, output) \ 1129 DO_PRIVATE_KEY(impl, type, pki, output) 1130 1131 #define DO_EncryptedPrivateKeyInfo_selection_mask DO_PRIVATE_KEY_selection_mask 1132 #define DO_EncryptedPrivateKeyInfo(impl, type, output) \ 1133 DO_PRIVATE_KEY(impl, type, epki, output) 1134 1135 /* SubjectPublicKeyInfo is a structure for public keys only */ 1136 #define DO_SubjectPublicKeyInfo_selection_mask DO_PUBLIC_KEY_selection_mask 1137 #define DO_SubjectPublicKeyInfo(impl, type, output) \ 1138 DO_PUBLIC_KEY(impl, type, spki, output) 1139 1140 /* 1141 * "type-specific" is a uniform name for key type specific output for private 1142 * and public keys as well as key parameters. This is used internally in 1143 * libcrypto so it doesn't have to have special knowledge about select key 1144 * types, but also when no better name has been found. If there are more 1145 * expressive DO_ names above, those are preferred. 1146 * 1147 * Three forms exist: 1148 * 1149 * - type_specific_keypair Only supports private and public key 1150 * - type_specific_params Only supports parameters 1151 * - type_specific Supports all parts of an EVP_PKEY 1152 * - type_specific_no_pub Supports all parts of an EVP_PKEY 1153 * except public key 1154 */ 1155 #define DO_type_specific_params_selection_mask DO_PARAMETERS_selection_mask 1156 #define DO_type_specific_params(impl, type, output) \ 1157 DO_PARAMETERS(impl, type, type_specific, output) 1158 #define DO_type_specific_keypair_selection_mask \ 1159 ( DO_PRIVATE_KEY_selection_mask | DO_PUBLIC_KEY_selection_mask ) 1160 #define DO_type_specific_keypair(impl, type, output) \ 1161 DO_PRIVATE_KEY(impl, type, type_specific, output) \ 1162 DO_PUBLIC_KEY(impl, type, type_specific, output) 1163 #define DO_type_specific_selection_mask \ 1164 ( DO_type_specific_keypair_selection_mask \ 1165 | DO_type_specific_params_selection_mask ) 1166 #define DO_type_specific(impl, type, output) \ 1167 DO_type_specific_keypair(impl, type, output) \ 1168 DO_type_specific_params(impl, type, output) 1169 #define DO_type_specific_no_pub_selection_mask \ 1170 ( DO_PRIVATE_KEY_selection_mask | DO_PARAMETERS_selection_mask) 1171 #define DO_type_specific_no_pub(impl, type, output) \ 1172 DO_PRIVATE_KEY(impl, type, type_specific, output) \ 1173 DO_type_specific_params(impl, type, output) 1174 1175 /* 1176 * Type specific aliases for the cases where we need to refer to them by 1177 * type name. 1178 * This only covers key types that are represented with i2d_{TYPE}PrivateKey, 1179 * i2d_{TYPE}PublicKey and i2d_{TYPE}params / i2d_{TYPE}Parameters. 1180 */ 1181 #define DO_RSA_selection_mask DO_type_specific_keypair_selection_mask 1182 #define DO_RSA(impl, type, output) DO_type_specific_keypair(impl, type, output) 1183 1184 #define DO_DH_selection_mask DO_type_specific_params_selection_mask 1185 #define DO_DH(impl, type, output) DO_type_specific_params(impl, type, output) 1186 1187 #define DO_DHX_selection_mask DO_type_specific_params_selection_mask 1188 #define DO_DHX(impl, type, output) DO_type_specific_params(impl, type, output) 1189 1190 #define DO_DSA_selection_mask DO_type_specific_selection_mask 1191 #define DO_DSA(impl, type, output) DO_type_specific(impl, type, output) 1192 1193 #define DO_EC_selection_mask DO_type_specific_no_pub_selection_mask 1194 #define DO_EC(impl, type, output) DO_type_specific_no_pub(impl, type, output) 1195 1196 #define DO_SM2_selection_mask DO_type_specific_no_pub_selection_mask 1197 #define DO_SM2(impl, type, output) DO_type_specific_no_pub(impl, type, output) 1198 1199 /* PKCS#1 defines a structure for RSA private and public keys */ 1200 #define DO_PKCS1_selection_mask DO_RSA_selection_mask 1201 #define DO_PKCS1(impl, type, output) DO_RSA(impl, type, output) 1202 1203 /* PKCS#3 defines a structure for DH parameters */ 1204 #define DO_PKCS3_selection_mask DO_DH_selection_mask 1205 #define DO_PKCS3(impl, type, output) DO_DH(impl, type, output) 1206 /* X9.42 defines a structure for DHx parameters */ 1207 #define DO_X9_42_selection_mask DO_DHX_selection_mask 1208 #define DO_X9_42(impl, type, output) DO_DHX(impl, type, output) 1209 1210 /* X9.62 defines a structure for EC keys and parameters */ 1211 #define DO_X9_62_selection_mask DO_EC_selection_mask 1212 #define DO_X9_62(impl, type, output) DO_EC(impl, type, output) 1213 1214 /* 1215 * MAKE_ENCODER is the single driver for creating OSSL_DISPATCH tables. 1216 * It takes the following arguments: 1217 * 1218 * impl This is the key type name that's being implemented. 1219 * type This is the type name for the set of functions that implement 1220 * the key type. For example, ed25519, ed448, x25519 and x448 1221 * are all implemented with the exact same set of functions. 1222 * evp_type The corresponding EVP_PKEY_xxx type macro for each key. 1223 * Necessary because we currently use EVP_PKEY with legacy 1224 * native keys internally. This will need to be refactored 1225 * when that legacy support goes away. 1226 * kind What kind of support to implement. These translate into 1227 * the DO_##kind macros above. 1228 * output The output type to implement. may be der or pem. 1229 * 1230 * The resulting OSSL_DISPATCH array gets the following name (expressed in 1231 * C preprocessor terms) from those arguments: 1232 * 1233 * ossl_##impl##_to_##kind##_##output##_encoder_functions 1234 */ 1235 #define MAKE_ENCODER(impl, type, evp_type, kind, output) \ 1236 static OSSL_FUNC_encoder_import_object_fn \ 1237 impl##_to_##kind##_##output##_import_object; \ 1238 static OSSL_FUNC_encoder_free_object_fn \ 1239 impl##_to_##kind##_##output##_free_object; \ 1240 static OSSL_FUNC_encoder_encode_fn \ 1241 impl##_to_##kind##_##output##_encode; \ 1242 \ 1243 static void * \ 1244 impl##_to_##kind##_##output##_import_object(void *vctx, int selection, \ 1245 const OSSL_PARAM params[]) \ 1246 { \ 1247 struct key2any_ctx_st *ctx = vctx; \ 1248 \ 1249 return ossl_prov_import_key(ossl_##impl##_keymgmt_functions, \ 1250 ctx->provctx, selection, params); \ 1251 } \ 1252 static void impl##_to_##kind##_##output##_free_object(void *key) \ 1253 { \ 1254 ossl_prov_free_key(ossl_##impl##_keymgmt_functions, key); \ 1255 } \ 1256 static int impl##_to_##kind##_##output##_does_selection(void *ctx, \ 1257 int selection) \ 1258 { \ 1259 return key2any_check_selection(selection, \ 1260 DO_##kind##_selection_mask); \ 1261 } \ 1262 static int \ 1263 impl##_to_##kind##_##output##_encode(void *ctx, OSSL_CORE_BIO *cout, \ 1264 const void *key, \ 1265 const OSSL_PARAM key_abstract[], \ 1266 int selection, \ 1267 OSSL_PASSPHRASE_CALLBACK *cb, \ 1268 void *cbarg) \ 1269 { \ 1270 /* We don't deal with abstract objects */ \ 1271 if (key_abstract != NULL) { \ 1272 ERR_raise(ERR_LIB_PROV, ERR_R_PASSED_INVALID_ARGUMENT); \ 1273 return 0; \ 1274 } \ 1275 DO_##kind(impl, type, output) \ 1276 \ 1277 ERR_raise(ERR_LIB_PROV, ERR_R_PASSED_INVALID_ARGUMENT); \ 1278 return 0; \ 1279 } \ 1280 const OSSL_DISPATCH \ 1281 ossl_##impl##_to_##kind##_##output##_encoder_functions[] = { \ 1282 { OSSL_FUNC_ENCODER_NEWCTX, \ 1283 (void (*)(void))key2any_newctx }, \ 1284 { OSSL_FUNC_ENCODER_FREECTX, \ 1285 (void (*)(void))key2any_freectx }, \ 1286 { OSSL_FUNC_ENCODER_SETTABLE_CTX_PARAMS, \ 1287 (void (*)(void))key2any_settable_ctx_params }, \ 1288 { OSSL_FUNC_ENCODER_SET_CTX_PARAMS, \ 1289 (void (*)(void))key2any_set_ctx_params }, \ 1290 { OSSL_FUNC_ENCODER_DOES_SELECTION, \ 1291 (void (*)(void))impl##_to_##kind##_##output##_does_selection }, \ 1292 { OSSL_FUNC_ENCODER_IMPORT_OBJECT, \ 1293 (void (*)(void))impl##_to_##kind##_##output##_import_object }, \ 1294 { OSSL_FUNC_ENCODER_FREE_OBJECT, \ 1295 (void (*)(void))impl##_to_##kind##_##output##_free_object }, \ 1296 { OSSL_FUNC_ENCODER_ENCODE, \ 1297 (void (*)(void))impl##_to_##kind##_##output##_encode }, \ 1298 { 0, NULL } \ 1299 } 1300 1301 /* 1302 * Replacements for i2d_{TYPE}PrivateKey, i2d_{TYPE}PublicKey, 1303 * i2d_{TYPE}params, as they exist. 1304 */ 1305 MAKE_ENCODER(rsa, rsa, EVP_PKEY_RSA, type_specific_keypair, der); 1306 #ifndef OPENSSL_NO_DH 1307 MAKE_ENCODER(dh, dh, EVP_PKEY_DH, type_specific_params, der); 1308 MAKE_ENCODER(dhx, dh, EVP_PKEY_DHX, type_specific_params, der); 1309 #endif 1310 #ifndef OPENSSL_NO_DSA 1311 MAKE_ENCODER(dsa, dsa, EVP_PKEY_DSA, type_specific, der); 1312 #endif 1313 #ifndef OPENSSL_NO_EC 1314 MAKE_ENCODER(ec, ec, EVP_PKEY_EC, type_specific_no_pub, der); 1315 # ifndef OPENSSL_NO_SM2 1316 MAKE_ENCODER(sm2, ec, EVP_PKEY_EC, type_specific_no_pub, der); 1317 # endif 1318 #endif 1319 1320 /* 1321 * Replacements for PEM_write_bio_{TYPE}PrivateKey, 1322 * PEM_write_bio_{TYPE}PublicKey, PEM_write_bio_{TYPE}params, as they exist. 1323 */ 1324 MAKE_ENCODER(rsa, rsa, EVP_PKEY_RSA, type_specific_keypair, pem); 1325 #ifndef OPENSSL_NO_DH 1326 MAKE_ENCODER(dh, dh, EVP_PKEY_DH, type_specific_params, pem); 1327 MAKE_ENCODER(dhx, dh, EVP_PKEY_DHX, type_specific_params, pem); 1328 #endif 1329 #ifndef OPENSSL_NO_DSA 1330 MAKE_ENCODER(dsa, dsa, EVP_PKEY_DSA, type_specific, pem); 1331 #endif 1332 #ifndef OPENSSL_NO_EC 1333 MAKE_ENCODER(ec, ec, EVP_PKEY_EC, type_specific_no_pub, pem); 1334 # ifndef OPENSSL_NO_SM2 1335 MAKE_ENCODER(sm2, ec, EVP_PKEY_EC, type_specific_no_pub, pem); 1336 # endif 1337 #endif 1338 1339 /* 1340 * PKCS#8 and SubjectPublicKeyInfo support. This may duplicate some of the 1341 * implementations specified above, but are more specific. 1342 * The SubjectPublicKeyInfo implementations also replace the 1343 * PEM_write_bio_{TYPE}_PUBKEY functions. 1344 * For PEM, these are expected to be used by PEM_write_bio_PrivateKey(), 1345 * PEM_write_bio_PUBKEY() and PEM_write_bio_Parameters(). 1346 */ 1347 MAKE_ENCODER(rsa, rsa, EVP_PKEY_RSA, EncryptedPrivateKeyInfo, der); 1348 MAKE_ENCODER(rsa, rsa, EVP_PKEY_RSA, EncryptedPrivateKeyInfo, pem); 1349 MAKE_ENCODER(rsa, rsa, EVP_PKEY_RSA, PrivateKeyInfo, der); 1350 MAKE_ENCODER(rsa, rsa, EVP_PKEY_RSA, PrivateKeyInfo, pem); 1351 MAKE_ENCODER(rsa, rsa, EVP_PKEY_RSA, SubjectPublicKeyInfo, der); 1352 MAKE_ENCODER(rsa, rsa, EVP_PKEY_RSA, SubjectPublicKeyInfo, pem); 1353 MAKE_ENCODER(rsapss, rsa, EVP_PKEY_RSA_PSS, EncryptedPrivateKeyInfo, der); 1354 MAKE_ENCODER(rsapss, rsa, EVP_PKEY_RSA_PSS, EncryptedPrivateKeyInfo, pem); 1355 MAKE_ENCODER(rsapss, rsa, EVP_PKEY_RSA_PSS, PrivateKeyInfo, der); 1356 MAKE_ENCODER(rsapss, rsa, EVP_PKEY_RSA_PSS, PrivateKeyInfo, pem); 1357 MAKE_ENCODER(rsapss, rsa, EVP_PKEY_RSA_PSS, SubjectPublicKeyInfo, der); 1358 MAKE_ENCODER(rsapss, rsa, EVP_PKEY_RSA_PSS, SubjectPublicKeyInfo, pem); 1359 #ifndef OPENSSL_NO_DH 1360 MAKE_ENCODER(dh, dh, EVP_PKEY_DH, EncryptedPrivateKeyInfo, der); 1361 MAKE_ENCODER(dh, dh, EVP_PKEY_DH, EncryptedPrivateKeyInfo, pem); 1362 MAKE_ENCODER(dh, dh, EVP_PKEY_DH, PrivateKeyInfo, der); 1363 MAKE_ENCODER(dh, dh, EVP_PKEY_DH, PrivateKeyInfo, pem); 1364 MAKE_ENCODER(dh, dh, EVP_PKEY_DH, SubjectPublicKeyInfo, der); 1365 MAKE_ENCODER(dh, dh, EVP_PKEY_DH, SubjectPublicKeyInfo, pem); 1366 MAKE_ENCODER(dhx, dh, EVP_PKEY_DHX, EncryptedPrivateKeyInfo, der); 1367 MAKE_ENCODER(dhx, dh, EVP_PKEY_DHX, EncryptedPrivateKeyInfo, pem); 1368 MAKE_ENCODER(dhx, dh, EVP_PKEY_DHX, PrivateKeyInfo, der); 1369 MAKE_ENCODER(dhx, dh, EVP_PKEY_DHX, PrivateKeyInfo, pem); 1370 MAKE_ENCODER(dhx, dh, EVP_PKEY_DHX, SubjectPublicKeyInfo, der); 1371 MAKE_ENCODER(dhx, dh, EVP_PKEY_DHX, SubjectPublicKeyInfo, pem); 1372 #endif 1373 #ifndef OPENSSL_NO_DSA 1374 MAKE_ENCODER(dsa, dsa, EVP_PKEY_DSA, EncryptedPrivateKeyInfo, der); 1375 MAKE_ENCODER(dsa, dsa, EVP_PKEY_DSA, EncryptedPrivateKeyInfo, pem); 1376 MAKE_ENCODER(dsa, dsa, EVP_PKEY_DSA, PrivateKeyInfo, der); 1377 MAKE_ENCODER(dsa, dsa, EVP_PKEY_DSA, PrivateKeyInfo, pem); 1378 MAKE_ENCODER(dsa, dsa, EVP_PKEY_DSA, SubjectPublicKeyInfo, der); 1379 MAKE_ENCODER(dsa, dsa, EVP_PKEY_DSA, SubjectPublicKeyInfo, pem); 1380 #endif 1381 #ifndef OPENSSL_NO_EC 1382 MAKE_ENCODER(ec, ec, EVP_PKEY_EC, EncryptedPrivateKeyInfo, der); 1383 MAKE_ENCODER(ec, ec, EVP_PKEY_EC, EncryptedPrivateKeyInfo, pem); 1384 MAKE_ENCODER(ec, ec, EVP_PKEY_EC, PrivateKeyInfo, der); 1385 MAKE_ENCODER(ec, ec, EVP_PKEY_EC, PrivateKeyInfo, pem); 1386 MAKE_ENCODER(ec, ec, EVP_PKEY_EC, SubjectPublicKeyInfo, der); 1387 MAKE_ENCODER(ec, ec, EVP_PKEY_EC, SubjectPublicKeyInfo, pem); 1388 # ifndef OPENSSL_NO_SM2 1389 MAKE_ENCODER(sm2, ec, EVP_PKEY_EC, EncryptedPrivateKeyInfo, der); 1390 MAKE_ENCODER(sm2, ec, EVP_PKEY_EC, EncryptedPrivateKeyInfo, pem); 1391 MAKE_ENCODER(sm2, ec, EVP_PKEY_EC, PrivateKeyInfo, der); 1392 MAKE_ENCODER(sm2, ec, EVP_PKEY_EC, PrivateKeyInfo, pem); 1393 MAKE_ENCODER(sm2, ec, EVP_PKEY_EC, SubjectPublicKeyInfo, der); 1394 MAKE_ENCODER(sm2, ec, EVP_PKEY_EC, SubjectPublicKeyInfo, pem); 1395 # endif 1396 MAKE_ENCODER(ed25519, ecx, EVP_PKEY_ED25519, EncryptedPrivateKeyInfo, der); 1397 MAKE_ENCODER(ed25519, ecx, EVP_PKEY_ED25519, EncryptedPrivateKeyInfo, pem); 1398 MAKE_ENCODER(ed25519, ecx, EVP_PKEY_ED25519, PrivateKeyInfo, der); 1399 MAKE_ENCODER(ed25519, ecx, EVP_PKEY_ED25519, PrivateKeyInfo, pem); 1400 MAKE_ENCODER(ed25519, ecx, EVP_PKEY_ED25519, SubjectPublicKeyInfo, der); 1401 MAKE_ENCODER(ed25519, ecx, EVP_PKEY_ED25519, SubjectPublicKeyInfo, pem); 1402 MAKE_ENCODER(ed448, ecx, EVP_PKEY_ED448, EncryptedPrivateKeyInfo, der); 1403 MAKE_ENCODER(ed448, ecx, EVP_PKEY_ED448, EncryptedPrivateKeyInfo, pem); 1404 MAKE_ENCODER(ed448, ecx, EVP_PKEY_ED448, PrivateKeyInfo, der); 1405 MAKE_ENCODER(ed448, ecx, EVP_PKEY_ED448, PrivateKeyInfo, pem); 1406 MAKE_ENCODER(ed448, ecx, EVP_PKEY_ED448, SubjectPublicKeyInfo, der); 1407 MAKE_ENCODER(ed448, ecx, EVP_PKEY_ED448, SubjectPublicKeyInfo, pem); 1408 MAKE_ENCODER(x25519, ecx, EVP_PKEY_X25519, EncryptedPrivateKeyInfo, der); 1409 MAKE_ENCODER(x25519, ecx, EVP_PKEY_X25519, EncryptedPrivateKeyInfo, pem); 1410 MAKE_ENCODER(x25519, ecx, EVP_PKEY_X25519, PrivateKeyInfo, der); 1411 MAKE_ENCODER(x25519, ecx, EVP_PKEY_X25519, PrivateKeyInfo, pem); 1412 MAKE_ENCODER(x25519, ecx, EVP_PKEY_X25519, SubjectPublicKeyInfo, der); 1413 MAKE_ENCODER(x25519, ecx, EVP_PKEY_X25519, SubjectPublicKeyInfo, pem); 1414 MAKE_ENCODER(x448, ecx, EVP_PKEY_ED448, EncryptedPrivateKeyInfo, der); 1415 MAKE_ENCODER(x448, ecx, EVP_PKEY_ED448, EncryptedPrivateKeyInfo, pem); 1416 MAKE_ENCODER(x448, ecx, EVP_PKEY_ED448, PrivateKeyInfo, der); 1417 MAKE_ENCODER(x448, ecx, EVP_PKEY_ED448, PrivateKeyInfo, pem); 1418 MAKE_ENCODER(x448, ecx, EVP_PKEY_ED448, SubjectPublicKeyInfo, der); 1419 MAKE_ENCODER(x448, ecx, EVP_PKEY_ED448, SubjectPublicKeyInfo, pem); 1420 #endif 1421 1422 /* 1423 * Support for key type specific output formats. Not all key types have 1424 * this, we only aim to duplicate what is available in 1.1.1 as 1425 * i2d_TYPEPrivateKey(), i2d_TYPEPublicKey() and i2d_TYPEparams(). 1426 * For example, there are no publicly available i2d_ function for 1427 * ED25519, ED448, X25519 or X448, and they therefore only have PKCS#8 1428 * and SubjectPublicKeyInfo implementations as implemented above. 1429 */ 1430 MAKE_ENCODER(rsa, rsa, EVP_PKEY_RSA, RSA, der); 1431 MAKE_ENCODER(rsa, rsa, EVP_PKEY_RSA, RSA, pem); 1432 #ifndef OPENSSL_NO_DH 1433 MAKE_ENCODER(dh, dh, EVP_PKEY_DH, DH, der); 1434 MAKE_ENCODER(dh, dh, EVP_PKEY_DH, DH, pem); 1435 MAKE_ENCODER(dhx, dh, EVP_PKEY_DHX, DHX, der); 1436 MAKE_ENCODER(dhx, dh, EVP_PKEY_DHX, DHX, pem); 1437 #endif 1438 #ifndef OPENSSL_NO_DSA 1439 MAKE_ENCODER(dsa, dsa, EVP_PKEY_DSA, DSA, der); 1440 MAKE_ENCODER(dsa, dsa, EVP_PKEY_DSA, DSA, pem); 1441 #endif 1442 #ifndef OPENSSL_NO_EC 1443 MAKE_ENCODER(ec, ec, EVP_PKEY_EC, EC, der); 1444 MAKE_ENCODER(ec, ec, EVP_PKEY_EC, EC, pem); 1445 # ifndef OPENSSL_NO_SM2 1446 MAKE_ENCODER(sm2, ec, EVP_PKEY_EC, SM2, der); 1447 MAKE_ENCODER(sm2, ec, EVP_PKEY_EC, SM2, pem); 1448 # endif 1449 #endif 1450 1451 /* Convenience structure names */ 1452 MAKE_ENCODER(rsa, rsa, EVP_PKEY_RSA, PKCS1, der); 1453 MAKE_ENCODER(rsa, rsa, EVP_PKEY_RSA, PKCS1, pem); 1454 MAKE_ENCODER(rsapss, rsa, EVP_PKEY_RSA_PSS, PKCS1, der); 1455 MAKE_ENCODER(rsapss, rsa, EVP_PKEY_RSA_PSS, PKCS1, pem); 1456 #ifndef OPENSSL_NO_DH 1457 MAKE_ENCODER(dh, dh, EVP_PKEY_DH, PKCS3, der); /* parameters only */ 1458 MAKE_ENCODER(dh, dh, EVP_PKEY_DH, PKCS3, pem); /* parameters only */ 1459 MAKE_ENCODER(dhx, dh, EVP_PKEY_DHX, X9_42, der); /* parameters only */ 1460 MAKE_ENCODER(dhx, dh, EVP_PKEY_DHX, X9_42, pem); /* parameters only */ 1461 #endif 1462 #ifndef OPENSSL_NO_EC 1463 MAKE_ENCODER(ec, ec, EVP_PKEY_EC, X9_62, der); 1464 MAKE_ENCODER(ec, ec, EVP_PKEY_EC, X9_62, pem); 1465 #endif 1466