Dans OpenSSL, il y a des pièges ! Petit exemple avec i2d_PrivateKey et i2d_PublicKey :
i2d_PrivateKey(EVP_PKEY *, uchar **)
, comme escompté, prend en paramètre une paire de clé source EVP_PKEY et un tableau d’octet en destination. La clé privé est extraite de la paire de clé et envoyé au format DER / ASN 1 dans le tableau d’octet.
i2d_PublicKey(EVP_PKEY *, uchar **)
a la même signature, une paire de clé source EVP_PKEY et un tableau d’octet en destination. La clé publique est extraite de la paire de clé, mais cette fois-ci elle est envoyé sous forme d’un EC point dans le tableau d’octet ! Piège !
L’équivalent de i2d_PublicKey(EVP_PKEY *, uchar **)
est en réalité i2d_PUBKEY(EVP_PKEY *, uchar **)
! Et c’est la même chose pour d2i_PublicKey/PUBKEY
. Comme quoi… « rien n’est jamais facile » !