{ "info": { "author": "Wanja Chresta", "author_email": "wanja.hs@chrummibei.ch", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: End Users/Desktop", "Intended Audience :: Legal Industry", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Topic :: Security :: Cryptography", "Topic :: Utilities" ], "description": "# cotary\nCotary allows you to prove that you have a document without releasing it.\n\n# Motivation\nThe following scenario describes the motivation for this simple tool:\nAlice as an idea that she wants to use; either by publishing it in an article or paper or using it in a product. But she needs help; so she asks Bob to collaborate with her. Alice's idea is so good, though, that she is afraid that Bob will steal the idea from her and not involve her.\n\nTo counter this, she needs proof that she had the idea first; but without releasing the idea to the public yet. So she writes a simple draft of her ideas including all important ingredients, calculates a cryptographic hash `H(d)` of this document `d` and stores the document it in a safe place. Before talking to Bob, she publishes the hash. Since `H` is one-way, her ideas are still safe.\n\nIn case Bob tries to use Alice's ideas without her approval, she can at a later stage release the document `d` to the world. Since everyone can check that her previously published hash `H(d)` belongs to the document, she now proved that she had the ideas in the document before talking to Bob.\n\n_Cotary_ (code notary) makes this process for Alice very easy. Simply execute `cotary` on a file and it will publish a cryptographically secure hash on your Twitter account. This tweet with a timestamp and the hash proves you had the file at time of publishing.\n\nThis shows a _very_ simple use case of hash functions and how to use them in practice.\n\n# Installation\ncotary currently only support python3. python2 is not supported. Thus, make sure you use `pip` for your python3 environment; sometime it is called `pip3`. On some systems, the python3 executable is called `python3` instead of `python`. In those cases, you can use `python3 -m pip` instead of just calling `pip` to make sure you have the right version.\n\n## Installation from PyPI\ncotary is [available on PyPI](https://pypi.org/project/cotary/) so installation is very easy using pip:\n\nMake sure you have [pip installed](https://pip.pypa.io/en/stable/installing/) for your python3 environment.\n```\n$ python3 -m pip install --user cotary\n```\nOmit `--user` to install it system-wide.\n\nNow, the `cotary` executable should be in your PATH and ready to use.\n\n## Installation from source\nPip can be used to install from source, as well. The `setup.py` file contains everything pip needs to know, so you can install your local copy of the source easily:\n\nMake sure you have [pip installed](https://pip.pypa.io/en/stable/installing/) for your python3 environment.\n```\n$ python3 -m pip install --user .\n```\nOmit `--user` to install it system-wide.\n\nNow, the `cotary` executable should be in your PATH and ready to use.\n\n# Configuration\nConfiguration of Twitter APIs is done using a yaml config file.\nAt the moment, these are the options. Default config file is in `~/.config/cotary/config.yaml`.\n\n```yaml\ntwitter:\n message: 'I own a file with checksum {checksum} (cotary)'\n # The following are twitter API keys. Get them from https://dev.twitter.com/apps\n consumer:\n key: null\n secret: null\n access_token:\n key: null\n secret: null\n```\n\n# Usage\n```\nusage: cotary [-h] [-c] [--config [CONFIG]] [-q] [file]\n\nPublish the checksum of a file on Twitter.\n\npositional arguments:\n file File for which to publish checksum. If none is given,\n read from stdin\n\noptional arguments:\n -h, --help show this help message and exit\n -c, --calc_only Only calculate and print the checksum, do not publish it\n --config [CONFIG] Use given config instead of ~/.local/cotary/config.yaml\n -q, --quiet Do not print any messages\n```\n\n# Example\n\n```\n$ cotary README.md \nchecksum: openssl_sha256:66ca5ae6f1f3760ad7258cc1d1e906ec8853a0e4da2b2de42f55036cffe8f8a2\nStatus published at 2019-01-16 15:18:38\n```\n\nLeads to this Twitter message:\n\n\n![I own a file with checksum openssl\\_sha256:66ca5ae6f1f3760ad7258cc1d1e906ec8853a0e4da2b2de42f55036cffe8f8a2 (cotary)](screenshot.png)\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/wchresta/cotary", "keywords": "", "license": "LICENSE", "maintainer": "", "maintainer_email": "", "name": "cotary", "package_url": "https://pypi.org/project/cotary/", "platform": "", "project_url": "https://pypi.org/project/cotary/", "project_urls": { "Homepage": "https://github.com/wchresta/cotary", "Issues": "https://github.com/wchresta/cotary/issues", "Source Code": "https://github.com/wchresta/cotary" }, "release_url": "https://pypi.org/project/cotary/0.1.1/", "requires_dist": [ "python-twitter (>=3.0)", "pyyaml (>=3.0)" ], "requires_python": ">=3", "summary": "Prove a file currently exists without disclosing it's content.", "version": "0.1.1" }, "last_serial": 4709370, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "13e61ae6f89c0ed766455c74ba5530b0", "sha256": "d26e9b6626ab4b9bf747af65acb13523429fa57a74ebb9abd13e2baf0d8da159" }, "downloads": -1, "filename": "cotary-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "13e61ae6f89c0ed766455c74ba5530b0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 11615, "upload_time": "2019-01-17T17:59:15", "url": "https://files.pythonhosted.org/packages/6b/ca/cf6760dc9032187b0302af9a31f24f82083ad584d06bc25303aefbf45550/cotary-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "75a3300dcf1389b0d705059e8683fd95", "sha256": "2ebc43e4de6e89c9da986f1aa10b9d845aaadc9c033cc8bd856da967e66d873d" }, "downloads": -1, "filename": "cotary-0.1.tar.gz", "has_sig": false, "md5_digest": "75a3300dcf1389b0d705059e8683fd95", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 6691, "upload_time": "2019-01-17T17:59:16", "url": "https://files.pythonhosted.org/packages/e9/4d/3ffbfa7ec47eb5732f80cd3170e42f66a69ff3132c0c4ef36bb0dd1ef846/cotary-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "8fced487ae562d62ab4aac0d56c72bb5", "sha256": "d8e7f8019efe2a226d8df436a064f425e9b615028b8ffb7a88a4c40e7e13a1c1" }, "downloads": -1, "filename": "cotary-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8fced487ae562d62ab4aac0d56c72bb5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 21760, "upload_time": "2019-01-17T19:14:27", "url": "https://files.pythonhosted.org/packages/c7/db/9d6952416d5e9abaf03f25ea6cb30e753e4cd7a740151e2406209864303f/cotary-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "93dd83d505d7e4431630aaf81adc205d", "sha256": "fe2916fc1a9e2ea3009dbb69cb295ad8db85b6b11beb4f6a84aebc06c77bb5d5" }, "downloads": -1, "filename": "cotary-0.1.1.tar.gz", "has_sig": false, "md5_digest": "93dd83d505d7e4431630aaf81adc205d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 6935, "upload_time": "2019-01-17T19:14:28", "url": "https://files.pythonhosted.org/packages/3b/00/359ddec502fb0904d774850b5705f756a20391be8bccbca243b2b7c23ed0/cotary-0.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8fced487ae562d62ab4aac0d56c72bb5", "sha256": "d8e7f8019efe2a226d8df436a064f425e9b615028b8ffb7a88a4c40e7e13a1c1" }, "downloads": -1, "filename": "cotary-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8fced487ae562d62ab4aac0d56c72bb5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 21760, "upload_time": "2019-01-17T19:14:27", "url": "https://files.pythonhosted.org/packages/c7/db/9d6952416d5e9abaf03f25ea6cb30e753e4cd7a740151e2406209864303f/cotary-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "93dd83d505d7e4431630aaf81adc205d", "sha256": "fe2916fc1a9e2ea3009dbb69cb295ad8db85b6b11beb4f6a84aebc06c77bb5d5" }, "downloads": -1, "filename": "cotary-0.1.1.tar.gz", "has_sig": false, "md5_digest": "93dd83d505d7e4431630aaf81adc205d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 6935, "upload_time": "2019-01-17T19:14:28", "url": "https://files.pythonhosted.org/packages/3b/00/359ddec502fb0904d774850b5705f756a20391be8bccbca243b2b7c23ed0/cotary-0.1.1.tar.gz" } ] }