Home | History | Annotate | Download | only in trunks
      1 //
      2 // Copyright (C) 2014 The Android Open Source Project
      3 //
      4 // Licensed under the Apache License, Version 2.0 (the "License");
      5 // you may not use this file except in compliance with the License.
      6 // You may obtain a copy of the License at
      7 //
      8 //      http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unless required by applicable law or agreed to in writing, software
     11 // distributed under the License is distributed on an "AS IS" BASIS,
     12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 // See the License for the specific language governing permissions and
     14 // limitations under the License.
     15 //
     16 
     17 #ifndef TRUNKS_ERROR_CODES_H_
     18 #define TRUNKS_ERROR_CODES_H_
     19 
     20 #include <string>
     21 
     22 #include "trunks/tpm_generated.h"  // For TPM_RC.
     23 #include "trunks/trunks_export.h"
     24 
     25 namespace trunks {
     26 
     27 // Use the TPM_RC type but with different layer bits (12 - 15). Choose the layer
     28 // value arbitrarily. Currently TSS2 uses 9 for TCTI and 8 for SAPI.
     29 // TCTI and SAPI error codes taken from
     30 // http://www.trustedcomputinggroup.org/resources/
     31 // tss_system_level_api_and_tpm_command_transmission_interface_specification
     32 const TPM_RC kTrunksErrorBase = (7 << 12);
     33 const TPM_RC kTctiErrorBase = (8 << 12);
     34 const TPM_RC kSapiErrorBase = (9 << 12);
     35 const TPM_RC kResourceManagerTpmErrorBase = (11 << 12);
     36 const TPM_RC kResourceManagerErrorBase = (12 << 12);
     37 
     38 const TPM_RC TRUNKS_RC_AUTHORIZATION_FAILED = kTrunksErrorBase + 1;
     39 const TPM_RC TRUNKS_RC_ENCRYPTION_FAILED = kTrunksErrorBase + 2;
     40 const TPM_RC TRUNKS_RC_READ_ERROR = kTrunksErrorBase + 3;
     41 const TPM_RC TRUNKS_RC_WRITE_ERROR = kTrunksErrorBase + 4;
     42 const TPM_RC TRUNKS_RC_IPC_ERROR = kTrunksErrorBase + 5;
     43 const TPM_RC TRUNKS_RC_SESSION_SETUP_ERROR = kTrunksErrorBase + 6;
     44 const TPM_RC TRUNKS_RC_INVALID_TPM_CONFIGURATION = kTrunksErrorBase + 7;
     45 
     46 const TPM_RC TCTI_RC_TRY_AGAIN = kTctiErrorBase + 1;
     47 const TPM_RC TCTI_RC_GENERAL_FAILURE = kTctiErrorBase + 2;
     48 const TPM_RC TCTI_RC_BAD_CONTEXT = kTctiErrorBase + 3;
     49 const TPM_RC TCTI_RC_WRONG_ABI_VERSION = kTctiErrorBase + 4;
     50 const TPM_RC TCTI_RC_NOT_IMPLEMENTED = kTctiErrorBase + 5;
     51 const TPM_RC TCTI_RC_BAD_PARAMETER = kTctiErrorBase + 6;
     52 const TPM_RC TCTI_RC_INSUFFICIENT_BUFFER = kTctiErrorBase + 7;
     53 const TPM_RC TCTI_RC_NO_CONNECTION = kTctiErrorBase + 8;
     54 const TPM_RC TCTI_RC_DRIVER_NOT_FOUND = kTctiErrorBase + 9;
     55 const TPM_RC TCTI_RC_DRIVERINFO_NOT_FOUND = kTctiErrorBase + 10;
     56 const TPM_RC TCTI_RC_NO_RESPONSE = kTctiErrorBase + 11;
     57 const TPM_RC TCTI_RC_BAD_VALUE = kTctiErrorBase + 12;
     58 
     59 const TPM_RC SAPI_RC_INVALID_SESSIONS = kSapiErrorBase + 1;
     60 const TPM_RC SAPI_RC_ABI_MISMATCH = kSapiErrorBase + 2;
     61 const TPM_RC SAPI_RC_INSUFFICIENT_BUFFER = kSapiErrorBase + 3;
     62 const TPM_RC SAPI_RC_BAD_PARAMETER = kSapiErrorBase + 4;
     63 const TPM_RC SAPI_RC_BAD_SEQUENCE = kSapiErrorBase + 5;
     64 const TPM_RC SAPI_RC_NO_DECRYPT_PARAM = kSapiErrorBase + 6;
     65 const TPM_RC SAPI_RC_NO_ENCRYPT_PARAM = kSapiErrorBase + 7;
     66 const TPM_RC SAPI_RC_NO_RESPONSE_RECEIVED = kSapiErrorBase + 8;
     67 const TPM_RC SAPI_RC_BAD_SIZE = kSapiErrorBase + 9;
     68 const TPM_RC SAPI_RC_CORRUPTED_DATA = kSapiErrorBase + 10;
     69 const TPM_RC SAPI_RC_INSUFFICIENT_CONTEXT = kSapiErrorBase + 11;
     70 const TPM_RC SAPI_RC_INSUFFICIENT_RESPONSE = kSapiErrorBase + 12;
     71 const TPM_RC SAPI_RC_INCOMPATIBLE_TCTI = kSapiErrorBase + 13;
     72 const TPM_RC SAPI_RC_MALFORMED_RESPONSE = kSapiErrorBase + 14;
     73 const TPM_RC SAPI_RC_BAD_TCTI_STRUCTURE = kSapiErrorBase + 15;
     74 
     75 // Returns a description of |error|.
     76 TRUNKS_EXPORT std::string GetErrorString(TPM_RC error);
     77 
     78 // Strips the P and N bits from a 'format one' error. If the given error code
     79 // is not a format one error, it is returned as is. The error that is returned
     80 // can be compared to TPM_RC_* constant values. See TPM 2.0 Part 2 Section 6.6
     81 // for details on format one errors.
     82 TRUNKS_EXPORT TPM_RC GetFormatOneError(TPM_RC error);
     83 
     84 // Creates a well-formed response with the given |error_code|.
     85 TRUNKS_EXPORT std::string CreateErrorResponse(TPM_RC error_code);
     86 
     87 }  // namespace trunks
     88 
     89 #endif  // TRUNKS_ERROR_CODES_H_
     90