19#include "hitls_build.h"
20#ifdef HITLS_CRYPTO_MODES
24#include "crypt_local_types.h"
25#include "crypt_modes_xts.h"
26#include "crypt_modes_cbc.h"
28#include "crypt_modes_ccm.h"
29#include "crypt_modes_cfb.h"
30#include "crypt_modes_chacha20poly1305.h"
31#include "crypt_modes_ctr.h"
32#include "crypt_modes_ecb.h"
33#include "crypt_modes_gcm.h"
34#include "crypt_modes_ofb.h"
35#include "crypt_modes.h"
36#include "eal_cipher_local.h"
43#define UPDATE_VALUES(l, i, o, len) \
50int32_t MODES_CipherInitCommonCtx(MODES_CipherCommonCtx *modeCtx,
void *setSymKey,
void *keyCtx,
51 const uint8_t *key, uint32_t keyLen,
const uint8_t *iv, uint32_t ivLen);
52int32_t MODES_CipherInitCtx(MODES_CipherCtx *ctx,
void *setSymKey,
void *keyCtx,
const uint8_t *key,
53 uint32_t keyLen,
const uint8_t *iv, uint32_t ivLen,
bool enc);
56int32_t MODES_CipherUpdate(MODES_CipherCtx *modeCtx,
void *blockUpdate,
const uint8_t *in, uint32_t inLen,
57 uint8_t *out, uint32_t *outLen);
59int32_t MODES_BlockPadding(int32_t algId, int32_t padding, uint8_t blockSize, uint8_t *data, uint8_t *dataLen);
60int32_t MODES_BlockUnPadding(int32_t padding,
const uint8_t *pad, uint32_t padLen, uint32_t *dataLen);
62int32_t MODES_CipherFinal(MODES_CipherCtx *modeCtx,
void *blockUpdate, uint8_t *out, uint32_t *outLen);
64int32_t MODES_CipherDeInitCtx(MODES_CipherCtx *modeCtx);
66void MODES_CipherFreeCtx(MODES_CipherCtx *modeCtx);
68int32_t MODES_CipherCtrl(MODES_CipherCtx *ctx, int32_t opt,
void *val, uint32_t len);
71int32_t MODES_CipherStreamProcess(
void *processFuncs,
void *ctx,
const uint8_t *in, uint32_t inLen,
72 uint8_t *out, uint32_t *outLen);
74static inline void MODE_IncCounter(uint8_t *counter, uint32_t counterLen)
76 uint32_t i = counterLen;
82 counter[i] = carry & (0xFFu);
87int32_t MODES_SetEncryptKey(MODES_CipherCommonCtx *ctx,
const uint8_t *key, uint32_t len);
88int32_t MODES_SetDecryptKey(MODES_CipherCommonCtx *ctx,
const uint8_t *key, uint32_t len);
89int32_t MODES_SetPaddingCheck(int32_t pad);
91#ifdef HITLS_CRYPTO_SM4
93int32_t MODES_SM4_SetEncryptKey(MODES_CipherCommonCtx *ctx,
const uint8_t *key, uint32_t len);
95int32_t MODES_SM4_SetDecryptKey(MODES_CipherCommonCtx *ctx,
const uint8_t *key, uint32_t len);
99#ifdef HITLS_CRYPTO_CFB
100int32_t MODES_CFB_Encrypt(MODES_CipherCFBCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
102int32_t MODES_CFB_Decrypt(MODES_CipherCFBCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
106#ifdef HITLS_CRYPTO_CTR
107uint32_t MODES_CTR_LastHandle(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
109void MODES_CTR_RemHandle(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
113#ifdef HITLS_CRYPTO_GCM
114void GcmTableGen4bit(uint8_t key[GCM_BLOCKSIZE], MODES_GCM_GF128 hTable[16]);
116void GcmHashMultiBlock(uint8_t t[GCM_BLOCKSIZE],
const MODES_GCM_GF128 hTable[16],
const uint8_t *in, uint32_t inLen);
118uint32_t MODES_GCM_LastHandle(MODES_CipherGCMCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len,
bool enc);
120int32_t MODES_GCM_SetIv(MODES_CipherGCMCtx *ctx,
const uint8_t *iv, uint32_t ivLen);
121int32_t CryptLenCheckAndRefresh(MODES_CipherGCMCtx *ctx, uint32_t len);
125#ifdef HITLS_CRYPTO_XTS
126int32_t MODES_XTS_CheckPara(
const uint8_t *key, uint32_t len,
const uint8_t *iv);
127int32_t MODES_XTS_SetIv(MODES_CipherXTSCtx *ctx,
const uint8_t *val, uint32_t len);
129int32_t MODES_XTS_SetEncryptKey(MODES_CipherXTSCtx *ctx,
const uint8_t *key, uint32_t len);
130int32_t MODES_XTS_SetDecryptKey(MODES_CipherXTSCtx *ctx,
const uint8_t *key, uint32_t len);
134#ifdef HITLS_CRYPTO_CBC
135int32_t AES_CBC_EncryptBlock(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
136int32_t AES_CBC_DecryptBlock(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
137int32_t MODES_CBC_Encrypt(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
138int32_t MODES_CBC_Decrypt(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
139int32_t MODE_SM4_CBC_Encrypt(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
140int32_t MODE_SM4_CBC_Decrypt(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
142#ifdef HITLS_CRYPTO_CCM
143int32_t MODES_CCM_Encrypt(MODES_CipherCCMCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
144int32_t MODES_CCM_Decrypt(MODES_CipherCCMCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
145int32_t MODES_AES_CCM_Encrypt(MODES_CipherCCMCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
146int32_t MODES_AES_CCM_Decrypt(MODES_CipherCCMCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
148#ifdef HITLS_CRYPTO_CFB
149int32_t MODES_CFB_BitCrypt(MODES_CipherCFBCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len,
bool enc);
150int32_t MODE_AES_CFB_Decrypt(MODES_CipherCFBCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
151int32_t MODE_SM4_CFB_Encrypt(MODES_CipherCFBCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
152int32_t MODE_SM4_CFB_Decrypt(MODES_CipherCFBCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
154#if defined(HITLS_CRYPTO_CHACHA20) && defined(HITLS_CRYPTO_CHACHA20POLY1305)
155int32_t MODES_CHACHA20POLY1305_Encrypt(MODES_CipherChaChaPolyCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
156int32_t MODES_CHACHA20POLY1305_Decrypt(MODES_CipherChaChaPolyCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
157int32_t MODES_CHACHA20POLY1305_SetEncryptKey(MODES_CipherChaChaPolyCtx *ctx,
const uint8_t *key, uint32_t len);
158int32_t MODES_CHACHA20POLY1305_SetDecryptKey(MODES_CipherChaChaPolyCtx *ctx,
const uint8_t *key, uint32_t len);
160#ifdef HITLS_CRYPTO_CTR
161int32_t MODES_CTR_Crypt(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
162int32_t AES_CTR_EncryptBlock(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
163int32_t MODE_SM4_CTR_Encrypt(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
165#ifdef HITLS_CRYPTO_ECB
166int32_t MODES_ECB_Encrypt(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
167int32_t MODES_ECB_Decrypt(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
168int32_t AES_ECB_EncryptBlock(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
169int32_t AES_ECB_DecryptBlock(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
170int32_t MODE_SM4_ECB_Encrypt(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
171int32_t MODE_SM4_ECB_Decrypt(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
173#ifdef HITLS_CRYPTO_GCM
174int32_t MODES_GCM_Encrypt(MODES_CipherGCMCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
175int32_t MODES_GCM_Decrypt(MODES_CipherGCMCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
176int32_t AES_GCM_EncryptBlock(MODES_CipherGCMCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
177int32_t AES_GCM_DecryptBlock(MODES_CipherGCMCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
178int32_t MODES_SM4_GCM_DecryptBlock(MODES_CipherGCMCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
180#ifdef HITLS_CRYPTO_OFB
181int32_t MODES_OFB_Crypt(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
182int32_t MODE_SM4_OFB_Encrypt(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
183int32_t MODE_SM4_OFB_Decrypt(MODES_CipherCommonCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
185#ifdef HITLS_CRYPTO_XTS
186int32_t MODES_XTS_Encrypt(MODES_CipherXTSCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
187int32_t MODES_XTS_Decrypt(MODES_CipherXTSCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
188int32_t MODES_AES_XTS_Encrypt(MODES_CipherXTSCtx *xtsCtx,
const uint8_t *in, uint8_t *out, uint32_t len);
189int32_t MODES_AES_XTS_Decrypt(MODES_CipherXTSCtx *xtsCtx,
const uint8_t *in, uint8_t *out, uint32_t len);
190int32_t MODES_SM4_XTS_Encrypt(MODES_CipherXTSCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
191int32_t MODES_SM4_XTS_Decrypt(MODES_CipherXTSCtx *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);