Add recoverable errors

[ Merge of http://go/wvgerrit/71326 ]

Nonce flood, frame size, session and system invalidation errors
will now bubble up to the app. OEMCrypto v15 returns
OEMCrypto_ERROR_BUFFER_TOO_LARGE, OEMCrypto_ERROR_SESSION_LOST_STATE,
OEMCrypto_ERROR_SYSTEM_INVALIDATED and a variety of nonce errors.
These will be reported to HIDL as OUTPUT_TOO_LARGE_ERROR,
ERROR_DRM_SESSION_LOST_STATE, ERROR_DRM_INVALID_STATE and
ERROR_DRM_RESOURCE_CONTENTION.

Bug: 120572706
Test: Unit/Integration tests
Change-Id: Ida177300046327ce81592a273028ef6c3a0d9fd9
This commit is contained in:
Rahul Frias
2019-01-30 02:15:52 -08:00
parent 54104c7a22
commit 272e60db27
27 changed files with 977 additions and 648 deletions

View File

@@ -46,9 +46,6 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) {
case CERT_PROVISIONING_GET_KEYBOX_ERROR_1:
*os << "CERT_PROVISIONING_GET_KEYBOX_ERROR_1";
break;
case CERT_PROVISIONING_GET_KEYBOX_ERROR_2:
*os << "CERT_PROVISIONING_GET_KEYBOX_ERROR_2";
break;
case CERT_PROVISIONING_INVALID_CERT_TYPE:
*os << "CERT_PROVISIONING_INVALID_CERT_TYPE";
break;
@@ -58,9 +55,6 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) {
case CERT_PROVISIONING_NONCE_GENERATION_ERROR:
*os << "CERT_PROVISIONING_NONCE_GENERATION_ERROR";
break;
case CERT_PROVISIONING_REQUEST_ERROR_3:
*os << "CERT_PROVISIONING_REQUEST_ERROR_3";
break;
case CERT_PROVISIONING_REQUEST_ERROR_4:
*os << "CERT_PROVISIONING_REQUEST_ERROR_4";
break;
@@ -325,9 +319,6 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) {
case RENEW_KEY_ERROR_2:
*os << "RENEW_KEY_ERROR_2";
break;
case LICENSE_RENEWAL_SIGNING_ERROR:
*os << "LICENSE_RENEWAL_SIGNING_ERROR";
break;
case RESTORE_OFFLINE_LICENSE_ERROR_2:
*os << "RESTORE_OFFLINE_LICENSE_ERROR_2";
break;
@@ -451,9 +442,6 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) {
case LICENSE_REQUEST_NONCE_GENERATION_ERROR:
*os << "LICENSE_REQUEST_NONCE_GENERATION_ERROR";
break;
case LICENSE_REQUEST_SIGNING_ERROR:
*os << "LICENSE_REQUEST_SIGNING_ERROR";
break;
case EMPTY_LICENSE_REQUEST:
*os << "EMPTY_LICENSE_REQUEST";
break;
@@ -553,9 +541,6 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) {
case CLIENT_IDENTIFICATION_TOKEN_ERROR_1:
*os << "CLIENT_IDENTIFICATION_TOKEN_ERROR_1";
break;
case CLIENT_IDENTIFICATION_TOKEN_ERROR_2:
*os << "CLIENT_IDENTIFICATION_TOKEN_ERROR_2";
break;
case ANALOG_OUTPUT_ERROR:
*os << "ANALOG_OUTPUT_ERROR";
break;
@@ -834,12 +819,100 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) {
break;
case SESSION_KEYS_NOT_FOUND_2:
*os << "SESSION_KEYS_NOT_FOUND_2";
break;
case REMOVE_OFFLINE_LICENSE_ERROR_1:
*os << "REMOVE_OFFLINE_LICENSE_ERROR_1";
break;
case REMOVE_OFFLINE_LICENSE_ERROR_2:
*os << "REMOVE_OFFLINE_LICENSE_ERROR_2";
break;
case OUTPUT_TOO_LARGE_ERROR:
*os << "OUTPUT_TOO_LARGE_ERROR";
break;
case SESSION_LOST_STATE_ERROR:
*os << "SESSION_LOST_STATE_ERROR";
break;
case GENERATE_DERIVED_KEYS_ERROR_2:
*os << "GENERATE_DERIVED_KEYS_ERROR_2";
break;
case LOAD_DEVICE_RSA_KEY_ERROR:
*os << "LOAD_DEVICE_RSA_KEY_ERROR";
break;
case NONCE_GENERATION_ERROR:
*os << "NONCE_GENERATION_ERROR";
break;
case GENERATE_SIGNATURE_ERROR:
*os << "GENERATE_SIGNATURE_ERROR";
break;
case UNKNOWN_CLIENT_TOKEN_TYPE:
*os << "UNKNOWN_CLIENT_TOKEN_TYPE";
break;
case DEACTIVATE_USAGE_ENTRY_ERROR:
*os << "DEACTIVATE_USAGE_ENTRY_ERROR";
break;
case SYSTEM_INVALIDATED_ERROR:
*os << "SYSTEM_INVALIDATED_ERROR";
break;
case OPEN_CRYPTO_SESSION_ERROR:
*os << "OPEN_CRYPTO_SESSION_ERROR";
break;
case LOAD_SRM_ERROR:
*os << "LOAD_SRM_ERROR";
break;
case RANDOM_GENERATION_ERROR:
*os << "RANDOM_GENERATION_ERROR";
break;
case CRYPTO_SESSION_NOT_INITIALIZED:
*os << "CRYPTO_SESSION_NOT_INITIALIZED";
break;
case GET_DEVICE_ID_ERROR:
*os << "GET_DEVICE_ID_ERROR";
break;
case GET_TOKEN_FROM_OEM_CERT_ERROR:
*os << "GET_TOKEN_FROM_OEM_CERT_ERROR";
break;
case CRYPTO_SESSION_NOT_OPEN:
*os << "CRYPTO_SESSION_NOT_OPEN";
break;
case GET_TOKEN_FROM_KEYBOX_ERROR:
*os << "GET_TOKEN_FROM_KEYBOX_ERROR";
break;
case KEYBOX_TOKEN_TOO_SHORT:
*os << "KEYBOX_TOKEN_TOO_SHORT";
break;
case EXTRACT_SYSTEM_ID_FROM_OEM_CERT_ERROR:
*os << "EXTRACT_SYSTEM_ID_FROM_OEM_CERT_ERROR";
break;
case RSA_SIGNATURE_GENERATION_ERROR:
*os << "RSA_SIGNATURE_GENERATION_ERROR";
break;
case GET_HDCP_CAPABILITY_FAILED:
*os << "GET_HDCP_CAPABILITY_FAILED";
break;
case GET_NUMBER_OF_OPEN_SESSIONS_ERROR:
*os << "GET_NUMBER_OF_OPEN_SESSIONS_ERROR";
break;
case GET_MAX_NUMBER_OF_OPEN_SESSIONS_ERROR:
*os << "GET_MAX_NUMBER_OF_OPEN_SESSIONS_ERROR";
break;
case NOT_IMPLEMENTED_ERROR:
*os << "NOT_IMPLEMENTED_ERROR";
break;
case GET_SRM_VERSION_ERROR:
*os << "GET_SRM_VERSION_ERROR";
break;
case REWRAP_DEVICE_RSA_KEY_ERROR:
*os << "REWRAP_DEVICE_RSA_KEY_ERROR";
break;
case REWRAP_DEVICE_RSA_KEY_30_ERROR:
*os << "REWRAP_DEVICE_RSA_KEY_30_ERROR";
break;
case SERVICE_CERTIFICATE_PROVIDER_ID_EMPTY:
*os << "SERVICE_CERTIFICATE_PROVIDER_ID_EMPTY";
break;
case INVALID_SRM_LIST:
*os << "INVALID_SRM_LIST";
break;
default:
*os << "Unknown CdmResponseType";
break;