Correct request_license_test failures
[ Merge of http://go/wvgerrit/42103 ] * While deprecating keyboxes as identification, some code to restore a license was mistakenly removed in http:://go/wvgerrit/36740, http://ag/3442777 * Corrections to keep track of cipher mode, call SelectKeys when cipher mode changes and to use the backward compatible LoadKeys call in case OEMCrypto is v13. Bug: 70160032 Test: Ran WV unit/integration tests. Request license test failures have been addressed. Change-Id: Id03c50874085af6d9985d10c19a74a02efb7a1f5
This commit is contained in:
@@ -41,6 +41,9 @@ const uint32_t kRsaSignatureLength = 256;
|
||||
const size_t kMaximumChunkSize = 100 * 1024; // 100 KiB
|
||||
const size_t kEstimatedInitialUsageTableHeader = 40;
|
||||
const size_t kOemCryptoApiVersionSupportsBigUsageTables = 13;
|
||||
// Ability to switch cipher modes in SelectKey() was introduced in this
|
||||
// OEMCrypto version
|
||||
const size_t kOemCryptoApiVersionSupportsSwitchingCipherMode = 14;
|
||||
|
||||
// Constants and utility objects relating to OEM Certificates
|
||||
const int kExtensionOidSize = 64;
|
||||
@@ -126,6 +129,11 @@ OEMCrypto_LicenseType OEMCryptoLicenseType(CdmLicenseKeyType cdm_license_type) {
|
||||
: OEMCrypto_EntitlementLicense;
|
||||
}
|
||||
|
||||
OEMCryptoCipherMode ToOEMCryptoCipherMode(CdmCipherMode cipher_mode) {
|
||||
return cipher_mode == kCipherModeCtr
|
||||
? OEMCrypto_CipherMode_CTR : OEMCrypto_CipherMode_CBC;
|
||||
}
|
||||
|
||||
CryptoSession::CryptoSession(metrics::CryptoMetrics* metrics)
|
||||
: metrics_(metrics),
|
||||
system_id_(-1),
|
||||
@@ -137,7 +145,8 @@ CryptoSession::CryptoSession(metrics::CryptoMetrics* metrics)
|
||||
usage_support_type_(kUnknownUsageSupport),
|
||||
usage_table_header_(NULL),
|
||||
request_id_base_(0),
|
||||
cipher_mode_(kCipherModeCtr) {
|
||||
cipher_mode_(kCipherModeCtr),
|
||||
api_version_(0) {
|
||||
assert(metrics);
|
||||
Init();
|
||||
life_span_.Start();
|
||||
@@ -664,6 +673,11 @@ CdmResponseType CryptoSession::Open(SecurityLevel requested_security_level) {
|
||||
metrics_->oemcrypto_get_random_.Increment(random_sts);
|
||||
++request_id_index_;
|
||||
|
||||
if (!GetApiVersion(&api_version_)) {
|
||||
LOGE("CryptoSession::Open: GetApiVersion failed");
|
||||
return USAGE_SUPPORT_GET_API_FAILED;
|
||||
}
|
||||
|
||||
CdmUsageSupportType usage_support_type;
|
||||
CdmResponseType result = GetUsageSupportType(&usage_support_type);
|
||||
if (result == NO_ERROR) {
|
||||
@@ -1071,8 +1085,10 @@ CdmResponseType CryptoSession::Decrypt(const CdmDecryptionParameters& params) {
|
||||
sts = CopyBufferInChunks(params, buffer_descriptor);
|
||||
}
|
||||
}
|
||||
if (params.is_encrypted && params.cipher_mode != cipher_mode_) {
|
||||
return INCORRECT_CRYPTO_MODE;
|
||||
if (api_version_ < kOemCryptoApiVersionSupportsSwitchingCipherMode) {
|
||||
if (params.is_encrypted && params.cipher_mode != cipher_mode_) {
|
||||
return INCORRECT_CRYPTO_MODE;
|
||||
}
|
||||
}
|
||||
if (params.is_encrypted || sts == OEMCrypto_ERROR_NOT_IMPLEMENTED) {
|
||||
OEMCrypto_CENCEncryptPatternDesc pattern_descriptor;
|
||||
@@ -1928,14 +1944,8 @@ CdmResponseType CryptoSession::GetUsageSupportType(
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
uint32_t api_version = 0;
|
||||
if (!GetApiVersion(&api_version)) {
|
||||
LOGE("GetUsageSupportType: GetApiVersion failed");
|
||||
return USAGE_SUPPORT_GET_API_FAILED;
|
||||
}
|
||||
|
||||
*usage_support_type = usage_support_type_ =
|
||||
(api_version >= kOemCryptoApiVersionSupportsBigUsageTables)
|
||||
(api_version_ >= kOemCryptoApiVersionSupportsBigUsageTables)
|
||||
? kUsageEntrySupport
|
||||
: kUsageTableSupport;
|
||||
return NO_ERROR;
|
||||
|
||||
Reference in New Issue
Block a user