diff --git a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp index b4982425..eec5d92b 100644 --- a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp +++ b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp @@ -252,7 +252,6 @@ class Adapter { LOOKUP(GenerateDerivedKeys, OEMCrypto_GenerateDerivedKeys); LOOKUP(GenerateNonce, OEMCrypto_GenerateNonce); LOOKUP(GenerateSignature, OEMCrypto_GenerateSignature); - LOOKUP(LoadKeys, OEMCrypto_LoadKeys); LOOKUP(RefreshKeys, OEMCrypto_RefreshKeys); LOOKUP(SelectKey, OEMCrypto_SelectKey); LOOKUP(DecryptCTR, OEMCrypto_DecryptCTR); @@ -264,7 +263,6 @@ class Adapter { LOOKUP(WrapKeybox, OEMCrypto_WrapKeybox); LOOKUP(RewrapDeviceRSAKey, OEMCrypto_RewrapDeviceRSAKey); LOOKUP(LoadDeviceRSAKey, OEMCrypto_LoadDeviceRSAKey); - LOOKUP(GenerateRSASignature, OEMCrypto_GenerateRSASignature); LOOKUP(DeriveKeysFromSessionKey, OEMCrypto_DeriveKeysFromSessionKey); LOOKUP(APIVersion, OEMCrypto_APIVersion); LOOKUP(SecurityLevel, OEMCrypto_SecurityLevel); @@ -288,9 +286,11 @@ class Adapter { return false; } if( level1_.version == 8 ) { - LOOKUP(LoadKeys_V8, OEMCrypto_LoadKeys); - LOOKUP(GenerateRSASignature_V8, OEMCrypto_GenerateRSASignature); + LOOKUP(LoadKeys_V8, OEMCrypto_LoadKeys_V8); + LOOKUP(GenerateRSASignature_V8, OEMCrypto_GenerateRSASignature_V8); } else { + LOOKUP(LoadKeys, OEMCrypto_LoadKeys); + LOOKUP(GenerateRSASignature, OEMCrypto_GenerateRSASignature); LOOKUP(GetHDCPCapability, OEMCrypto_GetHDCPCapability); LOOKUP(SupportsUsageTable, OEMCrypto_SupportsUsageTable); LOOKUP(UpdateUsageTable, OEMCrypto_UpdateUsageTable); diff --git a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_static_v8.cpp b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_static_v8.cpp new file mode 100644 index 00000000..443171f4 --- /dev/null +++ b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_static_v8.cpp @@ -0,0 +1,127 @@ +/******************************************************************************* + * + * Copyright 2013 Google Inc. All Rights Reserved. + * + * Wrapper of OEMCrypto APIs for platforms that support Level 1 only. + * This should be used when liboemcrypto.so is linked with the CDM code at + * compile time. + * An implementation should compile either oemcrypto_adapter_dynamic.cpp or + * oemcrypto_adapter_static.cpp, but not both. + * This version contains shim code to allow an older, version 8 API, oemcrypto, + * to be linked with CDM. + * + ******************************************************************************/ + +#include "OEMCryptoCENC.h" +#include "oemcrypto_adapter.h" + +extern "C" +OEMCryptoResult OEMCrypto_LoadKeys_V8(OEMCrypto_SESSION session, + const uint8_t* message, + size_t message_length, + const uint8_t* signature, + size_t signature_length, + const uint8_t* enc_mac_keys_iv, + const uint8_t* enc_mac_keys, + size_t num_keys, + const OEMCrypto_KeyObject* key_array); + +extern "C" +OEMCryptoResult OEMCrypto_GenerateRSASignature_V8(OEMCrypto_SESSION session, + const uint8_t* message, + size_t message_length, + uint8_t* signature, + size_t *signature_length); + + + +namespace wvcdm { + +OEMCryptoResult OEMCrypto_OpenSession(OEMCrypto_SESSION* session, + SecurityLevel level) { + return ::OEMCrypto_OpenSession(session); +} + +OEMCryptoResult OEMCrypto_IsKeyboxValid(SecurityLevel level) { + return ::OEMCrypto_IsKeyboxValid(); +} + +OEMCryptoResult OEMCrypto_GetDeviceID(uint8_t* deviceID, size_t* idLength, + SecurityLevel level) { + return ::OEMCrypto_GetDeviceID(deviceID, idLength); +} + +OEMCryptoResult OEMCrypto_GetKeyData(uint8_t* keyData, size_t* keyDataLength, + SecurityLevel level) { + return ::OEMCrypto_GetKeyData(keyData, keyDataLength); +} + +OEMCryptoResult OEMCrypto_InstallKeybox(const uint8_t* keybox, + size_t keyBoxLength, + SecurityLevel level) { + return ::OEMCrypto_InstallKeybox(keybox, keyBoxLength); +} + +uint32_t OEMCrypto_APIVersion(SecurityLevel level) { + return ::OEMCrypto_APIVersion(); +} + +const char* OEMCrypto_SecurityLevel(SecurityLevel level) { + return ::OEMCrypto_SecurityLevel(); +} + +extern "C" OEMCryptoResult OEMCrypto_LoadKeys( + OEMCrypto_SESSION session, const uint8_t* message, size_t message_length, + const uint8_t* signature, size_t signature_length, + const uint8_t* enc_mac_key_iv, const uint8_t* enc_mac_key, size_t num_keys, + const OEMCrypto_KeyObject* key_array, + const uint8_t* pst, size_t pst_length) { + return LoadKeys_V8(pair.session, message, message_length, signature, + signature_length, enc_mac_key_iv, enc_mac_key, + num_keys, key_array); +} + +extern "C" OEMCryptoResult OEMCrypto_GenerateRSASignature( + OEMCrypto_SESSION session, const uint8_t* message, size_t message_length, + uint8_t* signature, size_t* signature_length, RSA_Padding_Scheme padding_scheme) { + return GenerateRSASignature_V8(pair.session, message, message_length, + signature, signature_length); +} + +extern "C" +OEMCryptoResult OEMCrypto_GetHDCPCapability(OEMCrypto_HDCP_Capability *current, + OEMCrypto_HDCP_Capability *maximum) { + return OEMCrypto_ERROR_NOT_IMPLEMENTED; +} + +extern "C" bool OEMCrypto_SupportsUsageTable() { + return OEMCrypto_ERROR_NOT_IMPLEMENTED; +} + +extern "C" OEMCryptoResult OEMCrypto_UpdateUsageTable() { + return OEMCrypto_ERROR_NOT_IMPLEMENTED; +} + +extern "C" OEMCryptoResult OEMCrypto_DeactivateUsageEntry(const uint8_t *pst, + size_t pst_length) { + return OEMCrypto_ERROR_NOT_IMPLEMENTED; +} + +extern "C" OEMCryptoResult OEMCrypto_ReportUsage(OEMCrypto_SESSION session, + const uint8_t *pst, + size_t pst_length, + OEMCrypto_PST_Report *buffer, + size_t *buffer_length) { + return OEMCrypto_ERROR_NOT_IMPLEMENTED; +} + +extern "C" OEMCryptoResult OEMCrypto_DeleteUsageEntry(OEMCrypto_SESSION session, + const uint8_t* pst, + size_t pst_length, + const uint8_t *message, + size_t message_length, + const uint8_t *signature, + size_t signature_length) { + return OEMCrypto_ERROR_NOT_IMPLEMENTED; +} +}; // namespace wvcdm diff --git a/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h b/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h index f8c62abe..8477b2c2 100644 --- a/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h +++ b/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h @@ -250,12 +250,12 @@ typedef enum RSA_Padding_Scheme { #define OEMCrypto_GenerateDerivedKeys _oecc12 #define OEMCrypto_GenerateSignature _oecc13 #define OEMCrypto_GenerateNonce _oecc14 -#define OEMCrypto_LoadKeys _oecc15 +#define OEMCrypto_LoadKeys_V8 _oecc15 #define OEMCrypto_RefreshKeys _oecc16 #define OEMCrypto_SelectKey _oecc17 #define OEMCrypto_RewrapDeviceRSAKey _oecc18 #define OEMCrypto_LoadDeviceRSAKey _oecc19 -#define OEMCrypto_GenerateRSASignature _oecc20 +#define OEMCrypto_GenerateRSASignature_V8 _oecc20 #define OEMCrypto_DeriveKeysFromSessionKey _oecc21 #define OEMCrypto_APIVersion _oecc22 #define OEMCrypto_SecurityLevel _oecc23 @@ -270,6 +270,8 @@ typedef enum RSA_Padding_Scheme { #define OEMCrypto_ReportUsage _oecc32 #define OEMCrypto_DeleteUsageEntry _oecc33 #define OEMCrypto_DeleteUsageTable _oecc34 +#define OEMCrypto_LoadKeys _oecc35 +#define OEMCrypto_GenerateRSASignature _oecc36 /* * OEMCrypto_Initialize