diff options
author | Jeffrey Walton <noloader@gmail.com> | 2019-02-10 23:08:14 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-10 23:08:14 -0500 |
commit | 0ca4c41a9780814de19b997f1635668781dd5fdb (patch) | |
tree | 88a6e132c17f01b8b1d8945abb94defce66ad482 /xed25519.cpp | |
parent | 1c6a96a57eadef520af26c61afc43e8aba6da910 (diff) | |
download | cryptopp-git-0ca4c41a9780814de19b997f1635668781dd5fdb.tar.gz |
Add ed25519 SignStream and VerifyStream functions (GH #796, PR #797)
Diffstat (limited to 'xed25519.cpp')
-rw-r--r-- | xed25519.cpp | 21 |
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
|