#include "bee2/core/mem.h"
#include "bee2/core/util.h"
#include "bee2/math/gfp.h"
#include "bee2/math/pri.h"
#include "bee2/math/zm.h"
bool_t gfpCreate(qr_o* r, const octet p[], size_t no, void* stack)
{
ASSERT(memIsValid(r, sizeof(*r)));
ASSERT(memIsValid(p, no));
ASSERT(no > 0 && p[no - 1] > 0);
if (no == 0 || p[0] % 2 == 0 || no == 1 && p[0] == 1)
return FALSE;
zmCreate(r, p, no, stack);
return TRUE;
}
size_t gfpCreate_keep(size_t no)
{
return zmCreate_keep(no);
}
size_t gfpCreate_deep(size_t no)
{
return zmCreate_deep(no);
}
bool_t gfpIsOperable(const qr_o* f)
{
return zmIsValid(f) &&
f->mod[0] % 2 &&
(f->n > 1 || f->mod[0] > 1);
}
bool_t gfpIsValid(const qr_o* f, void* stack)
{
return gfpIsOperable(f) &&
priIsPrime(f->mod, f->n, stack);
}
size_t gfpIsValid_deep(size_t n)
{
return priIsPrime_deep(n);
}