1#! /usr/bin/env perl 2# Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved. 3# 4# Licensed under the Apache License 2.0 (the "License"). You may not use 5# this file except in compliance with the License. You can obtain a copy 6# in the file LICENSE in the source distribution or at 7# https://www.openssl.org/source/license.html 8 9 10use strict; 11use warnings; 12 13use OpenSSL::Test; 14use OpenSSL::Test::Utils; 15 16setup("test_rand_config"); 17 18my @rand_tests = ( 19 { drbg => 'HASH-DRBG', 20 digest => 'SHA2-512/256', 21 properties => '', 22 expected => ["HASH-DRBG", "digest: 'SHA2-512/256'"], 23 desc => 'HASH-DRBG SHA2-512/256' }, 24 25 { drbg => 'HASH-DRBG', 26 digest => 'SHA3-256', 27 properties => '', 28 expected => ["HASH-DRBG", "digest: 'SHA3-512'"], 29 desc => 'HASH-DRBG SHA3/512' }, 30 31 { drbg => 'HMAC-DRBG', 32 digest => 'SHA3-256', 33 properties => '', 34 expected => ["HMAC-DRBG", "mac: HMAC", "digest: 'SHA3-256'"], 35 desc => 'HMAC-DRBG SHA3/256' }, 36 37 { cipher => 'AES-128-CTR', 38 expected => ["CTR-DRBG", "cipher: 'AES-128-CTR'"], 39 desc => 'CTR-DRBG AES-128 no DRBG' }, 40 { expected => ["CTR-DRBG", "cipher: 'AES-256-CTR'"], 41 desc => 'CTR-DRBG AES-256 defaults' }, 42); 43 44my @aria_tests = ( 45 { drbg => 'CTR-DRBG', 46 cipher => 'ARIA-128-CTR', 47 properties => '', 48 expected => ["CTR-DRBG", "cipher: 'ARIA-128-CTR'"], 49 desc => 'CTR-DRBG ARIA-128' }, 50 51 { drbg => 'CTR-DRBG', 52 cipher => 'ARIA-128-CTR', 53 properties => '', 54 expected => ["CTR-DRBG", "cipher: 'ARIA-128-CTR'"], 55 desc => 'CTR-DRBG ARIA-256' }, 56); 57 58push @rand_tests, @aria_tests unless disabled("aria"); 59 60plan tests => scalar @rand_tests; 61 62my $contents =<<'CONFIGEND'; 63openssl_conf = openssl_init 64 65[openssl_init] 66random = random_section 67 68[random_section] 69CONFIGEND 70 71foreach (@rand_tests) { 72 my $tmpfile = 'rand_config.cfg'; 73 open(my $cfg, '>', $tmpfile) or die "Could not open file"; 74 print $cfg $contents; 75 if ($_->{drbg}) { 76 print $cfg "random = $_->{drbg}\n"; 77 } 78 if ($_->{cipher}) { 79 print $cfg "cipher = $_->{cipher}\n"; 80 } 81 if ($_->{digest}) { 82 print $cfg "digest = $_->{digest}\n" 83 } 84 close $cfg; 85 86 $ENV{OPENSSL_CONF} = $tmpfile; 87 88 ok(comparelines($_->{expected}), $_->{desc}); 89} 90 91# Check that the stdout output contains the expected values. 92sub comparelines { 93 my @lines = run(app(["openssl", "list", "--random-instances"]), 94 capture => 1); 95 96 foreach (@_) { 97 if ( !grep( /$_/, @lines ) ) { 98 print "Cannot find: $_\n"; 99 return 0; 100 } 101 } 102 return 1; 103} 104