lib/saml/kit/signature.rb in saml-kit-0.2.2 vs lib/saml/kit/signature.rb in saml-kit-0.2.3

- old
+ new

@@ -1,78 +1,36 @@ module Saml module Kit class Signature - SIGNATURE_METHODS = { - SHA1: "http://www.w3.org/2000/09/xmldsig#rsa-sha1", - SHA224: "http://www.w3.org/2001/04/xmldsig-more#rsa-sha224", - SHA256: "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256", - SHA384: "http://www.w3.org/2001/04/xmldsig-more#rsa-sha384", - SHA512: "http://www.w3.org/2001/04/xmldsig-more#rsa-sha512", - }.freeze - DIGEST_METHODS = { - SHA1: "http://www.w3.org/2000/09/xmldsig#SHA1", - SHA224: "http://www.w3.org/2001/04/xmldsig-more#sha224", - SHA256: "http://www.w3.org/2001/04/xmlenc#sha256", - SHA384: "http://www.w3.org/2001/04/xmldsig-more#sha384", - SHA512: "http://www.w3.org/2001/04/xmlenc#sha512", - }.freeze + attr_reader :sign, :xml + attr_reader :configuration - attr_reader :configuration, :sign, :xml - def initialize(xml, configuration:, sign: true) - @xml = xml @configuration = configuration @sign = sign - @reference_ids = [] + @xml = xml end def template(reference_id) return unless sign - return if reference_id.blank? - @reference_ids << reference_id - - xml.Signature "xmlns" => Namespaces::XMLDSIG do - xml.SignedInfo do - xml.CanonicalizationMethod Algorithm: "http://www.w3.org/2001/10/xml-exc-c14n#" - xml.SignatureMethod Algorithm: SIGNATURE_METHODS[configuration.signature_method] - xml.Reference URI: "##{reference_id}" do - xml.Transforms do - xml.Transform Algorithm: "http://www.w3.org/2000/09/xmldsig#enveloped-signature" - xml.Transform Algorithm: "http://www.w3.org/2001/10/xml-exc-c14n#" - end - xml.DigestMethod Algorithm: DIGEST_METHODS[configuration.digest_method] - xml.DigestValue "" - end - end - xml.SignatureValue "" - xml.KeyInfo do - xml.X509Data do - xml.X509Certificate configuration.stripped_signing_certificate - end - end - end + signature = signatures.build(reference_id) + Template.new(signature).to_xml(xml: xml) end def finalize - return xml.target! unless sign - - raw_xml = xml.target! - @reference_ids.each do |reference_id| - raw_xml = Xmldsig::SignedDocument.new(raw_xml).sign(private_key) - end - raw_xml + signatures.complete(xml.target!) end def self.sign(sign: true, xml: ::Builder::XmlMarkup.new, configuration: Saml::Kit.configuration) signature = new(xml, sign: sign, configuration: configuration) yield xml, signature signature.finalize end private - def private_key - configuration.signing_private_key + def signatures + @signatures ||= Saml::Kit::Signatures.new(configuration: configuration, sign: sign) end end end end