{ "info": { "author": "Jens Finkhaeuser", "author_email": "jens@finkhaeuser.de", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Plugins", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Security :: Cryptography", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "|Posix Build Status| |Windows Build Status| |Docs| |License|\n|PyPI| |Python Versions| |Package Format| |Package Status|\n\n\nBran provides transcoders for `ASN.1 `__\nserialization and deserialization, and `DER `__-encoding.\n\nThe purpose is to provide a serialization format for native Python types,\nsuch as nested dicts, whose serialization is unambiguous and stable. That\nis two values with the same contents serialize to the same byte string.\n\nThat makes it possible to create hashes and MACs to verify message\nintegrity.\n\nNote that this does *not* make this package a full implementation of ``ASN.1``\nspecs. That is not the goal. The goal is just to have a stable byte\nrepresentation of Python values; ``DER`` in particular is only picked because\nit helps in this.\n\nUsage\n=====\n\nCode\n----\n\nYou just encode some values. In most cases, you'll want to use the ``DERTranscoder``\nclass.\n\n.. code:: python\n\n test = { 'some': { 'nested': 42, 'value': (0, 1, False) } }\n\n from bran import DERTranscoder\n transcoder = DERTranscoder()\n\n encoded = transcoder.encode(test)\n decoded = transcoder.decode(encoded)\n\n assert decoded == test\n\nIn order for bran to be this simple to use, some assumptions are made. The\none with the most impact is that *any* ``collections.Mapping`` will be encoded\nto the same byte representation, which means when decoded, it will become a\nPython ``dict``. Similar assumptions are made for ``collections.Set``\nand ``collections.Sequence``.\n\nFor the purpose of hashing, consider the following code:\n\n.. code:: python\n\n from bran.hash import hasher\n\n test = { 'some': { 'nested': 42, 'value': (0, 1, False) } }\n\n h = hasher()\n h.update(test)\n print(h.hexdigest()) # yields SHA512 hash of the DER serialized test\n\n import hashlib\n h = hasher(hashfunc = hashlib.md5)\n h.update(test)\n print(h.hexdigest()) # yields MD5 hash of the DER serialized test\n\nContributing\n============\n\nSee `CONTRIBUTING.md `__ for details.\n\nLicense\n=======\n\nLicensed under MITNFA (MIT +no-false-attribs) License. See the\n`LICENSE.txt `__ file for details.\n\n.. |Posix Build Status| image:: https://travis-ci.org/jfinkhaeuser/bran.svg?branch=master\n :target: https://travis-ci.org/jfinkhaeuser/bran\n.. |Windows Build Status| image:: https://ci.appveyor.com/api/projects/status/tfl0wl9mvg5dvsid/branch/master?svg=true\n :target: https://ci.appveyor.com/project/jfinkhaeuser/bran\n.. |Docs| image:: https://readthedocs.org/projects/pybran/badge/?version=latest\n :target: http://pybran.readthedocs.io/en/latest/\n.. |License| image:: https://img.shields.io/pypi/l/bran.svg\n :target: https://pypi.python.org/pypi/bran/\n.. |PyPI| image:: https://img.shields.io/pypi/v/bran.svg?maxAge=2592000\n :target: https://pypi.python.org/pypi/bran/\n.. |Package Format| image:: https://img.shields.io/pypi/format/bran.svg\n :target: https://pypi.python.org/pypi/bran/\n.. |Python Versions| image:: https://img.shields.io/pypi/pyversions/bran.svg\n :target: https://pypi.python.org/pypi/bran/\n.. |Package Status| image:: https://img.shields.io/pypi/status/bran.svg\n :target: https://pypi.python.org/pypi/bran/\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jfinkhaeuser/bran", "keywords": "ASN.1 DER serialization", "license": "MITNFA", "maintainer": "", "maintainer_email": "", "name": "bran", "package_url": "https://pypi.org/project/bran/", "platform": "", "project_url": "https://pypi.org/project/bran/", "project_urls": { "Homepage": "https://github.com/jfinkhaeuser/bran" }, "release_url": "https://pypi.org/project/bran/0.4.0/", "requires_dist": [ "six (~=1.11)", "pyasn1 (~=0.4)", "tox (>=2.8); extra == 'dev'", "bump2version (>=0.5); extra == 'dev'", "pytest (>=3.2); extra == 'dev'", "pytest-cov (>=2.5); extra == 'dev'", "flake8 (>=3.4); extra == 'dev'", "pep8-naming (>=0.4); extra == 'dev'", "flake8-quotes (>=0.11); extra == 'dev'", "flake8-docstrings (>=1.1); extra == 'dev'", "sphinx (>=1.6); extra == 'dev'" ], "requires_python": "", "summary": "DER-Encoded ASN.1 Serialization and Deserialization", "version": "0.4.0" }, "last_serial": 3772106, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "82d0c651e09f1956a6973b6261ec2dcf", "sha256": "d9ee0cdf2f01e7c6954c3edb0deb25112640069d2fdbec68e721bfb912511d5b" }, "downloads": -1, "filename": "bran-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "82d0c651e09f1956a6973b6261ec2dcf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8062, "upload_time": "2017-05-22T10:33:24", "url": "https://files.pythonhosted.org/packages/95/ef/f2922b9d822ad6ff3014a387f8406e20a5ed73660bb3d5e666d58f6a4f81/bran-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6946222bc772114ce1bf61fbbd6e9794", "sha256": "45f9cccb9f277455275c03c1746ceff7c5d04abfa92b0cdb560f61779e9b784a" }, "downloads": -1, "filename": "bran-0.1.0.tar.gz", "has_sig": false, "md5_digest": "6946222bc772114ce1bf61fbbd6e9794", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17928, "upload_time": "2017-05-22T10:33:26", "url": "https://files.pythonhosted.org/packages/61/49/8dd80b8f7155420570f3b2f19896338e56b9a7f4397fca281a6f647fea29/bran-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "a8ec071cd29d4164930a858850c77b56", "sha256": "36603eaead45946431d5df850f17c16b0c2041e775f8f256095461a439c4d525" }, "downloads": -1, "filename": "bran-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a8ec071cd29d4164930a858850c77b56", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8064, "upload_time": "2017-06-14T08:42:43", "url": "https://files.pythonhosted.org/packages/f0/e4/f3e21aa73e03fd15cb98880078be93c0c109284997d88a85171225073f92/bran-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "72573b1cf88735e38ca0ae7dfc815ddb", "sha256": "cdc55ac849230ec469ead023fb38897ffb47ba16121f8bc85f2e99547d313e93" }, "downloads": -1, "filename": "bran-0.1.1.tar.gz", "has_sig": false, "md5_digest": "72573b1cf88735e38ca0ae7dfc815ddb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17927, "upload_time": "2017-06-14T08:42:46", "url": "https://files.pythonhosted.org/packages/98/28/14bc11b34bd4cedfd57082c6fb33cb0958b4e4a77ac42cbaa79eeb7955fa/bran-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "915e04aabde94ca29f0c33b50b405ee1", "sha256": "9fb698ead7351f11dbe94968df2c557f7c10c7c7b4040ed6236cc7f3d5170324" }, "downloads": -1, "filename": "bran-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "915e04aabde94ca29f0c33b50b405ee1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8062, "upload_time": "2017-09-13T14:20:04", "url": "https://files.pythonhosted.org/packages/38/39/7d74ea7f35e0ade684202dd9ba3bc668c65132e630cae0dfba7eb3acadcf/bran-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3957c5cad75dc0e2b0bfc5ad4b654bcc", "sha256": "c64a88e4b55b4dcbc28ae0b7a950d29d69d09883de806ef5f40a80a213cf7fae" }, "downloads": -1, "filename": "bran-0.1.2.tar.gz", "has_sig": false, "md5_digest": "3957c5cad75dc0e2b0bfc5ad4b654bcc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17951, "upload_time": "2017-09-13T14:20:07", "url": "https://files.pythonhosted.org/packages/90/04/3409712580f56d66fe606401d3473cd7718dc8ab774486adc72366d11ca5/bran-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "bf2a2a8c86813fd62a502d488a8dab0e", "sha256": "074f1b74414273e29ee048b67f2c8a922a594c04653b3c70fc633bbbfe9a7802" }, "downloads": -1, "filename": "bran-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bf2a2a8c86813fd62a502d488a8dab0e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7898, "upload_time": "2017-09-27T13:51:28", "url": "https://files.pythonhosted.org/packages/26/9a/807f7ba5cb408eb919cd065718f20bc5f6469ce17e7298b1922c99cd2989/bran-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1a45070465520d8a79ae0c1d969bb1e3", "sha256": "ca3ffa121cdfeb0758821d9fe15712003ed5becc2f0d84df8c53920c66687aaf" }, "downloads": -1, "filename": "bran-0.2.0.tar.gz", "has_sig": false, "md5_digest": "1a45070465520d8a79ae0c1d969bb1e3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17990, "upload_time": "2017-09-27T13:51:29", "url": "https://files.pythonhosted.org/packages/b1/b8/deded0c8430431ce78580ffb471e34e64198849e6aa0c490f4d539237700/bran-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "f225e68f80a6515c1726380548032f86", "sha256": "409158d9d5ec21515bb9496801ceceebb8f226b6a9e228656c5cb33e8c814235" }, "downloads": -1, "filename": "bran-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f225e68f80a6515c1726380548032f86", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9070, "upload_time": "2017-09-28T06:40:17", "url": "https://files.pythonhosted.org/packages/60/e6/e745fbe3e59b57ac2301710f09f1d26e8b0cc1a131b58af136bbe438b53b/bran-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "353f226a3617e39a0b28a221d23f6603", "sha256": "46f536730a51b09fcee91fea007284173d366e2ef1ca0c352e241992c8abc424" }, "downloads": -1, "filename": "bran-0.3.0.tar.gz", "has_sig": false, "md5_digest": "353f226a3617e39a0b28a221d23f6603", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18877, "upload_time": "2017-09-28T06:40:18", "url": "https://files.pythonhosted.org/packages/43/1d/57e1d5e78d14585cbe869d6e0b543b44a8e9f1ce9545dc6d171a9981afec/bran-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "52722a2b2ea45f60deb05d92e0a3aee7", "sha256": "24420bfc0282451f9916cb3dce2880cad7a1643f0646b015499e429e59dc2c3f" }, "downloads": -1, "filename": "bran-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "52722a2b2ea45f60deb05d92e0a3aee7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7457, "upload_time": "2018-04-17T07:59:37", "url": "https://files.pythonhosted.org/packages/d0/73/3739af5af55f9e27b612aa8eb678421c1bb19d2daa1984c6330a6717f1f8/bran-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "870b53efdf760a8fc47b760a6e6e8fb3", "sha256": "17086b1339ae7e58771b7fd2407f053e97299a7c0357992cc383b5c7748e2dc3" }, "downloads": -1, "filename": "bran-0.4.0.tar.gz", "has_sig": false, "md5_digest": "870b53efdf760a8fc47b760a6e6e8fb3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19576, "upload_time": "2018-04-17T07:59:38", "url": "https://files.pythonhosted.org/packages/8e/a9/1c9801925c1516b089463381a7db9bada5b021aec0da49366532b730efbd/bran-0.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "52722a2b2ea45f60deb05d92e0a3aee7", "sha256": "24420bfc0282451f9916cb3dce2880cad7a1643f0646b015499e429e59dc2c3f" }, "downloads": -1, "filename": "bran-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "52722a2b2ea45f60deb05d92e0a3aee7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7457, "upload_time": "2018-04-17T07:59:37", "url": "https://files.pythonhosted.org/packages/d0/73/3739af5af55f9e27b612aa8eb678421c1bb19d2daa1984c6330a6717f1f8/bran-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "870b53efdf760a8fc47b760a6e6e8fb3", "sha256": "17086b1339ae7e58771b7fd2407f053e97299a7c0357992cc383b5c7748e2dc3" }, "downloads": -1, "filename": "bran-0.4.0.tar.gz", "has_sig": false, "md5_digest": "870b53efdf760a8fc47b760a6e6e8fb3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19576, "upload_time": "2018-04-17T07:59:38", "url": "https://files.pythonhosted.org/packages/8e/a9/1c9801925c1516b089463381a7db9bada5b021aec0da49366532b730efbd/bran-0.4.0.tar.gz" } ] }