La procedura get_fingerprint_items viene chiamata da check_finger_print per estrarre dall'oggetto impronta digitale ricevuto dal server centrale Extra Systems Cypher Net dal suo abbonato le informazioni necessarie per ulteriori lavori (ID chiamante client_id, ID chiamato server_id, tipo di connessione richiesta client_mode e lunghezza del prologo prolog_dimensione). Un prologo è un messaggio che viene inviato da un abbonato a un altro nella procedura get_common_key per negoziare una chiave di sessione. La dimensione del prologo è PACKED_VALUE_LENTH + HASH_SIZE, ma poiché diversi algoritmi di hashing possono essere utilizzati in diverse distribuzioni, questa informazione è inclusa nell'impronta digitale in modo che il server sappia quale dimensione questo pacchetto di servizi gli deve essere inviato (durante l'esecuzione del procedura 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];
}
Il contenuto di questa pagina è disponibile anche in inglese, francese, tedesco, portoghese, spagnolo, ucraino e russo.
| © Extra Systems, 2024 |
|