15#ifndef CRYPT_PAILLIER_H
16#define CRYPT_PAILLIER_H
18#include "hitls_build.h"
19#ifdef HITLS_CRYPTO_PAILLIER
24#include "crypt_local_types.h"
25#include "bsl_params.h"
31#define PAILLIER_MAX_MODULUS_BITS 16384
34typedef struct PAILLIER_Ctx CRYPT_PAILLIER_Ctx;
35typedef struct PAILLIER_Para CRYPT_PAILLIER_Para;
46CRYPT_PAILLIER_Ctx *CRYPT_PAILLIER_NewCtx(
void);
56CRYPT_PAILLIER_Ctx *CRYPT_PAILLIER_NewCtxEx(
void *libCtx);
67CRYPT_PAILLIER_Ctx *CRYPT_PAILLIER_DupCtx(CRYPT_PAILLIER_Ctx *keyCtx);
86void CRYPT_PAILLIER_FreeCtx(CRYPT_PAILLIER_Ctx *ctx);
94void CRYPT_PAILLIER_FreePara(CRYPT_PAILLIER_Para *para);
109int32_t CRYPT_PAILLIER_SetPara(CRYPT_PAILLIER_Ctx *ctx,
const CRYPT_PaillierPara *para);
120uint32_t CRYPT_PAILLIER_GetBits(
const CRYPT_PAILLIER_Ctx *ctx);
134int32_t CRYPT_PAILLIER_Gen(CRYPT_PAILLIER_Ctx *ctx);
155int32_t CRYPT_PAILLIER_PubEnc(
const CRYPT_PAILLIER_Ctx *ctx,
const uint8_t *input, uint32_t inputLen,
156 uint8_t *out, uint32_t *outLen);
178int32_t CRYPT_PAILLIER_PrvDec(
const CRYPT_PAILLIER_Ctx *ctx,
const BN_BigNum *ciphertext, uint32_t bits,
179 uint8_t *out, uint32_t *outLen);
196int32_t CRYPT_PAILLIER_SetPrvKey(CRYPT_PAILLIER_Ctx *ctx,
const CRYPT_PaillierPrv *prv);
212int32_t CRYPT_PAILLIER_SetPubKey(CRYPT_PAILLIER_Ctx *ctx,
const CRYPT_PaillierPub *pub);
225int32_t CRYPT_PAILLIER_GetPrvKey(
const CRYPT_PAILLIER_Ctx *ctx,
CRYPT_PaillierPrv *prv);
238int32_t CRYPT_PAILLIER_GetPubKey(
const CRYPT_PAILLIER_Ctx *ctx,
CRYPT_PaillierPub *pub);
240#ifdef HITLS_BSL_PARAMS
254int32_t CRYPT_PAILLIER_SetParaEx(CRYPT_PAILLIER_Ctx *ctx,
const BSL_Param *para);
271int32_t CRYPT_PAILLIER_SetPrvKeyEx(CRYPT_PAILLIER_Ctx *ctx,
const BSL_Param *para);
287int32_t CRYPT_PAILLIER_SetPubKeyEx(CRYPT_PAILLIER_Ctx *ctx,
const BSL_Param *para);
300int32_t CRYPT_PAILLIER_GetPrvKeyEx(
const CRYPT_PAILLIER_Ctx *ctx, BSL_Param *para);
313int32_t CRYPT_PAILLIER_GetPubKeyEx(
const CRYPT_PAILLIER_Ctx *ctx, BSL_Param *para);
336int32_t CRYPT_PAILLIER_Encrypt(CRYPT_PAILLIER_Ctx *ctx,
const uint8_t *data, uint32_t dataLen,
337 uint8_t *out, uint32_t *outLen);
359int32_t CRYPT_PAILLIER_Decrypt(CRYPT_PAILLIER_Ctx *ctx,
const uint8_t *data, uint32_t dataLen,
360 uint8_t *out, uint32_t *outLen);
370int32_t CRYPT_PAILLIER_GetSecBits(
const CRYPT_PAILLIER_Ctx *ctx);
388int32_t CRYPT_PAILLIER_Ctrl(CRYPT_PAILLIER_Ctx *ctx, int32_t opt,
void *val, uint32_t len);
406int32_t CRYPT_PAILLIER_Add(
const void *ctx,
const BSL_Param *input, uint8_t *out, uint32_t *outLen);