diff --git a/tsa2.pl b/tsa2.pl new file mode 100644 index 0000000000000000000000000000000000000000..ad42afc5e6b41af685e4b5964e5cfe72a560702b --- /dev/null +++ b/tsa2.pl @@ -0,0 +1,103 @@ +#!/usr/bin/env perl +# +# tsa2.pl en un script en perl para Sellar y/o Verificar un archivo en la BFA. +# basado en tsa2.sh de Robert Martin-Legene +# Autor: Rafael Bidegain, rbidegain@loteriadelaciudad.gob.ar +# +# Licencia: GPLv2-only, 21 de mayo de 2021 +# + +use Digest::file qw(digest_file_hex); +use LWP::UserAgent; +use HTTP::Request (); + + +sub existeArchivo() { + $file = @_[0]; + return (-e $file); +} + +sub getSha(){ + $file = @_[0]; + return digest_file_hex($file, "SHA-256"); +} + +sub formaDeUso() { + print "forma de uso:\n"; + print "./tsa2.pl stamp|verify archivo\n"; +} + +sub sellar(){ + my $hash = @_[0]; + my $uri = "https://tsa2.buenosaires.gob.ar:443/stamp"; + my $json = '{"hashes":["' . $hash . '"]}'; + my $req = HTTP::Request->new( 'POST', $uri ); + $req->header( 'Content-Type' => 'application/json' ); + $req->content( $json ); + + my $lwp = LWP::UserAgent->new; + $lwp->request( $req ); +} + +sub verificar(){ + my $hash = @_[0]; + my $URL = "https://tsa2.buenosaires.gob.ar:443/verify/$hash"; + + my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 1 }); + my $header = HTTP::Request->new(GET => $URL); + my $request = HTTP::Request->new('GET', $URL, $header); + my $response = $ua->request($request); + + if ($response->is_success){ + #print "URL:$URL\nHeaders:\n"; + #print $response->headers_as_string; + print $response->content,"\n"; + }elsif ($response->is_error){ + print "Error:$URL\n"; + print $response->error_as_HTML, "\n"; + } +} + +#--------------------------------------------------------------------- +# Comienzo +#--------------------------------------------------------------------- +#print "argumentos: $#ARGV \n"; +#print "$ARGV[0] \n"; +#print "$ARGV[1] \n"; +#print "\n------------------------\n"; +if ($#ARGV != 1) { + print "ERROR. Se requieren dos argumentos\n\n"; + &formaDeUso(); + exit(1); +} + + +my $archivo = $ARGV[1]; + +if (&existeArchivo($archivo) ){ + $sha = &getSha($archivo); + print "$sha\n"; + + if ($ARGV[0] eq "stamp") { + &sellar($sha); + #print "sellado\n"; + } + else { + if ($ARGV[0] eq"verify") { + &verificar($sha); + #print "verificado\n"; + } + else { + print "ERROR. La acción a realizar debe ser stamp o verify\n"; + print "\"$ARGV[0]\" no es una acción contemplada\n\n"; + + formaDeUso(); + exit(1); + } + } +} +else { + print "ERROR. No existe el archivo $archivo\n\n"; + &formaDeUso(); + exit(1); +}