Refactored the support for metadata extensions in the config file.

This commit is contained in:
Roland Hedberg
2014-03-13 15:14:11 +01:00
parent cbb0c8ebd6
commit d7f50d4b05
10 changed files with 435 additions and 245 deletions

View File

@@ -68,7 +68,8 @@ COMMON_ARGS = [
"generate_cert_info", "generate_cert_info",
"tmp_cert_file", "tmp_cert_file",
"tmp_key_file", "tmp_key_file",
"validate_certificate" "validate_certificate",
"extensions"
] ]
SP_ARGS = [ SP_ARGS = [
@@ -213,6 +214,7 @@ class Config(object):
self.tmp_cert_file = None self.tmp_cert_file = None
self.tmp_key_file = None self.tmp_key_file = None
self.validate_certificate = None self.validate_certificate = None
self.extensions = {}
def setattr(self, context, attr, val): def setattr(self, context, attr, val):
if context == "": if context == "":
@@ -331,6 +333,9 @@ class Config(object):
except KeyError: except KeyError:
pass pass
if "extensions" in cnf:
self.do_extensions(cnf["extensions"])
self.load_complex(cnf, metadata_construction=metadata_construction) self.load_complex(cnf, metadata_construction=metadata_construction)
self.context = self.def_context self.context = self.def_context
@@ -474,6 +479,11 @@ class Config(object):
return None, None return None, None
def do_extensions(self, extensions):
for key, val in extensions.items():
self.extensions[key] = val
class SPConfig(Config): class SPConfig(Config):
def_context = "sp" def_context = "sp"

View File

@@ -11,6 +11,7 @@ from saml2 import md
NAMESPACE = 'urn:oasis:names:tc:SAML:metadata:rpi' NAMESPACE = 'urn:oasis:names:tc:SAML:metadata:rpi'
class RegistrationPolicy(md.LocalizedURIType_): class RegistrationPolicy(md.LocalizedURIType_):
"""The urn:oasis:names:tc:SAML:metadata:rpi:RegistrationPolicy element """ """The urn:oasis:names:tc:SAML:metadata:rpi:RegistrationPolicy element """
@@ -21,6 +22,7 @@ class RegistrationPolicy(md.LocalizedURIType_):
c_child_order = md.LocalizedURIType_.c_child_order[:] c_child_order = md.LocalizedURIType_.c_child_order[:]
c_cardinality = md.LocalizedURIType_.c_cardinality.copy() c_cardinality = md.LocalizedURIType_.c_cardinality.copy()
def registration_policy_from_string(xml_string): def registration_policy_from_string(xml_string):
return saml2.create_class_from_xml_string(RegistrationPolicy, xml_string) return saml2.create_class_from_xml_string(RegistrationPolicy, xml_string)
@@ -35,6 +37,7 @@ class UsagePolicy(md.LocalizedURIType_):
c_child_order = md.LocalizedURIType_.c_child_order[:] c_child_order = md.LocalizedURIType_.c_child_order[:]
c_cardinality = md.LocalizedURIType_.c_cardinality.copy() c_cardinality = md.LocalizedURIType_.c_cardinality.copy()
def usage_policy_from_string(xml_string): def usage_policy_from_string(xml_string):
return saml2.create_class_from_xml_string(UsagePolicy, xml_string) return saml2.create_class_from_xml_string(UsagePolicy, xml_string)
@@ -53,21 +56,20 @@ class PublicationType_(SamlBase):
c_attributes['publicationId'] = ('publication_id', 'string', False) c_attributes['publicationId'] = ('publication_id', 'string', False)
def __init__(self, def __init__(self,
publisher=None, publisher=None,
creation_instant=None, creation_instant=None,
publication_id=None, publication_id=None,
text=None, text=None,
extension_elements=None, extension_elements=None,
extension_attributes=None extension_attributes=None):
):
SamlBase.__init__(self, SamlBase.__init__(self,
text=text, text=text,
extension_elements=extension_elements, extension_elements=extension_elements,
extension_attributes=extension_attributes, extension_attributes=extension_attributes)
) self.publisher = publisher
self.publisher=publisher self.creation_instant = creation_instant
self.creation_instant=creation_instant self.publication_id = publication_id
self.publication_id=publication_id
def publication_type__from_string(xml_string): def publication_type__from_string(xml_string):
return saml2.create_class_from_xml_string(PublicationType_, xml_string) return saml2.create_class_from_xml_string(PublicationType_, xml_string)
@@ -82,28 +84,30 @@ class RegistrationInfoType_(SamlBase):
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_child_order = SamlBase.c_child_order[:] c_child_order = SamlBase.c_child_order[:]
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
c_children['{urn:oasis:names:tc:SAML:metadata:rpi}RegistrationPolicy'] = ('registration_policy', [RegistrationPolicy]) c_children['{urn:oasis:names:tc:SAML:metadata:rpi}RegistrationPolicy'] = (
c_cardinality['registration_policy'] = {"min":0} 'registration_policy', [RegistrationPolicy])
c_attributes['registrationAuthority'] = ('registration_authority', 'string', True) c_cardinality['registration_policy'] = {"min": 0}
c_attributes['registrationInstant'] = ('registration_instant', 'dateTime', False) c_attributes['registrationAuthority'] = (
'registration_authority', 'string', True)
c_attributes['registrationInstant'] = (
'registration_instant', 'dateTime', False)
c_child_order.extend(['registration_policy']) c_child_order.extend(['registration_policy'])
def __init__(self, def __init__(self,
registration_policy=None, registration_policy=None,
registration_authority=None, registration_authority=None,
registration_instant=None, registration_instant=None,
text=None, text=None,
extension_elements=None, extension_elements=None,
extension_attributes=None extension_attributes=None):
):
SamlBase.__init__(self, SamlBase.__init__(self,
text=text, text=text,
extension_elements=extension_elements, extension_elements=extension_elements,
extension_attributes=extension_attributes, extension_attributes=extension_attributes)
) self.registration_policy = registration_policy or []
self.registration_policy=registration_policy or [] self.registration_authority = registration_authority
self.registration_authority=registration_authority self.registration_instant = registration_instant
self.registration_instant=registration_instant
def registration_info_type__from_string(xml_string): def registration_info_type__from_string(xml_string):
return saml2.create_class_from_xml_string(RegistrationInfoType_, xml_string) return saml2.create_class_from_xml_string(RegistrationInfoType_, xml_string)
@@ -118,31 +122,31 @@ class PublicationInfoType_(SamlBase):
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_child_order = SamlBase.c_child_order[:] c_child_order = SamlBase.c_child_order[:]
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
c_children['{urn:oasis:names:tc:SAML:metadata:rpi}UsagePolicy'] = ('usage_policy', [UsagePolicy]) c_children['{urn:oasis:names:tc:SAML:metadata:rpi}UsagePolicy'] = (
c_cardinality['usage_policy'] = {"min":0} 'usage_policy', [UsagePolicy])
c_cardinality['usage_policy'] = {"min": 0}
c_attributes['publisher'] = ('publisher', 'string', True) c_attributes['publisher'] = ('publisher', 'string', True)
c_attributes['creationInstant'] = ('creation_instant', 'dateTime', False) c_attributes['creationInstant'] = ('creation_instant', 'dateTime', False)
c_attributes['publicationId'] = ('publication_id', 'string', False) c_attributes['publicationId'] = ('publication_id', 'string', False)
c_child_order.extend(['usage_policy']) c_child_order.extend(['usage_policy'])
def __init__(self, def __init__(self,
usage_policy=None, usage_policy=None,
publisher=None, publisher=None,
creation_instant=None, creation_instant=None,
publication_id=None, publication_id=None,
text=None, text=None,
extension_elements=None, extension_elements=None,
extension_attributes=None extension_attributes=None):
):
SamlBase.__init__(self, SamlBase.__init__(self,
text=text, text=text,
extension_elements=extension_elements, extension_elements=extension_elements,
extension_attributes=extension_attributes, extension_attributes=extension_attributes)
) self.usage_policy = usage_policy or []
self.usage_policy=usage_policy or [] self.publisher = publisher
self.publisher=publisher self.creation_instant = creation_instant
self.creation_instant=creation_instant self.publication_id = publication_id
self.publication_id=publication_id
def publication_info_type__from_string(xml_string): def publication_info_type__from_string(xml_string):
return saml2.create_class_from_xml_string(PublicationInfoType_, xml_string) return saml2.create_class_from_xml_string(PublicationInfoType_, xml_string)
@@ -158,6 +162,7 @@ class Publication(PublicationType_):
c_child_order = PublicationType_.c_child_order[:] c_child_order = PublicationType_.c_child_order[:]
c_cardinality = PublicationType_.c_cardinality.copy() c_cardinality = PublicationType_.c_cardinality.copy()
def publication_from_string(xml_string): def publication_from_string(xml_string):
return saml2.create_class_from_xml_string(Publication, xml_string) return saml2.create_class_from_xml_string(Publication, xml_string)
@@ -172,6 +177,7 @@ class RegistrationInfo(RegistrationInfoType_):
c_child_order = RegistrationInfoType_.c_child_order[:] c_child_order = RegistrationInfoType_.c_child_order[:]
c_cardinality = RegistrationInfoType_.c_cardinality.copy() c_cardinality = RegistrationInfoType_.c_cardinality.copy()
def registration_info_from_string(xml_string): def registration_info_from_string(xml_string):
return saml2.create_class_from_xml_string(RegistrationInfo, xml_string) return saml2.create_class_from_xml_string(RegistrationInfo, xml_string)
@@ -186,6 +192,7 @@ class PublicationInfo(PublicationInfoType_):
c_child_order = PublicationInfoType_.c_child_order[:] c_child_order = PublicationInfoType_.c_child_order[:]
c_cardinality = PublicationInfoType_.c_cardinality.copy() c_cardinality = PublicationInfoType_.c_cardinality.copy()
def publication_info_from_string(xml_string): def publication_info_from_string(xml_string):
return saml2.create_class_from_xml_string(PublicationInfo, xml_string) return saml2.create_class_from_xml_string(PublicationInfo, xml_string)
@@ -199,22 +206,22 @@ class PublicationPathType_(SamlBase):
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_child_order = SamlBase.c_child_order[:] c_child_order = SamlBase.c_child_order[:]
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
c_children['{urn:oasis:names:tc:SAML:metadata:rpi}Publication'] = ('publication', [Publication]) c_children['{urn:oasis:names:tc:SAML:metadata:rpi}Publication'] = (
c_cardinality['publication'] = {"min":0} 'publication', [Publication])
c_cardinality['publication'] = {"min": 0}
c_child_order.extend(['publication']) c_child_order.extend(['publication'])
def __init__(self, def __init__(self,
publication=None, publication=None,
text=None, text=None,
extension_elements=None, extension_elements=None,
extension_attributes=None extension_attributes=None):
):
SamlBase.__init__(self, SamlBase.__init__(self,
text=text, text=text,
extension_elements=extension_elements, extension_elements=extension_elements,
extension_attributes=extension_attributes, extension_attributes=extension_attributes)
) self.publication = publication or []
self.publication=publication or []
def publication_path_type__from_string(xml_string): def publication_path_type__from_string(xml_string):
return saml2.create_class_from_xml_string(PublicationPathType_, xml_string) return saml2.create_class_from_xml_string(PublicationPathType_, xml_string)
@@ -230,6 +237,7 @@ class PublicationPath(PublicationPathType_):
c_child_order = PublicationPathType_.c_child_order[:] c_child_order = PublicationPathType_.c_child_order[:]
c_cardinality = PublicationPathType_.c_cardinality.copy() c_cardinality = PublicationPathType_.c_cardinality.copy()
def publication_path_from_string(xml_string): def publication_path_from_string(xml_string):
return saml2.create_class_from_xml_string(PublicationPath, xml_string) return saml2.create_class_from_xml_string(PublicationPath, xml_string)

View File

@@ -11,6 +11,7 @@ from saml2 import md
NAMESPACE = 'urn:oasis:names:tc:SAML:metadata:ui' NAMESPACE = 'urn:oasis:names:tc:SAML:metadata:ui'
class DisplayName(md.LocalizedNameType_): class DisplayName(md.LocalizedNameType_):
"""The urn:oasis:names:tc:SAML:metadata:ui:DisplayName element """ """The urn:oasis:names:tc:SAML:metadata:ui:DisplayName element """
@@ -21,6 +22,7 @@ class DisplayName(md.LocalizedNameType_):
c_child_order = md.LocalizedNameType_.c_child_order[:] c_child_order = md.LocalizedNameType_.c_child_order[:]
c_cardinality = md.LocalizedNameType_.c_cardinality.copy() c_cardinality = md.LocalizedNameType_.c_cardinality.copy()
def display_name_from_string(xml_string): def display_name_from_string(xml_string):
return saml2.create_class_from_xml_string(DisplayName, xml_string) return saml2.create_class_from_xml_string(DisplayName, xml_string)
@@ -35,6 +37,7 @@ class Description(md.LocalizedNameType_):
c_child_order = md.LocalizedNameType_.c_child_order[:] c_child_order = md.LocalizedNameType_.c_child_order[:]
c_cardinality = md.LocalizedNameType_.c_cardinality.copy() c_cardinality = md.LocalizedNameType_.c_cardinality.copy()
def description_from_string(xml_string): def description_from_string(xml_string):
return saml2.create_class_from_xml_string(Description, xml_string) return saml2.create_class_from_xml_string(Description, xml_string)
@@ -49,6 +52,7 @@ class InformationURL(md.LocalizedURIType_):
c_child_order = md.LocalizedURIType_.c_child_order[:] c_child_order = md.LocalizedURIType_.c_child_order[:]
c_cardinality = md.LocalizedURIType_.c_cardinality.copy() c_cardinality = md.LocalizedURIType_.c_cardinality.copy()
def information_url_from_string(xml_string): def information_url_from_string(xml_string):
return saml2.create_class_from_xml_string(InformationURL, xml_string) return saml2.create_class_from_xml_string(InformationURL, xml_string)
@@ -63,6 +67,7 @@ class PrivacyStatementURL(md.LocalizedURIType_):
c_child_order = md.LocalizedURIType_.c_child_order[:] c_child_order = md.LocalizedURIType_.c_child_order[:]
c_cardinality = md.LocalizedURIType_.c_cardinality.copy() c_cardinality = md.LocalizedURIType_.c_cardinality.copy()
def privacy_statement_url_from_string(xml_string): def privacy_statement_url_from_string(xml_string):
return saml2.create_class_from_xml_string(PrivacyStatementURL, xml_string) return saml2.create_class_from_xml_string(PrivacyStatementURL, xml_string)
@@ -78,6 +83,7 @@ class ListOfStrings_(SamlBase):
c_child_order = SamlBase.c_child_order[:] c_child_order = SamlBase.c_child_order[:]
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
def list_of_strings__from_string(xml_string): def list_of_strings__from_string(xml_string):
return saml2.create_class_from_xml_string(ListOfStrings_, xml_string) return saml2.create_class_from_xml_string(ListOfStrings_, xml_string)
@@ -91,20 +97,20 @@ class KeywordsType_(ListOfStrings_):
c_attributes = ListOfStrings_.c_attributes.copy() c_attributes = ListOfStrings_.c_attributes.copy()
c_child_order = ListOfStrings_.c_child_order[:] c_child_order = ListOfStrings_.c_child_order[:]
c_cardinality = ListOfStrings_.c_cardinality.copy() c_cardinality = ListOfStrings_.c_cardinality.copy()
c_attributes['{http://www.w3.org/XML/1998/namespace}lang'] = ('lang', 'mdui:listOfStrings', True) c_attributes['{http://www.w3.org/XML/1998/namespace}lang'] = (
'lang', 'mdui:listOfStrings', True)
def __init__(self, def __init__(self,
lang=None, lang=None,
text=None, text=None,
extension_elements=None, extension_elements=None,
extension_attributes=None, extension_attributes=None):
):
ListOfStrings_.__init__(self, ListOfStrings_.__init__(self,
text=text, text=text,
extension_elements=extension_elements, extension_elements=extension_elements,
extension_attributes=extension_attributes, extension_attributes=extension_attributes)
) self.lang = lang
self.lang=lang
def keywords_type__from_string(xml_string): def keywords_type__from_string(xml_string):
return saml2.create_class_from_xml_string(KeywordsType_, xml_string) return saml2.create_class_from_xml_string(KeywordsType_, xml_string)
@@ -122,24 +128,24 @@ class LogoType_(SamlBase):
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
c_attributes['height'] = ('height', 'positiveInteger', True) c_attributes['height'] = ('height', 'positiveInteger', True)
c_attributes['width'] = ('width', 'positiveInteger', True) c_attributes['width'] = ('width', 'positiveInteger', True)
c_attributes['{http://www.w3.org/XML/1998/namespace}lang'] = ('lang', 'anyURI', False) c_attributes['{http://www.w3.org/XML/1998/namespace}lang'] = (
'lang', 'anyURI', False)
def __init__(self, def __init__(self,
height=None, height=None,
width=None, width=None,
lang=None, lang=None,
text=None, text=None,
extension_elements=None, extension_elements=None,
extension_attributes=None, extension_attributes=None):
):
SamlBase.__init__(self, SamlBase.__init__(self,
text=text, text=text,
extension_elements=extension_elements, extension_elements=extension_elements,
extension_attributes=extension_attributes, extension_attributes=extension_attributes)
) self.height = height
self.height=height self.width = width
self.width=width self.lang = lang
self.lang=lang
def logo_type__from_string(xml_string): def logo_type__from_string(xml_string):
return saml2.create_class_from_xml_string(LogoType_, xml_string) return saml2.create_class_from_xml_string(LogoType_, xml_string)
@@ -156,6 +162,7 @@ class IPHint(SamlBase):
c_child_order = SamlBase.c_child_order[:] c_child_order = SamlBase.c_child_order[:]
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
def ip_hint_from_string(xml_string): def ip_hint_from_string(xml_string):
return saml2.create_class_from_xml_string(IPHint, xml_string) return saml2.create_class_from_xml_string(IPHint, xml_string)
@@ -171,6 +178,7 @@ class DomainHint(SamlBase):
c_child_order = SamlBase.c_child_order[:] c_child_order = SamlBase.c_child_order[:]
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
def domain_hint_from_string(xml_string): def domain_hint_from_string(xml_string):
return saml2.create_class_from_xml_string(DomainHint, xml_string) return saml2.create_class_from_xml_string(DomainHint, xml_string)
@@ -186,6 +194,7 @@ class GeolocationHint(SamlBase):
c_child_order = SamlBase.c_child_order[:] c_child_order = SamlBase.c_child_order[:]
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
def geolocation_hint_from_string(xml_string): def geolocation_hint_from_string(xml_string):
return saml2.create_class_from_xml_string(GeolocationHint, xml_string) return saml2.create_class_from_xml_string(GeolocationHint, xml_string)
@@ -200,6 +209,7 @@ class Keywords(KeywordsType_):
c_child_order = KeywordsType_.c_child_order[:] c_child_order = KeywordsType_.c_child_order[:]
c_cardinality = KeywordsType_.c_cardinality.copy() c_cardinality = KeywordsType_.c_cardinality.copy()
def keywords_from_string(xml_string): def keywords_from_string(xml_string):
return saml2.create_class_from_xml_string(Keywords, xml_string) return saml2.create_class_from_xml_string(Keywords, xml_string)
@@ -214,6 +224,7 @@ class Logo(LogoType_):
c_child_order = LogoType_.c_child_order[:] c_child_order = LogoType_.c_child_order[:]
c_cardinality = LogoType_.c_cardinality.copy() c_cardinality = LogoType_.c_cardinality.copy()
def logo_from_string(xml_string): def logo_from_string(xml_string):
return saml2.create_class_from_xml_string(Logo, xml_string) return saml2.create_class_from_xml_string(Logo, xml_string)
@@ -227,30 +238,32 @@ class DiscoHintsType_(SamlBase):
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_child_order = SamlBase.c_child_order[:] c_child_order = SamlBase.c_child_order[:]
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
c_children['{urn:oasis:names:tc:SAML:metadata:ui}IPHint'] = ('ip_hint', [IPHint]) c_children['{urn:oasis:names:tc:SAML:metadata:ui}IPHint'] = (
c_cardinality['ip_hint'] = {"min":0} 'ip_hint', [IPHint])
c_children['{urn:oasis:names:tc:SAML:metadata:ui}DomainHint'] = ('domain_hint', [DomainHint]) c_cardinality['ip_hint'] = {"min": 0}
c_cardinality['domain_hint'] = {"min":0} c_children['{urn:oasis:names:tc:SAML:metadata:ui}DomainHint'] = (
c_children['{urn:oasis:names:tc:SAML:metadata:ui}GeolocationHint'] = ('geolocation_hint', [GeolocationHint]) 'domain_hint', [DomainHint])
c_cardinality['geolocation_hint'] = {"min":0} c_cardinality['domain_hint'] = {"min": 0}
c_children['{urn:oasis:names:tc:SAML:metadata:ui}GeolocationHint'] = (
'geolocation_hint', [GeolocationHint])
c_cardinality['geolocation_hint'] = {"min": 0}
c_child_order.extend(['ip_hint', 'domain_hint', 'geolocation_hint']) c_child_order.extend(['ip_hint', 'domain_hint', 'geolocation_hint'])
def __init__(self, def __init__(self,
ip_hint=None, ip_hint=None,
domain_hint=None, domain_hint=None,
geolocation_hint=None, geolocation_hint=None,
text=None, text=None,
extension_elements=None, extension_elements=None,
extension_attributes=None, extension_attributes=None):
):
SamlBase.__init__(self, SamlBase.__init__(self,
text=text, text=text,
extension_elements=extension_elements, extension_elements=extension_elements,
extension_attributes=extension_attributes, extension_attributes=extension_attributes)
) self.ip_hint = ip_hint or []
self.ip_hint=ip_hint or [] self.domain_hint = domain_hint or []
self.domain_hint=domain_hint or [] self.geolocation_hint = geolocation_hint or []
self.geolocation_hint=geolocation_hint or []
def disco_hints_type__from_string(xml_string): def disco_hints_type__from_string(xml_string):
return saml2.create_class_from_xml_string(DiscoHintsType_, xml_string) return saml2.create_class_from_xml_string(DiscoHintsType_, xml_string)
@@ -265,42 +278,48 @@ class UIInfoType_(SamlBase):
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_child_order = SamlBase.c_child_order[:] c_child_order = SamlBase.c_child_order[:]
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
c_children['{urn:oasis:names:tc:SAML:metadata:ui}DisplayName'] = ('display_name', [DisplayName]) c_children['{urn:oasis:names:tc:SAML:metadata:ui}DisplayName'] = (
c_cardinality['display_name'] = {"min":0} 'display_name', [DisplayName])
c_children['{urn:oasis:names:tc:SAML:metadata:ui}Description'] = ('description', [Description]) c_cardinality['display_name'] = {"min": 0}
c_cardinality['description'] = {"min":0} c_children['{urn:oasis:names:tc:SAML:metadata:ui}Description'] = (
c_children['{urn:oasis:names:tc:SAML:metadata:ui}Keywords'] = ('keywords', [Keywords]) 'description', [Description])
c_cardinality['keywords'] = {"min":0} c_cardinality['description'] = {"min": 0}
c_children['{urn:oasis:names:tc:SAML:metadata:ui}Keywords'] = (
'keywords', [Keywords])
c_cardinality['keywords'] = {"min": 0}
c_children['{urn:oasis:names:tc:SAML:metadata:ui}Logo'] = ('logo', [Logo]) c_children['{urn:oasis:names:tc:SAML:metadata:ui}Logo'] = ('logo', [Logo])
c_cardinality['logo'] = {"min":0} c_cardinality['logo'] = {"min": 0}
c_children['{urn:oasis:names:tc:SAML:metadata:ui}InformationURL'] = ('information_url', [InformationURL]) c_children['{urn:oasis:names:tc:SAML:metadata:ui}InformationURL'] = (
c_cardinality['information_url'] = {"min":0} 'information_url', [InformationURL])
c_children['{urn:oasis:names:tc:SAML:metadata:ui}PrivacyStatementURL'] = ('privacy_statement_url', [PrivacyStatementURL]) c_cardinality['information_url'] = {"min": 0}
c_cardinality['privacy_statement_url'] = {"min":0} c_children['{urn:oasis:names:tc:SAML:metadata:ui}PrivacyStatementURL'] = (
c_child_order.extend(['display_name', 'description', 'keywords', 'logo', 'information_url', 'privacy_statement_url']) 'privacy_statement_url', [PrivacyStatementURL])
c_cardinality['privacy_statement_url'] = {"min": 0}
c_child_order.extend(
['display_name', 'description', 'keywords', 'logo', 'information_url',
'privacy_statement_url'])
def __init__(self, def __init__(self,
display_name=None, display_name=None,
description=None, description=None,
keywords=None, keywords=None,
logo=None, logo=None,
information_url=None, information_url=None,
privacy_statement_url=None, privacy_statement_url=None,
text=None, text=None,
extension_elements=None, extension_elements=None,
extension_attributes=None, extension_attributes=None):
):
SamlBase.__init__(self, SamlBase.__init__(self,
text=text, text=text,
extension_elements=extension_elements, extension_elements=extension_elements,
extension_attributes=extension_attributes, extension_attributes=extension_attributes)
) self.display_name = display_name or []
self.display_name=display_name or [] self.description = description or []
self.description=description or [] self.keywords = keywords or []
self.keywords=keywords or [] self.logo = logo or []
self.logo=logo or [] self.information_url = information_url or []
self.information_url=information_url or [] self.privacy_statement_url = privacy_statement_url or []
self.privacy_statement_url=privacy_statement_url or []
def ui_info_type__from_string(xml_string): def ui_info_type__from_string(xml_string):
return saml2.create_class_from_xml_string(UIInfoType_, xml_string) return saml2.create_class_from_xml_string(UIInfoType_, xml_string)
@@ -316,6 +335,7 @@ class DiscoHints(DiscoHintsType_):
c_child_order = DiscoHintsType_.c_child_order[:] c_child_order = DiscoHintsType_.c_child_order[:]
c_cardinality = DiscoHintsType_.c_cardinality.copy() c_cardinality = DiscoHintsType_.c_cardinality.copy()
def disco_hints_from_string(xml_string): def disco_hints_from_string(xml_string):
return saml2.create_class_from_xml_string(DiscoHints, xml_string) return saml2.create_class_from_xml_string(DiscoHints, xml_string)
@@ -330,6 +350,7 @@ class UIInfo(UIInfoType_):
c_child_order = UIInfoType_.c_child_order[:] c_child_order = UIInfoType_.c_child_order[:]
c_cardinality = UIInfoType_.c_cardinality.copy() c_cardinality = UIInfoType_.c_cardinality.copy()
def ui_info_from_string(xml_string): def ui_info_from_string(xml_string):
return saml2.create_class_from_xml_string(UIInfo, xml_string) return saml2.create_class_from_xml_string(UIInfo, xml_string)
@@ -375,4 +396,3 @@ ELEMENT_BY_TAG = {
def factory(tag, **kwargs): def factory(tag, **kwargs):
return ELEMENT_BY_TAG[tag](**kwargs) return ELEMENT_BY_TAG[tag](**kwargs)

View File

@@ -11,6 +11,7 @@ import xmldsig as ds
NAMESPACE = 'urn:mace:shibboleth:metadata:1.0' NAMESPACE = 'urn:mace:shibboleth:metadata:1.0'
class Scope(SamlBase): class Scope(SamlBase):
"""The urn:mace:shibboleth:metadata:1.0:Scope element """ """The urn:mace:shibboleth:metadata:1.0:Scope element """
@@ -24,17 +25,16 @@ class Scope(SamlBase):
c_attributes['regexp'] = ('regexp', 'boolean', False) c_attributes['regexp'] = ('regexp', 'boolean', False)
def __init__(self, def __init__(self,
regexp='false', regexp='false',
text=None, text=None,
extension_elements=None, extension_elements=None,
extension_attributes=None, extension_attributes=None):
):
SamlBase.__init__(self, SamlBase.__init__(self,
text=text, text=text,
extension_elements=extension_elements, extension_elements=extension_elements,
extension_attributes=extension_attributes, extension_attributes=extension_attributes)
) self.regexp = regexp
self.regexp=regexp
def scope_from_string(xml_string): def scope_from_string(xml_string):
return saml2.create_class_from_xml_string(Scope, xml_string) return saml2.create_class_from_xml_string(Scope, xml_string)
@@ -49,25 +49,25 @@ class KeyAuthority(SamlBase):
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_child_order = SamlBase.c_child_order[:] c_child_order = SamlBase.c_child_order[:]
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
c_children['{http://www.w3.org/2000/09/xmldsig#}KeyInfo'] = ('key_info', [ds.KeyInfo]) c_children['{http://www.w3.org/2000/09/xmldsig#}KeyInfo'] = ('key_info',
c_cardinality['key_info'] = {"min":1} [ds.KeyInfo])
c_cardinality['key_info'] = {"min": 1}
c_attributes['VerifyDepth'] = ('verify_depth', 'unsignedByte', False) c_attributes['VerifyDepth'] = ('verify_depth', 'unsignedByte', False)
c_child_order.extend(['key_info']) c_child_order.extend(['key_info'])
def __init__(self, def __init__(self,
key_info=None, key_info=None,
verify_depth='1', verify_depth='1',
text=None, text=None,
extension_elements=None, extension_elements=None,
extension_attributes=None, extension_attributes=None):
):
SamlBase.__init__(self, SamlBase.__init__(self,
text=text, text=text,
extension_elements=extension_elements, extension_elements=extension_elements,
extension_attributes=extension_attributes, extension_attributes=extension_attributes)
) self.key_info = key_info or []
self.key_info=key_info or [] self.verify_depth = verify_depth
self.verify_depth=verify_depth
def key_authority_from_string(xml_string): def key_authority_from_string(xml_string):
return saml2.create_class_from_xml_string(KeyAuthority, xml_string) return saml2.create_class_from_xml_string(KeyAuthority, xml_string)
@@ -86,4 +86,3 @@ ELEMENT_BY_TAG = {
def factory(tag, **kwargs): def factory(tag, **kwargs):
return ELEMENT_BY_TAG[tag](**kwargs) return ELEMENT_BY_TAG[tag](**kwargs)

View File

@@ -11,6 +11,7 @@ from saml2 import md
NAMESPACE = 'urn:oasis:names:tc:SAML:metadata:ui' NAMESPACE = 'urn:oasis:names:tc:SAML:metadata:ui'
class DisplayName(md.LocalizedNameType_): class DisplayName(md.LocalizedNameType_):
"""The urn:oasis:names:tc:SAML:metadata:ui:DisplayName element """ """The urn:oasis:names:tc:SAML:metadata:ui:DisplayName element """
@@ -21,6 +22,7 @@ class DisplayName(md.LocalizedNameType_):
c_child_order = md.LocalizedNameType_.c_child_order[:] c_child_order = md.LocalizedNameType_.c_child_order[:]
c_cardinality = md.LocalizedNameType_.c_cardinality.copy() c_cardinality = md.LocalizedNameType_.c_cardinality.copy()
def display_name_from_string(xml_string): def display_name_from_string(xml_string):
return saml2.create_class_from_xml_string(DisplayName, xml_string) return saml2.create_class_from_xml_string(DisplayName, xml_string)
@@ -35,6 +37,7 @@ class Description(md.LocalizedNameType_):
c_child_order = md.LocalizedNameType_.c_child_order[:] c_child_order = md.LocalizedNameType_.c_child_order[:]
c_cardinality = md.LocalizedNameType_.c_cardinality.copy() c_cardinality = md.LocalizedNameType_.c_cardinality.copy()
def description_from_string(xml_string): def description_from_string(xml_string):
return saml2.create_class_from_xml_string(Description, xml_string) return saml2.create_class_from_xml_string(Description, xml_string)
@@ -49,6 +52,7 @@ class InformationURL(md.LocalizedURIType_):
c_child_order = md.LocalizedURIType_.c_child_order[:] c_child_order = md.LocalizedURIType_.c_child_order[:]
c_cardinality = md.LocalizedURIType_.c_cardinality.copy() c_cardinality = md.LocalizedURIType_.c_cardinality.copy()
def information_url_from_string(xml_string): def information_url_from_string(xml_string):
return saml2.create_class_from_xml_string(InformationURL, xml_string) return saml2.create_class_from_xml_string(InformationURL, xml_string)
@@ -63,6 +67,7 @@ class PrivacyStatementURL(md.LocalizedURIType_):
c_child_order = md.LocalizedURIType_.c_child_order[:] c_child_order = md.LocalizedURIType_.c_child_order[:]
c_cardinality = md.LocalizedURIType_.c_cardinality.copy() c_cardinality = md.LocalizedURIType_.c_cardinality.copy()
def privacy_statement_url_from_string(xml_string): def privacy_statement_url_from_string(xml_string):
return saml2.create_class_from_xml_string(PrivacyStatementURL, xml_string) return saml2.create_class_from_xml_string(PrivacyStatementURL, xml_string)
@@ -79,24 +84,24 @@ class LogoType_(SamlBase):
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
c_attributes['height'] = ('height', 'positiveInteger', True) c_attributes['height'] = ('height', 'positiveInteger', True)
c_attributes['width'] = ('width', 'positiveInteger', True) c_attributes['width'] = ('width', 'positiveInteger', True)
c_attributes['{http://www.w3.org/XML/1998/namespace}lang'] = ('lang', 'anyURI', False) c_attributes['{http://www.w3.org/XML/1998/namespace}lang'] = (
'lang', 'anyURI', False)
def __init__(self, def __init__(self,
height=None, height=None,
width=None, width=None,
lang=None, lang=None,
text=None, text=None,
extension_elements=None, extension_elements=None,
extension_attributes=None, extension_attributes=None):
):
SamlBase.__init__(self, SamlBase.__init__(self,
text=text, text=text,
extension_elements=extension_elements, extension_elements=extension_elements,
extension_attributes=extension_attributes, extension_attributes=extension_attributes)
) self.height = height
self.height=height self.width = width
self.width=width self.lang = lang
self.lang=lang
def logo_type__from_string(xml_string): def logo_type__from_string(xml_string):
return saml2.create_class_from_xml_string(LogoType_, xml_string) return saml2.create_class_from_xml_string(LogoType_, xml_string)
@@ -113,6 +118,7 @@ class IPHint(SamlBase):
c_child_order = SamlBase.c_child_order[:] c_child_order = SamlBase.c_child_order[:]
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
def ip_hint_from_string(xml_string): def ip_hint_from_string(xml_string):
return saml2.create_class_from_xml_string(IPHint, xml_string) return saml2.create_class_from_xml_string(IPHint, xml_string)
@@ -128,6 +134,7 @@ class DomainHint(SamlBase):
c_child_order = SamlBase.c_child_order[:] c_child_order = SamlBase.c_child_order[:]
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
def domain_hint_from_string(xml_string): def domain_hint_from_string(xml_string):
return saml2.create_class_from_xml_string(DomainHint, xml_string) return saml2.create_class_from_xml_string(DomainHint, xml_string)
@@ -143,6 +150,7 @@ class GeolocationHint(SamlBase):
c_child_order = SamlBase.c_child_order[:] c_child_order = SamlBase.c_child_order[:]
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
def geolocation_hint_from_string(xml_string): def geolocation_hint_from_string(xml_string):
return saml2.create_class_from_xml_string(GeolocationHint, xml_string) return saml2.create_class_from_xml_string(GeolocationHint, xml_string)
@@ -157,6 +165,7 @@ class Logo(LogoType_):
c_child_order = LogoType_.c_child_order[:] c_child_order = LogoType_.c_child_order[:]
c_cardinality = LogoType_.c_cardinality.copy() c_cardinality = LogoType_.c_cardinality.copy()
def logo_from_string(xml_string): def logo_from_string(xml_string):
return saml2.create_class_from_xml_string(Logo, xml_string) return saml2.create_class_from_xml_string(Logo, xml_string)
@@ -170,30 +179,32 @@ class DiscoHintsType_(SamlBase):
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_child_order = SamlBase.c_child_order[:] c_child_order = SamlBase.c_child_order[:]
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
c_children['{urn:oasis:names:tc:SAML:metadata:ui}IPHint'] = ('ip_hint', [IPHint]) c_children['{urn:oasis:names:tc:SAML:metadata:ui}IPHint'] = (
c_cardinality['ip_hint'] = {"min":0} 'ip_hint', [IPHint])
c_children['{urn:oasis:names:tc:SAML:metadata:ui}DomainHint'] = ('domain_hint', [DomainHint]) c_cardinality['ip_hint'] = {"min": 0}
c_cardinality['domain_hint'] = {"min":0} c_children['{urn:oasis:names:tc:SAML:metadata:ui}DomainHint'] = (
c_children['{urn:oasis:names:tc:SAML:metadata:ui}GeolocationHint'] = ('geolocation_hint', [GeolocationHint]) 'domain_hint', [DomainHint])
c_cardinality['geolocation_hint'] = {"min":0} c_cardinality['domain_hint'] = {"min": 0}
c_children['{urn:oasis:names:tc:SAML:metadata:ui}GeolocationHint'] = (
'geolocation_hint', [GeolocationHint])
c_cardinality['geolocation_hint'] = {"min": 0}
c_child_order.extend(['ip_hint', 'domain_hint', 'geolocation_hint']) c_child_order.extend(['ip_hint', 'domain_hint', 'geolocation_hint'])
def __init__(self, def __init__(self,
ip_hint=None, ip_hint=None,
domain_hint=None, domain_hint=None,
geolocation_hint=None, geolocation_hint=None,
text=None, text=None,
extension_elements=None, extension_elements=None,
extension_attributes=None, extension_attributes=None):
):
SamlBase.__init__(self, SamlBase.__init__(self,
text=text, text=text,
extension_elements=extension_elements, extension_elements=extension_elements,
extension_attributes=extension_attributes, extension_attributes=extension_attributes)
) self.ip_hint = ip_hint or []
self.ip_hint=ip_hint or [] self.domain_hint = domain_hint or []
self.domain_hint=domain_hint or [] self.geolocation_hint = geolocation_hint or []
self.geolocation_hint=geolocation_hint or []
def disco_hints_type__from_string(xml_string): def disco_hints_type__from_string(xml_string):
return saml2.create_class_from_xml_string(DiscoHintsType_, xml_string) return saml2.create_class_from_xml_string(DiscoHintsType_, xml_string)
@@ -208,38 +219,43 @@ class UIInfoType_(SamlBase):
c_attributes = SamlBase.c_attributes.copy() c_attributes = SamlBase.c_attributes.copy()
c_child_order = SamlBase.c_child_order[:] c_child_order = SamlBase.c_child_order[:]
c_cardinality = SamlBase.c_cardinality.copy() c_cardinality = SamlBase.c_cardinality.copy()
c_children['{urn:oasis:names:tc:SAML:metadata:ui}DisplayName'] = ('display_name', [DisplayName]) c_children['{urn:oasis:names:tc:SAML:metadata:ui}DisplayName'] = (
c_cardinality['display_name'] = {"min":0} 'display_name', [DisplayName])
c_children['{urn:oasis:names:tc:SAML:metadata:ui}Description'] = ('description', [Description]) c_cardinality['display_name'] = {"min": 0}
c_cardinality['description'] = {"min":0} c_children['{urn:oasis:names:tc:SAML:metadata:ui}Description'] = (
'description', [Description])
c_cardinality['description'] = {"min": 0}
c_children['{urn:oasis:names:tc:SAML:metadata:ui}Logo'] = ('logo', [Logo]) c_children['{urn:oasis:names:tc:SAML:metadata:ui}Logo'] = ('logo', [Logo])
c_cardinality['logo'] = {"min":0} c_cardinality['logo'] = {"min": 0}
c_children['{urn:oasis:names:tc:SAML:metadata:ui}InformationURL'] = ('information_url', [InformationURL]) c_children['{urn:oasis:names:tc:SAML:metadata:ui}InformationURL'] = (
c_cardinality['information_url'] = {"min":0} 'information_url', [InformationURL])
c_children['{urn:oasis:names:tc:SAML:metadata:ui}PrivacyStatementURL'] = ('privacy_statement_url', [PrivacyStatementURL]) c_cardinality['information_url'] = {"min": 0}
c_cardinality['privacy_statement_url'] = {"min":0} c_children['{urn:oasis:names:tc:SAML:metadata:ui}PrivacyStatementURL'] = (
c_child_order.extend(['display_name', 'description', 'logo', 'information_url', 'privacy_statement_url']) 'privacy_statement_url', [PrivacyStatementURL])
c_cardinality['privacy_statement_url'] = {"min": 0}
c_child_order.extend(
['display_name', 'description', 'logo', 'information_url',
'privacy_statement_url'])
def __init__(self, def __init__(self,
display_name=None, display_name=None,
description=None, description=None,
logo=None, logo=None,
information_url=None, information_url=None,
privacy_statement_url=None, privacy_statement_url=None,
text=None, text=None,
extension_elements=None, extension_elements=None,
extension_attributes=None, extension_attributes=None):
):
SamlBase.__init__(self, SamlBase.__init__(self,
text=text, text=text,
extension_elements=extension_elements, extension_elements=extension_elements,
extension_attributes=extension_attributes, extension_attributes=extension_attributes)
) self.display_name = display_name or []
self.display_name=display_name or [] self.description = description or []
self.description=description or [] self.logo = logo or []
self.logo=logo or [] self.information_url = information_url or []
self.information_url=information_url or [] self.privacy_statement_url = privacy_statement_url or []
self.privacy_statement_url=privacy_statement_url or []
def ui_info_type__from_string(xml_string): def ui_info_type__from_string(xml_string):
return saml2.create_class_from_xml_string(UIInfoType_, xml_string) return saml2.create_class_from_xml_string(UIInfoType_, xml_string)
@@ -255,6 +271,7 @@ class DiscoHints(DiscoHintsType_):
c_child_order = DiscoHintsType_.c_child_order[:] c_child_order = DiscoHintsType_.c_child_order[:]
c_cardinality = DiscoHintsType_.c_cardinality.copy() c_cardinality = DiscoHintsType_.c_cardinality.copy()
def disco_hints_from_string(xml_string): def disco_hints_from_string(xml_string):
return saml2.create_class_from_xml_string(DiscoHints, xml_string) return saml2.create_class_from_xml_string(DiscoHints, xml_string)
@@ -269,6 +286,7 @@ class UIInfo(UIInfoType_):
c_child_order = UIInfoType_.c_child_order[:] c_child_order = UIInfoType_.c_child_order[:]
c_cardinality = UIInfoType_.c_cardinality.copy() c_cardinality = UIInfoType_.c_cardinality.copy()
def ui_info_from_string(xml_string): def ui_info_from_string(xml_string):
return saml2.create_class_from_xml_string(UIInfo, xml_string) return saml2.create_class_from_xml_string(UIInfo, xml_string)

22
tests/enc_tmpl.xml Normal file
View File

@@ -0,0 +1,22 @@
<?xml version='1.0' encoding='UTF-8'?>
<ns0:EncryptedData xmlns:ns0="http://www.w3.org/2001/04/xmlenc#"
xmlns:ns1="http://www.w3.org/2000/09/xmldsig#" Id="ED"
Type="http://www.w3.org/2001/04/xmlenc#Element">
<ns0:EncryptionMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<ns1:KeyInfo>
<ns0:EncryptedKey Id="EK">
<ns0:EncryptionMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
<ns1:KeyInfo>
<ns1:KeyName>my-rsa-key</ns1:KeyName>
</ns1:KeyInfo>
<ns0:CipherData>
<ns0:CipherValue/>
</ns0:CipherData>
</ns0:EncryptedKey>
</ns1:KeyInfo>
<ns0:CipherData>
<ns0:CipherValue/>
</ns0:CipherData>
</ns0:EncryptedData>

99
tests/test_42_enc.py Normal file
View File

@@ -0,0 +1,99 @@
from saml2.authn_context import INTERNETPROTOCOLPASSWORD
from saml2.server import Server
from saml2.sigver import pre_encryption_part, ASSERT_XPATH, EncryptError
from saml2.sigver import CryptoBackendXmlSec1
from saml2.sigver import pre_encrypt_assertion
from pathutils import xmlsec_path
__author__ = 'roland'
TMPL = """<?xml version='1.0' encoding='UTF-8'?>
<ns0:EncryptedData xmlns:ns0="http://www.w3.org/2001/04/xmlenc#" xmlns:ns1="http://www.w3.org/2000/09/xmldsig#" Id="ED" Type="http://www.w3.org/2001/04/xmlenc#Element"><ns0:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" /><ns1:KeyInfo><ns0:EncryptedKey Id="EK"><ns0:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" /><ns1:KeyInfo><ns1:KeyName>my-rsa-key</ns1:KeyName></ns1:KeyInfo><ns0:CipherData><ns0:CipherValue /></ns0:CipherData></ns0:EncryptedKey></ns1:KeyInfo><ns0:CipherData><ns0:CipherValue /></ns0:CipherData></ns0:EncryptedData>"""
IDENTITY = {"eduPersonAffiliation": ["staff", "member"],
"surName": ["Jeter"], "givenName": ["Derek"],
"mail": ["foo@gmail.com"],
"title": ["shortstop"]}
AUTHN = {
"class_ref": INTERNETPROTOCOLPASSWORD,
"authn_auth": "http://www.example.com/login"
}
def test_pre_enc():
tmpl = pre_encryption_part()
print tmpl
assert "%s" % tmpl == TMPL
def test_reshuffle_response():
server = Server("idp_conf")
name_id = server.ident.transient_nameid(
"urn:mace:example.com:saml:roland:sp", "id12")
resp_ = server.create_authn_response(
IDENTITY, "id12", "http://lingon.catalogix.se:8087/",
"urn:mace:example.com:saml:roland:sp", name_id=name_id)
resp2 = pre_encrypt_assertion(resp_)
print resp2
assert resp2.encrypted_assertion.extension_elements
def test_enc1():
server = Server("idp_conf")
name_id = server.ident.transient_nameid(
"urn:mace:example.com:saml:roland:sp", "id12")
resp_ = server.create_authn_response(
IDENTITY, "id12", "http://lingon.catalogix.se:8087/",
"urn:mace:example.com:saml:roland:sp", name_id=name_id)
statement = pre_encrypt_assertion(resp_)
tmpl = "enc_tmpl.xml"
# tmpl_file = open(tmpl, "w")
# tmpl_file.write("%s" % pre_encryption_part())
# tmpl_file.close()
data = "pre_enc.xml"
# data_file = open(data, "w")
# data_file.write("%s" % statement)
# data_file.close()
key_type = "des-192"
com_list = [xmlsec_path, "encrypt", "--pubkey-cert-pem", "pubkey.pem",
"--session-key", key_type, "--xml-data", data,
"--node-xpath", ASSERT_XPATH]
crypto = CryptoBackendXmlSec1(xmlsec_path)
(_stdout, _stderr, output) = crypto._run_xmlsec(
com_list, [tmpl], exception=EncryptError, validate_output=False)
print output
assert _stderr == ""
assert _stdout == ""
def test_enc2():
crypto = CryptoBackendXmlSec1(xmlsec_path)
server = Server("idp_conf")
name_id = server.ident.transient_nameid(
"urn:mace:example.com:saml:roland:sp", "id12")
resp_ = server.create_authn_response(
IDENTITY, "id12", "http://lingon.catalogix.se:8087/",
"urn:mace:example.com:saml:roland:sp", name_id=name_id)
enc_resp = crypto.encrypt_assertion(resp_, "pubkey.pem",
pre_encryption_part())
print enc_resp
assert enc_resp
if __name__ == "__main__":
test_enc1()

View File

@@ -2,7 +2,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from saml2.authn_context import INTERNETPROTOCOLPASSWORD from saml2.authn_context import INTERNETPROTOCOLPASSWORD
from saml2 import saml
from saml2.server import Server from saml2.server import Server
from saml2.response import authn_response from saml2.response import authn_response
from saml2.config import config_factory from saml2.config import config_factory

View File

@@ -4,7 +4,8 @@ Testing CryptoBackendXMLSecurity with SoftHSM as backend
# Command to convert test.pem to PKCS#8 PEM format readable by softhsm : # Command to convert test.pem to PKCS#8 PEM format readable by softhsm :
# #
# openssl pkcs8 -topk8 -inform PEM -outform PEM -in test.key -out test.key.p8 -nocrypt # openssl pkcs8 -topk8 -inform PEM -outform PEM -in test.key -out test.key.p8
# -nocrypt
# #
__author__ = 'leifj' # based on p11_test from pyXMLSecurity __author__ = 'leifj' # based on p11_test from pyXMLSecurity

View File

@@ -0,0 +1,14 @@
from saml2.config import Config
from saml2.metadata import entity_descriptor
__author__ = 'roland'
fil = "sp_mdext_conf.py"
cnf = Config().load_file(fil, metadata_construction=True)
ed = entity_descriptor(cnf)
print ed
assert ed.spsso_descriptor.extensions
assert len(ed.spsso_descriptor.extensions.extension_elements) == 3