diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libcrypto/bn/bn_internal.h | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/src/lib/libcrypto/bn/bn_internal.h b/src/lib/libcrypto/bn/bn_internal.h index 2872e21185..acee2b4020 100644 --- a/src/lib/libcrypto/bn/bn_internal.h +++ b/src/lib/libcrypto/bn/bn_internal.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: bn_internal.h,v 1.7 2023/02/16 10:41:03 jsing Exp $ */ | 1 | /* $OpenBSD: bn_internal.h,v 1.8 2023/02/16 10:58:06 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2023 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2023 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -199,7 +199,8 @@ bn_mulw(BN_ULONG a, BN_ULONG b, BN_ULONG *out_r1, BN_ULONG *out_r0) | |||
199 | static inline void | 199 | static inline void |
200 | bn_mulw(BN_ULONG a, BN_ULONG b, BN_ULONG *out_r1, BN_ULONG *out_r0) | 200 | bn_mulw(BN_ULONG a, BN_ULONG b, BN_ULONG *out_r1, BN_ULONG *out_r0) |
201 | { | 201 | { |
202 | BN_ULONG a1, a0, b1, b0, r1, r0, c1, c2, x; | 202 | BN_ULONG a1, a0, b1, b0, r1, r0; |
203 | BN_ULONG carry, x; | ||
203 | 204 | ||
204 | a1 = a >> BN_BITS4; | 205 | a1 = a >> BN_BITS4; |
205 | a0 = a & BN_MASK2l; | 206 | a0 = a & BN_MASK2l; |
@@ -212,20 +213,14 @@ bn_mulw(BN_ULONG a, BN_ULONG b, BN_ULONG *out_r1, BN_ULONG *out_r0) | |||
212 | /* (a1 * b0) << BN_BITS4, partition the result across r1:r0 with carry. */ | 213 | /* (a1 * b0) << BN_BITS4, partition the result across r1:r0 with carry. */ |
213 | x = a1 * b0; | 214 | x = a1 * b0; |
214 | r1 += x >> BN_BITS4; | 215 | r1 += x >> BN_BITS4; |
215 | x <<= BN_BITS4; | 216 | bn_addw(r0, x << BN_BITS4, &carry, &r0); |
216 | c1 = r0 | x; | 217 | r1 += carry; |
217 | c2 = r0 & x; | ||
218 | r0 += x; | ||
219 | r1 += ((c1 & ~r0) | c2) >> (BN_BITS2 - 1); /* carry */ | ||
220 | 218 | ||
221 | /* (b1 * a0) << BN_BITS4, partition the result across r1:r0 with carry. */ | 219 | /* (b1 * a0) << BN_BITS4, partition the result across r1:r0 with carry. */ |
222 | x = b1 * a0; | 220 | x = b1 * a0; |
223 | r1 += x >> BN_BITS4; | 221 | r1 += x >> BN_BITS4; |
224 | x <<= BN_BITS4; | 222 | bn_addw(r0, x << BN_BITS4, &carry, &r0); |
225 | c1 = r0 | x; | 223 | r1 += carry; |
226 | c2 = r0 & x; | ||
227 | r0 += x; | ||
228 | r1 += ((c1 & ~r0) | c2) >> (BN_BITS2 - 1); /* carry */ | ||
229 | 224 | ||
230 | *out_r1 = r1; | 225 | *out_r1 = r1; |
231 | *out_r0 = r0; | 226 | *out_r0 = r0; |