{
"info": {
"author": "Dieter Maurer",
"author_email": "dieter@handshake.de",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: BSD License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 2.4",
"Programming Language :: Python :: 2.6",
"Topic :: Utilities"
],
"description": "This package provides support for SAML2 based on ``pyxb``.\n\n``pyxb`` (http://pypi.python.org/pypi/PyXB) generates a Python class\ncollection for an XML schema and provides means to convert between\nassociated Python instances and xml documents. It is used to generate\nand parse SAML2 messages.\n\nThe package adds support for digital signatures and SAML2 bindings and\nmetadata management.\n\n\nDependencies\n============\n\nPyXB\n----\n\nThis package's version has been tested with version 1.1.4 of ``pyxb``.\nIt may not work with other versions.\n\nClass collections generated by ``pyxb`` tend to be very version dependent.\nThus, they must usually be regenerated when the ``pyxb`` version has changed.\n\nThe current package's version mostly uses class collections from\nthe ``wssplat`` and ``saml20`` bundles of ``pyxb``. Thus, they\nhave a good chance to be updated together with ``pyxb``.\nHowever, the ``pyxb`` ``saml2`` bundle lacks support for\nthe so called SAML2 context classes. This package contains\nclass collections generated with ``pyxb==1.1.4``. They need to\nbe regenerated if the ``pyxb`` version changes (and you use those classes --\nwhich is not very likely).\nThe ``gen.sh`` script in subpackage ``pyxb``\ncan provide clues how to regenerate them.\n\nA bug in ``pyxb 1.1.4``\n(http://sourceforge.net/apps/trac/pyxb/ticket/130#comment:4)\nprevents its installation via package managers (such as\n``easy_install``, ``pip``, ``zc.buildout``) for Python versions\nwithout ``os.path.relpath`` (this applies e.g. to Python 2.4).\nI work around this problem by downloading the ``pyxb`` source,\napply patch http://sourceforge.net/apps/trac/pyxb/attachment/ticket/130/pyxb_setup.patch\nto it and then egg install the result.\nAfter this, ``dm.saml2`` can be installed normally.\n\n\ndm.xmlsec.binding\n-----------------\n\nCheck its installation notes should you face related installation problems.\n\n\nExample\n=======\n\nThis section provides a simple example on how to create, sign and\nverify an assertion with this package.\n\n\nAlways ensure, the ``xmlsec`` library is initialized. Otherwise, it signing/\nsignature verification can fail with dubious messages.\n\n>>> import dm.xmlsec.binding as xmlsec\n>>> xmlsec.initialize()\n\nWe now build an assertion as Python object.\n\n>>> import pyxb.binding.datatypes as xs\n>>> from dm.saml2.pyxb.assertion import (NameID, Assertion, Subject, \\\n... AuthnStatement, AttributeStatement, AuthnContext, AuthnContextClassRef, \\\n... Attribute, AttributeValue, \\\n... CreateFromDocument\n... )\n>>> from datetime import datetime\n>>> \n>>> issuer = NameID('http://bfd.de')\n>>> ass = Assertion(issuer)\n>>> \n>>> subject = Subject(NameID('Dieter Maurer'))\n>>> \n>>> ass.Subject = subject\n>>> \n>>> authn = AuthnStatement(\n... None,\n... AuthnContext(AuthnContextClassRef('urn:oasis:names:tc:SAML2:2.0:ac:classes:Password')),\n... AuthnInstant=datetime.utcnow(),\n... )\n>>> \n>>> ass.AuthnStatement.append(authn)\n>>> \n>>> att = AttributeStatement(\n... # does not yet work perfectly -- needs further analysis\n... Attribute(xs.string('Dieter', _element=AttributeValue), Name='Firstname'),\n... Attribute(xs.string('Maurer', _element=AttributeValue), Name='Lastname'),\n... )\n>>> \n>>> ass.AttributeStatement.append(att)\n\nNow it looks like this (not yet signed).\n\n>>> unsigned_ass = ass.toxml()\n>>> print unsigned_ass\nhttp://bfd.deDieter Maurerurn:oasis:names:tc:SAML2:2.0:ac:classes:PasswordDieterMaurer\n\n\nWe define the signature context to support signing.\n\n>>> from dm.saml2.signature import default_sign_context\n>>> default_sign_context.add_key(xmlsec.Key.load('key.pem', xmlsec.KeyDataFormatPem, None), issuer.value())\n\nWe request that ``ass`` gets signed on serialization, serialize and\nlook at the result.\n\n>>> ass.request_signature()\n>>> signed = ass.toxml()\n>>> print signed\nhttp://bfd.de6P0dLnMLJCe22YuRD1Mngiprz6k=liaBBIVjk73x5spJrvfYg1Sa3VGnOqz0zqDKQr7qoLNg5/pzZ8llQEXQsbvw6zLh\n26UnQ6D3KWvvabw9vpRqzLA21ykNUPqEGtZPMiQynvpdRSeTbg5ZyVBGYCL7ww19\nMiEKryDwPI56I/3z4Le7KFZ4qpPPUptodQ4mm1PVsyA=Dieter Maurerurn:oasis:names:tc:SAML2:2.0:ac:classes:PasswordDieterMaurer\n\nNow, we look how the verification can be done. We first set up\na verification context.\n\n>>> from dm.saml2.signature import default_verify_context\n>>> default_verify_context.add_key(xmlsec.Key.load('pubkey.pem', xmlsec.KeyDataFormatPem, None), issuer.value())\n\nCalling ``CreateFromDocument`` will verify any (available) signatures and raise\nan exception when a verification fails. Verification always uses\nthe ``Issuer`` to select the key from the verification context.\nTo check whether a signature\nwas verified at the instance, ``verified_signature`` can be called.\n\n>>> verified_ass = CreateFromDocument(signed)\n>>> verified_ass.verified_signature()\nTrue\n\n\nYou can use ``pydoc``, the Python builtin ``help`` or look at the source\nto find out more about this package.\n\n\nConfiguration\n=============\n\nStarting with version 3.1, the package provides an elementary way to\nconfigure parts of the signature generation and verification process.\nThis may become necessary when SAML partner entities have special\nrequirements in this regard.\n\nYou do this kind of configuration by importing the module\n``dm.saml2.config`` and overriding some of the variables defined there.\n\nAs an example, let us assume that one of your SAML2 partner entities\nuses ``DsaSha1`` as the signature method (rather than the default\n``RsaSha1``). Without special configuration, the verification will fail.\nThe ``xmlsec`` stack trace will give hints (somewhat cryptic) towards\na disabled transform. The configuration to get those SAML2 messages\nverified could look like:\n\n>>> from dm.saml2 import config\n>>> from dm.xmlsec.binding import TransformDsaSha1\n>>> config.signature_transforms += (TransformDsaSha1, )\n\nThis configuration tells the package that ``DsaSha1`` is an\nacceptable signature method.\n\nThe configuration should happen once - before the first signature\ncreation/verification.\n\n\nNotes\n=====\n\nNote that signature creation and verification will fail with an obscure\nerror message from ``xmlsec`` when ``xmlsec`` is not properly\ninitialized. Do not forget to call ``dm.xmlsec.binding.initialize()``.\n\n\nHistory\n=======\n\n3.2\n\n Python 3 compatibity\n\n Added test suite\n\n Fixes in the `httpartifact` binding.\n\n3.1.3\n\n Added a 10 s timeout in ``metadata.EntityByUrl.get_metadata_document``.\n It can be changed by changing the variable ``ENTITY_BY_URL_TIMEOUT``\n in module ``metadata``.\n\n3.1.2\n\n Support (limited) type conversion in ``util.xs_convert_from_xml``.\n\n3.1.1\n\n Adapt to the changed binding for \"plural\" elements (``maxoccurs`` > 1)\n in newer ``PyXB`` versions.\n\n3.1\n\n Elementary configuration support for the signature generation/verification\n process.\n\n Support for use of ``Sha256`` and ``RsaSha256`` as digest or\n signature method, respcectively.\n\n\n3.0\n\n Switch to ``datetime`` values explicitely in the UTC time zone (rather\n than naive ``datetime`` values which implicitely use the UTC time zone).\n\n This also affects the lexical representation of SAML time values: they\n now use the ``Z`` timezone suffix.\n\n2.1\n\n Signature support for the HTTP redirect binding.\n Note: for this to work, you need at least version 1.3 of\n ``dm.xmlsec.binding`` which requires ``lxml >= 3.0``;\n as Plone 4.x still uses ``lxml 2.x``, this version dependency\n is not declared in ``setup.py``. \n\n2.0\n\n Version 2.0 uses ``dm.xmlsec.binding`` as Python binding to the XML\n security library, rather then the no longer maintained ``pyxmlsec``.\n This drastically facilitates installation.\n\n1.0\n\n Initial release based on ``pyxmlsec``.",
"description_content_type": "",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "http://pypi.python.org/pypi/dm.xmlsec.pyxb",
"keywords": "saml2 pyxb",
"license": "BSD",
"maintainer": "",
"maintainer_email": "",
"name": "dm.saml2",
"package_url": "https://pypi.org/project/dm.saml2/",
"platform": "",
"project_url": "https://pypi.org/project/dm.saml2/",
"project_urls": {
"Homepage": "http://pypi.python.org/pypi/dm.xmlsec.pyxb"
},
"release_url": "https://pypi.org/project/dm.saml2/3.2.2/",
"requires_dist": null,
"requires_python": "",
"summary": "SAML2 support based on PyXB",
"version": "3.2.2"
},
"last_serial": 4866272,
"releases": {
"1.0": [
{
"comment_text": "",
"digests": {
"md5": "2e76da471c56f847a13a22e5e4446df1",
"sha256": "3449c9287937ea0224117d080ede56b37db6f0de9a21591e17342c058ccaa00f"
},
"downloads": -1,
"filename": "dm.saml2-1.0.tar.gz",
"has_sig": false,
"md5_digest": "2e76da471c56f847a13a22e5e4446df1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 466175,
"upload_time": "2012-03-21T11:05:51",
"url": "https://files.pythonhosted.org/packages/90/d6/6b0460365c550473568b14258bb24d370c64674de996c4b9265a93a3cd71/dm.saml2-1.0.tar.gz"
}
],
"1.0.1": [
{
"comment_text": "",
"digests": {
"md5": "50d99045a6a9cb6083f773b9ada8197d",
"sha256": "21c8c7e4a1bdb6e1707f728ec70a0f96e4e82b3e8419fea9d46f55354f7d3a96"
},
"downloads": -1,
"filename": "dm.saml2-1.0.1.tar.gz",
"has_sig": false,
"md5_digest": "50d99045a6a9cb6083f773b9ada8197d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 466236,
"upload_time": "2012-03-24T10:57:36",
"url": "https://files.pythonhosted.org/packages/70/38/ab48d574c5b489f503403b6dbdf7ea37c1d9e137e6d24ed3f74bb6eb624f/dm.saml2-1.0.1.tar.gz"
}
],
"2.0": [
{
"comment_text": "",
"digests": {
"md5": "c64750888b2ea4132f85b8d8516173de",
"sha256": "d49e2eca2b56ee0f31bbdb3fdbc6bbec2703be73609c1ae2c0f75b046045d8b0"
},
"downloads": -1,
"filename": "dm.saml2-2.0.tar.gz",
"has_sig": false,
"md5_digest": "c64750888b2ea4132f85b8d8516173de",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 335179,
"upload_time": "2012-07-02T10:37:38",
"url": "https://files.pythonhosted.org/packages/33/3f/38fb95e91cd431b407667811655f8faead45fc3bcc660bafa320b0c9582f/dm.saml2-2.0.tar.gz"
}
],
"2.0.1": [
{
"comment_text": "",
"digests": {
"md5": "1b22c69c49d176407ca13471df8da8c0",
"sha256": "3b10c1a1e521c225a8964752f1f393b80d2b0b9b7e873fb0ed1ecdcd4dd82637"
},
"downloads": -1,
"filename": "dm.saml2-2.0.1.tar.gz",
"has_sig": false,
"md5_digest": "1b22c69c49d176407ca13471df8da8c0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 338849,
"upload_time": "2012-08-06T20:36:36",
"url": "https://files.pythonhosted.org/packages/58/2b/fb8eb4e96f1b77be9859406cebfa9ac6d23956f761835183ced21d7e27e4/dm.saml2-2.0.1.tar.gz"
}
],
"2.0.2": [
{
"comment_text": "",
"digests": {
"md5": "0360ae211c9bb92056afbe2444f311d6",
"sha256": "22c49beb0776aafd84ccae315f70893f3af7b163eb1ee32beff7b4c80d044d1e"
},
"downloads": -1,
"filename": "dm.saml2-2.0.2.tar.gz",
"has_sig": false,
"md5_digest": "0360ae211c9bb92056afbe2444f311d6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 338853,
"upload_time": "2013-01-09T10:02:49",
"url": "https://files.pythonhosted.org/packages/3d/ef/61d9f89349005638d6455cf7e9782501a21dba99641111b3cf4773f04617/dm.saml2-2.0.2.tar.gz"
}
],
"2.0.3": [
{
"comment_text": "",
"digests": {
"md5": "c360a45982a0d1dfcee5fd381364296c",
"sha256": "3c388c4b79931d4b6d3cbbe4824179c7133e79d47c4721fd77fee39d6401b05e"
},
"downloads": -1,
"filename": "dm.saml2-2.0.3.tar.gz",
"has_sig": false,
"md5_digest": "c360a45982a0d1dfcee5fd381364296c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 338976,
"upload_time": "2013-05-09T08:21:55",
"url": "https://files.pythonhosted.org/packages/17/20/63646410d3ca36ffd84ffeb3aab23924c5181e1af82d7b2a14b76ab0eaf0/dm.saml2-2.0.3.tar.gz"
}
],
"2.0.4": [
{
"comment_text": "",
"digests": {
"md5": "383a25e438325388b1f81d6300ee388f",
"sha256": "38b21fabb46d9dc6297b0cf54f2e0829dc792deba080432dae1a8fbd377750bc"
},
"downloads": -1,
"filename": "dm.saml2-2.0.4.tar.gz",
"has_sig": false,
"md5_digest": "383a25e438325388b1f81d6300ee388f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 339119,
"upload_time": "2013-05-26T06:18:45",
"url": "https://files.pythonhosted.org/packages/7f/3c/31f3307a9462977d338bbda9f17fa7b40b46b042ae86daf9927127c72a87/dm.saml2-2.0.4.tar.gz"
}
],
"2.0.5": [
{
"comment_text": "",
"digests": {
"md5": "d11b4f476ffb1791aef697f8f2d36fe6",
"sha256": "4542cdaf775faeb6f5fbc6b694390bc8e6686d649cae1bb41b80e43762f96a67"
},
"downloads": -1,
"filename": "dm.saml2-2.0.5.tar.gz",
"has_sig": false,
"md5_digest": "d11b4f476ffb1791aef697f8f2d36fe6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 339213,
"upload_time": "2013-06-09T13:34:01",
"url": "https://files.pythonhosted.org/packages/26/f3/992f56791ef98c552ecbfa660e2e2592cdd3f7734bc75908b4403560e164/dm.saml2-2.0.5.tar.gz"
}
],
"2.1": [
{
"comment_text": "",
"digests": {
"md5": "393647f17511782b42a01adfd0a38892",
"sha256": "bab80a908aa621f5cfbe0f6e55d06d55001d7af28fa30838edd3e49bc593f700"
},
"downloads": -1,
"filename": "dm.saml2-2.1.tar.gz",
"has_sig": false,
"md5_digest": "393647f17511782b42a01adfd0a38892",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 339991,
"upload_time": "2014-08-21T06:38:36",
"url": "https://files.pythonhosted.org/packages/96/c1/b19d21672c60b8f45e24bb3eb0ed421736ff57a0ad63f5690e7696f5905e/dm.saml2-2.1.tar.gz"
}
],
"2.1.1": [
{
"comment_text": "",
"digests": {
"md5": "4423f6e5f1d17f57fdf6cb201df87e35",
"sha256": "71e2ec82662cb50003aa069298c0fe4ddcb3871483ed5efd634f89812ec7efc6"
},
"downloads": -1,
"filename": "dm.saml2-2.1.1.tar.gz",
"has_sig": false,
"md5_digest": "4423f6e5f1d17f57fdf6cb201df87e35",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 340032,
"upload_time": "2014-08-22T05:55:40",
"url": "https://files.pythonhosted.org/packages/20/ae/24c6f9edd340c1a2ff26025d5fc381696b15853d42b10a8405c2fc5df95a/dm.saml2-2.1.1.tar.gz"
}
],
"3.0": [
{
"comment_text": "",
"digests": {
"md5": "072b0a58aa7f3bece08e82ade18e49a9",
"sha256": "7814f13a21b45ee0264c32d774c498987928aec1d9d787d359c02726d5120804"
},
"downloads": -1,
"filename": "dm.saml2-3.0.tar.gz",
"has_sig": false,
"md5_digest": "072b0a58aa7f3bece08e82ade18e49a9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 340690,
"upload_time": "2014-09-24T08:53:34",
"url": "https://files.pythonhosted.org/packages/13/43/512797fbe3355693106bce10a607024d799e27c66bbfb80c2d3606d4bf50/dm.saml2-3.0.tar.gz"
}
],
"3.1": [
{
"comment_text": "",
"digests": {
"md5": "3b03a64af01f99f368c64954d85a3585",
"sha256": "53c4e0aa1db7ee3239974ba12fb2413a5b9b830bb3d7144ec0345c52497f687f"
},
"downloads": -1,
"filename": "dm.saml2-3.1.tar.gz",
"has_sig": false,
"md5_digest": "3b03a64af01f99f368c64954d85a3585",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 342084,
"upload_time": "2014-09-26T09:02:46",
"url": "https://files.pythonhosted.org/packages/2b/80/1e0ea2bb201e453b5991c7ddbb3b588b96582de3b25c4281e59d8291be83/dm.saml2-3.1.tar.gz"
}
],
"3.1.1": [
{
"comment_text": "",
"digests": {
"md5": "715df2babac8abad3c2797fe345cca3d",
"sha256": "fe1fc6944f067f672b68b40ad2d7f86bda37ef1f46939b6add23834cc84ce4da"
},
"downloads": -1,
"filename": "dm.saml2-3.1.1.tar.gz",
"has_sig": false,
"md5_digest": "715df2babac8abad3c2797fe345cca3d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 342502,
"upload_time": "2014-10-16T07:09:15",
"url": "https://files.pythonhosted.org/packages/ba/a8/d180661640a15ea458a2cb032cad2dd9cf8dbd446557a78dd09298dc37f2/dm.saml2-3.1.1.tar.gz"
}
],
"3.1.2": [
{
"comment_text": "",
"digests": {
"md5": "bce170798990b6dd648c6036aeaaf8f3",
"sha256": "bbd5d8e440aafbd761344a98606a1c36c293242cbdcac90b098bbca29b7961ca"
},
"downloads": -1,
"filename": "dm.saml2-3.1.2.tar.gz",
"has_sig": false,
"md5_digest": "bce170798990b6dd648c6036aeaaf8f3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 342792,
"upload_time": "2014-12-05T11:20:08",
"url": "https://files.pythonhosted.org/packages/21/34/5d21506e31f40e78b077ad31ee35056002cb0e0035fbd1d291b407cefc98/dm.saml2-3.1.2.tar.gz"
}
],
"3.1.3": [
{
"comment_text": "",
"digests": {
"md5": "a2b3a18e380d5d153a29bf0d0a73d31e",
"sha256": "2421a1fbacec7281e3a1a4e4092e99a2d38311abefc0f23035baf6a493476723"
},
"downloads": -1,
"filename": "dm.saml2-3.1.3.tar.gz",
"has_sig": false,
"md5_digest": "a2b3a18e380d5d153a29bf0d0a73d31e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 343023,
"upload_time": "2015-09-02T06:34:14",
"url": "https://files.pythonhosted.org/packages/1d/56/1964f706c1a36e5ae554e22cdbb36586263bee6a6f47091661850ede6356/dm.saml2-3.1.3.tar.gz"
}
],
"3.2": [
{
"comment_text": "",
"digests": {
"md5": "2f958d6b4025359053995e1735e45773",
"sha256": "63ee8064d3ad8c616f6bd941cc917a7285dfd607d5a9cf472d30062a91de8328"
},
"downloads": -1,
"filename": "dm.saml2-3.2.tar.gz",
"has_sig": false,
"md5_digest": "2f958d6b4025359053995e1735e45773",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 340957,
"upload_time": "2019-02-23T17:09:26",
"url": "https://files.pythonhosted.org/packages/aa/b0/0b8c389e61f47d52e72da8e8e6401eda258883c53d446788a12bf0c2297e/dm.saml2-3.2.tar.gz"
}
],
"3.2.1": [
{
"comment_text": "",
"digests": {
"md5": "eeed098fb0b77ad81d49a1d7a39454c9",
"sha256": "d13ecae766a7bdf134d0588ab5afb2435bda9cf85d8edffab7ded396942dee96"
},
"downloads": -1,
"filename": "dm.saml2-3.2.1.tar.gz",
"has_sig": false,
"md5_digest": "eeed098fb0b77ad81d49a1d7a39454c9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 342711,
"upload_time": "2019-02-23T17:26:31",
"url": "https://files.pythonhosted.org/packages/9d/4a/02ce6a60be1d795e4c4001c0d56ebac37d1cbee259fbcc93dc56721af9c7/dm.saml2-3.2.1.tar.gz"
}
],
"3.2.2": [
{
"comment_text": "",
"digests": {
"md5": "14ccc54ee15607c6a1f2a57726d3c0c7",
"sha256": "b1ed736d63f63246702cb95a3336af52930ec79297c1e2be6da0de19a3159c2d"
},
"downloads": -1,
"filename": "dm.saml2-3.2.2.tar.gz",
"has_sig": false,
"md5_digest": "14ccc54ee15607c6a1f2a57726d3c0c7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 342696,
"upload_time": "2019-02-25T19:32:54",
"url": "https://files.pythonhosted.org/packages/85/5d/fe226c531f52b1a6b3b8fc70b01a60bc72cb017dd79b9d32a0df51fc6f3a/dm.saml2-3.2.2.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "14ccc54ee15607c6a1f2a57726d3c0c7",
"sha256": "b1ed736d63f63246702cb95a3336af52930ec79297c1e2be6da0de19a3159c2d"
},
"downloads": -1,
"filename": "dm.saml2-3.2.2.tar.gz",
"has_sig": false,
"md5_digest": "14ccc54ee15607c6a1f2a57726d3c0c7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 342696,
"upload_time": "2019-02-25T19:32:54",
"url": "https://files.pythonhosted.org/packages/85/5d/fe226c531f52b1a6b3b8fc70b01a60bc72cb017dd79b9d32a0df51fc6f3a/dm.saml2-3.2.2.tar.gz"
}
]
}