Compare commits

...

8 Commits
1.1 ... master

Author SHA1 Message Date
R4SAS fba53c52ae
openssl -> libsodium 4 years ago
R4SAS d203e379b4
update windows resource file 4 years ago
R4SAS 1a8346542f
fix linux build 4 years ago
R4SAS d670fc3928
move to libsodium 4 years ago
R4SAS 187af46560
change optimization level 4 years ago
R4SAS 1c86a55cce
move optimization flags 4 years ago
R4SAS 3b89468ad3
optimize makefile 4 years ago
R4SAS 259a9de034
remove optimisations for debug build 4 years ago
  1. 21
      Makefile
  2. 5
      Makefile.mingw
  3. 4
      README.md
  4. 126
      sygcpp.cpp
  5. 10
      windows/resource.rc

21
Makefile

@ -5,17 +5,17 @@ STATIC := no @@ -5,17 +5,17 @@ STATIC := no
DEBUG := no
SYG_SRC = sygcpp.cpp
SYGCPP = sygcpp
SYGCPP = build/sygcpp
ifeq ($(DEBUG),yes)
CXX_DEBUG = -g
CXXFLAGS := -g -Og
LDFLAGS := -Og
else
LD_DEBUG = -s
CXXFLAGS := -O3
LDFLAGS := -s -O3
endif
CXXFLAGS = $(CXX_DEBUG) -fPIC
LDFLAGS = $(LD_DEBUG) -Os
CXXFLAGS += -fPIC
SYG_OBJS = $(patsubst %.cpp,obj/%.o,$(SYG_SRC))
ifneq (, $(findstring mingw, $(SYS))$(findstring cygwin, $(SYS)))
@ -23,13 +23,9 @@ ifneq (, $(findstring mingw, $(SYS))$(findstring cygwin, $(SYS))) @@ -23,13 +23,9 @@ ifneq (, $(findstring mingw, $(SYS))$(findstring cygwin, $(SYS)))
else
ifeq ($(STATIC),yes)
LIBPATH = /usr/lib/$(SYS)
LDLIBS = -pthread $(LIBPATH)/libcrypto.a -lpthread -ldl
else ifeq ($(STATIC),full)
LIBPATH = /usr/lib/$(SYS)
LDFLAGS += -static
LDLIBS = -pthread $(LIBPATH)/libcrypto.a -lpthread -ldl
LDLIBS = -pthread $(LIBPATH)/libsodium.a -lpthread -ldl
else
LDLIBS = -lcrypto -lpthread
LDLIBS = -lsodium -lpthread
endif
endif
@ -37,6 +33,7 @@ all: mk_obj_dir $(SYGCPP) @@ -37,6 +33,7 @@ all: mk_obj_dir $(SYGCPP)
mk_obj_dir:
@mkdir -p obj/windows
@mkdir -p build
clean:
$(RM) -r obj $(SYGCPP)

5
Makefile.mingw

@ -1,9 +1,8 @@ @@ -1,9 +1,8 @@
WINDRES = windres
SYG_RC = windows/resource.rc
LDFLAGS = $(LD_DEBUG) -Os -Wl,-Bstatic
LDLIBS = -static-libgcc -lcrypto -lws2_32 -lpthread
LDFLAGS += -Wl,-Bstatic
LDLIBS = -static-libgcc -lsodium -lws2_32 -lpthread
SYG_OBJS += $(patsubst %.rc,obj/%.o,$(SYG_RC))

4
README.md

@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
* Install required packages
```bash
pacman -S make mingw-w64-x86_64-gcc mingw-w64-x86_64-openssl
pacman -S make mingw-w64-x86_64-gcc mingw-w64-x86_64-libsodium
```
* Compile application
@ -22,7 +22,7 @@ make @@ -22,7 +22,7 @@ make
* Install required packages
```
sudo apt-get install make g++ libssl-dev
sudo apt-get install make g++ libsodium-dev
```
* Compile application

126
sygcpp.cpp

@ -10,9 +10,6 @@ @@ -10,9 +10,6 @@
*
*/
#include <openssl/evp.h> // библиотека OpenSSL
#include <openssl/sha.h>
#include <openssl/bn.h>
#include <iostream> // вывод на экран
#include <string>
#include <sstream>
@ -25,24 +22,36 @@ @@ -25,24 +22,36 @@
#include <chrono> // для паузы в заставке
#include <ctime>
// криптография
#include <sodium/crypto_hash_sha512.h>
#include <sodium/crypto_scalarmult_curve25519.h>
#include <sodium/randombytes.h>
// преобразование в IPv6
#ifdef _WIN32
#include <ws2tcpip.h>
#else
#include <arpa/inet.h>
#endif
////////////////////////////////////////////////// Заставка
void intro()
{
std::cout << std::endl
<< " +----------------------------------------------------------------------------+" << std::endl
<< " | SimpleYggGen C++ 1.1-train |" << std::endl
<< " | OpenSSL inside: x25519 -> sha512 |" << std::endl
<< " | notabug.org/acetone/SimpleYggGen-CPP |" << std::endl
<< " | |" << std::endl
<< " | developers: acetone, lialh4, orignal, R4SAS |" << std::endl
<< " | GPLv3 (c) 2020 |" << std::endl
<< " +--------------------------------------------------------------------------+" << std::endl
<< " | SimpleYggGen C++ 2.0-outrunning |" << std::endl
<< " | libsoduim inside: x25519 -> sha512 |" << std::endl
<< " | notabug.org/acetone/SimpleYggGen-CPP |" << std::endl
<< " | |" << std::endl
<< " | developers: acetone, lialh4, orignal, R4SAS, Vort |" << std::endl
<< " | GPLv3 (c) 2020 |" << std::endl
<< " +";
for(int i = 0; i < 76; ++i)
for(int i = 0; i < 74; ++i)
{
std::cout << "-";
std::cout.flush();
std::this_thread::sleep_for(std::chrono::milliseconds(20));
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
std::cout << "+" << std::endl;
}
@ -59,8 +68,9 @@ int conf_high = 0; @@ -59,8 +68,9 @@ int conf_high = 0;
std::string conf_search;
std::string log_file;
std::chrono::time_point<std::chrono::high_resolution_clock> startTime;
uint64_t totalcount = 0; // счетчик основного цикла
uint64_t totalcountfortune = 0; // счетчик нахождений
uint64_t totalcountfortune = 0; // счетчик найденного
bool newline = true; // используется для вывода счетчика
int config()
@ -160,25 +170,15 @@ struct BoxKeys @@ -160,25 +170,15 @@ struct BoxKeys
BoxKeys getKeyPair()
{
BoxKeys keys;
size_t len = KEYSIZE;
EVP_PKEY_CTX * Ctx;
EVP_PKEY * Pkey = nullptr;
Ctx = EVP_PKEY_CTX_new_id (NID_X25519, NULL);
EVP_PKEY_keygen_init (Ctx);
EVP_PKEY_keygen (Ctx, &Pkey);
EVP_PKEY_get_raw_public_key (Pkey, keys.PublicKey, &len);
EVP_PKEY_get_raw_private_key (Pkey, keys.PrivateKey, &len);
EVP_PKEY_CTX_free(Ctx);
EVP_PKEY_free(Pkey);
randombytes(keys.PrivateKey, KEYSIZE);
keys.PrivateKey[0] &= 248;
keys.PrivateKey[KEYSIZE - 1] &= 127;
keys.PrivateKey[KEYSIZE - 1] |= 64;
crypto_scalarmult_curve25519_base(keys.PublicKey, keys.PrivateKey);
return keys;
}
int getOnes(const unsigned char HashValue[SHA512_DIGEST_LENGTH])
int getOnes(const unsigned char HashValue[crypto_hash_sha512_BYTES])
{
bool done = false;
int lOnes = 0; // кол-во лидирующих единиц
@ -200,7 +200,7 @@ int getOnes(const unsigned char HashValue[SHA512_DIGEST_LENGTH]) @@ -200,7 +200,7 @@ int getOnes(const unsigned char HashValue[SHA512_DIGEST_LENGTH])
return lOnes;
}
std::string getAddress(unsigned char HashValue[SHA512_DIGEST_LENGTH])
std::string getAddress(unsigned char HashValue[crypto_hash_sha512_BYTES])
{
// функция "портит" массив хэша, т.к. копирование массива не происходит
int lErase = getOnes(HashValue) + 1; // лидирующие единицы и первый ноль
@ -228,44 +228,15 @@ std::string getAddress(unsigned char HashValue[SHA512_DIGEST_LENGTH]) @@ -228,44 +228,15 @@ std::string getAddress(unsigned char HashValue[SHA512_DIGEST_LENGTH])
}
}
std::string address;
bool shortadd = false;
std::stringstream ss(address);
ss << 0x02 << std::setw(2) << std::setfill('0') << std::hex << lErase - 1 << ":";
// 2 - константа подсети Yggdrasil, второй байт - кол-во лидирующих единиц в хешэ
uint8_t ipAddr[16];
ipAddr[0] = 0x02;
ipAddr[1] = lErase - 1;
for (int i = 0; i < 14; ++i)
ipAddr[i + 2] = HashValue[i];
for(int i = 0; i < 14; ++i)
{
if(i % 2 == 0) // если работаем с первым байтом секции
{
if(HashValue[i] == 0) // если байт нулевой
{
if(HashValue[i+1] == 0) // если следующий байт нулевой
{
if(HashValue[i+2] == 0 && i+2 < 13 && HashValue[i+3] == 0 && i+3 <= 13 && !shortadd)
{
ss << ":";
i += 3;
shortadd = true;
continue;
} else {
ss << "0";
++i;
}
}
} else {
ss << std::hex << (int)HashValue[i];
}
} else { // если работаем со вторым байтом секции
if(HashValue[i-1] == 0) // если предыдущий первый байт был нулевой, нули сокращаем
ss << std::hex << (int)HashValue[i];
else
ss << std::setw(2) << std::setfill('0') << std::hex << (int)HashValue[i];
}
if(i != 13 && i % 2 != 0) // не выводим двоеточие в конце адреса и после первого байта секции
ss << ":";
}
return ss.str();
char ipStrBuf[46];
inet_ntop(AF_INET6, ipAddr, ipStrBuf, 46);
return std::string(ipStrBuf);
}
void getConsoleLog()
@ -281,8 +252,14 @@ void getConsoleLog() @@ -281,8 +252,14 @@ void getConsoleLog()
}
std::time_t realtime = std::time(NULL);
std::cout << " # count [ " << std::dec << std::setfill('.') << std::setw(19) << totalcount << " ] [ "
<< std::setw(15) << totalcountfortune << " ] " << std::asctime(std::localtime(&realtime));
auto stopTime = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(stopTime - startTime);
startTime = stopTime;
float khs = 250000000.0 / duration.count();
std::cout << " [ " << std::setw(7) << std::fixed << std::setprecision(3) << std::setfill('_') << khs << " kH/s ] "
<< "T: [ " << std::setfill('_') << std::left << std::dec << std::setw(16) << totalcount << " ] "
<< "F: [ " << std::right << std::setw(3) << totalcountfortune << " ] "
<< std::asctime(std::localtime(&realtime));
std::cout.flush();
}
mtx.unlock();
@ -290,15 +267,16 @@ void getConsoleLog() @@ -290,15 +267,16 @@ void getConsoleLog()
void highminer()
{
unsigned char HashValue[SHA512_DIGEST_LENGTH];
unsigned char HashValue[crypto_hash_sha512_BYTES];
uint8_t PublicKeyBest[KEYSIZE];
uint8_t PrivateKeyBest[KEYSIZE];
startTime = std::chrono::high_resolution_clock::now();
while(true)
{
BoxKeys myKeys = getKeyPair();
SHA512(myKeys.PublicKey, KEYSIZE, HashValue);
crypto_hash_sha512(HashValue, myKeys.PublicKey, KEYSIZE);
int newones = getOnes(HashValue);
if(newones > conf_high) // сохранение лучших ключей
@ -356,15 +334,15 @@ void highminer() @@ -356,15 +334,15 @@ void highminer()
void nameminer()
{
unsigned char HashValue[SHA512_DIGEST_LENGTH];
unsigned char HashValue[crypto_hash_sha512_BYTES];
uint8_t PublicKeyBest[KEYSIZE];
uint8_t PrivateKeyBest[KEYSIZE];
startTime = std::chrono::high_resolution_clock::now();
while(true)
{
BoxKeys myKeys = getKeyPair();
SHA512(myKeys.PublicKey, KEYSIZE, HashValue);
crypto_hash_sha512(HashValue, myKeys.PublicKey, KEYSIZE);
std::string tempstr = getAddress(HashValue);
if(tempstr.find(conf_search.c_str()) != std::string::npos) // сохранение найденных ключей

10
windows/resource.rc

@ -8,8 +8,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US @@ -8,8 +8,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
MAINICON ICON "syg-cpp-logo.ico"
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,1,0,0
PRODUCTVERSION 1,1,0,0
FILEVERSION 2,0,0,0
PRODUCTVERSION 2,0,0,0
FILEOS 0x40004L
FILETYPE 0x1L
@ -22,11 +22,11 @@ BEGIN @@ -22,11 +22,11 @@ BEGIN
BEGIN
VALUE "CompanyName", "acetone"
VALUE "FileDescription", "SimpleYggGen"
VALUE "FileVersion", "1.1.0.0"
VALUE "FileVersion", "2.0.0.0"
VALUE "LegalCopyright", "Copyright (C) 2020, acetone"
VALUE "OriginalFilename", "sygcpp"
VALUE "OriginalFilename", "sygcpp.exe"
VALUE "ProductName", "SimpleYggGen"
VALUE "ProductVersion", "1.1-train"
VALUE "ProductVersion", "2.0-outrunning"
END
END
BLOCK "VarFileInfo"

Loading…
Cancel
Save