Crypto
BLS Cryptography
BLS signature implementation for Saline SDK.
This module provides BLS signature functionality using the BLS12-381 curve, following the IETF BLS signature standard draft v4 (basic scheme).
This implementation matches the implementation in Saline exactly: - Uses raw message bytes for signing (no pre-hashing) - Uses BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_ as domain parameter - Follows the same serialization format
- class saline_sdk.crypto.bls.BLS[source]
Bases:
objectBLS signature implementation using the basic scheme.
- class PrivateKey
Bases:
pybind11_object- aggregate(self: List[blspy.PrivateKey]) blspy.PrivateKey
- from_bytes(self: buffer) blspy.PrivateKey
- get_g1(self: blspy.PrivateKey) bls::G1Element
- PRIVATE_KEY_SIZE = 32
- static aggregate_signatures(signatures)[source]
Aggregate multiple BLS signatures.
- Parameters:
signatures (
list[bytes]) – List of signatures in compressed form- Return type:
- Returns:
Aggregated signature in compressed form
- Raises:
ValueError – If aggregation fails
- static sign(sk, message, dst=None)[source]
Sign a message using BLS signature scheme.
- Parameters:
- Return type:
G2Element- Returns:
Signature in compressed form
- Raises:
ValueError – If signing fails
Note
This matches the implementation exactly: - Signs raw message bytes directly (no pre-hashing) - Uses BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_ domain parameter
- static sk_to_pk(sk)[source]
Convert private key to public key bytes.
- Parameters:
sk (
Union[bytes,PrivateKey]) – Private key (bytes or PrivateKey object)- Returns:
Public key in compressed form
- Return type:
- Raises:
ValueError – If conversion fails
- static verify(pk_bytes, message, signature_bytes)[source]
Verify a message signature using a public key.
- static verify_aggregate(signature, messages, public_keys)[source]
Verify an aggregate signature.
- Parameters:
- Return type:
- Returns:
True if aggregate signature is valid
Note
BasicSchemeMPL.aggregate_verify() internally uses the domain parameter “BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_” which matches Saline’s.
Key Derivation
- saline_sdk.crypto.key_derivation.debug_print(*args, **kwargs)[source]
Helper function for debug printing
- saline_sdk.crypto.key_derivation.derive_child_SK(parent_SK, index)[source]
Derive a child secret key from a parent secret key and index. parent_SK is in big-endian format (I2OSP).
- saline_sdk.crypto.key_derivation.derive_key_from_path(seed, path='m/0')[source]
Derive a key from a seed and path. Path format: “m/0” for first child of master key.
- saline_sdk.crypto.key_derivation.derive_master_SK(seed)[source]
Derive master secret key from seed.
- saline_sdk.crypto.key_derivation.hkdf_expand(prk, info, length=32)[source]
HKDF-Expand (RFC5869) using SHA-256.
Crypto Module Interface
Saline SDK Crypto Module
This module provides cryptographic functionality for the Saline SDK, including: - BLS key derivation (EIP-2333) - BLS signatures - Signature verification - Signature aggregation - Public key operations
- class saline_sdk.crypto.BLS[source]
Bases:
objectBLS signature implementation using the basic scheme.
- class PrivateKey
Bases:
pybind11_object- aggregate(self: List[blspy.PrivateKey]) blspy.PrivateKey
- from_bytes(self: buffer) blspy.PrivateKey
- get_g1(self: blspy.PrivateKey) bls::G1Element
- PRIVATE_KEY_SIZE = 32
- static aggregate_signatures(signatures)[source]
Aggregate multiple BLS signatures.
- Parameters:
signatures (
list[bytes]) – List of signatures in compressed form- Return type:
- Returns:
Aggregated signature in compressed form
- Raises:
ValueError – If aggregation fails
- static sign(sk, message, dst=None)[source]
Sign a message using BLS signature scheme.
- Parameters:
- Return type:
G2Element- Returns:
Signature in compressed form
- Raises:
ValueError – If signing fails
Note
This matches the implementation exactly: - Signs raw message bytes directly (no pre-hashing) - Uses BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_ domain parameter
- static sk_to_pk(sk)[source]
Convert private key to public key bytes.
- Parameters:
sk (
Union[bytes,PrivateKey]) – Private key (bytes or PrivateKey object)- Returns:
Public key in compressed form
- Return type:
- Raises:
ValueError – If conversion fails
- static verify(pk_bytes, message, signature_bytes)[source]
Verify a message signature using a public key.
- static verify_aggregate(signature, messages, public_keys)[source]
Verify an aggregate signature.
- Parameters:
- Return type:
- Returns:
True if aggregate signature is valid
Note
BasicSchemeMPL.aggregate_verify() internally uses the domain parameter “BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_” which matches Saline’s.
- saline_sdk.crypto.derive_child_SK(parent_SK, index)[source]
Derive a child secret key from a parent secret key and index. parent_SK is in big-endian format (I2OSP).