Source code for jam.types.protocol.crypto

from jam.types.base import (
    ByteArray32,
    ByteArray64,
    ByteArray96,
    ByteArray144,
    ByteArray784,
)
from jam.types.base.sequences.bytes.byte_array import ByteArray
from jam.types.base.sequences.bytes.bytes import Bytes

# Public key types
BandersnatchPublic = ByteArray32
Ed25519Public = ByteArray32
BlsPublic = ByteArray144

BandersnatchRingRoot = ByteArray144

# Signature types
Ed25519Signature = ByteArray64
BandersnatchVrfSignature = ByteArray96
BandersnatchRingVrfSignature = ByteArray784


# Hash functions
[docs] class Hash: """Cryptographic hash functions that produce 32-byte outputs"""
[docs] @staticmethod def blake2b(data: bytes) -> ByteArray32: """Blake2b hash function""" from hashlib import blake2b if not isinstance(data, bytes): data = bytes(data) return ByteArray32(blake2b(data, digest_size=32).digest())
[docs] @staticmethod def sha256(data: bytes) -> ByteArray32: """SHA256 hash function""" from hashlib import sha256 if not isinstance(data, bytes): data = bytes(data) return ByteArray32(sha256(data).digest())
# Hash types HeaderHash = ByteArray32 StateRoot = ByteArray32 BeefyRoot = ByteArray32 OpaqueHash = ByteArray32 Entropy = ByteArray32 WorkReportHash = ByteArray32