class BuhoCfdi::Key

Attributes

private_key[R]

Public Class Methods

new(file, password=nil) click to toggle source
# File lib/buho_cfdi/key.rb, line 8
def initialize(file, password=nil)
  if file.is_a? String
    @private_key = file
  end
end

Public Instance Methods

generate_seal(xml) click to toggle source
# File lib/buho_cfdi/key.rb, line 21
def generate_seal(xml)
  chain       = original_chain(xml)
  key         = OpenSSL::PKey::RSA.new(@private_key)
  digester    = OpenSSL::Digest::SHA256.new
  signature   = key.sign(digester, chain)
  signature   = Base64.strict_encode64(signature)
  signature
end
original_chain(invoice) click to toggle source
# File lib/buho_cfdi/key.rb, line 30
def original_chain(invoice)
    invoice   = invoice
    xslt      = Nokogiri::XSLT(File.read('storage/xslt/cadenaoriginal_3_3.xslt'))
    chain     = xslt.transform(invoice)
    chain.text.gsub("\n","")
end
seal(xml) click to toggle source
# File lib/buho_cfdi/key.rb, line 14
def seal(xml)
  xml = Nokogiri::XML(xml)
  signature = generate_seal(xml)
  xml.at_css('cfdi|Comprobante').set_attribute('Sello',signature)
  xml.to_xml
end