summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorjsing <>2023-02-16 10:58:06 +0000
committerjsing <>2023-02-16 10:58:06 +0000
commit3c4a975cefd1abb53303b3878d5531bcd9212000 (patch)
treea53d290a02b58a5d50ee6819bb64299a4798342e /src/lib
parent9a85cd8ceeb731b663874f5fddb32b407dd13914 (diff)
downloadopenbsd-3c4a975cefd1abb53303b3878d5531bcd9212000.tar.gz
openbsd-3c4a975cefd1abb53303b3878d5531bcd9212000.tar.bz2
openbsd-3c4a975cefd1abb53303b3878d5531bcd9212000.zip
Use bn_addw() in bn_mulw(), rather than duplicating add with carry code.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libcrypto/bn/bn_internal.h19
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)
199static inline void 199static inline void
200bn_mulw(BN_ULONG a, BN_ULONG b, BN_ULONG *out_r1, BN_ULONG *out_r0) 200bn_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;