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