{ "info": { "author": "Benjamin Dauvergne", "author_email": "bdauvergne@entrouvert.com", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.6", "Topic :: Communications", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "=========\nrfc3161ng\n=========\n\n.. image:: https://img.shields.io/pypi/l/rfc3161ng.svg\n :target: https://raw.githubusercontent.com/trbs/rfc3161ng/master/LICENSE\n\n.. image:: https://travis-ci.org/trbs/rfc3161ng.svg?branch=master\n :alt: Build Status\n :target: https://travis-ci.org/trbs/rfc3161ng\n\n.. image:: https://img.shields.io/pypi/v/rfc3161ng.svg\n :target: https://pypi.python.org/pypi/rfc3161ng/\n :alt: Latest PyPI version\n\n.. image:: https://img.shields.io/pypi/wheel/rfc3161ng.svg\n :target: https://pypi.python.org/pypi/rfc3161ng/\n :alt: Supports Wheel format\n\nA simple client library for cryptographic timestamping service implementing the\nprotocol from RFC3161.\n\nThis started as a fork of https://dev.entrouvert.org/projects/python-rfc3161 and\nhas some additional patches such as Python3 support.\n\nThe latest version of this library is available from\nhttps://github.com/trbs/rfc3161ng/ .\n\n\nPublic providers\n================\n\nThere are several timestamping services around. Here is a list of\npublicly available services you can try:\n\n * http://freetsa.org/tsr\n * http://time.certum.pl\n * http://timestamp.comodoca.com/rfc3161\n * http://timestamp.geotrust.com/tsa\n * http://timestamp.globalsign.com/scripts/timstamp.dll\n * http://tsa.starfieldtech.com\n * https://teszt.e-szigno.hu:440/tsa\n\nExample\n=======\n\n >>> import rfc3161ng\n >>> certificate = open('data/certum_certificate.crt', 'rb').read()\n >>> rt = rfc3161ng.RemoteTimestamper('http://time.certum.pl', certificate=certificate)\n >>> tst = rt.timestamp(data=b'John Doe')\n >>> rt.check(tst, data=b'John Doe')\n True\n >>> rfc3161ng.get_timestamp(tst)\n datetime.datetime(2017, 8, 31, 15, 42, 58, tzinfo=tzutc())\n\n\nVerifying timestamp using OpenSSL\n=================================\n\nOne can verify the timestamp returned by the timeserver by using OpenSSL.\nFor example with:\n\n $ openssl ts -verify -data data_file.txt -in data_file.tsr -CAfile cacert.pem -untrusted tsa.crt\n\nTo save the tsr you can use code similar to:\n\n >>> from pyasn1.codec.der import encoder\n >>> import rfc3161ng\n >>> ...\n >>> timestamper = rfc3161ng.RemoteTimestamper('http://freetsa.org/tsr', certificate=certificate_data)\n >>> tsr = timestamper(data=data_file.read(), return_tsr=True)\n >>> with open(\"data_file.tsr\", \"wb\") as f:\n >>> f.write(encoder.encode(tsr))\n\nAlternatively you can just save the raw `response.content` returned from the certification server.\n\nThere is a test which also covers this in `test_verify_timestamp_response_with_openssl`.\n\n\nAuthors\n=======\n\n * Benjamin Dauvergne \n * Michael Gebetsroither \n * Bas van Oostveen \n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://dev.entrouvert.org/projects/python-rfc3161", "keywords": "", "license": "MIT", "maintainer": "trbs", "maintainer_email": "trbs@trbs.net", "name": "rfc3161ng", "package_url": "https://pypi.org/project/rfc3161ng/", "platform": "any", "project_url": "https://pypi.org/project/rfc3161ng/", "project_urls": { "Homepage": "https://dev.entrouvert.org/projects/python-rfc3161" }, "release_url": "https://pypi.org/project/rfc3161ng/2.1.1/", "requires_dist": [ "pyasn1", "python-dateutil", "pyasn1-modules", "requests", "cryptography" ], "requires_python": "", "summary": "Python implementation of the RFC3161 specification, using pyasn1", "version": "2.1.1" }, "last_serial": 4301764, "releases": { "2.0.1": [ { "comment_text": "", "digests": { "md5": "e8c0b91db27fe4a589abef310a67ffe6", "sha256": "4ed22f42e7a6a559682c1dc841101871ac45bfa2fac2d76bf7df1bc9081a7617" }, "downloads": -1, "filename": "rfc3161ng-2.0.1-py2-none-any.whl", "has_sig": true, "md5_digest": "e8c0b91db27fe4a589abef310a67ffe6", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 9087, "upload_time": "2017-08-31T15:39:10", "url": "https://files.pythonhosted.org/packages/85/5d/654c79a9a8f56bb525e77a15367ac7698b762780cfefc82a42a92ea69680/rfc3161ng-2.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "872c63edc89cd7204d177fe06e7fcb45", "sha256": "640b12d5ee20147f0e1746da6675d9442d4ba264e2e3a4f57af9787d7b8779db" }, "downloads": -1, "filename": "rfc3161ng-2.0.1.tar.gz", "has_sig": true, "md5_digest": "872c63edc89cd7204d177fe06e7fcb45", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14449, "upload_time": "2017-08-31T15:39:12", "url": "https://files.pythonhosted.org/packages/0d/26/af96362c137fde60a773503be5ff51bf925315f939b0279f7ed21541667b/rfc3161ng-2.0.1.tar.gz" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "0c39b9671b49e5a0b0d9d73160782691", "sha256": "0a67320aec2e2c929886ab4aaa35081a1b8bc300d7cfc3ec3a8b7ec4ca2d1cbc" }, "downloads": -1, "filename": "rfc3161ng-2.0.2-py2-none-any.whl", "has_sig": true, "md5_digest": "0c39b9671b49e5a0b0d9d73160782691", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 9120, "upload_time": "2017-08-31T15:45:58", "url": "https://files.pythonhosted.org/packages/27/d9/d1f9c7abd5a185a667fe5b1cff7e250b93f144f9f538541ac238486bd89f/rfc3161ng-2.0.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f7fe2c386d11610b6ecdb4d098add4e8", "sha256": "b73627b2223f67e8d666487f8ec5b71e94e8000a327b2365b633b115396171b2" }, "downloads": -1, "filename": "rfc3161ng-2.0.2.tar.gz", "has_sig": true, "md5_digest": "f7fe2c386d11610b6ecdb4d098add4e8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14447, "upload_time": "2017-08-31T15:46:01", "url": "https://files.pythonhosted.org/packages/4c/1c/5c02ebe3b747e88ab4ec73b3ff2e95dba557d5e19d428e3ae6710f4cc9ab/rfc3161ng-2.0.2.tar.gz" } ], "2.0.3": [ { "comment_text": "", "digests": { "md5": "fe90a73d375d5c4e2affa5f69582e19e", "sha256": "a6d62621c294e2580055e52cfead61f28c461aedae4f95a38aa6f4aeb35f4f3b" }, "downloads": -1, "filename": "rfc3161ng-2.0.3-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "fe90a73d375d5c4e2affa5f69582e19e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9128, "upload_time": "2017-08-31T15:48:31", "url": "https://files.pythonhosted.org/packages/3a/a9/2eac2f042e886516b57f3cff9e66afc7388f4f8e07292418bb26ea41ee06/rfc3161ng-2.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "55e0a99ac4fb3c171bab2916ea75dcdc", "sha256": "91ad1bfd531064ac623cf7e27d2b78e82cc3803a76a99554e2f8e99f5b7ace0e" }, "downloads": -1, "filename": "rfc3161ng-2.0.3.tar.gz", "has_sig": true, "md5_digest": "55e0a99ac4fb3c171bab2916ea75dcdc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14469, "upload_time": "2017-08-31T15:48:33", "url": "https://files.pythonhosted.org/packages/2d/90/d265a5c66f6ef4c3e55b7c59829a0c6215b8b0281698c5ba1ee041edb901/rfc3161ng-2.0.3.tar.gz" } ], "2.0.4": [ { "comment_text": "", "digests": { "md5": "46bda9c7daf7d9e4d4d716a0b66681e9", "sha256": "dc16c928e42266b379257f205ca528584be23a3f0a3b761a4ca280c272c057c6" }, "downloads": -1, "filename": "rfc3161ng-2.0.4-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "46bda9c7daf7d9e4d4d716a0b66681e9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9351, "upload_time": "2017-08-31T23:56:46", "url": "https://files.pythonhosted.org/packages/31/9c/91fce4fd891d94b213036b90a937ced59c56596f27857b4833baeb30f4bf/rfc3161ng-2.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c0c22a7763c6a21a0e3bac5803cdc909", "sha256": "0499be0a6b32a5c4949a64de2b34824897c100303d3e5dbd675f2bb694f216ad" }, "downloads": -1, "filename": "rfc3161ng-2.0.4.tar.gz", "has_sig": true, "md5_digest": "c0c22a7763c6a21a0e3bac5803cdc909", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14973, "upload_time": "2017-08-31T23:56:47", "url": "https://files.pythonhosted.org/packages/57/ad/d24a6d180b321afb90fe04b738062a57b582e3bb5f38ea9c32d9da5e71ae/rfc3161ng-2.0.4.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "3aa9d6ed94a861f63a69cebe3527fa30", "sha256": "e0c867c5440c72b01cebcef609333152ddc8c5dda642112c5a46ab6a3232426c" }, "downloads": -1, "filename": "rfc3161ng-2.1.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "3aa9d6ed94a861f63a69cebe3527fa30", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8771, "upload_time": "2018-09-22T19:29:07", "url": "https://files.pythonhosted.org/packages/e9/81/13d8d1cb52f8d38e7cb40b793f783096c07ebaa672f03acfa07cf1e8c713/rfc3161ng-2.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fbe2f398e44e5f46d77903a43414d18e", "sha256": "a34b841037ff7d7f18c09ec591252b2382c47d47f45da89827f09fa8ed656c9c" }, "downloads": -1, "filename": "rfc3161ng-2.1.0.tar.gz", "has_sig": true, "md5_digest": "fbe2f398e44e5f46d77903a43414d18e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20094, "upload_time": "2018-09-22T19:29:09", "url": "https://files.pythonhosted.org/packages/f5/76/d0ab1ea2d72e4fdfda6fac60b186304ccb93d11147ceb28c50f50efc7b91/rfc3161ng-2.1.0.tar.gz" } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "4886fdc3e84c5a0d3334db9a96caecbd", "sha256": "fd7f887efc993a5a2985a14311fc5e720ae840451e743d2adecbd83be6e27670" }, "downloads": -1, "filename": "rfc3161ng-2.1.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "4886fdc3e84c5a0d3334db9a96caecbd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8809, "upload_time": "2018-09-23T12:58:14", "url": "https://files.pythonhosted.org/packages/12/ea/62d470cc7cdd1210c82798491038b7fab1e4cf5a1704ce96f82cd7ac4011/rfc3161ng-2.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "993e14080f5f629e128999fcd7afa83a", "sha256": "1fe2ec30466d2608fa61f140da3f1e06e8017d6b9f2d5976a906d26638b7b6c5" }, "downloads": -1, "filename": "rfc3161ng-2.1.1.tar.gz", "has_sig": true, "md5_digest": "993e14080f5f629e128999fcd7afa83a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20179, "upload_time": "2018-09-23T12:58:15", "url": "https://files.pythonhosted.org/packages/78/56/5130d8176179627ffd6e5a69d119c5c086351958f52d02a745e8865ff46f/rfc3161ng-2.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4886fdc3e84c5a0d3334db9a96caecbd", "sha256": "fd7f887efc993a5a2985a14311fc5e720ae840451e743d2adecbd83be6e27670" }, "downloads": -1, "filename": "rfc3161ng-2.1.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "4886fdc3e84c5a0d3334db9a96caecbd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8809, "upload_time": "2018-09-23T12:58:14", "url": "https://files.pythonhosted.org/packages/12/ea/62d470cc7cdd1210c82798491038b7fab1e4cf5a1704ce96f82cd7ac4011/rfc3161ng-2.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "993e14080f5f629e128999fcd7afa83a", "sha256": "1fe2ec30466d2608fa61f140da3f1e06e8017d6b9f2d5976a906d26638b7b6c5" }, "downloads": -1, "filename": "rfc3161ng-2.1.1.tar.gz", "has_sig": true, "md5_digest": "993e14080f5f629e128999fcd7afa83a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20179, "upload_time": "2018-09-23T12:58:15", "url": "https://files.pythonhosted.org/packages/78/56/5130d8176179627ffd6e5a69d119c5c086351958f52d02a745e8865ff46f/rfc3161ng-2.1.1.tar.gz" } ] }