153 lines
3.9 KiB
C
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>© 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************************************/
|