Class: SAML2::KeyInfo

Inherits:
Base
  • Object
show all
Defined in:
lib/saml2/key.rb

Overview

This represents the XML Signatures <KeyInfo> element, and actually contains a reference to an X.509 certificate, not solely a public key.

Direct Known Subclasses

KeyDescriptor

Instance Attribute Summary collapse

Attributes inherited from Base

#xml

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#decrypt, from_xml, #inspect, load_object_array, load_string_array, lookup_qname, #to_s, #to_xml

Constructor Details

#initialize(x509 = nil) ⇒ KeyInfo

Returns a new instance of KeyInfo.

Parameters:

  • x509 (String) (defaults to: nil)

    The PEM encoded certificate.



16
17
18
# File 'lib/saml2/key.rb', line 16

def initialize(x509 = nil)
  self.x509 = x509
end

Instance Attribute Details

#x509String

Returns The PEM encoded certificate.

Returns:

  • (String)

    The PEM encoded certificate.



13
14
15
# File 'lib/saml2/key.rb', line 13

def x509
  @x509
end

Class Method Details

.format_fingerprint(fingerprint) ⇒ String

Formats a fingerprint as all lowercase, with a : every two characters, stripping all non-hexadecimal characters.

Parameters:

  • fingerprint (String)

Returns:

  • (String)


38
39
40
# File 'lib/saml2/key.rb', line 38

def self.format_fingerprint(fingerprint)
  fingerprint.downcase.gsub(/[^0-9a-f]/, '').gsub(/(\h{2})(?=\h)/, '\1:')
end

Instance Method Details

#build(builder) ⇒ void

This method returns an undefined value.

Serialize this object to XML, as part of a larger document

Parameters:

  • builder (Nokogiri::XML::Builder)

    The builder helper object to serialize to.



48
49
50
51
52
53
54
# File 'lib/saml2/key.rb', line 48

def build(builder)
  builder['dsig'].KeyInfo do |key_info|
    key_info['dsig'].X509Data do |x509_data|
      x509_data['dsig'].X509Certificate(x509)
    end
  end
end

#certificateOpenSSL::X509::Certificate

Returns:

  • (OpenSSL::X509::Certificate)


30
31
32
# File 'lib/saml2/key.rb', line 30

def certificate
  @certificate ||= OpenSSL::X509::Certificate.new(Base64.decode64(x509))
end

#fingerprintString

Returns:

  • (String)


43
44
45
# File 'lib/saml2/key.rb', line 43

def fingerprint
  @fingerprint ||= self.class.format_fingerprint(Digest::SHA1.hexdigest(certificate.to_der))
end

#from_xml(node) ⇒ void

This method returns an undefined value.

Parse an XML element into this object.

Parameters:

  • node (Nokogiri::XML::Element)


21
22
23
# File 'lib/saml2/key.rb', line 21

def from_xml(node)
  self.x509 = node.at_xpath('dsig:KeyInfo/dsig:X509Data/dsig:X509Certificate', Namespaces::ALL)&.content&.strip
end