diff options
Diffstat (limited to 'src/lib/libcrypto/bn')
-rw-r--r-- | src/lib/libcrypto/bn/bn.h | 18 | ||||
-rw-r--r-- | src/lib/libcrypto/bn/bn_exp2.c | 3 | ||||
-rw-r--r-- | src/lib/libcrypto/bn/bn_gf2m.c | 1 | ||||
-rw-r--r-- | src/lib/libcrypto/bn/bn_mont.c | 2 | ||||
-rw-r--r-- | src/lib/libcrypto/bn/bn_mul.c | 9 | ||||
-rw-r--r-- | src/lib/libcrypto/bn/bn_nist.c | 64 |
6 files changed, 60 insertions, 37 deletions
diff --git a/src/lib/libcrypto/bn/bn.h b/src/lib/libcrypto/bn/bn.h index e484b7fc11..a0bc47837d 100644 --- a/src/lib/libcrypto/bn/bn.h +++ b/src/lib/libcrypto/bn/bn.h | |||
@@ -253,6 +253,24 @@ extern "C" { | |||
253 | #define BN_HEX_FMT2 "%08X" | 253 | #define BN_HEX_FMT2 "%08X" |
254 | #endif | 254 | #endif |
255 | 255 | ||
256 | /* 2011-02-22 SMS. | ||
257 | * In various places, a size_t variable or a type cast to size_t was | ||
258 | * used to perform integer-only operations on pointers. This failed on | ||
259 | * VMS with 64-bit pointers (CC /POINTER_SIZE = 64) because size_t is | ||
260 | * still only 32 bits. What's needed in these cases is an integer type | ||
261 | * with the same size as a pointer, which size_t is not certain to be. | ||
262 | * The only fix here is VMS-specific. | ||
263 | */ | ||
264 | #if defined(OPENSSL_SYS_VMS) | ||
265 | # if __INITIAL_POINTER_SIZE == 64 | ||
266 | # define PTR_SIZE_INT long long | ||
267 | # else /* __INITIAL_POINTER_SIZE == 64 */ | ||
268 | # define PTR_SIZE_INT int | ||
269 | # endif /* __INITIAL_POINTER_SIZE == 64 [else] */ | ||
270 | #else /* defined(OPENSSL_SYS_VMS) */ | ||
271 | # define PTR_SIZE_INT size_t | ||
272 | #endif /* defined(OPENSSL_SYS_VMS) [else] */ | ||
273 | |||
256 | #define BN_DEFAULT_BITS 1280 | 274 | #define BN_DEFAULT_BITS 1280 |
257 | 275 | ||
258 | #define BN_FLG_MALLOCED 0x01 | 276 | #define BN_FLG_MALLOCED 0x01 |
diff --git a/src/lib/libcrypto/bn/bn_exp2.c b/src/lib/libcrypto/bn/bn_exp2.c index b3f43cec8c..bd0c34b91b 100644 --- a/src/lib/libcrypto/bn/bn_exp2.c +++ b/src/lib/libcrypto/bn/bn_exp2.c | |||
@@ -301,7 +301,8 @@ int BN_mod_exp2_mont(BIGNUM *rr, const BIGNUM *a1, const BIGNUM *p1, | |||
301 | r_is_one = 0; | 301 | r_is_one = 0; |
302 | } | 302 | } |
303 | } | 303 | } |
304 | BN_from_montgomery(rr,r,mont,ctx); | 304 | if (!BN_from_montgomery(rr,r,mont,ctx)) |
305 | goto err; | ||
305 | ret=1; | 306 | ret=1; |
306 | err: | 307 | err: |
307 | if ((in_mont == NULL) && (mont != NULL)) BN_MONT_CTX_free(mont); | 308 | if ((in_mont == NULL) && (mont != NULL)) BN_MONT_CTX_free(mont); |
diff --git a/src/lib/libcrypto/bn/bn_gf2m.c b/src/lib/libcrypto/bn/bn_gf2m.c index 527b0fa15b..432a3aa338 100644 --- a/src/lib/libcrypto/bn/bn_gf2m.c +++ b/src/lib/libcrypto/bn/bn_gf2m.c | |||
@@ -545,6 +545,7 @@ int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) | |||
545 | { | 545 | { |
546 | while (!BN_is_odd(u)) | 546 | while (!BN_is_odd(u)) |
547 | { | 547 | { |
548 | if (BN_is_zero(u)) goto err; | ||
548 | if (!BN_rshift1(u, u)) goto err; | 549 | if (!BN_rshift1(u, u)) goto err; |
549 | if (BN_is_odd(b)) | 550 | if (BN_is_odd(b)) |
550 | { | 551 | { |
diff --git a/src/lib/libcrypto/bn/bn_mont.c b/src/lib/libcrypto/bn/bn_mont.c index 7224637ab3..1a866880f5 100644 --- a/src/lib/libcrypto/bn/bn_mont.c +++ b/src/lib/libcrypto/bn/bn_mont.c | |||
@@ -277,7 +277,7 @@ static int BN_from_montgomery_word(BIGNUM *ret, BIGNUM *r, BN_MONT_CTX *mont) | |||
277 | m1|=m2; /* (al!=ri) */ | 277 | m1|=m2; /* (al!=ri) */ |
278 | m1|=(0-(size_t)v); /* (al!=ri || v) */ | 278 | m1|=(0-(size_t)v); /* (al!=ri || v) */ |
279 | m1&=~m2; /* (al!=ri || v) && !al>ri */ | 279 | m1&=~m2; /* (al!=ri || v) && !al>ri */ |
280 | nrp=(BN_ULONG *)(((size_t)rp&~m1)|((size_t)ap&m1)); | 280 | nrp=(BN_ULONG *)(((PTR_SIZE_INT)rp&~m1)|((PTR_SIZE_INT)ap&m1)); |
281 | } | 281 | } |
282 | 282 | ||
283 | /* 'i<ri' is chosen to eliminate dependency on input data, even | 283 | /* 'i<ri' is chosen to eliminate dependency on input data, even |
diff --git a/src/lib/libcrypto/bn/bn_mul.c b/src/lib/libcrypto/bn/bn_mul.c index a0e9ec3b46..12e5be80eb 100644 --- a/src/lib/libcrypto/bn/bn_mul.c +++ b/src/lib/libcrypto/bn/bn_mul.c | |||
@@ -551,7 +551,7 @@ void bn_mul_part_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n, | |||
551 | int tna, int tnb, BN_ULONG *t) | 551 | int tna, int tnb, BN_ULONG *t) |
552 | { | 552 | { |
553 | int i,j,n2=n*2; | 553 | int i,j,n2=n*2; |
554 | int c1,c2,neg,zero; | 554 | int c1,c2,neg; |
555 | BN_ULONG ln,lo,*p; | 555 | BN_ULONG ln,lo,*p; |
556 | 556 | ||
557 | # ifdef BN_COUNT | 557 | # ifdef BN_COUNT |
@@ -567,7 +567,7 @@ void bn_mul_part_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n, | |||
567 | /* r=(a[0]-a[1])*(b[1]-b[0]) */ | 567 | /* r=(a[0]-a[1])*(b[1]-b[0]) */ |
568 | c1=bn_cmp_part_words(a,&(a[n]),tna,n-tna); | 568 | c1=bn_cmp_part_words(a,&(a[n]),tna,n-tna); |
569 | c2=bn_cmp_part_words(&(b[n]),b,tnb,tnb-n); | 569 | c2=bn_cmp_part_words(&(b[n]),b,tnb,tnb-n); |
570 | zero=neg=0; | 570 | neg=0; |
571 | switch (c1*3+c2) | 571 | switch (c1*3+c2) |
572 | { | 572 | { |
573 | case -4: | 573 | case -4: |
@@ -575,7 +575,6 @@ void bn_mul_part_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n, | |||
575 | bn_sub_part_words(&(t[n]),b, &(b[n]),tnb,n-tnb); /* - */ | 575 | bn_sub_part_words(&(t[n]),b, &(b[n]),tnb,n-tnb); /* - */ |
576 | break; | 576 | break; |
577 | case -3: | 577 | case -3: |
578 | zero=1; | ||
579 | /* break; */ | 578 | /* break; */ |
580 | case -2: | 579 | case -2: |
581 | bn_sub_part_words(t, &(a[n]),a, tna,tna-n); /* - */ | 580 | bn_sub_part_words(t, &(a[n]),a, tna,tna-n); /* - */ |
@@ -585,7 +584,6 @@ void bn_mul_part_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n, | |||
585 | case -1: | 584 | case -1: |
586 | case 0: | 585 | case 0: |
587 | case 1: | 586 | case 1: |
588 | zero=1; | ||
589 | /* break; */ | 587 | /* break; */ |
590 | case 2: | 588 | case 2: |
591 | bn_sub_part_words(t, a, &(a[n]),tna,n-tna); /* + */ | 589 | bn_sub_part_words(t, a, &(a[n]),tna,n-tna); /* + */ |
@@ -593,7 +591,6 @@ void bn_mul_part_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n, | |||
593 | neg=1; | 591 | neg=1; |
594 | break; | 592 | break; |
595 | case 3: | 593 | case 3: |
596 | zero=1; | ||
597 | /* break; */ | 594 | /* break; */ |
598 | case 4: | 595 | case 4: |
599 | bn_sub_part_words(t, a, &(a[n]),tna,n-tna); | 596 | bn_sub_part_words(t, a, &(a[n]),tna,n-tna); |
@@ -1012,7 +1009,6 @@ int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) | |||
1012 | { | 1009 | { |
1013 | if (i >= -1 && i <= 1) | 1010 | if (i >= -1 && i <= 1) |
1014 | { | 1011 | { |
1015 | int sav_j =0; | ||
1016 | /* Find out the power of two lower or equal | 1012 | /* Find out the power of two lower or equal |
1017 | to the longest of the two numbers */ | 1013 | to the longest of the two numbers */ |
1018 | if (i >= 0) | 1014 | if (i >= 0) |
@@ -1023,7 +1019,6 @@ int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) | |||
1023 | { | 1019 | { |
1024 | j = BN_num_bits_word((BN_ULONG)bl); | 1020 | j = BN_num_bits_word((BN_ULONG)bl); |
1025 | } | 1021 | } |
1026 | sav_j = j; | ||
1027 | j = 1<<(j-1); | 1022 | j = 1<<(j-1); |
1028 | assert(j <= al || j <= bl); | 1023 | assert(j <= al || j <= bl); |
1029 | k = j+j; | 1024 | k = j+j; |
diff --git a/src/lib/libcrypto/bn/bn_nist.c b/src/lib/libcrypto/bn/bn_nist.c index 2ca5b01391..c6de032696 100644 --- a/src/lib/libcrypto/bn/bn_nist.c +++ b/src/lib/libcrypto/bn/bn_nist.c | |||
@@ -354,7 +354,7 @@ int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
354 | buf[BN_NIST_192_TOP], | 354 | buf[BN_NIST_192_TOP], |
355 | c_d[BN_NIST_192_TOP], | 355 | c_d[BN_NIST_192_TOP], |
356 | *res; | 356 | *res; |
357 | size_t mask; | 357 | PTR_SIZE_INT mask; |
358 | static const BIGNUM _bignum_nist_p_192_sqr = { | 358 | static const BIGNUM _bignum_nist_p_192_sqr = { |
359 | (BN_ULONG *)_nist_p_192_sqr, | 359 | (BN_ULONG *)_nist_p_192_sqr, |
360 | sizeof(_nist_p_192_sqr)/sizeof(_nist_p_192_sqr[0]), | 360 | sizeof(_nist_p_192_sqr)/sizeof(_nist_p_192_sqr[0]), |
@@ -405,9 +405,10 @@ int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
405 | * 'tmp=result-modulus; if (!carry || !borrow) result=tmp;' | 405 | * 'tmp=result-modulus; if (!carry || !borrow) result=tmp;' |
406 | * this is what happens below, but without explicit if:-) a. | 406 | * this is what happens below, but without explicit if:-) a. |
407 | */ | 407 | */ |
408 | mask = 0-(size_t)bn_sub_words(c_d,r_d,_nist_p_192[0],BN_NIST_192_TOP); | 408 | mask = 0-(PTR_SIZE_INT)bn_sub_words(c_d,r_d,_nist_p_192[0],BN_NIST_192_TOP); |
409 | mask &= 0-(size_t)carry; | 409 | mask &= 0-(PTR_SIZE_INT)carry; |
410 | res = (BN_ULONG *)(((size_t)c_d&~mask) | ((size_t)r_d&mask)); | 410 | res = (BN_ULONG *) |
411 | (((PTR_SIZE_INT)c_d&~mask) | ((PTR_SIZE_INT)r_d&mask)); | ||
411 | nist_cp_bn(r_d, res, BN_NIST_192_TOP); | 412 | nist_cp_bn(r_d, res, BN_NIST_192_TOP); |
412 | r->top = BN_NIST_192_TOP; | 413 | r->top = BN_NIST_192_TOP; |
413 | bn_correct_top(r); | 414 | bn_correct_top(r); |
@@ -438,8 +439,8 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
438 | buf[BN_NIST_224_TOP], | 439 | buf[BN_NIST_224_TOP], |
439 | c_d[BN_NIST_224_TOP], | 440 | c_d[BN_NIST_224_TOP], |
440 | *res; | 441 | *res; |
441 | size_t mask; | 442 | PTR_SIZE_INT mask; |
442 | union { bn_addsub_f f; size_t p; } u; | 443 | union { bn_addsub_f f; PTR_SIZE_INT p; } u; |
443 | static const BIGNUM _bignum_nist_p_224_sqr = { | 444 | static const BIGNUM _bignum_nist_p_224_sqr = { |
444 | (BN_ULONG *)_nist_p_224_sqr, | 445 | (BN_ULONG *)_nist_p_224_sqr, |
445 | sizeof(_nist_p_224_sqr)/sizeof(_nist_p_224_sqr[0]), | 446 | sizeof(_nist_p_224_sqr)/sizeof(_nist_p_224_sqr[0]), |
@@ -510,16 +511,18 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
510 | * to be compared to the modulus and conditionally | 511 | * to be compared to the modulus and conditionally |
511 | * adjusted by *subtracting* the latter. */ | 512 | * adjusted by *subtracting* the latter. */ |
512 | carry = (int)bn_add_words(r_d,r_d,_nist_p_224[-carry-1],BN_NIST_224_TOP); | 513 | carry = (int)bn_add_words(r_d,r_d,_nist_p_224[-carry-1],BN_NIST_224_TOP); |
513 | mask = 0-(size_t)carry; | 514 | mask = 0-(PTR_SIZE_INT)carry; |
514 | u.p = ((size_t)bn_sub_words&mask) | ((size_t)bn_add_words&~mask); | 515 | u.p = ((PTR_SIZE_INT)bn_sub_words&mask) | |
516 | ((PTR_SIZE_INT)bn_add_words&~mask); | ||
515 | } | 517 | } |
516 | else | 518 | else |
517 | carry = 1; | 519 | carry = 1; |
518 | 520 | ||
519 | /* otherwise it's effectively same as in BN_nist_mod_192... */ | 521 | /* otherwise it's effectively same as in BN_nist_mod_192... */ |
520 | mask = 0-(size_t)(*u.f)(c_d,r_d,_nist_p_224[0],BN_NIST_224_TOP); | 522 | mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_224[0],BN_NIST_224_TOP); |
521 | mask &= 0-(size_t)carry; | 523 | mask &= 0-(PTR_SIZE_INT)carry; |
522 | res = (BN_ULONG *)(((size_t)c_d&~mask) | ((size_t)r_d&mask)); | 524 | res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) | |
525 | ((PTR_SIZE_INT)r_d&mask)); | ||
523 | nist_cp_bn(r_d, res, BN_NIST_224_TOP); | 526 | nist_cp_bn(r_d, res, BN_NIST_224_TOP); |
524 | r->top = BN_NIST_224_TOP; | 527 | r->top = BN_NIST_224_TOP; |
525 | bn_correct_top(r); | 528 | bn_correct_top(r); |
@@ -549,8 +552,8 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
549 | buf[BN_NIST_256_TOP], | 552 | buf[BN_NIST_256_TOP], |
550 | c_d[BN_NIST_256_TOP], | 553 | c_d[BN_NIST_256_TOP], |
551 | *res; | 554 | *res; |
552 | size_t mask; | 555 | PTR_SIZE_INT mask; |
553 | union { bn_addsub_f f; size_t p; } u; | 556 | union { bn_addsub_f f; PTR_SIZE_INT p; } u; |
554 | static const BIGNUM _bignum_nist_p_256_sqr = { | 557 | static const BIGNUM _bignum_nist_p_256_sqr = { |
555 | (BN_ULONG *)_nist_p_256_sqr, | 558 | (BN_ULONG *)_nist_p_256_sqr, |
556 | sizeof(_nist_p_256_sqr)/sizeof(_nist_p_256_sqr[0]), | 559 | sizeof(_nist_p_256_sqr)/sizeof(_nist_p_256_sqr[0]), |
@@ -629,15 +632,17 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
629 | else if (carry < 0) | 632 | else if (carry < 0) |
630 | { | 633 | { |
631 | carry = (int)bn_add_words(r_d,r_d,_nist_p_256[-carry-1],BN_NIST_256_TOP); | 634 | carry = (int)bn_add_words(r_d,r_d,_nist_p_256[-carry-1],BN_NIST_256_TOP); |
632 | mask = 0-(size_t)carry; | 635 | mask = 0-(PTR_SIZE_INT)carry; |
633 | u.p = ((size_t)bn_sub_words&mask) | ((size_t)bn_add_words&~mask); | 636 | u.p = ((PTR_SIZE_INT)bn_sub_words&mask) | |
637 | ((PTR_SIZE_INT)bn_add_words&~mask); | ||
634 | } | 638 | } |
635 | else | 639 | else |
636 | carry = 1; | 640 | carry = 1; |
637 | 641 | ||
638 | mask = 0-(size_t)(*u.f)(c_d,r_d,_nist_p_256[0],BN_NIST_256_TOP); | 642 | mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_256[0],BN_NIST_256_TOP); |
639 | mask &= 0-(size_t)carry; | 643 | mask &= 0-(PTR_SIZE_INT)carry; |
640 | res = (BN_ULONG *)(((size_t)c_d&~mask) | ((size_t)r_d&mask)); | 644 | res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) | |
645 | ((PTR_SIZE_INT)r_d&mask)); | ||
641 | nist_cp_bn(r_d, res, BN_NIST_256_TOP); | 646 | nist_cp_bn(r_d, res, BN_NIST_256_TOP); |
642 | r->top = BN_NIST_256_TOP; | 647 | r->top = BN_NIST_256_TOP; |
643 | bn_correct_top(r); | 648 | bn_correct_top(r); |
@@ -671,8 +676,8 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
671 | buf[BN_NIST_384_TOP], | 676 | buf[BN_NIST_384_TOP], |
672 | c_d[BN_NIST_384_TOP], | 677 | c_d[BN_NIST_384_TOP], |
673 | *res; | 678 | *res; |
674 | size_t mask; | 679 | PTR_SIZE_INT mask; |
675 | union { bn_addsub_f f; size_t p; } u; | 680 | union { bn_addsub_f f; PTR_SIZE_INT p; } u; |
676 | static const BIGNUM _bignum_nist_p_384_sqr = { | 681 | static const BIGNUM _bignum_nist_p_384_sqr = { |
677 | (BN_ULONG *)_nist_p_384_sqr, | 682 | (BN_ULONG *)_nist_p_384_sqr, |
678 | sizeof(_nist_p_384_sqr)/sizeof(_nist_p_384_sqr[0]), | 683 | sizeof(_nist_p_384_sqr)/sizeof(_nist_p_384_sqr[0]), |
@@ -754,15 +759,17 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
754 | else if (carry < 0) | 759 | else if (carry < 0) |
755 | { | 760 | { |
756 | carry = (int)bn_add_words(r_d,r_d,_nist_p_384[-carry-1],BN_NIST_384_TOP); | 761 | carry = (int)bn_add_words(r_d,r_d,_nist_p_384[-carry-1],BN_NIST_384_TOP); |
757 | mask = 0-(size_t)carry; | 762 | mask = 0-(PTR_SIZE_INT)carry; |
758 | u.p = ((size_t)bn_sub_words&mask) | ((size_t)bn_add_words&~mask); | 763 | u.p = ((PTR_SIZE_INT)bn_sub_words&mask) | |
764 | ((PTR_SIZE_INT)bn_add_words&~mask); | ||
759 | } | 765 | } |
760 | else | 766 | else |
761 | carry = 1; | 767 | carry = 1; |
762 | 768 | ||
763 | mask = 0-(size_t)(*u.f)(c_d,r_d,_nist_p_384[0],BN_NIST_384_TOP); | 769 | mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_384[0],BN_NIST_384_TOP); |
764 | mask &= 0-(size_t)carry; | 770 | mask &= 0-(PTR_SIZE_INT)carry; |
765 | res = (BN_ULONG *)(((size_t)c_d&~mask) | ((size_t)r_d&mask)); | 771 | res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) | |
772 | ((PTR_SIZE_INT)r_d&mask)); | ||
766 | nist_cp_bn(r_d, res, BN_NIST_384_TOP); | 773 | nist_cp_bn(r_d, res, BN_NIST_384_TOP); |
767 | r->top = BN_NIST_384_TOP; | 774 | r->top = BN_NIST_384_TOP; |
768 | bn_correct_top(r); | 775 | bn_correct_top(r); |
@@ -781,7 +788,7 @@ int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
781 | BN_ULONG *r_d, *a_d = a->d, | 788 | BN_ULONG *r_d, *a_d = a->d, |
782 | t_d[BN_NIST_521_TOP], | 789 | t_d[BN_NIST_521_TOP], |
783 | val,tmp,*res; | 790 | val,tmp,*res; |
784 | size_t mask; | 791 | PTR_SIZE_INT mask; |
785 | static const BIGNUM _bignum_nist_p_521_sqr = { | 792 | static const BIGNUM _bignum_nist_p_521_sqr = { |
786 | (BN_ULONG *)_nist_p_521_sqr, | 793 | (BN_ULONG *)_nist_p_521_sqr, |
787 | sizeof(_nist_p_521_sqr)/sizeof(_nist_p_521_sqr[0]), | 794 | sizeof(_nist_p_521_sqr)/sizeof(_nist_p_521_sqr[0]), |
@@ -826,8 +833,9 @@ int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, | |||
826 | r_d[i] &= BN_NIST_521_TOP_MASK; | 833 | r_d[i] &= BN_NIST_521_TOP_MASK; |
827 | 834 | ||
828 | bn_add_words(r_d,r_d,t_d,BN_NIST_521_TOP); | 835 | bn_add_words(r_d,r_d,t_d,BN_NIST_521_TOP); |
829 | mask = 0-(size_t)bn_sub_words(t_d,r_d,_nist_p_521,BN_NIST_521_TOP); | 836 | mask = 0-(PTR_SIZE_INT)bn_sub_words(t_d,r_d,_nist_p_521,BN_NIST_521_TOP); |
830 | res = (BN_ULONG *)(((size_t)t_d&~mask) | ((size_t)r_d&mask)); | 837 | res = (BN_ULONG *)(((PTR_SIZE_INT)t_d&~mask) | |
838 | ((PTR_SIZE_INT)r_d&mask)); | ||
831 | nist_cp_bn(r_d,res,BN_NIST_521_TOP); | 839 | nist_cp_bn(r_d,res,BN_NIST_521_TOP); |
832 | r->top = BN_NIST_521_TOP; | 840 | r->top = BN_NIST_521_TOP; |
833 | bn_correct_top(r); | 841 | bn_correct_top(r); |