我正在尝试在我的代码中复制NSS lib的PK11_PrivDecryptPKCS1
函数的行为,以便我可以找出它失败的原因。它总是返回SECFailure
。
我看到here此函数会创建一个参数并调用pk11_PrivDecryptRaw
。现在在pk11_PrivDecryptRaw
(同一个文件,第833行)中,我看到如果可以在3个代码块中返回SECFailure
:
首先是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
的未定义参考。
我该如何调试?