class SamlIdp::SignedInfoBuilder

Constants

DIGEST_METHODS
SIGNATURE_METHODS

Attributes

digest_value[RW]
raw_algorithm[RW]
reference_id[RW]

Public Class Methods

new(reference_id, digest_value, raw_algorithm) click to toggle source
# File lib/saml_idp/signed_info_builder.rb, line 26
def initialize(reference_id, digest_value, raw_algorithm)
  self.reference_id = reference_id
  self.digest_value = digest_value
  self.raw_algorithm = raw_algorithm
end

Public Instance Methods

raw() click to toggle source
# File lib/saml_idp/signed_info_builder.rb, line 32
def raw
  builder = Builder::XmlMarkup.new
  builder.tag! "ds:SignedInfo", "xmlns:ds" => "http://www.w3.org/2000/09/xmldsig#" do |signed_info|
    signed_info.tag!("ds:CanonicalizationMethod", Algorithm: "http://www.w3.org/2001/10/xml-exc-c14n#") {}
    signed_info.tag!("ds:SignatureMethod", Algorithm: signature_method ) {}
    signed_info.tag! "ds:Reference", URI: reference_string do |reference|
      reference.tag! "ds:Transforms" do |transforms|
        transforms.tag!("ds:Transform", Algorithm: "http://www.w3.org/2000/09/xmldsig#enveloped-signature") {}
        transforms.tag!("ds:Transform", Algorithm: "http://www.w3.org/2001/10/xml-exc-c14n#") {}
      end
      reference.tag!("ds:DigestMethod", Algorithm: digest_method) {}
      reference.tag! "ds:DigestValue", digest_value
    end
  end
end
signed() click to toggle source
# File lib/saml_idp/signed_info_builder.rb, line 48
def signed
  encoded.gsub(/\n/, "")
end

Private Instance Methods

clean_algorithm_name() click to toggle source
# File lib/saml_idp/signed_info_builder.rb, line 62
def clean_algorithm_name
  algorithm_name.to_s.downcase
end
digest_method() click to toggle source
# File lib/saml_idp/signed_info_builder.rb, line 52
def digest_method
  DIGEST_METHODS.fetch(clean_algorithm_name, DIGEST_METHODS["sha1"])
end
encoded() click to toggle source
# File lib/saml_idp/signed_info_builder.rb, line 77
def encoded
  key = OpenSSL::PKey::RSA.new(secret_key, password)
  Base64.strict_encode64(key.sign(algorithm.new, raw))
end
password() click to toggle source
# File lib/saml_idp/signed_info_builder.rb, line 72
def password
  SamlIdp.config.password
end
reference_string() click to toggle source
# File lib/saml_idp/signed_info_builder.rb, line 83
def reference_string
  "#_#{reference_id}"
end
secret_key() click to toggle source
# File lib/saml_idp/signed_info_builder.rb, line 67
def secret_key
  SamlIdp.config.secret_key
end
signature_method() click to toggle source
# File lib/saml_idp/signed_info_builder.rb, line 57
def signature_method
  SIGNATURE_METHODS.fetch(clean_algorithm_name, SIGNATURE_METHODS["sha1"])
end