libcurve/include/mpztools.h

37 lines
924 B
C

#pragma once
#include <gmp.h>
struct mpz_field
{
int length;
mpz_t values[0];
};
typedef struct mpz_field mpz_field_t;
#define mpz_field_value(f, i) (f->values[i])
static inline void __tools_mpz_cleanup(mpz_t *mpz){
// printf("__tools_mpz_clenaup(%x)\n", mpz);
mpz_clear(*mpz);
}
void mpz_random_mod( mpz_t rop, mpz_t p);
char* mpz_to_string(mpz_t i, int base);
#define mpz_cleanup(name) mpz_t name __attribute__ (( __cleanup__(__tools_mpz_cleanup))); mpz_init( name );
#define mpz_t_cleanup_set(name, value) mpz_t name __attribute__ (( __cleanup__(__tools_mpz_cleanup))); mpz_init_set( name, value );
mpz_t* mpz_field_init(int length);
void mpz_field_clear(mpz_t *field);
static inline void __tools_mpz_field_cleanup(mpz_t **f){
mpz_field_clear(*f);
}
#define mpz_field_cleanup(name, length) mpz_t* name __attribute__ (( __cleanup__(__tools_mpz_field_cleanup))) = mpz_field_init( length );