#ifndef __ZM_H
#include "bee2/math/qr.h"
#ifdef __cplusplus
extern "C" {
#endif
void zmCreatePlain(
qr_o* r,
const octet mod[],
size_t no,
void* stack
);
size_t zmCreatePlain_keep(size_t no);
size_t zmCreatePlain_deep(size_t no);
void zmCreateCrand(
qr_o* r,
const octet mod[],
size_t no,
void* stack
);
size_t zmCreateCrand_keep(size_t no);
size_t zmCreateCrand_deep(size_t no);
void zmCreateBarr(
qr_o* r,
const octet mod[],
size_t no,
void* stack
);
size_t zmCreateBarr_keep(size_t no);
size_t zmCreateBarr_deep(size_t no);
void zmCreateMont(
qr_o* r,
const octet mod[],
size_t no,
void* stack
);
size_t zmCreateMont_keep(size_t no);
size_t zmCreateMont_deep(size_t no);
void zmCreate(
qr_o* r,
const octet mod[],
size_t no,
void* stack
);
size_t zmCreate_keep(size_t no);
size_t zmCreate_deep(size_t no);
void zmMontCreate(
qr_o* r,
const octet mod[],
size_t no,
size_t l,
void* stack
);
size_t zmMontCreate_keep(size_t no);
size_t zmMontCreate_deep(size_t no);
bool_t zmIsValid(
const qr_o* r
);
#define zmIsOperable zmIsValid
#define zmIsIn(a, r)\
(wwCmp(a, (r)->mod, (r)->n) < 0)
#define zmAdd(c, a, b, r)\
zzAddMod(c, a, b, (r)->mod, (r)->n)
#define zmSub(c, a, b, r)\
zzSubMod(c, a, b, (r)->mod, (r)->n)
#define zmNeg(b, a, r)\
zzNegMod(b, a, (r)->mod, (r)->n)
#ifdef __cplusplus
}
#endif
#endif