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. The blst library has been audited.

Features:

  • Non-interactive signature aggregation following IETF specification
  • Works on Windows, Mac, Linux, BSD, arm64, RISC-V
  • 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, python3 and python[3.x]-dev (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 #chia-development channel of Chia's Discord.

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 also supported. 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 for building and testing.

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.3.tar.gz (144.8 kB view details)

Uploaded Source

Built Distributions

blspy-2.0.3-cp312-cp312-win_amd64.whl (268.5 kB view details)

Uploaded CPython 3.12 Windows x86-64

blspy-2.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (357.6 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

blspy-2.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (330.3 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

blspy-2.0.3-cp312-cp312-macosx_11_0_x86_64.whl (323.5 kB view details)

Uploaded CPython 3.12 macOS 11.0+ x86-64

blspy-2.0.3-cp312-cp312-macosx_11_0_arm64.whl (305.0 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

blspy-2.0.3-cp311-cp311-win_amd64.whl (269.0 kB view details)

Uploaded CPython 3.11 Windows x86-64

blspy-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (358.3 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

blspy-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (333.4 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

blspy-2.0.3-cp311-cp311-macosx_11_0_x86_64.whl (321.8 kB view details)

Uploaded CPython 3.11 macOS 11.0+ x86-64

blspy-2.0.3-cp311-cp311-macosx_11_0_arm64.whl (305.1 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

blspy-2.0.3-cp310-cp310-win_amd64.whl (267.6 kB view details)

Uploaded CPython 3.10 Windows x86-64

blspy-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (357.5 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

blspy-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (331.6 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

blspy-2.0.3-cp310-cp310-macosx_11_0_x86_64.whl (320.6 kB view details)

Uploaded CPython 3.10 macOS 11.0+ x86-64

blspy-2.0.3-cp310-cp310-macosx_11_0_arm64.whl (303.9 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

blspy-2.0.3-cp39-cp39-win_amd64.whl (262.1 kB view details)

Uploaded CPython 3.9 Windows x86-64

blspy-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (357.8 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

blspy-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (331.9 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

blspy-2.0.3-cp39-cp39-macosx_11_0_x86_64.whl (320.6 kB view details)

Uploaded CPython 3.9 macOS 11.0+ x86-64

blspy-2.0.3-cp39-cp39-macosx_11_0_arm64.whl (304.0 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

blspy-2.0.3-cp38-cp38-win_amd64.whl (267.4 kB view details)

Uploaded CPython 3.8 Windows x86-64

blspy-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (356.9 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

blspy-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (331.1 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

blspy-2.0.3-cp38-cp38-macosx_11_0_x86_64.whl (320.3 kB view details)

Uploaded CPython 3.8 macOS 11.0+ x86-64

blspy-2.0.3-cp38-cp38-macosx_11_0_arm64.whl (303.7 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

File details

Details for the file blspy-2.0.3.tar.gz.

File metadata

  • Download URL: blspy-2.0.3.tar.gz
  • Upload date:
  • Size: 144.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for blspy-2.0.3.tar.gz
Algorithm Hash digest
SHA256 246dd0c69d4e53aa66c06d674402040f2f86b352afe2135712f7ec6a62b2ad8c
MD5 640b939802c79cd629920d5cb41d4537
BLAKE2b-256 2a9eec02e51b7f93c487dbc2fa1413932b745ce42490d49d10cf785bfaf5f8ca

See more details on using hashes here.

File details

Details for the file blspy-2.0.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: blspy-2.0.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 268.5 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for blspy-2.0.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 b26199bdbbbd02aacd9ffc802aad983a76b1ffd6745a6b838629b155ec0c63fe
MD5 c4be011110358190472627feead904e8
BLAKE2b-256 9dc1334b1cba24c6a8a4b9a693a311ffb54bed7329877bbe3e603136546a244f

See more details on using hashes here.

File details

Details for the file blspy-2.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 903afd454563ce26c6b55c9b11500b688503103f96673e37b8424a1af0a47e96
MD5 3b04f15fcb020ec26cd43876380a4132
BLAKE2b-256 a9c08652f779edd6b0222fcea7474aa075f3bb661960e01144918019c8edc446

See more details on using hashes here.

File details

Details for the file blspy-2.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for blspy-2.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ff263b4a8967a0337d31904837ca53678dd3982187c9d37b34804e8b682ffce9
MD5 c3c184d23da599adb2b1e57940cc6823
BLAKE2b-256 8a82403c13f5afba6eea44a3ba8ec363a9bc9dc1521f7d060c50baaa15b40487

See more details on using hashes here.

File details

Details for the file blspy-2.0.3-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.3-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 43e7da8f2880106d522dfb26f8015a6771ec3306c3baa7fc22561f6c0ba38a7c
MD5 196a5d0bad24fe23a143a5ab87c24f0e
BLAKE2b-256 88a64cf71d3aa664667daf512371d2a6e4758820b6630ceaa437044f9481de37

See more details on using hashes here.

File details

Details for the file blspy-2.0.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blspy-2.0.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 96c78e035ea15c826e2330ad2a2619a6cb3519ac977f74a608911ef2c105d3ec
MD5 f4447442704873ec147780650975eb0d
BLAKE2b-256 6260e257a23c92f21afe0feda38a70949bda40a6afec5fa989b652780ce8cc97

See more details on using hashes here.

File details

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

File metadata

  • Download URL: blspy-2.0.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 269.0 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for blspy-2.0.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fe2ca8e6c4e4014b5ebbf8d67e07a93161a72fc86f9d7c193d95da6886743be6
MD5 7e712c46841bae5ebdf3ba824b4ab276
BLAKE2b-256 f087d49fd0d7fe73d72cc1c5c1bf24f112fad67a47c38da8c2a4e2204447c796

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0ac98528abfd04bd11c1cad59127b3fa6e03f4d537497d6e789841c706aad5e4
MD5 e723355ac28b4c09d464d60200f068cb
BLAKE2b-256 b1d89ecbbb13bdeb16f15c7c5ca93a85e108f6158554549f5935340131b3e01c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c739f9d9bf322c80c3bb41c8db7b59a7771dda4583fca70e25c582d1cb00234b
MD5 10ca2591f632e8e01db11d03d498508d
BLAKE2b-256 60ce3dce879a989fa9d9a368652f0ff3d2750d2a29639262a7bda8240309eeed

See more details on using hashes here.

File details

Details for the file blspy-2.0.3-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.3-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 139772d265c3384ee3972c2d81ff0605ebabc8221fef3b699981246246ca8c41
MD5 61804fd99022039dab7e02a28f4cfcbc
BLAKE2b-256 42620c9423b06d6a870f46305709c0f9c03f65a3fb7df7a5d68371a95dc6d550

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8089718d17bd722826a9518548e904f4dfe8da14fa9ffee4fd156fa71258f793
MD5 54f847933efb1eb953893732460350c6
BLAKE2b-256 e1b34dac2bdbea8f0e2030532662030f159a28eed1087a295054bbd0b1d31b26

See more details on using hashes here.

File details

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

File metadata

  • Download URL: blspy-2.0.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 267.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for blspy-2.0.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a252263e4ccdebb81b03bc570a08bebe703d335c912e3488921569f9b2b2400a
MD5 49b6dc295eb083bd6149651edf4aca41
BLAKE2b-256 ea2ddb7538fdeca0a6de281677606ff5c282166e3ec991415c3515652484e0a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 727ee8ccd6a9871b116e8e8b787a3fa4cf864bcab3b8b9272246f9057bd4510d
MD5 c4d06e521da53399c578433cd4beeb31
BLAKE2b-256 09b07cd8d723a36efcdbb3271cf31d5780444e0e78cf321d29b7973ff9ad22d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b3af4751cc5751778294deb2f561b52f4130fcfb142a3803be9151910ba38ff8
MD5 c0c22ac8e5dfaa368369b2c782d30f42
BLAKE2b-256 07725339988f0ce4d81ec254dfc3c95742df9f83412efab58d2a5408514818a4

See more details on using hashes here.

File details

Details for the file blspy-2.0.3-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.3-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 869efdb5196c8d14d07c8e92cf758e298b0829b93a565ba35dd642c333757d1a
MD5 d03ceba342a103d43677a3f4ca45b314
BLAKE2b-256 f32fb59cba959eeb2e5e457ca3ff8c1f4337737fd398c6e86ac20521c5d75c9f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e8b0c4fbab2461772c05cc02cd29a356b6115368afa7202cacd83bbf3b047534
MD5 bf25ff6fd7508e1c250fc403c9fe08c6
BLAKE2b-256 780698fd5a36d7f50633a29a481aa945780a6aeeb63652a880dbe23faa998954

See more details on using hashes here.

File details

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

File metadata

  • Download URL: blspy-2.0.3-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 262.1 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for blspy-2.0.3-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 f0e168006f877319d29686be04c9226e03df055bf2c9583ac696639bb732a63c
MD5 20c06594bdd96165da765264f93084a6
BLAKE2b-256 865320ee8102acd1f245fcefb2599333fe962a079e103670ae3dfd4a9e59ac52

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d18c877523a6ab1c08f06f1962e79c49b52e8a77a8a67dab7759fd2ed0908125
MD5 50bce65ba805c031e71c9884cba47d5a
BLAKE2b-256 42b727f1dab2378602fc3eb314ac9c61d10ac26d8dd9c4c582c76d03b4375ef9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 62491c8a4b8810771443517fd2e2738a4c96d8a1fc5a1b3ae522d7d6bace3f49
MD5 d219043f4404a224405bf14018160281
BLAKE2b-256 492ec8ffbf0e6fd090fde3d7d41cabe33154e638381add370a4ddd8f633893e0

See more details on using hashes here.

File details

Details for the file blspy-2.0.3-cp39-cp39-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.3-cp39-cp39-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 647abe2f898eb99e7e9978eec2a4e42589a4378a73f1f8037f8594e4b92b3797
MD5 8959c425d9b0eae530ef1ff294e406fb
BLAKE2b-256 3fbec0653389e4747f125c29ad454a19891ff673d4fd4f9be5512323adf47857

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.3-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a5805418da017833f9df22bb382afac30f46747e25562563c65dff1bd502d27b
MD5 e27a955953a060e51bd807c5e93ec67b
BLAKE2b-256 be48e054dcebca4ae67aed8caad2c6dc089f3819999a9366a420acfe9f96299f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: blspy-2.0.3-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 267.4 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for blspy-2.0.3-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 df9bad403835dd6aec941089089bbf43a3a4fde038acbe0062d3efa6a7ecae83
MD5 1a4a3dba5460913760711ac25e3633ce
BLAKE2b-256 b618166126115a61041456d61b90338c873a17832ea4777f8d1984923a3267a4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9048930d4c7984a6aa9b4588c45f1a75532be5f0426453e895bf6b57ad792eeb
MD5 d5300839b5a1744adfd3d59bdc75fc8a
BLAKE2b-256 cccf245d72d6ef389336e75c007c74ac63d51cbe0f86501535c5ec21299383d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0bd79a85c142afddee7a5eed58b041a28fa7c7f3c07419aa8bb03a9213a8c6e7
MD5 b027b3b0e2e54764e5311038133a447e
BLAKE2b-256 cdf55e7e8c14ac6b8babc5391a7da9147625382209dadb1bd499b9a20f7c26e2

See more details on using hashes here.

File details

Details for the file blspy-2.0.3-cp38-cp38-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for blspy-2.0.3-cp38-cp38-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 a1dc830abd7fd663a39315bdaef155a32a97936b6fffe84c313db9098bfdebfd
MD5 b1c02006f1748e2aa73b11a405223eb0
BLAKE2b-256 489dca25c5f5927bf119b916a51a392878c9bffaeddbc767729d7ffca7d3abec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blspy-2.0.3-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9103e08c1ed3efa98c220cd979580f681365e26167ebd717f4ecbda27d24b6a7
MD5 5174868662a66b2cf686de19358bd632
BLAKE2b-256 6d672dd0c3128c38df935815627e809c19b792d6d6c125ea8590d7fe90179c61

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