package main import ( "crypto/secp256k1" "smesh.lol/web/common/mls" ) func main() { pass := 0 fail := 0 // secp256k1 constant-time signed-radix-16 edge case (digits[64]==1). if err := secp256k1.TestSignedRadix16(); err != nil { println("FAIL secp256k1-radix16: " | err.Error()) fail++ } else { println("PASS secp256k1-radix16") pass++ } // Tree math (pure integer arithmetic — no crypto needed). if err := mls.TestTreeMath(); err != nil { println("FAIL tree-math: " | err.Error()) fail++ } else { println("PASS tree-math") pass++ } // Crypto basics (needs jsbridge: SHA256, Ed25519, X25519, ChaCha20). if err := mls.TestCryptoBasics(); err != nil { println("FAIL crypto-basics: " | err.Error()) fail++ } else { println("PASS crypto-basics") pass++ } // Crypto basics for cipher suite 0x0001 (P-256 + AES-128-GCM + ECDSA). if err := mls.TestCryptoBasics0x0001(); err != nil { println("FAIL crypto-basics-0x0001: " | err.Error()) fail++ } else { println("PASS crypto-basics-0x0001") pass++ } // Key schedule (RFC 9420 §8 — full derivation chain over 5 epochs). if err := mls.TestKeySchedule(); err != nil { println("FAIL key-schedule: " | err.Error()) fail++ } else { println("PASS key-schedule") pass++ } // Secret tree (RFC 9420 §9 — 1/8/32-leaf ratchets, handshake + application). if err := mls.TestSecretTree(); err != nil { println("FAIL secret-tree: " | err.Error()) fail++ } else { println("PASS secret-tree") pass++ } // Transcript hashes (RFC 9420 §5.3.1 — confirmed + interim hash chain). if err := mls.TestTranscriptHashes(); err != nil { println("FAIL transcript-hashes: " | err.Error()) fail++ } else { println("PASS transcript-hashes") pass++ } // Message protection (RFC 9420 §6 — pub/priv sign/verify, encrypt/decrypt). if err := mls.TestMessageProtection(); err != nil { println("FAIL message-protection: " | err.Error()) fail++ } else { println("PASS message-protection") pass++ } if fail > 0 { println("FAILED") } else { println("ALL PASSED") } }