summaryrefslogtreecommitdiff
path: root/xed25519.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xed25519.cpp')
-rw-r--r--xed25519.cpp21
1 files changed, 21 insertions, 0 deletions
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<const ed25519PrivateKey&>(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<const ed25519PublicKey&>(GetPublicKey());
+ int ret = Donna::ed25519_sign_open(stream, pk.GetPublicKeyBytePtr(), signature);
+
+ return ret == 0;
+}
+
NAMESPACE_END // CryptoPP