Pylint and autumn cleaning

This commit is contained in:
Roland Hedberg
2009-10-15 09:50:13 +02:00
parent f027e7ccab
commit 70e299f27c
9 changed files with 534 additions and 407 deletions

View File

@@ -38,9 +38,9 @@ except ImportError:
except ImportError: except ImportError:
from elementtree import ElementTree from elementtree import ElementTree
SAML_NAMESPACE = 'urn:oasis:names:tc:SAML:2.0:assertion' NAMESPACE = 'urn:oasis:names:tc:SAML:2.0:assertion'
SAML_TEMPLATE = '{urn:oasis:names:tc:SAML:2.0:assertion}%s' #TEMPLATE = '{urn:oasis:names:tc:SAML:2.0:assertion}%s'
XSI_NAMESPACE = 'http://www.w3.org/2001/XMLSchema-instance' #XSI_NAMESPACE = 'http://www.w3.org/2001/XMLSchema-instance'
NAMEID_FORMAT_EMAILADDRESS = ( NAMEID_FORMAT_EMAILADDRESS = (
"urn:oasis:names:tc:SAML:2.0:nameid-format:emailAddress") "urn:oasis:names:tc:SAML:2.0:nameid-format:emailAddress")
@@ -438,3 +438,14 @@ class SamlBase(ExtensionContainer):
self.__dict__[extension_attribute_name] = value self.__dict__[extension_attribute_name] = value
def extension_element_to_element(extension_element, element_to_string,
namespace=None):
if extension_element.namespace == namespace:
try:
ets = element_to_string[extension_element.tag]
return ets(extension_element.to_string())
except KeyError:
pass
return None

View File

@@ -9,12 +9,8 @@ except ImportError:
from md5 import md5 from md5 import md5
import zlib import zlib
from subprocess import Popen, PIPE from saml2 import samlp, saml
from saml2 import samlp, saml, metadata
from saml2.sigver import correctly_signed_response from saml2.sigver import correctly_signed_response
from saml2.metadata import cert_from_assertion
#from saml2.metadata import load_certs_to_manager
DEFAULT_BINDING = saml2.BINDING_HTTP_REDIRECT DEFAULT_BINDING = saml2.BINDING_HTTP_REDIRECT
@@ -323,7 +319,7 @@ class Saml2Client:
def init_request(self, request, destination): def init_request(self, request, destination):
request.id = _sid() request.id = _sid()
request.version = "2.0" request.version = "2.0"
request.issue_instant = date_and_time() request.issue_instant = get_date_and_time()
request.destination = destination request.destination = destination
return request return request
@@ -342,11 +338,11 @@ class Saml2Client:
:return: An AttributeQuery instance :return: An AttributeQuery instance
""" """
attr_query = self.init_request(samlp.AttributeQuery()) attr_query = self.init_request(samlp.AttributeQuery(), destination)
subject = samlp.Subject() subject = saml.Subject()
name_id = samlp.NameID() name_id = saml.NameID()
name_id.format = NAMEID_FORMAT_PERSISTENT name_id.format = saml.NAMEID_FORMAT_PERSISTENT
if name_qualifier: if name_qualifier:
name_id.name_qualifier = name_qualifier name_id.name_qualifier = name_qualifier
if sp_name_qualifier: if sp_name_qualifier:
@@ -357,7 +353,7 @@ class Saml2Client:
attr_query.subject = subject attr_query.subject = subject
if attribute: if attribute:
attrs = [] attrs = []
for attr,values in attribute.items(): for attr, values in attribute.items():
sattr = saml.Attribute() sattr = saml.Attribute()
sattr.name = attr sattr.name = attr
#sattr.name_format = NAME_FORMAT_UNSPECIFIED #sattr.name_format = NAME_FORMAT_UNSPECIFIED
@@ -400,7 +396,7 @@ class Saml2Client:
logout_req = self.init_request(samlp.LogoutRequest()) logout_req = self.init_request(samlp.LogoutRequest())
logout_req.session_index = _sid() logout_req.session_index = _sid()
logout_req.base_id = samlp.BaseID(text=subject_id) logout_req.base_id = saml.BaseID(text=subject_id)
if reason: if reason:
logout_req.reason = reason logout_req.reason = reason
if not_on_or_after: if not_on_or_after:

View File

@@ -24,18 +24,20 @@
from saml2 import saml, SamlBase, create_class_from_xml_string from saml2 import saml, SamlBase, create_class_from_xml_string
from saml2.saml import Attribute from saml2.saml import Attribute
from saml2.saml import NAMESPACE as SAML_NAMESPACE
import xmldsig as ds import xmldsig as ds
from xmldsig import NAMESPACE as DS_NAMESPACE
from xmlenc import NAMESPACE as XMLENC_NAMESPACE
MD_NAMESPACE = 'urn:oasis:names:tc:SAML:2.0:metadata' NAMESPACE = 'urn:oasis:names:tc:SAML:2.0:metadata'
MD_TEMPLATE = '{urn:oasis:names:tc:SAML:2.0:metadata}%s' #MD_TEMPLATE = '{urn:oasis:names:tc:SAML:2.0:metadata}%s'
XMLENC_NAMESPACE = 'http://www.w3.org/2001/04/xmlenc#'
XML_TEMPLATE = '{http://www.w3.org/XML/1998/namespace}%s' XML_TEMPLATE = '{http://www.w3.org/XML/1998/namespace}%s'
class Extensions(SamlBase): class Extensions(SamlBase):
"""The md:Extensions element""" """The md:Extensions element"""
c_tag = 'Extensions' c_tag = 'Extensions'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -46,7 +48,7 @@ def extensions_from_string(xml_string):
class LocalizedName(SamlBase): class LocalizedName(SamlBase):
"""The md:LocalizedName abstract type""" """The md:LocalizedName abstract type"""
c_tag = 'LocalizedName' c_tag = 'LocalizedName'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes[XML_TEMPLATE % 'lang'] = 'lang' c_attributes[XML_TEMPLATE % 'lang'] = 'lang'
@@ -71,7 +73,7 @@ def localized_name_from_string(xml_string):
class LocalizedURI(SamlBase): class LocalizedURI(SamlBase):
"""The md:LocalizedURI abstract type""" """The md:LocalizedURI abstract type"""
c_tag = 'LocalizedURI' c_tag = 'LocalizedURI'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes[XML_TEMPLATE % 'lang'] = 'lang' c_attributes[XML_TEMPLATE % 'lang'] = 'lang'
@@ -97,7 +99,7 @@ def localized_uri_from_string(xml_string):
class OrganizationName(LocalizedName): class OrganizationName(LocalizedName):
"""The md:OrganizationName element""" """The md:OrganizationName element"""
c_tag = 'OrganizationName' c_tag = 'OrganizationName'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = LocalizedName.c_children.copy() c_children = LocalizedName.c_children.copy()
c_attributes = LocalizedName.c_attributes.copy() c_attributes = LocalizedName.c_attributes.copy()
@@ -123,7 +125,7 @@ def organization_name_from_string(xml_string):
class OrganizationDisplayName(LocalizedName): class OrganizationDisplayName(LocalizedName):
"""The md:OrganizationDisplayName element""" """The md:OrganizationDisplayName element"""
c_tag = 'OrganizationDisplayName' c_tag = 'OrganizationDisplayName'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = LocalizedName.c_children.copy() c_children = LocalizedName.c_children.copy()
c_attributes = LocalizedName.c_attributes.copy() c_attributes = LocalizedName.c_attributes.copy()
@@ -149,7 +151,7 @@ def organization_display_name_from_string(xml_string):
class OrganizationURL(LocalizedURI): class OrganizationURL(LocalizedURI):
"""The md:OrganizationURL element""" """The md:OrganizationURL element"""
c_tag = 'OrganizationURL' c_tag = 'OrganizationURL'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = LocalizedURI.c_children.copy() c_children = LocalizedURI.c_children.copy()
c_attributes = LocalizedURI.c_attributes.copy() c_attributes = LocalizedURI.c_attributes.copy()
@@ -176,15 +178,15 @@ class Organization(SamlBase):
"""The md:Organization base type""" """The md:Organization base type"""
c_tag = 'Organization' c_tag = 'Organization'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_children['{%s}Extensions' % MD_NAMESPACE] = ('extensions', Extensions) c_children['{%s}Extensions' % NAMESPACE] = ('extensions', Extensions)
c_children['{%s}OrganizationName' % MD_NAMESPACE] = ( c_children['{%s}OrganizationName' % NAMESPACE] = (
'organization_name', [OrganizationName]) 'organization_name', [OrganizationName])
c_children['{%s}OrganizationDisplayName' % MD_NAMESPACE] = ( c_children['{%s}OrganizationDisplayName' % NAMESPACE] = (
'organization_display_name', [OrganizationDisplayName]) 'organization_display_name', [OrganizationDisplayName])
c_children['{%s}OrganizationURL' % MD_NAMESPACE] = ( c_children['{%s}OrganizationURL' % NAMESPACE] = (
'organization_url', [OrganizationURL]) 'organization_url', [OrganizationURL])
child_order = ['extensions', 'organization_name', child_order = ['extensions', 'organization_name',
'organization_display_name', 'organization_url'] 'organization_display_name', 'organization_url']
@@ -218,7 +220,7 @@ class Endpoint(SamlBase):
"""The md:Endpoint base type""" """The md:Endpoint base type"""
c_tag = 'Endpoint' c_tag = 'Endpoint'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['Binding'] = 'binding' c_attributes['Binding'] = 'binding'
@@ -251,7 +253,7 @@ class IndexedEndpoint(Endpoint):
"""The md:IndexedEndpoint base type""" """The md:IndexedEndpoint base type"""
c_tag = 'IndexedEndpoint' c_tag = 'IndexedEndpoint'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = Endpoint.c_children.copy() c_children = Endpoint.c_children.copy()
c_attributes = Endpoint.c_attributes.copy() c_attributes = Endpoint.c_attributes.copy()
c_attributes['index'] = 'index' c_attributes['index'] = 'index'
@@ -286,7 +288,7 @@ class Company(SamlBase):
"""The md:Company element""" """The md:Company element"""
c_tag = 'Company' c_tag = 'Company'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -299,7 +301,7 @@ class GivenName(SamlBase):
"""The md:GivenName element""" """The md:GivenName element"""
c_tag = 'GivenName' c_tag = 'GivenName'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -312,7 +314,7 @@ class SurName(SamlBase):
"""The md:SurName element""" """The md:SurName element"""
c_tag = 'SurName' c_tag = 'SurName'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -325,7 +327,7 @@ class EmailAddress(SamlBase):
"""The md:EmailAddress element""" """The md:EmailAddress element"""
c_tag = 'EmailAddress' c_tag = 'EmailAddress'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -338,7 +340,7 @@ class TelephoneNumber(SamlBase):
"""The md:TelephoneNumber element""" """The md:TelephoneNumber element"""
c_tag = 'TelephoneNumber' c_tag = 'TelephoneNumber'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -351,17 +353,17 @@ class ContactPerson(SamlBase):
"""The md:ContactPerson element""" """The md:ContactPerson element"""
c_tag = 'ContactPerson' c_tag = 'ContactPerson'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['contactType'] = 'contact_type' c_attributes['contactType'] = 'contact_type'
c_children['{%s}Extensions' % MD_NAMESPACE] = ('extensions', Extensions) c_children['{%s}Extensions' % NAMESPACE] = ('extensions', Extensions)
c_children['{%s}Company' % MD_NAMESPACE] = ('company', Company) c_children['{%s}Company' % NAMESPACE] = ('company', Company)
c_children['{%s}GivenName' % MD_NAMESPACE] = ('given_name', GivenName) c_children['{%s}GivenName' % NAMESPACE] = ('given_name', GivenName)
c_children['{%s}SurName' % MD_NAMESPACE] = ('sur_name', SurName) c_children['{%s}SurName' % NAMESPACE] = ('sur_name', SurName)
c_children['{%s}EmailAddress' % MD_NAMESPACE] = ( c_children['{%s}EmailAddress' % NAMESPACE] = (
'email_address', [EmailAddress]) 'email_address', [EmailAddress])
c_children['{%s}TelephoneNumber' % MD_NAMESPACE] = ( c_children['{%s}TelephoneNumber' % NAMESPACE] = (
'telephone_number', [TelephoneNumber]) 'telephone_number', [TelephoneNumber])
c_child_order = ['extensions', 'company', 'given_name', 'sur_name', c_child_order = ['extensions', 'company', 'given_name', 'sur_name',
'email_address', 'telephone_number'] 'email_address', 'telephone_number']
@@ -402,7 +404,7 @@ class AdditionalMetadataLocation(SamlBase):
"""The md:AdditionalMetadataLocation element""" """The md:AdditionalMetadataLocation element"""
c_tag = 'AdditionalMetadataLocation' c_tag = 'AdditionalMetadataLocation'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['namespace'] = 'namespace' c_attributes['namespace'] = 'namespace'
@@ -455,14 +457,14 @@ class EncryptionMethod(SamlBase):
"""The md:EncryptionMethod element""" """The md:EncryptionMethod element"""
c_tag = 'EncryptionMethod' c_tag = 'EncryptionMethod'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['Algorithm'] = 'algorithm' c_attributes['Algorithm'] = 'algorithm'
c_children['{%s}KeySize' % XMLENC_NAMESPACE] = ('key_size', KeySize) c_children['{%s}KeySize' % XMLENC_NAMESPACE] = ('key_size', KeySize)
c_children['{%s}OAEPparams' % XMLENC_NAMESPACE] = ( c_children['{%s}OAEPparams' % XMLENC_NAMESPACE] = (
'oaep_params', OAEPparams) 'oaep_params', OAEPparams)
c_children['{%s}DigestMethod' % ds.DS_NAMESPACE] = ( c_children['{%s}DigestMethod' % DS_NAMESPACE] = (
'digest_method', ds.DigestMethod) 'digest_method', ds.DigestMethod)
c_child_order = ['key_size', 'oaep_params', 'digest_method'] c_child_order = ['key_size', 'oaep_params', 'digest_method']
@@ -495,12 +497,12 @@ class KeyDescriptor(SamlBase):
"""The md:KeyDescriptor element""" """The md:KeyDescriptor element"""
c_tag = 'KeyDescriptor' c_tag = 'KeyDescriptor'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['use'] = 'use' c_attributes['use'] = 'use'
c_children['{%s}KeyInfo' % ds.DS_NAMESPACE] = ('key_info', ds.KeyInfo) c_children['{%s}KeyInfo' % DS_NAMESPACE] = ('key_info', ds.KeyInfo)
c_children['{%s}EncryptionMethod' % MD_NAMESPACE] = ( c_children['{%s}EncryptionMethod' % NAMESPACE] = (
'encryption_method', [EncryptionMethod]) 'encryption_method', [EncryptionMethod])
c_child_order = ['key_info', 'encryption_method'] c_child_order = ['key_info', 'encryption_method']
@@ -531,7 +533,7 @@ class RoleDescriptor(SamlBase):
"""The md:RoleDescriptor element""" """The md:RoleDescriptor element"""
c_tag = 'RoleDescriptor' c_tag = 'RoleDescriptor'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['ID'] = 'identifier' c_attributes['ID'] = 'identifier'
@@ -539,13 +541,13 @@ class RoleDescriptor(SamlBase):
c_attributes['cacheDuration'] = 'cache_duration' c_attributes['cacheDuration'] = 'cache_duration'
c_attributes['protocolSupportEnumeration'] = 'protocol_support_enumeration' c_attributes['protocolSupportEnumeration'] = 'protocol_support_enumeration'
c_attributes['errorURL'] = 'error_url' c_attributes['errorURL'] = 'error_url'
c_children['{%s}Signature' % ds.DS_NAMESPACE] = ('signature', ds.Signature) c_children['{%s}Signature' % DS_NAMESPACE] = ('signature', ds.Signature)
c_children['{%s}Extensions' % MD_NAMESPACE] = ('extensions', Extensions) c_children['{%s}Extensions' % NAMESPACE] = ('extensions', Extensions)
c_children['{%s}KeyDescriptor' % MD_NAMESPACE] = ( c_children['{%s}KeyDescriptor' % NAMESPACE] = (
'key_descriptor', [KeyDescriptor]) 'key_descriptor', [KeyDescriptor])
c_children['{%s}Organization' % MD_NAMESPACE] = ( c_children['{%s}Organization' % NAMESPACE] = (
'organization', Organization) 'organization', Organization)
c_children['{%s}ContactPerson' % MD_NAMESPACE] = ( c_children['{%s}ContactPerson' % NAMESPACE] = (
'contact_person', [ContactPerson]) 'contact_person', [ContactPerson])
c_child_order = ['signature', 'extensions', 'key_descriptor', c_child_order = ['signature', 'extensions', 'key_descriptor',
'organization', 'contact_person'] 'organization', 'contact_person']
@@ -629,7 +631,7 @@ class NameIDFormat(SamlBase):
"""The md:NameIDFormat element""" """The md:NameIDFormat element"""
c_tag = 'NameIDFormat' c_tag = 'NameIDFormat'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -642,16 +644,16 @@ class SSODescriptor(RoleDescriptor):
"""The md:SSODescriptor element""" """The md:SSODescriptor element"""
c_tag = 'SSODescriptor' c_tag = 'SSODescriptor'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = RoleDescriptor.c_children.copy() c_children = RoleDescriptor.c_children.copy()
c_attributes = RoleDescriptor.c_attributes.copy() c_attributes = RoleDescriptor.c_attributes.copy()
c_children['{%s}ArtifactResolutionService' % MD_NAMESPACE] = ( c_children['{%s}ArtifactResolutionService' % NAMESPACE] = (
'artifact_resolution_service', [ArtifactResolutionService]) 'artifact_resolution_service', [ArtifactResolutionService])
c_children['{%s}SingleLogoutService' % MD_NAMESPACE] = ( c_children['{%s}SingleLogoutService' % NAMESPACE] = (
'single_logout_service', [SingleLogoutService]) 'single_logout_service', [SingleLogoutService])
c_children['{%s}ManageNameIDService' % MD_NAMESPACE] = ( c_children['{%s}ManageNameIDService' % NAMESPACE] = (
'manage_name_id_service', [ManageNameIDService]) 'manage_name_id_service', [ManageNameIDService])
c_children['{%s}NameIDFormat' % MD_NAMESPACE] = ( c_children['{%s}NameIDFormat' % NAMESPACE] = (
'name_id_format', [NameIDFormat]) 'name_id_format', [NameIDFormat])
c_child_order = ['signature', 'extensions', 'key_descriptor', c_child_order = ['signature', 'extensions', 'key_descriptor',
@@ -734,7 +736,7 @@ class AttributeProfile(SamlBase):
"""The md:AttributeProfile element""" """The md:AttributeProfile element"""
c_tag = 'AttributeProfile' c_tag = 'AttributeProfile'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -747,19 +749,19 @@ class IDPSSODescriptor(SSODescriptor):
"""The md:IDPSSODescriptor element""" """The md:IDPSSODescriptor element"""
c_tag = 'IDPSSODescriptor' c_tag = 'IDPSSODescriptor'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SSODescriptor.c_children.copy() c_children = SSODescriptor.c_children.copy()
c_attributes = SSODescriptor.c_attributes.copy() c_attributes = SSODescriptor.c_attributes.copy()
c_attributes['WantAuthnRequestsSigned'] = 'want_authn_requests_signed' c_attributes['WantAuthnRequestsSigned'] = 'want_authn_requests_signed'
c_children['{%s}SingleSignOnService' % MD_NAMESPACE] = ( c_children['{%s}SingleSignOnService' % NAMESPACE] = (
'single_sign_on_service', [SingleSignOnService]) 'single_sign_on_service', [SingleSignOnService])
c_children['{%s}NameIDMappingService' % MD_NAMESPACE] = ( c_children['{%s}NameIDMappingService' % NAMESPACE] = (
'name_id_mapping_service', [NameIDMappingService]) 'name_id_mapping_service', [NameIDMappingService])
c_children['{%s}AssertionIDRequestService' % MD_NAMESPACE] = ( c_children['{%s}AssertionIDRequestService' % NAMESPACE] = (
'assertion_id_request_service', [AssertionIDRequestService]) 'assertion_id_request_service', [AssertionIDRequestService])
c_children['{%s}AttributeProfile' % MD_NAMESPACE] = ( c_children['{%s}AttributeProfile' % NAMESPACE] = (
'attribute_profile', [AttributeProfile]) 'attribute_profile', [AttributeProfile])
c_children['{%s}Attribute' % saml.SAML_NAMESPACE] = ( c_children['{%s}Attribute' % SAML_NAMESPACE] = (
'attribute', [Attribute]) 'attribute', [Attribute])
c_child_order = ['signature', 'extensions', 'key_descriptor', c_child_order = ['signature', 'extensions', 'key_descriptor',
@@ -831,7 +833,7 @@ def idpsso_descriptor_from_string(xml_string):
class RequestedAttribute(Attribute): class RequestedAttribute(Attribute):
c_tag = 'RequestedAttribute' c_tag = 'RequestedAttribute'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = Attribute.c_children.copy() c_children = Attribute.c_children.copy()
c_attributes = Attribute.c_attributes.copy() c_attributes = Attribute.c_attributes.copy()
c_attributes['isRequired'] = 'is_required' c_attributes['isRequired'] = 'is_required'
@@ -864,7 +866,7 @@ def requested_attribute_from_string(xml_string):
class ServiceName(LocalizedName): class ServiceName(LocalizedName):
"""The md:ServiceName element""" """The md:ServiceName element"""
c_tag = 'ServiceName' c_tag = 'ServiceName'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = LocalizedName.c_children.copy() c_children = LocalizedName.c_children.copy()
c_attributes = LocalizedName.c_attributes.copy() c_attributes = LocalizedName.c_attributes.copy()
@@ -889,7 +891,7 @@ def service_name_from_string(xml_string):
class ServiceDescription(LocalizedName): class ServiceDescription(LocalizedName):
"""The md:ServiceDescription element""" """The md:ServiceDescription element"""
c_tag = 'ServiceDescription' c_tag = 'ServiceDescription'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = LocalizedName.c_children.copy() c_children = LocalizedName.c_children.copy()
c_attributes = LocalizedName.c_attributes.copy() c_attributes = LocalizedName.c_attributes.copy()
@@ -915,16 +917,16 @@ class AttributeConsumingService(SamlBase):
"""The md:AttributeConsumingService element""" """The md:AttributeConsumingService element"""
c_tag = 'AttributeConsumingService' c_tag = 'AttributeConsumingService'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['index'] = 'index' c_attributes['index'] = 'index'
c_attributes['isDefault'] = 'is_default' c_attributes['isDefault'] = 'is_default'
c_children['{%s}ServiceName' % MD_NAMESPACE] = ( c_children['{%s}ServiceName' % NAMESPACE] = (
'service_name', [ServiceName]) 'service_name', [ServiceName])
c_children['{%s}ServiceDescription' % MD_NAMESPACE] = ( c_children['{%s}ServiceDescription' % NAMESPACE] = (
'service_description', [ServiceDescription]) 'service_description', [ServiceDescription])
c_children['{%s}RequestedAttribute' % MD_NAMESPACE] = ( c_children['{%s}RequestedAttribute' % NAMESPACE] = (
'requested_attribute', [RequestedAttribute]) 'requested_attribute', [RequestedAttribute])
c_child_order = ['service_name', 'service_description', c_child_order = ['service_name', 'service_description',
'requested_attribute'] 'requested_attribute']
@@ -961,14 +963,14 @@ class SPSSODescriptor(SSODescriptor):
"""The md:SPSSODescriptor element""" """The md:SPSSODescriptor element"""
c_tag = 'SPSSODescriptor' c_tag = 'SPSSODescriptor'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SSODescriptor.c_children.copy() c_children = SSODescriptor.c_children.copy()
c_attributes = SSODescriptor.c_attributes.copy() c_attributes = SSODescriptor.c_attributes.copy()
c_attributes['AuthnRequestsSigned'] = 'authn_requests_signed' c_attributes['AuthnRequestsSigned'] = 'authn_requests_signed'
c_attributes['WantAssertionsSigned'] = 'want_assertions_signed' c_attributes['WantAssertionsSigned'] = 'want_assertions_signed'
c_children['{%s}AssertionConsumerService' % MD_NAMESPACE] = ( c_children['{%s}AssertionConsumerService' % NAMESPACE] = (
'assertion_consumer_service', [AssertionConsumerService]) 'assertion_consumer_service', [AssertionConsumerService])
c_children['{%s}AttributeConsumingService' % MD_NAMESPACE] = ( c_children['{%s}AttributeConsumingService' % NAMESPACE] = (
'attribute_consuming_service', [AttributeConsumingService]) 'attribute_consuming_service', [AttributeConsumingService])
c_child_order = ['signature', 'extensions', 'key_descriptor', c_child_order = ['signature', 'extensions', 'key_descriptor',
@@ -994,7 +996,8 @@ class SPSSODescriptor(SSODescriptor):
:param identifier: ID attribute :param identifier: ID attribute
:param valid_until: validUntil attribute :param valid_until: validUntil attribute
:param cache_duration: cacheDuration attribute :param cache_duration: cacheDuration attribute
:param protocol_support_enumeration: protocolSupportEnumeration attribute :param protocol_support_enumeration: protocolSupportEnumeration
attribute
:param error_url: errorURL attribute :param error_url: errorURL attribute
:param signature: ds:Signature element :param signature: ds:Signature element
:param extensions: Extensions element :param extensions: Extensions element
@@ -1011,12 +1014,14 @@ class SPSSODescriptor(SSODescriptor):
:param attribute_consuming_service: AttributeConsumingService elements :param attribute_consuming_service: AttributeConsumingService elements
:param text: The text data in the this element :param text: The text data in the this element
:param extension_elements: A list of ExtensionElement instances :param extension_elements: A list of ExtensionElement instances
:param extension_attributes: A dictionary of attribute value string pairs :param extension_attributes: A dictionary of attribute value string
pairs
""" """
SSODescriptor.__init__(self, artifact_resolution_service, SSODescriptor.__init__(self, artifact_resolution_service,
single_logout_service, manage_name_id_service, single_logout_service, manage_name_id_service,
name_id_format, identifier, valid_until, cache_duration, name_id_format, identifier, valid_until,
protocol_support_enumeration, error_url, signature, cache_duration, protocol_support_enumeration,
error_url, signature,
extensions, key_descriptor, organization, extensions, key_descriptor, organization,
contact_person, text, extension_elements, contact_person, text, extension_elements,
extension_attributes) extension_attributes)
@@ -1038,28 +1043,28 @@ class EntityDescriptor(SamlBase):
# AffiliationDescriptor is not implemented yet # AffiliationDescriptor is not implemented yet
c_tag = 'EntityDescriptor' c_tag = 'EntityDescriptor'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['entityID'] = 'entity_id' c_attributes['entityID'] = 'entity_id'
c_attributes['ID'] = 'identifier' c_attributes['ID'] = 'identifier'
c_attributes['validUntil'] = 'valid_until' c_attributes['validUntil'] = 'valid_until'
c_attributes['cacheDuration'] = 'cache_duration' c_attributes['cacheDuration'] = 'cache_duration'
c_children['{%s}Signature' % ds.DS_NAMESPACE] = ('signature', ds.Signature) c_children['{%s}Signature' % DS_NAMESPACE] = ('signature', ds.Signature)
c_children['{%s}Extensions' % MD_NAMESPACE] = ('extensions', Extensions) c_children['{%s}Extensions' % NAMESPACE] = ('extensions', Extensions)
c_children['{%s}RoleDescriptor' % MD_NAMESPACE] = ( c_children['{%s}RoleDescriptor' % NAMESPACE] = (
'role_descriptor', [RoleDescriptor]) 'role_descriptor', [RoleDescriptor])
c_children['{%s}IDPSSODescriptor' % MD_NAMESPACE] = ( c_children['{%s}IDPSSODescriptor' % NAMESPACE] = (
'idp_sso_descriptor', [IDPSSODescriptor]) 'idp_sso_descriptor', [IDPSSODescriptor])
c_children['{%s}SPSSODescriptor' % MD_NAMESPACE] = ( c_children['{%s}SPSSODescriptor' % NAMESPACE] = (
'sp_sso_descriptor', [SPSSODescriptor]) 'sp_sso_descriptor', [SPSSODescriptor])
c_children['{%s}Organization' % MD_NAMESPACE] = ( c_children['{%s}Organization' % NAMESPACE] = (
'organization', Organization) 'organization', Organization)
c_children['{%s}ContactPerson' % MD_NAMESPACE] = ( c_children['{%s}ContactPerson' % NAMESPACE] = (
'contact_person', [ContactPerson]) 'contact_person', [ContactPerson])
c_children['{%s}ContactPerson' % MD_NAMESPACE] = ( c_children['{%s}ContactPerson' % NAMESPACE] = (
'contact_person', [ContactPerson]) 'contact_person', [ContactPerson])
c_children['{%s}AdditionalMetadataLocation' % MD_NAMESPACE] = ( c_children['{%s}AdditionalMetadataLocation' % NAMESPACE] = (
'additional_metadata_location', [AdditionalMetadataLocation]) 'additional_metadata_location', [AdditionalMetadataLocation])
c_child_order = ['signature', 'extensions', 'role_descriptor', c_child_order = ['signature', 'extensions', 'role_descriptor',
'idp_sso_descriptor', 'sp_sso_descriptor', 'organization', 'idp_sso_descriptor', 'sp_sso_descriptor', 'organization',
@@ -1113,16 +1118,16 @@ class EntitiesDescriptor(SamlBase):
"""The md:EntitiesDescriptor element""" """The md:EntitiesDescriptor element"""
c_tag = 'EntitiesDescriptor' c_tag = 'EntitiesDescriptor'
c_namespace = MD_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['name'] = 'name' c_attributes['name'] = 'name'
c_attributes['ID'] = 'identifier' c_attributes['ID'] = 'identifier'
c_attributes['validUntil'] = 'valid_until' c_attributes['validUntil'] = 'valid_until'
c_attributes['cacheDuration'] = 'cache_duration' c_attributes['cacheDuration'] = 'cache_duration'
c_children['{%s}Signature' % ds.DS_NAMESPACE] = ('signature', ds.Signature) c_children['{%s}Signature' % DS_NAMESPACE] = ('signature', ds.Signature)
c_children['{%s}Extensions' % MD_NAMESPACE] = ('extensions', Extensions) c_children['{%s}Extensions' % NAMESPACE] = ('extensions', Extensions)
c_children['{%s}EntityDescriptor' % MD_NAMESPACE] = ( c_children['{%s}EntityDescriptor' % NAMESPACE] = (
'entity_descriptor', [EntityDescriptor]) 'entity_descriptor', [EntityDescriptor])
c_child_order = ['signature', 'extensions', 'entity_descriptor', c_child_order = ['signature', 'extensions', 'entity_descriptor',
'entities_descriptor'] 'entities_descriptor']
@@ -1156,7 +1161,7 @@ class EntitiesDescriptor(SamlBase):
self.entity_descriptor = entity_descriptor or [] self.entity_descriptor = entity_descriptor or []
self.entities_descriptor = entities_descriptor or [] self.entities_descriptor = entities_descriptor or []
EntitiesDescriptor.c_children['{%s}EntitiesDescriptor' % MD_NAMESPACE] = ( EntitiesDescriptor.c_children['{%s}EntitiesDescriptor' % NAMESPACE] = (
'entities_descriptor', [EntitiesDescriptor]) 'entities_descriptor', [EntitiesDescriptor])
def entities_descriptor_from_string(xml_string): def entities_descriptor_from_string(xml_string):

View File

@@ -49,8 +49,10 @@ class MetaData(dict):
def __init_(self, arg=None): def __init_(self, arg=None):
dict.__init__(self, arg) dict.__init__(self, arg)
self._loc_key = {}
self._loc_bind = {}
def import_metadata(self,xml_str): def import_metadata(self, xml_str):
""" Import information; organization distinguish name, location and """ Import information; organization distinguish name, location and
certificates from a metadata file. certificates from a metadata file.
@@ -68,7 +70,8 @@ class MetaData(dict):
#print "--",len(entity_descriptor.idp_sso_descriptor) #print "--",len(entity_descriptor.idp_sso_descriptor)
for idp in entity_descriptor.idp_sso_descriptor: for idp in entity_descriptor.idp_sso_descriptor:
if samlp.SAMLP_NAMESPACE not in idp.protocol_support_enumeration.split(" "): if samlp.SAMLP_NAMESPACE not in \
idp.protocol_support_enumeration.split(" "):
#print "<<<", idp.protocol_support_enumeration #print "<<<", idp.protocol_support_enumeration
continue continue
@@ -142,7 +145,8 @@ def cert_from_assertion(assertion):
def make_entity_description(): def make_entity_description():
org = md.Organization( org = md.Organization(
organization_name = [md.Organization(text="Example Inc.")], organization_name = [md.Organization(text="Example Inc.")],
organization_url = [md.OrganizationURL(text="http://www.example.com/")]) organization_url = [md.OrganizationURL(
text="http://www.example.com/")])
spsso = md.SPSSODescriptor( spsso = md.SPSSODescriptor(
protocolSupportEnumeration = samlp.SAMLP_NAMESPACE, protocolSupportEnumeration = samlp.SAMLP_NAMESPACE,
@@ -150,7 +154,7 @@ def make_entity_description():
authn_requests_signed = False authn_requests_signed = False
) )
return md.EntityDescription( return md.EntityDescriptor(
entity_id = "http://xenosmilus.umdc.umu.se:8087/", entity_id = "http://xenosmilus.umdc.umu.se:8087/",
organization = org, organization = org,
sp_sso_descriptor = [spsso] sp_sso_descriptor = [spsso]

View File

@@ -29,8 +29,7 @@ import xmldsig as ds
import saml2 import saml2
from saml2 import SamlBase from saml2 import SamlBase
SAML_NAMESPACE = 'urn:oasis:names:tc:SAML:2.0:assertion' NAMESPACE = 'urn:oasis:names:tc:SAML:2.0:assertion'
SAML_TEMPLATE = '{urn:oasis:names:tc:SAML:2.0:assertion}%s'
XSI_NAMESPACE = 'http://www.w3.org/2001/XMLSchema-instance' XSI_NAMESPACE = 'http://www.w3.org/2001/XMLSchema-instance'
NAMEID_FORMAT_EMAILADDRESS = ( NAMEID_FORMAT_EMAILADDRESS = (
@@ -66,7 +65,7 @@ class BaseID(SamlBase):
""" The saml:BaseID element """ """ The saml:BaseID element """
c_tag = 'BaseID' c_tag = 'BaseID'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['NameQualifier'] = 'name_qualifier' c_attributes['NameQualifier'] = 'name_qualifier'
@@ -103,7 +102,7 @@ class NameID(BaseID):
"""The saml:NameID element""" """The saml:NameID element"""
c_tag = 'NameID' c_tag = 'NameID'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = BaseID.c_children.copy() c_children = BaseID.c_children.copy()
c_attributes = BaseID.c_attributes.copy() c_attributes = BaseID.c_attributes.copy()
c_attributes['Format'] = 'name_format' c_attributes['Format'] = 'name_format'
@@ -144,7 +143,7 @@ def name_id_from_string(xml_string):
class EncryptedID(SamlBase): class EncryptedID(SamlBase):
"""The saml:EncryptedID element""" """The saml:EncryptedID element"""
c_tag = 'EncryptedID' c_tag = 'EncryptedID'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -178,7 +177,7 @@ class AssertionIDRef(SamlBase):
"""The saml:AssertionIDRef element makes a reference to a SAML assertion """The saml:AssertionIDRef element makes a reference to a SAML assertion
by its unique identifier.""" by its unique identifier."""
c_tag = 'AssertionIDRef' c_tag = 'AssertionIDRef'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -194,7 +193,7 @@ class AssertionURIRef(SamlBase):
"""The saml:AssertionURIRef element makes a reference to a SAML assertion """The saml:AssertionURIRef element makes a reference to a SAML assertion
by URI reference.""" by URI reference."""
c_tag = 'AssertionURIRef' c_tag = 'AssertionURIRef'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -212,7 +211,7 @@ class EncryptedAssertion(SamlBase):
Processing specification""" Processing specification"""
c_tag = 'EncryptedAssertion' c_tag = 'EncryptedAssertion'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -233,7 +232,7 @@ class SubjectConfirmationData(SamlBase):
under which the act of subject confirmation can take place""" under which the act of subject confirmation can take place"""
c_tag = 'SubjectConfirmationData' c_tag = 'SubjectConfirmationData'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['NotBefore'] = 'not_before' c_attributes['NotBefore'] = 'not_before'
@@ -293,25 +292,25 @@ class SubjectConfirmation(SamlBase):
the party with whom the relying party is communicating.""" the party with whom the relying party is communicating."""
c_tag = 'SubjectConfirmation' c_tag = 'SubjectConfirmation'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['Method'] = 'method' c_attributes['Method'] = 'method'
c_children['{%s}BaseID' % SAML_NAMESPACE] = ('base_id', BaseID) c_children['{%s}BaseID' % NAMESPACE] = ('base_id', BaseID)
c_children['{%s}NameID' % SAML_NAMESPACE] = ('name_id', NameID) c_children['{%s}NameID' % NAMESPACE] = ('name_id', NameID)
c_children['{%s}EncryptedID' % SAML_NAMESPACE] = ('encrypted_id', c_children['{%s}EncryptedID' % NAMESPACE] = ('encrypted_id',
EncryptedID) EncryptedID)
c_children['{%s}SubjectConfirmationData' % SAML_NAMESPACE] = ( c_children['{%s}SubjectConfirmationData' % NAMESPACE] = (
'subject_confirmation_data', SubjectConfirmationData) 'subject_confirmation_data', SubjectConfirmationData)
c_child_order = ['base_id', 'name_id', 'encrypted_id', c_child_order = ['base_id', 'name_id', 'encrypted_id',
'subject_confirmation_data'] 'subject_confirmation_data']
def __init__(self, method=None, name_id=None, def __init__(self, base_id=None, name_id=None, encrypted_id=None,
subject_confirmation_data=None, text=None, subject_confirmation_data=None, text=None,
extension_elements=None, extension_attributes=None): extension_elements=None, extension_attributes=None):
"""Constructor for SubjectConfirmation """Constructor for SubjectConfirmation
:param method: Method attribute :param base_id: Method attribute
:param name_id: NameID element :param name_id: NameID element
:param subject_confirmation_data: SubjectConfirmationData element :param subject_confirmation_data: SubjectConfirmationData element
:param text: The text data in this element :param text: The text data in this element
@@ -321,8 +320,9 @@ class SubjectConfirmation(SamlBase):
""" """
SamlBase.__init__(self, text, extension_elements, extension_attributes) SamlBase.__init__(self, text, extension_elements, extension_attributes)
self.method = method self.base_id = base_id
self.name_id = name_id self.name_id = name_id
self.encrypted_id = encrypted_id
self.subject_confirmation_data = subject_confirmation_data self.subject_confirmation_data = subject_confirmation_data
def subject_confirmation_from_string(xml_string): def subject_confirmation_from_string(xml_string):
@@ -335,14 +335,13 @@ def subject_confirmation_from_string(xml_string):
class Subject(SamlBase): class Subject(SamlBase):
"""The saml:Subject element""" """The saml:Subject element"""
# TODO: BaseID, EncryptedID element
c_tag = 'Subject' c_tag = 'Subject'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_children['{%s}NameID' % SAML_NAMESPACE] = ('name_id', NameID) c_children['{%s}NameID' % NAMESPACE] = ('name_id', NameID)
c_children['{%s}SubjectConfirmation' % SAML_NAMESPACE] = ( c_children['{%s}SubjectConfirmation' % NAMESPACE] = (
'subject_confirmation', [SubjectConfirmation]) 'subject_confirmation', [SubjectConfirmation])
c_child_order = ['name_id', 'subject_confirmation'] c_child_order = ['name_id', 'subject_confirmation']
@@ -375,7 +374,7 @@ class Condition(SamlBase):
"""The saml:Condition element""" """The saml:Condition element"""
c_tag = 'Condition' c_tag = 'Condition'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -393,7 +392,7 @@ class Audience(SamlBase):
audience.""" audience."""
c_tag = 'Audience' c_tag = 'Audience'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -411,10 +410,10 @@ class AudienceRestriction(Condition):
elements.""" elements."""
c_tag = 'AudienceRestriction' c_tag = 'AudienceRestriction'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = Condition.c_children.copy() c_children = Condition.c_children.copy()
c_attributes = Condition.c_attributes.copy() c_attributes = Condition.c_attributes.copy()
c_children['{%s}Audience' % SAML_NAMESPACE] = ('audience', Audience) c_children['{%s}Audience' % NAMESPACE] = ('audience', Audience)
def __init__(self, audience=None, text=None, def __init__(self, audience=None, text=None,
extension_elements=None, extension_attributes=None): extension_elements=None, extension_attributes=None):
@@ -427,7 +426,7 @@ class AudienceRestriction(Condition):
pairs pairs
""" """
Condition.__init__(self, text,extension_elements, Condition.__init__(self, text, extension_elements,
extension_attributes) extension_attributes)
self.audience = audience self.audience = audience
@@ -465,11 +464,11 @@ class ProxyRestriction(Condition):
of the information contained in the original assertion.""" of the information contained in the original assertion."""
c_tag = 'ProxyRestriction' c_tag = 'ProxyRestriction'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = Condition.c_children.copy() c_children = Condition.c_children.copy()
c_attributes = Condition.c_attributes.copy() c_attributes = Condition.c_attributes.copy()
c_attributes['Count'] = 'count' c_attributes['Count'] = 'count'
c_children['{%s}Audience' % SAML_NAMESPACE] = ('audience', [Audience]) c_children['{%s}Audience' % NAMESPACE] = ('audience', [Audience])
def __init__(self, count=None, audience=None, text=None, def __init__(self, count=None, audience=None, text=None,
extension_elements=None, extension_attributes=None): extension_elements=None, extension_attributes=None):
@@ -501,17 +500,17 @@ class Conditions(SamlBase):
"""The saml:Conditions element""" """The saml:Conditions element"""
c_tag = 'Conditions' c_tag = 'Conditions'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['NotBefore'] = 'not_before' c_attributes['NotBefore'] = 'not_before'
c_attributes['NotOnOrAfter'] = 'not_on_or_after' c_attributes['NotOnOrAfter'] = 'not_on_or_after'
c_children['{%s}Condition' % SAML_NAMESPACE] = ('condition', [Condition]) c_children['{%s}Condition' % NAMESPACE] = ('condition', [Condition])
c_children['{%s}AudienceRestriction' % SAML_NAMESPACE] = ( c_children['{%s}AudienceRestriction' % NAMESPACE] = (
'audience_restriction', [AudienceRestriction]) 'audience_restriction', [AudienceRestriction])
c_children['{%s}OneTimeUse' % SAML_NAMESPACE] = ( c_children['{%s}OneTimeUse' % NAMESPACE] = (
'one_time_use', [OneTimeUse]) 'one_time_use', [OneTimeUse])
c_children['{%s}ProxyRestriction' % SAML_NAMESPACE] = ( c_children['{%s}ProxyRestriction' % NAMESPACE] = (
'proxy_restriction', [ProxyRestriction]) 'proxy_restriction', [ProxyRestriction])
c_child_order = ['condition', 'audience_restriction', 'one_time_use', c_child_order = ['condition', 'audience_restriction', 'one_time_use',
'proxy_restriction'] 'proxy_restriction']
@@ -565,7 +564,7 @@ class Statement(SamlBase):
assertion-based applications to reuse the SAML assertion framework.""" assertion-based applications to reuse the SAML assertion framework."""
c_tag = 'Statement' c_tag = 'Statement'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -581,7 +580,7 @@ class SubjectLocality(SamlBase):
"""The saml:SubjectLocality element""" """The saml:SubjectLocality element"""
c_tag = 'SubjectLocality' c_tag = 'SubjectLocality'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['Address'] = 'address' c_attributes['Address'] = 'address'
@@ -613,7 +612,7 @@ class AuthnContextClassRef(SamlBase):
"""The saml:AuthnContextClassRef element""" """The saml:AuthnContextClassRef element"""
c_tag = 'AuthnContextClassRef' c_tag = 'AuthnContextClassRef'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -626,7 +625,7 @@ class AuthnContextDeclRef(SamlBase):
"""The saml:AuthnContextDeclRef element""" """The saml:AuthnContextDeclRef element"""
c_tag = 'AuthnContextDeclRef' c_tag = 'AuthnContextDeclRef'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -639,7 +638,7 @@ class AuthnContextDecl(SamlBase):
"""The saml:AuthnContextDecl element""" """The saml:AuthnContextDecl element"""
c_tag = 'AuthnContextDecl' c_tag = 'AuthnContextDecl'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -652,7 +651,7 @@ class AuthenticatingAuthority(SamlBase):
"""The saml:AuthenticatingAuthority element""" """The saml:AuthenticatingAuthority element"""
c_tag = 'AuthenticatingAuthority' c_tag = 'AuthenticatingAuthority'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -666,16 +665,16 @@ class AuthnContext(SamlBase):
"""The saml:AuthnContext element""" """The saml:AuthnContext element"""
c_tag = 'AuthnContext' c_tag = 'AuthnContext'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_children['{%s}AuthnContextClassRef' % SAML_NAMESPACE] = ( c_children['{%s}AuthnContextClassRef' % NAMESPACE] = (
'authn_context_class_ref', AuthnContextClassRef) 'authn_context_class_ref', AuthnContextClassRef)
c_children['{%s}AuthnContextDeclRef' % SAML_NAMESPACE] = ( c_children['{%s}AuthnContextDeclRef' % NAMESPACE] = (
'authn_context_decl_ref', AuthnContextDeclRef) 'authn_context_decl_ref', AuthnContextDeclRef)
c_children['{%s}AuthnContextDecl' % SAML_NAMESPACE] = ( c_children['{%s}AuthnContextDecl' % NAMESPACE] = (
'authn_context_decl', AuthnContextDecl) 'authn_context_decl', AuthnContextDecl)
c_children['{%s}AuthenticatingAuthority' % SAML_NAMESPACE] = ( c_children['{%s}AuthenticatingAuthority' % NAMESPACE] = (
'authenticating_authority', [AuthenticatingAuthority]) 'authenticating_authority', [AuthenticatingAuthority])
c_child_order = ['authn_context_class_ref', c_child_order = ['authn_context_class_ref',
'authn_context_decl', 'authn_context_decl_ref', 'authn_context_decl', 'authn_context_decl_ref',
@@ -725,15 +724,15 @@ class AuthnStatement(Statement):
"""The saml:AuthnStatement element""" """The saml:AuthnStatement element"""
c_tag = 'AuthnStatement' c_tag = 'AuthnStatement'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = Statement.c_children.copy() c_children = Statement.c_children.copy()
c_attributes = Statement.c_attributes.copy() c_attributes = Statement.c_attributes.copy()
c_attributes['AuthnInstant'] = 'authn_instant' c_attributes['AuthnInstant'] = 'authn_instant'
c_attributes['SessionIndex'] = 'session_index' c_attributes['SessionIndex'] = 'session_index'
c_attributes['SessionNotOnOrAfter'] = 'session_not_on_or_after' c_attributes['SessionNotOnOrAfter'] = 'session_not_on_or_after'
c_children['{%s}SubjectLocality' % SAML_NAMESPACE] = ( c_children['{%s}SubjectLocality' % NAMESPACE] = (
'subject_locality', SubjectLocality) 'subject_locality', SubjectLocality)
c_children['{%s}AuthnContext' % SAML_NAMESPACE] = ( c_children['{%s}AuthnContext' % NAMESPACE] = (
'authn_context', AuthnContext) 'authn_context', AuthnContext)
c_child_order = ['subject_locality', 'authn_context'] c_child_order = ['subject_locality', 'authn_context']
@@ -784,7 +783,7 @@ class AttributeValue(SamlBase):
attribute.""" attribute."""
c_tag = 'AttributeValue' c_tag = 'AttributeValue'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -803,7 +802,7 @@ class EncryptedAttribute(SamlBase):
specification.""" specification."""
c_tag = 'EncryptedAttribute' c_tag = 'EncryptedAttribute'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
@@ -819,13 +818,13 @@ class Attribute(SamlBase):
"""The saml:Attribute element""" """The saml:Attribute element"""
c_tag = 'Attribute' c_tag = 'Attribute'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['Name'] = 'name' c_attributes['Name'] = 'name'
c_attributes['NameFormat'] = 'name_format' c_attributes['NameFormat'] = 'name_format'
c_attributes['FriendlyName'] = 'friendly_name' c_attributes['FriendlyName'] = 'friendly_name'
c_children['{%s}AttributeValue' % SAML_NAMESPACE] = ('attribute_value', c_children['{%s}AttributeValue' % NAMESPACE] = ('attribute_value',
[AttributeValue]) [AttributeValue])
def __init__(self, name=None, name_format=None, friendly_name=None, def __init__(self, name=None, name_format=None, friendly_name=None,
@@ -868,13 +867,12 @@ class AttributeStatement(Statement):
authority asserting that the assertion subject is associated with the authority asserting that the assertion subject is associated with the
specified attributes.""" specified attributes."""
# TODO: EncryptedAttribute
c_tag = 'AttributeStatement' c_tag = 'AttributeStatement'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = Statement.c_children.copy() c_children = Statement.c_children.copy()
c_attributes = Statement.c_attributes.copy() c_attributes = Statement.c_attributes.copy()
c_children['{%s}Attribute' % SAML_NAMESPACE] = ('attribute', [Attribute]) c_children['{%s}Attribute' % NAMESPACE] = ('attribute', [Attribute])
c_children['{%s}EncryptedAttribute' % SAML_NAMESPACE] = ( c_children['{%s}EncryptedAttribute' % NAMESPACE] = (
'encrypted_attribute', [EncryptedAttribute]) 'encrypted_attribute', [EncryptedAttribute])
c_child_order = ['attribute', 'encrypted_attribute'] c_child_order = ['attribute', 'encrypted_attribute']
@@ -908,7 +906,7 @@ class Action(SamlBase):
for which permission is sought.""" for which permission is sought."""
c_tag = 'Action' c_tag = 'Action'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['Namespace'] = 'namespace' c_attributes['Namespace'] = 'namespace'
@@ -943,16 +941,16 @@ class Evidence(SamlBase):
the authorization decision.""" the authorization decision."""
c_tag = 'Evidence' c_tag = 'Evidence'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_children['{%s}AssertionIDRef' % SAML_NAMESPACE] = ('assertion_id_ref', c_children['{%s}AssertionIDRef' % NAMESPACE] = ('assertion_id_ref',
[AssertionIDRef]) [AssertionIDRef])
c_children['{%s}AssertionURIRef' % SAML_NAMESPACE] = ('assertion_uri_ref', c_children['{%s}AssertionURIRef' % NAMESPACE] = ('assertion_uri_ref',
[AssertionURIRef]) [AssertionURIRef])
c_children['{%s}EncryptedAssertion' % SAML_NAMESPACE] = ( c_children['{%s}EncryptedAssertion' % NAMESPACE] = (
'encrypted_assertion', [EncryptedAssertion]) 'encrypted_assertion', [EncryptedAssertion])
c_child_order = ['assertion_id_ref', 'assertion_uri_ref', c_child_order = ['assertion_id_ref', 'assertion_uri_ref', 'assertion',
'encrypted_assertion'] 'encrypted_assertion']
def __init__(self, assertion_id_ref=None, assertion_uri_ref=None, def __init__(self, assertion_id_ref=None, assertion_uri_ref=None,
@@ -992,14 +990,14 @@ class AuthzDecisionStatement(Statement):
decision on the basis of some optionally specified evidence.""" decision on the basis of some optionally specified evidence."""
c_tag = 'AuthzDecisionStatement' c_tag = 'AuthzDecisionStatement'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = Statement.c_children.copy() c_children = Statement.c_children.copy()
c_attributes = Statement.c_attributes.copy() c_attributes = Statement.c_attributes.copy()
c_attributes['Resource'] = 'resource' c_attributes['Resource'] = 'resource'
c_attributes['Decision'] = 'decision' c_attributes['Decision'] = 'decision'
c_children['{%s}Action' % SAML_NAMESPACE] = ('action', [Action]) c_children['{%s}Action' % NAMESPACE] = ('action', [Action])
c_children['{%s}Evidence' % SAML_NAMESPACE] = ('evidence', [Evidence]) c_children['{%s}Evidence' % NAMESPACE] = ('evidence', [Evidence])
c_child_order = ['action', 'evidence'] c_child_order = ['action', 'evidence']
def __init__(self, resource=None, decision=None, action=None, def __init__(self, resource=None, decision=None, action=None,
@@ -1041,23 +1039,23 @@ def authz_decision_statement_from_string(xml_string):
class Assertion(SamlBase): class Assertion(SamlBase):
"""The saml:Assertion element""" """The saml:Assertion element"""
c_tag = 'Assertion' c_tag = 'Assertion'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['Version'] = 'version' c_attributes['Version'] = 'version'
c_attributes['ID'] = 'identifier' c_attributes['ID'] = 'identifier'
c_attributes['IssueInstant'] = 'issue_instant' c_attributes['IssueInstant'] = 'issue_instant'
c_children['{%s}Issuer' % SAML_NAMESPACE] = ('issuer', Issuer) c_children['{%s}Issuer' % NAMESPACE] = ('issuer', Issuer)
c_children['{%s}Signature' % ds.DS_NAMESPACE] = ('signature', ds.Signature) c_children['{%s}Signature' % ds.NAMESPACE] = ('signature', ds.Signature)
c_children['{%s}Subject' % SAML_NAMESPACE] = ('subject', Subject) c_children['{%s}Subject' % NAMESPACE] = ('subject', Subject)
c_children['{%s}Conditions' % SAML_NAMESPACE] = ('conditions', Conditions) c_children['{%s}Conditions' % NAMESPACE] = ('conditions', Conditions)
#c_children['{%s}Advice' % SAML_NAMESPACE] = ('advice', Advice) #c_children['{%s}Advice' % NAMESPACE] = ('advice', Advice)
c_children['{%s}Statement' % SAML_NAMESPACE] = ('statement', [Statement]) c_children['{%s}Statement' % NAMESPACE] = ('statement', [Statement])
c_children['{%s}AuthnStatement' % SAML_NAMESPACE] = ( c_children['{%s}AuthnStatement' % NAMESPACE] = (
'authn_statement', [AuthnStatement]) 'authn_statement', [AuthnStatement])
c_children['{%s}AuthzDecisionStatement' % SAML_NAMESPACE] = ( c_children['{%s}AuthzDecisionStatement' % NAMESPACE] = (
'authz_decision_statement', [AuthzDecisionStatement]) 'authz_decision_statement', [AuthzDecisionStatement])
c_children['{%s}AttributeStatement' % SAML_NAMESPACE] = ( c_children['{%s}AttributeStatement' % NAMESPACE] = (
'attribute_statement', [AttributeStatement]) 'attribute_statement', [AttributeStatement])
c_child_order = ['issuer', 'signature', 'subject', 'conditions', 'advice', c_child_order = ['issuer', 'signature', 'subject', 'conditions', 'advice',
'statement', 'authn_statement', 'authz_decision_statement', 'statement', 'authn_statement', 'authz_decision_statement',
@@ -1124,7 +1122,7 @@ def assertion_from_string(xml_string):
""" Create Assertion instance from an XML string """ """ Create Assertion instance from an XML string """
return saml2.create_class_from_xml_string(Assertion, xml_string) return saml2.create_class_from_xml_string(Assertion, xml_string)
Evidence.c_children['{%s}Assertion' % SAML_NAMESPACE] = ( Evidence.c_children['{%s}Assertion' % NAMESPACE] = (
'assertion', [Assertion]) 'assertion', [Assertion])
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@@ -1136,18 +1134,18 @@ class Advice(SamlBase):
SAML authority wishes to provide.""" SAML authority wishes to provide."""
c_tag = 'Advice' c_tag = 'Advice'
c_namespace = SAML_NAMESPACE c_namespace = NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_children['{%s}AssertionIDRef' % SAML_NAMESPACE] = ('assertion_id_ref', c_children['{%s}AssertionIDRef' % NAMESPACE] = ('assertion_id_ref',
[AssertionIDRef]) [AssertionIDRef])
c_children['{%s}AssertionURIRef' % SAML_NAMESPACE] = ('assertion_uri_ref', c_children['{%s}AssertionURIRef' % NAMESPACE] = ('assertion_uri_ref',
[AssertionURIRef]) [AssertionURIRef])
c_children['{%s}Assertion' % SAML_NAMESPACE] = ('assertion', [Assertion]) c_children['{%s}Assertion' % NAMESPACE] = ('assertion', [Assertion])
c_children['{%s}EncryptedAssertion' % SAML_NAMESPACE] = ( c_children['{%s}EncryptedAssertion' % NAMESPACE] = (
'encrypted_assertion', [EncryptedAssertion]) 'encrypted_assertion', [EncryptedAssertion])
c_child_order = ['assertion_id_ref', 'assertion_uri_ref', c_child_order = ['assertion_id_ref', 'assertion_uri_ref',
'statement', 'encrypted_assertion'] 'assertion', 'encrypted_assertion']
def __init__(self, assertion_id_ref=None, assertion_uri_ref=None, def __init__(self, assertion_id_ref=None, assertion_uri_ref=None,
assertion=None, encrypted_assertion=None, text=None, assertion=None, encrypted_assertion=None, text=None,
@@ -1174,4 +1172,41 @@ def advice_from_string(xml_string):
""" Create Advice instance from an XML string """ """ Create Advice instance from an XML string """
return saml2.create_class_from_xml_string(Advice, xml_string) return saml2.create_class_from_xml_string(Advice, xml_string)
Assertion.c_children['{%s}Advice' % SAML_NAMESPACE] = ('advice', Advice) Assertion.c_children['{%s}Advice' % NAMESPACE] = ('advice', Advice)
Evidence.c_children['{%s}Assertion' % NAMESPACE] = ('assertion', [Assertion])
ELEMENT_FROM_STRING = {
BaseID.c_tag: base_id_from_string,
NameID.c_tag: name_id_from_string,
EncryptedID.c_tag: encrypted_id_from_string,
Issuer.c_tag: issuer_from_string,
AssertionIDRef.c_tag: assertion_id_ref_from_string,
AssertionURIRef.c_tag: assertion_uri_ref_from_string,
EncryptedAssertion.c_tag: encrypted_assertion_from_string,
SubjectConfirmationData.c_tag: subject_confirmation_data_from_string,
SubjectConfirmation.c_tag: subject_confirmation_from_string,
Subject.c_tag: subject_from_string,
Condition.c_tag: condition_from_string,
Audience.c_tag: audience_from_string,
AudienceRestriction.c_tag: audience_restriction_from_string,
OneTimeUse.c_tag: one_time_use_from_string,
ProxyRestriction.c_tag: proxy_restriction_from_string,
Conditions.c_tag: conditions_from_string,
Statement.c_tag: statement_from_string,
SubjectLocality.c_tag: subject_locality_from_string,
AuthnContextClassRef.c_tag: authn_context_class_ref_from_string,
AuthnContextDeclRef.c_tag: authn_context_decl_ref_from_string,
AuthnContextDecl.c_tag: authn_context_decl_from_string,
AuthenticatingAuthority.c_tag: authenticating_authority_from_string,
AuthnContext.c_tag: authn_context_from_string,
AuthnStatement(Statement): authn_statement_from_string,
AttributeValue.c_tag: attribute_value_from_string,
EncryptedAttribute.c_tag: encrypted_attribute_from_string,
Attribute.c_tag: attribute_from_string,
AttributeStatement(Statement): attribute_statement_from_string,
Action.c_tag: action_from_string,
Evidence.c_tag: evidence_from_string,
AuthzDecisionStatement(Statement): authz_decision_statement_from_string,
Assertion.c_tag: assertion_from_string,
Advice.c_tag: advice_from_string,
}

View File

@@ -93,18 +93,18 @@ class AbstractRequest(SamlBase):
c_attributes['IssueInstant'] = 'issue_instant' c_attributes['IssueInstant'] = 'issue_instant'
c_attributes['Destination'] = 'destination' c_attributes['Destination'] = 'destination'
c_attributes['Consent'] = 'consent' c_attributes['Consent'] = 'consent'
c_children['{%s}Issuer' % saml.SAML_NAMESPACE] = ('issuer', saml.Issuer) c_children['{%s}Issuer' % saml.NAMESPACE] = ('issuer', saml.Issuer)
c_children['{%s}Signature' % ds.DS_NAMESPACE] = ('signature', ds.Signature) c_children['{%s}Signature' % ds.NAMESPACE] = ('signature', ds.Signature)
c_children['{%s}Extensions' % SAMLP_NAMESPACE] = ('extensions', Extensions) c_children['{%s}Extensions' % SAMLP_NAMESPACE] = ('extensions', Extensions)
c_child_order = ['issuer', 'signature', 'extensions'] c_child_order = ['issuer', 'signature', 'extensions']
def __init__(self, identifier=None, version=None, issue_instant=None, def __init__(self, id=None, version=None, issue_instant=None,
destination=None, consent=None, issuer=None, signature=None, destination=None, consent=None, issuer=None, signature=None,
extensions=None, text=None, extension_elements=None, extensions=None, text=None, extension_elements=None,
extension_attributes=None): extension_attributes=None):
"""Constructor for AbstractRequest """Constructor for AbstractRequest
:param identifier: ID attribute :param id: ID attribute
:param version: Version attribute :param version: Version attribute
:param issue_instant: IssueInstant attribute :param issue_instant: IssueInstant attribute
:param destination: Destination attribute :param destination: Destination attribute
@@ -117,7 +117,7 @@ class AbstractRequest(SamlBase):
:param extension_attributes: A dictionary of attribute value string pairs :param extension_attributes: A dictionary of attribute value string pairs
""" """
SamlBase.__init__(self, text, extension_elements, extension_attributes) SamlBase.__init__(self, text, extension_elements, extension_attributes)
self.id = identifier self.id = id
self.version = version self.version = version
self.issue_instant = issue_instant self.issue_instant = issue_instant
self.destination = destination self.destination = destination
@@ -250,23 +250,23 @@ class StatusResponse(SamlBase):
c_attributes['IssueInstant'] = 'issue_instant' c_attributes['IssueInstant'] = 'issue_instant'
c_attributes['Destination'] = 'destination' c_attributes['Destination'] = 'destination'
c_attributes['Consent'] = 'consent' c_attributes['Consent'] = 'consent'
c_children['{%s}Issuer' % saml.SAML_NAMESPACE] = ( c_children['{%s}Issuer' % saml.NAMESPACE] = (
'issuer', saml.Issuer) 'issuer', saml.Issuer)
c_children['{%s}Signature' % ds.DS_NAMESPACE] = ( c_children['{%s}Signature' % ds.NAMESPACE] = (
'signature', ds.Signature) 'signature', ds.Signature)
c_children['{%s}Extensions' % SAMLP_NAMESPACE] = ( c_children['{%s}Extensions' % SAMLP_NAMESPACE] = (
'extensions', Extensions) 'extensions', Extensions)
c_children['{%s}Status' % SAMLP_NAMESPACE] = ('status', Status) c_children['{%s}Status' % SAMLP_NAMESPACE] = ('status', Status)
c_child_order = ['issuer', 'signature', 'extensions', 'status'] c_child_order = ['issuer', 'signature', 'extensions', 'status']
def __init__(self, identifier=None, in_response_to=None, version=None, def __init__(self, id=None, in_response_to=None, version=None,
issue_instant=None, destination=None, consent=None, issue_instant=None, destination=None, consent=None,
issuer=None, signature=None, extensions=None, status=None, issuer=None, signature=None, extensions=None, status=None,
text=None, extension_elements=None, text=None, extension_elements=None,
extension_attributes=None): extension_attributes=None):
"""Constructor for StatusResponse """Constructor for StatusResponse
:param identifier: ID attribute :param id: ID attribute
:param in_respones_to: InResponseTo attribute :param in_respones_to: InResponseTo attribute
:param version: Version attribute :param version: Version attribute
:param issue_instant: IssueInstant attribute :param issue_instant: IssueInstant attribute
@@ -284,7 +284,7 @@ class StatusResponse(SamlBase):
SamlBase.__init__(self, text, extension_elements, SamlBase.__init__(self, text, extension_elements,
extension_attributes) extension_attributes)
self.id = identifier self.id = id
self.in_response_to = in_response_to self.in_response_to = in_response_to
self.version = version self.version = version
self.issue_instant = issue_instant self.issue_instant = issue_instant
@@ -313,14 +313,14 @@ class AssertionIDRequest(AbstractRequest):
c_attributes = AbstractRequest.c_attributes.copy() c_attributes = AbstractRequest.c_attributes.copy()
c_attributes["AssertionIDRef"] = 'assertion_id_ref' c_attributes["AssertionIDRef"] = 'assertion_id_ref'
def __init__(self, identifier=None, version=None, issue_instant=None, def __init__(self, id=None, version=None, issue_instant=None,
destination=None, consent=None, issuer=None, signature=None, destination=None, consent=None, issuer=None, signature=None,
extensions=None, assertion_id_ref=None, extensions=None, assertion_id_ref=None,
text=None, extension_elements=None, text=None, extension_elements=None,
extension_attributes=None): extension_attributes=None):
"""Constructor for AssertionIDRequest """Constructor for AssertionIDRequest
:param identifier: ID attribute :param id: ID attribute
:param version: Version attribute :param version: Version attribute
:param issue_instant: IssueInstant attribute :param issue_instant: IssueInstant attribute
:param destination: Destination attribute :param destination: Destination attribute
@@ -335,7 +335,7 @@ class AssertionIDRequest(AbstractRequest):
string pairs string pairs
""" """
AbstractRequest.__init__(self, identifier, version, issue_instant, AbstractRequest.__init__(self, id, version, issue_instant,
destination, consent, issuer, signature, destination, consent, issuer, signature,
extensions, text, extension_elements, extensions, text, extension_elements,
extension_attributes) extension_attributes)
@@ -357,17 +357,17 @@ class SubjectQuery(AbstractRequest):
c_namespace = SAMLP_NAMESPACE c_namespace = SAMLP_NAMESPACE
c_children = AbstractRequest.c_children.copy() c_children = AbstractRequest.c_children.copy()
c_attributes = AbstractRequest.c_attributes.copy() c_attributes = AbstractRequest.c_attributes.copy()
c_children['{%s}Subject' % saml.SAML_NAMESPACE] = ( c_children['{%s}Subject' % saml.NAMESPACE] = (
'subject', saml.Subject) 'subject', saml.Subject)
def __init__(self, identifier=None, version=None, issue_instant=None, def __init__(self, id=None, version=None, issue_instant=None,
destination=None, consent=None, issuer=None, signature=None, destination=None, consent=None, issuer=None, signature=None,
extensions=None, subject=None, extensions=None, subject=None,
text=None, extension_elements=None, text=None, extension_elements=None,
extension_attributes=None): extension_attributes=None):
"""Constructor for SubjectQuery """Constructor for SubjectQuery
:param identifier: ID attribute :param id: ID attribute
:param version: Version attribute :param version: Version attribute
:param issue_instant: IssueInstant attribute :param issue_instant: IssueInstant attribute
:param destination: Destination attribute :param destination: Destination attribute
@@ -382,7 +382,7 @@ class SubjectQuery(AbstractRequest):
string pairs string pairs
""" """
AbstractRequest.__init__(self, identifier, version, issue_instant, AbstractRequest.__init__(self, id, version, issue_instant,
destination, consent, issuer, signature, destination, consent, issuer, signature,
extensions, text, extension_elements, extensions, text, extension_elements,
extension_attributes) extension_attributes)
@@ -421,14 +421,14 @@ class AuthnQuery(SubjectQuery):
c_attributes = SubjectQuery.c_attributes.copy() c_attributes = SubjectQuery.c_attributes.copy()
c_attributes['SessionIndex'] = 'session_index' c_attributes['SessionIndex'] = 'session_index'
def __init__(self, identifier=None, version=None, issue_instant=None, def __init__(self, id=None, version=None, issue_instant=None,
destination=None, consent=None, issuer=None, signature=None, destination=None, consent=None, issuer=None, signature=None,
extensions=None, subject=None, extensions=None, subject=None,
text=None, extension_elements=None, text=None, extension_elements=None,
extension_attributes=None): extension_attributes=None):
"""Constructor for SubjectQuery """Constructor for SubjectQuery
:param identifier: ID attribute :param id: ID attribute
:param version: Version attribute :param version: Version attribute
:param issue_instant: IssueInstant attribute :param issue_instant: IssueInstant attribute
:param destination: Destination attribute :param destination: Destination attribute
@@ -443,7 +443,7 @@ class AuthnQuery(SubjectQuery):
string pairs string pairs
""" """
SubjectQuery.__init__(self, identifier, version, issue_instant, SubjectQuery.__init__(self, id, version, issue_instant,
destination, consent, issuer, signature, destination, consent, issuer, signature,
extensions, text, extension_elements, extensions, text, extension_elements,
extension_attributes) extension_attributes)
@@ -466,9 +466,9 @@ class RequestedAuthnContext(SamlBase):
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_attributes['Comparison'] = 'comparison' c_attributes['Comparison'] = 'comparison'
c_children['{%s}AuthnContextClassRef' % saml.SAML_NAMESPACE] = ( c_children['{%s}AuthnContextClassRef' % saml.NAMESPACE] = (
'authn_context_class_ref', [saml.AuthnContextClassRef]) 'authn_context_class_ref', [saml.AuthnContextClassRef])
c_children['{%s}AuthnContextDeclRef' % saml.SAML_NAMESPACE] = ( c_children['{%s}AuthnContextDeclRef' % saml.NAMESPACE] = (
'authn_context_decl_ref', [saml.AuthnContextDeclRef]) 'authn_context_decl_ref', [saml.AuthnContextDeclRef])
def __init__(self, comparison=None, authn_context_class_ref=None, def __init__(self, comparison=None, authn_context_class_ref=None,
@@ -504,17 +504,17 @@ class AttributeQuery(SubjectQuery):
c_namespace = SAMLP_NAMESPACE c_namespace = SAMLP_NAMESPACE
c_children = SubjectQuery.c_children.copy() c_children = SubjectQuery.c_children.copy()
c_attributes = SubjectQuery.c_attributes.copy() c_attributes = SubjectQuery.c_attributes.copy()
c_children['{%s}Attribute' % saml.SAML_NAMESPACE] = ( c_children['{%s}Attribute' % saml.NAMESPACE] = (
'attribute', saml.Attribute) 'attribute', saml.Attribute)
def __init__(self, identifier=None, version=None, issue_instant=None, def __init__(self, id=None, version=None, issue_instant=None,
destination=None, consent=None, issuer=None, signature=None, destination=None, consent=None, issuer=None, signature=None,
extensions=None, subject=None, attribute=None, extensions=None, subject=None, attribute=None,
text=None, extension_elements=None, text=None, extension_elements=None,
extension_attributes=None): extension_attributes=None):
"""Constructor for AttributeQuery """Constructor for AttributeQuery
:param identifier: ID attribute :param id: ID attribute
:param version: Version attribute :param version: Version attribute
:param issue_instant: IssueInstant attribute :param issue_instant: IssueInstant attribute
:param destination: Destination attribute :param destination: Destination attribute
@@ -531,7 +531,7 @@ class AttributeQuery(SubjectQuery):
string pairs string pairs
""" """
SubjectQuery.__init__(self, identifier, version, issue_instant, SubjectQuery.__init__(self, id, version, issue_instant,
destination, consent, issuer, signature, destination, consent, issuer, signature,
extensions, subject, text, extension_elements, extensions, subject, text, extension_elements,
extension_attributes) extension_attributes)
@@ -548,13 +548,13 @@ class Resource(SamlBase):
"""The saml:Resource element""" """The saml:Resource element"""
c_tag = 'Resource' c_tag = 'Resource'
c_namespace = saml.SAML_NAMESPACE c_namespace = saml.NAMESPACE
c_children = SamlBase.c_children.copy() c_children = SamlBase.c_children.copy()
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
def resource_from_string(xml_string): def resource_from_string(xml_string):
""" Create Resource instance from an XML string """ """ Create Resource instance from an XML string """
return saml2.create_class_from_xml_string(Resource, xml_string) return create_class_from_xml_string(Resource, xml_string)
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
# 3.3.2.4 AuthzDecisionQuery # 3.3.2.4 AuthzDecisionQuery
@@ -567,15 +567,15 @@ class AuthzDecisionQuery(SubjectQuery):
c_namespace = SAMLP_NAMESPACE c_namespace = SAMLP_NAMESPACE
c_children = SubjectQuery.c_children.copy() c_children = SubjectQuery.c_children.copy()
c_attributes = SubjectQuery.c_attributes.copy() c_attributes = SubjectQuery.c_attributes.copy()
c_children['{%s}Resource' % saml.SAML_NAMESPACE] = ( c_children['{%s}Resource' % saml.NAMESPACE] = (
'resource', Resource) 'resource', Resource)
c_children['{%s}Action' % saml.SAML_NAMESPACE] = ( c_children['{%s}Action' % saml.NAMESPACE] = (
'action', saml.Action) 'action', saml.Action)
c_children['{%s}Evidence' % saml.SAML_NAMESPACE] = ( c_children['{%s}Evidence' % saml.NAMESPACE] = (
'evidence', saml.Evidence) 'evidence', saml.Evidence)
c_child_order = ['action', 'evidence', 'resource'] c_child_order = ['action', 'evidence', 'resource']
def __init__(self, identifier=None, version=None, issue_instant=None, def __init__(self, id=None, version=None, issue_instant=None,
destination=None, consent=None, issuer=None, signature=None, destination=None, consent=None, issuer=None, signature=None,
extensions=None, subject=None, resource=None, extensions=None, subject=None, resource=None,
action=None, evidence=None, action=None, evidence=None,
@@ -583,7 +583,7 @@ class AuthzDecisionQuery(SubjectQuery):
extension_attributes=None): extension_attributes=None):
"""Constructor for AuthzDecisionQuery """Constructor for AuthzDecisionQuery
:param identifier: ID attribute :param id: ID attribute
:param version: Version attribute :param version: Version attribute
:param issue_instant: IssueInstant attribute :param issue_instant: IssueInstant attribute
:param destination: Destination attribute :param destination: Destination attribute
@@ -603,7 +603,7 @@ class AuthzDecisionQuery(SubjectQuery):
string pairs string pairs
""" """
SubjectQuery.__init__(self, identifier, version, issue_instant, SubjectQuery.__init__(self, id, version, issue_instant,
destination, consent, issuer, signature, destination, consent, issuer, signature,
extensions, subject, text, extension_elements, extensions, subject, text, extension_elements,
extension_attributes) extension_attributes)
@@ -612,9 +612,9 @@ class AuthzDecisionQuery(SubjectQuery):
self.action = action or [] self.action = action or []
self.evidence = evidence self.evidence = evidence
def attribute_query_from_string(xml_string): def authz_decision_query_from_string(xml_string):
""" Create AttributeQuery instance from an XML string """ """ Create AuthzDecisionQuery instance from an XML string """
return create_class_from_xml_string(AttributeQuery, xml_string) return create_class_from_xml_string(AuthzDecisionQuery, xml_string)
# ========================================================================== # ==========================================================================
# 3.3.3 Response # 3.3.3 Response
@@ -627,21 +627,21 @@ class Response(StatusResponse):
c_namespace = SAMLP_NAMESPACE c_namespace = SAMLP_NAMESPACE
c_children = StatusResponse.c_children.copy() c_children = StatusResponse.c_children.copy()
c_attributes = StatusResponse.c_attributes.copy() c_attributes = StatusResponse.c_attributes.copy()
c_children['{%s}Assertion' % saml.SAML_NAMESPACE] = ( c_children['{%s}Assertion' % saml.NAMESPACE] = (
'assertion', [saml.Assertion]) 'assertion', [saml.Assertion])
c_children['{%s}EncryptedAssertion' % saml.SAML_NAMESPACE] = ( c_children['{%s}EncryptedAssertion' % saml.NAMESPACE] = (
'encrypted_assertion', [saml.EncryptedAssertion]) 'encrypted_assertion', [saml.EncryptedAssertion])
c_child_order = ['issuer', 'signature', 'extensions', 'status', c_child_order = ['issuer', 'signature', 'extensions', 'status',
'assertion', 'encrypted_assertion'] 'assertion', 'encrypted_assertion']
def __init__(self, identifier=None, in_response_to=None, version=None, def __init__(self, id=None, in_response_to=None, version=None,
issue_instant=None, destination=None, consent=None, issue_instant=None, destination=None, consent=None,
issuer=None, signature=None, extensions=None, status=None, issuer=None, signature=None, extensions=None, status=None,
assertion=None, encrypted_assertion=None, assertion=None, encrypted_assertion=None,
text=None, extension_elements=None, extension_attributes=None): text=None, extension_elements=None, extension_attributes=None):
"""Constructor for Response """Constructor for Response
:param identifier: ID attribute :param id: ID attribute
:param in_respones_to: InResponseTo attribute :param in_respones_to: InResponseTo attribute
:param version: Version attribute :param version: Version attribute
:param issue_instant: IssueInstant attribute :param issue_instant: IssueInstant attribute
@@ -657,7 +657,7 @@ class Response(StatusResponse):
:param extension_elements: A list of ExtensionElement instances :param extension_elements: A list of ExtensionElement instances
:param extension_attributes: A dictionary of attribute value string pairs :param extension_attributes: A dictionary of attribute value string pairs
""" """
StatusResponse.__init__(self, identifier, in_response_to, StatusResponse.__init__(self, id, in_response_to,
version, issue_instant, version, issue_instant,
destination, consent, destination, consent,
issuer, signature, issuer, signature,
@@ -864,10 +864,10 @@ class AuthnRequest(AbstractRequest):
c_attributes['AssertionConsumingServiceIndex'] = \ c_attributes['AssertionConsumingServiceIndex'] = \
'assertion_consuming_service_index' 'assertion_consuming_service_index'
c_attributes['ProviderName'] = 'provider_name' c_attributes['ProviderName'] = 'provider_name'
c_children['{%s}Subject' % saml.SAML_NAMESPACE] = ('subject', saml.Subject) c_children['{%s}Subject' % saml.NAMESPACE] = ('subject', saml.Subject)
c_children['{%s}NameIDPolicy' % SAMLP_NAMESPACE] = ( c_children['{%s}NameIDPolicy' % SAMLP_NAMESPACE] = (
'name_id_policy', NameIDPolicy) 'name_id_policy', NameIDPolicy)
c_children['{%s}Conditions' % saml.SAML_NAMESPACE] = ( c_children['{%s}Conditions' % saml.NAMESPACE] = (
'conditions', saml.Conditions) 'conditions', saml.Conditions)
c_children['{%s}RequestedAuthnContext' % SAMLP_NAMESPACE] = ( c_children['{%s}RequestedAuthnContext' % SAMLP_NAMESPACE] = (
'requested_authn_context', RequestedAuthnContext) 'requested_authn_context', RequestedAuthnContext)
@@ -876,7 +876,7 @@ class AuthnRequest(AbstractRequest):
'name_id_policy', 'conditions', 'requested_authn_context', 'name_id_policy', 'conditions', 'requested_authn_context',
'scoping'] 'scoping']
def __init__(self, identifier=None, version=None, issue_instant=None, def __init__(self, id=None, version=None, issue_instant=None,
destination=None, consent=None, issuer=None, signature=None, destination=None, consent=None, issuer=None, signature=None,
extensions=None, subject=None, name_id_policy=None, extensions=None, subject=None, name_id_policy=None,
conditions=None, requested_authn_context=None, scoping=None, conditions=None, requested_authn_context=None, scoping=None,
@@ -888,7 +888,7 @@ class AuthnRequest(AbstractRequest):
extension_elements=None, extension_attributes=None): extension_elements=None, extension_attributes=None):
"""Constructor for AuthnRequest """Constructor for AuthnRequest
:param identifier: ID attribute :param id: ID attribute
:param version: Version attribute :param version: Version attribute
:param issue_instant: IssueInstant attribute :param issue_instant: IssueInstant attribute
:param destination: Destination attribute :param destination: Destination attribute
@@ -916,7 +916,7 @@ class AuthnRequest(AbstractRequest):
:param extension_attributes: A dictionary of attribute value string :param extension_attributes: A dictionary of attribute value string
pairs pairs
""" """
AbstractRequest.__init__(self, identifier, version, issue_instant, AbstractRequest.__init__(self, id, version, issue_instant,
destination, consent, issuer, signature, destination, consent, issuer, signature,
extensions, text, extension_elements, extensions, text, extension_elements,
extension_attributes) extension_attributes)
@@ -970,7 +970,7 @@ def terminate_from_string(xml_string):
class ManageNameIDRequest(AbstractRequest): class ManageNameIDRequest(AbstractRequest):
"""The samlp:NameIDMappingRequest element """The samlp:NameIDMappingRequest element
To request an alternate name identifier for a principal from an identity To request an alternate name id for a principal from an identity
provider, a requester sends an NameIDMappingRequest message provider, a requester sends an NameIDMappingRequest message
""" """
@@ -979,25 +979,31 @@ class ManageNameIDRequest(AbstractRequest):
c_children = AbstractRequest.c_children.copy() c_children = AbstractRequest.c_children.copy()
c_attributes = AbstractRequest.c_attributes.copy() c_attributes = AbstractRequest.c_attributes.copy()
c_attributes["NewID"] = "new_id" c_attributes["NewID"] = "new_id"
c_children['{%s}NameID' % saml.SAML_NAMESPACE] = ('name_id', saml.NameID) c_children['{%s}NameID' % saml.NAMESPACE] = ('name_id', saml.NameID)
c_children['{%s}EncryptedID' % saml.SAML_NAMESPACE] = ( c_children['{%s}EncryptedID' % saml.NAMESPACE] = (
'encrypted_id', saml.EncryptedID) 'encrypted_id', saml.EncryptedID)
c_children['{%s}NewEncryptedID' % saml.SAML_NAMESPACE] = ( c_children['{%s}NewEncryptedID' % saml.NAMESPACE] = (
'new_encrypted_id', saml.EncryptedID) 'new_encrypted_id', saml.EncryptedID)
c_children['{%s}Terminate' % SAMLP_NAMESPACE] = ( c_children['{%s}Terminate' % SAMLP_NAMESPACE] = (
'terminate', Terminate) 'terminate', Terminate)
c_child_order = ['name_id', 'encrypted_id', c_child_order = ['name_id', 'encrypted_id',
'new_id', 'new_encrypted_id', 'terminate'] 'new_id', 'new_encrypted_id', 'terminate']
def __init__(self, identifier=None, version=None, issue_instant=None, def __init__(self, new_id=None, name_id=None, encrypted_id=None,
new_encrypted_id=None, terminate=None,
id=None, version=None, issue_instant=None,
destination=None, consent=None, issuer=None, signature=None, destination=None, consent=None, issuer=None, signature=None,
extensions=None, extensions=None, name_id_policy=None, text=None,
base_id=None, name_id=None, encrypted_id=None,
name_id_policy=None, text=None,
extension_elements=None, extension_attributes=None): extension_elements=None, extension_attributes=None):
"""Constructor for ManageNameIDRequest """Constructor for ManageNameIDRequest
:param identifier: ID attribute :param new_id: The new id value
:param name_id: NameID element
:param encrypted_id: EncryptedID element
:param new_encrypted_id:
:param terminate:
:param id: ID attribute
:param version: Version attribute :param version: Version attribute
:param issue_instant: IssueInstant attribute :param issue_instant: IssueInstant attribute
:param destination: Destination attribute :param destination: Destination attribute
@@ -1005,25 +1011,19 @@ class ManageNameIDRequest(AbstractRequest):
:param issuer: Issuer element :param issuer: Issuer element
:param signature: Signature element :param signature: Signature element
:param extensions: Extensions element :param extensions: Extensions element
:param name_id: NameID element
:param encrypted_id: EncryptedID element
:param new_id: The new identifier value
:param new_encrypted_id:
:param terminate:
:param text: The text data in the this element :param text: The text data in the this element
:param extension_elements: A list of ExtensionElement instances :param extension_elements: A list of ExtensionElement instances
:param extension_attributes: A dictionary of attribute value string pairs :param extension_attributes: A dictionary of attribute value string pairs
""" """
AbstractRequest.__init__(self, identifier, version, issue_instant, AbstractRequest.__init__(self, id, version, issue_instant,
destination, consent, issuer, signature, destination, consent, issuer, signature,
extensions, text, extension_elements, extensions, text, extension_elements,
extension_attributes) extension_attributes)
self.not_on_or_after = not_on_or_after self.new_id = new_id
self.reason = reason
self.base_id = base_id
self.name_id = name_id self.name_id = name_id
self.encrypted_id = encrypted_id self.encrypted_id = encrypted_id
self.session_index = session_index self.new_encrypted_id = new_encrypted_id
self.terminate = terminate
def manage_name_id_request_from_string(xml_string): def manage_name_id_request_from_string(xml_string):
""" Create ManageNameIDRequest instance from an XML string """ """ Create ManageNameIDRequest instance from an XML string """
@@ -1060,16 +1060,16 @@ class LogoutRequest(AbstractRequest):
c_attributes = AbstractRequest.c_attributes.copy() c_attributes = AbstractRequest.c_attributes.copy()
c_attributes['NotOnOrAfter'] = 'not_on_or_after' c_attributes['NotOnOrAfter'] = 'not_on_or_after'
c_attributes['Reason'] = 'reason' c_attributes['Reason'] = 'reason'
c_children['{%s}BaseID' % saml.SAML_NAMESPACE] = ('base_id', saml.BaseID) c_children['{%s}BaseID' % saml.NAMESPACE] = ('base_id', saml.BaseID)
c_children['{%s}NameID' % saml.SAML_NAMESPACE] = ('name_id', saml.NameID) c_children['{%s}NameID' % saml.NAMESPACE] = ('name_id', saml.NameID)
c_children['{%s}EncryptedID' % saml.SAML_NAMESPACE] = ( c_children['{%s}EncryptedID' % saml.NAMESPACE] = (
'encrypted_id', saml.EncryptedID) 'encrypted_id', saml.EncryptedID)
c_children['{%s}SessionIndex' % SAMLP_NAMESPACE] = ( c_children['{%s}SessionIndex' % SAMLP_NAMESPACE] = (
'session_index', SessionIndex) 'session_index', SessionIndex)
c_child_order = ['issuer', 'signature', 'extensions', 'base_id', c_child_order = ['issuer', 'signature', 'extensions', 'base_id',
'name_id', 'encrypted_id', 'session_index'] 'name_id', 'encrypted_id', 'session_index']
def __init__(self, identifier=None, version=None, issue_instant=None, def __init__(self, id=None, version=None, issue_instant=None,
destination=None, consent=None, issuer=None, signature=None, destination=None, consent=None, issuer=None, signature=None,
extensions=None, not_on_or_after=None, reason=None, extensions=None, not_on_or_after=None, reason=None,
base_id=None, name_id=None, encrypted_id=None, base_id=None, name_id=None, encrypted_id=None,
@@ -1077,7 +1077,7 @@ class LogoutRequest(AbstractRequest):
extension_elements=None, extension_attributes=None): extension_elements=None, extension_attributes=None):
"""Constructor for LogoutRequest """Constructor for LogoutRequest
:param identifier: ID attribute :param id: ID attribute
:param version: Version attribute :param version: Version attribute
:param issue_instant: IssueInstant attribute :param issue_instant: IssueInstant attribute
:param destination: Destination attribute :param destination: Destination attribute
@@ -1095,7 +1095,7 @@ class LogoutRequest(AbstractRequest):
:param extension_elements: A list of ExtensionElement instances :param extension_elements: A list of ExtensionElement instances
:param extension_attributes: A dictionary of attribute value string pairs :param extension_attributes: A dictionary of attribute value string pairs
""" """
AbstractRequest.__init__(self, identifier, version, issue_instant, AbstractRequest.__init__(self, id, version, issue_instant,
destination, consent, issuer, signature, destination, consent, issuer, signature,
extensions, text, extension_elements, extensions, text, extension_elements,
extension_attributes) extension_attributes)
@@ -1133,7 +1133,7 @@ def logout_response_from_string(xml_string):
class NameIDMappingRequest(AbstractRequest): class NameIDMappingRequest(AbstractRequest):
"""The samlp:NameIDMappingRequest element """The samlp:NameIDMappingRequest element
To request an alternate name identifier for a principal from an identity To request an alternate name id for a principal from an identity
provider, a requester sends an NameIDMappingRequest message provider, a requester sends an NameIDMappingRequest message
""" """
@@ -1141,23 +1141,29 @@ class NameIDMappingRequest(AbstractRequest):
c_namespace = SAMLP_NAMESPACE c_namespace = SAMLP_NAMESPACE
c_children = AbstractRequest.c_children.copy() c_children = AbstractRequest.c_children.copy()
c_attributes = AbstractRequest.c_attributes.copy() c_attributes = AbstractRequest.c_attributes.copy()
c_children['{%s}BaseID' % saml.SAML_NAMESPACE] = ('base_id', saml.BaseID) c_children['{%s}BaseID' % saml.NAMESPACE] = ('base_id', saml.BaseID)
c_children['{%s}NameID' % saml.SAML_NAMESPACE] = ('name_id', saml.NameID) c_children['{%s}NameID' % saml.NAMESPACE] = ('name_id', saml.NameID)
c_children['{%s}EncryptedID' % saml.SAML_NAMESPACE] = ( c_children['{%s}EncryptedID' % saml.NAMESPACE] = (
'encrypted_id', saml.EncryptedID) 'encrypted_id', saml.EncryptedID)
c_children['{%s}NameIDPolicy' % SAMLP_NAMESPACE] = ( c_children['{%s}NameIDPolicy' % SAMLP_NAMESPACE] = (
'name_id_policy', NameIDPolicy) 'name_id_policy', NameIDPolicy)
c_child_order = ['base_id', 'name_id', 'encrypted_id', 'name_id_policy'] c_child_order = ['base_id', 'name_id', 'encrypted_id', 'name_id_policy']
def __init__(self, identifier=None, version=None, issue_instant=None, def __init__(self, base_id=None, name_id=None, encrypted_id=None,
name_id_policy=None,
id=None, version=None, issue_instant=None,
destination=None, consent=None, issuer=None, signature=None, destination=None, consent=None, issuer=None, signature=None,
extensions=None, extensions=None,
base_id=None, name_id=None, encrypted_id=None, text=None,
name_id_policy=None, text=None,
extension_elements=None, extension_attributes=None): extension_elements=None, extension_attributes=None):
"""Constructor for LogoutRequest """Constructor for LogoutRequest
:param identifier: ID attribute :param base_id: BaseID element
:param name_id: NameID element
:param encrypted_id: EncryptedID element
:param name_id_policy: The requirements regarding the format and
optional name qualifier for the id to be returned.
:param id: ID attribute
:param version: Version attribute :param version: Version attribute
:param issue_instant: IssueInstant attribute :param issue_instant: IssueInstant attribute
:param destination: Destination attribute :param destination: Destination attribute
@@ -1165,25 +1171,18 @@ class NameIDMappingRequest(AbstractRequest):
:param issuer: Issuer element :param issuer: Issuer element
:param signature: Signature element :param signature: Signature element
:param extensions: Extensions element :param extensions: Extensions element
:param base_id: BaseID element
:param name_id: NameID element
:param encrypted_id: EncryptedID element
:param name_id_policy: The requirements regarding the format and
optional name qualifier for the identifier to be returned.
:param text: The text data in the this element :param text: The text data in the this element
:param extension_elements: A list of ExtensionElement instances :param extension_elements: A list of ExtensionElement instances
:param extension_attributes: A dictionary of attribute value string pairs :param extension_attributes: A dictionary of attribute value string pairs
""" """
AbstractRequest.__init__(self, identifier, version, issue_instant, AbstractRequest.__init__(self, id, version, issue_instant,
destination, consent, issuer, signature, destination, consent, issuer, signature,
extensions, text, extension_elements, extensions, text, extension_elements,
extension_attributes) extension_attributes)
self.not_on_or_after = not_on_or_after
self.reason = reason
self.base_id = base_id self.base_id = base_id
self.name_id = name_id self.name_id = name_id
self.encrypted_id = encrypted_id self.encrypted_id = encrypted_id
self.session_index = session_index self.name_id_policy = name_id_policy
def name_id_mapping_request_from_string(xml_string): def name_id_mapping_request_from_string(xml_string):
""" Create NameIDMappingRequest instance from an XML string """ """ Create NameIDMappingRequest instance from an XML string """
@@ -1201,21 +1200,24 @@ class NameIDMappingResponse(StatusResponse):
c_namespace = SAMLP_NAMESPACE c_namespace = SAMLP_NAMESPACE
c_children = StatusResponse.c_children.copy() c_children = StatusResponse.c_children.copy()
c_attributes = StatusResponse.c_attributes.copy() c_attributes = StatusResponse.c_attributes.copy()
c_children['{%s}NameID' % saml.SAML_NAMESPACE] = ( c_children['{%s}NameID' % saml.NAMESPACE] = (
'name_id', saml.NameID) 'name_id', saml.NameID)
c_children['{%s}EncryptedID' % saml.SAML_NAMESPACE] = ( c_children['{%s}EncryptedID' % saml.NAMESPACE] = (
'encrypted_id', saml.EncryptedID) 'encrypted_id', saml.EncryptedID)
c_child_order = ['name_id', 'encrypted_id'] c_child_order = ['name_id', 'encrypted_id']
def __init__(self, identifier=None, in_response_to=None, def __init__(self, name_id=None, encrypted_id=None,
id=None, in_response_to=None,
version=None, issue_instant=None, version=None, issue_instant=None,
destination=None, consent=None, issuer=None, signature=None, destination=None, consent=None, issuer=None, signature=None,
extensions=None, status=None, extensions=None, status=None,
base_id=None, name_id=None, text=None, text=None,
extension_elements=None, extension_attributes=None): extension_elements=None, extension_attributes=None):
"""Constructor for NameIDMappingResponse """Constructor for NameIDMappingResponse
:param identifier: ID attribute :param name_id: The id
:param encrypted_id: associated descriptive data
:param id: ID attribute
:param in_respones_to: InResponseTo attribute :param in_respones_to: InResponseTo attribute
:param version: Version attribute :param version: Version attribute
:param issue_instant: IssueInstant attribute :param issue_instant: IssueInstant attribute
@@ -1225,22 +1227,18 @@ class NameIDMappingResponse(StatusResponse):
:param signature: Signature element :param signature: Signature element
:param extensions: Extensions element :param extensions: Extensions element
:param status: Status element :param status: Status element
:param base_id: associated descriptive data
:param name_id: The identifier
:param text: The text data in the this element :param text: The text data in the this element
:param extension_elements: A list of ExtensionElement instances :param extension_elements: A list of ExtensionElement instances
:param extension_attributes: A dictionary of attribute value :param extension_attributes: A dictionary of attribute value
string pairs string pairs
""" """
StatusResponse.__init__(self, identifier, in_response_to, StatusResponse.__init__(self, id, in_response_to,
version, issue_instant, destination, consent, version, issue_instant, destination, consent,
issuer, signature, extensions, status, issuer, signature, extensions, status,
text, extension_elements, extension_attributes) text, extension_elements, extension_attributes)
self.not_on_or_after = not_on_or_after
self.reason = reason
self.base_id = base_id
self.name_id = name_id self.name_id = name_id
self.encrypted_id = encrypted_id
def name_id_mapping_response_from_string(xml_string): def name_id_mapping_response_from_string(xml_string):
""" Create NameIDMappingResponse instance from an XML string """ """ Create NameIDMappingResponse instance from an XML string """

View File

@@ -4,6 +4,7 @@ from saml2 import samlp
from tempfile import NamedTemporaryFile from tempfile import NamedTemporaryFile
from subprocess import Popen, PIPE from subprocess import Popen, PIPE
import base64 import base64
import random
XMLSEC_BINARY = "/usr/local/bin/xmlsec1" XMLSEC_BINARY = "/usr/local/bin/xmlsec1"
ID_ATTR = "ID" ID_ATTR = "ID"
@@ -96,7 +97,8 @@ def correctly_signed_response(decoded_xml):
if _TEST_: if _TEST_:
print " ".join(com_list) print " ".join(com_list)
verified = _parse_popen_output(Popen(com_list, stderr=PIPE).communicate()[1]) verified = _parse_popen_output(Popen(com_list,
stderr=PIPE).communicate()[1])
if _TEST_: if _TEST_:
print "Verify result: '%s'" % (verified,) print "Verify result: '%s'" % (verified,)
@@ -114,8 +116,8 @@ def sign_using_xmlsec(statement, sign_key):
"""xmlsec1 --sign --privkey-pem test.key --id-attr:ID """xmlsec1 --sign --privkey-pem test.key --id-attr:ID
urn:oasis:names:tc:SAML:2.0:assertion:Assertion saml_response.xml""" urn:oasis:names:tc:SAML:2.0:assertion:Assertion saml_response.xml"""
fil_p, fil = make_temp("%s" % statement, decode=False) _, fil = make_temp("%s" % statement, decode=False)
pem_file_pointer, pem_file = make_temp("%s" % sign_key, ".pem") _, pem_file = make_temp("%s" % sign_key, ".pem")
com_list = [XMLSEC_BINARY, "--sign", com_list = [XMLSEC_BINARY, "--sign",
"--privkey-cert-pem", pem_file, "--id-attr:%s" % ID_ATTR, "--privkey-cert-pem", pem_file, "--id-attr:%s" % ID_ATTR,

View File

@@ -34,8 +34,8 @@ except ImportError:
import saml2 import saml2
from saml2 import create_class_from_xml_string from saml2 import create_class_from_xml_string
DS_NAMESPACE = 'http://www.w3.org/2000/09/xmldsig#' NAMESPACE = 'http://www.w3.org/2000/09/xmldsig#'
DS_TEMPLATE = '{http://www.w3.org/2000/09/xmldsig#}%s' TEMPLATE = '{http://www.w3.org/2000/09/xmldsig#}%s'
ENCODING_BASE64 = 'http://www.w3.org/2000/09/xmldsig#base64' ENCODING_BASE64 = 'http://www.w3.org/2000/09/xmldsig#base64'
DIGEST_SHA1 = 'http://www.w3.org/2000/09/xmldsig#sha1' DIGEST_SHA1 = 'http://www.w3.org/2000/09/xmldsig#sha1'
@@ -62,7 +62,7 @@ class Object(DsBase):
"""The ds:Object element""" """The ds:Object element"""
c_tag = 'Object' c_tag = 'Object'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_attributes['Id'] = 'identifier' c_attributes['Id'] = 'identifier'
@@ -95,7 +95,7 @@ class MgmtData(DsBase):
"""The ds:MgmtData element""" """The ds:MgmtData element"""
c_tag = 'MgmtData' c_tag = 'MgmtData'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -108,7 +108,7 @@ class SPKISexp(DsBase):
"""The ds:SPKISexp element""" """The ds:SPKISexp element"""
c_tag = 'SPKISexp' c_tag = 'SPKISexp'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -121,10 +121,10 @@ class SPKIData(DsBase):
"""The ds:SPKIData element""" """The ds:SPKIData element"""
c_tag = 'SPKIData' c_tag = 'SPKIData'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_children['{%s}SPKISexp' % DS_NAMESPACE] = ('spki_sexp', [SPKISexp]) c_children['{%s}SPKISexp' % NAMESPACE] = ('spki_sexp', [SPKISexp])
def __init__(self, spki_sexp=None, text=None, def __init__(self, spki_sexp=None, text=None,
extension_elements=None, extension_attributes=None): extension_elements=None, extension_attributes=None):
@@ -149,7 +149,7 @@ class PGPKeyID(DsBase):
"""The ds:PGPKeyID element""" """The ds:PGPKeyID element"""
c_tag = 'PGPKeyID' c_tag = 'PGPKeyID'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -162,7 +162,7 @@ class PGPKeyPacket(DsBase):
"""The ds:PGPKeyPacket element""" """The ds:PGPKeyPacket element"""
c_tag = 'PGPKeyPacket' c_tag = 'PGPKeyPacket'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -175,11 +175,11 @@ class PGPData(DsBase):
"""The ds:PGPData element""" """The ds:PGPData element"""
c_tag = 'PGPData' c_tag = 'PGPData'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_children['{%s}PGPKeyID' % DS_NAMESPACE] = ('pgp_key_id', PGPKeyID) c_children['{%s}PGPKeyID' % NAMESPACE] = ('pgp_key_id', PGPKeyID)
c_children['{%s}PGPKeyPacket' % DS_NAMESPACE] = ( c_children['{%s}PGPKeyPacket' % NAMESPACE] = (
'pgp_key_packet', PGPKeyPacket) 'pgp_key_packet', PGPKeyPacket)
c_child_order = ['pgp_key_id', 'pgp_key_packet'] c_child_order = ['pgp_key_id', 'pgp_key_packet']
@@ -208,7 +208,7 @@ class X509IssuerName(DsBase):
"""The ds:X509IssuerName element""" """The ds:X509IssuerName element"""
c_tag = 'X509IssuerName' c_tag = 'X509IssuerName'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -221,7 +221,7 @@ class X509IssuerNumber(DsBase):
"""The ds:X509IssuerNumber element""" """The ds:X509IssuerNumber element"""
c_tag = 'X509IssuerNumber' c_tag = 'X509IssuerNumber'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -234,12 +234,12 @@ class X509IssuerSerial(DsBase):
"""The ds:X509IssuerSerial element""" """The ds:X509IssuerSerial element"""
c_tag = 'X509IssuerSerial' c_tag = 'X509IssuerSerial'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_children['{%s}X509IssuerName' % DS_NAMESPACE] = ( c_children['{%s}X509IssuerName' % NAMESPACE] = (
'x509_issuer_name', X509IssuerName) 'x509_issuer_name', X509IssuerName)
c_children['{%s}X509IssuerNumber' % DS_NAMESPACE] = ( c_children['{%s}X509IssuerNumber' % NAMESPACE] = (
'x509_issuer_number', X509IssuerNumber) 'x509_issuer_number', X509IssuerNumber)
c_child_order = ['x509_issuer_name', 'x509_issuer_number'] c_child_order = ['x509_issuer_name', 'x509_issuer_number']
@@ -269,7 +269,7 @@ class X509SKI(DsBase):
"""The ds:X509SKI element""" """The ds:X509SKI element"""
c_tag = 'X509SKI' c_tag = 'X509SKI'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -282,7 +282,7 @@ class X509SubjectName(DsBase):
"""The ds:X509SubjectName element""" """The ds:X509SubjectName element"""
c_tag = 'X509SubjectName' c_tag = 'X509SubjectName'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -295,7 +295,7 @@ class X509Certificate(DsBase):
"""The ds:X509Certificate element""" """The ds:X509Certificate element"""
c_tag = 'X509Certificate' c_tag = 'X509Certificate'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -308,7 +308,7 @@ class X509CRL(DsBase):
"""The ds:X509CRL element""" """The ds:X509CRL element"""
c_tag = 'X509CRL' c_tag = 'X509CRL'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -321,17 +321,17 @@ class X509Data(DsBase):
"""The ds:X509Data element""" """The ds:X509Data element"""
c_tag = 'X509Data' c_tag = 'X509Data'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_children['{%s}X509IssuerSerial' % DS_NAMESPACE] = ( c_children['{%s}X509IssuerSerial' % NAMESPACE] = (
'x509_issuer_serial', [X509IssuerSerial]) 'x509_issuer_serial', [X509IssuerSerial])
c_children['{%s}X509SKI' % DS_NAMESPACE] = ('x509_ski', [X509SKI]) c_children['{%s}X509SKI' % NAMESPACE] = ('x509_ski', [X509SKI])
c_children['{%s}X509SubjectName' % DS_NAMESPACE] = ( c_children['{%s}X509SubjectName' % NAMESPACE] = (
'x509_subject_name', [X509SubjectName]) 'x509_subject_name', [X509SubjectName])
c_children['{%s}X509Certificate' % DS_NAMESPACE] = ( c_children['{%s}X509Certificate' % NAMESPACE] = (
'x509_certificate', [X509Certificate]) 'x509_certificate', [X509Certificate])
c_children['{%s}X509CRL' % DS_NAMESPACE] = ('x509_crl', [X509CRL]) c_children['{%s}X509CRL' % NAMESPACE] = ('x509_crl', [X509CRL])
c_child_order = ['x509_issuer_serial', 'x509_ski', 'x509_subject_name', c_child_order = ['x509_issuer_serial', 'x509_ski', 'x509_subject_name',
'x509_certificate', 'x509_crl'] 'x509_certificate', 'x509_crl']
@@ -368,11 +368,11 @@ class XPath(DsBase):
"""The ds:XPath element""" """The ds:XPath element"""
c_tag = 'XPath' c_tag = 'XPath'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
def x_path_from_string(xml_string): def xpath_from_string(xml_string):
""" Create XPath instance from an XML string """ """ Create XPath instance from an XML string """
return create_class_from_xml_string(XPath, xml_string) return create_class_from_xml_string(XPath, xml_string)
@@ -381,11 +381,11 @@ class Transform(DsBase):
"""The ds:Transform element""" """The ds:Transform element"""
c_tag = 'Transform' c_tag = 'Transform'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_attributes['Algorithm'] = 'algorithm' c_attributes['Algorithm'] = 'algorithm'
c_children['{%s}XPath' % DS_NAMESPACE] = ('xpath', [XPath]) c_children['{%s}XPath' % NAMESPACE] = ('xpath', [XPath])
def __init__(self, xpath=None, algorithm=None, text=None, def __init__(self, xpath=None, algorithm=None, text=None,
extension_elements=None, extension_attributes=None): extension_elements=None, extension_attributes=None):
@@ -411,10 +411,10 @@ class Transforms(DsBase):
"""The ds:Transforms element""" """The ds:Transforms element"""
c_tag = 'Transforms' c_tag = 'Transforms'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_children['{%s}Transform' % DS_NAMESPACE] = ('transform', [Transform]) c_children['{%s}Transform' % NAMESPACE] = ('transform', [Transform])
def __init__(self, transform=None, text=None, def __init__(self, transform=None, text=None,
extension_elements=None, extension_attributes=None): extension_elements=None, extension_attributes=None):
@@ -438,12 +438,12 @@ class RetrievalMethod(DsBase):
"""The ds:RetrievalMethod element""" """The ds:RetrievalMethod element"""
c_tag = 'RetrievalMethod' c_tag = 'RetrievalMethod'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_attributes['URI'] = 'uri' c_attributes['URI'] = 'uri'
c_attributes['Type'] = 'type' c_attributes['Type'] = 'type'
c_children['{%s}Transforms' % DS_NAMESPACE] = ('transforms', [Transforms]) c_children['{%s}Transforms' % NAMESPACE] = ('transforms', [Transforms])
def __init__(self, transforms=None, uri=None, typ=None, text=None, def __init__(self, transforms=None, uri=None, typ=None, text=None,
extension_elements=None, extension_attributes=None): extension_elements=None, extension_attributes=None):
@@ -471,7 +471,7 @@ class Modulus(DsBase):
"""The ds:Modulus element""" """The ds:Modulus element"""
c_tag = 'Modulus' c_tag = 'Modulus'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -484,7 +484,7 @@ class Exponent(DsBase):
"""The ds:Exponent element""" """The ds:Exponent element"""
c_tag = 'Exponent' c_tag = 'Exponent'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -497,11 +497,11 @@ class RSAKeyValue(DsBase):
"""The ds:RSAKeyValue element""" """The ds:RSAKeyValue element"""
c_tag = 'RSAKeyValue' c_tag = 'RSAKeyValue'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_children['{%s}Modulus' % DS_NAMESPACE] = ('modulus', Modulus) c_children['{%s}Modulus' % NAMESPACE] = ('modulus', Modulus)
c_children['{%s}Exponent' % DS_NAMESPACE] = ('exponent', Exponent) c_children['{%s}Exponent' % NAMESPACE] = ('exponent', Exponent)
c_child_order = ['modulus', 'exponent'] c_child_order = ['modulus', 'exponent']
def __init__(self, modulus=None, exponent=None, text=None, def __init__(self, modulus=None, exponent=None, text=None,
@@ -528,7 +528,7 @@ class DsP(DsBase):
"""The ds:P element""" """The ds:P element"""
c_tag = 'P' c_tag = 'P'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -541,7 +541,7 @@ class DsQ(DsBase):
"""The ds:Q element""" """The ds:Q element"""
c_tag = 'Q' c_tag = 'Q'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -554,7 +554,7 @@ class DsG(DsBase):
"""The ds:G element""" """The ds:G element"""
c_tag = 'G' c_tag = 'G'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -567,7 +567,7 @@ class DsY(DsBase):
"""The ds:Y element""" """The ds:Y element"""
c_tag = 'Y' c_tag = 'Y'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -580,7 +580,7 @@ class DsJ(DsBase):
"""The ds:J element""" """The ds:J element"""
c_tag = 'J' c_tag = 'J'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -593,7 +593,7 @@ class Seed(DsBase):
"""The ds:Seed element""" """The ds:Seed element"""
c_tag = 'Seed' c_tag = 'Seed'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -606,7 +606,7 @@ class PgenCounter(DsBase):
"""The ds:PgenCounter element""" """The ds:PgenCounter element"""
c_tag = 'PgenCounter' c_tag = 'PgenCounter'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -619,16 +619,16 @@ class DSAKeyValue(DsBase):
"""The ds:DSAKeyValue element""" """The ds:DSAKeyValue element"""
c_tag = 'DSAKeyValue' c_tag = 'DSAKeyValue'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_children['{%s}P' % DS_NAMESPACE] = ('p', DsP) c_children['{%s}P' % NAMESPACE] = ('p', DsP)
c_children['{%s}Q' % DS_NAMESPACE] = ('q', DsQ) c_children['{%s}Q' % NAMESPACE] = ('q', DsQ)
c_children['{%s}G' % DS_NAMESPACE] = ('g', DsG) c_children['{%s}G' % NAMESPACE] = ('g', DsG)
c_children['{%s}Y' % DS_NAMESPACE] = ('y', DsY) c_children['{%s}Y' % NAMESPACE] = ('y', DsY)
c_children['{%s}J' % DS_NAMESPACE] = ('j', DsJ) c_children['{%s}J' % NAMESPACE] = ('j', DsJ)
c_children['{%s}Seed' % DS_NAMESPACE] = ('seed', Seed) c_children['{%s}Seed' % NAMESPACE] = ('seed', Seed)
c_children['{%s}PgenCounter' % DS_NAMESPACE] = ('pgen_counter', PgenCounter) c_children['{%s}PgenCounter' % NAMESPACE] = ('pgen_counter', PgenCounter)
c_child_order = ['p', 'q', 'g', 'y', 'j', 'seed', 'pgen_counter'] c_child_order = ['p', 'q', 'g', 'y', 'j', 'seed', 'pgen_counter']
@@ -667,12 +667,12 @@ class KeyValue(DsBase):
"""The ds:KeyValue element""" """The ds:KeyValue element"""
c_tag = 'KeyValue' c_tag = 'KeyValue'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_children['{%s}RSAKeyValue' % DS_NAMESPACE] = ('rsa_key_value', c_children['{%s}RSAKeyValue' % NAMESPACE] = ('rsa_key_value',
RSAKeyValue) RSAKeyValue)
c_children['{%s}DSAKeyValue' % DS_NAMESPACE] = ('dsa_key_value', c_children['{%s}DSAKeyValue' % NAMESPACE] = ('dsa_key_value',
DSAKeyValue) DSAKeyValue)
c_child_order = ['rsa_key_value', 'dsa_key_value'] c_child_order = ['rsa_key_value', 'dsa_key_value']
@@ -701,7 +701,7 @@ class KeyName(DsBase):
"""The ds:KeyName element""" """The ds:KeyName element"""
c_tag = 'KeyName' c_tag = 'KeyName'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -714,18 +714,18 @@ class KeyInfo(DsBase):
"""The ds:KeyInfo element""" """The ds:KeyInfo element"""
c_tag = 'KeyInfo' c_tag = 'KeyInfo'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_attributes['Id'] = "identifier" c_attributes['Id'] = "identifier"
c_children['{%s}KeyName' % DS_NAMESPACE] = ('key_name', [KeyName]) c_children['{%s}KeyName' % NAMESPACE] = ('key_name', [KeyName])
c_children['{%s}KeyValue' % DS_NAMESPACE] = ('key_value', [KeyValue]) c_children['{%s}KeyValue' % NAMESPACE] = ('key_value', [KeyValue])
c_children['{%s}RetrievalMethod' % DS_NAMESPACE] = ( c_children['{%s}RetrievalMethod' % NAMESPACE] = (
'retrieval_method', [RetrievalMethod]) 'retrieval_method', [RetrievalMethod])
c_children['{%s}X509Data' % DS_NAMESPACE] = ('x509_data', [X509Data]) c_children['{%s}X509Data' % NAMESPACE] = ('x509_data', [X509Data])
c_children['{%s}PGPData' % DS_NAMESPACE] = ('pgp_data', [PGPData]) c_children['{%s}PGPData' % NAMESPACE] = ('pgp_data', [PGPData])
c_children['{%s}SPKIData' % DS_NAMESPACE] = ('spki_data', [SPKIData]) c_children['{%s}SPKIData' % NAMESPACE] = ('spki_data', [SPKIData])
c_children['{%s}MgmtData' % DS_NAMESPACE] = ('mgmt_data', [MgmtData]) c_children['{%s}MgmtData' % NAMESPACE] = ('mgmt_data', [MgmtData])
c_child_order = ['key_name', 'key_value', 'retrieval_method', 'x509_data', c_child_order = ['key_name', 'key_value', 'retrieval_method', 'x509_data',
'pgp_data', 'spki_data', 'mgmt_data'] 'pgp_data', 'spki_data', 'mgmt_data']
@@ -768,7 +768,7 @@ class DigestValue(DsBase):
"""The ds:DigestValue element""" """The ds:DigestValue element"""
c_tag = 'DigestValue' c_tag = 'DigestValue'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -781,7 +781,7 @@ class DigestMethod(DsBase):
"""The ds:DigestMethod element""" """The ds:DigestMethod element"""
c_tag = 'DigestMethod' c_tag = 'DigestMethod'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_attributes['Algorithm'] = "algorithm" c_attributes['Algorithm'] = "algorithm"
@@ -808,16 +808,16 @@ class Reference(DsBase):
"""The ds:Reference element""" """The ds:Reference element"""
c_tag = 'Reference' c_tag = 'Reference'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_attributes['Id'] = "identifier" c_attributes['Id'] = "identifier"
c_attributes['URI'] = "uri" c_attributes['URI'] = "uri"
c_attributes['Type'] = "type" c_attributes['Type'] = "type"
c_children['{%s}Transforms' % DS_NAMESPACE] = ('transforms', [Transforms]) c_children['{%s}Transforms' % NAMESPACE] = ('transforms', [Transforms])
c_children['{%s}DigestMethod' % DS_NAMESPACE] = ( c_children['{%s}DigestMethod' % NAMESPACE] = (
'digest_method', [DigestMethod]) 'digest_method', [DigestMethod])
c_children['{%s}DigestValue' % DS_NAMESPACE] = ('digest_value', c_children['{%s}DigestValue' % NAMESPACE] = ('digest_value',
[DigestValue]) [DigestValue])
c_child_order = ['transforms', 'digest_method', 'digest_value'] c_child_order = ['transforms', 'digest_method', 'digest_value']
@@ -855,7 +855,7 @@ class HMACOutputLength(DsBase):
"""The ds:HMACOutputLength element""" """The ds:HMACOutputLength element"""
c_tag = 'HMACOutputLength' c_tag = 'HMACOutputLength'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
@@ -868,11 +868,11 @@ class SignatureMethod(DsBase):
"""The ds:SignatureMethod element""" """The ds:SignatureMethod element"""
c_tag = 'SignatureMethod' c_tag = 'SignatureMethod'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_attributes['Algorithm'] = "algorithm" c_attributes['Algorithm'] = "algorithm"
c_children['{%s}HMACOutputLength' % DS_NAMESPACE] = ( c_children['{%s}HMACOutputLength' % NAMESPACE] = (
'hmac_output_length', HMACOutputLength) 'hmac_output_length', HMACOutputLength)
def __init__(self, algorithm=None, hmac_output_length=None, text=None, def __init__(self, algorithm=None, hmac_output_length=None, text=None,
@@ -899,7 +899,7 @@ class CanonicalizationMethod(DsBase):
"""The ds:CanonicalizationMethod element""" """The ds:CanonicalizationMethod element"""
c_tag = 'CanonicalizationMethod' c_tag = 'CanonicalizationMethod'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_attributes['Algorithm'] = "algorithm" c_attributes['Algorithm'] = "algorithm"
@@ -926,15 +926,15 @@ class SignedInfo(DsBase):
"""The ds:SignedInfo element""" """The ds:SignedInfo element"""
c_tag = 'SignedInfo' c_tag = 'SignedInfo'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_attributes['Id'] = "identifier" c_attributes['Id'] = "identifier"
c_children['{%s}CanonicalizationMethod' % DS_NAMESPACE] = ( c_children['{%s}CanonicalizationMethod' % NAMESPACE] = (
'canonicalization_method', CanonicalizationMethod) 'canonicalization_method', CanonicalizationMethod)
c_children['{%s}SignatureMethod' % DS_NAMESPACE] = ( c_children['{%s}SignatureMethod' % NAMESPACE] = (
'signature_method', SignatureMethod) 'signature_method', SignatureMethod)
c_children['{%s}Reference' % DS_NAMESPACE] = ('reference', [Reference]) c_children['{%s}Reference' % NAMESPACE] = ('reference', [Reference])
c_child_order = ['canonicalization_method', 'signature_method', c_child_order = ['canonicalization_method', 'signature_method',
'reference'] 'reference']
@@ -967,7 +967,7 @@ class SignatureValue(DsBase):
"""The ds:SignatureValue element""" """The ds:SignatureValue element"""
c_tag = 'SignatureValue' c_tag = 'SignatureValue'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_attributes['Id'] = "identifier" c_attributes['Id'] = "identifier"
@@ -995,15 +995,15 @@ class Signature(DsBase):
"""The ds:Signature element""" """The ds:Signature element"""
c_tag = 'Signature' c_tag = 'Signature'
c_namespace = DS_NAMESPACE c_namespace = NAMESPACE
c_children = DsBase.c_children.copy() c_children = DsBase.c_children.copy()
c_attributes = DsBase.c_attributes.copy() c_attributes = DsBase.c_attributes.copy()
c_attributes['Id'] = "identifier" c_attributes['Id'] = "identifier"
c_children['{%s}SignedInfo' % DS_NAMESPACE] = ('signed_info', SignedInfo) c_children['{%s}SignedInfo' % NAMESPACE] = ('signed_info', SignedInfo)
c_children['{%s}SignatureValue' % DS_NAMESPACE] = ( c_children['{%s}SignatureValue' % NAMESPACE] = (
'signature_value', SignatureValue) 'signature_value', SignatureValue)
c_children['{%s}KeyInfo' % DS_NAMESPACE] = ('key_info', KeyInfo) c_children['{%s}KeyInfo' % NAMESPACE] = ('key_info', KeyInfo)
c_children['{%s}Object' % DS_NAMESPACE] = ('object', [Object]) c_children['{%s}Object' % NAMESPACE] = ('object', [Object])
c_child_order = ["signed_info", "signature_value", "key_info", "object"] c_child_order = ["signed_info", "signature_value", "key_info", "object"]
def __init__(self, identifier=None, signed_info=None, signature_value=None, def __init__(self, identifier=None, signed_info=None, signature_value=None,
@@ -1056,3 +1056,48 @@ def get_empty_signature(canonicalization_method_algorithm=C14N_WITH_C,
key_info=KeyInfo(key_value=KeyValue())) key_info=KeyInfo(key_value=KeyValue()))
return signature return signature
ELEMENT_FROM_STRING = {
Object.c_tag: object_from_string,
MgmtData.c_tag: mgmt_data_from_string,
SPKISexp.c_tag: spki_sexp_from_string,
SPKIData.c_tag: spki_data_from_string,
PGPKeyID.c_tag: pgp_key_id_from_string,
PGPKeyPacket.c_tag: pgp_key_packet_from_string,
PGPData.c_tag: pgp_data_from_string,
X509IssuerName.c_tag: x509_issuer_name_from_string,
X509IssuerNumber.c_tag: x509_issuer_number_from_string,
X509IssuerSerial.c_tag: x509_issuer_serial_from_string,
X509SKI.c_tag: x509_ski_from_string,
X509SubjectName.c_tag: x509_subject_name_from_string,
X509Certificate.c_tag: x509_certificate_from_string,
X509CRL.c_tag: x509_crl_from_string,
X509Data.c_tag: x509_data_from_string,
XPath.c_tag: xpath_from_string,
Transform.c_tag: transform_from_string,
Transforms.c_tag: transforms_from_string,
RetrievalMethod.c_tag: retrieval_method_from_string,
Modulus.c_tag: modulus_from_string,
Exponent.c_tag: exponent_from_string,
RSAKeyValue.c_tag: rsa_key_value_from_string,
DsP.c_tag: p_from_string,
DsQ.c_tag: q_from_string,
DsG.c_tag: g_from_string,
DsY.c_tag: y_from_string,
DsJ.c_tag: j_from_string,
Seed.c_tag: seed_from_string,
PgenCounter.c_tag: pgen_counter_from_string,
DSAKeyValue.c_tag: dsa_key_value_from_string,
KeyValue.c_tag: key_value_from_string,
KeyName.c_tag: key_name_from_string,
KeyInfo.c_tag: key_info_from_string,
DigestValue.c_tag: digest_value_from_string,
DigestMethod.c_tag: digest_method_from_string,
Reference.c_tag: reference_from_string,
HMACOutputLength.c_tag: hmac_output_length_from_string,
SignatureMethod.c_tag: signature_method_from_string,
CanonicalizationMethod.c_tag: canonicalization_method_from_string,
SignedInfo.c_tag: signed_info_from_string,
SignatureValue.c_tag: signature_value_from_string,
Signature.c_tag: signature_from_string,
}

View File

@@ -37,8 +37,8 @@ from saml2 import create_class_from_xml_string
import xmldsig as ds import xmldsig as ds
ENC_NAMESPACE = 'http://www.w3.org/2001/04/xmlenc#' NAMESPACE = 'http://www.w3.org/2001/04/xmlenc#'
ENC_TEMPLATE = '{http://www.w3.org/2001/04/xmlenc#}%s' #TEMPLATE = '{http://www.w3.org/2001/04/xmlenc#}%s'
class EncBase(saml2.SamlBase): class EncBase(saml2.SamlBase):
"""The enc:EncBase element""" """The enc:EncBase element"""
@@ -53,7 +53,7 @@ class EncBase(saml2.SamlBase):
class KeySize(EncBase): class KeySize(EncBase):
c_tag = 'KeySize' c_tag = 'KeySize'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = EncBase.c_children.copy() c_children = EncBase.c_children.copy()
c_attributes = EncBase.c_attributes.copy() c_attributes = EncBase.c_attributes.copy()
@@ -68,7 +68,7 @@ def key_size_from_string(xml_string):
class OAEPparams(EncBase): class OAEPparams(EncBase):
c_tag = 'OAEPparams' c_tag = 'OAEPparams'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = EncBase.c_children.copy() c_children = EncBase.c_children.copy()
c_attributes = EncBase.c_attributes.copy() c_attributes = EncBase.c_attributes.copy()
@@ -84,13 +84,13 @@ class EncryptionMethod(EncBase):
"""The enc:EncryptionMethod element""" """The enc:EncryptionMethod element"""
c_tag = 'EncryptionMethod' c_tag = 'EncryptionMethod'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = EncBase.c_children.copy() c_children = EncBase.c_children.copy()
c_attributes = EncBase.c_attributes.copy() c_attributes = EncBase.c_attributes.copy()
c_attributes['Algorithm'] = 'algorithm' c_attributes['Algorithm'] = 'algorithm'
c_children['{%s}KeySize' % ENC_NAMESPACE] = ( c_children['{%s}KeySize' % NAMESPACE] = (
'key_size', [KeySize]) 'key_size', [KeySize])
c_children['{%s}OAEPparams' % ENC_NAMESPACE] = ( c_children['{%s}OAEPparams' % NAMESPACE] = (
'oaep_params', [OAEPparams]) 'oaep_params', [OAEPparams])
def __init__(self, algorithm=None, key_size=None, oaep_params=None, def __init__(self, algorithm=None, key_size=None, oaep_params=None,
@@ -122,7 +122,7 @@ def encryption_method_from_string(xml_string):
class CipherValue(EncBase): class CipherValue(EncBase):
c_tag = 'CipherValue' c_tag = 'CipherValue'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = EncBase.c_children.copy() c_children = EncBase.c_children.copy()
c_attributes = EncBase.c_attributes.copy() c_attributes = EncBase.c_attributes.copy()
@@ -139,10 +139,10 @@ def cipher_value_from_string(xml_string):
class Transforms(EncBase): class Transforms(EncBase):
c_tag = 'Transforms' c_tag = 'Transforms'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = EncBase.c_children.copy() c_children = EncBase.c_children.copy()
c_attributes = EncBase.c_attributes.copy() c_attributes = EncBase.c_attributes.copy()
c_children['{%s}Transform' % ds.DS_NAMESPACE] = ( c_children['{%s}Transform' % ds.NAMESPACE] = (
'transform', [ds.Transform]) 'transform', [ds.Transform])
def __init__(self, transform=None, def __init__(self, transform=None,
@@ -170,11 +170,11 @@ def transforms_from_string(xml_string):
class CipherReference(EncBase): class CipherReference(EncBase):
c_tag = 'CipherReference' c_tag = 'CipherReference'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = EncBase.c_children.copy() c_children = EncBase.c_children.copy()
c_attributes = EncBase.c_attributes.copy() c_attributes = EncBase.c_attributes.copy()
c_attributes['URI'] = 'uri' c_attributes['URI'] = 'uri'
c_children['{%s}Transforms' % ENC_NAMESPACE] = ( c_children['{%s}Transforms' % NAMESPACE] = (
'transforms', [Transforms]) 'transforms', [Transforms])
def __init__(self, uri=None, transforms=None, def __init__(self, uri=None, transforms=None,
@@ -205,12 +205,12 @@ class CipherData(EncBase):
"""The enc:CipherData element""" """The enc:CipherData element"""
c_tag = 'CipherData' c_tag = 'CipherData'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = EncBase.c_children.copy() c_children = EncBase.c_children.copy()
c_attributes = EncBase.c_attributes.copy() c_attributes = EncBase.c_attributes.copy()
c_children['{%s}CipherValue' % ENC_NAMESPACE] = ( c_children['{%s}CipherValue' % NAMESPACE] = (
'cipher_value', [CipherValue]) 'cipher_value', [CipherValue])
c_children['{%s}CipherReference' % ENC_NAMESPACE] = ( c_children['{%s}CipherReference' % NAMESPACE] = (
'cipher_reference', [CipherReference]) 'cipher_reference', [CipherReference])
c_child_order = ['cipher_value', 'cipher_reference'] c_child_order = ['cipher_value', 'cipher_reference']
@@ -231,6 +231,10 @@ class CipherData(EncBase):
self.cipher_value = cipher_value self.cipher_value = cipher_value
self.cipher_reference = cipher_reference self.cipher_reference = cipher_reference
def cipher_data_from_string(xml_string):
""" Create CipherData instance from an XML string """
return create_class_from_xml_string(CipherData, xml_string)
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# EncryptionProperty # EncryptionProperty
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@@ -238,7 +242,7 @@ class CipherData(EncBase):
class EncryptionProperty(EncBase): class EncryptionProperty(EncBase):
c_tag = 'EncryptionProperty' c_tag = 'EncryptionProperty'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = EncBase.c_children.copy() c_children = EncBase.c_children.copy()
c_attributes = EncBase.c_attributes.copy() c_attributes = EncBase.c_attributes.copy()
c_attributes['Target'] = 'target' c_attributes['Target'] = 'target'
@@ -271,11 +275,11 @@ def encryption_property_from_string(xml_string):
class EncryptionProperties(EncBase): class EncryptionProperties(EncBase):
c_tag = 'EncryptionProperties' c_tag = 'EncryptionProperties'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = EncBase.c_children.copy() c_children = EncBase.c_children.copy()
c_attributes = EncBase.c_attributes.copy() c_attributes = EncBase.c_attributes.copy()
c_attributes['Id'] = 'identifier' c_attributes['Id'] = 'identifier'
c_children['{%s}EncryptionProperty' % ENC_NAMESPACE] = ( c_children['{%s}EncryptionProperty' % NAMESPACE] = (
'encryption_property', [EncryptionProperty]) 'encryption_property', [EncryptionProperty])
def __init__(self, identifier=None, encryption_property=None, def __init__(self, identifier=None, encryption_property=None,
@@ -306,20 +310,20 @@ class EncryptedType(EncBase):
"""The enc:EncryptedType element""" """The enc:EncryptedType element"""
c_tag = 'EncryptedType' c_tag = 'EncryptedType'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = EncBase.c_children.copy() c_children = EncBase.c_children.copy()
c_attributes = EncBase.c_attributes.copy() c_attributes = EncBase.c_attributes.copy()
c_attributes['Id'] = 'identifier' c_attributes['Id'] = 'identifier'
c_attributes['Type'] = 'typ' c_attributes['Type'] = 'typ'
c_attributes['MimeType'] = 'mime_type' c_attributes['MimeType'] = 'mime_type'
c_attributes['Encoding'] = 'encoding' c_attributes['Encoding'] = 'encoding'
c_children['{%s}EncryptionMethod' % ENC_NAMESPACE] = ( c_children['{%s}EncryptionMethod' % NAMESPACE] = (
'encryption_method', [EncryptionMethod]) 'encryption_method', [EncryptionMethod])
c_children['{%s}KeyInfo' % ds.DS_NAMESPACE] = ( c_children['{%s}KeyInfo' % ds.NAMESPACE] = (
'key_info', [ds.KeyInfo]) 'key_info', [ds.KeyInfo])
c_children['{%s}CipherData' % ENC_NAMESPACE] = ( c_children['{%s}CipherData' % NAMESPACE] = (
'cipher_data', [CipherData]) 'cipher_data', [CipherData])
c_children['{%s}EncryptionProperties' % ENC_NAMESPACE] = ( c_children['{%s}EncryptionProperties' % NAMESPACE] = (
'encryption_properties', [EncryptionProperties]) 'encryption_properties', [EncryptionProperties])
c_child_order = ['encryption_method', 'key_info', c_child_order = ['encryption_method', 'key_info',
'cipher_data','encryption_properties'] 'cipher_data','encryption_properties']
@@ -366,7 +370,7 @@ class EncryptedData(EncryptedType):
"""The enc:EncryptedData element""" """The enc:EncryptedData element"""
c_tag = 'EncryptedData' c_tag = 'EncryptedData'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = EncryptedType.c_children.copy() c_children = EncryptedType.c_children.copy()
c_attributes = EncryptedType.c_attributes.copy() c_attributes = EncryptedType.c_attributes.copy()
@@ -381,7 +385,7 @@ def encrypted_data_from_string(xml_string):
class ReferenceType(EncBase): class ReferenceType(EncBase):
c_tag = 'ReferenceType' c_tag = 'ReferenceType'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = EncBase.c_children.copy() c_children = EncBase.c_children.copy()
c_attributes = EncBase.c_attributes.copy() c_attributes = EncBase.c_attributes.copy()
c_attributes['URI'] = 'uri' c_attributes['URI'] = 'uri'
@@ -411,10 +415,14 @@ def reference_type_from_string(xml_string):
class DataReference(ReferenceType): class DataReference(ReferenceType):
c_tag = 'DataReference' c_tag = 'DataReference'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = ReferenceType.c_children.copy() c_children = ReferenceType.c_children.copy()
c_attributes = ReferenceType.c_attributes.copy() c_attributes = ReferenceType.c_attributes.copy()
def data_reference_from_string(xml_string):
""" Create DataReference instance from an XML string """
return create_class_from_xml_string(DataReference, xml_string)
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# KeyReference # KeyReference
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@@ -422,10 +430,14 @@ class DataReference(ReferenceType):
class KeyReference(ReferenceType): class KeyReference(ReferenceType):
c_tag = 'KeyReference' c_tag = 'KeyReference'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = ReferenceType.c_children.copy() c_children = ReferenceType.c_children.copy()
c_attributes = ReferenceType.c_attributes.copy() c_attributes = ReferenceType.c_attributes.copy()
def key_reference_from_string(xml_string):
""" Create KeyReference instance from an XML string """
return create_class_from_xml_string(KeyReference, xml_string)
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# ReferenceList # ReferenceList
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@@ -433,12 +445,12 @@ class KeyReference(ReferenceType):
class ReferenceList(EncBase): class ReferenceList(EncBase):
c_tag = 'ReferenceList' c_tag = 'ReferenceList'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = EncBase.c_children.copy() c_children = EncBase.c_children.copy()
c_attributes = EncBase.c_attributes.copy() c_attributes = EncBase.c_attributes.copy()
c_children['{%s}DataReference' % ENC_NAMESPACE] = ( c_children['{%s}DataReference' % NAMESPACE] = (
'data_reference', [DataReference]) 'data_reference', [DataReference])
c_children['{%s}KeyReference' % ENC_NAMESPACE] = ( c_children['{%s}KeyReference' % NAMESPACE] = (
'key_reference', [KeyReference]) 'key_reference', [KeyReference])
def __init__(self, data_reference=None, key_reference=None, def __init__(self, data_reference=None, key_reference=None,
@@ -468,7 +480,7 @@ def reference_list_from_string(xml_string):
class CarriedKeyName(EncBase): class CarriedKeyName(EncBase):
c_tag = 'CarriedKeyName' c_tag = 'CarriedKeyName'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = EncBase.c_children.copy() c_children = EncBase.c_children.copy()
c_attributes = EncBase.c_attributes.copy() c_attributes = EncBase.c_attributes.copy()
@@ -484,13 +496,13 @@ class EncryptedKey(EncryptedType):
"""The enc:EncryptedKey element""" """The enc:EncryptedKey element"""
c_tag = 'EncryptedKey' c_tag = 'EncryptedKey'
c_namespace = ENC_NAMESPACE c_namespace = NAMESPACE
c_children = EncryptedType.c_children.copy() c_children = EncryptedType.c_children.copy()
c_attributes = EncryptedType.c_attributes.copy() c_attributes = EncryptedType.c_attributes.copy()
c_attributes['Recipient'] = 'recipient' c_attributes['Recipient'] = 'recipient'
c_children['{%s}ReferenceList' % ENC_NAMESPACE] = ( c_children['{%s}ReferenceList' % NAMESPACE] = (
'reference_list', [ReferenceList]) 'reference_list', [ReferenceList])
c_children['{%s}CarriedKeyName' % ENC_NAMESPACE] = ( c_children['{%s}CarriedKeyName' % NAMESPACE] = (
'carried_key_name', [CarriedKeyName]) 'carried_key_name', [CarriedKeyName])
def __init__(self, recipient=None, reference_list=None, def __init__(self, recipient=None, reference_list=None,
@@ -529,3 +541,22 @@ def encrypted_key_from_string(xml_string):
""" Create EncryptedKey instance from an XML string """ """ Create EncryptedKey instance from an XML string """
return create_class_from_xml_string(EncryptedKey, xml_string) return create_class_from_xml_string(EncryptedKey, xml_string)
ELEMENT_TO_STRING = {
KeySize: key_size_from_string,
OAEPparams: oaep_params_from_string,
EncryptionMethod: encryption_method_from_string,
CipherValue: cipher_value_from_string,
Transforms: transforms_from_string,
CipherReference: cipher_reference_from_string,
CipherData: cipher_data_from_string,
EncryptionProperty: encryption_property_from_string,
EncryptionProperties: encryption_properties_from_string,
EncryptedType: encrypted_type_from_string,
EncryptedData: encrypted_data_from_string,
ReferenceType: reference_type_from_string,
DataReference: data_reference_from_string,
KeyReference: key_reference_from_string,
ReferenceList: reference_list_from_string,
CarriedKeyName: carried_key_name_from_string,
EncryptedKey: encrypted_key_from_string,
}