Skip to main content

Fast elliptic curve digital signatures

Reason this release was yanked:

Various architecture's wheel C extensions were improperly built in CI/CD

Project description

PyPI Travis CI Documentation Status

About

This is a python package for doing fast elliptic curve cryptography, specifically digital signatures.

Security

There is no nonce reuse, no branching on secret material, and all points are validated before any operations are performed on them. Timing side challenges are mitigated via Montgomery point multiplication. Nonces are generated per RFC6979. The default curve used throughout the package is P256 which provides 128 bits of security. If you require a higher level of security you can specify the curve parameter in a method to use a curve over a bigger field e.g. P384. All that being said, crypto is tricky and I’m not beyond making mistakes. Please use a more established and reviewed library for security critical applications. Open an issue or email me if you see any security issue or risk with this library.

Python Versions Supported

The initial release of this package was targeted at python2.7. Earlier versions may work but have no guarantee of correctness or stability. As of release 1.2.1+ python3 is supported as well. Due to python2’s EOL on January 1st 2020 release 2.x of this package only supports python3.5+.

Operating Systems Supported

This package is targeted at the Linux and MacOS operating systems. Due to the the dependency on the GMP C library building this package on Windows is difficult and no official support or distributions are provided for Windows OSes. See issue11 for what users have done to get things building.

Supported Primitives

Curves over Prime Fields

Name

Class

Proposed By

P192 / secp192r1

fastecdsa.curve.P192

NIST / NSA

P224 / secp224r1

fastecdsa.curve.P224

NIST / NSA

P256 / secp256r1

fastecdsa.curve.P256

NIST / NSA

P384 / secp384r1

fastecdsa.curve.P384

NIST / NSA

P521 / secp521r1

fastecdsa.curve.P521

NIST / NSA

secp192k1

fastecdsa.curve.secp192k1

Certicom

secp224k1

fastecdsa.curve.secp224k1

Certicom

secp256k1 (bitcoin curve)

fastecdsa.curve.secp256k1

Certicom

brainpoolP160r1

fastecdsa.curve.brainpoolP160r1

BSI

brainpoolP192r1

fastecdsa.curve.brainpoolP192r1

BSI

brainpoolP224r1

fastecdsa.curve.brainpoolP224r1

BSI

brainpoolP256r1

fastecdsa.curve.brainpoolP256r1

BSI

brainpoolP320r1

fastecdsa.curve.brainpoolP320r1

BSI

brainpoolP384r1

fastecdsa.curve.brainpoolP384r1

BSI

brainpoolP512r1

fastecdsa.curve.brainpoolP512r1

BSI

Arbitrary Curves

As of version 1.5.1 construction of arbitrary curves in Weierstrass form (y^2 = x^3 + ax + b (mod p)) is supported. I advise against using custom curves for any security critical applications. It’s up to you to make sure that the parameters you pass here are correct, no validation of the base point is done, and in general no sanity checks are done. Use at your own risk.

from fastecdsa.curve import Curve
curve = Curve(
    name,  # (str): The name of the curve
    p,  # (long): The value of p in the curve equation.
    a,  # (long): The value of a in the curve equation.
    b,  # (long): The value of b in the curve equation.
    q,  # (long): The order of the base point of the curve.
    gx,  # (long): The x coordinate of the base point of the curve.
    gy,  # (long): The y coordinate of the base point of the curve.
    oid  # (str): The object identifier of the curve (optional).
)

Hash Functions

Any hash function in the hashlib module (md5, sha1, sha224, sha256, sha384, sha512) will work, as will any hash function that implements the same interface / core functionality as the those in hashlib. For instance, if you wish to use SHA3 as the hash function the pysha3 package will work with this library as long as it is at version >=1.0b1 (as previous versions didn’t work with the hmac module which is used in nonce generation). Note that sha3_224, sha3_256, sha3_384, sha3_512 are all in hashlib as of python3.6.

Performance

Curves over Prime Fields

Currently it does elliptic curve arithmetic significantly faster than the ecdsa package. You can see the times for 1,000 signature and verification operations over various curves below. These were run on an early 2014 MacBook Air with a 1.4 GHz Intel Core i5.

Curve

fastecdsa time

ecdsa time

Speedup

P192

3.62s

1m35.49s

~26x

P224

4.50s

2m13.42s

~29x

P256

6.15s

2m52.43s

~28x

P384

12.11s

6m21.01s

~31x

P521

22.21s

11m39.53s

~31x

secp256k1

5.92s

2m57.19s

~30x

Benchmarking

If you’d like to benchmark performance on your machine you can do so using the command:

$ python setup.py benchmark

This will use the timeit module to benchmark 1000 signature and verification operations for each curve supported by this package. Alternatively, if you have not cloned the repo but have installed the package via e.g. pip you can use the following command:

$ python -m fastecdsa.benchmark

Installing

You can use pip: $ pip install fastecdsa or clone the repo and use $ python setup.py install. Note that you need to have a C compiler. You also need to have GMP on your system as the underlying C code in this package includes the gmp.h header (and links against gmp via the -lgmp flag). You can install all dependencies as follows:

apt

$ sudo apt-get install python-dev libgmp3-dev

yum

$ sudo yum install python-devel gmp-devel

Usage

Generating Keys

You can use this package to generate keys if you like. Recall that private keys on elliptic curves are integers, and public keys are points i.e. integer pairs.

from fastecdsa import keys, curve

"""The reason there are two ways to generate a keypair is that generating the public key requires
a point multiplication, which can be expensive. That means sometimes you may want to delay
generating the public key until it is actually needed."""

# generate a keypair (i.e. both keys) for curve P256
priv_key, pub_key = keys.gen_keypair(curve.P256)

# generate a private key for curve P256
priv_key = keys.gen_private_key(curve.P256)

# get the public key corresponding to the private key we just generated
pub_key = keys.get_public_key(priv_key, curve.P256)

Signing and Verifying

Some basic usage is shown below:

from fastecdsa import curve, ecdsa, keys
from hashlib import sha384

m = "a message to sign via ECDSA"  # some message

''' use default curve and hash function (P256 and SHA2) '''
private_key = keys.gen_private_key(curve.P256)
public_key = keys.get_public_key(private_key, curve.P256)
# standard signature, returns two integers
r, s = ecdsa.sign(m, private_key)
# should return True as the signature we just generated is valid.
valid = ecdsa.verify((r, s), m, public_key)

''' specify a different hash function to use with ECDSA '''
r, s = ecdsa.sign(m, private_key, hashfunc=sha384)
valid = ecdsa.verify((r, s), m, public_key, hashfunc=sha384)

''' specify a different curve to use with ECDSA '''
private_key = keys.gen_private_key(curve.P224)
public_key = keys.get_public_key(private_key, curve.P224)
r, s = ecdsa.sign(m, private_key, curve=curve.P224)
valid = ecdsa.verify((r, s), m, public_key, curve=curve.P224)

''' using SHA3 via pysha3>=1.0b1 package '''
import sha3  # pip install [--user] pysha3==1.0b1
from hashlib import sha3_256
private_key, public_key = keys.gen_keypair(curve.P256)
r, s = ecdsa.sign(m, private_key, hashfunc=sha3_256)
valid = ecdsa.verify((r, s), m, public_key, hashfunc=sha3_256)

Arbitrary Elliptic Curve Arithmetic

The Point class allows arbitrary arithmetic to be performed over curves. The two main operations are point addition and point multiplication (by a scalar) which can be done via the standard python operators (+ and * respectively):

# example taken from the document below (section 4.3.2):
# https://koclab.cs.ucsb.edu/teaching/cren/docs/w02/nist-routines.pdf

from fastecdsa.curve import P256
from fastecdsa.point import Point

xs = 0xde2444bebc8d36e682edd27e0f271508617519b3221a8fa0b77cab3989da97c9
ys = 0xc093ae7ff36e5380fc01a5aad1e66659702de80f53cec576b6350b243042a256
S = Point(xs, ys, curve=P256)

xt = 0x55a8b00f8da1d44e62f6b3b25316212e39540dc861c89575bb8cf92e35e0986b
yt = 0x5421c3209c2d6c704835d82ac4c3dd90f61a8a52598b9e7ab656e9d8c8b24316
T = Point(xt, yt, curve=P256)

# Point Addition
R = S + T

# Point Subtraction: (xs, ys) - (xt, yt) = (xs, ys) + (xt, -yt)
R = S - T

# Point Doubling
R = S + S  # produces the same value as the operation below
R = 2 * S  # S * 2 works fine too i.e. order doesn't matter

d = 0xc51e4753afdec1e6b6c6a5b992f43f8dd0c7a8933072708b6522468b2ffb06fd

# Scalar Multiplication
R = d * S  # S * d works fine too i.e. order doesn't matter

e = 0xd37f628ece72a462f0145cbefe3f0b355ee8332d37acdd83a358016aea029db7

# Joint Scalar Multiplication
R = d * S + e * T

Importing and Exporting Keys

You can also export keys as files, ASN.1 encoded and formatted per RFC5480 and RFC5915. Both private keys and public keys can be exported as follows:

from fastecdsa.curve import P256
from fastecdsa.keys import export_key, gen_keypair

d, Q = gen_keypair(P256)
# save the private key to disk
export_key(d, curve=P256, filepath='/path/to/exported/p256.key')
# save the public key to disk
export_key(Q, curve=P256, filepath='/path/to/exported/p256.pub')

Keys stored in this format can also be imported. The import function will figure out if the key is a public or private key and parse it accordingly:

from fastecdsa.keys import import_key

# if the file is a private key then parsed_d is a long and parsed_Q is a Point object
# if the file is a public key then parsed_d will be None
parsed_d, parsed_Q = import_key('/path/to/file.key')

Other encoding formats can also be specified, such as SEC1 for public keys. This is done using classes found in the fastecdsa.encoding package, and passing them as keyword args to the key functions:

from fastecdsa.curve import P256
from fastecdsa.encoding.sec1 import SEC1Encoder
from fastecdsa.keys import export_key, gen_keypair, import_key

_, Q = gen_keypair(P256)
export_key(Q, curve=P256, filepath='/path/to/p256.key', encoder=SEC1Encoder)
parsed_Q = import_key('/path/to/p256.key', curve=P256, public=True, decoder=SEC1Encoder)

Encoding Signatures

DER encoding of ECDSA signatures as defined in RFC2459 is also supported. The fastecdsa.encoding.der provides the DEREncoder class which encodes signatures:

from fastecdsa.encoding.der import DEREncoder

r, s = 0xdeadc0de, 0xbadc0de
encoded = DEREncoder.encode_signature(r, s)
decoded_r, decoded_s = DEREncoder.decode_signature(encoded)

Acknowledgements

Thanks to those below for contributing improvements:

  • boneyard93501

  • clouds56

  • m-kus

  • sirk390

  • targon

  • NotStatilko

  • bbbrumley

  • luinxz

  • JJChiDguez

  • J08nY

  • trevor-crypto

  • sylvainpelissier

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

fastecdsa-2.3.1.tar.gz (49.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

fastecdsa-2.3.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (320.1 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

fastecdsa-2.3.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (305.0 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ i686

fastecdsa-2.3.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (289.4 kB view details)

Uploaded PyPymacOS 10.9+ x86-64

fastecdsa-2.3.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (320.1 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

fastecdsa-2.3.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (305.0 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ i686

fastecdsa-2.3.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (289.4 kB view details)

Uploaded PyPymacOS 10.9+ x86-64

fastecdsa-2.3.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (320.4 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

fastecdsa-2.3.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (305.3 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ i686

fastecdsa-2.3.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (289.4 kB view details)

Uploaded PyPymacOS 10.9+ x86-64

fastecdsa-2.3.1-cp311-cp311-musllinux_1_1_x86_64.whl (316.8 kB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

fastecdsa-2.3.1-cp311-cp311-musllinux_1_1_i686.whl (304.0 kB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ i686

fastecdsa-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (347.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

fastecdsa-2.3.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (326.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

fastecdsa-2.3.1-cp311-cp311-macosx_11_0_arm64.whl (58.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

fastecdsa-2.3.1-cp311-cp311-macosx_10_9_x86_64.whl (290.4 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

fastecdsa-2.3.1-cp310-cp310-musllinux_1_1_x86_64.whl (315.0 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

fastecdsa-2.3.1-cp310-cp310-musllinux_1_1_i686.whl (302.3 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ i686

fastecdsa-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (347.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

fastecdsa-2.3.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (324.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686

fastecdsa-2.3.1-cp310-cp310-macosx_11_0_arm64.whl (58.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

fastecdsa-2.3.1-cp310-cp310-macosx_10_9_x86_64.whl (290.4 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

fastecdsa-2.3.1-cp39-cp39-musllinux_1_1_x86_64.whl (314.7 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ x86-64

fastecdsa-2.3.1-cp39-cp39-musllinux_1_1_i686.whl (301.9 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ i686

fastecdsa-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (346.7 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

fastecdsa-2.3.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (324.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ i686

fastecdsa-2.3.1-cp39-cp39-macosx_11_0_arm64.whl (58.4 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

fastecdsa-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl (290.4 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

fastecdsa-2.3.1-cp38-cp38-musllinux_1_1_x86_64.whl (315.1 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ x86-64

fastecdsa-2.3.1-cp38-cp38-musllinux_1_1_i686.whl (302.3 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ i686

fastecdsa-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (348.0 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

fastecdsa-2.3.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (325.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ i686

fastecdsa-2.3.1-cp38-cp38-macosx_11_0_arm64.whl (58.4 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

fastecdsa-2.3.1-cp38-cp38-macosx_10_9_x86_64.whl (290.4 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

fastecdsa-2.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl (317.2 kB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ x86-64

fastecdsa-2.3.1-cp37-cp37m-musllinux_1_1_i686.whl (304.5 kB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ i686

fastecdsa-2.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (347.9 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

fastecdsa-2.3.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (325.5 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ i686

fastecdsa-2.3.1-cp37-cp37m-macosx_10_9_x86_64.whl (290.4 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

File details

Details for the file fastecdsa-2.3.1.tar.gz.

File metadata

  • Download URL: fastecdsa-2.3.1.tar.gz
  • Upload date:
  • Size: 49.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for fastecdsa-2.3.1.tar.gz
Algorithm Hash digest
SHA256 f198ce44f6946cabb02988a9f49d14efc410dba5e211e98321ba9d8737b23ff8
MD5 29736b31060db7ab7af11b4dc64fe50c
BLAKE2b-256 7b524b7a654273518f95cd2a2b31ca2be882f4b3b1718812c1bc90ace06a9c3d

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f8acaef53aade5009547cc41b713be4ad440d63aea9124b4d63ec700527afcb8
MD5 32c803251e6703bdaa3cc98710a637f4
BLAKE2b-256 92342f536ddb95dd7f98d28bc06c5f4337995266d68bfb055db9f08a5c7469c6

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 889b392ac1a2e919017d8e1314ba002141961680395749ded08be29630338fd9
MD5 9ca3bdafd455d8496a54dbc5466ecf4d
BLAKE2b-256 9d856ce53b1514a05b47ba18d7232c199e977eb7701e7fd1640a10d4cd3b6256

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c3d2164f528264dd920f1b4a2b73d80ce79d55f038c4719c9657e2221b177fc4
MD5 298425785e8469295c5f400817c7fc85
BLAKE2b-256 6527a2e44b09a421f3e371c46c85d772707de7b447aad45bdebd70698efd4537

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 74da2ad2cbce164537fec40534dfe989551d2711a957e453e3625cd839de174e
MD5 1d4c78bcf1adb0b05a40d91f457e3b08
BLAKE2b-256 f92a3ff869a77d3975462401c0a9b46cb9134386c6adf4bb4293aeeed06cc826

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 3e667300497808165e2a3e20f6eebaba03a89e3faaa9c591b9fb7a3b4b0f18b3
MD5 0ba0b03abec15b5d0e49cb39c62ea261
BLAKE2b-256 9e21a3fd4c96d7b0f85ff1bee85599e23290d64a8cc58bc63f70a3ed7f1677b7

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 07a44aa03d165cb99d610907f068a87f79ebaacf54ca0e38b493d0286dad5d83
MD5 36c498b6c3af0abadab009abf0b9c657
BLAKE2b-256 e2ae3ba386540401f8200e57f6f4b8370cd1c880f679772551dbe207395079ab

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ec18f4e9e8707cb3d137bd2d0eb8454638de573a12730dfe90bc79129fd195c7
MD5 c1c43c0cf7dc479e2088cd4e78dc45f3
BLAKE2b-256 451855d64185f5cec721b56647536d36963d187ed8b8d5ed1d420233367554ae

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 830c58dc121c3c89e46acaa31d68d7eac8feff5dfd4db3abd9b73948e97cec0f
MD5 ca854526435e7bfa0e5944736adde5b7
BLAKE2b-256 ac950ba719140f26adc1fa4b300b28cb05c8ffb0eb00f8928a4c42d4e82989d9

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 79ca7b8866d7709134e66b8059348d57dd1f76d413c2b19c297fc280b5e26fcc
MD5 464e915fa5e3a49d1e61af51c7558a03
BLAKE2b-256 b826cfbcf3ebe906935c2844864d471f250c1c5d226dd1d9e7152a9938258559

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 8277af54208fdd81e381233944c9f44c7e80691b71d4b4b4212002ea6207afcc
MD5 194f16f91649e252d868ab7cf85b752e
BLAKE2b-256 a0e1e197fde6c5d20dabfe0cc9344e087f3e67e604f2e6d81b38b5e018eb42ac

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp311-cp311-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 9a04ec29970acc418e2f1d0d9db091dcec8fccb70d89b11ef022c6f0984c11f1
MD5 5b0daeb98fbf1af6dd694be654b88b6d
BLAKE2b-256 ef739f7d6791897934d51a9d22b1894e6d7ab87d2d91fee402646dd16b11a258

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 187877d7aa89ebabd322b73c780c02b471c2aaf5f3157a27d23e2231b3da80e7
MD5 f8bf5b3981d7f3660ffa115992121e19
BLAKE2b-256 fab3f220dd80c21a9bb656db3bfa5fc9e77aa67cf7d3916cd2bcf07af4b770f9

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 b8510e2b711b9ca277b9a0df6b9905ebdff5ce0b90d4720ed17ebd4c4e061b25
MD5 72cc000884654d7a80383cac8304f07f
BLAKE2b-256 30a587a27e2d53ad51269df0022752d2934e4f84410c9897982fec233f9e6169

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a92db758fe6583d2b3d94b2f878bf70f111de1c9aef6911627fc03f16391d797
MD5 0eaf5b20c36422c0fd6d4027a4c8eb92
BLAKE2b-256 1d0221f02217ffa463c030bc24a605c305f18595b6fd01f60333761aaeae603a

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 702e94704f503c73f7e267dc1af47c8b865471a447eb7ed5a6cceec231e6b193
MD5 5d224ae36178db81bd750afb4114e3ae
BLAKE2b-256 58052d4652d07b33d2753367c17284bae8d79420b1beae70e04e8326eff3a3c7

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 ae9b5a4f1aeae14ddde7ed65972a6cb17f670ae68018f5a5726b1deb2fa4e2b3
MD5 d08f10c7412239076d17ba7c433d5c8e
BLAKE2b-256 d7d4f7d306c19d03b774e9582d0dc294e2b43c6c18104d47635722e07e8135b1

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 ccc2786fcbcbd756aedf77c3b57a3d1e907b3b16a75e0416c4cd662268549cff
MD5 a05ebec1100cb9a960a2488fe4335ad4
BLAKE2b-256 ee0dd6f479c6ee8ba2e0f4384de1f46f89a329809399efd18a4d3754f5f4d56e

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 93f674d660666700061626a4595d23fb3e580b8bb6f130550827cfb01e2b3ed8
MD5 a1d78f37d22ebdff26fff19b07adb41f
BLAKE2b-256 b486c29251ff80f584af1d1445f3dfcc3b13aa5c281547dfe26685e158fec82a

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 93548a8e9986a09c39c1892a6d38fb49a086b9543eda21720a7b47a1bd5705f5
MD5 a6efff118bddee552d6878d72be33226
BLAKE2b-256 3faef7cd8c1dbc6921f0e31235aff7d41c4c898d8c334c351f475b13d7ad25ab

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2e78c07c082dbc7ab71fd7575cb1311b55de4745b83011d915a5fafa67f422e1
MD5 387a069e23914d8731ac6f00d8778f0a
BLAKE2b-256 4668aa5be0ad55580ca1c25c34b1d51f8deea83946904a7432d12072338103de

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6ab0dd6358251ac91463605b490f0b98bd868e58f3d49df213d2f78d117cb510
MD5 98caa0763dead4317ba9c607eaa3115a
BLAKE2b-256 596270eb64ba05fda534fda6a786aa71eb239a1de23d0b4a3ed162effe311ad4

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 0c3e52eccc915ea0a82dcbcaa520c9cd318d11549102f310ef4c15b61408cec7
MD5 629d7fc7f755ca219663535af928f75e
BLAKE2b-256 44097e545f9a1149b56b38db869cc47ab826ba48d16c7b9a731c8caa55ffdd9e

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 29f8b81409e6c3a5544fc076566acb41cca970ef4a781b76b0728d3baa5322a2
MD5 ce2d94d8967c6806ff2a665ee078fc9b
BLAKE2b-256 a9e41c842596ae8de9ada9c9d6ab6f3ec754003b4aa269e9833bf208ee821592

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 15503bfe39936be90cbb9eb8158925491b5551539dd23b730f5427fd8d23214e
MD5 c12bf62e5c4825d430963516200bf618
BLAKE2b-256 e6d1a56e56b36470ba5a3198c7996b4bc15728cf9310f45c985aebd1d955cb93

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 a2e698bb0fa74490b54ac31bf3e352c3c86d0d8f1120200c7a14db81a8a68432
MD5 4aab173b4574af26313bc23a6d50e4e0
BLAKE2b-256 665bfea98e94be27d22c1a245624fdd30367922a4ea6c6978035652b427913fe

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c6a231ca62f0deb8dd2c816a6c86f4f5725a8957d7b8999d7f13db03a96c65dc
MD5 f26776745f5e3094117c91b47536f56b
BLAKE2b-256 56f6509133450ff500e5e571f86a54e67a275a193e64013033be1d600c5f34e3

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 731102692e3832d4355109f6aa853fc0116fd26ac30e822f288438ada79c7db0
MD5 9d5a43c33fd141aa2722340116d412b6
BLAKE2b-256 ee5398121ca9bf702e2ba8ae4b4fcc06d6e1344fff285aa1685a41e09c000a52

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 f63b68b2bd9b05e061196f3c0ac069737e54afd8550c571de1b19b5958a94abc
MD5 c01ded5a212d76cb85d0dde445168833
BLAKE2b-256 a7e978ebe1316539d54582f18f58e3e71c226481f15483398414ead26cfd9790

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 5f74edad20b23ab3b4788a692bb7ed7e0bf9a064050b13abefb32b188552b514
MD5 dce2a8f58cd79628a9f9a94d6885bcd7
BLAKE2b-256 cb798e353905ffc586d944b97755d4bdc714a7a8de6d93020c3ab45f51f046ff

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d18f7cf428db06da6cb94adb1b9b6e461e5defbf66c0a40f577fc4d93fb1f5cd
MD5 2e63f2fdf94602e2a0e02dd4b985746f
BLAKE2b-256 bae73f4e760481f7804cbff5f71351846374571e30c4406c0830785adedbaa49

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f52ea941b3f6286bd10e07bb4f1c161e94d6de4cc1ec97d3ae6a731543048e45
MD5 dd3b867093df8beaeef8bd92ea63f9dc
BLAKE2b-256 0ecd176cc56f40559af4a574b1c4452aaf898b11aff3567149d0fc4a6e17a2ec

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5238edaa97808b4c542dea9090b724313d6610c7da8b063e67bb6d0c094b4c26
MD5 429edf3a9fa136cc3c7bbad6a11a920c
BLAKE2b-256 711a2f9cd4dab79f5cf912f6f8b514794be49448f437b4794689274d3559cabf

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6036c5a577997f69a20cd6b5a299c3258c0fe4624412e722f5cd6ee37d61d647
MD5 132b4a560cc971d4a01ed0ca2ee72a12
BLAKE2b-256 e3d3ec4083666b9593993c9f98674149919935b1c620ccec6869a531c264f48c

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 065b0f6cca2ca6c520ce996197c3dcefbc75fd2c1222e45cecab639bd5d28261
MD5 98c998d3a7e3ac3a72e8a99941a1cbca
BLAKE2b-256 e3a2833aecdf05caf8b12f7940d2734c4916aacea356e57ca75efdfa260a2c8d

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp37-cp37m-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 8c7bd7592f62af6a3d676a892073e5acb115d91414c42aac64f3a2b5c6bc1177
MD5 71ce8135931ce7ca4f2417dcf9599b7c
BLAKE2b-256 1c0fe8e410d1dab57b0c8d1bfd58dfa13a6efab5f28f2dafc251b6c088285d54

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ee54d56250019efb3084a4c19a317bc815f5c69e9e48546d1e37431e718dba96
MD5 85334623a22a09e56a978b1794609653
BLAKE2b-256 08ee029ddc92b25cf7ef4429b92bdb7a110a81f7e6a26082c9fda57193155389

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 6c44bb4fee7a5cb22dd27794420d3942a84725202177fb32f562afa232f48d36
MD5 701ddd66a023bb940ffb5e5c5cec3ee0
BLAKE2b-256 e3e4d79483adabf0a599804ff5d7c0e711f2da3a413b8bb524a2be53938e93d6

See more details on using hashes here.

File details

Details for the file fastecdsa-2.3.1-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for fastecdsa-2.3.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d08e175f80ce9e8dba8e8a8d0582f1bd5d6d054604b6310d58a725499a1232a4
MD5 141e8254cb9dd7279379ccc543e424e4
BLAKE2b-256 83501aa9a667f4d52ac12d1a81bdfdd80e06d82cc0b622a4dcc58dcf79d20c24

See more details on using hashes here.

Supported by

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