Bonjour,
Je suis en train de me faire un petit programme pour crypter un message et je trouve devant un problème avec gcc :
key.o: In function `cle_de_codage':
key.c:(.text+0x1b): undefined reference to `__gmpz_init'
key.c:(.text+0x29): undefined reference to `__gmpz_init'
key.c:(.text+0x37): undefined reference to `__gmpz_init'
key.c:(.text+0x42): undefined reference to `__gmpz_init'
key.c:(.text+0x50): undefined reference to `__gmpz_init'
key.c:(.text+0x174): undefined reference to `__gmpz_add_ui'
key.c:(.text+0x18c): undefined reference to `__gmpz_cmp'
key.c:(.text+0x1b2): undefined reference to `__gmpz_mul'
key.c:(.text+0x1cc): undefined reference to `__gmpz_set'
key.c:(.text+0x1da): undefined reference to `__gmpz_init'
key.c:(.text+0x21d): undefined reference to `__gmp_printf'
key.c:(.text+0x232): undefined reference to `__gmpz_nextprime'
key.c:(.text+0x245): undefined reference to `__gmpz_sizeinbase'
key.c:(.text+0x26e): undefined reference to `__gmp_printf'
key.c:(.text+0x299): undefined reference to `__gmpz_add_ui'
key.c:(.text+0x2ba): undefined reference to `__gmpz_set'
key.c:(.text+0x2d6): undefined reference to `__gmpz_mul'
key.c:(.text+0x2f2): undefined reference to `__gmpz_add'
key.c:(.text+0x305): undefined reference to `__gmpz_sizeinbase'
key.c:(.text+0x334): undefined reference to `__gmpz_fdiv_q'
key.c:(.text+0x350): undefined reference to `__gmpz_nextprime'
key.c:(.text+0x377): undefined reference to `__gmp_printf'
key.o: In function `main':
key.c:(.text+0x3b5): undefined reference to `__gmp_printf'
collect2: ld returned 1 exit status
Je vous mets le code ensuite.
[code]#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <gmp.h>
#define LENGTH 256
mpz_t *cle_de_codage(char encrypt[50]) {
char key[500] ;
int count = 0, length_encrypt, exposant, size ;
mpz_t current, temp, zero, *next, grew ;
mpz_init(zero) ; mpz_init(current) ; mpz_init(temp), mpz_init(*next) ; mpz_init(grew) ;
printf("Veuillez entrer votre cle de cryptage (cle forte) : ") ;
fgets(key, sizeof(key), stdin) ;
printf("Maintenant votre clé rotative (une suite de chiffre) :") ;
fgets(encrypt, sizeof(encrypt), stdin) ;
key[strlen(key)-1] = '\0' ;
encrypt[strlen(encrypt)-1] = '\0' ;
length_encrypt = strlen(encrypt) ;
while( key[count] != '\0' ) {
mpz_add_ui(temp, zero, (unsigned long int)( (int)key[count] + ( (int)encrypt[count%length_encrypt] - 48 ) ) ) ;
if( mpz_cmp(current, zero) != 0 ) mpz_mul(current, current, temp) ;
else mpz_set(current, temp) ;
mpz_init(temp) ;
count++ ;
}
printf("La conversion de %s donne : ", key) ;
gmp_printf("%Zd\n", current) ;
mpz_nextprime(*next ,current) ;
size = (int)mpz_sizeinbase(*next, 10) ;
printf("Votre cle de codage de %d bits sera donc : ", size) ;
gmp_printf("%Zd\n", *next) ;
exposant = LENGTH - size ;
mpz_add_ui(grew, grew, 10) ;
if(exposant >= 0 ) {
while(exposant > 0) {
mpz_set(temp, *next) ;
mpz_mul(*next, *next, grew) ;
mpz_add(*next, *next, temp) ;
if( (int)mpz_sizeinbase(*next, 10) >= LENGTH ) break ;
else exposant-- ;
}
}
else {
while(exposant < 0) {
mpz_fdiv_q(*next, *next, grew) ;
exposant++ ;
}
}
mpz_nextprime(*next ,*next) ;
printf("La cle de codage de %d bits est : ", LENGTH) ; gmp_printf("%Zd\n", *next) ;
return next ;
}
int main(void) {
char rotate[50] ;
mpz_t *key ;
key = cle_de_codage(rotate) ;
gmp_printf("%Zd\n", *key) ;
printf("et la cle rotative : %d\n", atoi(rotate) ) ;
return 0 ;
}[/code]
La fonction cle_de_codage marche très bien toute seule, mais dès que je passe en argument les deux clé je me trouve avec un problème au niveau de la librairie GMP (qui permet de faire des nombre de plus de 64 bits : ici 256 bits et plus si mon pc crypte suffisamment vite).
Mon programme en est à ses débuts mais je ne comprends pas que ça ne marche pas.
Merci d’avance pour votre aide.
Deusexodus.