aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2007-03-12 00:33:07 +0000
committerRob Austein <sra@hactrn.net>2007-03-12 00:33:07 +0000
commit2e11ad97d4b6e659af7042141d654bc25cd1962f (patch)
tree46e48a26c103ec43291536730f34e75cf3d9d03b
parent5f4487c1f8f55a3e2c3ce612a568e5a1f08d4bd9 (diff)
Incomplete IPC::Open2() invocation of openssl smime for CMS.
svn path=/scripts/xml-parse-test.pl; revision=484
-rwxr-xr-xscripts/xml-parse-test.pl79
1 files changed, 79 insertions, 0 deletions
diff --git a/scripts/xml-parse-test.pl b/scripts/xml-parse-test.pl
index 0628e177..21668ad7 100755
--- a/scripts/xml-parse-test.pl
+++ b/scripts/xml-parse-test.pl
@@ -103,3 +103,82 @@ for my $xml (@xml) {
my $t = $xs->XMLout($x);
print("\n###\n", $xml, "\n", Dumper($x), "\n", $t);
}
+
+__END__
+
+# Test of IPC::Open2
+
+# CMS wrapper for this (not yet written) would look something like:
+#
+# openssl smime -sign -nodetach -outform DER -in foo.xml -out foo.cms \
+# -signer foo.cer -inkey foo.key
+#
+# openssl smime -verify -CApath . -inform DER -in foo.cms -out foo.xml
+
+eval 'exec perl -w -S $0 ${1+"$@"}'
+ if 0;
+
+use strict;
+use IPC::Open2;
+
+my $xml = '
+ <message version="1">
+ <header sender="sender name"
+ recipient = "recipient name"
+ msg_ref="reference" />
+ <list_class ca="ca_name"
+ cert_url="url"
+ cert_ski="g(ski)"
+ cert_serial="serial"
+ cert_aki="g(aki)"
+ status="keyword" />
+ <list_class ca="ca_name"
+ cert_url="url"
+ cert_ski="g(ski)"
+ cert_serial="serial"
+ cert_aki="g(aki)"
+ status="keyword" />
+ <!-- [repeated for each active class where the ISP has resources] -->
+ </message>
+';
+
+sub run2 {
+ my $arg = shift;
+ my $i;
+ my $o;
+ my $pid = open2($o, $i, @_)
+ or die("Couldn't run @_");
+ print($i $arg)
+ or die("Couldn't write to @_");
+ close($i)
+ or die("Couldn't close @_");
+ my @res = <$o>;
+ waitpid($pid, 0)
+ or die("Couldn't reap @_");
+ return @res;
+}
+
+my $p7b = "-----BEGIN PKCS7-----\n";
+my $p7e = "-----END PKCS7-----\n";
+
+sub encode {
+ my $arg = shift;
+ my @res = run2($arg, qw(openssl smime -sign -nodetach -outform PEM -signer foo.cer -inkey foo.key));
+ die("Missing PKCS7 markers")
+ unless $res[0] eq $p7b && $res[@res-1] eq $p7e;
+ return join('', @res[1..@res-2]);
+}
+
+sub decode {
+ my $arg = shift;
+ my @res = run2($p7b . $arg . $p7e, qw(openssl smime -verify -CApath . -inform PEM));
+ return join('', @res);
+}
+
+print("1:\n", $xml, "\n");
+
+my $cms = encode($xml);
+
+print("2:\n", $cms, "\n");
+
+print("3:\n", decode($cms), "\n");