From ea059d6d49d3d1bcef44e35fe5957f466262f948 Mon Sep 17 00:00:00 2001 From: subtly Date: Tue, 14 Oct 2014 19:30:20 +0200 Subject: [PATCH 1/2] cryptopp ecdh and ecies --- test/TestHelperCrypto.h | 56 ++++++++++++++ test/crypto.cpp | 167 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 219 insertions(+), 4 deletions(-) create mode 100644 test/TestHelperCrypto.h diff --git a/test/TestHelperCrypto.h b/test/TestHelperCrypto.h new file mode 100644 index 000000000..6feeeb97f --- /dev/null +++ b/test/TestHelperCrypto.h @@ -0,0 +1,56 @@ +/* + This file is part of cpp-ethereum. + + cpp-ethereum is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + cpp-ethereum is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with cpp-ethereum. If not, see . + */ +/** @file TestHelperCrypto.h + * @author Alex Leverington + * @date 2014 + */ + +#pragma once + +//#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace CryptoPP; + +void SavePrivateKey(const PrivateKey& key, const string& file = "ecies.private.key") +{ + FileSink sink(file.c_str()); + key.Save(sink); +} + +void SavePublicKey(const PublicKey& key, const string& file = "ecies.public.key") +{ + FileSink sink(file.c_str()); + key.Save(sink); +} + +void LoadPrivateKey(PrivateKey& key, const string& file = "ecies.private.key") +{ + FileSource source(file.c_str(), true); + key.Load(source); +} + +void LoadPublicKey(PublicKey& key, const string& file = "ecies.public.key") +{ + FileSource source(file.c_str(), true); + key.Load(source); +} diff --git a/test/crypto.cpp b/test/crypto.cpp index 55feb1a54..25106a77f 100644 --- a/test/crypto.cpp +++ b/test/crypto.cpp @@ -27,13 +27,170 @@ #include #include #include +#include "TestHelperCrypto.h" using namespace std; using namespace dev; -using namespace dev::eth; +namespace dev +{ +namespace crypto +{ + +inline CryptoPP::AutoSeededRandomPool& PRNG() { + static CryptoPP::AutoSeededRandomPool prng; + return prng; +} + +} +} + +using namespace CryptoPP; + +BOOST_AUTO_TEST_SUITE(crypto) + +BOOST_AUTO_TEST_CASE(cryptopp_ecies_message) +{ + cnote << "Testing cryptopp_ecies_message..."; + + string const message("Now is the time for all good men to come to the aide of humanity."); + + AutoSeededRandomPool prng; + + ECIES::Decryptor localDecryptor(prng, ASN1::secp256r1()); + SavePrivateKey(localDecryptor.GetPrivateKey()); + + ECIES::Encryptor localEncryptor(localDecryptor); + SavePublicKey(localEncryptor.GetPublicKey()); -BOOST_AUTO_TEST_CASE(crypto_tests) + ECIES::Decryptor futureDecryptor; + LoadPrivateKey(futureDecryptor.AccessPrivateKey()); + futureDecryptor.GetPrivateKey().ThrowIfInvalid(prng, 3); + + ECIES::Encryptor futureEncryptor; + LoadPublicKey(futureEncryptor.AccessPublicKey()); + futureEncryptor.GetPublicKey().ThrowIfInvalid(prng, 3); + + // encrypt/decrypt with local + string cipherLocal; + StringSource ss1 (message, true, new PK_EncryptorFilter(prng, localEncryptor, new StringSink(cipherLocal) ) ); + string plainLocal; + StringSource ss2 (cipherLocal, true, new PK_DecryptorFilter(prng, localDecryptor, new StringSink(plainLocal) ) ); + + // encrypt/decrypt with future + string cipherFuture; + StringSource ss3 (message, true, new PK_EncryptorFilter(prng, futureEncryptor, new StringSink(cipherFuture) ) ); + string plainFuture; + StringSource ss4 (cipherFuture, true, new PK_DecryptorFilter(prng, futureDecryptor, new StringSink(plainFuture) ) ); + + // decrypt local w/future + string plainFutureFromLocal; + StringSource ss5 (cipherLocal, true, new PK_DecryptorFilter(prng, futureDecryptor, new StringSink(plainFutureFromLocal) ) ); + + // decrypt future w/local + string plainLocalFromFuture; + StringSource ss6 (cipherFuture, true, new PK_DecryptorFilter(prng, localDecryptor, new StringSink(plainLocalFromFuture) ) ); + + + assert(plainLocal == message); + assert(plainFuture == plainLocal); + assert(plainFutureFromLocal == plainLocal); + assert(plainLocalFromFuture == plainLocal); +} + +BOOST_AUTO_TEST_CASE(cryptopp_ecdh_prime) +{ + cnote << "Testing cryptopp_ecdh_prime..."; + + using namespace CryptoPP; + OID curve = ASN1::secp256r1(); + + ECDH::Domain dhLocal(curve); + SecByteBlock privLocal(dhLocal.PrivateKeyLength()); + SecByteBlock pubLocal(dhLocal.PublicKeyLength()); + dhLocal.GenerateKeyPair(dev::crypto::PRNG(), privLocal, pubLocal); + + ECDH::Domain dhRemote(curve); + SecByteBlock privRemote(dhRemote.PrivateKeyLength()); + SecByteBlock pubRemote(dhRemote.PublicKeyLength()); + dhRemote.GenerateKeyPair(dev::crypto::PRNG(), privRemote, pubRemote); + + assert(dhLocal.AgreedValueLength() == dhRemote.AgreedValueLength()); + + // local: send public to remote; remote: send public to local + + // Local + SecByteBlock sharedLocal(dhLocal.AgreedValueLength()); + assert(dhLocal.Agree(sharedLocal, privLocal, pubRemote)); + + // Remote + SecByteBlock sharedRemote(dhRemote.AgreedValueLength()); + assert(dhRemote.Agree(sharedRemote, privRemote, pubLocal)); + + // Test + Integer ssLocal, ssRemote; + ssLocal.Decode(sharedLocal.BytePtr(), sharedLocal.SizeInBytes()); + ssRemote.Decode(sharedRemote.BytePtr(), sharedRemote.SizeInBytes()); + + assert(ssLocal != 0); + assert(ssLocal == ssRemote); +} + +BOOST_AUTO_TEST_CASE(cryptopp_ecdh_aes128_cbc_noauth) +{ + // ECDH gives 256-bit shared while aes uses 128-bits + // Use first 128-bits of shared secret as symmetric key + // IV is 0 + // New connections require new ECDH keypairs + + +} + +BOOST_AUTO_TEST_CASE(cryptopp_eth_fbba) +{ + // Initial Authentication: + // + // New/Known Peer: + // pubkeyL = knownR? ? myKnown : myECDH + // pubkeyR = knownR? ? theirKnown : theirECDH + // + // Initial message = hmac(k=sha3(shared-secret[128..255]), address(pubkeyL)) || ECIES encrypt(pubkeyR, pubkeyL) + // + // Key Exchange (this could occur after handshake messages): + // If peers do not know each other they will need to exchange public keys. + // + // Drop ECDH (this could occur after handshake messages): + // After authentication and/or key exchange, both sides generate shared key + // from their 'known' keys and use this to encrypt all future messages. + // + // v2: If one side doesn't trust the other then a single-use key maybe sent. + // This will need to be tracked for future connections; when non-trusting peer + // wants to trust the other, it can request that it's old, 'new', public key be + // accepted. And, if the peer *really* doesn't trust the other side, it can request + // that a new, 'new', public key be accepted. + // + // Handshake (all or nothing, padded): + // All Peers (except blacklisted): + // + // + // New Peer: + // + // + // Known Untrusted Peer: + // + // + // Known Trusted Peer: + // + // + // Blacklisted Peeer: + // Already dropped by now. + // + // + // MAC: + // ... +} + +BOOST_AUTO_TEST_CASE(eth_keypairs) { cnote << "Testing Crypto..."; secp256k1_start(); @@ -42,7 +199,7 @@ BOOST_AUTO_TEST_CASE(crypto_tests) BOOST_REQUIRE(p.pub() == Public(fromHex("97466f2b32bc3bb76d4741ae51cd1d8578b48d3f1e68da206d47321aec267ce78549b514e4453d74ef11b0cd5e4e4c364effddac8b51bcfc8de80682f952896f"))); BOOST_REQUIRE(p.address() == Address(fromHex("8a40bfaa73256b60764c1bf40675a99083efb075"))); { - Transaction t; + eth::Transaction t; t.nonce = 0; t.receiveAddress = h160(fromHex("944400f4b88ac9589a0f17ed4671da26bddb668b")); t.value = 1000; @@ -70,7 +227,7 @@ int cryptoTest() assert(p.pub() == Public(fromHex("97466f2b32bc3bb76d4741ae51cd1d8578b48d3f1e68da206d47321aec267ce78549b514e4453d74ef11b0cd5e4e4c364effddac8b51bcfc8de80682f952896f"))); assert(p.address() == Address(fromHex("8a40bfaa73256b60764c1bf40675a99083efb075"))); { - Transaction t; + eth::Transaction t; t.nonce = 0; t.receiveAddress = h160(fromHex("944400f4b88ac9589a0f17ed4671da26bddb668b")); t.value = 1000; @@ -156,3 +313,5 @@ int cryptoTest() return 0; } +BOOST_AUTO_TEST_SUITE_END() + From fc14f46a63df93301aa76825a34ee72010c7860c Mon Sep 17 00:00:00 2001 From: subtly Date: Thu, 16 Oct 2014 15:10:54 +0200 Subject: [PATCH 2/2] add headers to cmake --- alethzero/CMakeLists.txt | 5 +++-- eth/CMakeLists.txt | 3 ++- libdevcore/CMakeLists.txt | 7 +++---- libdevcrypto/CMakeLists.txt | 8 +++----- libethcore/CMakeLists.txt | 8 +++----- libethereum/CMakeLists.txt | 8 +++----- libevm/CMakeLists.txt | 8 +++----- libevmface/CMakeLists.txt | 8 +++----- liblll/CMakeLists.txt | 8 +++----- libp2p/CMakeLists.txt | 8 +++----- libqethereum/CMakeLists.txt | 5 +++-- libserpent/CMakeLists.txt | 8 +++----- libwebthree/CMakeLists.txt | 8 +++----- libwhisper/CMakeLists.txt | 8 +++----- test/CMakeLists.txt | 3 ++- third/CMakeLists.txt | 5 +++-- 16 files changed, 46 insertions(+), 62 deletions(-) diff --git a/alethzero/CMakeLists.txt b/alethzero/CMakeLists.txt index c5d1aa0be..4ad06f7a6 100644 --- a/alethzero/CMakeLists.txt +++ b/alethzero/CMakeLists.txt @@ -25,6 +25,7 @@ find_package(Qt5WebKitWidgets REQUIRED) qt5_wrap_ui(ui_Main.h Main.ui) # Set name of binary and add_executable() +file(GLOB HEADERS "*.h") if (APPLE) set(EXECUTEABLE AlethZero) set(BIN_INSTALL_DIR ".") @@ -41,14 +42,14 @@ if (APPLE) set(MACOSX_BUNDLE_ICON_FILE alethzero) include(BundleUtilities) - add_executable(${EXECUTEABLE} MACOSX_BUNDLE alethzero.icns Main.ui ${SRC_LIST}) + add_executable(${EXECUTEABLE} MACOSX_BUNDLE alethzero.icns Main.ui ${SRC_LIST} ${HEADERS}) set_target_properties(${EXECUTEABLE} PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/EthereumMacOSXBundleInfo.plist.in") SET_SOURCE_FILES_PROPERTIES(${EXECUTEABLE} PROPERTIES MACOSX_PACKAGE_LOCATION MacOS) SET_SOURCE_FILES_PROPERTIES(${MACOSX_BUNDLE_ICON_FILE}.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") else () set(EXECUTEABLE alethzero) - add_executable(${EXECUTEABLE} Main.ui ${SRC_LIST}) + add_executable(${EXECUTEABLE} Main.ui ${SRC_LIST} ${HEADERS}) endif () qt5_use_modules(${EXECUTEABLE} Core)# Gui Widgets Network WebKit WebKitWidgets) diff --git a/eth/CMakeLists.txt b/eth/CMakeLists.txt index eee1d258b..087c5314a 100644 --- a/eth/CMakeLists.txt +++ b/eth/CMakeLists.txt @@ -8,7 +8,8 @@ link_directories(../libwebthree) set(EXECUTABLE eth) -add_executable(${EXECUTABLE} ${SRC_LIST}) +file(GLOB HEADERS "*.h") +add_executable(${EXECUTABLE} ${SRC_LIST} ${HEADERS}) target_link_libraries(${EXECUTABLE} webthree) target_link_libraries(${EXECUTABLE} secp256k1) diff --git a/libdevcore/CMakeLists.txt b/libdevcore/CMakeLists.txt index 3f3ecb619..81e210cad 100644 --- a/libdevcore/CMakeLists.txt +++ b/libdevcore/CMakeLists.txt @@ -10,13 +10,12 @@ aux_source_directory(. SRC_LIST) set(EXECUTABLE devcore) -# set(CMAKE_INSTALL_PREFIX ../lib) +file(GLOB HEADERS "*.h") if(ETH_STATIC) - add_library(${EXECUTABLE} STATIC ${SRC_LIST}) + add_library(${EXECUTABLE} STATIC ${SRC_LIST} ${HEADERS}) else() - add_library(${EXECUTABLE} SHARED ${SRC_LIST}) + add_library(${EXECUTABLE} SHARED ${SRC_LIST} ${HEADERS}) endif() -file(GLOB HEADERS "*.h") include_directories(..) diff --git a/libdevcrypto/CMakeLists.txt b/libdevcrypto/CMakeLists.txt index e7f112f95..cee7d130d 100644 --- a/libdevcrypto/CMakeLists.txt +++ b/libdevcrypto/CMakeLists.txt @@ -4,15 +4,13 @@ aux_source_directory(. SRC_LIST) set(EXECUTABLE devcrypto) -# set(CMAKE_INSTALL_PREFIX ../lib) +file(GLOB HEADERS "*.h") if(ETH_STATIC) - add_library(${EXECUTABLE} STATIC ${SRC_LIST}) + add_library(${EXECUTABLE} STATIC ${SRC_LIST} ${HEADERS}) else() - add_library(${EXECUTABLE} SHARED ${SRC_LIST}) + add_library(${EXECUTABLE} SHARED ${SRC_LIST} ${HEADERS}) endif() -file(GLOB HEADERS "*.h") - include_directories(..) target_link_libraries(${EXECUTABLE} devcore) diff --git a/libethcore/CMakeLists.txt b/libethcore/CMakeLists.txt index 6aba644f1..f5cf00b57 100644 --- a/libethcore/CMakeLists.txt +++ b/libethcore/CMakeLists.txt @@ -4,15 +4,13 @@ aux_source_directory(. SRC_LIST) set(EXECUTABLE ethcore) -# set(CMAKE_INSTALL_PREFIX ../lib) +file(GLOB HEADERS "*.h") if(ETH_STATIC) - add_library(${EXECUTABLE} STATIC ${SRC_LIST}) + add_library(${EXECUTABLE} STATIC ${SRC_LIST} ${HEADERS}) else() - add_library(${EXECUTABLE} SHARED ${SRC_LIST}) + add_library(${EXECUTABLE} SHARED ${SRC_LIST} ${HEADERS}) endif() -file(GLOB HEADERS "*.h") - include_directories(..) target_link_libraries(${EXECUTABLE} devcrypto) diff --git a/libethereum/CMakeLists.txt b/libethereum/CMakeLists.txt index 128dd5999..cb2049886 100644 --- a/libethereum/CMakeLists.txt +++ b/libethereum/CMakeLists.txt @@ -6,15 +6,13 @@ aux_source_directory(. SRC_LIST) set(EXECUTABLE ethereum) -# set(CMAKE_INSTALL_PREFIX ../lib) +file(GLOB HEADERS "*.h") if(ETH_STATIC) - add_library(${EXECUTABLE} STATIC ${SRC_LIST}) + add_library(${EXECUTABLE} STATIC ${SRC_LIST} ${HEADERS}) else() - add_library(${EXECUTABLE} SHARED ${SRC_LIST}) + add_library(${EXECUTABLE} SHARED ${SRC_LIST} ${HEADERS}) endif() -file(GLOB HEADERS "*.h") - include_directories(..) target_link_libraries(${EXECUTABLE} evm) diff --git a/libevm/CMakeLists.txt b/libevm/CMakeLists.txt index f19119f83..0c31a9fc3 100644 --- a/libevm/CMakeLists.txt +++ b/libevm/CMakeLists.txt @@ -6,15 +6,13 @@ aux_source_directory(. SRC_LIST) set(EXECUTABLE evm) -# set(CMAKE_INSTALL_PREFIX ../lib) +file(GLOB HEADERS "*.h") if(ETH_STATIC) - add_library(${EXECUTABLE} STATIC ${SRC_LIST}) + add_library(${EXECUTABLE} STATIC ${SRC_LIST} ${HEADERS}) else() - add_library(${EXECUTABLE} SHARED ${SRC_LIST}) + add_library(${EXECUTABLE} SHARED ${SRC_LIST} ${HEADERS}) endif() -file(GLOB HEADERS "*.h") - include_directories(..) target_link_libraries(${EXECUTABLE} ethcore) diff --git a/libevmface/CMakeLists.txt b/libevmface/CMakeLists.txt index 212ce825d..874b9e397 100644 --- a/libevmface/CMakeLists.txt +++ b/libevmface/CMakeLists.txt @@ -6,15 +6,13 @@ aux_source_directory(. SRC_LIST) set(EXECUTABLE evmface) -# set(CMAKE_INSTALL_PREFIX ../lib) +file(GLOB HEADERS "*.h") if(ETH_STATIC) - add_library(${EXECUTABLE} STATIC ${SRC_LIST}) + add_library(${EXECUTABLE} STATIC ${SRC_LIST} ${HEADERS}) else() - add_library(${EXECUTABLE} SHARED ${SRC_LIST}) + add_library(${EXECUTABLE} SHARED ${SRC_LIST} ${HEADERS}) endif() -file(GLOB HEADERS "*.h") - include_directories(..) target_link_libraries(${EXECUTABLE} devcore) diff --git a/liblll/CMakeLists.txt b/liblll/CMakeLists.txt index 7746613ec..cb50cc36e 100644 --- a/liblll/CMakeLists.txt +++ b/liblll/CMakeLists.txt @@ -6,15 +6,13 @@ aux_source_directory(. SRC_LIST) set(EXECUTABLE lll) -# set(CMAKE_INSTALL_PREFIX ../lib) +file(GLOB HEADERS "*.h") if(ETH_STATIC) - add_library(${EXECUTABLE} STATIC ${SRC_LIST}) + add_library(${EXECUTABLE} STATIC ${SRC_LIST} ${HEADERS}) else() - add_library(${EXECUTABLE} SHARED ${SRC_LIST}) + add_library(${EXECUTABLE} SHARED ${SRC_LIST} ${HEADERS}) endif() -file(GLOB HEADERS "*.h") - include_directories(..) target_link_libraries(${EXECUTABLE} evmface) diff --git a/libp2p/CMakeLists.txt b/libp2p/CMakeLists.txt index c3cdc70b9..9e20fd99f 100644 --- a/libp2p/CMakeLists.txt +++ b/libp2p/CMakeLists.txt @@ -6,15 +6,13 @@ aux_source_directory(. SRC_LIST) set(EXECUTABLE p2p) -# set(CMAKE_INSTALL_PREFIX ../lib) +file(GLOB HEADERS "*.h") if(ETH_STATIC) - add_library(${EXECUTABLE} STATIC ${SRC_LIST}) + add_library(${EXECUTABLE} STATIC ${SRC_LIST} ${HEADERS}) else() - add_library(${EXECUTABLE} SHARED ${SRC_LIST}) + add_library(${EXECUTABLE} SHARED ${SRC_LIST} ${HEADERS}) endif() -file(GLOB HEADERS "*.h") - include_directories(..) target_link_libraries(${EXECUTABLE} devcrypto) diff --git a/libqethereum/CMakeLists.txt b/libqethereum/CMakeLists.txt index 68ee1bb9d..4fb7d1a21 100644 --- a/libqethereum/CMakeLists.txt +++ b/libqethereum/CMakeLists.txt @@ -51,10 +51,11 @@ if (APPLE) include(BundleUtilities) endif () +file(GLOB HEADERS "*.h") if(ETH_STATIC) - add_library(${EXECUTABLE} STATIC ${RESOURCE_ADDED} ${SRC_LIST}) + add_library(${EXECUTABLE} STATIC ${RESOURCE_ADDED} ${SRC_LIST} ${HEADERS}) else() - add_library(${EXECUTABLE} SHARED ${RESOURCE_ADDED} ${SRC_LIST}) + add_library(${EXECUTABLE} SHARED ${RESOURCE_ADDED} ${SRC_LIST} ${HEADERS}) endif() include_directories(/) diff --git a/libserpent/CMakeLists.txt b/libserpent/CMakeLists.txt index 0d66393b2..0090b5dc3 100644 --- a/libserpent/CMakeLists.txt +++ b/libserpent/CMakeLists.txt @@ -6,15 +6,13 @@ aux_source_directory(. SRC_LIST) set(EXECUTABLE serpent) -# set(CMAKE_INSTALL_PREFIX ../lib) +file(GLOB HEADERS "*.h") if(ETH_STATIC) - add_library(${EXECUTABLE} STATIC ${SRC_LIST}) + add_library(${EXECUTABLE} STATIC ${SRC_LIST} ${HEADERS}) else() - add_library(${EXECUTABLE} SHARED ${SRC_LIST}) + add_library(${EXECUTABLE} SHARED ${SRC_LIST} ${HEADERS}) endif() -file(GLOB HEADERS "*.h") - include_directories(..) target_link_libraries(${EXECUTABLE} lll) diff --git a/libwebthree/CMakeLists.txt b/libwebthree/CMakeLists.txt index d3332d8b0..cc1b290f5 100644 --- a/libwebthree/CMakeLists.txt +++ b/libwebthree/CMakeLists.txt @@ -6,15 +6,13 @@ aux_source_directory(. SRC_LIST) set(EXECUTABLE webthree) -# set(CMAKE_INSTALL_PREFIX ../lib) +file(GLOB HEADERS "*.h") if(ETH_STATIC) - add_library(${EXECUTABLE} STATIC ${SRC_LIST}) + add_library(${EXECUTABLE} STATIC ${SRC_LIST} ${HEADERS}) else() - add_library(${EXECUTABLE} SHARED ${SRC_LIST}) + add_library(${EXECUTABLE} SHARED ${SRC_LIST} ${HEADERS}) endif() -file(GLOB HEADERS "*.h") - include_directories(..) target_link_libraries(${EXECUTABLE} ethereum) diff --git a/libwhisper/CMakeLists.txt b/libwhisper/CMakeLists.txt index 49857d16a..364d9759a 100644 --- a/libwhisper/CMakeLists.txt +++ b/libwhisper/CMakeLists.txt @@ -6,15 +6,13 @@ aux_source_directory(. SRC_LIST) set(EXECUTABLE whisper) -# set(CMAKE_INSTALL_PREFIX ../lib) +file(GLOB HEADERS "*.h") if(ETH_STATIC) - add_library(${EXECUTABLE} STATIC ${SRC_LIST}) + add_library(${EXECUTABLE} STATIC ${SRC_LIST} ${HEADERS}) else() - add_library(${EXECUTABLE} SHARED ${SRC_LIST}) + add_library(${EXECUTABLE} SHARED ${SRC_LIST} ${HEADERS}) endif() -file(GLOB HEADERS "*.h") - include_directories(..) target_link_libraries(${EXECUTABLE} ethcore) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 6936addb3..2e5366079 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -6,7 +6,8 @@ include_directories(..) link_directories(../libethcore) link_directories(../libethereum) -add_executable(testeth ${SRC_LIST}) +file(GLOB HEADERS "*.h") +add_executable(testeth ${SRC_LIST} ${HEADERS}) target_link_libraries(testeth ethereum) target_link_libraries(testeth ethcore) diff --git a/third/CMakeLists.txt b/third/CMakeLists.txt index 77b2bb496..9221ad045 100644 --- a/third/CMakeLists.txt +++ b/third/CMakeLists.txt @@ -25,6 +25,7 @@ find_package(Qt5WebKitWidgets REQUIRED) qt5_wrap_ui(ui_Main.h Main.ui) # Set name of binary and add_executable() +file(GLOB HEADERS "*.h") if (APPLE) set(EXECUTEABLE Third) set(BIN_INSTALL_DIR ".") @@ -41,14 +42,14 @@ if (APPLE) set(MACOSX_BUNDLE_ICON_FILE third) include(BundleUtilities) - add_executable(${EXECUTEABLE} MACOSX_BUNDLE third.icns Main.ui ${SRC_LIST}) + add_executable(${EXECUTEABLE} MACOSX_BUNDLE third.icns Main.ui ${SRC_LIST} ${HEADERS}) set_target_properties(${EXECUTEABLE} PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/EthereumMacOSXBundleInfo.plist.in") SET_SOURCE_FILES_PROPERTIES(${EXECUTEABLE} PROPERTIES MACOSX_PACKAGE_LOCATION MacOS) SET_SOURCE_FILES_PROPERTIES(${MACOSX_BUNDLE_ICON_FILE}.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") else () set(EXECUTEABLE third) - add_executable(${EXECUTEABLE} Main.ui ${SRC_LIST}) + add_executable(${EXECUTEABLE} Main.ui ${SRC_LIST} ${HEADERS}) endif () qt5_use_modules(${EXECUTEABLE} Core)# Gui Widgets Network WebKit WebKitWidgets)