7
7
8
8
using namespace QtDataSync ;
9
9
using namespace CryptoPP ;
10
+ using namespace CryptoQQ ;
10
11
11
12
template <typename TScheme>
12
13
class SignatureScheme : public AsymmetricCrypto ::Signature
@@ -28,6 +29,15 @@ class EncryptionScheme : public AsymmetricCrypto::Encryption
28
29
QSharedPointer<PK_Decryptor> decrypt (const PKCS8PrivateKey &pKey) const override ;
29
30
};
30
31
32
+ template <>
33
+ QByteArray SignatureScheme<AsymmetricCrypto::Ed25519Scheme>::name() const ;
34
+ template <>
35
+ QSharedPointer<X509PublicKey> SignatureScheme<AsymmetricCrypto::Ed25519Scheme>::createNullKey() const ;
36
+ template <>
37
+ QSharedPointer<PK_Signer> SignatureScheme<AsymmetricCrypto::Ed25519Scheme>::sign(const PKCS8PrivateKey &pKey) const ;
38
+ template <>
39
+ QSharedPointer<PK_Verifier> SignatureScheme<AsymmetricCrypto::Ed25519Scheme>::verify(const X509PublicKey &pubKey) const ;
40
+
31
41
// ------------- Main Implementation -------------
32
42
33
43
AsymmetricCrypto::AsymmetricCrypto (const QByteArray &signatureScheme, const QByteArray &encryptionScheme, QObject *parent) :
@@ -143,6 +153,8 @@ void AsymmetricCrypto::setSignatureScheme(const QByteArray &name)
143
153
_signature.reset (new SignatureScheme<EcdsaScheme>());
144
154
else if (stdStr == EcnrScheme::StaticAlgorithmName ())
145
155
_signature.reset (new SignatureScheme<EcnrScheme>());
156
+ else if (stdStr == " ed25519" )
157
+ _signature.reset (new SignatureScheme<Ed25519Scheme>());
146
158
else
147
159
throw Exception (Exception::NOT_IMPLEMENTED, " Signature Scheme \" " + stdStr + " \" not supported" );
148
160
}
@@ -234,6 +246,34 @@ QSharedPointer<PK_Verifier> SignatureScheme<TScheme>::verify(const X509PublicKey
234
246
return QSharedPointer<typename TScheme::Verifier>::create (pubKey);
235
247
}
236
248
249
+ template <>
250
+ QByteArray SignatureScheme<AsymmetricCrypto::Ed25519Scheme>::name() const
251
+ {
252
+ return " ed25519" ;
253
+ }
254
+
255
+ template <>
256
+ QSharedPointer<X509PublicKey> SignatureScheme<AsymmetricCrypto::Ed25519Scheme>::createNullKey() const
257
+ {
258
+ return QSharedPointer<ed25519PublicKey>::create ();
259
+ }
260
+
261
+ template <>
262
+ QSharedPointer<PK_Signer> SignatureScheme<AsymmetricCrypto::Ed25519Scheme>::sign(const PKCS8PrivateKey &pKey) const
263
+ {
264
+ auto signer = QSharedPointer<AsymmetricCrypto::Ed25519Scheme::Signer>();
265
+ signer->AccessPrivateKey ().AssignFrom (pKey);
266
+ return signer;
267
+ }
268
+
269
+ template <>
270
+ QSharedPointer<PK_Verifier> SignatureScheme<AsymmetricCrypto::Ed25519Scheme>::verify(const X509PublicKey &pubKey) const
271
+ {
272
+ auto verifier = QSharedPointer<AsymmetricCrypto::Ed25519Scheme::Verifier>();
273
+ verifier->AccessKey ().AssignFrom (pubKey);
274
+ return verifier;
275
+ }
276
+
237
277
238
278
239
279
template <typename TScheme>
0 commit comments