1

現在、C++ ソフトウェアでlibxmlsecを使用しており、メモリから RSA 秘密鍵をロードしようとしています。これを行うために、API を検索したところ、この関数が見つかりました。

バイナリ データ、サイズ、フォーマット文字列、およびいくつかの PEM コールバック関連のパラメーターを使用します。

関数を呼び出すと、スタックし、CPU 時間を 100% 使用して戻りません。何が間違っているのかを知る方法がないので、かなり面倒です。

これが私のコードです:

d_xmlsec_dsig_context->signKey =
    xmlSecCryptoAppKeyLoadMemory(
        reinterpret_cast<const xmlSecByte*>(data),
        static_cast<xmlSecSize>(datalen), 
        xmlSecKeyDataFormatBinary,
        NULL,
        NULL,
        NULL
    );

dataは、私の RSA キー ( OpenSSLのを使用) の raw バイトとのサイズをconst char*指しています。i2d_RSAPrivateKey()datalendata

テスト用の秘密鍵にはパスフレーズがないため、当面はコールバックを使用しないことにしました。

誰かがすでに似たようなことをしていますか? この問題を解決するために変更/テストできることはありますか?

昨日ライブラリを発見したばかりなので、ここで何か明らかなことを見逃しているかもしれません。私はそれを見ることができません。

ご助力ありがとうございます。

4

1 に答える 1

0

OpenSSL 関数を使用して の形式dataを PEM にPEM_write_bio_RSAPrivateKey()変更し、3 番目の引数を への呼び出しに変更してxmlSecCryptoAppKeyLoadMemory()、新しい形式と一致するようにしました。

新しいコードは次のとおりです。

d_xmlsec_dsig_context->signKey =
xmlSecCryptoAppKeyLoadMemory(
    reinterpret_cast<const xmlSecByte*>(data), // data is now in PEM format
    static_cast<xmlSecSize>(datalen), 
    xmlSecKeyDataFormatPem, // Updated
    NULL,
    NULL,
    NULL
);

それ以来、すべてが機能します。通話が停止することはなくなりました。

于 2010-04-08T15:19:33.290 に答える