void ntru_decrypt_poly(NtruIntPoly *e, NtruEncPrivKey *priv, uint16_t q, NtruIntPoly *d) { ntru_mult_priv(&priv->t, e, d, q-1); ntru_mult_fac(d, 3); ntru_add(d, e); ntru_mod_center(d, q); ntru_mod3(d); }
void decrypt_poly(NtruIntPoly *e, NtruEncPrivKey *priv, NtruIntPoly *d, uint16_t modulus) { #ifndef NTRU_AVOID_HAMMING_WT_PATENT if (priv->t.prod_flag) ntru_mult_prod(e, &priv->t.poly.prod, d, modulus-1); else #endif /* NTRU_AVOID_HAMMING_WT_PATENT */ ntru_mult_tern(e, &priv->t.poly.tern, d, modulus-1); ntru_mod_mask(d, modulus-1); ntru_mult_fac(d, 3); ntru_add_int(d, e); ntru_mod_center(d, modulus); ntru_mod3(d); uint16_t i; for (i=0; i<d->N; i++) if (d->coeffs[i] == 2) d->coeffs[i] = -1; }