Skip to main content

BLS signatures in c++ (python bindings)

Project description

BLS Signatures implementation

Build 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 relic toolkit 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/build/_deps/relic-src/include -Ibls-signatures/build/_deps/relic-build/include -Ibls-signatures/src -L./bls-signatures/build/ -l bls yourapp.cpp

Notes on dependencies

Libsodium and GMP are optional dependencies: libsodium gives secure memory allocation, and GMP speeds up the library by ~ 3x. MPIR is used on Windows via GitHub Actions instead. To install them, 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/. libsodium is dynamically linked unless the environment variable $CIBUILDWHEEL is set which will then cause libsodium to statically link.

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 and relic from a chia relic forked repository for Windows. Building is then managed by cibuildwheel. Further installation is then available via pip install blspy e.g. The ci builds include GMP and 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.

GMP license

GMP is distributed under the GNU LGPL v3 license

Relic license

Relic 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-1.0.5.tar.gz (280.1 kB view details)

Uploaded Source

Built Distributions

blspy-1.0.5-cp39-cp39-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.9 Windows x86-64

blspy-1.0.5-cp39-cp39-manylinux2014_aarch64.whl (724.3 kB view details)

Uploaded CPython 3.9

blspy-1.0.5-cp39-cp39-manylinux2010_x86_64.whl (847.7 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64

blspy-1.0.5-cp39-cp39-macosx_11_0_arm64.whl (311.4 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

blspy-1.0.5-cp39-cp39-macosx_10_14_x86_64.whl (649.7 kB view details)

Uploaded CPython 3.9 macOS 10.14+ x86-64

blspy-1.0.5-cp38-cp38-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.8 Windows x86-64

blspy-1.0.5-cp38-cp38-manylinux2014_aarch64.whl (724.0 kB view details)

Uploaded CPython 3.8

blspy-1.0.5-cp38-cp38-manylinux2010_x86_64.whl (847.1 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

blspy-1.0.5-cp38-cp38-macosx_10_14_x86_64.whl (649.7 kB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

blspy-1.0.5-cp37-cp37m-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.7m Windows x86-64

blspy-1.0.5-cp37-cp37m-manylinux2014_aarch64.whl (725.6 kB view details)

Uploaded CPython 3.7m

blspy-1.0.5-cp37-cp37m-manylinux2010_x86_64.whl (849.2 kB view details)

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

blspy-1.0.5-cp37-cp37m-macosx_10_14_x86_64.whl (647.7 kB view details)

Uploaded CPython 3.7m macOS 10.14+ x86-64

File details

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

File metadata

  • Download URL: blspy-1.0.5.tar.gz
  • Upload date:
  • Size: 280.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.11

File hashes

Hashes for blspy-1.0.5.tar.gz
Algorithm Hash digest
SHA256 b835f301d1b37f245bb0c56594b35ddc32bc17f19fa2f757dbddf3e4c7a5e9e8
MD5 8df46f43b031c574ed0429b62b242a93
BLAKE2b-256 653976db52ad719dbd3feef2318f194332183ee48f50e3f710bc4199b9b019d3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: blspy-1.0.5-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for blspy-1.0.5-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 3d8935c37f7ed330f25413014b0a366abc741694d88b2c0d2b63899df4d8aa55
MD5 9af2efc95163b1702a3e960d7caf36d3
BLAKE2b-256 4020fa19e883ac55520b466a06c3059e826c1a62cca7ebf868e756a0a6a6e98e

See more details on using hashes here.

File details

Details for the file blspy-1.0.5-cp39-cp39-manylinux2014_aarch64.whl.

File metadata

  • Download URL: blspy-1.0.5-cp39-cp39-manylinux2014_aarch64.whl
  • Upload date:
  • Size: 724.3 kB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for blspy-1.0.5-cp39-cp39-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 38970227396e5905aa6c5db3a4f925b58c3263f47c934ac4794833730bd4d2a6
MD5 be3d5d2d1086c90cdb5a62981f8371b5
BLAKE2b-256 b8ad6ccdb9564db61e0e103c71988104f6aea90884ba7f1531d6573def9fc879

See more details on using hashes here.

File details

Details for the file blspy-1.0.5-cp39-cp39-manylinux2010_x86_64.whl.

File metadata

  • Download URL: blspy-1.0.5-cp39-cp39-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 847.7 kB
  • Tags: CPython 3.9, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.11

File hashes

Hashes for blspy-1.0.5-cp39-cp39-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 489cc2173c97f45039532172ea8d8d9028e8cf8572e3191e38b71e453df0468c
MD5 b11f5774cd582eb962b6999795cc371a
BLAKE2b-256 ce4458492d249ab76f88b50bd3dd6056eebd7cc837768955d86d20401eb217c7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: blspy-1.0.5-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 311.4 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.6

File hashes

Hashes for blspy-1.0.5-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f830e81bbb205fba8fa26026405d329674cdbf693442d85b9701461512844b5c
MD5 c5da16da09536b4edd67076160da94fd
BLAKE2b-256 34abb9fca83c1104afae128111f68bf32bb705eea2892a611bbca8eec7555794

See more details on using hashes here.

File details

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

File metadata

  • Download URL: blspy-1.0.5-cp39-cp39-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 649.7 kB
  • Tags: CPython 3.9, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.11

File hashes

Hashes for blspy-1.0.5-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 27a3a95e49be8599ddc8458e6ea2593acddf34054166b47f2b0a5a2460d56bbe
MD5 78a3482bc3411f62398376983cd64201
BLAKE2b-256 c9a4b64b18df30571141cc6b80d6fa0e331a5b4b721c1993d28327a2e10bc46b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: blspy-1.0.5-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for blspy-1.0.5-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 ee006f01378d3bd9b4d46f16862abc8290bd179dc5996ca6aea3474a52dcd541
MD5 f47a0ece3c274db0b587f08306c03bd6
BLAKE2b-256 ef3fc2d9a82e13a558107a30b55f3561baefea9385d758a1ffa63cbc3da30d41

See more details on using hashes here.

File details

Details for the file blspy-1.0.5-cp38-cp38-manylinux2014_aarch64.whl.

File metadata

  • Download URL: blspy-1.0.5-cp38-cp38-manylinux2014_aarch64.whl
  • Upload date:
  • Size: 724.0 kB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for blspy-1.0.5-cp38-cp38-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 538287788c98dea1db68bcb96feea9629716303beabd556d71d096b189e1b14f
MD5 626eb27b5e2b377da0c4bb32bc1f8257
BLAKE2b-256 b2c496fe250379c3c06a416ba6923131ba044d9874c458af56ea9222e0922f51

See more details on using hashes here.

File details

Details for the file blspy-1.0.5-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: blspy-1.0.5-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 847.1 kB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.11

File hashes

Hashes for blspy-1.0.5-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 43a7cdbef6644c3451564a8fa34a4bdc2df889bf86ef050d841434f6c61ba9f2
MD5 949aa692438e3a480c1558395fba5c5e
BLAKE2b-256 f37b84502d4e477da0e2c9f24e683887b7ce295f07d08a0db36ad5fa7b0e77ba

See more details on using hashes here.

File details

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

File metadata

  • Download URL: blspy-1.0.5-cp38-cp38-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 649.7 kB
  • Tags: CPython 3.8, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.11

File hashes

Hashes for blspy-1.0.5-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 a8acb10603cf3344c05f81e8021fcbfcf0b3d0d65484c5782e9660a31eb1cfd4
MD5 9495a6aae49c77bdb52103484ed7bbfb
BLAKE2b-256 c2ccd0b2c391d0fb99292455d1e7cea494bd4db02ddb3b13a8a3035cfdbb992b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: blspy-1.0.5-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for blspy-1.0.5-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 5c897cac3ec8748dcea4d8f2ab6696b4e992576f150e8514d06f89bce6dc6fe4
MD5 dd85b0ca133bf8250b2e66db38c95400
BLAKE2b-256 abc42fc2d7f8f66996cf42dbc6cce92fa86b32c0068064928ab935d93e37ee6b

See more details on using hashes here.

File details

Details for the file blspy-1.0.5-cp37-cp37m-manylinux2014_aarch64.whl.

File metadata

  • Download URL: blspy-1.0.5-cp37-cp37m-manylinux2014_aarch64.whl
  • Upload date:
  • Size: 725.6 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for blspy-1.0.5-cp37-cp37m-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ef7f387c6867780a240d163be45fccdfa19e964c619ab6cb89b2b582bb16036f
MD5 09b888ca7c6fce913edd587a07f21c80
BLAKE2b-256 39a8c1d045e6138f01ec61ed680ce4ed71edc0f792c964d8d4cca498e20d0c7d

See more details on using hashes here.

File details

Details for the file blspy-1.0.5-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: blspy-1.0.5-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 849.2 kB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.11

File hashes

Hashes for blspy-1.0.5-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 dd63dc0cb0fc99dc73656d5361204aade2788b6f38740a57ea7fbe65a08296ff
MD5 40e9b81f272b73ca30378d8bdd4d9ebc
BLAKE2b-256 9371cda1e3b5b9b6a4f25ff5fc7a378d70d9bc991c31988c0dc5678e5fe88be4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: blspy-1.0.5-cp37-cp37m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 647.7 kB
  • Tags: CPython 3.7m, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.11

File hashes

Hashes for blspy-1.0.5-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 f95496268dfbf4b8ea8da592091cdf4869cb05da03222dcb66ad3e42aba10c10
MD5 0498888d749d38be9443f72253df9520
BLAKE2b-256 d85825d5f2596813822eb917b37b1e876aa8f4876378e634d74845650bbac297

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