module MX::SAT::Certificacion

Public Class Methods

certificado_b64(certificado) click to toggle source
# File lib/MX/SAT/certificacion.rb, line 14
def self.certificado_b64(certificado)
  cert = OpenSSL::X509::Certificate.new(certificado)
  certb64 = cert.to_pem.sub("-----BEGIN CERTIFICATE-----\n", "").sub("\n-----END CERTIFICATE-----\n","")
  certb64.gsub(/[\n\r]/,"")
end
certificado_vigente?(certificado) click to toggle source
# File lib/MX/SAT/certificacion.rb, line 9
def self.certificado_vigente?(certificado)
  cert = ::OpenSSL::X509::Certificate.new(certificado)
  ::Time.now.between?(cert.not_before, cert.not_after)
end
firma_sha256(cadena, llave_privada, passwd = nil) click to toggle source
# File lib/MX/SAT/certificacion.rb, line 29
def self.firma_sha256(cadena, llave_privada, passwd = nil)
  private_key = passwd ? ::OpenSSL::PKey::RSA.new(llave_privada, passwd) : ::OpenSSL::PKey::RSA.new(llave_privada)
  firma = private_key.sign(::OpenSSL::Digest::SHA256.new, cadena)
  ::Base64.encode64(firma).gsub(/[\n\r]/, "")
end
generar_cadena_original(xml, xslt) click to toggle source
# File lib/MX/SAT/certificacion.rb, line 20
def self.generar_cadena_original(xml, xslt)
  xml_doc = Nokogiri::XML(xml, nil, 'UTF-8')
  # libxml no puede transformar XSLT 2.0, así que se editaron los XSLTs del SAT
  # cambiando la versión 2.0 a la 1.0 y usando rutas relativas
  xslt = ::Nokogiri::XSLT(File.open(xslt, 'rb')) # Usar File.open para que los includes del XSLT no fallen
  cadena_original = xslt.transform(xml_doc)
  cadena_original.children.first.to_s
end
num_serial_certificado(certificado) click to toggle source
# File lib/MX/SAT/certificacion.rb, line 5
def self.num_serial_certificado(certificado)
  ::OpenSSL::X509::Certificate.new(certificado).serial.to_s(2)
end