Extra Systems

CYPHERNET

консольная система надежной коммерческой шифросвязи через сеть интернет

процедура get_fingerprint_items


Процедура get_fingerprint_items вызывается из check_finger_print с целью извлечения из полученного сервером от абонента объекта fingerprint необходимой для дальнейшей работы информации (идентификатор вызывающего абонента client_id, идентификатор вызываемого абонента server_id, тип запрашиваемого соединения client_mode и длина пролога prolog_size). Прологом называется сообщение, которое посылается от одного абонента другому в процедуре get_common_key с целью согласования сеансового ключа. Размер пролога равен PACKED_VALUE_LENTH + HASH_SIZE, но поскольку в различных поставках могут использоваться различные алгоритмы хэширования, то эта информация включается в fingerprint для того, чтобы сервер знал, какого размера этот служебный пакет ему надлежит переслать (в ходе исполнения процедуры connect_server).

#define FINGERPRINT_CLIENT_MODE_BYTE	2

typedef struct finger_print
{
	unsigned char mixed_item[ITEM_SIZE * 2 * 3];
	unsigned char mixed_hash[HARD_HASH_SIZE];
} FINGERPRINT;

void get_fingerprint_items(PEERID *client_id, PEERID *server_id, char *client_mode, int *prolog_size, FINGERPRINT * fingerprint) {
	int i,j;
	unsigned char *client;
	unsigned char *server;
	unsigned char *prolog;
	client = (unsigned char *) client_id;
	server = (unsigned char *) server_id;
	prolog = (unsigned char *) prolog_size;
	*client_mode = fingerprint->mixed_item[FINGERPRINT_CLIENT_MODE_BYTE];
	for (i = 0; i < ITEM_SIZE; i++) client[i] = fingerprint->mixed_item[i * 2 + 1];
	for (j = 0; j < ITEM_SIZE; i++, j++) server[j] = fingerprint->mixed_item[i * 2 + 1];
	for (j = 0; j < ITEM_SIZE; i++, j++) prolog[j] = fingerprint->mixed_item[i * 2 + 1];
}

© Extra Systems, 2024 Extra Web Top