Extra Systems

CYPHERNET

процедура get_fingerprint_items


Процедура get_fingerprint_items викликається з check_finger_print з метою вилучення з отриманого центральним сервером Extra Systems Cypher Net від свого абонента об'єкта 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