#if HAVE_CONFIG_H
# include "config.h"
#endif
#include <assert.h>
#include "ecc-internal.h"
void
ecc_mod_add (const struct ecc_modulo *m, mp_limb_t *rp,
const mp_limb_t *ap, const mp_limb_t *bp)
{
mp_limb_t cy;
cy = mpn_add_n (rp, ap, bp, m->size);
cy = cnd_add_n (cy, rp, m->B, m->size);
cy = cnd_add_n (cy, rp, m->B, m->size);
assert (cy == 0);
}
void
ecc_mod_sub (const struct ecc_modulo *m, mp_limb_t *rp,
const mp_limb_t *ap, const mp_limb_t *bp)
{
mp_limb_t cy;
cy = mpn_sub_n (rp, ap, bp, m->size);
cy = cnd_sub_n (cy, rp, m->B, m->size);
cy = cnd_sub_n (cy, rp, m->B, m->size);
assert (cy == 0);
}
void
ecc_mod_mul_1 (const struct ecc_modulo *m, mp_limb_t *rp,
const mp_limb_t *ap, mp_limb_t b)
{
mp_limb_t hi;
assert (b <= 0xffffffff);
hi = mpn_mul_1 (rp, ap, m->size, b);
hi = mpn_addmul_1 (rp, m->B, m->size, hi);
assert (hi <= 1);
hi = cnd_add_n (hi, rp, m->B, m->size);
assert (hi == 0);
}
void
ecc_mod_addmul_1 (const struct ecc_modulo *m, mp_limb_t *rp,
const mp_limb_t *ap, mp_limb_t b)
{
mp_limb_t hi;
assert (b <= 0xffffffff);
hi = mpn_addmul_1 (rp, ap, m->size, b);
hi = mpn_addmul_1 (rp, m->B, m->size, hi);
assert (hi <= 1);
hi = cnd_add_n (hi, rp, m->B, m->size);
assert (hi == 0);
}
void
ecc_mod_submul_1 (const struct ecc_modulo *m, mp_limb_t *rp,
const mp_limb_t *ap, mp_limb_t b)
{
mp_limb_t hi;
assert (b <= 0xffffffff);
hi = mpn_submul_1 (rp, ap, m->size, b);
hi = mpn_submul_1 (rp, m->B, m->size, hi);
assert (hi <= 1);
hi = cnd_sub_n (hi, rp, m->B, m->size);
assert (hi == 0);
}
void
ecc_mod_mul (const struct ecc_modulo *m, mp_limb_t *rp,
const mp_limb_t *ap, const mp_limb_t *bp)
{
mpn_mul_n (rp, ap, bp, m->size);
m->reduce (m, rp);
}
void
ecc_mod_sqr (const struct ecc_modulo *m, mp_limb_t *rp,
const mp_limb_t *ap)
{
mpn_sqr (rp, ap, m->size);
m->reduce (m, rp);
}