xref: /netbsd-src/crypto/external/bsd/openssl.old/dist/test/recipes/tconversion.pl (revision 4724848cf0da353df257f730694b7882798e5daf)
1#! /usr/bin/env perl
2# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
3#
4# Licensed under the OpenSSL license (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 File::Compare qw/compare_text/;
14use File::Copy;
15use OpenSSL::Test qw/:DEFAULT/;
16
17my %conversionforms = (
18    # Default conversion forms.  Other series may be added with
19    # specific test types as key.
20    "*"		=> [ "d", "p" ],
21    "msb"	=> [ "d", "p", "msblob" ],
22    );
23sub tconversion {
24    my $testtype = shift;
25    my $t = shift;
26    my @conversionforms =
27	defined($conversionforms{$testtype}) ?
28	@{$conversionforms{$testtype}} :
29	@{$conversionforms{"*"}};
30    my @openssl_args = @_;
31    if (!@openssl_args) { @openssl_args = ($testtype); }
32
33    my $n = scalar @conversionforms;
34    my $totaltests =
35	1			# for initializing
36	+ $n			# initial conversions from p to all forms (A)
37	+ $n*$n			# conversion from result of A to all forms (B)
38	+ 1			# comparing original test file to p form of A
39	+ $n*($n-1);		# comparing first conversion to each fom in A with B
40    $totaltests-- if ($testtype eq "p7d"); # no comparison of original test file
41    plan tests => $totaltests;
42
43    my @cmd = ("openssl", @openssl_args);
44
45    my $init;
46    if (scalar @openssl_args > 0 && $openssl_args[0] eq "pkey") {
47	$init = ok(run(app([@cmd, "-in", $t, "-out", "$testtype-fff.p"])),
48		   'initializing');
49    } else {
50	$init = ok(copy($t, "$testtype-fff.p"), 'initializing');
51    }
52    if (!$init) {
53	diag("Trying to copy $t to $testtype-fff.p : $!");
54    }
55
56  SKIP: {
57      skip "Not initialized, skipping...", 22 unless $init;
58
59      foreach my $to (@conversionforms) {
60	  ok(run(app([@cmd,
61		      "-in", "$testtype-fff.p",
62		      "-inform", "p",
63		      "-out", "$testtype-f.$to",
64		      "-outform", $to])),
65	     "p -> $to");
66      }
67
68      foreach my $to (@conversionforms) {
69	  foreach my $from (@conversionforms) {
70	      ok(run(app([@cmd,
71			  "-in", "$testtype-f.$from",
72			  "-inform", $from,
73			  "-out", "$testtype-ff.$from$to",
74			  "-outform", $to])),
75		 "$from -> $to");
76	  }
77      }
78
79      if ($testtype ne "p7d") {
80	  is(cmp_text("$testtype-fff.p", "$testtype-f.p"), 0,
81	     'comparing orig to p');
82      }
83
84      foreach my $to (@conversionforms) {
85	  next if $to eq "d";
86	  foreach my $from (@conversionforms) {
87	      is(cmp_text("$testtype-f.$to", "$testtype-ff.$from$to"), 0,
88		 "comparing $to to $from$to");
89	  }
90      }
91    }
92    unlink glob "$testtype-f.*";
93    unlink glob "$testtype-ff.*";
94    unlink glob "$testtype-fff.*";
95}
96
97sub cmp_text {
98    return compare_text(@_, sub {
99        $_[0] =~ s/\R//g;
100        $_[1] =~ s/\R//g;
101        return $_[0] ne $_[1];
102    });
103}
104
1051;
106