bc: shrink modular exponentiation code
function old new delta zdc_program_modexp 721 694 -27 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
1acac7f9c5
commit
01eb5e9da1
@ -2503,6 +2503,7 @@ static BC_STATUS zdc_num_modexp(BcNum *a, BcNum *b, BcNum *c, BcNum *restrict d)
|
|||||||
{
|
{
|
||||||
BcStatus s;
|
BcStatus s;
|
||||||
BcNum base, exp, two, temp;
|
BcNum base, exp, two, temp;
|
||||||
|
BcDig two_digs[2];
|
||||||
|
|
||||||
if (c->len == 0)
|
if (c->len == 0)
|
||||||
RETURN_STATUS(bc_error("divide by zero"));
|
RETURN_STATUS(bc_error("divide by zero"));
|
||||||
@ -2514,11 +2515,13 @@ static BC_STATUS zdc_num_modexp(BcNum *a, BcNum *b, BcNum *c, BcNum *restrict d)
|
|||||||
bc_num_expand(d, c->len);
|
bc_num_expand(d, c->len);
|
||||||
bc_num_init(&base, c->len);
|
bc_num_init(&base, c->len);
|
||||||
bc_num_init(&exp, b->len);
|
bc_num_init(&exp, b->len);
|
||||||
bc_num_init_DEF_SIZE(&two);
|
|
||||||
bc_num_init(&temp, b->len);
|
bc_num_init(&temp, b->len);
|
||||||
|
|
||||||
|
two.cap = ARRAY_SIZE(two_digs);
|
||||||
|
two.num = two_digs;
|
||||||
bc_num_one(&two);
|
bc_num_one(&two);
|
||||||
two.num[0] = 2;
|
two_digs[0] = 2;
|
||||||
|
|
||||||
bc_num_one(d);
|
bc_num_one(d);
|
||||||
|
|
||||||
s = zbc_num_rem(a, c, &base, 0);
|
s = zbc_num_rem(a, c, &base, 0);
|
||||||
@ -2543,7 +2546,6 @@ static BC_STATUS zdc_num_modexp(BcNum *a, BcNum *b, BcNum *c, BcNum *restrict d)
|
|||||||
}
|
}
|
||||||
err:
|
err:
|
||||||
bc_num_free(&temp);
|
bc_num_free(&temp);
|
||||||
bc_num_free(&two);
|
|
||||||
bc_num_free(&exp);
|
bc_num_free(&exp);
|
||||||
bc_num_free(&base);
|
bc_num_free(&base);
|
||||||
RETURN_STATUS(s);
|
RETURN_STATUS(s);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user