xref: /freebsd/crypto/openssl/test/recipes/20-test_rand_config.t (revision e0c4386e7e71d93b0edc0c8fa156263fc4a8b0b6)
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