{ "info": { "author": "Open Law Library", "author_email": "info@openlawlib.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Security", "Topic :: Software Development" ], "description": "# TAF\n\nTAF (The Archive Framework) is an implementation of archival authentication. In other words, TAF ensures that a git repository can be securely cloned/updated and authenticated. In our case, a git repository is a collection of thousands of XML documents and represents a Library of official legal material, but TAF can be used to secure any git repository, regardless of its content.\n\nA git repository can be compromised in a number of ways:\n\n- an attacker could hack a user's account on a code hosting platform, like GitHub or GitLab,\n- an attacker could hack the hosting platform,\n- an attacker could gain access to a developer's personal computer.\n\nThis attacker could then:\n\n- upload a new GPG key to GitHub,\n- push new commits to any repository,\n- add another authorized user with write access,\n- unprotected the master branch of any of the repositories and force push to it.\n\nTAF's goal is not to prevent any of the attacks listed above from happening, but to detect that an attack took place and cancel an update if that is the case. So, TAF should be used instead of directly calling `git pull` and `git clone`.\n\nTAF's implementation strongly relies on [The Update Framework (TUF](https://theupdateframework.github.io)), which helps developers maintain the security of a software update system and provides a flexible framework and specification that developers can adopt into any software update system.\n\nFurther reading:\n\n1. [UELMA whitepaper](whitepapers/UELMA-Open-Law-White-Paper.pdf)\n1. [TAF implementation and integration with TUF](docs/TUF/tuf-specification.md)\n\n## Installation Steps\n\nFrom _PyPI_\n\n```bash\npip install taf\n```\n\nFrom source:\n\n```bash\npip install -e .\n```\n\nInstall extra dependencies when using _Yubikey_:\n\n```bash\npip install taf[yubikey]\n```\n\n## Running Tests\n\nTo run tests with mocked Yubikey:\n\n```bash\npytest\n```\n\nTo run tests with real Yubikey:\n\n1. Insert **test** Yubikey\n2. Run `taf setup_test_yubikey`\n WARNING: This command will import targets private key to signature slot of your Yubikey, as well as new self-signed x509 certificate!\n3. Run `REAL_YK=True pytest` or `set REAL_YK=True pytest` depending on platform.\n\n## Platform-specific Wheels\n\n1. Open https://dev.azure.com/openlawlibrary/TAF/_build\n2. Click on latest build\n3. Open *Summary* tab\n4. Under *Build artifacts published*, click on *wheels to download zip\n\n## Building Wheels on Ubuntu 16.04 and 18.04\n\n**Binary wheels exists only for macOS, windows-32bit and windows-64bit platforms for python 3.6!**\n\n- Install dependencies\n\n```bash\nsudo add-apt-repository ppa:jonathonf/python-3.6\nsudo apt-get update\nsudo apt-get install python3.6\nsudo apt-get install python3.6-venv\nsudo apt-get install python3.6-dev\nsudo apt-get install swig\nsudo apt-get install libpcsclite-dev\nsudo apt-get install libssl-dev\nsudo apt-get install libykpers-1-dev\n```\n\n- Create virtual environment\n\n```bash\npython3.6 -m venv env\npip install --upgrade pip\npip install wheel\npip install taf\n```\n\n- Test CLI\n\n```bash\ntaf\n```\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/openlawlibrary/taf/tree/master", "keywords": "update updater secure authentication archival", "license": "", "maintainer": "", "maintainer_email": "", "name": "taf", "package_url": "https://pypi.org/project/taf/", "platform": "", "project_url": "https://pypi.org/project/taf/", "project_urls": { "Homepage": "https://github.com/openlawlibrary/taf/tree/master" }, "release_url": "https://pypi.org/project/taf/0.1.7/", "requires_dist": [ "click (==6.7)", "colorama (>=0.3.9cryptography>=2.3.1)", "oll-tuf (==0.11.2.dev9)", "pylint (==2.3.1) ; extra == 'ci'", "bandit (==1.6.0) ; extra == 'ci'", "coverage (==4.5.3) ; extra == 'ci'", "pytest-cov (==2.7.1) ; extra == 'ci'", "autopep8 (==1.4.4) ; extra == 'dev'", "pylint (==2.3.1) ; extra == 'dev'", "bandit (==1.6.0) ; extra == 'dev'", "pytest (==4.5.0) ; extra == 'test'", "yubikey-manager (==3.0.0) ; extra == 'yubikey'" ], "requires_python": "", "summary": "Implementation of archival authentication", "version": "0.1.7" }, "last_serial": 5906445, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "ccf8c84e4ac8b1abbc3d6b7b88cdf306", "sha256": "b8d433d58ec2c0031f9194ca88a2309be367fda4c78fe3ea482f2f1c7c146720" }, "downloads": -1, "filename": "taf-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ccf8c84e4ac8b1abbc3d6b7b88cdf306", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21211, "upload_time": "2019-05-07T00:55:37", "url": "https://files.pythonhosted.org/packages/c2/d3/25ffdf53f568952fe0dbaa246e75c8e5a2969258fb809a6b30018128885e/taf-0.1.0-py3-none-any.whl" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "20f1c4db76dc22e2573c81189e70aab2", "sha256": "fe2553d29a1158a15f098af3131163ffcd2c46e07bde59c5e62047dbe5a046f0" }, "downloads": -1, "filename": "taf-0.1.5-cp36-cp36m-macosx_10_13_x86_64.whl", "has_sig": false, "md5_digest": "20f1c4db76dc22e2573c81189e70aab2", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 262756, "upload_time": "2019-08-29T18:20:30", "url": "https://files.pythonhosted.org/packages/f6/b2/3ed6b0602ff5f26450bd98e1691e446300b67ffc901367f3ac1513c239b2/taf-0.1.5-cp36-cp36m-macosx_10_13_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "162e369429f52862b0abb20c20aa8ad4", "sha256": "ffebee15ed9031d87b97506eea561c8a6023937de01734281ee32db27ae32925" }, "downloads": -1, "filename": "taf-0.1.5-cp36-cp36m-win32.whl", "has_sig": false, "md5_digest": "162e369429f52862b0abb20c20aa8ad4", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 486578, "upload_time": "2019-08-29T18:20:57", "url": "https://files.pythonhosted.org/packages/01/2b/7f93a32c966b5d4a4b58848f1e4687994eb902eacad06053aaf6c6ee7f1e/taf-0.1.5-cp36-cp36m-win32.whl" }, { "comment_text": "", "digests": { "md5": "9315966f15e469f4ad1c836c1dc80102", "sha256": "bb69153b1fb7e7f0daae2e29a54980dc11be063079eb64f4f7994d677ddba21f" }, "downloads": -1, "filename": "taf-0.1.5-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "9315966f15e469f4ad1c836c1dc80102", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 539627, "upload_time": "2019-08-29T18:22:55", "url": "https://files.pythonhosted.org/packages/38/bc/b6967931403b2378c820c461049a5a23e43e20287afd8141f0efbea67660/taf-0.1.5-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "c08ab1f7b5023dbc2fcbd2493b34b3d7", "sha256": "82270c269fadc4476acf75aa4713df440fe6eea55e1a3cb16a3b7a0b2b90a30a" }, "downloads": -1, "filename": "taf-0.1.5.tar.gz", "has_sig": false, "md5_digest": "c08ab1f7b5023dbc2fcbd2493b34b3d7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 241037, "upload_time": "2019-08-29T18:20:32", "url": "https://files.pythonhosted.org/packages/55/f8/693b3f732e389cd7ad6fa1ea2bdd207fb04920dc85a951f0d4c4394e7c73/taf-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "bdcc40ea9368de378c0849733d56989a", "sha256": "834f651b7e42d703a9b677e1c84b4e2ffc8d93060779326161b7d45c3c765c17" }, "downloads": -1, "filename": "taf-0.1.6-cp36-cp36m-macosx_10_13_x86_64.whl", "has_sig": false, "md5_digest": "bdcc40ea9368de378c0849733d56989a", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 331966, "upload_time": "2019-09-05T11:32:58", "url": "https://files.pythonhosted.org/packages/77/14/4c7989375accb932e6fe69ee137d73596fd1612de4bad563ec13559c0c4c/taf-0.1.6-cp36-cp36m-macosx_10_13_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "a7f2f79453a0ea28a5613456c25c3d32", "sha256": "826a137e66a4a2d0c2cec9d49ac6f1f6888ef4ef573d75566b54186c5d98c1bd" }, "downloads": -1, "filename": "taf-0.1.6-cp36-cp36m-win32.whl", "has_sig": false, "md5_digest": "a7f2f79453a0ea28a5613456c25c3d32", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 583556, "upload_time": "2019-09-05T11:34:30", "url": "https://files.pythonhosted.org/packages/9d/58/0be35134161aba85f61efa30af32d4df567ff01fe4f7e1d3115c370d222f/taf-0.1.6-cp36-cp36m-win32.whl" }, { "comment_text": "", "digests": { "md5": "bad10d425a8ec2187d8529488fbc9b96", "sha256": "826e186221a83ebc92786a003f1a47e1d1c6cc9eb903b1a663e3a5addd621142" }, "downloads": -1, "filename": "taf-0.1.6-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "bad10d425a8ec2187d8529488fbc9b96", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 643557, "upload_time": "2019-09-05T11:34:32", "url": "https://files.pythonhosted.org/packages/21/4f/0f04af845026e245da2c61bbb1a467b0b0c6230036c8728d90df93b99fff/taf-0.1.6-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "7b1f34cdb887fe8659e79fe1a91cd322", "sha256": "dc445651eb1537dabb1730ca307e7d388e375526dc5401338a8402f58a39a7bd" }, "downloads": -1, "filename": "taf-0.1.6.tar.gz", "has_sig": false, "md5_digest": "7b1f34cdb887fe8659e79fe1a91cd322", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 310202, "upload_time": "2019-09-05T11:33:00", "url": "https://files.pythonhosted.org/packages/47/82/5573060a2d3e53af331d49207dd547ff6760b593d1bb6e63b7562e730597/taf-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "35558fe8fe5f87b59b2c35c181f408f4", "sha256": "d013613968fe791d91900d1d9137d3b067147572e82c67475bb046cacb67adec" }, "downloads": -1, "filename": "taf-0.1.7-cp36-cp36m-macosx_10_13_x86_64.whl", "has_sig": false, "md5_digest": "35558fe8fe5f87b59b2c35c181f408f4", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 337346, "upload_time": "2019-09-30T10:46:51", "url": "https://files.pythonhosted.org/packages/0d/da/88aa8786dffcad27cd128dc11938425c9bdeaf0336d3363c2eba183a1292/taf-0.1.7-cp36-cp36m-macosx_10_13_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "fa256f81f5f6c82c52edd7160baf0feb", "sha256": "b80865781490446cc72de5566821b7acebb2496d0678c8cf4d77381591fba764" }, "downloads": -1, "filename": "taf-0.1.7-cp36-cp36m-win32.whl", "has_sig": false, "md5_digest": "fa256f81f5f6c82c52edd7160baf0feb", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 583953, "upload_time": "2019-09-30T10:48:20", "url": "https://files.pythonhosted.org/packages/7b/80/4e18814ee49debe13583838f1ed36afac64e8cba2141b19ecf583f51db02/taf-0.1.7-cp36-cp36m-win32.whl" }, { "comment_text": "", "digests": { "md5": "cae70d957b12b8ecc25316fa106990c7", "sha256": "f1f18eef5f72b335ee22952e26c9e0dd29f7d33079116ed796c7075a52c8e26a" }, "downloads": -1, "filename": "taf-0.1.7-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "cae70d957b12b8ecc25316fa106990c7", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 643950, "upload_time": "2019-09-30T10:47:01", "url": "https://files.pythonhosted.org/packages/1a/98/61e1e8b8f76e3dadf48530906cc3758dc49b5f2432ef902e1454814a6265/taf-0.1.7-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "6532f5dab0d180e895d0bd4ce08ec86c", "sha256": "8fe51035a5abad349d73ba2ac9924955f8da89de5cc6646b68dad29266aee040" }, "downloads": -1, "filename": "taf-0.1.7.tar.gz", "has_sig": false, "md5_digest": "6532f5dab0d180e895d0bd4ce08ec86c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 315283, "upload_time": "2019-09-30T10:46:52", "url": "https://files.pythonhosted.org/packages/8e/85/39d847803d142e4e3a50faedf9925112e314efcb77dcbd86b7bcf9fc7805/taf-0.1.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "35558fe8fe5f87b59b2c35c181f408f4", "sha256": "d013613968fe791d91900d1d9137d3b067147572e82c67475bb046cacb67adec" }, "downloads": -1, "filename": "taf-0.1.7-cp36-cp36m-macosx_10_13_x86_64.whl", "has_sig": false, "md5_digest": "35558fe8fe5f87b59b2c35c181f408f4", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 337346, "upload_time": "2019-09-30T10:46:51", "url": "https://files.pythonhosted.org/packages/0d/da/88aa8786dffcad27cd128dc11938425c9bdeaf0336d3363c2eba183a1292/taf-0.1.7-cp36-cp36m-macosx_10_13_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "fa256f81f5f6c82c52edd7160baf0feb", "sha256": "b80865781490446cc72de5566821b7acebb2496d0678c8cf4d77381591fba764" }, "downloads": -1, "filename": "taf-0.1.7-cp36-cp36m-win32.whl", "has_sig": false, "md5_digest": "fa256f81f5f6c82c52edd7160baf0feb", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 583953, "upload_time": "2019-09-30T10:48:20", "url": "https://files.pythonhosted.org/packages/7b/80/4e18814ee49debe13583838f1ed36afac64e8cba2141b19ecf583f51db02/taf-0.1.7-cp36-cp36m-win32.whl" }, { "comment_text": "", "digests": { "md5": "cae70d957b12b8ecc25316fa106990c7", "sha256": "f1f18eef5f72b335ee22952e26c9e0dd29f7d33079116ed796c7075a52c8e26a" }, "downloads": -1, "filename": "taf-0.1.7-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "cae70d957b12b8ecc25316fa106990c7", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 643950, "upload_time": "2019-09-30T10:47:01", "url": "https://files.pythonhosted.org/packages/1a/98/61e1e8b8f76e3dadf48530906cc3758dc49b5f2432ef902e1454814a6265/taf-0.1.7-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "6532f5dab0d180e895d0bd4ce08ec86c", "sha256": "8fe51035a5abad349d73ba2ac9924955f8da89de5cc6646b68dad29266aee040" }, "downloads": -1, "filename": "taf-0.1.7.tar.gz", "has_sig": false, "md5_digest": "6532f5dab0d180e895d0bd4ce08ec86c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 315283, "upload_time": "2019-09-30T10:46:52", "url": "https://files.pythonhosted.org/packages/8e/85/39d847803d142e4e3a50faedf9925112e314efcb77dcbd86b7bcf9fc7805/taf-0.1.7.tar.gz" } ] }