make BN_FLG_CONSTTIME semantics more fool-proof
This commit is contained in:
		
							
								
								
									
										6
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								CHANGES
									
									
									
									
									
								
							@@ -14,9 +14,9 @@
 | 
				
			|||||||
     BN_mod_inverse_no_branch() of BN_div() and BN_mod_inverse(),
 | 
					     BN_mod_inverse_no_branch() of BN_div() and BN_mod_inverse(),
 | 
				
			||||||
     respectively, which are slower, but avoid the security-relevant
 | 
					     respectively, which are slower, but avoid the security-relevant
 | 
				
			||||||
     conditional branches.  These are automatically called by BN_div()
 | 
					     conditional branches.  These are automatically called by BN_div()
 | 
				
			||||||
     and BN_mod_inverse() if the flag BN_FLG_CONSTTIME is set for the
 | 
					     and BN_mod_inverse() if the flag BN_FLG_CONSTTIME is set for one
 | 
				
			||||||
     modulus.  Also, BN_is_bit_set() has been changed to remove a
 | 
					     of the input BIGNUMs.  Also, BN_is_bit_set() has been changed to
 | 
				
			||||||
     conditional branch.
 | 
					     remove a conditional branch.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     BN_FLG_CONSTTIME is the new name for the previous
 | 
					     BN_FLG_CONSTTIME is the new name for the previous
 | 
				
			||||||
     BN_FLG_EXP_CONSTTIME flag, since it now affects more than just
 | 
					     BN_FLG_EXP_CONSTTIME flag, since it now affects more than just
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -185,7 +185,7 @@ int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor,
 | 
				
			|||||||
	BN_ULONG d0,d1;
 | 
						BN_ULONG d0,d1;
 | 
				
			||||||
	int num_n,div_n;
 | 
						int num_n,div_n;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (BN_get_flags(num, BN_FLG_CONSTTIME) != 0)
 | 
						if ((BN_get_flags(num, BN_FLG_CONSTTIME) != 0) || (BN_get_flags(divisor, BN_FLG_CONSTTIME) != 0))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		return BN_div_no_branch(dv, rm, num, divisor, ctx);
 | 
							return BN_div_no_branch(dv, rm, num, divisor, ctx);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -210,7 +210,7 @@ BIGNUM *BN_mod_inverse(BIGNUM *in,
 | 
				
			|||||||
	BIGNUM *ret=NULL;
 | 
						BIGNUM *ret=NULL;
 | 
				
			||||||
	int sign;
 | 
						int sign;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (BN_get_flags(n, BN_FLG_CONSTTIME) != 0)
 | 
						if ((BN_get_flags(a, BN_FLG_CONSTTIME) != 0) || (BN_get_flags(n, BN_FLG_CONSTTIME) != 0))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		return BN_mod_inverse_no_branch(in, a, n, ctx);
 | 
							return BN_mod_inverse_no_branch(in, a, n, ctx);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user