#ifndef PARAMS_H
#define PARAMS_H

#include "config.h"

#define P 65521
#define COEFF_BYTES 2
#define BARRETT_M 65551
#define BARRETT_K 32
#define COMP_TAIL 9
#define SEEDBYTES 32

#if FULEECA_MODE == 1

#define N 1318
#define SALT_BYTES 32
#define SIGNATURE_BYTES 1068
//w_key = 0.00144065174414188071
#define KEYWEIGHT 31102
//w_sig = 0.03
#define TARGET_WEIGHT 1295330
#define LAMBDA 160
#define MULT_X 12
#define DIV_X 8
#define OPTS 100
#define LOOP_THRESHOLD (TARGET_WEIGHT - KEYWEIGHT)
#define SHA3_LENGTH 32

#elif FULEECA_MODE == 3

#define N 1982
#define SALT_BYTES 32
#define SIGNATURE_BYTES 1588
//w_key = 0.00143390637840688295
#define KEYWEIGHT 46552
#define TARGET_WEIGHT 1947910
#define LAMBDA 224
#define MULT_X 9
#define DIV_X 8
#define OPTS 90
#define LOOP_THRESHOLD (TARGET_WEIGHT - KEYWEIGHT)
#define SHA3_LENGTH 48

#elif FULEECA_MODE == 5

#define N 2638
#define SIGNATURE_BYTES 2098
#define SALT_BYTES 32
//w_key = 0.00143294074302413954
#define KEYWEIGHT 61918
#define TARGET_WEIGHT 2592626
#define LAMBDA 288
#define MULT_X 3
#define DIV_X 7
#define OPTS 178
#define LOOP_THRESHOLD (TARGET_WEIGHT - KEYWEIGHT)
#define SHA3_LENGTH 64

#endif

#define CRYPTO_BYTES (SALT_BYTES + SIGNATURE_BYTES)
#define CRYPTO_SECRETKEYBYTES (N*COEFF_BYTES)
#define CRYPTO_PUBLICKEYBYTES (N/2*COEFF_BYTES)

#endif
