📄 beeo_core.h
字号:
#ifndef _BEEO_CORE_H_
#define _BEEO_CORE_H_
#include "beeo_Define.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifndef PASCAL
#define PASCAL
#endif
/*定义密钥交换报文。
对于长整形数据,需要转换成网络字节顺序。*/
typedef struct tagBeeoDHPackage
{
uIn32 dwVersion; //版本号,现在使用0x01010000
uIn32 nPeerSeq; //已经收到的对方的报文序号,用于判断是否成功交换
uIn32 nLocalSeq; //最新发送的交换报文序号,决定是否为新的请求,要求!=0
uIn32 dwFlag; //报文标志,=BEEO_DH_FLAG
uChar dh[4][BEEO_DH_BYTES]; //DH特征值,前三个分别对应于Col、Row、Xor的DH特征值
uIn32 dwOffset[4];//前三个分别对应于Col、Row、Xor的位偏移量的DH特征值,取低16bits
uChar reserve[128]; //保留位,暂时全部=0
uChar cSum1,cSum2,cSum3,cSum4;//校验和
} BEEO_DH_PACKAGE;
/*
定义加密通道
*/
typedef struct tagBeeoChannel
{
uChar bEstablished; //表明加密信道已经建立
uChar bLocalRefreshed; //表明本地的SEQ已经时最新的SEQ,避免一直不断地协商密钥
uIn16 nPort; //对方的端口
uIn32 dwIP; //对方的IP地址
SOCKET sock; //一个SOCKET规定了一个唯一的本地IP地址和UDP端口
uChar mCol[BEEO_MATRIX_BYTES];
uChar mRow[BEEO_MATRIX_BYTES];
uChar mXor[BEEO_MATRIX_BYTES];
uIn32 dwRand[8];
BEEO_DH_PACKAGE pkLocal;
BEEO_DH_PACKAGE pkPeer;
SOCKADDR addrPeer;
uIn32 dwLastAccessTicks;
void* backupSendto;
} BEEO_CHANNEL;
#define PEEO_MAX_KEY_BYTES 200
typedef struct tagBeeoProcessor
{
uChar bInitialized;
uChar bBufferPacket;
uIn16 nKeyLength;
uIn32 dwFlag;
uIn32 dwVersion;
uChar key[PEEO_MAX_KEY_BYTES];
uChar tmp[512];
uIn32 dwRand[8];
short nRandPos;
uChar bBusy;
uChar xx;
uIn32 dhID;
uIn32 nNextSeq;
void* sl;
} BEEO_PROCESSOR;
int PASCAL beeo_BackupSendto(SOCKET s, char *buf, bsType len, bsType flag, SOCKADDR *addr, bsType adlen);
int PASCAL beeo_Encode(SOCKET s, char *buf, char* bufOut, bsType len, SOCKADDR *addr, bsType adlen, int channel);
int PASCAL beeo_Decode(SOCKET s, char *buf, char* bufOut, bsType len, SOCKADDR *addr, bsType adlen );
void PASCAL beeo_GetMatrix(SOCKET s, SOCKADDR *addr, bsType adlen );
int PASCAL beeo_SendDHPackage(BEEO_CHANNEL* channel);
int PASCAL beeo_GenerateMatrix(BEEO_CHANNEL* channel);
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -