79 lines
2.1 KiB
C
79 lines
2.1 KiB
C
|
|
/************************************************************************
|
|||
|
|
* Copyright (CompanyNameMagicTag) CompanyNameMagicTag
|
|||
|
|
* ALL RIGHTS RESERVED
|
|||
|
|
* FileName: uart_auth.h
|
|||
|
|
* Description:
|
|||
|
|
*
|
|||
|
|
*************************************************************************/
|
|||
|
|
|
|||
|
|
#ifndef __UART_AUTH_H__
|
|||
|
|
#define __UART_AUTH_H__
|
|||
|
|
|
|||
|
|
#include <secure.h>
|
|||
|
|
|
|||
|
|
#define UART_PACKET_START_FLAG (0xDEADBEEF)
|
|||
|
|
|
|||
|
|
#define UART_PACKET_PAYLOAD_MAX (2048)
|
|||
|
|
#define UART_AUTH_CHALLANGE_LEN (48) /* 1536/8/4 = 48 */
|
|||
|
|
|
|||
|
|
#define RANDOM_BITS (1536)
|
|||
|
|
|
|||
|
|
#define CHANLLANGE_BITS (1024)
|
|||
|
|
#define CHANLLANGE_K_BITS_MIN (16)
|
|||
|
|
#define CHANLLANGE_K_BITS_MAX (CHANLLANGE_BITS)
|
|||
|
|
#define CHANLLANGE_MULTI (4)
|
|||
|
|
|
|||
|
|
enum {
|
|||
|
|
UART_AUTH_TYPE_RANDOM = 1,
|
|||
|
|
UART_AUTH_TYPE_CHALLANGE,
|
|||
|
|
UART_AUTH_TYPE_CTRL_B,
|
|||
|
|
UART_AUTH_TYPE_CTRL_C,
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
td_u32 start_flag; /**< Start ID: 0xDEADBEEF */
|
|||
|
|
td_u16 packet_size; /**< Packet length: indicates the actual length of transmitted data.
|
|||
|
|
The value cannot exceed 2048 bytes. */
|
|||
|
|
td_u16 check_sum; /**< Checksum */
|
|||
|
|
td_u16 type; /**< Packet Type */
|
|||
|
|
td_u16 pad;
|
|||
|
|
} PACKET_DATA_HEAD;
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
PACKET_DATA_HEAD head;
|
|||
|
|
td_u8 payload[UART_PACKET_PAYLOAD_MAX]; /**< Packet data */
|
|||
|
|
} PACKET_DATA_INFO;
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
td_u16 signature_len; /**< Signature length: RSA2048: 256 bytes */
|
|||
|
|
td_u16 pubkey_n_len; /**< Length of the public key N: RSA2048: 256 bytes */
|
|||
|
|
td_u16 pubkey_e_len; /**< Length of the public key E<><45>0x010001<30><31>The default value is 3 bytes */
|
|||
|
|
td_u8 padding_mode; /**< Padding mode<64><65>ext_rsa_padding_mode */
|
|||
|
|
td_u8 pad;
|
|||
|
|
} SIGN_PUBKEY_FRAME_HEAD_S;
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
td_u8 mod_n[RSA_2048_LENGTH];
|
|||
|
|
td_u8 exp_e[RSA_2048_LENGTH];
|
|||
|
|
} UART_AUTH_PUBKEY_S;
|
|||
|
|
|
|||
|
|
/* UART AUTH context */
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
td_u8 status;
|
|||
|
|
td_u8 pad;
|
|||
|
|
td_u16 received;
|
|||
|
|
td_u32 random[UART_AUTH_CHALLANGE_LEN];
|
|||
|
|
PACKET_DATA_INFO packet;
|
|||
|
|
UART_AUTH_PUBKEY_S pubkey;
|
|||
|
|
} UART_AUTH_CTX_S;
|
|||
|
|
|
|||
|
|
UART_AUTH_CTX_S *uart_auth_ctx(td_void);
|
|||
|
|
|
|||
|
|
#endif // __UART_AUTH_H__
|
|||
|
|
|