#ifndef _QA_ARITH_H_ #define _QA_ARITH_H /* shortcut macros. */ #define BN_uiadd1(a) BN_uadd(a, a, BN_value_one()) /** * Fractions made of bignums. */ typedef struct bigfraction { BIGNUM* h; /**< numerator */ BIGNUM* k; /**< denominator */ } bigfraction_t; typedef struct cf { bigfraction_t fs[3]; short i; bigfraction_t x; BIGNUM* a; BN_CTX* ctx; } cf_t; /* continued fractions utilities. */ cf_t* cf_new(void); cf_t* cf_init(cf_t *f, BIGNUM *num, BIGNUM *b); void cf_free(cf_t* f); bigfraction_t* cf_next(cf_t *f); /* square root calculation */ int BN_sqrtmod(BIGNUM* dv, BIGNUM* rem, BIGNUM* a, BN_CTX* ctx); RSA* qa_RSA_recover(const RSA *rsapub, const BIGNUM *p, BN_CTX *ctx); #endif /* _QA_ARITH_H_ */