# 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_keystreamzuc_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比特记忆单元变量R1R2、32比特字变量数组TK0、计数器字节数组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中。