74 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			74 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /* LibTomMath, multiple-precision integer library -- Tom St Denis
 | ||
|  |  * | ||
|  |  * LibTomMath is library that provides for multiple-precision  | ||
|  |  * integer arithmetic as well as number theoretic functionality. | ||
|  |  * | ||
|  |  * This file "poly.h" provides GF(p^k) functionality on top of the  | ||
|  |  * libtommath library. | ||
|  |  *  | ||
|  |  * The library is designed directly after the MPI library by | ||
|  |  * Michael Fromberger but has been written from scratch with  | ||
|  |  * additional optimizations in place.   | ||
|  |  * | ||
|  |  * The library is free for all purposes without any express | ||
|  |  * guarantee it works. | ||
|  |  * | ||
|  |  * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca
 | ||
|  |  */ | ||
|  | 
 | ||
|  | #ifndef POLY_H_
 | ||
|  | #define POLY_H_
 | ||
|  | 
 | ||
|  | #include "bn.h"
 | ||
|  | 
 | ||
|  | /* a mp_poly is basically a derived "class" of a mp_int
 | ||
|  |  * it uses the same technique of growing arrays via  | ||
|  |  * used/alloc parameters except the base unit or "digit" | ||
|  |  * is in fact a mp_int.  These hold the coefficients | ||
|  |  * of the polynomial  | ||
|  |  */ | ||
|  | typedef struct { | ||
|  |     int    used,    /* coefficients used */ | ||
|  |            alloc;   /* coefficients allocated (and initialized) */ | ||
|  |     mp_int *co,     /* coefficients */ | ||
|  |            cha;     /* characteristic */ | ||
|  |      | ||
|  | } mp_poly; | ||
|  | 
 | ||
|  | 
 | ||
|  | #define MP_POLY_PREC     16             /* default coefficients allocated */
 | ||
|  | 
 | ||
|  | /* init a poly */ | ||
|  | int mp_poly_init(mp_poly *a, mp_int *cha); | ||
|  | 
 | ||
|  | /* init a poly of a given (size) degree  */ | ||
|  | int mp_poly_init_size(mp_poly *a, mp_int *cha, int size); | ||
|  | 
 | ||
|  | /* copy, b = a */ | ||
|  | int mp_poly_copy(mp_poly *a, mp_poly *b); | ||
|  | 
 | ||
|  | /* init from a copy, a = b */ | ||
|  | int mp_poly_init_copy(mp_poly *a, mp_poly *b); | ||
|  | 
 | ||
|  | /* free a poly from ram */ | ||
|  | void mp_poly_clear(mp_poly *a); | ||
|  | 
 | ||
|  | /* exchange two polys */ | ||
|  | void mp_poly_exch(mp_poly *a, mp_poly *b); | ||
|  | 
 | ||
|  | /* ---> Basic Arithmetic <--- */ | ||
|  | 
 | ||
|  | /* add two polynomials, c(x) = a(x) + b(x) */ | ||
|  | int mp_poly_add(mp_poly *a, mp_poly *b, mp_poly *c); | ||
|  | 
 | ||
|  | /* subtracts two polynomials, c(x) = a(x) - b(x) */ | ||
|  | int mp_poly_sub(mp_poly *a, mp_poly *b, mp_poly *c); | ||
|  | 
 | ||
|  | /* multiplies two polynomials, c(x) = a(x) * b(x) */ | ||
|  | int mp_poly_mul(mp_poly *a, mp_poly *b, mp_poly *c); | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #endif
 | ||
|  | 
 |