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:
		| @@ -2503,6 +2503,7 @@ static BC_STATUS zdc_num_modexp(BcNum *a, BcNum *b, BcNum *c, BcNum *restrict d) | ||||
| { | ||||
| 	BcStatus s; | ||||
| 	BcNum base, exp, two, temp; | ||||
| 	BcDig two_digs[2]; | ||||
|  | ||||
| 	if (c->len == 0) | ||||
| 		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_init(&base, c->len); | ||||
| 	bc_num_init(&exp, b->len); | ||||
| 	bc_num_init_DEF_SIZE(&two); | ||||
| 	bc_num_init(&temp, b->len); | ||||
|  | ||||
| 	two.cap = ARRAY_SIZE(two_digs); | ||||
| 	two.num = two_digs; | ||||
| 	bc_num_one(&two); | ||||
| 	two.num[0] = 2; | ||||
| 	two_digs[0] = 2; | ||||
|  | ||||
| 	bc_num_one(d); | ||||
|  | ||||
| 	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: | ||||
| 	bc_num_free(&temp); | ||||
| 	bc_num_free(&two); | ||||
| 	bc_num_free(&exp); | ||||
| 	bc_num_free(&base); | ||||
| 	RETURN_STATUS(s); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user