forked from bartvdbraak/blender
33 lines
1.6 KiB
C
33 lines
1.6 KiB
C
/*
|
|
* Verse encryption routines. There are two distinct flavors of encryption
|
|
* in use: one "heavy" for login/connection establishment security, and
|
|
* a far lighter symmetrical one that is applied to each data packet after
|
|
* the key has been exchanged during connection.
|
|
*/
|
|
|
|
#include "verse.h"
|
|
|
|
/* Internal key size definitions. *MUST* be kept in sync with V_HOST_ID_SIZE in verse_header.h! */
|
|
#define V_ENCRYPTION_LOGIN_KEY_BITS 512
|
|
#define V_ENCRYPTION_LOGIN_KEY_SIZE (V_ENCRYPTION_LOGIN_KEY_BITS / 8)
|
|
#define V_ENCRYPTION_LOGIN_KEY_FULL_SIZE (3 * V_ENCRYPTION_LOGIN_KEY_SIZE)
|
|
#define V_ENCRYPTION_LOGIN_KEY_HALF_SIZE (2 * V_ENCRYPTION_LOGIN_KEY_SIZE)
|
|
|
|
#define V_ENCRYPTION_LOGIN_PUBLIC_START (0 * V_ENCRYPTION_LOGIN_KEY_SIZE)
|
|
#define V_ENCRYPTION_LOGIN_PRIVATE_START (1 * V_ENCRYPTION_LOGIN_KEY_SIZE)
|
|
#define V_ENCRYPTION_LOGIN_N_START (2 * V_ENCRYPTION_LOGIN_KEY_SIZE)
|
|
|
|
#define V_ENCRYPTION_DATA_KEY_SIZE (V_ENCRYPTION_LOGIN_KEY_BITS / 8)
|
|
|
|
/* Connection encryption. Heavy, and symmetrical, so encrypt() does both encryption
|
|
* and decryption given the proper key. Current algorithm used is RSA.
|
|
*/
|
|
extern void v_e_connect_create_key(uint8 *private_key, uint8 *public_key, uint8 *n);
|
|
extern void v_e_connect_encrypt(uint8 *output, const uint8 *data, const uint8 *key, const uint8 *key_n);
|
|
|
|
/* Actual data traffic encryption. Also symmetrical, with a single key. Uses XOR. */
|
|
extern const uint8 * v_e_data_create_key(void);
|
|
extern void v_e_data_encrypt_command(uint8 *packet, size_t packet_length,
|
|
const uint8 *command, size_t command_length, const uint8 *key);
|
|
extern void v_e_data_decrypt_packet(uint8 *to, const uint8 *from, size_t size, const uint8 *key);
|