mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-07-28 00:21:48 +03:00
Simplify key_for_usage_flags
Generate "with implication" and "without implication" usage test cases separately. The set of generated test cases is unchanged. The order, and the description of "with implication" test cases, changes. Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
@ -443,51 +443,41 @@ class StorageFormat:
|
|||||||
continue
|
continue
|
||||||
yield self.key_for_lifetime(lifetime)
|
yield self.key_for_lifetime(lifetime)
|
||||||
|
|
||||||
def keys_for_usage_flags(
|
def key_for_usage_flags(
|
||||||
self,
|
self,
|
||||||
usage_flags: List[str],
|
usage_flags: List[str],
|
||||||
short: Optional[str] = None,
|
short: Optional[str] = None,
|
||||||
test_implicit_usage: Optional[bool] = False
|
test_implicit_usage: Optional[bool] = True
|
||||||
) -> Iterator[StorageTestData]:
|
) -> StorageTestData:
|
||||||
"""Construct a test key for the given key usage."""
|
"""Construct a test key for the given key usage."""
|
||||||
usage = ' | '.join(usage_flags) if usage_flags else '0'
|
usage = ' | '.join(usage_flags) if usage_flags else '0'
|
||||||
if short is None:
|
if short is None:
|
||||||
short = re.sub(r'\bPSA_KEY_USAGE_', r'', usage)
|
short = re.sub(r'\bPSA_KEY_USAGE_', r'', usage)
|
||||||
extra_desc = ' with implication' if test_implicit_usage else ''
|
extra_desc = ' without implication' if test_implicit_usage else ''
|
||||||
description = 'usage' + extra_desc + ': ' + short
|
description = 'usage' + extra_desc + ': ' + short
|
||||||
key1 = StorageTestData(version=self.version,
|
key1 = StorageTestData(version=self.version,
|
||||||
id=1, lifetime=0x00000001,
|
id=1, lifetime=0x00000001,
|
||||||
type='PSA_KEY_TYPE_RAW_DATA', bits=8,
|
type='PSA_KEY_TYPE_RAW_DATA', bits=8,
|
||||||
expected_usage=usage,
|
expected_usage=usage,
|
||||||
|
without_implicit_usage=not test_implicit_usage,
|
||||||
usage=usage, alg=0, alg2=0,
|
usage=usage, alg=0, alg2=0,
|
||||||
material=b'K',
|
material=b'K',
|
||||||
description=description)
|
description=description)
|
||||||
yield key1
|
return key1
|
||||||
|
|
||||||
if test_implicit_usage:
|
|
||||||
description = 'usage without implication' + ': ' + short
|
|
||||||
key2 = StorageTestData(version=self.version,
|
|
||||||
id=1, lifetime=0x00000001,
|
|
||||||
type='PSA_KEY_TYPE_RAW_DATA', bits=8,
|
|
||||||
without_implicit_usage=True,
|
|
||||||
usage=usage, alg=0, alg2=0,
|
|
||||||
material=b'K',
|
|
||||||
description=description)
|
|
||||||
yield key2
|
|
||||||
|
|
||||||
def generate_keys_for_usage_flags(self, **kwargs) -> Iterator[StorageTestData]:
|
def generate_keys_for_usage_flags(self, **kwargs) -> Iterator[StorageTestData]:
|
||||||
"""Generate test keys covering usage flags."""
|
"""Generate test keys covering usage flags."""
|
||||||
known_flags = sorted(self.constructors.key_usage_flags)
|
known_flags = sorted(self.constructors.key_usage_flags)
|
||||||
yield from self.keys_for_usage_flags(['0'], **kwargs)
|
yield self.key_for_usage_flags(['0'], **kwargs)
|
||||||
for usage_flag in known_flags:
|
for usage_flag in known_flags:
|
||||||
yield from self.keys_for_usage_flags([usage_flag], **kwargs)
|
yield self.key_for_usage_flags([usage_flag], **kwargs)
|
||||||
for flag1, flag2 in zip(known_flags,
|
for flag1, flag2 in zip(known_flags,
|
||||||
known_flags[1:] + [known_flags[0]]):
|
known_flags[1:] + [known_flags[0]]):
|
||||||
yield from self.keys_for_usage_flags([flag1, flag2], **kwargs)
|
yield self.key_for_usage_flags([flag1, flag2], **kwargs)
|
||||||
|
|
||||||
def generate_key_for_all_usage_flags(self) -> Iterator[StorageTestData]:
|
def generate_key_for_all_usage_flags(self) -> Iterator[StorageTestData]:
|
||||||
known_flags = sorted(self.constructors.key_usage_flags)
|
known_flags = sorted(self.constructors.key_usage_flags)
|
||||||
yield from self.keys_for_usage_flags(known_flags, short='all known')
|
yield self.key_for_usage_flags(known_flags, short='all known')
|
||||||
|
|
||||||
def all_keys_for_usage_flags(self) -> Iterator[StorageTestData]:
|
def all_keys_for_usage_flags(self) -> Iterator[StorageTestData]:
|
||||||
yield from self.generate_keys_for_usage_flags()
|
yield from self.generate_keys_for_usage_flags()
|
||||||
@ -593,8 +583,8 @@ class StorageFormatV0(StorageFormat):
|
|||||||
|
|
||||||
def all_keys_for_usage_flags(self) -> Iterator[StorageTestData]:
|
def all_keys_for_usage_flags(self) -> Iterator[StorageTestData]:
|
||||||
"""Generate test keys covering usage flags."""
|
"""Generate test keys covering usage flags."""
|
||||||
yield from self.generate_keys_for_usage_flags(test_implicit_usage=True)
|
yield from super().all_keys_for_usage_flags()
|
||||||
yield from self.generate_key_for_all_usage_flags()
|
yield from self.generate_keys_for_usage_flags(test_implicit_usage=False)
|
||||||
|
|
||||||
def keys_for_implicit_usage(
|
def keys_for_implicit_usage(
|
||||||
self,
|
self,
|
||||||
|
Reference in New Issue
Block a user