1#!/usr/bin/perl 2 3# curves.pl 4# 5# Copyright (c) 2014-2016, ARM Limited, All Rights Reserved 6# 7# Purpose 8# 9# To test the code dependencies on individual curves in each test suite. This 10# is a verification step to ensure we don't ship test suites that do not work 11# for some build options. 12# 13# The process is: 14# for each possible curve 15# build the library and test suites with the curve disabled 16# execute the test suites 17# 18# And any test suite with the wrong dependencies will fail. 19# 20# Usage: curves.pl 21# 22# This script should be executed from the root of the project directory. 23 24use warnings; 25use strict; 26 27-d 'library' && -d 'include' && -d 'tests' or die "Must be run from root\n"; 28 29my $sed_cmd = 's/^#define \(MBEDTLS_ECP_DP.*_ENABLED\)/\1/p'; 30my $config_h = 'include/mbedtls/config.h'; 31my @curves = split( /\s+/, `sed -n -e '$sed_cmd' $config_h` ); 32 33system( "cp $config_h $config_h.bak" ) and die; 34sub abort { 35 system( "mv $config_h.bak $config_h" ) and warn "$config_h not restored\n"; 36 die $_[0]; 37} 38 39for my $curve (@curves) { 40 system( "cp $config_h.bak $config_h" ) and die "$config_h not restored\n"; 41 # depends on a specific curve. Also, ignore error if it wasn't enabled 42 system( "scripts/config.pl unset MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED" ); 43 system( "make clean" ) and die; 44 45 print "\n******************************************\n"; 46 print "* Testing without curve: $curve\n"; 47 print "******************************************\n"; 48 49 system( "scripts/config.pl unset $curve" ) 50 and abort "Failed to disable $curve\n"; 51 52 system( "make lib" ) and abort "Failed to build lib: $curve\n"; 53 system( "cd tests && make" ) and abort "Failed to build tests: $curve\n"; 54 system( "make test" ) and abort "Failed test suite: $curve\n"; 55 56} 57 58system( "mv $config_h.bak $config_h" ) and die "$config_h not restored\n"; 59system( "make clean" ) and die; 60exit 0; 61