@@ -82,14 +82,27 @@ def final_arguments(cls) -> List[str]:
8282 def secret_is_seed (cls ) -> bool :
8383 return True
8484
85+ def one_mldsa_public_key_from_seed (self , key : Key ,
86+ descr : str ) -> test_case .TestCase :
87+ """Construct one test case for driver export_public_key()."""
88+ tc = test_case .TestCase ()
89+ tc .set_function ('export_public_key' )
90+ tc .set_dependencies ([f'TF_PSA_CRYPTO_PQCP_MLDSA_{ key .kl } _ENABLED' ])
91+ tc .set_arguments (self .metadata_arguments (key .kl , True , None ) + [
92+ test_case .hex_string (key .seed ),
93+ test_case .hex_string (key .public ),
94+ ] + self .final_arguments ())
95+ tc .set_description (f'MLDSA-{ key .kl } export public key from seed { descr } ' )
96+ return tc
97+
8598 def one_mldsa_sign_deterministic_pure (self ,
8699 key : Key ,
87100 message : bytes ,
88101 descr : str ) -> test_case .TestCase :
89102 """Construct one test case for deterministic signature."""
90103 signature = key .sign_message (message , deterministic = True )
91104 tc = test_case .TestCase ()
92- tc .set_function (self .function ('sign_deterministic_pure ' , key .kl ))
105+ tc .set_function (self .function ('sign_message_deterministic ' , key .kl ))
93106 tc .set_dependencies ([f'TF_PSA_CRYPTO_PQCP_MLDSA_{ key .kl } _ENABLED' ])
94107 tc .set_arguments (self .metadata_arguments (key .kl , True , True ) + [
95108 test_case .hex_string (key .seed if self .secret_is_seed () else key .secret ),
@@ -111,7 +124,7 @@ def one_mldsa_verify_pure(self,
111124 """
112125 signature = key .sign_message (message , deterministic = deterministic )
113126 tc = test_case .TestCase ()
114- tc .set_function (self .function ('verify_pure ' , key .kl ))
127+ tc .set_function (self .function ('verify_message ' , key .kl ))
115128 tc .set_dependencies ([f'TF_PSA_CRYPTO_PQCP_MLDSA_{ key .kl } _ENABLED' ])
116129 tc .set_arguments (self .metadata_arguments (key .kl , False , True ) + [
117130 test_case .hex_string (key .public ),
@@ -159,6 +172,10 @@ class PQCPGenerator(Generator):
159172
160173 @classmethod
161174 def function (cls , func : str , kl : int ) -> str :
175+ if func == 'verify_message' :
176+ func = 'verify_pure'
177+ elif func == 'sign_message_deterministic' :
178+ func = 'sign_deterministic_pure'
162179 return f'{ func } _{ kl } '
163180
164181 @classmethod
@@ -197,3 +214,38 @@ def gen_pqcp_mldsa_all() -> Iterator[test_case.TestCase]:
197214 """Generate all test cases for mldsa-native."""
198215 generator = PQCPGenerator ()
199216 yield from generator .gen_all ()
217+
218+
219+ class DriverGenerator (Generator ):
220+ """Test driver entry points."""
221+
222+ @classmethod
223+ def function (cls , func : str , _kl : int ) -> str :
224+ if func == 'verify_message' :
225+ func = 'verify_pure'
226+ elif func == 'sign_message_deterministic' :
227+ func = 'sign_deterministic_pure'
228+ return func
229+
230+ @classmethod
231+ def metadata_arguments (cls ,
232+ kl : int ,
233+ pair : bool ,
234+ deterministic : Optional [bool ]) -> List [str ]:
235+ arguments = []
236+ arguments .append ('PSA_KEY_TYPE_ML_DSA_KEY_PAIR' if pair else
237+ 'PSA_KEY_TYPE_ML_DSA_PUBLIC_KEY' )
238+ arguments .append (str (kl ))
239+ if deterministic is not None :
240+ arguments .append ('PSA_ALG_DETERMINISTIC_ML_DSA' if deterministic else
241+ 'PSA_ALG_ML_DSA' )
242+ return arguments
243+
244+ @classmethod
245+ def final_arguments (cls ) -> List [str ]:
246+ return ['PSA_SUCCESS' ]
247+
248+ def gen_key_management (self , kl : int ) -> Iterator [test_case .TestCase ]:
249+ """Generate test cases for driver export_public_key()."""
250+ for i , key in enumerate (KEYS [kl ], 1 ):
251+ yield self .one_mldsa_public_key_from_seed (key , f'key#{ i } ' )
0 commit comments