ECPy
====
ECPy (pronounced ekpy), is a pure python Elliptic Curve library
providing ECDSA, EDDSA (Ed25519), ECSchnorr, Borromean signatures as well as Point
operations.
Full html documentation is available `here <https://cslashm.github.com/ECPy>`_.
**ECDSA sample**
::
from ecpy.curves import Curve,Point
from ecpy.keys import ECPublicKey, ECPrivateKey
from ecpy.ecdsa import ECDSA
cv = Curve.get_curve('secp256k1')
pu_key = ECPublicKey(Point(0x65d5b8bf9ab1801c9f168d4815994ad35f1dcb6ae6c7a1a303966b677b813b00,
0xe6b865e529b8ecbf71cf966e900477d49ced5846d7662dd2dd11ccd55c0aff7f,
cv))
pv_key = ECPrivateKey(0xfb26a4e75eec75544c0f44e937dcf5ee6355c7176600b9688c667e5c283b43c5,
cv)
signer = ECDSA()
sig = signer.sign(b'01234567890123456789012345678912',pv_key)
assert(signer.verify(b'01234567890123456789012345678912',sig,pu_key))
**Point sample**
::
from ecpy.curves import Curve,Point
cv = Curve.get_curve('secp256k1')
P = Point(0x65d5b8bf9ab1801c9f168d4815994ad35f1dcb6ae6c7a1a303966b677b813b00,
0xe6b865e529b8ecbf71cf966e900477d49ced5846d7662dd2dd11ccd55c0aff7f,
cv)
k = 0xfb26a4e75eec75544c0f44e937dcf5ee6355c7176600b9688c667e5c283b43c5
Q = k*P
R = P+Q
History
=======
1.2.5
-----
Fix issue 19
1.2.4
-----
Fix ECDSA when mesaage hash length is greater than domain order length
Move from distutils to setuptools
1.2.3
-----
Fix ECSchnorr when r is greater than order. Main use case is when
using a hash function with bitlength greater than curve size.
1.2.2
-----
Fix ECDSA with rfc6979. Field was used instead of order for max random.
1.2.1
-----
Missing README update
1.2.0
-----
Fix rfc6979. Now conform to RFC and fully compat with python-ecdsa
(https://github.com/warner/python-ecdsa).
1.1.0
-----
Fix DER encoding for length greater than 128
Declare ONE infinity point per curve.
Consider global (non attached to a curve) infinity point as deprecated
Fix infinity point management in ECDSA
Fix issue #13
1.0.1beta
---------
Merge PR11, fixing an overflow with secp521k1
1.0.0beta
---------
Initial 1.x series (Beta)
Quick Install
=============
From Pypi
---------
::
$ pip install ECPy
From Github
-----------
.. _tarball dist:
From tarball dist
`````````````````
Download last dist tarball.
Untar it
::
$ tar xzvf ECPy-M.m.tar.gz
install it (or use it as is...)
::
$ python3 setup.py install
From sources
````````````
Clone the git repository
Rebuild the tarball
::
$ python3 setup.py sdist
Continue with the created `tarball dist`_.
Generate the documentation
==========================
You can regenerate the doc from git clone
::
$ cd doc
$ make singlehtml
Documentation is in build dir
Raw data
{
"_id": null,
"home_page": "https://github.com/cslashm/ECPy",
"name": "ECPy",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "ecdsa eddsa ed25519 ed448 schnorr ecschnorr elliptic curve",
"author": "Cedric Mesnil",
"author_email": "cslashm@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/e0/48/3f8c1a252e3a46fd04e6fabc5e11c933b9c39cf84edd4e7c906e29c23750/ECPy-1.2.5.tar.gz",
"platform": "",
"description": "ECPy\n====\n\nECPy (pronounced ekpy), is a pure python Elliptic Curve library\nproviding ECDSA, EDDSA (Ed25519), ECSchnorr, Borromean signatures as well as Point\noperations.\n\nFull html documentation is available `here <https://cslashm.github.com/ECPy>`_.\n\n\n**ECDSA sample**\n\n::\n\n from ecpy.curves import Curve,Point\n from ecpy.keys import ECPublicKey, ECPrivateKey\n from ecpy.ecdsa import ECDSA\n\n cv = Curve.get_curve('secp256k1')\n pu_key = ECPublicKey(Point(0x65d5b8bf9ab1801c9f168d4815994ad35f1dcb6ae6c7a1a303966b677b813b00,\n 0xe6b865e529b8ecbf71cf966e900477d49ced5846d7662dd2dd11ccd55c0aff7f,\n cv))\n pv_key = ECPrivateKey(0xfb26a4e75eec75544c0f44e937dcf5ee6355c7176600b9688c667e5c283b43c5,\n cv)\n\n\n signer = ECDSA()\n sig = signer.sign(b'01234567890123456789012345678912',pv_key)\n assert(signer.verify(b'01234567890123456789012345678912',sig,pu_key))\n\n**Point sample**\n\n::\n\n from ecpy.curves import Curve,Point\n\n cv = Curve.get_curve('secp256k1')\n P = Point(0x65d5b8bf9ab1801c9f168d4815994ad35f1dcb6ae6c7a1a303966b677b813b00,\n 0xe6b865e529b8ecbf71cf966e900477d49ced5846d7662dd2dd11ccd55c0aff7f,\n cv)\n k = 0xfb26a4e75eec75544c0f44e937dcf5ee6355c7176600b9688c667e5c283b43c5\n Q = k*P\n R = P+Q\n\n\n\nHistory\n=======\n\n1.2.5\n-----\n\nFix issue 19\n\n1.2.4\n-----\n\nFix ECDSA when mesaage hash length is greater than domain order length \n\nMove from distutils to setuptools\n\n1.2.3\n-----\n\nFix ECSchnorr when r is greater than order. Main use case is when\nusing a hash function with bitlength greater than curve size.\n\n1.2.2\n-----\n\nFix ECDSA with rfc6979. Field was used instead of order for max random.\n\n1.2.1\n-----\n\nMissing README update\n\n\n1.2.0\n-----\n\nFix rfc6979. Now conform to RFC and fully compat with python-ecdsa\n(https://github.com/warner/python-ecdsa).\n\n\n1.1.0\n-----\n\nFix DER encoding for length greater than 128\n\n Declare ONE infinity point per curve.\n Consider global (non attached to a curve) infinity point as deprecated\n\nFix infinity point management in ECDSA\n\nFix issue #13\n\n\n\n\n1.0.1beta\n---------\n\nMerge PR11, fixing an overflow with secp521k1\n\n\n1.0.0beta\n---------\n\nInitial 1.x series (Beta)\n\n\nQuick Install\n=============\n\nFrom Pypi\n---------\n\n::\n\n $ pip install ECPy\n\n\n\nFrom Github\n-----------\n\n.. _tarball dist:\n\nFrom tarball dist\n`````````````````\nDownload last dist tarball.\n\nUntar it\n\n::\n\n $ tar xzvf ECPy-M.m.tar.gz\n\ninstall it (or use it as is...)\n\n::\n\n $ python3 setup.py install\n\nFrom sources\n````````````\n\nClone the git repository\n\nRebuild the tarball\n\n::\n\n $ python3 setup.py sdist\n\nContinue with the created `tarball dist`_.\n\n\nGenerate the documentation\n==========================\n\n\nYou can regenerate the doc from git clone\n\n::\n\n $ cd doc\n $ make singlehtml\n\nDocumentation is in build dir\n\n\n\n",
"bugtrack_url": null,
"license": "Apache License - Version 2.0",
"summary": "Pure Pyhton Elliptic Curve Library",
"version": "1.2.5",
"project_urls": {
"Homepage": "https://github.com/cslashm/ECPy"
},
"split_keywords": [
"ecdsa",
"eddsa",
"ed25519",
"ed448",
"schnorr",
"ecschnorr",
"elliptic",
"curve"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "e8354a113189f7138035a21bd255d30dc7bffc77c942c93b7948d2eac2e22429",
"md5": "1c9e6e0584b9fd88d235eda51f9d62a5",
"sha256": "559c92e42406d9d1a6b2b8fc26e6ad7bc985f33903b72f426a56cb1073a25ce3"
},
"downloads": -1,
"filename": "ECPy-1.2.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1c9e6e0584b9fd88d235eda51f9d62a5",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 43075,
"upload_time": "2020-10-26T11:56:13",
"upload_time_iso_8601": "2020-10-26T11:56:13.613139Z",
"url": "https://files.pythonhosted.org/packages/e8/35/4a113189f7138035a21bd255d30dc7bffc77c942c93b7948d2eac2e22429/ECPy-1.2.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e0483f8c1a252e3a46fd04e6fabc5e11c933b9c39cf84edd4e7c906e29c23750",
"md5": "a363ac3bfd65589a7e3c8eca8aa523fc",
"sha256": "9635cffb9b6ecf7fd7f72aea1665829ac74a1d272006d0057d45a621aae20228"
},
"downloads": -1,
"filename": "ECPy-1.2.5.tar.gz",
"has_sig": false,
"md5_digest": "a363ac3bfd65589a7e3c8eca8aa523fc",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 38458,
"upload_time": "2020-10-26T11:56:16",
"upload_time_iso_8601": "2020-10-26T11:56:16.313802Z",
"url": "https://files.pythonhosted.org/packages/e0/48/3f8c1a252e3a46fd04e6fabc5e11c933b9c39cf84edd4e7c906e29c23750/ECPy-1.2.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2020-10-26 11:56:16",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "cslashm",
"github_project": "ECPy",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "ecpy"
}