# ZUC256
# ZUC256算法
# define ZUC256_KEY_SIZE 32
# define ZUC256_IV_SIZE 23
# define ZUC256_MAC32_SIZE 4
# define ZUC256_MAC64_SIZE 8
# define ZUC256_MAC128_SIZE 16
# define ZUC256_MIN_MAC_SIZE ZUC256_MAC32_SIZE
# define ZUC256_MAX_MAC_SIZE ZUC256_MAC128_SIZE
定义了ZUC256算法的密钥长度、初始向量长度、MAC长度等信息。
typedef ZUC_STATE ZUC256_STATE;
ZUC2565算法中使用的ZUC256_STATE
结构同ZUC_STATE
结构。
void zuc256_init(ZUC256_STATE *state, const uint8_t key[ZUC256_KEY_SIZE], const uint8_t iv[ZUC256_IV_SIZE]);
以256比特(以大小为32的字节数组表示)的初始密钥key
和184比特(以大小为23的字节数组表示)的初始向量iv
为输入,初始化ZUC256_STATE
结构state
。
#define zuc256_generate_keystream(state,nwords,words) zuc_generate_keystream(state,nwords,words)
#define zuc256_generate_keyword(state) zuc_generate_keyword(state)
参见“ZUC算法”部分的zuc_generate_keystream
和zuc_generate_keyword
函数。
# ZUC256 MAC
typedef struct ZUC256_MAC_CTX_st {
ZUC_UINT31 LFSR[16];
ZUC_UINT32 R1;
ZUC_UINT32 R2;
ZUC_UINT32 T[4];
ZUC_UINT32 K0[4];
uint8_t buf[4];
int buflen;
int macbits;
} ZUC256_MAC_CTX;
ZUC256_MAC_CTX
结构包含16个31比特的线性反馈移位寄存器寄存器变量LFSR
、非线性函数的2个32比特记忆单元变量R1
和R2
、32比特字变量数组T
和K0
、计数器字节数组buf
、整数buflen
和输出MAC长度macbits
。
void zuc256_mac_init(ZUC256_MAC_CTX *ctx, const uint8_t key[ZUC256_KEY_SIZE],
const uint8_t iv[ZUC256_IV_SIZE], int macbits);
以256比特(以大小为32的字节数组表示)的初始密钥key
和184比特(以大小为23的字节数组表示)的初始向量iv
为输入,初始化ZUC256_MAC_CTX
结构ctx
,需要同时给定输出最终的MAC长度macbits
。
void zuc256_mac_update(ZUC256_MAC_CTX *ctx, const uint8_t *data, size_t len);
用长度为len
的字节数组data
更新ZUC256_MAC_CTX
结构ctx
。
void zuc256_mac_finish(ZUC256_MAC_CTX *ctx, const uint8_t *data, size_t nbits, uint8_t *mac);
用长度为nbits
的字节数组data
更新ZUC256_MAC_CTX
结构ctx
,并输出使用ZUC完整性算法计算出的macbits
比特消息认证码(该参数需要在调用zuc256_mac_init
函数时先行提供),将其存放到数组mac
中。