25794d8946
Test the following combinations: * 1024-bit key, SHA-256, salt=0 * 1024-bit key, SHA-256, salt=31 (1 byte shorter than standard) * 1024-bit key, SHA-256, salt=32 (standard length) * 1024-bit key, SHA-256, salt=94 (maximum possible length) * 1024-bit key, SHA-512, salt=61 (1 byte shorter than standard) * 1024-bit key, SHA-512, salt=62 (standard = maximum possible length) * 528-bit key, SHA-512, salt=0 (only possible length) Test psa_verify_hash() for both PSA_ALG_RSA_PSS and PSA_ALG_RSA_PSS_ANY_SALT with all of these combinations. For psa_verify_message(), just test once with the standard length and once with a different length. Note that as of this commit, both PSA_ALG_RSA_PSS and PSA_ALG_RSA_PSS_ANY_SALT accept any salt length during verification, hence all the new test cases are positive. The verify test cases were generated using the Python script below. ``` from Cryptodome import Hash from Cryptodome.Hash import SHA512 from Cryptodome import PublicKey from Cryptodome.PublicKey import RSA from Cryptodome.Signature import pss key = { 528: RSA.import_key(bytes.fromhex("30820145020100024300e31c246d46485984261fd174cab3d4357344602ecd793c47dbe54252d37bb350bc634359b19515542080e4724a4b672291be57c7648f51629eaef234e847d99cc65f0203010001024300b166322e09504a5c274b83592f5cf8ce2793a96de5a265abdbe060c641dbc65db0d11c782fe133a7e60aea686d21058d928cad3ef58924c4bb26b9206a03001d0241022200f85d72e463b406ffa282c34b5f0c2d6c2aacf210246af53d5bc7a0b7fa036e1cdb022200ea176c3d9a7fb355fb9fb7707e679b4acfb7bcb645b907e27cdf1764bc340971cd02212e13380342b3dd3083777abf7acc8988ad8a1406069b890f6efd63c57dae31394d022200c3602d3cf537e3cbbda93e072bd8f92965586aae8e5eb20ffc3c8e5fcb1c7b4d7902220098a04f18e48c689ad2f5b9bd404333def54cb2506cd0075c967a2968261e8b8f10")), 1024: RSA.import_key(bytes.fromhex("3082025e02010002818100af057d396ee84fb75fdbb5c2b13c7fe5a654aa8aa2470b541ee1feb0b12d25c79711531249e1129628042dbbb6c120d1443524ef4c0e6e1d8956eeb2077af12349ddeee54483bc06c2c61948cd02b202e796aebd94d3a7cbf859c2c1819c324cb82b9cd34ede263a2abffe4733f077869e8660f7d6834da53d690ef7985f6bc3020301000102818100874bf0ffc2f2a71d14671ddd0171c954d7fdbf50281e4f6d99ea0e1ebcf82faa58e7b595ffb293d1abe17f110b37c48cc0f36c37e84d876621d327f64bbe08457d3ec4098ba2fa0a319fba411c2841ed7be83196a8cdf9daa5d00694bc335fc4c32217fe0488bce9cb7202e59468b1ead119000477db2ca797fac19eda3f58c1024100e2ab760841bb9d30a81d222de1eb7381d82214407f1b975cbbfe4e1a9467fd98adbd78f607836ca5be1928b9d160d97fd45c12d6b52e2c9871a174c66b488113024100c5ab27602159ae7d6f20c3c2ee851e46dc112e689e28d5fcbbf990a99ef8a90b8bb44fd36467e7fc1789ceb663abda338652c3c73f111774902e840565927091024100b6cdbd354f7df579a63b48b3643e353b84898777b48b15f94e0bfc0567a6ae5911d57ad6409cf7647bf96264e9bd87eb95e263b7110b9a1f9f94acced0fafa4d024071195eec37e8d257decfc672b07ae639f10cbb9b0c739d0c809968d644a94e3fd6ed9287077a14583f379058f76a8aecd43c62dc8c0f41766650d725275ac4a1024100bb32d133edc2e048d463388b7be9cb4be29f4b6250be603e70e3647501c97ddde20a4e71be95fd5e71784e25aca4baf25be5738aae59bbfe1c997781447a2b24")), } hash_module = { 256: Hash.SHA256, 512: Hash.SHA512, } def print_test_case(remark, pub, kbits, hbits, input, output): key_hex = pub.hex() input_hex = input.hex() output_hex = output.hex() print(f"""\ PSA verify hash: RSA-{kbits} PSS SHA-{hbits}, {remark} depends_on:PSA_WANT_ALG_RSA_PSS:PSA_WANT_ALG_SHA_{hbits}:PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY:MBEDTLS_PK_PARSE_C:MBEDTLS_MD_C verify_hash:PSA_KEY_TYPE_RSA_PUBLIC_KEY:"{key_hex}":PSA_ALG_RSA_PSS(PSA_ALG_SHA_{hbits}):"{input_hex}":"{output_hex}" PSA verify hash: RSA-{kbits} PSS-any-salt SHA-{hbits}, {remark} depends_on:PSA_WANT_ALG_RSA_PSS:PSA_WANT_ALG_SHA_{hbits}:PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY:MBEDTLS_PK_PARSE_C:MBEDTLS_MD_C verify_hash:PSA_KEY_TYPE_RSA_PUBLIC_KEY:"{key_hex}":PSA_ALG_RSA_PSS_ANY_SALT(PSA_ALG_SHA_{hbits}):"{input_hex}":"{output_hex}" """) def rand(n): return bytes(x & 0xff for x in range(n)) def test_case(kbits, hbits, slen): priv = key[kbits] pub_spki = priv.publickey().export_key('DER') pub_raw = PublicKey._expand_subject_public_key_info(pub_spki)[1] hash_op = hash_module[hbits].new(b'abc') digest = hash_op.copy().digest() output = pss.new(priv, salt_bytes=slen, rand_func=rand).sign(hash_op) print_test_case(f"slen={slen}", pub_raw, kbits, hbits, digest, output) test_case(1024, 256, 0) test_case(1024, 256, 31) test_case(1024, 256, 32) test_case(1024, 256, 94) test_case(1024, 512, 61) test_case(1024, 512, 62) test_case(528, 512, 0) ``` Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com> |
||
---|---|---|
.. | ||
helpers.function | ||
host_test.function | ||
main_test.function | ||
target_test.function | ||
test_suite_aes.cbc.data | ||
test_suite_aes.cfb.data | ||
test_suite_aes.ecb.data | ||
test_suite_aes.function | ||
test_suite_aes.ofb.data | ||
test_suite_aes.rest.data | ||
test_suite_aes.xts.data | ||
test_suite_aria.data | ||
test_suite_aria.function | ||
test_suite_asn1parse.data | ||
test_suite_asn1parse.function | ||
test_suite_asn1write.data | ||
test_suite_asn1write.function | ||
test_suite_base64.data | ||
test_suite_base64.function | ||
test_suite_camellia.data | ||
test_suite_camellia.function | ||
test_suite_ccm.data | ||
test_suite_ccm.function | ||
test_suite_chacha20.data | ||
test_suite_chacha20.function | ||
test_suite_chachapoly.data | ||
test_suite_chachapoly.function | ||
test_suite_cipher.aes.data | ||
test_suite_cipher.aria.data | ||
test_suite_cipher.camellia.data | ||
test_suite_cipher.ccm.data | ||
test_suite_cipher.chacha20.data | ||
test_suite_cipher.chachapoly.data | ||
test_suite_cipher.des.data | ||
test_suite_cipher.function | ||
test_suite_cipher.gcm.data | ||
test_suite_cipher.misc.data | ||
test_suite_cipher.nist_kw.data | ||
test_suite_cipher.null.data | ||
test_suite_cipher.padding.data | ||
test_suite_cmac.data | ||
test_suite_cmac.function | ||
test_suite_ctr_drbg.data | ||
test_suite_ctr_drbg.function | ||
test_suite_debug.data | ||
test_suite_debug.function | ||
test_suite_des.data | ||
test_suite_des.function | ||
test_suite_dhm.data | ||
test_suite_dhm.function | ||
test_suite_ecdh.data | ||
test_suite_ecdh.function | ||
test_suite_ecdsa.data | ||
test_suite_ecdsa.function | ||
test_suite_ecjpake.data | ||
test_suite_ecjpake.function | ||
test_suite_ecp.data | ||
test_suite_ecp.function | ||
test_suite_entropy.data | ||
test_suite_entropy.function | ||
test_suite_error.data | ||
test_suite_error.function | ||
test_suite_gcm.aes128_de.data | ||
test_suite_gcm.aes128_en.data | ||
test_suite_gcm.aes192_de.data | ||
test_suite_gcm.aes192_en.data | ||
test_suite_gcm.aes256_de.data | ||
test_suite_gcm.aes256_en.data | ||
test_suite_gcm.camellia.data | ||
test_suite_gcm.function | ||
test_suite_gcm.misc.data | ||
test_suite_hkdf.data | ||
test_suite_hkdf.function | ||
test_suite_hmac_drbg.function | ||
test_suite_hmac_drbg.misc.data | ||
test_suite_hmac_drbg.no_reseed.data | ||
test_suite_hmac_drbg.nopr.data | ||
test_suite_hmac_drbg.pr.data | ||
test_suite_md.data | ||
test_suite_md.function | ||
test_suite_mdx.data | ||
test_suite_mdx.function | ||
test_suite_memory_buffer_alloc.data | ||
test_suite_memory_buffer_alloc.function | ||
test_suite_mpi.data | ||
test_suite_mpi.function | ||
test_suite_mps.data | ||
test_suite_mps.function | ||
test_suite_net.data | ||
test_suite_net.function | ||
test_suite_nist_kw.data | ||
test_suite_nist_kw.function | ||
test_suite_oid.data | ||
test_suite_oid.function | ||
test_suite_pem.data | ||
test_suite_pem.function | ||
test_suite_pk.data | ||
test_suite_pk.function | ||
test_suite_pkcs1_v15.data | ||
test_suite_pkcs1_v15.function | ||
test_suite_pkcs1_v21.data | ||
test_suite_pkcs1_v21.function | ||
test_suite_pkcs5.data | ||
test_suite_pkcs5.function | ||
test_suite_pkparse.data | ||
test_suite_pkparse.function | ||
test_suite_pkwrite.data | ||
test_suite_pkwrite.function | ||
test_suite_poly1305.data | ||
test_suite_poly1305.function | ||
test_suite_psa_crypto_attributes.data | ||
test_suite_psa_crypto_attributes.function | ||
test_suite_psa_crypto_driver_wrappers.data | ||
test_suite_psa_crypto_driver_wrappers.function | ||
test_suite_psa_crypto_entropy.data | ||
test_suite_psa_crypto_entropy.function | ||
test_suite_psa_crypto_hash.data | ||
test_suite_psa_crypto_hash.function | ||
test_suite_psa_crypto_init.data | ||
test_suite_psa_crypto_init.function | ||
test_suite_psa_crypto_metadata.data | ||
test_suite_psa_crypto_metadata.function | ||
test_suite_psa_crypto_not_supported.function | ||
test_suite_psa_crypto_not_supported.misc.data | ||
test_suite_psa_crypto_persistent_key.data | ||
test_suite_psa_crypto_persistent_key.function | ||
test_suite_psa_crypto_se_driver_hal_mocks.data | ||
test_suite_psa_crypto_se_driver_hal_mocks.function | ||
test_suite_psa_crypto_se_driver_hal.data | ||
test_suite_psa_crypto_se_driver_hal.function | ||
test_suite_psa_crypto_slot_management.data | ||
test_suite_psa_crypto_slot_management.function | ||
test_suite_psa_crypto_storage_format.function | ||
test_suite_psa_crypto_storage_format.misc.data | ||
test_suite_psa_crypto.data | ||
test_suite_psa_crypto.function | ||
test_suite_psa_its.data | ||
test_suite_psa_its.function | ||
test_suite_random.data | ||
test_suite_random.function | ||
test_suite_rsa.data | ||
test_suite_rsa.function | ||
test_suite_shax.data | ||
test_suite_shax.function | ||
test_suite_ssl.data | ||
test_suite_ssl.function | ||
test_suite_timing.data | ||
test_suite_timing.function | ||
test_suite_version.data | ||
test_suite_version.function | ||
test_suite_x509parse.data | ||
test_suite_x509parse.function | ||
test_suite_x509write.data | ||
test_suite_x509write.function |