Edit readme and add .gitignore

pull/1/head
Lartey D 2 years ago
parent ac9047c9dd
commit 6b68ab1551

4
.gitignore vendored

@ -0,0 +1,4 @@
build/
external/curl/
external/libuv/
todo.txt

@ -1,5 +1,8 @@
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
# Set cmake modules directory
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
project(neroshop) # tested on Ubuntu 20.04 LTS (focal) with gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, manjaro-xfce-21.2.6 (Qonos) with gcc (GCC) 11.2.0
set(VERSION_MAJOR "0")
@ -277,7 +280,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/external/monero-cpp/src/)
set(monero_cpp_src external/monero-cpp/src/utils/gen_utils.cpp external/monero-cpp/src/utils/monero_utils.cpp external/monero-cpp/src/daemon/monero_daemon_model.cpp external/monero-cpp/src/daemon/monero_daemon.cpp external/monero-cpp/src/wallet/monero_wallet_model.cpp external/monero-cpp/src/wallet/monero_wallet_keys.cpp external/monero-cpp/src/wallet/monero_wallet_full.cpp)
######################################
# libbcrypt
# libbcrypt (deprecated)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/external/libbcrypt)
set(bcrypt_src external/libbcrypt/crypt_blowfish/crypt_blowfish.c external/libbcrypt/crypt_blowfish/crypt_gensalt.c external/libbcrypt/crypt_blowfish/wrapper.c external/libbcrypt/bcrypt.c)
@ -321,7 +324,7 @@ if(NOT CURL_FOUND)
endif()
######################################
# postgresql
# postgresql (deprecated)
include_directories(${PostgreSQL_INCLUDE_DIRS} ${PostgreSQL_INCLUDE_DIRS}/server)
set(PostgreSQL_TYPE_INCLUDE_DIR "/usr/include/postgresql/")
@ -331,13 +334,20 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/external/monero-cpp/external/mon
######################################
# libuv (supports Android :D)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/external/libuv/include ${CMAKE_CURRENT_SOURCE_DIR}/external/libuv/src)
set(libuv_srcs libuv.a) # /usr/lib/x86_64-linux-gnu/libuv.a # /usr/lib/x86_64-linux-gnu/libuv.so
find_package(LIBUV)
if(LIBUV_FOUND)
message(STATUS "Using LIBUV: ${LIBUV_LIBRARIES}")
include_directories(${LIBUV_INCLUDE_DIRS})
set(libuv_src ${LIBUV_LIBRARIES})
endif()
if(NOT LIBUV_FOUND)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/external/libuv/include ${CMAKE_CURRENT_SOURCE_DIR}/external/libuv/src)
set(libuv_src ${CMAKE_CURRENT_SOURCE_DIR}/external/libuv/.libs/libuv.a) # In case user chooses to build libuv themselves instead of installing it on the system
endif()
######################################
# willemt/raft (BSD and has zero dependencies :D)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/external/raft/include)
set(raft_src src/raft_log.c src/raft_node.c src/raft_server.c src/raft_server_properties.c)
set(raft_src ${CMAKE_CURRENT_SOURCE_DIR}/external/raft/src/raft_log.c ${CMAKE_CURRENT_SOURCE_DIR}/external/raft/src/raft_node.c ${CMAKE_CURRENT_SOURCE_DIR}/external/raft/src/raft_server.c ${CMAKE_CURRENT_SOURCE_DIR}/external/raft/src/raft_server_properties.c)
######################################
# dokun-ui_dependencies
@ -386,11 +396,11 @@ target_link_libraries(${daemon_executable} ${dokun_ui_src})#set(CMAKE_CXX_LINK_E
set(neroshop_executable "neroshop")
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/external)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/build)
set(neroshop_src src/buyer.cpp #[[src/carrier.cpp]] src/cart.cpp src/catalog.cpp src/client.cpp src/converter.cpp src/database.cpp src/encryptor.cpp src/icon.cpp src/item.cpp src/main.cpp src/message.cpp src/order.cpp src/qr.cpp src/seller.cpp src/server.cpp src/user.cpp src/validator.cpp src/wallet.cpp)
add_definitions(-DNEROSHOP_DEBUG) # for more detailed debugging, use -DNEROSHOP_DEBUG0
add_executable(${neroshop_executable} ${neroshop_src} ${monero_cpp_src} ${bcrypt_src} ${sqlite_src} ${qr_code_generator_src})
target_link_libraries(${neroshop_executable} #[[${sqlite_src}]] ${curl_src} ${monero_src} ${dokun_ui_src})
add_executable(${neroshop_executable} ${neroshop_src} ${monero_cpp_src} ${bcrypt_src} ${sqlite_src} ${qr_code_generator_src} ${raft_src})
target_link_libraries(${neroshop_executable} #[[${sqlite_src}]] ${curl_src} ${monero_src} ${dokun_ui_src} ${libuv_src})
######################################
# linking
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")

@ -0,0 +1,23 @@
# Standard FIND_PACKAGE module for libuv, sets the following variables:
# LIBUV_FOUND
# LIBUV_INCLUDE_DIRS (only if LIBUV_FOUND)
# LIBUV_LIBRARIES (only if LIBUV_FOUND)
# Try to find the header and the library
find_path(LIBUV_INCLUDE_DIR NAMES uv.h)
find_library(LIBUV_LIBRARY NAMES uv libuv)
# Handle the QUIETLY/REQUIRED arguments, set LIBUV_FOUND if all variables are found
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LIBUV REQUIRED_VARS LIBUV_LIBRARY LIBUV_INCLUDE_DIR)
# Hide internal variables
mark_as_advanced(LIBUV_INCLUDE_DIR LIBUV_LIBRARY)
# Set standard variables
IF(LIBUV_FOUND)
set(LIBUV_INCLUDE_DIRS "${LIBUV_INCLUDE_DIR}")
set(LIBUV_LIBRARIES "${LIBUV_LIBRARY}")
ENDIF()

@ -1,34 +1,39 @@
cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
project(neroshop_external_libs)
project(neroshop_external)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ../build)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ../build)
# compile the source code of external dependencies into a static library so there won't be a need to recompile each time there's a change in the makefile
include_directories(monero-cpp/external/monero-project/contrib/epee/include
monero-cpp/external/monero-project/external/easylogging++
monero-cpp/external/monero-project/src
monero-cpp/external/monero-project/external/rapidjson/include
include_directories(monero-cpp/external/monero-project/contrib/epee/include/
monero-cpp/external/monero-project/external/easylogging++/
monero-cpp/external/monero-project/src/
monero-cpp/external/monero-project/external/rapidjson/include/
monero-cpp/external/monero-project/external/
) # monero-project
include_directories(monero-cpp/src)
)
include_directories(monero-cpp/src/)
set(monero_cpp_srcs monero-cpp/src/utils/gen_utils.cpp monero-cpp/src/utils/monero_utils.cpp monero-cpp/src/daemon/monero_daemon_model.cpp monero-cpp/src/daemon/monero_daemon.cpp monero-cpp/src/wallet/monero_wallet_model.cpp monero-cpp/src/wallet/monero_wallet_keys.cpp monero-cpp/src/wallet/monero_wallet_full.cpp)
add_library(monero-cpp STATIC ${monero_cpp_srcs})
include_directories(libbcrypt)
include_directories(libbcrypt/)
set(libbcrypt_srcs libbcrypt/crypt_blowfish/crypt_blowfish.c libbcrypt/crypt_blowfish/crypt_gensalt.c libbcrypt/crypt_blowfish/wrapper.c libbcrypt/bcrypt.c)
add_library(bcrypt STATIC ${libbcrypt_srcs})
include_directories(QR-Code-generator/cpp)
include_directories(QR-Code-generator/cpp/)
set(QR_Code_generator_srcs QR-Code-generator/cpp/qrcodegen.cpp) # or QR-Code-generator/c/qrcodegen.c
add_library(qrcodegen STATIC ${QR_Code_generator_srcs})
include_directories(sqlite)
include_directories(sqlite/)
set(sqlite_srcs sqlite/sqlite3.c)
add_library(sqlite3 STATIC ${sqlite_srcs})
include_directories(raft/include/)
set(raft_srcs raft/src/raft_log.c raft/src/raft_node.c raft/src/raft_server.c raft/src/raft_server_properties.c)
add_library(raft STATIC ${raft_srcs})
#[[
include_directories()
set(_srcs )
add_library( STATIC ${_srcs})
#set_target_properties( PROPERTIES PREFIX "")

@ -0,0 +1,83 @@
workspace "NeroshopExternalWorkspace"
configurations { "Debug", "Release" }
location "../build" -- specifies location of Makefiles
project "monero-cpp"
kind "StaticLib"
language "C++"
files {
"monero-cpp/src/utils/gen_utils.cpp", "monero-cpp/src/utils/monero_utils.cpp", "monero-cpp/src/daemon/monero_daemon_model.cpp", "monero-cpp/src/daemon/monero_daemon.cpp", "monero-cpp/src/wallet/monero_wallet_model.cpp", "monero-cpp/src/wallet/monero_wallet_keys.cpp", "monero-cpp/src/wallet/monero_wallet_full.cpp",
}
includedirs {
"monero-cpp/src/",
"monero-cpp/external/monero-project/contrib/epee/include/",
"monero-cpp/external/monero-project/external/easylogging++/",
"monero-cpp/external/monero-project/src/",
"monero-cpp/external/monero-project/external/rapidjson/include/",
"monero-cpp/external/monero-project/external/",
}
project "bcrypt"
kind "StaticLib"
language "C"
files {
"libbcrypt/crypt_blowfish/crypt_blowfish.c", "libbcrypt/crypt_blowfish/crypt_gensalt.c", "libbcrypt/crypt_blowfish/wrapper.c", "libbcrypt/bcrypt.c",
}
includedirs {
"libbcrypt/"
}
project "qrcodegen"
kind "StaticLib"
language "C++"
files {
"QR-Code-generator/cpp/qrcodegen.cpp"
}
includedirs {
"QR-Code-generator/cpp/"
}
project "sqlite3"
kind "StaticLib"
language "C"
files {
"sqlite/sqlite3.c"
}
includedirs {
"sqlite/"
}
project "raft"
kind "StaticLib"
language "C"
files {
"raft/src/raft_log.c", "raft/src/raft_node.c", "raft/src/raft_server.c", "raft/src/raft_server_properties.c",
}
includedirs {
"raft/include/"
}
--[[
project "<library-name>"
kind "StaticLib"
language "C++"
files {
}
includedirs {
}
--defines {}
]]
---------------------------------
location "../build" -- specifies location of binaries
filter { "configurations:Debug" }
defines { "DEBUG" }
symbols "On"
filter { "configurations:Release" }
defines { "NDEBUG" }
optimize "On"
-- premake5 --cc=gcc --os=linux gmake
-- cd ../build && make

1
external/raft vendored

@ -0,0 +1 @@
Subproject commit e428eeb921a014192d1d703dd317f3f29f5916c5

@ -7,6 +7,11 @@
#ifdef __gnu_linux__
#include "linux_header.hpp"
#endif
// libuv
#include <uv.h>
// raft
#include <raft.h>
// neroshop
#include "debug.hpp"
#include <iostream>

@ -9,8 +9,8 @@
// neroshop
#include "debug.hpp"
////extern "C" {
// openssl - monero uses openssl so we just have to link this code to monero
#include <openssl/rsa.h> // for creating key pairs, encrypting and decrypting messages (with RSA)
// openssl
#include <openssl/rsa.h>
#include <openssl/pem.h> // includes "openssl/evp.h" which includes "openssl/bio.h"
#include <openssl/err.h>
////}
@ -38,66 +38,3 @@ private:
};
}
#endif
// 1. alice sends bob a message that is encrypted using bob's public key
// 2. bob receives the encrypted message and must decrpyt the message using his own private key
/* Usage:
Example 1:
// the public key
std::string public_key =
"-----BEGIN PUBLIC KEY-----\n"
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4IcJNHFqOofSOaZaijI8\n"
"AvDA+cYwUEpUWSXZ+NA2AtVObX2htLa3PhSSToQVUABbwPySgaHWL2xGSr/0b0Z4\n"
"zauCK/VGidYkx85nDsOm0YjcsDUwc5t3WrRKG5+gzqxJi9g5iLaLjVzK2iPqhCTQ\n"
"R45XtP7XBEIimZltfFW20TPC/jLIMqqKl/tkVQ1aHxqOP9k2DPPswa2JFqXF1Lnk\n"
"nmKLKHbmn/34CMbbPBwZssailxM+hJOa+KfTRO9nP03m8z0mvRRnxu0oZFx632L9\n"
"QX8eTHrYwYs6svbWOWE5wmfPKBAkhr94C8ricZXf8B/PAEQrF+aWrjgsLt0xtMtm\n"
"QQIDAQAB\n"
"-----END PUBLIC KEY-----";
// the private key
std::string private_key =
"-----BEGIN PRIVATE KEY-----\n"
"MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDghwk0cWo6h9I5\n"
"plqKMjwC8MD5xjBQSlRZJdn40DYC1U5tfaG0trc+FJJOhBVQAFvA/JKBodYvbEZK\n"
"v/RvRnjNq4Ir9UaJ1iTHzmcOw6bRiNywNTBzm3datEobn6DOrEmL2DmItouNXMra\n"
"I+qEJNBHjle0/tcEQiKZmW18VbbRM8L+MsgyqoqX+2RVDVofGo4/2TYM8+zBrYkW\n"
"pcXUueSeYosoduaf/fgIxts8HBmyxqKXEz6Ek5r4p9NE72c/TebzPSa9FGfG7Shk\n"
"XHrfYv1Bfx5MetjBizqy9tY5YTnCZ88oECSGv3gLyuJxld/wH88ARCsX5pauOCwu\n"
"3TG0y2ZBAgMBAAECggEBALWrLTx8o+o16VhyDIITAVGTwWCYBpGAgt0a7lIPDhSe\n"
"yPV4mHWi/YNCm9rhrmjr0VHGSziOXMJERl/HDx1WFPq80feFXwy580qj6+kbT4fs\n"
"yDve3ZQ874a5p9jQAQoYhu2bB3ph0WqQ8SUtuFwxeUDcoIS3SfyNEnfbl6XpqKF9\n"
"TrnDINBlWDxc9clvs/3RauJMMPjlOLmtARbBQaZJQYp3LQGRn82/IFTUFxQLBpAJ\n"
"Q7iaPthg8Rc0rrLqScejg6sNRJXUVJiTfODCcfOCCDq4hKF9aDmp+YCK6KBN04O4\n"
"TEc9PL9o10CTrQww2qmt/Ci76w8GxrW0VAN5ZZU2kQ0CgYEA/PYMEM+/snsuX1O3\n"
"Nd83ubnRzf7Me2i6lRcT2OpQoSicHIKAc0VtKYww1iFL+yrFXsgYFBnmkeP4DsPK\n"
"ZN5mm4XoHeTC4AaH1SSRVdT7nEg6GVK1NbjFtbbEQaz7eKqnnpVniDK3RE3iOLjB\n"
"nHVWcsZJZlVJjcKAkw5vacGJ6Q8CgYEA4zmLYGXY1qpkc0EQonzBxXUkI8pwfPal\n"
"6w2/VUdmBmLD0DVRrugnVHnGNLmNk2QXoMqN40vhgD9tdY3BMVBmoRyZLgDpEhXz\n"
"0XlLiONRkEWsqgzYoC0IG4fSvAsFlPqrXiTg34H/s74CtJ+nLF3hO/HfSkfulM/C\n"
"dj9OFPgHm68CgYBr4ct3iAJrbhly0lM6iH5NmTAfOGGg6CNa3kK6qgPFF3qstgNu\n"
"JdfOdlmFmSG8dptCNvf96qXo5l6ufVXd+vOrtEowJZXu0RoxDq1k+7ZrCmqszhc2\n"
"WB0JyG6ey9VbuvxNp85FyctbOBQYuMLppSk/Pc2j9Q+vg5ouHWPqqH3WhQKBgCF+\n"
"8SHjwaRbd/VZiRc65uGx1AMGq7BwN6M/4o2yucKFOrJtub3b8ThNvz80fz9UCPum\n"
"AGaaYAKk1wD2RZ18abSkX5xde/4ziD6/77edMv/elYZ34FM0cDaGvjUENu1wSmTV\n"
"cOTh6AzaHNH9mwo6SKKqlC0CD5SWT+dYi60hpxV3AoGBAKJbh7ApcUzTvEKofrS7\n"
"xhzvnwW44cRdHNF25KMD+xkmw/4nrmifDrt+ZT5Zfa2PPBGRNDLP79mpxBnpaNLs\n"
"LMl2fZN7vg2xY/WurhSmQjl1OmW+wFbYU2Kfmsej1tmtaO4A9xpE5jsu+L5fmrt+\n"
"y/gd8YWuIVtUTY/HEOWneR/i\n"
"-----END PRIVATE KEY-----";
// cipher text
std::string cipher_text = Encryptor::public_encrypt(public_key, "Turtles are cool");
std::cout << "message (encrypted): " << cipher_text << std::endl;
// plain text
std::string plain_text = Encryptor::private_decrypt(private_key, cipher_text);
std::cout << "message (decrypted): " << plain_text << std::endl;
Example 2:
// write plain text to file in cipher text form
std::ofstream wfile ("cipher_text.txt", std::ios::binary);
Encryptor::public_encrypt_fp(public_key, "Monero is the king of privacy coins!", wfile);
// read cipher text from file in plain text form
std::ifstream rfile ("cipher_text.txt", std::ios::binary);
std::string plain_text;
Encryptor::private_decrypt_fp(private_key, plain_text, rfile);
std::cout << "message (decrypted): " << plain_text << std::endl;
*/

@ -13,6 +13,10 @@
#include <thread>
#include <mutex>
#include <vector>
// libuv
#include <uv.h>
// raft
#include <raft.h>
// neroshop
#include "debug.hpp"

@ -1,104 +1,116 @@
--include "external/" -- runs "external/premake5.lua"
workspace "NeroshopWorkspace"
configurations { "Debug", "Release" }
location "build" -- specifies location of Makefiles
-- neroshop
project "neroshop"
kind "ConsoleApp"--"WindowedApp"
language "C++"
files {
-- neroshop
"src/buyer.cpp", --[["src/carrier.cpp",]] "src/cart.cpp", "src/catalog.cpp", "src/client.cpp", "src/converter.cpp", "src/database.cpp", "src/encryptor.cpp", "src/icon.cpp", "src/item.cpp", "src/main.cpp", "src/message.cpp", "src/order.cpp", "src/qr.cpp", "src/seller.cpp", "src/server.cpp", "src/user.cpp", "src/validator.cpp", "src/wallet.cpp",
-- monero-cpp
"external/monero-cpp/src/utils/gen_utils.cpp", "external/monero-cpp/src/utils/monero_utils.cpp", "external/monero-cpp/src/daemon/monero_daemon_model.cpp", "external/monero-cpp/src/daemon/monero_daemon.cpp", "external/monero-cpp/src/wallet/monero_wallet_model.cpp", "external/monero-cpp/src/wallet/monero_wallet_keys.cpp", "external/monero-cpp/src/wallet/monero_wallet_full.cpp",
-- bcrypt
"external/libbcrypt/crypt_blowfish/crypt_blowfish.c", "external/libbcrypt/crypt_blowfish/crypt_gensalt.c", "external/libbcrypt/crypt_blowfish/wrapper.c", "external/libbcrypt/bcrypt.c",
-- sqlite3 (amalgamation)
"external/sqlite/sqlite3.c",
-- QR-Code-generator
"external/QR-Code-generator/cpp/qrcodegen.cpp",
}
includedirs {
"include/",
"external/monero-cpp/src",
"external/libbcrypt",
"external/sqlite",
"external/QR-Code-generator/cpp",
"external/json/single_include",
--"external/curl/include", "external/curl/lib",
--"/usr/include/postgresql/", "/usr/include/postgresql/server",
"external/monero-cpp/external/monero-project/external/db_drivers/liblmdb",
kind "ConsoleApp"--"WindowedApp"
language "C++"
files {
-- neroshop
"src/buyer.cpp", --[["src/carrier.cpp",]] "src/cart.cpp", "src/catalog.cpp", "src/client.cpp", "src/converter.cpp", "src/database.cpp", "src/encryptor.cpp", "src/icon.cpp", "src/item.cpp", "src/main.cpp", "src/message.cpp", "src/order.cpp", "src/qr.cpp", "src/seller.cpp", "src/server.cpp", "src/user.cpp", "src/validator.cpp", "src/wallet.cpp",
-- monero-cpp
----"external/monero-cpp/src/utils/gen_utils.cpp", "external/monero-cpp/src/utils/monero_utils.cpp", "external/monero-cpp/src/daemon/monero_daemon_model.cpp", "external/monero-cpp/src/daemon/monero_daemon.cpp", "external/monero-cpp/src/wallet/monero_wallet_model.cpp", "external/monero-cpp/src/wallet/monero_wallet_keys.cpp", "external/monero-cpp/src/wallet/monero_wallet_full.cpp",
-- bcrypt
----"external/libbcrypt/crypt_blowfish/crypt_blowfish.c", "external/libbcrypt/crypt_blowfish/crypt_gensalt.c", "external/libbcrypt/crypt_blowfish/wrapper.c", "external/libbcrypt/bcrypt.c",
-- sqlite3 (amalgamation)
----"external/sqlite/sqlite3.c",
-- QR-Code-generator
----"external/QR-Code-generator/cpp/qrcodegen.cpp",
-- raft
----"external/raft/src/raft_log.c", "external/raft/src/raft_node.c", "external/raft/src/raft_server.c", "external/raft/src/raft_server_properties.c",
}
includedirs {
"include/",
"external/monero-cpp/src",
"external/libbcrypt",
"external/sqlite",
"external/QR-Code-generator/cpp",
"external/json/single_include",
--"external/curl/include", "external/curl/lib",
--"/usr/include/postgresql/", "/usr/include/postgresql/server",
"external/raft/include",
"external/monero-cpp/external/monero-project/external/db_drivers/liblmdb",
-- dokun-ui
"external/dokun-ui/include",
"external/dokun-ui/external/lua/lua-5.4.1/src",
"external/dokun-ui/external/glew/include",
"external/dokun-ui/external/glm",
"external/dokun-ui/external/png", "external/dokun-ui/external/zlib",
"external/dokun-ui/external/jpeg/jpeg-6b",
"external/dokun-ui/external/tiff/libtiff", -- not really in use at the moment. We only need png and jpeg
"external/dokun-ui/external/gif/lib", -- not really in use at the moment. We only need png and jpeg
"external/dokun-ui/external/freetype/include", "external/dokun-ui/external/freetype/include/freetype", "external/freetype/include/freetype/config", "external/dokun-ui/external/freetype/include/freetype/internal",
-- monero
"external/monero-cpp/external/monero-project/external/rapidjson/include",
"external/monero-cpp/external/monero-project/contrib/epee/include",
"external/monero-cpp/external/monero-project/external/easylogging++",
"external/monero-cpp/external/monero-project/src",
"external/monero-cpp/external/monero-project/external/",
--"external/monero-cpp/external/monero-project/",
}
libdirs { "src/", "external/dokun-ui/src/", }
links {
-- dokun-ui
"dokun-ui",
-- monero
"external/monero-cpp/external/monero-project/build/release/lib/wallet_merged",
"external/monero-cpp/external/monero-project/build/release/lib/wallet",
"external/monero-cpp/external/monero-project/build/release/src/crypto/wallet/wallet-crypto",
"external/monero-cpp/external/monero-project/build/release/external/db_drivers/liblmdb/lmdb",
"external/monero-cpp/external/monero-project/build/release/contrib/epee/src/epee",
"external/monero-cpp/external/monero-project/build/release/external/unbound/unbound",
"external/monero-cpp/external/monero-project/build/release/external/easylogging++/easylogging",
"external/monero-cpp/external/monero-project/build/release/src/cryptonote_core/cryptonote_core",
"external/monero-cpp/external/monero-project/build/release/src/cryptonote_basic/cryptonote_basic",
"external/monero-cpp/external/monero-project/build/release/src/cryptonote_basic/cryptonote_format_utils_basic",
"external/monero-cpp/external/monero-project/build/release/src/mnemonics/mnemonics",
"external/monero-cpp/external/monero-project/build/release/src/common/common",
"external/monero-cpp/external/monero-project/build/release/src/crypto/cncrypto",
"external/monero-cpp/external/monero-project/build/release/src/ringct/ringct",
"external/monero-cpp/external/monero-project/build/release/src/ringct/ringct_basic",
"external/monero-cpp/external/monero-project/build/release/src/blockchain_db/blockchain_db",
"external/monero-cpp/external/monero-project/build/release/src/blocks/blocks",
"external/monero-cpp/external/monero-project/build/release/src/checkpoints/checkpoints",
"external/monero-cpp/external/monero-project/build/release/src/device/device",
"external/monero-cpp/external/monero-project/build/release/src/device_trezor/device_trezor",
"external/monero-cpp/external/monero-project/build/release/src/multisig/multisig",
"external/monero-cpp/external/monero-project/build/release/src/version",
"external/monero-cpp/external/monero-project/build/release/external/randomx/randomx",
--"external/monero-cpp/external/monero-project/build/release/",
-- protobuf
"protobuf",
-- libusb
"usb-1.0",
-- boost
"boost_chrono", "boost_date_time", "boost_filesystem", "boost_program_options", "boost_regex", "boost_serialization", "boost_wserialization", "boost_system", "boost_thread",
-- hidapi (and udev)
--[["udev",]] "hidapi-libusb",
-- openssl
"crypto", "ssl",
-- libsodium
"sodium",
-- libcurl
"curl",
}
defines { "HAVE_HIDAPI" }
if os.host() == "linux" then -- same as os.get(), except os.get() is deprecated in premake5
links { "pthread", "dl", "X11", }
end
if os.host() == "windows" then links {} end
if os.host() == "macosx" then links {} end
if os.host() == "android" then links {} end
"external/dokun-ui/include",
"external/dokun-ui/external/lua/lua-5.4.1/src",
"external/dokun-ui/external/glew/include",
"external/dokun-ui/external/glm",
"external/dokun-ui/external/png", "external/dokun-ui/external/zlib",
"external/dokun-ui/external/jpeg/jpeg-6b",
"external/dokun-ui/external/tiff/libtiff", -- not really in use at the moment. We only need png and jpeg
"external/dokun-ui/external/gif/lib", -- not really in use at the moment. We only need png and jpeg
"external/dokun-ui/external/freetype/include", "external/dokun-ui/external/freetype/include/freetype", "external/freetype/include/freetype/config", "external/dokun-ui/external/freetype/include/freetype/internal",
-- monero
"external/monero-cpp/external/monero-project/external/rapidjson/include",
"external/monero-cpp/external/monero-project/contrib/epee/include",
"external/monero-cpp/external/monero-project/external/easylogging++",
"external/monero-cpp/external/monero-project/src",
"external/monero-cpp/external/monero-project/external/",
--"external/monero-cpp/external/monero-project/",
}
libdirs { "src/", "build/bin/Debug/", "external/dokun-ui/src/", }
links {
"monero-cpp",
"bcrypt",
"sqlite3",
"qrcodegen",
"raft",
-- dokun-ui
"dokun-ui",
-- monero
"external/monero-cpp/external/monero-project/build/release/lib/wallet_merged",
"external/monero-cpp/external/monero-project/build/release/lib/wallet",
"external/monero-cpp/external/monero-project/build/release/src/crypto/wallet/wallet-crypto",
"external/monero-cpp/external/monero-project/build/release/external/db_drivers/liblmdb/lmdb",
"external/monero-cpp/external/monero-project/build/release/contrib/epee/src/epee",
"external/monero-cpp/external/monero-project/build/release/external/unbound/unbound",
"external/monero-cpp/external/monero-project/build/release/external/easylogging++/easylogging",
"external/monero-cpp/external/monero-project/build/release/src/cryptonote_core/cryptonote_core",
"external/monero-cpp/external/monero-project/build/release/src/cryptonote_basic/cryptonote_basic",
"external/monero-cpp/external/monero-project/build/release/src/cryptonote_basic/cryptonote_format_utils_basic",
"external/monero-cpp/external/monero-project/build/release/src/mnemonics/mnemonics",
"external/monero-cpp/external/monero-project/build/release/src/common/common",
"external/monero-cpp/external/monero-project/build/release/src/crypto/cncrypto",
"external/monero-cpp/external/monero-project/build/release/src/ringct/ringct",
"external/monero-cpp/external/monero-project/build/release/src/ringct/ringct_basic",
"external/monero-cpp/external/monero-project/build/release/src/blockchain_db/blockchain_db",
"external/monero-cpp/external/monero-project/build/release/src/blocks/blocks",
"external/monero-cpp/external/monero-project/build/release/src/checkpoints/checkpoints",
"external/monero-cpp/external/monero-project/build/release/src/device/device",
"external/monero-cpp/external/monero-project/build/release/src/device_trezor/device_trezor",
"external/monero-cpp/external/monero-project/build/release/src/multisig/multisig",
"external/monero-cpp/external/monero-project/build/release/src/version",
"external/monero-cpp/external/monero-project/build/release/external/randomx/randomx",
--"external/monero-cpp/external/monero-project/build/release/",
-- protobuf
"protobuf",
-- libusb
"usb-1.0",
-- boost
"boost_chrono", "boost_date_time", "boost_filesystem", "boost_program_options", "boost_regex", "boost_serialization", "boost_wserialization", "boost_system", "boost_thread",
-- hidapi (and udev)
--[["udev",]] "hidapi-libusb",
-- openssl
"crypto", "ssl",
-- libsodium
"sodium",
-- libcurl
"curl",
-- libuv
"uv",
}
defines { "HAVE_HIDAPI" --[["NEROSHOP_USE_POSTGRESQL"]] }
if os.host() == "linux" then -- same as os.get(), except os.get() is deprecated in premake5
links { "pthread", "dl", "X11", }
end
if os.host() == "windows" then links {} end
if os.host() == "macosx" then links {} end
if os.host() == "android" then links {} end
location "build" -- specifies location of project binaries
filter { "system:windows" }
links { "OpenGL32" }
links { "OpenGL32" }
filter { "system:not windows" }
links { "GL" }
@ -110,6 +122,18 @@ project "neroshop"
filter { "configurations:Release" }
defines { "NDEBUG" }
optimize "On"
-- neromon
--[[
project "neromon"
kind "ConsoleApp"
language "C++"
files {
"src/daemon.cpp", "src/server.cpp",
}
includedirs {
"include/",
}
]]--
-- premake5 --cc=gcc --os=linux gmake
-- make
-- cd build && make
-- ./bin/Debug/neroshop

@ -42,14 +42,14 @@ Coming soon
### Compiling neroshop from source
0. Clone neroshop
```sh
```bash
git clone https://github.com/larteyoh/testshop.git && cd testshop
```
1. Install dependencies
Debian/Ubuntu
```sh
```bash
sudo -s -- << EOF
# prerequisites
sudo apt install build-essential cmake git
@ -60,7 +60,7 @@ sudo apt update && sudo apt install pkg-config libssl-dev libzmq3-dev libunbound
EOF
```
Arch
```sh
```bash
# prerequisites
sudo pacman -Sy --needed base-devel cmake git
# neroshop, dokun-ui
@ -69,7 +69,7 @@ sudo pacman -Sy --needed libx11 lib32-mesa lib32-glu curl openssl postgresql
sudo pacman -Syu --needed boost openssl zeromq libpgm unbound libsodium libunwind xz readline ldns expat gtest python3 ccache doxygen graphviz qt5-tools hidapi libusb protobuf systemd
```
Fedora
```sh
```bash
# prerequisites
sudo dnf install gcc gcc-c++ make cmake git
# neroshop, dokun-ui
@ -79,15 +79,15 @@ sudo dnf install boost-static libstdc++-static pkgconf boost-devel openssl-devel
```
2. Clone submodules and nested submodules
```sh
```bash
cd external
git clone --recurse-submodules https://github.com/monero-ecosystem/monero-cpp.git
git clone --recurse-submodules https://github.com/rg3/libbcrypt.git
git clone --recurse-submodules https://github.com/nayuki/QR-Code-generator.git
git clone --recurse-submodules https://github.com/nlohmann/json.git
#git clone --recurse-submodules https://github.com/curl/curl.git
#git clone --recurse-submodules https://github.com/libuv/libuv.git
git clone --recurse-submodules https://github.com/willemt/raft.git
git clone --recurse-submodules https://github.com/libuv/libuv.git
cd ../
```
@ -95,18 +95,26 @@ cd ../
`option(BUILD_GUI_DEPS "Build GUI dependencies." ON)`
4. Build monero-project twice to create libwallet_merged.a and other .a libraries
```sh
```bash
cd external/monero-cpp/external/monero-project && make release-static && make release-static
cd ../../../../
```
5. Build neroshop (along with dokun-ui)
```sh
5. Build dokun-ui
```bash
# Build dokun-ui
cd external/dokun-ui
cmake -G"Unix Makefiles"
make
cd ../../
```
6. Build neroshop
---
To build with [CMake](https://cmake.org/):
```bash
# Build neroshop
mkdir build && cd build
cmake ..
@ -114,12 +122,30 @@ make
```
To build with [premake5](https://premake.github.io/):
```bash
# Build external libraries
cd external/
premake5 --cc=gcc --os=linux gmake
cd ../build && make
# Build neroshop
cd ..
premake5 --cc=gcc --os=linux gmake
cd build && make
# Run neroshop
./bin/Debug/neroshop
```
## Contact
> larteyoh@pm.me
[//]: # (./clean.sh)
[//]: # (rm -rf external/dokun-ui/CMakeFiles; rm -rf external/dokun-ui/CMakeCache.txt; rm -rf external/dokun-ui/cmake_install.cmake; rm -rf external/dokun-ui/Makefile)
[//]: # (git checkout -b test)
[//]: # (git add CMakeLists.txt external/ include/ premake5.lua readme.md res/neroshop-logo.png res/wallets src/ test/)
[//]: # (git add .gitignore .gitmodules cmake/ CMakeLists.txt external/ include/ premake5.lua readme.md res/neroshop-logo.png res/wallets src/ test/)
[//]: # (git commit -m"Testing")
[//]: # (git push -u origin test)

@ -10,29 +10,13 @@ using namespace dokun;
lua_State * neroshop::lua_state = luaL_newstate(); // lua_state should be initialized by default
int main() {
// Do some testing here ...
std::cout << "sqlite3 v" << DB::SQLite3::get_sqlite_version() << std::endl;
std::unique_ptr<DB::SQLite3> database = std::make_unique<DB::SQLite3>();//new DB::SQLite3();
if(!database->open("data.sqlite3")) {//(":memory:")) { // In-memory databases are temporary and written in RAM
neroshop::print(SQLITE3_TAG "\033[91mSQLite::open failed");
}
//-------------------------
// Create a table and add columns
if(!database->table_exists("users")) {
std::cout << "CREATE TABLE users\n";
database->execute("CREATE TABLE IF NOT EXISTS users(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT);");
database->execute("ALTER TABLE users ADD name text;");
//database->execute("ALTER TABLE users ADD pw_hash text;");
database->execute("ALTER TABLE users ADD age integer;");
}
//database->execute();
// Insert a new row
////database->execute_params("INSERT INTO users (name, age) VALUES ($1, $2);", { "sid", "25" });
std::cout << database->get_text_params("SELECT name FROM users WHERE id = $1", { "1" }) << std::endl;
// Modify new row
//database->execute_params("SELECT * FROM users WHERE id = $1 AND name = $2", { "1", "dude" });
//-------------------------
// Close database when app is terminated
database->close();
uv_loop_t *loop = (uv_loop_t *)malloc(sizeof(uv_loop_t));
uv_loop_init(loop);
// Will quit as nothing to process in this event loop
printf("Now quitting\n");
uv_loop_close(loop);
free(loop);
return 0;
}

@ -0,0 +1,38 @@
#include <iostream>
#include <string>
// neroshop
#include "../include/neroshop.hpp"
using namespace neroshop;
// dokun-ui
#include <build.hpp>
#include DOKUN_HEADER
using namespace dokun;
lua_State * neroshop::lua_state = luaL_newstate(); // lua_state should be initialized by default
int main() {
// Do some testing here ...
std::cout << "sqlite3 v" << DB::SQLite3::get_sqlite_version() << std::endl;
std::unique_ptr<DB::SQLite3> database = std::make_unique<DB::SQLite3>();//new DB::SQLite3();
if(!database->open("data.sqlite3")) {//(":memory:")) { // In-memory databases are temporary and written in RAM
neroshop::print(SQLITE3_TAG "\033[91mSQLite::open failed");
}
//-------------------------
// Create a table and add columns
if(!database->table_exists("users")) {
std::cout << "CREATE TABLE users\n";
database->execute("CREATE TABLE IF NOT EXISTS users(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT);");
database->execute("ALTER TABLE users ADD name text;");
//database->execute("ALTER TABLE users ADD pw_hash text;");
database->execute("ALTER TABLE users ADD age integer;");
}
//database->execute();
// Insert a new row
////database->execute_params("INSERT INTO users (name, age) VALUES ($1, $2);", { "sid", "25" });
std::cout << database->get_text_params("SELECT name FROM users WHERE id = $1", { "1" }) << std::endl;
// Modify new row
//database->execute_params("SELECT * FROM users WHERE id = $1 AND name = $2", { "1", "dude" });
//-------------------------
// Close database when app is terminated
database->close();
return 0;
}

@ -0,0 +1,78 @@
#include <iostream>
#include <string>
// neroshop
#include "../include/neroshop.hpp"
using namespace neroshop;
// dokun-ui
#include <build.hpp>
#include DOKUN_HEADER
using namespace dokun;
lua_State * neroshop::lua_state = luaL_newstate(); // lua_state should be initialized by default
int main() {
// 1. Alice sends bob a message that is encrypted using bob's public key
// 2. Bob receives the encrypted message and must decrpyt the message using his own private key
// the public key
std::string public_key =
"-----BEGIN PUBLIC KEY-----\n"
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4IcJNHFqOofSOaZaijI8\n"
"AvDA+cYwUEpUWSXZ+NA2AtVObX2htLa3PhSSToQVUABbwPySgaHWL2xGSr/0b0Z4\n"
"zauCK/VGidYkx85nDsOm0YjcsDUwc5t3WrRKG5+gzqxJi9g5iLaLjVzK2iPqhCTQ\n"
"R45XtP7XBEIimZltfFW20TPC/jLIMqqKl/tkVQ1aHxqOP9k2DPPswa2JFqXF1Lnk\n"
"nmKLKHbmn/34CMbbPBwZssailxM+hJOa+KfTRO9nP03m8z0mvRRnxu0oZFx632L9\n"
"QX8eTHrYwYs6svbWOWE5wmfPKBAkhr94C8ricZXf8B/PAEQrF+aWrjgsLt0xtMtm\n"
"QQIDAQAB\n"
"-----END PUBLIC KEY-----";
// the private key
std::string private_key =
"-----BEGIN PRIVATE KEY-----\n"
"MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDghwk0cWo6h9I5\n"
"plqKMjwC8MD5xjBQSlRZJdn40DYC1U5tfaG0trc+FJJOhBVQAFvA/JKBodYvbEZK\n"
"v/RvRnjNq4Ir9UaJ1iTHzmcOw6bRiNywNTBzm3datEobn6DOrEmL2DmItouNXMra\n"
"I+qEJNBHjle0/tcEQiKZmW18VbbRM8L+MsgyqoqX+2RVDVofGo4/2TYM8+zBrYkW\n"
"pcXUueSeYosoduaf/fgIxts8HBmyxqKXEz6Ek5r4p9NE72c/TebzPSa9FGfG7Shk\n"
"XHrfYv1Bfx5MetjBizqy9tY5YTnCZ88oECSGv3gLyuJxld/wH88ARCsX5pauOCwu\n"
"3TG0y2ZBAgMBAAECggEBALWrLTx8o+o16VhyDIITAVGTwWCYBpGAgt0a7lIPDhSe\n"
"yPV4mHWi/YNCm9rhrmjr0VHGSziOXMJERl/HDx1WFPq80feFXwy580qj6+kbT4fs\n"
"yDve3ZQ874a5p9jQAQoYhu2bB3ph0WqQ8SUtuFwxeUDcoIS3SfyNEnfbl6XpqKF9\n"
"TrnDINBlWDxc9clvs/3RauJMMPjlOLmtARbBQaZJQYp3LQGRn82/IFTUFxQLBpAJ\n"
"Q7iaPthg8Rc0rrLqScejg6sNRJXUVJiTfODCcfOCCDq4hKF9aDmp+YCK6KBN04O4\n"
"TEc9PL9o10CTrQww2qmt/Ci76w8GxrW0VAN5ZZU2kQ0CgYEA/PYMEM+/snsuX1O3\n"
"Nd83ubnRzf7Me2i6lRcT2OpQoSicHIKAc0VtKYww1iFL+yrFXsgYFBnmkeP4DsPK\n"
"ZN5mm4XoHeTC4AaH1SSRVdT7nEg6GVK1NbjFtbbEQaz7eKqnnpVniDK3RE3iOLjB\n"
"nHVWcsZJZlVJjcKAkw5vacGJ6Q8CgYEA4zmLYGXY1qpkc0EQonzBxXUkI8pwfPal\n"
"6w2/VUdmBmLD0DVRrugnVHnGNLmNk2QXoMqN40vhgD9tdY3BMVBmoRyZLgDpEhXz\n"
"0XlLiONRkEWsqgzYoC0IG4fSvAsFlPqrXiTg34H/s74CtJ+nLF3hO/HfSkfulM/C\n"
"dj9OFPgHm68CgYBr4ct3iAJrbhly0lM6iH5NmTAfOGGg6CNa3kK6qgPFF3qstgNu\n"
"JdfOdlmFmSG8dptCNvf96qXo5l6ufVXd+vOrtEowJZXu0RoxDq1k+7ZrCmqszhc2\n"
"WB0JyG6ey9VbuvxNp85FyctbOBQYuMLppSk/Pc2j9Q+vg5ouHWPqqH3WhQKBgCF+\n"
"8SHjwaRbd/VZiRc65uGx1AMGq7BwN6M/4o2yucKFOrJtub3b8ThNvz80fz9UCPum\n"
"AGaaYAKk1wD2RZ18abSkX5xde/4ziD6/77edMv/elYZ34FM0cDaGvjUENu1wSmTV\n"
"cOTh6AzaHNH9mwo6SKKqlC0CD5SWT+dYi60hpxV3AoGBAKJbh7ApcUzTvEKofrS7\n"
"xhzvnwW44cRdHNF25KMD+xkmw/4nrmifDrt+ZT5Zfa2PPBGRNDLP79mpxBnpaNLs\n"
"LMl2fZN7vg2xY/WurhSmQjl1OmW+wFbYU2Kfmsej1tmtaO4A9xpE5jsu+L5fmrt+\n"
"y/gd8YWuIVtUTY/HEOWneR/i\n"
"-----END PRIVATE KEY-----";
// cipher text
std::string cipher_text = Encryptor::public_encrypt(public_key, "Turtles are cool");
std::cout << "message (encrypted): " << cipher_text << std::endl;
// plain text
std::string plain_text = Encryptor::private_decrypt(private_key, cipher_text);
std::cout << "message (decrypted): " << plain_text << std::endl;
/*
//Example 2:
// write plain text to file in cipher text form
std::ofstream wfile ("cipher_text.txt", std::ios::binary);
Encryptor::public_encrypt_fp(public_key, "Monero is the king of privacy coins!", wfile);
// read cipher text from file in plain text form
std::ifstream rfile ("cipher_text.txt", std::ios::binary);
std::string plain_text;
Encryptor::private_decrypt_fp(private_key, plain_text, rfile);
std::cout << "message (decrypted): " << plain_text << std::endl;
*/
// Get SHA256 hash of pubkey content
std::string sha256sum;
Validator::generate_sha256_hash(public_key, sha256sum); // 451 bytes
std::cout << "sha256sum of pubkey content: " << sha256sum << std::endl;
return 0;
}
Loading…
Cancel
Save