{ "info": { "author": "Russ Garrett", "author_email": "russ@garrett.co.uk", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3" ], "description": "EMV for Python\n==============\n\n[![Build Status](https://travis-ci.org/russss/python-emv.svg?branch=master)](https://travis-ci.org/russss/python-emv)\n\nA Pythonic implementation of the EMV smartcard protocol, which is used\nworldwide for chip-and-PIN payments. This is intended to be readable,\ntested, and heavily cross-referenced with the appropriate sections of the\n[EMV Specification](http://www.emvco.com/specifications.aspx).\n\nThis also includes an implementation of the `EMV CAP` (aka Pinsentry)\nstandard which is known to work for Barclays cards.\n\nInstallation\n------------\n\nYou'll need the pcsc smartcard libraries on your system in order to build the\nsmartcard bindings. On Ubuntu:\n\n sudo apt-get install build-essential swig libpcsclite-dev python-pip python-devel\n\nThen you can install emv from pip:\n\n sudo pip install emv\n\nTo check if everything's working, plug in a smartcard reader, put a bank\ncard in, and run:\n\n emvtool info\n\nIf all goes well, you should see some data about your card.\n\nWarning\n-------\n\nAlthough this tool has been relatively well tested, it's possible to block\nor even damage your card, as well as get in trouble with your card issuer.\nPlease make sure you understand the risks.\n\nCommands marked in the `--help` output with [!] will initiate a transaction\non the card, resulting in a permanent change to the card's internal state\nwhich could potentially be detected by your card issuer, particularly if you\ninitiate many transactions.\n\nCommand Line\n------------\n\nThis library ships with `emvtool` - a simple command-line tool for testing\nand CAP password generation. To fetch some card metadata, run:\n\n emvtool info\n\nIf you have more than one smartcard reader (or smartcard-like devices, such as a YubiKey)\nconnected, you may have to select a specific reader. List all the readers with:\n\n emvtool readers\n\nThen use the `-r` option to select the specific reader ID, e.g.:\n\n emvtool -r 1 info\n\nTo generate an EMV CAP one-time passcode:\n\n emvtool -p cap\n\nYou can also conduct CAP signing and challenge-response:\n\n emvtool -p cap -c \n emvtool -p cap -c -a \n\nLegal Stuff\n-----------\n\n`EMV` is a trademark of [EMVCo](http://www.emvco.com/) and is used\npurely for descriptive purposes. This library is not affiliated with\nEMVCo.", "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/russss/python-emv", "keywords": "smartcard emv payment", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "emv", "package_url": "https://pypi.org/project/emv/", "platform": "", "project_url": "https://pypi.org/project/emv/", "project_urls": { "Homepage": "https://github.com/russss/python-emv" }, "release_url": "https://pypi.org/project/emv/1.0.9/", "requires_dist": null, "requires_python": ">=3.4", "summary": "EMV Smartcard Protocol Library", "version": "1.0.9" }, "last_serial": 5816144, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "f2730158c6c3366a93397ada6c7cfc26", "sha256": "139bf47e5533d29e39ed030ecfeb8b4bce3a79f333962a6eb0aef27f26f98cc0" }, "downloads": -1, "filename": "emv-0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "f2730158c6c3366a93397ada6c7cfc26", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 15230, "upload_time": "2016-12-21T00:59:58", "url": "https://files.pythonhosted.org/packages/28/be/ea74aa2a8aedb5d420ea16a428ef0dd1056cfc0e004ce029bbb18308323b/emv-0.1-py2-none-any.whl" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "6c37e1ca253b4f5fd04a59bc919049e6", "sha256": "4680d0c1b5c3bf45723c358abfcd046128050f75f34dd76256c36c7efb188ccb" }, "downloads": -1, "filename": "emv-0.2-py2-none-any.whl", "has_sig": false, "md5_digest": "6c37e1ca253b4f5fd04a59bc919049e6", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 15246, "upload_time": "2016-12-21T01:06:01", "url": "https://files.pythonhosted.org/packages/5f/db/c7a8b7a018416e644797c3588abc82bb356fe166d76e6bd8b6f5056432dd/emv-0.2-py2-none-any.whl" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "d6fa59bf80c44012404f3f45acbfeadd", "sha256": "0a430b1cbe0f485bb569bcc4e19cac091b15c6f444c9016348343cd89107a459" }, "downloads": -1, "filename": "emv-0.3-py2-none-any.whl", "has_sig": false, "md5_digest": "d6fa59bf80c44012404f3f45acbfeadd", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 19819, "upload_time": "2016-12-22T11:25:22", "url": "https://files.pythonhosted.org/packages/7b/9d/1044569be1aac2575d870397d46b4de0a48c2aaa0d631129e044121eb114/emv-0.3-py2-none-any.whl" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "974ebd91c90648db0272521dde52469a", "sha256": "42c5618062b7c42915ae1ce6434d15b15607e45dbff502236ee7816ec90445d5" }, "downloads": -1, "filename": "emv-0.4-py2-none-any.whl", "has_sig": false, "md5_digest": "974ebd91c90648db0272521dde52469a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 20133, "upload_time": "2017-01-03T11:12:29", "url": "https://files.pythonhosted.org/packages/32/e0/eb90efbd6268cdd7d8b294b3f0f526a97a76dd102fd53f078f12be8ce4f3/emv-0.4-py2-none-any.whl" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "093d33005104a6ffaf1782d3f4687a94", "sha256": "f04ff4bd2ec9b4f3dafec6398a6eed5a573817fd71cc7bb5aa26e65919147081" }, "downloads": -1, "filename": "emv-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "093d33005104a6ffaf1782d3f4687a94", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 19822, "upload_time": "2018-05-30T20:36:14", "url": "https://files.pythonhosted.org/packages/2f/ac/0835bf452c12bb9ac854360234fcceea2aca1d304dd12e3d5815aa1950c4/emv-1.0.1-py3-none-any.whl" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "ba57a3fcc87873eb056dfa7fa2e794da", "sha256": "d0e50dbfd7c3f824ca2d1f1ed2e8b458ea38a5f777f8b384d457d95aa5ac90ec" }, "downloads": -1, "filename": "emv-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "ba57a3fcc87873eb056dfa7fa2e794da", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 21645, "upload_time": "2018-05-30T23:17:42", "url": "https://files.pythonhosted.org/packages/90/e9/8e0a3895a031227feb2ea4e6044e10f083b41ebaaa687cad45016e748acc/emv-1.0.2-py3-none-any.whl" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "7b41ed610bb8ccb63819516f04a88e5d", "sha256": "51d3d8d1e3ab36b191ef09c05162b730e5ffabd6dd4a228322650a4f41e5070d" }, "downloads": -1, "filename": "emv-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "7b41ed610bb8ccb63819516f04a88e5d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 21746, "upload_time": "2018-05-31T08:51:06", "url": "https://files.pythonhosted.org/packages/a5/42/1222b93294007f490f98a034471bac18a7733fabec4e96241928207d5952/emv-1.0.3-py3-none-any.whl" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "17a4c2e1b333c2fa82c3a88da0f6e838", "sha256": "1fa6297d9b81e704265aaf5f8cf4e9aed41e5fc4c5a0b5862bd4a27ea0b3def4" }, "downloads": -1, "filename": "emv-1.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "17a4c2e1b333c2fa82c3a88da0f6e838", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 22968, "upload_time": "2018-05-31T12:17:27", "url": "https://files.pythonhosted.org/packages/95/74/0172dd0bc0cb87b9447c357839e2e83c1902c41a1e4ec2d59b80fff129cb/emv-1.0.4-py3-none-any.whl" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "34aeb2927fa820758da6517439347f65", "sha256": "e2b7b3a9e34d54b0114bd628f484f773dd02e5c90d35d819fe06a45eaef54ffe" }, "downloads": -1, "filename": "emv-1.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "34aeb2927fa820758da6517439347f65", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 23016, "upload_time": "2018-05-31T13:16:42", "url": "https://files.pythonhosted.org/packages/68/ba/4ece1206e8d25a78986227031077d65f804f4df869b4507d7de65833bcf7/emv-1.0.5-py3-none-any.whl" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "c69df199916c38fd3bf3d6b6c447540a", "sha256": "79d0c6ab64a647a994c82389aa0296badbb4b4847badb08aa8e6c211106c2499" }, "downloads": -1, "filename": "emv-1.0.6-py2-none-any.whl", "has_sig": false, "md5_digest": "c69df199916c38fd3bf3d6b6c447540a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3.4", "size": 21342, "upload_time": "2018-06-18T20:48:51", "url": "https://files.pythonhosted.org/packages/dd/dc/5ecdcfa14e0741e98a2f431c02f9febc3c96974adc6d91a8c87fe032331f/emv-1.0.6-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "368b2c9f9888d89221294183414a7ec2", "sha256": "3298975185ce17a4fbb03c7d7ad84daa59513765a1125e72a2f9956dd90e4193" }, "downloads": -1, "filename": "emv-1.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "368b2c9f9888d89221294183414a7ec2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 20928, "upload_time": "2018-06-18T20:55:06", "url": "https://files.pythonhosted.org/packages/6c/8c/47943c30e415fb37d805dc3eb1acce6addb6f0a7c5e6b5da3e28402cf263/emv-1.0.6-py3-none-any.whl" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "d0d4ae78ac6bc90fdd57b3b4ae8d5600", "sha256": "160e7bd4bc292eb8a1d2f3189ef5bb33a1a16cea1d14d43c615907cb06c4ef53" }, "downloads": -1, "filename": "emv-1.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "d0d4ae78ac6bc90fdd57b3b4ae8d5600", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 21712, "upload_time": "2019-02-14T08:54:35", "url": "https://files.pythonhosted.org/packages/3c/1e/9f26957304317cccfb524db9f39e24ba250a0e97808662162c2841eb3f91/emv-1.0.7-py3-none-any.whl" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "35ca4c35b03f0df660375375a6f4efe6", "sha256": "d05db88d8d73a4a579260a86d98c890c179c2e023b01b56f0175ff8f97cb0405" }, "downloads": -1, "filename": "emv-1.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "35ca4c35b03f0df660375375a6f4efe6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 21823, "upload_time": "2019-02-24T20:29:15", "url": "https://files.pythonhosted.org/packages/6a/35/d6ef1d1efc891d3a3dc5a59bb49a19b280c564a1a9728106cc11bf444e7e/emv-1.0.8-py3-none-any.whl" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "6f13517fa2198d91d5eb83cde959b924", "sha256": "847a4d5caec411e57d26860a87e82656b44a1b3fc8f61c6f3e25b6c3f4ba5560" }, "downloads": -1, "filename": "emv-1.0.9.tar.gz", "has_sig": false, "md5_digest": "6f13517fa2198d91d5eb83cde959b924", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 19060, "upload_time": "2019-09-11T17:35:20", "url": "https://files.pythonhosted.org/packages/ec/8e/ca4c5237be8c17774cef76ea9f107bdfc0f138735db3675d2f0a955aaff3/emv-1.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6f13517fa2198d91d5eb83cde959b924", "sha256": "847a4d5caec411e57d26860a87e82656b44a1b3fc8f61c6f3e25b6c3f4ba5560" }, "downloads": -1, "filename": "emv-1.0.9.tar.gz", "has_sig": false, "md5_digest": "6f13517fa2198d91d5eb83cde959b924", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 19060, "upload_time": "2019-09-11T17:35:20", "url": "https://files.pythonhosted.org/packages/ec/8e/ca4c5237be8c17774cef76ea9f107bdfc0f138735db3675d2f0a955aaff3/emv-1.0.9.tar.gz" } ] }