class SunatInvoice::Signature
Constants
- C14N_ALGORITHM
- DIGEST_ALGORITHM
- SIGNATURE_ALGORITHM
- TRANSFORMATION_ALGORITHM
Attributes
provider[RW]
Public Instance Methods
build_digital_attachment(xml)
click to toggle source
# File lib/sunat_invoice/signature.rb, line 38 def build_digital_attachment(xml) xml['cac'].DigitalSignatureAttachment do xml['cac'].ExternalReference do xml['cbc'].URI "##{provider.signature_location_id}" end end end
build_signatory_party(xml)
click to toggle source
# File lib/sunat_invoice/signature.rb, line 27 def build_signatory_party(xml) xml['cac'].SignatoryParty do xml['cac'].PartyIdentification do xml['cbc'].ID provider.ruc end xml['cac'].PartyName do xml['cbc'].Name provider.name end end end
build_transforms(xml)
click to toggle source
# File lib/sunat_invoice/signature.rb, line 73 def build_transforms(xml) xml['ds'].Transforms do xml['ds'].Transform Algorithm: TRANSFORMATION_ALGORITHM end end
sign(invoice_xml)
click to toggle source
# File lib/sunat_invoice/signature.rb, line 46 def sign(invoice_xml) options = { id_attr: provider.signature_location_id } doc = Xmldsig::SignedDocument.new(invoice_xml, options) doc.sign(private_key) end
signature_ext(xml)
click to toggle source
# File lib/sunat_invoice/signature.rb, line 52 def signature_ext(xml) ubl_ext(xml) do xml['ds'].Signature(Id: provider.signature_location_id) do signed_info xml signature_value xml end end end
signature_value(xml)
click to toggle source
# File lib/sunat_invoice/signature.rb, line 79 def signature_value(xml) xml['ds'].SignatureValue xml['ds'].KeyInfo do xml['ds'].X509Data do xml['ds'].X509Certificate encoded_certificate end end end
signed_info(xml)
click to toggle source
# File lib/sunat_invoice/signature.rb, line 61 def signed_info(xml) xml['ds'].SignedInfo do xml['ds'].CanonicalizationMethod Algorithm: C14N_ALGORITHM xml['ds'].SignatureMethod Algorithm: SIGNATURE_ALGORITHM xml['ds'].Reference URI: '' do build_transforms(xml) xml['ds'].DigestMethod Algorithm: DIGEST_ALGORITHM xml['ds'].DigestValue end end end
signer_data(xml)
click to toggle source
# File lib/sunat_invoice/signature.rb, line 19 def signer_data(xml) xml['cac'].Signature do xml['cbc'].ID provider.signature_id build_signatory_party(xml) build_digital_attachment(xml) end end
Private Instance Methods
certificate()
click to toggle source
# File lib/sunat_invoice/signature.rb, line 102 def certificate OpenSSL::X509::Certificate.new(file_content(provider.cert_file)) end
encoded_certificate()
click to toggle source
# File lib/sunat_invoice/signature.rb, line 90 def encoded_certificate Base64.encode64(certificate.to_der).gsub(/\n/, '') end
file_content(file)
click to toggle source
# File lib/sunat_invoice/signature.rb, line 94 def file_content(file) open(file) { |f| f.read } end
private_key()
click to toggle source
# File lib/sunat_invoice/signature.rb, line 98 def private_key OpenSSL::PKey::RSA.new(file_content(provider.pk_file)) end