#ifndef NIEDERREITER_H #define NIEDERREITER_H #include "gf2x_arith_mod_xPplusOne.h" #include "qc_ldpc_parameters.h" #include "rng.h" typedef struct { /* raw entropy extracted from TRNG, will be deterministically expanded into * H and Q during decryption */ unsigned char prng_seed[TRNG_BYTE_LENGTH]; int8_t rejections; uint8_t threshold; // for round 2 } privateKeyNiederreiter_t; typedef struct { DIGIT Mtr[(N0 - 1)*NUM_DIGITS_GF2X_ELEMENT]; // Dense representation of the matrix M=Ln0*L, // An array including a sequence of (N0-1) gf2x elements; // each gf2x element is stored as a binary polynomial(mod x^P+1) // with P coefficients. } publicKeyNiederreiter_t; void PQCLEAN_LEDAKEMLT52_LEAKTIME_niederreiter_keygen(publicKeyNiederreiter_t *pk, privateKeyNiederreiter_t *sk, AES_XOF_struct *keys_expander); void PQCLEAN_LEDAKEMLT52_LEAKTIME_niederreiter_encrypt(DIGIT syndrome[], const publicKeyNiederreiter_t *pk, const DIGIT *err); int PQCLEAN_LEDAKEMLT52_LEAKTIME_niederreiter_decrypt(DIGIT *err, const privateKeyNiederreiter_t *sk, const DIGIT *syndrome); #endif