2222
2323from wolfcrypt ._ffi import lib as _lib
2424
25- if hasattr (_lib , "ML_DSA_ENABLED" ) and _lib .ML_DSA_ENABLED :
26- from binascii import unhexlify as h2b
27-
25+ if _lib .ML_DSA_ENABLED :
2826 import pytest
2927
30- from wolfcrypt .mldsa import MlDsaPrivate , MlDsaPublic , MlDsaType
28+ from wolfcrypt .ciphers import MlDsaPrivate , MlDsaPublic , MlDsaType
3129 from wolfcrypt .random import Random
3230
3331 @pytest .fixture
3432 def rng ():
3533 return Random ()
3634
37- @pytest .fixture (params = [MlDsaType .ML_DSA_44 , MlDsaType .ML_DSA_65 , MlDsaType .ML_DSA_87 ])
35+ @pytest .fixture (
36+ params = [MlDsaType .ML_DSA_44 , MlDsaType .ML_DSA_65 , MlDsaType .ML_DSA_87 ]
37+ )
3838 def mldsa_type (request ):
3939 return request .param
4040
@@ -45,71 +45,75 @@ def test_init_base(mldsa_type):
4545 mldsa_pub = MlDsaPublic (mldsa_type )
4646 assert isinstance (mldsa_pub , MlDsaPublic )
4747
48- def test_key_sizes (mldsa_type ):
49- mldsa_priv = MlDsaPrivate (mldsa_type )
50-
51- # Check that key sizes are returned correctly
52- assert mldsa_priv .priv_key_size > 0
53- assert mldsa_priv .pub_key_size > 0
54- assert mldsa_priv .sig_size > 0
48+ def test_size_properties (mldsa_type ):
49+ refvals = {
50+ MlDsaType .ML_DSA_44 : {
51+ "sig_size" : 2420 ,
52+ "pub_key_size" : 1312 ,
53+ "priv_key_size" : 2560 ,
54+ },
55+ MlDsaType .ML_DSA_65 : {
56+ "sig_size" : 3309 ,
57+ "pub_key_size" : 1952 ,
58+ "priv_key_size" : 4032 ,
59+ },
60+ MlDsaType .ML_DSA_87 : {
61+ "sig_size" : 4627 ,
62+ "pub_key_size" : 2592 ,
63+ "priv_key_size" : 4896 ,
64+ },
65+ }
5566
56- # Public key should have the same pub_key_size
5767 mldsa_pub = MlDsaPublic (mldsa_type )
58- assert mldsa_pub .pub_key_size == mldsa_priv .pub_key_size
59- assert mldsa_pub .sig_size == mldsa_priv .sig_size
68+ assert mldsa_pub .sig_size == refvals [mldsa_type ]["sig_size" ]
69+ assert mldsa_pub .key_size == refvals [mldsa_type ]["pub_key_size" ]
70+
71+ mldsa_priv = MlDsaPrivate (mldsa_type )
72+ assert mldsa_priv .sig_size == refvals [mldsa_type ]["sig_size" ]
73+ assert mldsa_priv .pub_key_size == refvals [mldsa_type ]["pub_key_size" ]
74+ assert mldsa_priv .priv_key_size == refvals [mldsa_type ]["priv_key_size" ]
6075
61- """
62- def test_key_generation(mldsa_type, rng):
63- # Test key generation
76+ def test_initializations (mldsa_type , rng ):
6477 mldsa_priv = MlDsaPrivate .make_key (mldsa_type , rng )
65- assert isinstance (mldsa_priv, MlDsaPrivate)
78+ assert type (mldsa_priv ) is MlDsaPrivate
6679
67- # Export keys
68- priv_key = mldsa_priv.encode_priv_key()
69- pub_key = mldsa_priv.encode_pub_key()
80+ mldsa_priv2 = MlDsaPrivate (mldsa_type )
81+ assert type (mldsa_priv2 ) is MlDsaPrivate
7082
71- # Check key sizes
72- assert len(priv_key) == mldsa_priv.priv_key_size
73- assert len(pub_key) == mldsa_priv.pub_key_size
74- """
83+ mldsa_pub = MlDsaPublic (mldsa_type )
84+ assert type (mldsa_pub ) is MlDsaPublic
7585
76- """
7786 def test_key_import_export (mldsa_type , rng ):
78- # Generate a key pair
87+ # Generate key pair and export keys
7988 mldsa_priv = MlDsaPrivate .make_key (mldsa_type , rng )
80-
81- # Export keys
8289 priv_key = mldsa_priv .encode_priv_key ()
8390 pub_key = mldsa_priv .encode_pub_key ()
91+ assert len (priv_key ) == mldsa_priv .priv_key_size
92+ assert len (pub_key ) == mldsa_priv .pub_key_size
8493
85- # Import private key
94+ # Export key pair from imported one
8695 mldsa_priv2 = MlDsaPrivate (mldsa_type )
87- mldsa_priv2.decode_key(priv_key)
88-
89- # Export keys from imported private key
96+ mldsa_priv2 .decode_key (priv_key , pub_key )
9097 priv_key2 = mldsa_priv2 .encode_priv_key ()
9198 pub_key2 = mldsa_priv2 .encode_pub_key ()
92-
93- # Keys should match
9499 assert priv_key == priv_key2
95100 assert pub_key == pub_key2
96101
97- # Import public key
102+ # Export private key from imported one
103+ mldsa_priv3 = MlDsaPrivate (mldsa_type )
104+ mldsa_priv3 .decode_key (priv_key )
105+ priv_key3 = mldsa_priv3 .encode_priv_key ()
106+ assert priv_key == priv_key3
107+
108+ # Export public key from imported one
98109 mldsa_pub = MlDsaPublic (mldsa_type )
99110 mldsa_pub .decode_key (pub_key )
100-
101- # Export public key from imported public key
102111 pub_key3 = mldsa_pub .encode_key ()
103-
104- # Public keys should match
105112 assert pub_key == pub_key3
106- """
107113
108114 def test_sign_verify (mldsa_type , rng ):
109- # Generate a key pair
115+ # Generate a key pair and export public key
110116 mldsa_priv = MlDsaPrivate .make_key (mldsa_type , rng )
111-
112- # Export public key
113117 pub_key = mldsa_priv .encode_pub_key ()
114118
115119 # Import public key
@@ -119,32 +123,14 @@ def test_sign_verify(mldsa_type, rng):
119123 # Sign a message
120124 message = b"This is a test message for ML-DSA signature"
121125 signature = mldsa_priv .sign (message , rng )
126+ assert len (signature ) == mldsa_priv .sig_size
127+
128+ # Verify the signature by MlDsaPrivate
129+ assert mldsa_priv .verify (signature , message )
122130
123- # Verify the signature
131+ # Verify the signature by MlDsaPublic
124132 assert mldsa_pub .verify (signature , message )
125133
126134 # Verify with wrong message
127135 wrong_message = b"This is a wrong message for ML-DSA signature"
128136 assert not mldsa_pub .verify (signature , wrong_message )
129-
130- """
131- def test_der_encoding(mldsa_type, rng):
132- # Generate a key pair
133- mldsa_priv = MlDsaPrivate.make_key(mldsa_type, rng)
134-
135- # Export keys in DER format
136- priv_key_der = mldsa_priv.encode_priv_key_der()
137- pub_key_der = mldsa_priv.encode_pub_key_der()
138-
139- # Check that DER encoded keys are longer than raw keys
140- assert len(priv_key_der) > mldsa_priv.priv_key_size
141- assert len(pub_key_der) > mldsa_priv.pub_key_size
142-
143- # Test public key DER encoding from public key object
144- mldsa_pub = MlDsaPublic(mldsa_type)
145- mldsa_pub.decode_key(mldsa_priv.encode_pub_key())
146- pub_key_der2 = mldsa_pub.encode_key_der()
147-
148- # DER encoded public keys should match
149- assert pub_key_der == pub_key_der2
150- """
0 commit comments