[ Cherry-pick of v19 http://go/wvgerrit/219291 ] [ Merge of http://go/wvgerrit/219432 ] If the same app/origin generates multiple provisioning 4.0 requests it is possible that a mismatch between the OEM/DRM certificate and the wrapped OEM/DRM private key occurs. The CDM would use the OEM/DRM certificate of the first response one received, and the wrapped private key of the last request generated. To avoid this issue, the public key from the most recent request is cached and checked against the responses received. If the keys match, that response is accepted; if the keys don't match than the response is assumed "stale" and the response is dropped. In an attempt to maintain existing behavior of the CDM, "stale" responses will return NO_ERROR to the app. Note: This was tested using both RSA and ECC cert key types. VIC-specific: Needed to add implementation of StringContains() and StringEndsWith(). Bug: 391469176 Test: run_prov40_tests Change-Id: Id45d40d9af355c46a61c3cc2c19c252cf17c7489
481 lines
18 KiB
C++
481 lines
18 KiB
C++
//
|
|
// Copyright 2021 Google LLC. All Rights Reserved. This file and proprietary
|
|
// source code may only be used and distributed under the Widevine License
|
|
// Agreement.
|
|
//
|
|
|
|
#ifndef WV_MAP_ERRORS_INL_H_
|
|
#define WV_MAP_ERRORS_INL_H_
|
|
|
|
#include "WVErrors.h"
|
|
#include "WVTypes.h"
|
|
#include "media/stagefright/MediaErrors.h"
|
|
#include "utils/Errors.h"
|
|
#include "wv_cdm_types.h"
|
|
|
|
namespace wvdrm {
|
|
|
|
using ::aidl::android::hardware::drm::Status;
|
|
|
|
static inline WvStatus mapCdmResponseType(wvcdm::CdmResponseType res) {
|
|
Status err = Status::ERROR_DRM_UNKNOWN;
|
|
switch (res.code()) {
|
|
case wvcdm::KEY_ADDED:
|
|
case wvcdm::KEY_MESSAGE:
|
|
case wvcdm::KEY_CANCELED:
|
|
// KEY_ADDED, KEY_MESSAGE, and KEY_CANCELLED are all alternative
|
|
// success messages for certain CDM methods instead of NO_ERROR.
|
|
case wvcdm::NO_ERROR:
|
|
err = Status::OK;
|
|
break;
|
|
|
|
case wvcdm::DECRYPT_NOT_READY:
|
|
case wvcdm::KEY_NOT_FOUND_IN_SESSION:
|
|
case wvcdm::NEED_KEY:
|
|
case wvcdm::NO_MATCHING_ENTITLEMENT_KEY:
|
|
// TODO(http://b/119690361): there are several NO_CONTENT_* errors.
|
|
// that should probably all turn into NO_LICENSE. Here, and below, and
|
|
// everywhere.
|
|
case wvcdm::NO_CONTENT_KEY_3:
|
|
err = Status::ERROR_DRM_NO_LICENSE;
|
|
break;
|
|
|
|
case wvcdm::NEED_PROVISIONING:
|
|
err = Status::ERROR_DRM_NOT_PROVISIONED;
|
|
break;
|
|
|
|
case wvcdm::DEVICE_REVOKED:
|
|
err = Status::ERROR_DRM_DEVICE_REVOKED;
|
|
break;
|
|
|
|
case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES:
|
|
err = Status::ERROR_DRM_RESOURCE_BUSY;
|
|
break;
|
|
|
|
case wvcdm::RELEASE_USAGE_INFO_ERROR:
|
|
case wvcdm::RELEASE_USAGE_INFO_FAILED:
|
|
case wvcdm::SYSTEM_INVALIDATED_ERROR:
|
|
err = Status::ERROR_DRM_INVALID_STATE;
|
|
break;
|
|
|
|
case wvcdm::SESSION_NOT_FOUND_FOR_DECRYPT:
|
|
case wvcdm::SESSION_NOT_FOUND_1:
|
|
case wvcdm::SESSION_NOT_FOUND_2:
|
|
case wvcdm::SESSION_NOT_FOUND_3:
|
|
case wvcdm::SESSION_NOT_FOUND_4:
|
|
case wvcdm::SESSION_NOT_FOUND_5:
|
|
case wvcdm::SESSION_NOT_FOUND_6:
|
|
case wvcdm::SESSION_NOT_FOUND_7:
|
|
case wvcdm::SESSION_NOT_FOUND_8:
|
|
case wvcdm::SESSION_NOT_FOUND_9:
|
|
case wvcdm::SESSION_NOT_FOUND_10:
|
|
case wvcdm::SESSION_NOT_FOUND_18:
|
|
case wvcdm::SESSION_NOT_FOUND_19:
|
|
case wvcdm::SESSION_NOT_FOUND_20:
|
|
case wvcdm::SESSION_NOT_FOUND_21:
|
|
case wvcdm::SESSION_NOT_FOUND_22:
|
|
case wvcdm::SESSION_NOT_FOUND_23:
|
|
case wvcdm::SESSION_NOT_FOUND_GENERIC_CRYPTO:
|
|
err = Status::ERROR_DRM_SESSION_NOT_OPENED;
|
|
break;
|
|
|
|
case wvcdm::DECRYPT_ERROR:
|
|
case wvcdm::SECURE_BUFFER_REQUIRED:
|
|
err = Status::ERROR_DRM_CANNOT_HANDLE;
|
|
break;
|
|
|
|
case wvcdm::ANALOG_OUTPUT_ERROR:
|
|
case wvcdm::INSUFFICIENT_OUTPUT_PROTECTION:
|
|
err = Status::ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION;
|
|
break;
|
|
|
|
case wvcdm::KEYSET_ID_NOT_FOUND_4:
|
|
err = Status::BAD_VALUE;
|
|
break;
|
|
|
|
// The following cases follow the order in wv_cdm_types.h
|
|
// to make it easier to keep track of newly defined errors.
|
|
case wvcdm::CERT_PROVISIONING_GET_KEYBOX_ERROR_1:
|
|
case wvcdm::INVALID_DECRYPT_PARAMETERS_ENG_1:
|
|
case wvcdm::INVALID_DECRYPT_PARAMETERS_ENG_3:
|
|
case wvcdm::INVALID_DEVICE_CERTIFICATE_TYPE:
|
|
case wvcdm::REMOVE_ALL_USAGE_INFO_ERROR_1:
|
|
case wvcdm::REMOVE_ALL_USAGE_INFO_ERROR_2:
|
|
case wvcdm::UNPROVISION_ERROR_4:
|
|
case wvcdm::PARSE_SERVICE_CERTIFICATE_ERROR:
|
|
case wvcdm::CLIENT_ID_RSA_INIT_ERROR:
|
|
case wvcdm::INCORRECT_CRYPTO_MODE:
|
|
case wvcdm::INVALID_PARAMETERS_ENG_5:
|
|
case wvcdm::COPY_OLD_USAGE_ENTRY_UNKNOWN_ERROR:
|
|
case wvcdm::UNEXPECTED_EMPTY_USAGE_ENTRY:
|
|
case wvcdm::INVALID_USAGE_ENTRY_NUMBER_MODIFICATION:
|
|
case wvcdm::REMOVE_ALL_USAGE_INFO_ERROR_6:
|
|
case wvcdm::REMOVE_ALL_USAGE_INFO_ERROR_7:
|
|
case wvcdm::DELETE_USAGE_ERROR_3:
|
|
case wvcdm::LOAD_SYSTEM_ID_ERROR:
|
|
case wvcdm::RSA_SIGNATURE_GENERATION_ERROR:
|
|
case wvcdm::REWRAP_DEVICE_RSA_KEY_ERROR:
|
|
case wvcdm::PARSE_OKP_RESPONSE_ERROR:
|
|
case wvcdm::OKP_ALREADY_PROVISIONED:
|
|
ALOGW("Returns UNKNOWN error for legacy status: %u", res.ToInt());
|
|
err = Status::ERROR_DRM_UNKNOWN;
|
|
break;
|
|
|
|
case wvcdm::KEY_PROHIBITED_FOR_SECURITY_LEVEL:
|
|
err = Status::ERROR_DRM_INSUFFICIENT_SECURITY;
|
|
break;
|
|
case wvcdm::OUTPUT_TOO_LARGE_ERROR:
|
|
err = Status::ERROR_DRM_FRAME_TOO_LARGE;
|
|
break;
|
|
case wvcdm::SESSION_LOST_STATE_ERROR:
|
|
err = Status::ERROR_DRM_SESSION_LOST_STATE;
|
|
break;
|
|
case wvcdm::LICENSE_REQUEST_NONCE_GENERATION_ERROR:
|
|
case wvcdm::LICENSE_RENEWAL_NONCE_GENERATION_ERROR:
|
|
case wvcdm::CERT_PROVISIONING_NONCE_GENERATION_ERROR:
|
|
case wvcdm::NONCE_GENERATION_ERROR:
|
|
// These are likely nonce flood errors
|
|
err = Status::ERROR_DRM_RESOURCE_CONTENTION;
|
|
break;
|
|
|
|
case wvcdm::CANNOT_DECRYPT_ZERO_SUBSAMPLES:
|
|
err = Status::CANNOT_DECRYPT_ZERO_SUBSAMPLES;
|
|
break;
|
|
case wvcdm::CLIENT_ID_AES_ENCRYPT_ERROR:
|
|
case wvcdm::CLIENT_ID_AES_INIT_ERROR:
|
|
case wvcdm::CLIENT_ID_RSA_ENCRYPT_ERROR:
|
|
err = Status::CRYPTO_LIBRARY_ERROR;
|
|
break;
|
|
case wvcdm::PROVISIONING_NOT_ALLOWED_FOR_ATSC:
|
|
err = Status::ERROR_DRM_CANNOT_HANDLE;
|
|
break;
|
|
case wvcdm::CERT_PROVISIONING_REQUEST_ERROR_4:
|
|
case wvcdm::CLIENT_IDENTIFICATION_TOKEN_ERROR_1:
|
|
case wvcdm::CREATE_USAGE_ENTRY_UNKNOWN_ERROR:
|
|
case wvcdm::CREATE_USAGE_TABLE_ERROR:
|
|
case wvcdm::DEACTIVATE_USAGE_ENTRY_ERROR:
|
|
case wvcdm::EMPTY_LICENSE_RENEWAL:
|
|
case wvcdm::EXTRACT_SYSTEM_ID_FROM_OEM_CERT_ERROR:
|
|
case wvcdm::GENERATE_DERIVED_KEYS_ERROR:
|
|
case wvcdm::GENERATE_DERIVED_KEYS_ERROR_2:
|
|
case wvcdm::GENERATE_SIGNATURE_ERROR:
|
|
case wvcdm::GENERATE_USAGE_REPORT_ERROR:
|
|
case wvcdm::GET_DECRYPT_HASH_ERROR:
|
|
case wvcdm::GET_DEVICE_ID_ERROR:
|
|
case wvcdm::GET_HDCP_CAPABILITY_FAILED:
|
|
case wvcdm::GET_MAX_NUMBER_OF_OPEN_SESSIONS_ERROR:
|
|
case wvcdm::GET_NUMBER_OF_OPEN_SESSIONS_ERROR:
|
|
case wvcdm::GET_PROVISIONING_METHOD_ERROR:
|
|
case wvcdm::GET_SIGNATURE_HASH_ALGORITHM_ERROR_1:
|
|
case wvcdm::GET_SIGNATURE_HASH_ALGORITHM_ERROR_2:
|
|
case wvcdm::GET_SIGNATURE_HASH_ALGORITHM_ERROR_3:
|
|
case wvcdm::GET_SRM_VERSION_ERROR:
|
|
case wvcdm::GET_TOKEN_FROM_KEYBOX_ERROR:
|
|
case wvcdm::GET_TOKEN_FROM_OEM_CERT_ERROR:
|
|
case wvcdm::INVALID_DECRYPT_HASH_FORMAT:
|
|
case wvcdm::INVALID_SESSION_1:
|
|
case wvcdm::INVALID_SESSION_2:
|
|
case wvcdm::KEYBOX_TOKEN_TOO_SHORT:
|
|
case wvcdm::LOAD_USAGE_ENTRY_UNKNOWN_ERROR:
|
|
case wvcdm::LOAD_USAGE_HEADER_UNKNOWN_ERROR:
|
|
case wvcdm::MOVE_USAGE_ENTRY_UNKNOWN_ERROR:
|
|
case wvcdm::OPEN_CRYPTO_SESSION_ERROR:
|
|
case wvcdm::RANDOM_GENERATION_ERROR:
|
|
case wvcdm::SET_DECRYPT_HASH_ERROR:
|
|
case wvcdm::SHRINK_USAGE_TABLE_HEADER_UNKNOWN_ERROR:
|
|
case wvcdm::UNKNOWN_CLIENT_TOKEN_TYPE:
|
|
case wvcdm::UNKNOWN_SELECT_KEY_ERROR_1:
|
|
case wvcdm::UNKNOWN_SELECT_KEY_ERROR_2:
|
|
case wvcdm::UPDATE_USAGE_ENTRY_UNKNOWN_ERROR:
|
|
case wvcdm::USAGE_SUPPORT_GET_API_FAILED:
|
|
err = Status::GENERAL_OEM_ERROR;
|
|
break;
|
|
case wvcdm::CANNOT_DECRYPT_ZERO_SAMPLES:
|
|
case wvcdm::CERT_PROVISIONING_REQUEST_ERROR_1:
|
|
case wvcdm::CRYPTO_SESSION_NOT_INITIALIZED:
|
|
case wvcdm::CRYPTO_SESSION_NOT_OPEN:
|
|
case wvcdm::DEVICE_CANNOT_REPROVISION:
|
|
case wvcdm::DEVICE_CERTIFICATE_ERROR_1:
|
|
case wvcdm::DUPLICATE_SESSION_ID_SPECIFIED:
|
|
case wvcdm::EMPTY_KEYSET_ID_ENG_5:
|
|
case wvcdm::EMPTY_RESPONSE_ERROR_1:
|
|
case wvcdm::EMPTY_SESSION_ID:
|
|
case wvcdm::INCORRECT_USAGE_SUPPORT_TYPE_1:
|
|
case wvcdm::INCORRECT_USAGE_SUPPORT_TYPE_2:
|
|
case wvcdm::INVALID_IV_SIZE:
|
|
case wvcdm::INVALID_KEY_SYSTEM:
|
|
case wvcdm::INVALID_PARAMETERS_ENG_22:
|
|
case wvcdm::INVALID_PARAMETERS_ENG_23:
|
|
case wvcdm::INVALID_PARAMETERS_ENG_24:
|
|
case wvcdm::INVALID_PARAMETERS_LIC_1:
|
|
case wvcdm::INVALID_PARAMETERS_LIC_2:
|
|
case wvcdm::INVALID_PARAMETERS_LIC_6:
|
|
case wvcdm::INVALID_PARAMETERS_LIC_7:
|
|
case wvcdm::INVALID_PROVISIONING_PARAMETERS_1:
|
|
case wvcdm::INVALID_PROVISIONING_PARAMETERS_2:
|
|
case wvcdm::INVALID_PROVISIONING_REQUEST_PARAM_1:
|
|
case wvcdm::INVALID_PROVISIONING_REQUEST_PARAM_2:
|
|
case wvcdm::INVALID_SESSION_ID:
|
|
case wvcdm::KEYSET_ID_NOT_FOUND_1:
|
|
case wvcdm::KEYSET_ID_NOT_FOUND_2:
|
|
case wvcdm::KEYSET_ID_NOT_FOUND_3:
|
|
case wvcdm::KEY_CONFLICT_1:
|
|
case wvcdm::KEY_NOT_FOUND_2:
|
|
case wvcdm::KEY_REQUEST_ERROR_1:
|
|
case wvcdm::LICENSE_PARSER_NOT_INITIALIZED_1:
|
|
case wvcdm::LICENSE_PARSER_NOT_INITIALIZED_2:
|
|
case wvcdm::LICENSE_PARSER_NOT_INITIALIZED_3:
|
|
case wvcdm::LICENSE_PARSER_NOT_INITIALIZED_4:
|
|
case wvcdm::LICENSE_REQUEST_SERVICE_CERTIFICATE_GENERATION_ERROR:
|
|
case wvcdm::LICENSE_USAGE_ENTRY_MISSING:
|
|
case wvcdm::LOAD_ENTITLED_CONTENT_KEYS_ERROR:
|
|
case wvcdm::LOAD_USAGE_ENTRY_GENERATION_SKEW:
|
|
case wvcdm::LOAD_USAGE_ENTRY_INVALID_SESSION:
|
|
case wvcdm::LOAD_USAGE_ENTRY_SIGNATURE_FAILURE:
|
|
case wvcdm::LOAD_USAGE_HEADER_BAD_MAGIC:
|
|
case wvcdm::LOAD_USAGE_HEADER_GENERATION_SKEW:
|
|
case wvcdm::LOAD_USAGE_HEADER_SIGNATURE_FAILURE:
|
|
case wvcdm::LOAD_USAGE_INFO_MISSING:
|
|
case wvcdm::MOVE_USAGE_ENTRY_DESTINATION_IN_USE:
|
|
case wvcdm::NOT_IMPLEMENTED_ERROR:
|
|
case wvcdm::NOT_INITIALIZED_ERROR:
|
|
case wvcdm::NO_SRM_VERSION:
|
|
case wvcdm::NO_USAGE_ENTRIES:
|
|
case wvcdm::PARAMETER_NULL:
|
|
case wvcdm::PREPARE_CENC_CONTENT_ID_FAILED:
|
|
case wvcdm::PREPARE_WEBM_CONTENT_ID_FAILED:
|
|
case wvcdm::REINIT_ERROR:
|
|
case wvcdm::REMOVE_OFFLINE_LICENSE_ERROR_2:
|
|
case wvcdm::REMOVE_USAGE_INFO_ERROR_3:
|
|
case wvcdm::SESSION_NOT_FOUND_11:
|
|
case wvcdm::SESSION_NOT_FOUND_12:
|
|
case wvcdm::SESSION_NOT_FOUND_13:
|
|
case wvcdm::SESSION_NOT_FOUND_14:
|
|
case wvcdm::SESSION_NOT_FOUND_15:
|
|
case wvcdm::SESSION_NOT_FOUND_16:
|
|
case wvcdm::SESSION_NOT_FOUND_24:
|
|
case wvcdm::SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE:
|
|
case wvcdm::STORAGE_PROHIBITED:
|
|
case wvcdm::STORE_LICENSE_ERROR_2:
|
|
case wvcdm::UNSUPPORTED_SIGNATURE_HASH_ALGORITHM_1:
|
|
case wvcdm::UNSUPPORTED_SIGNATURE_HASH_ALGORITHM_2:
|
|
case wvcdm::UNSUPPORTED_SIGNATURE_HASH_ALGORITHM_3:
|
|
case wvcdm::UNSUPPORTED_SIGNATURE_HASH_ALGORITHM_4:
|
|
case wvcdm::USAGE_ENTRY_NUMBER_MISMATCH:
|
|
case wvcdm::USAGE_GET_ENTRY_RETRIEVE_INVALID_STORAGE_TYPE:
|
|
case wvcdm::USAGE_INFORMATION_SUPPORT_FAILED:
|
|
case wvcdm::USAGE_INVALID_LOAD_ENTRY:
|
|
case wvcdm::USAGE_INVALID_NEW_ENTRY:
|
|
case wvcdm::USAGE_INVALID_PARAMETERS_1:
|
|
case wvcdm::USAGE_INVALID_PARAMETERS_2:
|
|
case wvcdm::USAGE_STORE_ENTRY_RETRIEVE_INVALID_STORAGE_TYPE:
|
|
case wvcdm::CLIENT_TOKEN_NOT_SET:
|
|
// Stale responses should have been caught by the CDM engine.
|
|
case wvcdm::PROVISIONING_4_STALE_RESPONSE:
|
|
err = Status::GENERAL_PLUGIN_ERROR;
|
|
break;
|
|
case wvcdm::CLIENT_ID_GENERATE_RANDOM_ERROR:
|
|
err = Status::ERROR_DRM_RESOURCE_CONTENTION;
|
|
break;
|
|
case wvcdm::CENC_INIT_DATA_UNAVAILABLE:
|
|
case wvcdm::INIT_DATA_NOT_FOUND:
|
|
case wvcdm::INVALID_PARAMETERS_LIC_3:
|
|
case wvcdm::INVALID_PARAMETERS_LIC_4:
|
|
case wvcdm::UNSUPPORTED_INIT_DATA:
|
|
case wvcdm::UNSUPPORTED_INIT_DATA_FORMAT:
|
|
case wvcdm::WEBM_INIT_DATA_UNAVAILABLE:
|
|
err = Status::INIT_DATA_INVALID;
|
|
break;
|
|
case wvcdm::EMPTY_KEYSET_ID:
|
|
case wvcdm::EMPTY_KEYSET_ID_ENG_1:
|
|
case wvcdm::EMPTY_KEYSET_ID_ENG_2:
|
|
case wvcdm::EMPTY_KEYSET_ID_ENG_3:
|
|
case wvcdm::EMPTY_KEYSET_ID_ENG_4:
|
|
case wvcdm::EMPTY_LICENSE_RESPONSE_1:
|
|
case wvcdm::EMPTY_LICENSE_RESPONSE_2:
|
|
case wvcdm::EMPTY_PROVISIONING_RESPONSE:
|
|
case wvcdm::INVALID_PARAMETERS_ENG_13:
|
|
case wvcdm::INVALID_PARAMETERS_ENG_14:
|
|
case wvcdm::INVALID_PARAMETERS_ENG_15:
|
|
case wvcdm::INVALID_PARAMETERS_ENG_16:
|
|
case wvcdm::INVALID_QUERY_KEY:
|
|
case wvcdm::KEY_NOT_FOUND_1:
|
|
case wvcdm::SAMPLE_AND_SUBSAMPLE_SIZE_MISMATCH:
|
|
// Client provided a provisioning response without
|
|
// generating a provisioning request.
|
|
case wvcdm::PROVISIONING_UNEXPECTED_RESPONSE_ERROR:
|
|
err = Status::BAD_VALUE;
|
|
break;
|
|
case wvcdm::KEY_NOT_FOUND_3:
|
|
case wvcdm::KEY_NOT_FOUND_4:
|
|
case wvcdm::KEY_NOT_FOUND_5:
|
|
case wvcdm::KEY_NOT_FOUND_6:
|
|
err = Status::KEY_NOT_LOADED;
|
|
break;
|
|
case wvcdm::ADD_KEY_ERROR:
|
|
case wvcdm::CORE_MESSAGE_NOT_FOUND:
|
|
case wvcdm::EMPTY_KEY_DATA_1:
|
|
case wvcdm::EMPTY_KEY_DATA_2:
|
|
case wvcdm::INVALID_LICENSE_RESPONSE:
|
|
case wvcdm::INVALID_LICENSE_TYPE:
|
|
case wvcdm::INVALID_SRM_LIST:
|
|
case wvcdm::KEY_SIZE_ERROR_1:
|
|
case wvcdm::KEY_SIZE_ERROR_2:
|
|
case wvcdm::LICENSE_ID_NOT_FOUND:
|
|
case wvcdm::LICENSE_RESPONSE_NOT_SIGNED:
|
|
case wvcdm::LICENSE_RESPONSE_PARSE_ERROR_1:
|
|
case wvcdm::LICENSE_RESPONSE_PARSE_ERROR_2:
|
|
case wvcdm::LICENSE_RESPONSE_PARSE_ERROR_3:
|
|
case wvcdm::LICENSE_RESPONSE_PARSE_ERROR_4:
|
|
case wvcdm::LICENSE_RESPONSE_PARSE_ERROR_5:
|
|
case wvcdm::LOAD_KEY_ERROR:
|
|
case wvcdm::LOAD_LICENSE_ERROR:
|
|
case wvcdm::LOAD_RENEWAL_ERROR:
|
|
case wvcdm::LOAD_SRM_ERROR:
|
|
case wvcdm::NOT_AN_ENTITLEMENT_SESSION:
|
|
case wvcdm::NO_CONTENT_KEY:
|
|
case wvcdm::NO_CONTENT_KEY_2:
|
|
case wvcdm::NO_DEVICE_KEY_1:
|
|
case wvcdm::REFRESH_KEYS_ERROR:
|
|
case wvcdm::SESSION_KEYS_NOT_FOUND:
|
|
case wvcdm::SIGNATURE_NOT_FOUND:
|
|
err = Status::LICENSE_PARSE_ERROR;
|
|
break;
|
|
case wvcdm::LICENSE_RENEWAL_PROHIBITED:
|
|
case wvcdm::OFFLINE_LICENSE_PROHIBITED:
|
|
err = Status::LICENSE_POLICY_ERROR;
|
|
break;
|
|
case wvcdm::PARSE_REQUEST_ERROR_2:
|
|
case wvcdm::RELEASE_LICENSE_ERROR_1:
|
|
case wvcdm::SESSION_KEYS_NOT_FOUND_2:
|
|
err = Status::LICENSE_RELEASE_ERROR;
|
|
break;
|
|
case wvcdm::KEY_ERROR:
|
|
case wvcdm::RELEASE_KEY_ERROR:
|
|
case wvcdm::RENEW_KEY_ERROR_1:
|
|
err = Status::LICENSE_REQUEST_REJECTED;
|
|
break;
|
|
case wvcdm::EMPTY_LICENSE_REQUEST_2:
|
|
case wvcdm::EMPTY_LICENSE_REQUEST_3:
|
|
case wvcdm::EMPTY_LICENSE_RESPONSE_3:
|
|
case wvcdm::EMPTY_LICENSE_RESPONSE_4:
|
|
case wvcdm::INVALID_LICENSE_REQUEST_TYPE_1:
|
|
case wvcdm::INVALID_LICENSE_REQUEST_TYPE_2:
|
|
case wvcdm::INVALID_LICENSE_TYPE_2:
|
|
case wvcdm::PARSE_REQUEST_ERROR_1:
|
|
case wvcdm::RESTORE_OFFLINE_LICENSE_ERROR_2:
|
|
case wvcdm::SIGNATURE_NOT_FOUND_2:
|
|
err = Status::LICENSE_RESTORE_ERROR;
|
|
break;
|
|
case wvcdm::GET_RELEASED_LICENSE_ERROR:
|
|
case wvcdm::RESTORE_OFFLINE_LICENSE_ERROR_3:
|
|
case wvcdm::USAGE_ENTRY_ALREADY_LOADED:
|
|
err = Status::LICENSE_STATE_ERROR;
|
|
break;
|
|
case wvcdm::DEVICE_CERTIFICATE_ERROR_2:
|
|
case wvcdm::DEVICE_CERTIFICATE_ERROR_3:
|
|
case wvcdm::DEVICE_CERTIFICATE_ERROR_4:
|
|
case wvcdm::LICENSE_PARSER_INIT_ERROR:
|
|
case wvcdm::PARSE_RESPONSE_ERROR_1:
|
|
case wvcdm::PARSE_RESPONSE_ERROR_2:
|
|
case wvcdm::PARSE_RESPONSE_ERROR_3:
|
|
case wvcdm::PARSE_RESPONSE_ERROR_4:
|
|
err = Status::MALFORMED_CERTIFICATE;
|
|
break;
|
|
case wvcdm::INVALID_DECRYPT_PARAMETERS_ENG_2:
|
|
case wvcdm::INVALID_DECRYPT_PARAMETERS_ENG_4:
|
|
err = Status::MEDIA_FRAMEWORK_ERROR;
|
|
break;
|
|
case wvcdm::PRIVACY_MODE_ERROR_1:
|
|
case wvcdm::PRIVACY_MODE_ERROR_2:
|
|
case wvcdm::PRIVACY_MODE_ERROR_3:
|
|
err = Status::MISSING_CERTIFICATE;
|
|
break;
|
|
case wvcdm::LOAD_DRM_PRIVATE_KEY_ERROR:
|
|
err = Status::PROVISIONING_CERTIFICATE_ERROR;
|
|
break;
|
|
case wvcdm::CERT_PROVISIONING_EMPTY_SERVICE_CERTIFICATE:
|
|
case wvcdm::SERVICE_CERTIFICATE_PROVIDER_ID_EMPTY:
|
|
err = Status::PROVISIONING_CONFIGURATION_ERROR;
|
|
break;
|
|
case wvcdm::CERT_PROVISIONING_INVALID_CERT_TYPE:
|
|
case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_1:
|
|
case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_2:
|
|
case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_3:
|
|
case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_4:
|
|
case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_9:
|
|
case wvcdm::LOAD_PROVISIONING_ERROR:
|
|
// Failure to verify provisioning cert key is always
|
|
// due to a malformed response.
|
|
case wvcdm::PROVISIONING_4_FAILED_TO_VERIFY_CERT_KEY:
|
|
err = Status::PROVISIONING_PARSE_ERROR;
|
|
break;
|
|
case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_10:
|
|
err = Status::PROVISIONING_REQUEST_REJECTED;
|
|
break;
|
|
case wvcdm::EMPTY_PROVISIONING_CERTIFICATE_1:
|
|
case wvcdm::EMPTY_PROVISIONING_CERTIFICATE_2:
|
|
err = Status::RETRYABLE_PROVISIONING_ERROR;
|
|
break;
|
|
case wvcdm::RELEASE_LICENSE_ERROR_2:
|
|
err = Status::SECURE_STOP_RELEASE_ERROR;
|
|
break;
|
|
case wvcdm::GET_LICENSE_ERROR:
|
|
case wvcdm::GET_OFFLINE_LICENSE_STATE_ERROR_1:
|
|
case wvcdm::GET_OFFLINE_LICENSE_STATE_ERROR_2:
|
|
case wvcdm::GET_USAGE_INFO_ERROR_1:
|
|
case wvcdm::GET_USAGE_INFO_ERROR_2:
|
|
case wvcdm::GET_USAGE_INFO_ERROR_3:
|
|
case wvcdm::GET_USAGE_INFO_ERROR_4:
|
|
case wvcdm::LIST_LICENSE_ERROR_1:
|
|
case wvcdm::LIST_LICENSE_ERROR_2:
|
|
case wvcdm::LIST_USAGE_ERROR_1:
|
|
case wvcdm::LIST_USAGE_ERROR_2:
|
|
case wvcdm::LOAD_USAGE_INFO_FILE_ERROR:
|
|
case wvcdm::REMOVE_OFFLINE_LICENSE_ERROR_1:
|
|
case wvcdm::REMOVE_USAGE_INFO_ERROR_2:
|
|
case wvcdm::SESSION_FILE_HANDLE_INIT_ERROR:
|
|
case wvcdm::UNPROVISION_ERROR_1:
|
|
case wvcdm::USAGE_GET_ENTRY_RETRIEVE_LICENSE_FAILED:
|
|
case wvcdm::USAGE_GET_ENTRY_RETRIEVE_USAGE_INFO_FAILED:
|
|
case wvcdm::USAGE_INFO_NOT_FOUND:
|
|
case wvcdm::USAGE_STORE_ENTRY_RETRIEVE_LICENSE_FAILED:
|
|
case wvcdm::USAGE_STORE_ENTRY_RETRIEVE_USAGE_INFO_FAILED:
|
|
err = Status::STORAGE_READ_FAILURE;
|
|
break;
|
|
case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_7:
|
|
case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_8:
|
|
case wvcdm::DELETE_USAGE_ERROR_1:
|
|
case wvcdm::DELETE_USAGE_ERROR_2:
|
|
case wvcdm::RELEASE_KEY_REQUEST_ERROR:
|
|
case wvcdm::REMOVE_ALL_USAGE_INFO_ERROR_5:
|
|
case wvcdm::REMOVE_USAGE_INFO_ERROR_1:
|
|
case wvcdm::RENEW_KEY_ERROR_2:
|
|
case wvcdm::STORE_LICENSE_ERROR_1:
|
|
case wvcdm::STORE_USAGE_INFO_ERROR:
|
|
case wvcdm::UNPROVISION_ERROR_2:
|
|
case wvcdm::UNPROVISION_ERROR_3:
|
|
case wvcdm::USAGE_STORE_LICENSE_FAILED:
|
|
case wvcdm::USAGE_STORE_USAGE_INFO_FAILED:
|
|
case wvcdm::STORE_ATSC_LICENSE_DEVICE_FILES_INIT_ERROR:
|
|
case wvcdm::STORE_ATSC_LICENSE_ERROR:
|
|
err = Status::STORAGE_WRITE_FAILURE;
|
|
break;
|
|
default:
|
|
err = Status::ERROR_DRM_UNKNOWN;
|
|
}
|
|
return WvStatus(err, res);
|
|
}
|
|
|
|
static inline WvStatus mapCdmResponseType(wvcdm::CdmResponseEnum res) {
|
|
return mapCdmResponseType(wvcdm::CdmResponseType(res));
|
|
}
|
|
|
|
static inline bool isCdmResponseTypeSuccess(wvcdm::CdmResponseType res) {
|
|
return mapCdmResponseType(res) == Status::OK;
|
|
}
|
|
|
|
} // namespace wvdrm
|
|
|
|
#endif // WV_MAP_ERRORS_INL_H_
|