After identifying subscribers N and M via fingerprint, the Extra Systems Cypher Net central server simply sends information between them without any interference in this process. The server does not have any private or even public keys of the subscribers. The negotiation of session keys thus occurs exclusively between the subscribers themselves, without any interference or participation of our central server.
The central server processes client requests in multi-threaded mode using the following algorithm:
typedef struct thread_data { int thread_id;Description of the mechanism for processing client requests by the central server of the Extra Systems encryption system. int thread_socket; PEERID client_id; PEERID server_id; int server_thread; char *buffer_to_send; int buf_size; int prolog_size; unsigned char client_mode; } THREADDATA; THREADDATA thread_pool[THREAD_POOL_SIZE]; void dispatch_call(THREADDATA *thread_item) { char str_buf[STR_BUF_SIZE]; int buf_size, my_socket; my_socket = thread_item->thread_socket; if (check_finger_print(thread_item)) { if (connect_server(thread_item)) { if (thread_item->client_mode == CLIENT_MODE_OUTPUT) { while (buf_size = socket_read_buffer(my_socket, str_buf, STR_BUF_SIZE)) { while (thread_pool[thread_item->server_thread].buffer_to_send) es_sleep(100); thread_pool[thread_item->server_thread].buf_size = buf_size; thread_pool[thread_item->server_thread].buffer_to_send = str_buf; } } if (thread_item->client_mode == CLIENT_MODE_INPUT) { while (1) { while (!thread_item->buffer_to_send) es_sleep(100); buf_size = thread_item->buf_size; if (socket_send_buffer(my_socket, thread_item->buffer_to_send, buf_size) != buf_size) break; thread_item->buffer_to_send = NULL; } } } } close_socket(my_socket); thread_item->thread_id = 0; }
The content of this page is also available in French, German, Ukrainian and Russian.
© Extra Systems, 2024 |