Skip to content

Commit 714e201

Browse files
author
Roland Hedberg
committed
Merge pull request #215 from HaToHo/master
PEFIM corrections
2 parents 357d073 + d8a03cb commit 714e201

File tree

5 files changed

+43
-20
lines changed

5 files changed

+43
-20
lines changed

src/saml2/extension/pefim.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import saml2
44
from saml2 import SamlBase
55
from xmldsig import X509Data
6+
from xmldsig import KeyInfo
67

78
NAMESPACE = 'urn:net:eustix:names:tc:PEFIM:0.0:assertion'
89

@@ -16,19 +17,31 @@ class SPCertEncType_(SamlBase):
1617
c_attributes = SamlBase.c_attributes.copy()
1718
c_child_order = SamlBase.c_child_order[:]
1819
c_cardinality = SamlBase.c_cardinality.copy()
19-
c_children['{http://www.w3.org/2000/09/xmldsig#}X509Data'] = ('x509_data',
20-
[X509Data])
20+
c_children['{http://www.w3.org/2000/09/xmldsig#}KeyInfo'] = ('key_info',
21+
[KeyInfo])
22+
c_cardinality['key_info'] = {"min": 1}
23+
c_attributes['VerifyDepth'] = ('verify_depth', 'unsignedByte', False)
24+
c_child_order.extend(['key_info'])
2125

2226
def __init__(self,
27+
key_info=None,
2328
x509_data=None,
29+
verify_depth='1',
2430
text=None,
2531
extension_elements=None,
2632
extension_attributes=None):
2733
SamlBase.__init__(self,
2834
text=text,
2935
extension_elements=extension_elements,
3036
extension_attributes=extension_attributes)
31-
self.x509_data = x509_data
37+
if key_info:
38+
self.key_info = key_info
39+
elif x509_data:
40+
self.key_info = KeyInfo(x509_data=x509_data)
41+
else:
42+
self.key_info = []
43+
self.verify_depth = verify_depth
44+
#self.x509_data = x509_data
3245

3346

3447
def spcertenc_type__from_string(xml_string):

src/saml2/sigver.py

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from Crypto.PublicKey import RSA
2222
from saml2.cert import OpenSSLWrapper
2323
from saml2.extension import pefim
24+
from saml2.extension.pefim import SPCertEnc
2425
from saml2.saml import EncryptedAssertion
2526

2627
import xmldsig as ds
@@ -1061,21 +1062,30 @@ def security_context(conf, debug=None):
10611062
def encrypt_cert_from_item(item):
10621063
_encrypt_cert = None
10631064
try:
1064-
_elem = extension_elements_to_elements(item.extension_elements[0].children,
1065-
[pefim, ds])
1066-
if len(_elem) == 1:
1067-
_encrypt_cert = _elem[0].x509_data[0].x509_certificate.text
1068-
else:
1069-
certs = cert_from_instance(item)
1070-
if len(certs) > 0:
1071-
_encrypt_cert = certs[0]
1072-
except Exception:
1065+
try:
1066+
_elem = extension_elements_to_elements(item.extensions.extension_elements,[pefim, ds])
1067+
except:
1068+
_elem = extension_elements_to_elements(item.extension_elements[0].children,
1069+
[pefim, ds])
1070+
1071+
for _tmp_elem in _elem:
1072+
if isinstance(_tmp_elem, SPCertEnc):
1073+
for _tmp_key_info in _tmp_elem.key_info:
1074+
if _tmp_key_info.x509_data is not None and len(_tmp_key_info.x509_data) > 0:
1075+
_encrypt_cert = _tmp_key_info.x509_data[0].x509_certificate.text
1076+
break
1077+
#_encrypt_cert = _elem[0].x509_data[0].x509_certificate.text
1078+
# else:
1079+
# certs = cert_from_instance(item)
1080+
# if len(certs) > 0:
1081+
# _encrypt_cert = certs[0]
1082+
except Exception as _exception:
10731083
pass
10741084

1075-
if _encrypt_cert is None:
1076-
certs = cert_from_instance(item)
1077-
if len(certs) > 0:
1078-
_encrypt_cert = certs[0]
1085+
# if _encrypt_cert is None:
1086+
# certs = cert_from_instance(item)
1087+
# if len(certs) > 0:
1088+
# _encrypt_cert = certs[0]
10791089

10801090
if _encrypt_cert is not None:
10811091
if _encrypt_cert.find("-----BEGIN CERTIFICATE-----\n") == -1:

tests/attribute_response.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@
3232
Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
3333
<saml2:SubjectConfirmationData Address="192.168.1.1"
3434
InResponseTo="id-f4d370f3d03650f3ec0da694e2348bfe"
35-
NotOnOrAfter="2014-09-14T21:06:32.081Z"
35+
NotOnOrAfter="2024-09-14T21:06:32.081Z"
3636
Recipient="https://myreviewroom.com/saml2/acs/"
3737
/>
3838
</saml2:SubjectConfirmation>
3939
</saml2:Subject>
4040
<saml2:Conditions NotBefore="2014-09-14T21:01:32.081Z"
41-
NotOnOrAfter="2014-09-14T21:06:32.081Z"
41+
NotOnOrAfter="2024-09-14T21:06:32.081Z"
4242
>
4343
<saml2:AudienceRestriction>
4444
<saml2:Audience>urn:mace:example.com:saml:roland:sp

tests/saml_false_signed.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ OmuMZY0K6ERY4fNVnGEAoUZeieehC6/ljmfk14xCAlE=</ns2:SignatureValue>
4949
_cddc88563d433f556d4cc70c3162deabddea3b5019
5050
</ns1:NameID>
5151
<ns1:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
52-
<ns1:SubjectConfirmationData InResponseTo="bahigehogffohiphlfmplepdpcohkhhmheppcdie" NotOnOrAfter="2014-10-04T09:59:39Z" Recipient="http://xenosmilus.umdc.umu.se:8087/login"/>
52+
<ns1:SubjectConfirmationData InResponseTo="bahigehogffohiphlfmplepdpcohkhhmheppcdie" NotOnOrAfter="2024-10-04T09:59:39Z" Recipient="http://xenosmilus.umdc.umu.se:8087/login"/>
5353
</ns1:SubjectConfirmation>
5454
</ns1:Subject>
5555
<ns1:Conditions NotBefore="2014-10-04T09:59:39Z" NotOnOrAfter="2024-05-04T09:59:39Z">

tests/test_82_pefim.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,5 @@
4848

4949
assert len(_elem) == 1
5050
_spcertenc = _elem[0]
51-
_cert = _spcertenc.x509_data[0].x509_certificate.text
51+
_cert = _spcertenc.key_info[0].x509_data[0].x509_certificate.text
5252
assert cert == _cert

0 commit comments

Comments
 (0)