2

コードで NSS lib のPK11_PrivDecryptPKCS1関数の動作を再現しようとしているので、失敗した理由を特定できます。常に を返しますSECFailure

ここで、この関数がパラメーターを作成して を呼び出すことを見てきましたpk11_PrivDecryptRawpk11_PrivDecryptRaw(同じファイル、833行目)で、ifがSECFailure3つのコードブロックで返されることがわかりました:

最初の場合key->keyType != rsaKey。だから私はデバッグkey->keyTypeして、それが に等しいことを見ましたrsaKey

次の部分はこれです:

session = pk11_GetNewSession(slot,&owner);
(...)
crv = PK11_GETTAB(slot)->C_DecryptInit(session, mech, key->pkcs11ID);
if (crv != CKR_OK) {
    (...)
    return SECFailure;
}

そのため、crv に返される内容をデバッグするために、このコードをコードに複製しました。これをやろうとしたとき、いくつかのシンボルがどこにあるか.hを見つけるのに苦労しました。secmodi.h" "、" " インクルードが見つかりませんでしたsecmodti.h。libnss3-dev のソース コードでそれらを見つけました。

さて、問題はリンケージにあります。エラーが発生します

の未定義参照pk11_GetNewSession。次のコマンドを使用して、この関数の /usr/lib ディレクトリ全体を検索しました。

find . -name \*.so -type f -print -exec readelf -s {} \; 2> /dev/null | grep "\.so\|PK11" 

しかし、それは見つかりませんでした。.so で公開されていないライブラリの内部関数であるべきだと考えています。

この呼び出しをこの関数内のコードに置き換えようとすると、つまり

PK11_GETTAB(slot)->C_OpenSession(slot->slotID,CKF_SERIAL_SESSION,slot,pk11_notify,&session)

pk11_notify今回は未定義の参照を取得します。

これをデバッグするにはどうすればよいですか?

4

0 に答える 0