Use CRYPTO_addc_w in bn_from_montgomery_in_place This is a bit more readable than the bit tricks, which compilers don't reliably detect anyway. Change-Id: I922976b5f5c3b0b8c3f02afd95f3d6783f6ffaf6 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/82047 Reviewed-by: Lily Chen <chlily@google.com> Auto-Submit: David Benjamin <davidben@google.com> Commit-Queue: Lily Chen <chlily@google.com>
diff --git a/crypto/fipsmodule/bn/montgomery.cc.inc b/crypto/fipsmodule/bn/montgomery.cc.inc index 6281b29..b3d7107 100644 --- a/crypto/fipsmodule/bn/montgomery.cc.inc +++ b/crypto/fipsmodule/bn/montgomery.cc.inc
@@ -203,10 +203,7 @@ BN_ULONG carry = 0; for (size_t i = 0; i < num_n; i++) { BN_ULONG v = bn_mul_add_words(a + i, n, num_n, a[i] * n0); - v += carry + a[i + num_n]; - carry |= (v != a[i + num_n]); - carry &= (v <= a[i + num_n]); - a[i + num_n] = v; + a[i + num_n] = CRYPTO_addc_w(a[i + num_n], v, carry, &carry); } // Shift |num_n| words to divide by R. We have |a| < 2 * |n|. Note that |a|