From 40303356619338eb876546089fd68e38304774f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20Pr=C3=BC=C3=9Fner?= Date: Mon, 12 May 2014 13:46:59 +0200 Subject: [PATCH] POLY: implemented pb_normalize normalizes a polynom by defining a numerical range for each factor of a polynom. --- src/poly.c | 34 ++++++++++++++++++++++++++++++++++ src/poly.h | 7 +++++++ 2 files changed, 41 insertions(+) diff --git a/src/poly.c b/src/poly.c index c6f77f5..6d9c2b2 100644 --- a/src/poly.c +++ b/src/poly.c @@ -432,3 +432,37 @@ void draw_polynom(pb_poly * const poly) } printf("\n"); } + +void pb_normalize(pb_poly *poly, int low_border, int high_border, ntru_context *ctx){ + unsigned int p = ctx->p; + unsigned int N = ctx->N; + + mp_int mp_p; + mp_int mp_low_border; + mp_int mp_high_border; + + init_integer(&mp_low_border); + init_integer(&mp_high_border); + init_integer(&mp_p); + + MP_SET_INT(&mp_p, p); + MP_SET_INT(&mp_low_border,(unsigned long)abs(low_border)); + mp_neg(&mp_low_border,&mp_low_border); + MP_SET_INT(&mp_high_border,high_border); + + + unsigned int i; + for(i = 0; i < N; i++){ + if(mp_cmp(&(poly->terms[i]),&mp_low_border) == MP_LT) { + mp_add(&(poly->terms[i]),&mp_p,&(poly->terms[i])); + } else if(mp_cmp(&(poly->terms[i]),&mp_high_border) == MP_GT) { + mp_sub(&(poly->terms[i]),&mp_p,&(poly->terms[i])); + } + } +} + +void draw_mp_int(mp_int *digit) { + char buf[8192]; + mp_toradix(digit, buf, 10); + printf("%s\n",buf); +} diff --git a/src/poly.h b/src/poly.h index 77a9b54..7f961a1 100644 --- a/src/poly.h +++ b/src/poly.h @@ -184,4 +184,11 @@ bool pb_inverse_poly_q(pb_poly *a, void draw_polynom(pb_poly * const poly); +void pb_normalize(pb_poly*, + int, + int, + ntru_context*); + +void draw_mp_int(mp_int*); + #endif /* NTRU_POLY_H */