#!/usr/bin/env python

#
# Generated Mon May  2 14:23:33 2011 by parse_xsd.py version 0.4.
#

import saml2
from saml2 import SamlBase

NAMESPACE = 'http://www.w3.org/2000/09/xmldsig#'

ENCODING_BASE64 = 'http://www.w3.org/2000/09/xmldsig#base64'

# digest and signature algorithms (not implemented = commented out)
DIGEST_MD5 = 'http://www.w3.org/2001/04/xmldsig-more#md5'  # test framework
# only!
DIGEST_SHA1 = 'http://www.w3.org/2000/09/xmldsig#sha1'
DIGEST_SHA224 = 'http://www.w3.org/2001/04/xmldsig-more#sha224'
DIGEST_SHA256 = 'http://www.w3.org/2001/04/xmlenc#sha256'
DIGEST_SHA384 = 'http://www.w3.org/2001/04/xmldsig-more#sha384'
DIGEST_SHA512 = 'http://www.w3.org/2001/04/xmlenc#sha512'
DIGEST_RIPEMD160 = 'http://www.w3.org/2001/04/xmlenc#ripemd160'
digest_default = DIGEST_SHA1
DIGEST_ALLOWED_ALG = (('DIGEST_SHA1', DIGEST_SHA1),
                      ('DIGEST_SHA224', DIGEST_SHA224),
                      ('DIGEST_SHA256', DIGEST_SHA256),
                      ('DIGEST_SHA384', DIGEST_SHA384),
                      ('DIGEST_SHA512', DIGEST_SHA512),
                      ('DIGEST_RIPEMD160', DIGEST_RIPEMD160))
DIGEST_AVAIL_ALG = DIGEST_ALLOWED_ALG + (('DIGEST_MD5', DIGEST_MD5),)

SIG_DSA_SHA1 = 'http://www.w3.org/2000/09/xmldsig#dsa-sha1'
SIG_DSA_SHA256 = 'http://www.w3.org/2009/xmldsig11#dsa-sha256'
SIG_ECDSA_SHA1 = 'http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1'
SIG_ECDSA_SHA224 = 'http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha224'
SIG_ECDSA_SHA256 = 'http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256'
SIG_ECDSA_SHA384 = 'http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha384'
SIG_ECDSA_SHA512 = 'http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha512'
SIG_RSA_MD5 = 'http://www.w3.org/2001/04/xmldsig-more#rsa-md5'  # test framework
SIG_RSA_SHA1 = 'http://www.w3.org/2000/09/xmldsig#rsa-sha1'
SIG_RSA_SHA224 = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha224'
SIG_RSA_SHA256 = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256'
SIG_RSA_SHA384 = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha384'
SIG_RSA_SHA512 = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha512'
SIG_RSA_RIPEMD160 = 'http://www.w3.org/2001/04/xmldsig-more#rsa-ripemd160'
sig_default = SIG_RSA_SHA1
SIG_ALLOWED_ALG = (('SIG_RSA_SHA1', SIG_RSA_SHA1),
                   ('SIG_RSA_SHA224', SIG_RSA_SHA224),
                   ('SIG_RSA_SHA256', SIG_RSA_SHA256),
                   ('SIG_RSA_SHA384', SIG_RSA_SHA384),
                   ('SIG_RSA_SHA512', SIG_RSA_SHA512))
SIG_AVAIL_ALG = SIG_ALLOWED_ALG + (('SIG_RSA_MD5', SIG_RSA_MD5),)

MAC_SHA1 = 'http://www.w3.org/2000/09/xmldsig#hmac-sha1'

TRANSFORM_XSLT = 'http://www.w3.org/TR/1999/REC-xslt-19991116'
TRANSFORM_XPATH = 'http://www.w3.org/TR/1999/REC-xpath-19991116'
TRANSFORM_ENVELOPED = 'http://www.w3.org/2000/09/xmldsig#enveloped-signature'
TRANSFORM_C14N = 'http://www.w3.org/2001/10/xml-exc-c14n#'
TRANSFORM_C14N_WITH_COMMENTS = 'http://www.w3.org/2001/10/xml-exc-c14n#WithComments'

ALLOWED_CANONICALIZATIONS = {
    TRANSFORM_C14N,
    TRANSFORM_C14N_WITH_COMMENTS,
}
ALLOWED_TRANSFORMS = {
    TRANSFORM_ENVELOPED,
    TRANSFORM_C14N,
    TRANSFORM_C14N_WITH_COMMENTS,
}

class DefaultSignature(object):
    class _DefaultSignature(object):
        def __init__(self, sign_alg=None, digest_alg=None):
            if sign_alg is None:
                self.sign_alg = sig_default
            else:
                self.sign_alg = sign_alg
            if digest_alg is None:
                self.digest_alg = digest_default
            else:
                self.digest_alg = digest_alg

        def __str__(self):
            return repr(self) + self.sign_alg
    instance = None

    def __init__(self, sign_alg=None, digest_alg=None):
        if not DefaultSignature.instance:
            DefaultSignature.instance = DefaultSignature._DefaultSignature(sign_alg, digest_alg)

    def __getattr__(self, name):
        return getattr(self.instance, name)

    def get_sign_alg(self):
        return self.sign_alg

    def get_digest_alg(self):
        return self.digest_alg


class CryptoBinary_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:CryptoBinary element """

    c_tag = 'CryptoBinary'
    c_namespace = NAMESPACE
    c_value_type = {'base': 'base64Binary'}
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()


def crypto_binary__from_string(xml_string):
    return saml2.create_class_from_xml_string(CryptoBinary_, xml_string)


class SignatureValueType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:SignatureValueType element """

    c_tag = 'SignatureValueType'
    c_namespace = NAMESPACE
    c_value_type = {'base': 'base64Binary'}
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_attributes['Id'] = ('id', 'ID', False)

    def __init__(self,
                 id=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.id = id


def signature_value_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(SignatureValueType_, xml_string)


class CanonicalizationMethodType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:CanonicalizationMethodType
    element """

    c_tag = 'CanonicalizationMethodType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_attributes['Algorithm'] = ('algorithm', 'anyURI', True)

    def __init__(self,
                 algorithm=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.algorithm = algorithm


def canonicalization_method_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(CanonicalizationMethodType_,
                                              xml_string)


class TransformType_XPath(SamlBase):
    c_tag = 'XPath'
    c_namespace = NAMESPACE
    c_value_type = {'base': 'string'}
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()


def transform_type__x_path_from_string(xml_string):
    return saml2.create_class_from_xml_string(TransformType_XPath, xml_string)


class TransformType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:TransformType element """

    c_tag = 'TransformType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}XPath'] = (
        'x_path', [TransformType_XPath])
    c_cardinality['x_path'] = {"min": 0}
    c_attributes['Algorithm'] = ('algorithm', 'anyURI', True)
    c_child_order.extend(['x_path'])

    def __init__(self,
                 x_path=None,
                 algorithm=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.x_path = x_path or []
        self.algorithm = algorithm


def transform_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(TransformType_, xml_string)


class DigestMethodType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:DigestMethodType element """

    c_tag = 'DigestMethodType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_attributes['Algorithm'] = ('algorithm', 'anyURI', True)

    def __init__(self,
                 algorithm=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.algorithm = algorithm


def digest_method_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(DigestMethodType_, xml_string)


class DigestValueType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:DigestValueType element """

    c_tag = 'DigestValueType'
    c_namespace = NAMESPACE
    c_value_type = {'base': 'base64Binary'}
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()


def digest_value_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(DigestValueType_, xml_string)


class KeyName(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:KeyName element """

    c_tag = 'KeyName'
    c_namespace = NAMESPACE
    c_value_type = {'base': 'string'}
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()


def key_name_from_string(xml_string):
    return saml2.create_class_from_xml_string(KeyName, xml_string)


class MgmtData(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:MgmtData element """

    c_tag = 'MgmtData'
    c_namespace = NAMESPACE
    c_value_type = {'base': 'string'}
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()


def mgmt_data_from_string(xml_string):
    return saml2.create_class_from_xml_string(MgmtData, xml_string)


class X509IssuerName(SamlBase):
    c_tag = 'X509IssuerName'
    c_namespace = NAMESPACE
    c_value_type = {'base': 'string'}
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()


def x509_issuer_name_from_string(xml_string):
    return saml2.create_class_from_xml_string(X509IssuerName, xml_string)


class X509SerialNumber(SamlBase):
    c_tag = 'X509SerialNumber'
    c_namespace = NAMESPACE
    c_value_type = {'base': 'integer'}
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()


def x509_serial_number_from_string(xml_string):
    return saml2.create_class_from_xml_string(X509SerialNumber, xml_string)


class X509IssuerSerialType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:X509IssuerSerialType element """

    c_tag = 'X509IssuerSerialType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}X509IssuerName'] = (
        'x509_issuer_name', X509IssuerName)
    c_children['{http://www.w3.org/2000/09/xmldsig#}X509SerialNumber'] = (
        'x509_serial_number', X509SerialNumber)
    c_child_order.extend(['x509_issuer_name', 'x509_serial_number'])

    def __init__(self,
                 x509_issuer_name=None,
                 x509_serial_number=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.x509_issuer_name = x509_issuer_name
        self.x509_serial_number = x509_serial_number


def x509_issuer_serial_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(X509IssuerSerialType_, xml_string)


class PGPKeyID(SamlBase):
    c_tag = 'PGPKeyID'
    c_namespace = NAMESPACE
    c_value_type = {'base': 'base64Binary'}
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()


def pgp_key_id_from_string(xml_string):
    return saml2.create_class_from_xml_string(PGPKeyID, xml_string)


class PGPKeyPacket(SamlBase):
    c_tag = 'PGPKeyPacket'
    c_namespace = NAMESPACE
    c_value_type = {'base': 'base64Binary'}
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()


def pgp_key_packet_from_string(xml_string):
    return saml2.create_class_from_xml_string(PGPKeyPacket, xml_string)


class PGPDataType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:PGPDataType element """

    c_tag = 'PGPDataType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}PGPKeyID'] = (
        'pgp_key_id', PGPKeyID)
    c_children['{http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket'] = (
        'pgp_key_packet', PGPKeyPacket)
    c_cardinality['pgp_key_packet'] = {"min": 0, "max": 1}
    c_child_order.extend(['pgp_key_id', 'pgp_key_packet'])

    def __init__(self,
                 pgp_key_id=None,
                 pgp_key_packet=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.pgp_key_id = pgp_key_id
        self.pgp_key_packet = pgp_key_packet


def pgp_data_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(PGPDataType_, xml_string)


class SPKISexp(SamlBase):
    c_tag = 'SPKISexp'
    c_namespace = NAMESPACE
    c_value_type = {'base': 'base64Binary'}
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()


def spki_sexp_from_string(xml_string):
    return saml2.create_class_from_xml_string(SPKISexp, xml_string)


class SPKIDataType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:SPKIDataType element """

    c_tag = 'SPKIDataType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}SPKISexp'] = ('spki_sexp',
                                                                  [SPKISexp])
    c_cardinality['spki_sexp'] = {"min": 1}
    c_child_order.extend(['spki_sexp'])

    def __init__(self,
                 spki_sexp=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.spki_sexp = spki_sexp or []


def spki_data_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(SPKIDataType_, xml_string)


class ObjectType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:ObjectType element """

    c_tag = 'ObjectType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_attributes['Id'] = ('id', 'ID', False)
    c_attributes['MimeType'] = ('mime_type', 'string', False)
    c_attributes['Encoding'] = ('encoding', 'anyURI', False)

    def __init__(self,
                 id=None,
                 mime_type=None,
                 encoding=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.id = id
        self.mime_type = mime_type
        self.encoding = encoding


def object_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(ObjectType_, xml_string)


class SignaturePropertyType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:SignaturePropertyType element """

    c_tag = 'SignaturePropertyType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_attributes['Target'] = ('target', 'anyURI', True)
    c_attributes['Id'] = ('id', 'ID', False)

    def __init__(self,
                 target=None,
                 id=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.target = target
        self.id = id


def signature_property_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(SignaturePropertyType_,
                                              xml_string)


class HMACOutputLengthType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:HMACOutputLengthType element """

    c_tag = 'HMACOutputLengthType'
    c_namespace = NAMESPACE
    c_value_type = {'base': 'integer'}
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()


def hmac_output_length_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(HMACOutputLengthType_, xml_string)


class P(CryptoBinary_):
    c_tag = 'P'
    c_namespace = NAMESPACE
    c_children = CryptoBinary_.c_children.copy()
    c_attributes = CryptoBinary_.c_attributes.copy()
    c_child_order = CryptoBinary_.c_child_order[:]
    c_cardinality = CryptoBinary_.c_cardinality.copy()


def p_from_string(xml_string):
    return saml2.create_class_from_xml_string(P, xml_string)


class Q(CryptoBinary_):
    c_tag = 'Q'
    c_namespace = NAMESPACE
    c_children = CryptoBinary_.c_children.copy()
    c_attributes = CryptoBinary_.c_attributes.copy()
    c_child_order = CryptoBinary_.c_child_order[:]
    c_cardinality = CryptoBinary_.c_cardinality.copy()


def q_from_string(xml_string):
    return saml2.create_class_from_xml_string(Q, xml_string)


class G(CryptoBinary_):
    c_tag = 'G'
    c_namespace = NAMESPACE
    c_children = CryptoBinary_.c_children.copy()
    c_attributes = CryptoBinary_.c_attributes.copy()
    c_child_order = CryptoBinary_.c_child_order[:]
    c_cardinality = CryptoBinary_.c_cardinality.copy()


def g_from_string(xml_string):
    return saml2.create_class_from_xml_string(G, xml_string)


class Y(CryptoBinary_):
    c_tag = 'Y'
    c_namespace = NAMESPACE
    c_children = CryptoBinary_.c_children.copy()
    c_attributes = CryptoBinary_.c_attributes.copy()
    c_child_order = CryptoBinary_.c_child_order[:]
    c_cardinality = CryptoBinary_.c_cardinality.copy()


def y_from_string(xml_string):
    return saml2.create_class_from_xml_string(Y, xml_string)


class J(CryptoBinary_):
    c_tag = 'J'
    c_namespace = NAMESPACE
    c_children = CryptoBinary_.c_children.copy()
    c_attributes = CryptoBinary_.c_attributes.copy()
    c_child_order = CryptoBinary_.c_child_order[:]
    c_cardinality = CryptoBinary_.c_cardinality.copy()


def j_from_string(xml_string):
    return saml2.create_class_from_xml_string(J, xml_string)


class Seed(CryptoBinary_):
    c_tag = 'Seed'
    c_namespace = NAMESPACE
    c_children = CryptoBinary_.c_children.copy()
    c_attributes = CryptoBinary_.c_attributes.copy()
    c_child_order = CryptoBinary_.c_child_order[:]
    c_cardinality = CryptoBinary_.c_cardinality.copy()


def seed_from_string(xml_string):
    return saml2.create_class_from_xml_string(Seed, xml_string)


class PgenCounter(CryptoBinary_):
    c_tag = 'PgenCounter'
    c_namespace = NAMESPACE
    c_children = CryptoBinary_.c_children.copy()
    c_attributes = CryptoBinary_.c_attributes.copy()
    c_child_order = CryptoBinary_.c_child_order[:]
    c_cardinality = CryptoBinary_.c_cardinality.copy()


def pgen_counter_from_string(xml_string):
    return saml2.create_class_from_xml_string(PgenCounter, xml_string)


class DSAKeyValueType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:DSAKeyValueType element """

    c_tag = 'DSAKeyValueType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}P'] = ('p', P)
    c_cardinality['p'] = {"min": 0, "max": 1}
    c_children['{http://www.w3.org/2000/09/xmldsig#}Q'] = ('q', Q)
    c_cardinality['q'] = {"min": 0, "max": 1}
    c_children['{http://www.w3.org/2000/09/xmldsig#}G'] = ('g', G)
    c_cardinality['g'] = {"min": 0, "max": 1}
    c_children['{http://www.w3.org/2000/09/xmldsig#}Y'] = ('y', Y)
    c_children['{http://www.w3.org/2000/09/xmldsig#}J'] = ('j', J)
    c_cardinality['j'] = {"min": 0, "max": 1}
    c_children['{http://www.w3.org/2000/09/xmldsig#}Seed'] = ('seed', Seed)
    c_cardinality['seed'] = {"min": 0, "max": 1}
    c_children['{http://www.w3.org/2000/09/xmldsig#}PgenCounter'] = (
        'pgen_counter', PgenCounter)
    c_cardinality['pgen_counter'] = {"min": 0, "max": 1}
    c_child_order.extend(['p', 'q', 'g', 'y', 'j', 'seed', 'pgen_counter'])

    def __init__(self,
                 p=None,
                 q=None,
                 g=None,
                 y=None,
                 j=None,
                 seed=None,
                 pgen_counter=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.p = p
        self.q = q
        self.g = g
        self.y = y
        self.j = j
        self.seed = seed
        self.pgen_counter = pgen_counter


def dsa_key_value_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(DSAKeyValueType_, xml_string)


class Modulus(CryptoBinary_):
    c_tag = 'Modulus'
    c_namespace = NAMESPACE
    c_children = CryptoBinary_.c_children.copy()
    c_attributes = CryptoBinary_.c_attributes.copy()
    c_child_order = CryptoBinary_.c_child_order[:]
    c_cardinality = CryptoBinary_.c_cardinality.copy()


def modulus_from_string(xml_string):
    return saml2.create_class_from_xml_string(Modulus, xml_string)


class Exponent(CryptoBinary_):
    c_tag = 'Exponent'
    c_namespace = NAMESPACE
    c_children = CryptoBinary_.c_children.copy()
    c_attributes = CryptoBinary_.c_attributes.copy()
    c_child_order = CryptoBinary_.c_child_order[:]
    c_cardinality = CryptoBinary_.c_cardinality.copy()


def exponent_from_string(xml_string):
    return saml2.create_class_from_xml_string(Exponent, xml_string)


class RSAKeyValueType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:RSAKeyValueType element """

    c_tag = 'RSAKeyValueType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}Modulus'] = ('modulus',
                                                                 Modulus)
    c_children['{http://www.w3.org/2000/09/xmldsig#}Exponent'] = ('exponent',
                                                                  Exponent)
    c_child_order.extend(['modulus', 'exponent'])

    def __init__(self,
                 modulus=None,
                 exponent=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.modulus = modulus
        self.exponent = exponent


def rsa_key_value_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(RSAKeyValueType_, xml_string)


class SignatureValue(SignatureValueType_):
    """The http://www.w3.org/2000/09/xmldsig#:SignatureValue element """

    c_tag = 'SignatureValue'
    c_namespace = NAMESPACE
    c_children = SignatureValueType_.c_children.copy()
    c_attributes = SignatureValueType_.c_attributes.copy()
    c_child_order = SignatureValueType_.c_child_order[:]
    c_cardinality = SignatureValueType_.c_cardinality.copy()


def signature_value_from_string(xml_string):
    return saml2.create_class_from_xml_string(SignatureValue, xml_string)


class CanonicalizationMethod(CanonicalizationMethodType_):
    """The http://www.w3.org/2000/09/xmldsig#:CanonicalizationMethod element """

    c_tag = 'CanonicalizationMethod'
    c_namespace = NAMESPACE
    c_children = CanonicalizationMethodType_.c_children.copy()
    c_attributes = CanonicalizationMethodType_.c_attributes.copy()
    c_child_order = CanonicalizationMethodType_.c_child_order[:]
    c_cardinality = CanonicalizationMethodType_.c_cardinality.copy()


def canonicalization_method_from_string(xml_string):
    return saml2.create_class_from_xml_string(CanonicalizationMethod,
                                              xml_string)


class HMACOutputLength(HMACOutputLengthType_):
    c_tag = 'HMACOutputLength'
    c_namespace = NAMESPACE
    c_children = HMACOutputLengthType_.c_children.copy()
    c_attributes = HMACOutputLengthType_.c_attributes.copy()
    c_child_order = HMACOutputLengthType_.c_child_order[:]
    c_cardinality = HMACOutputLengthType_.c_cardinality.copy()


def hmac_output_length_from_string(xml_string):
    return saml2.create_class_from_xml_string(HMACOutputLength, xml_string)


class SignatureMethodType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:SignatureMethodType element """

    c_tag = 'SignatureMethodType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}HMACOutputLength'] = (
        'hmac_output_length', HMACOutputLength)
    c_cardinality['hmac_output_length'] = {"min": 0, "max": 1}
    c_attributes['Algorithm'] = ('algorithm', 'anyURI', True)
    c_child_order.extend(['hmac_output_length'])

    def __init__(self,
                 hmac_output_length=None,
                 algorithm=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.hmac_output_length = hmac_output_length
        self.algorithm = algorithm


def signature_method_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(SignatureMethodType_, xml_string)


class Transform(TransformType_):
    """The http://www.w3.org/2000/09/xmldsig#:Transform element """

    c_tag = 'Transform'
    c_namespace = NAMESPACE
    c_children = TransformType_.c_children.copy()
    c_attributes = TransformType_.c_attributes.copy()
    c_child_order = TransformType_.c_child_order[:]
    c_cardinality = TransformType_.c_cardinality.copy()


def transform_from_string(xml_string):
    return saml2.create_class_from_xml_string(Transform, xml_string)


class DigestMethod(DigestMethodType_):
    """The http://www.w3.org/2000/09/xmldsig#:DigestMethod element """

    c_tag = 'DigestMethod'
    c_namespace = NAMESPACE
    c_children = DigestMethodType_.c_children.copy()
    c_attributes = DigestMethodType_.c_attributes.copy()
    c_child_order = DigestMethodType_.c_child_order[:]
    c_cardinality = DigestMethodType_.c_cardinality.copy()


def digest_method_from_string(xml_string):
    return saml2.create_class_from_xml_string(DigestMethod, xml_string)


class DigestValue(DigestValueType_):
    """The http://www.w3.org/2000/09/xmldsig#:DigestValue element """

    c_tag = 'DigestValue'
    c_namespace = NAMESPACE
    c_children = DigestValueType_.c_children.copy()
    c_attributes = DigestValueType_.c_attributes.copy()
    c_child_order = DigestValueType_.c_child_order[:]
    c_cardinality = DigestValueType_.c_cardinality.copy()


def digest_value_from_string(xml_string):
    return saml2.create_class_from_xml_string(DigestValue, xml_string)


class X509IssuerSerial(X509IssuerSerialType_):
    c_tag = 'X509IssuerSerial'
    c_namespace = NAMESPACE
    c_children = X509IssuerSerialType_.c_children.copy()
    c_attributes = X509IssuerSerialType_.c_attributes.copy()
    c_child_order = X509IssuerSerialType_.c_child_order[:]
    c_cardinality = X509IssuerSerialType_.c_cardinality.copy()


def x509_issuer_serial_from_string(xml_string):
    return saml2.create_class_from_xml_string(X509IssuerSerial, xml_string)


class X509SKI(SamlBase):
    c_tag = 'X509SKI'
    c_namespace = NAMESPACE
    c_value_type = {'base': 'base64Binary'}
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()


def x509_ski_from_string(xml_string):
    return saml2.create_class_from_xml_string(X509SKI, xml_string)


class X509SubjectName(SamlBase):
    c_tag = 'X509SubjectName'
    c_namespace = NAMESPACE
    c_value_type = {'base': 'string'}
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()


def x509_subject_name_from_string(xml_string):
    return saml2.create_class_from_xml_string(X509SubjectName, xml_string)


class X509Certificate(SamlBase):
    c_tag = 'X509Certificate'
    c_namespace = NAMESPACE
    c_value_type = {'base': 'base64Binary'}
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()


def x509_certificate_from_string(xml_string):
    return saml2.create_class_from_xml_string(X509Certificate, xml_string)


class X509CRL(SamlBase):
    c_tag = 'X509CRL'
    c_namespace = NAMESPACE
    c_value_type = {'base': 'base64Binary'}
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()


def x509_crl_from_string(xml_string):
    return saml2.create_class_from_xml_string(X509CRL, xml_string)


class X509DataType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:X509DataType element """

    c_tag = 'X509DataType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial'] = (
        'x509_issuer_serial',
        X509IssuerSerial)
    c_cardinality['x509_issuer_serial'] = {"min": 0, "max": 1}
    c_children['{http://www.w3.org/2000/09/xmldsig#}X509SKI'] = ('x509_ski',
                                                                 X509SKI)
    c_cardinality['x509_ski'] = {"min": 0, "max": 1}
    c_children['{http://www.w3.org/2000/09/xmldsig#}X509SubjectName'] = (
        'x509_subject_name',
        X509SubjectName)
    c_cardinality['x509_subject_name'] = {"min": 0, "max": 1}
    c_children['{http://www.w3.org/2000/09/xmldsig#}X509Certificate'] = (
        'x509_certificate',
        X509Certificate)
    c_cardinality['x509_certificate'] = {"min": 0, "max": 1}
    c_children['{http://www.w3.org/2000/09/xmldsig#}X509CRL'] = ('x509_crl',
                                                                 X509CRL)
    c_cardinality['x509_crl'] = {"min": 0, "max": 1}
    c_child_order.extend(['x509_issuer_serial', 'x509_ski', 'x509_subject_name',
                          'x509_certificate', 'x509_crl'])

    def __init__(self,
                 x509_issuer_serial=None,
                 x509_ski=None,
                 x509_subject_name=None,
                 x509_certificate=None,
                 x509_crl=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.x509_issuer_serial = x509_issuer_serial
        self.x509_ski = x509_ski
        self.x509_subject_name = x509_subject_name
        self.x509_certificate = x509_certificate
        self.x509_crl = x509_crl


def x509_data_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(X509DataType_, xml_string)


class PGPData(PGPDataType_):
    """The http://www.w3.org/2000/09/xmldsig#:PGPData element """

    c_tag = 'PGPData'
    c_namespace = NAMESPACE
    c_children = PGPDataType_.c_children.copy()
    c_attributes = PGPDataType_.c_attributes.copy()
    c_child_order = PGPDataType_.c_child_order[:]
    c_cardinality = PGPDataType_.c_cardinality.copy()


def pgp_data_from_string(xml_string):
    return saml2.create_class_from_xml_string(PGPData, xml_string)


class SPKIData(SPKIDataType_):
    """The http://www.w3.org/2000/09/xmldsig#:SPKIData element """

    c_tag = 'SPKIData'
    c_namespace = NAMESPACE
    c_children = SPKIDataType_.c_children.copy()
    c_attributes = SPKIDataType_.c_attributes.copy()
    c_child_order = SPKIDataType_.c_child_order[:]
    c_cardinality = SPKIDataType_.c_cardinality.copy()


def spki_data_from_string(xml_string):
    return saml2.create_class_from_xml_string(SPKIData, xml_string)


class Object(ObjectType_):
    """The http://www.w3.org/2000/09/xmldsig#:Object element """

    c_tag = 'Object'
    c_namespace = NAMESPACE
    c_children = ObjectType_.c_children.copy()
    c_attributes = ObjectType_.c_attributes.copy()
    c_child_order = ObjectType_.c_child_order[:]
    c_cardinality = ObjectType_.c_cardinality.copy()


def object_from_string(xml_string):
    return saml2.create_class_from_xml_string(Object, xml_string)


class SignatureProperty(SignaturePropertyType_):
    """The http://www.w3.org/2000/09/xmldsig#:SignatureProperty element """

    c_tag = 'SignatureProperty'
    c_namespace = NAMESPACE
    c_children = SignaturePropertyType_.c_children.copy()
    c_attributes = SignaturePropertyType_.c_attributes.copy()
    c_child_order = SignaturePropertyType_.c_child_order[:]
    c_cardinality = SignaturePropertyType_.c_cardinality.copy()


def signature_property_from_string(xml_string):
    return saml2.create_class_from_xml_string(SignatureProperty, xml_string)


class DSAKeyValue(DSAKeyValueType_):
    """The http://www.w3.org/2000/09/xmldsig#:DSAKeyValue element """

    c_tag = 'DSAKeyValue'
    c_namespace = NAMESPACE
    c_children = DSAKeyValueType_.c_children.copy()
    c_attributes = DSAKeyValueType_.c_attributes.copy()
    c_child_order = DSAKeyValueType_.c_child_order[:]
    c_cardinality = DSAKeyValueType_.c_cardinality.copy()


def dsa_key_value_from_string(xml_string):
    return saml2.create_class_from_xml_string(DSAKeyValue, xml_string)


class RSAKeyValue(RSAKeyValueType_):
    """The http://www.w3.org/2000/09/xmldsig#:RSAKeyValue element """

    c_tag = 'RSAKeyValue'
    c_namespace = NAMESPACE
    c_children = RSAKeyValueType_.c_children.copy()
    c_attributes = RSAKeyValueType_.c_attributes.copy()
    c_child_order = RSAKeyValueType_.c_child_order[:]
    c_cardinality = RSAKeyValueType_.c_cardinality.copy()


def rsa_key_value_from_string(xml_string):
    return saml2.create_class_from_xml_string(RSAKeyValue, xml_string)


class SignatureMethod(SignatureMethodType_):
    """The http://www.w3.org/2000/09/xmldsig#:SignatureMethod element """

    c_tag = 'SignatureMethod'
    c_namespace = NAMESPACE
    c_children = SignatureMethodType_.c_children.copy()
    c_attributes = SignatureMethodType_.c_attributes.copy()
    c_child_order = SignatureMethodType_.c_child_order[:]
    c_cardinality = SignatureMethodType_.c_cardinality.copy()


def signature_method_from_string(xml_string):
    return saml2.create_class_from_xml_string(SignatureMethod, xml_string)


class TransformsType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:TransformsType element """

    c_tag = 'TransformsType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}Transform'] = ('transform',
                                                                   [Transform])
    c_cardinality['transform'] = {"min": 1}
    c_child_order.extend(['transform'])

    def __init__(self,
                 transform=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.transform = transform or []


def transforms_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(TransformsType_, xml_string)


class KeyValueType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:KeyValueType element """

    c_tag = 'KeyValueType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}DSAKeyValue'] = (
        'dsa_key_value', DSAKeyValue)
    c_cardinality['dsa_key_value'] = {"min": 0, "max": 1}
    c_children['{http://www.w3.org/2000/09/xmldsig#}RSAKeyValue'] = (
        'rsa_key_value', RSAKeyValue)
    c_cardinality['rsa_key_value'] = {"min": 0, "max": 1}
    c_child_order.extend(['dsa_key_value', 'rsa_key_value'])

    def __init__(self,
                 dsa_key_value=None,
                 rsa_key_value=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.dsa_key_value = dsa_key_value
        self.rsa_key_value = rsa_key_value


def key_value_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(KeyValueType_, xml_string)


class X509Data(X509DataType_):
    """The http://www.w3.org/2000/09/xmldsig#:X509Data element """

    c_tag = 'X509Data'
    c_namespace = NAMESPACE
    c_children = X509DataType_.c_children.copy()
    c_attributes = X509DataType_.c_attributes.copy()
    c_child_order = X509DataType_.c_child_order[:]
    c_cardinality = X509DataType_.c_cardinality.copy()


def x509_data_from_string(xml_string):
    return saml2.create_class_from_xml_string(X509Data, xml_string)


class SignaturePropertiesType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:SignaturePropertiesType element
    """

    c_tag = 'SignaturePropertiesType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}SignatureProperty'] = (
        'signature_property', [SignatureProperty])
    c_cardinality['signature_property'] = {"min": 1}
    c_attributes['Id'] = ('id', 'ID', False)
    c_child_order.extend(['signature_property'])

    def __init__(self,
                 signature_property=None,
                 id=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.signature_property = signature_property or []
        self.id = id


def signature_properties_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(SignaturePropertiesType_,
                                              xml_string)


class Transforms(TransformsType_):
    """The http://www.w3.org/2000/09/xmldsig#:Transforms element """

    c_tag = 'Transforms'
    c_namespace = NAMESPACE
    c_children = TransformsType_.c_children.copy()
    c_attributes = TransformsType_.c_attributes.copy()
    c_child_order = TransformsType_.c_child_order[:]
    c_cardinality = TransformsType_.c_cardinality.copy()


def transforms_from_string(xml_string):
    return saml2.create_class_from_xml_string(Transforms, xml_string)


class KeyValue(KeyValueType_):
    """The http://www.w3.org/2000/09/xmldsig#:KeyValue element """

    c_tag = 'KeyValue'
    c_namespace = NAMESPACE
    c_children = KeyValueType_.c_children.copy()
    c_attributes = KeyValueType_.c_attributes.copy()
    c_child_order = KeyValueType_.c_child_order[:]
    c_cardinality = KeyValueType_.c_cardinality.copy()


def key_value_from_string(xml_string):
    return saml2.create_class_from_xml_string(KeyValue, xml_string)


class RetrievalMethodType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:RetrievalMethodType element """

    c_tag = 'RetrievalMethodType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}Transforms'] = (
        'transforms', Transforms)
    c_cardinality['transforms'] = {"min": 0, "max": 1}
    c_attributes['URI'] = ('uri', 'anyURI', False)
    c_attributes['Type'] = ('type', 'anyURI', False)
    c_child_order.extend(['transforms'])

    def __init__(self,
                 transforms=None,
                 uri=None,
                 type=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.transforms = transforms
        self.uri = uri
        self.type = type


def retrieval_method_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(RetrievalMethodType_, xml_string)


class SignatureProperties(SignaturePropertiesType_):
    """The http://www.w3.org/2000/09/xmldsig#:SignatureProperties element """

    c_tag = 'SignatureProperties'
    c_namespace = NAMESPACE
    c_children = SignaturePropertiesType_.c_children.copy()
    c_attributes = SignaturePropertiesType_.c_attributes.copy()
    c_child_order = SignaturePropertiesType_.c_child_order[:]
    c_cardinality = SignaturePropertiesType_.c_cardinality.copy()


def signature_properties_from_string(xml_string):
    return saml2.create_class_from_xml_string(SignatureProperties, xml_string)


class ReferenceType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:ReferenceType element """

    c_tag = 'ReferenceType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}Transforms'] = (
        'transforms', Transforms)
    c_cardinality['transforms'] = {"min": 0, "max": 1}
    c_children['{http://www.w3.org/2000/09/xmldsig#}DigestMethod'] = (
        'digest_method', DigestMethod)
    c_children['{http://www.w3.org/2000/09/xmldsig#}DigestValue'] = (
        'digest_value', DigestValue)
    c_attributes['Id'] = ('id', 'ID', False)
    c_attributes['URI'] = ('uri', 'anyURI', False)
    c_attributes['Type'] = ('type', 'anyURI', False)
    c_child_order.extend(['transforms', 'digest_method', 'digest_value'])

    def __init__(self,
                 transforms=None,
                 digest_method=None,
                 digest_value=None,
                 id=None,
                 uri=None,
                 type=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.transforms = transforms
        self.digest_method = digest_method
        self.digest_value = digest_value
        self.id = id
        self.uri = uri
        self.type = type


def reference_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(ReferenceType_, xml_string)


class RetrievalMethod(RetrievalMethodType_):
    """The http://www.w3.org/2000/09/xmldsig#:RetrievalMethod element """

    c_tag = 'RetrievalMethod'
    c_namespace = NAMESPACE
    c_children = RetrievalMethodType_.c_children.copy()
    c_attributes = RetrievalMethodType_.c_attributes.copy()
    c_child_order = RetrievalMethodType_.c_child_order[:]
    c_cardinality = RetrievalMethodType_.c_cardinality.copy()


def retrieval_method_from_string(xml_string):
    return saml2.create_class_from_xml_string(RetrievalMethod, xml_string)


class Reference(ReferenceType_):
    """The http://www.w3.org/2000/09/xmldsig#:Reference element """

    c_tag = 'Reference'
    c_namespace = NAMESPACE
    c_children = ReferenceType_.c_children.copy()
    c_attributes = ReferenceType_.c_attributes.copy()
    c_child_order = ReferenceType_.c_child_order[:]
    c_cardinality = ReferenceType_.c_cardinality.copy()


def reference_from_string(xml_string):
    return saml2.create_class_from_xml_string(Reference, xml_string)


# import xmlenc as enc


class KeyInfoType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:KeyInfoType element """

    c_tag = 'KeyInfoType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}KeyName'] = ('key_name',
                                                                 [KeyName])
    c_cardinality['key_name'] = {"min": 0}
    c_children['{http://www.w3.org/2000/09/xmldsig#}KeyValue'] = ('key_value',
                                                                  [KeyValue])
    c_cardinality['key_value'] = {"min": 0}
    c_children['{http://www.w3.org/2000/09/xmldsig#}RetrievalMethod'] = (
        'retrieval_method', [RetrievalMethod])
    c_cardinality['retrieval_method'] = {"min": 0}
    c_children['{http://www.w3.org/2000/09/xmldsig#}X509Data'] = ('x509_data',
                                                                  [X509Data])
    c_cardinality['x509_data'] = {"min": 0}
    c_children['{http://www.w3.org/2000/09/xmldsig#}PGPData'] = ('pgp_data',
                                                                 [PGPData])
    c_cardinality['pgp_data'] = {"min": 0}
    c_children['{http://www.w3.org/2000/09/xmldsig#}SPKIData'] = ('spki_data',
                                                                  [SPKIData])
    c_cardinality['spki_data'] = {"min": 0}
    c_children['{http://www.w3.org/2000/09/xmldsig#}MgmtData'] = ('mgmt_data',
                                                                  [MgmtData])
    c_cardinality['mgmt_data'] = {"min": 0}
    c_children['{http://www.w3.org/2000/09/xmlenc#}EncryptedKey'] = (
        'encrypted_key', None)
    c_cardinality['key_info'] = {"min": 0, "max": 1}

    c_attributes['Id'] = ('id', 'ID', False)
    c_child_order.extend(['key_name', 'key_value', 'retrieval_method',
                          'x509_data', 'pgp_data', 'spki_data', 'mgmt_data',
                          'encrypted_key'])

    def __init__(self,
                 key_name=None,
                 key_value=None,
                 retrieval_method=None,
                 x509_data=None,
                 pgp_data=None,
                 spki_data=None,
                 mgmt_data=None,
                 encrypted_key=None,
                 id=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes
                          )
        self.key_name = key_name or []
        self.key_value = key_value or []
        self.retrieval_method = retrieval_method or []
        self.x509_data = x509_data or []
        self.pgp_data = pgp_data or []
        self.spki_data = spki_data or []
        self.mgmt_data = mgmt_data or []
        self.encrypted_key = encrypted_key
        self.id = id


def key_info_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(KeyInfoType_, xml_string)


class ManifestType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:ManifestType element """

    c_tag = 'ManifestType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}Reference'] = ('reference',
                                                                   [Reference])
    c_cardinality['reference'] = {"min": 1}
    c_attributes['Id'] = ('id', 'ID', False)
    c_child_order.extend(['reference'])

    def __init__(self,
                 reference=None,
                 id=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.reference = reference or []
        self.id = id


def manifest_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(ManifestType_, xml_string)


class SignedInfoType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:SignedInfoType element """

    c_tag = 'SignedInfoType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod'] = (
        'canonicalization_method', CanonicalizationMethod)
    c_children['{http://www.w3.org/2000/09/xmldsig#}SignatureMethod'] = (
        'signature_method', SignatureMethod)
    c_children['{http://www.w3.org/2000/09/xmldsig#}Reference'] = ('reference',
                                                                   [Reference])
    c_cardinality['reference'] = {"min": 1}
    c_attributes['Id'] = ('id', 'ID', False)
    c_child_order.extend(['canonicalization_method', 'signature_method',
                          'reference'])

    def __init__(self,
                 canonicalization_method=None,
                 signature_method=None,
                 reference=None,
                 id=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.canonicalization_method = canonicalization_method
        self.signature_method = signature_method
        self.reference = reference or []
        self.id = id


def signed_info_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(SignedInfoType_, xml_string)


class KeyInfo(KeyInfoType_):
    """The http://www.w3.org/2000/09/xmldsig#:KeyInfo element """

    c_tag = 'KeyInfo'
    c_namespace = NAMESPACE
    c_children = KeyInfoType_.c_children.copy()
    c_attributes = KeyInfoType_.c_attributes.copy()
    c_child_order = KeyInfoType_.c_child_order[:]
    c_cardinality = KeyInfoType_.c_cardinality.copy()


def key_info_from_string(xml_string):
    return saml2.create_class_from_xml_string(KeyInfo, xml_string)


class Manifest(ManifestType_):
    """The http://www.w3.org/2000/09/xmldsig#:Manifest element """

    c_tag = 'Manifest'
    c_namespace = NAMESPACE
    c_children = ManifestType_.c_children.copy()
    c_attributes = ManifestType_.c_attributes.copy()
    c_child_order = ManifestType_.c_child_order[:]
    c_cardinality = ManifestType_.c_cardinality.copy()


def manifest_from_string(xml_string):
    return saml2.create_class_from_xml_string(Manifest, xml_string)


class SignedInfo(SignedInfoType_):
    """The http://www.w3.org/2000/09/xmldsig#:SignedInfo element """

    c_tag = 'SignedInfo'
    c_namespace = NAMESPACE
    c_children = SignedInfoType_.c_children.copy()
    c_attributes = SignedInfoType_.c_attributes.copy()
    c_child_order = SignedInfoType_.c_child_order[:]
    c_cardinality = SignedInfoType_.c_cardinality.copy()


def signed_info_from_string(xml_string):
    return saml2.create_class_from_xml_string(SignedInfo, xml_string)


class SignatureType_(SamlBase):
    """The http://www.w3.org/2000/09/xmldsig#:SignatureType element """

    c_tag = 'SignatureType'
    c_namespace = NAMESPACE
    c_children = SamlBase.c_children.copy()
    c_attributes = SamlBase.c_attributes.copy()
    c_child_order = SamlBase.c_child_order[:]
    c_cardinality = SamlBase.c_cardinality.copy()
    c_children['{http://www.w3.org/2000/09/xmldsig#}SignedInfo'] = (
        'signed_info', SignedInfo)
    c_children['{http://www.w3.org/2000/09/xmldsig#}SignatureValue'] = (
        'signature_value', SignatureValue)
    c_children['{http://www.w3.org/2000/09/xmldsig#}KeyInfo'] = ('key_info',
                                                                 KeyInfo)
    c_cardinality['key_info'] = {"min": 0, "max": 1}
    c_children['{http://www.w3.org/2000/09/xmldsig#}Object'] = ('object',
                                                                [Object])
    c_cardinality['object'] = {"min": 0}
    c_attributes['Id'] = ('id', 'ID', False)
    c_child_order.extend(['signed_info', 'signature_value', 'key_info',
                          'object'])

    def __init__(self,
                 signed_info=None,
                 signature_value=None,
                 key_info=None,
                 object=None,
                 id=None,
                 text=None,
                 extension_elements=None,
                 extension_attributes=None,
                 ):
        SamlBase.__init__(self,
                          text=text,
                          extension_elements=extension_elements,
                          extension_attributes=extension_attributes,
                          )
        self.signed_info = signed_info
        self.signature_value = signature_value
        self.key_info = key_info
        self.object = object or []
        self.id = id


def signature_type__from_string(xml_string):
    return saml2.create_class_from_xml_string(SignatureType_, xml_string)


class Signature(SignatureType_):
    """The http://www.w3.org/2000/09/xmldsig#:Signature element """

    c_tag = 'Signature'
    c_namespace = NAMESPACE
    c_children = SignatureType_.c_children.copy()
    c_attributes = SignatureType_.c_attributes.copy()
    c_child_order = SignatureType_.c_child_order[:]
    c_cardinality = SignatureType_.c_cardinality.copy()


def signature_from_string(xml_string):
    return saml2.create_class_from_xml_string(Signature, xml_string)


ELEMENT_FROM_STRING = {
    CryptoBinary_.c_tag: crypto_binary__from_string,
    Signature.c_tag: signature_from_string,
    SignatureType_.c_tag: signature_type__from_string,
    SignatureValue.c_tag: signature_value_from_string,
    SignatureValueType_.c_tag: signature_value_type__from_string,
    SignedInfo.c_tag: signed_info_from_string,
    SignedInfoType_.c_tag: signed_info_type__from_string,
    CanonicalizationMethod.c_tag: canonicalization_method_from_string,
    CanonicalizationMethodType_.c_tag:
        canonicalization_method_type__from_string,
    SignatureMethod.c_tag: signature_method_from_string,
    SignatureMethodType_.c_tag: signature_method_type__from_string,
    Reference.c_tag: reference_from_string,
    ReferenceType_.c_tag: reference_type__from_string,
    Transforms.c_tag: transforms_from_string,
    TransformsType_.c_tag: transforms_type__from_string,
    Transform.c_tag: transform_from_string,
    TransformType_.c_tag: transform_type__from_string,
    DigestMethod.c_tag: digest_method_from_string,
    DigestMethodType_.c_tag: digest_method_type__from_string,
    DigestValue.c_tag: digest_value_from_string,
    DigestValueType_.c_tag: digest_value_type__from_string,
    KeyInfo.c_tag: key_info_from_string,
    KeyInfoType_.c_tag: key_info_type__from_string,
    KeyName.c_tag: key_name_from_string,
    MgmtData.c_tag: mgmt_data_from_string,
    KeyValue.c_tag: key_value_from_string,
    KeyValueType_.c_tag: key_value_type__from_string,
    RetrievalMethod.c_tag: retrieval_method_from_string,
    RetrievalMethodType_.c_tag: retrieval_method_type__from_string,
    X509Data.c_tag: x509_data_from_string,
    X509DataType_.c_tag: x509_data_type__from_string,
    X509IssuerSerialType_.c_tag: x509_issuer_serial_type__from_string,
    PGPData.c_tag: pgp_data_from_string,
    PGPDataType_.c_tag: pgp_data_type__from_string,
    SPKIData.c_tag: spki_data_from_string,
    SPKIDataType_.c_tag: spki_data_type__from_string,
    Object.c_tag: object_from_string,
    ObjectType_.c_tag: object_type__from_string,
    Manifest.c_tag: manifest_from_string,
    ManifestType_.c_tag: manifest_type__from_string,
    SignatureProperties.c_tag: signature_properties_from_string,
    SignaturePropertiesType_.c_tag: signature_properties_type__from_string,
    SignatureProperty.c_tag: signature_property_from_string,
    SignaturePropertyType_.c_tag: signature_property_type__from_string,
    HMACOutputLengthType_.c_tag: hmac_output_length_type__from_string,
    DSAKeyValue.c_tag: dsa_key_value_from_string,
    DSAKeyValueType_.c_tag: dsa_key_value_type__from_string,
    RSAKeyValue.c_tag: rsa_key_value_from_string,
    RSAKeyValueType_.c_tag: rsa_key_value_type__from_string,
    TransformType_XPath.c_tag: transform_type__x_path_from_string,
    X509IssuerName.c_tag: x509_issuer_name_from_string,
    X509SerialNumber.c_tag: x509_serial_number_from_string,
    PGPKeyID.c_tag: pgp_key_id_from_string,
    PGPKeyPacket.c_tag: pgp_key_packet_from_string,
    SPKISexp.c_tag: spki_sexp_from_string,
    P.c_tag: p_from_string,
    Q.c_tag: q_from_string,
    G.c_tag: g_from_string,
    Y.c_tag: y_from_string,
    J.c_tag: j_from_string,
    Seed.c_tag: seed_from_string,
    PgenCounter.c_tag: pgen_counter_from_string,
    Modulus.c_tag: modulus_from_string,
    Exponent.c_tag: exponent_from_string,
    HMACOutputLength.c_tag: hmac_output_length_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,
}

ELEMENT_BY_TAG = {
    'CryptoBinary': CryptoBinary_,
    'Signature': Signature,
    'SignatureType': SignatureType_,
    'SignatureValue': SignatureValue,
    'SignatureValueType': SignatureValueType_,
    'SignedInfo': SignedInfo,
    'SignedInfoType': SignedInfoType_,
    'CanonicalizationMethod': CanonicalizationMethod,
    'CanonicalizationMethodType': CanonicalizationMethodType_,
    'SignatureMethod': SignatureMethod,
    'SignatureMethodType': SignatureMethodType_,
    'Reference': Reference,
    'ReferenceType': ReferenceType_,
    'Transforms': Transforms,
    'TransformsType': TransformsType_,
    'Transform': Transform,
    'TransformType': TransformType_,
    'DigestMethod': DigestMethod,
    'DigestMethodType': DigestMethodType_,
    'DigestValue': DigestValue,
    'DigestValueType': DigestValueType_,
    'KeyInfo': KeyInfo,
    'KeyInfoType': KeyInfoType_,
    'KeyName': KeyName,
    'MgmtData': MgmtData,
    'KeyValue': KeyValue,
    'KeyValueType': KeyValueType_,
    'RetrievalMethod': RetrievalMethod,
    'RetrievalMethodType': RetrievalMethodType_,
    'X509Data': X509Data,
    'X509DataType': X509DataType_,
    'X509IssuerSerialType': X509IssuerSerialType_,
    'PGPData': PGPData,
    'PGPDataType': PGPDataType_,
    'SPKIData': SPKIData,
    'SPKIDataType': SPKIDataType_,
    'Object': Object,
    'ObjectType': ObjectType_,
    'Manifest': Manifest,
    'ManifestType': ManifestType_,
    'SignatureProperties': SignatureProperties,
    'SignaturePropertiesType': SignaturePropertiesType_,
    'SignatureProperty': SignatureProperty,
    'SignaturePropertyType': SignaturePropertyType_,
    'HMACOutputLengthType': HMACOutputLengthType_,
    'DSAKeyValue': DSAKeyValue,
    'DSAKeyValueType': DSAKeyValueType_,
    'RSAKeyValue': RSAKeyValue,
    'RSAKeyValueType': RSAKeyValueType_,
    'XPath': TransformType_XPath,
    'X509IssuerName': X509IssuerName,
    'X509SerialNumber': X509SerialNumber,
    'PGPKeyID': PGPKeyID,
    'PGPKeyPacket': PGPKeyPacket,
    'SPKISexp': SPKISexp,
    'P': P,
    'Q': Q,
    'G': G,
    'Y': Y,
    'J': J,
    'Seed': Seed,
    'PgenCounter': PgenCounter,
    'Modulus': Modulus,
    'Exponent': Exponent,
    'HMACOutputLength': HMACOutputLength,
    'X509IssuerSerial': X509IssuerSerial,
    'X509SKI': X509SKI,
    'X509SubjectName': X509SubjectName,
    'X509Certificate': X509Certificate,
    'X509CRL': X509CRL,
}


def factory(tag, **kwargs):
    return ELEMENT_BY_TAG[tag](**kwargs)
