16#ifndef CRYPT_MODES_GCM_H
17#define CRYPT_MODES_GCM_H
19#include "hitls_build.h"
20#ifdef HITLS_CRYPTO_GCM
22#include "crypt_types.h"
23#include "crypt_modes.h"
28#define GCM_MAX_COMBINED_LENGTH (((uint64_t)1 << 36) - 32)
29#define GCM_MAX_INVOCATIONS_TIMES ((uint32_t)(-1))
30#define GCM_BLOCK_MASK (0xfffffff0)
35#define GCM_BLOCKSIZE 16
37 uint8_t iv[GCM_BLOCKSIZE];
38 uint8_t ghash[GCM_BLOCKSIZE];
39 MODES_GCM_GF128 hTable[16];
44 uint8_t last[GCM_BLOCKSIZE];
45 uint8_t remCt[GCM_BLOCKSIZE];
46 uint8_t ek0[GCM_BLOCKSIZE];
47 uint64_t plaintextLen;
54 MODES_CipherGCMCtx gcmCtx;
58typedef struct ModesGcmCtx MODES_GCM_Ctx;
61MODES_GCM_Ctx *MODES_GCM_NewCtx(int32_t algId);
62MODES_GCM_Ctx *MODES_GCM_NewCtxEx(
void *libCtx, int32_t algId);
63int32_t MODES_GCM_InitCtx(MODES_GCM_Ctx *modeCtx,
const uint8_t *key, uint32_t keyLen,
const uint8_t *iv,
64 uint32_t ivLen,
bool enc);
66int32_t MODES_GCM_Update(MODES_GCM_Ctx *modeCtx,
const uint8_t *in, uint32_t inLen, uint8_t *out, uint32_t *outLen);
67int32_t MODES_GCM_Final(MODES_GCM_Ctx *modeCtx, uint8_t *out, uint32_t *outLen);
68int32_t MODES_GCM_DeInitCtx(MODES_GCM_Ctx *modeCtx);
69int32_t MODES_GCM_Ctrl(MODES_GCM_Ctx *modeCtx, int32_t cmd,
void *val, uint32_t len);
70void MODES_GCM_FreeCtx(MODES_GCM_Ctx *modeCtx);
73int32_t AES_GCM_Update(MODES_GCM_Ctx *modeCtx,
const uint8_t *in, uint32_t inLen, uint8_t *out, uint32_t *outLen);
76int32_t SM4_GCM_InitCtx(MODES_GCM_Ctx *modeCtx,
const uint8_t *key, uint32_t keyLen,
const uint8_t *iv,
77 uint32_t ivLen,
bool enc);
78int32_t SM4_GCM_Update(MODES_GCM_Ctx *modeCtx,
const uint8_t *in, uint32_t inLen, uint8_t *out, uint32_t *outLen);
80int32_t MODES_GCM_InitCtxEx(MODES_GCM_Ctx *modeCtx,
const uint8_t *key, uint32_t keyLen,
const uint8_t *iv,
81 uint32_t ivLen,
void *param,
bool enc);
83int32_t MODES_GCM_UpdateEx(MODES_GCM_Ctx *modeCtx,
const uint8_t *in, uint32_t inLen, uint8_t *out, uint32_t *outLen);
85int32_t MODES_GCM_InitHashTable(MODES_CipherGCMCtx *ctx);
86int32_t MODES_GCM_SetKey(MODES_CipherGCMCtx *ctx,
const uint8_t *key, uint32_t len);
87MODES_GCM_Ctx *MODES_GCM_DupCtx(
const MODES_GCM_Ctx *modeCtx);
定义 crypt_local_types.h:241