# \[resolu\] Création d'un prog de cryptographie, gcc refuse !

**URL:** <https://www.debian-fr.org/t/resolu-creation-dun-prog-de-cryptographie-gcc-refuse/9070>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 4:19 UTC](https://www.debian-fr.org/t/resolu-creation-dun-prog-de-cryptographie-gcc-refuse/9070 "2016-02-20T16:19:03Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Deusexodus](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/43a26b/32.png) [@Deusexodus](https://www.debian-fr.org/u/Deusexodus)\
**Post date:** [Février 20, 2016, 4:19 UTC](https://www.debian-fr.org/t/resolu-creation-dun-prog-de-cryptographie-gcc-refuse/9070/1 "2016-02-20T16:19:03Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 4:19 UTC](https://www.debian-fr.org/t/resolu-creation-dun-prog-de-cryptographie-gcc-refuse/9070/2 "2016-02-20T16:19:04Z")

</div>

je n’ai pas trop le temps de regarder plus avant, mais si tu commentes ta func et la ligne key=, il reste déjà une erreur sur gmp\_printf:

`roc@roc:~/devel/C$ make key
cc key.c -o key
/tmp/ccQGEAYp.o: In function `main':
key.c:(.text+0x3f): undefined reference to `__gmp_printf'
collect2: ld returned 1 exit status
make: *** [key] Erreur 1`et pourtant:

`roc@roc:~/devel/C$ grep gmp_printf /usr/include/*.h
/usr/include/gmp.h:#define gmp_printf __gmp_printf
/usr/include/gmp.h: __GMP_DECLSPEC int gmp_printf__ GMP_PROTO ((__gmp_const char *, ...));
`mais ça veut dire aussi que \_\_gmp\_printf n’est déclarée nulle part dans aucun .h, non ?

Alors j’ai trouvé ça, mais je ne sais pas le traduire:  
[cppfrance.com/infomsg\_PROBLE … 64514.aspx](http://www.cppfrance.com/infomsg_PROBLEMES-LINKER-AVEC-GMP_664514.aspx)

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 4:19 UTC](https://www.debian-fr.org/t/resolu-creation-dun-prog-de-cryptographie-gcc-refuse/9070/3 "2016-02-20T16:19:04Z")

</div>

Tu compile comment?

Il a compilé un fichier objet donc le .h qui déclare \_\_gmpz\_init etc y est c’est le fichier objet associé qui n’est pas présent.

---

<div class="post-metadata">

**Author:** ![Pingoo\_Pat](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/d2c977/32.png) [@Pingoo\_Pat](https://www.debian-fr.org/u/Pingoo_Pat)\
**Post date:** [Février 20, 2016, 4:19 UTC](https://www.debian-fr.org/t/resolu-creation-dun-prog-de-cryptographie-gcc-refuse/9070/4 "2016-02-20T16:19:05Z")

</div>

Avec une édition de liens ça marchera mieux. 😮

```auto

```

ou quelque chose dans le genre.

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 4:19 UTC](https://www.debian-fr.org/t/resolu-creation-dun-prog-de-cryptographie-gcc-refuse/9070/5 "2016-02-20T16:19:05Z")

</div>

trés juste, ça faisait longtemps que je n’avais pas compilé:

`roc@roc:~/devel/C$ LDFLAGS="-lgmp" make key
cc -lgmp key.c -o key
roc@roc:~/devel/C$ `

---

<div class="post-metadata">

**Author:** ![Deusexodus](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/43a26b/32.png) [@Deusexodus](https://www.debian-fr.org/u/Deusexodus)\
**Post date:** [Février 20, 2016, 4:19 UTC](https://www.debian-fr.org/t/resolu-creation-dun-prog-de-cryptographie-gcc-refuse/9070/6 "2016-02-20T16:19:05Z")

</div>

Oui c’est ça : il fallait que je rajoute -lgmp. Donc ce fil est résolu.

Me reste à régler le seg fault que mon programme fourni.

Merci de votre aide.
