Skip to main content

BLS signatures in c++ (python bindings)

Project description

BLS Signatures implementation

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

CodeQL

Coverage Status

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.1b1.tar.gz (142.5 kB view details)

Uploaded Source

Built Distributions

blspy-2.0.1b1-cp311-cp311-win_amd64.whl (260.1 kB view details)

Uploaded CPython 3.11 Windows x86-64

blspy-2.0.1b1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (348.9 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

blspy-2.0.1b1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (324.0 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

blspy-2.0.1b1-cp311-cp311-macosx_11_0_arm64.whl (299.6 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

blspy-2.0.1b1-cp311-cp311-macosx_10_14_x86_64.whl (315.6 kB view details)

Uploaded CPython 3.11 macOS 10.14+ x86-64

blspy-2.0.1b1-cp310-cp310-win_amd64.whl (260.1 kB view details)

Uploaded CPython 3.10 Windows x86-64

blspy-2.0.1b1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (348.9 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

blspy-2.0.1b1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (323.9 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

blspy-2.0.1b1-cp310-cp310-macosx_11_0_arm64.whl (299.7 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

blspy-2.0.1b1-cp310-cp310-macosx_10_14_x86_64.whl (315.6 kB view details)

Uploaded CPython 3.10 macOS 10.14+ x86-64

blspy-2.0.1b1-cp39-cp39-win_amd64.whl (260.1 kB view details)

Uploaded CPython 3.9 Windows x86-64

blspy-2.0.1b1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (349.5 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

blspy-2.0.1b1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (324.3 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

blspy-2.0.1b1-cp39-cp39-macosx_11_0_arm64.whl (299.8 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

blspy-2.0.1b1-cp39-cp39-macosx_10_14_x86_64.whl (315.7 kB view details)

Uploaded CPython 3.9 macOS 10.14+ x86-64

blspy-2.0.1b1-cp38-cp38-win_amd64.whl (260.0 kB view details)

Uploaded CPython 3.8 Windows x86-64

blspy-2.0.1b1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (348.6 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

blspy-2.0.1b1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (323.5 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

blspy-2.0.1b1-cp38-cp38-macosx_11_0_arm64.whl (299.5 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

blspy-2.0.1b1-cp38-cp38-macosx_10_14_x86_64.whl (315.6 kB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

blspy-2.0.1b1-cp37-cp37m-win_amd64.whl (259.1 kB view details)

Uploaded CPython 3.7m Windows x86-64

blspy-2.0.1b1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (352.0 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

blspy-2.0.1b1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (326.9 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

blspy-2.0.1b1-cp37-cp37m-macosx_10_14_x86_64.whl (312.3 kB view details)

Uploaded CPython 3.7m macOS 10.14+ x86-64

File details

Details for the file blspy-2.0.1b1.tar.gz.

File metadata

  • Download URL: blspy-2.0.1b1.tar.gz
  • Upload date:
  • Size: 142.5 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.1b1.tar.gz
Algorithm Hash digest
SHA256 f0626c7e865ec807bdbadce97dd9889bca731249852cd68f5f34a38b4b6e3f6b
MD5 1fed0b450baa0608bd2564ac64d6d0ff
BLAKE2b-256 2b911bb3b7db0498e6f8f888c7955a70631ae0abe5bb650aceabeb8f8eb28b72

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: blspy-2.0.1b1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 260.1 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.1b1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a222e4851142a626db7dd29b60bd46df6f971b2d09608cc39ff9c313eb785b23
MD5 6150b94c1c1871e1f67fdd4bfc967a4d
BLAKE2b-256 a55a53a8421df21b08b4c005d63ea70960691e4f1a0ce3db7e425c452807ef63

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c03c507d885193f66510b297e74fa9800f5319542cc82e825c8b27eee6f2ba89
MD5 ca9c19173a1e3f28a11c9f5d451dd89b
BLAKE2b-256 ad5762ce87bdc198fd395fb0e93ccd36190da65d8db059758355f6bd37b99129

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fbbc6e19316e3d7d5a1acc3d93909dcc77d0a735fc62ebba4f06f028833a2286
MD5 61ef7d23dc025c65b86f67db919e25e0
BLAKE2b-256 4f6eb129e37391157baaac292edc951e87eb95341639bc9c57ecb66fa5395c51

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 29bd0e901f9ce8bef276f4b850e617c3b9bcabb21bf4773c3861b2528a4ff658
MD5 7428943654a5b5182ca0dd1b03b2c682
BLAKE2b-256 a5cf3af8386207e88c9e18f682ed3b49926de05b56fbb63c2c3aed219e05b178

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp311-cp311-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp311-cp311-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 484fd8df8ebecea20aaa2153c64d986b016bb9d2a5381c45a54d62acbfaaf278
MD5 981947e7778479c90c0e10b9f46124bf
BLAKE2b-256 8d204326d61a1654a563cf850cc2d1898d89eb53877968d153bbf758fbcfbf35

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: blspy-2.0.1b1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 260.1 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.1b1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7707625e7b1d3ade5e9f360fc3eb1bc224e0c5c0e6c1745bf9d758b6ec778d38
MD5 9c6a44a303d286866fe9d3dca4bc929b
BLAKE2b-256 481eb206bb8440819c62770db0273663bc66b4d119b32c8cfae87f49a6b7f13b

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e149e524a88a64e8529783bff8adf06f9e00c0a2ccfab3e0ec6f63205772096a
MD5 9ef0e2edba2ee1d1da3426ca914f8fd2
BLAKE2b-256 025eb5d4ffeb50c9ee1268e1ce00c26918b0253e052db1aac45402d8f7b18cb5

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e709518f2f61ca4ef0f041aad148c6d104372f3386e4f8724d9940fa17b9481a
MD5 73b264995502b84786b42c7dff511b2b
BLAKE2b-256 6832bb26f8eea280cd3ea12d843d4488595230505213839dc3fa91e3cc755f88

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c24fbb166a2a6c8456c4112b0bc18e826ce46abfa40908e3f6193e81cce56a9a
MD5 970b81380b3f44e54b896c5e677bfd0c
BLAKE2b-256 59eb75e4a48ae05b4dee08355f58b964af6158d2c0ad6ed18ad5a90c180b100e

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp310-cp310-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp310-cp310-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 7164d0be5c0f628edfe8c0de8e0c2b11a9593946c07601571ff498cd360b99cb
MD5 8ed71633e973e9fcac2165dddf30c909
BLAKE2b-256 0e7b7752ab229edfb9fcb59220477727ddbdd76d7483b5b4c173861e2723a2eb

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: blspy-2.0.1b1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 260.1 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.1b1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 bda012df3fd75e51a5fd505cd795f5ef4532e236bf644bab43c248a952bac196
MD5 3109c7d2855d8a65d3054585ae983744
BLAKE2b-256 50621bc62c3812e3ca7c80ee687963d431d411f704848f5abcf2ee2b1d946f2c

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b85fcbe8d984f15bead5b09b06e39da23db3f7966d1885bee2c950dffc94c817
MD5 d349c4ae8ebc3af694c34128b3204f8d
BLAKE2b-256 65f3a772738949f9880588e22a648c66ec22e75b9f5e182d4670945444e51415

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8c7029411083e76da2f1f2816c8bbe3ae78d2764e66678804bc12ed7c4ed306f
MD5 e93366ebc27a60380e38f1b98c1729a6
BLAKE2b-256 aab4e4be9ddbcdf3653965c4062834bc9022a0621356e1e9b55ec5004e03a743

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5e4aace459c9d4e861c077e754c52313624e6c0cdd165e08b86f7229f9019a92
MD5 4d9d5d5277c9ed81cbcab1d95ec4e53b
BLAKE2b-256 d13bc5684d13f8d5204b1f4aca70136ae875dfc64d0bc15f08e16ed78d9ff6a9

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp39-cp39-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 638b198b883135b087a0159ca6acf3d10422432d8e2bb0a8bf54c0f53fef4ba2
MD5 de335271fa50c813b0b396814152c4b1
BLAKE2b-256 76ddde3594028d87a70fa749712321dbbd4dc83e9e3e31b8c4682875495edc17

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: blspy-2.0.1b1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 260.0 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.1b1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 d8b3de9244ee4d4b3d534285558b7db6f1e73f1f3cd7113e1130149da68766df
MD5 95ac5bfa0355d8ff197e23278ab8999e
BLAKE2b-256 183a8f946063d656714ded31430d76ca1592be0cb0a470ff1294a4b7cc5f2c6a

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bb56eebf17c34cb9cd64ef1717ada15f52a063001e2709abd811ae43f733b9a0
MD5 95b9188968d8834b11b62cb84e8272a5
BLAKE2b-256 3754fd223cbe3149d4253f8f10b912f0eb81df94d5930c3397c8ceac4a393264

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ea51a3f4909757fcdee7f94572a42021acbcc0b623abc9538cc915cdac6dcbb9
MD5 120fdbbc0d7b0304ee6e923e9281805a
BLAKE2b-256 00d5874150cc3efc60d01017e27d55557714cc27cd73d2873ed813bdcc099443

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 77d1e847c61cf20707c990d028296310bb9661315873e06ccfd125bed9503187
MD5 8b9324ebb6e05992de15cfa569ba943e
BLAKE2b-256 e205fedd72db116338d84cb6358453a8b2fa9f1fd210c936adaaaae9376d95f3

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp38-cp38-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 132eee0afc827db3fc5169a7bbb3654664c12a8f13b44abd43006ebd57a99d9c
MD5 84ffe554bd65a2f2cbc2ab7d3af14ad1
BLAKE2b-256 a03102bbf53e324b8a17757d6c01cb7e77ef68cf51cd9d173cf2e8ed1f99f519

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: blspy-2.0.1b1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 259.1 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.1b1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 be7b3dd7b9fe3b78d54d48004adaf65de21003b55fe806c6930d0a68b363c8f7
MD5 6c6a16d086ea1a63fa8d82a67235b98f
BLAKE2b-256 9b5496f15c0ef52dd8c35d88a547b11cfd66937445da49dd40ec5c9fa4a93d54

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bd8ba1efa00ea4c51e0ae705a0e470d13551ea8a5e1d00ea34ebecfeb29c31f8
MD5 6a27acba3d72a36733ecf1d89c7cdc23
BLAKE2b-256 9f55d85a725b9adb7674b1c45aee9b85a0f4eb873a4b9d4cbd83ffc0b0829761

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ff46851e9d381237f136e2244818920240a315f076c9f058c8a92e803d7c4c9b
MD5 3c627350ee81bc8ddb1190de22ec697b
BLAKE2b-256 525662cb150dcbb13288827ef5432f84141fc339f5d077f0c3da8401cfcac981

See more details on using hashes here.

File details

Details for the file blspy-2.0.1b1-cp37-cp37m-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.1b1-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 10b59bf2b591761824f92e1328ff1b3a22307acb50b6b0af852179218e5fb94e
MD5 df9193830dc0cd5eda92c3847504c23c
BLAKE2b-256 f7b60bf9ee73a7bc2d2fed89b8349bd9124142dbb628257264b33da8a4dcff2c

See more details on using hashes here.

Supported by

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