{ "info": { "author": "Adriano Di Luzio", "author_email": "adrianodl@hotmail.it", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: Financial and Insurance Industry", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3 :: Only", "Topic :: Office/Business :: Financial", "Topic :: Software Development :: Build Tools" ], "description": "# Arcula\nThis repository contains a proof of concept implementation of Arcula, our design of Secure Hierarchical Deterministic Wallet released under the MIT license.\n\n## Install\nArcula requires Python 3.7 or higher.\n\nYou can install Arcula from the Python Package Index as follows:\n```bash\n$ pip install --user arcula # use \"arcula[dev]\" to install the optional development dependencies\n$ python3 -c 'import arcula; print(arcula.__version__)' # Test the installation\n```\n## Usage\nArcula can be either used as a command line executable or as a library.\n\n### Command line usage\nTo be completed.\n\n### Library usage\nFirst, generate a seed. In our examples we use the [mnemonic package](https://github.com/trezor/python-mnemonic), that implements BIP39 to generate a seed.\n\n```python\nimport mnemonic\n\nm = mnemonic.Mnemonic(language='english').generate()\nprint(m)\nseed = mnemonic.Mnemonic.to_seed(m)\n```\n\nNext, we define the structure of your hierarchy.\nIf you'd like to use the BIP44 standard, you can use our helper defined in `arcula.bip44`, e.g.:\n\n```python\nfrom arcula import bip44\n\nWALLET_CONFIG = {\n 'BCH': (\n # (n. of public, private addresses)\n (1, 2),\n (4, 5),\n (0, 1)\n )\n}\n\nw = bip44.ArculaBIP44(seed, WALLET_CONFIG)\n```\nThis generates a wallet with the hierarchy of the image below.\nThe `ArculaBIP44` class provides the helper methods `get_cold_storage_public_key()` and `get_signing_key_certificate(path)` that respectively return the cold storage public key and the signing key and the authorization certificate of the node specified by `path` (e.g. `m/44'/BCH/1/xpub/3`).\nPlease refer to the Bitcoin Cash example below for detailed usages.\n\nOtherwise, the `arcula.hierarchy.ArculaNode` class represents a node in a Arcula hierarchy and allows creating any custom hierarchy.\nEvery node is identified by a numeric `id` and an additional `tag`.\nIn addition, it holds a list `edges` of references to other nodes.\n\nAs an example, you can instantiate a custom binary hierarchy as follows:\n```python\nfrom arcula.hierarchy import ArculaNode\n\nroot = ArculaNode(id=0, tag='root')\nleft = ArculaNode(id=1, tag='l')\nright = ArculaNode(id=1, tag='r')\nroot.edges = [left, right]\n```\n\nNext, run the key derivation process:\n```python\nfrom arcula import arcula\n\nwallet = arcula.Arcula(root)\nwallet.keygen()\n```\n\nThe instances of `ArculaNode` hold their signing keys and their authorization certificates in the `certificate` and `_signing_key`attributes.\nThe `certificate` is a pair containing both the signature and the message signed.\nE.g.:\n```python\nleft.certificate, left._signing_key\n```\n\n## Examples\n\n### Bitcoin Cash\nThe file [utils/bch_test.py](utils/bch_test.py) provides an example of how to use Arcula to send and receive funds on the Bitcoin Cash test network.\n\nIn our example, we fix the randomness of the seed generation to be `correct horse battery staple`, then we generate a BIP44 compatible wallet having the following structure:\n\n

\n \n

\n\nThe node highlighted in green first received BCH from the testnet faucet, and then returned them back through the following transactions:\n1. [337a67d36b8ecdd6bfbf2db654e54d71fcfd7a295cc97494e47272d305a6f444](https://explorer.bitcoin.com/tbch/tx/337a67d36b8ecdd6bfbf2db654e54d71fcfd7a295cc97494e47272d305a6f444)\n2. [10594853b5dc6d482fc1abf24b68afde04ba71bbf7c780db4c98381064ded302](https://explorer.bitcoin.com/tbch/tx/10594853b5dc6d482fc1abf24b68afde04ba71bbf7c780db4c98381064ded302)\n\n## Documentation\nMost of the Arcula functions are heavily documented.\nOur [academical paper](https://arxiv.org/abs/1906.05919) describes our design insights, the formal definitions of Arcula and of the Deterministic Hierarchical Key Assignment key at its core, a detailed comparison with BIP32, and the formal security proofs.\n\n## Authors\n- Adriano Di Luzio, Sapienza University of Rome and Stevens Institute of Technology.\n- Danilo Francati, Stevens Institute of Technology.\n- Giuseppe Ateniese, Stevens Institute of Technology.\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/aldur/Arcula", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "arcula", "package_url": "https://pypi.org/project/arcula/", "platform": "", "project_url": "https://pypi.org/project/arcula/", "project_urls": { "Homepage": "https://github.com/aldur/Arcula" }, "release_url": "https://pypi.org/project/arcula/1.0.2/", "requires_dist": [ "cryptography", "ecdsa", "bitcash ; extra == 'dev'", "ipdb ; extra == 'dev'", "ipython ; extra == 'dev'", "mnemonic ; extra == 'dev'", "nose ; extra == 'dev'", "requests ; extra == 'dev'" ], "requires_python": ">=3.7", "summary": "Arcula: A Secure Hierarchical Deterministic Wallet", "version": "1.0.2" }, "last_serial": 5411290, "releases": { "1.0.1": [ { "comment_text": "", "digests": { "md5": "c3e3678e5776661218e5054994799c36", "sha256": "b8b2dff14756bd8c04d936ac2d29e6d4af41bb9de888ca7ca24c276f6eb40801" }, "downloads": -1, "filename": "arcula-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c3e3678e5776661218e5054994799c36", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 17387, "upload_time": "2019-06-13T19:49:07", "url": "https://files.pythonhosted.org/packages/dc/4c/e7eff911d59989101ed695f450c87a7a524717ec72733f1391a786d46645/arcula-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c6fdf112ca80399c3b13307259f4855d", "sha256": "edbeb0ef9d51ebb7c771b7f4b2ee6f628ee014a29aa58352a476d7f0013099cd" }, "downloads": -1, "filename": "arcula-1.0.1.tar.gz", "has_sig": false, "md5_digest": "c6fdf112ca80399c3b13307259f4855d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 16908, "upload_time": "2019-06-13T19:49:10", "url": "https://files.pythonhosted.org/packages/92/84/dd7ad1059ac508185d4813eec9f9dfef9abfce6af47b1bbf330d5eb1cf1d/arcula-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "2eac9b07308a7f3e5efc40b15ea3cc0e", "sha256": "c28b1b0bfe97edb081aeb1c625f19a000b6108971afe25b74daa9c69dc83cd57" }, "downloads": -1, "filename": "arcula-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2eac9b07308a7f3e5efc40b15ea3cc0e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 17376, "upload_time": "2019-06-17T18:37:34", "url": "https://files.pythonhosted.org/packages/06/69/610cd403f4152f768560bfe7245e89b82bdd3ffb196c625be4dc42c7b8bf/arcula-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d2cb3078b534ef8b703547c5cbfa7f09", "sha256": "39e1dbc311433a139cc16f4bb7bc45b98699dca352b85582714727805482ff83" }, "downloads": -1, "filename": "arcula-1.0.2.tar.gz", "has_sig": false, "md5_digest": "d2cb3078b534ef8b703547c5cbfa7f09", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 16871, "upload_time": "2019-06-17T18:37:37", "url": "https://files.pythonhosted.org/packages/dc/64/71d3bc40c57a29e0d1af95b03570ae8b7fd0dcae0c4095a5bdc6f4543376/arcula-1.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2eac9b07308a7f3e5efc40b15ea3cc0e", "sha256": "c28b1b0bfe97edb081aeb1c625f19a000b6108971afe25b74daa9c69dc83cd57" }, "downloads": -1, "filename": "arcula-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2eac9b07308a7f3e5efc40b15ea3cc0e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 17376, "upload_time": "2019-06-17T18:37:34", "url": "https://files.pythonhosted.org/packages/06/69/610cd403f4152f768560bfe7245e89b82bdd3ffb196c625be4dc42c7b8bf/arcula-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d2cb3078b534ef8b703547c5cbfa7f09", "sha256": "39e1dbc311433a139cc16f4bb7bc45b98699dca352b85582714727805482ff83" }, "downloads": -1, "filename": "arcula-1.0.2.tar.gz", "has_sig": false, "md5_digest": "d2cb3078b534ef8b703547c5cbfa7f09", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 16871, "upload_time": "2019-06-17T18:37:37", "url": "https://files.pythonhosted.org/packages/dc/64/71d3bc40c57a29e0d1af95b03570ae8b7fd0dcae0c4095a5bdc6f4543376/arcula-1.0.2.tar.gz" } ] }