diff --git a/src/cpp/Crypto/IKeyPair.h b/src/cpp/Crypto/IKeyPair.h index 301337af4..584631326 100644 --- a/src/cpp/Crypto/IKeyPair.h +++ b/src/cpp/Crypto/IKeyPair.h @@ -11,6 +11,8 @@ * */ +#include "../SingletonManager/MemoryManager.h" + class IKeyPair { public: diff --git a/src/cpp/Crypto/KeyPairEd25519.cpp b/src/cpp/Crypto/KeyPairEd25519.cpp index 856eac357..7439bdfa6 100644 --- a/src/cpp/Crypto/KeyPairEd25519.cpp +++ b/src/cpp/Crypto/KeyPairEd25519.cpp @@ -4,7 +4,7 @@ #include "../SingletonManager/ErrorManager.h" -#include "../lib/BinHexConverter.h" +#include "../lib/DataTypeConverter.h" #include "Passphrase.h" @@ -83,7 +83,7 @@ KeyPairEd25519* KeyPairEd25519::create(const Passphrase* passphrase) //*/ KeyPairEd25519* key_pair = new KeyPairEd25519; - if (key_pair->mSodiumSecret) { + if (!key_pair->mSodiumSecret) { key_pair->mSodiumSecret = mm->getFreeMemory(crypto_sign_SECRETKEYBYTES); } @@ -116,7 +116,7 @@ MemoryBin* KeyPairEd25519::sign(const MemoryBin* message) if (crypto_sign_detached(*signBinBuffer, &actualSignLength, *message, messageSize, *mSodiumSecret)) { em->addError(new Error(functionName, "sign failed")); - auto messageHex = convertBinToHex(message); + auto messageHex = DataTypeConverter::binToHex(message); em->addError(new ParamError(functionName, "message as hex", messageHex)); mm->releaseMemory(signBinBuffer); return nullptr; @@ -126,7 +126,7 @@ MemoryBin* KeyPairEd25519::sign(const MemoryBin* message) // Incorrect signature! //printf("c[KeyBuffer::%s] sign verify failed\n", __FUNCTION__); em->addError(new Error(functionName, "sign verify failed")); - auto messageHex = convertBinToHex(message); + auto messageHex = DataTypeConverter::binToHex(message); em->addError(new ParamError(functionName, "message as hex", messageHex)); mm->releaseMemory(signBinBuffer); return nullptr; diff --git a/src/cpp/test/crypto/TestKeyPairEd25519.cpp b/src/cpp/test/crypto/TestKeyPairEd25519.cpp new file mode 100644 index 000000000..436756a18 --- /dev/null +++ b/src/cpp/test/crypto/TestKeyPairEd25519.cpp @@ -0,0 +1,27 @@ +#include "TestPassphrase.h" + +#include "../../Crypto/KeyPair.h" +#include "../../Crypto/KeyPairEd25519.h" +#include "../../Crypto/Passphrase.h" +#include "../../lib/DataTypeConverter.h" + +TEST_F(PassphraseTest, TestEd25519KeyPair) { + for (auto it = mPassphrasesForTesting.begin(); it != mPassphrasesForTesting.end(); it++) { + auto test_data_set = *it; + auto mnemonic = &ServerConfig::g_Mnemonic_WordLists[test_data_set.mnemonicType]; + auto tr = Passphrase::create(test_data_set.wordIndices, mnemonic); + + auto word_indices = tr->getWordIndices(); + + auto key_pair_ed25519 = KeyPairEd25519::create(tr); + KeyPair key_pair; + key_pair.generateFromPassphrase(test_data_set.passphrases[test_data_set.mnemonicType].data(), mnemonic); + + EXPECT_EQ(key_pair.getPubkeyHex(), test_data_set.pubkeyHex); + EXPECT_EQ(DataTypeConverter::pubkeyToHex(key_pair_ed25519->getPublicKey()), key_pair.getPubkeyHex()); + + //auto key_pair_old + delete key_pair_ed25519; + } +} +