API参考
载入中...
搜索中...
未找到
crypt_elgamal.h
1/*
2 * This file is part of the openHiTLS project.
3 *
4 * openHiTLS is licensed under the Mulan PSL v2.
5 * You can use this software according to the terms and conditions of the Mulan PSL v2.
6 * You may obtain a copy of Mulan PSL v2 at:
7 *
8 * http://license.coscl.org.cn/MulanPSL2
9 *
10 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13 * See the Mulan PSL v2 for more details.
14 */
15
16#ifndef CRYPT_ELGAMAL_H
17#define CRYPT_ELGAMAL_H
18
19#include "hitls_build.h"
20#ifdef HITLS_CRYPTO_ELGAMAL
21
22#include <stdlib.h>
23#include <stdint.h>
24#include "crypt_bn.h"
25#include "crypt_local_types.h"
26#include "bsl_params.h"
27
28#ifdef __cplusplus
29extern "C" {
30#endif /* __cpluscplus */
31
32#define ELGAMAL_MAX_MODULUS_BITS 16384
33
34/* ElGamal*/
35typedef struct ELGAMAL_Ctx CRYPT_ELGAMAL_Ctx;
36typedef struct ELGAMAL_Para CRYPT_ELGAMAL_Para;
37
38/* ElGamal method*/
46CRYPT_ELGAMAL_Ctx *CRYPT_ELGAMAL_NewCtx(void);
47
48CRYPT_ELGAMAL_Ctx *CRYPT_ELGAMAL_NewCtxEx(void *libCtx);
49
59CRYPT_ELGAMAL_Ctx *CRYPT_ELGAMAL_DupCtx(CRYPT_ELGAMAL_Ctx *keyCtx);
60
70CRYPT_ELGAMAL_Para *CRYPT_ELGAMAL_NewPara(const CRYPT_ElGamalPara *para);
71
78void CRYPT_ELGAMAL_FreeCtx(CRYPT_ELGAMAL_Ctx *ctx);
79
86void CRYPT_ELGAMAL_FreePara(CRYPT_ELGAMAL_Para *para);
87
101int32_t CRYPT_ELGAMAL_SetPara(CRYPT_ELGAMAL_Ctx *ctx, const CRYPT_ElGamalPara *para);
102
103#ifdef HITLS_BSL_PARAMS
117int32_t CRYPT_ELGAMAL_SetParaEx(CRYPT_ELGAMAL_Ctx *ctx, const BSL_Param *para);
118#endif
119
129uint32_t CRYPT_ELGAMAL_GetBits(const CRYPT_ELGAMAL_Ctx *ctx);
130
140uint32_t CRYPT_ELGAMAL_GetKBits(const CRYPT_ELGAMAL_Ctx *ctx);
141
154int32_t CRYPT_ELGAMAL_Gen(CRYPT_ELGAMAL_Ctx *ctx);
155
178int32_t CRYPT_ELGAMAL_PubEnc(const CRYPT_ELGAMAL_Ctx *ctx, const uint8_t *input, uint32_t inputLen, uint8_t *out1,
179 uint32_t *out1Len, uint8_t *out2, uint32_t *out2Len);
180
202int32_t CRYPT_ELGAMAL_PrvDec(const CRYPT_ELGAMAL_Ctx *ctx, const BN_BigNum *c1, const BN_BigNum *c2, uint32_t bits,
203 uint8_t *out, uint32_t *outLen);
204
220int32_t CRYPT_ELGAMAL_SetPrvKey(CRYPT_ELGAMAL_Ctx *ctx, const CRYPT_ElGamalPrv *prv);
221
236int32_t CRYPT_ELGAMAL_SetPubKey(CRYPT_ELGAMAL_Ctx *ctx, const CRYPT_ElGamalPub *pub);
237
249int32_t CRYPT_ELGAMAL_GetPrvKey(const CRYPT_ELGAMAL_Ctx *ctx, CRYPT_ElGamalPrv *prv);
250
262int32_t CRYPT_ELGAMAL_GetPubKey(const CRYPT_ELGAMAL_Ctx *ctx, CRYPT_ElGamalPub *pub);
263
264#ifdef HITLS_BSL_PARAMS
280int32_t CRYPT_ELGAMAL_SetPrvKeyEx(CRYPT_ELGAMAL_Ctx *ctx, const BSL_Param *para);
281
296int32_t CRYPT_ELGAMAL_SetPubKeyEx(CRYPT_ELGAMAL_Ctx *ctx, const BSL_Param *para);
297
309int32_t CRYPT_ELGAMAL_GetPrvKeyEx(const CRYPT_ELGAMAL_Ctx *ctx, BSL_Param *para);
310
322int32_t CRYPT_ELGAMAL_GetPubKeyEx(const CRYPT_ELGAMAL_Ctx *ctx, BSL_Param *para);
323#endif
324
345int32_t CRYPT_ELGAMAL_Encrypt(CRYPT_ELGAMAL_Ctx *ctx, const uint8_t *data, uint32_t dataLen, uint8_t *out,
346 uint32_t *outLen);
347
368int32_t CRYPT_ELGAMAL_Decrypt(CRYPT_ELGAMAL_Ctx *ctx, const uint8_t *data, uint32_t dataLen, uint8_t *out,
369 uint32_t *outLen);
370
379int32_t CRYPT_ELGAMAL_GetSecBits(const CRYPT_ELGAMAL_Ctx *ctx);
380
397int32_t CRYPT_ELGAMAL_Ctrl(CRYPT_ELGAMAL_Ctx *ctx, int32_t opt, void *val, uint32_t len);
398
399#ifdef HITLS_CRYPTO_ELGAMAL
413int32_t OriginalRoot(void *libCtx, BN_BigNum *g, const BN_BigNum *p, const BN_BigNum *q, uint32_t bits);
414#endif
415
416#ifdef _cplusplus
417}
418#endif
419
420#endif // HITLS_CRYPTO_ELGAMAL
421#endif // CRYPT_ELGAMAL_H
定义 crypt_types.h:522
定义 crypt_types.h:252
定义 crypt_types.h:391