Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Mar 4, 2023. It is now read-only.
/QtDataSyncPublic archive

Commitf5972ac

Browse files
committed
added ed25519
1 parenteb8d9e5 commitf5972ac

File tree

4 files changed

+68
-18
lines changed

4 files changed

+68
-18
lines changed

‎src/datasync/cryptocontroller.cpp

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,18 @@ class EccKeyScheme : public ClientCrypto::KeyScheme
9898
typename TScheme::PrivateKey _key;
9999
};
100100

101+
classEd25519KeyScheme :publicClientCrypto::KeyScheme
102+
{
103+
public:
104+
QByteArrayname()constoverride;
105+
voidcreatePrivateKey(RandomNumberGenerator &rng,const QVariant &keyParam)override;
106+
PKCS8PrivateKey &privateKeyRef()override;
107+
QSharedPointer<X509PublicKey>createPublicKey()constoverride;
108+
109+
private:
110+
ed25519PrivateKey _key;
111+
};
112+
101113
// ------------- CryptoController Implementation -------------
102114

103115
#defineQTDATASYNC_LOG QTDATASYNC_LOG_CONTROLLER
@@ -1143,8 +1155,8 @@ void ClientCrypto::setSignatureKey(const QByteArray &name)
11431155
_signKey.reset(new EccKeyScheme<EcdsaScheme>());
11441156
elseif(stdStr ==EcnrScheme::StaticAlgorithmName())
11451157
_signKey.reset(new EccKeyScheme<EcnrScheme>());
1146-
elseif(stdStr =="ed25519")
1147-
_signKey.reset(newEccKeyScheme<Ed25519Scheme>());
1158+
elseif(name ==AsymmetricCrypto::Ed25519SchemeName)
1159+
_signKey.reset(newEd25519KeyScheme());
11481160
else
11491161
throwCryptoPP::Exception(CryptoPP::Exception::NOT_IMPLEMENTED,"Signature Scheme\"" + stdStr +"\" not supported");
11501162
}
@@ -1162,7 +1174,7 @@ void ClientCrypto::setSignatureKey(Setup::SignatureScheme scheme)
11621174
setSignatureKey(QByteArray::fromStdString(EcnrScheme::StaticAlgorithmName()));
11631175
break;
11641176
case Setup::ED25519:
1165-
setSignatureKey(QByteArray::fromStdString("ed25519"));
1177+
setSignatureKey(AsymmetricCrypto::Ed25519SchemeName);
11661178
break;
11671179
default:
11681180
Q_UNREACHABLE();
@@ -1329,6 +1341,38 @@ QSharedPointer<X509PublicKey> EccKeyScheme<TScheme>::createPublicKey() const
13291341
return key;
13301342
}
13311343

1344+
1345+
1346+
QByteArrayEd25519KeyScheme::name()const
1347+
{
1348+
return AsymmetricCrypto::Ed25519SchemeName;
1349+
}
1350+
1351+
voidEd25519KeyScheme::createPrivateKey(RandomNumberGenerator &rng,const QVariant &keyParam)
1352+
{
1353+
Q_UNUSED(keyParam)
1354+
//special hack: save and load again for consistency (needed for fingerprint)
1355+
ed25519PrivateKey tmpKey;
1356+
tmpKey.GenerateRandom(rng, g_nullNameValuePairs);
1357+
QByteArray buffer;
1358+
QByteArraySinksink(buffer);
1359+
tmpKey.Save(sink);
1360+
QByteArraySourcesource(buffer,true);
1361+
_key.Load(source);
1362+
}
1363+
1364+
PKCS8PrivateKey &Ed25519KeyScheme::privateKeyRef()
1365+
{
1366+
return _key;
1367+
}
1368+
1369+
QSharedPointer<X509PublicKey>Ed25519KeyScheme::createPublicKey()const
1370+
{
1371+
auto key = QSharedPointer<ed25519PublicKey>::create();
1372+
_key.MakePublicKey(*key);
1373+
return key;
1374+
}
1375+
13321376
// ------------- Exceptions Implementation -------------
13331377

13341378
CryptoException::CryptoException(const Defaults &defaults,const QString &message,const CppException &cExcept) :

‎src/messages/asymmetriccrypto.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ QSharedPointer<PK_Verifier> SignatureScheme<AsymmetricCrypto::Ed25519Scheme>::ve
4040

4141
// ------------- Main Implementation -------------
4242

43+
const QByteArray AsymmetricCrypto::Ed25519SchemeName ="ed25519";
44+
4345
AsymmetricCrypto::AsymmetricCrypto(const QByteArray &signatureScheme,const QByteArray &encryptionScheme, QObject *parent) :
4446
AsymmetricCrypto(parent)
4547
{
@@ -153,7 +155,7 @@ void AsymmetricCrypto::setSignatureScheme(const QByteArray &name)
153155
_signature.reset(new SignatureScheme<EcdsaScheme>());
154156
elseif(stdStr ==EcnrScheme::StaticAlgorithmName())
155157
_signature.reset(new SignatureScheme<EcnrScheme>());
156-
elseif(stdStr =="ed25519")
158+
elseif(name ==Ed25519SchemeName)
157159
_signature.reset(new SignatureScheme<Ed25519Scheme>());
158160
else
159161
throwException(Exception::NOT_IMPLEMENTED,"Signature Scheme\"" + stdStr +"\" not supported");
@@ -249,7 +251,7 @@ QSharedPointer<PK_Verifier> SignatureScheme<TScheme>::verify(const X509PublicKey
249251
template<>
250252
QByteArray SignatureScheme<AsymmetricCrypto::Ed25519Scheme>::name()const
251253
{
252-
return"ed25519";
254+
returnAsymmetricCrypto::Ed25519SchemeName;
253255
}
254256

255257
template<>
@@ -261,15 +263,15 @@ QSharedPointer<X509PublicKey> SignatureScheme<AsymmetricCrypto::Ed25519Scheme>::
261263
template<>
262264
QSharedPointer<PK_Signer> SignatureScheme<AsymmetricCrypto::Ed25519Scheme>::sign(const PKCS8PrivateKey &pKey)const
263265
{
264-
auto signer = QSharedPointer<AsymmetricCrypto::Ed25519Scheme::Signer>();
266+
auto signer = QSharedPointer<AsymmetricCrypto::Ed25519Scheme::Signer>::create();
265267
signer->AccessPrivateKey().AssignFrom(pKey);
266268
return signer;
267269
}
268270

269271
template<>
270272
QSharedPointer<PK_Verifier> SignatureScheme<AsymmetricCrypto::Ed25519Scheme>::verify(const X509PublicKey &pubKey)const
271273
{
272-
auto verifier = QSharedPointer<AsymmetricCrypto::Ed25519Scheme::Verifier>();
274+
auto verifier = QSharedPointer<AsymmetricCrypto::Ed25519Scheme::Verifier>::create();
273275
verifier->AccessKey().AssignFrom(pubKey);
274276
return verifier;
275277
}

‎src/messages/asymmetriccrypto_p.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ class Q_DATASYNC_EXPORT AsymmetricCrypto : public QObject
5454
const QByteArray &encryptionScheme,
5555
QObject *parent =nullptr);
5656

57+
conststatic QByteArray Ed25519SchemeName;
58+
5759
QByteArraysignatureScheme()const;
5860
QByteArrayencryptionScheme()const;
5961

‎tests/auto/datasync/TestCryptoController/tst_cryptocontroller.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -378,27 +378,29 @@ void TestCryptoController::cryptoData()
378378
#if CRYPTOPP_VERSION > 600
379379
<< Setup::ECIES_ECP_SHA3_512
380380
<<QVariant(Setup::brainpoolP256r1)
381+
<<true
382+
<<true;
381383
#else
382384
<< Setup::RSA_OAEP_SHA3_512
383-
<<QVariant(2048)
384-
#endif
385+
<< QVariant{1024}
385386
<<true
386-
<<true;
387+
<<false;
388+
#endif
387389

388390
QTest::newRow("ECNR:secp256r1") << Setup::ECNR_ECP_SHA3_512
389391
<<QVariant(Setup::secp256r1)
390392
<< Setup::RSA_OAEP_SHA3_512
391-
<<QVariant(2048)
393+
<< QVariant{1024}
392394
<<true
393395
<<false;
394396

395-
#if CRYPTOPP_VERSION >1000
396-
QTest::newRow("ECNR:secp256r1") << Setup::ED25519
397-
<< QVariant{}
398-
<< Setup::RSA_OAEP_SHA3_512
399-
<<QVariant(1024)
400-
<<true
401-
<<false;
397+
#if CRYPTOPP_VERSION >800
398+
QTest::newRow("ed25519") << Setup::ED25519
399+
<< QVariant{}
400+
<< Setup::RSA_OAEP_SHA3_512
401+
<< QVariant{1024}
402+
<<true
403+
<<false;
402404
#endif
403405
}
404406

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp