2

我试图PK11_PrivDecryptPKCS1在我的代码中复制 NSS lib 函数的行为,这样我就可以查明它失败的原因。它总是返回一个SECFailure.

我在这里看到这个函数创建一个参数并调用pk11_PrivDecryptRaw. 现在在pk11_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