1e1051a39Sopenharmony_ci#! /usr/bin/env perl
2e1051a39Sopenharmony_ci# Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
3e1051a39Sopenharmony_ci#
4e1051a39Sopenharmony_ci# Licensed under the Apache License 2.0 (the "License").  You may not use
5e1051a39Sopenharmony_ci# this file except in compliance with the License.  You can obtain a copy
6e1051a39Sopenharmony_ci# in the file LICENSE in the source distribution or at
7e1051a39Sopenharmony_ci# https://www.openssl.org/source/license.html
8e1051a39Sopenharmony_ci
9e1051a39Sopenharmony_ciuse strict;
10e1051a39Sopenharmony_ciuse warnings;
11e1051a39Sopenharmony_ci
12e1051a39Sopenharmony_ciuse OpenSSL::Test qw/:DEFAULT with bldtop_file srctop_file cmdstr/;
13e1051a39Sopenharmony_ciuse OpenSSL::Test::Utils;
14e1051a39Sopenharmony_ci
15e1051a39Sopenharmony_cisetup("test_verify_store");
16e1051a39Sopenharmony_ci
17e1051a39Sopenharmony_ciplan tests => 10;
18e1051a39Sopenharmony_ci
19e1051a39Sopenharmony_cimy $dummycnf = srctop_file("apps", "openssl.cnf");
20e1051a39Sopenharmony_cimy $cakey = srctop_file("test", "certs", "ca-key.pem");
21e1051a39Sopenharmony_cimy $ukey = srctop_file("test", "certs", "ee-key.pem");
22e1051a39Sopenharmony_ci
23e1051a39Sopenharmony_cimy $cnf = srctop_file("test", "ca-and-certs.cnf");
24e1051a39Sopenharmony_cimy $CAkey = "keyCA.ss";
25e1051a39Sopenharmony_cimy $CAcert="certCA.ss";
26e1051a39Sopenharmony_cimy $CAserial="certCA.srl";
27e1051a39Sopenharmony_cimy $CAreq="reqCA.ss";
28e1051a39Sopenharmony_cimy $CAreq2="req2CA.ss"; # temp
29e1051a39Sopenharmony_cimy $Ukey="keyU.ss";
30e1051a39Sopenharmony_cimy $Ureq="reqU.ss";
31e1051a39Sopenharmony_cimy $Ucert="certU.ss";
32e1051a39Sopenharmony_ci
33e1051a39Sopenharmony_ciSKIP: {
34e1051a39Sopenharmony_ci    req( 'make cert request',
35e1051a39Sopenharmony_ci         qw(-new -section userreq),
36e1051a39Sopenharmony_ci         -config       => $cnf,
37e1051a39Sopenharmony_ci         -out          => $CAreq,
38e1051a39Sopenharmony_ci         -key          => $cakey,
39e1051a39Sopenharmony_ci         -keyout       => $CAkey );
40e1051a39Sopenharmony_ci
41e1051a39Sopenharmony_ci    skip 'failure', 8 unless
42e1051a39Sopenharmony_ci        x509( 'convert request into self-signed cert',
43e1051a39Sopenharmony_ci              qw(-req -CAcreateserial -days 30),
44e1051a39Sopenharmony_ci              qw(-extensions v3_ca),
45e1051a39Sopenharmony_ci              -in       => $CAreq,
46e1051a39Sopenharmony_ci              -out      => $CAcert,
47e1051a39Sopenharmony_ci              -signkey  => $CAkey,
48e1051a39Sopenharmony_ci              -extfile  => $cnf );
49e1051a39Sopenharmony_ci
50e1051a39Sopenharmony_ci    skip 'failure', 7 unless
51e1051a39Sopenharmony_ci        x509( 'convert cert into a cert request',
52e1051a39Sopenharmony_ci              qw(-x509toreq),
53e1051a39Sopenharmony_ci              -in       => $CAcert,
54e1051a39Sopenharmony_ci              -out      => $CAreq2,
55e1051a39Sopenharmony_ci              -signkey  => $CAkey );
56e1051a39Sopenharmony_ci
57e1051a39Sopenharmony_ci    skip 'failure', 6 unless
58e1051a39Sopenharmony_ci        req( 'verify request 1',
59e1051a39Sopenharmony_ci             qw(-verify -noout -section userreq),
60e1051a39Sopenharmony_ci             -config    => $dummycnf,
61e1051a39Sopenharmony_ci             -in        => $CAreq );
62e1051a39Sopenharmony_ci
63e1051a39Sopenharmony_ci    skip 'failure', 5 unless
64e1051a39Sopenharmony_ci        req( 'verify request 2',
65e1051a39Sopenharmony_ci             qw(-verify -noout -section userreq),
66e1051a39Sopenharmony_ci             -config    => $dummycnf,
67e1051a39Sopenharmony_ci             -in        => $CAreq2 );
68e1051a39Sopenharmony_ci
69e1051a39Sopenharmony_ci    skip 'failure', 4 unless
70e1051a39Sopenharmony_ci        verify( 'verify signature',
71e1051a39Sopenharmony_ci                -CAstore => $CAcert,
72e1051a39Sopenharmony_ci                $CAcert );
73e1051a39Sopenharmony_ci
74e1051a39Sopenharmony_ci    skip 'failure', 3 unless
75e1051a39Sopenharmony_ci        req( 'make a user cert request',
76e1051a39Sopenharmony_ci             qw(-new -section userreq),
77e1051a39Sopenharmony_ci             -config  => $cnf,
78e1051a39Sopenharmony_ci             -out     => $Ureq,
79e1051a39Sopenharmony_ci             -key     => $ukey,
80e1051a39Sopenharmony_ci             -keyout  => $Ukey );
81e1051a39Sopenharmony_ci
82e1051a39Sopenharmony_ci    skip 'failure', 2 unless
83e1051a39Sopenharmony_ci        x509( 'sign user cert request',
84e1051a39Sopenharmony_ci              qw(-req -CAcreateserial -days 30 -extensions v3_ee),
85e1051a39Sopenharmony_ci              -in     => $Ureq,
86e1051a39Sopenharmony_ci              -out    => $Ucert,
87e1051a39Sopenharmony_ci              -CA     => $CAcert,
88e1051a39Sopenharmony_ci              -CAkey  => $CAkey,
89e1051a39Sopenharmony_ci              -CAserial => $CAserial,
90e1051a39Sopenharmony_ci              -extfile => $cnf )
91e1051a39Sopenharmony_ci        && verify( undef,
92e1051a39Sopenharmony_ci                   -CAstore => $CAcert,
93e1051a39Sopenharmony_ci                   $Ucert );
94e1051a39Sopenharmony_ci
95e1051a39Sopenharmony_ci    skip 'failure', 0 unless
96e1051a39Sopenharmony_ci        x509( 'Certificate details',
97e1051a39Sopenharmony_ci              qw(-subject -issuer -startdate -enddate -noout),
98e1051a39Sopenharmony_ci              -in     => $Ucert );
99e1051a39Sopenharmony_ci}
100e1051a39Sopenharmony_ci
101e1051a39Sopenharmony_cisub verify {
102e1051a39Sopenharmony_ci    my $title = shift;
103e1051a39Sopenharmony_ci
104e1051a39Sopenharmony_ci    ok(run(app([qw(openssl verify), @_])), $title);
105e1051a39Sopenharmony_ci}
106e1051a39Sopenharmony_ci
107e1051a39Sopenharmony_cisub req {
108e1051a39Sopenharmony_ci    my $title = shift;
109e1051a39Sopenharmony_ci
110e1051a39Sopenharmony_ci    ok(run(app([qw(openssl req), @_])), $title);
111e1051a39Sopenharmony_ci}
112e1051a39Sopenharmony_ci
113e1051a39Sopenharmony_cisub x509 {
114e1051a39Sopenharmony_ci    my $title = shift;
115e1051a39Sopenharmony_ci
116e1051a39Sopenharmony_ci    ok(run(app([qw(openssl x509), @_])), $title);
117e1051a39Sopenharmony_ci}
118