POLY: improve error handling
Use MP_ADD, MP_MUL, PB_ADD, PB_MUL etc instead of the mp_add,... functions to make use of error handling.
This commit is contained in:
parent
56b20220ba
commit
a49a5d2e8c
41
src/poly.c
41
src/poly.c
@ -181,18 +181,9 @@ void pb_starmultiply(pb_poly *a,
|
||||
init_integer(&mp_modulus);
|
||||
mp_set_int(&mp_modulus, (unsigned long)(modulus));
|
||||
|
||||
if ((result = mp_mul(&(a->terms[i]),
|
||||
&(b->terms[j]), &mp_tmp)) != MP_OKAY)
|
||||
NTRU_ABORT("Error multiplying terms. %s",
|
||||
mp_error_to_string(result));
|
||||
if ((result = mp_add(&(c->terms[k]),
|
||||
&mp_tmp, &(c->terms[k]))) != MP_OKAY)
|
||||
NTRU_ABORT("Error adding terms. %s",
|
||||
mp_error_to_string(result));
|
||||
if ((result = mp_mod(&(c->terms[k]),
|
||||
&mp_modulus, &(c->terms[k]))) != MP_OKAY)
|
||||
NTRU_ABORT("Error reducing term by modulo. %s",
|
||||
mp_error_to_string(result));
|
||||
MP_MUL(&(a->terms[i]), &(b->terms[j]), &mp_tmp);
|
||||
MP_ADD(&(c->terms[k]), &mp_tmp, &(c->terms[k]));
|
||||
MP_MOD(&(c->terms[k]), &mp_modulus, &(c->terms[k]));
|
||||
|
||||
mp_clear(&mp_modulus);
|
||||
mp_clear(&mp_tmp);
|
||||
@ -217,7 +208,7 @@ void pb_xor(pb_poly *a,
|
||||
const size_t len)
|
||||
{
|
||||
for (unsigned int i = 0; i < len; i++)
|
||||
mp_xor(&(a->terms[i]), &(b->terms[i]), &(c->terms[i]));
|
||||
MP_XOR(&(a->terms[i]), &(b->terms[i]), &(c->terms[i]));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -243,9 +234,9 @@ bool pb_inverse_poly_q(pb_poly * const a,
|
||||
mp_set(&(b->terms[0]), 1);
|
||||
c = build_polynom(NULL, ctx->N, ctx);
|
||||
f = build_polynom(NULL, ctx->N, ctx);
|
||||
pb_copy(a, f);
|
||||
PB_COPY(a, f);
|
||||
a_tmp = build_polynom(NULL, ctx->N, ctx);
|
||||
pb_copy(a, a_tmp);
|
||||
PB_COPY(a, a_tmp);
|
||||
g = build_polynom(NULL, ctx->N, ctx);
|
||||
mp_set(&(g->terms[0]), 1);
|
||||
g->terms[0].sign = 1;
|
||||
@ -254,8 +245,8 @@ bool pb_inverse_poly_q(pb_poly * const a,
|
||||
while (1) {
|
||||
while (mp_cmp_d(&(f->terms[0]), 0) == MP_EQ) {
|
||||
for (unsigned int i = 1; i <= ctx->N; i++) {
|
||||
mp_copy(&(f->terms[i]), &(f->terms[i - 1]));
|
||||
mp_copy(&(c->terms[ctx->N - i]), &(c->terms[ctx->N + 1 - i]));
|
||||
MP_COPY(&(f->terms[i]), &(f->terms[i - 1]));
|
||||
MP_COPY(&(c->terms[ctx->N - i]), &(c->terms[ctx->N + 1 - i]));
|
||||
}
|
||||
mp_set(&(f->terms[ctx->N]), 0);
|
||||
mp_set(&(c->terms[0]), 0);
|
||||
@ -289,29 +280,29 @@ OUT_OF_LOOP:
|
||||
j = i - k;
|
||||
if (j < 0)
|
||||
j = j + ctx->N;
|
||||
mp_copy(&(b->terms[i]), &(Fq->terms[j]));
|
||||
MP_COPY(&(b->terms[i]), &(Fq->terms[j]));
|
||||
}
|
||||
draw_polynom(Fq);
|
||||
|
||||
while (v < (int)(ctx->q)) {
|
||||
pb_poly *pb_tmp,
|
||||
*pb_tmp_v,
|
||||
*pb_tmp2;
|
||||
mp_int tmp_v;
|
||||
pb_tmp = build_polynom(NULL, ctx->N, ctx);
|
||||
v = v * 2;
|
||||
pb_tmp_v = build_polynom(NULL, ctx->N, ctx);
|
||||
mp_set_int(&(pb_tmp_v->terms[0]), v);
|
||||
init_integer(&tmp_v);
|
||||
mp_set_int(&tmp_v, v);
|
||||
pb_tmp2 = build_polynom(NULL, ctx->N, ctx);
|
||||
mp_set_int(&(pb_tmp2->terms[0]), 2);
|
||||
|
||||
/* hope this does not blow up in our face */
|
||||
pb_starmultiply(a_tmp, Fq, pb_tmp, ctx, v);
|
||||
pb_sub(pb_tmp2, pb_tmp, pb_tmp);
|
||||
pb_mod(pb_tmp, pb_tmp_v, pb_tmp);
|
||||
PB_SUB(pb_tmp2, pb_tmp, pb_tmp);
|
||||
PB_MOD(pb_tmp, &tmp_v, pb_tmp, ctx);
|
||||
pb_starmultiply(Fq, pb_tmp, Fq, ctx, v);
|
||||
|
||||
mp_clear(&tmp_v);
|
||||
delete_polynom(pb_tmp);
|
||||
delete_polynom(pb_tmp_v);
|
||||
delete_polynom(pb_tmp2);
|
||||
}
|
||||
|
||||
@ -320,7 +311,7 @@ OUT_OF_LOOP:
|
||||
mp_int mp_tmp;
|
||||
init_integer(&mp_tmp);
|
||||
mp_set_int(&mp_tmp, ctx->q);
|
||||
mp_add(&(Fq->terms[i]), &mp_tmp, &(Fq->terms[i]));
|
||||
MP_ADD(&(Fq->terms[i]), &mp_tmp, &(Fq->terms[i]));
|
||||
mp_clear(&mp_tmp);
|
||||
}
|
||||
|
||||
|
86
src/poly.h
86
src/poly.h
@ -24,11 +24,97 @@
|
||||
#define NTRU_POLY_H
|
||||
|
||||
#include "context.h"
|
||||
#include "err.h"
|
||||
|
||||
#include <tompoly.h>
|
||||
#include <tommath.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define MP_MUL(...) \
|
||||
{ \
|
||||
int result; \
|
||||
if ((result = mp_mul(__VA_ARGS__)) != MP_OKAY) \
|
||||
NTRU_ABORT("Error multiplying terms. %s", \
|
||||
mp_error_to_string(result)); \
|
||||
}
|
||||
|
||||
#define MP_ADD(...) \
|
||||
{ \
|
||||
int result; \
|
||||
if ((result = mp_add(__VA_ARGS__)) != MP_OKAY) \
|
||||
NTRU_ABORT("Error adding terms. %s", \
|
||||
mp_error_to_string(result)); \
|
||||
}
|
||||
|
||||
#define MP_SUB(...) \
|
||||
{ \
|
||||
int result; \
|
||||
if ((result = mp_sub(__VA_ARGS__)) != MP_OKAY) \
|
||||
NTRU_ABORT("Error substracting terms. %s", \
|
||||
mp_error_to_string(result)); \
|
||||
}
|
||||
|
||||
#define MP_MOD(...) \
|
||||
{ \
|
||||
int result; \
|
||||
if ((result = mp_mod(__VA_ARGS__)) != MP_OKAY) \
|
||||
NTRU_ABORT("Error reducing term by modulo. %s", \
|
||||
mp_error_to_string(result)); \
|
||||
}
|
||||
|
||||
#define MP_COPY(...) \
|
||||
{ \
|
||||
int result; \
|
||||
if ((result = mp_copy(__VA_ARGS__)) != MP_OKAY) \
|
||||
NTRU_ABORT("Error copying terms. %s", \
|
||||
mp_error_to_string(result)); \
|
||||
}
|
||||
|
||||
#define MP_XOR(...) \
|
||||
{ \
|
||||
int result; \
|
||||
if ((result = mp_xor(__VA_ARGS__)) != MP_OKAY) \
|
||||
NTRU_ABORT("Error XORing terms. %s", \
|
||||
mp_error_to_string(result)); \
|
||||
}
|
||||
|
||||
#define PB_MUL(...) \
|
||||
{ \
|
||||
int result; \
|
||||
if ((result = pb_mul(__VA_ARGS__)) != MP_OKAY) \
|
||||
NTRU_ABORT("Error multiplying polynomials. %s", \
|
||||
mp_error_to_string(result)); \
|
||||
}
|
||||
|
||||
#define PB_ADD(...) \
|
||||
{ \
|
||||
int result; \
|
||||
if ((result = pb_add(__VA_ARGS__)) != MP_OKAY) \
|
||||
NTRU_ABORT("Error adding polynomials. %s", \
|
||||
mp_error_to_string(result)); \
|
||||
}
|
||||
|
||||
#define PB_SUB(...) \
|
||||
{ \
|
||||
int result; \
|
||||
if ((result = pb_sub(__VA_ARGS__)) != MP_OKAY) \
|
||||
NTRU_ABORT("Error substracting polynomials. %s", \
|
||||
mp_error_to_string(result)); \
|
||||
}
|
||||
|
||||
#define PB_MOD(poly_a, mp_int, poly_out, context) \
|
||||
{ \
|
||||
for (unsigned int i = 0; i < context->N; i++) \
|
||||
MP_MOD(&(poly_a->terms[i]), mp_int, &(poly_out->terms[i])); \
|
||||
}
|
||||
|
||||
#define PB_COPY(...) \
|
||||
{ \
|
||||
int result; \
|
||||
if ((result = pb_copy(__VA_ARGS__)) != MP_OKAY) \
|
||||
NTRU_ABORT("Error copying polynomial. %s", \
|
||||
mp_error_to_string(result)); \
|
||||
}
|
||||
|
||||
void init_integer(mp_int *new_int);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user