POLY: add build_polynom() method
We can build a polynom via an array of integers or just an empty one, so that it is initialized and properly allocated.
This commit is contained in:
parent
be28e18cfb
commit
fc4ee3b70b
51
src/poly.c
51
src/poly.c
@ -19,8 +19,10 @@
|
|||||||
* MA 02110-1301 USA
|
* MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "context.h"
|
||||||
#include "err.h"
|
#include "err.h"
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <tompoly.h>
|
#include <tompoly.h>
|
||||||
#include <tommath.h>
|
#include <tommath.h>
|
||||||
@ -75,6 +77,55 @@ void init_polynom_size(pb_poly *new_poly, mp_int *chara, size_t size)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes and builds a polynomial with the
|
||||||
|
* coefficient values of c[] of size len within NTRU
|
||||||
|
* context ctx and returns a newly allocated polynomial
|
||||||
|
* pointer.
|
||||||
|
*
|
||||||
|
* @param c array of polynomial coefficients, can be NULL
|
||||||
|
* @param len size of the coefficient array, can be 0
|
||||||
|
* @param ctx NTRU context
|
||||||
|
* @return newly allocated polynomial pointer, must be freed
|
||||||
|
* with delete_polynom()
|
||||||
|
*/
|
||||||
|
pb_poly *build_polynom(int const * const c,
|
||||||
|
const size_t len,
|
||||||
|
ntru_context *ctx)
|
||||||
|
{
|
||||||
|
pb_poly *new_poly;
|
||||||
|
mp_int chara;
|
||||||
|
|
||||||
|
new_poly = malloc(sizeof(*new_poly));
|
||||||
|
init_integer(&chara);
|
||||||
|
init_polynom_size(new_poly, &chara, len);
|
||||||
|
mp_clear(&chara);
|
||||||
|
|
||||||
|
/* fill the polynom if c is not NULL */
|
||||||
|
if (c) {
|
||||||
|
for (unsigned int i = 0; i < len; i++) {
|
||||||
|
bool sign = false;
|
||||||
|
unsigned long unsigned_c;
|
||||||
|
|
||||||
|
if (c[i] < 0) {
|
||||||
|
unsigned_c = 0 - c[i];
|
||||||
|
sign = true;
|
||||||
|
} else {
|
||||||
|
unsigned_c = c[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
mp_set_int(&(new_poly->terms[i]), unsigned_c);
|
||||||
|
|
||||||
|
if (sign == true)
|
||||||
|
new_poly->terms[i].sign = 1;
|
||||||
|
}
|
||||||
|
new_poly->used = len;
|
||||||
|
pb_clamp(new_poly);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new_poly;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This deletes the internal structure of a polynomial,
|
* This deletes the internal structure of a polynomial,
|
||||||
* and frees the pointer. Don't call this on stack variables,
|
* and frees the pointer. Don't call this on stack variables,
|
||||||
|
@ -23,6 +23,8 @@
|
|||||||
#ifndef NTRU_POLY_H
|
#ifndef NTRU_POLY_H
|
||||||
#define NTRU_POLY_H
|
#define NTRU_POLY_H
|
||||||
|
|
||||||
|
#include "context.h"
|
||||||
|
|
||||||
#include <tompoly.h>
|
#include <tompoly.h>
|
||||||
#include <tommath.h>
|
#include <tommath.h>
|
||||||
|
|
||||||
@ -33,6 +35,10 @@ void init_polynom(pb_poly *new_poly, mp_int *chara);
|
|||||||
|
|
||||||
void init_polynom_size(pb_poly *new_poly, mp_int *chara, size_t size);
|
void init_polynom_size(pb_poly *new_poly, mp_int *chara, size_t size);
|
||||||
|
|
||||||
|
pb_poly *build_polynom(int const * const c,
|
||||||
|
const size_t len,
|
||||||
|
ntru_context *ctx);
|
||||||
|
|
||||||
void delete_polynom(pb_poly *new_poly);
|
void delete_polynom(pb_poly *new_poly);
|
||||||
|
|
||||||
void draw_polynom(pb_poly * const poly);
|
void draw_polynom(pb_poly * const poly);
|
||||||
|
Loading…
Reference in New Issue
Block a user