Cryptographic Primitives
Y Protocol uses modern cryptographic standards including Ed25519 signatures with strict validation, SHA256 hashing, and RIPEMD160 for address generation.
Ed25519
SHA256
RIPEMD160
Strict Validation
Digital Signatures
Ed25519 Implementation
Transaction signing with strict validation to prevent weak key forgery
pub struct TransactionSigner {
signing_key: SigningKey, // Ed25519 private key
}
pub struct SignatureVerifier; // Stateless verifier
impl SignatureVerifier {
/// Verify Ed25519 signature with strict validation
pub fn verify_strict(public_key: &[u8], message: &[u8], signature: &[u8]) -> CryptoResult<bool> {
// Uses verify_strict() to prevent weak public key forgery attacks
let verifying_key = VerifyingKey::from_bytes(public_key)?;
let signature = Signature::from_bytes(signature)?;
match verifying_key.verify_strict(message, &signature) {
Ok(()) => Ok(true),
Err(_) => Ok(false),
}
}
}Source: /crates/consensus/src/crypto/signatures.rs
Ed25519 Features
Key Size:
32 bytes
Signature Size:
64 bytes
Library:
ed25519-dalek v2.1.1
Deterministic digital signatures.
Security Features
Strict validation
Non-malleable signatures
Automatic key zeroing
Constant-time operations
Attack Prevention
Weak key forgery
Small subgroup attacks
Signature malleability
Side-channel leaks
Hash Functions
SHA256
Primary hash function for blocks and transactions
Output Size:
256 bits
Block IDs:
SHA256
Transaction IDs:
SHA256
Merkle Trees:
SHA256
RIPEMD160
Used for address generation and compression
Output Size:
160 bits
Address Gen:
RIPEMD160
Input:
SHA256(pubkey)
Standard:
ISO/IEC 10118-3
Double SHA256
Checksum calculation for addresses and validation
Function:
SHA256(SHA256(x))
Checksum:
First 4 bytes
Usage:
Address validation
Security:
Length extension resistant
Address Generation
Y Protocol Address Format
Secure address generation with checksum validation
Address Structure:
y_ + Base58(version + RIPEMD160(SHA256(pubkey)) + checksum)
Components:
- Prefix"y_"
- Version0x2A (42)
- HashRIPEMD160(SHA256(pubkey))
- ChecksumFirst 4 bytes of double SHA256
Example:
y_1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
Step 1: Public Key
Start with Ed25519 public key (32 bytes)
pubkey[32]
Step 2: Hash Chain
Apply SHA256 then RIPEMD160
RIPEMD160(SHA256(pubkey))
Step 3: Encode
Add version, checksum, and Base58 encode
y_Base58(version+hash+checksum)
Cryptographic Libraries
Dependencies and Versions
Audited and well-maintained cryptographic libraries
ed25519-dalek
v2.1.1
Ed25519 signatures with strict validation
sha2
v0.10
SHA256 hash function implementation
ripemd
v0.1
RIPEMD160 hash for address generation
rand
v0.8
Cryptographically secure randomness
zeroize
v1.7
Secure memory clearing
bs58
v0.5
Base58 encoding for addresses