Skip to main content

BLS signatures in c++ (python bindings)

This project has been archived.

The maintainers of this project have marked this project as archived. No new releases are expected.

Project description

BLS Signatures implementation

Build and Test C++, Javascript, and Python PyPI PyPI - Format GitHub

Total alerts Language grade: JavaScript Language grade: Python Language grade: C/C++

NOTE: THIS LIBRARY IS NOT YET FORMALLY REVIEWED FOR SECURITY

NOTE: THIS LIBRARY WAS SHIFTED TO THE IETF BLS SPECIFICATION ON 7/16/20

Implements BLS signatures with aggregation using blst library for cryptographic primitives (pairings, EC, hashing) according to the IETF BLS RFC with these curve parameters for BLS12-381.

Features:

  • Non-interactive signature aggregation following IETF specification
  • Works on Windows, Mac, Linux, BSD
  • Efficient verification using Proof of Posssesion (only one pairing per distinct message)
  • Aggregate public keys and private keys
  • EIP-2333 key derivation (including unhardened BIP-32-like keys)
  • Key and signature serialization
  • Batch verification
  • Python bindings
  • Pure python bls12-381 and signatures
  • JavaScript bindings

Before you start

This library uses minimum public key sizes (MPL). A G2Element is a signature (96 bytes), and a G1Element is a public key (48 bytes). A private key is a 32 byte integer. There are three schemes: Basic, Augmented, and ProofOfPossession. Augmented should be enough for most use cases, and ProofOfPossession can be used where verification must be fast.

Import the library

#include "bls.hpp"
using namespace bls;

Creating keys and signatures

// Example seed, used to generate private key. Always use
// a secure RNG with sufficient entropy to generate a seed (at least 32 bytes).
vector<uint8_t> seed = {0,  50, 6,  244, 24,  199, 1,  25,  52,  88,  192,
                        19, 18, 12, 89,  6,   220, 18, 102, 58,  209, 82,
                        12, 62, 89, 110, 182, 9,   44, 20,  254, 22};

PrivateKey sk = AugSchemeMPL().KeyGen(seed);
G1Element pk = sk.GetG1Element();

vector<uint8_t> message = {1, 2, 3, 4, 5};  // Message is passed in as a byte vector
G2Element signature = AugSchemeMPL().Sign(sk, message);

// Verify the signature
bool ok = AugSchemeMPL().Verify(pk, message, signature);

Serializing keys and signatures to bytes

vector<uint8_t> skBytes = sk.Serialize();
vector<uint8_t> pkBytes = pk.Serialize();
vector<uint8_t> signatureBytes = signature.Serialize();

cout << Util::HexStr(skBytes) << endl;    // 32 bytes printed in hex
cout << Util::HexStr(pkBytes) << endl;    // 48 bytes printed in hex
cout << Util::HexStr(signatureBytes) << endl;  // 96 bytes printed in hex

Loading keys and signatures from bytes

// Takes vector of 32 bytes
PrivateKey skc = PrivateKey::FromByteVector(skBytes);

// Takes vector of 48 bytes
pk = G1Element::FromByteVector(pkBytes);

// Takes vector of 96 bytes
signature = G2Element::FromByteVector(signatureBytes);

Create aggregate signatures

// Generate some more private keys
seed[0] = 1;
PrivateKey sk1 = AugSchemeMPL().KeyGen(seed);
seed[0] = 2;
PrivateKey sk2 = AugSchemeMPL().KeyGen(seed);
vector<uint8_t> message2 = {1, 2, 3, 4, 5, 6, 7};

// Generate first sig
G1Element pk1 = sk1.GetG1Element();
G2Element sig1 = AugSchemeMPL().Sign(sk1, message);

// Generate second sig
G1Element pk2 = sk2.GetG1Element();
G2Element sig2 = AugSchemeMPL().Sign(sk2, message2);

// Signatures can be non-interactively combined by anyone
G2Element aggSig = AugSchemeMPL().Aggregate({sig1, sig2});

ok = AugSchemeMPL().AggregateVerify({pk1, pk2}, {message, message2}, aggSig);

Arbitrary trees of aggregates

seed[0] = 3;
PrivateKey sk3 = AugSchemeMPL().KeyGen(seed);
G1Element pk3 = sk3.GetG1Element();
vector<uint8_t> message3 = {100, 2, 254, 88, 90, 45, 23};
G2Element sig3 = AugSchemeMPL().Sign(sk3, message3);


G2Element aggSigFinal = AugSchemeMPL().Aggregate({aggSig, sig3});
ok = AugSchemeMPL().AggregateVerify({pk1, pk2, pk3}, {message, message2, message3}, aggSigFinal);

Very fast verification with Proof of Possession scheme

// If the same message is signed, you can use Proof of Posession (PopScheme) for efficiency
// A proof of possession MUST be passed around with the PK to ensure security.

G2Element popSig1 = PopSchemeMPL().Sign(sk1, message);
G2Element popSig2 = PopSchemeMPL().Sign(sk2, message);
G2Element popSig3 = PopSchemeMPL().Sign(sk3, message);
G2Element pop1 = PopSchemeMPL().PopProve(sk1);
G2Element pop2 = PopSchemeMPL().PopProve(sk2);
G2Element pop3 = PopSchemeMPL().PopProve(sk3);

ok = PopSchemeMPL().PopVerify(pk1, pop1);
ok = PopSchemeMPL().PopVerify(pk2, pop2);
ok = PopSchemeMPL().PopVerify(pk3, pop3);
G2Element popSigAgg = PopSchemeMPL().Aggregate({popSig1, popSig2, popSig3});

ok = PopSchemeMPL().FastAggregateVerify({pk1, pk2, pk3}, message, popSigAgg);

// Aggregate public key, indistinguishable from a single public key
G1Element popAggPk = pk1 + pk2 + pk3;
ok = PopSchemeMPL().Verify(popAggPk, message, popSigAgg);

// Aggregate private keys
PrivateKey aggSk = PrivateKey::Aggregate({sk1, sk2, sk3});
ok = (PopSchemeMPL().Sign(aggSk, message) == popSigAgg);

HD keys using EIP-2333

// You can derive 'child' keys from any key, to create arbitrary trees. 4 byte indeces are used.
// Hardened (more secure, but no parent pk -> child pk)
PrivateKey masterSk = AugSchemeMPL().KeyGen(seed);
PrivateKey child = AugSchemeMPL().DeriveChildSk(masterSk, 152);
PrivateKey grandChild = AugSchemeMPL().DeriveChildSk(child, 952)

// Unhardened (less secure, but can go from parent pk -> child pk), BIP32 style
G1Element masterPk = masterSk.GetG1Element();
PrivateKey childU = AugSchemeMPL().DeriveChildSkUnhardened(masterSk, 22);
PrivateKey grandchildU = AugSchemeMPL().DeriveChildSkUnhardened(childU, 0);

G1Element childUPk = AugSchemeMPL().DeriveChildPkUnhardened(masterPk, 22);
G1Element grandchildUPk = AugSchemeMPL().DeriveChildPkUnhardened(childUPk, 0);

ok = (grandchildUPk == grandchildU.GetG1Element();

Build

Cmake 3.14+, a c++ compiler, and python3 (for bindings) are required for building.

mkdir build
cd build
cmake ../
cmake --build . -- -j 6

Run tests

./build/src/runtest

Run benchmarks

./build/src/runbench

On a 3.5 GHz i7 Mac, verification takes about 1.1ms per signature, and signing takes 1.3ms.

Link the library to use it

g++ -Wl,-no_pie -std=c++11 -Ibls-signatures/src -L./bls-signatures/build/ -l bls yourapp.cpp

Notes on dependencies

We use Libsodium which provides secure memory allocation. To install it, either download them from github and follow the instructions for each repo, or use a package manager like APT or brew. You can follow the recipe used to build python wheels for multiple platforms in .github/workflows/.

Discussion

Discussion about this library and other Chia related development is in the #dev channel of Chia's public Keybase channels.

Code style

  • Always use vector<uint8_t> for bytes
  • Use size_t for size variables
  • Uppercase method names
  • Prefer static constructors
  • Avoid using templates
  • Objects allocate and free their own memory
  • Use cpplint with default rules
  • Use SecAlloc and SecFree when handling secrets

ci Building

The primary build process for this repository is to use GitHub Actions to build binary wheels for MacOS, Linux (x64 and aarch64), and Windows and publish them with a source wheel on PyPi. MacOS ARM64 is supported but not automated due to a lack of M1 CI runners. See .github/workflows/build.yml. CMake uses FetchContent to download pybind11 for the Python bindings. Building is then managed by cibuildwheel. Further installation is then available via pip install blspy e.g. The ci builds include a statically linked libsodium.

Contributing and workflow

Contributions are welcome and more details are available in chia-blockchain's CONTRIBUTING.md.

The main branch is usually the currently released latest version on PyPI. Note that at times bls-signatures/blspy will be ahead of the release version that chia-blockchain requires in it's main/release version in preparation for a new chia-blockchain release. Please branch or fork main and then create a pull request to the main branch. Linear merging is enforced on main and merging requires a completed review. PRs will kick off a GitHub actions ci build and analysis of bls-signatures at lgtm.com. Please make sure your build is passing and that it does not increase alerts at lgtm.

Specification and test vectors

The IETF bls draft is followed. Test vectors can also be seen in the python and cpp test files.

Libsodium license

The libsodium static library is licensed under the ISC license which requires the following copyright notice.

ISC License

Copyright (c) 2013-2020 Frank Denis <j at pureftpd dot org>

Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

BLST license

BLST is used with the Apache 2.0 license

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

blspy-2.0.0b2.tar.gz (237.9 kB view details)

Uploaded Source

Built Distributions

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

blspy-2.0.0b2-cp311-cp311-win_amd64.whl (250.6 kB view details)

Uploaded CPython 3.11Windows x86-64

blspy-2.0.0b2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (346.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

blspy-2.0.0b2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (325.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

blspy-2.0.0b2-cp311-cp311-macosx_11_0_arm64.whl (299.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

blspy-2.0.0b2-cp311-cp311-macosx_10_14_x86_64.whl (310.6 kB view details)

Uploaded CPython 3.11macOS 10.14+ x86-64

blspy-2.0.0b2-cp310-cp310-win_amd64.whl (250.5 kB view details)

Uploaded CPython 3.10Windows x86-64

blspy-2.0.0b2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (346.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

blspy-2.0.0b2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (325.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

blspy-2.0.0b2-cp310-cp310-macosx_11_0_arm64.whl (299.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

blspy-2.0.0b2-cp310-cp310-macosx_10_14_x86_64.whl (310.6 kB view details)

Uploaded CPython 3.10macOS 10.14+ x86-64

blspy-2.0.0b2-cp39-cp39-win_amd64.whl (250.5 kB view details)

Uploaded CPython 3.9Windows x86-64

blspy-2.0.0b2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (346.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

blspy-2.0.0b2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (325.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

blspy-2.0.0b2-cp39-cp39-macosx_11_0_arm64.whl (299.6 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

blspy-2.0.0b2-cp39-cp39-macosx_10_14_x86_64.whl (310.6 kB view details)

Uploaded CPython 3.9macOS 10.14+ x86-64

blspy-2.0.0b2-cp38-cp38-win_amd64.whl (250.3 kB view details)

Uploaded CPython 3.8Windows x86-64

blspy-2.0.0b2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (345.7 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

blspy-2.0.0b2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (325.2 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

blspy-2.0.0b2-cp38-cp38-macosx_11_0_arm64.whl (299.4 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

blspy-2.0.0b2-cp38-cp38-macosx_10_14_x86_64.whl (310.5 kB view details)

Uploaded CPython 3.8macOS 10.14+ x86-64

blspy-2.0.0b2-cp37-cp37m-win_amd64.whl (249.4 kB view details)

Uploaded CPython 3.7mWindows x86-64

blspy-2.0.0b2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (349.6 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

blspy-2.0.0b2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (328.7 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ARM64

blspy-2.0.0b2-cp37-cp37m-macosx_10_14_x86_64.whl (306.9 kB view details)

Uploaded CPython 3.7mmacOS 10.14+ x86-64

File details

Details for the file blspy-2.0.0b2.tar.gz.

File metadata

  • Download URL: blspy-2.0.0b2.tar.gz
  • Upload date:
  • Size: 237.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for blspy-2.0.0b2.tar.gz
Algorithm Hash digest
SHA256 05361a0a0e04ea9b32f6fc75d4dfa818580b93da9a04f1dc6610b5e69e839e19
MD5 103b23cd17f11d8af62c72db1a3acad2
BLAKE2b-256 3c8eabda08dd2ab7ec804206b9ad71272fb0ca9bbf7fa977fce2535be5ea7863

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: blspy-2.0.0b2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 250.6 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for blspy-2.0.0b2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3a7154330f03da38534a9708c9aaba060d4588897c7bfdad05b794c94ebba7af
MD5 d5c36bc158e7ce1cf8fb907702aff443
BLAKE2b-256 c331a815c479b99c89e8b6a260b90ea5fda45125f6f40b82e28c99f028d462da

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b74bf905c1ece5d3c1f3e96c7ed1151f96a8f8440269c3839f871119a35da8cf
MD5 0c46c2d5bcde95dc52163c16631d7ece
BLAKE2b-256 5345d9832ece17c5e36449f38dd5a3244ef57de0943cf99cfb7605643af49d2f

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6e8e9b095445f0ffe05dc7bffb8597b143972ab4f065e51833647b66538e8f85
MD5 9ea702d08393629fbb5a8e78463b2450
BLAKE2b-256 ab1b5c8e6fcc635c012b2b1a44850002309594a348e25345bc24702759680a3e

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 732e9772e8caa1a91007e79a81486c1fafeaaadedcbb1a29e656c0db52757163
MD5 70bfdfe32b67f703cfffc2748efba1b9
BLAKE2b-256 e2eaa19fda52ea3701df53df039e15f7b2fdc0362b784c415b04a6f52117ebbd

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp311-cp311-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp311-cp311-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 ebee106110f04c8c51e90cb5d3981f083ce055d4f96c11740bcca953778bb35f
MD5 5a1a15e917b4386cd5a650e574c4a95b
BLAKE2b-256 b310c7aca974b9e2a8b611b707155c71060de6baa38a0c9ce1afb7bdc19bddc0

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: blspy-2.0.0b2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 250.5 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for blspy-2.0.0b2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 53a4c7e3b3f071033bd52494a22e4bb56edc413b0a457b991c70fcc80f259341
MD5 9b9a2ba56b0174e64f94ef54918be772
BLAKE2b-256 f4eac697114bd256b120a2c12ec1646e177ab3d787f572365c44e77c4625fe5b

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 93fb5f4368d5fb4b3c9a249a2cb7a1cf91b500a66c43b40831f75e27f6de0a58
MD5 d26101dcbf4d92151dd2e5a79c42d27e
BLAKE2b-256 e51d693cce89241c28c427ed260de56f82ceced4983a93e51835276c7098957c

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fbe1bc8115359cc61ab9d3cb1bfc1fb814ec9aaace1da4935122483d5c7fc3f9
MD5 d7057777e148bcc946c5eecd83cacc03
BLAKE2b-256 1f5f55321d8b2f9e24e6e3dbac9f8ab50a4fae632e92667a7d8f38f3fff2560e

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b278bbba5cba9fc7f2aa9e1e7322896fc8a312a2ab7caa44155f2cb45bcc810d
MD5 8b2263bd64bf737564cdc2494b8cf838
BLAKE2b-256 0391febca8af9ee4a813806576153fdb4f1ccc2aeda5f64fb7bda564a0c90040

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp310-cp310-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp310-cp310-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 1c4d81117114a78f8cde35bd12c5842750d272e3d4c1b8fd38289bd886c7e289
MD5 86a9e1191f51768e6fda52c35422e70b
BLAKE2b-256 9bdea1592642ecfc6be17348684094ca673725319bc29479a854a7f1196c2f3e

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: blspy-2.0.0b2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 250.5 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for blspy-2.0.0b2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 8a235b67742d388f240d0390a65e8b32b3439ff30a450bf62aacfadd7b322a74
MD5 07c0e2ca43457caaf09b9b3d1845776b
BLAKE2b-256 c55eb82bfe0c713f323a219f52615c15a496e74798dcfc699e5795a82cbdd86f

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 89d64b66a24c101a18ad0aa6556b1048e320e79ad7c482999d9f64eb47ad2785
MD5 9043ada9ba2b3d9f0aa2822585075272
BLAKE2b-256 e9ce45a951ebd7919325e9ff1fc0cce1b857e87886a8d7758c3a6ea9c201cd74

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7db3dcf0edb96db461c1dd1e9078d0438e21593772571f5660d4cd3df439161a
MD5 2eef02f424d9f37da1566705adf5d777
BLAKE2b-256 cfad553f5fa26438258a0b7b6557755c8745c91d8a97385ec17c9b0792220316

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ad59153a09c879bf898024ef08a84974d512359bda15cc92fd17ca8a34dd4583
MD5 eab30484b55d0971fa131f350ec033b7
BLAKE2b-256 1a32deb2f89f6b2d4b26e3ec0e21600ce428d777d8dbb36ed8fbb5335a934dea

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp39-cp39-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 574af1b89c2975b62279d4a7fd4682cf19887b7f7688a957283b985f024d24d6
MD5 f26a514e2a5ea46caf51c9c0f08d0cae
BLAKE2b-256 92601f9ee8a466daa00318086c15f9bd3f99cec42584d6f4525dc7760033ec30

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: blspy-2.0.0b2-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 250.3 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for blspy-2.0.0b2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 6bb0bfa4f0888d5ef87688ccb353c3f80e4c729b2298440df38e5f0b6753c188
MD5 3db20cedbbb4adee5481faec6cc30e7d
BLAKE2b-256 05c795a2ba0e3f2712250b2a536ba5410326287c00bb8120f90ef5e44204f8b3

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5e391b2a16f3b5a3489b6b3b6f01cb6756b6fc50a4bb5d0fbda3f1e2e1d123d7
MD5 9deb0c530e4135f7687a52db5bed80bc
BLAKE2b-256 3a9d663fed096c8ad06fe4ace5d2c6107338f47ad95d3fd7d3fcea6677880a30

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e58c29b740cab6b1bc961ac9dd8b2fbee98032330315b7e38b80db87fa7e9791
MD5 e912ea7bed7ae5a740553a87c23a4641
BLAKE2b-256 7b09419dc7ddd15aa6156ac12433194a333545a79e96d9a4f229000c69e56749

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cf949b28c394ba002f569b39c70da86fe657a68ab01bd84ba66eb60f2cd1bf62
MD5 6e653ef3cd5264686d24c4bc6d0b0584
BLAKE2b-256 4603dc1029a8a3195f8e8651e97b56815a8233d4dd9313cb623664ecf3fb3d53

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp38-cp38-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 43d272564a6b747e6df31f7d23a108fccd83f51a34432f631339f0b35e7232ec
MD5 3d1bebaa11e74250cb6733e65ebc7d2a
BLAKE2b-256 6b56145955dc220948dd2d76e7a023140f5b8848c6b9ec9df1277cbcb144ced6

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: blspy-2.0.0b2-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 249.4 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for blspy-2.0.0b2-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 a8d777dec9795beb20ce22f609ed15e84b47b6c9971b09a43d6f54a49f281d47
MD5 1fd68c99cf2f5a1eea6811ada46d6260
BLAKE2b-256 21a46a3458b09a8020d04ae28e3e0000f5c7dd67963efdf64fb8f6062316d187

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 87e0317456061475f997bdc8f1dc77c9eb9c002c1d4f6b89732d78f3089de12c
MD5 28e2fc02db8220047202c83914336b17
BLAKE2b-256 47718985f3c22033de3b30f5c3dee9550ea56cfb4b9e0dd5ea01c8b96fcbeffa

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8fdff019efa9b45ba456dcf1eaec4353c8ae4ee5beace3f813e354d62611692f
MD5 388552a79a3100369da6102db6703703
BLAKE2b-256 16fb72d1e716a84e48118de8bd5286ee69d20b847c190da1b190c8d691f7b2a3

See more details on using hashes here.

File details

Details for the file blspy-2.0.0b2-cp37-cp37m-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.0b2-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 93e8c07085ba22fcb19b0851b03ab513cefebdbfa9019f5d1e95c0b5ca7a6b0c
MD5 b9f42c3b162add5879b646605b5d01cc
BLAKE2b-256 25db754a0651d37815cbafcf08670c38073d554e3f5939ec03f09f492cccc153

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