ruby-saml 0.8.18 → 0.9

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ruby-saml might be problematic. Click here for more details.

Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +1 -6
  4. data/Gemfile +2 -12
  5. data/README.md +363 -35
  6. data/Rakefile +14 -0
  7. data/changelog.md +22 -9
  8. data/lib/onelogin/ruby-saml/attribute_service.rb +34 -0
  9. data/lib/onelogin/ruby-saml/attributes.rb +26 -64
  10. data/lib/onelogin/ruby-saml/authrequest.rb +47 -93
  11. data/lib/onelogin/ruby-saml/idp_metadata_parser.rb +87 -0
  12. data/lib/onelogin/ruby-saml/logoutrequest.rb +36 -100
  13. data/lib/onelogin/ruby-saml/logoutresponse.rb +25 -35
  14. data/lib/onelogin/ruby-saml/metadata.rb +46 -16
  15. data/lib/onelogin/ruby-saml/response.rb +63 -373
  16. data/lib/onelogin/ruby-saml/saml_message.rb +78 -0
  17. data/lib/onelogin/ruby-saml/settings.rb +54 -122
  18. data/lib/onelogin/ruby-saml/slo_logoutrequest.rb +25 -71
  19. data/lib/onelogin/ruby-saml/slo_logoutresponse.rb +37 -102
  20. data/lib/onelogin/ruby-saml/utils.rb +32 -199
  21. data/lib/onelogin/ruby-saml/version.rb +1 -1
  22. data/lib/ruby-saml.rb +5 -2
  23. data/lib/schemas/{saml20assertion_schema.xsd → saml-schema-assertion-2.0.xsd} +283 -283
  24. data/lib/schemas/saml-schema-authn-context-2.0.xsd +23 -0
  25. data/lib/schemas/saml-schema-authn-context-types-2.0.xsd +821 -0
  26. data/lib/schemas/saml-schema-metadata-2.0.xsd +339 -0
  27. data/lib/schemas/{saml20protocol_schema.xsd → saml-schema-protocol-2.0.xsd} +302 -302
  28. data/lib/schemas/sstc-metadata-attr.xsd +35 -0
  29. data/lib/schemas/sstc-saml-attribute-ext.xsd +25 -0
  30. data/lib/schemas/sstc-saml-metadata-algsupport-v1.0.xsd +41 -0
  31. data/lib/schemas/sstc-saml-metadata-ui-v1.0.xsd +89 -0
  32. data/lib/schemas/{xenc_schema.xsd → xenc-schema.xsd} +1 -11
  33. data/lib/schemas/xml.xsd +287 -0
  34. data/lib/schemas/{xmldsig_schema.xsd → xmldsig-core-schema.xsd} +0 -9
  35. data/lib/xml_security.rb +83 -235
  36. data/ruby-saml.gemspec +1 -0
  37. data/test/idp_metadata_parser_test.rb +54 -0
  38. data/test/logoutrequest_test.rb +68 -155
  39. data/test/logoutresponse_test.rb +43 -32
  40. data/test/metadata_test.rb +87 -0
  41. data/test/request_test.rb +102 -99
  42. data/test/response_test.rb +181 -495
  43. data/test/responses/idp_descriptor.xml +3 -0
  44. data/test/responses/logoutresponse_fixtures.rb +7 -8
  45. data/test/responses/response_no_cert_and_encrypted_attrs.xml +29 -0
  46. data/test/responses/response_with_multiple_attribute_values.xml +1 -1
  47. data/test/responses/slo_request.xml +4 -0
  48. data/test/settings_test.rb +25 -112
  49. data/test/slo_logoutrequest_test.rb +40 -50
  50. data/test/slo_logoutresponse_test.rb +86 -185
  51. data/test/test_helper.rb +27 -102
  52. data/test/xml_security_test.rb +114 -337
  53. metadata +30 -81
  54. data/lib/onelogin/ruby-saml/setting_error.rb +0 -6
  55. data/test/certificates/certificate.der +0 -0
  56. data/test/certificates/formatted_certificate +0 -14
  57. data/test/certificates/formatted_chained_certificate +0 -42
  58. data/test/certificates/formatted_private_key +0 -12
  59. data/test/certificates/formatted_rsa_private_key +0 -12
  60. data/test/certificates/invalid_certificate1 +0 -1
  61. data/test/certificates/invalid_certificate2 +0 -1
  62. data/test/certificates/invalid_certificate3 +0 -12
  63. data/test/certificates/invalid_chained_certificate1 +0 -1
  64. data/test/certificates/invalid_private_key1 +0 -1
  65. data/test/certificates/invalid_private_key2 +0 -1
  66. data/test/certificates/invalid_private_key3 +0 -10
  67. data/test/certificates/invalid_rsa_private_key1 +0 -1
  68. data/test/certificates/invalid_rsa_private_key2 +0 -1
  69. data/test/certificates/invalid_rsa_private_key3 +0 -10
  70. data/test/certificates/ruby-saml-2.crt +0 -15
  71. data/test/requests/logoutrequest_fixtures.rb +0 -47
  72. data/test/responses/encrypted_new_attack.xml.base64 +0 -1
  73. data/test/responses/invalids/invalid_issuer_assertion.xml.base64 +0 -1
  74. data/test/responses/invalids/invalid_issuer_message.xml.base64 +0 -1
  75. data/test/responses/invalids/multiple_signed.xml.base64 +0 -1
  76. data/test/responses/invalids/no_signature.xml.base64 +0 -1
  77. data/test/responses/invalids/response_with_concealed_signed_assertion.xml +0 -51
  78. data/test/responses/invalids/response_with_doubled_signed_assertion.xml +0 -49
  79. data/test/responses/invalids/signature_wrapping_attack.xml.base64 +0 -1
  80. data/test/responses/response_node_text_attack.xml.base64 +0 -1
  81. data/test/responses/response_with_concealed_signed_assertion.xml +0 -51
  82. data/test/responses/response_with_doubled_signed_assertion.xml +0 -49
  83. data/test/responses/response_with_multiple_attribute_statements.xml +0 -72
  84. data/test/responses/response_with_signed_assertion_3.xml +0 -30
  85. data/test/responses/response_with_signed_message_and_assertion.xml +0 -34
  86. data/test/responses/response_with_undefined_recipient.xml.base64 +0 -1
  87. data/test/responses/response_wrapped.xml.base64 +0 -150
  88. data/test/responses/valid_response.xml.base64 +0 -1
  89. data/test/responses/valid_response_without_x509certificate.xml.base64 +0 -1
  90. data/test/utils_test.rb +0 -231
@@ -1,16 +1,13 @@
1
1
  require File.expand_path(File.join(File.dirname(__FILE__), "test_helper"))
2
2
 
3
- class ResponseTest < Minitest::Test
3
+ class RubySamlTest < Test::Unit::TestCase
4
4
 
5
- describe "Response" do
6
- it "raise an exception when response is initialized with nil" do
7
- err = assert_raises(ArgumentError) do
8
- OneLogin::RubySaml::Response.new(nil)
9
- end
10
- assert_equal "Response cannot be nil", err.message
5
+ context "Response" do
6
+ should "raise an exception when response is initialized with nil" do
7
+ assert_raises(ArgumentError) { OneLogin::RubySaml::Response.new(nil) }
11
8
  end
12
9
 
13
- it "be able to parse a document which contains ampersands" do
10
+ should "be able to parse a document which contains ampersands" do
14
11
  XMLSecurity::SignedDocument.any_instance.stubs(:digests_match?).returns(true)
15
12
  OneLogin::RubySaml::Response.any_instance.stubs(:validate_conditions).returns(true)
16
13
 
@@ -21,135 +18,74 @@ class ResponseTest < Minitest::Test
21
18
  response.validate!
22
19
  end
23
20
 
24
- it "adapt namespace" do
21
+ should "adapt namespace" do
25
22
  response = OneLogin::RubySaml::Response.new(response_document)
26
- assert !response.name_id.nil?
23
+ assert_not_nil response.name_id
27
24
  response = OneLogin::RubySaml::Response.new(response_document_2)
28
- assert !response.name_id.nil?
25
+ assert_not_nil response.name_id
29
26
  response = OneLogin::RubySaml::Response.new(response_document_3)
30
- assert !response.name_id.nil?
27
+ assert_not_nil response.name_id
31
28
  end
32
29
 
33
- it "default to raw input when a response is not Base64 encoded" do
30
+ should "default to raw input when a response is not Base64 encoded" do
34
31
  decoded = Base64.decode64(response_document_2)
35
32
  response = OneLogin::RubySaml::Response.new(decoded)
36
33
  assert response.document
37
34
  end
38
35
 
39
- describe "Assertion" do
40
- it "only retreive an assertion with an ID that matches the signature's reference URI" do
36
+ context "Assertion" do
37
+ should "only retreive an assertion with an ID that matches the signature's reference URI" do
41
38
  response = OneLogin::RubySaml::Response.new(wrapped_response_2)
42
39
  response.stubs(:conditions).returns(nil)
43
40
  settings = OneLogin::RubySaml::Settings.new
44
41
  settings.idp_cert_fingerprint = signature_fingerprint_1
45
42
  response.settings = settings
46
- assert response.name_id.nil?
43
+ assert_nil response.name_id
47
44
  end
48
45
  end
49
46
 
50
- describe "#validate!" do
51
- it "raise when settings not initialized" do
47
+ context "#validate!" do
48
+ should "raise when encountering a condition that prevents the document from being valid" do
52
49
  response = OneLogin::RubySaml::Response.new(response_document)
53
- err = assert_raises(OneLogin::RubySaml::ValidationError) do
54
- response.validate!
55
- end
56
- assert_equal "No settings on response", err.message
57
- end
58
-
59
- it "raise when encountering a condition that prevents the document from being valid" do
60
- response = OneLogin::RubySaml::Response.new(response_document)
61
- response.settings = settings
62
- err = assert_raises(OneLogin::RubySaml::ValidationError) do
63
- response.validate!
64
- end
65
- assert_equal "Current time is on or after NotOnOrAfter condition", err.message
66
- end
67
-
68
- it "raises an exception when no cert or fingerprint provided" do
69
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed)
70
- response.stubs(:conditions).returns(nil)
71
- settings = OneLogin::RubySaml::Settings.new
72
- response.settings = settings
73
- settings.idp_cert = nil
74
- settings.idp_cert_fingerprint = nil
75
- err = assert_raises(OneLogin::RubySaml::ValidationError) do
50
+ assert_raise(OneLogin::RubySaml::ValidationError) do
76
51
  response.validate!
77
52
  end
78
- assert_equal "No fingerprint or certificate on settings", err.message
79
53
  end
54
+ end
80
55
 
81
- it "raise when no signature" do
82
- response_no_signed_elements = OneLogin::RubySaml::Response.new(read_invalid_response("no_signature.xml.base64"))
83
- settings.idp_cert_fingerprint = signature_fingerprint_1
84
- response_no_signed_elements.settings = settings
85
- err = assert_raises(OneLogin::RubySaml::ValidationError) do
86
- response_no_signed_elements.validate!
87
- end
88
- assert_equal "Found an unexpected number of Signature Element. SAML Response rejected", err.message
89
- end
90
-
91
- it "raise when multiple signatures" do
92
- response_multiple_signed = OneLogin::RubySaml::Response.new(read_invalid_response("multiple_signed.xml.base64"))
93
- settings.idp_cert_fingerprint = signature_fingerprint_1
94
- response_multiple_signed.settings = settings
95
- response_multiple_signed.stubs(:validate_structure).returns(true)
96
- err = assert_raises(OneLogin::RubySaml::ValidationError) do
97
- response_multiple_signed.validate!
98
- end
99
- assert_equal "Duplicated ID. SAML Response rejected", err.message
100
- end
101
-
102
- it "raise when fingerprint missmatch" do
103
- resp_xml = Base64.decode64(response_document_valid_signed)
104
- response = OneLogin::RubySaml::Response.new(Base64.encode64(resp_xml))
105
- response.stubs(:conditions).returns(nil)
106
- settings = OneLogin::RubySaml::Settings.new
107
- settings.idp_cert_fingerprint = signature_fingerprint_1
108
- response.settings = settings
109
-
110
- err = assert_raises(OneLogin::RubySaml::ValidationError) do
111
- response.validate!
112
- end
113
- assert_equal 'Fingerprint mismatch', err.message
56
+ context "#validate_structure" do
57
+ should "raise when encountering a condition that prevents the document from being valid" do
58
+ response = OneLogin::RubySaml::Response.new(response_document_2)
59
+ response.send(:validate_structure)
60
+ assert response.errors.include? "Schema validation failed"
114
61
  end
115
-
116
62
  end
117
63
 
118
- describe "#is_valid?" do
119
- it "return false when response is initialized with blank data" do
64
+ context "#is_valid?" do
65
+ should "return false when response is initialized with blank data" do
120
66
  response = OneLogin::RubySaml::Response.new('')
121
67
  assert !response.is_valid?
122
68
  end
123
69
 
124
- it "return false if settings have not been set" do
70
+ should "return false if settings have not been set" do
125
71
  response = OneLogin::RubySaml::Response.new(response_document)
126
72
  assert !response.is_valid?
127
73
  end
128
74
 
129
- it "return false when no cert or fingerprint provided" do
130
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed)
131
- response.stubs(:conditions).returns(nil)
132
- settings = OneLogin::RubySaml::Settings.new
133
- response.settings = settings
134
- settings.idp_cert = nil
135
- settings.idp_cert_fingerprint = nil
136
- assert !response.is_valid?
137
- end
138
-
139
- it "return true when the response is initialized with valid data" do
140
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed)
75
+ should "return true when the response is initialized with valid data" do
76
+ response = OneLogin::RubySaml::Response.new(response_document_4)
141
77
  response.stubs(:conditions).returns(nil)
142
78
  assert !response.is_valid?
143
79
  settings = OneLogin::RubySaml::Settings.new
144
80
  assert !response.is_valid?
145
81
  response.settings = settings
146
82
  assert !response.is_valid?
147
- response.settings.idp_cert_fingerprint = signature_fingerprint_valid_res
148
- response.validate!
83
+ settings.idp_cert_fingerprint = signature_fingerprint_1
84
+ assert response.is_valid?
149
85
  end
150
86
 
151
- it "should be idempotent when the response is initialized with invalid data" do
152
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed)
87
+ should "should be idempotent when the response is initialized with invalid data" do
88
+ response = OneLogin::RubySaml::Response.new(response_document_4)
153
89
  response.stubs(:conditions).returns(nil)
154
90
  settings = OneLogin::RubySaml::Settings.new
155
91
  response.settings = settings
@@ -157,58 +93,36 @@ class ResponseTest < Minitest::Test
157
93
  assert !response.is_valid?
158
94
  end
159
95
 
160
- it "should be idempotent when the response is initialized with valid data" do
161
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed)
96
+ should "should be idempotent when the response is initialized with valid data" do
97
+ response = OneLogin::RubySaml::Response.new(response_document_4)
162
98
  response.stubs(:conditions).returns(nil)
163
99
  settings = OneLogin::RubySaml::Settings.new
164
100
  response.settings = settings
165
- response.settings.idp_cert_fingerprint = signature_fingerprint_valid_res
101
+ settings.idp_cert_fingerprint = signature_fingerprint_1
166
102
  assert response.is_valid?
167
103
  assert response.is_valid?
168
104
  end
169
105
 
170
- it "return true when valid response and using fingerprint" do
171
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed)
172
- response.stubs(:conditions).returns(nil)
173
- settings = OneLogin::RubySaml::Settings.new
174
- response.settings = settings
175
- settings.idp_cert = nil
176
- settings.idp_cert_fingerprint = "4B:68:C4:53:C7:D9:94:AA:D9:02:5C:99:D5:EF:CF:56:62:87:FE:8D"
177
- assert response.is_valid?
178
- end
179
-
180
- it "return true when valid response using certificate" do
181
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed)
106
+ should "return true when using certificate instead of fingerprint" do
107
+ response = OneLogin::RubySaml::Response.new(response_document_4)
182
108
  response.stubs(:conditions).returns(nil)
183
109
  settings = OneLogin::RubySaml::Settings.new
184
110
  response.settings = settings
185
- settings.idp_cert = valid_cert
111
+ settings.idp_cert = signature_1
186
112
  assert response.is_valid?
187
113
  end
188
114
 
189
- it "not allow signature wrapping attack" do
115
+ should "not allow signature wrapping attack" do
190
116
  response = OneLogin::RubySaml::Response.new(response_document_4)
191
117
  response.stubs(:conditions).returns(nil)
192
118
  settings = OneLogin::RubySaml::Settings.new
193
119
  settings.idp_cert_fingerprint = signature_fingerprint_1
194
120
  response.settings = settings
195
- assert !response.is_valid?
121
+ assert response.is_valid?
196
122
  assert response.name_id == "test@onelogin.com"
197
123
  end
198
124
 
199
- it "not allow element wrapping attack" do
200
- response_wrapped = OneLogin::RubySaml::Response.new(response_document_wrapped)
201
- response_wrapped.stubs(:conditions).returns(nil)
202
- response_wrapped.stubs(:validate_subject_confirmation).returns(true)
203
- settings = OneLogin::RubySaml::Settings.new
204
- response_wrapped.settings = settings
205
- response_wrapped.settings.idp_cert_fingerprint = signature_fingerprint_1
206
-
207
- assert !response_wrapped.is_valid?
208
- assert_nil response_wrapped.name_id
209
- end
210
-
211
- it "support dynamic namespace resolution on signature elements" do
125
+ should "support dynamic namespace resolution on signature elements" do
212
126
  response = OneLogin::RubySaml::Response.new(fixture("no_signature_ns.xml"))
213
127
  response.stubs(:conditions).returns(nil)
214
128
  settings = OneLogin::RubySaml::Settings.new
@@ -218,52 +132,7 @@ class ResponseTest < Minitest::Test
218
132
  assert response.validate!
219
133
  end
220
134
 
221
- it "support signature elements with no KeyInfo if cert provided" do
222
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed_without_x509certificate)
223
- response.stubs(:conditions).returns(nil)
224
- settings = OneLogin::RubySaml::Settings.new
225
- response.settings = settings
226
- settings.idp_cert = ruby_saml_cert
227
- settings.idp_cert_fingerprint = nil
228
- XMLSecurity::SignedDocument.any_instance.expects(:validate_signature).returns(true)
229
- assert response.validate!
230
- end
231
-
232
- it "support signature elements with no KeyInfo if cert provided as text" do
233
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed_without_x509certificate)
234
- response.stubs(:conditions).returns(nil)
235
- settings = OneLogin::RubySaml::Settings.new
236
- response.settings = settings
237
- settings.idp_cert = ruby_saml_cert_text
238
- settings.idp_cert_fingerprint = nil
239
- XMLSecurity::SignedDocument.any_instance.expects(:validate_signature).returns(true)
240
- assert response.validate!
241
- end
242
-
243
- it "returns an error if the signature contains no KeyInfo, cert is not provided and soft" do
244
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed_without_x509certificate)
245
- response.stubs(:conditions).returns(nil)
246
- settings = OneLogin::RubySaml::Settings.new
247
- response.settings = settings
248
- settings.idp_cert = nil
249
- settings.idp_cert_fingerprint = "28:74:9B:E8:1F:E8:10:9C:A8:7C:A9:C3:E3:C5:01:6C:92:1C:B4:BA"
250
- assert !response.is_valid?
251
- end
252
-
253
- it "raises an exception if the signature contains no KeyInfo, cert is not provided and no soft" do
254
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed_without_x509certificate)
255
- response.stubs(:conditions).returns(nil)
256
- settings = OneLogin::RubySaml::Settings.new
257
- response.settings = settings
258
- settings.idp_cert = nil
259
- settings.idp_cert_fingerprint = "28:74:9B:E8:1F:E8:10:9C:A8:7C:A9:C3:E3:C5:01:6C:92:1C:B4:BA"
260
- err = assert_raises(OneLogin::RubySaml::ValidationError) do
261
- response.validate!
262
- end
263
- assert_equal "Certificate element missing in response (ds:X509Certificate) and not cert provided at settings", err.message
264
- end
265
-
266
- it "validate ADFS assertions" do
135
+ should "validate ADFS assertions" do
267
136
  response = OneLogin::RubySaml::Response.new(fixture(:adfs_response_sha256))
268
137
  response.stubs(:conditions).returns(nil)
269
138
  settings = OneLogin::RubySaml::Settings.new
@@ -272,7 +141,7 @@ class ResponseTest < Minitest::Test
272
141
  assert response.validate!
273
142
  end
274
143
 
275
- it "validate the digest" do
144
+ should "validate the digest" do
276
145
  response = OneLogin::RubySaml::Response.new(r1_response_document_6)
277
146
  response.stubs(:conditions).returns(nil)
278
147
  settings = OneLogin::RubySaml::Settings.new
@@ -281,75 +150,19 @@ class ResponseTest < Minitest::Test
281
150
  assert response.validate!
282
151
  end
283
152
 
284
- it "Prevent node text with comment (VU#475445) attack" do
285
- response_doc = File.read(File.join(File.dirname(__FILE__), "responses", 'response_node_text_attack.xml.base64'))
286
- response = OneLogin::RubySaml::Response.new(response_doc)
287
-
288
- assert_equal "support@onelogin.com", response.name_id
289
- assert_equal "smith", response.attributes["surname"]
290
- end
291
-
292
- describe '#validate_audience' do
293
- it "return true when sp_entity_id not set or empty" do
294
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed)
295
- response.stubs(:conditions).returns(nil)
296
- settings = OneLogin::RubySaml::Settings.new
297
- response.settings = settings
298
- settings.idp_cert_fingerprint = signature_fingerprint_valid_res
299
- assert response.is_valid?
300
- settings.sp_entity_id = ''
301
- assert response.is_valid?
302
- end
303
-
304
- it "return false when sp_entity_id set to incorrectly" do
305
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed)
306
- response.stubs(:conditions).returns(nil)
307
- settings = OneLogin::RubySaml::Settings.new
308
- response.settings = settings
309
- settings.idp_cert_fingerprint = signature_fingerprint_valid_res
310
- settings.sp_entity_id = 'wrong_audience'
311
- assert !response.is_valid?
312
- end
313
-
314
- it "return true when sp_entity_id set to correctly" do
315
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed)
316
- response.stubs(:conditions).returns(nil)
317
- settings = OneLogin::RubySaml::Settings.new
318
- response.settings = settings
319
- settings.idp_cert_fingerprint = signature_fingerprint_valid_res
320
- settings.sp_entity_id = 'https://someone.example.com/audience'
321
- assert response.is_valid?
322
- end
323
- end
324
- end
325
-
326
- describe "#validate_issuer" do
327
- it "return true when the issuer of the Message/Assertion matches the IdP entityId" do
328
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed)
329
- response.settings = settings
330
- assert response.send(:validate_issuer)
331
-
332
- response.settings.idp_entity_id = 'https://app.onelogin.com/saml2'
333
- assert response.send(:validate_issuer)
334
- end
335
-
336
- it "return false when the issuer of the Message does not match the IdP entityId" do
337
- response = OneLogin::RubySaml::Response.new(read_invalid_response("invalid_issuer_message.xml.base64"))
338
- response.settings = settings
339
- response.settings.idp_entity_id = 'http://idp.example.com/'
340
- assert !response.send(:validate_issuer)
341
- end
342
-
343
- it "return false when the issuer of the Assertion does not match the IdP entityId" do
344
- response = OneLogin::RubySaml::Response.new(read_invalid_response("invalid_issuer_assertion.xml.base64"))
153
+ should "validate SAML 2.0 XML structure" do
154
+ resp_xml = Base64.decode64(response_document_4).gsub(/emailAddress/,'test')
155
+ response = OneLogin::RubySaml::Response.new(Base64.encode64(resp_xml))
156
+ response.stubs(:conditions).returns(nil)
157
+ settings = OneLogin::RubySaml::Settings.new
158
+ settings.idp_cert_fingerprint = signature_fingerprint_1
345
159
  response.settings = settings
346
- response.settings.idp_entity_id = 'http://idp.example.com/'
347
- assert !response.send(:validate_issuer)
160
+ assert_raises(OneLogin::RubySaml::ValidationError, 'Digest mismatch'){ response.validate! }
348
161
  end
349
162
  end
350
163
 
351
- describe "#name_id" do
352
- it "extract the value of the name id element" do
164
+ context "#name_id" do
165
+ should "extract the value of the name id element" do
353
166
  response = OneLogin::RubySaml::Response.new(response_document)
354
167
  assert_equal "support@onelogin.com", response.name_id
355
168
 
@@ -357,43 +170,19 @@ class ResponseTest < Minitest::Test
357
170
  assert_equal "someone@example.com", response.name_id
358
171
  end
359
172
 
360
- it "be extractable from an OpenSAML response" do
173
+ should "be extractable from an OpenSAML response" do
361
174
  response = OneLogin::RubySaml::Response.new(fixture(:open_saml))
362
175
  assert_equal "someone@example.org", response.name_id
363
176
  end
364
177
 
365
- it "be extractable from a Simple SAML PHP response" do
178
+ should "be extractable from a Simple SAML PHP response" do
366
179
  response = OneLogin::RubySaml::Response.new(fixture(:simple_saml_php))
367
180
  assert_equal "someone@example.com", response.name_id
368
181
  end
369
182
  end
370
183
 
371
- describe "#name_id_format" do
372
- it "extract the value of the name id element" do
373
- response = OneLogin::RubySaml::Response.new(response_document)
374
- response_signed = OneLogin::RubySaml::Response.new(response_document_valid_signed)
375
- assert_equal "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", response.name_id_format
376
- assert_equal "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", response_signed.name_id_format
377
- end
378
- end
379
-
380
- describe "#sessionindex" do
381
- it "extract the value of the sessionindex element" do
382
- response = OneLogin::RubySaml::Response.new(fixture(:simple_saml_php))
383
- assert_equal "_51be37965feb5579d803141076936dc2e9d1d98ebf", response.sessionindex
384
- end
385
- end
386
-
387
- describe "#response_id and assertion_id" do
388
- it "extract the value of the Response and Assertion IDs" do
389
- response = OneLogin::RubySaml::Response.new(response_document)
390
- assert_equal "GOSAMLR12901174571794", response.response_id
391
- assert_equal "pfxa46574df-b3b0-a06a-23c8-636413198772", response.assertion_id
392
- end
393
- end
394
-
395
- describe "#check_conditions" do
396
- it "check time conditions" do
184
+ context "#check_conditions" do
185
+ should "check time conditions" do
397
186
  response = OneLogin::RubySaml::Response.new(response_document)
398
187
  assert !response.send(:validate_conditions, true)
399
188
  response = OneLogin::RubySaml::Response.new(response_document_6)
@@ -404,290 +193,187 @@ class ResponseTest < Minitest::Test
404
193
  assert response.send(:validate_conditions, true)
405
194
  end
406
195
 
407
- it "optionally allow for clock drift" do
196
+ should "optionally allow for clock drift" do
408
197
  # The NotBefore condition in the document is 2011-06-14T18:21:01.516Z
409
- expected_time = Time.parse("2011-06-14T18:21:01Z")
410
- Time.stubs(:now).returns(expected_time)
198
+ Time.stubs(:now).returns(Time.parse("2011-06-14T18:21:01Z"))
411
199
  response = OneLogin::RubySaml::Response.new(response_document_5, :allowed_clock_drift => 0.515)
412
200
  assert !response.send(:validate_conditions, true)
413
201
 
414
- expected_time = Time.parse("2011-06-14T18:21:01Z")
415
- Time.stubs(:now).returns(expected_time)
202
+ Time.stubs(:now).returns(Time.parse("2011-06-14T18:21:01Z"))
416
203
  response = OneLogin::RubySaml::Response.new(response_document_5, :allowed_clock_drift => 0.516)
417
204
  assert response.send(:validate_conditions, true)
418
205
  end
419
206
  end
420
207
 
421
- describe "validate_signature" do
422
- it "raises an exception when no cert or fingerprint provided" do
423
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed)
424
- settings = OneLogin::RubySaml::Settings.new
425
- response.settings = settings
426
- settings.idp_cert = nil
427
- settings.idp_cert_fingerprint = nil
428
- err = assert_raises(OneLogin::RubySaml::ValidationError) do
429
- response.send(:validate_signature, false)
430
- end
431
- assert_equal "No fingerprint or certificate on settings", err.message
208
+ context "#attributes" do
209
+ should "extract the first attribute in a hash accessed via its symbol" do
210
+ response = OneLogin::RubySaml::Response.new(response_document)
211
+ assert_equal "demo", response.attributes[:uid]
432
212
  end
433
213
 
434
- it "raises an exception when wrong cert provided" do
435
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed)
436
- settings = OneLogin::RubySaml::Settings.new
437
- response.settings = settings
438
- settings.idp_cert = ruby_saml_cert2
439
- settings.idp_cert_fingerprint = nil
440
- err = assert_raises(OneLogin::RubySaml::ValidationError) do
441
- response.send(:validate_signature, false)
442
- end
443
- assert_equal "Fingerprint mismatch", err.message
214
+ should "extract the first attribute in a hash accessed via its name" do
215
+ response = OneLogin::RubySaml::Response.new(response_document)
216
+ assert_equal "demo", response.attributes["uid"]
444
217
  end
445
218
 
446
- it "raises an exception when wrong fingerprint provided" do
447
- response = OneLogin::RubySaml::Response.new(response_document_valid_signed)
448
- settings = OneLogin::RubySaml::Settings.new
449
- response.settings = settings
450
- settings.idp_cert = nil
451
- settings.idp_cert_fingerprint = "28:74:9B:E8:1F:E8:10:9C:A8:7C:A9:C3:E3:C5:01:6C:92:1C:B4:BA"
452
- err = assert_raises(OneLogin::RubySaml::ValidationError) do
453
- response.send(:validate_signature, false)
454
- end
455
- assert_equal "Fingerprint mismatch", err.message
219
+ should "extract all attributes" do
220
+ response = OneLogin::RubySaml::Response.new(response_document)
221
+ assert_equal "demo", response.attributes[:uid]
222
+ assert_equal "value", response.attributes[:another_value]
456
223
  end
457
224
 
458
- it "raises an exception when no signature" do
459
- response_no_signed_elements = OneLogin::RubySaml::Response.new(read_invalid_response("no_signature.xml.base64"))
460
- settings.idp_cert_fingerprint = signature_fingerprint_1
461
- response_no_signed_elements.settings = settings
462
- err = assert_raises(OneLogin::RubySaml::ValidationError) do
463
- response_no_signed_elements.validate!
464
- end
465
- assert_equal "Found an unexpected number of Signature Element. SAML Response rejected", err.message
225
+ should "work for implicit namespaces" do
226
+ response = OneLogin::RubySaml::Response.new(response_document_3)
227
+ assert_equal "someone@example.com", response.attributes["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"]
466
228
  end
467
- end
468
229
 
469
- describe "#attributes" do
470
- before do
471
- @response = OneLogin::RubySaml::Response.new(response_document)
230
+ should "not raise errors about nil/empty attributes for EncryptedAttributes" do
231
+ response = OneLogin::RubySaml::Response.new(response_document_7)
232
+ assert_equal 'Demo', response.attributes["first_name"]
472
233
  end
473
234
 
474
- it "extract the first attribute in a hash accessed via its symbol" do
475
- assert_equal "demo", @response.attributes[:uid]
235
+ should "not raise on responses without attributes" do
236
+ response = OneLogin::RubySaml::Response.new(response_document_4)
237
+ assert_equal OneLogin::RubySaml::Attributes.new, response.attributes
476
238
  end
477
239
 
478
- it "extract the first attribute in a hash accessed via its name" do
479
- assert_equal "demo", @response.attributes["uid"]
480
- end
240
+ context "#multiple values" do
241
+ should "extract single value as string" do
242
+ response = OneLogin::RubySaml::Response.new(fixture(:response_with_multiple_attribute_values))
243
+ assert_equal "demo", response.attributes[:uid]
244
+ end
481
245
 
482
- it "extract all attributes" do
483
- assert_equal "demo", @response.attributes[:uid]
484
- assert_equal "value", @response.attributes[:another_value]
485
- end
246
+ should "extract single value as string in compatibility mode off" do
247
+ response = OneLogin::RubySaml::Response.new(fixture(:response_with_multiple_attribute_values))
248
+ OneLogin::RubySaml::Attributes.single_value_compatibility = false
249
+ assert_equal ["demo"], response.attributes[:uid]
250
+ # classes are not reloaded between tests so restore default
251
+ OneLogin::RubySaml::Attributes.single_value_compatibility = true
252
+ end
486
253
 
487
- it "work for implicit namespaces" do
488
- response_3 = OneLogin::RubySaml::Response.new(response_document_3)
489
- assert_equal "someone@example.com", response_3.attributes["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"]
490
- end
254
+ should "extract first of multiple values as string for b/w compatibility" do
255
+ response = OneLogin::RubySaml::Response.new(fixture(:response_with_multiple_attribute_values))
256
+ assert_equal 'value1', response.attributes[:another_value]
257
+ end
491
258
 
492
- it "not raise on responses without attributes" do
493
- response_4 = OneLogin::RubySaml::Response.new(response_document_4)
494
- assert_equal OneLogin::RubySaml::Attributes.new, response_4.attributes
495
- end
259
+ should "extract first of multiple values as string for b/w compatibility in compatibility mode off" do
260
+ response = OneLogin::RubySaml::Response.new(fixture(:response_with_multiple_attribute_values))
261
+ OneLogin::RubySaml::Attributes.single_value_compatibility = false
262
+ assert_equal ['value1', 'value2'], response.attributes[:another_value]
263
+ OneLogin::RubySaml::Attributes.single_value_compatibility = true
264
+ end
496
265
 
497
- it "extract attributes from all AttributeStatement tags" do
498
- assert_equal "smith", response_with_multiple_attribute_statements.attributes[:surname]
499
- assert_equal "bob", response_with_multiple_attribute_statements.attributes[:firstname]
500
- end
266
+ should "return array with all attributes when asked in XML order" do
267
+ response = OneLogin::RubySaml::Response.new(fixture(:response_with_multiple_attribute_values))
268
+ assert_equal ['value1', 'value2'], response.attributes.multi(:another_value)
269
+ end
501
270
 
502
- it "be manipulable by hash methods such as #merge and not raise an exception" do
503
- @response.attributes.merge({ :testing_attribute => "test" })
504
- end
271
+ should "return array with all attributes when asked in XML order in compatibility mode off" do
272
+ response = OneLogin::RubySaml::Response.new(fixture(:response_with_multiple_attribute_values))
273
+ OneLogin::RubySaml::Attributes.single_value_compatibility = false
274
+ assert_equal ['value1', 'value2'], response.attributes.multi(:another_value)
275
+ OneLogin::RubySaml::Attributes.single_value_compatibility = true
276
+ end
505
277
 
506
- it "be manipulable by hash methods such as #shift and not raise an exception" do
507
- @response.attributes.shift
508
- end
278
+ should "return first of multiple values when multiple Attribute tags in XML" do
279
+ response = OneLogin::RubySaml::Response.new(fixture(:response_with_multiple_attribute_values))
280
+ assert_equal 'role1', response.attributes[:role]
281
+ end
509
282
 
510
- it "be manipulable by hash methods such as #merge! and actually contain the value" do
511
- @response.attributes.merge!({ :testing_attribute => "test" })
512
- assert @response.attributes[:testing_attribute]
513
- end
283
+ should "return first of multiple values when multiple Attribute tags in XML in compatibility mode off" do
284
+ response = OneLogin::RubySaml::Response.new(fixture(:response_with_multiple_attribute_values))
285
+ OneLogin::RubySaml::Attributes.single_value_compatibility = false
286
+ assert_equal ['role1', 'role2', 'role3'], response.attributes[:role]
287
+ OneLogin::RubySaml::Attributes.single_value_compatibility = true
288
+ end
289
+
290
+ should "return all of multiple values in reverse order when multiple Attribute tags in XML" do
291
+ response = OneLogin::RubySaml::Response.new(fixture(:response_with_multiple_attribute_values))
292
+ assert_equal ['role1', 'role2', 'role3'], response.attributes.multi(:role)
293
+ end
294
+
295
+ should "return all of multiple values in reverse order when multiple Attribute tags in XML in compatibility mode off" do
296
+ response = OneLogin::RubySaml::Response.new(fixture(:response_with_multiple_attribute_values))
297
+ OneLogin::RubySaml::Attributes.single_value_compatibility = false
298
+ assert_equal ['role1', 'role2', 'role3'], response.attributes.multi(:role)
299
+ OneLogin::RubySaml::Attributes.single_value_compatibility = true
300
+ end
301
+
302
+ should "return nil value correctly" do
303
+ response = OneLogin::RubySaml::Response.new(fixture(:response_with_multiple_attribute_values))
304
+ assert_nil response.attributes[:attribute_with_nil_value]
305
+ end
306
+
307
+ should "return nil value correctly when not in compatibility mode off" do
308
+ response = OneLogin::RubySaml::Response.new(fixture(:response_with_multiple_attribute_values))
309
+ OneLogin::RubySaml::Attributes.single_value_compatibility = false
310
+ assert_equal [nil], response.attributes[:attribute_with_nil_value]
311
+ OneLogin::RubySaml::Attributes.single_value_compatibility = true
312
+ end
313
+
314
+ should "return multiple values including nil and empty string" do
315
+ response = OneLogin::RubySaml::Response.new(fixture(:response_with_multiple_attribute_values))
316
+ assert_equal ["", "valuePresent", nil, nil], response.attributes.multi(:attribute_with_nils_and_empty_strings)
317
+ end
318
+
319
+ should "return multiple values from [] when not in compatibility mode off" do
320
+ response = OneLogin::RubySaml::Response.new(fixture(:response_with_multiple_attribute_values))
321
+ OneLogin::RubySaml::Attributes.single_value_compatibility = false
322
+ assert_equal ["", "valuePresent", nil, nil], response.attributes[:attribute_with_nils_and_empty_strings]
323
+ OneLogin::RubySaml::Attributes.single_value_compatibility = true
324
+ end
325
+
326
+ should "check what happens when trying retrieve attribute that does not exists" do
327
+ response = OneLogin::RubySaml::Response.new(fixture(:response_with_multiple_attribute_values))
328
+ assert_equal nil, response.attributes[:attribute_not_exists]
329
+ assert_equal nil, response.attributes.single(:attribute_not_exists)
330
+ assert_equal nil, response.attributes.multi(:attribute_not_exists)
331
+
332
+ OneLogin::RubySaml::Attributes.single_value_compatibility = false
333
+ assert_equal nil, response.attributes[:attribute_not_exists]
334
+ assert_equal nil, response.attributes.single(:attribute_not_exists)
335
+ assert_equal nil, response.attributes.multi(:attribute_not_exists)
336
+ OneLogin::RubySaml::Attributes.single_value_compatibility = true
337
+ end
514
338
 
515
- it "be manipulable by hash methods such as #shift and actually remove the value" do
516
- removed_value = @response.attributes.shift
517
- assert_nil @response.attributes[removed_value[0]]
518
339
  end
519
340
  end
520
341
 
521
- describe "#session_expires_at" do
522
- it "extract the value of the SessionNotOnOrAfter attribute" do
342
+ context "#session_expires_at" do
343
+ should "extract the value of the SessionNotOnOrAfter attribute" do
523
344
  response = OneLogin::RubySaml::Response.new(response_document)
524
345
  assert response.session_expires_at.is_a?(Time)
525
346
 
526
347
  response = OneLogin::RubySaml::Response.new(response_document_2)
527
- assert response.session_expires_at.nil?
348
+ assert_nil response.session_expires_at
528
349
  end
529
350
  end
530
351
 
531
- describe "#issuer" do
532
- it "return the issuer inside the response assertion" do
352
+ context "#issuer" do
353
+ should "return the issuer inside the response assertion" do
533
354
  response = OneLogin::RubySaml::Response.new(response_document)
534
355
  assert_equal "https://app.onelogin.com/saml/metadata/13590", response.issuer
535
356
  end
536
357
 
537
- it "return the issuer inside the response" do
358
+ should "return the issuer inside the response" do
538
359
  response = OneLogin::RubySaml::Response.new(response_document_2)
539
360
  assert_equal "wibble", response.issuer
540
361
  end
541
362
  end
542
363
 
543
- describe "#success" do
544
- it "find a status code that says success" do
364
+ context "#success" do
365
+ should "find a status code that says success" do
545
366
  response = OneLogin::RubySaml::Response.new(response_document)
546
- assert response.send(:success?)
367
+ response.success?
547
368
  end
548
369
  end
549
370
 
550
- describe '#xpath_first_from_signed_assertion' do
551
- it 'not allow arbitrary code execution' do
371
+ context '#xpath_first_from_signed_assertion' do
372
+ should 'not allow arbitrary code execution' do
552
373
  malicious_response_document = fixture('response_eval', false)
553
374
  response = OneLogin::RubySaml::Response.new(malicious_response_document)
554
375
  response.send(:xpath_first_from_signed_assertion)
555
- assert_nil $evalled
556
- end
557
- end
558
-
559
- describe "#multiple values" do
560
- it "extract single value as string" do
561
- assert_equal "demo", response_multiple_attr_values.attributes[:uid]
562
- end
563
-
564
- it "extract single value as string in compatibility mode off" do
565
- OneLogin::RubySaml::Attributes.single_value_compatibility = false
566
- assert_equal ["demo"], response_multiple_attr_values.attributes[:uid]
567
- # classes are not reloaded between tests so restore default
568
- OneLogin::RubySaml::Attributes.single_value_compatibility = true
569
- end
570
-
571
- it "extract first of multiple values as string for b/w compatibility" do
572
- assert_equal 'value1', response_multiple_attr_values.attributes[:another_value]
573
- end
574
-
575
- it "extract first of multiple values as string for b/w compatibility in compatibility mode off" do
576
- OneLogin::RubySaml::Attributes.single_value_compatibility = false
577
- assert_equal ['value1', 'value2'], response_multiple_attr_values.attributes[:another_value]
578
- OneLogin::RubySaml::Attributes.single_value_compatibility = true
579
- end
580
-
581
- it "return array with all attributes when asked in XML order" do
582
- assert_equal ['value1', 'value2'], response_multiple_attr_values.attributes.multi(:another_value)
583
- end
584
-
585
- it "return array with all attributes when asked in XML order in compatibility mode off" do
586
- OneLogin::RubySaml::Attributes.single_value_compatibility = false
587
- assert_equal ['value1', 'value2'], response_multiple_attr_values.attributes.multi(:another_value)
588
- OneLogin::RubySaml::Attributes.single_value_compatibility = true
589
- end
590
-
591
- it "return first of multiple values when multiple Attribute tags in XML" do
592
- assert_equal 'role1', response_multiple_attr_values.attributes[:role]
593
- end
594
-
595
- it "return first of multiple values when multiple Attribute tags in XML in compatibility mode off" do
596
- OneLogin::RubySaml::Attributes.single_value_compatibility = false
597
- assert_equal ['role1', 'role2', 'role3'], response_multiple_attr_values.attributes[:role]
598
- OneLogin::RubySaml::Attributes.single_value_compatibility = true
599
- end
600
-
601
- it "return all of multiple values in reverse order when multiple Attribute tags in XML" do
602
- assert_equal ['role1', 'role2', 'role3'], response_multiple_attr_values.attributes.multi(:role)
603
- end
604
-
605
- it "return all of multiple values in reverse order when multiple Attribute tags in XML in compatibility mode off" do
606
- OneLogin::RubySaml::Attributes.single_value_compatibility = false
607
- assert_equal ['role1', 'role2', 'role3'], response_multiple_attr_values.attributes.multi(:role)
608
- OneLogin::RubySaml::Attributes.single_value_compatibility = true
609
- end
610
-
611
- it "return all of multiple values when multiple Attribute tags in multiple AttributeStatement tags" do
612
- OneLogin::RubySaml::Attributes.single_value_compatibility = false
613
- assert_equal ['role1', 'role2', 'role3'], response_with_multiple_attribute_statements.attributes.multi(:role)
614
- OneLogin::RubySaml::Attributes.single_value_compatibility = true
615
- end
616
-
617
- it "return nil value correctly" do
618
- assert_nil response_multiple_attr_values.attributes[:attribute_with_nil_value]
619
- end
620
-
621
- it "return nil value correctly when not in compatibility mode off" do
622
- OneLogin::RubySaml::Attributes.single_value_compatibility = false
623
- assert [nil] == response_multiple_attr_values.attributes[:attribute_with_nil_value]
624
- OneLogin::RubySaml::Attributes.single_value_compatibility = true
625
- end
626
-
627
- it "return multiple values including nil and empty string" do
628
- response = OneLogin::RubySaml::Response.new(fixture(:response_with_multiple_attribute_values))
629
- assert_equal ["", "valuePresent", nil, nil], response.attributes.multi(:attribute_with_nils_and_empty_strings)
630
- end
631
-
632
- it "return multiple values from [] when not in compatibility mode off" do
633
- OneLogin::RubySaml::Attributes.single_value_compatibility = false
634
- assert_equal ["", "valuePresent", nil, nil], response_multiple_attr_values.attributes[:attribute_with_nils_and_empty_strings]
635
- OneLogin::RubySaml::Attributes.single_value_compatibility = true
636
- end
637
-
638
- it "check what happens when trying retrieve attribute that does not exists" do
639
- assert_nil response_multiple_attr_values.attributes[:attribute_not_exists]
640
- assert_nil response_multiple_attr_values.attributes.single(:attribute_not_exists)
641
- assert_nil response_multiple_attr_values.attributes.multi(:attribute_not_exists)
642
-
643
- OneLogin::RubySaml::Attributes.single_value_compatibility = false
644
- assert_nil response_multiple_attr_values.attributes[:attribute_not_exists]
645
- assert_nil response_multiple_attr_values.attributes.single(:attribute_not_exists)
646
- assert_nil response_multiple_attr_values.attributes.multi(:attribute_not_exists)
647
- OneLogin::RubySaml::Attributes.single_value_compatibility = true
648
- end
649
- end
650
-
651
- describe "signature wrapping attack with encrypted assertion" do
652
- it "should not be valid" do
653
- settings = OneLogin::RubySaml::Settings.new
654
- settings.private_key = valid_key
655
- signature_wrapping_attack = read_response("encrypted_new_attack.xml.base64")
656
- response_wrapped = OneLogin::RubySaml::Response.new(signature_wrapping_attack, :settings => settings)
657
- response_wrapped.stubs(:conditions).returns(nil)
658
- response_wrapped.stubs(:validate_subject_confirmation).returns(true)
659
- settings.idp_cert_fingerprint = "385b1eec71143f00db6af936e2ea12a28771d72c"
660
- assert !response_wrapped.is_valid?
661
- err = assert_raises(OneLogin::RubySaml::ValidationError) do
662
- response_wrapped.validate!
663
- end
664
- assert_equal "Found an invalid Signed Element. SAML Response rejected", err.message
665
- end
666
- end
667
-
668
- describe "signature wrapping attack - concealed SAML response body" do
669
- it "should not be valid" do
670
- settings = OneLogin::RubySaml::Settings.new
671
- signature_wrapping_attack = read_response("response_with_concealed_signed_assertion.xml")
672
- response_wrapped = OneLogin::RubySaml::Response.new(signature_wrapping_attack, :settings => settings)
673
- settings.idp_cert_fingerprint = '4b68c453c7d994aad9025c99d5efcf566287fe8d'
674
- response_wrapped.stubs(:conditions).returns(nil)
675
- response_wrapped.stubs(:validate_subject_confirmation).returns(true)
676
- response_wrapped.stubs(:validate_structure).returns(true)
677
- assert !response_wrapped.is_valid?
678
- assert !response_wrapped.validate!
679
- end
680
- end
681
-
682
- describe "signature wrapping attack - doubled signed assertion SAML response" do
683
- it "should not be valid" do
684
- settings = OneLogin::RubySaml::Settings.new
685
- signature_wrapping_attack = read_response("response_with_doubled_signed_assertion.xml")
686
- response_wrapped = OneLogin::RubySaml::Response.new(signature_wrapping_attack, :settings => settings)
687
- settings.idp_cert_fingerprint = '4b68c453c7d994aad9025c99d5efcf566287fe8d'
688
- response_wrapped.stubs(:conditions).returns(nil)
689
- response_wrapped.stubs(:validate_subject_confirmation).returns(true)
690
- assert !response_wrapped.is_valid?
376
+ assert_equal($evalled, nil)
691
377
  end
692
378
  end
693
379
  end