PDA

Visualizza la versione completa : [C++] Come si usa libgcrypt per firma RSA e SHA1


Camlr
06-03-2007, 11:54
Ciao a tutti,
ho un problema, il quale consiste nel non saper usare la libreria "libgcrypt" all'interno di un mio programma, nel quale dovrei firmare parte di una struttura con RSA e fare hash con SHA1 di un campo della stessa struttura.
Come si fa? Qualcuno sa darmi qualche esempio su come si usa questa libreria?

Cercherò di essere il più chiaro possibile, ma se qualcosa nn è chiara domandate pure.
La libreria che attualmene ho installato che che vorrei usare è: libgcrypt-1.2.3.tar.gz

Il pezzo di codice dove riempio la struttura è la seguente.


// Fill up some more fields.
rq->rq_type = AODVTYPE_RREQ;
rq->rq_hop_count = 1;
rq->rq_bcast_id = bid++;
rq->rq_dst = dst;
rq->rq_dst_seqno = (rt ? rt->rt_seqno : 0);
rq->rq_src = index;
seqno += 2;
assert ((seqno%2) == 0);
rq->rq_src_seqno = seqno;
rq->rq_timestamp = CURRENT_TIME;

//Fill up the fields of RREQ Extension
rq->rq_ex_type = 64;
rq->rq_max_hop_count = ih->ttl_;
rq->rq_top_hash = //valore hash di un seme applicando ih->ttl_ volte H(seme)
rq->rq_public_key = //Chiave pubblica
rq->rq_signature = //firma di tutti dei campi
rq->rq_hash = //seme (un numero random di 160bit)


Il problema è:
rq->rq_public_key
rq->rq_signature
rq->rq_top_hash
rq->rq_hash
che tipo devo dichiararli dentro alla mia struttura? e come li genero all'interno della mia programma usando la libreria sopra citata?

Giusto per cercare di essere più precisi la libreria libgcrypt mette a disposizione l'interfaccia per richimare le funzioni che servono a me, l'interfaccia è: "gcrypt.h"
le funzioni sono:
per la firma e la verifica

/* Sign the DATA using the private key SKEY and store the result as a newly created S-expression at RESULT. */
gcry_error_t gcry_pk_sign (gcry_sexp_t *result, gcry_sexp_t data, gcry_sexp_t skey);

/* Check the signature SIGVAL on DATA using the public key PKEY. */
gcry_error_t gcry_pk_verify (gcry_sexp_t sigval, gcry_sexp_t data, gcry_sexp_t pkey);

per la funzione hash: bho, nn sono nemmeno riuscito a capire quala funzione del file gcrypt.h serva per fare hash.

Spero di essere stato chiaro e di aver dato tutto l'occorrente per risolvere il mio problema.
Se avete bisogno dei sorgenti completi ditemelo che o ve li passo via email o provo ad upparli su qualche shared host.
Potete anche contattarmi via msn su camlr@libero.it
Spero di risolvere il problema grazie al vostro aiuto.

Camlr
06-03-2007, 12:14
Ragazzi per la disperazione mi sono dimenticato di inserire il tag [C++] nel titolo del post e quindi di dirvi che anche la librerie e il mio programma è C++.
Sorry

Camlr
07-03-2007, 16:57
quanluno mi sa dire come si utilizza questa funzione?


gcry_error_t gcry_ac_data_sign (gcry_ac_handle_t handle, gcry_ac_key_t key, gcry_mpi_t data, gcry_ac_data_t *data_signature)
Signs the data contained in data with the secret key key and stores the resulting signature in the data set data_signature.


Il mio problema sostanzialmente sta nel non saper inserire all'interno di "gcry_mpi_t data" i miei dati, che in questo caso sono all'interno della una struttura.
Cmq mi accontento anche di un esempio dove si riempi "gcry_mpi_t data" con una stringa o una qualunque altra cosa, l'importante che si diversa da un numero.

Deve essere diversa da un numero perchè nell'interfaccia della libreria esiste questa funzione:

gcry_mpi_t gcry_mpi_set_ui (gcry_mpi_t w, unsigned long u)
Assign the value of u to w and return w. If NULL is passed for w, a new MPI is allocated, set to the value of u and returned. This function takes an unsigned int as type for u and thus it is only possible to set w to small values (usually up to the word size of the CPU).

che permette proprio di riempire "gcry_mpi_t w" con un numero, ma io invece deve mettere una struttura.

Grazie a tutti.

Loading