Source

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_"
  • Version
    0x2A (42)
  • Hash
    RIPEMD160(SHA256(pubkey))
  • Checksum
    First 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