@@ -92,12 +92,12 @@ enum {
9292 /*
9393 * The expected instruction counts for constant time functions.
9494 */
95- kModeKeygenInsCnt = 1899012 ,
96- kModeKeygenSideloadInsCnt = 1898905 ,
97- kModeEcdhInsCnt = 1910611 ,
98- kModeEcdhSideloadInsCnt = 1910759 ,
99- kModeEcdsaSignInsCnt = 1546541 ,
100- kModeEcdsaSignSideloadInsCnt = 1546689 ,
95+ kModeKeygenInsCnt = 1935430 ,
96+ kModeKeygenSideloadInsCnt = 1935323 ,
97+ kModeEcdhInsCnt = 1947029 ,
98+ kModeEcdhSideloadInsCnt = 1947177 ,
99+ kModeEcdsaSignInsCnt = 1574769 ,
100+ kModeEcdsaSignSideloadInsCnt = 1574917 ,
101101};
102102
103103static status_t p384_masked_scalar_write (p384_masked_scalar_t * src ,
@@ -217,7 +217,8 @@ status_t p384_keygen_start(void) {
217217status_t p384_keygen_finalize (p384_masked_scalar_t * private_key ,
218218 p384_point_t * public_key ) {
219219 // Spin here waiting for OTBN to complete.
220- HARDENED_TRY_WIPE_DMEM (otbn_busy_wait_for_done ());
220+ HARDENED_TRY (otbn_busy_wait_for_done ());
221+ HARDENED_CHECK_EQ (otbn_instruction_count_get (), kModeKeygenInsCnt );
221222
222223 // Read the masked private key from OTBN dmem.
223224 HARDENED_TRY_WIPE_DMEM (otbn_dmem_read (kP384MaskedScalarShareWords , kOtbnVarD0 ,
@@ -252,7 +253,8 @@ status_t p384_sideload_keygen_start(void) {
252253
253254status_t p384_sideload_keygen_finalize (p384_point_t * public_key ) {
254255 // Spin here waiting for OTBN to complete.
255- HARDENED_TRY_WIPE_DMEM (otbn_busy_wait_for_done ());
256+ HARDENED_TRY (otbn_busy_wait_for_done ());
257+ HARDENED_CHECK_EQ (otbn_instruction_count_get (), kModeKeygenSideloadInsCnt );
256258
257259 // Read the public key from OTBN dmem.
258260 HARDENED_TRY_WIPE_DMEM (
@@ -302,8 +304,15 @@ status_t p384_ecdsa_sideload_sign_start(
302304}
303305
304306status_t p384_ecdsa_sign_finalize (p384_ecdsa_signature_t * result ) {
307+ uint32_t ins_cnt ;
305308 // Spin here waiting for OTBN to complete.
306- HARDENED_TRY_WIPE_DMEM (otbn_busy_wait_for_done ());
309+ HARDENED_TRY (otbn_busy_wait_for_done ());
310+ ins_cnt = otbn_instruction_count_get ();
311+ if (launder32 (ins_cnt ) == kModeEcdsaSignSideloadInsCnt ) {
312+ HARDENED_CHECK_EQ (ins_cnt , kModeEcdsaSignSideloadInsCnt );
313+ } else {
314+ HARDENED_CHECK_EQ (ins_cnt , kModeEcdsaSignInsCnt );
315+ }
307316
308317 // Read signature R out of OTBN dmem.
309318 HARDENED_TRY_WIPE_DMEM (
@@ -393,7 +402,7 @@ status_t p384_ecdh_start(p384_masked_scalar_t *private_key,
393402
394403status_t p384_ecdh_finalize (p384_ecdh_shared_key_t * shared_key ) {
395404 // Spin here waiting for OTBN to complete.
396- HARDENED_TRY_WIPE_DMEM (otbn_busy_wait_for_done ());
405+ HARDENED_TRY (otbn_busy_wait_for_done ());
397406
398407 // Read the status code out of DMEM (false if basic checks on the validity of
399408 // the signature and public key failed).
0 commit comments