synor/sdk/python/examples/crypto_example.py
Gulshan Yadav 9416d76108 Add IBC and ZK SDK examples for Rust
- Introduced `ibc_example.rs` demonstrating Inter-Blockchain Communication operations including cross-chain transfers, channel management, packet handling, and relayer operations.
- Introduced `zk_example.rs` showcasing Zero-Knowledge proof operations such as circuit compilation, proof generation and verification, and on-chain verification with multiple proving systems.
2026-01-28 14:15:51 +05:30

265 lines
8.1 KiB
Python

#!/usr/bin/env python3
"""
Synor Crypto SDK Examples for Python
Demonstrates quantum-resistant cryptographic operations including:
- Hybrid Ed25519 + Dilithium3 signatures
- BIP-39 mnemonic generation and validation
- Post-quantum algorithms (Falcon, SPHINCS+)
- Key derivation functions
"""
import asyncio
import os
from synor_crypto import (
SynorCrypto,
CryptoConfig,
Network,
FalconVariant,
SphincsVariant,
DerivationConfig,
PasswordDerivationConfig,
DerivationPath,
)
async def main():
"""Main entry point."""
# Initialize client
config = CryptoConfig(
api_key=os.environ.get("SYNOR_API_KEY", "your-api-key"),
endpoint="https://crypto.synor.io/v1",
timeout=30000,
retries=3,
debug=False,
default_network=Network.MAINNET,
)
crypto = SynorCrypto(config)
try:
# Check service health
healthy = await crypto.health_check()
print(f"Service healthy: {healthy}\n")
# Example 1: Mnemonic operations
await mnemonic_example(crypto)
# Example 2: Keypair generation
await keypair_example(crypto)
# Example 3: Hybrid signing
await signing_example(crypto)
# Example 4: Falcon post-quantum signatures
await falcon_example(crypto)
# Example 5: SPHINCS+ post-quantum signatures
await sphincs_example(crypto)
# Example 6: Key derivation
await kdf_example(crypto)
# Example 7: Hashing
await hash_example(crypto)
finally:
await crypto.close()
async def mnemonic_example(crypto: SynorCrypto):
"""Mnemonic generation and validation."""
print("=== Mnemonic Operations ===")
# Generate a 24-word mnemonic (256-bit entropy)
mnemonic = await crypto.mnemonic.generate(24)
print(f"Generated mnemonic: {mnemonic.phrase}")
print(f"Word count: {mnemonic.word_count}")
# Validate a mnemonic
validation = await crypto.mnemonic.validate(mnemonic.phrase)
print(f"Valid: {validation.valid}")
if not validation.valid:
print(f"Error: {validation.error}")
# Convert mnemonic to seed
seed = await crypto.mnemonic.to_seed(mnemonic.phrase, "optional-passphrase")
print(f"Seed (hex): {seed.hex()[:32]}...")
# Word suggestions for autocomplete
suggestions = await crypto.mnemonic.suggest_words("aban", 5)
print(f"Suggestions for 'aban': {', '.join(suggestions)}")
print()
async def keypair_example(crypto: SynorCrypto):
"""Keypair generation and address derivation."""
print("=== Keypair Operations ===")
# Generate a random keypair
keypair = await crypto.keypairs.generate()
print("Generated hybrid keypair:")
print(f" Ed25519 public key size: {len(keypair.public_key.ed25519_bytes)} bytes")
print(f" Dilithium public key size: {len(keypair.public_key.dilithium_bytes)} bytes")
print(f" Total public key size: {keypair.public_key.size} bytes")
# Get addresses for different networks
print("\nAddresses:")
print(f" Mainnet: {keypair.get_address(Network.MAINNET)}")
print(f" Testnet: {keypair.get_address(Network.TESTNET)}")
print(f" Devnet: {keypair.get_address(Network.DEVNET)}")
# Create keypair from mnemonic (deterministic)
mnemonic = await crypto.mnemonic.generate(24)
keypair2 = await crypto.keypairs.from_mnemonic(mnemonic.phrase, "")
print(f"\nKeypair from mnemonic: {keypair2.get_address(Network.MAINNET)[:20]}...")
# Derive child keypair using BIP-44 path
path = DerivationPath.external(0, 0) # m/44'/21337'/0'/0/0
print(f"Derivation path: {path}")
print()
async def signing_example(crypto: SynorCrypto):
"""Hybrid signature operations (Ed25519 + Dilithium3)."""
print("=== Hybrid Signing ===")
# Generate keypair
keypair = await crypto.keypairs.generate()
# Sign a message
message = b"Hello, quantum-resistant world!"
signature = await crypto.signing.sign(keypair, message)
print("Signature created:")
print(f" Ed25519 component: {len(signature.ed25519_bytes)} bytes")
print(f" Dilithium component: {len(signature.dilithium_bytes)} bytes")
print(f" Total signature size: {signature.size} bytes")
# Verify the signature
valid = await crypto.signing.verify(keypair.public_key, message, signature)
print(f"\nVerification result: {valid}")
# Verify with tampered message fails
tampered_message = b"Hello, tampered message!"
invalid_result = await crypto.signing.verify(
keypair.public_key, tampered_message, signature
)
print(f"Tampered message verification: {invalid_result}")
print()
async def falcon_example(crypto: SynorCrypto):
"""Falcon post-quantum signature example."""
print("=== Falcon Post-Quantum Signatures ===")
# Generate Falcon-512 keypair (128-bit security)
falcon512 = await crypto.falcon.generate(FalconVariant.FALCON512)
print("Falcon-512 keypair:")
print(f" Public key: {len(falcon512.public_key.key_bytes)} bytes")
print(f" Security level: 128-bit")
# Generate Falcon-1024 keypair (256-bit security)
falcon1024 = await crypto.falcon.generate(FalconVariant.FALCON1024)
print("\nFalcon-1024 keypair:")
print(f" Public key: {len(falcon1024.public_key.key_bytes)} bytes")
print(f" Security level: 256-bit")
# Sign with Falcon-512
message = b"Post-quantum secure message"
signature = await crypto.falcon.sign(falcon512, message)
print(f"\nFalcon-512 signature: {len(signature.signature_bytes)} bytes")
# Verify
valid = await crypto.falcon.verify(
falcon512.public_key.key_bytes, message, signature
)
print(f"Verification: {valid}")
print()
async def sphincs_example(crypto: SynorCrypto):
"""SPHINCS+ post-quantum signature example (hash-based)."""
print("=== SPHINCS+ Hash-Based Signatures ===")
# SPHINCS+ variants with different security levels
variants = [
(SphincsVariant.SHAKE128S, 128, 7856),
(SphincsVariant.SHAKE192S, 192, 16224),
(SphincsVariant.SHAKE256S, 256, 29792),
]
# Generate and demonstrate each variant
for variant, security, sig_size in variants:
keypair = await crypto.sphincs.generate(variant)
print(f"SPHINCS+ {variant.value}:")
print(f" Security level: {security}-bit")
print(f" Expected signature size: {sig_size} bytes")
# Sign a message
message = b"Hash-based quantum security"
signature = await crypto.sphincs.sign(keypair, message)
print(f" Actual signature size: {len(signature.signature_bytes)} bytes")
# Verify
valid = await crypto.sphincs.verify(
keypair.public_key.key_bytes, message, signature
)
print(f" Verification: {valid}\n")
async def kdf_example(crypto: SynorCrypto):
"""Key derivation functions."""
print("=== Key Derivation Functions ===")
# HKDF (HMAC-based Key Derivation Function)
seed = b"master-secret-key-material-here"
hkdf_config = DerivationConfig(
salt=b"application-salt",
info=b"encryption-key",
output_length=32,
)
derived_key = await crypto.kdf.derive_key(seed, hkdf_config)
print(f"HKDF derived key: {derived_key.hex()}")
# PBKDF2 (Password-Based Key Derivation Function)
password = b"user-password"
pbkdf2_config = PasswordDerivationConfig(
salt=b"random-salt-value",
iterations=100000,
output_length=32,
)
password_key = await crypto.kdf.derive_from_password(password, pbkdf2_config)
print(f"PBKDF2 derived key: {password_key.hex()}")
print()
async def hash_example(crypto: SynorCrypto):
"""Cryptographic hash functions."""
print("=== Hash Functions ===")
data = b"Data to hash"
# SHA3-256 (FIPS 202)
sha3 = await crypto.hash.sha3_256(data)
print(f"SHA3-256: {sha3.hex}")
# BLAKE3 (fast, parallel)
blake3 = await crypto.hash.blake3(data)
print(f"BLAKE3: {blake3.hex}")
# Keccak-256 (Ethereum compatible)
keccak = await crypto.hash.keccak256(data)
print(f"Keccak: {keccak.hex}")
print()
if __name__ == "__main__":
asyncio.run(main())