Comment puis-je obtenir la clé publique à partir d'un ECDSA clé privée dans OpenSSL?

Je suis en fournissant cet exemple d'application pour montrer mon problème

#include <stdio.h>
#include <stdlib.h>
#include <openssl/ec.h>
#include <openssl/bn.h>

int main()
{
     EC_KEY *pkey = NULL;
     EC_POINT *pub_key = NULL;
     const EC_GROUP *group = NULL;
     BIGNUM start;
     BIGNUM *res;
     BN_CTX *ctx;

     BN_init(&start);
     ctx = BN_CTX_new();

     res = &start;
     BN_hex2bn(&res,"3D79F601620A6D05DB7FED883AB8BCD08A9101B166BC60166869DA5FC08D936E");
     pkey = EC_KEY_new_by_curve_name(NID_secp256k1);
     group = EC_KEY_get0_group(pkey);
     pub_key = EC_POINT_new(group);

     EC_KEY_set_private_key(pkey, res);

     assert(EC_POINT_bn2point(group,res, pub_key, ctx)); //Null here

     EC_KEY_set_public_key(pkey, pub_key);


    return 0;
}

Ce que je suis en train de faire, est d'afficher la clé Publique à partir d'une clé privée(si un elliptique de la clé privée).
Je ne savais pas comment le faire jusqu'à ce que j'ai rencontré un problème similaire

Comment puis-je nourrir OpenSSL aléatoire des données pour les utiliser dans la signature ECDSA?

Qui est où j'ai fait moi-même comment obtenir la clé publique et à l'utilisation EC_POINT_bn2point au lieu de hex2point en interne qui ne BN_hex2bn selon la source OpenSSL.

Alors, pourquoi est EC_POINT_bn2point retourner NULL? Je songe sérieusement à recompiler OpenSSL et à faire quelques routines de débogage de comprendre pourquoi il échoue.

Eh bien, si vous pouvez extraire une clé publique à partir d'une clé privée, qui serait bec de l'essence de RSA...
J'ai trouvé quelques articles qui disent la clé privée a laisser des indices qui permettent de générer de la pub de la clé, mais il n'est pas écrit en anglais. Ainsi puissiez-vous trouver le format de la clé privée, il peut aider.
Un ECDSA clé privée d (un entier) et la clé publique Q (un point) est calculée par Q = dG, où G est un non-secret paramètre de domaine. Voir aussi: nsa.gov/ia/_files/ecdsa.pdf
Oui, j'ai obtenu. J'avais besoin de faire CE multiplication avec la base de générateur de G.

OriginalL'auteur farmdve | 2012-09-18