You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

37 lines
1.3 KiB

  1. #include "poly.h"
  2. void PQCLEAN_NTRUHPS4096821_CLEAN_poly_Sq_tobytes(unsigned char *r, const poly *a) {
  3. int i;
  4. for (i = 0; i < NTRU_PACK_DEG / 2; i++) {
  5. r[3 * i + 0] = (unsigned char) ( a->coeffs[2 * i + 0] & 0xff);
  6. r[3 * i + 1] = (unsigned char) ((a->coeffs[2 * i + 0] >> 8) | ((a->coeffs[2 * i + 1] & 0x0f) << 4));
  7. r[3 * i + 2] = (unsigned char) ((a->coeffs[2 * i + 1] >> 4));
  8. }
  9. }
  10. void PQCLEAN_NTRUHPS4096821_CLEAN_poly_Sq_frombytes(poly *r, const unsigned char *a) {
  11. int i;
  12. for (i = 0; i < NTRU_PACK_DEG / 2; i++) {
  13. r->coeffs[2 * i + 0] = (a[3 * i + 0] >> 0) | (((uint16_t)a[3 * i + 1] & 0x0f) << 8);
  14. r->coeffs[2 * i + 1] = (a[3 * i + 1] >> 4) | (((uint16_t)a[3 * i + 2] & 0xff) << 4);
  15. }
  16. }
  17. void PQCLEAN_NTRUHPS4096821_CLEAN_poly_Rq_sum_zero_tobytes(unsigned char *r, const poly *a) {
  18. PQCLEAN_NTRUHPS4096821_CLEAN_poly_Sq_tobytes(r, a);
  19. }
  20. void PQCLEAN_NTRUHPS4096821_CLEAN_poly_Rq_sum_zero_frombytes(poly *r, const unsigned char *a) {
  21. int i;
  22. PQCLEAN_NTRUHPS4096821_CLEAN_poly_Sq_frombytes(r, a);
  23. /* Set r[n-1] so that the sum of coefficients is zero mod q */
  24. r->coeffs[NTRU_N - 1] = 0;
  25. for (i = 0; i < NTRU_PACK_DEG; i++) {
  26. r->coeffs[NTRU_N - 1] += r->coeffs[i];
  27. }
  28. r->coeffs[NTRU_N - 1] = MODQ(-(r->coeffs[NTRU_N - 1]));
  29. }