@@ -105,6 +105,52 @@ static int test_sign_unaligned(void)
105105 return test_sign_core (pk + 1 , sk + 1 , sm + 1 , m + 1 , m2 + 1 , ctx + 1 );
106106}
107107
108+ static int test_sign_extmu (void )
109+ {
110+ uint8_t pk [CRYPTO_PUBLICKEYBYTES ];
111+ uint8_t sk [CRYPTO_SECRETKEYBYTES ];
112+ uint8_t sig [CRYPTO_BYTES ];
113+ uint8_t mu [MLDSA_CRHBYTES ];
114+ size_t siglen ;
115+
116+ CHECK (crypto_sign_keypair (pk , sk ) == 0 );
117+ randombytes (mu , MLDSA_CRHBYTES );
118+ MLD_CT_TESTING_SECRET (mu , sizeof (mu ));
119+
120+ CHECK (crypto_sign_signature_extmu (sig , & siglen , mu , sk ) == 0 );
121+ CHECK (crypto_sign_verify_extmu (sig , siglen , mu , pk ) == 0 );
122+
123+ return 0 ;
124+ }
125+
126+
127+ static int test_sign_pre_hash (void )
128+ {
129+ uint8_t pk [CRYPTO_PUBLICKEYBYTES ];
130+ uint8_t sk [CRYPTO_SECRETKEYBYTES ];
131+ uint8_t sig [CRYPTO_BYTES ];
132+ uint8_t m [MLEN ];
133+ uint8_t ctx [CTXLEN ];
134+ uint8_t rnd [MLDSA_RNDBYTES ];
135+ size_t siglen ;
136+
137+
138+ CHECK (crypto_sign_keypair (pk , sk ) == 0 );
139+ randombytes (ctx , CTXLEN );
140+ MLD_CT_TESTING_SECRET (ctx , sizeof (ctx ));
141+ randombytes (m , MLEN );
142+ MLD_CT_TESTING_SECRET (m , sizeof (m ));
143+ randombytes (rnd , MLDSA_RNDBYTES );
144+ MLD_CT_TESTING_SECRET (rnd , sizeof (rnd ));
145+
146+ CHECK (crypto_sign_signature_pre_hash_shake256 (sig , & siglen , m , MLEN , ctx ,
147+ CTXLEN , rnd , sk ) == 0 );
148+ CHECK (crypto_sign_verify_pre_hash_shake256 (sig , siglen , m , MLEN , ctx , CTXLEN ,
149+ pk ) == 0 );
150+
151+ return 0 ;
152+ }
153+
108154static int test_wrong_pk (void )
109155{
110156 uint8_t pk [CRYPTO_PUBLICKEYBYTES ];
@@ -275,6 +321,8 @@ int main(void)
275321 r |= test_wrong_pk ();
276322 r |= test_wrong_sig ();
277323 r |= test_wrong_ctx ();
324+ r |= test_sign_extmu ();
325+ r |= test_sign_pre_hash ();
278326 if (r )
279327 {
280328 return 1 ;
0 commit comments