/** ****************************************************************************** * @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. * *

© COPYRIGHT 2020 TMS

****************************************************************************** **/ /********************************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************************************/