aboutsummaryrefslogtreecommitdiffhomepage
path: root/pyecsca/codegen/bn
diff options
context:
space:
mode:
authorJ08nY2020-03-02 15:11:25 +0100
committerJ08nY2020-03-02 15:11:25 +0100
commit81e5f24363cf8f50099b7fbed0fd3bcfaac9d5ea (patch)
tree2e4abe38a7e3b2a53bb8bb2d31b6fe1cfbfb2e13 /pyecsca/codegen/bn
parent02d091ad7e7bb2d80e4ce6649437aad41b479346 (diff)
downloadpyecsca-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.c12
-rw-r--r--pyecsca/codegen/bn/bn.h2
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;