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