#! /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; }