Class: Cfdi40::SignatureValidator
- Inherits:
-
Object
- Object
- Cfdi40::SignatureValidator
- Defined in:
- lib/cfdi40/signature_validator.rb
Instance Method Summary collapse
- #cert ⇒ Object
-
#initialize(xml) ⇒ SignatureValidator
constructor
A new instance of SignatureValidator.
- #sign ⇒ Object
- #valid? ⇒ Boolean
Constructor Details
#initialize(xml) ⇒ SignatureValidator
Returns a new instance of SignatureValidator.
6 7 8 9 |
# File 'lib/cfdi40/signature_validator.rb', line 6 def initialize(xml) @xml_doc = Nokogiri::XML(xml) end |
Instance Method Details
#cert ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/cfdi40/signature_validator.rb', line 23 def cert return @cert if defined?(@cert) cert_string = @xml_doc.root.attributes["Certificado"].to_s raise Cfdi40::Error, 'Certificate is not included in XML' if cert_string == '' sat_csd = SatCsd.new sat_csd.cert64 = cert_string sat_csd.x509_cert.serial if @xml_doc.root.attributes["NoCertificado"].to_s != sat_csd.no_certificado raise Cfdi40::Error, 'Certificate number in XML does not correspond to the included certificate' end @cert = sat_csd.x509_cert end |
#sign ⇒ Object
16 17 18 19 20 21 |
# File 'lib/cfdi40/signature_validator.rb', line 16 def sign sign = @xml_doc.root.attributes["Sello"].to_s raise Cfdi40::Error, 'CFDI is not signed' if sign == '' Base64.decode64 sign end |
#valid? ⇒ Boolean
11 12 13 14 |
# File 'lib/cfdi40/signature_validator.rb', line 11 def valid? original_content = OriginalContent.generate(@xml_doc.to_s) cert.public_key.verify(OpenSSL::Digest.new('SHA256'), sign, original_content) end |