2a65b85928
The test cases use the following MPI values. The .data file includes two results, for the cases when sizeof(mbedtls_mpi_uint) == 4 or 8. 0 1 3 f fe ff 100 ff00 fffe ffff 10000 fffffffe ffffffff 100000000 1f7f7f7f7f7f7f 8000000000000000 fefefefefefefefe fffffffffffffffe ffffffffffffffff 10000000000000000 1234567890abcdef0 fffffffffffffffffefefefefefefefe fffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffff 100000000000000000000000000000000 1234567890abcdef01234567890abcdef0 fffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefefe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 10000000000000000000000000000000000000000000000000000000000000000 1234567890abcdef01234567890abcdef01234567890abcdef01234567890abcdef0 4df72d07b4b71c8dacb6cffa954f8d88254b6277099308baf003fab73227f34029643b5a263f66e0d3c3fa297ef71755efd53b8fb6cb812c6bbf7bcf179298bd9947c4c8b14324140a2c0f5fad7958a69050a987a6096e9f055fb38edf0c5889eca4a0cfa99b45fbdeee4c696b328ddceae4723945901ec025076b12b The lines in the .data file were generated by the following script #!/usr/bin/env perl # # mpi-test-core-sub.pl - generate/run MPI tests in Perl for mbedtls_mpi_core_sub() # use strict; use warnings; use Math::BigInt; use sort 'stable'; my @sub_mpis = qw( 0 1 3 f fe ff 100 ff00 fffe ffff 10000 fffffffe ffffffff 100000000 1f7f7f7f7f7f7f 8000000000000000 fefefefefefefefe fffffffffffffffe ffffffffffffffff 10000000000000000 1234567890abcdef0 fffffffffffffffffefefefefefefefe fffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffff 100000000000000000000000000000000 1234567890abcdef01234567890abcdef0 fffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefefe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 10000000000000000000000000000000000000000000000000000000000000000 1234567890abcdef01234567890abcdef01234567890abcdef01234567890abcdef0 4df72d07b4b71c8dacb6cffa954f8d88254b6277099308baf003fab73227f34029643b5a263f66e0d3c3fa297ef71755efd53b8fb6cb812c6bbf7bcf179298bd9947c4c8b14324140a2c0f5fad7958a69050a987a6096e9f055fb38edf0c5889eca4a0cfa99b45fbdeee4c696b328ddceae4723945901ec025076b12b ); generate_tests(); sub generate_tests { generate_mbedtls_mpi_core_sub(); } sub generate_mbedtls_mpi_core_sub { my $sub_name = (caller(0))[3]; # e.g. main::generate_mbedtls_mpi_sub_mpi my ($ignore, $test_name) = split("main::generate_", $sub_name); my @cases = (); for my $ah (@sub_mpis) { for my $bh (@sub_mpis) { my $a = Math::BigInt->from_hex($ah); my $b = Math::BigInt->from_hex($bh); my ($rh4, $rh8, $carry); if ($a >= $b) { my $r = $a - $b; $rh4 = $rh8 = $r->to_hex(); $carry = 0; } else { my $r4 = bound_mpi4($b) + $a - $b; my $r8 = bound_mpi8($b) + $a - $b; $rh4 = $r4->to_hex(); $rh8 = $r8->to_hex(); $carry = 1; } my $desc = "$test_name #NUMBER: 0x$ah - 0x$bh = 0x$rh4/${rh8}EXPLAIN, carry ${carry}"; my $case = output($test_name, str($ah), str($bh), str($rh4), str($rh8), $carry); push(@cases, [$case, $desc]); } } output_cases(" (for when sizeof(mbedtls_mpi_uint) == 4/8)", @cases); } sub output_cases { my ($explain, @cases) = @_; my $count = 1; for my $c (@cases) { my ($case, $desc, $dep) = @$c; $desc =~ s/NUMBER/$count/; $count++; if (defined($explain) && $desc =~ /EXPLAIN/) { $desc =~ s/EXPLAIN/$explain/; $explain = ""; } my $depends = ""; $depends = "depends_on:$dep\n" if defined($dep) && length($dep); print <<EOF; $desc $depends$case EOF } } # The first number (a power of 2) that won't fit in the number of MPIs # needed for the given number sub bound_mpi4 { my $one = Math::BigInt->new(1); # blsft modifies caller return $one->blsft(bits_mpi4($_[0])); } sub bound_mpi8 { my $one = Math::BigInt->new(1); # blsft modifies caller return $one->blsft(bits_mpi8($_[0])); } # How many bits (a multiple of 32) needed to store the specified number # when using 4-byte MPIs sub bits_mpi4 { return 32 * mpi4s($_[0]); } # How many bits (a multiple of 64) needed to store the specified number # when using 8-byte MPIs sub bits_mpi8 { return 64 * mpi8s($_[0]); } # How many 4-byte MPIs needed to store the specified number sub mpi4s { my ($n) = @_; my $h = $n->to_hex(); return int((length($h) + 7) / 8); } # How many 8-byte MPIs needed to store the specified number sub mpi8s { my ($n) = @_; my $h = $n->to_hex(); return int((length($h) + 15) / 16); } sub output { return join(":", @_); } sub str { return '"' . $_[0] . '"'; } Signed-off-by: Tom Cosgrove <tom.cosgrove@arm.com> |
||
---|---|---|
.. | ||
.jenkins | ||
configs | ||
data_files | ||
docker/bionic | ||
git-scripts | ||
include | ||
opt-testcases | ||
scripts | ||
src | ||
suites | ||
.gitignore | ||
CMakeLists.txt | ||
compat-in-docker.sh | ||
compat.sh | ||
context-info.sh | ||
Descriptions.txt | ||
make-in-docker.sh | ||
Makefile | ||
ssl-opt-in-docker.sh | ||
ssl-opt.sh |