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