{ "info": { "author": "Theodor Nolte", "author_email": "ctutlz@theno.eu", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "---> **`CT Deployment\nStudy `__** <---\n\n--------------\n\nctutlz\n======\n\nPython utils library and tools for `Certificate\nTransparency `__.\n\n|Build Status| |Supported Python Versions| |PyPI Version|\n\nThis is the first implementation in Python which scrapes the SCTs at the\nTLS handshake by `certificate\nextension `__,\nby `TLS\nextension `__,\nand by `OCSP\nstapling `__\ndirectly using the OpenSSL C-API (without forking subprocesses to call\nany OpenSSL commands).\n\n+-------------------------------------------+\n| \\* `Usage <#usage>`__ |\n+-------------------------------------------+\n| \\* `verify-scts <#verify-scts>`__ |\n+-------------------------------------------+\n| \\* `ctloglist <#ctloglist>`__ |\n+-------------------------------------------+\n| \\* `decompose-cert <#decompose-cert>`__ |\n+-------------------------------------------+\n| \\* `API <#api>`__ |\n+-------------------------------------------+\n| \\* `Installation <#installation>`__ |\n+-------------------------------------------+\n| \\* `Development <#development>`__ |\n+-------------------------------------------+\n| \\* `Fabfile <#fabfile>`__ |\n+-------------------------------------------+\n| \\* `Devel-Commands <#devel-commands>`__ |\n+-------------------------------------------+\n\nUsage\n-----\n\nverify-scts\n~~~~~~~~~~~\n\n::\n\n > verify-scts --help\n\n usage: verify-scts [-h] [--short | --debug]\n [--cert-only | --tls-only | --ocsp-only]\n [--log-list | --latest-logs]\n hostname [hostname ...]\n\n Verify Signed Certificate Timestamps (SCTs) delivered from one or several\n hosts by X.509v3 extension, TLS extension, or OCSP stapling\n\n positional arguments:\n hostname host name of the server (example: 'ritter.vg')\n\n optional arguments:\n -h, --help show this help message and exit\n --short show short results and warnings/errors only\n --debug show more for diagnostic purposes\n --cert-only only verify SCTs included in the certificate\n --tls-only only verify SCTs gathered from TLS handshake\n --ocsp-only only verify SCTs gathered via OCSP request\n --log-list \n filename of a log list in JSON format\n --latest-logs for SCT verification against known CT Logs (compliant\n with Chrome's CT policy) download latest version of\n https://www.certificate-transparency.org/known-\n logs/all_logs_list.json -- use built-in log list\n really_all_logs.json from 2017-08-11 if --latest-logs\n or --log-list are not set\n\nExamples:\n\n::\n\n > verify-scts google.com --short\n\n # google.com\n\n ## SCTs by Certificate\n\n no SCTs\n\n ## SCTs by TLS\n\n ```\n LogID b64 : pLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BA=\n Sign. b64 : MEUCIGUHno90gGUepkOAkIWf0js56ce7FVnq1sXRM+cW8xdzAiEAzTRcHqxnBTTBceBlniPpc8OmyxJQLK6nQY8VW3bUsZk=\n Log found : Google 'Pilot' log\n Result : Verified OK\n ```\n\n ```\n LogID b64 : 3esdK3oNT6Ygi4GtgWhwfi6OnQHVXIiNPRHEzbbsvsw=\n Sign. b64 : MEYCIQDpSgD3XhIQfqmO0IpHIJma/lchgYbT5yLjlVUYDBOspAIhAOjiHIhceJn0zxrfaT36HMDyY55IntNJ0Ur394NJnU8B\n Log found : Symantec log\n Result : Verified OK\n ```\n\n ## SCTs by OCSP\n\n no SCTs\n\n.. code:: bash\n\n > verify-scts ritter.vg sslanalyzer.comodoca.com www.db.com\n # has \u21e7 \u21e7 \u21e7\n # scts by: TLS-extension OCSP-extension certificate (precert)\n\n.. code:: bash\n\n # nice: convert the markdown formatted output into other formats with pandoc\n domain=ritter.vg\n fmt=pdf # {pdf,html,rst,...}\n verify-scts $domain 2>&1 | pandoc --from=markdown -o $domain-scts.$fmt\n\nctloglist\n~~~~~~~~~\n\n::\n\n > ctloglist --help\n\n usage: ctloglist [-h] [-v] [--short | --debug] [--json | --schema]\n\n Download, merge and summarize known logs for Certificate Transparency (CT)\n\n optional arguments:\n -h, --help show this help message and exit\n -v, --version print version number\n --short show short results\n --debug show more for diagnostic purposes\n --json print merged log lists as json\n --schema print json schema\n\n Print output to stdout, warning and errors to stderr. Currently there exist\n three log lists with differing infos: 1. listing of webpage\n https://www.certificate-transparency.org/known-logs 2. log_list.json 3.\n all_logs_list.json. This three log lists will be merged into one list in the\n future.\n\n| Discussion:\n| https://groups.google.com/forum/?fromgroups#!topic/certificate-transparency/zBv7EK0522w\n\nCreated with ``ctloglist``: \\*\n`really\\_all\\_logs.md `__\n\\*\n`really\\_all\\_logs.json `__\n\nExamples:\n\n.. code:: bash\n\n # list really all known logs\n # infos aggregated from:\n # * log_list.json\n # * all_logs.json\n # * from log list webpage\n\n # overview\n > ctloglist --short\n\n # full, aggregated info\n > ctloglist\n\n # write into a json file\n > ctloglist --json > really_all_logs.json\n\n.. code:: bash\n\n # only show inconsistencies of the ct log lists\n > ctloglist 1>/dev/null\n\ndecompose-cert\n~~~~~~~~~~~~~~\n\n::\n\n > decompose-cert --help\n\n usage: decompose-cert [-h] [-v] --cert [--tbscert ]\n [--sign-algo ] [--signature ]\n\n Decompose an ASN.1 certificate into its components tbsCertificate in DER\n format, signatureAlgorithm in DER format, and signatureValue as bytes\n according to https://tools.ietf.org/html/rfc5280#section-4.1\n\n optional arguments:\n -h, --help show this help message and exit\n -v, --version print version number\n --tbscert write extracted tbsCertificate to this file (DER\n encoded)\n --sign-algo \n write extracted signatureAlgorithm to this file (DER\n encoded)\n --signature \n write extracted signatureValue to this file\n\n required arguments:\n --cert Certificate in PEM, Base64, or DER format\n\nAPI\n~~~\n\nImport module in your python code, for example:\n\n.. code:: python\n\n > python3.6\n\n >>> from ctutlz.ctlog import download_log_list\n >>> from ctutlz.scripts.verify_scts import verify_scts_by_tls\n >>> from ctutlz.tls.handshake import do_handshake\n >>>\n >>> ctlogs = download_log_list()\n >>> handshake_res = do_handshake('google.com')\n >>> verifications = verify_scts_by_tls(handshake_res, ctlogs)\n >>> for ver in verifications:\n ... print(f'{ver.verified}: {ver.log.description}')\n ...\n True: Google 'Pilot' log\n True: Symantec log\n >>>\n >>> from ctutlz.rfc6962 import SignedCertificateTimestamp, MerkleTreeLeaf\n\nInstallation\n------------\n\nInstall the latest version of the pypi python package\n`ctutlz `__:\n\n.. code:: bash\n\n pip install ctutlz\n\nDevelopment\n-----------\n\nClone the source code `repository `__:\n\n::\n\n git clone https://github.com/theno/ctutlz.git\n cd ctutlz\n\nFabfile\n~~~~~~~\n\nThe ``fabfile.py`` contains devel-tasks to be executed with\n`Fabric `__ (maybe you need to\n`install `__ it):\n\n::\n\n > fab -l\n\n Available commands:\n\n clean Delete temporary files not under version control.\n pypi Build package and upload to pypi.\n pythons Install latest pythons with pyenv.\n test Run unit tests.\n tox Run tox.\n\n # Show task details, e.g. for task `test`:\n > fab -d test\n\n Run unit tests.\n\n Keyword-Args:\n args: Optional arguments passed to pytest\n py: python version to run the tests against\n\n Example:\n\n fab test:args=-s,py=py27\n\nAt first, set up python versions with\n`pyenv `__ and virtualenvs for\ndevelopment with `tox `__:\n\n::\n\n fab pythons\n fab tox\n\nTox creates virtualenvs of different Python versions (if they not exist\nalready) and runs the unit tests against each virtualenv.\n\nOn Ubuntu 16.04 you must install ``libpython-dev`` and\n``libpython3-dev`` in order to make the tests passing for Python-2.7 and\nPython-3.5:\n\n.. code:: bash\n\n sudo apt-get install libpython-dev libpython3-dev\n\n # Then, rebuild the non-working Python-2.7 and Python-3.5 virtualenv and\n # run the unit tests:\n fab tox:'-e py27 -e py35 --recreate'\n\nDevel-Commands\n~~~~~~~~~~~~~~\n\nRun unit tests against several pythons with tox (needs pythons defined\nin envlist of ``tox.ini`` to be installed with pyenv):\n\n.. code:: bash\n\n python3.6 -m tox\n\n # only against one python version:\n python3.6 -m tox -e py27\n\n # rebuild virtual environments:\n python3.6 -m tox -r\n\nRun unit tests with pytest (uses tox virtualenv, replace ``py36`` by\ne.g. ``py27`` where applicable):\n\n.. code:: bash\n\n PYTHONPATH='.' .tox/py36/bin/python -m pytest\n\n # show output\n PYTHONPATH='.' .tox/py36/bin/python -m pytest -s\n\nRun tool ``verify-scts`` from source:\n\n.. code:: bash\n\n PYTHONPATH='.' .tox/py36/bin/python ctutlz/scripts/verify_scts.py -h\n\nUpdate really\\_all\\_logs\n~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n .tox/py36/bin/ctloglist > ctutlz/really_all_logs.md\n .tox/py36/bin/ctloglist --json > ctutlz/really_all_logs.json\n\n.. |Build Status| image:: https://travis-ci.org/theno/ctutlz.svg?branch=master\n :target: https://travis-ci.org/theno/ctutlz\n.. |Supported Python Versions| image:: https://img.shields.io/pypi/pyversions/ctutlz.svg\n :target: https://pypi.python.org/pypi/ctutlz\n.. |PyPI Version| image:: https://img.shields.io/pypi/v/ctutlz.svg\n :target: https://pypi.python.org/pypi/ctutlz", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/theno/ctutlz", "keywords": "python development utilities library certificate-transparency ct signed-certificate-timestamp sct", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "ctutlz", "package_url": "https://pypi.org/project/ctutlz/", "platform": "", "project_url": "https://pypi.org/project/ctutlz/", "project_urls": { "Homepage": "https://github.com/theno/ctutlz" }, "release_url": "https://pypi.org/project/ctutlz/0.9.7/", "requires_dist": null, "requires_python": "", "summary": "Certificate Transparency utils library and scripts.", "version": "0.9.7" }, "last_serial": 3672576, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "4714601e4747a0a7d621f39587fe79e8", "sha256": "eaada6ae39771eca3b26a975e9ac121634be00c4ea9fd91c9025b1e96ee418ca" }, "downloads": -1, "filename": "ctutlz-0.1.0.tar.gz", "has_sig": false, "md5_digest": "4714601e4747a0a7d621f39587fe79e8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9778, "upload_time": "2017-02-26T22:26:08", "url": "https://files.pythonhosted.org/packages/67/b8/afb609c9c09c8c1fb2bcac57607d0fb6d632c52774130dd6eec4df1ac9c8/ctutlz-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "3cbda8ec3694cd9b302af41c17184d18", "sha256": "54f9ae5d080b5311e52ed8034de53363f87b48b879e0aaf837281c5d198d3135" }, "downloads": -1, "filename": "ctutlz-0.2.0.tar.gz", "has_sig": false, "md5_digest": "3cbda8ec3694cd9b302af41c17184d18", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12867, "upload_time": "2017-03-17T08:03:12", "url": "https://files.pythonhosted.org/packages/f2/80/7da983fe6b38c52f7aa2e90b5c9792a012cb6cc8f4cf637f0de8d3c48833/ctutlz-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "b34099e0b2677a358371e0ed60483f31", "sha256": "aff552cfd08c958aa393f0cc9e554663e7e77953ad0513a7547b283ebf17e0e2" }, "downloads": -1, "filename": "ctutlz-0.3.0.tar.gz", "has_sig": false, "md5_digest": "b34099e0b2677a358371e0ed60483f31", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13357, "upload_time": "2017-03-18T18:49:32", "url": "https://files.pythonhosted.org/packages/df/73/0436b31ffc4b4d3c71309859ac7f70af4068f8f7147993426730fc1e83d9/ctutlz-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "d53b8184bb9604c149c174fa0bf7be4f", "sha256": "33410f672f7f1541af040e704ce89da8bb85f00df247280f8693ab2d7ab536d3" }, "downloads": -1, "filename": "ctutlz-0.4.0.tar.gz", "has_sig": false, "md5_digest": "d53b8184bb9604c149c174fa0bf7be4f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13670, "upload_time": "2017-03-19T18:20:16", "url": "https://files.pythonhosted.org/packages/c6/3c/c73c409c321e4377741822ce7046464abadb2947512859ea932f0273e2d1/ctutlz-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "f0a6e7a00fd0dfe97c223202b1db5943", "sha256": "4dfc89217499b7faec3cf4e7f0c851d056999ed429f8b03423fba0efd7e2df86" }, "downloads": -1, "filename": "ctutlz-0.5.0.tar.gz", "has_sig": false, "md5_digest": "f0a6e7a00fd0dfe97c223202b1db5943", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14410, "upload_time": "2017-03-21T23:52:16", "url": "https://files.pythonhosted.org/packages/55/ce/1dd0074df89c36b993a7ce529b8f911c39748b1de9578446cc369cc22f21/ctutlz-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "9806755ab7930000de7cab2aa7bd0285", "sha256": "a28f5b67350609f1562c9d386faba37e1f037404aebae73898cc493bdd70466f" }, "downloads": -1, "filename": "ctutlz-0.5.1.tar.gz", "has_sig": false, "md5_digest": "9806755ab7930000de7cab2aa7bd0285", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14442, "upload_time": "2017-03-22T00:07:01", "url": "https://files.pythonhosted.org/packages/76/12/5beb9e0914ac13228fb4c9173fd9409ef582996c245a7a80260acb93bff6/ctutlz-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "49a3d7b69d090ce13dcdc698c7b7280f", "sha256": "173ce94b9ed79c6e5d768303ac212ec0e411e888faefbc32d6a833c5120fb82a" }, "downloads": -1, "filename": "ctutlz-0.5.2.tar.gz", "has_sig": false, "md5_digest": "49a3d7b69d090ce13dcdc698c7b7280f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15712, "upload_time": "2017-03-23T09:03:01", "url": "https://files.pythonhosted.org/packages/40/62/9962de755a253f205e74d35bb9ecf179f196a20d1db4d9557811b51b3760/ctutlz-0.5.2.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "42a488d1978dac876f698221154fde84", "sha256": "065e90a8a4f664d7fa3b28449a37a66c922cf40262b6893c5f1af96cb5e42e40" }, "downloads": -1, "filename": "ctutlz-0.6.0.tar.gz", "has_sig": false, "md5_digest": "42a488d1978dac876f698221154fde84", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20690, "upload_time": "2017-03-28T22:43:10", "url": "https://files.pythonhosted.org/packages/3d/4c/575fe65fd07607b90cb636298221e0bff623b5afc822abe69bf3d0866645/ctutlz-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "ad3db37926794deec8dc56c131fc35d1", "sha256": "44167927f6ecc34c1fe183995cb65ba49ecbe3fd201fd0ecef1f126a9e87052a" }, "downloads": -1, "filename": "ctutlz-0.7.0.tar.gz", "has_sig": false, "md5_digest": "ad3db37926794deec8dc56c131fc35d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22163, "upload_time": "2017-06-10T00:36:10", "url": "https://files.pythonhosted.org/packages/00/35/5ae09e120e94620d688f4469e27edc164c39d91cb9f09c5c48a9b35134e6/ctutlz-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "b7609442760d09b41e5d039c814b50f3", "sha256": "4c2914a07ef5e59ee8a716108bf0e87e05f9e032ce4b0da0b5d83064a3c5f075" }, "downloads": -1, "filename": "ctutlz-0.7.1.tar.gz", "has_sig": false, "md5_digest": "b7609442760d09b41e5d039c814b50f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22440, "upload_time": "2017-06-11T18:26:31", "url": "https://files.pythonhosted.org/packages/78/c6/12c05d577d438e531d82d1bf0f00a5ff0a3ec45694d50150481087d79d2b/ctutlz-0.7.1.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "dedc21a8888c9a3c1a216bfcf55b2f8e", "sha256": "d2673bf137c808492732e78856c3b78b1df17c1cd6bee928b16444c71f9be4fb" }, "downloads": -1, "filename": "ctutlz-0.8.0.tar.gz", "has_sig": false, "md5_digest": "dedc21a8888c9a3c1a216bfcf55b2f8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36085, "upload_time": "2017-08-01T21:30:37", "url": "https://files.pythonhosted.org/packages/d1/77/91309b1004b77a9d5755849b67237eeef8456c85eb96b0ec1b724b0ba508/ctutlz-0.8.0.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "50122a56182e0729f08c68d1cc76a5c7", "sha256": "8ae74d3bf72eaf43690209989458118fc5b8b1baffdc30215b77c7a886973e3a" }, "downloads": -1, "filename": "ctutlz-0.8.1.tar.gz", "has_sig": false, "md5_digest": "50122a56182e0729f08c68d1cc76a5c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42017, "upload_time": "2017-08-29T22:30:25", "url": "https://files.pythonhosted.org/packages/57/3e/914c9865b1b479a42c447fa2dc341fc8810c98eeb0eacd8a3a7dadc9d451/ctutlz-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "c6311daf1cbf3a6920f0a16763f654b0", "sha256": "debf1d5a2e7afebfb575de33286b14c04de7f4479111f5ced7db2670d7cf751e" }, "downloads": -1, "filename": "ctutlz-0.8.2.tar.gz", "has_sig": false, "md5_digest": "c6311daf1cbf3a6920f0a16763f654b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38823, "upload_time": "2017-08-30T23:11:18", "url": "https://files.pythonhosted.org/packages/0e/be/f7f01b25e4803dbfa3bb4e8c8a09640ea57fc57c2e3e6cf3dc8b5380692f/ctutlz-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "0770cf007f6cd12457edee50e65d9ca2", "sha256": "a8011abff11442c80eb491c3fcb8f8958e8a70be2e83b928e402ed2e16a13b66" }, "downloads": -1, "filename": "ctutlz-0.8.3.tar.gz", "has_sig": false, "md5_digest": "0770cf007f6cd12457edee50e65d9ca2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41581, "upload_time": "2017-08-31T18:36:52", "url": "https://files.pythonhosted.org/packages/9e/52/2b985657f0d1ab08313f1040bc53f1ff120ac709a53ff6defc9e284de55d/ctutlz-0.8.3.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "dd8761636b6d7c731ca71e1e918c1edd", "sha256": "46724cc5a5c3e5e5805723038481a1fb27f298d4fa1652eb6a4b8281157ebe3f" }, "downloads": -1, "filename": "ctutlz-0.8.4.tar.gz", "has_sig": false, "md5_digest": "dd8761636b6d7c731ca71e1e918c1edd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41618, "upload_time": "2017-08-31T18:48:30", "url": "https://files.pythonhosted.org/packages/db/d9/3e711be12e7961b11246913600fa95ebb74717021bfa908b1837f5e7582d/ctutlz-0.8.4.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "ae9e24436e4fd5470d395fdd2155984d", "sha256": "e9358d676411481cf42d0a4e1828f49c234391b0514a808742184507cdc8998c" }, "downloads": -1, "filename": "ctutlz-0.9.0.tar.gz", "has_sig": false, "md5_digest": "ae9e24436e4fd5470d395fdd2155984d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41888, "upload_time": "2017-09-22T21:47:54", "url": "https://files.pythonhosted.org/packages/3c/e1/0ed44a1f3b54ce2ed62cf57b58a590acb98af902925650b779643fe8c10e/ctutlz-0.9.0.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "45953e0ca2388c584d57adaefb267d9c", "sha256": "e8255833ef72260a54bd36b0ac87037f2f408be61d9067666bfa8fbcc32b9f4d" }, "downloads": -1, "filename": "ctutlz-0.9.1.tar.gz", "has_sig": false, "md5_digest": "45953e0ca2388c584d57adaefb267d9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32474, "upload_time": "2017-10-25T22:14:20", "url": "https://files.pythonhosted.org/packages/1e/b7/31559dd9eed3526635302c1199287b91b1c2de8e1e2c1b8b8cc45c78b760/ctutlz-0.9.1.tar.gz" } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "aaf159f332f32f1fc789ef87cab38e56", "sha256": "2d306bc826c27b425fe2ecd1884872098870d2e5214da1093dff0f38b7280e3c" }, "downloads": -1, "filename": "ctutlz-0.9.2.tar.gz", "has_sig": false, "md5_digest": "aaf159f332f32f1fc789ef87cab38e56", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41889, "upload_time": "2017-10-25T22:55:04", "url": "https://files.pythonhosted.org/packages/bf/d0/f27e1c93cf0484cdf10589cf6f6f9cff6c10de57473dd3337c356df31894/ctutlz-0.9.2.tar.gz" } ], "0.9.3": [ { "comment_text": "", "digests": { "md5": "3725633aeafe29012840debf6b7c9c0f", "sha256": "d4a9d1ebcb576070037013aeb201f4733145af127e5f7d9afb09b91e8fec332c" }, "downloads": -1, "filename": "ctutlz-0.9.3.tar.gz", "has_sig": false, "md5_digest": "3725633aeafe29012840debf6b7c9c0f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42685, "upload_time": "2017-12-01T16:32:26", "url": "https://files.pythonhosted.org/packages/bb/94/b67a0eb74ae64302af9ad9888ee65609f73b001873b7a431a16c275b1d55/ctutlz-0.9.3.tar.gz" } ], "0.9.4": [ { "comment_text": "", "digests": { "md5": "0dc4ed23cae9a8df1d3b7591cc980392", "sha256": "de89518404ed7e45d483161cd91fe6e9652d1ec99d65cef73e3d487b5e54a861" }, "downloads": -1, "filename": "ctutlz-0.9.4.tar.gz", "has_sig": false, "md5_digest": "0dc4ed23cae9a8df1d3b7591cc980392", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42697, "upload_time": "2017-12-01T23:16:52", "url": "https://files.pythonhosted.org/packages/fc/d4/4a3cfc594ab8bb64ba1f12b49203d4b98707ed2ecb594fe4e24937ba3eeb/ctutlz-0.9.4.tar.gz" } ], "0.9.5": [ { "comment_text": "", "digests": { "md5": "aa3a98fc9b13b56198ec6062681cf060", "sha256": "d39785fbfe6824c40b6a7fbccc5de331aa0a7d0841aec88a8e8095506eab3c93" }, "downloads": -1, "filename": "ctutlz-0.9.5.tar.gz", "has_sig": false, "md5_digest": "aa3a98fc9b13b56198ec6062681cf060", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42700, "upload_time": "2017-12-01T23:36:08", "url": "https://files.pythonhosted.org/packages/f3/77/cc0560713346f9e99b85bea19f9761a375842c212f82f24d716685c9abbe/ctutlz-0.9.5.tar.gz" } ], "0.9.6": [ { "comment_text": "", "digests": { "md5": "387d370eb6549542934c715c50261374", "sha256": "075d0ca12018c252c812760878baf4ec8a92a6ee58e433d2ed49c26e074a2f94" }, "downloads": -1, "filename": "ctutlz-0.9.6.tar.gz", "has_sig": false, "md5_digest": "387d370eb6549542934c715c50261374", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43027, "upload_time": "2018-03-03T10:32:21", "url": "https://files.pythonhosted.org/packages/a7/25/a1fa6cfbb87e847e7510a1c7b6921fab62a7ce36b89d1ffe4fd75c46b673/ctutlz-0.9.6.tar.gz" } ], "0.9.7": [ { "comment_text": "", "digests": { "md5": "967aab0c5811d03176c14530e32c4bc4", "sha256": "5f25567ece133c794552b2e350431f212e440ffa0891935c91f83a825810c700" }, "downloads": -1, "filename": "ctutlz-0.9.7.tar.gz", "has_sig": false, "md5_digest": "967aab0c5811d03176c14530e32c4bc4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44186, "upload_time": "2018-03-15T14:03:32", "url": "https://files.pythonhosted.org/packages/22/a2/06c3c7b185dab0b74a7d1996e70df69919389027b706cbcbc499156e9a30/ctutlz-0.9.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "967aab0c5811d03176c14530e32c4bc4", "sha256": "5f25567ece133c794552b2e350431f212e440ffa0891935c91f83a825810c700" }, "downloads": -1, "filename": "ctutlz-0.9.7.tar.gz", "has_sig": false, "md5_digest": "967aab0c5811d03176c14530e32c4bc4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44186, "upload_time": "2018-03-15T14:03:32", "url": "https://files.pythonhosted.org/packages/22/a2/06c3c7b185dab0b74a7d1996e70df69919389027b706cbcbc499156e9a30/ctutlz-0.9.7.tar.gz" } ] }