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.0.tar.gz (142.0 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.0-cp311-cp311-win_amd64.whl (255.8 kB view details)

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 10.14+ x86-64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.10macOS 10.14+ x86-64

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

Uploaded CPython 3.9Windows x86-64

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

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.9macOS 11.0+ ARM64

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

Uploaded CPython 3.9macOS 10.14+ x86-64

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

Uploaded CPython 3.8Windows x86-64

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

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

blspy-2.0.0-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.0-cp38-cp38-macosx_11_0_arm64.whl (299.5 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

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

Uploaded CPython 3.8macOS 10.14+ x86-64

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

Uploaded CPython 3.7mWindows x86-64

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

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ARM64

blspy-2.0.0-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.0.tar.gz.

File metadata

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

File hashes

Hashes for blspy-2.0.0.tar.gz
Algorithm Hash digest
SHA256 4c90d3ce559e67a9a4ae32fc776cbfb185706b2072c21fcc381ebf853fcff87c
MD5 9933c0ba3ee3546cfd4dc2d2ceef7fa9
BLAKE2b-256 599462151b8891589beb62f6629e9fee16e658cea2d307d130807af8195179c3

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for blspy-2.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e4eef2333b7f91f7e16d434801c9e0a7acf021d7c9fa1b8561785b6a83493253
MD5 4a96d76a76b12d113b7e26aad39d3b6d
BLAKE2b-256 9ae1410bf269b4df53bc0eb70e58a2df759f30fa018c7a4841f27d1e41a48e69

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f3fbbf73baf3fdd829b0ee951f47874bf92fceacbe57ac79fe0cc818f9b2e5e7
MD5 2f79bde343345821ea016f74ac9774d7
BLAKE2b-256 a6377dfc42406eed3872939693071ee6179223149112405e118d07529b1753b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6eb9e6690108682160cc9e39fa37aaf5d7862e75bdff3cda791659f7d9a53d5d
MD5 a2c73dde5ab90ffad53401ed678cf6ff
BLAKE2b-256 38a37218261de74369f6835ae3631867fe556a1491937eda8c9cf734fcdff0af

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c708c809e1389a230d8afb43518b17900b101f20fadcddb406e235f90c63aeb8
MD5 cfd73dffd8cedf1fcf249770c1b51a7f
BLAKE2b-256 d684ece34018cb92793fc4fa3e2311baac68ffc2904706df9042ad9001e6d19b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp311-cp311-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 7805ab61bcea47f4c47dfd0c7bc45994eb4ae04d86cc457fb60143b610fe8e08
MD5 6c3f458cb0908df0c1301c48d601060c
BLAKE2b-256 6a79629152e2ec9bbc68ec3f5d5873965cf9f7f8f1da17f1a27b989972c43cf3

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for blspy-2.0.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 180aa58201e695f109dc3281dd5c656085af60103b3653f9d3f364b9181fd109
MD5 f05bca52e6c0c72eec9e972326701e95
BLAKE2b-256 6cfd42b2dff863516052d9febdb9080e3e47b14615c6da854d0cd0a1462cc518

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bb0a6435b6c3dd8ba499ccfe09e5904b4a02a2a77d6ff73f27efa870a011ed14
MD5 c8eb7a69b871fdf24a1b3a80e8e25f4e
BLAKE2b-256 fa9962901b7f87c9b8f4c0c6eea3fbc422d32b328319beae6d074e4f6b378765

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 810a447071fedf548df31ff207a3fdd29cf195d14374a769a606a70b1f4a3c54
MD5 f79bd2e59d053156ef83bba2cd06c13d
BLAKE2b-256 4157ec3965c1fe78dc4f4def53cd36580e0616ad5dd0ab5273c825d6b5985f8d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0b3e0e9b70b4914a0e4377e337b3e0cb7d9bd54e0d53e383672126da278079df
MD5 1395e3771ead2c682cdb6112b156f01f
BLAKE2b-256 c758bc25180aff5a0f304c9e24ed58001b318e6d87e26250ef4f7dbdfe9bd788

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp310-cp310-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 c4dca67b60a9727fbc99aa456059175fc884ae93a1a80ec07f972725faf5a3e3
MD5 c248832409fbea5334035d331c405389
BLAKE2b-256 05cd3612374a7ad289e41ba1f4ccb7835942f5a0b9b47e58ac7a7a5937e42bf9

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for blspy-2.0.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 16427a9ae5f5fd35e4b353fa79232ff2c9a0e37779eb7be1f3d971458bb00e0b
MD5 d670b927a9087be288b66659b917b710
BLAKE2b-256 a3e2b83d2c23605896eb35ea86fd1d38a1f1884d646c2864ed92cc84647c94b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 13330e9303febda0d50bb704cde54929725c21efad098650e88175fe1f763da8
MD5 cfa6539ad81d6f1eb041f2121159642a
BLAKE2b-256 9e5028d896215370c064092d8f75a298b218fa5273a8d651fed8698a7addd9d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d8885f442f40550adb8c4c46f57cbdcbf471aa9143e1929e4c15b349a12e23e6
MD5 09310182f577d3ef3fe3efea9cfb4591
BLAKE2b-256 d6a3d1bffb5b8aff1d813931e605dc26ce2eb7cbcf92a5fbb4a368f2538a3c60

See more details on using hashes here.

File details

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

File metadata

  • Download URL: blspy-2.0.0-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 299.6 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for blspy-2.0.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f47ce62f9651659b39cc1ad48c989535b0e96488b646620889c06afe6a5f7880
MD5 99c5da09b081ada322c5e4b5369c5617
BLAKE2b-256 abfb3b3588e904a760ada0d64a2558c459ce39d5332053b22921812d0d27549d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 0d60278380ea05fb3071d74324a76c29fe2a30ff93a6716072aeab5d93ee9d84
MD5 4d43549f54b465a5086dd9088c11fc15
BLAKE2b-256 36184f7b328d0b890a57a1aab04b44075deaae6b3e6fd583a06c7d4a988845a2

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for blspy-2.0.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 90935bcd3c98804e5f0502e9bb22e97c56acae196fb508723fc00504e355195d
MD5 a327d7aff90e4b62fa47b80c2feb9ca3
BLAKE2b-256 944873a137d336a61e811e655cfc8a6936d8c6e8d41661654cc65692f32f9705

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7dbee4de8178c91147bb35cd06c000454df416ff1dae313e65a964a0c4c0f723
MD5 6f5aa2152ca4c70c8eff5a5aaddf6549
BLAKE2b-256 75f3b3ab7af6286fa306d43fc2633f257e32217ccd9033f43ecd0e2746085119

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9a48b8d6d13200a15ebaa1ead0518930f22aaf6126dc5ff04e8bc281037b310e
MD5 bf64790d0ee2c5997d706d8918c029f4
BLAKE2b-256 d70e256562dde9ba15d79c001d86d016360adde87563bba3b7dc8617f0f8ebaa

See more details on using hashes here.

File details

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

File metadata

  • Download URL: blspy-2.0.0-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 299.5 kB
  • Tags: CPython 3.8, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for blspy-2.0.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 412a1dea6b112a78343e06782d8b7be61fad3d73efc38b17e8d8f03dbd185448
MD5 05014b205fc04bc3d5e8e61a2adc751b
BLAKE2b-256 63a7ddf38eeee3f28025f8ddf728952efc7766e379ec6152bc348b1f2986374b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 7984b44523f73891d3579aa302dce8a0b28d02b9163bac9c20a361f9cb614ca3
MD5 90f643f548db540e73f357cf25998457
BLAKE2b-256 e6214e958971dc09f091f6d87f65e76c1262283e97348d21da873c791de0f159

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for blspy-2.0.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 3331b09086fc5aba0733992c7308b18996f919b0f22d115daafbb72880d394d8
MD5 e25d9f91256fa1494b74590659f8baeb
BLAKE2b-256 9ecfc5c0c3dcd69ef2d4136cdb16a2e17b2bfa80ff778553c561350792a34def

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c76fad616855280845d37cff052c3e15e5c8b75fa642e4b793b473029adffe0f
MD5 c69f61a409b48f96a3cacea04cb58b1f
BLAKE2b-256 a3eaac40a7746c177e3f2bae7939eef3dae5b67df7e57bc2a76528fd81720543

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dc6629a0d69cc1550c21b76b3b95ac9002995d370a5633764d62a187dadf0764
MD5 4ddcb0068a057d21babd02a4e219a7fc
BLAKE2b-256 e607a523fca1d4978feafc0bc2933c4e2213022614a013104e46c8d60fb976e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.0-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 5b2b54b4bca76ea611eeb962a550cd717a9732c53e8ef8791a651270d0aba003
MD5 4aefce5a871fe9e469017b8ac77e79a1
BLAKE2b-256 0eb1c3941fd440366d1be55d35194c1db18ec5b5a71dabba445996703237daac

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