problème avec une fonction (openssl)

a marqué ce sujet comme résolu.
Auteur du sujet

Bonsoir, je cherche a générer une paire de clé avec openssl mais j’ai une petite erreur… voici mon code :

 EVP_PKEY **ppkey = NULL;
         if (1 != EVP_PKEY_keygen (ctx, ppkey))
         {
            std::cout << "error 2" << std::endl;
         }
         else
         {
            std::cout << *ppkey << std::endl;
         }

le programme affiche "error 2" a la compilation cet-a-dire que la valeur de retour et différent de 1 et comme l’indique la doc d’openssl sur le sujet cela signifie que la fonction concerner a rencontrer un échec. Ma question est donc, comment traiter et résoudre le problème ?

Édité par cerveau

+0 -0

Hello,

Selon l’exemple de la doc, tu devrais faire:

EVP_PKEY *ppkey = NULL;
EVP_PKEY_keygen(ctx, &ppkey);

Car sinon, tu passe la valeur NULL, alors que EVP_PKEY_keygen() attend un pointeur (de pointeur de EVP_PKEY) où écrire l’addresse de la EVP_PKEY allouée. J’imagine que le code ressemble à:

int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey_param)
{
    EVP_PKEY *ppkey_malloc = malloc(sizeof(EVP_PKEY));
    if (ppkey_malloc == NULL)
        return -1;

    if (ppkey_param == NULL)
        return -2;
    *ppkey_param = ppkey_malloc;

    return 0;
}

Édité par Nodraak

Auteur du sujet

Merci de t’a réponse, voici le code avec les modifications apporter :

 EVP_PKEY *ppkey = NULL;
         if (1 != EVP_PKEY_keygen(ctx, &ppkey))
         {

            std::cout << "error 2" << std::endl;
         }
         else
         {
            std::cout << *ppkey << std::endl;
         }

Je n’arrive pas à déférencer "ppkey" et donc afficher son contenue en faisant "*ppkey". Pourquoi ce n’est pas possible et y’aurais t-il un autre moyen de le déférencer ?

voici l’erreur a afficher pour l’avant derniere ligne :

C:\Users\mareg\Documents\programation\crypto\main.cpp|30|error: no match for 'operator<<' (operand types are 'std::ostream' {aka 'std::basic_ostream<char>'} and 'EVP_PKEY' {aka 'evp_pkey_st'})|

le programme ce compile en écrivant "ppeky" mais vérifie la condition 1 qui indique ne erreur dans la fonction.

Édité par cerveau

+0 -0

https://www.openssl.org/docs/man1.1.0/man3/

Tu n’as pas à faire toi-même l’allocation et la libération mémoire. Enfin , si, mais il y a des fonctions pour ça.

Exemple trouvé sur internet. https://stackoverflow.com/questions/47094493/openssl-how-to-initialize-evp-pkey-object-with-the-decoded-key

Il faut passer par une fonction d’initialisation. (selon ce que tu souhaites faire) ensuite, tu pourra passer ta variable par adresse à pleins de fonctions ;)

Pour cout« Il te dit qu’il ne sait pas lire une structure de type evp_pkey_st (ce qui est … normal).

+0 -0
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