2012-10-14 16 views
0

我有通过Diffie-Helman算法交换会话密钥或几乎交换的程序。所有操作都是2个类别:一个接收数据并计算私钥,将其设置为二级,在收到DH的公共部分后计算对称密钥。 程序使用Qt和QCA。 m_sessionKey如何检查为什么QCA DHPrivateKey没有创建对称密钥

QCA::Initializer init; 
QCA::DLGroup group(prime, p); 
QCA::SecureArray remoteKey(m_remoteKey); 
QCA::DHPublicKey pk(group, remoteKey); 
m_sessionKey = m_localKey.deriveKey(pk); 

但会话密钥总是空的(: 私人密钥被存储为插件类成员:

QCA::DHPrivateKey m_localKey; 

接收另一侧密钥的公共部分(如QByteArray中)之后,它计算对称的密钥。 isEmpty()和m_sessionKey.isNull()是true)。 设置了值并且它们交换正确(接收远程部分公钥), m_localKey.isNull()和pk.isNull()返回正确的值(false)。

奇怪的部分是,当我运行测试时,它的工作原理。测试使用相同的顺序操作,只是在一个类中创建私钥,但获得对称密钥的逻辑是相同的,并且用于该类的类是相同的。

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

回答

0

不幸的是,代码丢失了,所以无法确定,但问题可能在2个地方 - 传输/接收数据和太多的QCA ::初始化器调用。

在设置QCA ::初始化器在main和[re]写入数据交换代码之后它就起作用了。 我不知道如何检查错误,如果发生这种情况仍然令人伤心,所以如果有人知道请分享这些知识。