556 lines
21 KiB
C
556 lines
21 KiB
C
/*
|
|
* Copyright (c) XMEDIA. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __XMEDIA_CIPHER_H__
|
|
#define __XMEDIA_CIPHER_H__
|
|
|
|
#include "xmedia_type.h"
|
|
#include "xmedia_errcode.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define CIPHER_IV_CHANGE_ONE_PKG (1)
|
|
#define CIPHER_IV_CHANGE_ALL_PKG (2)
|
|
|
|
typedef enum {
|
|
XMEDIA_CIPHER_WORK_MODE_ECB,
|
|
XMEDIA_CIPHER_WORK_MODE_CBC,
|
|
XMEDIA_CIPHER_WORK_MODE_CFB,
|
|
XMEDIA_CIPHER_WORK_MODE_OFB,
|
|
XMEDIA_CIPHER_WORK_MODE_CTR,
|
|
XMEDIA_CIPHER_WORK_MODE_MAX,
|
|
} xmedia_cipher_work_mode;
|
|
|
|
typedef enum {
|
|
XMEDIA_CIPHER_ALG_AES = 0x0,
|
|
XMEDIA_CIPHER_ALG_DMA = 0x1,
|
|
XMEDIA_CIPHER_ALG_MAX = 0x2,
|
|
} xmedia_cipher_alg;
|
|
|
|
typedef enum {
|
|
XMEDIA_CIPHER_KEY_AES_128BIT = 0x0,
|
|
XMEDIA_CIPHER_KEY_AES_192BIT = 0x1,
|
|
XMEDIA_CIPHER_KEY_AES_256BIT = 0x2,
|
|
XMEDIA_CIPHER_KEY_AES_MAX = 0x3,
|
|
} xmedia_cipher_key_length;
|
|
|
|
typedef enum {
|
|
XMEDIA_CIPHER_BIT_WIDTH_8BIT = 0x0,
|
|
XMEDIA_CIPHER_BIT_WIDTH_1BIT = 0x1,
|
|
XMEDIA_CIPHER_BIT_WIDTH_128BIT = 0x2,
|
|
XMEDIA_CIPHER_BIT_WIDTH_MAX = 0X3,
|
|
} xmedia_cipher_bit_width;
|
|
|
|
typedef enum {
|
|
XMEDIA_CIPHER_KEY_SRC_USER = 0x0,
|
|
XMEDIA_CIPHER_KEY_SRC_KLAD_1,
|
|
XMEDIA_CIPHER_KEY_SRC_KLAD_2,
|
|
XMEDIA_CIPHER_KEY_SRC_KLAD_3,
|
|
XMEDIA_CIPHER_KEY_SRC_MAX,
|
|
} xmedia_cipher_ca_type;
|
|
|
|
typedef enum {
|
|
XMEDIA_CIPHER_KLAD_TARGET_AES = 0x0,
|
|
XMEDIA_CIPHER_KLAD_TARGET_RSA,
|
|
XMEDIA_CIPHER_KLAD_TARGET_MAX,
|
|
} xmedia_cipher_klad_target;
|
|
|
|
typedef struct {
|
|
xmedia_u32 key[8];
|
|
xmedia_u32 iv[4];
|
|
xmedia_u32 iv_usage;
|
|
xmedia_cipher_bit_width bit_width;
|
|
xmedia_cipher_key_length key_len;
|
|
} xmedia_cipher_ctrl_aes;
|
|
|
|
typedef struct {
|
|
xmedia_cipher_alg alg;
|
|
xmedia_cipher_work_mode mode;
|
|
xmedia_bool key_by_ca;
|
|
xmedia_cipher_ca_type ca_type;
|
|
xmedia_cipher_ctrl_aes aes_ctrl;
|
|
} xmedia_cipher_ctrl;
|
|
|
|
typedef struct {
|
|
xmedia_ulong src_phy_addr;
|
|
xmedia_ulong dest_phy_addr;
|
|
xmedia_u32 byte_length;
|
|
} xmedia_cipher_package;
|
|
|
|
typedef struct {
|
|
xmedia_u8 *data;
|
|
xmedia_u32 data_len;
|
|
} xmedia_cipher_data;
|
|
|
|
typedef enum {
|
|
XMEDIA_CIPHER_HASH_TYPE_SHA1,
|
|
XMEDIA_CIPHER_HASH_TYPE_SHA224,
|
|
XMEDIA_CIPHER_HASH_TYPE_SHA256,
|
|
XMEDIA_CIPHER_HASH_TYPE_HMAC_SHA1,
|
|
XMEDIA_CIPHER_HASH_TYPE_HMAC_SHA224,
|
|
XMEDIA_CIPHER_HASH_TYPE_HMAC_SHA256,
|
|
XMEDIA_CIPHER_HASH_TYPE_MAX,
|
|
} xmedia_cipher_hash_type;
|
|
|
|
typedef struct {
|
|
xmedia_u8 *hmac_key;
|
|
xmedia_u32 hmac_key_len;
|
|
xmedia_cipher_hash_type type;
|
|
} xmedia_cipher_hash_attr;
|
|
|
|
typedef enum {
|
|
XMEDIA_CIPHER_RSA_ENC_SCHEME_NO_PADDING,
|
|
XMEDIA_CIPHER_RSA_ENC_SCHEME_BLOCK_TYPE_0,
|
|
XMEDIA_CIPHER_RSA_ENC_SCHEME_BLOCK_TYPE_1,
|
|
XMEDIA_CIPHER_RSA_ENC_SCHEME_BLOCK_TYPE_2,
|
|
XMEDIA_CIPHER_RSA_ENC_SCHEME_RSAES_OAEP_SHA1,
|
|
XMEDIA_CIPHER_RSA_ENC_SCHEME_RSAES_OAEP_SHA224,
|
|
XMEDIA_CIPHER_RSA_ENC_SCHEME_RSAES_OAEP_SHA256,
|
|
XMEDIA_CIPHER_RSA_ENC_SCHEME_RSAES_PKCS1_V1_5,
|
|
XMEDIA_CIPHER_RSA_ENC_SCHEME_MAX,
|
|
} xmedia_cipher_rsa_enc_scheme;
|
|
|
|
typedef enum {
|
|
XMEDIA_CIPHER_RSA_SIGN_SCHEME_RSASSA_PKCS1_V15_SHA1 = 0x100,
|
|
XMEDIA_CIPHER_RSA_SIGN_SCHEME_RSASSA_PKCS1_V15_SHA224,
|
|
XMEDIA_CIPHER_RSA_SIGN_SCHEME_RSASSA_PKCS1_V15_SHA256,
|
|
XMEDIA_CIPHER_RSA_SIGN_SCHEME_RSASSA_PKCS1_PSS_SHA1,
|
|
XMEDIA_CIPHER_RSA_SIGN_SCHEME_RSASSA_PKCS1_PSS_SHA224,
|
|
XMEDIA_CIPHER_RSA_SIGN_SCHEME_RSASSA_PKCS1_PSS_SHA256,
|
|
XMEDIA_CIPHER_RSA_SIGN_SCHEME_MAX,
|
|
} xmedia_cipher_rsa_sign_scheme;
|
|
|
|
typedef struct {
|
|
xmedia_u8 *n;
|
|
xmedia_u8 *e;
|
|
xmedia_u16 n_len;
|
|
xmedia_u16 e_len;
|
|
} xmedia_cipher_rsa_pub_key;
|
|
|
|
typedef struct {
|
|
xmedia_u8 *n;
|
|
xmedia_u8 *e;
|
|
xmedia_u8 *d;
|
|
xmedia_u8 *p;
|
|
xmedia_u8 *q;
|
|
xmedia_u8 *dp;
|
|
xmedia_u8 *dq;
|
|
xmedia_u8 *qp;
|
|
xmedia_u16 n_len;
|
|
xmedia_u16 e_len;
|
|
xmedia_u16 d_len;
|
|
xmedia_u16 p_len;
|
|
xmedia_u16 q_len;
|
|
xmedia_u16 dp_len;
|
|
xmedia_u16 dq_len;
|
|
xmedia_u16 qp_len;
|
|
} xmedia_cipher_rsa_pri_key;
|
|
|
|
typedef struct {
|
|
xmedia_cipher_rsa_enc_scheme scheme;
|
|
xmedia_cipher_rsa_pub_key pub_key;
|
|
} xmedia_cipher_rsa_pub_enc;
|
|
|
|
typedef struct {
|
|
xmedia_cipher_rsa_enc_scheme scheme;
|
|
xmedia_cipher_rsa_pri_key pri_key;
|
|
xmedia_cipher_ca_type ca_type;
|
|
} xmedia_cipher_rsa_pri_enc;
|
|
|
|
typedef struct {
|
|
xmedia_cipher_rsa_sign_scheme scheme;
|
|
xmedia_cipher_rsa_pri_key pri_key;
|
|
xmedia_cipher_ca_type ca_type;
|
|
} xmedia_cipher_rsa_sign_attr;
|
|
|
|
typedef struct {
|
|
xmedia_cipher_rsa_sign_scheme scheme;
|
|
xmedia_cipher_rsa_pub_key pub_key;
|
|
} xmedia_cipher_rsa_verify_attr;
|
|
|
|
|
|
/*
|
|
* 函数功能:cipher模块初始化
|
|
* 函数参数:
|
|
* 无
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_NOT_PERMITTED - 超过接口允许的调用次数
|
|
* XMEDIA_ERRCODE_OPEN_FAILED - 打开设备节点文件失败
|
|
*/
|
|
xmedia_s32 xmedia_cipher_init(xmedia_void);
|
|
|
|
/*
|
|
* 函数功能:cipher模块去初始化
|
|
* 函数参数:
|
|
* 无
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_CLOSE_FAILED - 关闭设备节点文件失败
|
|
*/
|
|
xmedia_s32 xmedia_cipher_exit(xmedia_void);
|
|
|
|
/*
|
|
* 函数功能:创建一路Cipher句柄
|
|
* 函数参数:
|
|
* handle - 输出参数,cipher句柄指针
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* XMEDIA_ERRCODE_BUSY - 通道已申请完,无可用通道
|
|
* XMEDIA_ERRCODE_NOT_READY - 通道输入节点地址不可配置
|
|
* 注意:
|
|
* 1. handle不能为空
|
|
* 2. cipher句柄将用于数据AES加解密时的输入
|
|
* 3. 最大支持2路cipher
|
|
* 4. 使用完通道后,应销毁对应的通道
|
|
*/
|
|
xmedia_s32 xmedia_cipher_create_handle(xmedia_handle *handle);
|
|
|
|
/*
|
|
* 函数功能:销毁一路cipher
|
|
* 函数参数:
|
|
* handle - 输入参数,cipher句柄
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
|
* 注意:
|
|
* 创建与销毁通道成对使用
|
|
*/
|
|
xmedia_s32 xmedia_cipher_destroy_handle(xmedia_handle handle);
|
|
|
|
/*
|
|
* 函数功能:配置cipher控制信息。详细配置请参见结构体xmedia_cipher_ctrl
|
|
* 函数参数:
|
|
* handle - 输入参数,cipher句柄
|
|
* ctrl - 输入参数,cipher控制信息指针
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* XMEDIA_ERRCODE_BUSY - OTP控制器忙/KLAD忙
|
|
* XMEDIA_FAILURE - OTP控制器操作未完成
|
|
* 注意:
|
|
* cipher控制信息指针不能为空
|
|
*/
|
|
xmedia_s32 xmedia_cipher_config_handle(xmedia_handle handle, const xmedia_cipher_ctrl *ctrl);
|
|
|
|
/*
|
|
* 函数功能:获取cipher通道对应的配置信息
|
|
* 函数参数:
|
|
* handle - 输入参数,cipher句柄
|
|
* ctrl - 输出参数,cipher通道的配置信息
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
*/
|
|
xmedia_s32 xmedia_cipher_get_handle_config(xmedia_handle handle, xmedia_cipher_ctrl *ctrl);
|
|
|
|
/*
|
|
* 函数功能:对数据进行加密
|
|
* 函数参数:
|
|
* handle - 输入参数,cipher句柄
|
|
* src_phy_addr - 输入参数,待加密的数据的物理地址
|
|
* dest_phy_addr - 输入参数,存放加密结果的物理地址
|
|
* length - 输入参数,数据的长度(单位:字节)
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* 注意:
|
|
* 1. cipher句柄必须已创建
|
|
* 2. 可多次调用
|
|
* 3. 模式为CTR时数据的长度为任意长度,其他模式要求与block size对齐
|
|
*/
|
|
xmedia_s32 xmedia_cipher_encrypt(xmedia_handle handle, xmedia_ulong src_phy_addr,
|
|
xmedia_ulong dest_phy_addr, xmedia_u32 length);
|
|
|
|
/*
|
|
* 函数功能:对数据进行解密
|
|
* 函数参数:
|
|
* handle - 输入参数,cipher句柄
|
|
* src_phy_addr - 输入参数,待解密的数据的物理地址
|
|
* dest_phy_addr - 输入参数,存放解密结果的物理地址
|
|
* length - 输入参数,数据的长度(单位:字节)
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* 注意:
|
|
* 1. cipher句柄必须已创建
|
|
* 2. 可多次调用
|
|
* 3. 模式为CTR时数据的长度为任意长度,其他模式要求与block size对齐
|
|
*/
|
|
xmedia_s32 xmedia_cipher_decrypt(xmedia_handle handle, xmedia_ulong src_phy_addr,
|
|
xmedia_ulong dest_phy_addr, xmedia_u32 length);
|
|
|
|
/*
|
|
* 函数功能:对数据进行加密
|
|
* 函数参数:
|
|
* handle - 输入参数,cipher句柄
|
|
* src_data - 输入参数,待加密的数据的虚拟地址
|
|
* dest_data - 输出参数,存放加密结果的虚拟地址
|
|
* length - 输入参数,数据的长度(单位:字节)
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* 注意:
|
|
* 1. cipher句柄必须已创建
|
|
* 2. 可多次调用
|
|
* 3. 模式为CTR时数据的长度为任意长度,其他模式要求与block size对齐
|
|
*/
|
|
xmedia_s32 xmedia_cipher_encrypt_vir(xmedia_handle handle, const xmedia_u8 *src_data,
|
|
xmedia_u8 *dest_data, xmedia_u32 length);
|
|
|
|
/*
|
|
* 函数功能:对数据进行解密
|
|
* 函数参数:
|
|
* handle - 输入参数,cipher句柄
|
|
* src_data - 输入参数,待解密的数据的虚拟地址
|
|
* dest_data - 输出参数,存放解密结果的虚拟地址
|
|
* length - 输入参数,数据的长度(单位:字节)
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* 注意:
|
|
* 1. cipher句柄必须已创建
|
|
* 2. 可多次调用
|
|
* 3. 模式为CTR时数据的长度为任意长度,其他模式要求与block size对齐
|
|
*/
|
|
xmedia_s32 xmedia_cipher_decrypt_vir(xmedia_handle handle, const xmedia_u8 *src_data,
|
|
xmedia_u8 *dest_data, xmedia_u32 length);
|
|
|
|
/*
|
|
* 函数功能:进行多个包数据的加密
|
|
* 函数参数:
|
|
* handle - 输入参数,cipher句柄
|
|
* pkg - 输入参数,待加密的数据包
|
|
* num - 输入参数,待加密的数据包个数
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
|
* 注意:
|
|
* 1. cipher句柄必须已创建
|
|
* 2. 可多次调用
|
|
* 3. 每次加密的数据包个数最多不超过128个
|
|
* 4. 对于多个包的操作,每个包都使用xmedia_cipher_config_handle配置的IV进行运算。
|
|
* IV作用域是可配置的,前一个包的向量运算结果可以作为下一个包的IV,
|
|
* 或者每个包IV都是独立运算的(前一次函数调用的结果不会影响后一次函数调用的运算结果)
|
|
*/
|
|
xmedia_s32 xmedia_cipher_encrypt_multi(xmedia_handle handle, const xmedia_cipher_package *pkg,
|
|
xmedia_u32 num);
|
|
|
|
/*
|
|
* 函数功能:进行多个包数据的解密
|
|
* 函数参数:
|
|
* handle - 输入参数,cipher句柄
|
|
* pkg - 输入参数,待解密的数据包
|
|
* num - 输入参数,待解密的数据包个数
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_INVALID_HANDLE - 输入句柄无效
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
|
* 注意:
|
|
* 1. cipher句柄必须已创建
|
|
* 2. 可多次调用
|
|
* 3. 每次加密的数据包个数最多不超过128个
|
|
* 4. 对于多个包的操作,每个包都使用xmedia_cipher_config_handle配置的IV进行运算。
|
|
* IV作用域是可配置的,前一个包的向量运算结果可以作为下一个包的IV,
|
|
* 或者每个包IV都是独立运算的(前一次函数调用的结果不会影响后一次函数调用的运算结果)
|
|
*/
|
|
xmedia_s32 xmedia_cipher_decrypt_multi(xmedia_handle handle, const xmedia_cipher_package *pkg,
|
|
xmedia_u32 num);
|
|
|
|
/*
|
|
* 函数功能:使用KLAD对透明密钥进行加密
|
|
* 函数参数:
|
|
* type - 输入参数,KLAD根密钥选择,只能选择EFUSE Key
|
|
* target - 输入参数,使用该密钥的模块
|
|
* clean_key - 输入参数,透明密钥
|
|
* ecnrypt_key - 输出参数,加密密钥
|
|
* key_len - 输入参数,密钥的长度,必须是16整数倍
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* XMEDIA_ERRCODE_BUSY - OTP控制器忙/KLAD忙
|
|
* XMEDIA_FAILURE - OTP控制器操作未完成
|
|
* 注意:
|
|
* 1. 默认使用AES256 ECB
|
|
* 2. target为XMEDIA_CIPHER_KLAD_TARGET_RSA时,会对输入数据每16B进行大小端转换,然后对转换后的数据进行加密
|
|
*/
|
|
xmedia_s32 xmedia_cipher_klad_encrypt_key(xmedia_cipher_ca_type type,
|
|
xmedia_cipher_klad_target target, const xmedia_u8 *clean_key,
|
|
xmedia_u8 *encrypt_key, xmedia_u32 key_len);
|
|
|
|
/*
|
|
* 函数功能:生成随机数
|
|
* 函数参数:
|
|
* number - 输出参数,输出的随机数
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* XMEDIA_ERRCODE_TIMEOUT - 获取随机数超时
|
|
* XMEDIA_FAILURE - 随机数无效
|
|
*/
|
|
xmedia_s32 xmedia_cipher_get_random_number(xmedia_u32 *number);
|
|
|
|
/*
|
|
* 函数功能:初始化HASH模块
|
|
* 函数参数:
|
|
* attr - 输入参数,用于计算hash的结构体参数
|
|
* handle - 输出参数,输出的hash句柄
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
|
* XMEDIA_ERRCODE_BUSY - 所有通道忙,无法申请通道
|
|
* 注意:
|
|
* 如果有其他程序正在使用HASH模块,返回失败状态
|
|
*/
|
|
xmedia_s32 xmedia_cipher_hash_init(const xmedia_cipher_hash_attr *attr, xmedia_handle *handle);
|
|
|
|
/*
|
|
* 函数功能:计算hash值
|
|
* 函数参数:
|
|
* handle - 输入参数,hash句柄
|
|
* input - 输入参数,输入数据缓冲
|
|
* in_len - 输入参数,输入数据的长度,单位:byte
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* XMEDIA_INVALID_HANDLE - hash句柄无效
|
|
* 注意:
|
|
* 1. Hash句柄必须已经创建
|
|
* 2. 可以分多次调用,每次计算若干字节数据
|
|
*/
|
|
xmedia_s32 xmedia_cipher_hash_update(xmedia_handle handle, const xmedia_u8 *input, xmedia_u32 in_len);
|
|
|
|
/*
|
|
* 函数功能:获取hash值
|
|
* 函数参数:
|
|
* handle - 输入参数,hash句柄
|
|
* output_hash - 输出参数,输出的hash值
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* XMEDIA_INVALID_HANDLE - hash句柄无效
|
|
*/
|
|
xmedia_s32 xmedia_cipher_hash_final(xmedia_handle handle, xmedia_u8 *output);
|
|
|
|
/*
|
|
* 函数功能:使用RSA公钥加密一段明文
|
|
* 函数参数:
|
|
* rsa_enc - 输入参数,公钥加密属性结构体
|
|
* input - 输入参数,待加密的数据及其长度
|
|
* output - 输出参数,加密结果数据及其长度
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
|
* XMEDIA_FAILURE - 加密失败
|
|
*/
|
|
xmedia_s32 xmedia_cipher_rsa_public_encrypt(const xmedia_cipher_rsa_pub_enc *rsa_enc,
|
|
xmedia_cipher_data *input,
|
|
xmedia_cipher_data *output);
|
|
|
|
/*
|
|
* 函数功能:使用RSA私钥解密一段密文
|
|
* 函数参数:
|
|
* rsa_dec - 输入参数,私钥解密属性结构体
|
|
* input - 输入参数,待解密的数据及其长度
|
|
* output - 输出参数,解密结果数据及其长度
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
|
* XMEDIA_FAILURE - 解密失败
|
|
*/
|
|
xmedia_s32 xmedia_cipher_rsa_private_decrypt(const xmedia_cipher_rsa_pri_enc *rsa_dec,
|
|
xmedia_cipher_data *input,
|
|
xmedia_cipher_data *output);
|
|
|
|
/*
|
|
* 函数功能:使用RSA私钥加密一段明文
|
|
* 函数参数:
|
|
* rsa_enc - 输入参数,私钥加密属性结构体
|
|
* input - 输入参数,待加密的数据及其长度
|
|
* output - 输出参数,加密结果数据及其长度
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
|
* XMEDIA_FAILURE - 加密失败
|
|
*/
|
|
xmedia_s32 xmedia_cipher_rsa_private_encrypt(const xmedia_cipher_rsa_pri_enc *rsa_enc,
|
|
xmedia_cipher_data *input,
|
|
xmedia_cipher_data *output);
|
|
|
|
/*
|
|
* 函数功能:使用RSA公钥解密一段密文
|
|
* 函数参数:
|
|
* rsa_dec - 输入参数,公钥解密属性结构体
|
|
* input - 输入参数,待解密的数据及其长度
|
|
* output - 输出参数,解密结果数据及其长度
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
|
* XMEDIA_FAILURE - 解密失败
|
|
*/
|
|
xmedia_s32 xmedia_cipher_rsa_public_decrypt(const xmedia_cipher_rsa_pub_enc *rsa_dec,
|
|
xmedia_cipher_data *input,
|
|
xmedia_cipher_data *output);
|
|
|
|
/*
|
|
* 函数功能:使用RSA私钥签名一段文本
|
|
* 函数参数:
|
|
* rsa_sign_attr - 输入参数,签名属性结构体
|
|
* data - 输入参数,包括待签名的数据及其长度, 如果hash_data不为空,
|
|
* 则使用hash_data进行签名,该参数将被忽略
|
|
* hash_data - 输入参数,待签名文本的HASH摘要,如果为空,则自动计算输入数据的HASH摘要进行签名
|
|
* sign - 输出参数,包括签名结果数据及其长度
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
|
* XMEDIA_FAILURE - 签名失败
|
|
*/
|
|
xmedia_s32 xmedia_cipher_rsa_sign(const xmedia_cipher_rsa_sign_attr *rsa_sign_attr,
|
|
xmedia_cipher_data *data,
|
|
const xmedia_u8 *hash_data, xmedia_cipher_data *sign);
|
|
|
|
/*
|
|
* 函数功能:使用RSA公钥验证签名
|
|
* 函数参数:
|
|
* rsa_verify_attr - 输入参数,签名验证属性结构体
|
|
* data - 输入参数,包括待验证的数据及其长度, 如果hash_data不为空,
|
|
* 则使用hash_data进行验证,该参数将被忽略
|
|
* hash_data - 输入参数,待验证文本的HASH摘要,如果为空,则自动计算数据的HASH摘要进行验证
|
|
* sign - 输入参数,包括待验证的签名数据及其长度
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数错误
|
|
* XMEDIA_ERRCODE_NOT_ENOUGH_MEMORY - 申请内存失败
|
|
* XMEDIA_FAILURE - 验签失败
|
|
*/
|
|
xmedia_s32 xmedia_cipher_rsa_verify(const xmedia_cipher_rsa_verify_attr *rsa_verify_attr,
|
|
xmedia_cipher_data *data,
|
|
const xmedia_u8 *hash_data, xmedia_cipher_data *sign);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|