La procédure get_fingerprint_items est appelée depuis check_finger_print afin d'extraire de l'objet d'empreinte digitale reçu par le serveur central Extra Systems Cypher Net de son abonné les informations nécessaires à la poursuite du travail (ID de l'appelant client_id, ID de l'appelé server_id, type de connexion demandée client_mode et longueur du prologue prolog_size). Un prologue est un message envoyé d'un abonné à un autre dans la procédure get_common_key afin de négocier une clé de session. La taille du prologue est PACKED_VALUE_LENTH + HASH_SIZE, mais comme différents algorithmes de hachage peuvent être utilisés dans différentes distributions, cette information est incluse dans l'empreinte digitale afin que le serveur sache quelle taille ce paquet de service doit lui être envoyé (lors de l'exécution du procédure 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]; }
Le contenu de cette page est également disponible en anglais, allemand, ukrainien et en russe.
© Extra Systems, 2024 |