diff --git a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp index 13b1091b..271a959e 100644 --- a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp +++ b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp @@ -2529,9 +2529,19 @@ extern "C" OEMCryptoResult OEMCrypto_LoadProvisioningCast( "AUTHENTICATION", provision_request, provision_request_length, 0x200); const std::vector enc_context = MakeContext( "ENCRYPTION", provision_request, provision_request_length, 0x80); - const OEMCryptoResult result = pair.fcn->DeriveKeysFromSessionKey_V18( - pair.session, derivation_key, derivation_key_length, mac_context.data(), - mac_context.size(), enc_context.data(), enc_context.size()); + const OEMCrypto_ProvisioningMethod provisioning_method = + pair.fcn->GetProvisioningMethod != nullptr + ? pair.fcn->GetProvisioningMethod() + : OEMCrypto_Keybox; + const OEMCryptoResult result = + (provisioning_method == OEMCrypto_BootCertificateChain) + ? pair.fcn->DeriveKeysFromSessionKey_V18( + pair.session, derivation_key, derivation_key_length, + mac_context.data(), mac_context.size(), enc_context.data(), + enc_context.size()) + : pair.fcn->GenerateDerivedKeys_V18( + pair.session, mac_context.data(), mac_context.size(), + enc_context.data(), enc_context.size()); if (result != OEMCrypto_SUCCESS) return result; return pair.fcn->LoadProvisioning_V18(