Modification du source d'AODV (sous ns2)

Bonjour,

j'essaie d'implémenter la solution de Mr Guerero Zapata sous NS2.33(http://lptools1.amsl.com/html/draft-guerrero-manet-sakm-00) pour implémenter un nouveau système de gestion de clé cryptographique.
je voudrais dériver une adresse IP a partir d'une clé publique dans le fichier aodv.cc . pour ce faire, il faut modifier la valeur de la variable index dans le constructeur AODV::AODV(nsaddr_t id) : Agent(PT_AODV),
btimer(this), htimer(this), ntimer(this),
rtimer(this), lrtimer(this), rqueue() {... etc
mais l'appel de la fonction deriverip(pubkey) (celle-ci est déclarée comme suit: nsaddr_t deriverip(pubkey) dans un fichier secure.h inclus dans le fichier aodv.cc)
noter bien que je n'ai pas de problèmes dans la compilation, juste une erreur :erreur de segmentation.
merci beaucoup.

( ubuntu 8.04, programmation C )
Configuration: Windows Vista
Firefox 2.0.0.14

2 réponses

  1. bonjour,

    peux-tu clarifier ceci :

    mais l'appel de la fonction deriverip(pubkey) (celle-ci est déclarée comme suit: nsaddr_t deriverip(pubkey) dans un fichier secure.h inclus dans le fichier aodv.cc)

    je n'ai pas compris cette phrase.

    globalement, je n'ai pas compris quel est le souci exactement ...
    0
    1. désolé.
      l'appel de la fonction deriverip() ne fonctionne pas correctement à l'intérieur du constructeur AODV::AODV(nsaddr_t id).

      AODV::AODV(nsaddr_t id) : Agent(PT_AODV),
      btimer(this), htimer(this), ntimer(this),
      rtimer(this), lrtimer(this), rqueue() {

      unsigned char * pubkey;

      id=deriverip(pubkey);
      ....
      et voici le corp de la fonction :
      //dérrivation des ip
      nsaddr_t deriverip(unsigned char * pubkey)
      {
      nsaddr_t ip;int t;
      unsigned char * signature;
      RSA* my_key;
      pubkey=(unsigned char *)RSAPublicKey_dup(my_key);

      int mess_lent= sizeof (pubkey);

      EVP_MD_CTX digest_ctx;
      unsigned char digest[EVP_MAX_MD_SIZE];
      unsigned int size_digest,size_sign;

      EVP_DigestInit(&digest_ctx, EVP_sha ());
      EVP_DigestUpdate(&digest_ctx,( unsigned char *)pubkey,(unsigned int)mess_lent);
      EVP_DigestFinal(&digest_ctx, (unsigned char *)digest, & size_digest);

      //reserver de l'espace memoire pour le champ resevé à la signature par rapport à la clé
      signature = (unsigned char *) malloc (RSA_size(my_key));
      RSA_sign(NID_sha1, pubkey,size_digest,signature,&size_sign,my_key);

      t=8;
      t<<=24;
      t+= (int) pubkey;
      ip=(nsaddr_t ) t;

      return ip;
      }
      1