| 1 | // vtest build: has_modern_openssl? |
| 2 | module mldsa_test |
| 3 | |
| 4 | import x.crypto.mldsa |
| 5 | |
| 6 | fn test_mldsa_basic_sign_and_verify() ! { |
| 7 | pv := mldsa.PrivateKey.generate(.ml_dsa_44)! |
| 8 | pb := pv.public_key() |
| 9 | msg := 'ml-dsa basic roundtrip'.bytes() |
| 10 | sig := pv.sign(msg, deterministic: true)! |
| 11 | assert sig.len > 0 |
| 12 | assert pb.verify(msg, sig)! |
| 13 | mismatch := pb.verify('ml-dsa mismatch'.bytes(), sig)! |
| 14 | assert !mismatch |
| 15 | } |
| 16 | |
| 17 | fn test_mldsa_seed_and_raw_key_roundtrip() ! { |
| 18 | kind := mldsa.Kind.ml_dsa_65 |
| 19 | pv := mldsa.PrivateKey.generate(kind)! |
| 20 | seed := pv.seed() |
| 21 | priv := pv.bytes() |
| 22 | pub_bytes := pv.public_key().bytes() |
| 23 | assert seed.len == 32 |
| 24 | assert priv.len == kind.private_key_size() |
| 25 | assert pub_bytes.len == kind.public_key_size() |
| 26 | |
| 27 | pv_from_seed := mldsa.PrivateKey.from_seed(seed, kind)! |
| 28 | assert pv_from_seed.bytes() == priv |
| 29 | |
| 30 | pb := mldsa.PublicKey.from_bytes(pub_bytes, kind)! |
| 31 | msg := 'ml-dsa imported public key'.bytes() |
| 32 | sig := pv.sign(msg, deterministic: true)! |
| 33 | assert pb.verify(msg, sig)! |
| 34 | } |
| 35 | |