diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libcrypto/bn/bn_lcl.h | 4 | ||||
-rw-r--r-- | src/lib/libcrypto/bn/bn_lib.c | 15 |
2 files changed, 11 insertions, 8 deletions
diff --git a/src/lib/libcrypto/bn/bn_lcl.h b/src/lib/libcrypto/bn/bn_lcl.h index ad9427fddc..b8319dd700 100644 --- a/src/lib/libcrypto/bn/bn_lcl.h +++ b/src/lib/libcrypto/bn/bn_lcl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: bn_lcl.h,v 1.28 2018/07/10 21:52:07 tb Exp $ */ | 1 | /* $OpenBSD: bn_lcl.h,v 1.29 2018/07/23 18:14:32 tb 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 | * |
@@ -606,7 +606,7 @@ BIGNUM *BN_mod_inverse_nonct(BIGNUM *ret, const BIGNUM *a, const BIGNUM *n, | |||
606 | int BN_gcd_ct(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); | 606 | int BN_gcd_ct(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); |
607 | int BN_gcd_nonct(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); | 607 | int BN_gcd_nonct(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); |
608 | 608 | ||
609 | int BN_swap_ct(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); | 609 | int BN_swap_ct(BN_ULONG swap, BIGNUM *a, BIGNUM *b, size_t nwords); |
610 | 610 | ||
611 | __END_HIDDEN_DECLS | 611 | __END_HIDDEN_DECLS |
612 | #endif | 612 | #endif |
diff --git a/src/lib/libcrypto/bn/bn_lib.c b/src/lib/libcrypto/bn/bn_lib.c index 3a468a1285..0b79a87413 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.44 2018/07/13 08:43:31 tb Exp $ */ | 1 | /* $OpenBSD: bn_lib.c,v 1.45 2018/07/23 18:14:32 tb 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 | * |
@@ -897,16 +897,19 @@ BN_consttime_swap(BN_ULONG condition, BIGNUM *a, BIGNUM *b, int nwords) | |||
897 | * nwords is the number of words to swap. | 897 | * nwords is the number of words to swap. |
898 | */ | 898 | */ |
899 | int | 899 | int |
900 | BN_swap_ct(BN_ULONG condition, BIGNUM *a, BIGNUM *b, int nwords) | 900 | BN_swap_ct(BN_ULONG condition, BIGNUM *a, BIGNUM *b, size_t nwords) |
901 | { | 901 | { |
902 | BN_ULONG t; | 902 | BN_ULONG t; |
903 | int i; | 903 | int i, words; |
904 | 904 | ||
905 | if (a == b) | 905 | if (a == b) |
906 | return 1; | 906 | return 1; |
907 | if (bn_wexpand(a, nwords) == NULL || bn_wexpand(b, nwords) == NULL) | 907 | if (nwords > INT_MAX) |
908 | return 0; | ||
909 | words = (int)nwords; | ||
910 | if (bn_wexpand(a, words) == NULL || bn_wexpand(b, words) == NULL) | ||
908 | return 0; | 911 | return 0; |
909 | if (a->top > nwords || b->top > nwords) { | 912 | if (a->top > words || b->top > words) { |
910 | BNerror(BN_R_INVALID_LENGTH); | 913 | BNerror(BN_R_INVALID_LENGTH); |
911 | return 0; | 914 | return 0; |
912 | } | 915 | } |
@@ -930,7 +933,7 @@ BN_swap_ct(BN_ULONG condition, BIGNUM *a, BIGNUM *b, int nwords) | |||
930 | b->flags ^= t; | 933 | b->flags ^= t; |
931 | 934 | ||
932 | /* swap the data */ | 935 | /* swap the data */ |
933 | for (i = 0; i < nwords; i++) { | 936 | for (i = 0; i < words; i++) { |
934 | t = (a->d[i] ^ b->d[i]) & condition; | 937 | t = (a->d[i] ^ b->d[i]) & condition; |
935 | a->d[i] ^= t; | 938 | a->d[i] ^= t; |
936 | b->d[i] ^= t; | 939 | b->d[i] ^= t; |