{ "info": { "author": "William Borgeaud", "author_email": "williamborgeaud@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Perkle: A simple Python 3 implementation of Merkle Trees\nPerkle provides a simple, all python, implementation of Merkle Trees. \n\n## Installation\nThe package can be installed via pip:\n```bash\npip install perkle\n```\nor by cloning this repository.\n\nThe package `pycryptodome` is in the requirements. Make sure that this will not conflict with an installation of the (deprecated) package `pycrypto`.\n\n## Example\nHere is how to create a Merkle Tree of numbers from 0 to 9:\n```python\nfrom Crypto.Hash import SHA256\nfrom perkle import MerkleTree\nfrom binascii import hexlify\ndata_list = [b'0', b'1', b'2', b'3', b'4', b'5', b'6', b'7', b'8', b'9']\nsha256 = lambda x : SHA256.new(x).digest() \nmt = MerkleTree(data_list, sha256, random_padding=False, padding_byte=b'0')\nprint(hexlify(mt.root()))\n#70cc27c03c0444d1dfc63f58e373a2882a7b9f4f7f6ed1a4dfc1a94a5ac5875c\n```\nBy default, we add a random padding to the data to have a power of two leaves. You can make the padding non-random with the `random_padding` parameter to make the results consistent.\n\nNew data can be inserted in the Merkle Tree:\n```python\ndata = b'10'\nmt.insert(data)\nprint(hexlify(mt.root()))\n#3e32b51c76de4b124f1fedfbb4d5a30d117274bf04b538ca7f10434e2f8a35b9\n```\n\nAnd existing data can be updated:\n```python\nnew_data = b'zero'\nmt.update(0,new_data)\nprint(hexlify(mt.root()))\n#d485ca0c92d339d2e8495216cdb420f0e215003fffdb62d09da56d8739c94a11\n```\n\nProofs can be easily generated:\n```python\nindex, proof_hashes = mt.proof(b'7')\n```\nand verified:\n```python\nprint(MerkleTree.verify(b'7',index,proof_hashes,mt.root(),sha256))\n#True\n```\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/wborgeaud/perkle", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "perkle", "package_url": "https://pypi.org/project/perkle/", "platform": "", "project_url": "https://pypi.org/project/perkle/", "project_urls": { "Homepage": "https://github.com/wborgeaud/perkle" }, "release_url": "https://pypi.org/project/perkle/0.0.5/", "requires_dist": [ "pycryptodome" ], "requires_python": "", "summary": "Python 3 implementation of Merkle Trees", "version": "0.0.5" }, "last_serial": 5480448, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "94665f1ce708bfa6a0f46cb4ea7a6d6b", "sha256": "d85b212304ae595e0180bf27f15e1b7a349e261b88f04887b7a63572e270a6a7" }, "downloads": -1, "filename": "perkle-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "94665f1ce708bfa6a0f46cb4ea7a6d6b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5898, "upload_time": "2019-07-03T08:54:33", "url": "https://files.pythonhosted.org/packages/4a/4b/4d9f746ea17bc9480b6b9d2cdcb81ac1ab18821cc5d95a018336c6634dcf/perkle-0.0.1-py3-none-any.whl" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "dbc9bdb4a0e7a2d54b5dce0c1d449e31", "sha256": "2d78f1c582e0d9bcf4cd09b73ade6c4e9dd3674347151cd135ae0e45474aec05" }, "downloads": -1, "filename": "perkle-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "dbc9bdb4a0e7a2d54b5dce0c1d449e31", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5898, "upload_time": "2019-07-03T09:04:00", "url": "https://files.pythonhosted.org/packages/03/0e/0977297a358ae796b5b647ea8f7cc15cd4f6738d6079d79dcb55178716d3/perkle-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dfaa3b9a748fdc96c27321bf64ce21e2", "sha256": "27481131bb1e67928037479120f262774776da3ea94ebec0ef3eada2716868f1" }, "downloads": -1, "filename": "perkle-0.0.2.tar.gz", "has_sig": false, "md5_digest": "dfaa3b9a748fdc96c27321bf64ce21e2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4020, "upload_time": "2019-07-03T09:04:02", "url": "https://files.pythonhosted.org/packages/d3/a7/72acea6e3dfa6e7eac933183a0c37c13b726bc469904ece57d5410d33954/perkle-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "0636f88726852c25e7d3e3bf97682a46", "sha256": "6c9a5cda8ba5022c22028837d042105cbf9e0f9936168e9b0f054df29c0639cb" }, "downloads": -1, "filename": "perkle-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "0636f88726852c25e7d3e3bf97682a46", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5900, "upload_time": "2019-07-03T09:07:43", "url": "https://files.pythonhosted.org/packages/53/ad/4a6f9215ff0c36da687f1a45f37fb4578daa24fce2fe2c5d69fb166190d0/perkle-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fc20e489e63245f52adbd7c18608fda4", "sha256": "9b9ecd4acdbf547dc07c2011245572e7f3024726ba4cf53d503de944b9c6d77b" }, "downloads": -1, "filename": "perkle-0.0.3.tar.gz", "has_sig": false, "md5_digest": "fc20e489e63245f52adbd7c18608fda4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4032, "upload_time": "2019-07-03T09:07:45", "url": "https://files.pythonhosted.org/packages/4e/84/ab7f8db2e50774ade9ec59daad5ed37f4be796cf79ed5d3bda020ad49fcd/perkle-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "a1e4bcf1877cad582b38b36063360952", "sha256": "698d2ace2516c2d238ae0b960632464dac45b17fa59925c87a95bbddefe5ed29" }, "downloads": -1, "filename": "perkle-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "a1e4bcf1877cad582b38b36063360952", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5943, "upload_time": "2019-07-03T09:10:12", "url": "https://files.pythonhosted.org/packages/e9/23/2c3748c0c4544369327b1a504c8d03e5fa83179ffc900126c584d0acae10/perkle-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "07a383aa6e0936aa18e0edebc1066895", "sha256": "a3a34f6eed29faa90bfefc962a3554e327fde367281c1d614a5389533aac5831" }, "downloads": -1, "filename": "perkle-0.0.4.tar.gz", "has_sig": false, "md5_digest": "07a383aa6e0936aa18e0edebc1066895", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4049, "upload_time": "2019-07-03T09:10:14", "url": "https://files.pythonhosted.org/packages/e9/30/58503319368a9b82a3e9f925a5b11aaf67c7a732b59a5cac6e5cb7db5b39/perkle-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "48e9bb62dd244de092a3abff75ba9ea5", "sha256": "f971e7b51100acb60f34cafcf5f69ca0f68c601a1bbee92c31356d4035f8936c" }, "downloads": -1, "filename": "perkle-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "48e9bb62dd244de092a3abff75ba9ea5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6712, "upload_time": "2019-07-03T09:42:36", "url": "https://files.pythonhosted.org/packages/21/bc/da977aceb9fc5a7e4e8293b36cf74a5860882d6af9f72db4fc68ab96955f/perkle-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2e4b4a83ed1900ef570b9c6ca047ed6c", "sha256": "72ab02b13ec786e0a42ca257d773a403b7ce363c6374ebd14bb679997ad3dad9" }, "downloads": -1, "filename": "perkle-0.0.5.tar.gz", "has_sig": false, "md5_digest": "2e4b4a83ed1900ef570b9c6ca047ed6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4965, "upload_time": "2019-07-03T09:42:38", "url": "https://files.pythonhosted.org/packages/3d/9c/bec9e9b4f04b4dffc04943abd653e30e191df2742775464c3887da7a2b4c/perkle-0.0.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "48e9bb62dd244de092a3abff75ba9ea5", "sha256": "f971e7b51100acb60f34cafcf5f69ca0f68c601a1bbee92c31356d4035f8936c" }, "downloads": -1, "filename": "perkle-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "48e9bb62dd244de092a3abff75ba9ea5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6712, "upload_time": "2019-07-03T09:42:36", "url": "https://files.pythonhosted.org/packages/21/bc/da977aceb9fc5a7e4e8293b36cf74a5860882d6af9f72db4fc68ab96955f/perkle-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2e4b4a83ed1900ef570b9c6ca047ed6c", "sha256": "72ab02b13ec786e0a42ca257d773a403b7ce363c6374ebd14bb679997ad3dad9" }, "downloads": -1, "filename": "perkle-0.0.5.tar.gz", "has_sig": false, "md5_digest": "2e4b4a83ed1900ef570b9c6ca047ed6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4965, "upload_time": "2019-07-03T09:42:38", "url": "https://files.pythonhosted.org/packages/3d/9c/bec9e9b4f04b4dffc04943abd653e30e191df2742775464c3887da7a2b4c/perkle-0.0.5.tar.gz" } ] }