diff --git a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp index 8562d5b7..91c883d5 100644 --- a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp +++ b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp @@ -71,12 +71,12 @@ typedef OEMCryptoResult (*L1_GenerateSignature_t)(OEMCrypto_SESSION session, typedef OEMCryptoResult (*L1_PrepAndSignLicenseRequest_t)( OEMCrypto_SESSION session, uint8_t* message, size_t message_length, size_t* core_message_length, uint8_t* signature, size_t* signature_length); -typedef OEMCryptoResult (*L1_PrepAndSignLicenseRelease_t)( - OEMCrypto_SESSION session, uint8_t* message, size_t message_length, - size_t* core_message_length, uint8_t* signature, size_t* signature_length); typedef OEMCryptoResult (*L1_PrepAndSignRenewalRequest_t)( OEMCrypto_SESSION session, uint8_t* message, size_t message_length, size_t* core_message_length, uint8_t* signature, size_t* signature_length); +typedef OEMCryptoResult (*L1_PrepAndSignReleaseRequest_t)( + OEMCrypto_SESSION session, uint8_t* message, size_t message_length, + size_t* core_message_size, uint8_t* signature, size_t* signature_length); typedef OEMCryptoResult (*L1_PrepAndSignProvisioningRequest_t)( OEMCrypto_SESSION session, uint8_t* message, size_t message_length, size_t* core_message_length, uint8_t* signature, size_t* signature_length); @@ -357,7 +357,7 @@ struct FunctionPointers { L1_GenerateNonce_t GenerateNonce; L1_GenerateSignature_t GenerateSignature; L1_PrepAndSignLicenseRequest_t PrepAndSignLicenseRequest; - L1_PrepAndSignLicenseRelease_t PrepAndSignLicenseRelease; + L1_PrepAndSignLicenseRelease_t PrepAndSignReleaseRequest; L1_PrepAndSignRenewalRequest_t PrepAndSignRenewalRequest; L1_PrepAndSignProvisioningRequest_t PrepAndSignProvisioningRequest; L1_LoadLicense_t LoadLicense; @@ -987,7 +987,7 @@ class Adapter { LOOKUP_ALL( 9, GenerateRSASignature, OEMCrypto_GenerateRSASignature); LOOKUP( 8, 15, GenerateSignature, OEMCrypto_GenerateSignature); LOOKUP_ALL(16, PrepAndSignLicenseRequest, OEMCrypto_PrepAndSignLicenseRequest); - LOOKUP_ALL(16, PrepAndSignLicenseRelease, OEMCrypto_PrepAndSignLicenseRelease); + LOOKUP_ALL(16, PrepAndSignReleaseRequest, OEMCrypto_PrepAndSignReleaseRequest); LOOKUP_ALL(16, PrepAndSignRenewalRequest, OEMCrypto_PrepAndSignRenewalRequest); LOOKUP_ALL(16, PrepAndSignProvisioningRequest, OEMCrypto_PrepAndSignProvisioningRequest); LOOKUP_ALL( 8, Generic_Decrypt_V17, OEMCrypto_Generic_Decrypt_V17); @@ -2088,9 +2088,24 @@ extern "C" OEMCryptoResult OEMCrypto_PrepAndSignLicenseRequest( return OEMCrypto_ERROR_NOT_IMPLEMENTED; } -extern "C" OEMCryptoResult OEMCrypto_PrepAndSignLicenseRelease( +extern "C" OEMCryptoResult OEMCrypto_PrepAndSignReleaseRequest( OEMCrypto_SESSION session, uint8_t* message, size_t message_length, size_t* core_message_length, uint8_t* signature, size_t* signature_length) { + if (!gAdapter.get()) return OEMCrypto_ERROR_UNKNOWN_FAILURE; + LevelSession pair = gAdapter->GetSession(session); + if (!pair.fcn) return OEMCrypto_ERROR_INVALID_SESSION; + if (pair.fcn->PrepAndSignReleaseRequest != nullptr) { + return pair.fcn->PrepAndSignReleaseRequest( + pair.session, message, message_length, core_message_length, signature, + signature_length); + } + if (pair.fcn->version < 19) { + if (pair.fcn->PrepAndSignRenewalRequest != nullptr) { + return pair.fcn->PrepAndSignRenewalRequest( + pair.session, message, message_length, core_message_length, signature, + signature_length); + } + } return OEMCrypto_ERROR_NOT_IMPLEMENTED; } @@ -2770,6 +2785,14 @@ extern "C" OEMCryptoResult OEMCrypto_GetUsageEntryInfo( OEMCrypto_SESSION session, OEMCrypto_Usage_Entry_Status* status, int64_t* seconds_since_license_received, int64_t* seconds_since_first_decrypt) { + if (!gAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE; + LevelSession pair = gAdapter->GetSession(session); + if (!pair.fcn) return OEMCrypto_ERROR_INVALID_SESSION; + if (pair.fcn->GetUsageEntryInfo != nullptr) { + return fcn->GetUsageEntryInfo(pair.session, status, + seconds_since_license_received, + seconds_since_first_decrypt); + } return OEMCrypto_ERROR_NOT_IMPLEMENTED; } diff --git a/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h b/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h index b7383e8c..b9aa73ad 100644 --- a/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h +++ b/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h @@ -729,7 +729,7 @@ typedef enum OEMCrypto_SignatureHashAlgorithm { #define OEMCrypto_LoadLicense _oecc144 #define OEMCrypto_LoadProvisioning _oecc145 #define OEMCrypto_LoadProvisioningCast _oecc146 -#define OEMCrypto_PrepAndSignLicenseRelease _oecc147 +#define OEMCrypto_PrepAndSignReleaseRequest _oecc147 #define OEMCrypto_GetUsageEntryInfo _oecc148 #define OEMCrypto_GetBCCType _oecc149 // clang-format on @@ -1159,7 +1159,7 @@ OEMCryptoResult OEMCrypto_PrepAndSignLicenseRequest( * @version * This method is new in API version 19. */ -OEMCryptoResult OEMCrypto_PrepAndSignLicenseRelease( +OEMCryptoResult OEMCrypto_PrepAndSignReleaseRequest( OEMCrypto_SESSION session, uint8_t* message, size_t message_length, size_t* core_message_size, uint8_t* signature, size_t* signature_length);