在查看ed25519签名方案的现有实现时,我发现donna实现(找到here)产生的签名不能通过supercop实现验证(找到here),但超级签名可以通过donna实施来验证。有人可以解释为什么两个所谓的相同签名方案的实现只产生部分兼容的签名吗?我错过了什么?这是一个展示我的意思的例子:
secret key = 50f26a6d0e454337554274d703033c21a06fecfcb0457b15214e41ea3228ac51e2b9f0ca0f6510cfdd24325ac6676cdd98a9484336ba36c876fd93aa439d8b72
public key = eddaef2fab3d1412ea1f2517b5a50439c28c27d6aefafce38f9290c17e1e7d56
donna signature = f4b79662b1973be8774c5d23044fe4b25858e7c362923e1fc99cc98e89e099c3f574dca3e47d7a131b43860fabc34b6764ccabb4f9f21b6cae54be5fc8193103
//not verifiable by supercop
supercop signature = 2f0ae6396d4d72fb47c12df6560747f20dc675e0b2d7e711caf68a03ced9309b9abd736cb204e789b95c2f08e0be4254ce69974a4064e40ce7094e288b7cbf03
//verifiable by donna
为了获得上述结果,我使用了来自 ed25119-donna 的 ed25519_sign()和 supercop 库(它们在两者中都被称为相同库)。
验证我使用来自 ed25519-donna 的 ed25519_sign_open()以及 supercop 中 ed25519_verify()的签名