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|