From 0ca4c41a9780814de19b997f1635668781dd5fdb Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Sun, 10 Feb 2019 23:08:14 -0500 Subject: Add ed25519 SignStream and VerifyStream functions (GH #796, PR #797) --- xed25519.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'xed25519.cpp') diff --git a/xed25519.cpp b/xed25519.cpp index 6207e7e1..0ab77876 100644 --- a/xed25519.cpp +++ b/xed25519.cpp @@ -685,6 +685,17 @@ size_t ed25519Signer::SignAndRestart(RandomNumberGenerator &rng, PK_MessageAccum return ret == 0 ? SIGNATURE_LENGTH : 0; } +size_t ed25519Signer::SignStream (RandomNumberGenerator &rng, std::istream& stream, byte *signature) const +{ + CRYPTOPP_ASSERT(signature != NULLPTR); CRYPTOPP_UNUSED(rng); + + const ed25519PrivateKey& pk = static_cast(GetPrivateKey()); + int ret = Donna::ed25519_sign(stream, pk.GetPrivateKeyBytePtr(), pk.GetPublicKeyBytePtr(), signature); + CRYPTOPP_ASSERT(ret == 0); + + return ret == 0 ? SIGNATURE_LENGTH : 0; +} + // ******************** ed25519 Verifier ************************* // bool ed25519PublicKey::GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const @@ -856,4 +867,14 @@ bool ed25519Verifier::VerifyAndRestart(PK_MessageAccumulator &messageAccumulator return ret == 0; } +bool ed25519Verifier::VerifyStream(std::istream& stream, const byte *signature, size_t signatureLen) const +{ + CRYPTOPP_ASSERT(signatureLen == SIGNATURE_LENGTH); + + const ed25519PublicKey& pk = static_cast(GetPublicKey()); + int ret = Donna::ed25519_sign_open(stream, pk.GetPublicKeyBytePtr(), signature); + + return ret == 0; +} + NAMESPACE_END // CryptoPP -- cgit v1.2.1