hc
2023-11-06 9df731a176aab8e03b984b681b1bea01ccff6644
u-boot/lib/rsa/rsa-sign.c
....@@ -610,7 +610,7 @@
610610 BIGNUM **modulusp, BIGNUM **exponent_BN, BIGNUM **r_squaredp,
611611 BIGNUM **c_factorp, BIGNUM **np_factorp)
612612 {
613
- BIGNUM *big1, *big2, *big32, *big2_32, *big4100, *big2180;
613
+ BIGNUM *big1, *big2, *big32, *big2_32, *big4100, *big2180, *big4228;
614614 BIGNUM *n, *e, *r, *r_squared, *tmp, *c_factor, *np_factor;
615615 const BIGNUM *key_n, *key_e;
616616 BN_CTX *bn_ctx = BN_CTX_new();
....@@ -622,6 +622,7 @@
622622 big32 = BN_new();
623623 big4100 = BN_new();
624624 big2180 = BN_new();
625
+ big4228 = BN_new();
625626
626627 r = BN_new();
627628 r_squared = BN_new();
....@@ -631,7 +632,7 @@
631632 big2_32 = BN_new();
632633 n = BN_new();
633634 e = BN_new();
634
- if (!big1 || !big2 || !big32 || !big4100 || !big2180 || !r ||
635
+ if (!big1 || !big2 || !big32 || !big4100 || !big2180 || !big4228 || !r ||
635636 !r_squared || !tmp || !big2_32 || !n || !e ||
636637 !c_factor || !np_factor) {
637638 fprintf(stderr, "Out of memory (bignum)\n");
....@@ -645,7 +646,8 @@
645646 if (!BN_copy(n, key_n) || !BN_copy(e, key_e) ||
646647 !BN_set_word(big1, 1L) ||
647648 !BN_set_word(big2, 2L) || !BN_set_word(big32, 32L) ||
648
- !BN_set_word(big4100, 4100L) || !BN_set_word(big2180, 2180L))
649
+ !BN_set_word(big4100, 4100L) || !BN_set_word(big2180, 2180L) ||
650
+ !BN_set_word(big4228, 4228L))
649651 ret = -1;
650652
651653 /* big2_32 = 2^32 */
....@@ -675,9 +677,15 @@
675677 ret = -1;
676678
677679 /* Calculate np_factor = 2^2180 div n */
678
- if (!BN_exp(tmp, big2, big2180, bn_ctx) ||
679
- !BN_div(np_factor, NULL, tmp, n, bn_ctx))
680
- ret = -1;
680
+ if (BN_num_bits(n) == 2048) {
681
+ if (!BN_exp(tmp, big2, big2180, bn_ctx) ||
682
+ !BN_div(np_factor, NULL, tmp, n, bn_ctx))
683
+ ret = -1;
684
+ } else {/* Calculate 4096 np_factor = 2^4228 div n */
685
+ if (!BN_exp(tmp, big2, big4228, bn_ctx) ||
686
+ !BN_div(np_factor, NULL, tmp, n, bn_ctx))
687
+ ret = -1;
688
+ }
681689
682690 *modulusp = n;
683691 *exponent_BN = e;
....@@ -690,6 +698,7 @@
690698 BN_free(big32);
691699 BN_free(big4100);
692700 BN_free(big2180);
701
+ BN_free(big4228);
693702 BN_free(r);
694703 BN_free(tmp);
695704 BN_free(big2_32);