erreur lors de l’utilisation d'une fonction

Le problème exposé dans ce sujet a été résolu.

Bonjour,j’ai une erreur [-fpermissive] en compilant ce code :

#include <iostream>
#include <string>
#include <ec.h>
#include <bn.h>
#include <obj_mac.h>

using namespace std;


int main()
{
    EC_KEY *key;

if(NULL == (key = EC_KEY_new_by_curve_name(SN_secp256k1)))
    handleErrors();
if(1 != EC_KEY_generate_key(key)) handleErrors();
}

et voici l’erreur : C:\openssl-1.0.2j-fips-x86_64\OpenSSL\include\openssl\obj_mac.h|384|error: invalid conversion from 'const char*' to 'int' [-fpermissive]|

Comment je pourrais résoudre le problème ?

ps: l’erreur vient d’un des headers de la bibliothèque et j’ai désactiver tous les warnings mais rien n’y fait

+0 -0

Bon…

Il faut apprendre à utiliser les fonctions qu’on utilise. Lire le prototype t’aiderait déjà.

man EC_KEY_new_by_curve_name me donne :

EC_KEY *EC_KEY_new_by_curve_name(int nid);

J’ai pas besoin de beaucoup plus. Mais si je continue je lis :

      Alternatively a new EC_KEY can be constructed by calling EC_KEY_new_by_curve_name() and supplying the nid of
       the associated curve. See EC_GROUP_new(3) for a description of curve names. This function simply wraps calls
       to EC_KEY_new() and EC_GROUP_new_by_curve_name().

Bon, je comprend que le paramètre est un int qui correspond à l’ID de la courbe. SN_secp256k1 est une chaîne de caractère, pas un int. Utilise plutôt ID_secp256k1.

C’est bien, tu as appris à chercher et trouver les bonnes fonction à utiliser. Maintenant il faut apprendre à les utiliser :D

+0 -0

Merci beaucoup pour ton aide, j’ai chercher des exemples d’utlisation de la fonction mais j’en ai pas trouver et j’ai du mal à comprendre les prototypes.

J’ai un autre petit problème avec handlErrors(); ou/et ERR_get_error(void);

voici l’erreur que sa me donne quand j’utlise la fonction hanlErrors(); :

C:\openssl-1.0.2j-fips-x86_64\OpenSSL\include\openssl\err.h|383|error: 'ERR_FNS' does not name a type; did you mean 'EROFS'?|

et ça ouvre un fichier d’entete , je n’ai pas trouver de prototype pour handleErrors() mais j’en ai trouver pour ERR_get_error(void); et je ne pense pas avoir mal utliser la fonction cette fois-ci.

+0 -0

En fait je pense que handleErrors est une fonction que tu dois implémenter. C’est juste pour dire : « à ce moment-là, tu dois gérer les erreurs qui surviennent dans ton programme ». Tu peux soit afficher un message, soit quitter le programme, etc. À ta convenance.

Pour le reste, si je me fie à la pertinence de tes questions et à la réaction de @ache, j’ai le sentiment que tu ne maîtrises pas suffisamment le langage que tu veux utiliser. Alors permets-moi de te poser quelques questions.

  • Pourquoi utiliser le C ou le C++ pour faire ce que tu as envie de faire ? Est-ce pour te forcer à utiliser un tel langage ?
  • Qu’essaies-tu de faire exactement ? J’ai cru comprendre que sur d’autres topics voisins tu voulais mettre en œuvre du chiffrement asymétrique. Mais pour chiffrer quoi ? Dans quel contexte ? Est-ce à des fins d’apprentissage ? Les outils tels que OpenSSL ne te conviennent pas ?

Parce que là, ce que je vois, c’est que tu butes sur des problèmes triviaux pour essayer de résoudre des problèmes non triviaux. Tu n’es pas sorti de l’auberge…

… Mais c’est en essayant qu’on évolue, ça, je te l’accorde.

+2 -0

Merci de t’a réponse

Pour le reste, si je me fie à la pertinence de tes questions et à la réaction de @ache, j’ai le sentiment que tu ne maîtrises pas suffisamment le langage que tu veux utiliser. Alors permets-moi de te poser quelques questions.

  • Pourquoi utiliser le C ou le C++ pour faire ce que tu as envie de faire ? Est-ce pour te forcer à utiliser un tel langage ?
  • Qu’essaies-tu de faire exactement ? J’ai cru comprendre que sur d’autres topics voisins tu voulais mettre en œuvre du chiffrement asymétrique. Mais pour chiffrer quoi ? Dans quel contexte ? Est-ce à des fins d’apprentissage ? Les outils tels que OpenSSL ne te conviennent pas ?

… Mais c’est en essayant qu’on évolue, ça, je te l’accorde.

Ge0

C’est pour l’apprentissage en particulier pour mieux comprendre le monde de la sécuriter informatique et de la cryptographie en particulier du bitcoin et je pense que le meilleur moyen de comprendre et de coder un programme.

Donc mon objectifs et de créer un programme qui échnage des données sous la sécuriter asymétrique et de m’amuser a les échanger d’un pc à l’autre tout en essayant d’intercepter les données

+0 -0

Ok ^^

Si ton but est bien d’apprendre alors ce sera très instructif.
Par-contre, pour un début vise bas. C’est comme ça que tu apprendras au mieux.

Et surtout essaye vraiment de comprendre ce que tu fais et pourquoi tu le fais. Je t’invite à lire les cours de langage C et de langage C++ moderne.
Je te conseille également ce livre « Appliqued Cryptography »

Pour ce qui est des cryptomonaies, je ne peux pas vraiment te conseiller grand chose désolé.

+2 -0

Merci pour "Appliqued Cryptography" et je suit déjà le cours "langage c++ moderne"

ps : j’ai encore un petit problème :-° , J’ai 2 Warning [-Wuninitialized] les voici :

C:\Users\mareg\Documents\programation\crypto\main.cpp|30|warning: 'prv' is used uninitialized in this function [-Wuninitialized]|

C:\Users\mareg\Documents\programation\crypto\main.cpp|34|warning: 'pub' is used uninitialized in this function [-Wuninitialized]|

Ces warnings veulent dire que "prv" et "pub" ne sont pas inisialiser dans la fonction mais je ne pense pas que l’erreur viennet de là. voic mon code :

#include <iostream>
#include <string>
#include <ec.h>
#include <obj_mac.h>
#include <bn.h>
using namespace std;


int main()
{
    EC_KEY * key;

   if(NULL == (key = EC_KEY_new_by_curve_name(NID_secp256k1)))
   {

   }


    if(1 != EC_KEY_generate_key(key))
        {

        }

       BIGNUM * prv;
       EC_POINT * pub;


   if(1 != EC_KEY_set_private_key(key, prv))
   {

   }
   if(1 != EC_KEY_set_public_key(key, pub))
   {

   }

}
+0 -0

Ah oui, il te manque vraiment des bases…

Pour faire simple (car on s’éloigne du sujet et ce n’est pas à moi de t’enseigner quoi que ce soit par message interposé) : tu dois initialiser des pointeurs. Comme ceci :

       BIGNUM * prv = NULL;
       EC_POINT * pub = NULL;

Si tu n’as pas compris ce que je viens de faire, alors un conseil bienveillant : évite d’utiliser le C pour ce que tu projettes de faire.

Tu connais le dicton : « Qui trop embrasse mal étreint. » Il y a même la version libanaise : « on ne tient pas deux pastèques dans une seule main. »

Ou encore « Celui qui court deux lièvres à la fois ne prendra plus jamais rien. »

Bref, tu as compris. :)

Si ton objectif est de progresser en C / C++, continue sur cette voie mais ne te focalise pas sur un sujet aussi pointu qu’est la cryptographie asymétrique.

Si ton objectif est de mieux comprendre le monde de la sécurité informatique et de la cryptographie en particulier, utilise un langage qui te facilitera la tâche plutôt que de perdre du temps sur des points de détail qui t’empêchent de résoudre des problèmes d’ordre supérieur.

Ce que tu veux, c’est pouvoir « couvrir » des clefs symétriques à l’aide de clefs asymétriques pour envoyer / recevoir des données chiffrées. Ce n’est pas galérer sur des exemples de code avec OpenSSL.

Ta démarche est vraiment noble, mais tu te compliques la vie.

En conséquence je te recommande python pour jouer avec la cryptographie. Sa bibliothèque standard est énorme, il possède plein de modules tiers également, et il permet aussi de jouer avec les grands nombres (ce qui saurait être intéressant dans ton cas).

Merci, J’vais me concentrer sur le cours "c++ moderne" tous ça c’était d’abord pour apprendre le c++, le probléme en suivant un cours c’est que j’ai l’impression de ne pas progresser alors que là (en codant) c’est tous l’inverse j’ai le sentiment de progresser à chaque étapes. Ce que je fais maintenant c’est m’aider du cours pour réaliser un petit programme. Comme vous l’avez dit le mieux est de commencer par un petit projet.

Avez-vous des idée de projet qui te font travailler une grande partit des aspect du c++ mais pas trop compliquée pour un débutant ?

Mais j’ai un sentiment d’inachevé si je n’arrive pas a compiler le code car je sens que le code est bon mais que le problème vient du compilateur ou peut-etre que j’ai installer une version openssl non compatible avec le compilo d’aprés les quelques recherche que j’ai efféctué sur ces erreurs là :

||=== Build: Debug in crypto (compiler: GNU GCC Compiler) ===|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(rand_win.o):rand_win.c|| undefined reference to `__imp_GetDeviceCaps'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(rand_win.o):rand_win.c|| undefined reference to `__imp_CreateCompatibleBitmap'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(rand_win.o):rand_win.c|| undefined reference to `__imp_GetObjectW'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(rand_win.o):rand_win.c|| undefined reference to `__imp_GetDIBits'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(rand_win.o):rand_win.c|| undefined reference to `__imp_DeleteObject'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(c_zlib.o):c_zlib.c|| undefined reference to `inflate'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(c_zlib.o):c_zlib.c|| undefined reference to `deflate'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(c_zlib.o):c_zlib.c|| undefined reference to `inflateEnd'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(c_zlib.o):c_zlib.c|| undefined reference to `deflateEnd'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(c_zlib.o):c_zlib.c|| undefined reference to `inflateEnd'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(c_zlib.o):c_zlib.c|| undefined reference to `deflateEnd'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(c_zlib.o):c_zlib.c|| undefined reference to `inflateInit_'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(c_zlib.o):c_zlib.c|| undefined reference to `deflateInit_'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(c_zlib.o):c_zlib.c|| undefined reference to `deflate'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(c_zlib.o):c_zlib.c|| undefined reference to `zError'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(c_zlib.o):c_zlib.c|| undefined reference to `deflate'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(c_zlib.o):c_zlib.c|| undefined reference to `zError'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(c_zlib.o):c_zlib.c|| undefined reference to `deflateInit_'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(c_zlib.o):c_zlib.c|| undefined reference to `inflate'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(c_zlib.o):c_zlib.c|| undefined reference to `zError'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\9.2.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: C:\openssl-1.0.2j-fips-x86_64\OpenSSL\lib\libcrypto.a(c_zlib.o):c_zlib.c|| undefined reference to `inflateInit_'|
||error: ld returned 1 exit status|
||=== Build failed: 22 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

j’ai la version 1.0.2 de openssl et la version 9.2 de gcc sur C::B. Savez-vous comment régler le probléme ?

+0 -1
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte