IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

openssl - DH_compute_key


Sujet :

Réseau C

  1. #21
    Membre régulier Avatar de Tex-Twil
    Inscrit en
    Avril 2004
    Messages
    447
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 447
    Points : 122
    Points
    122
    Par défaut
    aidez moi svp car avec ce code, quand je libere la memoire de char *final j'ai une erreur "*** glibc detected *** free(): invalid next size (fast): 0x0804b5e0 ***"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    	unsigned char *keyAlice = NULL;
    	unsigned char *final = NULL;
            ...
    	// Computing secret shared keys with other peers's public key
    	//Alice
    	keyAlice = (unsigned char *)malloc(DH_size(dhAlice));
    	if(keyAlice == NULL) { perror("malloc"); exit(2); }
     
    	final = (unsigned char *)malloc(DH_size(dhAlice));	
    	if(final == NULL) { perror("malloc"); exit(2); } 	
     
    	ret = DH_compute_key(keyAlice, dhBob->pub_key, dhAlice);
    	if( ret == -1 ) { perror("Dh Compute"); exit(2); }
     
    	printf("Alice calculated : ");
    	for (j=0; j<ret; j++)
    	{
    	// decallage du pointeur
    		sprintf(final+(2*j), "%02X",keyAlice[j]);
    	}
    	printf("%s\n", final); 
     
    	if(final != NULL) free(final);
    	if(keyAlice != NULL) free(keyAlice);

  2. #22
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    keyAlice = (unsigned char *)malloc(DH_size(dhAlice)); 
       if(keyAlice == NULL) { perror("malloc"); exit(2);
    Ne cast plus le retour de malloc, c'est quasiment inutile (sauf si tu as un très vieux compilateur)

    Quel est le code associé à 2 dans les codes d'erreur ? (utilise EXIT_SUCCESS, EXIT_FAILURE) Utilise un code propre à toi mais dans ce cas, ça fais le dans un define que tu réutilises plus tard.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(final != NULL) free(final); 
       if(keyAlice != NULL) free(keyAlice);
    Attention, il faut mettre les pointeurs à NULL après un free :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if(final != NULL) 
    {
         free(final);
         final = NULL;
    } 
    if(keyAlice != NULL) 
    {
         free(keyAlice); 
         keyAlice = NULL;
    }
    Ensuite, pour en revenir à ta question, le problème arrive généralement lorsque tu fais un "double free", chose qui arrive si tu ne fais pas ce que je viens de te montrer après les free.

  3. #23
    Membre régulier Avatar de Tex-Twil
    Inscrit en
    Avril 2004
    Messages
    447
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 447
    Points : 122
    Points
    122
    Par défaut
    j'ai fait les modification mais c'est toujours pareil. Le prog plante qund j'essaye de liberer final

  4. #24
    Membre régulier Avatar de Tex-Twil
    Inscrit en
    Avril 2004
    Messages
    447
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 447
    Points : 122
    Points
    122
    Par défaut
    Je crois aue j'ai trouve.

    Je n'allouais pas la bonne taille a la chaine final. Elle doit etre deux fois plus grande que la chaine dhAlice.

  5. #25
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Par contre, ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(final != NULL)
    {
         free(final);
         final = NULL;
    }
    if(keyAlice != NULL)
    {
         free(keyAlice);
         keyAlice = NULL;
    }
    est trop compliqué. Par définition, free ne fait rien si le pointeur passé en argument est NULL, donc c'est inutile de le tester.

    Ce code est plus simple et tout aussi juste (et écrit d'une façon qui fera plaisir à quelqu'un!):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    free(final) , final = NULL;
    free(keyAlice) , keyAlice = NULL;
    Jc

  6. #26
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    est trop compliqué
    je n'ai fais que recopier le code déjà fourni et rajouté les affectations à NULL ...

    Par définition, free ne fait rien si le pointeur passé en argument est NULL, donc c'est inutile de le tester.
    J'en suis bien conscient :
    http://rperrot.developpez.com/articl...llocationC/#L3

  7. #27
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par PRomu@ld
    est trop compliqué
    je n'ai fais que recopier le code déjà fourni et rajouté les affectations à NULL ...

    Par définition, free ne fait rien si le pointeur passé en argument est NULL, donc c'est inutile de le tester.
    J'en suis bien conscient :
    http://rperrot.developpez.com/articl...llocationC/#L3


    Je le sais, la remarque n'était pas dirigé vers toi personnellement. Le code était, certes, le tien mais c'est celui qui m'est tombé sous la main pour la remarque.



    Jc

Discussions similaires

  1. OpenSSL et fd
    Par thomasvst dans le forum C
    Réponses: 2
    Dernier message: 24/03/2006, 12h27
  2. problème avec <openssl/dh.h>
    Par Tex-Twil dans le forum C
    Réponses: 6
    Dernier message: 23/03/2006, 11h30
  3. [Sécurité] OpenSSL ?
    Par Tmex dans le forum Langage
    Réponses: 4
    Dernier message: 09/03/2006, 14h45
  4. OpenSSL/OpenLDAP Problème pour la création de certificat
    Par shaun_the_sheep dans le forum Réseau
    Réponses: 4
    Dernier message: 07/10/2005, 13h36
  5. [SSL] keytool vs openSSL
    Par pmartin8 dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 15/06/2005, 10h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo