summaryrefslogtreecommitdiffstats
path: root/common/userpref.c
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2023-07-05 10:30:52 +0200
committerGravatar Nikias Bassen2023-07-05 10:30:52 +0200
commite57b6e7163277c6a63f22a7e2942cf666cf71a80 (patch)
tree56c083f63bffb238a1aabd8f43a42489c19570d6 /common/userpref.c
parent474fd9284b76d8ddd3a3aec41cbca3cc48271cc1 (diff)
downloadlibimobiledevice-e57b6e7163277c6a63f22a7e2942cf666cf71a80.tar.gz
libimobiledevice-e57b6e7163277c6a63f22a7e2942cf666cf71a80.tar.bz2
Updated OpenSSL-specific code to use OpenSSL 3.0+ API
Diffstat (limited to 'common/userpref.c')
-rw-r--r--common/userpref.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/common/userpref.c b/common/userpref.c
index 11e28ba..b64c703 100644
--- a/common/userpref.c
+++ b/common/userpref.c
@@ -435,6 +435,10 @@ userpref_error_t pair_record_generate_keys_and_certs(plist_t pair_record, key_da
435 debug_info("Generating keys and certificates..."); 435 debug_info("Generating keys and certificates...");
436 436
437#if defined(HAVE_OPENSSL) 437#if defined(HAVE_OPENSSL)
438#if OPENSSL_VERSION_NUMBER >= 0x30000000L
439 EVP_PKEY* root_pkey = EVP_RSA_gen(2048);
440 EVP_PKEY* host_pkey = EVP_RSA_gen(2048);
441#else
438 BIGNUM *e = BN_new(); 442 BIGNUM *e = BN_new();
439 RSA* root_keypair = RSA_new(); 443 RSA* root_keypair = RSA_new();
440 RSA* host_keypair = RSA_new(); 444 RSA* host_keypair = RSA_new();
@@ -451,6 +455,7 @@ userpref_error_t pair_record_generate_keys_and_certs(plist_t pair_record, key_da
451 455
452 EVP_PKEY* host_pkey = EVP_PKEY_new(); 456 EVP_PKEY* host_pkey = EVP_PKEY_new();
453 EVP_PKEY_assign_RSA(host_pkey, host_keypair); 457 EVP_PKEY_assign_RSA(host_pkey, host_keypair);
458#endif
454 459
455 /* generate root certificate */ 460 /* generate root certificate */
456 X509* root_cert = X509_new(); 461 X509* root_cert = X509_new();
@@ -561,12 +566,22 @@ userpref_error_t pair_record_generate_keys_and_certs(plist_t pair_record, key_da
561 } 566 }
562 } 567 }
563 568
564 RSA *pubkey = NULL; 569 EVP_PKEY *pubkey = NULL;
565 { 570 {
566 BIO *membp = BIO_new_mem_buf(public_key.data, public_key.size); 571 BIO *membp = BIO_new_mem_buf(public_key.data, public_key.size);
567 if (!PEM_read_bio_RSAPublicKey(membp, &pubkey, NULL, NULL)) { 572#if OPENSSL_VERSION_NUMBER >= 0x30000000L
573 if (!PEM_read_bio_PUBKEY(membp, &pubkey, NULL, NULL)) {
568 debug_info("WARNING: Could not read public key"); 574 debug_info("WARNING: Could not read public key");
569 } 575 }
576#else
577 RSA *rsa_pubkey = NULL;
578 if (!PEM_read_bio_RSAPublicKey(membp, &rsa_pubkey, NULL, NULL)) {
579 debug_info("WARNING: Could not read public key");
580 } else {
581 pubkey = EVP_PKEY_new();
582 EVP_PKEY_assign_RSA(pubkey, rsa_pubkey);
583 }
584#endif
570 BIO_free(membp); 585 BIO_free(membp);
571 } 586 }
572 587
@@ -588,10 +603,7 @@ userpref_error_t pair_record_generate_keys_and_certs(plist_t pair_record, key_da
588 X509_set1_notAfter(dev_cert, asn1time); 603 X509_set1_notAfter(dev_cert, asn1time);
589 ASN1_TIME_free(asn1time); 604 ASN1_TIME_free(asn1time);
590 605
591 EVP_PKEY* pkey = EVP_PKEY_new(); 606 X509_set_pubkey(dev_cert, pubkey);
592 EVP_PKEY_assign_RSA(pkey, pubkey);
593 X509_set_pubkey(dev_cert, pkey);
594 EVP_PKEY_free(pkey);
595 607
596 X509_add_ext_helper(dev_cert, NID_subject_key_identifier, (char*)"hash"); 608 X509_add_ext_helper(dev_cert, NID_subject_key_identifier, (char*)"hash");
597 X509_add_ext_helper(dev_cert, NID_key_usage, (char*)"critical,digitalSignature,keyEncipherment"); 609 X509_add_ext_helper(dev_cert, NID_key_usage, (char*)"critical,digitalSignature,keyEncipherment");
@@ -618,6 +630,7 @@ userpref_error_t pair_record_generate_keys_and_certs(plist_t pair_record, key_da
618 X509V3_EXT_cleanup(); 630 X509V3_EXT_cleanup();
619 X509_free(dev_cert); 631 X509_free(dev_cert);
620 632
633 EVP_PKEY_free(pubkey);
621 EVP_PKEY_free(root_pkey); 634 EVP_PKEY_free(root_pkey);
622 EVP_PKEY_free(host_pkey); 635 EVP_PKEY_free(host_pkey);
623 636