salut tout le monde,

j'utilise la fonction SHA1 de l'openssl pour générer des hash à des fichier. dans le main je fait appel a la fonction traitement_sha1(filename); definie comme suite:

void traitement_sha1(char * filename){
u_char * sha1_key=NULL;
char * hexa_key=NULL;

sha1_key=sha1_of_file(filename);
hexa_key=sha2hexa(sha1_key);
printf("le Hash calcule = %s\n",hexa_key);
}

avec:
u_char * sha1_of_file(const char * path){

strfromfile *sff;
u_char *key;

/*recuperer la taille et le contenu du fichier specifie dans path*/
sff=get_str_from_file(path);
if(sff<=0) return 0;
/*calcul et retour du hash correspondant au fichier*/
if(SHA1(sff->buffer,sff->len,key)==NULL) return 0;
return key;

}
et

char * sha2hexa(u_char *key){
int i;
char *clef;

clef=(char *) malloc(SHA_DIGEST_LENGTH);
if(clef==NULL) return NULL;
for (i = 0; i < SHA_DIGEST_LENGTH; ++i)
sprintf(clef + i * 2, "%02x", key[i]);

return clef;
}

le problème c'est que le hash est affiché suivé d'une erreur de segmentation.ce que je ne comprends pas est que si j'utilise l'ensemble de ces instruction dans un seul bloc( c-à-d sans fonction, directement dans le main) ça marche bien.
je n'arrive pas à trouver de solutions.
merci d'avance.