summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libcrypto/bn/bn_lib.c46
1 files changed, 15 insertions, 31 deletions
diff --git a/src/lib/libcrypto/bn/bn_lib.c b/src/lib/libcrypto/bn/bn_lib.c
index 3ca2b7f14b..f25caa04af 100644
--- a/src/lib/libcrypto/bn/bn_lib.c
+++ b/src/lib/libcrypto/bn/bn_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: bn_lib.c,v 1.80 2023/04/01 12:44:56 tb Exp $ */ 1/* $OpenBSD: bn_lib.c,v 1.81 2023/04/14 11:04:24 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -344,50 +344,34 @@ BN_dup(const BIGNUM *a)
344 return t; 344 return t;
345} 345}
346 346
347static inline void
348bn_copy_words(BN_ULONG *ap, const BN_ULONG *bp, int n)
349{
350 while (n > 0) {
351 ap[0] = bp[0];
352 ap++;
353 bp++;
354 n--;
355 }
356}
357
347BIGNUM * 358BIGNUM *
348BN_copy(BIGNUM *a, const BIGNUM *b) 359BN_copy(BIGNUM *a, const BIGNUM *b)
349{ 360{
350 int i;
351 BN_ULONG *A;
352 const BN_ULONG *B;
353
354
355 if (a == b) 361 if (a == b)
356 return (a); 362 return (a);
363
357 if (!bn_wexpand(a, b->top)) 364 if (!bn_wexpand(a, b->top))
358 return (NULL); 365 return (NULL);
359 366
360#if 1 367 bn_copy_words(a->d, b->d, b->top);
361 A = a->d;
362 B = b->d;
363 for (i = b->top >> 2; i > 0; i--, A += 4, B += 4) {
364 BN_ULONG a0, a1, a2, a3;
365 a0 = B[0];
366 a1 = B[1];
367 a2 = B[2];
368 a3 = B[3];
369 A[0] = a0;
370 A[1] = a1;
371 A[2] = a2;
372 A[3] = a3;
373 }
374 switch (b->top & 3) {
375 case 3:
376 A[2] = B[2];
377 case 2:
378 A[1] = B[1];
379 case 1:
380 A[0] = B[0];
381 }
382#else
383 memcpy(a->d, b->d, sizeof(b->d[0]) * b->top);
384#endif
385 368
386 /* Copy constant time flag from b, but make it sticky on a. */ 369 /* Copy constant time flag from b, but make it sticky on a. */
387 a->flags |= b->flags & BN_FLG_CONSTTIME; 370 a->flags |= b->flags & BN_FLG_CONSTTIME;
388 371
389 a->top = b->top; 372 a->top = b->top;
390 a->neg = b->neg; 373 a->neg = b->neg;
374
391 return (a); 375 return (a);
392} 376}
393 377