CryptoPP::ed25519::Verifier 显示与 libsignal

问题描述

我正在尝试使用 CryptoPP 实施 curve25519 验证。我首先尝试了 libsignal 库,女巫显示了正确的结果。然后我用 CryptoPP 尝试了相同的数据,但显示错误的结果。

这是使用 libsignal 验证签名的代码

string pub = str2hex("0504f05568cc7a16fa9b4bc1c9d9294a80b7727e349365f855031a180bf0f80910");
ec_public_key* pub_key;
curve_decode_point(&pub_key,(uint8_t*)pub.data(),pub.size(),0);

string message = str2hex("05f1fd491d63f1860bdaf3f9b0eb46c2494b7f184a32d9e6c859a421ad284f4307");
string signature = str2hex("5e525df3360ea62281efe8fb9e183521105bb3d9ba8ad43be9fac9d87dd216a6ea9e64099f6f05fbcd6e5a39ab239aad8c1e03d27a1378e4bcbf8937eac4300a");

int ret = curve_verify_signature(
    pub_key,(uint8_t*)message.data(),message.size(),(uint8_t*)signature.data(),signature.size()
    );

cout << "ret: " << ret << endl; // shows 1 (correct)

结果为 1,表示正确。请注意,libsignal 要求 pub_key 以字节 0x05(密钥类型)开头,而不是此处的 CryptoPP

使用CryptoPP代码

string pub = str2hex("04f05568cc7a16fa9b4bc1c9d9294a80b7727e349365f855031a180bf0f80910");

string message = str2hex("05f1fd491d63f1860bdaf3f9b0eb46c2494b7f184a32d9e6c859a421ad284f4307");
string signature = str2hex("5e525df3360ea62281efe8fb9e183521105bb3d9ba8ad43be9fac9d87dd216a6ea9e64099f6f05fbcd6e5a39ab239aad8c1e03d27a1378e4bcbf8937eac4300a");

ed25519::Verifier verifier((uint8_t*)pub.data());
bool ret = verifier.VerifyMessage(
    (uint8_t*)message.data(),signature.size()
    );
cout << "ret: " << ret << endl; // shows 0 (wrong)

显示为0,代码有什么问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)