私は自分の問題を示すためにこのサンプルアプリケーションを提供しています
#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;
}
私がやろうとしているのは、秘密鍵から公開鍵を表示することです(楕円形の秘密鍵である必要があります)。同様の問題に遭遇するまで、私はそれを行う方法を知りませんでした
ECDSA署名で使用するためにOpenSSLランダムデータをフィードするにはどうすればよいですか?
これは、公開鍵を取得し、OpenSSLソースに従って内部的にBN_hex2bnを実行するhex2pointの代わりにEC_POINT_bn2pointを使用する方法を自分自身に指摘したところです。
では、なぜEC_POINT_bn2pointがNULLを返すのですか?私はOpenSSLを再コンパイルし、それが失敗する理由を理解するためにいくつかのデバッグルーチンを配置することを真剣に検討しています。