1*62c56f98SSadaf Ebrahimi#!/usr/bin/env python3 2*62c56f98SSadaf Ebrahimi 3*62c56f98SSadaf Ebrahimi"""Analyze the test outcomes from a full CI run. 4*62c56f98SSadaf Ebrahimi 5*62c56f98SSadaf EbrahimiThis script can also run on outcomes from a partial run, but the results are 6*62c56f98SSadaf Ebrahimiless likely to be useful. 7*62c56f98SSadaf Ebrahimi""" 8*62c56f98SSadaf Ebrahimi 9*62c56f98SSadaf Ebrahimiimport argparse 10*62c56f98SSadaf Ebrahimiimport sys 11*62c56f98SSadaf Ebrahimiimport traceback 12*62c56f98SSadaf Ebrahimiimport re 13*62c56f98SSadaf Ebrahimiimport subprocess 14*62c56f98SSadaf Ebrahimiimport os 15*62c56f98SSadaf Ebrahimi 16*62c56f98SSadaf Ebrahimiimport check_test_cases 17*62c56f98SSadaf Ebrahimi 18*62c56f98SSadaf Ebrahimiclass Results: 19*62c56f98SSadaf Ebrahimi """Process analysis results.""" 20*62c56f98SSadaf Ebrahimi 21*62c56f98SSadaf Ebrahimi def __init__(self): 22*62c56f98SSadaf Ebrahimi self.error_count = 0 23*62c56f98SSadaf Ebrahimi self.warning_count = 0 24*62c56f98SSadaf Ebrahimi 25*62c56f98SSadaf Ebrahimi @staticmethod 26*62c56f98SSadaf Ebrahimi def log(fmt, *args, **kwargs): 27*62c56f98SSadaf Ebrahimi sys.stderr.write((fmt + '\n').format(*args, **kwargs)) 28*62c56f98SSadaf Ebrahimi 29*62c56f98SSadaf Ebrahimi def error(self, fmt, *args, **kwargs): 30*62c56f98SSadaf Ebrahimi self.log('Error: ' + fmt, *args, **kwargs) 31*62c56f98SSadaf Ebrahimi self.error_count += 1 32*62c56f98SSadaf Ebrahimi 33*62c56f98SSadaf Ebrahimi def warning(self, fmt, *args, **kwargs): 34*62c56f98SSadaf Ebrahimi self.log('Warning: ' + fmt, *args, **kwargs) 35*62c56f98SSadaf Ebrahimi self.warning_count += 1 36*62c56f98SSadaf Ebrahimi 37*62c56f98SSadaf Ebrahimiclass TestCaseOutcomes: 38*62c56f98SSadaf Ebrahimi """The outcomes of one test case across many configurations.""" 39*62c56f98SSadaf Ebrahimi # pylint: disable=too-few-public-methods 40*62c56f98SSadaf Ebrahimi 41*62c56f98SSadaf Ebrahimi def __init__(self): 42*62c56f98SSadaf Ebrahimi # Collect a list of witnesses of the test case succeeding or failing. 43*62c56f98SSadaf Ebrahimi # Currently we don't do anything with witnesses except count them. 44*62c56f98SSadaf Ebrahimi # The format of a witness is determined by the read_outcome_file 45*62c56f98SSadaf Ebrahimi # function; it's the platform and configuration joined by ';'. 46*62c56f98SSadaf Ebrahimi self.successes = [] 47*62c56f98SSadaf Ebrahimi self.failures = [] 48*62c56f98SSadaf Ebrahimi 49*62c56f98SSadaf Ebrahimi def hits(self): 50*62c56f98SSadaf Ebrahimi """Return the number of times a test case has been run. 51*62c56f98SSadaf Ebrahimi 52*62c56f98SSadaf Ebrahimi This includes passes and failures, but not skips. 53*62c56f98SSadaf Ebrahimi """ 54*62c56f98SSadaf Ebrahimi return len(self.successes) + len(self.failures) 55*62c56f98SSadaf Ebrahimi 56*62c56f98SSadaf Ebrahimidef execute_reference_driver_tests(ref_component, driver_component, outcome_file): 57*62c56f98SSadaf Ebrahimi """Run the tests specified in ref_component and driver_component. Results 58*62c56f98SSadaf Ebrahimi are stored in the output_file and they will be used for the following 59*62c56f98SSadaf Ebrahimi coverage analysis""" 60*62c56f98SSadaf Ebrahimi # If the outcome file already exists, we assume that the user wants to 61*62c56f98SSadaf Ebrahimi # perform the comparison analysis again without repeating the tests. 62*62c56f98SSadaf Ebrahimi if os.path.exists(outcome_file): 63*62c56f98SSadaf Ebrahimi Results.log("Outcome file (" + outcome_file + ") already exists. " + \ 64*62c56f98SSadaf Ebrahimi "Tests will be skipped.") 65*62c56f98SSadaf Ebrahimi return 66*62c56f98SSadaf Ebrahimi 67*62c56f98SSadaf Ebrahimi shell_command = "tests/scripts/all.sh --outcome-file " + outcome_file + \ 68*62c56f98SSadaf Ebrahimi " " + ref_component + " " + driver_component 69*62c56f98SSadaf Ebrahimi Results.log("Running: " + shell_command) 70*62c56f98SSadaf Ebrahimi ret_val = subprocess.run(shell_command.split(), check=False).returncode 71*62c56f98SSadaf Ebrahimi 72*62c56f98SSadaf Ebrahimi if ret_val != 0: 73*62c56f98SSadaf Ebrahimi Results.log("Error: failed to run reference/driver components") 74*62c56f98SSadaf Ebrahimi sys.exit(ret_val) 75*62c56f98SSadaf Ebrahimi 76*62c56f98SSadaf Ebrahimidef analyze_coverage(results, outcomes, allow_list, full_coverage): 77*62c56f98SSadaf Ebrahimi """Check that all available test cases are executed at least once.""" 78*62c56f98SSadaf Ebrahimi available = check_test_cases.collect_available_test_cases() 79*62c56f98SSadaf Ebrahimi for key in available: 80*62c56f98SSadaf Ebrahimi hits = outcomes[key].hits() if key in outcomes else 0 81*62c56f98SSadaf Ebrahimi if hits == 0 and key not in allow_list: 82*62c56f98SSadaf Ebrahimi if full_coverage: 83*62c56f98SSadaf Ebrahimi results.error('Test case not executed: {}', key) 84*62c56f98SSadaf Ebrahimi else: 85*62c56f98SSadaf Ebrahimi results.warning('Test case not executed: {}', key) 86*62c56f98SSadaf Ebrahimi elif hits != 0 and key in allow_list: 87*62c56f98SSadaf Ebrahimi # Test Case should be removed from the allow list. 88*62c56f98SSadaf Ebrahimi if full_coverage: 89*62c56f98SSadaf Ebrahimi results.error('Allow listed test case was executed: {}', key) 90*62c56f98SSadaf Ebrahimi else: 91*62c56f98SSadaf Ebrahimi results.warning('Allow listed test case was executed: {}', key) 92*62c56f98SSadaf Ebrahimi 93*62c56f98SSadaf Ebrahimidef analyze_driver_vs_reference(outcomes, component_ref, component_driver, 94*62c56f98SSadaf Ebrahimi ignored_suites, ignored_test=None): 95*62c56f98SSadaf Ebrahimi """Check that all tests executed in the reference component are also 96*62c56f98SSadaf Ebrahimi executed in the corresponding driver component. 97*62c56f98SSadaf Ebrahimi Skip: 98*62c56f98SSadaf Ebrahimi - full test suites provided in ignored_suites list 99*62c56f98SSadaf Ebrahimi - only some specific test inside a test suite, for which the corresponding 100*62c56f98SSadaf Ebrahimi output string is provided 101*62c56f98SSadaf Ebrahimi """ 102*62c56f98SSadaf Ebrahimi available = check_test_cases.collect_available_test_cases() 103*62c56f98SSadaf Ebrahimi result = True 104*62c56f98SSadaf Ebrahimi 105*62c56f98SSadaf Ebrahimi for key in available: 106*62c56f98SSadaf Ebrahimi # Continue if test was not executed by any component 107*62c56f98SSadaf Ebrahimi hits = outcomes[key].hits() if key in outcomes else 0 108*62c56f98SSadaf Ebrahimi if hits == 0: 109*62c56f98SSadaf Ebrahimi continue 110*62c56f98SSadaf Ebrahimi # Skip ignored test suites 111*62c56f98SSadaf Ebrahimi full_test_suite = key.split(';')[0] # retrieve full test suite name 112*62c56f98SSadaf Ebrahimi test_string = key.split(';')[1] # retrieve the text string of this test 113*62c56f98SSadaf Ebrahimi test_suite = full_test_suite.split('.')[0] # retrieve main part of test suite name 114*62c56f98SSadaf Ebrahimi if test_suite in ignored_suites or full_test_suite in ignored_suites: 115*62c56f98SSadaf Ebrahimi continue 116*62c56f98SSadaf Ebrahimi if ((full_test_suite in ignored_test) and 117*62c56f98SSadaf Ebrahimi (test_string in ignored_test[full_test_suite])): 118*62c56f98SSadaf Ebrahimi continue 119*62c56f98SSadaf Ebrahimi # Search for tests that run in reference component and not in driver component 120*62c56f98SSadaf Ebrahimi driver_test_passed = False 121*62c56f98SSadaf Ebrahimi reference_test_passed = False 122*62c56f98SSadaf Ebrahimi for entry in outcomes[key].successes: 123*62c56f98SSadaf Ebrahimi if component_driver in entry: 124*62c56f98SSadaf Ebrahimi driver_test_passed = True 125*62c56f98SSadaf Ebrahimi if component_ref in entry: 126*62c56f98SSadaf Ebrahimi reference_test_passed = True 127*62c56f98SSadaf Ebrahimi if(reference_test_passed and not driver_test_passed): 128*62c56f98SSadaf Ebrahimi Results.log(key) 129*62c56f98SSadaf Ebrahimi result = False 130*62c56f98SSadaf Ebrahimi return result 131*62c56f98SSadaf Ebrahimi 132*62c56f98SSadaf Ebrahimidef analyze_outcomes(outcomes, args): 133*62c56f98SSadaf Ebrahimi """Run all analyses on the given outcome collection.""" 134*62c56f98SSadaf Ebrahimi results = Results() 135*62c56f98SSadaf Ebrahimi analyze_coverage(results, outcomes, args['allow_list'], 136*62c56f98SSadaf Ebrahimi args['full_coverage']) 137*62c56f98SSadaf Ebrahimi return results 138*62c56f98SSadaf Ebrahimi 139*62c56f98SSadaf Ebrahimidef read_outcome_file(outcome_file): 140*62c56f98SSadaf Ebrahimi """Parse an outcome file and return an outcome collection. 141*62c56f98SSadaf Ebrahimi 142*62c56f98SSadaf EbrahimiAn outcome collection is a dictionary mapping keys to TestCaseOutcomes objects. 143*62c56f98SSadaf EbrahimiThe keys are the test suite name and the test case description, separated 144*62c56f98SSadaf Ebrahimiby a semicolon. 145*62c56f98SSadaf Ebrahimi""" 146*62c56f98SSadaf Ebrahimi outcomes = {} 147*62c56f98SSadaf Ebrahimi with open(outcome_file, 'r', encoding='utf-8') as input_file: 148*62c56f98SSadaf Ebrahimi for line in input_file: 149*62c56f98SSadaf Ebrahimi (platform, config, suite, case, result, _cause) = line.split(';') 150*62c56f98SSadaf Ebrahimi key = ';'.join([suite, case]) 151*62c56f98SSadaf Ebrahimi setup = ';'.join([platform, config]) 152*62c56f98SSadaf Ebrahimi if key not in outcomes: 153*62c56f98SSadaf Ebrahimi outcomes[key] = TestCaseOutcomes() 154*62c56f98SSadaf Ebrahimi if result == 'PASS': 155*62c56f98SSadaf Ebrahimi outcomes[key].successes.append(setup) 156*62c56f98SSadaf Ebrahimi elif result == 'FAIL': 157*62c56f98SSadaf Ebrahimi outcomes[key].failures.append(setup) 158*62c56f98SSadaf Ebrahimi return outcomes 159*62c56f98SSadaf Ebrahimi 160*62c56f98SSadaf Ebrahimidef do_analyze_coverage(outcome_file, args): 161*62c56f98SSadaf Ebrahimi """Perform coverage analysis.""" 162*62c56f98SSadaf Ebrahimi outcomes = read_outcome_file(outcome_file) 163*62c56f98SSadaf Ebrahimi Results.log("\n*** Analyze coverage ***\n") 164*62c56f98SSadaf Ebrahimi results = analyze_outcomes(outcomes, args) 165*62c56f98SSadaf Ebrahimi return results.error_count == 0 166*62c56f98SSadaf Ebrahimi 167*62c56f98SSadaf Ebrahimidef do_analyze_driver_vs_reference(outcome_file, args): 168*62c56f98SSadaf Ebrahimi """Perform driver vs reference analyze.""" 169*62c56f98SSadaf Ebrahimi execute_reference_driver_tests(args['component_ref'], \ 170*62c56f98SSadaf Ebrahimi args['component_driver'], outcome_file) 171*62c56f98SSadaf Ebrahimi 172*62c56f98SSadaf Ebrahimi ignored_suites = ['test_suite_' + x for x in args['ignored_suites']] 173*62c56f98SSadaf Ebrahimi 174*62c56f98SSadaf Ebrahimi outcomes = read_outcome_file(outcome_file) 175*62c56f98SSadaf Ebrahimi Results.log("\n*** Analyze driver {} vs reference {} ***\n".format( 176*62c56f98SSadaf Ebrahimi args['component_driver'], args['component_ref'])) 177*62c56f98SSadaf Ebrahimi return analyze_driver_vs_reference(outcomes, args['component_ref'], 178*62c56f98SSadaf Ebrahimi args['component_driver'], ignored_suites, 179*62c56f98SSadaf Ebrahimi args['ignored_tests']) 180*62c56f98SSadaf Ebrahimi 181*62c56f98SSadaf Ebrahimi# List of tasks with a function that can handle this task and additional arguments if required 182*62c56f98SSadaf EbrahimiTASKS = { 183*62c56f98SSadaf Ebrahimi 'analyze_coverage': { 184*62c56f98SSadaf Ebrahimi 'test_function': do_analyze_coverage, 185*62c56f98SSadaf Ebrahimi 'args': { 186*62c56f98SSadaf Ebrahimi 'allow_list': [ 187*62c56f98SSadaf Ebrahimi # Algorithm not supported yet 188*62c56f98SSadaf Ebrahimi 'test_suite_psa_crypto_metadata;Asymmetric signature: pure EdDSA', 189*62c56f98SSadaf Ebrahimi # Algorithm not supported yet 190*62c56f98SSadaf Ebrahimi 'test_suite_psa_crypto_metadata;Cipher: XTS', 191*62c56f98SSadaf Ebrahimi ], 192*62c56f98SSadaf Ebrahimi 'full_coverage': False, 193*62c56f98SSadaf Ebrahimi } 194*62c56f98SSadaf Ebrahimi }, 195*62c56f98SSadaf Ebrahimi # There are 2 options to use analyze_driver_vs_reference_xxx locally: 196*62c56f98SSadaf Ebrahimi # 1. Run tests and then analysis: 197*62c56f98SSadaf Ebrahimi # - tests/scripts/all.sh --outcome-file "$PWD/out.csv" <component_ref> <component_driver> 198*62c56f98SSadaf Ebrahimi # - tests/scripts/analyze_outcomes.py out.csv analyze_driver_vs_reference_xxx 199*62c56f98SSadaf Ebrahimi # 2. Let this script run both automatically: 200*62c56f98SSadaf Ebrahimi # - tests/scripts/analyze_outcomes.py out.csv analyze_driver_vs_reference_xxx 201*62c56f98SSadaf Ebrahimi 'analyze_driver_vs_reference_hash': { 202*62c56f98SSadaf Ebrahimi 'test_function': do_analyze_driver_vs_reference, 203*62c56f98SSadaf Ebrahimi 'args': { 204*62c56f98SSadaf Ebrahimi 'component_ref': 'test_psa_crypto_config_reference_hash_use_psa', 205*62c56f98SSadaf Ebrahimi 'component_driver': 'test_psa_crypto_config_accel_hash_use_psa', 206*62c56f98SSadaf Ebrahimi 'ignored_suites': [ 207*62c56f98SSadaf Ebrahimi 'shax', 'mdx', # the software implementations that are being excluded 208*62c56f98SSadaf Ebrahimi 'md.psa', # purposefully depends on whether drivers are present 209*62c56f98SSadaf Ebrahimi 'psa_crypto_low_hash.generated', # testing the builtins 210*62c56f98SSadaf Ebrahimi ], 211*62c56f98SSadaf Ebrahimi 'ignored_tests': { 212*62c56f98SSadaf Ebrahimi } 213*62c56f98SSadaf Ebrahimi } 214*62c56f98SSadaf Ebrahimi }, 215*62c56f98SSadaf Ebrahimi 'analyze_driver_vs_reference_ecp_light_only': { 216*62c56f98SSadaf Ebrahimi 'test_function': do_analyze_driver_vs_reference, 217*62c56f98SSadaf Ebrahimi 'args': { 218*62c56f98SSadaf Ebrahimi 'component_ref': 'test_psa_crypto_config_reference_ecc_ecp_light_only', 219*62c56f98SSadaf Ebrahimi 'component_driver': 'test_psa_crypto_config_accel_ecc_ecp_light_only', 220*62c56f98SSadaf Ebrahimi 'ignored_suites': [ 221*62c56f98SSadaf Ebrahimi 'ecdsa', 222*62c56f98SSadaf Ebrahimi 'ecdh', 223*62c56f98SSadaf Ebrahimi 'ecjpake', 224*62c56f98SSadaf Ebrahimi ], 225*62c56f98SSadaf Ebrahimi 'ignored_tests': { 226*62c56f98SSadaf Ebrahimi 'test_suite_random': [ 227*62c56f98SSadaf Ebrahimi 'PSA classic wrapper: ECDSA signature (SECP256R1)', 228*62c56f98SSadaf Ebrahimi ], 229*62c56f98SSadaf Ebrahimi # In the accelerated test ECP_C is not set (only ECP_LIGHT is) 230*62c56f98SSadaf Ebrahimi # so we must ignore disparities in the tests for which ECP_C 231*62c56f98SSadaf Ebrahimi # is required. 232*62c56f98SSadaf Ebrahimi 'test_suite_ecp': [ 233*62c56f98SSadaf Ebrahimi 'ECP check public-private #1 (OK)', 234*62c56f98SSadaf Ebrahimi 'ECP check public-private #2 (group none)', 235*62c56f98SSadaf Ebrahimi 'ECP check public-private #3 (group mismatch)', 236*62c56f98SSadaf Ebrahimi 'ECP check public-private #4 (Qx mismatch)', 237*62c56f98SSadaf Ebrahimi 'ECP check public-private #5 (Qy mismatch)', 238*62c56f98SSadaf Ebrahimi 'ECP check public-private #6 (wrong Qx)', 239*62c56f98SSadaf Ebrahimi 'ECP check public-private #7 (wrong Qy)', 240*62c56f98SSadaf Ebrahimi 'ECP gen keypair [#1]', 241*62c56f98SSadaf Ebrahimi 'ECP gen keypair [#2]', 242*62c56f98SSadaf Ebrahimi 'ECP gen keypair [#3]', 243*62c56f98SSadaf Ebrahimi 'ECP gen keypair wrapper', 244*62c56f98SSadaf Ebrahimi 'ECP point muladd secp256r1 #1', 245*62c56f98SSadaf Ebrahimi 'ECP point muladd secp256r1 #2', 246*62c56f98SSadaf Ebrahimi 'ECP point multiplication Curve25519 (element of order 2: origin) #3', 247*62c56f98SSadaf Ebrahimi 'ECP point multiplication Curve25519 (element of order 4: 1) #4', 248*62c56f98SSadaf Ebrahimi 'ECP point multiplication Curve25519 (element of order 8) #5', 249*62c56f98SSadaf Ebrahimi 'ECP point multiplication Curve25519 (normalized) #1', 250*62c56f98SSadaf Ebrahimi 'ECP point multiplication Curve25519 (not normalized) #2', 251*62c56f98SSadaf Ebrahimi 'ECP point multiplication rng fail Curve25519', 252*62c56f98SSadaf Ebrahimi 'ECP point multiplication rng fail secp256r1', 253*62c56f98SSadaf Ebrahimi 'ECP test vectors Curve25519', 254*62c56f98SSadaf Ebrahimi 'ECP test vectors Curve448 (RFC 7748 6.2, after decodeUCoordinate)', 255*62c56f98SSadaf Ebrahimi 'ECP test vectors brainpoolP256r1 rfc 7027', 256*62c56f98SSadaf Ebrahimi 'ECP test vectors brainpoolP384r1 rfc 7027', 257*62c56f98SSadaf Ebrahimi 'ECP test vectors brainpoolP512r1 rfc 7027', 258*62c56f98SSadaf Ebrahimi 'ECP test vectors secp192k1', 259*62c56f98SSadaf Ebrahimi 'ECP test vectors secp192r1 rfc 5114', 260*62c56f98SSadaf Ebrahimi 'ECP test vectors secp224k1', 261*62c56f98SSadaf Ebrahimi 'ECP test vectors secp224r1 rfc 5114', 262*62c56f98SSadaf Ebrahimi 'ECP test vectors secp256k1', 263*62c56f98SSadaf Ebrahimi 'ECP test vectors secp256r1 rfc 5114', 264*62c56f98SSadaf Ebrahimi 'ECP test vectors secp384r1 rfc 5114', 265*62c56f98SSadaf Ebrahimi 'ECP test vectors secp521r1 rfc 5114', 266*62c56f98SSadaf Ebrahimi ], 267*62c56f98SSadaf Ebrahimi 'test_suite_psa_crypto': [ 268*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp256r1', 269*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp256r1 (1 redraw)', 270*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp256r1, exercise ECDSA', 271*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp384r1', 272*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp521r1 #0', 273*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp521r1 #1', 274*62c56f98SSadaf Ebrahimi ], 275*62c56f98SSadaf Ebrahimi 'test_suite_ssl': [ 276*62c56f98SSadaf Ebrahimi 'Test configuration of groups for DHE through mbedtls_ssl_conf_curves()', 277*62c56f98SSadaf Ebrahimi ], 278*62c56f98SSadaf Ebrahimi } 279*62c56f98SSadaf Ebrahimi } 280*62c56f98SSadaf Ebrahimi }, 281*62c56f98SSadaf Ebrahimi 'analyze_driver_vs_reference_no_ecp_at_all': { 282*62c56f98SSadaf Ebrahimi 'test_function': do_analyze_driver_vs_reference, 283*62c56f98SSadaf Ebrahimi 'args': { 284*62c56f98SSadaf Ebrahimi 'component_ref': 'test_psa_crypto_config_reference_ecc_no_ecp_at_all', 285*62c56f98SSadaf Ebrahimi 'component_driver': 'test_psa_crypto_config_accel_ecc_no_ecp_at_all', 286*62c56f98SSadaf Ebrahimi 'ignored_suites': [ 287*62c56f98SSadaf Ebrahimi # Ignore test suites for the modules that are disabled in the 288*62c56f98SSadaf Ebrahimi # accelerated test case. 289*62c56f98SSadaf Ebrahimi 'ecp', 290*62c56f98SSadaf Ebrahimi 'ecdsa', 291*62c56f98SSadaf Ebrahimi 'ecdh', 292*62c56f98SSadaf Ebrahimi 'ecjpake', 293*62c56f98SSadaf Ebrahimi ], 294*62c56f98SSadaf Ebrahimi 'ignored_tests': { 295*62c56f98SSadaf Ebrahimi 'test_suite_random': [ 296*62c56f98SSadaf Ebrahimi 'PSA classic wrapper: ECDSA signature (SECP256R1)', 297*62c56f98SSadaf Ebrahimi ], 298*62c56f98SSadaf Ebrahimi 'test_suite_psa_crypto': [ 299*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp256r1', 300*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp256r1 (1 redraw)', 301*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp256r1, exercise ECDSA', 302*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp384r1', 303*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp521r1 #0', 304*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp521r1 #1', 305*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC BRAINPOOL_P_R1 (ECC enabled)', 306*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECP_K1 (ECC enabled)', 307*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECP_R1 (ECC enabled)', 308*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECP_R2 (ECC enabled)', 309*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECT_K1 (ECC enabled)', 310*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECT_R1 (ECC enabled)', 311*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECT_R2 (ECC enabled)', 312*62c56f98SSadaf Ebrahimi ], 313*62c56f98SSadaf Ebrahimi 'test_suite_pkparse': [ 314*62c56f98SSadaf Ebrahimi # When PK_PARSE_C and ECP_C are defined then PK_PARSE_EC_COMPRESSED 315*62c56f98SSadaf Ebrahimi # is automatically enabled in build_info.h (backward compatibility) 316*62c56f98SSadaf Ebrahimi # even if it is disabled in config_psa_crypto_no_ecp_at_all(). As a 317*62c56f98SSadaf Ebrahimi # consequence compressed points are supported in the reference 318*62c56f98SSadaf Ebrahimi # component but not in the accelerated one, so they should be skipped 319*62c56f98SSadaf Ebrahimi # while checking driver's coverage. 320*62c56f98SSadaf Ebrahimi 'Parse EC Key #10a (SEC1 PEM, secp384r1, compressed)', 321*62c56f98SSadaf Ebrahimi 'Parse EC Key #11a (SEC1 PEM, secp521r1, compressed)', 322*62c56f98SSadaf Ebrahimi 'Parse EC Key #12a (SEC1 PEM, bp256r1, compressed)', 323*62c56f98SSadaf Ebrahimi 'Parse EC Key #13a (SEC1 PEM, bp384r1, compressed)', 324*62c56f98SSadaf Ebrahimi 'Parse EC Key #14a (SEC1 PEM, bp512r1, compressed)', 325*62c56f98SSadaf Ebrahimi 'Parse EC Key #2a (SEC1 PEM, secp192r1, compressed)', 326*62c56f98SSadaf Ebrahimi 'Parse EC Key #8a (SEC1 PEM, secp224r1, compressed)', 327*62c56f98SSadaf Ebrahimi 'Parse EC Key #9a (SEC1 PEM, secp256r1, compressed)', 328*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #2a (RFC 5480, PEM, secp192r1, compressed)', 329*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #3a (RFC 5480, secp224r1, compressed)', 330*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #4a (RFC 5480, secp256r1, compressed)', 331*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #5a (RFC 5480, secp384r1, compressed)', 332*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #6a (RFC 5480, secp521r1, compressed)', 333*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #7a (RFC 5480, brainpoolP256r1, compressed)', 334*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #8a (RFC 5480, brainpoolP384r1, compressed)', 335*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #9a (RFC 5480, brainpoolP512r1, compressed)', 336*62c56f98SSadaf Ebrahimi ], 337*62c56f98SSadaf Ebrahimi 'test_suite_ssl': [ 338*62c56f98SSadaf Ebrahimi 'Test configuration of groups for DHE through mbedtls_ssl_conf_curves()', 339*62c56f98SSadaf Ebrahimi ], 340*62c56f98SSadaf Ebrahimi } 341*62c56f98SSadaf Ebrahimi } 342*62c56f98SSadaf Ebrahimi }, 343*62c56f98SSadaf Ebrahimi 'analyze_driver_vs_reference_ecc_no_bignum': { 344*62c56f98SSadaf Ebrahimi 'test_function': do_analyze_driver_vs_reference, 345*62c56f98SSadaf Ebrahimi 'args': { 346*62c56f98SSadaf Ebrahimi 'component_ref': 'test_psa_crypto_config_reference_ecc_no_bignum', 347*62c56f98SSadaf Ebrahimi 'component_driver': 'test_psa_crypto_config_accel_ecc_no_bignum', 348*62c56f98SSadaf Ebrahimi 'ignored_suites': [ 349*62c56f98SSadaf Ebrahimi # Ignore test suites for the modules that are disabled in the 350*62c56f98SSadaf Ebrahimi # accelerated test case. 351*62c56f98SSadaf Ebrahimi 'ecp', 352*62c56f98SSadaf Ebrahimi 'ecdsa', 353*62c56f98SSadaf Ebrahimi 'ecdh', 354*62c56f98SSadaf Ebrahimi 'ecjpake', 355*62c56f98SSadaf Ebrahimi 'bignum_core', 356*62c56f98SSadaf Ebrahimi 'bignum_random', 357*62c56f98SSadaf Ebrahimi 'bignum_mod', 358*62c56f98SSadaf Ebrahimi 'bignum_mod_raw', 359*62c56f98SSadaf Ebrahimi 'bignum.generated', 360*62c56f98SSadaf Ebrahimi 'bignum.misc', 361*62c56f98SSadaf Ebrahimi ], 362*62c56f98SSadaf Ebrahimi 'ignored_tests': { 363*62c56f98SSadaf Ebrahimi 'test_suite_random': [ 364*62c56f98SSadaf Ebrahimi 'PSA classic wrapper: ECDSA signature (SECP256R1)', 365*62c56f98SSadaf Ebrahimi ], 366*62c56f98SSadaf Ebrahimi 'test_suite_psa_crypto': [ 367*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp256r1', 368*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp256r1 (1 redraw)', 369*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp256r1, exercise ECDSA', 370*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp384r1', 371*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp521r1 #0', 372*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp521r1 #1', 373*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC BRAINPOOL_P_R1 (ECC enabled)', 374*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECP_K1 (ECC enabled)', 375*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECP_R1 (ECC enabled)', 376*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECP_R2 (ECC enabled)', 377*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECT_K1 (ECC enabled)', 378*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECT_R1 (ECC enabled)', 379*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECT_R2 (ECC enabled)', 380*62c56f98SSadaf Ebrahimi ], 381*62c56f98SSadaf Ebrahimi 'test_suite_pkparse': [ 382*62c56f98SSadaf Ebrahimi # See the description provided above in the 383*62c56f98SSadaf Ebrahimi # analyze_driver_vs_reference_no_ecp_at_all component. 384*62c56f98SSadaf Ebrahimi 'Parse EC Key #10a (SEC1 PEM, secp384r1, compressed)', 385*62c56f98SSadaf Ebrahimi 'Parse EC Key #11a (SEC1 PEM, secp521r1, compressed)', 386*62c56f98SSadaf Ebrahimi 'Parse EC Key #12a (SEC1 PEM, bp256r1, compressed)', 387*62c56f98SSadaf Ebrahimi 'Parse EC Key #13a (SEC1 PEM, bp384r1, compressed)', 388*62c56f98SSadaf Ebrahimi 'Parse EC Key #14a (SEC1 PEM, bp512r1, compressed)', 389*62c56f98SSadaf Ebrahimi 'Parse EC Key #2a (SEC1 PEM, secp192r1, compressed)', 390*62c56f98SSadaf Ebrahimi 'Parse EC Key #8a (SEC1 PEM, secp224r1, compressed)', 391*62c56f98SSadaf Ebrahimi 'Parse EC Key #9a (SEC1 PEM, secp256r1, compressed)', 392*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #2a (RFC 5480, PEM, secp192r1, compressed)', 393*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #3a (RFC 5480, secp224r1, compressed)', 394*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #4a (RFC 5480, secp256r1, compressed)', 395*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #5a (RFC 5480, secp384r1, compressed)', 396*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #6a (RFC 5480, secp521r1, compressed)', 397*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #7a (RFC 5480, brainpoolP256r1, compressed)', 398*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #8a (RFC 5480, brainpoolP384r1, compressed)', 399*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #9a (RFC 5480, brainpoolP512r1, compressed)', 400*62c56f98SSadaf Ebrahimi ], 401*62c56f98SSadaf Ebrahimi 'test_suite_asn1parse': [ 402*62c56f98SSadaf Ebrahimi # This test depends on BIGNUM_C 403*62c56f98SSadaf Ebrahimi 'INTEGER too large for mpi', 404*62c56f98SSadaf Ebrahimi ], 405*62c56f98SSadaf Ebrahimi 'test_suite_asn1write': [ 406*62c56f98SSadaf Ebrahimi # Following tests depends on BIGNUM_C 407*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0 (1 limb)', 408*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0 (null)', 409*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0x100', 410*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0x7f', 411*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0x7f with leading 0 limb', 412*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0x80', 413*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0x80 with leading 0 limb', 414*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0xff', 415*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 1', 416*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 127*8 bits', 417*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 127*8+1 bits', 418*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 127*8-1 bits', 419*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 255*8 bits', 420*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 255*8-1 bits', 421*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 256*8-1 bits', 422*62c56f98SSadaf Ebrahimi ], 423*62c56f98SSadaf Ebrahimi 'test_suite_debug': [ 424*62c56f98SSadaf Ebrahimi # Following tests depends on BIGNUM_C 425*62c56f98SSadaf Ebrahimi 'Debug print mbedtls_mpi #2: 3 bits', 426*62c56f98SSadaf Ebrahimi 'Debug print mbedtls_mpi: 0 (empty representation)', 427*62c56f98SSadaf Ebrahimi 'Debug print mbedtls_mpi: 0 (non-empty representation)', 428*62c56f98SSadaf Ebrahimi 'Debug print mbedtls_mpi: 49 bits', 429*62c56f98SSadaf Ebrahimi 'Debug print mbedtls_mpi: 759 bits', 430*62c56f98SSadaf Ebrahimi 'Debug print mbedtls_mpi: 764 bits #1', 431*62c56f98SSadaf Ebrahimi 'Debug print mbedtls_mpi: 764 bits #2', 432*62c56f98SSadaf Ebrahimi ], 433*62c56f98SSadaf Ebrahimi 'test_suite_ssl': [ 434*62c56f98SSadaf Ebrahimi 'Test configuration of groups for DHE through mbedtls_ssl_conf_curves()', 435*62c56f98SSadaf Ebrahimi ], 436*62c56f98SSadaf Ebrahimi } 437*62c56f98SSadaf Ebrahimi } 438*62c56f98SSadaf Ebrahimi }, 439*62c56f98SSadaf Ebrahimi 'analyze_driver_vs_reference_ecc_ffdh_no_bignum': { 440*62c56f98SSadaf Ebrahimi 'test_function': do_analyze_driver_vs_reference, 441*62c56f98SSadaf Ebrahimi 'args': { 442*62c56f98SSadaf Ebrahimi 'component_ref': 'test_psa_crypto_config_reference_ecc_ffdh_no_bignum', 443*62c56f98SSadaf Ebrahimi 'component_driver': 'test_psa_crypto_config_accel_ecc_ffdh_no_bignum', 444*62c56f98SSadaf Ebrahimi 'ignored_suites': [ 445*62c56f98SSadaf Ebrahimi # Ignore test suites for the modules that are disabled in the 446*62c56f98SSadaf Ebrahimi # accelerated test case. 447*62c56f98SSadaf Ebrahimi 'ecp', 448*62c56f98SSadaf Ebrahimi 'ecdsa', 449*62c56f98SSadaf Ebrahimi 'ecdh', 450*62c56f98SSadaf Ebrahimi 'ecjpake', 451*62c56f98SSadaf Ebrahimi 'bignum_core', 452*62c56f98SSadaf Ebrahimi 'bignum_random', 453*62c56f98SSadaf Ebrahimi 'bignum_mod', 454*62c56f98SSadaf Ebrahimi 'bignum_mod_raw', 455*62c56f98SSadaf Ebrahimi 'bignum.generated', 456*62c56f98SSadaf Ebrahimi 'bignum.misc', 457*62c56f98SSadaf Ebrahimi 'dhm', 458*62c56f98SSadaf Ebrahimi ], 459*62c56f98SSadaf Ebrahimi 'ignored_tests': { 460*62c56f98SSadaf Ebrahimi 'test_suite_random': [ 461*62c56f98SSadaf Ebrahimi 'PSA classic wrapper: ECDSA signature (SECP256R1)', 462*62c56f98SSadaf Ebrahimi ], 463*62c56f98SSadaf Ebrahimi 'test_suite_psa_crypto': [ 464*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp256r1', 465*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp256r1 (1 redraw)', 466*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp256r1, exercise ECDSA', 467*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp384r1', 468*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp521r1 #0', 469*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp521r1 #1', 470*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC BRAINPOOL_P_R1 (ECC enabled)', 471*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECP_K1 (ECC enabled)', 472*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECP_R1 (ECC enabled)', 473*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECP_R2 (ECC enabled)', 474*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECT_K1 (ECC enabled)', 475*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECT_R1 (ECC enabled)', 476*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECT_R2 (ECC enabled)', 477*62c56f98SSadaf Ebrahimi ], 478*62c56f98SSadaf Ebrahimi 'test_suite_pkparse': [ 479*62c56f98SSadaf Ebrahimi # See the description provided above in the 480*62c56f98SSadaf Ebrahimi # analyze_driver_vs_reference_no_ecp_at_all component. 481*62c56f98SSadaf Ebrahimi 'Parse EC Key #10a (SEC1 PEM, secp384r1, compressed)', 482*62c56f98SSadaf Ebrahimi 'Parse EC Key #11a (SEC1 PEM, secp521r1, compressed)', 483*62c56f98SSadaf Ebrahimi 'Parse EC Key #12a (SEC1 PEM, bp256r1, compressed)', 484*62c56f98SSadaf Ebrahimi 'Parse EC Key #13a (SEC1 PEM, bp384r1, compressed)', 485*62c56f98SSadaf Ebrahimi 'Parse EC Key #14a (SEC1 PEM, bp512r1, compressed)', 486*62c56f98SSadaf Ebrahimi 'Parse EC Key #2a (SEC1 PEM, secp192r1, compressed)', 487*62c56f98SSadaf Ebrahimi 'Parse EC Key #8a (SEC1 PEM, secp224r1, compressed)', 488*62c56f98SSadaf Ebrahimi 'Parse EC Key #9a (SEC1 PEM, secp256r1, compressed)', 489*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #2a (RFC 5480, PEM, secp192r1, compressed)', 490*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #3a (RFC 5480, secp224r1, compressed)', 491*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #4a (RFC 5480, secp256r1, compressed)', 492*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #5a (RFC 5480, secp384r1, compressed)', 493*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #6a (RFC 5480, secp521r1, compressed)', 494*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #7a (RFC 5480, brainpoolP256r1, compressed)', 495*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #8a (RFC 5480, brainpoolP384r1, compressed)', 496*62c56f98SSadaf Ebrahimi 'Parse Public EC Key #9a (RFC 5480, brainpoolP512r1, compressed)', 497*62c56f98SSadaf Ebrahimi ], 498*62c56f98SSadaf Ebrahimi 'test_suite_asn1parse': [ 499*62c56f98SSadaf Ebrahimi # This test depends on BIGNUM_C 500*62c56f98SSadaf Ebrahimi 'INTEGER too large for mpi', 501*62c56f98SSadaf Ebrahimi ], 502*62c56f98SSadaf Ebrahimi 'test_suite_asn1write': [ 503*62c56f98SSadaf Ebrahimi # Following tests depends on BIGNUM_C 504*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0 (1 limb)', 505*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0 (null)', 506*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0x100', 507*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0x7f', 508*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0x7f with leading 0 limb', 509*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0x80', 510*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0x80 with leading 0 limb', 511*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0xff', 512*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 1', 513*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 127*8 bits', 514*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 127*8+1 bits', 515*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 127*8-1 bits', 516*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 255*8 bits', 517*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 255*8-1 bits', 518*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 256*8-1 bits', 519*62c56f98SSadaf Ebrahimi ], 520*62c56f98SSadaf Ebrahimi 'test_suite_debug': [ 521*62c56f98SSadaf Ebrahimi # Following tests depends on BIGNUM_C 522*62c56f98SSadaf Ebrahimi 'Debug print mbedtls_mpi #2: 3 bits', 523*62c56f98SSadaf Ebrahimi 'Debug print mbedtls_mpi: 0 (empty representation)', 524*62c56f98SSadaf Ebrahimi 'Debug print mbedtls_mpi: 0 (non-empty representation)', 525*62c56f98SSadaf Ebrahimi 'Debug print mbedtls_mpi: 49 bits', 526*62c56f98SSadaf Ebrahimi 'Debug print mbedtls_mpi: 759 bits', 527*62c56f98SSadaf Ebrahimi 'Debug print mbedtls_mpi: 764 bits #1', 528*62c56f98SSadaf Ebrahimi 'Debug print mbedtls_mpi: 764 bits #2', 529*62c56f98SSadaf Ebrahimi ], 530*62c56f98SSadaf Ebrahimi 'test_suite_ssl': [ 531*62c56f98SSadaf Ebrahimi 'Test configuration of groups for DHE through mbedtls_ssl_conf_curves()', 532*62c56f98SSadaf Ebrahimi ], 533*62c56f98SSadaf Ebrahimi } 534*62c56f98SSadaf Ebrahimi } 535*62c56f98SSadaf Ebrahimi }, 536*62c56f98SSadaf Ebrahimi 'analyze_driver_vs_reference_ffdh_alg': { 537*62c56f98SSadaf Ebrahimi 'test_function': do_analyze_driver_vs_reference, 538*62c56f98SSadaf Ebrahimi 'args': { 539*62c56f98SSadaf Ebrahimi 'component_ref': 'test_psa_crypto_config_reference_ffdh', 540*62c56f98SSadaf Ebrahimi 'component_driver': 'test_psa_crypto_config_accel_ffdh', 541*62c56f98SSadaf Ebrahimi 'ignored_suites': ['dhm'], 542*62c56f98SSadaf Ebrahimi 'ignored_tests': {} 543*62c56f98SSadaf Ebrahimi } 544*62c56f98SSadaf Ebrahimi }, 545*62c56f98SSadaf Ebrahimi 'analyze_driver_vs_reference_tfm_config': { 546*62c56f98SSadaf Ebrahimi 'test_function': do_analyze_driver_vs_reference, 547*62c56f98SSadaf Ebrahimi 'args': { 548*62c56f98SSadaf Ebrahimi 'component_ref': 'test_tfm_config', 549*62c56f98SSadaf Ebrahimi 'component_driver': 'test_tfm_config_p256m_driver_accel_ec', 550*62c56f98SSadaf Ebrahimi 'ignored_suites': [ 551*62c56f98SSadaf Ebrahimi # Ignore test suites for the modules that are disabled in the 552*62c56f98SSadaf Ebrahimi # accelerated test case. 553*62c56f98SSadaf Ebrahimi 'ecp', 554*62c56f98SSadaf Ebrahimi 'ecdsa', 555*62c56f98SSadaf Ebrahimi 'ecdh', 556*62c56f98SSadaf Ebrahimi 'ecjpake', 557*62c56f98SSadaf Ebrahimi 'bignum_core', 558*62c56f98SSadaf Ebrahimi 'bignum_random', 559*62c56f98SSadaf Ebrahimi 'bignum_mod', 560*62c56f98SSadaf Ebrahimi 'bignum_mod_raw', 561*62c56f98SSadaf Ebrahimi 'bignum.generated', 562*62c56f98SSadaf Ebrahimi 'bignum.misc', 563*62c56f98SSadaf Ebrahimi ], 564*62c56f98SSadaf Ebrahimi 'ignored_tests': { 565*62c56f98SSadaf Ebrahimi # Ignore all tests that require DERIVE support which is disabled 566*62c56f98SSadaf Ebrahimi # in the driver version 567*62c56f98SSadaf Ebrahimi 'test_suite_psa_crypto': [ 568*62c56f98SSadaf Ebrahimi 'PSA key agreement setup: ECDH + HKDF-SHA-256: good', 569*62c56f98SSadaf Ebrahimi ('PSA key agreement setup: ECDH + HKDF-SHA-256: good, key algorithm broader ' 570*62c56f98SSadaf Ebrahimi 'than required'), 571*62c56f98SSadaf Ebrahimi 'PSA key agreement setup: ECDH + HKDF-SHA-256: public key not on curve', 572*62c56f98SSadaf Ebrahimi 'PSA key agreement setup: KDF instead of a key agreement algorithm', 573*62c56f98SSadaf Ebrahimi 'PSA key agreement setup: bad key agreement algorithm', 574*62c56f98SSadaf Ebrahimi 'PSA key agreement: ECDH SECP256R1 (RFC 5903) + HKDF-SHA-256: capacity=8160', 575*62c56f98SSadaf Ebrahimi 'PSA key agreement: ECDH SECP256R1 (RFC 5903) + HKDF-SHA-256: read 0+32', 576*62c56f98SSadaf Ebrahimi 'PSA key agreement: ECDH SECP256R1 (RFC 5903) + HKDF-SHA-256: read 1+31', 577*62c56f98SSadaf Ebrahimi 'PSA key agreement: ECDH SECP256R1 (RFC 5903) + HKDF-SHA-256: read 31+1', 578*62c56f98SSadaf Ebrahimi 'PSA key agreement: ECDH SECP256R1 (RFC 5903) + HKDF-SHA-256: read 32+0', 579*62c56f98SSadaf Ebrahimi 'PSA key agreement: ECDH SECP256R1 (RFC 5903) + HKDF-SHA-256: read 32+32', 580*62c56f98SSadaf Ebrahimi 'PSA key agreement: ECDH SECP256R1 (RFC 5903) + HKDF-SHA-256: read 64+0', 581*62c56f98SSadaf Ebrahimi 'PSA key derivation: ECDH on P256 with HKDF-SHA256, info first', 582*62c56f98SSadaf Ebrahimi 'PSA key derivation: ECDH on P256 with HKDF-SHA256, key output', 583*62c56f98SSadaf Ebrahimi 'PSA key derivation: ECDH on P256 with HKDF-SHA256, missing info', 584*62c56f98SSadaf Ebrahimi 'PSA key derivation: ECDH on P256 with HKDF-SHA256, omitted salt', 585*62c56f98SSadaf Ebrahimi 'PSA key derivation: ECDH on P256 with HKDF-SHA256, raw output', 586*62c56f98SSadaf Ebrahimi 'PSA key derivation: ECDH on P256 with HKDF-SHA256, salt after secret', 587*62c56f98SSadaf Ebrahimi 'PSA key derivation: ECDH with TLS 1.2 PRF SHA-256, good case', 588*62c56f98SSadaf Ebrahimi 'PSA key derivation: ECDH with TLS 1.2 PRF SHA-256, missing label', 589*62c56f98SSadaf Ebrahimi 'PSA key derivation: ECDH with TLS 1.2 PRF SHA-256, missing label and secret', 590*62c56f98SSadaf Ebrahimi 'PSA key derivation: ECDH with TLS 1.2 PRF SHA-256, no inputs', 591*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp256r1', 592*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp256r1 (1 redraw)', 593*62c56f98SSadaf Ebrahimi 'PSA key derivation: HKDF-SHA-256 -> ECC secp256r1, exercise ECDSA', 594*62c56f98SSadaf Ebrahimi 'PSA key derivation: TLS 1.2 Mix-PSK-to-MS, SHA-256, 0+48, ka', 595*62c56f98SSadaf Ebrahimi 'PSA key derivation: TLS 1.2 Mix-PSK-to-MS, SHA-256, 24+24, ka', 596*62c56f98SSadaf Ebrahimi 'PSA key derivation: TLS 1.2 Mix-PSK-to-MS, SHA-256, 48+0, ka', 597*62c56f98SSadaf Ebrahimi 'PSA key derivation: TLS 1.2 Mix-PSK-to-MS, bad state #1, ka', 598*62c56f98SSadaf Ebrahimi 'PSA key derivation: TLS 1.2 Mix-PSK-to-MS, bad state #3, ka', 599*62c56f98SSadaf Ebrahimi 'PSA key derivation: TLS 1.2 Mix-PSK-to-MS, bad state #4, ka', 600*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC BRAINPOOL_P_R1 (ECC enabled)', 601*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC MONTGOMERY (ECC enabled)', 602*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECP_K1 (ECC enabled)', 603*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECP_R1 (ECC enabled)', 604*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECP_R2 (ECC enabled)', 605*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECT_K1 (ECC enabled)', 606*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECT_R1 (ECC enabled)', 607*62c56f98SSadaf Ebrahimi 'PSA key derivation: bits=7 invalid for ECC SECT_R2 (ECC enabled)', 608*62c56f98SSadaf Ebrahimi 'PSA raw key agreement: ECDH SECP256R1 (RFC 5903)', 609*62c56f98SSadaf Ebrahimi ], 610*62c56f98SSadaf Ebrahimi 'test_suite_random': [ 611*62c56f98SSadaf Ebrahimi 'PSA classic wrapper: ECDSA signature (SECP256R1)', 612*62c56f98SSadaf Ebrahimi ], 613*62c56f98SSadaf Ebrahimi 'test_suite_psa_crypto_pake': [ 614*62c56f98SSadaf Ebrahimi 'PSA PAKE: ecjpake size macros', 615*62c56f98SSadaf Ebrahimi ], 616*62c56f98SSadaf Ebrahimi 'test_suite_asn1parse': [ 617*62c56f98SSadaf Ebrahimi # This test depends on BIGNUM_C 618*62c56f98SSadaf Ebrahimi 'INTEGER too large for mpi', 619*62c56f98SSadaf Ebrahimi ], 620*62c56f98SSadaf Ebrahimi 'test_suite_asn1write': [ 621*62c56f98SSadaf Ebrahimi # Following tests depends on BIGNUM_C 622*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0 (1 limb)', 623*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0 (null)', 624*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0x100', 625*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0x7f', 626*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0x7f with leading 0 limb', 627*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0x80', 628*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0x80 with leading 0 limb', 629*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 0xff', 630*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi 1', 631*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 127*8 bits', 632*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 127*8+1 bits', 633*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 127*8-1 bits', 634*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 255*8 bits', 635*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 255*8-1 bits', 636*62c56f98SSadaf Ebrahimi 'ASN.1 Write mpi, 256*8-1 bits', 637*62c56f98SSadaf Ebrahimi ], 638*62c56f98SSadaf Ebrahimi } 639*62c56f98SSadaf Ebrahimi } 640*62c56f98SSadaf Ebrahimi } 641*62c56f98SSadaf Ebrahimi} 642*62c56f98SSadaf Ebrahimi 643*62c56f98SSadaf Ebrahimidef main(): 644*62c56f98SSadaf Ebrahimi try: 645*62c56f98SSadaf Ebrahimi parser = argparse.ArgumentParser(description=__doc__) 646*62c56f98SSadaf Ebrahimi parser.add_argument('outcomes', metavar='OUTCOMES.CSV', 647*62c56f98SSadaf Ebrahimi help='Outcome file to analyze') 648*62c56f98SSadaf Ebrahimi parser.add_argument('task', default='all', nargs='?', 649*62c56f98SSadaf Ebrahimi help='Analysis to be done. By default, run all tasks. ' 650*62c56f98SSadaf Ebrahimi 'With one or more TASK, run only those. ' 651*62c56f98SSadaf Ebrahimi 'TASK can be the name of a single task or ' 652*62c56f98SSadaf Ebrahimi 'comma/space-separated list of tasks. ') 653*62c56f98SSadaf Ebrahimi parser.add_argument('--list', action='store_true', 654*62c56f98SSadaf Ebrahimi help='List all available tasks and exit.') 655*62c56f98SSadaf Ebrahimi parser.add_argument('--require-full-coverage', action='store_true', 656*62c56f98SSadaf Ebrahimi dest='full_coverage', help="Require all available " 657*62c56f98SSadaf Ebrahimi "test cases to be executed and issue an error " 658*62c56f98SSadaf Ebrahimi "otherwise. This flag is ignored if 'task' is " 659*62c56f98SSadaf Ebrahimi "neither 'all' nor 'analyze_coverage'") 660*62c56f98SSadaf Ebrahimi options = parser.parse_args() 661*62c56f98SSadaf Ebrahimi 662*62c56f98SSadaf Ebrahimi if options.list: 663*62c56f98SSadaf Ebrahimi for task in TASKS: 664*62c56f98SSadaf Ebrahimi Results.log(task) 665*62c56f98SSadaf Ebrahimi sys.exit(0) 666*62c56f98SSadaf Ebrahimi 667*62c56f98SSadaf Ebrahimi result = True 668*62c56f98SSadaf Ebrahimi 669*62c56f98SSadaf Ebrahimi if options.task == 'all': 670*62c56f98SSadaf Ebrahimi tasks = TASKS.keys() 671*62c56f98SSadaf Ebrahimi else: 672*62c56f98SSadaf Ebrahimi tasks = re.split(r'[, ]+', options.task) 673*62c56f98SSadaf Ebrahimi 674*62c56f98SSadaf Ebrahimi for task in tasks: 675*62c56f98SSadaf Ebrahimi if task not in TASKS: 676*62c56f98SSadaf Ebrahimi Results.log('Error: invalid task: {}'.format(task)) 677*62c56f98SSadaf Ebrahimi sys.exit(1) 678*62c56f98SSadaf Ebrahimi 679*62c56f98SSadaf Ebrahimi TASKS['analyze_coverage']['args']['full_coverage'] = \ 680*62c56f98SSadaf Ebrahimi options.full_coverage 681*62c56f98SSadaf Ebrahimi 682*62c56f98SSadaf Ebrahimi for task in TASKS: 683*62c56f98SSadaf Ebrahimi if task in tasks: 684*62c56f98SSadaf Ebrahimi if not TASKS[task]['test_function'](options.outcomes, TASKS[task]['args']): 685*62c56f98SSadaf Ebrahimi result = False 686*62c56f98SSadaf Ebrahimi 687*62c56f98SSadaf Ebrahimi if result is False: 688*62c56f98SSadaf Ebrahimi sys.exit(1) 689*62c56f98SSadaf Ebrahimi Results.log("SUCCESS :-)") 690*62c56f98SSadaf Ebrahimi except Exception: # pylint: disable=broad-except 691*62c56f98SSadaf Ebrahimi # Print the backtrace and exit explicitly with our chosen status. 692*62c56f98SSadaf Ebrahimi traceback.print_exc() 693*62c56f98SSadaf Ebrahimi sys.exit(120) 694*62c56f98SSadaf Ebrahimi 695*62c56f98SSadaf Ebrahimiif __name__ == '__main__': 696*62c56f98SSadaf Ebrahimi main() 697