GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)
This commit is contained in:
@@ -0,0 +1,170 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_CIPHER_H__
|
||||
#define __XMEDIA_CIPHER_H__
|
||||
|
||||
#include "xmedia_type.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* Klad target. */
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_KLAD_TARGET_AES = 0x0, /* Klad for AES. */
|
||||
XMEDIA_CIPHER_KLAD_TARGET_RSA, /* Klad for RSA. */
|
||||
XMEDIA_CIPHER_KLAD_TARGET_BUTT,
|
||||
} cipher_klad_target;
|
||||
|
||||
/* Hash algrithm type. */
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_HASH_TYPE_SHA1,
|
||||
XMEDIA_CIPHER_HASH_TYPE_SHA224,
|
||||
XMEDIA_CIPHER_HASH_TYPE_SHA256,
|
||||
XMEDIA_CIPHER_HASH_TYPE_SHA384,
|
||||
XMEDIA_CIPHER_HASH_TYPE_SHA512,
|
||||
XMEDIA_CIPHER_HASH_TYPE_HMAC_SHA1,
|
||||
XMEDIA_CIPHER_HASH_TYPE_HMAC_SHA224,
|
||||
XMEDIA_CIPHER_HASH_TYPE_HMAC_SHA256,
|
||||
XMEDIA_CIPHER_HASH_TYPE_HMAC_SHA384,
|
||||
XMEDIA_CIPHER_HASH_TYPE_HMAC_SHA512,
|
||||
XMEDIA_CIPHER_HASH_TYPE_SM3,
|
||||
XMEDIA_CIPHER_HASH_TYPE_BUTT,
|
||||
XMEDIA_CIPHER_HASH_TYPE_INVALID = 0xffffffff,
|
||||
} cipher_hash_type;
|
||||
|
||||
/* Cipher algorithm. */
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_ALG_AES = 0x0, /* Advanced encryption standard (AES) algorithm */
|
||||
XMEDIA_CIPHER_ALG_SM1 = 0x1, /* SM1 algorithm. */
|
||||
XMEDIA_CIPHER_ALG_SM4 = 0x2, /* SM4 algorithm. */
|
||||
XMEDIA_CIPHER_ALG_DMA = 0x3, /* DMA copy. */
|
||||
XMEDIA_CIPHER_ALG_BUTT = 0x4,
|
||||
XMEDIA_CIPHER_ALG_INVALID = 0xffffffff,
|
||||
} cipher_alg;
|
||||
|
||||
/* Cipher bit width. */
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_BIT_WIDTH_128BIT = 0x0, /* 128-bit width */
|
||||
XMEDIA_CIPHER_BIT_WIDTH_64BIT = 0x1, /* 64-bit width */
|
||||
XMEDIA_CIPHER_BIT_WIDTH_8BIT = 0x2, /* 8-bit width */
|
||||
XMEDIA_CIPHER_BIT_WIDTH_1BIT = 0x3, /* 1-bit width */
|
||||
XMEDIA_CIPHER_BIT_WIDTH_BUTT = 0x4,
|
||||
XMEDIA_CIPHER_BIT_WIDTH_INVALID = 0xffffffff,
|
||||
} cipher_bit_width;
|
||||
|
||||
/* enum typedef */
|
||||
/* Cipher work mode. */
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_WORK_MODE_ECB = 0x0, /* Electronic codebook (ECB) mode, ECB has been considered insecure and it is
|
||||
recommended not to use it. */
|
||||
XMEDIA_CIPHER_WORK_MODE_CBC, /* Cipher block chaining (CBC) mode. */
|
||||
XMEDIA_CIPHER_WORK_MODE_CFB, /* Cipher feedback (CFB) mode. */
|
||||
XMEDIA_CIPHER_WORK_MODE_OFB, /* Output feedback (OFB) mode. */
|
||||
XMEDIA_CIPHER_WORK_MODE_CTR, /* Counter (CTR) mode. */
|
||||
XMEDIA_CIPHER_WORK_MODE_BUTT,
|
||||
XMEDIA_CIPHER_WORK_MODE_INVALID = 0xffffffff,
|
||||
} cipher_work_mode;
|
||||
|
||||
/* Key length. */
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_KEY_DEFAULT = 0x0, /* Default key length, AES-16, SM1-48, SM4-16 */
|
||||
XMEDIA_CIPHER_KEY_AES_128BIT = 0x0, /* 128-bit key for the AES algorithm */
|
||||
XMEDIA_CIPHER_KEY_AES_192BIT = 0x1, /* 192-bit key for the AES algorithm */
|
||||
XMEDIA_CIPHER_KEY_AES_256BIT = 0x2, /* 256-bit key for the AES algorithm */
|
||||
XMEDIA_CIPHER_KEY_LEN_BUTT = 0x3,
|
||||
XMEDIA_CIPHER_KEY_INVALID = 0xffffffff,
|
||||
} cipher_key_len;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_KEY_SRC_USER = 0x0, /* plain key */
|
||||
XMEDIA_CIPHER_KEY_SRC_KLAD_0, /* aes key0 */
|
||||
XMEDIA_CIPHER_KEY_SRC_KLAD_1, /* aes key1 */
|
||||
XMEDIA_CIPHER_KEY_SRC_KLAD_2, /* aes key2 */
|
||||
XMEDIA_CIPHER_KEY_SRC_KLAD_3, /* aes key3 */
|
||||
XMEDIA_CIPHER_KEY_SRC_BUTT,
|
||||
} xmedia_cipher_key_type;
|
||||
|
||||
/* Structure of the cipher control information */
|
||||
typedef struct {
|
||||
xmedia_u32 key[8]; /* Key input */
|
||||
xmedia_u32 iv[4]; /* Initialization vector (IV) */
|
||||
xmedia_cipher_key_type key_type;
|
||||
cipher_work_mode work_mode;
|
||||
} cipher_ctrl;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_CIPHER_RSA_SIGN_SCHEME_RSASSA_PKCS1_V15_SHA256 = 0x0, /* PKCS#1 RSASSA_PKCS1_V15_SHA256 */
|
||||
XMEDIA_CIPHER_RSA_SIGN_SCHEME_RSASSA_PKCS1_PSS_SHA256, /* PKCS#1 RSASSA_PKCS1_PSS_SHA256 */
|
||||
XMEDIA_CIPHER_RSA_SIGN_SCHEME_BUTT,
|
||||
} xmedia_cipher_rsa_sign_scheme;
|
||||
|
||||
/* RSA public key struct */
|
||||
typedef struct {
|
||||
xmedia_u8 *n; /* Point to public modulus N */
|
||||
xmedia_u8 *e; /* Point to public exponent E */
|
||||
xmedia_u16 n_len; /* Length of public modulus N, max value is 512Byte */
|
||||
xmedia_u16 e_len; /* Length of public exponent E, max value is 512Byte */
|
||||
} cipher_rsa_pub_key;
|
||||
|
||||
/* RSA signature verify struct input */
|
||||
typedef struct {
|
||||
xmedia_cipher_rsa_sign_scheme scheme;
|
||||
cipher_rsa_pub_key pub_key; /* RSA public key struct */
|
||||
} cipher_rsa_verify;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 *hash_data; /* Hash of data. */
|
||||
xmedia_u32 hash_data_len; /* Length of hash data. */
|
||||
xmedia_u8 *sign; /* Input sign data. */
|
||||
xmedia_u32 sign_len; /* Length of input sign data. */
|
||||
} cipher_verify_data;
|
||||
|
||||
xmedia_s32 xmedia_cipher_deinit(xmedia_void);
|
||||
/*
|
||||
* 函数说明:AES256加密接口
|
||||
*
|
||||
* 1、支持aes加密算法,支持ECB、CBC、CFB、OFB、CTR模式,key长度只支持256bits
|
||||
* 2、支持明文key与密文key,使用明文key时,ctrl->key_type需配置为XMEDIA_CIPHER_KEY_SRC_USER,AES逻辑实际使用的key
|
||||
* 与配置的明文key相同;使用密文key时,ctrl->key_type需配置为XMEDIA_CIPHER_KEY_SRC_KLAD_X(X为[0,3],依次对应OTP中的AES KEY0~3),
|
||||
* cipher模块首先调用KLAD模块使用OTP中的AES KEY对输入的密文key进行AES256 ECB解密,然后AES逻辑使用解密后的明文key对输入数据进行加密
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_aes256_encrypt(cipher_ctrl *ctrl, xmedia_size_t src_phy_addr, xmedia_size_t dest_phy_addr, xmedia_u32 byte_len);
|
||||
|
||||
/*
|
||||
* 函数说明:AES256解密接口
|
||||
*
|
||||
* 1、支持aes解密算法,支持ECB、CBC、CFB、OFB、CTR模式,key长度只支持256bits
|
||||
* 2、支持明文key与密文key,使用明文key时,ctrl->key_type需配置为XMEDIA_CIPHER_KEY_SRC_USER,AES逻辑实际使用的key
|
||||
* 与配置的明文key相同;使用密文key时,ctrl->key_type需配置为XMEDIA_CIPHER_KEY_SRC_KLAD_X(X为[0,3],依次对应OTP中的AES KEY0~3),
|
||||
* cipher模块首先调用KLAD模块使用OTP中的AES KEY对输入的密文key进行AES256 ECB解密,然后AES逻辑使用解密后的明文key对输入数据进行解密
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_aes256_decrypt(cipher_ctrl *ctrl, xmedia_size_t src_phy_addr, xmedia_size_t dest_phy_addr, xmedia_u32 byte_len);
|
||||
|
||||
xmedia_s32 xmedia_cipher_sha256_init(xmedia_void);
|
||||
xmedia_s32 xmedia_cipher_sha256_update(xmedia_u8 *input_data, xmedia_u32 input_data_len);
|
||||
xmedia_s32 xmedia_cipher_sha256_final(xmedia_u8 *output_hash);
|
||||
xmedia_s32 xmedia_cipher_rsa_deinit(xmedia_void);
|
||||
/*
|
||||
* 函数说明:RSA验签接口
|
||||
*
|
||||
* 1、RSA验签运算支持两种key长度,分别是2048bits、4096bits,通过输入参数中的公钥参数rsa_verify->pub_key进行指定
|
||||
* 2、支持两种验签标准,分别是PKCS#1 RSASSA_PKCS1_PSS_SHA256与PKCS#1 RSASSA_PKCS1_V15_SHA256,通过输入参数rsa_verify->schme进行指定
|
||||
*
|
||||
* 注:根据支持的验签标准,传入的数据hash值必须采用SHA256算法,可调用xmedia_cipher_sha256_xxx系列接口进行hash运算
|
||||
*/
|
||||
xmedia_s32 xmedia_cipher_rsa_verify(const cipher_rsa_verify *rsa_verify, cipher_verify_data *verify_data);
|
||||
xmedia_void xmedia_cipher_klad_deinit(xmedia_void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __XMEDIA_CIPHER_H__ */
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XMEDIA_TYPE_H__
|
||||
#define __XMEDIA_TYPE_H__
|
||||
|
||||
typedef unsigned char xmedia_uchar;
|
||||
typedef unsigned char xmedia_u8;
|
||||
typedef unsigned short xmedia_u16;
|
||||
typedef unsigned int xmedia_u32;
|
||||
typedef unsigned long long xmedia_u64;
|
||||
typedef unsigned long xmedia_ulong;
|
||||
|
||||
typedef char xmedia_char;
|
||||
typedef signed char xmedia_s8;
|
||||
typedef short xmedia_s16;
|
||||
typedef int xmedia_s32;
|
||||
typedef long long xmedia_s64;
|
||||
typedef long xmedia_slong;
|
||||
|
||||
typedef float xmedia_float;
|
||||
typedef double xmedia_double;
|
||||
|
||||
typedef void xmedia_void;
|
||||
|
||||
typedef xmedia_u32 xmedia_handle;
|
||||
|
||||
typedef xmedia_ulong xmedia_uintptr_t;
|
||||
typedef xmedia_slong xmedia_intptr_t;
|
||||
|
||||
typedef unsigned long xmedia_size_t;
|
||||
typedef unsigned long xmedia_length_t;
|
||||
|
||||
/* DMA addresses are 32-bits wide */
|
||||
typedef unsigned long phys_addr_t;
|
||||
typedef unsigned long phys_size_t;
|
||||
|
||||
typedef enum {
|
||||
XMEDIA_FALSE = 0,
|
||||
XMEDIA_TRUE = 1,
|
||||
} xmedia_bool;
|
||||
|
||||
#define XMEDIA_NULL 0L
|
||||
|
||||
#define XMEDIA_SUCCESS 0
|
||||
#define XMEDIA_FAILURE (-1)
|
||||
|
||||
#define XMEDIA_INVALID_HANDLE (0xffffffff)
|
||||
|
||||
#define XMEDIA_UNUSED(x) ((x) = (x))
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user