OpenSSL関数エラーについて
■ OpenSSLのd2i_RSAPublicKey関数の戻り値がNULLの件
<環境>
WindowsXP
OpenSSLバージョン1.0.0a
VC2005
<現象>
OpenSSLのライブラリ関数 d2i_RSAPublicKey関数を使用して、RSA構造体に公開鍵要素を取得
したいのですが、NULLが返ってきてしまいます。(入力は、公開鍵)
ERR_error_string(ERR_get_error(), NULL); 関数でエラーを確認したところ、
『 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag 』
と表示されます。
以下に、手順を追って、実行したことを書きます。
何が悪いのか、ご指摘いただきたいです。
(PEM形式は使用しない前提です。)
[鍵ペア生成(DER方式)]
まず、DOS窓を立ち上げて、下記のようにDERフォーマットの
RSA鍵ペアを作成しました。
openssl genrsa -out pri_test.der 2048
openssl rsa -in pri_test.pem -outform DER -out pri_test.der
openssl rsa -inform DER -outform DER -in pri_test.der -pubout -out pub_test.der
秘密鍵:pri_test.der
公開鍵:pub_test.der
[公開鍵の読み込み と d2i_RSAPublicKey関数のコール]
公開鍵:pub_test.der を、VCの入力ファイルに入力し、
d2i_RSAPublicKey関数をコールしました。
// file read
/* 入力ファイルを開く */
FILE* file_p;
RSA* rsa;
unsigned char buff[1024];
unsigned char* pbuff;
file_p = "pub_test.der", "rb");
if( NULL == pF_pubca ) {
return -1;
}
// fileサイズを調べます(省略します)
filesize = 0x126;
// fileをバッファへ読み込みます
memset( buff, 0, sizeof(buff) );
fread( buff, 1, filesize, file_p );
// buff には公開鍵pub_test.derの値 と サイズ分、
// 全て正常に格納されている事を確認済みです
// ダブルポインタを作るために、ポインタバッファに渡します。
pBuff = pubca_buff;
// d2i_RSAPublicKey関数をコールし、RSA構造体に公開鍵要素を取得します。
rsa = d2i_RSAPublicKey( NULL, &pBuff, filesize );
// ↑ここで、rsa構造体にはNULLが格納されています。
// エラーのログを出力します。
printf("%s\n", ERR_error_string(ERR_get_error(), NULL));
// ⇒ 『 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag 』
// と表示されてしまいます。
<備考>
同様の方法で、入力を秘密鍵に設定し、d2i_RSAPrivateKey関数であれば、
正常にRSA構造体に各要素が格納されます。
何か、公開鍵をRSA構造体に格納するために、別の方法があるのでしょうか。
お礼
できました。 Lhaz のバージョンが古すぎました。 ありがとうございます。