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

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

We use Libsodium and have GMP as an optional dependency: 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/.

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

Uploaded Source

Built Distributions

blspy-1.0.7-cp39-cp39-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.9 Windows x86-64

blspy-1.0.7-cp39-cp39-manylinux2014_aarch64.whl (741.7 kB view details)

Uploaded CPython 3.9

blspy-1.0.7-cp39-cp39-manylinux2010_x86_64.whl (822.5 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64

blspy-1.0.7-cp39-cp39-macosx_11_0_arm64.whl (407.2 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

blspy-1.0.7-cp39-cp39-macosx_10_14_x86_64.whl (639.2 kB view details)

Uploaded CPython 3.9 macOS 10.14+ x86-64

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

Uploaded CPython 3.8 Windows x86-64

blspy-1.0.7-cp38-cp38-manylinux2014_aarch64.whl (740.8 kB view details)

Uploaded CPython 3.8

blspy-1.0.7-cp38-cp38-manylinux2010_x86_64.whl (821.9 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

blspy-1.0.7-cp38-cp38-macosx_10_14_x86_64.whl (639.2 kB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

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

Uploaded CPython 3.7m Windows x86-64

blspy-1.0.7-cp37-cp37m-manylinux2014_aarch64.whl (744.6 kB view details)

Uploaded CPython 3.7m

blspy-1.0.7-cp37-cp37m-manylinux2010_x86_64.whl (824.2 kB view details)

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

blspy-1.0.7-cp37-cp37m-macosx_10_14_x86_64.whl (636.9 kB view details)

Uploaded CPython 3.7m macOS 10.14+ x86-64

File details

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

File metadata

  • Download URL: blspy-1.0.7.tar.gz
  • Upload date:
  • Size: 284.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for blspy-1.0.7.tar.gz
Algorithm Hash digest
SHA256 459378a80e8ab470e6211f30a386b3e100818c1ac1ffbd65adbc3bf526439056
MD5 e7b68d53d92219f842f7442fc5a08e38
BLAKE2b-256 30fdc23201575cb156f17d2e608ca3cb8314dc99f662b8be85dc119cb75ee6f0

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: blspy-1.0.7-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for blspy-1.0.7-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 9f32c0cddb1166b1c0f0a9ddd4efd7fd4e54cb98e2793ec839cfef1f6ccc8701
MD5 4f22bc6938dff215f0739d1dd4f5ebc3
BLAKE2b-256 8524d0ccb5d86b873050145df68ca50cb503f895e1a12a122327282efdcbd29f

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: blspy-1.0.7-cp39-cp39-manylinux2014_aarch64.whl
  • Upload date:
  • Size: 741.7 kB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for blspy-1.0.7-cp39-cp39-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c5e902e0eb5fd648189794cd00b8e02e81acaca557819e35a49be6d70fe6a553
MD5 42efefc043ed7df67a6aef8f1b830689
BLAKE2b-256 d38081a6b5669b981ebff8be422131ff94f07b20d6e5f5381e721fd4c56c1449

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: blspy-1.0.7-cp39-cp39-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 822.5 kB
  • Tags: CPython 3.9, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for blspy-1.0.7-cp39-cp39-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 1a5f347a48871f3b0a9e3c84cab34f36690fe922520f56c24b4f0b6b91ea8506
MD5 f44112c37589e89c0d2608fc62cf2149
BLAKE2b-256 b80a26b39ba74cb7c4ddd2728ec50f6b65f4a10aaebdc50b82b5af9b4a79c3c7

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: blspy-1.0.7-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 407.2 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.7

File hashes

Hashes for blspy-1.0.7-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a7b29c1d5d15570f85e7502e8dd0d48f70c530d464dbe4edd14014055a5fad83
MD5 15fb5706c1248ab23f939856a9e8691d
BLAKE2b-256 9f0bbcf7e034dc88cd4b98e8efec013803dd15b40edc3990e76d0d43ed73e29d

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: blspy-1.0.7-cp39-cp39-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 639.2 kB
  • Tags: CPython 3.9, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for blspy-1.0.7-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 9575239355809d0aa33a8fa8f8b36b8372f6e15c8d951d921e4e102990124d62
MD5 782017146711c1d3ebde296ccf03d073
BLAKE2b-256 930ddfcbbbbd0e4101a8bc5aba5871c6207abe7a9eaf31e18b4cfcb351a294e8

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: blspy-1.0.7-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.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for blspy-1.0.7-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 f8049723833f258c80f15e7118e770f64a9af3afa25a81c0c56257d5700bf8b5
MD5 d7689fd1b94efcd1448d5d08dc6297af
BLAKE2b-256 5ad035ecfd0b7275e60ca2a60552d5c6e96e78e9326573366e23ade78f4099d7

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: blspy-1.0.7-cp38-cp38-manylinux2014_aarch64.whl
  • Upload date:
  • Size: 740.8 kB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for blspy-1.0.7-cp38-cp38-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6229f1bb01b6d233707f87859cefb8e5cc37adb670aacb0c4c39614ff938a55a
MD5 fea20582c1ab2d4f889f4a4e7062ff55
BLAKE2b-256 630015b2b6ff550fad15308069a4910b4c046f4934e007f7c295712b303c4e04

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: blspy-1.0.7-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 821.9 kB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for blspy-1.0.7-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 3335eeb7f7ad7ba59484c6c8fed8a46cf6c2007ade2b090c7c83ea95f279a7aa
MD5 be15c290f6a4c990dd6b98ea60b79d95
BLAKE2b-256 3e1dc2474dbfd58093a065826815f17d6e5f5d32d5c28bd280fb7c4d85150834

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: blspy-1.0.7-cp38-cp38-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 639.2 kB
  • Tags: CPython 3.8, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for blspy-1.0.7-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 4932cf5f8e932219c4dd2c1e630924cf793f5df89c04861b86712fb379908785
MD5 aae13dc77cadb837c42c7166d0b0d007
BLAKE2b-256 6939e910144143e3445aa5419d43d1908a1ff76e7bd616ee01ec29cab55fd8cc

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: blspy-1.0.7-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.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for blspy-1.0.7-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 54aaa09a24c66597bc4f86bdaca25e3fe7f0482caab602a4085fceafa9d198b7
MD5 63c41653166f08cc9069c77a7470c2f0
BLAKE2b-256 b24403503f31020520495ab81aa4c4b96ddae101d8b849a89e53a0ac37e340d5

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: blspy-1.0.7-cp37-cp37m-manylinux2014_aarch64.whl
  • Upload date:
  • Size: 744.6 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for blspy-1.0.7-cp37-cp37m-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1c0e4946e1c2bf4a9bf40ca42b063f2d53978feafec93c83a6a480b903841091
MD5 5422ee767bb78cafd70c088ad6b70732
BLAKE2b-256 4e27f8997191d81dcc012430f875bb3f1a6e01947202ab40a7ff469027118378

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: blspy-1.0.7-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 824.2 kB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for blspy-1.0.7-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 1c4df54e2fa39e6d652b1b8707caf4f815a9c398d57bf50417c5cdd36f04e2bd
MD5 b6ad1f8fe93600713506a6efa5fe70f4
BLAKE2b-256 664fca0723c4ead0e9b88e10675f8c49dfd1b31aed64250a1398fcb0e053ea2a

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: blspy-1.0.7-cp37-cp37m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 636.9 kB
  • Tags: CPython 3.7m, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for blspy-1.0.7-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 481355ff46e190f2a885058d1154178ce4f06c8ff7b81cd7facad3e306e6183b
MD5 6b0502a19ccb68f3b0ebc3570f34aa6f
BLAKE2b-256 8257938a08ec21b8faf097f34246cfabd8724796a294d4a674a544fce1d89b44

See more details on using hashes here.

Provenance

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