summaryrefslogtreecommitdiff
path: root/xed25519.cpp
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2019-02-10 23:08:14 -0500
committerGitHub <noreply@github.com>2019-02-10 23:08:14 -0500
commit0ca4c41a9780814de19b997f1635668781dd5fdb (patch)
tree88a6e132c17f01b8b1d8945abb94defce66ad482 /xed25519.cpp
parent1c6a96a57eadef520af26c61afc43e8aba6da910 (diff)
downloadcryptopp-git-0ca4c41a9780814de19b997f1635668781dd5fdb.tar.gz
Add ed25519 SignStream and VerifyStream functions (GH #796, PR #797)
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