{
"info": {
"author": "Andrey Kislyuk",
"author_email": "kislyuk@gmail.com",
"bugtrack_url": null,
"classifiers": [
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
"Operating System :: MacOS :: MacOS X",
"Operating System :: POSIX",
"Programming Language :: Python",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Topic :: Software Development :: Libraries :: Python Modules"
],
"description": "Exile: Python YubiKey AWS signature library\n===========================================\n\n**Exile** stores your AWS access key on your YubiKey device and uses it to sign your AWS API requests, protecting you\nagainst credential theft.\n\nInstallation\n------------\n::\n\n pip install exile\n\nOn Linux, install ``libpcsclite-dev`` (``apt install libpcsclite-dev``, ``yum install pcsc-lite-devel``).\n\nExile requires Python 3.6+. Python 2.7 is not supported.\n\nSynopsis\n--------\n\n.. code-block:: python\n\n import boto3, botocore.auth\n from exile import YKOATH, botocore_signers\n\n def write_active_aws_key_to_yubikey():\n credentials = boto3.Session().get_credentials()\n\n key_name = \"exile-{}-SigV4\".format(credentials.access_key)\n secret = b\"AWS4\" + credentials.secret_key.encode()\n print(\"Writing YubiKey OATH SigV4 credential\", key_name, \"for\", credentials.access_key)\n YKOATH().put(key_name, secret, algorithm=YKOATH.Algorithm.SHA256)\n\n key_name = \"exile-{}-HmacV1\".format(credentials.access_key)\n secret = credentials.secret_key.encode()\n print(\"Writing YubiKey OATH HmacV1 credential\", key_name, \"for\", credentials.access_key)\n YKOATH().put(key_name, secret, algorithm=YKOATH.Algorithm.SHA1)\n\n write_active_aws_key_to_yubikey()\n botocore_signers.install()\n\n print(\"Using YubiKey credential to perform AWS call\")\n print(boto3.client(\"sts\").get_caller_identity())\n\n print(\"Using YubiKey credential to presign an S3 URL\")\n print(boto3.client(\"s3\").generate_presigned_url(ClientMethod=\"get_object\", Params={\"Bucket\": \"foo\", \"Key\": \"bar\"}))\n\nTOTP\n----\n\nBecause exile uses the `YubiKey OATH `_ protocol, you can also use it to store\n`TOTP `_\n`2FA `_ tokens, generate and verify codes::\n\n from exile import TOTP\n TOTP().save(\"google\", \"JBSWY3DPEHPK3PXP\") # Or TOTP.save_otpauth_uri(\"otpauth://...\")\n TOTP().get(\"google\") # Returns a standard 6-digit TOTP code as a string\n TOTP().verify(\"260153\", label=\"google\", at=datetime.datetime.fromtimestamp(1297553958))\n\nAuthors\n-------\n* Andrey Kislyuk\n\nLinks\n-----\n* `Project home page (GitHub) `_\n* `Documentation (Read the Docs) `_\n* `Package distribution (PyPI) `_\n* `Change log `_\n\nBugs\n----\nPlease report bugs, issues, feature requests, etc. on `GitHub `_.\n\nLicense\n-------\nLicensed under the terms of the `Apache License, Version 2.0 `_.\n\n.. image:: https://img.shields.io/travis/com/pyauth/exile.svg\n :target: https://travis-ci.com/pyauth/exile\n.. image:: https://codecov.io/github/pyauth/exile/coverage.svg?branch=master\n :target: https://codecov.io/github/pyauth/exile?branch=master\n.. image:: https://img.shields.io/pypi/v/exile.svg\n :target: https://pypi.python.org/pypi/exile\n.. image:: https://img.shields.io/pypi/l/exile.svg\n :target: https://pypi.python.org/pypi/exile\n.. image:: https://readthedocs.org/projects/exile/badge/?version=latest\n :target: https://exile.readthedocs.io/\n\n\n",
"description_content_type": "",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/pyauth/exile",
"keywords": "",
"license": "Apache Software License",
"maintainer": "",
"maintainer_email": "",
"name": "exile",
"package_url": "https://pypi.org/project/exile/",
"platform": "",
"project_url": "https://pypi.org/project/exile/",
"project_urls": {
"Homepage": "https://github.com/pyauth/exile"
},
"release_url": "https://pypi.org/project/exile/0.1.0/",
"requires_dist": [
"coverage ; extra == 'test'",
"flake8 ; extra == 'test'",
"wheel ; extra == 'test'"
],
"requires_python": "",
"summary": "Python Yubikey AWS signature library",
"version": "0.1.0"
},
"last_serial": 4892249,
"releases": {
"0.0.1": [
{
"comment_text": "",
"digests": {
"md5": "c00ada49de84f260b41e73529152e679",
"sha256": "bb566a6bedee0772bb47d70bd50a0fda2007843bc780d262b561a8ac71eccf5a"
},
"downloads": -1,
"filename": "exile-0.0.1.tar.gz",
"has_sig": false,
"md5_digest": "c00ada49de84f260b41e73529152e679",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1231,
"upload_time": "2019-01-16T18:35:47",
"url": "https://files.pythonhosted.org/packages/96/17/1a4e6799a430da16fedf04deb8f050d320e69343addd286d086303550a02/exile-0.0.1.tar.gz"
}
],
"0.0.2": [
{
"comment_text": "",
"digests": {
"md5": "d98ae036575482ad829c05144b59cab0",
"sha256": "5b40d0c8ad75ef88c8d47535698abd893aea68cf8ae9038287f52354f52b4a26"
},
"downloads": -1,
"filename": "exile-0.0.2-py3-none-any.whl",
"has_sig": true,
"md5_digest": "d98ae036575482ad829c05144b59cab0",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 544467,
"upload_time": "2019-02-26T17:25:25",
"url": "https://files.pythonhosted.org/packages/2f/45/27b6db6e24ad380d1f3b63f4690ff9d5f453b95e019d9cd247c4c4226264/exile-0.0.2-py3-none-any.whl"
}
],
"0.0.3": [
{
"comment_text": "",
"digests": {
"md5": "730fb6191cf7d8e9f8acc0bc5bc37d02",
"sha256": "24576513bf7ece2b0d2b8c219a4bc9bfb916baae48c0cc4b4dc14382841657ef"
},
"downloads": -1,
"filename": "exile-0.0.3-py3-none-any.whl",
"has_sig": true,
"md5_digest": "730fb6191cf7d8e9f8acc0bc5bc37d02",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 14501,
"upload_time": "2019-02-26T17:27:57",
"url": "https://files.pythonhosted.org/packages/d9/17/3000e5728d2200f59cbeb12ea237de7504bd4eba1f60636db7801f30bd0b/exile-0.0.3-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "6694914322760dd0f8dc0328717f9df1",
"sha256": "03a5af0c442baac05ee09a13e8123cdc5cea8b8af7ac326b97caaac9b6f58120"
},
"downloads": -1,
"filename": "exile-0.0.3.tar.gz",
"has_sig": true,
"md5_digest": "6694914322760dd0f8dc0328717f9df1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 10896,
"upload_time": "2019-02-26T17:27:58",
"url": "https://files.pythonhosted.org/packages/a0/00/8d160d196e5355ced7782365b27dd73e77262f1d00014d8072e0b74f0a7b/exile-0.0.3.tar.gz"
}
],
"0.1.0": [
{
"comment_text": "",
"digests": {
"md5": "90129ab75249f2760bd10e31f0048264",
"sha256": "83151846989f90ae40c8612f977110eb712d4b313f0f53ff2dc1a52b6ac70094"
},
"downloads": -1,
"filename": "exile-0.1.0-py2.py3-none-any.whl",
"has_sig": true,
"md5_digest": "90129ab75249f2760bd10e31f0048264",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 16351,
"upload_time": "2019-03-04T00:49:15",
"url": "https://files.pythonhosted.org/packages/80/69/26563e154eb68fddee5e11631621e6b15f7cad8cc26c6dbaf195dff96fa7/exile-0.1.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "c1efc965251dce125a96782316f15fc2",
"sha256": "1b02a94d868f91646da2b6360ef52517e7730e04385deda0c240f1ddf98a1013"
},
"downloads": -1,
"filename": "exile-0.1.0.tar.gz",
"has_sig": true,
"md5_digest": "c1efc965251dce125a96782316f15fc2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 12434,
"upload_time": "2019-03-04T00:49:17",
"url": "https://files.pythonhosted.org/packages/75/6c/0de61a7b001e970d14f4150de4687101964628751aec0ce93bba776c2d14/exile-0.1.0.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "90129ab75249f2760bd10e31f0048264",
"sha256": "83151846989f90ae40c8612f977110eb712d4b313f0f53ff2dc1a52b6ac70094"
},
"downloads": -1,
"filename": "exile-0.1.0-py2.py3-none-any.whl",
"has_sig": true,
"md5_digest": "90129ab75249f2760bd10e31f0048264",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 16351,
"upload_time": "2019-03-04T00:49:15",
"url": "https://files.pythonhosted.org/packages/80/69/26563e154eb68fddee5e11631621e6b15f7cad8cc26c6dbaf195dff96fa7/exile-0.1.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "c1efc965251dce125a96782316f15fc2",
"sha256": "1b02a94d868f91646da2b6360ef52517e7730e04385deda0c240f1ddf98a1013"
},
"downloads": -1,
"filename": "exile-0.1.0.tar.gz",
"has_sig": true,
"md5_digest": "c1efc965251dce125a96782316f15fc2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 12434,
"upload_time": "2019-03-04T00:49:17",
"url": "https://files.pythonhosted.org/packages/75/6c/0de61a7b001e970d14f4150de4687101964628751aec0ce93bba776c2d14/exile-0.1.0.tar.gz"
}
]
}