123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- /**********************************************************************************
- *
- * Copyright (c) 2019-2020 Beijing AXera Technology Co., Ltd. All Rights Reserved.
- *
- * This source file is the property of Beijing AXera Technology Co., Ltd. and
- * may not be copied or distributed in any isomorphic form without the prior
- * written consent of Beijing AXera Technology Co., Ltd.
- *
- **********************************************************************************/
- #ifndef __AX_CIPHER_H__
- #define __AX_CIPHER_H__
- #ifdef __cplusplus
- #if __cplusplus
- extern "C" {
- #endif
- #endif /* __cplusplus */
- /** Cipher algorithm */
- typedef enum {
- AX_CIPHER_ALGO_HASH_SHA1 = 0, // SHA-1
- AX_CIPHER_ALGO_HASH_SHA224 = 1, // SHA-224
- AX_CIPHER_ALGO_HASH_SHA256 = 2, // SHA-256
- AX_CIPHER_ALGO_HASH_SHA384 = 3, // SHA-384
- AX_CIPHER_ALGO_HASH_SHA512 = 4, // SHA-512
- AX_CIPHER_ALGO_MAC_HMAC_SHA1 = 5, // HMAC-SHA-1
- AX_CIPHER_ALGO_MAC_HMAC_SHA224 = 6, // HMAC-SHA-224
- AX_CIPHER_ALGO_MAC_HMAC_SHA256 = 7, // HMAC-SHA-256
- AX_CIPHER_ALGO_MAC_HMAC_SHA384 = 8, // HMAC-SHA-384
- AX_CIPHER_ALGO_MAC_HMAC_SHA512 = 9, // HMAC-SHA-512
- AX_CIPHER_ALGO_MAC_AES_CMAC = 10, // AES-CMAC
- AX_CIPHER_ALGO_MAC_AES_CBC_MAC = 11, // AES-CBC-MAC
- AX_CIPHER_ALGO_CIPHER_AES = 12, // AES
- AX_CIPHER_ALGO_CIPHER_DES = 13, // DES
- AX_CIPHER_ALG_INVALID = 0xffffffff,
- } AX_CIPHER_ALGO_E;
- typedef enum {
- // (Block)Cipher modes
- AX_CIPHER_MODE_CIPHER_ECB = 0, // ECB
- AX_CIPHER_MODE_CIPHER_CBC, // CBC
- AX_CIPHER_MODE_CIPHER_CTR, // CTR
- AX_CIPHER_MODE_CIPHER_ICM, // ICM
- AX_CIPHER_MODE_CIPHER_F8, // F8
- AX_CIPHER_MODE_CIPHER_CCM, // CCM
- AX_CIPHER_MODE_CIPHER_XTS, // XTS
- AX_CIPHER_MODE_CIPHER_GCM, // GCM
- AX_CIPHER_MODE_CIPHER_MAX, // must be last
- } AX_CIPHER_MODE_E;
- typedef enum AX_CIPHER_RSA_SIGN_SCHEME_E {
- AX_CIPHER_RSA_SIGN_RSASSA_PKCS1_V15_SHA1 = 0x0,
- AX_CIPHER_RSA_SIGN_RSASSA_PKCS1_V15_SHA224,
- AX_CIPHER_RSA_SIGN_RSASSA_PKCS1_V15_SHA256,
- AX_CIPHER_RSA_SIGN_RSASSA_PKCS1_PSS_SHA1,
- AX_CIPHER_RSA_SIGN_RSASSA_PKCS1_PSS_SHA224,
- AX_CIPHER_RSA_SIGN_RSASSA_PKCS1_PSS_SHA256,
- AX_CIPHER_RSA_SIGN_SCHEME_INVALID = 0xffffffff,
- } AX_CIPHER_RSA_SIGN_SCHEME_E;
- typedef struct {
- AX_U8 *hmacKey;
- AX_U32 hmackeyLen;
- AX_CIPHER_ALGO_E hashType;
- } AX_CIPHER_HASH_CTL_S;
- typedef struct {
- AX_U32 hashBits;
- AX_U32 modulusBits;
- AX_U8 *modulusData;
- AX_U32 privateExponentBytes;
- AX_U8 *exponentData;
- AX_CIPHER_RSA_SIGN_SCHEME_E enScheme;
- } AX_CIPHER_RSA_PRIVATE_KEY;
- typedef struct {
- AX_U32 hashBits;
- AX_U32 modulusBits;
- AX_U8 *modulusData;
- AX_U32 publicExponentBytes;
- AX_U8 *exponentData;
- AX_CIPHER_RSA_SIGN_SCHEME_E enScheme;
- } AX_CIPHER_RSA_PUBLIC_KEY;
- typedef struct {
- AX_U8 *data;
- AX_U32 len; // Data size in bytes
- } AX_CIPHER_SIG_DATA_S;
- typedef enum {
- AX_CIPHER_RSA_ENC_SCHEME_NO_PADDING,
- AX_CIPHER_RSA_ENC_SCHEME_PKCS1_V1_5,
- AX_CIPHER_RSA_ENC_SCHEME_OAEP,
- } AX_CIPHER_RSA_ENC_SCHEME_E;
- typedef struct {
- AX_CIPHER_RSA_ENC_SCHEME_E enScheme;
- AX_CIPHER_RSA_PUBLIC_KEY pubKey;
- } AX_CIPHER_RSA_PUB_ENC_S;
- typedef struct {
- AX_CIPHER_RSA_ENC_SCHEME_E enScheme;
- AX_CIPHER_RSA_PRIVATE_KEY priKey;
- } AX_CIPHER_RSA_PRI_ENC_S;
- #ifndef AX_SUCCESS
- #define AX_SUCCESS 0
- #endif
- typedef enum {
- AX_ERR_CIPHER_ILLEGAL_PARAM = 0x8002000A, /** Invalid parameter */
- AX_ERR_CIPHER_ACCESS_ERROR = 0x80020080, /** Access error */
- AX_ERR_CIPHER_BUF_FULL = 0x80020021, /** Full/Overflow error */
- AX_ERR_CIPHER_INVALID_ALGORITHM = 0x80020081, /** Invalid algorithm code */
- AX_ERR_CIPHER_NOMEM = 0x80020018, /** No memory */
- AX_ERR_CIPHER_OPERATION = 0x80020082, /** Operation failed */
- AX_ERR_CIPHER_INTERNAL = 0x80020083, /** Internal error */
- AX_ERR_CIPHER_OPEN = 0x80020084, /** load dev error */
- } AX_CIPHER_STS;
- typedef AX_U64 AX_CIPHER_HANDLE;
- typedef struct {
- AX_CIPHER_ALGO_E alg; /**< Cipher algorithm */
- AX_CIPHER_MODE_E workMode; /**< Operating mode */
- AX_U8 *pKey; /**< Key input */
- AX_U32 keySize; /**< Key size */
- AX_U8 *pIV; /**< Initialization vector (IV) */
- } AX_CIPHER_CTRL_S;
- AX_S32 AX_CIPHER_Init(AX_VOID);
- AX_S32 AX_CIPHER_DeInit(AX_VOID);
- AX_S32 AX_CIPHER_CreateHandle(AX_CIPHER_HANDLE *phCipher, const AX_CIPHER_CTRL_S *pstCipherCtrl);
- AX_S32 AX_CIPHER_Encrypt(AX_CIPHER_HANDLE pCipher, AX_U8 *szSrcAddr, AX_U8 *szDestAddr, AX_U32 byteLength);
- AX_S32 AX_CIPHER_Decrypt(AX_CIPHER_HANDLE pCipher, AX_U8 *szSrcAddr, AX_U8 *szDestAddr, AX_U32 byteLength);
- AX_S32 AX_CIPHER_EncryptPhy(AX_CIPHER_HANDLE pCipher, AX_U64 szSrcAddr, AX_U64 szDestAddr, AX_U32 byteLength);
- AX_S32 AX_CIPHER_DecryptPhy(AX_CIPHER_HANDLE pCipher, AX_U64 szSrcAddr, AX_U64 szDestAddr, AX_U32 byteLength);
- AX_S32 AX_CIPHER_DestroyHandle(AX_CIPHER_HANDLE pCipher);
- AX_S32 AX_CIPHER_RsaVerify(AX_CIPHER_RSA_PUBLIC_KEY *key, AX_U8 *msg, AX_U32 msgBytes, AX_CIPHER_SIG_DATA_S *sig);
- AX_S32 AX_CIPHER_RsaSign(AX_CIPHER_RSA_PRIVATE_KEY *key, AX_U8 *msg, AX_U32 msgBytes, AX_CIPHER_SIG_DATA_S *sig);
- AX_S32 AX_CIPHER_HashInit(AX_CIPHER_HASH_CTL_S *pstHashCtl, AX_CIPHER_HANDLE *pHashHandle);
- AX_S32 AX_CIPHER_HashUpdate(AX_CIPHER_HANDLE handle, AX_U8 *inputData, AX_U32 inPutLen);
- AX_S32 AX_CIPHER_HashFinal(AX_CIPHER_HANDLE handle, AX_U8 *inputData, AX_U32 inPutLen, AX_U8 *outPutHash);
- AX_U32 AX_CIPHER_GetRandomNumber(AX_U32 *pRandomNumber, AX_U32 size);
- //
- #ifdef __cplusplus
- #if __cplusplus
- }
- #endif
- #endif /* __cplusplus */
- #endif /* __AX_CIPHER_H__ */
|