Reorder OEMCrypto definitions according to OEMCryptoCENC.h
Merged from Widevine CDM repo: https://widevine-internal-review.googlesource.com/#/c/13510/ Change-Id: I0ce612a5ff2167704a87e3b3b650beaddf095c61
This commit is contained in:
@@ -13,14 +13,14 @@ enum SecurityLevel { kLevelDefault, kLevel3 };
|
|||||||
If one level is not available, the other will be used instead. */
|
If one level is not available, the other will be used instead. */
|
||||||
OEMCryptoResult OEMCrypto_OpenSession(OEMCrypto_SESSION* session,
|
OEMCryptoResult OEMCrypto_OpenSession(OEMCrypto_SESSION* session,
|
||||||
SecurityLevel level);
|
SecurityLevel level);
|
||||||
|
OEMCryptoResult OEMCrypto_InstallKeybox(const uint8_t* keybox,
|
||||||
|
size_t keyBoxLength,
|
||||||
|
SecurityLevel level);
|
||||||
OEMCryptoResult OEMCrypto_IsKeyboxValid(SecurityLevel level);
|
OEMCryptoResult OEMCrypto_IsKeyboxValid(SecurityLevel level);
|
||||||
OEMCryptoResult OEMCrypto_GetDeviceID(uint8_t* deviceID, size_t* idLength,
|
OEMCryptoResult OEMCrypto_GetDeviceID(uint8_t* deviceID, size_t* idLength,
|
||||||
SecurityLevel level);
|
SecurityLevel level);
|
||||||
OEMCryptoResult OEMCrypto_GetKeyData(uint8_t* keyData, size_t* keyDataLength,
|
OEMCryptoResult OEMCrypto_GetKeyData(uint8_t* keyData, size_t* keyDataLength,
|
||||||
SecurityLevel level);
|
SecurityLevel level);
|
||||||
OEMCryptoResult OEMCrypto_InstallKeybox(const uint8_t* keybox,
|
|
||||||
size_t keyBoxLength,
|
|
||||||
SecurityLevel level);
|
|
||||||
uint32_t OEMCrypto_APIVersion(SecurityLevel level);
|
uint32_t OEMCrypto_APIVersion(SecurityLevel level);
|
||||||
const char* OEMCrypto_SecurityLevel(SecurityLevel level);
|
const char* OEMCrypto_SecurityLevel(SecurityLevel level);
|
||||||
bool OEMCrypto_SupportsUsageTable(SecurityLevel level);
|
bool OEMCrypto_SupportsUsageTable(SecurityLevel level);
|
||||||
|
|||||||
@@ -66,21 +66,21 @@ typedef OEMCryptoResult (*L1_DecryptCTR_t)(
|
|||||||
OEMCrypto_SESSION session, const uint8_t* data_addr, size_t data_length,
|
OEMCrypto_SESSION session, const uint8_t* data_addr, size_t data_length,
|
||||||
bool is_encrypted, const uint8_t* iv, size_t offset,
|
bool is_encrypted, const uint8_t* iv, size_t offset,
|
||||||
const OEMCrypto_DestBufferDesc* out_buffer, uint8_t subsample_flags);
|
const OEMCrypto_DestBufferDesc* out_buffer, uint8_t subsample_flags);
|
||||||
typedef OEMCryptoResult (*L1_InstallKeybox_t)(const uint8_t* keybox,
|
|
||||||
size_t keyBoxLength);
|
|
||||||
typedef OEMCryptoResult (*L1_IsKeyboxValid_t)(void);
|
|
||||||
typedef OEMCryptoResult (*L1_GetDeviceID_t)(uint8_t* deviceID,
|
|
||||||
size_t* idLength);
|
|
||||||
typedef OEMCryptoResult (*L1_GetKeyData_t)(uint8_t* keyData,
|
|
||||||
size_t* keyDataLength);
|
|
||||||
typedef OEMCryptoResult (*L1_GetRandom_t)(uint8_t* randomData,
|
|
||||||
size_t dataLength);
|
|
||||||
typedef OEMCryptoResult (*L1_WrapKeybox_t)(const uint8_t* keybox,
|
typedef OEMCryptoResult (*L1_WrapKeybox_t)(const uint8_t* keybox,
|
||||||
size_t keyBoxLength,
|
size_t keyBoxLength,
|
||||||
uint8_t* wrappedKeybox,
|
uint8_t* wrappedKeybox,
|
||||||
size_t* wrappedKeyBoxLength,
|
size_t* wrappedKeyBoxLength,
|
||||||
const uint8_t* transportKey,
|
const uint8_t* transportKey,
|
||||||
size_t transportKeyLength);
|
size_t transportKeyLength);
|
||||||
|
typedef OEMCryptoResult (*L1_InstallKeybox_t)(const uint8_t* keybox,
|
||||||
|
size_t keyBoxLength);
|
||||||
|
typedef OEMCryptoResult (*L1_IsKeyboxValid_t)();
|
||||||
|
typedef OEMCryptoResult (*L1_GetDeviceID_t)(uint8_t* deviceID,
|
||||||
|
size_t* idLength);
|
||||||
|
typedef OEMCryptoResult (*L1_GetKeyData_t)(uint8_t* keyData,
|
||||||
|
size_t* keyDataLength);
|
||||||
|
typedef OEMCryptoResult (*L1_GetRandom_t)(uint8_t* randomData,
|
||||||
|
size_t dataLength);
|
||||||
typedef OEMCryptoResult (*L1_RewrapDeviceRSAKey_t)(
|
typedef OEMCryptoResult (*L1_RewrapDeviceRSAKey_t)(
|
||||||
OEMCrypto_SESSION session, const uint8_t* message, size_t message_length,
|
OEMCrypto_SESSION session, const uint8_t* message, size_t message_length,
|
||||||
const uint8_t* signature, size_t signature_length, const uint32_t* nonce,
|
const uint8_t* signature, size_t signature_length, const uint32_t* nonce,
|
||||||
@@ -102,31 +102,30 @@ typedef OEMCryptoResult (*L1_DeriveKeysFromSessionKey_t)(
|
|||||||
size_t enc_session_key_length, const uint8_t* mac_key_context,
|
size_t enc_session_key_length, const uint8_t* mac_key_context,
|
||||||
size_t mac_key_context_length, const uint8_t* enc_key_context,
|
size_t mac_key_context_length, const uint8_t* enc_key_context,
|
||||||
size_t enc_key_context_length);
|
size_t enc_key_context_length);
|
||||||
|
typedef uint32_t (*L1_APIVersion_t)();
|
||||||
|
typedef const char* (*L1_SecurityLevel_t)();
|
||||||
|
typedef OEMCryptoResult (*L1_GetHDCPCapability_t)(
|
||||||
|
OEMCrypto_HDCP_Capability* current, OEMCrypto_HDCP_Capability* maximum);
|
||||||
|
typedef bool (*L1_SupportsUsageTable_t)();
|
||||||
|
typedef OEMCryptoResult (*L1_GetMaxNumberOfSessions_t)(size_t* maximum);
|
||||||
typedef OEMCryptoResult (*L1_Generic_Encrypt_t)(
|
typedef OEMCryptoResult (*L1_Generic_Encrypt_t)(
|
||||||
OEMCrypto_SESSION session, const uint8_t* in_buffer, size_t buffer_length,
|
OEMCrypto_SESSION session, const uint8_t* in_buffer, size_t buffer_length,
|
||||||
const uint8_t* iv, OEMCrypto_Algorithm algorithm, uint8_t* out_buffer);
|
const uint8_t* iv, OEMCrypto_Algorithm algorithm, uint8_t* out_buffer);
|
||||||
typedef OEMCryptoResult (*L1_Generic_Decrypt_t)(
|
typedef OEMCryptoResult (*L1_Generic_Decrypt_t)(
|
||||||
OEMCrypto_SESSION session, const uint8_t* in_buffer, size_t buffer_length,
|
OEMCrypto_SESSION session, const uint8_t* in_buffer, size_t buffer_length,
|
||||||
const uint8_t* iv, OEMCrypto_Algorithm algorithm, uint8_t* out_buffer);
|
const uint8_t* iv, OEMCrypto_Algorithm algorithm, uint8_t* out_buffer);
|
||||||
|
|
||||||
typedef OEMCryptoResult (*L1_Generic_Sign_t)(OEMCrypto_SESSION session,
|
typedef OEMCryptoResult (*L1_Generic_Sign_t)(OEMCrypto_SESSION session,
|
||||||
const uint8_t* in_buffer,
|
const uint8_t* in_buffer,
|
||||||
size_t buffer_length,
|
size_t buffer_length,
|
||||||
OEMCrypto_Algorithm algorithm,
|
OEMCrypto_Algorithm algorithm,
|
||||||
uint8_t* signature,
|
uint8_t* signature,
|
||||||
size_t* signature_length);
|
size_t* signature_length);
|
||||||
|
|
||||||
typedef OEMCryptoResult (*L1_Generic_Verify_t)(OEMCrypto_SESSION session,
|
typedef OEMCryptoResult (*L1_Generic_Verify_t)(OEMCrypto_SESSION session,
|
||||||
const uint8_t* in_buffer,
|
const uint8_t* in_buffer,
|
||||||
size_t buffer_length,
|
size_t buffer_length,
|
||||||
OEMCrypto_Algorithm algorithm,
|
OEMCrypto_Algorithm algorithm,
|
||||||
const uint8_t* signature,
|
const uint8_t* signature,
|
||||||
size_t signature_length);
|
size_t signature_length);
|
||||||
typedef uint32_t (*L1_APIVersion_t)();
|
|
||||||
typedef const char* (*L1_SecurityLevel_t)();
|
|
||||||
typedef OEMCryptoResult (*L1_GetHDCPCapability_t)(
|
|
||||||
OEMCrypto_HDCP_Capability* current, OEMCrypto_HDCP_Capability* maximum);
|
|
||||||
typedef bool (*L1_SupportsUsageTable_t)();
|
|
||||||
typedef OEMCryptoResult (*L1_UpdateUsageTable_t)();
|
typedef OEMCryptoResult (*L1_UpdateUsageTable_t)();
|
||||||
typedef OEMCryptoResult (*L1_DeactivateUsageEntry_t)(const uint8_t* pst,
|
typedef OEMCryptoResult (*L1_DeactivateUsageEntry_t)(const uint8_t* pst,
|
||||||
size_t pst_length);
|
size_t pst_length);
|
||||||
@@ -140,7 +139,6 @@ typedef OEMCryptoResult (*L1_DeleteUsageEntry_t)(
|
|||||||
const uint8_t* message, size_t message_length, const uint8_t* signature,
|
const uint8_t* message, size_t message_length, const uint8_t* signature,
|
||||||
size_t signature_length);
|
size_t signature_length);
|
||||||
typedef OEMCryptoResult (*L1_DeleteUsageTable_t)();
|
typedef OEMCryptoResult (*L1_DeleteUsageTable_t)();
|
||||||
typedef OEMCryptoResult (*L1_GetMaxNumberOfSessions_t)(size_t* maximum);
|
|
||||||
|
|
||||||
struct FunctionPointers {
|
struct FunctionPointers {
|
||||||
uint32_t version;
|
uint32_t version;
|
||||||
@@ -155,30 +153,30 @@ struct FunctionPointers {
|
|||||||
L1_RefreshKeys_t RefreshKeys;
|
L1_RefreshKeys_t RefreshKeys;
|
||||||
L1_SelectKey_t SelectKey;
|
L1_SelectKey_t SelectKey;
|
||||||
L1_DecryptCTR_t DecryptCTR;
|
L1_DecryptCTR_t DecryptCTR;
|
||||||
|
L1_WrapKeybox_t WrapKeybox;
|
||||||
L1_InstallKeybox_t InstallKeybox;
|
L1_InstallKeybox_t InstallKeybox;
|
||||||
L1_IsKeyboxValid_t IsKeyboxValid;
|
L1_IsKeyboxValid_t IsKeyboxValid;
|
||||||
L1_GetDeviceID_t GetDeviceID;
|
L1_GetDeviceID_t GetDeviceID;
|
||||||
L1_GetKeyData_t GetKeyData;
|
L1_GetKeyData_t GetKeyData;
|
||||||
L1_GetRandom_t GetRandom;
|
L1_GetRandom_t GetRandom;
|
||||||
L1_WrapKeybox_t WrapKeybox;
|
|
||||||
L1_RewrapDeviceRSAKey_t RewrapDeviceRSAKey;
|
L1_RewrapDeviceRSAKey_t RewrapDeviceRSAKey;
|
||||||
L1_LoadDeviceRSAKey_t LoadDeviceRSAKey;
|
L1_LoadDeviceRSAKey_t LoadDeviceRSAKey;
|
||||||
L1_GenerateRSASignature_t GenerateRSASignature;
|
L1_GenerateRSASignature_t GenerateRSASignature;
|
||||||
L1_DeriveKeysFromSessionKey_t DeriveKeysFromSessionKey;
|
L1_DeriveKeysFromSessionKey_t DeriveKeysFromSessionKey;
|
||||||
L1_APIVersion_t APIVersion;
|
L1_APIVersion_t APIVersion;
|
||||||
L1_SecurityLevel_t SecurityLevel;
|
L1_SecurityLevel_t SecurityLevel;
|
||||||
|
L1_GetHDCPCapability_t GetHDCPCapability;
|
||||||
|
L1_SupportsUsageTable_t SupportsUsageTable;
|
||||||
|
L1_GetMaxNumberOfSessions_t GetMaxNumberOfSessions;
|
||||||
L1_Generic_Encrypt_t Generic_Encrypt;
|
L1_Generic_Encrypt_t Generic_Encrypt;
|
||||||
L1_Generic_Decrypt_t Generic_Decrypt;
|
L1_Generic_Decrypt_t Generic_Decrypt;
|
||||||
L1_Generic_Sign_t Generic_Sign;
|
L1_Generic_Sign_t Generic_Sign;
|
||||||
L1_Generic_Verify_t Generic_Verify;
|
L1_Generic_Verify_t Generic_Verify;
|
||||||
L1_GetHDCPCapability_t GetHDCPCapability;
|
|
||||||
L1_SupportsUsageTable_t SupportsUsageTable;
|
|
||||||
L1_UpdateUsageTable_t UpdateUsageTable;
|
L1_UpdateUsageTable_t UpdateUsageTable;
|
||||||
L1_DeactivateUsageEntry_t DeactivateUsageEntry;
|
L1_DeactivateUsageEntry_t DeactivateUsageEntry;
|
||||||
L1_ReportUsage_t ReportUsage;
|
L1_ReportUsage_t ReportUsage;
|
||||||
L1_DeleteUsageEntry_t DeleteUsageEntry;
|
L1_DeleteUsageEntry_t DeleteUsageEntry;
|
||||||
L1_DeleteUsageTable_t DeleteUsageTable;
|
L1_DeleteUsageTable_t DeleteUsageTable;
|
||||||
L1_GetMaxNumberOfSessions_t GetMaxNumberOfSessions;
|
|
||||||
|
|
||||||
L1_LoadKeys_V8_t LoadKeys_V8;
|
L1_LoadKeys_V8_t LoadKeys_V8;
|
||||||
L1_GenerateRSASignature_V8_t GenerateRSASignature_V8;
|
L1_GenerateRSASignature_V8_t GenerateRSASignature_V8;
|
||||||
@@ -337,30 +335,31 @@ class Adapter {
|
|||||||
level3_.RefreshKeys = Level3_RefreshKeys;
|
level3_.RefreshKeys = Level3_RefreshKeys;
|
||||||
level3_.SelectKey = Level3_SelectKey;
|
level3_.SelectKey = Level3_SelectKey;
|
||||||
level3_.DecryptCTR = Level3_DecryptCTR;
|
level3_.DecryptCTR = Level3_DecryptCTR;
|
||||||
|
level3_.WrapKeybox = Level3_WrapKeybox;
|
||||||
level3_.InstallKeybox = Level3_InstallKeybox;
|
level3_.InstallKeybox = Level3_InstallKeybox;
|
||||||
level3_.IsKeyboxValid = Level3_IsKeyboxValid;
|
level3_.IsKeyboxValid = Level3_IsKeyboxValid;
|
||||||
level3_.GetDeviceID = Level3_GetDeviceID;
|
level3_.GetDeviceID = Level3_GetDeviceID;
|
||||||
level3_.GetKeyData = Level3_GetKeyData;
|
level3_.GetKeyData = Level3_GetKeyData;
|
||||||
level3_.GetRandom = Level3_GetRandom;
|
level3_.GetRandom = Level3_GetRandom;
|
||||||
level3_.WrapKeybox = Level3_WrapKeybox;
|
|
||||||
level3_.RewrapDeviceRSAKey = Level3_RewrapDeviceRSAKey;
|
level3_.RewrapDeviceRSAKey = Level3_RewrapDeviceRSAKey;
|
||||||
level3_.LoadDeviceRSAKey = Level3_LoadDeviceRSAKey;
|
level3_.LoadDeviceRSAKey = Level3_LoadDeviceRSAKey;
|
||||||
level3_.GenerateRSASignature = Level3_GenerateRSASignature;
|
level3_.GenerateRSASignature = Level3_GenerateRSASignature;
|
||||||
level3_.DeriveKeysFromSessionKey = Level3_DeriveKeysFromSessionKey;
|
level3_.DeriveKeysFromSessionKey = Level3_DeriveKeysFromSessionKey;
|
||||||
level3_.APIVersion = Level3_APIVersion;
|
level3_.APIVersion = Level3_APIVersion;
|
||||||
level3_.SecurityLevel = Level3_SecurityLevel;
|
level3_.SecurityLevel = Level3_SecurityLevel;
|
||||||
|
level3_.GetHDCPCapability = Level3_GetHDCPCapability;
|
||||||
|
level3_.SupportsUsageTable = Level3_SupportsUsageTable;
|
||||||
|
level3_.GetMaxNumberOfSessions = Level3_GetMaxNumberOfSessions;
|
||||||
level3_.Generic_Decrypt = Level3_Generic_Decrypt;
|
level3_.Generic_Decrypt = Level3_Generic_Decrypt;
|
||||||
level3_.Generic_Encrypt = Level3_Generic_Encrypt;
|
level3_.Generic_Encrypt = Level3_Generic_Encrypt;
|
||||||
level3_.Generic_Sign = Level3_Generic_Sign;
|
level3_.Generic_Sign = Level3_Generic_Sign;
|
||||||
level3_.Generic_Verify = Level3_Generic_Verify;
|
level3_.Generic_Verify = Level3_Generic_Verify;
|
||||||
level3_.GetHDCPCapability = Level3_GetHDCPCapability;
|
|
||||||
level3_.SupportsUsageTable = Level3_SupportsUsageTable;
|
|
||||||
level3_.UpdateUsageTable = Level3_UpdateUsageTable;
|
level3_.UpdateUsageTable = Level3_UpdateUsageTable;
|
||||||
level3_.DeactivateUsageEntry = Level3_DeactivateUsageEntry;
|
level3_.DeactivateUsageEntry = Level3_DeactivateUsageEntry;
|
||||||
level3_.ReportUsage = Level3_ReportUsage;
|
level3_.ReportUsage = Level3_ReportUsage;
|
||||||
level3_.DeleteUsageEntry = Level3_DeleteUsageEntry;
|
level3_.DeleteUsageEntry = Level3_DeleteUsageEntry;
|
||||||
level3_.DeleteUsageTable = Level3_DeleteUsageTable;
|
level3_.DeleteUsageTable = Level3_DeleteUsageTable;
|
||||||
level3_.GetMaxNumberOfSessions = Level3_GetMaxNumberOfSessions;
|
|
||||||
level3_.version = Level3_APIVersion();
|
level3_.version = Level3_APIVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -449,6 +448,15 @@ OEMCryptoResult OEMCrypto_OpenSession(OEMCrypto_SESSION* session,
|
|||||||
return kAdapter->OpenSession(session, level);
|
return kAdapter->OpenSession(session, level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OEMCryptoResult OEMCrypto_InstallKeybox(const uint8_t* keybox,
|
||||||
|
size_t keyBoxLength,
|
||||||
|
SecurityLevel level) {
|
||||||
|
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||||
|
const FunctionPointers* fcn = kAdapter->get(level);
|
||||||
|
if (!fcn) return OEMCrypto_ERROR_INVALID_SESSION;
|
||||||
|
return fcn->InstallKeybox(keybox, keyBoxLength);
|
||||||
|
}
|
||||||
|
|
||||||
OEMCryptoResult OEMCrypto_IsKeyboxValid(SecurityLevel level) {
|
OEMCryptoResult OEMCrypto_IsKeyboxValid(SecurityLevel level) {
|
||||||
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||||
const FunctionPointers* fcn = kAdapter->get(level);
|
const FunctionPointers* fcn = kAdapter->get(level);
|
||||||
@@ -472,15 +480,6 @@ OEMCryptoResult OEMCrypto_GetKeyData(uint8_t* keyData, size_t* keyDataLength,
|
|||||||
return fcn->GetKeyData(keyData, keyDataLength);
|
return fcn->GetKeyData(keyData, keyDataLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
OEMCryptoResult OEMCrypto_InstallKeybox(const uint8_t* keybox,
|
|
||||||
size_t keyBoxLength,
|
|
||||||
SecurityLevel level) {
|
|
||||||
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
|
||||||
const FunctionPointers* fcn = kAdapter->get(level);
|
|
||||||
if (!fcn) return OEMCrypto_ERROR_INVALID_SESSION;
|
|
||||||
return fcn->InstallKeybox(keybox, keyBoxLength);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t OEMCrypto_APIVersion(SecurityLevel level) {
|
uint32_t OEMCrypto_APIVersion(SecurityLevel level) {
|
||||||
if (!kAdapter) return 0;
|
if (!kAdapter) return 0;
|
||||||
const FunctionPointers* fcn = kAdapter->get(level);
|
const FunctionPointers* fcn = kAdapter->get(level);
|
||||||
@@ -532,14 +531,6 @@ extern "C" OEMCryptoResult OEMCrypto_CloseSession(OEMCrypto_SESSION session) {
|
|||||||
return kAdapter->CloseSession(session);
|
return kAdapter->CloseSession(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" OEMCryptoResult OEMCrypto_GenerateNonce(OEMCrypto_SESSION session,
|
|
||||||
uint32_t* nonce) {
|
|
||||||
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
|
||||||
LevelSession pair = kAdapter->get(session);
|
|
||||||
if (!pair.fcn) return OEMCrypto_ERROR_INVALID_SESSION;
|
|
||||||
return pair.fcn->GenerateNonce(pair.session, nonce);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" OEMCryptoResult OEMCrypto_GenerateDerivedKeys(
|
extern "C" OEMCryptoResult OEMCrypto_GenerateDerivedKeys(
|
||||||
OEMCrypto_SESSION session, const uint8_t* mac_key_context,
|
OEMCrypto_SESSION session, const uint8_t* mac_key_context,
|
||||||
uint32_t mac_key_context_length, const uint8_t* enc_key_context,
|
uint32_t mac_key_context_length, const uint8_t* enc_key_context,
|
||||||
@@ -552,6 +543,14 @@ extern "C" OEMCryptoResult OEMCrypto_GenerateDerivedKeys(
|
|||||||
enc_key_context_length);
|
enc_key_context_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" OEMCryptoResult OEMCrypto_GenerateNonce(OEMCrypto_SESSION session,
|
||||||
|
uint32_t* nonce) {
|
||||||
|
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||||
|
LevelSession pair = kAdapter->get(session);
|
||||||
|
if (!pair.fcn) return OEMCrypto_ERROR_INVALID_SESSION;
|
||||||
|
return pair.fcn->GenerateNonce(pair.session, nonce);
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" OEMCryptoResult OEMCrypto_GenerateSignature(
|
extern "C" OEMCryptoResult OEMCrypto_GenerateSignature(
|
||||||
OEMCrypto_SESSION session, const uint8_t* message, size_t message_length,
|
OEMCrypto_SESSION session, const uint8_t* message, size_t message_length,
|
||||||
uint8_t* signature, size_t* signature_length) {
|
uint8_t* signature, size_t* signature_length) {
|
||||||
@@ -614,6 +613,19 @@ extern "C" OEMCryptoResult OEMCrypto_DecryptCTR(
|
|||||||
subsample_flags);
|
subsample_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" OEMCryptoResult OEMCrypto_WrapKeybox(const uint8_t* keybox,
|
||||||
|
size_t keyBoxLength,
|
||||||
|
uint8_t* wrappedKeybox,
|
||||||
|
size_t* wrappedKeyBoxLength,
|
||||||
|
const uint8_t* transportKey,
|
||||||
|
size_t transportKeyLength) {
|
||||||
|
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||||
|
const FunctionPointers* fcn = kAdapter->get(kLevelDefault);
|
||||||
|
if (!fcn) return OEMCrypto_ERROR_INVALID_SESSION;
|
||||||
|
return fcn->WrapKeybox(keybox, keyBoxLength, wrappedKeybox,
|
||||||
|
wrappedKeyBoxLength, transportKey, transportKeyLength);
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" OEMCryptoResult OEMCrypto_InstallKeybox(const uint8_t* keybox,
|
extern "C" OEMCryptoResult OEMCrypto_InstallKeybox(const uint8_t* keybox,
|
||||||
size_t keyBoxLength) {
|
size_t keyBoxLength) {
|
||||||
return OEMCrypto_InstallKeybox(keybox, keyBoxLength, kLevelDefault);
|
return OEMCrypto_InstallKeybox(keybox, keyBoxLength, kLevelDefault);
|
||||||
@@ -641,19 +653,6 @@ extern "C" OEMCryptoResult OEMCrypto_GetRandom(uint8_t* randomData,
|
|||||||
return fcn->GetRandom(randomData, dataLength);
|
return fcn->GetRandom(randomData, dataLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" OEMCryptoResult OEMCrypto_WrapKeybox(const uint8_t* keybox,
|
|
||||||
size_t keyBoxLength,
|
|
||||||
uint8_t* wrappedKeybox,
|
|
||||||
size_t* wrappedKeyBoxLength,
|
|
||||||
const uint8_t* transportKey,
|
|
||||||
size_t transportKeyLength) {
|
|
||||||
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
|
||||||
const FunctionPointers* fcn = kAdapter->get(kLevelDefault);
|
|
||||||
if (!fcn) return OEMCrypto_ERROR_INVALID_SESSION;
|
|
||||||
return fcn->WrapKeybox(keybox, keyBoxLength, wrappedKeybox,
|
|
||||||
wrappedKeyBoxLength, transportKey, transportKeyLength);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey(
|
extern "C" OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey(
|
||||||
OEMCrypto_SESSION session, const uint8_t* message, size_t message_length,
|
OEMCrypto_SESSION session, const uint8_t* message, size_t message_length,
|
||||||
const uint8_t* signature, size_t signature_length, const uint32_t* nonce,
|
const uint8_t* signature, size_t signature_length, const uint32_t* nonce,
|
||||||
@@ -717,6 +716,29 @@ extern "C" const char* OEMCrypto_SecurityLevel() {
|
|||||||
return OEMCrypto_SecurityLevel(kLevelDefault);
|
return OEMCrypto_SecurityLevel(kLevelDefault);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" OEMCryptoResult OEMCrypto_GetHDCPCapability(
|
||||||
|
OEMCrypto_HDCP_Capability* current, OEMCrypto_HDCP_Capability* maximum) {
|
||||||
|
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||||
|
const FunctionPointers* fcn = kAdapter->get(kLevelDefault);
|
||||||
|
if (!fcn) return OEMCrypto_ERROR_INVALID_SESSION;
|
||||||
|
if (fcn->version == 8) return OEMCrypto_ERROR_NOT_IMPLEMENTED;
|
||||||
|
return fcn->GetHDCPCapability(current, maximum);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" bool OEMCrypto_SupportsUsageTable() {
|
||||||
|
return OEMCrypto_SupportsUsageTable(kLevelDefault);
|
||||||
|
}
|
||||||
|
|
||||||
|
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_Generic_Encrypt(
|
extern "C" OEMCryptoResult OEMCrypto_Generic_Encrypt(
|
||||||
OEMCrypto_SESSION session, const uint8_t* in_buffer, size_t buffer_length,
|
OEMCrypto_SESSION session, const uint8_t* in_buffer, size_t buffer_length,
|
||||||
const uint8_t* iv, OEMCrypto_Algorithm algorithm, uint8_t* out_buffer) {
|
const uint8_t* iv, OEMCrypto_Algorithm algorithm, uint8_t* out_buffer) {
|
||||||
@@ -761,19 +783,6 @@ extern "C" OEMCryptoResult OEMCrypto_Generic_Verify(
|
|||||||
algorithm, signature, signature_length);
|
algorithm, signature, signature_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" OEMCryptoResult OEMCrypto_GetHDCPCapability(
|
|
||||||
OEMCrypto_HDCP_Capability* current, OEMCrypto_HDCP_Capability* maximum) {
|
|
||||||
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
|
||||||
const FunctionPointers* fcn = kAdapter->get(kLevelDefault);
|
|
||||||
if (!fcn) return OEMCrypto_ERROR_INVALID_SESSION;
|
|
||||||
if (fcn->version == 8) return OEMCrypto_ERROR_NOT_IMPLEMENTED;
|
|
||||||
return fcn->GetHDCPCapability(current, maximum);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" bool OEMCrypto_SupportsUsageTable() {
|
|
||||||
return OEMCrypto_SupportsUsageTable(kLevelDefault);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" OEMCryptoResult OEMCrypto_UpdateUsageTable() {
|
extern "C" OEMCryptoResult OEMCrypto_UpdateUsageTable() {
|
||||||
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||||
const FunctionPointers* fcn1 = kAdapter->get(kLevelDefault);
|
const FunctionPointers* fcn1 = kAdapter->get(kLevelDefault);
|
||||||
@@ -842,13 +851,3 @@ extern "C" OEMCryptoResult OEMCrypto_DeleteUsageTable() {
|
|||||||
if (fcn1 && fcn1 != fcn3 && fcn1->version > 8) sts = fcn1->DeleteUsageTable();
|
if (fcn1 && fcn1 != fcn3 && fcn1->version > 8) sts = fcn1->DeleteUsageTable();
|
||||||
return sts;
|
return sts;
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -93,19 +93,35 @@ OEMCryptoResult Level3_RefreshKeys(OEMCrypto_SESSION session,
|
|||||||
size_t signature_length,
|
size_t signature_length,
|
||||||
size_t num_keys,
|
size_t num_keys,
|
||||||
const OEMCrypto_KeyRefreshObject* key_array);
|
const OEMCrypto_KeyRefreshObject* key_array);
|
||||||
|
OEMCryptoResult Level3_QueryKeyControl(OEMCrypto_SESSION session,
|
||||||
|
const uint8_t* key_id,
|
||||||
|
size_t key_id_length,
|
||||||
|
uint8_t* key_control_block,
|
||||||
|
size_t* key_control_block_length);
|
||||||
OEMCryptoResult Level3_SelectKey(const OEMCrypto_SESSION session,
|
OEMCryptoResult Level3_SelectKey(const OEMCrypto_SESSION session,
|
||||||
const uint8_t* key_id,
|
const uint8_t* key_id,
|
||||||
size_t key_id_length);
|
size_t key_id_length);
|
||||||
OEMCryptoResult Level3_DecryptCTR(OEMCrypto_SESSION session,
|
OEMCryptoResult Level3_DecryptCTR(OEMCrypto_SESSION session,
|
||||||
const uint8_t *data_addr,
|
const uint8_t *data_addr,
|
||||||
size_t data_length,
|
size_t data_length,
|
||||||
bool is_encrypted,
|
bool is_encrypted,
|
||||||
const uint8_t *iv,
|
const uint8_t *iv,
|
||||||
size_t block_offset,
|
size_t block_offset,
|
||||||
const OEMCrypto_DestBufferDesc* out_buffer,
|
const OEMCrypto_DestBufferDesc* out_buffer,
|
||||||
uint8_t subsample_flags);
|
uint8_t subsample_flags);
|
||||||
|
OEMCryptoResult Level3_CopyBuffer(const uint8_t *data_addr,
|
||||||
|
size_t data_length,
|
||||||
|
OEMCrypto_DestBufferDesc* out_buffer,
|
||||||
|
uint8_t subsample_flags);
|
||||||
|
OEMCryptoResult Level3_WrapKeybox(const uint8_t *keybox,
|
||||||
|
size_t keyBoxLength,
|
||||||
|
uint8_t *wrappedKeybox,
|
||||||
|
size_t *wrappedKeyBoxLength,
|
||||||
|
const uint8_t *transportKey,
|
||||||
|
size_t transportKeyLength);
|
||||||
OEMCryptoResult Level3_InstallKeybox(const uint8_t *keybox,
|
OEMCryptoResult Level3_InstallKeybox(const uint8_t *keybox,
|
||||||
size_t keyBoxLength);
|
size_t keyBoxLength);
|
||||||
|
OEMCryptoResult Level3_LoadTestKeybox();
|
||||||
OEMCryptoResult Level3_IsKeyboxValid(void);
|
OEMCryptoResult Level3_IsKeyboxValid(void);
|
||||||
OEMCryptoResult Level3_GetDeviceID(uint8_t* deviceID,
|
OEMCryptoResult Level3_GetDeviceID(uint8_t* deviceID,
|
||||||
size_t *idLength);
|
size_t *idLength);
|
||||||
@@ -113,12 +129,6 @@ OEMCryptoResult Level3_GetKeyData(uint8_t* keyData,
|
|||||||
size_t *keyDataLength);
|
size_t *keyDataLength);
|
||||||
OEMCryptoResult Level3_GetRandom(uint8_t* randomData,
|
OEMCryptoResult Level3_GetRandom(uint8_t* randomData,
|
||||||
size_t dataLength);
|
size_t dataLength);
|
||||||
OEMCryptoResult Level3_WrapKeybox(const uint8_t *keybox,
|
|
||||||
size_t keyBoxLength,
|
|
||||||
uint8_t *wrappedKeybox,
|
|
||||||
size_t *wrappedKeyBoxLength,
|
|
||||||
const uint8_t *transportKey,
|
|
||||||
size_t transportKeyLength);
|
|
||||||
OEMCryptoResult Level3_RewrapDeviceRSAKey(OEMCrypto_SESSION session,
|
OEMCryptoResult Level3_RewrapDeviceRSAKey(OEMCrypto_SESSION session,
|
||||||
const uint8_t* message,
|
const uint8_t* message,
|
||||||
size_t message_length,
|
size_t message_length,
|
||||||
@@ -148,6 +158,11 @@ OEMCryptoResult Level3_DeriveKeysFromSessionKey(OEMCrypto_SESSION session,
|
|||||||
size_t enc_key_context_length);
|
size_t enc_key_context_length);
|
||||||
uint32_t Level3_APIVersion();
|
uint32_t Level3_APIVersion();
|
||||||
const char* Level3_SecurityLevel();
|
const char* Level3_SecurityLevel();
|
||||||
|
OEMCryptoResult Level3_GetHDCPCapability(OEMCrypto_HDCP_Capability* current,
|
||||||
|
OEMCrypto_HDCP_Capability* maximum);
|
||||||
|
bool Level3_SupportsUsageTable();
|
||||||
|
OEMCryptoResult Level3_GetNumberOfOpenSessions(size_t* count);
|
||||||
|
OEMCryptoResult Level3_GetMaxNumberOfSessions(size_t* maximum);
|
||||||
OEMCryptoResult Level3_Generic_Encrypt(OEMCrypto_SESSION session,
|
OEMCryptoResult Level3_Generic_Encrypt(OEMCrypto_SESSION session,
|
||||||
const uint8_t* in_buffer,
|
const uint8_t* in_buffer,
|
||||||
size_t buffer_length,
|
size_t buffer_length,
|
||||||
@@ -172,9 +187,6 @@ OEMCryptoResult Level3_Generic_Verify(OEMCrypto_SESSION session,
|
|||||||
OEMCrypto_Algorithm algorithm,
|
OEMCrypto_Algorithm algorithm,
|
||||||
const uint8_t* signature,
|
const uint8_t* signature,
|
||||||
size_t signature_length);
|
size_t signature_length);
|
||||||
OEMCryptoResult Level3_GetHDCPCapability(OEMCrypto_HDCP_Capability *current,
|
|
||||||
OEMCrypto_HDCP_Capability *maximum);
|
|
||||||
bool Level3_SupportsUsageTable();
|
|
||||||
OEMCryptoResult Level3_UpdateUsageTable();
|
OEMCryptoResult Level3_UpdateUsageTable();
|
||||||
OEMCryptoResult Level3_DeactivateUsageEntry(const uint8_t *pst,
|
OEMCryptoResult Level3_DeactivateUsageEntry(const uint8_t *pst,
|
||||||
size_t pst_length);
|
size_t pst_length);
|
||||||
@@ -190,21 +202,11 @@ OEMCryptoResult Level3_DeleteUsageEntry(OEMCrypto_SESSION session,
|
|||||||
size_t message_length,
|
size_t message_length,
|
||||||
const uint8_t *signature,
|
const uint8_t *signature,
|
||||||
size_t signature_length);
|
size_t signature_length);
|
||||||
OEMCryptoResult Level3_DeleteUsageTable();
|
|
||||||
OEMCryptoResult Level3_GetMaxNumberOfSessions(size_t *maximum);
|
|
||||||
OEMCryptoResult Level3_GetCurrentNumberOfSessions(size_t *count);
|
|
||||||
OEMCryptoResult Level3_LoadTestKeybox();
|
|
||||||
OEMCryptoResult Level3_CopyBuffer(const uint8_t *data_addr,
|
|
||||||
size_t data_length,
|
|
||||||
OEMCrypto_DestBufferDesc* out_buffer,
|
|
||||||
uint8_t subsample_flags);
|
|
||||||
OEMCryptoResult Level3_QueryKeyControl(OEMCrypto_SESSION session,
|
|
||||||
const uint8_t* key_id,
|
|
||||||
size_t key_id_length,
|
|
||||||
uint8_t* key_control_block,
|
|
||||||
size_t* key_control_block_length);
|
|
||||||
OEMCryptoResult Level3_ForceDeleteUsageEntry(const uint8_t* pst,
|
OEMCryptoResult Level3_ForceDeleteUsageEntry(const uint8_t* pst,
|
||||||
size_t pst_length);
|
size_t pst_length);
|
||||||
};
|
OEMCryptoResult Level3_DeleteUsageTable();
|
||||||
}
|
|
||||||
|
} // extern "C"
|
||||||
|
} // namespace wvoec3
|
||||||
|
|
||||||
#endif // LEVEL3_OEMCRYPTO_H_
|
#endif // LEVEL3_OEMCRYPTO_H_
|
||||||
|
|||||||
@@ -107,50 +107,6 @@ OEMCryptoResult OEMCrypto_CloseSession(OEMCrypto_SESSION session) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C"
|
|
||||||
OEMCryptoResult OEMCrypto_GenerateNonce(OEMCrypto_SESSION session,
|
|
||||||
uint32_t* nonce) {
|
|
||||||
if (LogCategoryEnabled(kLoggingTraceOEMCryptoCalls)) {
|
|
||||||
LOGI("-- OEMCryptoResult OEMCrypto_GenerateNonce"
|
|
||||||
"(OEMCrypto_SESSION session,\n");
|
|
||||||
}
|
|
||||||
SessionContext* session_ctx = crypto_engine->FindSession(session);
|
|
||||||
if (!session_ctx || !session_ctx->isValid()) {
|
|
||||||
LOGE("[OEMCrypto_GenerateNonce(): ERROR_INVALID_SESSION]");
|
|
||||||
return OEMCrypto_ERROR_INVALID_SESSION;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prevent nonce flood.
|
|
||||||
static time_t last_nonce_time = 0;
|
|
||||||
static int nonce_count = 0;
|
|
||||||
time_t now = time(NULL);
|
|
||||||
if (now == last_nonce_time) {
|
|
||||||
nonce_count++;
|
|
||||||
if (nonce_count > 20) {
|
|
||||||
LOGE("[OEMCrypto_GenerateNonce(): Nonce Flood detected]");
|
|
||||||
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
nonce_count = 1;
|
|
||||||
last_nonce_time = now;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t nonce_value;
|
|
||||||
uint8_t* nonce_string = reinterpret_cast<uint8_t*>(&nonce_value);
|
|
||||||
|
|
||||||
// Generate 4 bytes of random data
|
|
||||||
if (!RAND_bytes(nonce_string, 4)) {
|
|
||||||
LOGE("[OEMCrypto_GenerateNonce(): Random bytes failure]");
|
|
||||||
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
|
||||||
}
|
|
||||||
session_ctx->AddNonce(nonce_value);
|
|
||||||
*nonce = nonce_value;
|
|
||||||
if (LogCategoryEnabled(kLoggingTraceOEMCryptoCalls)) {
|
|
||||||
LOGI("nonce = %08x\n", nonce_value);
|
|
||||||
}
|
|
||||||
return OEMCrypto_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
OEMCryptoResult OEMCrypto_GenerateDerivedKeys(OEMCrypto_SESSION session,
|
OEMCryptoResult OEMCrypto_GenerateDerivedKeys(OEMCrypto_SESSION session,
|
||||||
const uint8_t* mac_key_context,
|
const uint8_t* mac_key_context,
|
||||||
@@ -200,6 +156,50 @@ OEMCryptoResult OEMCrypto_GenerateDerivedKeys(OEMCrypto_SESSION session,
|
|||||||
return OEMCrypto_SUCCESS;
|
return OEMCrypto_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
OEMCryptoResult OEMCrypto_GenerateNonce(OEMCrypto_SESSION session,
|
||||||
|
uint32_t* nonce) {
|
||||||
|
if (LogCategoryEnabled(kLoggingTraceOEMCryptoCalls)) {
|
||||||
|
LOGI("-- OEMCryptoResult OEMCrypto_GenerateNonce"
|
||||||
|
"(OEMCrypto_SESSION session,\n");
|
||||||
|
}
|
||||||
|
SessionContext* session_ctx = crypto_engine->FindSession(session);
|
||||||
|
if (!session_ctx || !session_ctx->isValid()) {
|
||||||
|
LOGE("[OEMCrypto_GenerateNonce(): ERROR_INVALID_SESSION]");
|
||||||
|
return OEMCrypto_ERROR_INVALID_SESSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prevent nonce flood.
|
||||||
|
static time_t last_nonce_time = 0;
|
||||||
|
static int nonce_count = 0;
|
||||||
|
time_t now = time(NULL);
|
||||||
|
if (now == last_nonce_time) {
|
||||||
|
nonce_count++;
|
||||||
|
if (nonce_count > 20) {
|
||||||
|
LOGE("[OEMCrypto_GenerateNonce(): Nonce Flood detected]");
|
||||||
|
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
nonce_count = 1;
|
||||||
|
last_nonce_time = now;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t nonce_value;
|
||||||
|
uint8_t* nonce_string = reinterpret_cast<uint8_t*>(&nonce_value);
|
||||||
|
|
||||||
|
// Generate 4 bytes of random data
|
||||||
|
if (!RAND_bytes(nonce_string, 4)) {
|
||||||
|
LOGE("[OEMCrypto_GenerateNonce(): Random bytes failure]");
|
||||||
|
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||||
|
}
|
||||||
|
session_ctx->AddNonce(nonce_value);
|
||||||
|
*nonce = nonce_value;
|
||||||
|
if (LogCategoryEnabled(kLoggingTraceOEMCryptoCalls)) {
|
||||||
|
LOGI("nonce = %08x\n", nonce_value);
|
||||||
|
}
|
||||||
|
return OEMCrypto_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
OEMCryptoResult OEMCrypto_GenerateSignature(
|
OEMCryptoResult OEMCrypto_GenerateSignature(
|
||||||
OEMCrypto_SESSION session,
|
OEMCrypto_SESSION session,
|
||||||
@@ -298,8 +298,6 @@ OEMCryptoResult OEMCrypto_LoadKeys(OEMCrypto_SESSION session,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (NO_ERROR != crypto_engine->ValidateKeybox()) {
|
if (NO_ERROR != crypto_engine->ValidateKeybox()) {
|
||||||
LOGE("[OEMCrypto_LoadKeys(): ERROR_KEYBOX_INVALID]");
|
LOGE("[OEMCrypto_LoadKeys(): ERROR_KEYBOX_INVALID]");
|
||||||
return OEMCrypto_ERROR_KEYBOX_INVALID;
|
return OEMCrypto_ERROR_KEYBOX_INVALID;
|
||||||
@@ -546,6 +544,26 @@ OEMCryptoResult OEMCrypto_DecryptCTR(OEMCrypto_SESSION session,
|
|||||||
is_encrypted, destination, buffer_type);
|
is_encrypted, destination, buffer_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
OEMCryptoResult OEMCrypto_WrapKeybox(const uint8_t* keybox,
|
||||||
|
size_t keyBoxLength,
|
||||||
|
uint8_t* wrappedKeybox,
|
||||||
|
size_t* wrappedKeyBoxLength,
|
||||||
|
const uint8_t* transportKey,
|
||||||
|
size_t transportKeyLength) {
|
||||||
|
if (LogCategoryEnabled(kLoggingTraceOEMCryptoCalls)) {
|
||||||
|
LOGI("-- OEMCryptoResult OEMCrypto_WrapKeybox(const uint8_t *keybox,\n");
|
||||||
|
}
|
||||||
|
if (!keybox || !wrappedKeybox || !wrappedKeyBoxLength
|
||||||
|
|| (keyBoxLength != *wrappedKeyBoxLength)) {
|
||||||
|
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||||
|
}
|
||||||
|
// This implementation ignores the transport key. For test keys, we
|
||||||
|
// don't need to encrypt the keybox.
|
||||||
|
memcpy(wrappedKeybox, keybox, keyBoxLength);
|
||||||
|
return OEMCrypto_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
OEMCryptoResult OEMCrypto_InstallKeybox(const uint8_t* keybox,
|
OEMCryptoResult OEMCrypto_InstallKeybox(const uint8_t* keybox,
|
||||||
size_t keyBoxLength) {
|
size_t keyBoxLength) {
|
||||||
@@ -635,26 +653,6 @@ OEMCryptoResult OEMCrypto_GetRandom(uint8_t* randomData, size_t dataLength) {
|
|||||||
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C"
|
|
||||||
OEMCryptoResult OEMCrypto_WrapKeybox(const uint8_t* keybox,
|
|
||||||
size_t keyBoxLength,
|
|
||||||
uint8_t* wrappedKeybox,
|
|
||||||
size_t* wrappedKeyBoxLength,
|
|
||||||
const uint8_t* transportKey,
|
|
||||||
size_t transportKeyLength) {
|
|
||||||
if (LogCategoryEnabled(kLoggingTraceOEMCryptoCalls)) {
|
|
||||||
LOGI("-- OEMCryptoResult OEMCrypto_WrapKeybox(const uint8_t *keybox,\n");
|
|
||||||
}
|
|
||||||
if (!keybox || !wrappedKeybox || !wrappedKeyBoxLength
|
|
||||||
|| (keyBoxLength != *wrappedKeyBoxLength)) {
|
|
||||||
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
|
||||||
}
|
|
||||||
// This implementation ignores the transport key. For test keys, we
|
|
||||||
// don't need to encrypt the keybox.
|
|
||||||
memcpy(wrappedKeybox, keybox, keyBoxLength);
|
|
||||||
return OEMCrypto_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey(OEMCrypto_SESSION session,
|
OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey(OEMCrypto_SESSION session,
|
||||||
const uint8_t* message,
|
const uint8_t* message,
|
||||||
@@ -1016,6 +1014,27 @@ OEMCryptoResult OEMCrypto_GetHDCPCapability(
|
|||||||
return OEMCrypto_SUCCESS;
|
return OEMCrypto_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
bool OEMCrypto_SupportsUsageTable() {
|
||||||
|
bool supports_usage = crypto_engine->supports_storage();
|
||||||
|
if (LogCategoryEnabled(kLoggingTraceOEMCryptoCalls)) {
|
||||||
|
LOGI("-- bool OEMCrypto_SupportsUsageTable(); // returns %s.\n",
|
||||||
|
(supports_usage ? "true" : "false"));
|
||||||
|
}
|
||||||
|
return supports_usage;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
OEMCryptoResult OEMCrypto_GetMaxNumberOfSessions(size_t* maximum) {
|
||||||
|
if (LogCategoryEnabled(kLoggingTraceOEMCryptoCalls)) {
|
||||||
|
LOGI("-- OEMCryptoResult OEMCrypto_GetMaxNumberOfSessions(%p)\n", maximum);
|
||||||
|
}
|
||||||
|
if (maximum == NULL) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||||
|
const size_t kMaxSupportedOEMCryptoSessions = 64;
|
||||||
|
*maximum = kMaxSupportedOEMCryptoSessions;
|
||||||
|
return OEMCrypto_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
OEMCryptoResult OEMCrypto_Generic_Encrypt(OEMCrypto_SESSION session,
|
OEMCryptoResult OEMCrypto_Generic_Encrypt(OEMCrypto_SESSION session,
|
||||||
const uint8_t* in_buffer,
|
const uint8_t* in_buffer,
|
||||||
@@ -1173,16 +1192,6 @@ OEMCryptoResult OEMCrypto_Generic_Verify(OEMCrypto_SESSION session,
|
|||||||
signature, signature_length);
|
signature, signature_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C"
|
|
||||||
bool OEMCrypto_SupportsUsageTable() {
|
|
||||||
bool supports_usage = crypto_engine->supports_storage();
|
|
||||||
if (LogCategoryEnabled(kLoggingTraceOEMCryptoCalls)) {
|
|
||||||
LOGI("-- bool OEMCrypto_SupportsUsageTable(); // returns %s.\n",
|
|
||||||
(supports_usage ? "true" : "false"));
|
|
||||||
}
|
|
||||||
return supports_usage;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
OEMCryptoResult OEMCrypto_UpdateUsageTable() {
|
OEMCryptoResult OEMCrypto_UpdateUsageTable() {
|
||||||
if (LogCategoryEnabled(kLoggingTraceOEMCryptoCalls)) {
|
if (LogCategoryEnabled(kLoggingTraceOEMCryptoCalls)) {
|
||||||
@@ -1291,15 +1300,4 @@ OEMCryptoResult OEMCrypto_DeleteUsageTable() {
|
|||||||
return OEMCrypto_SUCCESS;
|
return OEMCrypto_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C"
|
|
||||||
OEMCryptoResult OEMCrypto_GetMaxNumberOfSessions(size_t *maximum) {
|
|
||||||
if (LogCategoryEnabled(kLoggingTraceOEMCryptoCalls)) {
|
|
||||||
LOGI("-- OEMCryptoResult OEMCrypto_GetMaxNumberOfSessions(%p)\n", maximum);
|
|
||||||
}
|
|
||||||
if (maximum == NULL) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
|
||||||
const size_t kMaxSupportedOEMCryptoSessions = 64;
|
|
||||||
*maximum = kMaxSupportedOEMCryptoSessions;
|
|
||||||
return OEMCrypto_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace wvoec_mock
|
} // namespace wvoec_mock
|
||||||
|
|||||||
Reference in New Issue
Block a user