r-saml 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitignore +14 -0
  4. data/.travis.yml +23 -0
  5. data/Gemfile +6 -0
  6. data/LICENSE +19 -0
  7. data/README.md +584 -0
  8. data/Rakefile +27 -0
  9. data/changelog.md +75 -0
  10. data/gemfiles/nokogiri-1.5.gemfile +5 -0
  11. data/lib/onelogin/ruby-saml.rb +17 -0
  12. data/lib/onelogin/ruby-saml/attribute_service.rb +57 -0
  13. data/lib/onelogin/ruby-saml/attributes.rb +128 -0
  14. data/lib/onelogin/ruby-saml/authrequest.rb +165 -0
  15. data/lib/onelogin/ruby-saml/http_error.rb +7 -0
  16. data/lib/onelogin/ruby-saml/idp_metadata_parser.rb +161 -0
  17. data/lib/onelogin/ruby-saml/logging.rb +30 -0
  18. data/lib/onelogin/ruby-saml/logoutrequest.rb +131 -0
  19. data/lib/onelogin/ruby-saml/logoutresponse.rb +241 -0
  20. data/lib/onelogin/ruby-saml/metadata.rb +123 -0
  21. data/lib/onelogin/ruby-saml/response.rb +735 -0
  22. data/lib/onelogin/ruby-saml/saml_message.rb +158 -0
  23. data/lib/onelogin/ruby-saml/settings.rb +165 -0
  24. data/lib/onelogin/ruby-saml/slo_logoutrequest.rb +258 -0
  25. data/lib/onelogin/ruby-saml/slo_logoutresponse.rb +136 -0
  26. data/lib/onelogin/ruby-saml/utils.rb +172 -0
  27. data/lib/onelogin/ruby-saml/validation_error.rb +7 -0
  28. data/lib/onelogin/ruby-saml/version.rb +5 -0
  29. data/lib/ruby-saml.rb +1 -0
  30. data/lib/schemas/saml-schema-assertion-2.0.xsd +283 -0
  31. data/lib/schemas/saml-schema-authn-context-2.0.xsd +23 -0
  32. data/lib/schemas/saml-schema-authn-context-types-2.0.xsd +821 -0
  33. data/lib/schemas/saml-schema-metadata-2.0.xsd +337 -0
  34. data/lib/schemas/saml-schema-protocol-2.0.xsd +302 -0
  35. data/lib/schemas/sstc-metadata-attr.xsd +35 -0
  36. data/lib/schemas/sstc-saml-attribute-ext.xsd +25 -0
  37. data/lib/schemas/sstc-saml-metadata-algsupport-v1.0.xsd +41 -0
  38. data/lib/schemas/sstc-saml-metadata-ui-v1.0.xsd +89 -0
  39. data/lib/schemas/xenc-schema.xsd +136 -0
  40. data/lib/schemas/xml.xsd +287 -0
  41. data/lib/schemas/xmldsig-core-schema.xsd +309 -0
  42. data/lib/xml_security.rb +368 -0
  43. data/r-saml.gemspec +64 -0
  44. data/test/certificates/certificate1 +12 -0
  45. data/test/certificates/certificate_without_head_foot +1 -0
  46. data/test/certificates/formatted_certificate +14 -0
  47. data/test/certificates/formatted_private_key +12 -0
  48. data/test/certificates/formatted_rsa_private_key +12 -0
  49. data/test/certificates/invalid_certificate1 +1 -0
  50. data/test/certificates/invalid_certificate2 +1 -0
  51. data/test/certificates/invalid_certificate3 +12 -0
  52. data/test/certificates/invalid_private_key1 +1 -0
  53. data/test/certificates/invalid_private_key2 +1 -0
  54. data/test/certificates/invalid_private_key3 +10 -0
  55. data/test/certificates/invalid_rsa_private_key1 +1 -0
  56. data/test/certificates/invalid_rsa_private_key2 +1 -0
  57. data/test/certificates/invalid_rsa_private_key3 +10 -0
  58. data/test/certificates/ruby-saml.crt +14 -0
  59. data/test/certificates/ruby-saml.key +15 -0
  60. data/test/idp_metadata_parser_test.rb +95 -0
  61. data/test/logging_test.rb +62 -0
  62. data/test/logout_requests/invalid_slo_request.xml +6 -0
  63. data/test/logout_requests/slo_request.xml +4 -0
  64. data/test/logout_requests/slo_request.xml.base64 +1 -0
  65. data/test/logout_requests/slo_request_deflated.xml.base64 +1 -0
  66. data/test/logout_requests/slo_request_with_session_index.xml +5 -0
  67. data/test/logout_responses/logoutresponse_fixtures.rb +67 -0
  68. data/test/logoutrequest_test.rb +211 -0
  69. data/test/logoutresponse_test.rb +258 -0
  70. data/test/metadata_test.rb +203 -0
  71. data/test/request_test.rb +282 -0
  72. data/test/response_test.rb +1159 -0
  73. data/test/responses/adfs_response_sha1.xml +46 -0
  74. data/test/responses/adfs_response_sha256.xml +46 -0
  75. data/test/responses/adfs_response_sha384.xml +46 -0
  76. data/test/responses/adfs_response_sha512.xml +46 -0
  77. data/test/responses/adfs_response_xmlns.xml +45 -0
  78. data/test/responses/attackxee.xml +13 -0
  79. data/test/responses/idp_descriptor.xml +3 -0
  80. data/test/responses/invalids/invalid_audience.xml.base64 +1 -0
  81. data/test/responses/invalids/invalid_issuer_assertion.xml.base64 +1 -0
  82. data/test/responses/invalids/invalid_issuer_message.xml.base64 +1 -0
  83. data/test/responses/invalids/invalid_signature_position.xml.base64 +1 -0
  84. data/test/responses/invalids/invalid_subjectconfirmation_inresponse.xml.base64 +1 -0
  85. data/test/responses/invalids/invalid_subjectconfirmation_nb.xml.base64 +1 -0
  86. data/test/responses/invalids/invalid_subjectconfirmation_noa.xml.base64 +1 -0
  87. data/test/responses/invalids/invalid_subjectconfirmation_recipient.xml.base64 +1 -0
  88. data/test/responses/invalids/multiple_assertions.xml.base64 +2 -0
  89. data/test/responses/invalids/multiple_signed.xml.base64 +1 -0
  90. data/test/responses/invalids/no_id.xml.base64 +1 -0
  91. data/test/responses/invalids/no_saml2.xml.base64 +1 -0
  92. data/test/responses/invalids/no_signature.xml.base64 +1 -0
  93. data/test/responses/invalids/no_status.xml.base64 +1 -0
  94. data/test/responses/invalids/no_status_code.xml.base64 +1 -0
  95. data/test/responses/invalids/no_subjectconfirmation_data.xml.base64 +1 -0
  96. data/test/responses/invalids/no_subjectconfirmation_method.xml.base64 +1 -0
  97. data/test/responses/invalids/response_encrypted_attrs.xml.base64 +1 -0
  98. data/test/responses/invalids/response_invalid_signed_element.xml.base64 +1 -0
  99. data/test/responses/invalids/status_code_responder.xml.base64 +1 -0
  100. data/test/responses/invalids/status_code_responer_and_msg.xml.base64 +1 -0
  101. data/test/responses/no_signature_ns.xml +48 -0
  102. data/test/responses/open_saml_response.xml +56 -0
  103. data/test/responses/response_assertion_wrapped.xml.base64 +93 -0
  104. data/test/responses/response_encrypted_nameid.xml.base64 +1 -0
  105. data/test/responses/response_eval.xml +7 -0
  106. data/test/responses/response_no_cert_and_encrypted_attrs.xml +29 -0
  107. data/test/responses/response_unsigned_xml_base64 +1 -0
  108. data/test/responses/response_with_ampersands.xml +139 -0
  109. data/test/responses/response_with_ampersands.xml.base64 +93 -0
  110. data/test/responses/response_with_multiple_attribute_values.xml +67 -0
  111. data/test/responses/response_with_saml2_namespace.xml.base64 +102 -0
  112. data/test/responses/response_with_signed_assertion.xml.base64 +66 -0
  113. data/test/responses/response_with_signed_assertion_2.xml.base64 +1 -0
  114. data/test/responses/response_with_undefined_recipient.xml.base64 +1 -0
  115. data/test/responses/response_without_attributes.xml.base64 +79 -0
  116. data/test/responses/response_without_reference_uri.xml.base64 +1 -0
  117. data/test/responses/response_wrapped.xml.base64 +150 -0
  118. data/test/responses/signed_message_encrypted_signed_assertion.xml.base64 +1 -0
  119. data/test/responses/signed_message_encrypted_unsigned_assertion.xml.base64 +1 -0
  120. data/test/responses/signed_nameid_in_atts.xml +47 -0
  121. data/test/responses/signed_unqual_nameid_in_atts.xml +47 -0
  122. data/test/responses/simple_saml_php.xml +71 -0
  123. data/test/responses/starfield_response.xml.base64 +1 -0
  124. data/test/responses/test_sign.xml +43 -0
  125. data/test/responses/unsigned_message_aes128_encrypted_signed_assertion.xml.base64 +1 -0
  126. data/test/responses/unsigned_message_aes192_encrypted_signed_assertion.xml.base64 +1 -0
  127. data/test/responses/unsigned_message_aes256_encrypted_signed_assertion.xml.base64 +1 -0
  128. data/test/responses/unsigned_message_des192_encrypted_signed_assertion.xml.base64 +1 -0
  129. data/test/responses/unsigned_message_encrypted_assertion_without_saml_namespace.xml.base64 +1 -0
  130. data/test/responses/unsigned_message_encrypted_signed_assertion.xml.base64 +1 -0
  131. data/test/responses/unsigned_message_encrypted_unsigned_assertion.xml.base64 +1 -0
  132. data/test/responses/valid_response.xml.base64 +1 -0
  133. data/test/saml_message_test.rb +56 -0
  134. data/test/settings_test.rb +218 -0
  135. data/test/slo_logoutrequest_test.rb +275 -0
  136. data/test/slo_logoutresponse_test.rb +185 -0
  137. data/test/test_helper.rb +257 -0
  138. data/test/utils_test.rb +145 -0
  139. data/test/xml_security_test.rb +328 -0
  140. metadata +421 -0
@@ -0,0 +1,328 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "test_helper"))
2
+ require 'xml_security'
3
+
4
+ class XmlSecurityTest < Minitest::Test
5
+ include XMLSecurity
6
+
7
+ describe "XmlSecurity" do
8
+
9
+ let(:decoded_response) { Base64.decode64(response_document_without_recipient) }
10
+ let(:document) { XMLSecurity::SignedDocument.new(decoded_response) }
11
+ let(:settings) { OneLogin::RubySaml::Settings.new() }
12
+
13
+ before do
14
+ @base64cert = document.elements["//ds:X509Certificate"].text
15
+ end
16
+
17
+ it "should run validate without throwing NS related exceptions" do
18
+ assert !document.validate_signature(@base64cert, true)
19
+ end
20
+
21
+ it "should run validate with throwing NS related exceptions" do
22
+ assert_raises(OneLogin::RubySaml::ValidationError) do
23
+ document.validate_signature(@base64cert, false)
24
+ end
25
+ end
26
+
27
+ it "not raise an error when softly validating the document multiple times" do
28
+ 2.times { assert_equal document.validate_signature(@base64cert, true), false }
29
+ end
30
+
31
+ it "not raise an error when softly validating the document and the X509Certificate is missing" do
32
+ decoded_response.sub!(/<ds:X509Certificate>.*<\/ds:X509Certificate>/, "")
33
+ mod_document = XMLSecurity::SignedDocument.new(decoded_response)
34
+ assert !mod_document.validate_document("a fingerprint", true) # The fingerprint isn't relevant to this test
35
+ end
36
+
37
+ it "should raise Fingerprint mismatch" do
38
+ exception = assert_raises(OneLogin::RubySaml::ValidationError) do
39
+ document.validate_document("no:fi:ng:er:pr:in:t", false)
40
+ end
41
+ assert_equal("Fingerprint mismatch", exception.message)
42
+ assert_includes document.errors, "Fingerprint mismatch"
43
+ end
44
+
45
+ it "should raise Digest mismatch" do
46
+ exception = assert_raises(OneLogin::RubySaml::ValidationError) do
47
+ document.validate_signature(@base64cert, false)
48
+ end
49
+ assert_equal("Digest mismatch", exception.message)
50
+ assert_includes document.errors, "Digest mismatch"
51
+ end
52
+
53
+ it "should raise Key validation error" do
54
+ decoded_response.sub!("<ds:DigestValue>pJQ7MS/ek4KRRWGmv/H43ReHYMs=</ds:DigestValue>",
55
+ "<ds:DigestValue>b9xsAXLsynugg3Wc1CI3kpWku+0=</ds:DigestValue>")
56
+ mod_document = XMLSecurity::SignedDocument.new(decoded_response)
57
+ base64cert = mod_document.elements["//ds:X509Certificate"].text
58
+ exception = assert_raises(OneLogin::RubySaml::ValidationError) do
59
+ mod_document.validate_signature(base64cert, false)
60
+ end
61
+ assert_equal("Key validation error", exception.message)
62
+ assert_includes mod_document.errors, "Key validation error"
63
+ end
64
+
65
+ it "correctly obtain the digest method with alternate namespace declaration" do
66
+ adfs_document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_xmlns, false))
67
+ base64cert = adfs_document.elements["//X509Certificate"].text
68
+ assert adfs_document.validate_signature(base64cert, false)
69
+ end
70
+
71
+ it "raise validation error when the X509Certificate is missing" do
72
+ decoded_response.sub!(/<ds:X509Certificate>.*<\/ds:X509Certificate>/, "")
73
+ mod_document = XMLSecurity::SignedDocument.new(decoded_response)
74
+ exception = assert_raises(OneLogin::RubySaml::ValidationError) do
75
+ mod_document.validate_document("a fingerprint", false) # The fingerprint isn't relevant to this test
76
+ end
77
+ assert_equal("Certificate element missing in response (ds:X509Certificate)", exception.message)
78
+ end
79
+ end
80
+
81
+ describe "#canon_algorithm" do
82
+ it "C14N_EXCLUSIVE_1_0" do
83
+ canon_algorithm = Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0
84
+ assert_equal canon_algorithm, XMLSecurity::BaseDocument.new.canon_algorithm("http://www.w3.org/2001/10/xml-exc-c14n#")
85
+ assert_equal canon_algorithm, XMLSecurity::BaseDocument.new.canon_algorithm("http://www.w3.org/2001/10/xml-exc-c14n#WithComments")
86
+ assert_equal canon_algorithm, XMLSecurity::BaseDocument.new.canon_algorithm("other")
87
+ end
88
+
89
+ it "C14N_1_0" do
90
+ canon_algorithm = Nokogiri::XML::XML_C14N_1_0
91
+ assert_equal canon_algorithm, XMLSecurity::BaseDocument.new.canon_algorithm("http://www.w3.org/TR/2001/REC-xml-c14n-20010315")
92
+ end
93
+
94
+ it "XML_C14N_1_1" do
95
+ canon_algorithm = Nokogiri::XML::XML_C14N_1_1
96
+ assert_equal canon_algorithm, XMLSecurity::BaseDocument.new.canon_algorithm("http://www.w3.org/2006/12/xml-c14n11")
97
+ end
98
+ end
99
+
100
+ describe "#algorithm" do
101
+ it "SHA1" do
102
+ alg = OpenSSL::Digest::SHA1
103
+ assert_equal alg, XMLSecurity::BaseDocument.new.algorithm("http://www.w3.org/2000/09/xmldsig#rsa-sha1")
104
+ assert_equal alg, XMLSecurity::BaseDocument.new.algorithm("http://www.w3.org/2000/09/xmldsig#sha1")
105
+ assert_equal alg, XMLSecurity::BaseDocument.new.algorithm("other")
106
+ end
107
+
108
+ it "SHA256" do
109
+ alg = OpenSSL::Digest::SHA256
110
+ assert_equal alg, XMLSecurity::BaseDocument.new.algorithm("http://www.w3.org/2001/04/xmldsig-more#rsa-sha256")
111
+ assert_equal alg, XMLSecurity::BaseDocument.new.algorithm("http://www.w3.org/2001/04/xmldsig-more#sha256")
112
+ end
113
+
114
+ it "SHA384" do
115
+ alg = OpenSSL::Digest::SHA384
116
+ assert_equal alg, XMLSecurity::BaseDocument.new.algorithm("http://www.w3.org/2001/04/xmldsig-more#rsa-sha384")
117
+ assert_equal alg, XMLSecurity::BaseDocument.new.algorithm("http://www.w3.org/2001/04/xmldsig-more#sha384")
118
+ end
119
+
120
+ it "SHA512" do
121
+ alg = OpenSSL::Digest::SHA512
122
+ assert_equal alg, XMLSecurity::BaseDocument.new.algorithm("http://www.w3.org/2001/04/xmldsig-more#rsa-sha512")
123
+ assert_equal alg, XMLSecurity::BaseDocument.new.algorithm("http://www.w3.org/2001/04/xmldsig-more#sha512")
124
+ end
125
+ end
126
+
127
+ describe "Fingerprint Algorithms" do
128
+ let(:response_fingerprint_test) { OneLogin::RubySaml::Response.new(fixture(:adfs_response_sha1, false)) }
129
+
130
+ it "validate using SHA1" do
131
+ sha1_fingerprint = "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72"
132
+ sha1_fingerprint_downcase = "f13c6b80905a030e6c913e5d15faddb016454872"
133
+
134
+ assert response_fingerprint_test.document.validate_document(sha1_fingerprint)
135
+ assert response_fingerprint_test.document.validate_document(sha1_fingerprint, true, :fingerprint_alg => XMLSecurity::Document::SHA1)
136
+
137
+ assert response_fingerprint_test.document.validate_document(sha1_fingerprint_downcase)
138
+ assert response_fingerprint_test.document.validate_document(sha1_fingerprint_downcase, true, :fingerprint_alg => XMLSecurity::Document::SHA1)
139
+ end
140
+
141
+ it "validate using SHA256" do
142
+ sha256_fingerprint = "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21"
143
+
144
+ assert !response_fingerprint_test.document.validate_document(sha256_fingerprint)
145
+ assert response_fingerprint_test.document.validate_document(sha256_fingerprint, true, :fingerprint_alg => XMLSecurity::Document::SHA256)
146
+ end
147
+
148
+ it "validate using SHA384" do
149
+ sha384_fingerprint = "98:FE:17:90:31:E7:68:18:8A:65:4D:DA:F5:76:E2:09:97:BE:8B:E3:7E:AA:8D:63:64:7C:0C:38:23:9A:AC:A2:EC:CE:48:A6:74:4D:E0:4C:50:80:40:B4:8D:55:14:14"
150
+
151
+ assert !response_fingerprint_test.document.validate_document(sha384_fingerprint)
152
+ assert response_fingerprint_test.document.validate_document(sha384_fingerprint, true, :fingerprint_alg => XMLSecurity::Document::SHA384)
153
+ end
154
+
155
+ it "validate using SHA512" do
156
+ sha512_fingerprint = "5A:AE:BA:D0:BA:9D:1E:25:05:01:1E:1A:C9:E9:FF:DB:ED:FA:6E:F7:52:EB:45:49:BD:DB:06:D8:A3:7E:CC:63:3A:04:A2:DD:DF:EE:61:05:D9:58:95:2A:77:17:30:4B:EB:4A:9F:48:4A:44:1C:D0:9E:0B:1E:04:77:FD:A3:D2"
157
+
158
+ assert !response_fingerprint_test.document.validate_document(sha512_fingerprint)
159
+ assert response_fingerprint_test.document.validate_document(sha512_fingerprint, true, :fingerprint_alg => XMLSecurity::Document::SHA512)
160
+ end
161
+
162
+ end
163
+
164
+ describe "Signature Algorithms" do
165
+ it "validate using SHA1" do
166
+ document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_sha1, false))
167
+ assert document.validate_document("F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72")
168
+ end
169
+
170
+ it "validate using SHA256" do
171
+ document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_sha256, false))
172
+ assert document.validate_document("28:74:9B:E8:1F:E8:10:9C:A8:7C:A9:C3:E3:C5:01:6C:92:1C:B4:BA")
173
+ end
174
+
175
+ it "validate using SHA384" do
176
+ document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_sha384, false))
177
+ assert document.validate_document("F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72")
178
+ end
179
+
180
+ it "validate using SHA512" do
181
+ document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_sha512, false))
182
+ assert document.validate_document("F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72")
183
+ end
184
+ end
185
+
186
+ describe "XmlSecurity::SignedDocument" do
187
+
188
+ describe "#extract_inclusive_namespaces" do
189
+ it "support explicit namespace resolution for exclusive canonicalization" do
190
+ response = fixture(:open_saml_response, false)
191
+ document = XMLSecurity::SignedDocument.new(response)
192
+ inclusive_namespaces = document.send(:extract_inclusive_namespaces)
193
+
194
+ assert_equal %w[ xs ], inclusive_namespaces
195
+ end
196
+
197
+ it "support implicit namespace resolution for exclusive canonicalization" do
198
+ response = fixture(:no_signature_ns, false)
199
+ document = XMLSecurity::SignedDocument.new(response)
200
+ inclusive_namespaces = document.send(:extract_inclusive_namespaces)
201
+
202
+ assert_equal %w[ #default saml ds xs xsi ], inclusive_namespaces
203
+ end
204
+
205
+ it 'support inclusive canonicalization' do
206
+ skip('test not yet implemented')
207
+ response = OneLogin::RubySaml::Response.new(fixture("tdnf_response.xml"))
208
+ response.stubs(:conditions).returns(nil)
209
+ assert !response.is_valid?
210
+ assert !response.is_valid?
211
+ response.settings = settings
212
+ assert !response.is_valid?
213
+ settings.idp_cert_fingerprint = "e6 38 9a 20 b7 4f 13 db 6a bc b1 42 6a e7 52 1d d6 56 d4 1b".upcase.gsub(" ", ":")
214
+ assert response.is_valid?
215
+ end
216
+
217
+ it "return nil when inclusive namespace element is missing" do
218
+ response = fixture(:no_signature_ns, false)
219
+ response.slice! %r{<InclusiveNamespaces xmlns="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="#default saml ds xs xsi"/>}
220
+
221
+ document = XMLSecurity::SignedDocument.new(response)
222
+ inclusive_namespaces = document.send(:extract_inclusive_namespaces)
223
+
224
+ assert inclusive_namespaces.nil?
225
+ end
226
+ end
227
+
228
+ describe "XMLSecurity::DSIG" do
229
+ before do
230
+ settings.idp_sso_target_url = "https://idp.example.com/sso"
231
+ settings.protocol_binding = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
232
+ settings.idp_slo_target_url = "https://idp.example.com/slo",
233
+ settings.issuer = "https://sp.example.com/saml2"
234
+ settings.assertion_consumer_service_url = "https://sp.example.com/acs"
235
+ settings.single_logout_service_url = "https://sp.example.com/sls"
236
+ end
237
+
238
+
239
+ it "sign an AuthNRequest" do
240
+ request = OneLogin::RubySaml::Authrequest.new.create_authentication_xml_doc(settings)
241
+ request.sign_document(ruby_saml_key, ruby_saml_cert)
242
+ # verify our signature
243
+ signed_doc = XMLSecurity::SignedDocument.new(request.to_s)
244
+ assert signed_doc.validate_document(ruby_saml_cert_fingerprint, false)
245
+
246
+ request2 = OneLogin::RubySaml::Authrequest.new.create_authentication_xml_doc(settings)
247
+ request2.sign_document(ruby_saml_key, ruby_saml_cert_text)
248
+ # verify our signature
249
+ signed_doc2 = XMLSecurity::SignedDocument.new(request2.to_s)
250
+ assert signed_doc2.validate_document(ruby_saml_cert_fingerprint, false)
251
+ end
252
+
253
+ it "sign an AuthNRequest with certificate as text" do
254
+ request = OneLogin::RubySaml::Authrequest.new.create_authentication_xml_doc(settings)
255
+ request.sign_document(ruby_saml_key, ruby_saml_cert_text)
256
+
257
+ # verify our signature
258
+ signed_doc = XMLSecurity::SignedDocument.new(request.to_s)
259
+ assert signed_doc.validate_document(ruby_saml_cert_fingerprint, false)
260
+ end
261
+
262
+ it "sign a LogoutRequest" do
263
+ logout_request = OneLogin::RubySaml::Logoutrequest.new.create_logout_request_xml_doc(settings)
264
+ logout_request.sign_document(ruby_saml_key, ruby_saml_cert)
265
+ # verify our signature
266
+ signed_doc = XMLSecurity::SignedDocument.new(logout_request.to_s)
267
+ assert signed_doc.validate_document(ruby_saml_cert_fingerprint, false)
268
+
269
+ logout_request2 = OneLogin::RubySaml::Logoutrequest.new.create_logout_request_xml_doc(settings)
270
+ logout_request2.sign_document(ruby_saml_key, ruby_saml_cert_text)
271
+ # verify our signature
272
+ signed_doc2 = XMLSecurity::SignedDocument.new(logout_request2.to_s)
273
+ signed_doc2.validate_document(ruby_saml_cert_fingerprint, false)
274
+ assert signed_doc2.validate_document(ruby_saml_cert_fingerprint, false)
275
+ end
276
+
277
+ it "sign a LogoutResponse" do
278
+ logout_response = OneLogin::RubySaml::SloLogoutresponse.new.create_logout_response_xml_doc(settings, 'request_id_example', "Custom Logout Message")
279
+ logout_response.sign_document(ruby_saml_key, ruby_saml_cert)
280
+ # verify our signature
281
+ signed_doc = XMLSecurity::SignedDocument.new(logout_response.to_s)
282
+ assert signed_doc.validate_document(ruby_saml_cert_fingerprint, false)
283
+
284
+ logout_response2 = OneLogin::RubySaml::SloLogoutresponse.new.create_logout_response_xml_doc(settings, 'request_id_example', "Custom Logout Message")
285
+ logout_response2.sign_document(ruby_saml_key, ruby_saml_cert_text)
286
+ # verify our signature
287
+ signed_doc2 = XMLSecurity::SignedDocument.new(logout_response2.to_s)
288
+ signed_doc2.validate_document(ruby_saml_cert_fingerprint, false)
289
+ assert signed_doc2.validate_document(ruby_saml_cert_fingerprint, false)
290
+ end
291
+ end
292
+
293
+ describe "StarfieldTMS" do
294
+ let (:response) { OneLogin::RubySaml::Response.new(fixture(:starfield_response)) }
295
+
296
+ before do
297
+ response.settings = OneLogin::RubySaml::Settings.new( :idp_cert_fingerprint => "8D:BA:53:8E:A3:B6:F9:F1:69:6C:BB:D9:D8:BD:41:B3:AC:4F:9D:4D")
298
+ end
299
+
300
+ it "be able to validate a good response" do
301
+ Timecop.freeze Time.parse('2012-11-28 17:55:00 UTC') do
302
+ response.stubs(:validate_subject_confirmation).returns(true)
303
+ assert response.is_valid?
304
+ end
305
+ end
306
+
307
+ it "fail before response is valid" do
308
+ Timecop.freeze Time.parse('2012-11-20 17:55:00 UTC') do
309
+ assert !response.is_valid?
310
+
311
+ contains_expected_error = response.errors.include? "Current time is earlier than NotBefore condition 2012-11-20 17:55:00 UTC < 2012-11-28 17:53:45 UTC)"
312
+ contains_expected_error ||= response.errors.include? "Current time is earlier than NotBefore condition Tue Nov 20 17:55:00 UTC 2012 < Wed Nov 28 17:53:45 UTC 2012)"
313
+ assert contains_expected_error
314
+ end
315
+ end
316
+
317
+ it "fail after response expires" do
318
+ Timecop.freeze Time.parse('2012-11-30 17:55:00 UTC') do
319
+ assert !response.is_valid?
320
+
321
+ contains_expected_error = response.errors.include? "Current time is on or after NotOnOrAfter condition (2012-11-30 17:55:00 UTC >= 2012-11-28 18:33:45 UTC)"
322
+ contains_expected_error ||= response.errors.include? "Current time is on or after NotOnOrAfter condition (Fri Nov 30 17:55:00 UTC 2012 >= Wed Nov 28 18:33:45 UTC 2012)"
323
+ assert contains_expected_error
324
+ end
325
+ end
326
+ end
327
+ end
328
+ end
metadata ADDED
@@ -0,0 +1,421 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: r-saml
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - OneLogin LLC
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-09-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: uuid
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: nokogiri
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.5.10
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.5.10
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.5'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mocha
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.14'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.14'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10'
83
+ - !ruby/object:Gem::Dependency
84
+ name: shoulda
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.11'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.11'
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.9.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.9.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: systemu
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '2'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '2'
125
+ - !ruby/object:Gem::Dependency
126
+ name: timecop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "<="
130
+ - !ruby/object:Gem::Version
131
+ version: 0.6.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "<="
137
+ - !ruby/object:Gem::Version
138
+ version: 0.6.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: pry-byebug
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: SAML toolkit for Ruby on Rails
154
+ email: support@onelogin.com
155
+ executables: []
156
+ extensions: []
157
+ extra_rdoc_files:
158
+ - LICENSE
159
+ - README.md
160
+ files:
161
+ - ".document"
162
+ - ".gitignore"
163
+ - ".travis.yml"
164
+ - Gemfile
165
+ - LICENSE
166
+ - README.md
167
+ - Rakefile
168
+ - changelog.md
169
+ - gemfiles/nokogiri-1.5.gemfile
170
+ - lib/onelogin/ruby-saml.rb
171
+ - lib/onelogin/ruby-saml/attribute_service.rb
172
+ - lib/onelogin/ruby-saml/attributes.rb
173
+ - lib/onelogin/ruby-saml/authrequest.rb
174
+ - lib/onelogin/ruby-saml/http_error.rb
175
+ - lib/onelogin/ruby-saml/idp_metadata_parser.rb
176
+ - lib/onelogin/ruby-saml/logging.rb
177
+ - lib/onelogin/ruby-saml/logoutrequest.rb
178
+ - lib/onelogin/ruby-saml/logoutresponse.rb
179
+ - lib/onelogin/ruby-saml/metadata.rb
180
+ - lib/onelogin/ruby-saml/response.rb
181
+ - lib/onelogin/ruby-saml/saml_message.rb
182
+ - lib/onelogin/ruby-saml/settings.rb
183
+ - lib/onelogin/ruby-saml/slo_logoutrequest.rb
184
+ - lib/onelogin/ruby-saml/slo_logoutresponse.rb
185
+ - lib/onelogin/ruby-saml/utils.rb
186
+ - lib/onelogin/ruby-saml/validation_error.rb
187
+ - lib/onelogin/ruby-saml/version.rb
188
+ - lib/ruby-saml.rb
189
+ - lib/schemas/saml-schema-assertion-2.0.xsd
190
+ - lib/schemas/saml-schema-authn-context-2.0.xsd
191
+ - lib/schemas/saml-schema-authn-context-types-2.0.xsd
192
+ - lib/schemas/saml-schema-metadata-2.0.xsd
193
+ - lib/schemas/saml-schema-protocol-2.0.xsd
194
+ - lib/schemas/sstc-metadata-attr.xsd
195
+ - lib/schemas/sstc-saml-attribute-ext.xsd
196
+ - lib/schemas/sstc-saml-metadata-algsupport-v1.0.xsd
197
+ - lib/schemas/sstc-saml-metadata-ui-v1.0.xsd
198
+ - lib/schemas/xenc-schema.xsd
199
+ - lib/schemas/xml.xsd
200
+ - lib/schemas/xmldsig-core-schema.xsd
201
+ - lib/xml_security.rb
202
+ - r-saml.gemspec
203
+ - test/certificates/certificate1
204
+ - test/certificates/certificate_without_head_foot
205
+ - test/certificates/formatted_certificate
206
+ - test/certificates/formatted_private_key
207
+ - test/certificates/formatted_rsa_private_key
208
+ - test/certificates/invalid_certificate1
209
+ - test/certificates/invalid_certificate2
210
+ - test/certificates/invalid_certificate3
211
+ - test/certificates/invalid_private_key1
212
+ - test/certificates/invalid_private_key2
213
+ - test/certificates/invalid_private_key3
214
+ - test/certificates/invalid_rsa_private_key1
215
+ - test/certificates/invalid_rsa_private_key2
216
+ - test/certificates/invalid_rsa_private_key3
217
+ - test/certificates/ruby-saml.crt
218
+ - test/certificates/ruby-saml.key
219
+ - test/idp_metadata_parser_test.rb
220
+ - test/logging_test.rb
221
+ - test/logout_requests/invalid_slo_request.xml
222
+ - test/logout_requests/slo_request.xml
223
+ - test/logout_requests/slo_request.xml.base64
224
+ - test/logout_requests/slo_request_deflated.xml.base64
225
+ - test/logout_requests/slo_request_with_session_index.xml
226
+ - test/logout_responses/logoutresponse_fixtures.rb
227
+ - test/logoutrequest_test.rb
228
+ - test/logoutresponse_test.rb
229
+ - test/metadata_test.rb
230
+ - test/request_test.rb
231
+ - test/response_test.rb
232
+ - test/responses/adfs_response_sha1.xml
233
+ - test/responses/adfs_response_sha256.xml
234
+ - test/responses/adfs_response_sha384.xml
235
+ - test/responses/adfs_response_sha512.xml
236
+ - test/responses/adfs_response_xmlns.xml
237
+ - test/responses/attackxee.xml
238
+ - test/responses/idp_descriptor.xml
239
+ - test/responses/invalids/invalid_audience.xml.base64
240
+ - test/responses/invalids/invalid_issuer_assertion.xml.base64
241
+ - test/responses/invalids/invalid_issuer_message.xml.base64
242
+ - test/responses/invalids/invalid_signature_position.xml.base64
243
+ - test/responses/invalids/invalid_subjectconfirmation_inresponse.xml.base64
244
+ - test/responses/invalids/invalid_subjectconfirmation_nb.xml.base64
245
+ - test/responses/invalids/invalid_subjectconfirmation_noa.xml.base64
246
+ - test/responses/invalids/invalid_subjectconfirmation_recipient.xml.base64
247
+ - test/responses/invalids/multiple_assertions.xml.base64
248
+ - test/responses/invalids/multiple_signed.xml.base64
249
+ - test/responses/invalids/no_id.xml.base64
250
+ - test/responses/invalids/no_saml2.xml.base64
251
+ - test/responses/invalids/no_signature.xml.base64
252
+ - test/responses/invalids/no_status.xml.base64
253
+ - test/responses/invalids/no_status_code.xml.base64
254
+ - test/responses/invalids/no_subjectconfirmation_data.xml.base64
255
+ - test/responses/invalids/no_subjectconfirmation_method.xml.base64
256
+ - test/responses/invalids/response_encrypted_attrs.xml.base64
257
+ - test/responses/invalids/response_invalid_signed_element.xml.base64
258
+ - test/responses/invalids/status_code_responder.xml.base64
259
+ - test/responses/invalids/status_code_responer_and_msg.xml.base64
260
+ - test/responses/no_signature_ns.xml
261
+ - test/responses/open_saml_response.xml
262
+ - test/responses/response_assertion_wrapped.xml.base64
263
+ - test/responses/response_encrypted_nameid.xml.base64
264
+ - test/responses/response_eval.xml
265
+ - test/responses/response_no_cert_and_encrypted_attrs.xml
266
+ - test/responses/response_unsigned_xml_base64
267
+ - test/responses/response_with_ampersands.xml
268
+ - test/responses/response_with_ampersands.xml.base64
269
+ - test/responses/response_with_multiple_attribute_values.xml
270
+ - test/responses/response_with_saml2_namespace.xml.base64
271
+ - test/responses/response_with_signed_assertion.xml.base64
272
+ - test/responses/response_with_signed_assertion_2.xml.base64
273
+ - test/responses/response_with_undefined_recipient.xml.base64
274
+ - test/responses/response_without_attributes.xml.base64
275
+ - test/responses/response_without_reference_uri.xml.base64
276
+ - test/responses/response_wrapped.xml.base64
277
+ - test/responses/signed_message_encrypted_signed_assertion.xml.base64
278
+ - test/responses/signed_message_encrypted_unsigned_assertion.xml.base64
279
+ - test/responses/signed_nameid_in_atts.xml
280
+ - test/responses/signed_unqual_nameid_in_atts.xml
281
+ - test/responses/simple_saml_php.xml
282
+ - test/responses/starfield_response.xml.base64
283
+ - test/responses/test_sign.xml
284
+ - test/responses/unsigned_message_aes128_encrypted_signed_assertion.xml.base64
285
+ - test/responses/unsigned_message_aes192_encrypted_signed_assertion.xml.base64
286
+ - test/responses/unsigned_message_aes256_encrypted_signed_assertion.xml.base64
287
+ - test/responses/unsigned_message_des192_encrypted_signed_assertion.xml.base64
288
+ - test/responses/unsigned_message_encrypted_assertion_without_saml_namespace.xml.base64
289
+ - test/responses/unsigned_message_encrypted_signed_assertion.xml.base64
290
+ - test/responses/unsigned_message_encrypted_unsigned_assertion.xml.base64
291
+ - test/responses/valid_response.xml.base64
292
+ - test/saml_message_test.rb
293
+ - test/settings_test.rb
294
+ - test/slo_logoutrequest_test.rb
295
+ - test/slo_logoutresponse_test.rb
296
+ - test/test_helper.rb
297
+ - test/utils_test.rb
298
+ - test/xml_security_test.rb
299
+ homepage: http://github.com/juliancheal/ruby-saml
300
+ licenses:
301
+ - MIT
302
+ metadata: {}
303
+ post_install_message:
304
+ rdoc_options:
305
+ - "--charset=UTF-8"
306
+ require_paths:
307
+ - lib
308
+ required_ruby_version: !ruby/object:Gem::Requirement
309
+ requirements:
310
+ - - ">="
311
+ - !ruby/object:Gem::Version
312
+ version: 1.8.7
313
+ required_rubygems_version: !ruby/object:Gem::Requirement
314
+ requirements:
315
+ - - ">="
316
+ - !ruby/object:Gem::Version
317
+ version: '0'
318
+ requirements: []
319
+ rubyforge_project:
320
+ rubygems_version: 2.4.8
321
+ signing_key:
322
+ specification_version: 4
323
+ summary: SAML Ruby Tookit
324
+ test_files:
325
+ - test/certificates/certificate1
326
+ - test/certificates/certificate_without_head_foot
327
+ - test/certificates/formatted_certificate
328
+ - test/certificates/formatted_private_key
329
+ - test/certificates/formatted_rsa_private_key
330
+ - test/certificates/invalid_certificate1
331
+ - test/certificates/invalid_certificate2
332
+ - test/certificates/invalid_certificate3
333
+ - test/certificates/invalid_private_key1
334
+ - test/certificates/invalid_private_key2
335
+ - test/certificates/invalid_private_key3
336
+ - test/certificates/invalid_rsa_private_key1
337
+ - test/certificates/invalid_rsa_private_key2
338
+ - test/certificates/invalid_rsa_private_key3
339
+ - test/certificates/ruby-saml.crt
340
+ - test/certificates/ruby-saml.key
341
+ - test/idp_metadata_parser_test.rb
342
+ - test/logging_test.rb
343
+ - test/logout_requests/invalid_slo_request.xml
344
+ - test/logout_requests/slo_request.xml
345
+ - test/logout_requests/slo_request.xml.base64
346
+ - test/logout_requests/slo_request_deflated.xml.base64
347
+ - test/logout_requests/slo_request_with_session_index.xml
348
+ - test/logout_responses/logoutresponse_fixtures.rb
349
+ - test/logoutrequest_test.rb
350
+ - test/logoutresponse_test.rb
351
+ - test/metadata_test.rb
352
+ - test/request_test.rb
353
+ - test/response_test.rb
354
+ - test/responses/adfs_response_sha1.xml
355
+ - test/responses/adfs_response_sha256.xml
356
+ - test/responses/adfs_response_sha384.xml
357
+ - test/responses/adfs_response_sha512.xml
358
+ - test/responses/adfs_response_xmlns.xml
359
+ - test/responses/attackxee.xml
360
+ - test/responses/idp_descriptor.xml
361
+ - test/responses/invalids/invalid_audience.xml.base64
362
+ - test/responses/invalids/invalid_issuer_assertion.xml.base64
363
+ - test/responses/invalids/invalid_issuer_message.xml.base64
364
+ - test/responses/invalids/invalid_signature_position.xml.base64
365
+ - test/responses/invalids/invalid_subjectconfirmation_inresponse.xml.base64
366
+ - test/responses/invalids/invalid_subjectconfirmation_nb.xml.base64
367
+ - test/responses/invalids/invalid_subjectconfirmation_noa.xml.base64
368
+ - test/responses/invalids/invalid_subjectconfirmation_recipient.xml.base64
369
+ - test/responses/invalids/multiple_assertions.xml.base64
370
+ - test/responses/invalids/multiple_signed.xml.base64
371
+ - test/responses/invalids/no_id.xml.base64
372
+ - test/responses/invalids/no_saml2.xml.base64
373
+ - test/responses/invalids/no_signature.xml.base64
374
+ - test/responses/invalids/no_status.xml.base64
375
+ - test/responses/invalids/no_status_code.xml.base64
376
+ - test/responses/invalids/no_subjectconfirmation_data.xml.base64
377
+ - test/responses/invalids/no_subjectconfirmation_method.xml.base64
378
+ - test/responses/invalids/response_encrypted_attrs.xml.base64
379
+ - test/responses/invalids/response_invalid_signed_element.xml.base64
380
+ - test/responses/invalids/status_code_responder.xml.base64
381
+ - test/responses/invalids/status_code_responer_and_msg.xml.base64
382
+ - test/responses/no_signature_ns.xml
383
+ - test/responses/open_saml_response.xml
384
+ - test/responses/response_assertion_wrapped.xml.base64
385
+ - test/responses/response_encrypted_nameid.xml.base64
386
+ - test/responses/response_eval.xml
387
+ - test/responses/response_no_cert_and_encrypted_attrs.xml
388
+ - test/responses/response_unsigned_xml_base64
389
+ - test/responses/response_with_ampersands.xml
390
+ - test/responses/response_with_ampersands.xml.base64
391
+ - test/responses/response_with_multiple_attribute_values.xml
392
+ - test/responses/response_with_saml2_namespace.xml.base64
393
+ - test/responses/response_with_signed_assertion.xml.base64
394
+ - test/responses/response_with_signed_assertion_2.xml.base64
395
+ - test/responses/response_with_undefined_recipient.xml.base64
396
+ - test/responses/response_without_attributes.xml.base64
397
+ - test/responses/response_without_reference_uri.xml.base64
398
+ - test/responses/response_wrapped.xml.base64
399
+ - test/responses/signed_message_encrypted_signed_assertion.xml.base64
400
+ - test/responses/signed_message_encrypted_unsigned_assertion.xml.base64
401
+ - test/responses/signed_nameid_in_atts.xml
402
+ - test/responses/signed_unqual_nameid_in_atts.xml
403
+ - test/responses/simple_saml_php.xml
404
+ - test/responses/starfield_response.xml.base64
405
+ - test/responses/test_sign.xml
406
+ - test/responses/unsigned_message_aes128_encrypted_signed_assertion.xml.base64
407
+ - test/responses/unsigned_message_aes192_encrypted_signed_assertion.xml.base64
408
+ - test/responses/unsigned_message_aes256_encrypted_signed_assertion.xml.base64
409
+ - test/responses/unsigned_message_des192_encrypted_signed_assertion.xml.base64
410
+ - test/responses/unsigned_message_encrypted_assertion_without_saml_namespace.xml.base64
411
+ - test/responses/unsigned_message_encrypted_signed_assertion.xml.base64
412
+ - test/responses/unsigned_message_encrypted_unsigned_assertion.xml.base64
413
+ - test/responses/valid_response.xml.base64
414
+ - test/saml_message_test.rb
415
+ - test/settings_test.rb
416
+ - test/slo_logoutrequest_test.rb
417
+ - test/slo_logoutresponse_test.rb
418
+ - test/test_helper.rb
419
+ - test/utils_test.rb
420
+ - test/xml_security_test.rb
421
+ has_rdoc: