From 8df94473d653fc41d6a9cf9d93236eff6c3ead78 Mon Sep 17 00:00:00 2001 From: Rafael Bidegain <brafael@hotmail.com> Date: Thu, 20 May 2021 10:20:47 -0300 Subject: [PATCH] tsa2.rb es un script en ruby fork de tsa2.sh, sella y verifica ejecutandolo desde una consola. --- tsa2.rb | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 tsa2.rb diff --git a/tsa2.rb b/tsa2.rb new file mode 100644 index 0000000..d690438 --- /dev/null +++ b/tsa2.rb @@ -0,0 +1,92 @@ +#!/usr/bin/env ruby +# +# tsa2.rb en un script en ruby 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, 15 de mayo de 2021 +# + +require 'digest' +require 'net/http' +require 'uri' +require 'json' + + +def existeArchivo(file) + return File.exist?(file) +end + +def getSha(file) + return Digest::SHA256.hexdigest( File.read(file) ) +end + +def sellar(sha) +# +# convertido a ruby usando: https://jhawthorn.github.io/curl-to-ruby/ +# + uri = URI.parse("https://tsa2.buenosaires.gob.ar:443/stamp") + request = Net::HTTP::Post.new(uri) + request.content_type = "application/json" + request.body = JSON.dump({ "hashes" => ["#{sha}" ] }) + + req_options = { + use_ssl: uri.scheme == "https", + } + + response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http| + http.request(request) + end +end + +def verificar(sha) + uri = URI("https://tsa2.buenosaires.gob.ar:443/verify/#{sha}"); + +# prueba con la ip de ultima milla +# uri = URI("http://201.190.184.52/verify/#{sha}"); + + response = Net::HTTP.get_response(URI(uri)) + print "#{response}\n" + print "#{response.body}\n" +end + +def formaDeUso + print "forma de uso:\n" + print "./tsa2.rb stamp|verify archivo\n" +end + + +#--------------------------------------------------------------------- +# Comienzo +#--------------------------------------------------------------------- +if ARGV.length != 2 then + print "ERROR. Se requieren dos argumentos\n\n" + formaDeUso + exit(1) +end + + +archivo = ARGV[1] +if existeArchivo(archivo) + sha = getSha(archivo) + #print "#{sha}\n" + case ARGV[0] + when "stamp" + sellar(sha) + #print "sellado\n" + when "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) + end +else + print "ERROR. No existe el archivo #{archivo}\n\n" + formaDeUso + exit(1) +end +exit(0) -- GitLab