Skip to content

Instantly share code, notes, and snippets.

@yuvadm
Created November 28, 2014 10:35
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yuvadm/b988ed4e70bbe11cedb4 to your computer and use it in GitHub Desktop.
Save yuvadm/b988ed4e70bbe11cedb4 to your computer and use it in GitHub Desktop.
Perl script for opening signed documents on http://www.mr.gov.il
#!/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