26typedef enum { FRODO_PRG_AES, FRODO_PRG_SHAKE } FrodoKemPrgType;
28#define FRODO_PARA_640_N 640
29#define FRODO_M_SALT_LEN 96
37 uint8_t extractedBits;
50 const uint16_t *cdfTable;
65int32_t FrodoKemShake128(uint8_t *output, uint32_t outlen,
const uint8_t *input, uint32_t inlen);
66int32_t FrodoKemShake256(uint8_t *output, uint32_t outlen,
const uint8_t *input, uint32_t inlen);
68int32_t FrodoExpandShakeDs(uint8_t *out, uint32_t outlen, uint8_t ds,
const uint8_t *seed, uint32_t seedlen,
71int32_t FrodoPkeKeygenSeeded(
const FrodoKemParams *params, uint8_t *pk, uint16_t *matrixSTranspose,
72 const uint8_t *seedA,
const uint8_t *seedSE);
78void FrodoCommonPack(uint8_t *out,
const size_t outLen,
const uint16_t *in,
const size_t inLen,
const uint8_t lsb);
80void FrodoCommonUnpack(uint16_t *out,
const size_t outLen,
const uint8_t *in,
const size_t inLen,
const uint8_t lsb);
82int8_t FrodoCommonCtVerify(
const uint16_t *a,
const uint16_t *b,
size_t len);
84void FrodoCommonCtSelect(uint8_t *r,
const uint8_t *a,
const uint8_t *b,
size_t len, int8_t selector);
90int32_t FrodoCommonMulAddAsPlusEPortable(uint16_t *out,
const uint16_t *s,
const uint8_t *seedA,
93int32_t FrodoCommonMulAddSaPlusEPortable(uint16_t *b,
const uint16_t *s,
const uint16_t *e,
const uint8_t *seedA,
96void FrodoCommonMulAddSbPlusEPortable(uint16_t *V0,
const uint16_t *STp,
const uint16_t *B,
const uint16_t *Epp,
99void FrodoCommonMulBs(uint16_t *out,
const uint16_t *b,
const uint16_t *s,
const FrodoKemParams *params);
100void FrodoCommonMulBsUsingSt(uint16_t *out,
const uint16_t *b,
const uint16_t *s,
const FrodoKemParams *params);
106void FrodoCommonAdd(uint16_t *out,
const uint16_t *a,
const uint16_t *b,
const FrodoKemParams *params);
107void FrodoCommonSub(uint16_t *out,
const uint16_t *a,
const uint16_t *b,
const FrodoKemParams *params);
108void FrodoCommonKeyEncode(uint16_t *out,
const uint16_t *in,
const FrodoKemParams *params);
109void FrodoCommonKeyDecode(uint16_t *out,
const uint16_t *in,
const FrodoKemParams *params);
115int32_t FrodoPkeKeygen(
const FrodoKemParams *params, uint8_t *pk, uint8_t *pke_sk);
116int32_t FrodoPkeEncrypt(
const FrodoKemParams *params,
const uint8_t *pk,
const uint8_t *mu,
const uint8_t *seedSE,
118int32_t FrodoPkeDecrypt(
const FrodoKemParams *params,
const uint8_t *pke_sk,
const uint8_t *ct, uint8_t *mu);