diff options
| author | J08nY | 2020-03-02 15:11:25 +0100 |
|---|---|---|
| committer | J08nY | 2020-03-02 15:11:25 +0100 |
| commit | 81e5f24363cf8f50099b7fbed0fd3bcfaac9d5ea (patch) | |
| tree | 2e4abe38a7e3b2a53bb8bb2d31b6fe1cfbfb2e13 /pyecsca/codegen/bn | |
| parent | 02d091ad7e7bb2d80e4ce6649437aad41b479346 (diff) | |
| download | pyecsca-codegen-81e5f24363cf8f50099b7fbed0fd3bcfaac9d5ea.tar.gz pyecsca-codegen-81e5f24363cf8f50099b7fbed0fd3bcfaac9d5ea.tar.zst pyecsca-codegen-81e5f24363cf8f50099b7fbed0fd3bcfaac9d5ea.zip | |
Make Barrett reduction work.
Diffstat (limited to 'pyecsca/codegen/bn')
| -rw-r--r-- | pyecsca/codegen/bn/bn.c | 12 | ||||
| -rw-r--r-- | pyecsca/codegen/bn/bn.h | 2 |
2 files changed, 8 insertions, 6 deletions
diff --git a/pyecsca/codegen/bn/bn.c b/pyecsca/codegen/bn/bn.c index 22e1d49..71b71a7 100644 --- a/pyecsca/codegen/bn/bn.c +++ b/pyecsca/codegen/bn/bn.c @@ -139,7 +139,7 @@ bn_err bn_red_init(red_t *out) { #if REDUCTION == RED_MONTGOMERY return bn_init(&out->montgomery_renorm); #elif REDUCTION == RED_BARRETT - return bn_init(&out->barret); + return bn_init(&out->barrett); #endif return BN_OKAY; } @@ -155,7 +155,7 @@ bn_err bn_red_setup(const bn_t *mod, red_t *out) { } return mp_sqrmod(&out->montgomery_renorm, mod, &out->montgomery_renorm_sqr); #elif REDUCTION == RED_BARRETT - return mp_reduce_setup(mod, &out->barret); + return mp_reduce_setup(&out->barrett, mod); #endif return BN_OKAY; } @@ -277,12 +277,14 @@ bn_err bn_red_pow(const bn_t *base, const bn_t *exp, const bn_t *mod, const red_ bn_clear(&result); return err; } - for (int i = blen - 2; i > 0; --i) { + for (int i = blen - 2; i >= 0; --i) { bn_red_sqr(&result, mod, red, &result); if (bn_get_bit(exp, i)) { bn_red_mul(&result, base, mod, red, &result); } } + bn_copy(&result, out); + bn_clear(&result); return BN_OKAY; } @@ -290,7 +292,7 @@ bn_err bn_red_reduce(const bn_t *mod, const red_t *red, bn_t *what) { #if REDUCTION == RED_MONTGOMERY return mp_montgomery_reduce(what, mod, red->montgomery_digit); #elif REDUCTION == RED_BARRETT - return mp_reduce(what, mod, red->barrett); + return mp_reduce(what, mod, &red->barrett); #endif return mp_mod(what, mod, what); } @@ -299,7 +301,7 @@ void bn_red_clear(red_t *out) { #if REDUCTION == RED_MONTGOMERY bn_clear(&out->montgomery_renorm); #elif REDUCTION == RED_BARRETT - bn_clear(&out->barret); + bn_clear(&out->barrett); #endif } diff --git a/pyecsca/codegen/bn/bn.h b/pyecsca/codegen/bn/bn.h index f1a3483..cb0be48 100644 --- a/pyecsca/codegen/bn/bn.h +++ b/pyecsca/codegen/bn/bn.h @@ -33,7 +33,7 @@ typedef struct { bn_t montgomery_renorm; bn_t montgomery_renorm_sqr; #elif REDUCTION == RED_BARRETT - bn_t barret; + bn_t barrett; #endif } red_t; |
