main.mx raw
1 package main
2
3 import (
4 "crypto/secp256k1"
5 "smesh.lol/web/common/mls"
6 )
7
8 func main() {
9 pass := 0
10 fail := 0
11
12 // secp256k1 constant-time signed-radix-16 edge case (digits[64]==1).
13 if err := secp256k1.TestSignedRadix16(); err != nil {
14 println("FAIL secp256k1-radix16: " | err.Error())
15 fail++
16 } else {
17 println("PASS secp256k1-radix16")
18 pass++
19 }
20
21 // Tree math (pure integer arithmetic — no crypto needed).
22 if err := mls.TestTreeMath(); err != nil {
23 println("FAIL tree-math: " | err.Error())
24 fail++
25 } else {
26 println("PASS tree-math")
27 pass++
28 }
29
30 // Crypto basics (needs jsbridge: SHA256, Ed25519, X25519, ChaCha20).
31 if err := mls.TestCryptoBasics(); err != nil {
32 println("FAIL crypto-basics: " | err.Error())
33 fail++
34 } else {
35 println("PASS crypto-basics")
36 pass++
37 }
38
39 // Crypto basics for cipher suite 0x0001 (P-256 + AES-128-GCM + ECDSA).
40 if err := mls.TestCryptoBasics0x0001(); err != nil {
41 println("FAIL crypto-basics-0x0001: " | err.Error())
42 fail++
43 } else {
44 println("PASS crypto-basics-0x0001")
45 pass++
46 }
47
48 // Key schedule (RFC 9420 §8 — full derivation chain over 5 epochs).
49 if err := mls.TestKeySchedule(); err != nil {
50 println("FAIL key-schedule: " | err.Error())
51 fail++
52 } else {
53 println("PASS key-schedule")
54 pass++
55 }
56
57 // Secret tree (RFC 9420 §9 — 1/8/32-leaf ratchets, handshake + application).
58 if err := mls.TestSecretTree(); err != nil {
59 println("FAIL secret-tree: " | err.Error())
60 fail++
61 } else {
62 println("PASS secret-tree")
63 pass++
64 }
65
66 // Transcript hashes (RFC 9420 §5.3.1 — confirmed + interim hash chain).
67 if err := mls.TestTranscriptHashes(); err != nil {
68 println("FAIL transcript-hashes: " | err.Error())
69 fail++
70 } else {
71 println("PASS transcript-hashes")
72 pass++
73 }
74
75 // Message protection (RFC 9420 §6 — pub/priv sign/verify, encrypt/decrypt).
76 if err := mls.TestMessageProtection(); err != nil {
77 println("FAIL message-protection: " | err.Error())
78 fail++
79 } else {
80 println("PASS message-protection")
81 pass++
82 }
83
84 if fail > 0 {
85 println("FAILED")
86 } else {
87 println("ALL PASSED")
88 }
89 }
90