Update L3 LoadLicense() and LoadProvisioning() to work with new KDF
functions In CL https://widevine-internal-review.git.corp.google.com/c/cdm/+/183531 KDF was merged into new OEMCrypto_LoadLicense() and OEMCrypto_LoadProvisioning(). This change renames L3 existing old functions with suffix _V18, and adds the two new functions. Note: jenkins/run_dynamic_level3 and jenkis/run_level3_static_tests can't be enabled util https://b.corp.google.com/issues/320525541 is resolved. Test: the generated L3 from this CL can pass static and dynamic adapter tests with commit ID 567069f2fb800c4ec4e844e03273d1924ae6673b. More updates may be need to L3 source for it to work with the latest oemcrypto-v19 branch. Bug: 299333403 Change-Id: If6dec630c00b65468d4194196f3ff6f308c6dbe8
This commit is contained in:
@@ -40,7 +40,7 @@ OEMCryptoResult Haystack_GetOEMPublicCertificate(uint8_t* public_cert,
|
||||
size_t* public_cert_length);
|
||||
OEMCryptoResult Haystack_GetDeviceID(uint8_t* deviceID, size_t* idLength);
|
||||
OEMCryptoResult Haystack_LoadOEMPrivateKey(OEMCrypto_SESSION session);
|
||||
OEMCryptoResult Haystack_LoadProvisioning(
|
||||
OEMCryptoResult Haystack_LoadProvisioning_V18(
|
||||
OEMCrypto_SESSION session, const uint8_t* message, size_t message_length,
|
||||
size_t core_message_length, const uint8_t* signature,
|
||||
size_t signature_length, uint8_t* wrapped_private_key,
|
||||
@@ -104,12 +104,12 @@ OEMCryptoResult Haystack_MoveEntry(OEMCrypto_SESSION session,
|
||||
OEMCryptoResult Haystack_SelectKey(const OEMCrypto_SESSION session,
|
||||
const uint8_t* key_id, size_t key_id_length,
|
||||
OEMCryptoCipherMode cipher_mode);
|
||||
OEMCryptoResult Haystack_LoadLicense(OEMCrypto_SESSION session,
|
||||
const uint8_t* message,
|
||||
size_t message_length,
|
||||
size_t core_message_length,
|
||||
const uint8_t* signature,
|
||||
size_t signature_length);
|
||||
OEMCryptoResult Haystack_LoadLicense_V18(OEMCrypto_SESSION session,
|
||||
const uint8_t* message,
|
||||
size_t message_length,
|
||||
size_t core_message_length,
|
||||
const uint8_t* signature,
|
||||
size_t signature_length);
|
||||
OEMCryptoResult Haystack_SetDecryptHash(OEMCrypto_SESSION session,
|
||||
uint32_t frame_number,
|
||||
const uint8_t* hash,
|
||||
@@ -168,7 +168,24 @@ OEMCryptoResult Haystack_Generic_Verify(const uint8_t* key_handle,
|
||||
OEMCrypto_Algorithm algorithm,
|
||||
const OEMCrypto_SharedMemory* signature,
|
||||
size_t signature_length);
|
||||
|
||||
OEMCryptoResult Haystack_LoadLicense(
|
||||
OEMCrypto_SESSION session, const uint8_t* context, size_t context_length,
|
||||
const uint8_t* derivation_key, size_t derivation_key_length,
|
||||
const uint8_t* message, size_t message_length, size_t core_message_length,
|
||||
const uint8_t* signature, size_t signature_length);
|
||||
OEMCryptoResult Haystack_LoadProvisioning(
|
||||
OEMCrypto_SESSION session, const uint8_t* provision_request,
|
||||
size_t provision_request_length, const uint8_t* message,
|
||||
size_t message_length, size_t core_message_length, const uint8_t* signature,
|
||||
size_t signature_length, uint8_t* wrapped_private_key,
|
||||
size_t* wrapped_private_key_length);
|
||||
OEMCryptoResult Haystack_LoadProvisioningCast(
|
||||
OEMCrypto_SESSION session, const uint8_t* derivation_key,
|
||||
size_t derivation_key_length, const uint8_t* provision_request,
|
||||
size_t provision_request_length, const uint8_t* message,
|
||||
size_t message_length, size_t core_message_length, const uint8_t* signature,
|
||||
size_t signature_length, uint8_t* wrapped_private_key,
|
||||
size_t* wrapped_private_key_length);
|
||||
} // namespace haystack
|
||||
|
||||
#endif
|
||||
|
||||
@@ -7,17 +7,11 @@
|
||||
#include "haystack.h"
|
||||
#include "level3.h"
|
||||
|
||||
bool Level3_IsInApp() {
|
||||
return haystack::Haystack_IsInApp();
|
||||
}
|
||||
bool Level3_IsInApp() { return haystack::Haystack_IsInApp(); }
|
||||
|
||||
OEMCryptoResult Level3_Initialize() {
|
||||
return haystack::Haystack_Initialize();
|
||||
}
|
||||
OEMCryptoResult Level3_Initialize() { return haystack::Haystack_Initialize(); }
|
||||
|
||||
OEMCryptoResult Level3_Terminate() {
|
||||
return haystack::Haystack_Terminate();
|
||||
}
|
||||
OEMCryptoResult Level3_Terminate() { return haystack::Haystack_Terminate(); }
|
||||
|
||||
OEMCryptoResult Level3_OpenSession(OEMCrypto_SESSION* session) {
|
||||
return haystack::Haystack_OpenSession(session);
|
||||
@@ -101,12 +95,12 @@ OEMCryptoResult Level3_LoadOEMPrivateKey(OEMCrypto_SESSION session) {
|
||||
return haystack::Haystack_LoadOEMPrivateKey(session);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_LoadProvisioning(
|
||||
OEMCryptoResult Level3_LoadProvisioning_V18(
|
||||
OEMCrypto_SESSION session, const uint8_t* message, size_t message_length,
|
||||
size_t core_message_length, const uint8_t* signature,
|
||||
size_t signature_length, uint8_t* wrapped_private_key,
|
||||
size_t* wrapped_private_key_length) {
|
||||
return haystack::Haystack_LoadProvisioning(
|
||||
return haystack::Haystack_LoadProvisioning_V18(
|
||||
session, message, message_length, core_message_length, signature,
|
||||
signature_length, wrapped_private_key, wrapped_private_key_length);
|
||||
}
|
||||
@@ -119,11 +113,13 @@ OEMCryptoResult Level3_LoadDRMPrivateKey(OEMCrypto_SESSION session,
|
||||
session, key_type, wrapped_rsa_key, wrapped_rsa_key_length);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_DeriveKeysFromSessionKey(
|
||||
OEMCrypto_SESSION session, const uint8_t* enc_session_key,
|
||||
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 enc_key_context_length) {
|
||||
OEMCryptoResult Level3_DeriveKeysFromSessionKey(OEMCrypto_SESSION session,
|
||||
const uint8_t* enc_session_key,
|
||||
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 enc_key_context_length) {
|
||||
return haystack::Haystack_DeriveKeysFromSessionKey(
|
||||
session, enc_session_key, enc_session_key_length, mac_key_context,
|
||||
mac_key_context_length, enc_key_context, enc_key_context_length);
|
||||
@@ -152,117 +148,116 @@ OEMCryptoResult Level3_Generic_Decrypt_V17(
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_Generic_Sign_V17(OEMCrypto_SESSION session,
|
||||
const uint8_t* in_buffer,
|
||||
size_t buffer_length,
|
||||
OEMCrypto_Algorithm algorithm,
|
||||
uint8_t* signature,
|
||||
size_t* signature_length) {
|
||||
const uint8_t* in_buffer,
|
||||
size_t buffer_length,
|
||||
OEMCrypto_Algorithm algorithm,
|
||||
uint8_t* signature,
|
||||
size_t* signature_length) {
|
||||
return haystack::Haystack_Generic_Sign_V17(session, in_buffer, buffer_length,
|
||||
algorithm, signature,
|
||||
signature_length);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_Generic_Verify_V17(OEMCrypto_SESSION session,
|
||||
const uint8_t* in_buffer,
|
||||
size_t buffer_length,
|
||||
OEMCrypto_Algorithm algorithm,
|
||||
const uint8_t* signature,
|
||||
size_t signature_length) {
|
||||
const uint8_t* in_buffer,
|
||||
size_t buffer_length,
|
||||
OEMCrypto_Algorithm algorithm,
|
||||
const uint8_t* signature,
|
||||
size_t signature_length) {
|
||||
return haystack::Haystack_Generic_Verify_V17(session, in_buffer,
|
||||
buffer_length, algorithm,
|
||||
signature, signature_length);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_DeactivateUsageEntry(OEMCrypto_SESSION session,
|
||||
const uint8_t* pst,
|
||||
size_t pst_length) {
|
||||
const uint8_t* pst,
|
||||
size_t pst_length) {
|
||||
return haystack::Haystack_DeactivateUsageEntry(session, pst, pst_length);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_ReportUsage(OEMCrypto_SESSION session,
|
||||
const uint8_t* pst, size_t pst_length,
|
||||
uint8_t* buffer, size_t* buffer_length) {
|
||||
const uint8_t* pst, size_t pst_length,
|
||||
uint8_t* buffer, size_t* buffer_length) {
|
||||
return haystack::Haystack_ReportUsage(session, pst, pst_length, buffer,
|
||||
buffer_length);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_CreateUsageTableHeader(uint8_t* header_buffer,
|
||||
size_t* header_buffer_length) {
|
||||
size_t* header_buffer_length) {
|
||||
return haystack::Haystack_CreateUsageTableHeader(header_buffer,
|
||||
header_buffer_length);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_LoadUsageTableHeader(const uint8_t* buffer,
|
||||
size_t buffer_length) {
|
||||
size_t buffer_length) {
|
||||
return haystack::Haystack_LoadUsageTableHeader(buffer, buffer_length);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_CreateNewUsageEntry(OEMCrypto_SESSION session,
|
||||
uint32_t* usage_entry_number) {
|
||||
uint32_t* usage_entry_number) {
|
||||
return haystack::Haystack_CreateNewUsageEntry(session, usage_entry_number);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_ReuseUsageEntry(OEMCrypto_SESSION session,
|
||||
uint32_t usage_entry_number) {
|
||||
uint32_t usage_entry_number) {
|
||||
return haystack::Haystack_ReuseUsageEntry(session, usage_entry_number);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_LoadUsageEntry(OEMCrypto_SESSION session,
|
||||
uint32_t index, const uint8_t* buffer,
|
||||
size_t buffer_size) {
|
||||
OEMCryptoResult Level3_LoadUsageEntry(OEMCrypto_SESSION session, uint32_t index,
|
||||
const uint8_t* buffer,
|
||||
size_t buffer_size) {
|
||||
return haystack::Haystack_LoadUsageEntry(session, index, buffer, buffer_size);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_UpdateUsageEntry(OEMCrypto_SESSION session,
|
||||
uint8_t* header_buffer,
|
||||
size_t* header_buffer_length,
|
||||
uint8_t* entry_buffer,
|
||||
size_t* entry_buffer_length) {
|
||||
uint8_t* header_buffer,
|
||||
size_t* header_buffer_length,
|
||||
uint8_t* entry_buffer,
|
||||
size_t* entry_buffer_length) {
|
||||
return haystack::Haystack_UpdateUsageEntry(session, header_buffer,
|
||||
header_buffer_length, entry_buffer,
|
||||
entry_buffer_length);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_ShrinkUsageTableHeader(uint32_t new_table_size,
|
||||
uint8_t* header_buffer,
|
||||
size_t* header_buffer_length) {
|
||||
uint8_t* header_buffer,
|
||||
size_t* header_buffer_length) {
|
||||
return haystack::Haystack_ShrinkUsageTableHeader(
|
||||
new_table_size, header_buffer, header_buffer_length);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_MoveEntry(OEMCrypto_SESSION session,
|
||||
uint32_t new_index) {
|
||||
uint32_t new_index) {
|
||||
return haystack::Haystack_MoveEntry(session, new_index);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_SelectKey(const OEMCrypto_SESSION session,
|
||||
const uint8_t* key_id, size_t key_id_length,
|
||||
OEMCryptoCipherMode cipher_mode) {
|
||||
const uint8_t* key_id, size_t key_id_length,
|
||||
OEMCryptoCipherMode cipher_mode) {
|
||||
return haystack::Haystack_SelectKey(session, key_id, key_id_length,
|
||||
cipher_mode);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_LoadLicense(OEMCrypto_SESSION session,
|
||||
const uint8_t* message,
|
||||
size_t message_length,
|
||||
size_t core_message_length,
|
||||
const uint8_t* signature,
|
||||
size_t signature_length) {
|
||||
return haystack::Haystack_LoadLicense(session, message, message_length,
|
||||
core_message_length, signature,
|
||||
signature_length);
|
||||
OEMCryptoResult Level3_LoadLicense_V18(OEMCrypto_SESSION session,
|
||||
const uint8_t* message,
|
||||
size_t message_length,
|
||||
size_t core_message_length,
|
||||
const uint8_t* signature,
|
||||
size_t signature_length) {
|
||||
return haystack::Haystack_LoadLicense_V18(session, message, message_length,
|
||||
core_message_length, signature,
|
||||
signature_length);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_SetDecryptHash(OEMCrypto_SESSION session,
|
||||
uint32_t frame_number,
|
||||
const uint8_t* hash,
|
||||
size_t hash_length) {
|
||||
uint32_t frame_number,
|
||||
const uint8_t* hash, size_t hash_length) {
|
||||
return haystack::Haystack_SetDecryptHash(session, frame_number, hash,
|
||||
hash_length);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_GetHashErrorCode(OEMCrypto_SESSION session,
|
||||
uint32_t* failed_frame_number) {
|
||||
uint32_t* failed_frame_number) {
|
||||
return haystack::Haystack_GetHashErrorCode(session, failed_frame_number);
|
||||
}
|
||||
|
||||
@@ -271,11 +266,11 @@ OEMCryptoResult Level3_BuildInformation(char* buffer, size_t* buffer_length) {
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_LoadRenewal(OEMCrypto_SESSION session,
|
||||
const uint8_t* message,
|
||||
size_t message_length,
|
||||
size_t core_message_length,
|
||||
const uint8_t* signature,
|
||||
size_t signature_length) {
|
||||
const uint8_t* message,
|
||||
size_t message_length,
|
||||
size_t core_message_length,
|
||||
const uint8_t* signature,
|
||||
size_t signature_length) {
|
||||
return haystack::Haystack_LoadRenewal(session, message, message_length,
|
||||
core_message_length, signature,
|
||||
signature_length);
|
||||
@@ -310,11 +305,11 @@ OEMCryptoResult Level3_ReassociateEntitledKeySession(
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_GetKeyHandle(OEMCrypto_SESSION session,
|
||||
const uint8_t* content_key_id,
|
||||
size_t content_key_id_length,
|
||||
OEMCryptoCipherMode cipher_mode,
|
||||
uint8_t* key_handle,
|
||||
size_t* key_handle_length) {
|
||||
const uint8_t* content_key_id,
|
||||
size_t content_key_id_length,
|
||||
OEMCryptoCipherMode cipher_mode,
|
||||
uint8_t* key_handle,
|
||||
size_t* key_handle_length) {
|
||||
return haystack::Haystack_GetKeyHandle(session, content_key_id,
|
||||
content_key_id_length, cipher_mode,
|
||||
key_handle, key_handle_length);
|
||||
@@ -328,52 +323,54 @@ OEMCryptoResult Level3_DecryptCENC(
|
||||
samples_length, pattern);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_Generic_Encrypt(
|
||||
const uint8_t* key_handle, size_t key_handle_length,
|
||||
const OEMCrypto_SharedMemory* in_buffer, size_t in_buffer_length,
|
||||
const uint8_t* iv, OEMCrypto_Algorithm algorithm,
|
||||
OEMCrypto_SharedMemory* out_buffer) {
|
||||
return haystack::Haystack_Generic_Encrypt(
|
||||
key_handle, key_handle_length, in_buffer, in_buffer_length, iv,
|
||||
algorithm, out_buffer);
|
||||
OEMCryptoResult Level3_Generic_Encrypt(const uint8_t* key_handle,
|
||||
size_t key_handle_length,
|
||||
const OEMCrypto_SharedMemory* in_buffer,
|
||||
size_t in_buffer_length,
|
||||
const uint8_t* iv,
|
||||
OEMCrypto_Algorithm algorithm,
|
||||
OEMCrypto_SharedMemory* out_buffer) {
|
||||
return haystack::Haystack_Generic_Encrypt(key_handle, key_handle_length,
|
||||
in_buffer, in_buffer_length, iv,
|
||||
algorithm, out_buffer);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_Generic_Decrypt(
|
||||
const uint8_t* key_handle, size_t key_handle_length,
|
||||
const OEMCrypto_SharedMemory* in_buffer, size_t in_buffer_length,
|
||||
const uint8_t* iv, OEMCrypto_Algorithm algorithm,
|
||||
OEMCrypto_SharedMemory* out_buffer) {
|
||||
return haystack::Haystack_Generic_Decrypt(
|
||||
key_handle, key_handle_length, in_buffer, in_buffer_length, iv,
|
||||
algorithm, out_buffer);
|
||||
OEMCryptoResult Level3_Generic_Decrypt(const uint8_t* key_handle,
|
||||
size_t key_handle_length,
|
||||
const OEMCrypto_SharedMemory* in_buffer,
|
||||
size_t in_buffer_length,
|
||||
const uint8_t* iv,
|
||||
OEMCrypto_Algorithm algorithm,
|
||||
OEMCrypto_SharedMemory* out_buffer) {
|
||||
return haystack::Haystack_Generic_Decrypt(key_handle, key_handle_length,
|
||||
in_buffer, in_buffer_length, iv,
|
||||
algorithm, out_buffer);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_Generic_Sign(const uint8_t* key_handle,
|
||||
size_t key_handle_length,
|
||||
const OEMCrypto_SharedMemory* buffer,
|
||||
size_t buffer_length,
|
||||
OEMCrypto_Algorithm algorithm,
|
||||
OEMCrypto_SharedMemory* signature,
|
||||
size_t* signature_length) {
|
||||
size_t key_handle_length,
|
||||
const OEMCrypto_SharedMemory* buffer,
|
||||
size_t buffer_length,
|
||||
OEMCrypto_Algorithm algorithm,
|
||||
OEMCrypto_SharedMemory* signature,
|
||||
size_t* signature_length) {
|
||||
return haystack::Haystack_Generic_Sign(key_handle, key_handle_length, buffer,
|
||||
buffer_length, algorithm, signature,
|
||||
signature_length);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_Generic_Verify(const uint8_t* key_handle,
|
||||
size_t key_handle_length,
|
||||
const OEMCrypto_SharedMemory* buffer,
|
||||
size_t buffer_length,
|
||||
OEMCrypto_Algorithm algorithm,
|
||||
const OEMCrypto_SharedMemory* signature,
|
||||
size_t signature_length) {
|
||||
size_t key_handle_length,
|
||||
const OEMCrypto_SharedMemory* buffer,
|
||||
size_t buffer_length,
|
||||
OEMCrypto_Algorithm algorithm,
|
||||
const OEMCrypto_SharedMemory* signature,
|
||||
size_t signature_length) {
|
||||
return haystack::Haystack_Generic_Verify(key_handle, key_handle_length,
|
||||
buffer, buffer_length, algorithm,
|
||||
signature, signature_length);
|
||||
}
|
||||
|
||||
|
||||
|
||||
OEMCryptoResult Level3_InstallKeyboxOrOEMCert(const uint8_t* rot,
|
||||
size_t rotLength) {
|
||||
return OEMCrypto_ERROR_NOT_IMPLEMENTED;
|
||||
@@ -529,9 +526,7 @@ OEMCryptoResult Level3_Idle(OEMCrypto_IdleState state,
|
||||
return OEMCrypto_SUCCESS;
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_Wake() {
|
||||
return OEMCrypto_SUCCESS;
|
||||
}
|
||||
OEMCryptoResult Level3_Wake() { return OEMCrypto_SUCCESS; }
|
||||
|
||||
OEMCryptoResult Level3_GetDTCP2Capability(
|
||||
OEMCrypto_DTCP2_Capability* capability) {
|
||||
@@ -574,3 +569,36 @@ OEMCryptoResult Level3_GetSignatureHashAlgorithm(
|
||||
OEMCryptoResult Level3_EnterTestMode(void) {
|
||||
return OEMCrypto_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_LoadLicense(
|
||||
OEMCrypto_SESSION session, const uint8_t* context, size_t context_length,
|
||||
const uint8_t* derivation_key, size_t derivation_key_length,
|
||||
const uint8_t* message, size_t message_length, size_t core_message_length,
|
||||
const uint8_t* signature, size_t signature_length) {
|
||||
return haystack::Haystack_LoadLicense(
|
||||
session, context, context_length, derivation_key, derivation_key_length,
|
||||
message, message_length, core_message_length, signature,
|
||||
signature_length);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_LoadProvisioning(
|
||||
OEMCrypto_SESSION session, const uint8_t* provision_request,
|
||||
size_t provision_request_length, const uint8_t* message,
|
||||
size_t message_length, size_t core_message_length, const uint8_t* signature,
|
||||
size_t signature_length, uint8_t* wrapped_private_key,
|
||||
size_t* wrapped_private_key_length) {
|
||||
return haystack::Haystack_LoadProvisioning(
|
||||
session, provision_request, provision_request_length, message,
|
||||
message_length, core_message_length, signature, signature_length,
|
||||
wrapped_private_key, wrapped_private_key_length);
|
||||
}
|
||||
|
||||
OEMCryptoResult Level3_LoadProvisioningCast(
|
||||
OEMCrypto_SESSION session, const uint8_t* derivation_key,
|
||||
size_t derivation_key_length, const uint8_t* provision_request,
|
||||
size_t provision_request_length, const uint8_t* message,
|
||||
size_t message_length, size_t core_message_length, const uint8_t* signature,
|
||||
size_t signature_length, uint8_t* wrapped_private_key,
|
||||
size_t* wrapped_private_key_length) {
|
||||
return OEMCrypto_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user