Bonjour a tous,
Je tien dabord à m'excuser si ce suket à deja ete abordé, je n'ai pas trouver de solution par moi meme.

Je suis entrain de coder un crypteur RSA en utilisant la librairie GMP pour prendre en compte les (tres) grands nombres. J'ai trouvé des sources sur le forum de Hardware.fr pour voir comment utiliser la lib. Je m'interesse a l'utilisation de la fonction aleatoire decrite ici.
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
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <gmp.h>
#include <time.h>
 
gmp_randstate_t etat;
 
void aleatoire(mpz_t nombre, int taille)
{
  unsigned long int i;
  mpz_t deuxn;
 
  mpz_init(deuxn);
  i = (taille+1)*4;
 
  mpz_urandomb(nombre, etat, i);
  mpz_ui_pow_ui(deuxn, 10, taille);
  mpz_add(nombre,nombre,deuxn);
 
  mpz_clear(deuxn);
}
 
int main() {
  mpz_t	rand; mpz_init(rand);
 
  time_t t; int seed;
 
  seed = (int) time(&t);
  gmp_randinit(etat, GMP_RAND_ALG_DEFAULT); 
  gmp_randseed_ui(etat, seed);                       
 
  aleatoire(rand, 15);
  printf("Rand: " ); mpz_out_str(stdout, 10, rand); printf("\n\n" );
  //mpz_t	a; mpz_init(a);
  //mpz_t	z; mpz_init(z);
return 0;
}
Lorsque je compile le code si dessus (gcc test.c -lgmp) j'obtien une erreur de segmentation !! Par contre si je decommente les deux ligne vers la fin ... tout se passe bien et j'obtien mon nombre aleatoire :s

Je ne comprends pas pourquoi commenter des declaration produit une erreur :s

Merci d'avance pour votre aide.

Je vien de resoudre le probleme : voici le code
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
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <gmp.h>
#include <time.h>
 
 
 
gmp_randstate_t etat;
 
void aleatoire(mpz_t nombre, int taille)
{
  time_t t; int seed;
 
  unsigned long int i;
  mpz_t deuxn;
 
 
  seed = (int) time(&t);
  gmp_randinit(etat, GMP_RAND_ALG_DEFAULT);
  gmp_randseed_ui(etat, seed);
 
  mpz_init(deuxn);
  i = (taille+1)*4;
 
  mpz_urandomb(nombre, etat, i);
  mpz_ui_pow_ui(deuxn, 10, taille);
  mpz_add(nombre,nombre,deuxn);
 
  mpz_clear(deuxn);
}
 
int main() {
  mpz_t	clair; mpz_init(clair);
 
  aleatoire(clair, 15);
  printf("Message à chiffrer: " ); mpz_out_str(stdout, 10, clair); printf("\n\n" );
return 0;
}