2022-01-24 03:28:16 +00:00
|
|
|
#ifndef LAIKA_PACKET_H
|
|
|
|
#define LAIKA_PACKET_H
|
|
|
|
|
2022-01-24 16:17:54 +00:00
|
|
|
#define LAIKA_MAGIC "LAI\x12"
|
|
|
|
#define LAIKA_MAGICLEN 4
|
|
|
|
|
2022-01-25 19:53:17 +00:00
|
|
|
#define LAIKA_MAX_PKTSIZE 4096
|
|
|
|
|
2022-02-03 22:25:49 +00:00
|
|
|
/* NONCE: randomly generated uint8_t[LAIKA_NONCESIZE] */
|
|
|
|
|
|
|
|
/* first handshake between peer & cnc works as so:
|
|
|
|
- peer connects to cnc and sends a LAIKAPKT_HANDSHAKE_REQ with the peer's pubkey
|
|
|
|
- after cnc receives LAIKAPKT_HANDSHAKE_REQ, all packets are encrypted
|
|
|
|
- cnc responds with LAIKAPKT_HANDSHAKE_RES
|
|
|
|
- if peer is an authenticated client (panel), LAIKAPKT_AUTHENTICATED_HANDSHAKE_REQ is then sent
|
|
|
|
*/
|
2022-01-28 01:55:28 +00:00
|
|
|
|
2022-01-25 03:46:29 +00:00
|
|
|
enum {
|
2022-01-24 03:28:16 +00:00
|
|
|
LAIKAPKT_HANDSHAKE_REQ,
|
2022-01-28 01:55:28 +00:00
|
|
|
/* layout of LAIKAPKT_HANDSHAKE_REQ:
|
|
|
|
* uint8_t laikaMagic[LAIKA_MAGICLEN];
|
|
|
|
* uint8_t majorVer;
|
|
|
|
* uint8_t minorVer;
|
2022-02-03 22:25:49 +00:00
|
|
|
* uint8_t pubKey[crypto_kx_PUBLICKEYBYTES]; -- freshly generated pubKey to encrypt decrypted nonce with
|
2022-01-28 01:55:28 +00:00
|
|
|
*/
|
2022-01-24 03:28:16 +00:00
|
|
|
LAIKAPKT_HANDSHAKE_RES,
|
2022-01-28 01:55:28 +00:00
|
|
|
/* layout of LAIKAPKT_HANDSHAKE_RES:
|
|
|
|
* uint8_t endian;
|
|
|
|
*/
|
2022-02-03 22:25:49 +00:00
|
|
|
//LAIKAPKT_AUTHENTICATED_HANDSHAKE_REQ,
|
|
|
|
/* layout of LAIKAPKT_STAGE2_HANDSHAKE_REQ
|
|
|
|
* uint8_t peerType;
|
|
|
|
*/
|
|
|
|
//LAIKAPKT_VARPKT_REQ,
|
2022-01-29 06:26:15 +00:00
|
|
|
/* layout of LAIKAPKT_VARPKT_REQ:
|
|
|
|
* uint8_t pktID;
|
|
|
|
* uint16_t pktSize;
|
|
|
|
*/
|
2022-01-24 03:28:16 +00:00
|
|
|
LAIKAPKT_MAXNONE
|
2022-01-25 03:46:29 +00:00
|
|
|
};
|
2022-01-24 03:28:16 +00:00
|
|
|
|
2022-01-25 19:53:17 +00:00
|
|
|
typedef uint8_t LAIKAPKT_ID;
|
|
|
|
typedef uint16_t LAIKAPKT_SIZE;
|
|
|
|
|
2022-01-24 03:28:16 +00:00
|
|
|
#endif
|