diff options
author | Rob Austein <sra@hactrn.net> | 2007-03-12 00:33:07 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2007-03-12 00:33:07 +0000 |
commit | 2e11ad97d4b6e659af7042141d654bc25cd1962f (patch) | |
tree | 46e48a26c103ec43291536730f34e75cf3d9d03b | |
parent | 5f4487c1f8f55a3e2c3ce612a568e5a1f08d4bd9 (diff) |
Incomplete IPC::Open2() invocation of openssl smime for CMS.
svn path=/scripts/xml-parse-test.pl; revision=484
-rwxr-xr-x | scripts/xml-parse-test.pl | 79 |
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"); |