From c88c6810502539f6c6b1a9389ea1923032852565 Mon Sep 17 00:00:00 2001 From: KongQun Yang Date: Thu, 12 Mar 2015 15:12:14 -0700 Subject: [PATCH] Make GetMaxNumberOfSessions and GetNumberOfOpenSessions security level aware Merged from Widevine CDM repo: https://widevine-internal-review.googlesource.com/#/c/13662/ Change-Id: Id261ab16c4f987dbee78b3ecde4beebbf44f5371 --- .../cdm/core/include/oemcrypto_adapter.h | 4 ++ .../cdm/core/src/crypto_session.cpp | 6 ++- .../core/src/oemcrypto_adapter_dynamic.cpp | 38 +++++++++++-------- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/libwvdrmengine/cdm/core/include/oemcrypto_adapter.h b/libwvdrmengine/cdm/core/include/oemcrypto_adapter.h index aeff6e25..d92d2986 100644 --- a/libwvdrmengine/cdm/core/include/oemcrypto_adapter.h +++ b/libwvdrmengine/cdm/core/include/oemcrypto_adapter.h @@ -28,6 +28,10 @@ OEMCryptoResult OEMCrypto_GetHDCPCapability(SecurityLevel level, OEMCrypto_HDCP_Capability* maximum); bool OEMCrypto_SupportsUsageTable(SecurityLevel level); bool OEMCrypto_IsAntiRollbackHwPresent(SecurityLevel level); +OEMCryptoResult OEMCrypto_GetNumberOfOpenSessions(SecurityLevel level, + size_t* count); +OEMCryptoResult OEMCrypto_GetMaxNumberOfSessions(SecurityLevel level, + size_t* maximum); } // namespace wvcdm #endif // WVCDM_CORE_OEMCRYPTO_ADAPTER_H_ diff --git a/libwvdrmengine/cdm/core/src/crypto_session.cpp b/libwvdrmengine/cdm/core/src/crypto_session.cpp index aba6500f..9fb8c4aa 100644 --- a/libwvdrmengine/cdm/core/src/crypto_session.cpp +++ b/libwvdrmengine/cdm/core/src/crypto_session.cpp @@ -994,7 +994,8 @@ bool CryptoSession::GetNumberOfOpenSessions(size_t* count) { } size_t sessions_count; - OEMCryptoResult status = OEMCrypto_GetNumberOfOpenSessions(&sessions_count); + OEMCryptoResult status = OEMCrypto_GetNumberOfOpenSessions( + requested_security_level_, &sessions_count); if (OEMCrypto_SUCCESS != status) { LOGW("OEMCrypto_GetNumberOfOpenSessions fails with %d", status); return false; @@ -1012,7 +1013,8 @@ bool CryptoSession::GetMaxNumberOfSessions(size_t* max) { } size_t max_sessions; - OEMCryptoResult status = OEMCrypto_GetMaxNumberOfSessions(&max_sessions); + OEMCryptoResult status = OEMCrypto_GetMaxNumberOfSessions( + requested_security_level_, &max_sessions); if (OEMCrypto_SUCCESS != status) { LOGW("OEMCrypto_GetMaxNumberOfSessions fails with %d", status); return false; diff --git a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp index 58dc7ea2..5cb83b06 100644 --- a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp +++ b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp @@ -568,6 +568,24 @@ bool OEMCrypto_IsAntiRollbackHwPresent(SecurityLevel level) { return fcn->IsAntiRollbackHwPresent(); } +OEMCryptoResult OEMCrypto_GetNumberOfOpenSessions(SecurityLevel level, + size_t* count) { + if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE; + const FunctionPointers* fcn = kAdapter->get(level); + if (!fcn) return OEMCrypto_ERROR_INVALID_SESSION; + if (fcn->version < 10) return OEMCrypto_ERROR_NOT_IMPLEMENTED; + return fcn->GetNumberOfOpenSessions(count); +} + +OEMCryptoResult OEMCrypto_GetMaxNumberOfSessions(SecurityLevel level, + size_t* maximum) { + if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE; + const FunctionPointers* fcn = kAdapter->get(level); + if (!fcn) return OEMCrypto_ERROR_INVALID_SESSION; + if (fcn->version < 10) return OEMCrypto_ERROR_NOT_IMPLEMENTED; + return fcn->GetMaxNumberOfSessions(maximum); +} + } // namespace wvcdm extern "C" OEMCryptoResult OEMCrypto_Initialize(void) { @@ -795,24 +813,12 @@ extern "C" bool OEMCrypto_IsAntiRollbackHwPresent() { return OEMCrypto_IsAntiRollbackHwPresent(kLevelDefault); } -extern "C" OEMCryptoResult OEMCrypto_GetNumberOfOpenSessions(size_t* maximum) { - if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE; - const FunctionPointers* fcn = kAdapter->get(kLevelDefault); - if (!fcn) return OEMCrypto_ERROR_UNKNOWN_FAILURE; - if (fcn->version < 10) { - return OEMCrypto_ERROR_NOT_IMPLEMENTED; - } - return fcn->GetNumberOfOpenSessions(maximum); +extern "C" OEMCryptoResult OEMCrypto_GetNumberOfOpenSessions(size_t* count) { + return OEMCrypto_GetNumberOfOpenSessions(kLevelDefault, count); } -extern "C" OEMCryptoResult OEMCrypto_GetMaxNumberOfSessions(size_t *maximum) { - if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE; - const FunctionPointers* fcn = kAdapter->get(kLevelDefault); - if (!fcn) return OEMCrypto_ERROR_UNKNOWN_FAILURE; - if (fcn->version < 10) { - return OEMCrypto_ERROR_NOT_IMPLEMENTED; - } - return fcn->GetMaxNumberOfSessions(maximum); +extern "C" OEMCryptoResult OEMCrypto_GetMaxNumberOfSessions(size_t* maximum) { + return OEMCrypto_GetMaxNumberOfSessions(kLevelDefault, maximum); } extern "C" OEMCryptoResult OEMCrypto_Generic_Encrypt(