调整目录结构
This commit is contained in:
28
ref_c_java/zuc256_c/inc/type.h
Normal file
28
ref_c_java/zuc256_c/inc/type.h
Normal file
@@ -0,0 +1,28 @@
|
||||
#pragma once
|
||||
#ifndef __TYPE_H
|
||||
#define __TYPE_H
|
||||
|
||||
#include <stdint.h>
|
||||
/* IO definitions */
|
||||
#define __I volatile const /* defines 'read only' permissions */
|
||||
|
||||
#define __O volatile /* defines 'write only' permissions */
|
||||
#define __IO volatile /* defines 'read / write' permissions */
|
||||
|
||||
typedef uint8_t u8;
|
||||
typedef uint16_t u16;
|
||||
typedef uint32_t u32;
|
||||
typedef uint64_t u64;
|
||||
|
||||
typedef __IO uint64_t vu64;
|
||||
typedef __IO uint32_t vu32;
|
||||
typedef __IO uint16_t vu16;
|
||||
typedef __IO uint8_t vu8;
|
||||
|
||||
typedef __I uint64_t vuc64; /* Read Only */
|
||||
typedef __I uint32_t vuc32; /* Read Only */
|
||||
typedef __I uint16_t vuc16; /* Read Only */
|
||||
typedef __I uint8_t vuc8; /* Read Only */
|
||||
|
||||
|
||||
#endif /*__TYPE_H*/
|
||||
89
ref_c_java/zuc256_c/inc/zuc256.h
Normal file
89
ref_c_java/zuc256_c/inc/zuc256.h
Normal file
@@ -0,0 +1,89 @@
|
||||
/*
|
||||
* Copyright (C) 2025. Institute of Information Engineering, CAS
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* @file: zuc256.h
|
||||
* @brief: zuc256模块对外接口声明
|
||||
* @author: QZH <qinzhenghui@iie.ac.cn>
|
||||
* @version: 1.0.0
|
||||
* @date: 2025-09-01
|
||||
*
|
||||
* @attention: 接口使用注意事项
|
||||
*/
|
||||
#ifndef __ZUC256_H
|
||||
#define __ZUC256_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
// 类型定义
|
||||
typedef uint32_t ZUC_UINT31; // 31位无符号整数
|
||||
typedef uint8_t ZUC_UINT7; // 7位无符号整数
|
||||
typedef uint8_t ZUC_UINT6; // 6位无符号整数
|
||||
typedef uint32_t ZUC_UINT32; // 32位无符号整数
|
||||
// ZUC状态结构体
|
||||
typedef struct {
|
||||
ZUC_UINT31 LFSR[16]; // 线性反馈移位寄存器
|
||||
uint32_t R1; // 寄存器1
|
||||
uint32_t R2; // 寄存器2
|
||||
} ZUC_STATE;
|
||||
typedef ZUC_STATE ZUC256_STATE;
|
||||
// 加密上下文结构体(用于分阶段处理)
|
||||
typedef struct {
|
||||
ZUC_STATE state; // 基础ZUC状态
|
||||
uint8_t buf[4]; // 输入缓冲区(处理非4字节对齐数据)
|
||||
size_t buflen; // 缓冲区中有效字节数
|
||||
} ZUC256_ENCRYPT_CTX;
|
||||
// ZUC256 MAC 上下文结构体
|
||||
typedef struct {
|
||||
ZUC_UINT31 LFSR[16]; // ZUC256 线性反馈移位寄存器
|
||||
uint32_t R1; // 非线性函数寄存器R1
|
||||
uint32_t R2; // 非线性函数寄存器R2
|
||||
uint8_t buf[4]; // 数据缓存(处理不足4字节的待认证数据)
|
||||
size_t buflen; // 缓存中有效数据长度(0~3)
|
||||
uint32_t T[4]; // MAC 累加器(支持最大128位MAC,4个32位字)
|
||||
uint32_t K0[4]; // MAC 初始密钥字(与T长度匹配)
|
||||
int macbits; // MAC 输出位数(32/64/128,按32位对齐)
|
||||
} ZUC256_MAC_CTX;
|
||||
|
||||
// 初始化ZUC256状态
|
||||
void zuc256_init(ZUC_STATE *state, const uint8_t K[32], const uint8_t IV[23]);
|
||||
|
||||
// 生成单个密钥字
|
||||
uint32_t zuc256_generate_keyword(ZUC_STATE *state);
|
||||
|
||||
// 生成指定长度的密钥流
|
||||
void zuc256_generate_keystream(ZUC_STATE *state, size_t nwords, uint32_t *keystream);
|
||||
|
||||
// 初始化加密上下文
|
||||
void zuc256_encrypt_init(ZUC256_ENCRYPT_CTX *ctx, const uint8_t K[32], const uint8_t IV[23]);
|
||||
|
||||
// 分阶段处理加密数据(支持流式输入)
|
||||
void zuc256_encrypt_update(ZUC256_ENCRYPT_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out);
|
||||
|
||||
// 完成加密处理(处理剩余数据并清理上下文)
|
||||
void zuc256_encrypt_finish(ZUC256_ENCRYPT_CTX *ctx, uint8_t *out);
|
||||
|
||||
// 一次性加密函数
|
||||
void zuc256_crypt(ZUC_STATE *state, const uint8_t *in, size_t inlen, uint8_t *out);
|
||||
void extract_iv(const uint8_t *input_25byte, uint8_t *output_23byte);
|
||||
#endif /*__ZUC256_H */
|
||||
|
||||
Reference in New Issue
Block a user