Skip to content

Commit 1ed7644

Browse files
authoredSep 3, 2019
Merge pull request #302 from fperrad/20190525_refactor
some refactoring
2 parents 857b112 + 6144ed6 commit 1ed7644

18 files changed

+168
-165
lines changed
 

‎bn_mp_addmod.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ mp_err mp_addmod(const mp_int *a, const mp_int *b, const mp_int *c, mp_int *d)
1414
}
1515

1616
if ((err = mp_add(a, b, &t)) != MP_OKAY) {
17-
mp_clear(&t);
18-
return err;
17+
goto LBL_ERR;
1918
}
2019
err = mp_mod(&t, c, d);
20+
21+
LBL_ERR:
2122
mp_clear(&t);
2223
return err;
2324
}

‎bn_mp_copy.c

+12-15
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
mp_err mp_copy(const mp_int *a, mp_int *b)
88
{
99
int n;
10+
mp_digit *tmpa, *tmpb;
1011
mp_err err;
1112

1213
/* if dst == src do nothing */
@@ -22,26 +23,22 @@ mp_err mp_copy(const mp_int *a, mp_int *b)
2223
}
2324

2425
/* zero b and copy the parameters over */
25-
{
26-
mp_digit *tmpa, *tmpb;
26+
/* pointer aliases */
2727

28-
/* pointer aliases */
28+
/* source */
29+
tmpa = a->dp;
2930

30-
/* source */
31-
tmpa = a->dp;
31+
/* destination */
32+
tmpb = b->dp;
3233

33-
/* destination */
34-
tmpb = b->dp;
35-
36-
/* copy all the digits */
37-
for (n = 0; n < a->used; n++) {
38-
*tmpb++ = *tmpa++;
39-
}
40-
41-
/* clear high digits */
42-
MP_ZERO_DIGITS(tmpb, b->used - n);
34+
/* copy all the digits */
35+
for (n = 0; n < a->used; n++) {
36+
*tmpb++ = *tmpa++;
4337
}
4438

39+
/* clear high digits */
40+
MP_ZERO_DIGITS(tmpb, b->used - n);
41+
4542
/* copy used count and sign */
4643
b->used = a->used;
4744
b->sign = a->sign;

‎bn_mp_div_2.c

+18-19
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
mp_err mp_div_2(const mp_int *a, mp_int *b)
88
{
99
int x, oldused;
10+
mp_digit r, rr, *tmpa, *tmpb;
1011
mp_err err;
1112

1213
/* copy */
@@ -18,31 +19,29 @@ mp_err mp_div_2(const mp_int *a, mp_int *b)
1819

1920
oldused = b->used;
2021
b->used = a->used;
21-
{
22-
mp_digit r, rr, *tmpa, *tmpb;
2322

24-
/* source alias */
25-
tmpa = a->dp + b->used - 1;
23+
/* source alias */
24+
tmpa = a->dp + b->used - 1;
2625

27-
/* dest alias */
28-
tmpb = b->dp + b->used - 1;
26+
/* dest alias */
27+
tmpb = b->dp + b->used - 1;
2928

30-
/* carry */
31-
r = 0;
32-
for (x = b->used - 1; x >= 0; x--) {
33-
/* get the carry for the next iteration */
34-
rr = *tmpa & 1u;
29+
/* carry */
30+
r = 0;
31+
for (x = b->used - 1; x >= 0; x--) {
32+
/* get the carry for the next iteration */
33+
rr = *tmpa & 1u;
3534

36-
/* shift the current digit, add in carry and store */
37-
*tmpb-- = (*tmpa-- >> 1) | (r << (MP_DIGIT_BIT - 1));
35+
/* shift the current digit, add in carry and store */
36+
*tmpb-- = (*tmpa-- >> 1) | (r << (MP_DIGIT_BIT - 1));
3837

39-
/* forward carry to next iteration */
40-
r = rr;
41-
}
42-
43-
/* zero excess digits */
44-
MP_ZERO_DIGITS(b->dp + b->used, oldused - b->used);
38+
/* forward carry to next iteration */
39+
r = rr;
4540
}
41+
42+
/* zero excess digits */
43+
MP_ZERO_DIGITS(b->dp + b->used, oldused - b->used);
44+
4645
b->sign = a->sign;
4746
mp_clamp(b);
4847
return MP_OKAY;

‎bn_mp_export.c

+5-5
Original file line numberDiff line numberDiff line change
@@ -53,19 +53,19 @@ mp_err mp_export(void *rop, size_t *countp, int order, size_t size,
5353
*byte = (unsigned char)((j == ((size - nail_bytes) - 1u)) ? (t.dp[0] & odd_nail_mask) : (t.dp[0] & 0xFFuL));
5454

5555
if ((err = mp_div_2d(&t, (j == ((size - nail_bytes) - 1u)) ? (int)(8u - odd_nails) : 8, &t, NULL)) != MP_OKAY) {
56-
mp_clear(&t);
57-
return err;
56+
goto LBL_ERR;
5857
}
5958
}
6059
}
6160

62-
mp_clear(&t);
63-
6461
if (countp != NULL) {
6562
*countp = count;
6663
}
64+
err = MP_OKAY;
6765

68-
return MP_OKAY;
66+
LBL_ERR:
67+
mp_clear(&t);
68+
return err;
6969
}
7070

7171
#endif

‎bn_mp_expt_u32.c

+6-5
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,26 @@ mp_err mp_expt_u32(const mp_int *a, uint32_t b, mp_int *c)
2121
/* if the bit is set multiply */
2222
if ((b & 1u) != 0u) {
2323
if ((err = mp_mul(c, &g, c)) != MP_OKAY) {
24-
mp_clear(&g);
25-
return err;
24+
goto LBL_ERR;
2625
}
2726
}
2827

2928
/* square */
3029
if (b > 1u) {
3130
if ((err = mp_sqr(&g, &g)) != MP_OKAY) {
32-
mp_clear(&g);
33-
return err;
31+
goto LBL_ERR;
3432
}
3533
}
3634

3735
/* shift to next bit */
3836
b >>= 1;
3937
}
4038

39+
err = MP_OKAY;
40+
41+
LBL_ERR:
4142
mp_clear(&g);
42-
return MP_OKAY;
43+
return err;
4344
}
4445

4546
#endif

‎bn_mp_exptmod.c

+6-10
Original file line numberDiff line numberDiff line change
@@ -26,27 +26,23 @@ mp_err mp_exptmod(const mp_int *G, const mp_int *X, const mp_int *P, mp_int *Y)
2626
return MP_VAL;
2727
}
2828

29-
/* first compute 1/G mod P */
30-
if ((err = mp_init(&tmpG)) != MP_OKAY) {
29+
if ((err = mp_init_multi(&tmpG, &tmpX, NULL)) != MP_OKAY) {
3130
return err;
3231
}
32+
33+
/* first compute 1/G mod P */
3334
if ((err = mp_invmod(G, P, &tmpG)) != MP_OKAY) {
34-
mp_clear(&tmpG);
35-
return err;
35+
goto LBL_ERR;
3636
}
3737

3838
/* now get |X| */
39-
if ((err = mp_init(&tmpX)) != MP_OKAY) {
40-
mp_clear(&tmpG);
41-
return err;
42-
}
4339
if ((err = mp_abs(X, &tmpX)) != MP_OKAY) {
44-
mp_clear_multi(&tmpG, &tmpX, NULL);
45-
return err;
40+
goto LBL_ERR;
4641
}
4742

4843
/* and now compute (1/G)**|X| instead of G**X [X < 0] */
4944
err = mp_exptmod(&tmpG, &tmpX, P, Y);
45+
LBL_ERR:
5046
mp_clear_multi(&tmpG, &tmpX, NULL);
5147
return err;
5248
}

‎bn_mp_fwrite.c

+6-5
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,18 @@ mp_err mp_fwrite(const mp_int *a, int radix, FILE *stream)
2020
}
2121

2222
if ((err = mp_to_radix(a, buf, (size_t)len, radix)) != MP_OKAY) {
23-
MP_FREE_BUFFER(buf, (size_t)len);
24-
return err;
23+
goto LBL_ERR;
2524
}
2625

2726
if (fwrite(buf, (size_t)len, 1uL, stream) != 1uL) {
28-
MP_FREE_BUFFER(buf, (size_t)len);
29-
return MP_ERR;
27+
err = MP_ERR;
28+
goto LBL_ERR;
3029
}
30+
err = MP_OKAY;
3131

32+
LBL_ERR:
3233
MP_FREE_BUFFER(buf, (size_t)len);
33-
return MP_OKAY;
34+
return err;
3435
}
3536
#endif
3637

‎bn_mp_mod.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ mp_err mp_mod(const mp_int *a, const mp_int *b, mp_int *c)
1414
}
1515

1616
if ((err = mp_div(a, b, NULL, &t)) != MP_OKAY) {
17-
mp_clear(&t);
18-
return err;
17+
goto LBL_ERR;
1918
}
2019

2120
if (MP_IS_ZERO(&t) || (t.sign == b->sign)) {
@@ -25,6 +24,7 @@ mp_err mp_mod(const mp_int *a, const mp_int *b, mp_int *c)
2524
err = mp_add(b, &t, c);
2625
}
2726

27+
LBL_ERR:
2828
mp_clear(&t);
2929
return err;
3030
}

‎bn_mp_mulmod.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ mp_err mp_mulmod(const mp_int *a, const mp_int *b, const mp_int *c, mp_int *d)
1414
}
1515

1616
if ((err = mp_mul(a, b, &t)) != MP_OKAY) {
17-
mp_clear(&t);
18-
return err;
17+
goto LBL_ERR;
1918
}
2019
err = mp_mod(&t, c, d);
20+
21+
LBL_ERR:
2122
mp_clear(&t);
2223
return err;
2324
}

‎bn_mp_radix_size.c

+6-4
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,18 @@ mp_err mp_radix_size(const mp_int *a, int radix, int *size)
4848
/* fetch out all of the digits */
4949
while (!MP_IS_ZERO(&t)) {
5050
if ((err = mp_div_d(&t, (mp_digit)radix, &t, &d)) != MP_OKAY) {
51-
mp_clear(&t);
52-
return err;
51+
goto LBL_ERR;
5352
}
5453
++digs;
5554
}
56-
mp_clear(&t);
5755

5856
/* return digs + 1, the 1 is for the NULL byte that would be required. */
5957
*size = digs + 1;
60-
return MP_OKAY;
58+
err = MP_OKAY;
59+
60+
LBL_ERR:
61+
mp_clear(&t);
62+
return err;
6163
}
6264

6365
#endif

‎bn_mp_sqrmod.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ mp_err mp_sqrmod(const mp_int *a, const mp_int *b, mp_int *c)
1414
}
1515

1616
if ((err = mp_sqr(a, &t)) != MP_OKAY) {
17-
mp_clear(&t);
18-
return err;
17+
goto LBL_ERR;
1918
}
2019
err = mp_mod(&t, b, c);
20+
21+
LBL_ERR:
2122
mp_clear(&t);
2223
return err;
2324
}

‎bn_mp_sqrtmod_prime.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ mp_err mp_sqrtmod_prime(const mp_int *n, const mp_int *prime, mp_int *ret)
6161
/* find a Z such that the Legendre symbol (Z|prime) == -1 */
6262
mp_set_u32(&Z, 2u);
6363
/* Z = 2 */
64-
while (1) {
64+
for (;;) {
6565
if ((err = mp_kronecker(&Z, prime, &legendre)) != MP_OKAY) goto cleanup;
6666
if (legendre == -1) break;
6767
if ((err = mp_add_d(&Z, 1uL, &Z)) != MP_OKAY) goto cleanup;
@@ -81,10 +81,10 @@ mp_err mp_sqrtmod_prime(const mp_int *n, const mp_int *prime, mp_int *ret)
8181
/* M = S */
8282
mp_set_u32(&two, 2u);
8383

84-
while (1) {
84+
for (;;) {
8585
if ((err = mp_copy(&T, &t1)) != MP_OKAY) goto cleanup;
8686
i = 0;
87-
while (1) {
87+
for (;;) {
8888
if (mp_cmp_d(&t1, 1uL) == MP_EQ) break;
8989
if ((err = mp_exptmod(&t1, &two, prime, &t1)) != MP_OKAY) goto cleanup;
9090
i++;

‎bn_mp_submod.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ mp_err mp_submod(const mp_int *a, const mp_int *b, const mp_int *c, mp_int *d)
1414
}
1515

1616
if ((err = mp_sub(a, b, &t)) != MP_OKAY) {
17-
mp_clear(&t);
18-
return err;
17+
goto LBL_ERR;
1918
}
2019
err = mp_mod(&t, c, d);
20+
21+
LBL_ERR:
2122
mp_clear(&t);
2223
return err;
2324
}

‎bn_mp_to_radix.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ mp_err mp_to_radix(const mp_int *a, char *str, size_t maxlen, int radix)
5252
break;
5353
}
5454
if ((err = mp_div_d(&t, (mp_digit)radix, &t, &d)) != MP_OKAY) {
55-
mp_clear(&t);
56-
return err;
55+
goto LBL_ERR;
5756
}
5857
*str++ = mp_s_rmap[d];
5958
++digs;
@@ -67,6 +66,9 @@ mp_err mp_to_radix(const mp_int *a, char *str, size_t maxlen, int radix)
6766
/* append a NULL so the string is properly terminated */
6867
*str = '\0';
6968

69+
err = MP_OKAY;
70+
71+
LBL_ERR:
7072
mp_clear(&t);
7173
return err;
7274
}

‎bn_mp_to_unsigned_bin.c

+5-3
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ mp_err mp_to_unsigned_bin(const mp_int *a, unsigned char *b)
2222
b[x++] = (unsigned char)(t.dp[0] | ((t.dp[1] & 1u) << 7));
2323
#endif
2424
if ((err = mp_div_2d(&t, 8, &t, NULL)) != MP_OKAY) {
25-
mp_clear(&t);
26-
return err;
25+
goto LBL_ERR;
2726
}
2827
}
2928
s_mp_reverse(b, x);
29+
err = MP_OKAY;
30+
31+
LBL_ERR:
3032
mp_clear(&t);
31-
return MP_OKAY;
33+
return err;
3234
}
3335
#endif

0 commit comments

Comments
 (0)