@@ -84,5 +84,42 @@ def setup
8484 assert_equal "Friendly Name" , req_attr . attribute ( "FriendlyName" ) . value
8585 assert_equal "Attribute Value" , REXML ::XPath . first ( xml_doc , "//md:AttributeValue" ) . text . strip
8686 end
87+
88+ describe "when the settings indicate to sign (embedded) the metadata" do
89+ it "create a signed metadata" do
90+ settings = OneLogin ::RubySaml ::Settings . new
91+ settings . issuer = "https://example.com"
92+ settings . name_identifier_format = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
93+ settings . assertion_consumer_service_url = "https://foo.example/saml/consume"
94+ settings . security [ :metadata_signed ] = true
95+ settings . security [ :embed_sign ] = true
96+ settings . certificate = ruby_saml_cert_text
97+ settings . private_key = ruby_saml_key_text
98+ xml_text = OneLogin ::RubySaml ::Metadata . new . generate ( settings )
99+
100+ assert_match %r[<ds:SignatureValue>\s *([a-zA-Z0-9/+=]+)\s *</ds:SignatureValue>]m , xml_text
101+ assert_match %r[<ds:SignatureMethod Algorithm='http://www.w3.org/2000/09/xmldsig#rsa-sha1'/>] , xml_text
102+ assert_match %r[<ds:DigestMethod Algorithm='http://www.w3.org/2000/09/xmldsig#rsa-sha1'/>] , xml_text
103+ end
104+
105+ it "create a signed metadata with 256 digest and signature methods" do
106+ settings = OneLogin ::RubySaml ::Settings . new
107+ settings . issuer = "https://example.com"
108+ settings . name_identifier_format = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
109+ settings . assertion_consumer_service_url = "https://foo.example/saml/consume"
110+ settings . security [ :metadata_signed ] = true
111+ settings . security [ :embed_sign ] = true
112+ settings . security [ :signature_method ] = XMLSecurity ::Document ::SHA256
113+ settings . security [ :digest_method ] = XMLSecurity ::Document ::SHA512
114+ settings . certificate = ruby_saml_cert_text
115+ settings . private_key = ruby_saml_key_text
116+
117+ xml_text = OneLogin ::RubySaml ::Metadata . new . generate ( settings )
118+
119+ assert_match %r[<ds:SignatureValue>\s *([a-zA-Z0-9/+=]+)\s *</ds:SignatureValue>]m , xml_text
120+ assert_match %r[<ds:SignatureMethod Algorithm='http://www.w3.org/2001/04/xmldsig-more#rsa-sha256'/>] , xml_text
121+ assert_match %r[<ds:DigestMethod Algorithm='http://www.w3.org/2001/04/xmldsig-more#rsa-sha512'/>] , xml_text
122+ end
123+ end
87124 end
88125end
0 commit comments