Skip to main content

Pure Python implementation of an elliptic curve cryptosystem based on FIPS 186-3

Project description

pyvecc

Elliptic curve FIPS 186-3

Cloned from the ecc project

Pure Python implementation of an elliptic curve cryptosystem based on FIPS 186-3 Cloned from the ecc project

This is an adaptation from the original to Python Version 3. Also added test suite.

Timings / Performance:

Key generation

192 bits     0.15692 seconds   637.26951/sec
224 bits     0.19632 seconds   509.36798/sec
256 bits     0.25150 seconds   397.61599/sec
384 bits     0.53108 seconds   188.29529/sec
521 bits     1.10281 seconds    90.67742/sec

Signing

192 bits     0.16258 seconds   615.06642/sec
224 bits     0.21078 seconds   474.42906/sec
256 bits     0.26684 seconds   374.75208/sec
384 bits     0.54190 seconds   184.53698/sec
521 bits     1.08671 seconds    92.02118/sec

Verifying

192 bits     0.20362 seconds   491.11330/sec
224 bits     0.26438 seconds   378.24961/sec
256 bits     0.31328 seconds   319.20826/sec
384 bits     0.68741 seconds   145.47447/sec
521 bits     1.39412 seconds    71.72986/sec

Encrypting

192 bits     0.00326 seconds  30689.28075/sec
224 bits     0.00410 seconds  24365.65586/sec
256 bits     0.00512 seconds  19532.92041/sec
384 bits     0.01096 seconds  9122.01827/sec
521 bits     0.02173 seconds  4601.03554/sec

Decrypting

192 bits     0.00178 seconds  56306.94053/sec
224 bits     0.00220 seconds  45407.64317/sec
256 bits     0.00268 seconds  37302.59694/sec
384 bits     0.00549 seconds  18230.55592/sec
521 bits     0.01075 seconds  9300.21508/sec

Getting Started

org2 = Random.new().read(80)
org = base64.b64encode(org2)

    ttt = time.time()
    k = Key.generate(256)
    print("key gen time %.3fms" % ((time.time() - ttt) * 1000) )

    print("org:")
    print(org2)
    ttt = time.time()
    sss = k.encrypt(org)
    print("encrypt time %.3fms" % ((time.time() - ttt) * 1000) )

    ttt = time.time()
    ddd = k.decrypt(sss)
    print("decypt time %.3fms" % ((time.time() - ttt) * 1000) )

    ddd2 = base64.b64decode(ddd)
    print("dec:")
    print(ddd2)

The above command will print:

key gen time 2.669ms
org:
b'\xdb\xef\xcf\xdc\xc3\x03\x0e\xfd\x05\x9c\x8b\xba\xa8\x05\x0e\xd7\x9d(1\xb2\x80\x80t\xd05\xed\x8f\xa4\x81\xa7'
encrypt time 5.411ms
decypt time 2.803ms
dec:
b'\xdb\xef\xcf\xdc\xc3\x03\x0e\xfd\x05\x9c\x8b\xba\xa8\x05\x0e\xd7\x9d(1\xb2\x80\x80t\xd05\xed\x8f\xa4\x81\xa7'

PyTest results

============================= test session starts ==============================
platform linux -- Python 3.10.12, pytest-7.4.3, pluggy-1.0.0
rootdir: /home/peterglen/pgpygtk/pyvecc
collected 2 items

test_encdec.py .                                                         [ 50%]
test_gen.py .                                                            [100%]

Revisions:

rev 0.0.2  Tue 27.Feb.2024     Initial

Errata:

Ported from Python 2 ... Not all is carried over. This port is not 8 bit clean but can be used with a help of hexify utils like base64.

// EOF

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyvecc-0.0.2.tar.gz (23.4 kB view details)

Uploaded Source

Built Distribution

pyvecc-0.0.2-py3-none-any.whl (24.5 kB view details)

Uploaded Python 3

File details

Details for the file pyvecc-0.0.2.tar.gz.

File metadata

  • Download URL: pyvecc-0.0.2.tar.gz
  • Upload date:
  • Size: 23.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 colorama/0.4.4 importlib-metadata/4.6.4 keyring/23.5.0 pkginfo/1.8.2 readme-renderer/34.0 requests-toolbelt/0.9.1 requests/2.28.2 rfc3986/1.5.0 tqdm/4.64.1 urllib3/1.26.5 CPython/3.10.12

File hashes

Hashes for pyvecc-0.0.2.tar.gz
Algorithm Hash digest
SHA256 b28775191355a90ac21cf21f98051172ee1fe9c2ec7c73ed042ca13cfd23a728
MD5 025725778d90ca61116cd0aa02cf6f2e
BLAKE2b-256 d66b3f04e78d0368b53cd307168a2a1a77878643d7dc79a26e5e23afdb3d3e71

See more details on using hashes here.

File details

Details for the file pyvecc-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: pyvecc-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 24.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 colorama/0.4.4 importlib-metadata/4.6.4 keyring/23.5.0 pkginfo/1.8.2 readme-renderer/34.0 requests-toolbelt/0.9.1 requests/2.28.2 rfc3986/1.5.0 tqdm/4.64.1 urllib3/1.26.5 CPython/3.10.12

File hashes

Hashes for pyvecc-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f5fc97aa7c75d99ba425a74e57ed17ad79ef84eedcbeccd979c974a20f2db297
MD5 5b5d2d864efdbe0c4bdd0eb5033918e5
BLAKE2b-256 667f3836c51ceb28e836c89703545e4206b88a8bd6029e79ae4575906add2835

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page