mbedtls/tests/suites
Tom Cosgrove 0cc78658c3 Add unit tests for the new function mbedtls_mpi_core_add_if() in bignum_new.c
The test cases use the following MPI values.

The .data file only includes those (a, b) values where a <= b, and gives the
sum unconditionally; the test code exercises a >= b and cond == 0 using these
values. The .data file gives two values for the carry out, which are for 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-add-if.pl - generate MPI tests in Perl for mbedtls_mpi_core_add_if()
    #
    use strict;
    use warnings;
    use Math::BigInt;
    use sort 'stable';

    my @add_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_add_if();
    }

    sub generate_mbedtls_mpi_core_add_if {

        my $sub_name = (caller(0))[3];      # e.g. main::generate_mbedtls_mpi_add_mpi
        my ($ignore, $test_name) = split("main::generate_", $sub_name);

        my @cases = ();

        for my $ah (@add_mpis) {
            for my $bh (@add_mpis) {

                my $a = Math::BigInt->from_hex($ah);
                my $b = Math::BigInt->from_hex($bh);
                next if $a > $b;                # don't need to repeat test cases

                # $b is the larger (or equal) of the two numbers. That's the number of limbs
                # we'll be using.
                my $bound4 = bound_mpi4($b);
                my $bound8 = bound_mpi8($b);

                my $r = $a + $b;
                my ($r4, $carry4) = ($r->copy(), 0);
                my ($r8, $carry8) = ($r->copy(), 0);

                ($carry4, $r4) = $r4->bdiv($bound4);
                ($carry8, $r8) = $r8->bdiv($bound8);

                my $rh4 = $r4->to_hex();
                my $rh8 = $r8->to_hex();

                my $desc = "$test_name #NUMBER: 0x$ah + 0x$bh = (0x$rh4, carry $carry4)/(0x$rh8, carry $carry8)EXPLAIN";
                my $case = output($test_name, str($ah), str($bh), str($rh4), $carry4, str($rh8), $carry8);

                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>
2022-08-23 16:26:52 +01:00
..
helpers.function Fix compilation with MinGW32 2022-05-10 13:46:09 +01:00
host_test.function Add missing break 2022-06-17 10:55:42 +01:00
main_test.function Changing the places of the mbedtls_test_hook_test_fail callback declaration 2021-07-20 13:36:16 +02:00
test_suite_aes.cbc.data
test_suite_aes.cfb.data
test_suite_aes.ecb.data Refactor AES context to be shallow-copyable 2022-06-29 16:17:50 +01:00
test_suite_aes.function Update test to cover move-decrypt sequence 2022-06-29 16:17:50 +01:00
test_suite_aes.ofb.data
test_suite_aes.rest.data
test_suite_aes.xts.data
test_suite_aria.data
test_suite_aria.function Redo of PR#5345. Fixed spelling and typographical errors found by CodeSpell. 2022-05-11 21:25:51 +01:00
test_suite_asn1parse.data
test_suite_asn1parse.function Remove radix arg from mbedtls_test_read_mpi 2022-08-01 15:05:24 +01:00
test_suite_asn1write.data Fix copypasta in test data 2022-06-15 21:16:42 +02:00
test_suite_asn1write.function Don't call memcpy(NULL, 0) which has undefined behavior 2022-06-27 23:59:53 +02:00
test_suite_base64.data Move the list of Base64 digits out of the test data 2021-10-25 22:15:19 +02:00
test_suite_base64.function Delete base64_invasive.h due to functions are moved to the constant-time module 2021-11-26 17:20:02 +01:00
test_suite_camellia.data
test_suite_camellia.function
test_suite_ccm.data Add tests for CCM*-no-tag. 2021-10-21 11:33:41 +02:00
test_suite_ccm.function Add tests for CCM*-no-tag. 2021-10-21 11:33:41 +02:00
test_suite_chacha20.data
test_suite_chacha20.function
test_suite_chachapoly.data
test_suite_chachapoly.function
test_suite_cipher.aes.data Use MBEDTLS_TEST_DEPRECATED only in tests 2022-05-19 14:11:06 +02:00
test_suite_cipher.aria.data Extend CCM*-no-tag tests 2021-10-28 18:00:33 +02:00
test_suite_cipher.camellia.data Extend CCM*-no-tag tests 2021-10-28 18:00:33 +02:00
test_suite_cipher.ccm.data Use MBEDTLS_TEST_DEPRECATED only in tests 2022-05-19 14:11:06 +02:00
test_suite_cipher.chacha20.data Modifies data files to match new test function name 2022-02-21 09:57:51 +00:00
test_suite_cipher.chachapoly.data Modifies data files to match new test function name 2022-02-21 09:57:51 +00:00
test_suite_cipher.des.data
test_suite_cipher.function Use MBEDTLS_TEST_DEPRECATED only in tests 2022-05-19 14:11:06 +02:00
test_suite_cipher.gcm.data Use MBEDTLS_TEST_DEPRECATED only in tests 2022-05-19 14:11:06 +02:00
test_suite_cipher.misc.data
test_suite_cipher.nist_kw.data
test_suite_cipher.null.data
test_suite_cipher.padding.data Remove MD2, MD4, RC4, Blowfish and XTEA 2021-06-16 10:34:25 +02:00
test_suite_cmac.data
test_suite_cmac.function
test_suite_ctr_drbg.data
test_suite_ctr_drbg.function Rename the _ret() functions 2021-06-08 16:45:41 +02:00
test_suite_debug.data Remove radix arg from bignum tests 2022-08-01 15:07:14 +01:00
test_suite_debug.function Remove radix arg from bignum tests 2022-08-01 15:07:14 +01:00
test_suite_des.data
test_suite_des.function Catch failures of AES or DES operations 2021-09-27 16:22:08 +02:00
test_suite_dhm.data Remove radix arg from bignum tests 2022-08-01 15:07:14 +01:00
test_suite_dhm.function Remove radix arg from bignum tests 2022-08-01 15:07:14 +01:00
test_suite_ecdh.data Merge branch 'development' into Remove__CHECK_PARAMS_option 2021-06-07 15:41:49 +02:00
test_suite_ecdh.function Merge pull request #6070 from wernerlewis/bignum_test_radix 2022-08-05 11:01:07 +02:00
test_suite_ecdsa.data Rm useless use of MD in ECDSA test functions 2022-07-19 21:03:29 +02:00
test_suite_ecdsa.function Introduce a new macro for hash size in ecdsa tests 2022-08-11 09:19:42 -04:00
test_suite_ecjpake.data Redo of PR#5345. Fixed spelling and typographical errors found by CodeSpell. 2022-05-11 21:25:51 +01:00
test_suite_ecjpake.function Make ecjpake test suite depend on MBEDTLS_HAS_ALG_SHA_256_VIA_MD_OR_PSA 2022-08-19 14:03:02 +02:00
test_suite_ecp.data Add test case for mbedtls_ecp_set_zero 2022-08-08 17:22:55 +01:00
test_suite_ecp.function Add test case for mbedtls_ecp_set_zero 2022-08-08 17:22:55 +01:00
test_suite_entropy.data
test_suite_entropy.function
test_suite_error.data
test_suite_error.function
test_suite_gcm.aes128_de.data Fix PSA AEAD GCM's update output buffer length verification. 2021-10-04 13:54:55 +02:00
test_suite_gcm.aes128_en.data Fix PSA AEAD GCM's update output buffer length verification. 2021-10-04 13:54:55 +02:00
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 Remove redundant value assignemnt to olen. 2021-10-21 14:55:59 +02:00
test_suite_gcm.misc.data
test_suite_hkdf.data Code review follow-up corrections 2021-06-16 10:34:45 +02:00
test_suite_hkdf.function Update old style test function parameter handling 2022-03-16 16:53:23 +01:00
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 Remove MD2, MD4, RC4, Blowfish and XTEA 2021-06-16 10:34:25 +02:00
test_suite_md.function Redo of PR#5345. Fixed spelling and typographical errors found by CodeSpell. 2022-05-11 21:25:51 +01:00
test_suite_mdx.data Remove MD2, MD4, RC4, Blowfish and XTEA 2021-06-16 10:34:25 +02:00
test_suite_mdx.function Remove MD2, MD4, RC4, Blowfish and XTEA 2021-06-16 10:34:25 +02:00
test_suite_memory_buffer_alloc.data
test_suite_memory_buffer_alloc.function
test_suite_mpi.data Add unit tests for the new function mbedtls_mpi_core_add_if() in bignum_new.c 2022-08-23 16:26:52 +01:00
test_suite_mpi.function Add unit tests for the new function mbedtls_mpi_core_add_if() in bignum_new.c 2022-08-23 16:26:52 +01:00
test_suite_mps.data
test_suite_mps.function Rename MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL to MBEDTLS_SSL_PROTO_TLS1_3 2021-12-10 13:47:55 +01:00
test_suite_net.data
test_suite_net.function Redo of PR#5345. Fixed spelling and typographical errors found by CodeSpell. 2022-05-11 21:25:51 +01:00
test_suite_nist_kw.data Removal of RC4 certs and fixes to docs and tests 2021-06-21 13:27:29 +02:00
test_suite_nist_kw.function
test_suite_oid.data test_suite_oid: Replace MBEDTLS_MD5_C and MBEDTLS_SHAxxx_C with the corresponding MBEDTLS_HAS_ALG_xxx_VIA_LOWLEVEL_OR_PSA 2022-08-19 10:15:56 +02:00
test_suite_oid.function test_suite_oid: Replace MBEDTLS_MD5_C and MBEDTLS_SHAxxx_C with the corresponding MBEDTLS_HAS_ALG_xxx_VIA_LOWLEVEL_OR_PSA 2022-08-19 10:15:56 +02:00
test_suite_pem.data test_suite_pem.data: change MBEDTLS_CMAC_C->MBEDTLS_CIPHER_MODE_CBC dependency 2022-08-20 14:24:04 +02:00
test_suite_pem.function test_suite_pem, test_suite_pkparse: Adjust dependecies 2022-08-19 10:15:56 +02:00
test_suite_pk.data Adjust dependencies in test_suite_pkcs1_v21 2022-08-11 12:50:06 +02:00
test_suite_pk.function Fix formatting in bignum test functions 2022-08-01 15:07:14 +01:00
test_suite_pkcs1_v15.data Apply test data changes for conflicting cases 2022-08-01 15:17:45 +01:00
test_suite_pkcs1_v15.function Fix formatting in bignum test functions 2022-08-01 15:07:14 +01:00
test_suite_pkcs1_v21.data Fix undeclared dependencies on SHA-1 2022-08-11 12:50:06 +02:00
test_suite_pkcs1_v21.function Adjust dependencies in test_suite_pkcs1_v21 2022-08-11 12:50:06 +02:00
test_suite_pkcs5.data
test_suite_pkcs5.function
test_suite_pkcs12.data Add expected output for tests 2021-12-10 20:53:59 +00:00
test_suite_pkcs12.function Add expected output for tests 2021-12-10 20:53:59 +00:00
test_suite_pkparse.data test_suite_pem, test_suite_pkparse: Adjust dependecies 2022-08-19 10:15:56 +02:00
test_suite_pkparse.function test_suite_pem, test_suite_pkparse: Adjust dependecies 2022-08-19 10:15:56 +02:00
test_suite_pkwrite.data
test_suite_pkwrite.function Add RNG params to private key parsing 2021-06-17 09:38:38 +02:00
test_suite_poly1305.data
test_suite_poly1305.function
test_suite_psa_crypto.data Merge pull request #5834 from mprse/HKDF_1 2022-06-20 15:27:46 +02:00
test_suite_psa_crypto.function Merge pull request #5834 from mprse/HKDF_1 2022-06-20 15:27:46 +02:00
test_suite_psa_crypto_attributes.data
test_suite_psa_crypto_attributes.function
test_suite_psa_crypto_driver_wrappers.data Renames encrypt setup tests 2022-04-07 15:21:47 +01:00
test_suite_psa_crypto_driver_wrappers.function Redo of PR#5345. Fixed spelling and typographical errors found by CodeSpell. 2022-05-11 21:25:51 +01:00
test_suite_psa_crypto_entropy.data Redo of PR#5345. Fixed spelling and typographical errors found by CodeSpell. 2022-05-11 21:25:51 +01:00
test_suite_psa_crypto_entropy.function
test_suite_psa_crypto_generate_key.function Adapt generate_key() test code to mbedTLS standards 2021-11-02 10:52:53 +01:00
test_suite_psa_crypto_hash.data Remove MD2, MD4, RC4, Blowfish and XTEA 2021-06-16 10:34:25 +02:00
test_suite_psa_crypto_hash.function
test_suite_psa_crypto_init.data
test_suite_psa_crypto_init.function Move part of timing module out of the library 2021-06-15 15:47:44 +02:00
test_suite_psa_crypto_metadata.data Add PSA_WANT_ALG_HKDF_EXPAND, PSA_WANT_ALG_HKDF_EXTRACT, adapt code and dependencies 2022-06-03 16:18:15 +02:00
test_suite_psa_crypto_metadata.function test_suite_psa_crypto_metadata: add test cases for the HKDF-Extract/Expand algorithms 2022-06-03 16:18:15 +02:00
test_suite_psa_crypto_not_supported.function Remove key generation when given argument is invalid from NotSupported class 2021-10-20 10:04:55 +02:00
test_suite_psa_crypto_not_supported.misc.data
test_suite_psa_crypto_op_fail.function Use a plausible input size with asymmetric verification 2022-04-05 15:03:39 +02:00
test_suite_psa_crypto_op_fail.misc.data Test attempts to use a public key for a private-key operation 2022-04-05 15:02:44 +02:00
test_suite_psa_crypto_persistent_key.data Add warnings to test code and data about storage format stability 2022-06-20 19:10:35 +02:00
test_suite_psa_crypto_persistent_key.function Add warnings to test code and data about storage format stability 2022-06-20 19:10:35 +02:00
test_suite_psa_crypto_se_driver_hal.data Add ARIA to the PSA API 2021-09-21 11:59:39 +02:00
test_suite_psa_crypto_se_driver_hal.function Fix dependencies in tests 2022-05-05 12:09:03 +02:00
test_suite_psa_crypto_se_driver_hal_mocks.data
test_suite_psa_crypto_se_driver_hal_mocks.function
test_suite_psa_crypto_slot_management.data Remove dependency of builtin keys on storage 2021-08-17 02:46:00 +05:30
test_suite_psa_crypto_slot_management.function Redo of PR#5345. Fixed spelling and typographical errors found by CodeSpell. 2022-05-11 21:25:51 +01:00
test_suite_psa_crypto_storage_format.function exercise_key_agreement_key: add special handling for HKDF_EXPAND 2022-06-14 14:41:42 +02:00
test_suite_psa_crypto_storage_format.misc.data Remove obsolete MBEDTLS_xxx dependencies 2021-07-13 17:12:53 +02:00
test_suite_psa_its.data BUGFIX: PSA test vectors use UID 1 instead of 0. 2022-02-08 15:19:26 +01:00
test_suite_psa_its.function Add warnings to test code and data about storage format stability 2022-06-20 19:10:35 +02:00
test_suite_random.data
test_suite_random.function
test_suite_rsa.data Apply test data changes for conflicting cases 2022-08-01 15:17:45 +01:00
test_suite_rsa.function Apply test data changes for conflicting cases 2022-08-01 15:17:45 +01:00
test_suite_shax.data
test_suite_shax.function Rename the _ret() functions 2021-06-08 16:45:41 +02:00
test_suite_ssl.data fix typo/format/name issues 2022-07-22 23:09:40 +08:00
test_suite_ssl.function Merge pull request #6169 from tom-cosgrove-arm/fix-incorrect-use-of-mbedtls_ecp_group_id 2022-08-22 17:26:18 +02:00
test_suite_timing.data Remove the dependency on MBEDTLS_HAVE_TIME from MBEDTLS_TIMING_C 2022-04-08 04:41:42 -04:00
test_suite_timing.function Move part of timing module out of the library 2021-06-15 15:47:44 +02:00
test_suite_version.data Bump version to 3.2.1 2022-07-12 10:51:55 +01:00
test_suite_version.function
test_suite_x509parse.data Change the dependencies in pem.c to xxx_BASED_ON_USE_PSA and related files 2022-08-19 10:15:56 +02:00
test_suite_x509parse.function x509 tests: adjust dependencies 2022-08-19 10:15:56 +02:00
test_suite_x509write.data Change the dependencies in pem.c to xxx_BASED_ON_USE_PSA and related files 2022-08-19 10:15:56 +02:00
test_suite_x509write.function Change the dependencies in pem.c to xxx_BASED_ON_USE_PSA and related files 2022-08-19 10:15:56 +02:00