looks good to me.

ok inoguchi@

On Sat, Jul 14, 2018 at 02:46:17PM +0200, Theo Buehler wrote:
> The new BN_swap_ct() API is an improved version of the public
> BN_consttime_swap() function: it allows for error checking doesn't
> assert() and has fewer assumptions on the input.
> 
> This eliminates the last use of the latter in our tree. With the next
> major libcrypto bump, we could replace BN_consttime_swap() with the new
> version. In the meantime let's just avoid using it.
> 
> This adds a second reacharound from ec/ to bn/ but that is hopefully
> only temporary.
> 
> Index: ec/ec2_mult.c
> ===================================================================
> RCS file: /var/cvs/src/lib/libcrypto/ec/ec2_mult.c,v
> retrieving revision 1.10
> diff -u -p -r1.10 ec2_mult.c
> --- ec/ec2_mult.c     10 Jul 2018 22:06:14 -0000      1.10
> +++ ec/ec2_mult.c     14 Jul 2018 12:34:47 -0000
> @@ -71,6 +71,7 @@
>  
>  #include <openssl/err.h>
>  
> +#include "bn_lcl.h"
>  #include "ec_lcl.h"
>  
>  #ifndef OPENSSL_NO_EC2M
> @@ -324,14 +325,18 @@ ec_GF2m_montgomery_point_multiply(const 
>       for (; i >= 0; i--) {
>               word = scalar->d[i];
>               while (mask) {
> -                     BN_consttime_swap(word & mask, x1, x2, 
> group->field.top);
> -                     BN_consttime_swap(word & mask, z1, z2, 
> group->field.top);
> +                     if (!BN_swap_ct(word & mask, x1, x2, group->field.top))
> +                             goto err;
> +                     if (!BN_swap_ct(word & mask, z1, z2, group->field.top))
> +                             goto err;
>                       if (!gf2m_Madd(group, &point->X, x2, z2, x1, z1, ctx))
>                               goto err;
>                       if (!gf2m_Mdouble(group, x1, z1, ctx))
>                               goto err;
> -                     BN_consttime_swap(word & mask, x1, x2, 
> group->field.top);
> -                     BN_consttime_swap(word & mask, z1, z2, 
> group->field.top);
> +                     if (!BN_swap_ct(word & mask, x1, x2, group->field.top))
> +                             goto err;
> +                     if (!BN_swap_ct(word & mask, z1, z2, group->field.top))
> +                             goto err;
>                       mask >>= 1;
>               }
>               mask = BN_TBIT;
> 

Reply via email to