00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef POLY_H
00022 #define POLY_H
00023
00024 #include "gf.h"
00025
00026 typedef struct polynome {
00027 int deg, size;
00028 gf_t * coeff;
00029 } * poly_t;
00030
00031 #ifndef TRUE
00032 #define TRUE 1
00033 #define FALSE 0
00034 #endif
00035
00036 #define poly_deg(p) ((p)->deg)
00037 #define poly_size(p) ((p)->size)
00038 #define poly_set_deg(p, d) ((p)->deg = (d))
00039 #define poly_coeff(p, i) ((p)->coeff[i])
00040 #define poly_set_coeff(p, i, a) ((p)->coeff[i] = (a))
00041 #define poly_addto_coeff(p, i, a) ((p)->coeff[i] = gf_add((p)->coeff[i], (a)))
00042 #define poly_multo_coeff(p, i, a) ((p)->coeff[i] = gf_mul((p)->coeff[i], (a)))
00043 #define poly_tete(p) ((p)->coeff[(p)->deg])
00044
00045
00046
00047 int poly_calcule_deg(poly_t p);
00048 poly_t poly_alloc(int d);
00049 poly_t poly_alloc_from_string(int d, const unsigned char * s);
00050 poly_t poly_copy(poly_t p);
00051 void poly_free(poly_t p);
00052 void poly_set_to_zero(poly_t p);
00053 void poly_set(poly_t p, poly_t q);
00054 poly_t poly_mul(poly_t p, poly_t q);
00055 void poly_rem(poly_t p, poly_t g);
00056 void poly_sqmod_init(poly_t g, poly_t * sq);
00057 void poly_sqmod(poly_t res, poly_t p, poly_t * sq, int d);
00058 poly_t poly_gcd(poly_t p1, poly_t p2);
00059 poly_t poly_quo(poly_t p, poly_t d);
00060 gf_t poly_eval(poly_t p, gf_t a);
00061 int poly_degppf(poly_t g);
00062 void poly_eeaux(poly_t * u, poly_t * v, poly_t p, poly_t g, int t);
00063
00064 poly_t * poly_syndrome_init(poly_t generator, gf_t *support, int n);
00065 poly_t * poly_sqrtmod_init(poly_t g);
00066 poly_t poly_randgen_irred(int t, int (*u8rnd)());
00067 #endif