Source release 15.3.0
This commit is contained in:
@@ -823,13 +823,12 @@ void Session::EncryptCTR(const vector<uint8_t>& in_buffer, const uint8_t* key,
|
||||
|
||||
void Session::TestDecryptCTR(bool select_key_first,
|
||||
OEMCryptoResult expected_result, int key_index) {
|
||||
OEMCryptoResult sts;
|
||||
OEMCryptoResult select_result = OEMCrypto_SUCCESS;
|
||||
if (select_key_first) {
|
||||
// Select the key (from FillSimpleMessage)
|
||||
sts = OEMCrypto_SelectKey(session_id(), license_.keys[key_index].key_id,
|
||||
license_.keys[key_index].key_id_length,
|
||||
OEMCrypto_CipherMode_CTR);
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS, sts);
|
||||
select_result = OEMCrypto_SelectKey(
|
||||
session_id(), license_.keys[key_index].key_id,
|
||||
license_.keys[key_index].key_id_length, OEMCrypto_CipherMode_CTR);
|
||||
}
|
||||
|
||||
vector<uint8_t> unencryptedData(256);
|
||||
@@ -853,38 +852,42 @@ void Session::TestDecryptCTR(bool select_key_first,
|
||||
pattern.skip = 0;
|
||||
pattern.offset = 0;
|
||||
// Decrypt the data
|
||||
sts = OEMCrypto_DecryptCENC(
|
||||
const OEMCryptoResult decrypt_result = OEMCrypto_DecryptCENC(
|
||||
session_id(), encryptedData.data(), encryptedData.size(), true,
|
||||
encryptionIv.data(), 0, &destBuffer, &pattern,
|
||||
OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample);
|
||||
// We only have a few errors that we test are reported.
|
||||
ASSERT_NO_FATAL_FAILURE(
|
||||
TestDecryptResult(expected_result, select_result, decrypt_result))
|
||||
<< "Either SelectKey or DecryptCENC should return " << expected_result
|
||||
<< ", but they returned " << select_result << " and " << decrypt_result
|
||||
<< ", respectively.";
|
||||
if (expected_result == OEMCrypto_SUCCESS) { // No error.
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS, sts);
|
||||
ASSERT_EQ(unencryptedData, outputBuffer);
|
||||
} else {
|
||||
ASSERT_NO_FATAL_FAILURE(TestDecryptResult(expected_result, sts));
|
||||
ASSERT_NE(unencryptedData, outputBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
void Session::TestDecryptResult(OEMCryptoResult expected_result,
|
||||
OEMCryptoResult actual_result) {
|
||||
|
||||
OEMCryptoResult actual_select_result,
|
||||
OEMCryptoResult actual_decrypt_result) {
|
||||
// In most cases, we expect the result to come from either the select key or
|
||||
// from the decrypt call.
|
||||
if (expected_result == OEMCrypto_SUCCESS) { // No error.
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS, actual_result);
|
||||
} else if (expected_result == OEMCrypto_ERROR_KEY_EXPIRED &&
|
||||
global_features.api_version >= 9) {
|
||||
// Report stale keys, required in v9 and beyond.
|
||||
ASSERT_EQ(OEMCrypto_ERROR_KEY_EXPIRED, actual_result);
|
||||
} else if (expected_result == OEMCrypto_ERROR_INSUFFICIENT_HDCP) {
|
||||
// Report HDCP errors.
|
||||
ASSERT_EQ(OEMCrypto_ERROR_INSUFFICIENT_HDCP, actual_result);
|
||||
} else if (expected_result == OEMCrypto_ERROR_ANALOG_OUTPUT) {
|
||||
// Report analog errors.
|
||||
ASSERT_EQ(OEMCrypto_ERROR_ANALOG_OUTPUT, actual_result);
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS, actual_select_result);
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS, actual_decrypt_result);
|
||||
} else if (expected_result == OEMCrypto_ERROR_KEY_EXPIRED ||
|
||||
expected_result == OEMCrypto_ERROR_INSUFFICIENT_HDCP ||
|
||||
expected_result == OEMCrypto_ERROR_ANALOG_OUTPUT) {
|
||||
// Key expired or output problems may be reported from select key or
|
||||
// decrypt, but must be reported.
|
||||
ASSERT_TRUE(actual_select_result == expected_result ||
|
||||
actual_decrypt_result == expected_result);
|
||||
} else {
|
||||
// OEM's can fine tune other error codes for debugging.
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, actual_result);
|
||||
ASSERT_TRUE(actual_select_result != OEMCrypto_SUCCESS ||
|
||||
actual_decrypt_result != OEMCrypto_SUCCESS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user