API参考
载入中...
搜索中...
未找到
crypt_rsa.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_RSA_H
17#define CRYPT_RSA_H
18
19#include "hitls_build.h"
20#ifdef HITLS_CRYPTO_RSA
21
22#include <stdlib.h>
23#include <stdint.h>
24#include "crypt_local_types.h"
25#include "bsl_params.h"
26#include "crypt_params_key.h"
27
28#ifdef __cplusplus
29extern "C" {
30#endif /* __cpluscplus */
31
32#define RSA_MIN_MODULUS_BITS 1024
33#define RSA_MAX_MODULUS_BITS 16384
34#define RSA_SMALL_MODULUS_BYTES (3072 / 8)
35#define RSA_MAX_PUBEXP_BYTES (64 / 8)
36#define RSA_MIN_MODULUS_LEN (RSA_MIN_MODULUS_BITS / 8)
37#define RSA_MAX_MODULUS_LEN (RSA_MAX_MODULUS_BITS / 8)
38
39/* RSA */
40typedef struct RSA_Ctx CRYPT_RSA_Ctx;
41typedef struct RSA_Para CRYPT_RSA_Para;
42
43
44/* RSA method */
45
53CRYPT_RSA_Ctx *CRYPT_RSA_NewCtx(void); // create key structure
54
64CRYPT_RSA_Ctx *CRYPT_RSA_NewCtxEx(void *libCtx);
65
75CRYPT_RSA_Ctx *CRYPT_RSA_DupCtx(CRYPT_RSA_Ctx *keyCtx);
76
86CRYPT_RSA_Para *CRYPT_RSA_NewPara(const CRYPT_RsaPara *para);
87
94void CRYPT_RSA_FreePara(CRYPT_RSA_Para *para);
95
102void CRYPT_RSA_FreeCtx(CRYPT_RSA_Ctx *ctx);
103
117int32_t CRYPT_RSA_SetPara(CRYPT_RSA_Ctx *ctx, const CRYPT_RsaPara *para);
118
128uint32_t CRYPT_RSA_GetBits(const CRYPT_RSA_Ctx *ctx);
129
130#ifdef HITLS_CRYPTO_RSA_GEN
143int32_t CRYPT_RSA_Gen(CRYPT_RSA_Ctx *ctx);
144#endif
145
146#if defined(HITLS_CRYPTO_RSA_ENCRYPT) || defined(HITLS_CRYPTO_RSA_VERIFY) || defined(HITLS_CRYPTO_RSA_SIGN)
166int32_t CRYPT_RSA_PubEnc(const CRYPT_RSA_Ctx *ctx, const uint8_t *input, uint32_t inputLen,
167 uint8_t *out, uint32_t *outLen);
168#endif
169
190int32_t CRYPT_RSA_PrvDec(const CRYPT_RSA_Ctx *ctx, const uint8_t *input, uint32_t inputLen,
191 uint8_t *out, uint32_t *outLen);
192
208int32_t CRYPT_RSA_SetPrvKey(CRYPT_RSA_Ctx *ctx, const CRYPT_RsaPrv *prv);
209
224int32_t CRYPT_RSA_SetPubKey(CRYPT_RSA_Ctx *ctx, const CRYPT_RsaPub *pub);
225
237int32_t CRYPT_RSA_GetPrvKey(const CRYPT_RSA_Ctx *ctx, CRYPT_RsaPrv *prv);
238
250int32_t CRYPT_RSA_GetPubKey(const CRYPT_RSA_Ctx *ctx, CRYPT_RsaPub *pub);
251
267int32_t CRYPT_RSA_SetPrvKeyEx(CRYPT_RSA_Ctx *ctx, const BSL_Param *para);
268
283int32_t CRYPT_RSA_SetPubKeyEx(CRYPT_RSA_Ctx *ctx, const BSL_Param *para);
284
296int32_t CRYPT_RSA_GetPrvKeyEx(const CRYPT_RSA_Ctx *ctx, BSL_Param *para);
297
309int32_t CRYPT_RSA_GetPubKeyEx(const CRYPT_RSA_Ctx *ctx, BSL_Param *para);
310
324int32_t CRYPT_RSA_SetParaEx(CRYPT_RSA_Ctx *ctx, const BSL_Param *para);
325
326int32_t CRYPT_RSA_Ctrl(CRYPT_RSA_Ctx *ctx, int32_t opt, void *val, uint32_t len);
327
328#ifdef HITLS_CRYPTO_RSA_BSSA
329
330#ifdef HITLS_CRYPTO_RSA_SIGN
345int32_t CRYPT_RSA_Blind(CRYPT_RSA_Ctx *ctx, int32_t algId, const uint8_t *input, uint32_t inputLen,
346 uint8_t *out, uint32_t *outLen);
347#endif
348
349#ifdef HITLS_CRYPTO_RSA_VERIFY
363int32_t CRYPT_RSA_UnBlind(const CRYPT_RSA_Ctx *ctx, const uint8_t *input, uint32_t inputLen,
364 uint8_t *out, uint32_t *outLen);
365#endif
366
367#endif
368
369#ifdef HITLS_CRYPTO_RSA_EMSA_PSS
370#if defined(HITLS_CRYPTO_RSA_SIGN) || defined(HITLS_CRYPTO_RSA_BSSA)
392int32_t CRYPT_RSA_SetPss(CRYPT_RSA_Ctx *ctx, const EAL_MdMethod *hashMethod, const EAL_MdMethod *mgfMethod,
393 uint32_t saltLen, const uint8_t *data, uint32_t dataLen, uint8_t *pad, uint32_t padLen);
394#endif // HITLS_CRYPTO_RSA_SIGN || HITLS_CRYPTO_RSA_BSSA
395
396#ifdef HITLS_CRYPTO_RSA_VERIFY
417int32_t CRYPT_RSA_VerifyPss(CRYPT_RSA_Ctx *ctx, const EAL_MdMethod *hashMethod, const EAL_MdMethod *mgfMethod,
418 uint32_t saltLen, const uint8_t *data, uint32_t dataLen, const uint8_t *pad, uint32_t padLen);
419#endif // HITLS_CRYPTO_RSA_VERIFY
420#endif // HITLS_CRYPTO_RSA_EMSA_PSS
421
422#ifdef HITLS_CRYPTO_RSA_EMSA_PKCSV15
440int32_t CRYPT_RSA_SetPkcsV15Type1(CRYPT_MD_AlgId hashId, const uint8_t *data, uint32_t dataLen,
441 uint8_t *pad, uint32_t padLen);
442
443#ifdef HITLS_CRYPTO_RSA_VERIFY
461int32_t CRYPT_RSA_VerifyPkcsV15Type1(CRYPT_MD_AlgId hashId, const uint8_t *pad, uint32_t padLen,
462 const uint8_t *data, uint32_t dataLen);
463#endif // HITLS_CRYPTO_RSA_VERIFY
464#endif // HITLS_CRYPTO_RSA_EMSA_PKCSV15
465
466#if defined(HITLS_CRYPTO_RSA_SIGN) || defined(HITLS_CRYPTO_RSA_VERIFY)
476uint32_t CRYPT_RSA_GetSignLen(const CRYPT_RSA_Ctx *ctx);
477#endif
478
479#ifdef HITLS_CRYPTO_RSA_VERIFY
480int32_t CRYPT_RSA_VerifyData(CRYPT_RSA_Ctx *ctx, const uint8_t *data, uint32_t dataLen,
481 const uint8_t *sign, uint32_t signLen);
482
483int32_t CRYPT_RSA_Verify(CRYPT_RSA_Ctx *ctx, int32_t algId, const uint8_t *data, uint32_t dataLen,
484 const uint8_t *sign, uint32_t signLen);
485#endif
486
487#ifdef HITLS_CRYPTO_RSA_SIGN
488int32_t CRYPT_RSA_SignData(CRYPT_RSA_Ctx *ctx, const uint8_t *data, uint32_t dataLen,
489 uint8_t *sign, uint32_t *signLen);
490
491int32_t CRYPT_RSA_Sign(CRYPT_RSA_Ctx *ctx, int32_t algId, const uint8_t *data, uint32_t dataLen,
492 uint8_t *sign, uint32_t *signLen);
493#endif
494
495#ifdef HITLS_CRYPTO_RSA_ENCRYPT
516int32_t CRYPT_RSA_Encrypt(CRYPT_RSA_Ctx *ctx, const uint8_t *data, uint32_t dataLen,
517 uint8_t *out, uint32_t *outLen);
518#endif
519
520#ifdef HITLS_CRYPTO_RSA_DECRYPT
541int32_t CRYPT_RSA_Decrypt(CRYPT_RSA_Ctx *ctx, const uint8_t *data, uint32_t dataLen,
542 uint8_t *out, uint32_t *outLen);
543#endif
544
545#ifdef HITLS_CRYPTO_RSA_RECOVER
566int32_t CRYPT_RSA_Recover(CRYPT_RSA_Ctx *ctx, const uint8_t *data, uint32_t dataLen, uint8_t *out, uint32_t *outLen);
567#else
568#define CRYPT_RSA_Recover NULL
569#endif
570
571#ifdef HITLS_CRYPTO_RSA_CMP
584int32_t CRYPT_RSA_Cmp(const CRYPT_RSA_Ctx *a, const CRYPT_RSA_Ctx *b);
585#else
586#define CRYPT_RSA_Cmp NULL
587#endif
588
589#ifdef HITLS_CRYPTO_RSAES_OAEP
590#ifdef HITLS_CRYPTO_RSA_ENCRYPT
610int32_t CRYPT_RSA_SetPkcs1Oaep(CRYPT_RSA_Ctx *ctx, const uint8_t *in, uint32_t inLen, uint8_t *pad, uint32_t padLen);
611#endif // HITLS_CRYPTO_RSA_ENCRYPT
612
613#ifdef HITLS_CRYPTO_RSA_DECRYPT
632int32_t CRYPT_RSA_VerifyPkcs1Oaep(RSA_PadingPara *pad, const uint8_t *in, uint32_t inLen, const uint8_t *param,
633 uint32_t paramLen, uint8_t *msg, uint32_t *msgLen);
634#endif // HITLS_CRYPTO_RSA_DECRYPT
635#endif // HITLS_CRYPTO_RSAES_OAEP
636
637#if defined(HITLS_CRYPTO_RSA_ENCRYPT) && \
638 (defined(HITLS_CRYPTO_RSAES_PKCSV15_TLS) || defined(HITLS_CRYPTO_RSAES_PKCSV15))
639int32_t CRYPT_RSA_SetPkcsV15Type2(void *libCtx, const uint8_t *in, uint32_t inLen,
640 uint8_t *out, uint32_t outLen);
641#endif
642
643#ifdef HITLS_CRYPTO_RSA_DECRYPT
644#ifdef HITLS_CRYPTO_RSAES_PKCSV15
645int32_t CRYPT_RSA_VerifyPkcsV15Type2(const uint8_t *in, uint32_t inLen, uint8_t *out, uint32_t *outLen);
646#endif
647
648#ifdef HITLS_CRYPTO_RSAES_PKCSV15_TLS
649int32_t CRYPT_RSA_VerifyPkcsV15Type2TLS(const uint8_t *in, uint32_t inLen, uint8_t *out, uint32_t *outLen);
650#endif
651#endif // HITLS_CRYPTO_RSA_DECRYPT
652
661int32_t CRYPT_RSA_GetSecBits(const CRYPT_RSA_Ctx *ctx);
662
663#ifdef HITLS_CRYPTO_RSA_CHECK
664
676int32_t CRYPT_RSA_Check(uint32_t checkType, const CRYPT_RSA_Ctx *pkey1, const CRYPT_RSA_Ctx *pkey2);
677
678#endif // HITLS_CRYPTO_RSA_CHECK
679
680#ifdef HITLS_CRYPTO_KEY_DECODE_CHAIN
688int32_t CRYPT_RSA_Import(CRYPT_RSA_Ctx *ctx, const BSL_Param *params);
689
697int32_t CRYPT_RSA_Export(const CRYPT_RSA_Ctx *ctx, BSL_Param *params);
698#endif // HITLS_CRYPTO_KEY_DECODE_CHAIN
699
700#ifdef __cplusplus
701}
702#endif
703
704#endif // HITLS_CRYPTO_RSA
705
706#endif // CRYPT_RSA_H
Parameter identifiers
CRYPT_MD_AlgId
定义 crypt_algid.h:68
定义 crypt_types.h:470
定义 crypt_types.h:131
定义 crypt_types.h:331
定义 crypt_local_types.h:63
定义 crypt_local_types.h:354