Skip to main content

FFI bindings to libsecp256k1

Project description

secp256k1-py Build Status

Python FFI bindings for libsecp256k1 (an experimental and optimized C library for EC operations on curve secp256k1).

Previously maintained by Ludvig Broberg, now at https://github.com/rustyrussell/secp256k1-py .

Installation

pip install secp256k1

Precompiled binary packages (wheels)

Precompiled binary wheels is available for Python 2.7, 3.3, 3.4, and 3.5 on Linux. To take advantage of those you need to use pip >= 8.1.0.

In case you don't want to use the binary packages you can prevent pip from using them with the following command:

pip install --no-binary :all: secp256k1

Installation with compilation

If you either can't or don't want to use the binary package options described above read on to learn what is needed to install the source pacakge.

The library bundles its own libsecp256k1 currently, as there is no versioning to allow us to safely determine compatibility with an installed library, especially as we also build all the experimental modules.

For the bundled version to compile successfully you need to have a C compiler as well as the development headers for libffi and libgmp installed.

On Debian / Ubuntu for example the necessary packages are:

  • build-essential
  • automake
  • pkg-config
  • libtool
  • libffi-dev

On OS X the necessary homebrew packages are:

  • automake
  • pkg-config
  • libtool
  • libffi

Command line usage

Generate a private key and show the corresponding public key
$ python -m secp256k1 privkey -p

a1455c78a922c52f391c5784f8ca1457367fa57f9d7a74fdab7d2c90ca05c02e
Public key: 02477ce3b986ab14d123d6c4167b085f4d08c1569963a0201b2ffc7d9d6086d2f3
Sign a message
$ python -m secp256k1 sign \
	-k a1455c78a922c52f391c5784f8ca1457367fa57f9d7a74fdab7d2c90ca05c02e \
	-m hello

3045022100a71d86190354d64e5b3eb2bd656313422cdf7def69bf3669cdbfd09a9162c96e0220713b81f3440bff0b639d2f29b2c48494b812fa89b754b7b6cdc9eaa8027cf369
Check signature
$ python -m secp256k1 checksig \
	-p 02477ce3b986ab14d123d6c4167b085f4d08c1569963a0201b2ffc7d9d6086d2f3 \
	-m hello \
	-s 3045022100a71d86190354d64e5b3eb2bd656313422cdf7def69bf3669cdbfd09a9162c96e0220713b81f3440bff0b639d2f29b2c48494b812fa89b754b7b6cdc9eaa8027cf369

True
Generate a signature that allows recovering the public key
$ python -m secp256k1 signrec \
	-k a1455c78a922c52f391c5784f8ca1457367fa57f9d7a74fdab7d2c90ca05c02e \
	-m hello

515fe95d0780b11633f3352deb064f1517d58f295a99131e9389da8bfacd64422513d0cd4e18a58d9f4873b592afe54cf63e8f294351d1e612c8a297b5255079 1
Recover public key
$ python -m secp256k1 recpub \
	-s 515fe95d0780b11633f3352deb064f1517d58f295a99131e9389da8bfacd64422513d0cd4e18a58d9f4873b592afe54cf63e8f294351d1e612c8a297b5255079 \
	-i 1 \
	-m hello

Public key: 02477ce3b986ab14d123d6c4167b085f4d08c1569963a0201b2ffc7d9d6086d2f3

It is easier to get started with command line, but it is more common to use this as a library. For that, check the next sections.

API

class secp256k1.PrivateKey(privkey, raw)

The PrivateKey class loads or creates a private key by obtaining 32 bytes from urandom and operates over it.

Instantiation parameters
  • privkey=None - generate a new private key if None, otherwise load a private key.
  • raw=True - if True, it is assumed that privkey is just a sequence of bytes, otherwise it is assumed that it is in the DER format. This is not used when privkey is not specified.
Methods and instance attributes
  • pubkey: an instance of secp256k1.PublicKey.

  • private_key: raw bytes for the private key.

  • set_raw_privkey(privkey)
    update the private_key for this instance with the bytes specified by privkey. If privkey is invalid, an Exception is raised. The pubkey is also updated based on the new private key.

  • serialize() -> bytes
    convert the raw bytes present in private key to a hexadecimal string.

  • deserialize(privkey_ser) -> bytes
    convert from a hexadecimal string to raw bytes and update the pubkey and private_key for this instance.

  • tweak_add(scalar) -> bytes
    tweak the current private key by adding a 32 byte scalar to it and return a new raw private key composed of 32 bytes.

  • tweak_mul(scalar) -> bytes
    tweak the current private key by multiplying it by a 32 byte scalar and return a new raw private key composed of 32 bytes.

  • ecdsa_sign(msg, raw=False, digest=hashlib.sha256) -> internal object
    by default, create an ECDSA-SHA256 signature from the bytes in msg. If raw is True, then the digest function is not applied over msg, otherwise the digest must produce 256 bits or an Exception will be raised.

    The returned object is a structure from the C lib. If you want to store it (on a disk or similar), use ecdsa_serialize and later on use ecdsa_deserialize when loading.

  • ecdsa_sign_recoverable(msg, raw=False, digest=hashlib.sha256) -> internal object
    create a recoverable ECDSA signature. See ecdsa_sign for parameters description.

  • schnorr_sign(msg, bip340tag, raw=False) -> bytes

create a BIP-340 signature for msg; bip340tag should be a string or byte value which distinguishes this usage from any other usage of signatures (e.g. your program name, or full protocol name). If raw is specified, then bip340tag is not used, and the msg (usually a 32-byte hash) is signed directly.

It produces non-malleable 64-byte signatures which support batch validation.

class secp256k1.PublicKey(pubkey, raw)

The PublicKey class loads an existing public key and operates over it.

Instantiation parameters
  • pubkey=None - do not load a public key if None, otherwise do.
  • raw=False - if False, it is assumed that pubkey has gone through PublicKey.deserialize already, otherwise it must be specified as bytes.
Methods and instance attributes
  • public_key: an internal object representing the public key.

  • serialize(compressed=True) -> bytes
    convert the public_key to bytes. If compressed is True, 33 bytes will be produced, otherwise 65 will be.

  • deserialize(pubkey_ser) -> internal object
    convert the bytes resulting from a previous serialize call back to an internal object and update the public_key for this instance. The length of pubkey_ser determines if it was serialized with compressed=True or not. This will raise an Exception if the size is invalid or if the key is invalid.

  • combine(pubkeys) -> internal object
    combine multiple public keys (those returned from PublicKey.deserialize) and return a public key (which can be serialized as any other regular public key). The public_key for this instance is updated to use the resulting combined key. If it is not possible the combine the keys, an Exception is raised.

  • tweak_add(scalar) -> internal object
    tweak the current public key by adding a 32 byte scalar times the generator to it and return a new PublicKey instance.

  • tweak_mul(scalar) -> internal object
    tweak the current public key by multiplying it by a 32 byte scalar and return a new PublicKey instance.

  • ecdsa_verify(msg, raw_sig, raw=False, digest=hashlib.sha256) -> bool
    verify an ECDSA signature and return True if the signature is correct, False otherwise. raw_sig is expected to be an object returned from ecdsa_sign (or if it was serialized using ecdsa_serialize, then first run it through ecdsa_deserialize). msg, raw, and digest are used as described in ecdsa_sign.

  • schnorr_verify(msg, schnorr_sig, bip340tag, raw=False) -> bool
    verify a Schnorr signature and return True if the signature is correct, False otherwise. schnorr_sig is expected to be the result from schnorr_sign, msg, bip340tag and raw must match those used in schnorr_sign.

  • ecdh(scalar, hashfn=ffi.NULL, hasharg=ffi.NULL) -> bytes
    compute an EC Diffie-Hellman secret in constant time. The instance public_key is used as the public point, and the scalar specified must be composed of 32 bytes. It outputs 32 bytes representing the ECDH secret computed. The hashing function can be overridden, but (unlike libsecp256k1 itself) we insist that it produce 32-bytes of output. If the scalar is invalid, an Exception is raised.

class secp256k1.ECDSA

The ECDSA class is intended to be used as a mix in. Its methods can be accessed from any secp256k1.PrivateKey or secp256k1.PublicKey instances.

Methods
  • ecdsa_serialize(raw_sig) -> bytes
    convert the result from ecdsa_sign to DER.

  • ecdsa_deserialie(ser_sig) -> internal object
    convert DER bytes to an internal object.

  • ecdsa_serialize_compact(raw_sig) -> bytes
    convert the result from ecdsa_sign to a compact serialization of 64 bytes.

  • ecdsa_deserialize_compact(ser_sig) -> internal object
    convert a compact serialization of 64 bytes to an internal object.

  • ecdsa_signature_normalize(raw_sig, check_only=False) -> (bool, internal object | None)
    check and optionally convert a signature to a normalized lower-S form. If check_only is True then the normalized signature is not returned.

    This function always return a tuple containing a boolean (True if not previously normalized or False if signature was already normalized), and the normalized signature. When check_only is True, the normalized signature returned is always None.

  • ecdsa_recover(msg, recover_sig, raw=False, digest=hashlib.sha256) -> internal object
    recover an ECDSA public key from a signature generated by ecdsa_sign_recoverable. recover_sig is expected to be an object returned from ecdsa_sign_recoverable (or if it was serialized using ecdsa_recoverable_serialize, then first run it through ecdsa_recoverable_deserialize). msg, raw, and digest are used as described in ecdsa_sign.

  • ecdsa_recoverable_serialize(recover_sig) -> (bytes, int)
    convert the result from ecdsa_sign_recoverable to a tuple composed of 65 bytesand an integer denominated as recovery id.

  • ecdsa_recoverable_deserialize(ser_sig, rec_id)-> internal object
    convert the result from ecdsa_recoverable_serialize back to an internal object that can be used by ecdsa_recover.

  • ecdsa_recoverable_convert(recover_sig) -> internal object
    convert a recoverable signature to a normal signature, i.e. one that can be used by ecdsa_serialize and related methods.

Example

from secp256k1 import PrivateKey, PublicKey

privkey = PrivateKey()
privkey_der = privkey.serialize()
assert privkey.deserialize(privkey_der) == privkey.private_key

sig = privkey.ecdsa_sign(b'hello')
verified = privkey.pubkey.ecdsa_verify(b'hello', sig)
assert verified

sig_der = privkey.ecdsa_serialize(sig)
sig2 = privkey.ecdsa_deserialize(sig_der)
vrf2 = privkey.pubkey.ecdsa_verify(b'hello', sig2)
assert vrf2

pubkey = privkey.pubkey
pub = pubkey.serialize()

pubkey2 = PublicKey(pub, raw=True)
assert pubkey2.serialize() == pub
assert pubkey2.ecdsa_verify(b'hello', sig)
from secp256k1 import PrivateKey

key = '31a84594060e103f5a63eb742bd46cf5f5900d8406e2726dedfc61c7cf43ebad'
msg = '9e5755ec2f328cc8635a55415d0e9a09c2b6f2c9b0343c945fbbfe08247a4cbe'
sig = '30440220132382ca59240c2e14ee7ff61d90fc63276325f4cbe8169fc53ade4a407c2fc802204d86fbe3bde6975dd5a91fdc95ad6544dcdf0dab206f02224ce7e2b151bd82ab'

privkey = PrivateKey(bytes(bytearray.fromhex(key)), raw=True)
sig_check = privkey.ecdsa_sign(bytes(bytearray.fromhex(msg)), raw=True)
sig_ser = privkey.ecdsa_serialize(sig_check)

assert sig_ser == bytes(bytearray.fromhex(sig))
from secp256k1 import PrivateKey

key = '7ccca75d019dbae79ac4266501578684ee64eeb3c9212105f7a3bdc0ddb0f27e'
pub_compressed = '03e9a06e539d6bf5cf1ca5c41b59121fa3df07a338322405a312c67b6349a707e9'
pub_uncompressed = '04e9a06e539d6bf5cf1ca5c41b59121fa3df07a338322405a312c67b6349a707e94c181c5fe89306493dd5677143a329065606740ee58b873e01642228a09ecf9d'

privkey = PrivateKey(bytes(bytearray.fromhex(key)))
pubkey_ser = privkey.pubkey.serialize()
pubkey_ser_uncompressed = privkey.pubkey.serialize(compressed=False)

assert pubkey_ser == bytes(bytearray.fromhex(pub_compressed))
assert pubkey_ser_uncompressed == bytes(bytearray.fromhex(pub_uncompressed))

Technical details about the bundled libsecp256k1

The bundling of libsecp256k1 is handled by the various setup.py build phases:

  • During 'sdist': If the directory libsecp256k1 doesn't exist in the source directory it is downloaded from the location specified by the LIB_TARBALL_URL constant in setup.py and extracted into a directory called libsecp256k1

    To upgrade to a newer version of the bundled libsecp256k1 source simply delete the libsecp256k1 directory and update the LIB_TARBALL_URL to point to a newer commit.

  • During 'install': To support (future) use of system libsecp256k1, and because of the way the way cffi modules are implemented it is necessary to perform system library detection in the cffi build module _cffi_build/build.py as well as in setup.py. For that reason some utility functions have been moved into a setup_support.py module which is imported from both.

    By default, the bundled source code is used to build a library locally that will be statically linked into the CFFI extension.

    You can set the environment variable SECP_BUNDLED_NO_EXPERIMENTAL to disable all experimental modules except the recovery module.

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

secp256k1-0.14.0.tar.gz (2.4 MB view details)

Uploaded Source

Built Distributions

secp256k1-0.14.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.3 MB view details)

Uploaded PyPymanylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

secp256k1-0.14.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (1.3 MB view details)

Uploaded PyPymanylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

secp256k1-0.14.0-cp310-cp310-musllinux_1_1_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

secp256k1-0.14.0-cp310-cp310-musllinux_1_1_i686.whl (1.4 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ i686

secp256k1-0.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

secp256k1-0.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

secp256k1-0.14.0-cp39-cp39-musllinux_1_1_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ x86-64

secp256k1-0.14.0-cp39-cp39-musllinux_1_1_i686.whl (1.4 MB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ i686

secp256k1-0.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

secp256k1-0.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

secp256k1-0.14.0-cp38-cp38-musllinux_1_1_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ x86-64

secp256k1-0.14.0-cp38-cp38-musllinux_1_1_i686.whl (1.4 MB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ i686

secp256k1-0.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

secp256k1-0.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

secp256k1-0.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ x86-64

secp256k1-0.14.0-cp37-cp37m-musllinux_1_1_i686.whl (1.4 MB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ i686

secp256k1-0.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

secp256k1-0.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

secp256k1-0.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.6mmusllinux: musl 1.1+ x86-64

secp256k1-0.14.0-cp36-cp36m-musllinux_1_1_i686.whl (1.4 MB view details)

Uploaded CPython 3.6mmusllinux: musl 1.1+ i686

secp256k1-0.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

secp256k1-0.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

File details

Details for the file secp256k1-0.14.0.tar.gz.

File metadata

  • Download URL: secp256k1-0.14.0.tar.gz
  • Upload date:
  • Size: 2.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.26.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.10

File hashes

Hashes for secp256k1-0.14.0.tar.gz
Algorithm Hash digest
SHA256 82c06712d69ef945220c8b53c1a0d424c2ff6a1f64aee609030df79ad8383397
MD5 5f45f9d4a6b35e2324fdc08190400798
BLAKE2b-256 9b41bb668a6e4192303542d2d90c3b38d564af3c17c61bd7d4039af4f29405fe

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for secp256k1-0.14.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 c9e7c024ff17e9b9d7c392bb2a917da231d6cb40ab119389ff1f51dca10339a4
MD5 1da5feac5a213ea88f349be64e37fcee
BLAKE2b-256 d09ef4439a827f31d316b361e32f8392ff718ce8b330c0096bbf9dd5bb98486a

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for secp256k1-0.14.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 f4062d8c101aa63b9ecb3709f1f075ad9c01b6672869bbaa1bd77271816936a7
MD5 c719abf05039ae6ca12236cf668cac20
BLAKE2b-256 bab59f8eff14b2f7d48cd30a9645184cced64af42ce0c38800ab34b9b23ec2be

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: secp256k1-0.14.0-cp310-cp310-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.10, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.11

File hashes

Hashes for secp256k1-0.14.0-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 f4b9306bff6dde020444dfee9ca9b9f5b20ca53a2c0b04898361a3f43d5daf2e
MD5 19ca446f16e8381c334cf3a03006622c
BLAKE2b-256 6411ff6d18314bc05a8f66619959a61be2fb6f37793d73e1dd106954b0978d92

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

  • Download URL: secp256k1-0.14.0-cp310-cp310-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.10, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.11

File hashes

Hashes for secp256k1-0.14.0-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 7a27c479ab60571502516a1506a562d0a9df062de8ad645313fabfcc97252816
MD5 3c33be1f7b88268e0e4082d9dc8033a2
BLAKE2b-256 c99c8148f74dd1fc65d0b97c8cbb101b468e27a2e93a3f291807d0d8ebe4bbf3

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for secp256k1-0.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 fcabb3c3497a902fb61eec72d1b69bf72747d7bcc2a732d56d9319a1e8322262
MD5 73e774c631209f8d1cee50bf24648145
BLAKE2b-256 cee25b1616593ed1fa0e07e87b9f5118dc098bd1ddb2a6a7698d82b0ff85ad3f

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for secp256k1-0.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 f666c67dcf1dc69e1448b2ede5e12aaf382b600204a61dbc65e4f82cea444405
MD5 9eff49896b9d2530715997aa887bd0d7
BLAKE2b-256 09465d3ca364058d39160e3623f0babafe78c2236d359e86924aa07524377c98

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: secp256k1-0.14.0-cp39-cp39-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.9, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.11

File hashes

Hashes for secp256k1-0.14.0-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 97a30c8dae633cb18135c76b6517ae99dc59106818e8985be70dbc05dcc06c0d
MD5 47213575d8eb19e85b54101e80673c9b
BLAKE2b-256 c0b49f3e113dd2850d2ee5fba00b63a8901f3e4f21d69ea0789da4d3fc3dd593

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

  • Download URL: secp256k1-0.14.0-cp39-cp39-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.9, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.11

File hashes

Hashes for secp256k1-0.14.0-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 a8dbd75a9fb6f42de307f3c5e24573fe59c3374637cbf39136edc66c200a4029
MD5 1212771bc5dade40a94afe38dc9d8171
BLAKE2b-256 18734966273b25ef0124105a022d58834733204a4e8ed7c53d9aef1b8e024f82

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for secp256k1-0.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 6af07be5f8612628c3638dc7b208f6cc78d0abae3e25797eadb13890c7d5da81
MD5 acf96204c42813765d4ac9526e6b96c6
BLAKE2b-256 d67a9ec473c1a396edd66d6ec7cacc7e1c47751cfb931fe3e260c23313640d78

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for secp256k1-0.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 4b1bf09953cde181132cf5e9033065615e5c2694e803165e2db763efa47695e5
MD5 04233235027ca6b189ab8a8f33fabcc4
BLAKE2b-256 38cbad699a905d7de39cc17df9d8aa16b62805956f81f734ecdd7a71fa7fce23

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: secp256k1-0.14.0-cp38-cp38-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.8, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.11

File hashes

Hashes for secp256k1-0.14.0-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 fe3f503c9dfdf663b500d3e0688ad842e116c2907ad3f1e1d685812df3f56290
MD5 551c554f0378f49bc280c960b25903c1
BLAKE2b-256 4ec892785c8d74af8efe8b3ff10e329abf1de0a99eed59050a7560b62370f18e

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

  • Download URL: secp256k1-0.14.0-cp38-cp38-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.8, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.11

File hashes

Hashes for secp256k1-0.14.0-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 373dc8bca735f3c2d73259aa2711a9ecea2f3c7edbb663555fe3422e3dd76102
MD5 33a048aa32a0c9c87fa043518625a825
BLAKE2b-256 acb9479d681da022b22bbe1964d2c513a0f5f59d139ee8322b28efaaf88c0ac6

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for secp256k1-0.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 bc761894b3634021686714278fc62b73395fa3eded33453eadfd8a00a6c44ef3
MD5 2ee3de2395486bfd68c74febaff6b654
BLAKE2b-256 a1cf58171f877b3ab2d88c632416bd227150c09d76b4e29c54f38a460ab3e857

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for secp256k1-0.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 ce0314788d3248b275426501228969fd32f6501c9d1837902ee0e7bd8264a36f
MD5 b706456a384e4e34f3c8d2d1c4a07745
BLAKE2b-256 6b0867463325e5269a15ae8f2d22ca6c403923e65b7a0e96d1e80c34f12dffc3

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: secp256k1-0.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.11

File hashes

Hashes for secp256k1-0.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 adc23a4c5d24c95191638eb2ca313097827f07db102e77b59faed15d50c98cae
MD5 c27fd6eb99d07700da5c77dd3091d6db
BLAKE2b-256 391672d7d383be81ce1d156b334913d12450a8c343469d6fe7e2f37c08e2b13e

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp37-cp37m-musllinux_1_1_i686.whl.

File metadata

  • Download URL: secp256k1-0.14.0-cp37-cp37m-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.11

File hashes

Hashes for secp256k1-0.14.0-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 63eb148196b8f646922d4be6739b17fbbf50ebb3a020078c823e2445d88b7a81
MD5 80eff98e664ae62d96cbe0dd43e9cc95
BLAKE2b-256 fff1f0c3f0fb1c864283ac77f1502b254c769b342b592284d2c77d58c7e95001

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for secp256k1-0.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 fec790cb6d0d37129ca0ce5b3f8e85692d5fb618d1c440f189453d18694035df
MD5 ef0c00e84fb3fbabee3c9d9d69923960
BLAKE2b-256 64cf8e7f2a8402d899f57e82a53ad5279cdee1d93a69a0ab7b07192ccec0a651

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for secp256k1-0.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 c91dd3154f6c46ac798d9a41166120e1751222587f54516cc3f378f56ce4ac82
MD5 7a4085f029d44b3e494b58f8d1a4df56
BLAKE2b-256 d354a80648f679965cf17fe15ce117b65f1074173ff6de7e90dba2862ac07622

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: secp256k1-0.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.6m, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.11

File hashes

Hashes for secp256k1-0.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 3aedcfe6eb1c5fa7c6be25b7cc91c76d8eb984271920ba0f7a934ae41ed56f51
MD5 43f32fc61d33a8bf67bbbe2d03dd3a33
BLAKE2b-256 479665341cd03071ab9f0298acd4642b642734304326ec5f2bfd5d383a12ce6f

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp36-cp36m-musllinux_1_1_i686.whl.

File metadata

  • Download URL: secp256k1-0.14.0-cp36-cp36m-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.6m, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.11

File hashes

Hashes for secp256k1-0.14.0-cp36-cp36m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 130f119b06142e597c10eb4470b5a38eae865362d01aaef06b113478d77f728d
MD5 6dd8ca0178d83098d005a4ad82060cb7
BLAKE2b-256 6f0d9ef969653ad36f37953a2d23bdcdc18832cdfd3f2f3eb86bfc7d83ea893c

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for secp256k1-0.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 87f4ad42a370f768910585989a301d1d65de17dcd86f6e8def9b021364b34d5c
MD5 929b80e698818e69ccc80baa56c66dd1
BLAKE2b-256 e0de64850592cb082261e060f85366d2c7669223c182f85129b17220bb639e01

See more details on using hashes here.

File details

Details for the file secp256k1-0.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for secp256k1-0.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 72735da6cb28273e924431cd40aa607e7f80ef09608c8c9300be2e0e1d2417b4
MD5 ea1106497ef9c7b01cf4946298015f6f
BLAKE2b-256 01acab89014d0262506657531c01bbb247712f1af262bf7ffd8bf7b3415079cd

See more details on using hashes here.

Supported by

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