Home | History | Annotate | Download | only in generator
      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 """Provides selector information for TPM 2.0 unions.
     18 
     19 Describing this information explicitly is easier than extracting it from the
     20 specification.
     21 """
     22 
     23 _SELECTORS = {
     24     'TPMU_HA': {
     25         'type': ['TPMI_ALG_HASH'],
     26         'selectors': {
     27             'TPM_ALG_SHA1': 'sha1[SHA1_DIGEST_SIZE]',
     28             'TPM_ALG_SHA256': 'sha256[SHA256_DIGEST_SIZE]',
     29             'TPM_ALG_SM3_256': 'sm3_256[SM3_256_DIGEST_SIZE]',
     30             'TPM_ALG_SHA384': 'sha384[SHA384_DIGEST_SIZE]',
     31             'TPM_ALG_SHA512': 'sha512[SHA512_DIGEST_SIZE]',
     32             'TPM_ALG_NULL': ''
     33         }
     34     },
     35     'TPMU_CAPABILITIES': {
     36         'type': ['TPM_CAP'],
     37         'selectors': {
     38             'TPM_CAP_ALGS': 'algorithms',
     39             'TPM_CAP_HANDLES': 'handles',
     40             'TPM_CAP_COMMANDS': 'command',
     41             'TPM_CAP_PP_COMMANDS': 'ppCommands',
     42             'TPM_CAP_AUDIT_COMMANDS': 'auditCommands',
     43             'TPM_CAP_PCRS': 'assignedPCR',
     44             'TPM_CAP_TPM_PROPERTIES': 'tpmProperties',
     45             'TPM_CAP_PCR_PROPERTIES': 'pcrProperties',
     46             'TPM_CAP_ECC_CURVES': 'eccCurves',
     47         }
     48     },
     49     'TPMU_ATTEST': {
     50         'type': ['TPMI_ST_ATTEST'],
     51         'selectors': {
     52             'TPM_ST_ATTEST_CERTIFY': 'certify',
     53             'TPM_ST_ATTEST_CREATION': 'creation',
     54             'TPM_ST_ATTEST_QUOTE': 'quote',
     55             'TPM_ST_ATTEST_COMMAND_AUDIT': 'commandAudit',
     56             'TPM_ST_ATTEST_SESSION_AUDIT': 'sessionAudit',
     57             'TPM_ST_ATTEST_TIME': 'time',
     58             'TPM_ST_ATTEST_NV': 'nv',
     59         }
     60     },
     61     'TPMU_SYM_KEY_BITS': {
     62         'type': ['TPMI_ALG_SYM', 'TPMI_ALG_SYM_OBJECT'],
     63         'selectors': {
     64             'TPM_ALG_AES': 'aes',
     65             'TPM_ALG_SM4': 'SM4',
     66             'TPM_ALG_XOR': 'xor_',
     67             'TPM_ALG_NULL': '',
     68         }
     69     },
     70     'TPMU_SYM_MODE': {
     71         'type': ['TPMI_ALG_SYM', 'TPMI_ALG_SYM_OBJECT'],
     72         'selectors': {
     73             'TPM_ALG_AES': 'aes',
     74             'TPM_ALG_SM4': 'SM4',
     75             'TPM_ALG_XOR': '',
     76             'TPM_ALG_NULL': '',
     77         }
     78     },
     79     'TPMU_SYM_DETAILS': {
     80         'type': ['TPMI_ALG_SYM', 'TPMI_ALG_SYM_OBJECT'],
     81         'selectors': {}
     82     },
     83     'TPMU_SCHEME_KEYEDHASH': {
     84         'type': ['TPMI_ALG_KEYEDHASH_SCHEME'],
     85         'selectors': {
     86             'TPM_ALG_HMAC': 'hmac',
     87             'TPM_ALG_XOR': 'xor_',
     88             'TPM_ALG_NULL': '',
     89         }
     90     },
     91     'TPMU_SIG_SCHEME': {
     92         'type': ['TPMI_ALG_SIG_SCHEME', 'TPMI_ALG_ECC_SCHEME'],
     93         'selectors': {
     94             'TPM_ALG_RSASSA': 'rsassa',
     95             'TPM_ALG_RSAPSS': 'rsapss',
     96             'TPM_ALG_ECDSA': 'ecdsa',
     97             'TPM_ALG_SM2': 'sm2',
     98             'TPM_ALG_ECDAA': 'ecdaa',
     99             'TPM_ALG_ECSCHNORR': 'ecSchnorr',
    100             'TPM_ALG_HMAC': 'hmac',
    101             'TPM_ALG_NULL': '',
    102         }
    103     },
    104     'TPMU_KDF_SCHEME': {
    105         'type': ['TPMI_ALG_KDF'],
    106         'selectors': {
    107             'TPM_ALG_MGF1': 'mgf1',
    108             'TPM_ALG_KDF1_SP800_56a': 'kdf1_SP800_56a',
    109             'TPM_ALG_KDF2': 'kdf2',
    110             'TPM_ALG_KDF1_SP800_108': 'kdf1_sp800_108',
    111             'TPM_ALG_NULL': '',
    112         }
    113     },
    114     'TPMU_ASYM_SCHEME': {
    115         'type': ['TPMI_ALG_ASYM_SCHEME',
    116                  'TPMI_ALG_RSA_SCHEME',
    117                  'TPMI_ALG_RSA_DECRYPT',
    118                  'TPMI_ALG_ECC_SCHEME'],
    119         'selectors': {
    120             'TPM_ALG_RSASSA': 'rsassa',
    121             'TPM_ALG_RSAPSS': 'rsapss',
    122             'TPM_ALG_RSAES': '',
    123             'TPM_ALG_OAEP': 'oaep',
    124             'TPM_ALG_ECDSA': 'ecdsa',
    125             'TPM_ALG_SM2': 'sm2',
    126             'TPM_ALG_ECDAA': 'ecdaa',
    127             'TPM_ALG_ECSCHNORR': 'ecSchnorr',
    128             'TPM_ALG_ECDH': 'ecdh',
    129             'TPM_ALG_NULL': '',
    130         }
    131     },
    132     'TPMU_SIGNATURE': {
    133         'type': ['TPMI_ALG_SIG_SCHEME'],
    134         'selectors': {
    135             'TPM_ALG_RSASSA': 'rsassa',
    136             'TPM_ALG_RSAPSS': 'rsapss',
    137             'TPM_ALG_ECDSA': 'ecdsa',
    138             'TPM_ALG_SM2': 'sm2',
    139             'TPM_ALG_ECDAA': 'ecdaa',
    140             'TPM_ALG_ECSCHNORR': 'ecschnorr',
    141             'TPM_ALG_HMAC': 'hmac',
    142             'TPM_ALG_NULL': '',
    143         }
    144     },
    145     'TPMU_PUBLIC_PARMS': {
    146         'type': ['TPMI_ALG_PUBLIC'],
    147         'selectors': {
    148             'TPM_ALG_KEYEDHASH': 'keyedHashDetail',
    149             'TPM_ALG_SYMCIPHER': 'symDetail',
    150             'TPM_ALG_RSA': 'rsaDetail',
    151             'TPM_ALG_ECC': 'eccDetail',
    152         }
    153     },
    154     'TPMU_PUBLIC_ID': {
    155         'type': ['TPMI_ALG_PUBLIC'],
    156         'selectors': {
    157             'TPM_ALG_KEYEDHASH': 'keyedHash',
    158             'TPM_ALG_SYMCIPHER': 'sym',
    159             'TPM_ALG_RSA': 'rsa',
    160             'TPM_ALG_ECC': 'ecc',
    161         }
    162     },
    163     'TPMU_SENSITIVE_COMPOSITE': {
    164         'type': ['TPMI_ALG_PUBLIC'],
    165         'selectors': {
    166             'TPM_ALG_KEYEDHASH': 'bits',
    167             'TPM_ALG_SYMCIPHER': 'sym',
    168             'TPM_ALG_RSA': 'rsa',
    169             'TPM_ALG_ECC': 'ecc',
    170         }
    171     },
    172 }
    173 
    174 
    175 def GetUnionSelectorType(union_type):
    176   """Returns the selector type for a given union."""
    177   return _SELECTORS[union_type]['type'][0]
    178 
    179 
    180 def GetUnionSelectorTypes(union_type):
    181   """Returns a list of all acceptable selector types for a given union."""
    182   return _SELECTORS[union_type]['type']
    183 
    184 
    185 def GetUnionSelectorValues(union_type):
    186   """Returns the list of possible selector values for a given union."""
    187   return _SELECTORS[union_type]['selectors'].keys()
    188 
    189 
    190 def GetUnionSelectorField(union_type, selector_value):
    191   """Returns the union field associated with a given selector value."""
    192   return _SELECTORS[union_type]['selectors'][selector_value]
    193