TMC32_QJB/App/crypto.h
2026-04-30 16:23:12 +08:00

153 lines
3.9 KiB
C

/**
******************************************************************************
* @file crypto.h
* @author TMS Scan Team
* @version
* @date 2020-04-17
* @brief
******************************************************************************
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, TMC SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>&copy; COPYRIGHT 2020 TMS</center></h2>
******************************************************************************
**/
/********************************End of Head************************************/
#ifndef __CRYPTO_H_
#define __CRYPTO_H_
#include "global.h"
#define FLASH_SECTOR_SIZE 0x0200
// ÃÜÔ¿
#define KEY_STEP_LEN 0x400
#define KEY_BUF_LEN 0x3F7
#define KEY_CRC_LEN 0x3FE
#define PUBKEY_STATE 0x0F
#define PRIKEY_STATE 0xF0
#define STORE_STATE 0xFF
// SM2 KEY ´æ·Å½á¹¹
#define SM2_PUB_KEY_LEN 0x40
#define SM2_PRI_KEY_LEN 0x20
#define SM2_PAIR_KEY_LEN 0x60
#define SM2_PUB_KEY_OFF 0
#define SM2_PRI_KEY_OFF (SM2_PUB_KEY_OFF + SM2_PUB_KEY_LEN)
// RSA KEY ´æ·Å½á¹¹
#define RSA_E_KEY_LEN 0x3
#define RSA1024_KEY_LEN 0x80
#define RSA1024_NE_KEY_LEN 0x83
#define RSA1024_PAIR_KEY_LEN 0x103
#define RSA2048_KEY_LEN 0x100
#define RSA2048_NE_KEY_LEN 0x103
#define RSA2048_PAIR_KEY_LEN 0x203
#define RSA_PUB_KEY_OFF 0
#define RSA_PRI_KEY_OFF FLASH_SECTOR_SIZE-8 //CIPHER_KEY sizeof(u16+u16+u8+u8+u16)
typedef struct{
u8 keySize;
u8 keyMode;
} DES_KEY_STR;
typedef struct{
uint16_t keyCRC;
uint16_t keySN;
uint8_t keyType;
uint8_t keyID;
uint16_t keyLen;
uint8_t keyBuf[KEY_BUF_LEN];
uint8_t keyState;
} CIPHER_KEY;
typedef struct{
uint8_t P1;
uint8_t P2;
uint16_t keyLen;
uint8_t *keyData;
}CRYPTO_CMD;
//type definition
typedef enum
{
SM1_KEY_TYPE = 0,
SM2_PAIRKEY_TYPE,
SM2_PUBLICKEY_TYPE,
SM2_PRIVATEKEY_TYPE,
RSA_PAIRKEY_TYPE,
RSA_PUBLICKEY_TYPE,
RSA_PRIVATEKEY_TYPE,
SM4_KEY_TYPE,
SSF33_KEY_TYPE,
DES_KEY_TYPE,
AES_KEY_TYPE,
RSA_PUBLICKEY_E_TYPE,
}KEY_TYPE;
typedef struct{
u8 keyType;
u8 state;
u16 offset;
} KEY_STORE_STR;
#define DES_GROUP_LEN 0x08
#define SYM_GROUP_LEN 0x10
#define IV_LEN 0x20
#define HASH_LEN 0x20
#define RSA_KEY_REGION_LEN 0x400
#define IV_INIT 0x87
#define SM4_ENC_MODE 0x0A
#define SM4_DEC_MODE 0x05
#define AES_128_ENC_MODE 0xAA
#define AES_128_DEC_MODE 0xA5
#define AES_256_ENC_MODE 0x5A
#define AES_256_DEC_MODE 0x55
#define SSF33_ENC_MODE 0xAA
#define SSF33_DEC_MODE 0x00
#define SM1_ENC_MODE 0x01
#define SM1_DEC_MODE 0x00
#define DES_ENC_MODE 0x0A
#define DES_DEC_MODE 0x05
#define DES_1KEY_MODE 0xA0
#define DES_2KEY_MODE 0x50
#define DES_3KEY_MODE 0x30
#define ASYMM_ENC_MODE 0x00
#define ASYMM_DEC_MODE 0x01
#define ASYMM_SIGN_MODE 0x02
#define ASYMM_VERIFY_MODE 0x03
#define GENKEY_SM2_TYPE 0x01
#define GENKEY_RSA1024_TYPE 0x04
#define GENKEY_RSA2048_TYPE 0x05
#define ALG_OK ((uint16_t)0xAAAA)
void AppCryptoInit(void);
uint16_t encryptData(uint8_t *pInputData, uint8_t *pOutputData, uint16_t inLen);
void EncryptKeyInit(void);
uint16_t CRC_Calculate(uint8_t * inputData,uint16_t len);
uint8_t initKey(void);
#endif
/********************************End of File************************************/