1
1
#!/usr/bin/env python
2
2
# -*- coding: utf-8 -*-
3
+ from pathutils import dotname , full_path
4
+
5
+ from pytest import raises
6
+
3
7
from saml2 import xmldsig as ds
4
- from saml2 .response import authn_response , VerificationError
5
8
from saml2 .config import config_factory
9
+ from saml2 .response import VerificationError
10
+ from saml2 .response import authn_response
6
11
7
- from pathutils import dotname , full_path
8
12
9
13
HOLDER_OF_KEY_RESPONSE_FILE = full_path ("saml_hok.xml" )
10
14
INVALID_HOLDER_OF_KEY_RESPONSE_FILE = full_path ("saml_hok_invalid.xml" )
@@ -16,60 +20,68 @@ def test_valid_hok_response_is_parsed(self):
16
20
resp = self ._get_test_response (HOLDER_OF_KEY_RESPONSE_FILE )
17
21
resp .do_not_verify = True
18
22
resp .parse_assertion ()
19
-
20
23
assert resp .get_subject () is not None
21
24
assert len (resp .assertion .subject .subject_confirmation ) == 2
22
- key_infos = [sc .subject_confirmation_data .extensions_as_elements (ds .KeyInfo .c_tag , ds )[0 ]
23
- for sc in resp .assertion .subject .subject_confirmation ]
24
- actual_hok_certs = [key_info_element .x509_data [0 ].x509_certificate .text .strip ()
25
- for key_info_element in key_infos ]
25
+
26
+ actual_hok_certs = [
27
+ ki .x509_data [0 ].x509_certificate .text .strip ()
28
+ for sc in resp .assertion .subject .subject_confirmation
29
+ for ki in sc .subject_confirmation_data .extensions_as_elements (
30
+ ds .KeyInfo .c_tag , ds
31
+ )
32
+ ]
26
33
assert actual_hok_certs == self ._expected_hok_certs ()
27
34
28
35
def _expected_hok_certs (self ):
29
- certs = ["""MIICITCCAYoCAQEwDQYJKoZIhvcNAQELBQAwWDELMAkGA1UEBhMCenoxCzAJBgNV
30
- BAgMAnp6MQ0wCwYDVQQHDAR6enp6MQ4wDAYDVQQKDAVaenp6ejEOMAwGA1UECwwF
31
- Wnp6enoxDTALBgNVBAMMBHRlc3QwIBcNMTkwNDEyMTk1MDM0WhgPMzAxODA4MTMx
32
- OTUwMzRaMFgxCzAJBgNVBAYTAnp6MQswCQYDVQQIDAJ6ejENMAsGA1UEBwwEenp6
33
- ejEOMAwGA1UECgwFWnp6enoxDjAMBgNVBAsMBVp6enp6MQ0wCwYDVQQDDAR0ZXN0
34
- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHcj80WU/XBsd9FlyQmfjPUdfm
35
- edhCFDd6TEQmZNNqP/UG+VkGa+BXjRIHMfic/WxPTbGhCjv68ci0UDNomUXagFex
36
- LGNpkwa7+CRVtoc/1xgq+ySE6M4nhcCutScoxNvWNn5eSQ66i3U0sTv91MgsXxqE
37
- dTaiZg0BIufEc3dueQIDAQABMA0GCSqGSIb3DQEBCwUAA4GBAGUV5B+USHvaRa8k
38
- gCNJSuNpo6ARlv0ekrk8bbdNRBiEUdCMyoGJFfuM9K0zybX6Vr25wai3nvaog294
39
- Vx/jWjX2g5SDbjItH6VGy6C9GCGf1A07VxFRCfJn5tA9HuJjPKiE+g/BmrV5N4Ce
40
- alzFxPHWYkNOzoRU8qI7OqUai1kL""" ,
41
- """MIICITCCAYoCAQEwDQYJKoZIhvcNAQELBQAwWDELMAkGA1UEBhMCenoxCzAJBgNV
42
- BAgMAnp6MQ0wCwYDVQQHDAR6enp6MQ4wDAYDVQQKDAVaenp6ejEOMAwGA1UECwwF
43
- Wnp6enoxDTALBgNVBAMMBHRlc3QwIBcNMTkwNDEyMTk1MDM0WhgPMzAxODA4MTMx
44
- OTUwMzRaMFgxCzAJBgNVBAYTAnp6MQswCQYDVQQIDAJ6ejENMAsGA1UEBwwEenp6
45
- ejEOMAwGA1UECgwFWnp6enoxDjAMBgNVBAsMBVp6enp6MQ0wCwYDVQQDDAR0ZXN0
46
- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjW0kJM+4baWKtvO24ZsGXNvNK
47
- KkwTMz7OW5Z6BRqhSOq2WA0c5NCpMk6rD8Z2OTFEolPojEjf8dVyd/Ds/hrjFKQv
48
- 8wQgbdXLN51YTIsgd6h+hBJO+vzhl0PT4aT7M0JKo5ALtS6qk4tsworW2BnwyvsG
49
- SAinwfeWt4t/b1J3kwIDAQABMA0GCSqGSIb3DQEBCwUAA4GBAFtj7WArQQBugmh/
50
- KQjjlfTQ5A052QeXfgTyO9vv1S6MRIi7qgiaEv49cGXnJv/TWbySkMKObPMUApjg
51
- 6z8PqcxuShew5FCTkNvwhABFPiyu0fUj3e2FEPHfsBu76jz4ugtmhUqjqhzwFY9c
52
- tnWRkkl6J0AjM3LnHOSgjNIclDZG""" ]
53
- for index , item in enumerate (certs ):
54
- item = item .replace (' ' , '' ).replace ('\n ' , '' )
55
- certs [index ] = item
36
+ certs = [
37
+ (
38
+ "MIICITCCAYoCAQEwDQYJKoZIhvcNAQELBQAwWDELMAkGA1UEBhMCenoxCzAJBgNV"
39
+ "BAgMAnp6MQ0wCwYDVQQHDAR6enp6MQ4wDAYDVQQKDAVaenp6ejEOMAwGA1UECwwF"
40
+ "Wnp6enoxDTALBgNVBAMMBHRlc3QwIBcNMTkwNDEyMTk1MDM0WhgPMzAxODA4MTMx"
41
+ "OTUwMzRaMFgxCzAJBgNVBAYTAnp6MQswCQYDVQQIDAJ6ejENMAsGA1UEBwwEenp6"
42
+ "ejEOMAwGA1UECgwFWnp6enoxDjAMBgNVBAsMBVp6enp6MQ0wCwYDVQQDDAR0ZXN0"
43
+ "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHcj80WU/XBsd9FlyQmfjPUdfm"
44
+ "edhCFDd6TEQmZNNqP/UG+VkGa+BXjRIHMfic/WxPTbGhCjv68ci0UDNomUXagFex"
45
+ "LGNpkwa7+CRVtoc/1xgq+ySE6M4nhcCutScoxNvWNn5eSQ66i3U0sTv91MgsXxqE"
46
+ "dTaiZg0BIufEc3dueQIDAQABMA0GCSqGSIb3DQEBCwUAA4GBAGUV5B+USHvaRa8k"
47
+ "gCNJSuNpo6ARlv0ekrk8bbdNRBiEUdCMyoGJFfuM9K0zybX6Vr25wai3nvaog294"
48
+ "Vx/jWjX2g5SDbjItH6VGy6C9GCGf1A07VxFRCfJn5tA9HuJjPKiE+g/BmrV5N4Ce"
49
+ "alzFxPHWYkNOzoRU8qI7OqUai1kL"
50
+ ),
51
+ (
52
+ "MIICITCCAYoCAQEwDQYJKoZIhvcNAQELBQAwWDELMAkGA1UEBhMCenoxCzAJBgNV"
53
+ "BAgMAnp6MQ0wCwYDVQQHDAR6enp6MQ4wDAYDVQQKDAVaenp6ejEOMAwGA1UECwwF"
54
+ "Wnp6enoxDTALBgNVBAMMBHRlc3QwIBcNMTkwNDEyMTk1MDM0WhgPMzAxODA4MTMx"
55
+ "OTUwMzRaMFgxCzAJBgNVBAYTAnp6MQswCQYDVQQIDAJ6ejENMAsGA1UEBwwEenp6"
56
+ "ejEOMAwGA1UECgwFWnp6enoxDjAMBgNVBAsMBVp6enp6MQ0wCwYDVQQDDAR0ZXN0"
57
+ "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjW0kJM+4baWKtvO24ZsGXNvNK"
58
+ "KkwTMz7OW5Z6BRqhSOq2WA0c5NCpMk6rD8Z2OTFEolPojEjf8dVyd/Ds/hrjFKQv"
59
+ "8wQgbdXLN51YTIsgd6h+hBJO+vzhl0PT4aT7M0JKo5ALtS6qk4tsworW2BnwyvsG"
60
+ "SAinwfeWt4t/b1J3kwIDAQABMA0GCSqGSIb3DQEBCwUAA4GBAFtj7WArQQBugmh/"
61
+ "KQjjlfTQ5A052QeXfgTyO9vv1S6MRIi7qgiaEv49cGXnJv/TWbySkMKObPMUApjg"
62
+ "6z8PqcxuShew5FCTkNvwhABFPiyu0fUj3e2FEPHfsBu76jz4ugtmhUqjqhzwFY9c"
63
+ "tnWRkkl6J0AjM3LnHOSgjNIclDZG"
64
+ ),
65
+ ]
56
66
return certs
57
67
58
68
def test_invalid_hok_response_fails_verification (self ):
59
69
"""Verifies that response with invalid 'holder-of-key' subject confirmations is parsed successfully."""
60
70
resp = self ._get_test_response (INVALID_HOLDER_OF_KEY_RESPONSE_FILE )
61
71
resp .do_not_verify = True
62
72
63
- try :
73
+ with raises ( VerificationError ) :
64
74
resp .parse_assertion ()
65
- assert False , "parse_assertion() did not fail as expected"
66
- except VerificationError as e :
67
- assert e is not None
68
75
69
76
def _get_test_response (self , path ):
70
77
conf = config_factory ("idp" , dotname ("server_conf" ))
71
- resp = authn_response (conf , "https://sp:443/.auth/saml/login" , asynchop = False , allow_unsolicited = True )
72
- with open (path , 'r' ) as fp :
78
+ resp = authn_response (
79
+ conf ,
80
+ "https://sp:443/.auth/saml/login" ,
81
+ asynchop = False ,
82
+ allow_unsolicited = True ,
83
+ )
84
+ with open (path , "r" ) as fp :
73
85
authn_response_xml = fp .read ()
74
86
resp .loads (authn_response_xml , False )
75
87
return resp
0 commit comments