The following (top level) OpenSSL public BIGNUM functions check for the BN_FLG_CONSTTIME: bn_blind.c: BN_BLINDING_new() bn_exp.c: BN_exp : must not be set for input bignums ! BN_mod_exp : SHOULD be set for any one of input bignums (only) if m is odd BN_mod_exp_recp: must NOT be set for input bignums BN_mod_exp_mont: SHOULD be set for any one of input bignums BN_mod_exp_mont_word: must NOT be set for input bignums BN_mod_exp_simple: must NOT bet set for input bignums bn_gcd.c: ! BN_mod_inverse: SHOULD be set for any one of input bignums bn_lib: BN_num_bits ! BN_copy bn_mont.c: BN_MONT_CTX_set bn.h: ! BN_num_bytes: Calls BN_num_bits Relevant files and functions in the files: Helpers.c ComputePrivateExponentD: - BN_dup: -> BN_copy: YES, BN_FLG_CONSTTIME set by caller on P and Q - BN_sub: no - BN_add_word: no - BN_mod_inverse: YES, DONE InitOpenSSLRSAPublicKey: - BN_set_word: no - BN_bin2bn: no InitOpenSSLRSAPrivateKey: - BN_bin2bn: no - BN_div: -> BN_copy: YES, DONE - BN_is_zero: no TpmToOsslMath: OsslToTpmBn: - BN_num_bytes: need not - BN_bn2bin: -> BN_num_bytes: need not BigInitialized: - BN_bin2bn: no - BN_copy: YES, DONE BnModMult: - BN_mul: no - BN_div: -> BN_copy: ? BnMult: - BN_mul: no BnDiv: - BN_div: -> BN_copy: ? BnGcd: /* FUNCTION IS NOT USED */ - BN_gcd: -> BN_copy, BN_num_bits: YES, DONE BnModExp: - BN_mod_exp: YES, DONE BnModInverse: - BN_mod_inverse: YES, DONE Elliptic curve signing : CryptEccMain.c: BnEccGenerateKeyPair: - BnEccModMult: YES, DONE (we have control over random number bnD) called by BnSignEcSchnorr called by BnSignEcdsa (if OpenSSL function not used) CryptEccSignature.c: BnEccSignSM2: - BnEccModMult: YES, DONE (we have control over random number bnK)