
<AuthnRequest> elements must contain the encryption certificate used to encrypt the assertion with the attribute statement. The encryption key is represented within a <ds:KeyInfo> element. Its XPath is: /samlp:AuthnRequest/samlp:extension/pefim:SPCertEnc/ds:KeyInfo/ ds:X509Data/ds:X509Certificate.
80 lines
2.4 KiB
Python
80 lines
2.4 KiB
Python
#!/usr/bin/env python
|
|
|
|
import saml2
|
|
from saml2 import SamlBase
|
|
from xmldsig import X509Data
|
|
from xmldsig import KeyInfo
|
|
|
|
NAMESPACE = 'urn:net:eustix:names:tc:PEFIM:0.0:assertion'
|
|
|
|
|
|
class SPCertEncType_(SamlBase):
|
|
"""The urn:net:eustix:names:tc:PEFIM:0.0:assertion:SPCertEncType element """
|
|
|
|
c_tag = 'SPCertEncType'
|
|
c_namespace = NAMESPACE
|
|
c_children = SamlBase.c_children.copy()
|
|
c_attributes = SamlBase.c_attributes.copy()
|
|
c_child_order = SamlBase.c_child_order[:]
|
|
c_cardinality = SamlBase.c_cardinality.copy()
|
|
c_children['{http://www.w3.org/2000/09/xmldsig#}KeyInfo'] = ('key_info',
|
|
[KeyInfo])
|
|
c_cardinality['key_info'] = {"min": 1}
|
|
c_attributes['VerifyDepth'] = ('verify_depth', 'unsignedByte', False)
|
|
c_child_order.extend(['key_info'])
|
|
|
|
def __init__(self,
|
|
key_info=None,
|
|
x509_data=None,
|
|
verify_depth='1',
|
|
text=None,
|
|
extension_elements=None,
|
|
extension_attributes=None):
|
|
SamlBase.__init__(self,
|
|
text=text,
|
|
extension_elements=extension_elements,
|
|
extension_attributes=extension_attributes)
|
|
if key_info:
|
|
self.key_info = key_info
|
|
elif x509_data:
|
|
self.key_info = KeyInfo(x509_data=x509_data)
|
|
else:
|
|
self.key_info = []
|
|
self.verify_depth = verify_depth
|
|
#self.x509_data = x509_data
|
|
|
|
|
|
def spcertenc_type__from_string(xml_string):
|
|
return saml2.create_class_from_xml_string(SPCertEncType_, xml_string)
|
|
|
|
|
|
class SPCertEnc(SPCertEncType_):
|
|
"""The urn:net:eustix:names:tc:PEFIM:0.0:assertion:SPCertEnc element """
|
|
|
|
c_tag = 'SPCertEnc'
|
|
c_namespace = NAMESPACE
|
|
c_children = SPCertEncType_.c_children.copy()
|
|
c_attributes = SPCertEncType_.c_attributes.copy()
|
|
c_child_order = SPCertEncType_.c_child_order[:]
|
|
c_cardinality = SPCertEncType_.c_cardinality.copy()
|
|
|
|
|
|
def spcertenc_from_string(xml_string):
|
|
return saml2.create_class_from_xml_string(SPCertEnc, xml_string)
|
|
|
|
|
|
ELEMENT_FROM_STRING = {
|
|
SPCertEnc.c_tag: spcertenc_from_string,
|
|
SPCertEncType_.c_tag: spcertenc_type__from_string,
|
|
}
|
|
|
|
ELEMENT_BY_TAG = {
|
|
'SPCertEnc': SPCertEnc,
|
|
'SPCertEncType': SPCertEncType_,
|
|
}
|
|
|
|
|
|
def factory(tag, **kwargs):
|
|
return ELEMENT_BY_TAG[tag](**kwargs)
|
|
|