我试图PK11_PrivDecryptPKCS1
在我的代码中复制 NSS lib 函数的行为,这样我就可以查明它失败的原因。它总是返回一个SECFailure
.
我在这里看到这个函数创建一个参数并调用pk11_PrivDecryptRaw
. 现在在pk11_PrivDecryptRaw
(同一文件,第 833 行)中,我看到 if 可以返回SECFailure
3 个代码块:
首先如果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
这次我得到了一个未定义的参考。
我该如何调试呢?