GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)

This commit is contained in:
lai
2026-09-06 03:52:57 +08:00
commit b1928b41c0
21813 changed files with 4413081 additions and 0 deletions
@@ -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_USERAES逻辑实际使用的key
* 与配置的明文key相同;使用密文key时,ctrl->key_type需配置为XMEDIA_CIPHER_KEY_SRC_KLAD_XX为[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_USERAES逻辑实际使用的key
* 与配置的明文key相同;使用密文key时,ctrl->key_type需配置为XMEDIA_CIPHER_KEY_SRC_KLAD_XX为[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