diff --git a/libwvdrmengine/cdm/core/src/crypto_session.cpp b/libwvdrmengine/cdm/core/src/crypto_session.cpp index 665e9a98..f8e11ad2 100644 --- a/libwvdrmengine/cdm/core/src/crypto_session.cpp +++ b/libwvdrmengine/cdm/core/src/crypto_session.cpp @@ -1447,8 +1447,13 @@ CdmResponseType CryptoSession::GetBootCertificateChain( &additional_signature_length); }); } - return MapOEMCryptoResult(sts, GET_BOOT_CERTIFICATE_CHAIN_ERROR, - "GetBootCertificateChain"); + if (sts != OEMCrypto_SUCCESS) { + return MapOEMCryptoResult(sts, GET_BOOT_CERTIFICATE_CHAIN_ERROR, + "GetBootCertificateChain"); + } + bcc->resize(bcc_length); + additional_signature->resize(additional_signature_length); + return NO_ERROR; } CdmResponseType CryptoSession::GenerateCertificateKeyPair( @@ -1494,6 +1499,11 @@ CdmResponseType CryptoSession::GenerateCertificateKeyPair( &wrapped_private_key_length, &oemcrypto_key_type), metrics_, oemcrypto_generate_certificate_key_pair_, status); }); + if (status != OEMCrypto_SUCCESS) { + return MapOEMCryptoResult(status, GENERATE_CERTIFICATE_KEY_PAIR_ERROR, + "GenerateCertificateKeyPair"); + } + public_key->resize(public_key_length); public_key_signature->resize(public_key_signature_length); wrapped_private_key->resize(wrapped_private_key_length); @@ -1505,13 +1515,10 @@ CdmResponseType CryptoSession::GenerateCertificateKeyPair( } else { LOGE("Unexpected key type returned from GenerateCertificateKeyPair: %d", static_cast(oemcrypto_key_type)); - return MapOEMCryptoResult(status, - GENERATE_CERTIFICATE_KEY_PAIR_UNKNOWN_TYPE_ERROR, - "GenerateCertificateKeyPair"); + return GENERATE_CERTIFICATE_KEY_PAIR_UNKNOWN_TYPE_ERROR; } - return MapOEMCryptoResult(status, GENERATE_CERTIFICATE_KEY_PAIR_ERROR, - "GenerateCertificateKeyPair"); + return NO_ERROR; } CdmResponseType CryptoSession::LoadOemCertificatePrivateKey( diff --git a/libwvdrmengine/oemcrypto/test/oec_session_util.cpp b/libwvdrmengine/oemcrypto/test/oec_session_util.cpp index a323e8a6..a01c1fd3 100644 --- a/libwvdrmengine/oemcrypto/test/oec_session_util.cpp +++ b/libwvdrmengine/oemcrypto/test/oec_session_util.cpp @@ -1407,6 +1407,7 @@ Session::Session() Session::~Session() { if (!forced_session_id_ && open_) close(); if (public_rsa_) RSA_free(public_rsa_); + if (public_ec_) EC_KEY_free(public_ec_); } void Session::open() { diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp index cb27efc5..0141bb64 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp @@ -1340,6 +1340,8 @@ TEST_F(OEMCryptoProv40Test, GenerateCertificateKeyPairSuccess) { } else if (key_type == OEMCrypto_PrivateKeyType::OEMCrypto_ECC_Private_Key) { ASSERT_NO_FATAL_FAILURE( s.SetEcPublicKey(public_key.data(), public_key_size)); + } else { + FAIL() << "Unknown private key type: " << static_cast(key_type); } }