Created
November 28, 2014 10:35
-
-
Save yuvadm/b988ed4e70bbe11cedb4 to your computer and use it in GitHub Desktop.
Perl script for opening signed documents on http://www.mr.gov.il
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl -w | |
use strict; | |
no strict 'refs'; | |
use English; | |
use XML::Simple; | |
use Data::Dumper; | |
use MIME::Base64; | |
# use Crypt::OpenSSL::X509; | |
binmode STDOUT, ":utf8"; | |
for my $file (@ARGV) { | |
my ($id) = ($file =~ m/^([^.]*)/); | |
my @stat = stat($file); | |
my $xml = XMLin($file); | |
my $xmlsig = $xml -> {'gov.il:Signature'}; | |
my $xmldat = $xml -> {'gov.il:SignedObject'} -> {'gov.il:SignedInfo'}; | |
# my $sig = $xmlsig -> {'KeyInfo'} -> {'X509Data'} -> {'X509Certificate'}; | |
# my $decoded = Crypt::X509->new(cert => $sig); | |
# print Dumper($x509); | |
my $data = $xmldat -> {'gov.il:Data'} -> {'content'}; | |
my $enc = $xmldat -> {'gov.il:Data'} -> {'DataEncodingType'}; | |
my $filename = ($xmldat -> {'gov.il:OptionalDataParams'} -> {'gov.il:FileName'}); | |
$filename = "[$id] $filename" if ($id); | |
$filename =~ s/(.{1,60}).*?[.]([^.]*)/$1.$2/; | |
if ($enc eq 'base64') { | |
$data = decode_base64($data); | |
} else { | |
print "$file: Unknown EncodingType ($enc).\n"; | |
next; | |
} | |
open(my $fout,">:raw",$filename) or print "Cannot open file \"$filename\"!\n" and next; | |
syswrite $fout, $data; | |
print "$file: Wrote " . length($data) . " bytes into file \"$filename\".\n"; | |
close($fout); | |
utime $stat[8], $stat[9], $filename; | |
} | |
1; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment