| #! /usr/bin/env perl |
| # Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved. |
| # |
| # Licensed under the Apache License 2.0 (the "License"). You may not use |
| # this file except in compliance with the License. You can obtain a copy |
| # in the file LICENSE in the source distribution or at |
| # https://www.openssl.org/source/license.html |
| |
| |
| use strict; |
| use warnings; |
| |
| use OpenSSL::Test; |
| use OpenSSL::Test::Utils; |
| |
| setup("test_rand_config"); |
| |
| my @rand_tests = ( |
| { drbg => 'HASH-DRBG', |
| digest => 'SHA2-512/256', |
| properties => '', |
| expected => ["HASH-DRBG", "digest: 'SHA2-512/256'"], |
| desc => 'HASH-DRBG SHA2-512/256' }, |
| |
| { drbg => 'HASH-DRBG', |
| digest => 'SHA3-256', |
| properties => '', |
| expected => ["HASH-DRBG", "digest: 'SHA3-512'"], |
| desc => 'HASH-DRBG SHA3/512' }, |
| |
| { drbg => 'HMAC-DRBG', |
| digest => 'SHA3-256', |
| properties => '', |
| expected => ["HMAC-DRBG", "mac: HMAC", "digest: 'SHA3-256'"], |
| desc => 'HMAC-DRBG SHA3/256' }, |
| |
| { cipher => 'AES-128-CTR', |
| expected => ["CTR-DRBG", "cipher: 'AES-128-CTR'"], |
| desc => 'CTR-DRBG AES-128 no DRBG' }, |
| { expected => ["CTR-DRBG", "cipher: 'AES-256-CTR'"], |
| desc => 'CTR-DRBG AES-256 defaults' }, |
| ); |
| |
| my @aria_tests = ( |
| { drbg => 'CTR-DRBG', |
| cipher => 'ARIA-128-CTR', |
| properties => '', |
| expected => ["CTR-DRBG", "cipher: 'ARIA-128-CTR'"], |
| desc => 'CTR-DRBG ARIA-128' }, |
| |
| { drbg => 'CTR-DRBG', |
| cipher => 'ARIA-128-CTR', |
| properties => '', |
| expected => ["CTR-DRBG", "cipher: 'ARIA-128-CTR'"], |
| desc => 'CTR-DRBG ARIA-256' }, |
| ); |
| |
| push @rand_tests, @aria_tests unless disabled("aria"); |
| |
| plan tests => scalar @rand_tests; |
| |
| my $contents =<<'CONFIGEND'; |
| openssl_conf = openssl_init |
| |
| [openssl_init] |
| random = random_section |
| |
| [random_section] |
| CONFIGEND |
| |
| foreach (@rand_tests) { |
| my $tmpfile = 'rand_config.cfg'; |
| open(my $cfg, '>', $tmpfile) or die "Could not open file"; |
| print $cfg $contents; |
| if ($_->{drbg}) { |
| print $cfg "random = $_->{drbg}\n"; |
| } |
| if ($_->{cipher}) { |
| print $cfg "cipher = $_->{cipher}\n"; |
| } |
| if ($_->{digest}) { |
| print $cfg "digest = $_->{digest}\n" |
| } |
| close $cfg; |
| |
| $ENV{OPENSSL_CONF} = $tmpfile; |
| |
| ok(comparelines($_->{expected}), $_->{desc}); |
| } |
| |
| # Check that the stdout output contains the expected values. |
| sub comparelines { |
| my @lines = run(app(["openssl", "list", "--random-instances"]), |
| capture => 1); |
| |
| foreach (@_) { |
| if ( !grep( /$_/, @lines ) ) { |
| print "Cannot find: $_\n"; |
| return 0; |
| } |
| } |
| return 1; |
| } |