Extra Systems

CYPHERNET

procedimiento get_fingerprint_items


El procedimiento get_fingerprint_items se llama desde check_finger_print para extraer del objeto de huella digital recibido por el servidor central Cypher Net de Extra Systems de su suscriptor la información necesaria para seguir trabajando (ID de llamada client_id, ID de llamada server_id, tipo de conexión solicitada client_mode y longitud del prólogo prolog_size). Un prólogo es un mensaje que se envía de un suscriptor a otro en el procedimiento get_common_key para negociar una clave de sesión. El tamaño del prólogo es PACKED_VALUE_LENTH + HASH_SIZE, pero dado que se pueden usar diferentes algoritmos de hash en diferentes distribuciones, esta información se incluye en la huella digital para que el servidor sepa qué tamaño se le debe enviar este paquete de servicio (durante la ejecución del procedimiento 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];
}

El contenido de esta página también está disponible en inglés, francés, alemán, portugués, ucraniano y ruso.


© Extra Systems, 2024 Extra Web Top