Merge OEMCrypto KDF and usage functions
Since KDF functions are only used right before specific functions, this merges them to simplify internal state within OEMCrypto. Fixes: 299527712 Change-Id: I426cfcdc102bd73cf65cd809b213da2474f44b34
This commit is contained in:
committed by
Robert Shih
parent
b04fda2908
commit
488a4647db
@@ -605,7 +605,7 @@ typedef enum OEMCrypto_SignatureHashAlgorithm {
|
||||
#define OEMCrypto_RewrapDeviceRSAKey _oecc18
|
||||
#define OEMCrypto_LoadDeviceRSAKey _oecc19
|
||||
#define OEMCrypto_GenerateRSASignature_V8 _oecc20
|
||||
#define OEMCrypto_DeriveKeysFromSessionKey _oecc21
|
||||
#define OEMCrypto_DeriveKeysFromSessionKey_V18 _oecc21
|
||||
#define OEMCrypto_APIVersion _oecc22
|
||||
#define OEMCrypto_SecurityLevel_V16 _oecc23
|
||||
#define OEMCrypto_Generic_Encrypt_V17 _oecc24
|
||||
@@ -669,13 +669,13 @@ typedef enum OEMCrypto_SignatureHashAlgorithm {
|
||||
#define OEMCrypto_LoadEntitledContentKeys_V16 _oecc92
|
||||
#define OEMCrypto_CopyBuffer _oecc93
|
||||
#define OEMCrypto_MaximumUsageTableHeaderSize _oecc94
|
||||
#define OEMCrypto_GenerateDerivedKeys _oecc95
|
||||
#define OEMCrypto_GenerateDerivedKeys_V18 _oecc95
|
||||
#define OEMCrypto_PrepAndSignLicenseRequest _oecc96
|
||||
#define OEMCrypto_PrepAndSignRenewalRequest _oecc97
|
||||
#define OEMCrypto_PrepAndSignProvisioningRequest _oecc98
|
||||
#define OEMCrypto_LoadLicense _oecc99
|
||||
#define OEMCrypto_LoadLicense_V18 _oecc99
|
||||
#define OEMCrypto_LoadRenewal _oecc101
|
||||
#define OEMCrypto_LoadProvisioning _oecc102
|
||||
#define OEMCrypto_LoadProvisioning_V18 _oecc102
|
||||
#define OEMCrypto_LoadOEMPrivateKey _oecc103
|
||||
#define OEMCrypto_GetOEMPublicCertificate _oecc104
|
||||
#define OEMCrypto_DecryptCENC_V17 _oecc105
|
||||
@@ -716,6 +716,9 @@ typedef enum OEMCrypto_SignatureHashAlgorithm {
|
||||
#define OEMCrypto_GetDeviceSignedCsrPayload _oecc141
|
||||
#define OEMCrypto_FactoryInstallBCCSignature _oecc142
|
||||
#define OEMCrypto_SetDecryptHash _oecc143
|
||||
#define OEMCrypto_LoadLicense _oecc144
|
||||
#define OEMCrypto_LoadProvisioning _oecc145
|
||||
#define OEMCrypto_LoadProvisioningCast _oecc146
|
||||
// clang-format on
|
||||
|
||||
/// @addtogroup initcontrol
|
||||
@@ -953,159 +956,6 @@ OEMCryptoResult OEMCrypto_OpenSession(OEMCrypto_SESSION* session);
|
||||
*/
|
||||
OEMCryptoResult OEMCrypto_CloseSession(OEMCrypto_SESSION session);
|
||||
|
||||
/**
|
||||
* Generates three secondary keys, mac_key[server], mac_key[client], and
|
||||
* encrypt_key, for handling signing and content key decryption under the
|
||||
* license server protocol for CENC.
|
||||
*
|
||||
* Refer to the Key Derivation section above for more details. This function
|
||||
* computes the AES-128-CMAC of the enc_key_context and stores it in secure
|
||||
* memory as the encrypt_key. It then computes four cycles of AES-128-CMAC of
|
||||
* the mac_key_context and stores it in the mac_keys -- the first two cycles
|
||||
* generate the mac_key[server] and the second two cycles generate the
|
||||
* mac_key[client]. These two keys will be stored until the next call to
|
||||
* OEMCrypto_LoadLicense(). The device key from the keybox is used as the key
|
||||
* for the AES-128-CMAC.
|
||||
*
|
||||
* @param[in] session: handle for the session to be used.
|
||||
* @param[in] mac_key_context: pointer to memory containing context data for
|
||||
* computing the HMAC generation key.
|
||||
* @param[in] mac_key_context_length: length of the HMAC key context data, in
|
||||
* bytes.
|
||||
* @param[in] enc_key_context: pointer to memory containing context data for
|
||||
* computing the encryption key.
|
||||
* @param[in] enc_key_context_length: length of the encryption key context data,
|
||||
* in bytes.
|
||||
*
|
||||
* Results:
|
||||
* mac_key[server]: the 256 bit mac key is generated and stored in secure
|
||||
* memory.
|
||||
* mac_key[client]: the 256 bit mac key is generated and stored in secure
|
||||
* memory.
|
||||
* enc_key: the 128 bit encryption key is generated and stored in secure
|
||||
* memory.
|
||||
*
|
||||
* @retval OEMCrypto_SUCCESS success
|
||||
* @retval OEMCrypto_ERROR_NO_DEVICE_KEY
|
||||
* @retval OEMCrypto_ERROR_INVALID_SESSION
|
||||
* @retval OEMCrypto_ERROR_INVALID_CONTEXT
|
||||
* @retval OEMCrypto_ERROR_INSUFFICIENT_RESOURCES
|
||||
* @retval OEMCrypto_ERROR_UNKNOWN_FAILURE
|
||||
* @retval OEMCrypto_ERROR_BUFFER_TOO_LARGE
|
||||
* @retval OEMCrypto_ERROR_SESSION_LOST_STATE
|
||||
* @retval OEMCrypto_ERROR_SYSTEM_INVALIDATED
|
||||
*
|
||||
* @buffer_size
|
||||
* OEMCrypto shall support mac_key_context and enc_key_context sizes as
|
||||
* described in the section OEMCrypto_ResourceRatingTier() for messages. The
|
||||
* key derivation context is about 25 bytes prepended to the request message.
|
||||
* OEMCrypto shall return OEMCrypto_ERROR_BUFFER_TOO_LARGE if the buffers are
|
||||
* too large.
|
||||
*
|
||||
* @threading
|
||||
* This is a "Session Function" and may be called simultaneously with session
|
||||
* functions for other sessions but not simultaneously with other functions
|
||||
* for this session. It will not be called simultaneously with initialization
|
||||
* or usage table functions. It is as if the CDM holds a write lock for this
|
||||
* session, and a read lock on the OEMCrypto system.
|
||||
*
|
||||
* @version
|
||||
* This method changed in API version 12.
|
||||
*/
|
||||
OEMCryptoResult OEMCrypto_GenerateDerivedKeys(
|
||||
OEMCrypto_SESSION session, const OEMCrypto_SharedMemory* mac_key_context,
|
||||
size_t mac_key_context_length,
|
||||
const OEMCrypto_SharedMemory* enc_key_context,
|
||||
size_t enc_key_context_length);
|
||||
|
||||
/**
|
||||
* Generates three secondary keys, mac_key[server], mac_key[client] and
|
||||
* encrypt_key, for handling signing and content key decryption under the
|
||||
* license server protocol for CENC.
|
||||
*
|
||||
* This function is similar to OEMCrypto_GenerateDerivedKeys(), except that it
|
||||
* uses a session key to generate the secondary keys instead of the Widevine
|
||||
* Keybox device key. These three keys will be stored in secure memory until
|
||||
* the next call to LoadLicense or LoadProvisioning.
|
||||
*
|
||||
* If the session's private key is an RSA key, then the session key is passed
|
||||
* in encrypted by the device RSA public key as the derivation_key, and must
|
||||
* be decrypted with the RSA private key before use.
|
||||
*
|
||||
* If the sesion's private key is an ECC key, then the session key is the
|
||||
* SHA256 of the shared secret key calculated by ECDH between the device's
|
||||
* ECC private key and the derivation_key. See the document "OEMCrypto
|
||||
* Elliptic Curve Support" for details.
|
||||
*
|
||||
* Once the enc_key and mac_keys have been generated, all calls to
|
||||
* OEMCrypto_LoadLicense() proceed in the same manner for license requests using
|
||||
* RSA or using a Widevine keybox token.
|
||||
*
|
||||
* This function is also used to derive keys before processing a Cast
|
||||
* Certificate provisioning response in OEMCrypto_LoadProvisioning().
|
||||
* See [Cast Receiver](../../cast) for more details.
|
||||
*
|
||||
* @verification
|
||||
* If the RSA key's allowed_schemes is not kSign_RSASSA_PSS, then no keys are
|
||||
* derived and the error OEMCrypto_ERROR_INVALID_KEY is returned. An RSA
|
||||
* key cannot be used for both deriving session keys and also for PKCS1
|
||||
* signatures.
|
||||
*
|
||||
* @param[in] session: handle for the session to be used.
|
||||
* @param[in] derivation_key: session key, encrypted with the public RSA key
|
||||
* (from the DRM certifcate) using RSA-OAEP.
|
||||
* @param[in] derivation_key_length: length of derivation_key, in bytes.
|
||||
* @param[in] mac_key_context: pointer to memory containing context data for
|
||||
* computing the HMAC generation key.
|
||||
* @param[in] mac_key_context_length: length of the HMAC key context data, in
|
||||
* bytes.
|
||||
* @param[in] enc_key_context: pointer to memory containing context data for
|
||||
* computing the encryption key.
|
||||
* @param[in] enc_key_context_length: length of the encryption key context data,
|
||||
* in bytes.
|
||||
*
|
||||
* Results:
|
||||
* mac_key[server]: the 256 bit mac key is generated and stored in secure
|
||||
* memory.
|
||||
* mac_key[client]: the 256 bit mac key is generated and stored in secure
|
||||
* memory.
|
||||
* enc_key: the 128 bit encryption key is generated and stored in secure
|
||||
* memory.
|
||||
*
|
||||
* @retval OEMCrypto_SUCCESS success
|
||||
* @retval OEMCrypto_ERROR_DEVICE_NOT_RSA_PROVISIONED
|
||||
* @retval OEMCrypto_ERROR_INVALID_SESSION
|
||||
* @retval OEMCrypto_ERROR_INVALID_CONTEXT
|
||||
* @retval OEMCrypto_ERROR_INSUFFICIENT_RESOURCES
|
||||
* @retval OEMCrypto_ERROR_UNKNOWN_FAILURE
|
||||
* @retval OEMCrypto_ERROR_BUFFER_TOO_LARGE
|
||||
* @retval OEMCrypto_ERROR_SESSION_LOST_STATE
|
||||
* @retval OEMCrypto_ERROR_SYSTEM_INVALIDATED
|
||||
*
|
||||
* @buffer_size
|
||||
* OEMCrypto shall support mac_key_context and enc_key_context sizes as
|
||||
* described in the section OEMCrypto_ResourceRatingTier() for messages. The
|
||||
* key derivation context is about 25 bytes prepended to the request message.
|
||||
* OEMCrypto shall return OEMCrypto_ERROR_BUFFER_TOO_LARGE if the buffers are
|
||||
* too large.
|
||||
*
|
||||
* @threading
|
||||
* This is a "Session Function" and may be called simultaneously with session
|
||||
* functions for other sessions but not simultaneously with other functions
|
||||
* for this session. It will not be called simultaneously with initialization
|
||||
* or usage table functions. It is as if the CDM holds a write lock for this
|
||||
* session, and a read lock on the OEMCrypto system.
|
||||
*
|
||||
* @version
|
||||
* This method changed in API version 16.
|
||||
*/
|
||||
OEMCryptoResult OEMCrypto_DeriveKeysFromSessionKey(
|
||||
OEMCrypto_SESSION session, const uint8_t* derivation_key,
|
||||
size_t derivation_key_length, const OEMCrypto_SharedMemory* mac_key_context,
|
||||
size_t mac_key_context_length,
|
||||
const OEMCrypto_SharedMemory* enc_key_context,
|
||||
size_t enc_key_context_length);
|
||||
|
||||
/**
|
||||
* Generates a 32-bit nonce to detect possible replay attack on the key
|
||||
* control block. The nonce is stored in secure memory and will be used in
|
||||
@@ -1308,7 +1158,11 @@ OEMCryptoResult OEMCrypto_PrepAndSignRenewalRequest(
|
||||
/**
|
||||
* Install a set of keys for performing decryption in the current session.
|
||||
*
|
||||
* First, OEMCrypto shall verify the signature of the message using
|
||||
* First, OEMCrypto should generate three secondary keys, mac_key[server],
|
||||
* mac_key[client], and encryption_key, for handling signing and content key
|
||||
* derivation under the license server protocol for CENC.
|
||||
*
|
||||
* Then OEMCrypto shall verify the signature of the message using
|
||||
* HMAC-SHA256 with the derived mac_key[server]. The signature verification
|
||||
* shall use a constant-time algorithm (a signature mismatch will always take
|
||||
* the same time as a successful comparison). The signature is over the
|
||||
@@ -1317,9 +1171,6 @@ OEMCryptoResult OEMCrypto_PrepAndSignRenewalRequest(
|
||||
* OEMCrypto_ERROR_SIGNATURE_FAILURE. Otherwise, add the keys to the session
|
||||
* context.
|
||||
*
|
||||
* NOTE: The calling software must have previously established the mac_keys
|
||||
* and encrypt_key with a call to OEMCrypto_DeriveKeysFromSessionKey().
|
||||
*
|
||||
* Refer to the Verification of Messages from a Server section above for more
|
||||
* details.
|
||||
*
|
||||
@@ -1517,6 +1368,10 @@ OEMCryptoResult OEMCrypto_PrepAndSignRenewalRequest(
|
||||
* OEMCrypto_ERROR_INSUFFICIENT_HDCP at that time.
|
||||
*
|
||||
* @param[in] session: crypto session identifier.
|
||||
* @param[in] context: pointer to memory containing context data.
|
||||
* @param[in] context_length: length of the context, in bytes.
|
||||
* @param[in] derivation_key: pointer to memory containing derivation key.
|
||||
* @param[in] derivation_key_length: length of the derivation_key, in bytes.
|
||||
* @param[in] message: pointer to memory containing data.
|
||||
* @param[in] message_length: length of the message, in bytes.
|
||||
* @param[in] core_message_length: length of the core submessage, in bytes.
|
||||
@@ -1537,6 +1392,8 @@ OEMCryptoResult OEMCrypto_PrepAndSignRenewalRequest(
|
||||
* @retval OEMCrypto_ERROR_SYSTEM_INVALIDATED
|
||||
* @retval OEMCrypto_ERROR_LICENSE_RELOAD
|
||||
* @retval OEMCrypto_ERROR_KEY_EXPIRED
|
||||
* @retval OEMCrypto_ERROR_INSUFFICIENT_RESOURCES
|
||||
* @retval OEMCrypto_ERROR_DEVICE_NOT_RSA_PROVISIONED
|
||||
*
|
||||
* @buffer_size
|
||||
* OEMCrypto shall support message sizes as described in the section
|
||||
@@ -1554,12 +1411,11 @@ OEMCryptoResult OEMCrypto_PrepAndSignRenewalRequest(
|
||||
* @version
|
||||
* This method changed in API version 16.
|
||||
*/
|
||||
OEMCryptoResult OEMCrypto_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 OEMCrypto_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);
|
||||
|
||||
/**
|
||||
* Updates the clock values and resets the renewal timer for the current
|
||||
@@ -3783,9 +3639,7 @@ uint32_t OEMCrypto_GetAnalogOutputFlags(void);
|
||||
* The message size limit applies to all functions that sign or verify a
|
||||
* message: OEMCrypto_PrepAndSignLicenseRequest(),
|
||||
* OEMCrypto_PrepAndSignRenewalRequest(),
|
||||
* OEMCrypto_PrepAndSignProvisioningRequest(), and OEMCrypto_LoadLicense(). A
|
||||
* request message is also used as the context buffer in
|
||||
* OEMCrypto_DeriveKeysFromSessionKey() and OEMCrypto_GenerateDerivedKeys().
|
||||
* OEMCrypto_PrepAndSignProvisioningRequest(), and OEMCrypto_LoadLicense().
|
||||
*
|
||||
*
|
||||
* @return
|
||||
@@ -3918,24 +3772,19 @@ OEMCryptoResult OEMCrypto_GetSignatureHashAlgorithm(
|
||||
|
||||
/**
|
||||
* Load and parse a provisioning response, and then rewrap the private key
|
||||
* for storage on the filesystem. We recommend that the OEM use an encryption
|
||||
* key and signing key generated using an algorithm at least as strong as
|
||||
* that in GenerateDerivedKeys.
|
||||
* for storage on the filesystem. We recommend that the OEM use a strong
|
||||
* encryption key and signing key algorithm.
|
||||
*
|
||||
* First, OEMCrypto shall verify the signature of the message using the correct
|
||||
* algorithm depending on if the device supports Provisioning 2.0, 3.0 or 4.0.
|
||||
*
|
||||
* For Provisioning 2.0, OEMCrypto shall verify the signature of the message
|
||||
* using HMAC-SHA256 with the derived mac_key[server]. The signature
|
||||
* verification shall use a constant-time algorithm (a signature mismatch will
|
||||
* always take the same time as a successful comparison). The signature is over
|
||||
* the entire message buffer starting at message with length message_length. If
|
||||
* the signature verification fails, ignore all other arguments and return
|
||||
* OEMCrypto_ERROR_SIGNATURE_FAILURE.
|
||||
*
|
||||
* NOTE: The calling software must have previously established the mac_keys
|
||||
* and encrypt_key with a call to OEMCrypto_DeriveKeysFromSessionKey() or
|
||||
* OEMCrypto_GenerateDerivedKeys().
|
||||
* For Provisioning 2.0, OEMCrypto shall use the provisioning request to derive
|
||||
* mac_key[server] and verify the signature of the message using HMAC-SHA256.
|
||||
* The signature verification shall use a constant-time algorithm (a signature
|
||||
* mismatch will always take the same time as a successful comparison). The
|
||||
* signature is over the entire message buffer starting at message with length
|
||||
* message_length. If the signature verification fails, ignore all other
|
||||
* arguments and return OEMCrypto_ERROR_SIGNATURE_FAILURE.
|
||||
*
|
||||
* For Provisioning 3.0 and 4.0, the signature is not verified.
|
||||
*
|
||||
@@ -3973,8 +3822,7 @@ OEMCryptoResult OEMCrypto_GetSignatureHashAlgorithm(
|
||||
* 2. Verify that (in) wrapped_private_key_length is large enough to hold
|
||||
* the rewrapped key, returning OEMCrypto_ERROR_SHORT_BUFFER otherwise.
|
||||
* 3. Verify the message signature, using the derived signing key
|
||||
* (mac_key[server]) from a previous call to
|
||||
* OEMCrypto_GenerateDerivedKeys() or OEMCrypto_DeriveKeysFromSessionKey().
|
||||
* (mac_key[server]).
|
||||
* 4. The function ODK_ParseProvisioning is called to parse the message.
|
||||
* 5. Decrypt enc_private_key in the buffer private_key using the session's
|
||||
* derived encryption key (enc_key). Use enc_private_key_iv as the initial
|
||||
@@ -4011,6 +3859,8 @@ OEMCryptoResult OEMCrypto_GetSignatureHashAlgorithm(
|
||||
* and the size of the wrapped key to wrapped_private_key_length.
|
||||
*
|
||||
* @param[in] session: crypto session identifier.
|
||||
* @param[in] provision_request: the initial provisioning request.
|
||||
* @param[in] provision_request_length: length of provision_request, in bytes.
|
||||
* @param[in] message: pointer to memory containing data.
|
||||
* @param[in] message_length: length of the message, in bytes.
|
||||
* @param[in] core_message_length: length of the core submessage, in bytes.
|
||||
@@ -4052,15 +3902,79 @@ OEMCryptoResult OEMCrypto_GetSignatureHashAlgorithm(
|
||||
* This method changed in API version 16.
|
||||
*/
|
||||
OEMCryptoResult OEMCrypto_LoadProvisioning(
|
||||
OEMCrypto_SESSION session, const uint8_t* message, size_t message_length,
|
||||
size_t core_message_length, const uint8_t* signature,
|
||||
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);
|
||||
|
||||
|
||||
/**
|
||||
* Load and parse a provisioning response, and then rewrap the private key. We
|
||||
* recommend that the OEM use a strong encryption key and signing key algorithm.
|
||||
*
|
||||
* This is the same as OEMCrypto_LoadProvisioning except it is for CAST devices.
|
||||
* This should return OEMCrypto_ERROR_NOT_IMPLEMENTED for non-CAST devices.
|
||||
*
|
||||
* @param[in] session: crypto session identifier.
|
||||
* @param[in] derivation_key: session key, encrypted with the public RSA key
|
||||
* (from the DRM certifcate) using RSA-OAEP.
|
||||
* @param[in] derivation_key_length: length of derivation_key, in bytes.
|
||||
* @param[in] provision_request: the initial provisioning request.
|
||||
* @param[in] provision_request_length: length of provision_request, in bytes.
|
||||
* @param[in] message: pointer to memory containing data.
|
||||
* @param[in] message_length: length of the message, in bytes.
|
||||
* @param[in] core_message_length: length of the core submessage, in bytes.
|
||||
* @param[in] signature: pointer to memory containing the signature.
|
||||
* @param[in] signature_length: length of the signature, in bytes.
|
||||
* @param[out] wrapped_private_key: pointer to buffer in which encrypted RSA or
|
||||
* ECC private key should be stored. May be null on the first call in order
|
||||
* to find required buffer size.
|
||||
* @param[in,out] wrapped_private_key_length: (in) length of the encrypted
|
||||
* private key, in bytes. (out) actual length of the encrypted private key
|
||||
*
|
||||
* @retval OEMCrypto_SUCCESS success
|
||||
* @retval OEMCrypto_ERROR_NO_DEVICE_KEY
|
||||
* @retval OEMCrypto_ERROR_INVALID_SESSION
|
||||
* @retval OEMCrypto_ERROR_INVALID_KEY
|
||||
* @retval OEMCrypto_ERROR_SIGNATURE_FAILURE
|
||||
* @retval OEMCrypto_ERROR_INVALID_NONCE
|
||||
* @retval OEMCrypto_ERROR_SHORT_BUFFER
|
||||
* @retval OEMCrypto_ERROR_INSUFFICIENT_RESOURCES
|
||||
* @retval OEMCrypto_ERROR_UNKNOWN_FAILURE
|
||||
* @retval OEMCrypto_ERROR_BUFFER_TOO_LARGE
|
||||
* @retval OEMCrypto_ERROR_SESSION_LOST_STATE
|
||||
* @retval OEMCrypto_ERROR_SYSTEM_INVALIDATED
|
||||
* @retval OEMCrypto_ERROR_NOT_IMPLEMENTED
|
||||
*
|
||||
* @buffer_size
|
||||
* OEMCrypto shall support message sizes as described in the section
|
||||
* OEMCrypto_ResourceRatingTier().
|
||||
* OEMCrypto shall return OEMCrypto_ERROR_BUFFER_TOO_LARGE if the buffer is
|
||||
* larger than the supported size.
|
||||
*
|
||||
* @threading
|
||||
* This is a "Session Function" and may be called simultaneously with session
|
||||
* functions for other sessions but not simultaneously with other functions
|
||||
* for this session. It will not be called simultaneously with initialization
|
||||
* or usage table functions. It is as if the CDM holds a write lock for this
|
||||
* session, and a read lock on the OEMCrypto system.
|
||||
*
|
||||
* @version
|
||||
* This method was added in API version 19.
|
||||
*/
|
||||
OEMCryptoResult OEMCrypto_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);
|
||||
|
||||
/**
|
||||
* Loads a wrapped RSA or ECC private key to secure memory for use by this
|
||||
* session in future calls to OEMCrypto_PrepAndSignLicenseRequest() or
|
||||
* OEMCrypto_DeriveKeysFromSessionKey(). The wrapped private key will be the
|
||||
* OEMCrypto_LoadLicense(). The wrapped private key will be the
|
||||
* one verified and wrapped by OEMCrypto_LoadProvisioning(). The private key
|
||||
* should be stored in secure memory.
|
||||
*
|
||||
@@ -4068,7 +3982,7 @@ OEMCryptoResult OEMCrypto_LoadProvisioning(
|
||||
* value will be loaded and stored with the RSA key, and the key may be used
|
||||
* with calls to OEMCrypto_GenerateRSASignature(). If there was not a bit field
|
||||
* wrapped with the RSA key, the key will be used for
|
||||
* OEMCrypto_PrepAndSignLicenseRequest() or OEMCrypto_DeriveKeysFromSessionKey()
|
||||
* OEMCrypto_PrepAndSignLicenseRequest() or OEMCrypto_LoadLicense()
|
||||
*
|
||||
* @verification
|
||||
* The following checks should be performed. If any check fails, an error is
|
||||
@@ -4228,8 +4142,7 @@ OEMCryptoResult OEMCrypto_GenerateRSASignature(
|
||||
* message with length message_length.
|
||||
*
|
||||
* For a device that has a keybox, i.e. Provisioning 2.0, OEMCrypto will sign
|
||||
* the request with the session's derived client mac key from the previous
|
||||
* call to OEMCrypto_GenerateDerivedKeys().
|
||||
* the request with the session's derived client mac key using the message.
|
||||
*
|
||||
* For Provisioning 3.0, i.e. a device that has a baked in OEM Certificate,
|
||||
* OEMCrypto will sign the request with the private key associated with the OEM
|
||||
@@ -5845,6 +5758,56 @@ OEMCryptoResult OEMCrypto_Generic_Verify_V17(
|
||||
size_t buffer_length, OEMCrypto_Algorithm algorithm,
|
||||
const OEMCrypto_SharedMemory* signature, size_t signature_length);
|
||||
|
||||
/**
|
||||
* OEMCrypto_GenerateDerivedKeys_V18
|
||||
* @deprecated
|
||||
* Not required for the current version of OEMCrypto. Declared here to
|
||||
* help with backward compatibility.
|
||||
*/
|
||||
OEMCryptoResult OEMCrypto_GenerateDerivedKeys_V18(
|
||||
OEMCrypto_SESSION session, const OEMCrypto_SharedMemory* mac_key_context,
|
||||
size_t mac_key_context_length,
|
||||
const OEMCrypto_SharedMemory* enc_key_context,
|
||||
size_t enc_key_context_length);
|
||||
|
||||
/**
|
||||
* OEMCrypto_DeriveKeysFromSessionKey_V18
|
||||
* @deprecated
|
||||
* Not required for the current version of OEMCrypto. Declared here to
|
||||
* help with backward compatibility.
|
||||
*/
|
||||
OEMCryptoResult OEMCrypto_DeriveKeysFromSessionKey_V18(
|
||||
OEMCrypto_SESSION session, const uint8_t* derivation_key,
|
||||
size_t derivation_key_length, const OEMCrypto_SharedMemory* mac_key_context,
|
||||
size_t mac_key_context_length,
|
||||
const OEMCrypto_SharedMemory* enc_key_context,
|
||||
size_t enc_key_context_length);
|
||||
|
||||
/**
|
||||
* OEMCrypto_LoadLicense_V18
|
||||
* @deprecated
|
||||
* Not required for the current version of OEMCrypto. Declared here to
|
||||
* help with backward compatibility.
|
||||
*/
|
||||
OEMCryptoResult OEMCrypto_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);
|
||||
|
||||
/**
|
||||
* OEMCrypto_LoadProvisioning_V18
|
||||
* @deprecated
|
||||
* Not required for the current version of OEMCrypto. Declared here to
|
||||
* help with backward compatibility.
|
||||
*/
|
||||
OEMCryptoResult OEMCrypto_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);
|
||||
|
||||
/****************************************************************************/
|
||||
/****************************************************************************/
|
||||
|
||||
|
||||
Reference in New Issue
Block a user