OpenSSL CVS Repository
http://cvs.openssl.org/
____________________________________________________________
________________
Server: cvs.openssl.org Name: Dr.
Stephen Henson
Root: /v/openssl/cvs Email: steve openssl.org
Module: openssl Date:
13-Mar-2008 02:04:48
Branch: HEAD Handle:
2008031301044700
Added files:
openssl/test runex.pl
Log:
RFC4134 S/MIME examples test script.
Summary:
Revision Changes Path
1.1 +281 -0 openssl/test/runex.pl
____________________________________________________________
________________
patch -p0 <<' .'
Index: openssl/test/runex.pl
============================================================
================
$ cvs diff -u -r0 -r1.1 runex.pl
--- /dev/null 2008-03-13 02:04:06 +0100
+++ runex.pl 2008-03-13 02:04:48 +0100
 -0,0 +1,281 
+# test/runex.pl
+# Written by Dr Stephen N Henson (steve openssl.org) for the OpenSSL
+# project.
+#
+#
============================================================
========
+# Copyright (c) 2008 The OpenSSL Project. All rights
reserved.
+#
+# Redistribution and use in source and binary forms, with
or without
+# modification, are permitted provided that the following
conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above
copyright
+# notice, this list of conditions and the following
disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the
above copyright
+# notice, this list of conditions and the following
disclaimer in
+# the documentation and/or other materials provided
with the
+# distribution.
+#
+# 3. All advertising materials mentioning features or use
of this
+# software must display the following acknowledgment:
+# "This product includes software developed by
the OpenSSL Project
+# for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)&
quot;
+#
+# 4. The names "OpenSSL Toolkit" and
"OpenSSL Project" must not be used to
+# endorse or promote products derived from this
software without
+# prior written permission. For written permission,
please contact
+# licensing OpenSSL.org.
+#
+# 5. Products derived from this software may not be
called "OpenSSL"
+# nor may "OpenSSL" appear in their names
without prior written
+# permission of the OpenSSL Project.
+#
+# 6. Redistributions of any form whatsoever must retain
the following
+# acknowledgment:
+# "This product includes software developed by
the OpenSSL Project
+# for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)&
quot;
+#
+# THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS
IS'' AND ANY
+# EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL
PROJECT OR
+# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED
+# OF THE POSSIBILITY OF SUCH DAMAGE.
+#
============================================================
========
+
+# Perl script to run tests against S/MIME examples in
RFC4134
+# Assumes all files are extracted in an directory called
"examples"
+
+my $badttest = 0;
+my $verbose = 1;
+
+my $cmscmd = "../apps/openssl cms";
+my $convcmd = "../apps/openssl x509 -inform
DER";
+my $exdir = "examples";
+
+my test_list = (
+["3.1.bin" => "dataout"],
+["3.2.bin" => "encode, dataout"],
+["4.1.bin" => "encode, verifyder,
content, dss"],
+["4.2.bin" => "encode, verifyder, cont,
rsa"],
+["4.3.bin" => "encode, verifyder,
cont_extern, dss"],
+["4.4.bin" => "encode, verifyder, cont,
dss"],
+["4.5.bin" => "verifyder, content,
rsa"],
+["4.6.bin" => "encode, verifyder, cont,
dss"],
+["4.7.bin" => "encode, verifyder, cont,
dss"],
+["4.8.eml" => "verifymime, dss"],
+["4.9.eml" => "verifymime, dss"],
+["4.10.bin" => "encode, verifyder,
cont, dss"],
+["4.11.bin" => "encode"],
+["5.1.bin" => "encode"],
+["5.2.bin" => "encode"],
+["6.0.bin" => "encode, digest,
cont"],
+["7.1.bin" => "encode"],
+["7.2.bin" => "encode"]
+);
+
+ if (!-d $exdir)
+ {
+ print STDERR "FATAL ERROR: examples directory
missing!!n";
+ exit 1;
+ }
+
+ system ("$convcmd -in $exdir/CarlDSSSelf.cer -out
$exdir/CarlDSSSelf.pem");
+ system ("$convcmd -in $exdir/CarlRSASelf.cer -out
$exdir/CarlRSASelf.pem");
+
+ $cafile = "$cmsdir/CarlRSASelf.pem" if $tlist
=~ /rsa/;
+
+foreach ( test_list) {
+ my ($file, $tlist) = $_;
+ print "Example file $file:n";
+ if ($tlist =~ /encode/)
+ {
+ run_reencode_test($exdir, $file);
+ }
+ if ($tlist =~ /dataout/)
+ {
+ run_dataout_test($exdir, $file);
+ }
+ if ($tlist =~ /verify/)
+ {
+ run_verify_test($exdir, $tlist, $file);
+ }
+ if ($tlist =~ /digest/)
+ {
+ run_digest_test($exdir, $tlist, $file);
+ }
+
+}
+
+unlink "cms.out";
+unlink "cms.err";
+unlink "tmp.der";
+unlink "tmp.txt";
+
+if ($badtest) {
+ print "n$badtest TESTS FAILED!!n";
+} else {
+ print "n***All tests successful***n";
+}
+
+
+sub run_reencode_test
+ {
+ my ($cmsdir, $tfile) = _;
+ unlink "tmp.der";
+
+ system ("$cmscmd -cmsout -inform DER -outform
DER" .
+ " -in $cmsdir/$tfile -out tmp.der");
+
+ if ($?)
+ {
+ print "tReencode command FAILED!!n";
+ $badtest++;
+ }
+ elsif (!cmp_files("$cmsdir/$tfile",
"tmp.der"))
+ {
+ print "tReencode FAILED!!n";
+ $badtest++;
+ }
+ else
+ {
+ print "tReencode passedn" if $verbose;
+ }
+ }
+
+sub run_dataout_test
+ {
+ my ($cmsdir, $tfile) = _;
+ unlink "tmp.txt";
+
+ system ("$cmscmd -data_out -inform DER" .
+ " -in $cmsdir/$tfile -out tmp.txt");
+
+ if ($?)
+ {
+ print "tDataout command FAILED!!n";
+ $badtest++;
+ }
+ elsif (!cmp_files("$cmsdir/ExContent.bin",
"tmp.txt"))
+ {
+ print "tDataout compare FAILED!!n";
+ $badtest++;
+ }
+ else
+ {
+ print "tDataout passedn" if $verbose;
+ }
+ }
+
+sub run_verify_test
+ {
+ my ($cmsdir, $tlist, $tfile) = _;
+ unlink "tmp.txt";
+
+ $form = "DER" if $tlist =~ /verifyder/;
+ $form = "SMIME" if $tlist =~ /verifymime/;
+ $cafile = "$cmsdir/CarlDSSSelf.pem" if $tlist
=~ /dss/;
+ $cafile = "$cmsdir/CarlRSASelf.pem" if $tlist
=~ /rsa/;
+
+ $cmd = "$cmscmd -verify -inform $form" .
+ " -CAfile $cafile" .
+ " -in $cmsdir/$tfile -out tmp.txt";
+
+ $cmd .= " -content $cmsdir/ExContent.bin" if
$tlist =~ /cont_extern/;
+
+ system ("$cmd 2>cms.err 1>cms.out");
+
+ if ($?)
+ {
+ print "tVerify command FAILED!!n";
+ $badtest++;
+ }
+ elsif ($tlist =~ /cont/ &&
+ !cmp_files("$cmsdir/ExContent.bin",
"tmp.txt"))
+ {
+ print "tVerify content compare FAILED!!n";
+ $badtest++;
+ }
+ else
+ {
+ print "tVerify passedn" if $verbose;
+ }
+ }
+
+sub run_digest_test
+ {
+ my ($cmsdir, $tlist, $tfile) = _;
+ unlink "tmp.txt";
+
+ system ("$cmscmd -digest_verify -inform DER"
.
+ " -in $cmsdir/$tfile -out tmp.txt");
+
+ if ($?)
+ {
+ print "tDigest verify command FAILED!!n";
+ $badtest++;
+ }
+ elsif ($tlist =~ /cont/ &&
+ !cmp_files("$cmsdir/ExContent.bin",
"tmp.txt"))
+ {
+ print "tDigest verify content compare
FAILED!!n";
+ $badtest++;
+ }
+ else
+ {
+ print "tDigest verify passedn" if
$verbose;
+ }
+ }
+
+sub cmp_files
+ {
+ my ($f1, $f2) = _;
+ my ($fp1, $fp2);
+
+ my ($rd1, $rd2);
+
+ if (!open($fp1, "<$f1") ) {
+ print STDERR "Can't Open file $f1n";
+ return 0;
+ }
+
+ if (!open($fp2, "<$f2") ) {
+ print STDERR "Can't Open file $f2n";
+ return 0;
+ }
+
+ binmode $fp1;
+ binmode $fp2;
+
+ my $ret = 0;
+
+ for (;;)
+ {
+ $n1 = sysread $fp1, $rd1, 4096;
+ $n2 = sysread $fp2, $rd2, 4096;
+ last if ($n1 != $n2);
+ last if ($rd1 ne $rd2);
+
+ if ($n1 == 0)
+ {
+ $ret = 1;
+ last;
+ }
+
+ }
+
+ close $fp1;
+ close $fp2;
+
+ return $ret;
+
+ }
+
+
 .
____________________________________________________________
__________
OpenSSL Project http://www.openssl.org
CVS Repository Commit List
openssl-cvs openssl.org
Automated List Manager
majordomo openssl.org
|