synor/sdk/kotlin/examples/CryptoExample.kt
Gulshan Yadav e169c492aa Add Swift examples for Synor DEX, IBC, and ZK SDKs
- Introduced DexExample.swift demonstrating decentralized exchange operations including spot trading, perpetual futures, liquidity provision, order book management, and portfolio tracking.
- Added IbcExample.swift showcasing inter-blockchain communication operations such as cross-chain transfers, channel management, packet handling, and relayer operations.
- Created ZkExample.swift illustrating zero-knowledge proof operations including circuit compilation, proof generation and verification, and trusted setup ceremonies.
2026-01-28 14:30:19 +05:30

233 lines
7.7 KiB
Kotlin

package io.synor.examples
import io.synor.crypto.*
import io.synor.crypto.types.*
import kotlinx.coroutines.runBlocking
/**
* Synor Crypto SDK Examples for Kotlin
*
* Demonstrates quantum-resistant cryptographic operations:
* - Hybrid Ed25519 + Dilithium3 signatures
* - BIP-39 mnemonic generation and validation
* - Post-quantum algorithms (Falcon, SPHINCS+)
* - Key derivation functions
*/
fun main() = runBlocking {
// Initialize client
val config = CryptoConfig(
apiKey = System.getenv("SYNOR_API_KEY") ?: "your-api-key",
endpoint = "https://crypto.synor.io/v1",
timeout = 30_000,
retries = 3,
debug = false,
defaultNetwork = Network.MAINNET
)
val crypto = SynorCrypto(config)
try {
// Check service health
val healthy = crypto.healthCheck()
println("Service healthy: $healthy\n")
// Run examples
mnemonicExample(crypto)
keypairExample(crypto)
signingExample(crypto)
falconExample(crypto)
sphincsExample(crypto)
kdfExample(crypto)
hashExample(crypto)
} finally {
crypto.close()
}
}
suspend fun mnemonicExample(crypto: SynorCrypto) {
println("=== Mnemonic Operations ===")
// Generate a 24-word mnemonic (256-bit entropy)
val mnemonic = crypto.mnemonic.generate(24)
println("Generated mnemonic: ${mnemonic.phrase}")
println("Word count: ${mnemonic.wordCount}")
// Validate a mnemonic
val validation = crypto.mnemonic.validate(mnemonic.phrase)
println("Valid: ${validation.isValid}")
if (!validation.isValid) {
println("Error: ${validation.error}")
}
// Convert mnemonic to seed
val seed = crypto.mnemonic.toSeed(mnemonic.phrase, "optional-passphrase")
println("Seed (hex): ${seed.toHex().take(32)}...")
// Word suggestions for autocomplete
val suggestions = crypto.mnemonic.suggestWords("aban", limit = 5)
println("Suggestions for 'aban': ${suggestions.joinToString(", ")}")
println()
}
suspend fun keypairExample(crypto: SynorCrypto) {
println("=== Keypair Operations ===")
// Generate a random keypair
val keypair = crypto.keypairs.generate()
println("Generated hybrid keypair:")
println(" Ed25519 public key size: ${keypair.publicKey.ed25519Bytes.size} bytes")
println(" Dilithium public key size: ${keypair.publicKey.dilithiumBytes.size} bytes")
println(" Total public key size: ${keypair.publicKey.size} bytes")
// Get addresses for different networks
println("\nAddresses:")
println(" Mainnet: ${keypair.getAddress(Network.MAINNET)}")
println(" Testnet: ${keypair.getAddress(Network.TESTNET)}")
println(" Devnet: ${keypair.getAddress(Network.DEVNET)}")
// Create keypair from mnemonic (deterministic)
val mnemonic = crypto.mnemonic.generate(24)
val keypair2 = crypto.keypairs.fromMnemonic(mnemonic.phrase, "")
val addr = keypair2.getAddress(Network.MAINNET)
println("\nKeypair from mnemonic: ${addr.take(20)}...")
// Derive child keypair using BIP-44 path
val path = DerivationPath.external(0, 0) // m/44'/21337'/0'/0/0
println("Derivation path: $path")
println()
}
suspend fun signingExample(crypto: SynorCrypto) {
println("=== Hybrid Signing ===")
// Generate keypair
val keypair = crypto.keypairs.generate()
// Sign a message
val message = "Hello, quantum-resistant world!".toByteArray()
val signature = crypto.signing.sign(keypair, message)
println("Signature created:")
println(" Ed25519 component: ${signature.ed25519Bytes.size} bytes")
println(" Dilithium component: ${signature.dilithiumBytes.size} bytes")
println(" Total signature size: ${signature.size} bytes")
// Verify the signature
val valid = crypto.signing.verify(keypair.publicKey, message, signature)
println("\nVerification result: $valid")
// Verify with tampered message fails
val tamperedMessage = "Hello, tampered message!".toByteArray()
val invalidResult = crypto.signing.verify(keypair.publicKey, tamperedMessage, signature)
println("Tampered message verification: $invalidResult")
println()
}
suspend fun falconExample(crypto: SynorCrypto) {
println("=== Falcon Post-Quantum Signatures ===")
// Generate Falcon-512 keypair (128-bit security)
val falcon512 = crypto.falcon.generate(FalconVariant.FALCON512)
println("Falcon-512 keypair:")
println(" Public key: ${falcon512.publicKey.keyBytes.size} bytes")
println(" Security level: 128-bit")
// Generate Falcon-1024 keypair (256-bit security)
val falcon1024 = crypto.falcon.generate(FalconVariant.FALCON1024)
println("\nFalcon-1024 keypair:")
println(" Public key: ${falcon1024.publicKey.keyBytes.size} bytes")
println(" Security level: 256-bit")
// Sign with Falcon-512
val message = "Post-quantum secure message".toByteArray()
val signature = crypto.falcon.sign(falcon512, message)
println("\nFalcon-512 signature: ${signature.signatureBytes.size} bytes")
// Verify
val valid = crypto.falcon.verify(falcon512.publicKey.keyBytes, message, signature)
println("Verification: $valid")
println()
}
suspend fun sphincsExample(crypto: SynorCrypto) {
println("=== SPHINCS+ Hash-Based Signatures ===")
// SPHINCS+ variants with different security levels
val variants = listOf(
Triple(SphincsVariant.SHAKE128S, 128, 7856),
Triple(SphincsVariant.SHAKE192S, 192, 16224),
Triple(SphincsVariant.SHAKE256S, 256, 29792)
)
// Generate and demonstrate each variant
for ((variant, security, sigSize) in variants) {
val keypair = crypto.sphincs.generate(variant)
println("SPHINCS+ $variant:")
println(" Security level: $security-bit")
println(" Expected signature size: $sigSize bytes")
// Sign a message
val message = "Hash-based quantum security".toByteArray()
val signature = crypto.sphincs.sign(keypair, message)
println(" Actual signature size: ${signature.signatureBytes.size} bytes")
// Verify
val valid = crypto.sphincs.verify(keypair.publicKey.keyBytes, message, signature)
println(" Verification: $valid\n")
}
}
suspend fun kdfExample(crypto: SynorCrypto) {
println("=== Key Derivation Functions ===")
// HKDF (HMAC-based Key Derivation Function)
val seed = "master-secret-key-material-here".toByteArray()
val hkdfConfig = DerivationConfig(
salt = "application-salt".toByteArray(),
info = "encryption-key".toByteArray(),
outputLength = 32
)
val derivedKey = crypto.kdf.deriveKey(seed, hkdfConfig)
println("HKDF derived key: ${derivedKey.toHex()}")
// PBKDF2 (Password-Based Key Derivation Function)
val password = "user-password".toByteArray()
val pbkdf2Config = PasswordDerivationConfig(
salt = "random-salt-value".toByteArray(),
iterations = 100_000,
outputLength = 32
)
val passwordKey = crypto.kdf.deriveFromPassword(password, pbkdf2Config)
println("PBKDF2 derived key: ${passwordKey.toHex()}")
println()
}
suspend fun hashExample(crypto: SynorCrypto) {
println("=== Hash Functions ===")
val data = "Data to hash".toByteArray()
// SHA3-256 (FIPS 202)
val sha3 = crypto.hash.sha3_256(data)
println("SHA3-256: ${sha3.hex}")
// BLAKE3 (fast, parallel)
val blake3 = crypto.hash.blake3(data)
println("BLAKE3: ${blake3.hex}")
// Keccak-256 (Ethereum compatible)
val keccak = crypto.hash.keccak256(data)
println("Keccak: ${keccak.hex}")
println()
}
// Extension function to convert ByteArray to hex string
fun ByteArray.toHex(): String = joinToString("") { "%02x".format(it) }