blender/extern/verse/dist/v_encryption.h

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);