#ifndef MPU_BLS75_H
#define MPU_BLS75_H
#include <gmp.h>
#include "ptypes.h"
/* Return values of 0 do not indicate composite with certainty.
* A zero result means that we were unable to construct a proof.
*/
/* These check the theorem conditions for given n and a factor. */
/* This is NOT a full proof as the factor isn't verified. */
/* Check BLS75 theorem 3 conditions */
extern int BLS_check_T3(const mpz_t n, const mpz_t p, UV* a);
/* Check BLS75 theorem 15 conditions */
extern int BLS_check_T15(const mpz_t n, const mpz_t q, IV* lp, IV* lq);
/* These construct a complete recursive proof. */
/* BLS75 theorem 5/7 complete proof */
extern int BLS_primality_nm1(const mpz_t n, int effort, char ** prooftextptr);
/* BLS75 theorem 17 complete proof (N+1) */
extern int BLS_primality_np1(const mpz_t n, int effort, char** prooftextptr);
/* BLS75 theorem 20 complete proof (N-1 and N+1) */
extern int BLS_primality(const mpz_t n, int effort, char** prooftextptr);
#endif