/*
 * poly_arithmetic2.c
 *
 *  Created on: 04-Nov-2022
 *      Author: ssinharoy
 */
#include<stdint.h>
#include "poly_arithmetic2.h"
#include "pke_parameters.h"
#include "modular_arithmetic.h"


void schoolbook256(uint16_t* res, uint16_t* a, uint16_t* b)
{
	// Polynomial multiplication in Rq using the schoolbook method, c[x] = a[x]*b[x]
	// This implementation is very-very inefficient.
	uint32_t i, j;
	uint16_t c[2*PKE_N];

	//---------- Polynomial multiplication-----------------
	for (i = 0; i < 2*PKE_N; i++) c[i] = 0;

	for (i = 0; i < PKE_N; i++) {
		for (j = 0; j < PKE_N; j++) {
			c[i+j]=mod( c[i+j] + a[i]*b[j] );
		}
	}

	//-----------Reduction by f(x) = x^PKE_N + 1 -------
	for(i=PKE_N; i< 2*PKE_N-1; i++){
		c[i-PKE_N]=mod(c[i-PKE_N]-c[i]);
	}

	c[PKE_N]=0;  //256th coefficient=0;



	//----------- Copy c[] into the result array----------
	for(i=0; i<PKE_N; i++){
            res[i] = c[i];

	}
}




