Qt 如何检查QCA DHPrivateKey未创建对称键的原因

Qt 如何检查QCA DHPrivateKey未创建对称键的原因,qt,cryptography,Qt,Cryptography,我有一个通过Diffie-Helman算法交换会话密钥的程序。所有操作分为两类:一类接收数据并计算私钥,将其设置为第二类,其中对称密钥在接收DH的公共部分后计算。 程序使用Qt和QCA。 私钥存储为小部件类成员: QCA::DHPrivateKey m_localKey; 接收到另一侧键的公共部分(如QByteArray)后,它计算对称键: QCA::Initializer init; QCA::DLGroup group(prime, p); QCA::SecureArray remoteK

我有一个通过Diffie-Helman算法交换会话密钥的程序。所有操作分为两类:一类接收数据并计算私钥,将其设置为第二类,其中对称密钥在接收DH的公共部分后计算。 程序使用Qt和QCA。 私钥存储为小部件类成员:

QCA::DHPrivateKey m_localKey;
接收到另一侧键的公共部分(如QByteArray)后,它计算对称键:

QCA::Initializer init;
QCA::DLGroup group(prime, p);
QCA::SecureArray remoteKey(m_remoteKey);
QCA::DHPublicKey pk(group, remoteKey);
m_sessionKey = m_localKey.deriveKey(pk);
但会话密钥始终为空(m_sessionKey.isEmpty()和m_sessionKey.isNull()为真)。 值已设置且交换正确(远程部件公钥按原样接收), m_localKey.isNull()和pk.isNull()返回正确的值(false)

奇怪的是,当我运行测试时,它工作了。测试使用相同的顺序操作—仅在一个类中创建私钥,但获取对称密钥的逻辑是相同的,用于该操作的类也是相同的


我的问题是为什么它在测试和单独的程序中表现不同。是否有可能从QCA::DHPrivateKey获取有关deriveKey()中出错原因的任何错误/调试信息?

遗憾的是,代码丢失,因此无法确定是否检查,但问题可能出在两个地方-传输/接收数据和过多的QCA::Initializer调用

在main中设置QCA::Initializer并[重新]写入数据交换代码后,它就可以工作了。 很遗憾,我不知道如何检查错误,如果发生这种情况,那么如果有人知道,请分享这些知识