Class: Saml::Kit::Signature
- Inherits:
-
Object
- Object
- Saml::Kit::Signature
- Includes:
- ActiveModel::Validations, Translatable
- Defined in:
- lib/saml/kit/signature.rb
Overview
This class is responsible for validating an xml digital signature in an xml document.
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Instance Method Summary collapse
- #canonicalization_method ⇒ Object
-
#certificate ⇒ Object
Returns the embedded X509 Certificate.
- #digest_method ⇒ Object
- #digest_value ⇒ Object
- #expected_digest_value ⇒ Object
-
#initialize(node) ⇒ Signature
constructor
A new instance of Signature.
- #present? ⇒ Boolean
- #signature_method ⇒ Object
- #signature_value ⇒ Object
-
#to_h ⇒ Object
Returns the XML Hash.
- #to_s ⇒ Object
- #to_xml(pretty: nil) ⇒ Object
- #transforms ⇒ Object
-
#trusted?(metadata) ⇒ Boolean
Returns true when the fingerprint of the certificate matches one of the certificates registered in the metadata.
Constructor Details
#initialize(node) ⇒ Signature
Returns a new instance of Signature.
17 18 19 20 |
# File 'lib/saml/kit/signature.rb', line 17 def initialize(node) @name = 'Signature' @node = node end |
Instance Attribute Details
#name ⇒ Object (readonly)
Returns the value of attribute name.
15 16 17 |
# File 'lib/saml/kit/signature.rb', line 15 def name @name end |
Instance Method Details
#canonicalization_method ⇒ Object
61 62 63 64 |
# File 'lib/saml/kit/signature.rb', line 61 def canonicalization_method xpath = './ds:SignedInfo/ds:CanonicalizationMethod/@Algorithm' at_xpath(xpath).try(:value) end |
#certificate ⇒ Object
Returns the embedded X509 Certificate
23 24 25 26 27 28 |
# File 'lib/saml/kit/signature.rb', line 23 def certificate xpath = './ds:KeyInfo/ds:X509Data/ds:X509Certificate' value = at_xpath(xpath).try(:text) return if value.nil? ::Xml::Kit::Certificate.new(value, use: :signing) end |
#digest_method ⇒ Object
48 49 50 51 |
# File 'lib/saml/kit/signature.rb', line 48 def digest_method xpath = './ds:SignedInfo/ds:Reference/ds:DigestMethod/@Algorithm' at_xpath(xpath).try(:value) end |
#digest_value ⇒ Object
37 38 39 |
# File 'lib/saml/kit/signature.rb', line 37 def digest_value at_xpath('./ds:SignedInfo/ds:Reference/ds:DigestValue').try(:text) end |
#expected_digest_value ⇒ Object
41 42 43 44 45 46 |
# File 'lib/saml/kit/signature.rb', line 41 def expected_digest_value digests = dsignature.references.map do |xxx| Base64.encode64(xxx.calculate_digest_value).chomp end digests.count > 1 ? digests : digests[0] end |
#present? ⇒ Boolean
83 84 85 |
# File 'lib/saml/kit/signature.rb', line 83 def present? node.present? end |
#signature_method ⇒ Object
57 58 59 |
# File 'lib/saml/kit/signature.rb', line 57 def signature_method at_xpath('./ds:SignedInfo/ds:SignatureMethod/@Algorithm').try(:value) end |
#signature_value ⇒ Object
53 54 55 |
# File 'lib/saml/kit/signature.rb', line 53 def signature_value at_xpath('./ds:SignatureValue').try(:text) end |
#to_h ⇒ Object
Returns the XML Hash.
79 80 81 |
# File 'lib/saml/kit/signature.rb', line 79 def to_h @to_h ||= present? ? Hash.from_xml(to_xml)['Signature'] : {} end |
#to_s ⇒ Object
91 92 93 |
# File 'lib/saml/kit/signature.rb', line 91 def to_s node.to_s end |
#to_xml(pretty: nil) ⇒ Object
87 88 89 |
# File 'lib/saml/kit/signature.rb', line 87 def to_xml(pretty: nil) pretty ? node.to_xml(indent: 2) : to_s end |
#transforms ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/saml/kit/signature.rb', line 66 def transforms xpath = xpath_for([ '.', 'ds:SignedInfo', 'ds:Reference', 'ds:Transforms', 'ds:Transform', '@Algorithm', ]) node.search(xpath, Saml::Kit::Document::NAMESPACES).try(:map, &:value) end |
#trusted?(metadata) ⇒ Boolean
Returns true when the fingerprint of the certificate matches one of the certificates registered in the metadata.
32 33 34 35 |
# File 'lib/saml/kit/signature.rb', line 32 def trusted?() return false if .nil? .matches?(certificate.fingerprint, use: :signing).present? end |