diff --git a/programs/psa/psa_constant_names_generated.c b/programs/psa/psa_constant_names_generated.c index 6b0c0b27a..b12ef0ae3 100644 --- a/programs/psa/psa_constant_names_generated.c +++ b/programs/psa/psa_constant_names_generated.c @@ -150,20 +150,37 @@ static int psa_snprint_algorithm(char *buffer, size_t buffer_size, unsigned long length_modifier = NO_LENGTH_MODIFIER; if (PSA_ALG_IS_MAC(alg)) { core_alg = PSA_ALG_TRUNCATED_MAC(alg, 0); - if (core_alg != alg) { + if (alg & PSA_ALG_MAC_MINIMUM_LENGTH_FLAG) { append(&buffer, buffer_size, &required_size, - "PSA_ALG_TRUNCATED_MAC(", 22); + "PSA_ALG_AT_LEAST_THIS_LENGTH_MAC(", 33); length_modifier = PSA_MAC_TRUNCATED_LENGTH(alg); + } else { + if (core_alg != alg) { + append(&buffer, buffer_size, &required_size, + "PSA_ALG_TRUNCATED_MAC(", 22); + length_modifier = PSA_MAC_TRUNCATED_LENGTH(alg); + } } } else if (PSA_ALG_IS_AEAD(alg)) { core_alg = PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(alg); - if (core_alg == 0) { - /* For unknown AEAD algorithms, there is no "default tag length". */ - core_alg = alg; - } else if (core_alg != alg) { - append(&buffer, buffer_size, &required_size, - "PSA_ALG_AEAD_WITH_SHORTENED_TAG(", 32); - length_modifier = PSA_AEAD_TAG_LENGTH(alg); + if (alg & PSA_ALG_AEAD_MINIMUM_LENGTH_FLAG) { + if (core_alg == 0) { + /* For unknown AEAD algorithms, there is no "default tag length". */ + core_alg = alg; + } else { + append(&buffer, buffer_size, &required_size, + "PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG(", 43); + length_modifier = PSA_AEAD_TAG_LENGTH(alg); + } + } else { + if (core_alg == 0) { + /* For unknown AEAD algorithms, there is no "default tag length". */ + core_alg = alg; + } else if (core_alg != alg) { + append(&buffer, buffer_size, &required_size, + "PSA_ALG_AEAD_WITH_SHORTENED_TAG(", 32); + length_modifier = PSA_AEAD_TAG_LENGTH(alg); + } } } else if (PSA_ALG_IS_KEY_AGREEMENT(alg) && !PSA_ALG_IS_RAW_KEY_AGREEMENT(alg)) { diff --git a/scripts/generate_psa_constants.py b/scripts/generate_psa_constants.py index 01c5a32a1..ddcf6253a 100755 --- a/scripts/generate_psa_constants.py +++ b/scripts/generate_psa_constants.py @@ -100,20 +100,37 @@ static int psa_snprint_algorithm(char *buffer, size_t buffer_size, unsigned long length_modifier = NO_LENGTH_MODIFIER; if (PSA_ALG_IS_MAC(alg)) { core_alg = PSA_ALG_TRUNCATED_MAC(alg, 0); - if (core_alg != alg) { + if (alg & PSA_ALG_MAC_MINIMUM_LENGTH_FLAG) { append(&buffer, buffer_size, &required_size, - "PSA_ALG_TRUNCATED_MAC(", 22); + "PSA_ALG_AT_LEAST_THIS_LENGTH_MAC(", 33); length_modifier = PSA_MAC_TRUNCATED_LENGTH(alg); + } else { + if (core_alg != alg) { + append(&buffer, buffer_size, &required_size, + "PSA_ALG_TRUNCATED_MAC(", 22); + length_modifier = PSA_MAC_TRUNCATED_LENGTH(alg); + } } } else if (PSA_ALG_IS_AEAD(alg)) { core_alg = PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(alg); - if (core_alg == 0) { - /* For unknown AEAD algorithms, there is no "default tag length". */ - core_alg = alg; - } else if (core_alg != alg) { - append(&buffer, buffer_size, &required_size, - "PSA_ALG_AEAD_WITH_SHORTENED_TAG(", 32); - length_modifier = PSA_AEAD_TAG_LENGTH(alg); + if (alg & PSA_ALG_AEAD_MINIMUM_LENGTH_FLAG) { + if (core_alg == 0) { + /* For unknown AEAD algorithms, there is no "default tag length". */ + core_alg = alg; + } else { + append(&buffer, buffer_size, &required_size, + "PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG(", 43); + length_modifier = PSA_AEAD_TAG_LENGTH(alg); + } + } else { + if (core_alg == 0) { + /* For unknown AEAD algorithms, there is no "default tag length". */ + core_alg = alg; + } else if (core_alg != alg) { + append(&buffer, buffer_size, &required_size, + "PSA_ALG_AEAD_WITH_SHORTENED_TAG(", 32); + length_modifier = PSA_AEAD_TAG_LENGTH(alg); + } } } else if (PSA_ALG_IS_KEY_AGREEMENT(alg) && !PSA_ALG_IS_RAW_KEY_AGREEMENT(alg)) { diff --git a/tests/scripts/test_psa_constant_names.py b/tests/scripts/test_psa_constant_names.py index 537f9e94e..9e8d7f8f4 100755 --- a/tests/scripts/test_psa_constant_names.py +++ b/tests/scripts/test_psa_constant_names.py @@ -101,7 +101,7 @@ class Inputs: # PSA_ALG_IS_xxx macros, but are also not currently assigned and are # not likely to be assigned in the near future. self.hash_algorithms = set(['0x020000fe']) # 0x020000ff is PSA_ALG_ANY_HASH - self.mac_algorithms = set(['0x0300ffff']) + self.mac_algorithms = set(['0x03007fff']) self.ka_algorithms = set(['0x09fc0000']) self.kdf_algorithms = set(['0x080000ff']) # For AEAD algorithms, the only variability is over the tag length, @@ -146,6 +146,8 @@ class Inputs: self.arguments_for = { 'mac_length': ['1', '63'], 'tag_length': ['1', '63'], + 'min_mac_length': ['1', '63'], + 'min_tag_length': ['1', '63'], } def get_names(self, type_word):