v / vlib / x / crypto / mldsa / usage_test.v
34 lines · 29 sloc · 975 bytes · 793c2441117a7ef24159682479d6c21e8aece327
Raw
1// vtest build: has_modern_openssl?
2module mldsa_test
3
4import x.crypto.mldsa
5
6fn 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
17fn 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