def test_case_for_key_generation(key_type: str, bits: int, dependencies: List[str], *args: str, result: str = '') -> test_case.TestCase: """Return one test case exercising a key generation. """ hack_dependencies_not_implemented(dependencies) tc = test_case.TestCase() short_key_type = re.sub(r'PSA_(KEY_TYPE|ECC_FAMILY)_', r'', key_type) tc.set_description('PSA {} {}-bit'.format(short_key_type, bits)) tc.set_dependencies(dependencies) tc.set_function('generate_key') tc.set_arguments([key_type] + list(args) + [result]) return tc
def make_test_case(self, key: StorageTestData) -> test_case.TestCase: """Construct a storage format test case for the given key. If ``forward`` is true, generate a forward compatibility test case: create a key and validate that it has the expected representation. Otherwise generate a backward compatibility test case: inject the key representation into storage and validate that it can be read correctly. """ verb = 'save' if self.forward else 'read' tc = test_case.TestCase() tc.set_description('PSA storage {}: {}'.format(verb, key.description)) dependencies = automatic_dependencies( key.lifetime.string, key.type.string, key.expected_usage, key.alg.string, key.alg2.string, ) dependencies = finish_family_dependencies(dependencies, key.bits) tc.set_dependencies(dependencies) tc.set_function('key_storage_' + verb) if self.forward: extra_arguments = [] else: flags = [] # Some test keys have the RAW_DATA type and attributes that don't # necessarily make sense. We do this to validate numerical # encodings of the attributes. # Raw data keys have no useful exercise anyway so there is no # loss of test coverage. if key.type.string != 'PSA_KEY_TYPE_RAW_DATA': flags.append('TEST_FLAG_EXERCISE') if 'READ_ONLY' in key.lifetime.string: flags.append('TEST_FLAG_READ_ONLY') extra_arguments = [' | '.join(flags) if flags else '0'] tc.set_arguments([ key.lifetime.string, key.type.string, str(key.bits), key.expected_usage, key.alg.string, key.alg2.string, '"' + key.material.hex() + '"', '"' + key.hex() + '"', *extra_arguments ]) return tc
def test_case_for_key_type_not_supported( verb: str, key_type: str, bits: int, dependencies: List[str], *args: str, param_descr: str = '') -> test_case.TestCase: """Return one test case exercising a key creation method for an unsupported key type or size. """ hack_dependencies_not_implemented(dependencies) tc = test_case.TestCase() short_key_type = re.sub(r'PSA_(KEY_TYPE|ECC_FAMILY)_', r'', key_type) adverb = 'not' if dependencies else 'never' if param_descr: adverb = param_descr + ' ' + adverb tc.set_description('PSA {} {} {}-bit {} supported'.format( verb, short_key_type, bits, adverb)) tc.set_dependencies(dependencies) tc.set_function(verb + '_not_supported') tc.set_arguments([key_type] + list(args)) return tc