From a402b462e9efcb9cb2dad34eb1350288e5d91211 Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Wed, 29 May 2019 12:23:08 +0200 Subject: [PATCH] refactor with goto --- bn_mp_addmod.c | 5 +++-- bn_mp_export.c | 10 +++++----- bn_mp_expt_u32.c | 11 ++++++----- bn_mp_exptmod.c | 7 +++---- bn_mp_fwrite.c | 11 ++++++----- bn_mp_mod.c | 4 ++-- bn_mp_mulmod.c | 5 +++-- bn_mp_radix_size.c | 10 ++++++---- bn_mp_sqrmod.c | 5 +++-- bn_mp_submod.c | 5 +++-- bn_mp_to_radix.c | 6 ++++-- bn_mp_to_unsigned_bin.c | 8 +++++--- 12 files changed, 49 insertions(+), 38 deletions(-) diff --git a/bn_mp_addmod.c b/bn_mp_addmod.c index 2636e2a..1dcfb67 100644 --- a/bn_mp_addmod.c +++ b/bn_mp_addmod.c @@ -14,10 +14,11 @@ mp_err mp_addmod(const mp_int *a, const mp_int *b, const mp_int *c, mp_int *d) } if ((err = mp_add(a, b, &t)) != MP_OKAY) { - mp_clear(&t); - return err; + goto LBL_ERR; } err = mp_mod(&t, c, d); + +LBL_ERR: mp_clear(&t); return err; } diff --git a/bn_mp_export.c b/bn_mp_export.c index c9de48b..9dea54e 100644 --- a/bn_mp_export.c +++ b/bn_mp_export.c @@ -53,19 +53,19 @@ mp_err mp_export(void *rop, size_t *countp, int order, size_t size, *byte = (unsigned char)((j == ((size - nail_bytes) - 1u)) ? (t.dp[0] & odd_nail_mask) : (t.dp[0] & 0xFFuL)); if ((err = mp_div_2d(&t, (j == ((size - nail_bytes) - 1u)) ? (int)(8u - odd_nails) : 8, &t, NULL)) != MP_OKAY) { - mp_clear(&t); - return err; + goto LBL_ERR; } } } - mp_clear(&t); - if (countp != NULL) { *countp = count; } + err = MP_OKAY; - return MP_OKAY; +LBL_ERR: + mp_clear(&t); + return err; } #endif diff --git a/bn_mp_expt_u32.c b/bn_mp_expt_u32.c index 4ec725e..2ab67ba 100644 --- a/bn_mp_expt_u32.c +++ b/bn_mp_expt_u32.c @@ -21,16 +21,14 @@ mp_err mp_expt_u32(const mp_int *a, uint32_t b, mp_int *c) /* if the bit is set multiply */ if ((b & 1u) != 0u) { if ((err = mp_mul(c, &g, c)) != MP_OKAY) { - mp_clear(&g); - return err; + goto LBL_ERR; } } /* square */ if (b > 1u) { if ((err = mp_sqr(&g, &g)) != MP_OKAY) { - mp_clear(&g); - return err; + goto LBL_ERR; } } @@ -38,8 +36,11 @@ mp_err mp_expt_u32(const mp_int *a, uint32_t b, mp_int *c) b >>= 1; } + err = MP_OKAY; + +LBL_ERR: mp_clear(&g); - return MP_OKAY; + return err; } #endif diff --git a/bn_mp_exptmod.c b/bn_mp_exptmod.c index ceb8e86..bc4b643 100644 --- a/bn_mp_exptmod.c +++ b/bn_mp_exptmod.c @@ -32,18 +32,17 @@ mp_err mp_exptmod(const mp_int *G, const mp_int *X, const mp_int *P, mp_int *Y) /* first compute 1/G mod P */ if ((err = mp_invmod(G, P, &tmpG)) != MP_OKAY) { - mp_clear_multi(&tmpG, &tmpX, NULL); - return err; + goto LBL_ERR; } /* now get |X| */ if ((err = mp_abs(X, &tmpX)) != MP_OKAY) { - mp_clear_multi(&tmpG, &tmpX, NULL); - return err; + goto LBL_ERR; } /* and now compute (1/G)**|X| instead of G**X [X < 0] */ err = mp_exptmod(&tmpG, &tmpX, P, Y); +LBL_ERR: mp_clear_multi(&tmpG, &tmpX, NULL); return err; } diff --git a/bn_mp_fwrite.c b/bn_mp_fwrite.c index 5b4719f..eaa5d06 100644 --- a/bn_mp_fwrite.c +++ b/bn_mp_fwrite.c @@ -20,17 +20,18 @@ mp_err mp_fwrite(const mp_int *a, int radix, FILE *stream) } if ((err = mp_to_radix(a, buf, (size_t)len, radix)) != MP_OKAY) { - MP_FREE_BUFFER(buf, (size_t)len); - return err; + goto LBL_ERR; } if (fwrite(buf, (size_t)len, 1uL, stream) != 1uL) { - MP_FREE_BUFFER(buf, (size_t)len); - return MP_ERR; + err = MP_ERR; + goto LBL_ERR; } + err = MP_OKAY; +LBL_ERR: MP_FREE_BUFFER(buf, (size_t)len); - return MP_OKAY; + return err; } #endif diff --git a/bn_mp_mod.c b/bn_mp_mod.c index 18b4e6b..8fbfe08 100644 --- a/bn_mp_mod.c +++ b/bn_mp_mod.c @@ -14,8 +14,7 @@ mp_err mp_mod(const mp_int *a, const mp_int *b, mp_int *c) } if ((err = mp_div(a, b, NULL, &t)) != MP_OKAY) { - mp_clear(&t); - return err; + goto LBL_ERR; } 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) err = mp_add(b, &t, c); } +LBL_ERR: mp_clear(&t); return err; } diff --git a/bn_mp_mulmod.c b/bn_mp_mulmod.c index 763f923..160d162 100644 --- a/bn_mp_mulmod.c +++ b/bn_mp_mulmod.c @@ -14,10 +14,11 @@ mp_err mp_mulmod(const mp_int *a, const mp_int *b, const mp_int *c, mp_int *d) } if ((err = mp_mul(a, b, &t)) != MP_OKAY) { - mp_clear(&t); - return err; + goto LBL_ERR; } err = mp_mod(&t, c, d); + +LBL_ERR: mp_clear(&t); return err; } diff --git a/bn_mp_radix_size.c b/bn_mp_radix_size.c index 6d7f912..339b21b 100644 --- a/bn_mp_radix_size.c +++ b/bn_mp_radix_size.c @@ -48,16 +48,18 @@ mp_err mp_radix_size(const mp_int *a, int radix, int *size) /* fetch out all of the digits */ while (!MP_IS_ZERO(&t)) { if ((err = mp_div_d(&t, (mp_digit)radix, &t, &d)) != MP_OKAY) { - mp_clear(&t); - return err; + goto LBL_ERR; } ++digs; } - mp_clear(&t); /* return digs + 1, the 1 is for the NULL byte that would be required. */ *size = digs + 1; - return MP_OKAY; + err = MP_OKAY; + +LBL_ERR: + mp_clear(&t); + return err; } #endif diff --git a/bn_mp_sqrmod.c b/bn_mp_sqrmod.c index b3c44e5..626ea2c 100644 --- a/bn_mp_sqrmod.c +++ b/bn_mp_sqrmod.c @@ -14,10 +14,11 @@ mp_err mp_sqrmod(const mp_int *a, const mp_int *b, mp_int *c) } if ((err = mp_sqr(a, &t)) != MP_OKAY) { - mp_clear(&t); - return err; + goto LBL_ERR; } err = mp_mod(&t, b, c); + +LBL_ERR: mp_clear(&t); return err; } diff --git a/bn_mp_submod.c b/bn_mp_submod.c index 61c2d0f..5ebd374 100644 --- a/bn_mp_submod.c +++ b/bn_mp_submod.c @@ -14,10 +14,11 @@ mp_err mp_submod(const mp_int *a, const mp_int *b, const mp_int *c, mp_int *d) } if ((err = mp_sub(a, b, &t)) != MP_OKAY) { - mp_clear(&t); - return err; + goto LBL_ERR; } err = mp_mod(&t, c, d); + +LBL_ERR: mp_clear(&t); return err; } diff --git a/bn_mp_to_radix.c b/bn_mp_to_radix.c index c75ee5b..d6e8fcc 100644 --- a/bn_mp_to_radix.c +++ b/bn_mp_to_radix.c @@ -52,8 +52,7 @@ mp_err mp_to_radix(const mp_int *a, char *str, size_t maxlen, int radix) break; } if ((err = mp_div_d(&t, (mp_digit)radix, &t, &d)) != MP_OKAY) { - mp_clear(&t); - return err; + goto LBL_ERR; } *str++ = mp_s_rmap[d]; ++digs; @@ -67,6 +66,9 @@ mp_err mp_to_radix(const mp_int *a, char *str, size_t maxlen, int radix) /* append a NULL so the string is properly terminated */ *str = '\0'; + err = MP_OKAY; + +LBL_ERR: mp_clear(&t); return err; } diff --git a/bn_mp_to_unsigned_bin.c b/bn_mp_to_unsigned_bin.c index 093b01a..bc6372c 100644 --- a/bn_mp_to_unsigned_bin.c +++ b/bn_mp_to_unsigned_bin.c @@ -22,12 +22,14 @@ mp_err mp_to_unsigned_bin(const mp_int *a, unsigned char *b) b[x++] = (unsigned char)(t.dp[0] | ((t.dp[1] & 1u) << 7)); #endif if ((err = mp_div_2d(&t, 8, &t, NULL)) != MP_OKAY) { - mp_clear(&t); - return err; + goto LBL_ERR; } } s_mp_reverse(b, x); + err = MP_OKAY; + +LBL_ERR: mp_clear(&t); - return MP_OKAY; + return err; } #endif