Merge pull request #1 from Bendr0id/cn_conceal_ccx

Cn conceal ccx
This commit is contained in:
Miner1305 2019-07-24 12:14:15 +05:30 committed by GitHub
commit 50bd45c185
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
277 changed files with 43711 additions and 4661 deletions

2
.gitignore vendored
View file

@ -10,3 +10,5 @@ CMakeCache.txt
cmake_install.cmake cmake_install.cmake
Makefile Makefile
cmake-build-release/ cmake-build-release/
src/crypto/asm/*.inc
src/crypto/asm/win/*.inc

21
.travis.yml Normal file
View file

@ -0,0 +1,21 @@
os: osx
osx_image: xcode8
sudo: false
language: cpp
compiler: gcc
before_install:
brew update
script:
- brew install gcc libuv libmicrohttpd
- brew upgrade boost
- cmake . -DUV_LIBRARY=/usr/local/lib/libuv.a -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_SSL_LIBRARY=/usr/local/opt/openssl/lib/libssl.a -DOPENSSL_CRYPTO_LIBRARY=/usr/local/opt/openssl/lib/libcrypto.a -DBOOST_ROOT=/usr/local/lib
- make
- cp ./src/config.json .
- ./xmrigDaemon --version
- ./xmrigDaemon --help

View file

@ -1,3 +1,114 @@
# 1.9.3
- Fixed Multihashfactor auto detection for CN-Ultralite/Extremelite #248
- Fixed donation address for UPX2/CN-Extremelite
# 1.9.2
- Integrated cn-extremelite a.k.a upx2 (algo: "cryptonight-extremelite", variant: "upx2")
- Improved hashfactor autodetection for cnv8 and r based coins
- Integrated merged templates and replace of @WORKER-ID@ in template assignment
# 1.9.1
- Fix coloring of outdated miners on Dashboard
- Autodetect for fork of CN/R(variant: "auto"), Graft(variant: "rwz"), Zelerius(variant: "zls")
# 1.9.0
- Integrated Monero CN-R variant so called CNv4, aka CN-R, aka CNv5, aka Cryptonight-R #233 (algo: "cryptonight", variant: "r")
- Integrated Wownero CN-R variant #233 (algo: "cryptonight", variant: "wow")
- Integrated Graft variant (algo: "cryptonight", variant: "rwz" OR variant: "graft")
- Integrated X-Cash variant #234 (algo: "cryptonight", variant: "double" OR variant: "heavyx" OR variant: "xcash")
- Integrated Zelerius variant (algo: "cryptonight", variant: "zls" OR variant: "zelerius")
- Add miner version column to the Dashboard (version turns red when its outdated)
- Fixed crash when remote logging is disabled
- Added config parameter --skip-self-check to skip the algo verification check on startup to improce startup speed. Use with caution and only if you know that the algos are working fine on your machine.
# 1.8.13
- Integrated HOSP variant (algo: "cryptonight", variant: "hosp")
- Added ASM code/optimization for HOSP and RTO on Intel CPUs
- Fixed memory/hugepages printout for cn-ultralite/turtle
- Fixed compile issues on some compilers
# 1.8.12
- Fixed #228 "force-pow-variant" overrules autodetect for XTLv9/Fast2
- Fixed out of source building (asm code generator)
- Fixed gcc 8 builds (self check failed)
- CN-Ultralite is shown correctly on the Dashboard
# 1.8.11
- Implemented fix for upcominng Massari fork
- Refactoring ASM code/cleanup
- Fixed broke ARMv8 code for all CN variants (self check failed)
# 1.8.10
- Fixed broken XTL variant Autodetect
# 1.8.9
- Added cn-ultralite algo used by upcoming TurtleV2 fork (algo: "cryptonight-ultralite", variant "auto")
# 1.8.8
- Added XLT v5/9 with autodetect(algo: "cryptonight", variant: "xtl" (autodetect), "xtlv9" (force v9))
- Added cn-lite variant UPX/uPlexa (algo: "cryptonight-lite", variant "upx")
- Added force-pow-variant parameter to force usage of the variant from the config and skip parsing of pow/variant from job/pool
# 1.8.7
- Implemented Template based mass config editor to simple swap configs on your rigs
# 1.8.6
- Integrated Telegram push notifications
- Fixed multi miner editor
- Added miner offline/online status push notification
- Added 0/recovered hashrate push notification
# 1.8.5
- Add remote reboot (machine) feature to Dashboard, Server & Miner
- Integrated Pushover push notifications for Offline miners and periodical status notifications on iOS and Android
# 1.8.4
- Added XFH (Freehaven-project) support aka CN-Heavy-superfast
- Hashrate improve -> CN-Fast (MSR and others) ASM code for Intel CPUs
- Hashrate improve -> CNv2 ASM code for AMD Bulldozer CPUs
- Fix memory leak in cc client component
- Alloy algo is now shown as XAO on Dashboard
# 1.8.2
- Fix for mining conceal or other coins with cn-msr
- Fixed avg.time on Dashboard
# 1.8.1
- Fix connection stuck in Failover case when DNS resolve fails #197
- Fix supported-variants announcement in login
# 1.8.0
- Integration of cnv2 aka moneroV8
- Hashrate improve -> all cnv1, cn-litev1, cnv2, xtl by adding ASM code for Intel/AMD and softaes [thx @SChernykh]
- Fixes for OSX builds [thx @djfinch]
- Fixed safe mode #173
# 1.7.0
- First official Release of XMRigCC-amd #33 #3
- Full integration of xmrigCC-amd into XMRigCCServer/Dashboard with GPUInfo / remote logging
- Config property to enable/disable config upload on startup (--cc-upload-config-on-startup) #80
- Refactoring of remote logging feature: #143
- Only deltas will be send to the XMRigCCServer
- Fetching miner log on dashboard upon need
- Maximum lines of log history kept per miner can be configured on XMRigCCServer
- Fix correct hugepages status on Dashboard
- Fix cpu affinity for single thread usage
- Add all needed security infos to XMRigCCServer logging to harden the server (f.e. fail2ban)
- Fix commandline params overwrite config.json #157
- Fix bulding of miner with API support Cannot #145
# 1.6.5
- Hashrate improve -> add autodetection mode for cpu-affinity
- Hashrate improve, more stable hashrates -> refactor memory allocation
- Add Arto (RTO) support (cn [2mb scratchpad] + ipbc mod)
- Add TubeV4 (TUBE) support (cn-heavy [4mb scratchpad] + ipbc mod + soft-aes mod)
- Add external IP to log view
- Fix memory leak in RemoteLog
- Fix crash Filelog
- Fix stop/freeze of cc communication on some miners
- Fix cn-heavy on arm processors
# 1.6.4
- Fix connection issues #130
- Remote logging (Miner log on the Dashboard)
- Add resetClientStatusList button to Dashboard #129
- Fix new version notification #132
- Add Masari (MSR) v7 support
- Add Haven Protocol (XHV) v3 support
# 1.6.3
- Added shift+click function for multi row selection to Dashboard
- Added -DBUILD_STATIC=ON/OFF option to CMake configuration to create fully static builds
- Added current algo and list of supported_varaints to login message for future usage on proxy
- Added support for latest Stellite (XTL) and Alloy (XAO) variants
- Simplification of configuration, "force-pow-variant" and "cryptonight-lite-ipbc" parameters are now deprecated see [Coin Configuration](https://github.com/Bendr0id/xmrigCC/wiki/Coin-configurations) for guidance
- Fixed leaks in transport shutdown
# 1.6.2
- Implementation of CN-Lite-IPBC algo
- Fixed Windows 32bit build / crashes
- Fixed XMRigCCServer crash when auth header is manipulated
# 1.6.1
- beta
# 1.6.0 # 1.6.0
- Complete rewrite of the stratum TCP/TLS network communication using boost::asio to fix connection issues and crashs - Complete rewrite of the stratum TCP/TLS network communication using boost::asio to fix connection issues and crashs
- Force of PoW via "variant" parameter in xmrg-proxy 2.5.2+, it now overrules local settings - Force of PoW via "variant" parameter in xmrg-proxy 2.5.2+, it now overrules local settings

View file

@ -10,12 +10,19 @@ option(WITH_HTTPD "HTTP REST API" OFF)
option(WITH_CC_CLIENT "CC Client" ON) option(WITH_CC_CLIENT "CC Client" ON)
option(WITH_CC_SERVER "CC Server" ON) option(WITH_CC_SERVER "CC Server" ON)
option(WITH_TLS "TLS support" ON) option(WITH_TLS "TLS support" ON)
set(MINER_EXECUTABLE_NAME "xmrigMiner" CACHE STRING "Miner executable file name") option(WITH_ASM "ASM optimizations" ON)
set(DAEMON_EXECUTABLE_NAME "xmrigDaemon" CACHE STRING "Daemon executable file name") option(BUILD_STATIC "Build static binary" OFF)
set(Boost_USE_STATIC_RUNTIME ON) set(Boost_USE_STATIC_RUNTIME ON)
set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_STATIC_LIBS ON)
if(NOT MINER_EXECUTABLE_NAME)
set(MINER_EXECUTABLE_NAME "xmrigMiner" CACHE STRING "Miner executable file name")
endif(NOT MINER_EXECUTABLE_NAME)
if(NOT DAEMON_EXECUTABLE_NAME)
set(DAEMON_EXECUTABLE_NAME "xmrigDaemon" CACHE STRING "Daemon executable file name")
endif(NOT DAEMON_EXECUTABLE_NAME)
include (CheckIncludeFile) include (CheckIncludeFile)
include (cmake/cpu.cmake) include (cmake/cpu.cmake)
@ -46,7 +53,8 @@ set(SOURCES_CRYPTO
src/crypto/c_blake256.c src/crypto/c_blake256.c
src/crypto/c_jh.c src/crypto/c_jh.c
src/crypto/c_skein.c src/crypto/c_skein.c
src/crypto/CryptoNight.cpp src/crypto/HashSelector.cpp
src/crypto/CryptoNightR_gen.cpp
) )
set(SOURCES_COMMON set(SOURCES_COMMON
@ -56,6 +64,7 @@ set(SOURCES_COMMON
src/Options.cpp src/Options.cpp
src/log/ConsoleLog.cpp src/log/ConsoleLog.cpp
src/log/FileLog.cpp src/log/FileLog.cpp
src/log/RemoteLog.cpp
src/log/Log.cpp src/log/Log.cpp
src/Platform.cpp src/Platform.cpp
src/Cpu.cpp src/Cpu.cpp
@ -121,9 +130,9 @@ find_package(UV REQUIRED)
if (WIN32) if (WIN32)
add_definitions(-DBOOST_ALL_NO_LIB) add_definitions(-DBOOST_ALL_NO_LIB)
endif() endif(WIN32)
find_package(Boost 1.63.0 COMPONENTS system REQUIRED) find_package(Boost 1.62.0 COMPONENTS system REQUIRED)
include(cmake/flags.cmake) include(cmake/flags.cmake)
@ -137,10 +146,10 @@ if (WITH_TLS)
set(SOURCES_SSL_TLS src/net/BoostTlsConnection.cpp) set(SOURCES_SSL_TLS src/net/BoostTlsConnection.cpp)
else() else()
message(FATAL_ERROR "OpenSSL NOT found: use `-DWITH_TLS=OFF` to build without TLS support") message(FATAL_ERROR "OpenSSL NOT found: use `-DWITH_TLS=OFF` to build without TLS support")
endif() endif(OPENSSL_FOUND)
else() else()
add_definitions(/DXMRIG_NO_TLS) add_definitions(/DXMRIG_NO_TLS)
endif() endif(WITH_TLS)
if (WITH_LIBCPUID) if (WITH_LIBCPUID)
add_subdirectory(src/3rdparty/libcpuid) add_subdirectory(src/3rdparty/libcpuid)
@ -155,8 +164,8 @@ else()
set(SOURCES_CPUID src/Cpu_arm.cpp) set(SOURCES_CPUID src/Cpu_arm.cpp)
else() else()
set(SOURCES_CPUID src/Cpu_stub.cpp) set(SOURCES_CPUID src/Cpu_stub.cpp)
endif() endif(XMRIG_ARM)
endif() endif(WITH_LIBCPUID)
CHECK_INCLUDE_FILE (syslog.h HAVE_SYSLOG_H) CHECK_INCLUDE_FILE (syslog.h HAVE_SYSLOG_H)
if (HAVE_SYSLOG_H) if (HAVE_SYSLOG_H)
@ -172,11 +181,11 @@ if (WITH_HTTPD)
set(HTTPD_SOURCES src/api/Httpd.h src/api/Httpd.cpp) set(HTTPD_SOURCES src/api/Httpd.h src/api/Httpd.cpp)
else() else()
message(FATAL_ERROR "microhttpd NOT found: use `-DWITH_HTTPD=OFF` to build without http deamon support") message(FATAL_ERROR "microhttpd NOT found: use `-DWITH_HTTPD=OFF` to build without http deamon support")
endif() endif(MHD_FOUND)
else() else()
add_definitions(/DXMRIG_NO_HTTPD) add_definitions(/DXMRIG_NO_HTTPD)
add_definitions(/DXMRIG_NO_API) add_definitions(/DXMRIG_NO_API)
endif() endif(WITH_HTTPD)
if (WITH_CC_SERVER) if (WITH_CC_SERVER)
find_package(MHD) find_package(MHD)
@ -185,7 +194,7 @@ if (WITH_CC_SERVER)
include_directories(${MHD_INCLUDE_DIRS}) include_directories(${MHD_INCLUDE_DIRS})
else() else()
message(FATAL_ERROR "microhttpd NOT found: use `-DWITH_CC_SERVER=OFF` to build without CC Server support") message(FATAL_ERROR "microhttpd NOT found: use `-DWITH_CC_SERVER=OFF` to build without CC Server support")
endif() endif(MHD_FOUND)
set(SOURCES_CC_SERVER set(SOURCES_CC_SERVER
src/cc/CCServer.cpp src/cc/CCServer.cpp
@ -194,20 +203,34 @@ if (WITH_CC_SERVER)
src/cc/Httpd.cpp src/cc/Httpd.cpp
src/cc/XMRigCC.cpp src/cc/XMRigCC.cpp
) )
endif() endif(WITH_CC_SERVER)
if (WITH_CC_CLIENT) if (WITH_CC_CLIENT)
set(SOURCES_CC_CLIENT set(SOURCES_CC_CLIENT
src/cc/CCClient.cpp) src/cc/CCClient.cpp)
endif() endif(WITH_CC_CLIENT)
if (WITH_CC_SERVER OR WITH_CC_CLIENT) if (WITH_CC_SERVER OR WITH_CC_CLIENT)
set(SOURCES_CC_COMMON set(SOURCES_CC_COMMON
src/cc/ControlCommand.cpp src/cc/ControlCommand.cpp
src/cc/ClientStatus.cpp) src/cc/ClientStatus.cpp
src/cc/GPUInfo.cpp)
else() else()
add_definitions(/DXMRIG_NO_CC) add_definitions(/DXMRIG_NO_CC)
endif() endif(WITH_CC_SERVER OR WITH_CC_CLIENT)
if (WITH_ASM AND NOT XMRIG_ARM AND CMAKE_SIZEOF_VOID_P EQUAL 8)
include(cmake/asm.cmake)
else()
add_definitions(/DXMRIG_NO_ASM)
endif(WITH_ASM AND NOT XMRIG_ARM AND CMAKE_SIZEOF_VOID_P EQUAL 8)
add_subdirectory(src/3rdparty/argon2)
set(ARGON2_LIBRARY argon2)
if (BUILD_STATIC)
set(CMAKE_EXE_LINKER_FLAGS " -static")
endif(BUILD_STATIC)
include_directories(src) include_directories(src)
include_directories(src/3rdparty) include_directories(src/3rdparty)
@ -230,16 +253,19 @@ add_executable(xmrigMiner ${SOURCES} ${SOURCES_CRYPTO} ${HTTPD_SOURCES} ${SOURCE
set_target_properties(xmrigMiner PROPERTIES OUTPUT_NAME ${MINER_EXECUTABLE_NAME}) set_target_properties(xmrigMiner PROPERTIES OUTPUT_NAME ${MINER_EXECUTABLE_NAME})
target_link_libraries(xmrigMiner xmrig_common xmrig_os_dependencies xmrig_cpuid ${Boost_LIBRARIES} target_link_libraries(xmrigMiner xmrig_common xmrig_os_dependencies xmrig_cpuid ${Boost_LIBRARIES}
${UV_LIBRARIES} ${MHD_LIBRARY} ${EXTRA_LIBS} ${CPUID_LIB}) ${UV_LIBRARIES} ${MHD_LIBRARY} ${EXTRA_LIBS} ${CPUID_LIB} argon2)
if (WITH_CC_CLIENT) if (WITH_CC_CLIENT)
target_link_libraries(xmrigMiner xmrig_cc_common) target_link_libraries(xmrigMiner xmrig_cc_common)
endif (WITH_CC_CLIENT) endif(WITH_CC_CLIENT)
if (WITH_TLS) if (WITH_TLS)
target_link_libraries(xmrigMiner xmrig_tls ${OPENSSL_LIBRARIES} ${EXTRA_LIBS}) target_link_libraries(xmrigMiner xmrig_tls ${OPENSSL_LIBRARIES} ${EXTRA_LIBS})
target_link_libraries(xmrigMiner xmrig_tls ${OPENSSL_LIBRARIES} ${EXTRA_LIBS}) endif(WITH_TLS)
endif (WITH_TLS)
if (WITH_ASM AND NOT XMRIG_ARM AND CMAKE_SIZEOF_VOID_P EQUAL 8)
target_link_libraries(xmrigMiner xmrig_asm)
endif(WITH_ASM AND NOT XMRIG_ARM AND CMAKE_SIZEOF_VOID_P EQUAL 8)
add_executable(xmrigDaemon src/cc/XMRigd.cpp res/app.rc) add_executable(xmrigDaemon src/cc/XMRigd.cpp res/app.rc)
set_target_properties(xmrigDaemon PROPERTIES OUTPUT_NAME ${DAEMON_EXECUTABLE_NAME}) set_target_properties(xmrigDaemon PROPERTIES OUTPUT_NAME ${DAEMON_EXECUTABLE_NAME})
@ -252,11 +278,11 @@ if (WITH_CC_SERVER AND MHD_FOUND)
${UV_LIBRARIES} ${MHD_LIBRARY} ${EXTRA_LIBS} ${CPUID_LIB}) ${UV_LIBRARIES} ${MHD_LIBRARY} ${EXTRA_LIBS} ${CPUID_LIB})
if (WITH_TLS) if (WITH_TLS)
target_link_libraries(xmrigCCServer xmrig_tls ${OPENSSL_LIBRARIES}) target_link_libraries(xmrigCCServer xmrig_tls ${OPENSSL_LIBRARIES} ${EXTRA_LIBS})
endif (WITH_TLS) endif (WITH_TLS)
set_target_properties(xmrig_common_cc PROPERTIES COMPILE_FLAGS "-DXMRIG_CC_SERVER ${SHARED_FLAGS}") set_target_properties(xmrig_common_cc PROPERTIES COMPILE_FLAGS "-DXMRIG_CC_SERVER ${SHARED_FLAGS}")
set_target_properties(xmrigCCServer PROPERTIES COMPILE_FLAGS "-DXMRIG_CC_SERVER ${SHARED_FLAGS}") set_target_properties(xmrigCCServer PROPERTIES COMPILE_FLAGS "-DXMRIG_CC_SERVER ${SHARED_FLAGS}")
endif() endif(WITH_CC_SERVER AND MHD_FOUND)
add_subdirectory(test EXCLUDE_FROM_ALL) add_subdirectory(test EXCLUDE_FROM_ALL)

View file

@ -1,12 +1,8 @@
FROM ubuntu:latest FROM ubuntu:latest
RUN apt-get update && \ RUN apt-get update && \
apt-get install software-properties-common git build-essential libbz2-dev cmake libuv1-dev libssl-dev wget -y apt install git build-essential libbz2-dev cmake libuv1-dev libssl-dev wget gcc g++ -y && \
apt clean && \
RUN add-apt-repository ppa:jonathonf/gcc-7.1 && \
apt-get update && \
apt-get install gcc-7 g++-7 -y && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
RUN wget https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.gz \ RUN wget https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.gz \
@ -18,7 +14,7 @@ RUN wget https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.
RUN git clone https://github.com/Bendr0id/xmrigCC.git && \ RUN git clone https://github.com/Bendr0id/xmrigCC.git && \
cd xmrigCC && \ cd xmrigCC && \
cmake . -DCMAKE_C_COMPILER=gcc-7 -DCMAKE_CXX_COMPILER=g++-7 -DWITH_CC_SERVER=OFF -DWITH_HTTPD=OFF && \ cmake . -DWITH_CC_SERVER=OFF -DWITH_HTTPD=OFF && \
make make
COPY Dockerfile /Dockerfile COPY Dockerfile /Dockerfile

View file

@ -1,6 +1,8 @@
# XMRigCC # XMRigCC
:warning: **To be prepared for the upcoming PoW changes you need to update your miners to at least release (1.5.5).** :bulb: **This is the CPU variant of XMRigCC, if you're looking for the AMD GPU (OpenCL) variant [click here](https://github.com/Bendr0id/xmrigCC-amd/).**
:warning: **Confused by all the forks? Check the [Coin Configuration](https://github.com/Bendr0id/xmrigCC/wiki/Coin-configurations) guide.**
[![Windows Build status](https://ci.appveyor.com/api/projects/status/l8v7cuuy320a4tpd?svg=true)](https://ci.appveyor.com/project/Bendr0id/xmrigcc) [![Windows Build status](https://ci.appveyor.com/api/projects/status/l8v7cuuy320a4tpd?svg=true)](https://ci.appveyor.com/project/Bendr0id/xmrigcc)
@ -15,15 +17,36 @@
### About XMRigCC ### About XMRigCC
XMRigCC is a fork of [XMRig](https://github.com/xmrig/xmrig) which adds the ability to remote control your XMRig instances via a Webfrontend and REST api. XMRigCC is a fork of [XMRig](https://github.com/xmrig/xmrig) which adds the ability to remote control your XMRig instances via a Webfrontend and REST api.
This fork is based on XMRig (2.4.5) and adds a "Command and Control" (C&C) server, a daemon to reload XMRig on config changes and modifications in XMRig to send the current status to the C&C Server. This fork is based on XMRig and adds a "Command and Control" (C&C) server, a daemon to reload XMRigCCMiner on config changes and modifications in XMRig to send the current status to the C&C Server.
The modified version can also handle commands like "update config", "start/stop mining" or "restart/shutdown" which can be send from the C&C-Server. The modified version can also handle commands like "update config", "start/stop mining" or "restart/shutdown" which can be send from the C&C-Server.
**AND MANY MORE**
Full Windows/Linux compatible, and you can mix Linux and Windows miner on one XMRigCCServer. Full Windows/Linux compatible, and you can mix Linux and Windows miner on one XMRigCCServer.
## Additional features of XMRigCC (on top of XMRig) ## Additional features of XMRigCC (on top of XMRig)
* **NEW: Support of Crytptonight-Heavy (Sumokoin, Haven, ...)**
* **NEW: Ready for Monero v7 PoW changes on April 6 2018** Check the [Coin Configuration](https://github.com/Bendr0id/xmrigCC/wiki/Coin-configurations) guide
* **NEW: Ready for Aeon v7 PoW changes on April 7? 2018** * **NEW Support of Crytptonight R (XMR) variant(algo: "cryptonight", variant "auto" (autodetect) or "r")**
* **NEW Support of Crytptonight WOW (Wownero) variant (algo: "cryptonight", variant "wow")**
* **NEW Support of Crytptonight Reverse Waltz (Graft) variant (algo: "cryptonight", variant "rwz" (autodetect) or variant "graft")**
* **NEW Support of Crytptonight Double/Heavyx (XCash) variant (algo: "cryptonight", variant "double")**
* **NEW Support of Crytptonight Zelerius variant (algo: "cryptonight", variant "zls")**
* **Support of Crytptonight RTO/HOSP variant (algo: "cryptonight", variant "rto" or variant "hosp")**
* **Support of Crytptonight-Ultralite TRTL/Turtle variant (algo: "cryptonight-ultralite", variant "auto")**
* **Support of Crytptonight-Lite UPX/uPlexa variant (algo: "cryptonight-lite", variant "upx")**
* **Support of Crytptonight XTL v5/v9 PoW changes aka CN-FastV2 (algo: "cryptonight", variant: "xtl" (autodetect), "xtlv9" (force v9))**
* **Support of Crytptonight XFH/SWAP variant aka CN-Heavy-Fast**
* **Support of Crytptonight v8 PoW changes aka CNV2 (XMR fork on Block 1685555)**
* **Support of Crytptonight-Heavy BitTube (TUBE) v4 variant (fork on Block 110000)**
* **Support of Crytptonight Masari (MSR) v7 variant (use variant "msr" to be ready for the fork, with autodetect)**
* **Support of Crytptonight-Heavy Haven Protocol (XHV) v3 variant (use variant "xhv")**
* **Support of Crytptonight Stellite (XTL) v4 variant**
* **Support of Crytptonight Alloy (XAO) variant**
* **Support of Crytptonight-Lite IPBC/TUBE variant**
* **Support of Crytptonight-Heavy (Loki, Ryo, ...)**
* **Support of Crytptonight v7 PoW changes aka CNV1**
* **Support of Crytptonight-Lite v7 PoW changes aka CN-LiteV1**
* Full SSL/TLS support for the whole communication: [Howto](https://github.com/Bendr0id/xmrigCC/wiki/tls) * Full SSL/TLS support for the whole communication: [Howto](https://github.com/Bendr0id/xmrigCC/wiki/tls)
- XMRigCCServer Dashboard <-> Browser - XMRigCCServer Dashboard <-> Browser
- XMRigCCServer <-> XMRigMiner - XMRigCCServer <-> XMRigMiner
@ -53,12 +76,11 @@ Full Windows/Linux compatible, and you can mix Linux and Windows miner on one XM
**XMRigCC Server** **XMRigCC Server**
![Screenshot of XMRigCC Server](https://i.imgur.com/0Ke9gIg.png) ![Screenshot of XMRigCC Server](https://i.imgur.com/iS1RzgO.png)
**XMRigCC Dashboard** **XMRigCC Dashboard**
![Screenshot of XMRigCC Dashboard](https://i.imgur.com/VwJaf26.png) ![Screenshot of XMRigCC Dashboard](https://imgur.com/UrdTHpM.png)
#### Table of contents #### Table of contents
* [Download](#download) * [Download](#download)
@ -94,6 +116,7 @@ xmrigCCServer --cc-port=3344 --cc-user=admin --cc-pass=pass --cc-access-token=SE
--cc-key-file=FILE when tls is turned on, use this to point to the right key file (default: server.key) --cc-key-file=FILE when tls is turned on, use this to point to the right key file (default: server.key)
--cc-client-config-folder=FOLDER Folder contains the client config files --cc-client-config-folder=FOLDER Folder contains the client config files
--cc-custom-dashboard=FILE loads a custom dashboard and serve it to '/' --cc-custom-dashboard=FILE loads a custom dashboard and serve it to '/'
--cc-client-log-lines-history=N maximum lines of log history kept per miner (default: 100)
--no-color disable colored output --no-color disable colored output
-S, --syslog use system log for output messages -S, --syslog use system log for output messages
-B, --background run the miner in the background -B, --background run the miner in the background
@ -118,15 +141,15 @@ xmrigDaemon -o pool.minemonero.pro:5555 -u YOUR_WALLET -p x -k --cc-url=IP_OF_CC
-O, --userpass=U:P username:password pair for mining server -O, --userpass=U:P username:password pair for mining server
-u, --user=USERNAME username for mining server -u, --user=USERNAME username for mining server
-p, --pass=PASSWORD password for mining server -p, --pass=PASSWORD password for mining server
-t, --threads=N number of miner threads (0 enables automatic selection of optimal number of threads, default: 0) -t, --threads=N number of miner threads
-m, --multihash-factor=N number of hash blocks per thread to process at a time (0 enables automatic selection of optimal number of hash blocks, default: 0) -A, --aesni=N selection of AES-NI mode (0 auto, 1 on, 2 off)
-A, --aesni=N selection of AES-NI mode (0 auto, 1 on, 2 off, default: 0)
-k, --keepalive send keepalived for prevent timeout (need pool support) -k, --keepalive send keepalived for prevent timeout (need pool support)
-r, --retries=N number of times to retry before switch to backup server (default: 5) -r, --retries=N number of times to retry before switch to backup server (default: 5)
-R, --retry-pause=N time to pause between retries (default: 5) -R, --retry-pause=N time to pause between retries (default: 5)
--force-pow-version=N force to use specific PoW variation (default: 0 POW_AUTODETECT, 1 POW_V1, 2 POW_V2) --pow-variant=V specificy the PoW variat to use: -> auto (default), 0 (v0), 1 (v1, aka monerov7, aeonv7), tube (ipbc), alloy, xtl (including autodetect for v5), msr, xhv, rto
--multihash-factor=N number of hash blocks to process at a time (not set or 0 enables automatic selection of optimal number of hash blocks) for further help see: https://github.com/Bendr0id/xmrigCC/wiki/Coin-configurations
--multihash-thread-mask for multihash-factor > 1 only, limits multihash to given threads (mask), (default: all threads) --multihash-factor=N number of hash blocks to process at a time (don't set or 0 enables automatic selection of optimal number of hash blocks)
--multihash-thread-mask=MASK limits multihash to given threads (mask), (default: all threads)
--cpu-affinity set process affinity to CPU core(s), mask 0x3 for cores 0 and 1 --cpu-affinity set process affinity to CPU core(s), mask 0x3 for cores 0 and 1
--cpu-priority set process priority (0 idle, 2 normal to 5 highest) --cpu-priority set process priority (0 idle, 2 normal to 5 highest)
--no-huge-pages disable huge pages support --no-huge-pages disable huge pages support
@ -145,6 +168,8 @@ xmrigDaemon -o pool.minemonero.pro:5555 -u YOUR_WALLET -p x -k --cc-url=IP_OF_CC
--cc-access-token=T access token for CC Server --cc-access-token=T access token for CC Server
--cc-worker-id=ID custom worker-id for CC Server --cc-worker-id=ID custom worker-id for CC Server
--cc-update-interval-s=N status update interval in seconds (default: 10 min: 1) --cc-update-interval-s=N status update interval in seconds (default: 10 min: 1)
--cc-use-remote-logging enable remote logging on CC Server
--cc-upload-config-on-startup upload current miner config to CC Server on startup
--no-color disable colored output --no-color disable colored output
-S, --syslog use system log for output messages -S, --syslog use system log for output messages
-B, --background run the miner in the background -B, --background run the miner in the background
@ -152,9 +177,6 @@ xmrigDaemon -o pool.minemonero.pro:5555 -u YOUR_WALLET -p x -k --cc-url=IP_OF_CC
-l, --log-file=FILE log all output to a file -l, --log-file=FILE log all output to a file
-h, --help display this help and exit -h, --help display this help and exit
-V, --version output version information and exit -V, --version output version information and exit
-v, --av=N DEPRECATED - algorithm variation, 0 auto select
--doublehash-thread-mask DEPRECATED - same as multihash-thread-mask
``` ```
Also you can use configuration via config file, default **[config.json](https://github.com/Bendr0id/xmrigCC/wiki/Config-XMRigDaemon)**. You can load multiple config files and combine it with command line options. Also you can use configuration via config file, default **[config.json](https://github.com/Bendr0id/xmrigCC/wiki/Config-XMRigDaemon)**. You can load multiple config files and combine it with command line options.
@ -270,14 +292,18 @@ Here are some result reported by users. Feel free to share your results, i'll ad
##### BenDroid (xmrigCC): ##### BenDroid (xmrigCC):
XMR: `4BEn3sSa2SsHBcwa9dNdKnGvvbyHPABr2JzoY7omn7DA2hPv84pVFvwDrcwMCWgz3dQVcrkw3gE9aTC9Mi5HxzkfF9ev1eH` XMR: `4BEn3sSa2SsHBcwa9dNdKnGvvbyHPABr2JzoY7omn7DA2hPv84pVFvwDrcwMCWgz3dQVcrkw3gE9aTC9Mi5HxzkfF9ev1eH`
AEON: `Wmtm4S2cQ8uEBBAVjvbiaVAPv2d6gA1mAUmBmjna4VF7VixLxLRUYag5cvsym3WnuzdJ9zvhQ3Xwa8gWxPDPRfcQ3AUkYra3W` AEON: `Wmtm4S2cQ8uEBBAVjvbiaVAPv2d6gA1mAUmBmjna4VF7VixLxLRUYag5cvsym3WnuzdJ9zvhQ3Xwa8gWxPDPRfcQ3AUkYra3W`
BTC: `128qLZCaGdoWhBTfaS7rytpbvG4mNTyAQm`
BTC: `3Gwq9tveCZtLAiXX7mxhjbrh38GPx1iXdB`
##### xmrig: ##### xmrig:
XMR: `48edfHu7V9Z84YzzMa6fUueoELZ9ZRXq9VetWzYGzKt52XU5xvqgzYnDK9URnRoJMk1j8nLwEVsaSWJ4fhdUyZijBGUicoD` XMR: `48edfHu7V9Z84YzzMa6fUueoELZ9ZRXq9VetWzYGzKt52XU5xvqgzYnDK9URnRoJMk1j8nLwEVsaSWJ4fhdUyZijBGUicoD`
BTC: `1P7ujsXeX7GxQwHNnJsRMgAdNkFZmNVqJT` BTC: `1P7ujsXeX7GxQwHNnJsRMgAdNkFZmNVqJT`
## Contact ## Contact
* ben [at] graef.in * ben [at] graef.in
* Telegram: @BenDr0id * Telegram: @BenDr0id
* [discord](https://discord.gg/r3rCKTB)
* [reddit](https://www.reddit.com/user/BenDr0id/) * [reddit](https://www.reddit.com/user/BenDr0id/)

View file

@ -1,5 +1,5 @@
# version format # version format
version: 1.6.{build} version: 1.9.{build}
# build only tags # build only tags
skip_non_tags: true skip_non_tags: true
@ -16,7 +16,7 @@ clone_folder: c:\xmrigCC
install: install:
- mkdir c:\xmrigCC-deps - mkdir c:\xmrigCC-deps
- curl -sL https://github.com/Bendr0id/xmrigCC-deps/releases/download/v1/xmrigCC-deps.zip -o xmrigCC-deps.zip - curl -sL https://github.com/Bendr0id/xmrigCC-deps/releases/download/v3/xmrigCC-deps.zip -o xmrigCC-deps.zip
- 7z x xmrigCC-deps.zip -o"c:\xmrigCC-deps" -y > nul - 7z x xmrigCC-deps.zip -o"c:\xmrigCC-deps" -y > nul
build_script: build_script:

179
cmake/asm.cmake Normal file
View file

@ -0,0 +1,179 @@
message("Generating ASM files")
# CN v1 original
set(ALGO "original")
set(ITERATIONS "524288") #0x80000
set(MASK "2097136") #0x1FFFF0
configure_file("src/crypto/asm/cnv1_main_loop_sandybridge.inc.in" "src/crypto/asm/cnv1_main_loop_sandybridge.inc")
configure_file("src/crypto/asm/cnv1_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/cnv1_main_loop_soft_aes_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv1_main_loop_sandybridge.inc.in" "src/crypto/asm/win/cnv1_main_loop_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv1_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/win/cnv1_main_loop_soft_aes_sandybridge.inc")
# CN v2 ORIGINAL
set(ALGO "originalv2")
set(ITERATIONS "524288") #0x80000
set(MASK "2097136") #0x1FFFF0
configure_file("src/crypto/asm/cnv2_main_loop_ivybridge.inc.in" "src/crypto/asm/cnv2_main_loop_ivybridge.inc")
configure_file("src/crypto/asm/cnv2_main_loop_bulldozer.inc.in" "src/crypto/asm/cnv2_main_loop_bulldozer.inc")
configure_file("src/crypto/asm/cnv2_main_loop_ryzen.inc.in" "src/crypto/asm/cnv2_main_loop_ryzen.inc")
configure_file("src/crypto/asm/cnv2_double_main_loop_sandybridge.inc.in" "src/crypto/asm/cnv2_double_main_loop_sandybridge.inc")
configure_file("src/crypto/asm/cnv2_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/cnv2_main_loop_soft_aes_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_ivybridge.inc.in" "src/crypto/asm/win/cnv2_main_loop_ivybridge.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_bulldozer.inc.in" "src/crypto/asm/win/cnv2_main_loop_bulldozer.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_ryzen.inc.in" "src/crypto/asm/win/cnv2_main_loop_ryzen.inc")
configure_file("src/crypto/asm/win/cnv2_double_main_loop_sandybridge.inc.in" "src/crypto/asm/win/cnv2_double_main_loop_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/win/cnv2_main_loop_soft_aes_sandybridge.inc")
# CN v1 FAST
set(ALGO "fast")
set(ITERATIONS "262144") #0x40000
set(MASK "2097136") #0x1FFFF0
configure_file("src/crypto/asm/cnv1_main_loop_sandybridge.inc.in" "src/crypto/asm/cnv1_main_loop_fast_sandybridge.inc")
configure_file("src/crypto/asm/cnv1_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/cnv1_main_loop_fast_soft_aes_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv1_main_loop_sandybridge.inc.in" "src/crypto/asm/win/cnv1_main_loop_fast_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv1_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/win/cnv1_main_loop_fast_soft_aes_sandybridge.inc")
# CN v2 FAST
set(ALGO "fastv2")
set(ITERATIONS "262144") #0x40000
set(MASK "2097136") #0x1FFFF0
configure_file("src/crypto/asm/cnv2_main_loop_ivybridge.inc.in" "src/crypto/asm/cnv2_main_loop_fastv2_ivybridge.inc")
configure_file("src/crypto/asm/cnv2_main_loop_bulldozer.inc.in" "src/crypto/asm/cnv2_main_loop_fastv2_bulldozer.inc")
configure_file("src/crypto/asm/cnv2_main_loop_ryzen.inc.in" "src/crypto/asm/cnv2_main_loop_fastv2_ryzen.inc")
configure_file("src/crypto/asm/cnv2_double_main_loop_sandybridge.inc.in" "src/crypto/asm/cnv2_double_main_loop_fastv2_sandybridge.inc")
configure_file("src/crypto/asm/cnv2_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/cnv2_main_loop_fastv2_soft_aes_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_ivybridge.inc.in" "src/crypto/asm/win/cnv2_main_loop_fastv2_ivybridge.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_bulldozer.inc.in" "src/crypto/asm/win/cnv2_main_loop_fastv2_bulldozer.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_ryzen.inc.in" "src/crypto/asm/win/cnv2_main_loop_fastv2_ryzen.inc")
configure_file("src/crypto/asm/win/cnv2_double_main_loop_sandybridge.inc.in" "src/crypto/asm/win/cnv2_double_main_loop_fastv2_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/win/cnv2_main_loop_fastv2_soft_aes_sandybridge.inc")
# CN XCASH
set(ALGO "xcash")
set(ITERATIONS "1048576") #0x100000
set(MASK "2097136") #0x1FFFF0
configure_file("src/crypto/asm/cnv2_main_loop_ivybridge.inc.in" "src/crypto/asm/cnv2_main_loop_xcash_ivybridge.inc")
configure_file("src/crypto/asm/cnv2_main_loop_bulldozer.inc.in" "src/crypto/asm/cnv2_main_loop_xcash_bulldozer.inc")
configure_file("src/crypto/asm/cnv2_main_loop_ryzen.inc.in" "src/crypto/asm/cnv2_main_loop_xcash_ryzen.inc")
configure_file("src/crypto/asm/cnv2_double_main_loop_sandybridge.inc.in" "src/crypto/asm/cnv2_double_main_loop_xcash_sandybridge.inc")
configure_file("src/crypto/asm/cnv2_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/cnv2_main_loop_xcash_soft_aes_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_ivybridge.inc.in" "src/crypto/asm/win/cnv2_main_loop_xcash_ivybridge.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_bulldozer.inc.in" "src/crypto/asm/win/cnv2_main_loop_xcash_bulldozer.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_ryzen.inc.in" "src/crypto/asm/win/cnv2_main_loop_xcash_ryzen.inc")
configure_file("src/crypto/asm/win/cnv2_double_main_loop_sandybridge.inc.in" "src/crypto/asm/win/cnv2_double_main_loop_xcash_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/win/cnv2_main_loop_xcash_soft_aes_sandybridge.inc")
# CN ZELERIUS
set(ALGO "zelerius")
set(ITERATIONS "393216") #0x60000
set(MASK "2097136") #0x1FFFF0
configure_file("src/crypto/asm/cnv2_main_loop_ivybridge.inc.in" "src/crypto/asm/cnv2_main_loop_zelerius_ivybridge.inc")
configure_file("src/crypto/asm/cnv2_main_loop_bulldozer.inc.in" "src/crypto/asm/cnv2_main_loop_zelerius_bulldozer.inc")
configure_file("src/crypto/asm/cnv2_main_loop_ryzen.inc.in" "src/crypto/asm/cnv2_main_loop_zelerius_ryzen.inc")
configure_file("src/crypto/asm/cnv2_double_main_loop_sandybridge.inc.in" "src/crypto/asm/cnv2_double_main_loop_zelerius_sandybridge.inc")
configure_file("src/crypto/asm/cnv2_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/cnv2_main_loop_zelerius_soft_aes_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_ivybridge.inc.in" "src/crypto/asm/win/cnv2_main_loop_zelerius_ivybridge.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_bulldozer.inc.in" "src/crypto/asm/win/cnv2_main_loop_zelerius_bulldozer.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_ryzen.inc.in" "src/crypto/asm/win/cnv2_main_loop_zelerius_ryzen.inc")
configure_file("src/crypto/asm/win/cnv2_double_main_loop_sandybridge.inc.in" "src/crypto/asm/win/cnv2_double_main_loop_zelerius_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/win/cnv2_main_loop_zelerius_soft_aes_sandybridge.inc")
# CN LITE
set(ALGO "lite")
set(ITERATIONS "262144") #0x40000
set(MASK "1048560") #0xFFFF0
configure_file("src/crypto/asm/cnv1_main_loop_sandybridge.inc.in" "src/crypto/asm/cnv1_main_loop_lite_sandybridge.inc")
configure_file("src/crypto/asm/cnv1_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/cnv1_main_loop_lite_soft_aes_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv1_main_loop_sandybridge.inc.in" "src/crypto/asm/win/cnv1_main_loop_lite_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv1_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/win/cnv1_main_loop_lite_soft_aes_sandybridge.inc")
# CN UPX
set(ALGO "upx")
set(ITERATIONS "131072") #0x20000
set(MASK "1048560") #0xFFFF0
configure_file("src/crypto/asm/cnv1_main_loop_sandybridge.inc.in" "src/crypto/asm/cnv1_main_loop_upx_sandybridge.inc")
configure_file("src/crypto/asm/cnv1_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/cnv1_main_loop_upx_soft_aes_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv1_main_loop_sandybridge.inc.in" "src/crypto/asm/win/cnv1_main_loop_upx_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv1_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/win/cnv1_main_loop_upx_soft_aes_sandybridge.inc")
# CN V2 ULTRALITE
set(ALGO "ultralite")
set(ITERATIONS "65536") #0x10000
set(MASK "131056") #0x1FFF0
configure_file("src/crypto/asm/cnv2_main_loop_ivybridge.inc.in" "src/crypto/asm/cnv2_main_loop_ultralite_ivybridge.inc")
configure_file("src/crypto/asm/cnv2_main_loop_bulldozer.inc.in" "src/crypto/asm/cnv2_main_loop_ultralite_bulldozer.inc")
configure_file("src/crypto/asm/cnv2_main_loop_ryzen.inc.in" "src/crypto/asm/cnv2_main_loop_ultralite_ryzen.inc")
configure_file("src/crypto/asm/cnv2_double_main_loop_sandybridge.inc.in" "src/crypto/asm/cnv2_double_main_loop_ultralite_sandybridge.inc")
configure_file("src/crypto/asm/cnv2_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/cnv2_main_loop_ultralite_soft_aes_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_ivybridge.inc.in" "src/crypto/asm/win/cnv2_main_loop_ultralite_ivybridge.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_bulldozer.inc.in" "src/crypto/asm/win/cnv2_main_loop_ultralite_bulldozer.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_ryzen.inc.in" "src/crypto/asm/win/cnv2_main_loop_ultralite_ryzen.inc")
configure_file("src/crypto/asm/win/cnv2_double_main_loop_sandybridge.inc.in" "src/crypto/asm/win/cnv2_double_main_loop_ultralite_sandybridge.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_soft_aes_sandybridge.inc.in" "src/crypto/asm/win/cnv2_main_loop_ultralite_soft_aes_sandybridge.inc")
# CN V2 RWZ
set(ALGO "original")
set(ITERATIONS "393216") #0x60000
set(MASK "2097136") #0x1FFFF0
configure_file("src/crypto/asm/cnv2_main_loop_rwz_all.inc.in" "src/crypto/asm/cnv2_main_loop_rwz_original_all.inc")
configure_file("src/crypto/asm/cnv2_double_main_loop_rwz_all.inc.in" "src/crypto/asm/cnv2_double_main_loop_rwz_original_all.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_rwz_all.inc.in" "src/crypto/asm/win/cnv2_main_loop_rwz_original_all.inc")
configure_file("src/crypto/asm/win/cnv2_double_main_loop_rwz_all.inc.in" "src/crypto/asm/win/cnv2_double_main_loop_rwz_original_all.inc")
# CN V2 UPX2
set(ALGO "upx2")
set(ITERATIONS "16384") #0x4000
set(MASK "131056") #0x1FFF0
configure_file("src/crypto/asm/cnv2_main_loop_rwz_all.inc.in" "src/crypto/asm/cnv2_main_loop_rwz_upx2_all.inc")
configure_file("src/crypto/asm/cnv2_double_main_loop_rwz_all.inc.in" "src/crypto/asm/cnv2_double_main_loop_rwz_upx2_all.inc")
configure_file("src/crypto/asm/win/cnv2_main_loop_rwz_all.inc.in" "src/crypto/asm/win/cnv2_main_loop_rwz_upx2_all.inc")
configure_file("src/crypto/asm/win/cnv2_double_main_loop_rwz_all.inc.in" "src/crypto/asm/win/cnv2_double_main_loop_rwz_upx2_all.inc")
if (CMAKE_C_COMPILER_ID MATCHES MSVC)
enable_language(ASM_MASM)
set(XMRIG_ASM_FILE "src/crypto/asm/win/cn_main_loop.asm"
"src/crypto/asm/win/CryptonightR_template.asm")
set_property(SOURCE ${XMRIG_ASM_FILE} PROPERTY ASM_MASM)
include_directories(${CMAKE_BINARY_DIR}/src/crypto/asm/win)
else()
enable_language(ASM)
if (WIN32 AND CMAKE_C_COMPILER_ID MATCHES GNU)
set(XMRIG_ASM_FILE "src/crypto/asm/win/cn_main_loop_win_gcc.S"
"src/crypto/asm/win/CryptonightR_template.S")
else()
set(XMRIG_ASM_FILE "src/crypto/asm/cn_main_loop.S"
"src/crypto/asm/CryptonightR_template.S")
endif()
set_property(SOURCE ${XMRIG_ASM_FILE} PROPERTY C)
include_directories(${CMAKE_BINARY_DIR}/src/crypto/asm/)
endif()
add_library(xmrig_asm STATIC ${XMRIG_ASM_FILE})
set_property(TARGET xmrig_asm PROPERTY LINKER_LANGUAGE C)

View file

@ -6,13 +6,15 @@ if ("${CMAKE_BUILD_TYPE}" STREQUAL "")
set(CMAKE_BUILD_TYPE Release) set(CMAKE_BUILD_TYPE Release)
endif() endif()
include(CheckSymbolExists)
if (CMAKE_CXX_COMPILER_ID MATCHES GNU) if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-strict-aliasing") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-strict-aliasing")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Ofast -funroll-loops -fvariable-expansion-in-unroller -ftree-loop-if-convert-stores -fmerge-all-constants -fbranch-target-load-optimize2") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Ofast")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fno-exceptions -fno-rtti") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fno-exceptions -fno-rtti -Wno-class-memaccess")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ofast -s -funroll-loops -fvariable-expansion-in-unroller -ftree-loop-if-convert-stores -fmerge-all-constants -fbranch-target-load-optimize2") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ofast -s")
if (XMRIG_ARMv8) if (XMRIG_ARMv8)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a+crypto") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a+crypto")
@ -23,6 +25,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
else() else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maes") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maes")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maes") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maes")
add_definitions(/DHAVE_ROTR)
endif() endif()
if (WIN32) if (WIN32)
@ -46,6 +49,7 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES MSVC)
add_definitions(/D_CRT_SECURE_NO_WARNINGS) add_definitions(/D_CRT_SECURE_NO_WARNINGS)
add_definitions(/D_CRT_NONSTDC_NO_WARNINGS) add_definitions(/D_CRT_NONSTDC_NO_WARNINGS)
add_definitions(/DNOMINMAX) add_definitions(/DNOMINMAX)
add_definitions(/DHAVE_ROTR)
elseif (CMAKE_CXX_COMPILER_ID MATCHES Clang) elseif (CMAKE_CXX_COMPILER_ID MATCHES Clang)
@ -64,6 +68,11 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES Clang)
else() else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maes") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maes")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maes") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maes")
check_symbol_exists("_rotr" "x86intrin.h" HAVE_ROTR)
if (HAVE_ROTR)
add_definitions(/DHAVE_ROTR)
endif()
endif() endif()
endif() endif()

503
index.html Normal file → Executable file
View file

@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang=\"en\"> <html lang=\"en\" xmlns="http://www.w3.org/1999/html">
<head> <head>
<meta charset=\"utf-8\"> <meta charset=\"utf-8\">
<title>XMRigCC Dashboard</title> <title>XMRigCC Dashboard</title>
@ -7,10 +7,11 @@
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.16/css/dataTables.bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.16/css/dataTables.bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/buttons/1.5.0/css/buttons.bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/buttons/1.5.0/css/buttons.bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/select/1.2.4/css/select.dataTables.min.css"> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/select/1.2.5/css/select.dataTables.min.css">
<link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.2/css/bootstrap-select.min.css">
<link rel="stylesheet" href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css">
<link rel="shortcut icon" href="http://root.graef.in/static/xmrigcc/favicon.ico"> <link rel="shortcut icon" href="https://root.graef.in:8443/static/xmrigcc/favicon.ico">
<style> <style>
.right{text-align:right;} .right{text-align:right;}
@ -49,8 +50,11 @@
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/select/1.2.4/js/dataTables.select.min.js"></script> <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/select/1.2.4/js/dataTables.select.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-timeago/1.6.1/jquery.timeago.min.js"></script> <script type="text/javascript" language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-timeago/1.6.1/jquery.timeago.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/numeral.js/2.0.6/numeral.min.js"></script> <script type="text/javascript" language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/numeral.js/2.0.6/numeral.min.js"></script>
<script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script> <script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.2/js/bootstrap-select.min.js"></script>
<script src="https://use.fontawesome.com/6b3cdfc597.js"></script> <script src="https://use.fontawesome.com/6b3cdfc597.js"></script>
<script type="text/javascript"> <script type="text/javascript">
@ -61,6 +65,9 @@
var currentServerTime = 0; var currentServerTime = 0;
var clockDrift = 0; var clockDrift = 0;
var latestVersion = 0;
var currentVersion = 0;
$.fn.dataTable.ext.search.push( $.fn.dataTable.ext.search.push(
function( settings, data, dataIndex ) { function( settings, data, dataIndex ) {
@ -104,9 +111,10 @@
orderable: false orderable: false
}, },
{data: "client_status.client_id", render: clientInfo}, {data: "client_status.client_id", render: clientInfo},
{data: "client_status.version", render: version},
{data: "client_status.current_pool"}, {data: "client_status.current_pool"},
{data: "client_status.current_status", render: clientStatus}, {data: "client_status.current_status", render: clientStatus},
{data: "client_status.current_algo_name"}, {data: "client_status.current_algo_name", render: algoAndPowVariantName},
{data: "client_status.hashrate_short", render: round, className: "right"}, {data: "client_status.hashrate_short", render: round, className: "right"},
{data: "client_status.hashrate_medium", render: round, className: "right"}, {data: "client_status.hashrate_medium", render: round, className: "right"},
{data: "client_status.hashrate_long", render: round, className: "right"}, {data: "client_status.hashrate_long", render: round, className: "right"},
@ -117,6 +125,13 @@
{data: "client_status.shares_total", className: "right"}, {data: "client_status.shares_total", className: "right"},
{data: "client_status.uptime", render: uptime, className: "right"}, {data: "client_status.uptime", render: uptime, className: "right"},
{data: "client_status.last_status_update", render: laststatus}, {data: "client_status.last_status_update", render: laststatus},
{
data: null,
defaultContent:
"<td class='center-tab'><button type='button' id='LOG' class='btn btn-xs btn-info' data-toggle='tooltip' title='View miner log'><i class='fa fa-file-text-o'></i></button></td>",
orderable: false,
className: "center-tab"
},
{ {
data: null, data: null,
defaultContent: defaultContent:
@ -127,7 +142,7 @@
], ],
rowId: 'client_status.client_id', rowId: 'client_status.client_id',
select: { select: {
style: "multi" style: "multi+shift"
}, },
order: [1, 'asc'], order: [1, 'asc'],
lengthChange: false, lengthChange: false,
@ -199,7 +214,20 @@
} }
}, },
{ {
text: '<i class="fa fa-power-off"> Shutdown miner</i>', text: '<i class="fa fa-refresh"> Reebot machine</i>',
className: 'btn-warning',
enabled: false,
action: function () {
table.rows({selected: true}).eq(0).each(function (index) {
var row = table.row(index);
var data = row.data();
sendAction("REBOOT", data.client_status.client_id);
});
}
},
{
text: '<i class="fa fa-sign-out"> Stop miner</i>',
className: 'btn-danger', className: 'btn-danger',
enabled: false, enabled: false,
action: function () { action: function () {
@ -212,11 +240,74 @@
} }
}, },
{ {
text: '<i class="fa fa-edit"> Multi miner editor</i>', text: '<i class="fa fa-table"> Assign template</i>',
className: 'btn-primary', className: 'btn-info',
enabled: false, enabled: false,
action: function () { action: function () {
$('#multiMinerEditor').modal('show'); $.ajax({
type: "GET",
url: "/admin/getClientConfigTemplates",
dataType:"json",
success: function(data) {
var htmlContent = "";
var arrayLength = data["templates"].length;
for (var i = 0; i < arrayLength; i++) {
htmlContent += "<option>" + data["templates"][i] + "</option>";
}
if (arrayLength > 0 ) {
$('#assignTemplate').prop('disabled', false);
$('#assignTemplateSelector').html(htmlContent);
$('#assignTemplateSelector').selectpicker('refresh');
} else {
$('#assignTemplate').prop('disabled', true);
}
$('#assignTemplateEditor').modal('show');
},
error: function (data) {
setError('<strong>Unable to fetch templates</strong> - Please make they exist!');
}
});
}
},
{
text: '<i class="fa fa-edit"> Template Editor</i>',
className: 'btn-primary',
enabled: true,
action: function () {
$.ajax({
type: "GET",
url: "/admin/getClientConfigTemplates",
dataType:"json",
success: function(data) {
var htmlContent = "";
var arrayLength = data["templates"].length;
for (var i = 0; i < arrayLength; i++) {
htmlContent += "<option>" + data["templates"][i] + "</option>";
}
if (arrayLength > 0 ) {
$('#templateEditorSave').prop('disabled', false);
$('#templateEditorDeleteDialog').prop('disabled', false);
$('#templateSelector').html(htmlContent);
$('#templateSelector').selectpicker('refresh');
$('#templateSelector').trigger('change');
} else {
$('#templateEditorSave').prop('disabled', true);
$('#templateEditorDeleteDialog').prop('disabled', true);
}
$('#templateEditor').modal('show');
},
error: function (data) {
setError('<strong>Unable to fetch templates</strong> - Please make they exist!');
}
});
} }
} }
], ],
@ -272,8 +363,8 @@
.column(10, {page: 'current'}) .column(10, {page: 'current'})
.data() .data()
.reduce(function (a, b) { .reduce(function (a, b) {
return (a + b) / 2; return (a + b);
}, 0); }, 0) / api.column(10, {page: 'current'}).data().length;
sumSharesGood = api sumSharesGood = api
.column(11, {page: 'current'}) .column(11, {page: 'current'})
@ -315,8 +406,19 @@
type: 'GET', type: 'GET',
dataType: "json", dataType: "json",
success: function (release) { success: function (release) {
latestRelease = release.tag_name; latestRelease = release.tag_name
if (latestRelease !== json.current_version) { latestVersion = parseInt(release.tag_name.split('.').join(""));
currentVersion = parseInt(json.current_version.split('.').join(""));
if (currentVersion < 1000) {
currentVersion = currentVersion * 10;
}
if (latestVersion < 1000) {
latestVersion = latestVersion * 10;
}
if (latestVersion > currentVersion) {
$("#updateNotificationBar").html('<div class="alert alert-info alert-dismissable fade in">' + $("#updateNotificationBar").html('<div class="alert alert-info alert-dismissable fade in">' +
'<a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>' + '<a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>' +
'<a href="https://github.com/Bendr0id/xmrigCC/releases/latest"><strong>Update!</strong> XMRigCC v' + latestRelease + ' is available for download\n</a>' + '<a href="https://github.com/Bendr0id/xmrigCC/releases/latest"><strong>Update!</strong> XMRigCC v' + latestRelease + ' is available for download\n</a>' +
@ -342,6 +444,7 @@
table.button(4).enable(selectedRows > 0); table.button(4).enable(selectedRows > 0);
table.button(5).enable(selectedRows > 0); table.button(5).enable(selectedRows > 0);
table.button(6).enable(selectedRows > 0); table.button(6).enable(selectedRows > 0);
table.button(7).enable(selectedRows > 0);
}); });
table.on('deselect', function () { table.on('deselect', function () {
@ -354,6 +457,7 @@
table.button(4).enable(selectedRows > 0); table.button(4).enable(selectedRows > 0);
table.button(5).enable(selectedRows > 0); table.button(5).enable(selectedRows > 0);
table.button(6).enable(selectedRows > 0); table.button(6).enable(selectedRows > 0);
table.button(7).enable(selectedRows > 0);
}); });
table.buttons().container().appendTo('#clientStatusList_wrapper .col-sm-6:eq(0)'); table.buttons().container().appendTo('#clientStatusList_wrapper .col-sm-6:eq(0)');
@ -362,7 +466,11 @@
table.draw(); table.draw();
}); });
$('#clientStatusList tbody').on( 'click', 'button', function () { $('#resetClientStatusList').click(function() {
resetClientStatusList();
});
$('#clientStatusList tbody ').on( 'click', 'button#EDIT', function () {
var data = table.row( $(this).parents('tr') ).data(); var data = table.row( $(this).parents('tr') ).data();
var clientId = data['client_status']['client_id']; var clientId = data['client_status']['client_id'];
@ -394,30 +502,127 @@
setClientConfig(clientId, clientConfig); setClientConfig(clientId, clientConfig);
}); });
$('#multiMinerEditorReplace').click(function(event) { $('#templateEditorSave').click(function(event) {
table.rows({ selected: true }).eq(0).each(function (index) { var templateId = $('#templateSelector').val();
var row = table.row(index); var template = $('#template').val();
var data = row.data();
setTemplateConfig(templateId, template);
});
$('#templateEditorSaveAsDialog').click(function(event) {
$('#templateDialogSaveAs').modal('show');
});
$('#templateEditorDeleteDialog').click(function(event) {
$('#templateDialogDelete').modal('show');
});
$('#templateEditorSaveAs').click(function(event) {
var templateId = $('#templateName').val();
var template = $('#template').val();
setTemplateConfig(templateId, template);
$('#templateEditor').modal('hide');
});
$('#templateEditorDelete').click(function(event) {
var templateId = $('#templateSelector').val();
deleteTemplateConfig(templateId, template);
});
$('#clientStatusList tbody').on( 'click', 'button#LOG', function () {
var data = table.row( $(this).parents('tr') ).data();
var clientId = data['client_status']['client_id']; var clientId = data['client_status']['client_id'];
var search = $('#search').val(); var clientIp = data['client_status']['external_ip'];
var replacement = $('#replacement').val();
$.ajax({ $.ajax({
type: "GET", type: "GET",
url: "/admin/getClientConfig?clientId=" + clientId, url: "/admin/getClientLog?clientId=" + clientId,
dataType:"json", dataType:"json",
success: function(jsonClientConfig) { success: function(data) {
jsonClientConfig = JSON.stringify(jsonClientConfig,undefined, 2); var htmlContent = "<div class='form-group' id='viewer' data-value='" + clientId + "'>" +
jsonClientConfig = jsonClientConfig.replace(new RegExp(search.trim(), 'g'), replacement.trim()).trim(); "<label for='config'>Log of: " + clientId + " (" + clientIp + ")</label>"+
"<textarea class='form-control' rows='20' id='log'>" + data.client_log + "</textarea>" +
"</div>";
setClientConfig(clientId, jsonClientConfig); $('#minerLog').find('.modal-body').html(htmlContent);
$('#minerLog').modal('show');
}, },
error: function (data) { error: function (data) {
setError('<strong>Unable to fetch ' + clientId + '_config.json</strong> - Please make sure that you pulled the config before!'); setError('<strong>Unable to fetch ' + clientId + ' log.</strong> - Please make sure it is enabled on the miner!');
} }
}); });
}); });
$('#minerLogRefresh').click(function(event) {
var clientId = $('#minerLog').find('.form-group')["0"].dataset.value;
table.rows().eq(0).each(function (index) {
var row = table.row(index);
var data = row.data();
$.ajax({
type: "GET",
url: "/admin/getClientLog?clientId=" + clientId,
dataType:"json",
success: function(data) {
$('#log').val(data.client_log);
},
error: function (data) {
setError('<strong>Unable to fetch ' + clientId + ' log.</strong> - Please make sure it is enabled on the miner!');
}
});
});
});
$('#templateSelector').on('changed.bs.select', function (e, clickedIndex, newValue, oldValue) {
var selected = $(e.currentTarget).val();
$.ajax({
type: "GET",
url: "/admin/getClientConfig?clientId=template_" + selected,
dataType: "json",
success: function (jsonClientConfig) {
$('#template').val(JSON.stringify(jsonClientConfig, undefined, 2));
},
error: function (data) {
setError('<strong>Unable to fetch template ' + selected + '</strong> - Please make sure it readable!');
}
});
});
$('#assignTemplate').click(function(event) {
var template = $('#assignTemplateSelector').val();
$.ajax({
type: "GET",
url: "/admin/getClientConfig?clientId=template_" + template,
dataType:"json",
success: function(jsonTemplate) {
table.rows({ selected: true }).eq(0).each(function (index) {
var row = table.row(index);
var data = row.data();
var clientId = data['client_status']['client_id'];
if ($('#mergeTemplate').prop('checked')) {
setMergedClientConfig(jsonTemplate, clientId);
} else {
jsonTemplate['cc-client']['worker-id'] = clientId
clientConfig = JSON.stringify(jsonTemplate,undefined, 2);
if ($('#replaceWorkerId').prop('checked')) {
clientConfig = clientConfig.replace(new RegExp("@WORKER-ID@", 'g'), clientId).trim();
}
setClientConfig(clientId, clientConfig);
}
});
},
error: function (data) {
setError('<strong>Unable to fetch template ' + template + '</strong> - Please make sure it readable!');
}
});
}); });
$('#selectAllTop,#selectAllBottom').click( function() { $('#selectAllTop,#selectAllBottom').click( function() {
@ -454,6 +659,21 @@
}); });
} }
function resetClientStatusList() {
$.ajax({
type: "POST",
url: "/admin/resetClientStatusList",
dataType:"text",
data: '',
success: function(data){
setSuccess('<strong>Successfully send the reset client status list request to the Server.</strong> - Now just wait for the next refresh.');
},
error: function (data) {
setError('<strong>Failed to send the reset client status list request to the Server.</strong> \nError: ' + JSON.stringify(data,undefined, 2));
}
});
}
function uptime( data, type, row ) { function uptime( data, type, row ) {
if (type !== 'sort') { if (type !== 'sort') {
var lastStatus = row.client_status.last_status_update * 1000; var lastStatus = row.client_status.last_status_update * 1000;
@ -468,6 +688,28 @@
return data; return data;
} }
function setMergedClientConfig(template, clientId) {
$.ajax({
type: "GET",
url: "/admin/getClientConfig?clientId=" + clientId,
dataType:"json",
success: function(clientConfig) {
$.extend(true, clientConfig, template);
clientConfig = JSON.stringify(clientConfig,undefined, 2)
if ($('#replaceWorkerId').prop('checked')) {
clientConfig = clientConfig.replace(new RegExp("@WORKER-ID@", 'g'), clientId).trim();
}
setClientConfig(clientId, clientConfig);
},
error: function (data) {
setError('<strong>Unable to fetch client config ' + clientId + ' for template merge</strong> - Please make sure it readable!');
}
});
}
function laststatus( data, type, row ) { function laststatus( data, type, row ) {
if (type !== 'sort') { if (type !== 'sort') {
var date = new Date(data*1000 - clockDrift); var date = new Date(data*1000 - clockDrift);
@ -477,6 +719,32 @@
return data; return data;
} }
function algoAndPowVariantName( data, type, row ) {
var algo = row.client_status.current_algo_name;
var powVariant = row.client_status.current_pow_variant_name;
if (powVariant !== "") {
return algo + " / " + powVariant
}
else {
return algo;
}
}
function version( data, type, row ) {
var clientVersion = parseInt(row.client_status.version.split('.').join(""));
if (clientVersion < 1000) {
clientVersion = clientVersion * 10;
}
if (latestVersion > clientVersion) {
return '<span data-toggle="tooltip" title="Outdated"><div class="offline">' + data + '</div></span>';
} else {
return data;
}
}
function clientStatus( data, type, row ) { function clientStatus( data, type, row ) {
var lastStatus = row.client_status.last_status_update * 1000; var lastStatus = row.client_status.last_status_update * 1000;
@ -489,6 +757,9 @@
function clientInfo( data, type, row ) { function clientInfo( data, type, row ) {
if (type !== 'sort') { if (type !== 'sort') {
var lastStatus = row.client_status.last_status_update * 1000;
var online = isOnline(lastStatus);
var tooltip = "CPU: " + row.client_status.cpu_brand + " (" + row.client_status.cpu_sockets + ") [" + row.client_status.cpu_cores + " cores / " + row.client_status.cpu_threads + " threads]"; var tooltip = "CPU: " + row.client_status.cpu_brand + " (" + row.client_status.cpu_sockets + ") [" + row.client_status.cpu_cores + " cores / " + row.client_status.cpu_threads + " threads]";
tooltip += '\n'; tooltip += '\n';
tooltip += "CPU Flags: " + (row.client_status.cpu_has_aes ? "AES-NI " : ""); tooltip += "CPU Flags: " + (row.client_status.cpu_has_aes ? "AES-NI " : "");
@ -497,25 +768,33 @@
tooltip += "CPU Cache L2/L3: " + (row.client_status.cpu_l2 / 1024) + " MB/"+ (row.client_status.cpu_l3 / 1024) + " MB"; tooltip += "CPU Cache L2/L3: " + (row.client_status.cpu_l2 / 1024) + " MB/"+ (row.client_status.cpu_l3 / 1024) + " MB";
tooltip += '\n'; tooltip += '\n';
tooltip += "Huge Pages: " + (row.client_status.hugepages_available ? " available, " : " unavailable, "); tooltip += "Huge Pages: " + (row.client_status.hugepages_available ? " available, " : " unavailable, ");
tooltip += (row.client_status.hugepages_enabled ? "enabled" : "disabled"); tooltip += (row.client_status.hugepages_enabled ? "enabled (" + row.client_status.total_hugepages + "/" + row.client_status.total_pages + ")" : "disabled");
tooltip += '\n'; tooltip += '\n';
tooltip += "Used Threads: " + row.client_status.current_threads; tooltip += "Used Threads: " + row.client_status.current_threads;
tooltip += (row.client_status.hash_factor > 1 ? " [" + row.client_status.hash_factor + "x multi hash mode]" :""); tooltip += (row.client_status.hash_factor > 1 ? " [" + row.client_status.hash_factor + "x multi hash mode]" :"");
tooltip += '\n'; tooltip += '\n';
if (row.client_status.gpu_info_list) {
for (var id in row.client_status.gpu_info_list) {
tooltip += "GPU #" + row.client_status.gpu_info_list[id].gpu_info.device_idx + ": ";
tooltip += row.client_status.gpu_info_list[id].gpu_info.name + ", "
tooltip += "intensity: " + row.client_status.gpu_info_list[id].gpu_info.raw_intensity + " ";
tooltip += "("+ row.client_status.gpu_info_list[id].gpu_info.work_size + "/" + row.client_status.gpu_info_list[id].gpu_info.max_work_size + "), ";
tooltip += "cu: " + row.client_status.gpu_info_list[id].gpu_info.compute_units;
tooltip += '\n';
}
}
tooltip += "Client IP: " + row.client_status.external_ip; tooltip += "Client IP: " + row.client_status.external_ip;
tooltip += '\n'; tooltip += '\n';
tooltip += "Version: " + row.client_status.version; tooltip += "Version: " + row.client_status.version;
tooltip += '\n'; tooltip += '\n';
tooltip += "Status: "; tooltip += "Status: " + online ? "Online" : "Offline";
var lastStatus = row.client_status.last_status_update * 1000; if (online) {
if (isOnline(lastStatus)) {
tooltip += "Online";
return '<span data-toggle="tooltip" title="'+ tooltip + '"><div class="online">' + data + '</div></span>'; return '<span data-toggle="tooltip" title="'+ tooltip + '"><div class="online">' + data + '</div></span>';
} }
else { else {
tooltip += "Offline";
return '<span data-toggle="tooltip" title="'+ tooltip + '"><div class="offline">' + data + '</div></span>'; return '<span data-toggle="tooltip" title="'+ tooltip + '"><div class="offline">' + data + '</div></span>';
} }
} }
@ -574,6 +853,35 @@
} }
}); });
} }
function setTemplateConfig(templateId, templateConfig) {
$.ajax({
url: "/admin/setClientConfig?clientId=template_" + templateId,
type: 'POST',
dataType: "text",
data: templateConfig,
success: function(data){
setSuccess('<strong>Successfully stored template: ' + templateId + '</strong> - You need to assign it to miners to apply.');
},
error: function (data) {
setError('<strong>Failed to store template: ' + templateId + '</strong> \nError: ' + JSON.stringify(data,undefined, 2));
}
});
}
function deleteTemplateConfig(templateId) {
$.ajax({
url: "/admin/deleteClientConfig?clientId=template_" + templateId,
type: 'POST',
dataType: "text",
success: function(data){
setSuccess('<strong>Successfully deleted template: ' + templateId + '</strong>');
},
error: function (data) {
setError('<strong>Failed to delete template: ' + templateId + '</strong> \nError: ' + JSON.stringify(data,undefined, 2));
}
});
}
</script> </script>
</head> </head>
@ -585,22 +893,24 @@
<div id="statusBar"></div> <div id="statusBar"></div>
<div class="center"> <div class="center">
<img src="http://root.graef.in/static/xmrigcc/banner.png"/> <img src="https://root.graef.in:8443/static/xmrigcc/banner.png"/>
</div> </div>
<form style="padding-bottom: 25px; margin-top: -50px"> <form style="padding-bottom: 25px; margin-top: -50px">
<label><input id="hideOffline" type="checkbox" checked data-toggle="toggle" data-size="mini" data-onstyle="success" data-offstyle="danger"/><span>Hide offline miners</span></label> <label><input id="hideOffline" type="checkbox" checked data-toggle="toggle" data-size="mini" data-onstyle="success" data-offstyle="danger"/><span>Hide offline miners</span></label>
<label><input id="showOfflineNotification" type="checkbox" checked data-toggle="toggle" data-size="mini" data-onstyle="success" data-offstyle="danger" /><span>Notify when miner went offline</span></label> <label><input id="showOfflineNotification" type="checkbox" checked data-toggle="toggle" data-size="mini" data-onstyle="success" data-offstyle="danger" /><span>Notify when miner went offline</span></label>
<br/><button id="resetClientStatusList" type="button" class="btn btn-danger fa fa-trash-o"> Reset ClientStatusList</button>
</form> </form>
<table id="clientStatusList" class="table table-striped table-bordered" cellspacing="0" width="100%"> <table id="clientStatusList" class="table table-striped table-bordered" cellspacing="0" width="100%">
<thead> <thead>
<tr> <tr>
<th class="center" width="2%"><i class="fa fa-square-o" id="selectAllTop"></i></th> <th class="center" width="2%"><i class="fa fa-square-o" id="selectAllTop"></i></th>
<th>Miner Id</th> <th>Worker Id</th>
<th>Version</th>
<th>Pool</th> <th>Pool</th>
<th>Status</th> <th>Status</th>
<th>Algo</th> <th>Algo / PoW</th>
<th>Hashrate</th> <th>Hashrate</th>
<th>Hashrate 1m</th> <th>Hashrate 1m</th>
@ -614,6 +924,7 @@
<th>Shares Total</th> <th>Shares Total</th>
<th>Uptime</th> <th>Uptime</th>
<th>Last Update</th> <th>Last Update</th>
<th>Log</th>
<th>Edit</th> <th>Edit</th>
</tr> </tr>
</thead> </thead>
@ -635,6 +946,8 @@
<th></th> <th></th>
<th></th> <th></th>
<th></th> <th></th>
<th></th>
<th></th>
</tr> </tr>
</tfoot> </tfoot>
</table> </table>
@ -658,33 +971,117 @@
</div> </div>
</div> </div>
<div class="modal fade" id="multiMinerEditor" role="dialog"> <div class="modal fade" id="minerLog" role="dialog">
<div class="modal-dialog modal-lg"> <div class="modal-dialog modal-lg">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button> <button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title">Multi miner editor</h4> <h4 class="modal-title">Miner log</h4>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div class="alert alert-danger fade in">
<strong>Warning!</strong> - If you don't know what you are doing, [Cancel].
</div> </div>
<h5 class="modal-title"> <div class="modal-footer">
This will search for <strong>"x"</strong> and replace with <strong>"y"</strong> in all selected miners config<br/><br/> <button id="minerLogRefresh" type="button" class="btn btn-success">Refresh</button>
<div class="alert alert-info fade in"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<strong>If you accidentally pressed [Replace], no worries just PULL again all miner configs. Don't PUSH it!</strong>
</div> </div>
</h5> </div>
<div class='form-group'>
<label for='search'>Search for:</label> </div>
<textarea class='form-control' rows='2' cols="1" id='search'></textarea> </div>
<label for='replacement'>Replace with:</label>
<textarea class='form-control' rows='2' id='replacement'></textarea> <div class="modal fade" id="templateEditor" role="dialog">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title">Template Editor</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label for="templateSelector">Template:</label>
<select class="selectpicker form-control" id="templateSelector"></select>
<br/>
<br/>
<textarea class="form-control" rows='20' id="template"></textarea>
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button id="multiMinerEditorReplace" type="button" class="btn btn-success" data-dismiss="modal">Replace</button> <button id="templateEditorSave" type="button" class="btn btn-success" data-dismiss="modal">Save</button>
<button type="button" class="btn btn-danger" data-dismiss="modal">Cancel</button> <button id="templateEditorSaveAsDialog" type="button" class="btn btn-primary">Save As...</button>
<button id="templateEditorDeleteDialog" type="button" class="btn btn-danger" data-dismiss="modal">Delete</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="templateDialogSaveAs" role="dialog">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title">Save As...</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label for="templateName">Template name:</label>
<input type="text" class="form-control" id="templateName"/>
</div>
</div>
<div class="modal-footer">
<button id="templateEditorSaveAs" type="button" class="btn btn-success" data-dismiss="modal">Save</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="templateDialogDelete" role="dialog">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title">Delete</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label for="templateName">Do you really want to delete this template?</label>
</div>
</div>
<div class="modal-footer">
<button id="templateEditorDelete" type="button" class="btn btn-danger" data-dismiss="modal">Delete</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="assignTemplateEditor" role="dialog">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title">Assign template</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label for="assignTemplateSelector">Template:</label>
<select class="selectpicker form-control" id="assignTemplateSelector"></select>
<br/><br/>
<label>
<input id="replaceWorkerId" type="checkbox" data-toggle="toggle" data-size="mini" data-onstyle="success" data-offstyle="danger" data-on="Yes" data-off="No"/>
<span>Replace @WORKER-ID@ with Worker-id</span>
</label>
<br/>
<label>
<input id="mergeTemplate" type="checkbox" data-toggle="toggle" data-size="mini" data-onstyle="success" data-offstyle="danger" data-on="Yes" data-off="No"/>
<span>Merge templates</span>
</label>
</div>
</div>
<div class="modal-footer">
<button id="assignTemplate" type="button" class="btn btn-success" data-dismiss="modal">Assign</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
</div> </div>
</div> </div>
</div> </div>

2
src/3rdparty/argon2/.gitattributes vendored Normal file
View file

@ -0,0 +1,2 @@
*.h linguist-language=C
*.pro linguist-language=QMake

70
src/3rdparty/argon2/.gitignore vendored Normal file
View file

@ -0,0 +1,70 @@
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
# Autotools + Libtool
/aclocal.m4
/config.status
/config
/install-sh
**/Makefile
**/Makefile.in
/autom4te.cache/
/compile
/config.guess
/config.log
/config.sub
/configure
/depcomp
/libtool
/ltmain.sh
/m4/libtool.m4
/m4/lt*.m4
/missing
/test-driver
**/.deps/
**/.dirstamp
**/.libs/
# Qt Creator
**/*.user
**/*.user.*
**/build-*/
# KDE
**/.directory
# Vim
*.swp
# CMake
CMakeFiles/
*.cmake
CMakeCache.txt
Makefile

23
src/3rdparty/argon2/.travis.yml vendored Normal file
View file

@ -0,0 +1,23 @@
language: c
dist: trusty
sudo: false
compiler:
- clang
- gcc
env:
- BUILD=cmake BUILD_TYPE=Debug
- BUILD=cmake BUILD_TYPE=Release
- BUILD=autotools
script: |
case $BUILD in
cmake)
cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE . && make && make test
;;
autotools)
autoreconf -i && ./configure && make && make check
;;
esac

View file

@ -0,0 +1,16 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.13
# Relative path conversion top directories.
set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/vidi/dev/src/c/xmrigCC")
set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/vidi/dev/src/c/xmrigCC")
# Force unix paths in dependencies.
set(CMAKE_FORCE_UNIX_PATHS 1)
# The C and CXX include file regular expressions for this directory.
set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})

View file

@ -0,0 +1,258 @@
#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">])
#IncludeRegexScan: ^.*$
#IncludeRegexComplain: ^$
#IncludeRegexTransform:
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-arch.c
stdint.h
-
string.h
-
stdlib.h
-
impl-select.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/impl-select.h
argon2-sse2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.h
argon2-ssse3.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.h
argon2-xop.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.h
argon2-avx2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.h
argon2-avx512f.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.h
argon2-template-64.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-template-64.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.c
argon2-avx2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.h
string.h
-
immintrin.h
-
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.h
core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.c
argon2-avx512f.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.h
stdint.h
-
string.h
-
immintrin.h
-
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.h
core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.c
argon2-sse2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.h
immintrin.h
-
argon2-template-128.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-template-128.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.h
core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.c
argon2-ssse3.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.h
string.h
-
immintrin.h
-
argon2-template-128.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-template-128.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.h
core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-template-128.h
string.h
-
immintrin.h
-
core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.c
argon2-xop.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.h
string.h
-
immintrin.h
-
argon2-template-128.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-template-128.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.h
core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/argon2.c
string.h
-
stdlib.h
-
stdio.h
-
argon2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/argon2.h
encoding.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/encoding.h
core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/blake2/blake2-impl.h
stdint.h
-
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/blake2/blake2.c
string.h
-
blake2/blake2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/blake2/blake2/blake2.h
blake2/blake2-impl.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/blake2/blake2/blake2-impl.h
core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/blake2/core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/blake2/blake2.h
stddef.h
-
stdint.h
-
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.c
windows.h
-
winbase.h
-
inttypes.h
-
stdio.h
-
stdlib.h
-
string.h
-
core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.h
thread.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/thread.h
blake2/blake2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/blake2/blake2.h
blake2/blake2-impl.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/blake2/blake2-impl.h
genkat.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/genkat.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.h
argon2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/argon2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/encoding.c
stdio.h
-
stdlib.h
-
string.h
-
limits.h
-
encoding.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/encoding.h
core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/encoding.h
argon2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/argon2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/genkat.c
inttypes.h
-
stdio.h
-
genkat.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/genkat.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/genkat.h
core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/impl-select.c
time.h
-
string.h
-
impl-select.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/impl-select.h
argon2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/argon2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/impl-select.h
core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/thread.c
thread.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/thread.h
windows.h
-
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/thread.h
process.h
-
stdint.h
-
pthread.h
-
src/3rdparty/argon2/include/argon2.h
stdint.h
-
stddef.h
-
stdio.h
-
limits.h
-
src/3rdparty/argon2/lib/argon2-template-64.h
string.h
-
core.h
src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/lib/blake2/blake2-impl.h
stdint.h
-
src/3rdparty/argon2/lib/blake2/blake2.h
stddef.h
-
stdint.h
-
src/3rdparty/argon2/lib/core.h
argon2.h
src/3rdparty/argon2/lib/argon2.h
src/3rdparty/argon2/lib/impl-select.h
core.h
src/3rdparty/argon2/lib/core.h

View file

@ -0,0 +1,54 @@
# The set of languages for which implicit dependencies are needed:
set(CMAKE_DEPENDS_LANGUAGES
"C"
)
# The set of files for implicit dependencies of each language:
set(CMAKE_DEPENDS_CHECK_C
"/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-arch.c" "/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o"
"/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.c" "/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.o"
"/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.c" "/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.o"
"/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.c" "/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.o"
"/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.c" "/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.o"
"/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.c" "/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.o"
"/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/argon2.c" "/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/argon2.c.o"
"/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/blake2/blake2.c" "/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/blake2/blake2.c.o"
"/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.c" "/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.o"
"/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/encoding.c" "/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/encoding.c.o"
"/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/genkat.c" "/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/genkat.c.o"
"/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/impl-select.c" "/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/impl-select.c.o"
"/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/thread.c" "/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/thread.c.o"
)
set(CMAKE_C_COMPILER_ID "GNU")
# Preprocessor definitions for this target.
set(CMAKE_TARGET_DEFINITIONS_C
"A2_VISCTL"
"CPPHTTPLIB_OPENSSL_SUPPORT"
"HAVE_ROTR"
"HAVE_SSE2"
"HAVE_SSE3"
"HAVE_SYSLOG_H"
"MINER_EXECUTABLE_NAME=xmrigMiner"
"RAPIDJSON_SSE2"
"UNICODE"
"XMRIG_NO_API"
"XMRIG_NO_HTTPD"
"_GNU_SOURCE"
"__STDC_FORMAT_MACROS"
)
# The include file search paths:
set(CMAKE_C_TARGET_INCLUDE_PATH
"src/3rdparty/libcpuid"
"src/crypto/asm"
"src/3rdparty/argon2/include"
"src/3rdparty/argon2/lib"
"src/3rdparty/argon2/lib/blake2"
)
# Targets to which this target links.
set(CMAKE_TARGET_LINKED_INFO_FILES
)
# Fortran module output directory.
set(CMAKE_Fortran_TARGET_MODULE_DIR "")

View file

@ -0,0 +1,279 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.13
# Delete rule output on recipe failure.
.DELETE_ON_ERROR:
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Remove some rules from gmake that .SUFFIXES does not remove.
SUFFIXES =
.SUFFIXES: .hpux_make_needs_suffix_list
# Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E remove -f
# Escaping for special characters.
EQUALS = =
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/vidi/dev/src/c/xmrigCC
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/vidi/dev/src/c/xmrigCC
# Include any dependencies generated for this target.
include src/3rdparty/argon2/CMakeFiles/argon2.dir/depend.make
# Include the progress variables for this target.
include src/3rdparty/argon2/CMakeFiles/argon2.dir/progress.make
# Include the compile flags for this target's objects.
include src/3rdparty/argon2/CMakeFiles/argon2.dir/flags.make
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/argon2.c.o: src/3rdparty/argon2/CMakeFiles/argon2.dir/flags.make
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/argon2.c.o: src/3rdparty/argon2/lib/argon2.c
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/vidi/dev/src/c/xmrigCC/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/argon2.c.o"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/argon2.dir/lib/argon2.c.o -c /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/argon2.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/argon2.c.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/argon2.dir/lib/argon2.c.i"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/argon2.c > CMakeFiles/argon2.dir/lib/argon2.c.i
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/argon2.c.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/argon2.dir/lib/argon2.c.s"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/argon2.c -o CMakeFiles/argon2.dir/lib/argon2.c.s
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.o: src/3rdparty/argon2/CMakeFiles/argon2.dir/flags.make
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.o: src/3rdparty/argon2/lib/core.c
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/vidi/dev/src/c/xmrigCC/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.o"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/argon2.dir/lib/core.c.o -c /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/argon2.dir/lib/core.c.i"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.c > CMakeFiles/argon2.dir/lib/core.c.i
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/argon2.dir/lib/core.c.s"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.c -o CMakeFiles/argon2.dir/lib/core.c.s
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/encoding.c.o: src/3rdparty/argon2/CMakeFiles/argon2.dir/flags.make
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/encoding.c.o: src/3rdparty/argon2/lib/encoding.c
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/vidi/dev/src/c/xmrigCC/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/encoding.c.o"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/argon2.dir/lib/encoding.c.o -c /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/encoding.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/encoding.c.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/argon2.dir/lib/encoding.c.i"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/encoding.c > CMakeFiles/argon2.dir/lib/encoding.c.i
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/encoding.c.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/argon2.dir/lib/encoding.c.s"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/encoding.c -o CMakeFiles/argon2.dir/lib/encoding.c.s
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/genkat.c.o: src/3rdparty/argon2/CMakeFiles/argon2.dir/flags.make
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/genkat.c.o: src/3rdparty/argon2/lib/genkat.c
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/vidi/dev/src/c/xmrigCC/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building C object src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/genkat.c.o"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/argon2.dir/lib/genkat.c.o -c /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/genkat.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/genkat.c.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/argon2.dir/lib/genkat.c.i"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/genkat.c > CMakeFiles/argon2.dir/lib/genkat.c.i
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/genkat.c.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/argon2.dir/lib/genkat.c.s"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/genkat.c -o CMakeFiles/argon2.dir/lib/genkat.c.s
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/impl-select.c.o: src/3rdparty/argon2/CMakeFiles/argon2.dir/flags.make
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/impl-select.c.o: src/3rdparty/argon2/lib/impl-select.c
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/vidi/dev/src/c/xmrigCC/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building C object src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/impl-select.c.o"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/argon2.dir/lib/impl-select.c.o -c /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/impl-select.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/impl-select.c.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/argon2.dir/lib/impl-select.c.i"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/impl-select.c > CMakeFiles/argon2.dir/lib/impl-select.c.i
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/impl-select.c.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/argon2.dir/lib/impl-select.c.s"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/impl-select.c -o CMakeFiles/argon2.dir/lib/impl-select.c.s
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/thread.c.o: src/3rdparty/argon2/CMakeFiles/argon2.dir/flags.make
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/thread.c.o: src/3rdparty/argon2/lib/thread.c
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/vidi/dev/src/c/xmrigCC/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building C object src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/thread.c.o"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/argon2.dir/lib/thread.c.o -c /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/thread.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/thread.c.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/argon2.dir/lib/thread.c.i"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/thread.c > CMakeFiles/argon2.dir/lib/thread.c.i
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/thread.c.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/argon2.dir/lib/thread.c.s"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/thread.c -o CMakeFiles/argon2.dir/lib/thread.c.s
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/blake2/blake2.c.o: src/3rdparty/argon2/CMakeFiles/argon2.dir/flags.make
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/blake2/blake2.c.o: src/3rdparty/argon2/lib/blake2/blake2.c
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/vidi/dev/src/c/xmrigCC/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building C object src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/blake2/blake2.c.o"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/argon2.dir/lib/blake2/blake2.c.o -c /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/blake2/blake2.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/blake2/blake2.c.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/argon2.dir/lib/blake2/blake2.c.i"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/blake2/blake2.c > CMakeFiles/argon2.dir/lib/blake2/blake2.c.i
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/blake2/blake2.c.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/argon2.dir/lib/blake2/blake2.c.s"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/blake2/blake2.c -o CMakeFiles/argon2.dir/lib/blake2/blake2.c.s
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.o: src/3rdparty/argon2/CMakeFiles/argon2.dir/flags.make
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.c
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/vidi/dev/src/c/xmrigCC/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building C object src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.o"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.o -c /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.i"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.c > CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.i
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.s"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.c -o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.s
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.o: src/3rdparty/argon2/CMakeFiles/argon2.dir/flags.make
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.c
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/vidi/dev/src/c/xmrigCC/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building C object src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.o"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.o -c /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.i"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.c > CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.i
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.s"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.c -o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.s
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.o: src/3rdparty/argon2/CMakeFiles/argon2.dir/flags.make
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.c
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/vidi/dev/src/c/xmrigCC/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building C object src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.o"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.o -c /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.i"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.c > CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.i
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.s"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.c -o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.s
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.o: src/3rdparty/argon2/CMakeFiles/argon2.dir/flags.make
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.c
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/vidi/dev/src/c/xmrigCC/CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building C object src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.o"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.o -c /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.i"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.c > CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.i
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.s"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.c -o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.s
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.o: src/3rdparty/argon2/CMakeFiles/argon2.dir/flags.make
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.c
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/vidi/dev/src/c/xmrigCC/CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building C object src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.o"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.o -c /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.i"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.c > CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.i
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.s"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.c -o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.s
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o: src/3rdparty/argon2/CMakeFiles/argon2.dir/flags.make
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-arch.c
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/vidi/dev/src/c/xmrigCC/CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building C object src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o -c /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-arch.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.i"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-arch.c > CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.i
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.s"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-arch.c -o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.s
# Object files for target argon2
argon2_OBJECTS = \
"CMakeFiles/argon2.dir/lib/argon2.c.o" \
"CMakeFiles/argon2.dir/lib/core.c.o" \
"CMakeFiles/argon2.dir/lib/encoding.c.o" \
"CMakeFiles/argon2.dir/lib/genkat.c.o" \
"CMakeFiles/argon2.dir/lib/impl-select.c.o" \
"CMakeFiles/argon2.dir/lib/thread.c.o" \
"CMakeFiles/argon2.dir/lib/blake2/blake2.c.o" \
"CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.o" \
"CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.o" \
"CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.o" \
"CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.o" \
"CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.o" \
"CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o"
# External object files for target argon2
argon2_EXTERNAL_OBJECTS =
src/3rdparty/argon2/libargon2.a: src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/argon2.c.o
src/3rdparty/argon2/libargon2.a: src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.o
src/3rdparty/argon2/libargon2.a: src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/encoding.c.o
src/3rdparty/argon2/libargon2.a: src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/genkat.c.o
src/3rdparty/argon2/libargon2.a: src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/impl-select.c.o
src/3rdparty/argon2/libargon2.a: src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/thread.c.o
src/3rdparty/argon2/libargon2.a: src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/blake2/blake2.c.o
src/3rdparty/argon2/libargon2.a: src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.o
src/3rdparty/argon2/libargon2.a: src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.o
src/3rdparty/argon2/libargon2.a: src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.o
src/3rdparty/argon2/libargon2.a: src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.o
src/3rdparty/argon2/libargon2.a: src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.o
src/3rdparty/argon2/libargon2.a: src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o
src/3rdparty/argon2/libargon2.a: src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make
src/3rdparty/argon2/libargon2.a: src/3rdparty/argon2/CMakeFiles/argon2.dir/link.txt
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/vidi/dev/src/c/xmrigCC/CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Linking C static library libargon2.a"
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && $(CMAKE_COMMAND) -P CMakeFiles/argon2.dir/cmake_clean_target.cmake
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/argon2.dir/link.txt --verbose=$(VERBOSE)
# Rule to build all files generated by this target.
src/3rdparty/argon2/CMakeFiles/argon2.dir/build: src/3rdparty/argon2/libargon2.a
.PHONY : src/3rdparty/argon2/CMakeFiles/argon2.dir/build
src/3rdparty/argon2/CMakeFiles/argon2.dir/clean:
cd /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 && $(CMAKE_COMMAND) -P CMakeFiles/argon2.dir/cmake_clean.cmake
.PHONY : src/3rdparty/argon2/CMakeFiles/argon2.dir/clean
src/3rdparty/argon2/CMakeFiles/argon2.dir/depend:
cd /home/vidi/dev/src/c/xmrigCC && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/vidi/dev/src/c/xmrigCC /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 /home/vidi/dev/src/c/xmrigCC /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2 /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/CMakeFiles/argon2.dir/DependInfo.cmake --color=$(COLOR)
.PHONY : src/3rdparty/argon2/CMakeFiles/argon2.dir/depend

View file

@ -0,0 +1,22 @@
file(REMOVE_RECURSE
"CMakeFiles/argon2.dir/lib/argon2.c.o"
"CMakeFiles/argon2.dir/lib/core.c.o"
"CMakeFiles/argon2.dir/lib/encoding.c.o"
"CMakeFiles/argon2.dir/lib/genkat.c.o"
"CMakeFiles/argon2.dir/lib/impl-select.c.o"
"CMakeFiles/argon2.dir/lib/thread.c.o"
"CMakeFiles/argon2.dir/lib/blake2/blake2.c.o"
"CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.o"
"CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.o"
"CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.o"
"CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.o"
"CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.o"
"CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o"
"libargon2.pdb"
"libargon2.a"
)
# Per-language clean rules from dependency scanning.
foreach(lang C)
include(CMakeFiles/argon2.dir/cmake_clean_${lang}.cmake OPTIONAL)
endforeach()

View file

@ -0,0 +1,3 @@
file(REMOVE_RECURSE
"libargon2.a"
)

View file

@ -0,0 +1,79 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.13
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-arch.c
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.h
src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/lib/argon2-template-64.h
src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/lib/impl-select.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.o
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.c
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.h
src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.o
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.c
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.h
src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.o
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.c
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-template-128.h
src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.o
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.c
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-template-128.h
src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.o
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-template-128.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.c
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.h
src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/argon2.c.o
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/argon2.c
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/encoding.h
src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/blake2/blake2.c.o
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/blake2/blake2.c
src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/lib/blake2/blake2-impl.h
src/3rdparty/argon2/lib/blake2/blake2.h
src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.o
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/blake2/blake2-impl.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/blake2/blake2.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.c
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/genkat.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/thread.h
src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/encoding.c.o
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/encoding.c
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/encoding.h
src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/genkat.c.o
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/genkat.c
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/genkat.h
src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/impl-select.c.o
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/core.h
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/impl-select.c
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/impl-select.h
src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/thread.c.o
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/thread.c
/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/thread.h

View file

@ -0,0 +1,79 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.13
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-arch.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o: src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o: src/3rdparty/argon2/lib/argon2-template-64.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o: src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o: src/3rdparty/argon2/lib/impl-select.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.o: src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.o: src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.o: src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.o: src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-template-128.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.o: src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.o: src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-template-128.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.o: src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.o: src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-template-128.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.o: src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.o: src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.o: src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/argon2.c.o: src/3rdparty/argon2/lib/argon2.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/argon2.c.o: src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/argon2.c.o: src/3rdparty/argon2/lib/encoding.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/argon2.c.o: src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/blake2/blake2.c.o: src/3rdparty/argon2/lib/blake2/blake2.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/blake2/blake2.c.o: src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/blake2/blake2.c.o: src/3rdparty/argon2/lib/blake2/blake2-impl.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/blake2/blake2.c.o: src/3rdparty/argon2/lib/blake2/blake2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/blake2/blake2.c.o: src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.o: src/3rdparty/argon2/lib/blake2/blake2-impl.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.o: src/3rdparty/argon2/lib/blake2/blake2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.o: src/3rdparty/argon2/lib/core.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.o: src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.o: src/3rdparty/argon2/lib/genkat.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.o: src/3rdparty/argon2/lib/thread.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.o: src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/encoding.c.o: src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/encoding.c.o: src/3rdparty/argon2/lib/encoding.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/encoding.c.o: src/3rdparty/argon2/lib/encoding.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/encoding.c.o: src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/genkat.c.o: src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/genkat.c.o: src/3rdparty/argon2/lib/genkat.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/genkat.c.o: src/3rdparty/argon2/lib/genkat.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/genkat.c.o: src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/impl-select.c.o: src/3rdparty/argon2/lib/core.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/impl-select.c.o: src/3rdparty/argon2/lib/impl-select.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/impl-select.c.o: src/3rdparty/argon2/lib/impl-select.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/impl-select.c.o: src/3rdparty/argon2/include/argon2.h
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/thread.c.o: src/3rdparty/argon2/lib/thread.c
src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/thread.c.o: src/3rdparty/argon2/lib/thread.h

View file

@ -0,0 +1,10 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.13
# compile C with /usr/bin/cc
C_FLAGS = -Wall -Wno-strict-aliasing -maes -O3 -DNDEBUG -Ofast -fexceptions -std=gnu90
C_DEFINES = -DA2_VISCTL -DCPPHTTPLIB_OPENSSL_SUPPORT -DHAVE_ROTR -DHAVE_SSE2 -DHAVE_SSE3 -DHAVE_SYSLOG_H -DMINER_EXECUTABLE_NAME=xmrigMiner -DRAPIDJSON_SSE2 -DUNICODE -DXMRIG_NO_API -DXMRIG_NO_HTTPD -D_GNU_SOURCE -D__STDC_FORMAT_MACROS
C_INCLUDES = -I/home/vidi/dev/src/c/xmrigCC/src/3rdparty/libcpuid -I/home/vidi/dev/src/c/xmrigCC/src/crypto/asm -I/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/include -I/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib -I/home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/lib/blake2

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,2 @@
/usr/bin/ar qc libargon2.a CMakeFiles/argon2.dir/lib/argon2.c.o CMakeFiles/argon2.dir/lib/core.c.o CMakeFiles/argon2.dir/lib/encoding.c.o CMakeFiles/argon2.dir/lib/genkat.c.o CMakeFiles/argon2.dir/lib/impl-select.c.o CMakeFiles/argon2.dir/lib/thread.c.o CMakeFiles/argon2.dir/lib/blake2/blake2.c.o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.o CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o
/usr/bin/ranlib libargon2.a

View file

@ -0,0 +1,15 @@
CMAKE_PROGRESS_1 =
CMAKE_PROGRESS_2 = 1
CMAKE_PROGRESS_3 = 2
CMAKE_PROGRESS_4 = 3
CMAKE_PROGRESS_5 = 4
CMAKE_PROGRESS_6 = 5
CMAKE_PROGRESS_7 = 6
CMAKE_PROGRESS_8 = 7
CMAKE_PROGRESS_9 = 8
CMAKE_PROGRESS_10 = 9
CMAKE_PROGRESS_11 = 10
CMAKE_PROGRESS_12 = 11
CMAKE_PROGRESS_13 = 12
CMAKE_PROGRESS_14 = 13

View file

@ -0,0 +1 @@
13

203
src/3rdparty/argon2/CMakeLists.txt vendored Normal file
View file

@ -0,0 +1,203 @@
cmake_minimum_required(VERSION 2.6)
find_program(CCACHE_PROGRAM ccache)
if(CCACHE_PROGRAM)
message(STATUS "-- Argon2: Found ccache package... Activating...")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
endif()
project(Argon2 C)
set(ARGON2_VERSION 1.0)
set(CMAKE_C_STANDARD 90)
set(CMAKE_C_STANDARD_REQUIRED ON)
include(CheckCSourceCompiles)
find_package(Threads REQUIRED)
add_library(argon2-interface INTERFACE)
target_include_directories(argon2-interface INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
add_library(argon2-internal INTERFACE)
target_include_directories(argon2-internal INTERFACE lib lib/blake2)
target_link_libraries(argon2-internal INTERFACE argon2-interface)
set(ARGON2_SRC
lib/argon2.c
lib/core.c
lib/encoding.c
lib/genkat.c
lib/impl-select.c
lib/thread.c
lib/blake2/blake2.c
)
message("-- Argon2: Processor: ${CMAKE_SYSTEM_PROCESSOR}")
message("-- Argon2: Build Type: ${ARCH}")
if((CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64") AND NOT "${ARCH}" STREQUAL "default")
include(CheckCXXSourceRuns)
# Check for AVX2
check_cxx_source_runs("
#include <immintrin.h>
int main()
{
__m256i a, b, c;
const int src[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };
int dst[8];
a = _mm256_loadu_si256( (__m256i*)src );
b = _mm256_loadu_si256( (__m256i*)src );
c = _mm256_add_epi32( a, b );
_mm256_storeu_si256( (__m256i*)dst, c );
for( int i = 0; i < 8; i++ ){
if( ( src[i] + src[i] ) != dst[i] ){
return -1;
}
}
return 0;
}"
HAVE_AVX2_EXTENSIONS)
if(HAVE_AVX2_EXTENSIONS)
message("-- Argon2: AVX2 Extensions - Enabled")
add_definitions(-DHAVE_AVX2)
if(MSVC)
add_definitions(/arch:AVX2)
endif()
else()
message("-- Argon2: AVX2 Extensions - Disabled")
endif()
# Check for AVX512
check_cxx_source_runs("
#include <immintrin.h>
int main()
{
__m512i a, b, c;
const int src[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };
int dst[8];
a = _mm512_loadu_si512( (__m512i*)src );
b = _mm512_loadu_si512( (__m512i*)src );
c = _mm512_add_epi32( a, b );
_mm512_storeu_si512( (__m512i*)dst, c );
for( int i = 0; i < 8; i++ ){
if( ( src[i] + src[i] ) != dst[i] ){
return -1;
}
}
return 0;
}"
HAVE_AVX512F_EXTENSIONS)
if(HAVE_AVX512F_EXTENSIONS)
message("-- Argon2: AVX512 Extensions - Enabled")
add_definitions(-DHAVE_AVX512F)
else()
message("-- Argon2: AVX512 Extensions - Disabled")
endif()
# Check for SSE2
check_cxx_source_runs("
#include <immintrin.h>
int main()
{
__m128d a, b;
double vals[2] = {0};
a = _mm_loadu_pd(vals);
b = _mm_add_pd(a,a);
_mm_storeu_pd(vals,b);
return 0;
}"
HAVE_SSE2_EXTENSIONS)
if(HAVE_SSE2_EXTENSIONS)
message("-- Argon2: SSE2 Extensions - Enabled")
add_definitions(-DHAVE_SSE2)
if(MSVC)
add_definitions(/arch:SSE2)
endif()
else()
message("-- Argon2: SSE2 Extensions - Disabled")
endif()
# Check for SSE3
check_cxx_source_runs("
#include <immintrin.h>
int main()
{
__m128d a, b;
double vals[2] = {0};
a = _mm_loadu_pd(vals);
b = _mm_hadd_pd(a,a);
_mm_storeu_pd(vals, b);
return 0;
}"
HAVE_SSE3_EXTENSIONS)
if(HAVE_SSE3_EXTENSIONS)
message("-- Argon2: SSE3 Extensions - Enabled")
add_definitions(-DHAVE_SSE3)
if(MSVC)
add_definitions(/arch:SSE3)
endif()
else()
message("-- Argon2: SSE3 Extensions - Disabled")
endif()
# Check for XOP
check_cxx_source_runs("
#include <immintrin.h>
int main()
{
__m128i a, b, c;
const int src[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };
a = _mm_load_si128( (__m128i*)src );
b = _mm_load_si128( (__m128i*)src );
c = _mm_roti_epi64(*a, b);
return 0;
}"
HAVE_XOP_EXTENSIONS)
if(HAVE_XOP_EXTENSIONS)
message("-- Argon2: XOP Extensions - Enabled")
add_definitions(-DHAVE_XOP)
else()
message("-- Argon2: XOP Extensions - Disabled")
endif()
list(APPEND ARGON2_SRC
arch/x86_64/lib/argon2-sse2.c
arch/x86_64/lib/argon2-ssse3.c
arch/x86_64/lib/argon2-xop.c
arch/x86_64/lib/argon2-avx2.c
arch/x86_64/lib/argon2-avx512f.c
arch/x86_64/lib/argon2-arch.c
)
else()
list(APPEND ARGON2_SRC
arch/generic/lib/argon2-arch.c
)
endif()
add_library(argon2 STATIC ${ARGON2_SRC})
target_compile_definitions(argon2
PUBLIC "A2_VISCTL"
)
target_link_libraries(argon2
PUBLIC argon2-interface ${CMAKE_THREAD_LIBS_INIT}
PRIVATE argon2-internal
)
set_property(TARGET argon2 PROPERTY C_STANDARD 90)
set_property(TARGET argon2 PROPERTY VERSION ${Upstream_VERSION})
set_property(TARGET argon2 PROPERTY SOVERSION 1)
set_property(TARGET argon2 PROPERTY INTERFACE_ARGON2_MAJOR_VERSION 1)
set_property(TARGET argon2 APPEND PROPERTY
COMPATIBLE_INTERFACE_STRING ARGON2_MAJOR_VERSION
)

21
src/3rdparty/argon2/LICENSE vendored Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2016 Ondrej Mosnáček
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

540
src/3rdparty/argon2/Makefile vendored Normal file
View file

@ -0,0 +1,540 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.13
# Default target executed when no arguments are given to make.
default_target: all
.PHONY : default_target
# Allow only one "make -f Makefile2" at a time, but pass parallelism.
.NOTPARALLEL:
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Remove some rules from gmake that .SUFFIXES does not remove.
SUFFIXES =
.SUFFIXES: .hpux_make_needs_suffix_list
# Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E remove -f
# Escaping for special characters.
EQUALS = =
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/vidi/dev/src/c/xmrigCC
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/vidi/dev/src/c/xmrigCC
#=============================================================================
# Targets provided globally by CMake.
# Special rule for the target edit_cache
edit_cache:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..."
/usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available.
.PHONY : edit_cache
# Special rule for the target edit_cache
edit_cache/fast: edit_cache
.PHONY : edit_cache/fast
# Special rule for the target rebuild_cache
rebuild_cache:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
/usr/bin/cmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
.PHONY : rebuild_cache
# Special rule for the target rebuild_cache
rebuild_cache/fast: rebuild_cache
.PHONY : rebuild_cache/fast
# The main all target
all: cmake_check_build_system
cd /home/vidi/dev/src/c/xmrigCC && $(CMAKE_COMMAND) -E cmake_progress_start /home/vidi/dev/src/c/xmrigCC/CMakeFiles /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2/CMakeFiles/progress.marks
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f CMakeFiles/Makefile2 src/3rdparty/argon2/all
$(CMAKE_COMMAND) -E cmake_progress_start /home/vidi/dev/src/c/xmrigCC/CMakeFiles 0
.PHONY : all
# The main clean target
clean:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f CMakeFiles/Makefile2 src/3rdparty/argon2/clean
.PHONY : clean
# The main clean target
clean/fast: clean
.PHONY : clean/fast
# Prepare targets for installation.
preinstall: all
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f CMakeFiles/Makefile2 src/3rdparty/argon2/preinstall
.PHONY : preinstall
# Prepare targets for installation.
preinstall/fast:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f CMakeFiles/Makefile2 src/3rdparty/argon2/preinstall
.PHONY : preinstall/fast
# clear depends
depend:
cd /home/vidi/dev/src/c/xmrigCC && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
.PHONY : depend
# Convenience name for target.
src/3rdparty/argon2/CMakeFiles/argon2.dir/rule:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f CMakeFiles/Makefile2 src/3rdparty/argon2/CMakeFiles/argon2.dir/rule
.PHONY : src/3rdparty/argon2/CMakeFiles/argon2.dir/rule
# Convenience name for target.
argon2: src/3rdparty/argon2/CMakeFiles/argon2.dir/rule
.PHONY : argon2
# fast build rule for target.
argon2/fast:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/build
.PHONY : argon2/fast
arch/x86_64/lib/argon2-arch.o: arch/x86_64/lib/argon2-arch.c.o
.PHONY : arch/x86_64/lib/argon2-arch.o
# target to build an object file
arch/x86_64/lib/argon2-arch.c.o:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.o
.PHONY : arch/x86_64/lib/argon2-arch.c.o
arch/x86_64/lib/argon2-arch.i: arch/x86_64/lib/argon2-arch.c.i
.PHONY : arch/x86_64/lib/argon2-arch.i
# target to preprocess a source file
arch/x86_64/lib/argon2-arch.c.i:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.i
.PHONY : arch/x86_64/lib/argon2-arch.c.i
arch/x86_64/lib/argon2-arch.s: arch/x86_64/lib/argon2-arch.c.s
.PHONY : arch/x86_64/lib/argon2-arch.s
# target to generate assembly for a file
arch/x86_64/lib/argon2-arch.c.s:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-arch.c.s
.PHONY : arch/x86_64/lib/argon2-arch.c.s
arch/x86_64/lib/argon2-avx2.o: arch/x86_64/lib/argon2-avx2.c.o
.PHONY : arch/x86_64/lib/argon2-avx2.o
# target to build an object file
arch/x86_64/lib/argon2-avx2.c.o:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.o
.PHONY : arch/x86_64/lib/argon2-avx2.c.o
arch/x86_64/lib/argon2-avx2.i: arch/x86_64/lib/argon2-avx2.c.i
.PHONY : arch/x86_64/lib/argon2-avx2.i
# target to preprocess a source file
arch/x86_64/lib/argon2-avx2.c.i:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.i
.PHONY : arch/x86_64/lib/argon2-avx2.c.i
arch/x86_64/lib/argon2-avx2.s: arch/x86_64/lib/argon2-avx2.c.s
.PHONY : arch/x86_64/lib/argon2-avx2.s
# target to generate assembly for a file
arch/x86_64/lib/argon2-avx2.c.s:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx2.c.s
.PHONY : arch/x86_64/lib/argon2-avx2.c.s
arch/x86_64/lib/argon2-avx512f.o: arch/x86_64/lib/argon2-avx512f.c.o
.PHONY : arch/x86_64/lib/argon2-avx512f.o
# target to build an object file
arch/x86_64/lib/argon2-avx512f.c.o:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.o
.PHONY : arch/x86_64/lib/argon2-avx512f.c.o
arch/x86_64/lib/argon2-avx512f.i: arch/x86_64/lib/argon2-avx512f.c.i
.PHONY : arch/x86_64/lib/argon2-avx512f.i
# target to preprocess a source file
arch/x86_64/lib/argon2-avx512f.c.i:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.i
.PHONY : arch/x86_64/lib/argon2-avx512f.c.i
arch/x86_64/lib/argon2-avx512f.s: arch/x86_64/lib/argon2-avx512f.c.s
.PHONY : arch/x86_64/lib/argon2-avx512f.s
# target to generate assembly for a file
arch/x86_64/lib/argon2-avx512f.c.s:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-avx512f.c.s
.PHONY : arch/x86_64/lib/argon2-avx512f.c.s
arch/x86_64/lib/argon2-sse2.o: arch/x86_64/lib/argon2-sse2.c.o
.PHONY : arch/x86_64/lib/argon2-sse2.o
# target to build an object file
arch/x86_64/lib/argon2-sse2.c.o:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.o
.PHONY : arch/x86_64/lib/argon2-sse2.c.o
arch/x86_64/lib/argon2-sse2.i: arch/x86_64/lib/argon2-sse2.c.i
.PHONY : arch/x86_64/lib/argon2-sse2.i
# target to preprocess a source file
arch/x86_64/lib/argon2-sse2.c.i:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.i
.PHONY : arch/x86_64/lib/argon2-sse2.c.i
arch/x86_64/lib/argon2-sse2.s: arch/x86_64/lib/argon2-sse2.c.s
.PHONY : arch/x86_64/lib/argon2-sse2.s
# target to generate assembly for a file
arch/x86_64/lib/argon2-sse2.c.s:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-sse2.c.s
.PHONY : arch/x86_64/lib/argon2-sse2.c.s
arch/x86_64/lib/argon2-ssse3.o: arch/x86_64/lib/argon2-ssse3.c.o
.PHONY : arch/x86_64/lib/argon2-ssse3.o
# target to build an object file
arch/x86_64/lib/argon2-ssse3.c.o:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.o
.PHONY : arch/x86_64/lib/argon2-ssse3.c.o
arch/x86_64/lib/argon2-ssse3.i: arch/x86_64/lib/argon2-ssse3.c.i
.PHONY : arch/x86_64/lib/argon2-ssse3.i
# target to preprocess a source file
arch/x86_64/lib/argon2-ssse3.c.i:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.i
.PHONY : arch/x86_64/lib/argon2-ssse3.c.i
arch/x86_64/lib/argon2-ssse3.s: arch/x86_64/lib/argon2-ssse3.c.s
.PHONY : arch/x86_64/lib/argon2-ssse3.s
# target to generate assembly for a file
arch/x86_64/lib/argon2-ssse3.c.s:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-ssse3.c.s
.PHONY : arch/x86_64/lib/argon2-ssse3.c.s
arch/x86_64/lib/argon2-xop.o: arch/x86_64/lib/argon2-xop.c.o
.PHONY : arch/x86_64/lib/argon2-xop.o
# target to build an object file
arch/x86_64/lib/argon2-xop.c.o:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.o
.PHONY : arch/x86_64/lib/argon2-xop.c.o
arch/x86_64/lib/argon2-xop.i: arch/x86_64/lib/argon2-xop.c.i
.PHONY : arch/x86_64/lib/argon2-xop.i
# target to preprocess a source file
arch/x86_64/lib/argon2-xop.c.i:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.i
.PHONY : arch/x86_64/lib/argon2-xop.c.i
arch/x86_64/lib/argon2-xop.s: arch/x86_64/lib/argon2-xop.c.s
.PHONY : arch/x86_64/lib/argon2-xop.s
# target to generate assembly for a file
arch/x86_64/lib/argon2-xop.c.s:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/arch/x86_64/lib/argon2-xop.c.s
.PHONY : arch/x86_64/lib/argon2-xop.c.s
lib/argon2.o: lib/argon2.c.o
.PHONY : lib/argon2.o
# target to build an object file
lib/argon2.c.o:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/argon2.c.o
.PHONY : lib/argon2.c.o
lib/argon2.i: lib/argon2.c.i
.PHONY : lib/argon2.i
# target to preprocess a source file
lib/argon2.c.i:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/argon2.c.i
.PHONY : lib/argon2.c.i
lib/argon2.s: lib/argon2.c.s
.PHONY : lib/argon2.s
# target to generate assembly for a file
lib/argon2.c.s:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/argon2.c.s
.PHONY : lib/argon2.c.s
lib/blake2/blake2.o: lib/blake2/blake2.c.o
.PHONY : lib/blake2/blake2.o
# target to build an object file
lib/blake2/blake2.c.o:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/blake2/blake2.c.o
.PHONY : lib/blake2/blake2.c.o
lib/blake2/blake2.i: lib/blake2/blake2.c.i
.PHONY : lib/blake2/blake2.i
# target to preprocess a source file
lib/blake2/blake2.c.i:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/blake2/blake2.c.i
.PHONY : lib/blake2/blake2.c.i
lib/blake2/blake2.s: lib/blake2/blake2.c.s
.PHONY : lib/blake2/blake2.s
# target to generate assembly for a file
lib/blake2/blake2.c.s:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/blake2/blake2.c.s
.PHONY : lib/blake2/blake2.c.s
lib/core.o: lib/core.c.o
.PHONY : lib/core.o
# target to build an object file
lib/core.c.o:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.o
.PHONY : lib/core.c.o
lib/core.i: lib/core.c.i
.PHONY : lib/core.i
# target to preprocess a source file
lib/core.c.i:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.i
.PHONY : lib/core.c.i
lib/core.s: lib/core.c.s
.PHONY : lib/core.s
# target to generate assembly for a file
lib/core.c.s:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/core.c.s
.PHONY : lib/core.c.s
lib/encoding.o: lib/encoding.c.o
.PHONY : lib/encoding.o
# target to build an object file
lib/encoding.c.o:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/encoding.c.o
.PHONY : lib/encoding.c.o
lib/encoding.i: lib/encoding.c.i
.PHONY : lib/encoding.i
# target to preprocess a source file
lib/encoding.c.i:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/encoding.c.i
.PHONY : lib/encoding.c.i
lib/encoding.s: lib/encoding.c.s
.PHONY : lib/encoding.s
# target to generate assembly for a file
lib/encoding.c.s:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/encoding.c.s
.PHONY : lib/encoding.c.s
lib/genkat.o: lib/genkat.c.o
.PHONY : lib/genkat.o
# target to build an object file
lib/genkat.c.o:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/genkat.c.o
.PHONY : lib/genkat.c.o
lib/genkat.i: lib/genkat.c.i
.PHONY : lib/genkat.i
# target to preprocess a source file
lib/genkat.c.i:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/genkat.c.i
.PHONY : lib/genkat.c.i
lib/genkat.s: lib/genkat.c.s
.PHONY : lib/genkat.s
# target to generate assembly for a file
lib/genkat.c.s:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/genkat.c.s
.PHONY : lib/genkat.c.s
lib/impl-select.o: lib/impl-select.c.o
.PHONY : lib/impl-select.o
# target to build an object file
lib/impl-select.c.o:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/impl-select.c.o
.PHONY : lib/impl-select.c.o
lib/impl-select.i: lib/impl-select.c.i
.PHONY : lib/impl-select.i
# target to preprocess a source file
lib/impl-select.c.i:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/impl-select.c.i
.PHONY : lib/impl-select.c.i
lib/impl-select.s: lib/impl-select.c.s
.PHONY : lib/impl-select.s
# target to generate assembly for a file
lib/impl-select.c.s:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/impl-select.c.s
.PHONY : lib/impl-select.c.s
lib/thread.o: lib/thread.c.o
.PHONY : lib/thread.o
# target to build an object file
lib/thread.c.o:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/thread.c.o
.PHONY : lib/thread.c.o
lib/thread.i: lib/thread.c.i
.PHONY : lib/thread.i
# target to preprocess a source file
lib/thread.c.i:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/thread.c.i
.PHONY : lib/thread.c.i
lib/thread.s: lib/thread.c.s
.PHONY : lib/thread.s
# target to generate assembly for a file
lib/thread.c.s:
cd /home/vidi/dev/src/c/xmrigCC && $(MAKE) -f src/3rdparty/argon2/CMakeFiles/argon2.dir/build.make src/3rdparty/argon2/CMakeFiles/argon2.dir/lib/thread.c.s
.PHONY : lib/thread.c.s
# Help Target
help:
@echo "The following are some of the valid targets for this Makefile:"
@echo "... all (the default if no target is provided)"
@echo "... clean"
@echo "... depend"
@echo "... edit_cache"
@echo "... argon2"
@echo "... rebuild_cache"
@echo "... arch/x86_64/lib/argon2-arch.o"
@echo "... arch/x86_64/lib/argon2-arch.i"
@echo "... arch/x86_64/lib/argon2-arch.s"
@echo "... arch/x86_64/lib/argon2-avx2.o"
@echo "... arch/x86_64/lib/argon2-avx2.i"
@echo "... arch/x86_64/lib/argon2-avx2.s"
@echo "... arch/x86_64/lib/argon2-avx512f.o"
@echo "... arch/x86_64/lib/argon2-avx512f.i"
@echo "... arch/x86_64/lib/argon2-avx512f.s"
@echo "... arch/x86_64/lib/argon2-sse2.o"
@echo "... arch/x86_64/lib/argon2-sse2.i"
@echo "... arch/x86_64/lib/argon2-sse2.s"
@echo "... arch/x86_64/lib/argon2-ssse3.o"
@echo "... arch/x86_64/lib/argon2-ssse3.i"
@echo "... arch/x86_64/lib/argon2-ssse3.s"
@echo "... arch/x86_64/lib/argon2-xop.o"
@echo "... arch/x86_64/lib/argon2-xop.i"
@echo "... arch/x86_64/lib/argon2-xop.s"
@echo "... lib/argon2.o"
@echo "... lib/argon2.i"
@echo "... lib/argon2.s"
@echo "... lib/blake2/blake2.o"
@echo "... lib/blake2/blake2.i"
@echo "... lib/blake2/blake2.s"
@echo "... lib/core.o"
@echo "... lib/core.i"
@echo "... lib/core.s"
@echo "... lib/encoding.o"
@echo "... lib/encoding.i"
@echo "... lib/encoding.s"
@echo "... lib/genkat.o"
@echo "... lib/genkat.i"
@echo "... lib/genkat.s"
@echo "... lib/impl-select.o"
@echo "... lib/impl-select.i"
@echo "... lib/impl-select.s"
@echo "... lib/thread.o"
@echo "... lib/thread.i"
@echo "... lib/thread.s"
.PHONY : help
#=============================================================================
# Special targets to cleanup operation of make.
# Special rule to run CMake to check the build system integrity.
# No rule that depends on this can have commands that come from listfiles
# because they might be regenerated.
cmake_check_build_system:
cd /home/vidi/dev/src/c/xmrigCC && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
.PHONY : cmake_check_build_system

58
src/3rdparty/argon2/README.md vendored Normal file
View file

@ -0,0 +1,58 @@
# Argon2 [![Build Status](https://travis-ci.org/WOnder93/argon2.svg?branch=master)](https://travis-ci.org/WOnder93/argon2)
A multi-arch library implementing the Argon2 password hashing algorithm.
This project is based on the [original source code](https://github.com/P-H-C/phc-winner-argon2) by the Argon2 authors. The goal of this project is to provide efficient Argon2 implementations for various HW architectures (x86, SSE, ARM, PowerPC, ...).
For the x86_64 architecture, the library implements a simple CPU dispatch which automatically selects the best implementation based on CPU flags and quick benchmarks.
# Building
## Using GNU autotools
To prepare the build environment, run:
```bash
autoreconf -i
./configure
```
After that, just run `make` to build the library.
### Running tests
After configuring the build environment, run `make check` to run the tests.
### Architecture options
You can specify the target architecture by passing the `--host=...` flag to `./configure`.
Supported architectures:
* `x86_64` &ndash; 64-bit x86 architecture
* `generic` &ndash; use generic C impementation
## Using CMake
To prepare the build environment, run:
```bash
cmake -DCMAKE_BUILD_TYPE=Release .
```
Then you can run `make` to build the library.
## Using QMake/Qt Creator
A [QMake](http://doc.qt.io/qt-4.8/qmake-manual.html) project is also available in the `qmake` directory. You can open it in the [Qt Creator IDE](http://wiki.qt.io/Category:Tools::QtCreator) or build it from terminal:
```bash
cd qmake
# see table below for the list of possible ARCH and CONFIG values
qmake ARCH=... CONFIG+=...
make
```
### Architecture options
For QMake builds you can configure support for different architectures. Use the `ARCH` variable to choose the architecture and the `CONFIG` variable to set additional options.
Supported architectures:
* `x86_64` &ndash; 64-bit x86 architecture
* QMake config flags:
* `USE_SSE2` &ndash; use SSE2 instructions
* `USE_SSSE3` &ndash; use SSSE3 instructions
* `USE_XOP` &ndash; use XOP instructions
* `USE_AVX2` &ndash; use AVX2 instructions
* `USE_AVX512F` &ndash; use AVX-512F instructions
* `generic` &ndash; use generic C impementation

View file

@ -0,0 +1,20 @@
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include "impl-select.h"
#define rotr64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
#include "argon2-template-64.h"
void fill_segment_default(const argon2_instance_t *instance,
argon2_position_t position)
{
fill_segment_64(instance, position);
}
void argon2_get_impl_list(argon2_impl_list *list)
{
list->count = 0;
}

View file

@ -0,0 +1,38 @@
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include "impl-select.h"
#include "argon2-sse2.h"
#include "argon2-ssse3.h"
#include "argon2-xop.h"
#include "argon2-avx2.h"
#include "argon2-avx512f.h"
/* NOTE: there is no portable intrinsic for 64-bit rotate, but any
* sane compiler should be able to compile this into a ROR instruction: */
#define rotr64(x, n) ((x) >> (n)) | ((x) << (64 - (n)))
#include "argon2-template-64.h"
void fill_segment_default(const argon2_instance_t *instance,
argon2_position_t position)
{
fill_segment_64(instance, position);
}
void argon2_get_impl_list(argon2_impl_list *list)
{
static const argon2_impl IMPLS[] = {
{ "x86_64", NULL, fill_segment_default },
{ "SSE2", check_sse2, fill_segment_sse2 },
{ "SSSE3", check_ssse3, fill_segment_ssse3 },
{ "XOP", check_xop, fill_segment_xop },
{ "AVX2", check_avx2, fill_segment_avx2 },
{ "AVX-512F", check_avx512f, fill_segment_avx512f },
};
list->count = sizeof(IMPLS) / sizeof(IMPLS[0]);
list->entries = IMPLS;
}

View file

@ -0,0 +1,341 @@
#include "argon2-avx2.h"
#ifdef HAVE_AVX2
#include <string.h>
#include <immintrin.h>
#define r16 (_mm256_setr_epi8( \
2, 3, 4, 5, 6, 7, 0, 1, \
10, 11, 12, 13, 14, 15, 8, 9, \
18, 19, 20, 21, 22, 23, 16, 17, \
26, 27, 28, 29, 30, 31, 24, 25))
#define r24 (_mm256_setr_epi8( \
3, 4, 5, 6, 7, 0, 1, 2, \
11, 12, 13, 14, 15, 8, 9, 10, \
19, 20, 21, 22, 23, 16, 17, 18, \
27, 28, 29, 30, 31, 24, 25, 26))
#define ror64_16(x) _mm256_shuffle_epi8((x), r16)
#define ror64_24(x) _mm256_shuffle_epi8((x), r24)
#define ror64_32(x) _mm256_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1))
#define ror64_63(x) \
_mm256_xor_si256(_mm256_srli_epi64((x), 63), _mm256_add_epi64((x), (x)))
static __m256i f(__m256i x, __m256i y)
{
__m256i z = _mm256_mul_epu32(x, y);
return _mm256_add_epi64(_mm256_add_epi64(x, y), _mm256_add_epi64(z, z));
}
#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
A0 = f(A0, B0); \
A1 = f(A1, B1); \
\
D0 = _mm256_xor_si256(D0, A0); \
D1 = _mm256_xor_si256(D1, A1); \
\
D0 = ror64_32(D0); \
D1 = ror64_32(D1); \
\
C0 = f(C0, D0); \
C1 = f(C1, D1); \
\
B0 = _mm256_xor_si256(B0, C0); \
B1 = _mm256_xor_si256(B1, C1); \
\
B0 = ror64_24(B0); \
B1 = ror64_24(B1); \
} while ((void)0, 0)
#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
A0 = f(A0, B0); \
A1 = f(A1, B1); \
\
D0 = _mm256_xor_si256(D0, A0); \
D1 = _mm256_xor_si256(D1, A1); \
\
D0 = ror64_16(D0); \
D1 = ror64_16(D1); \
\
C0 = f(C0, D0); \
C1 = f(C1, D1); \
\
B0 = _mm256_xor_si256(B0, C0); \
B1 = _mm256_xor_si256(B1, C1); \
\
B0 = ror64_63(B0); \
B1 = ror64_63(B1); \
} while ((void)0, 0)
#define DIAGONALIZE1(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
B0 = _mm256_permute4x64_epi64(B0, _MM_SHUFFLE(0, 3, 2, 1)); \
B1 = _mm256_permute4x64_epi64(B1, _MM_SHUFFLE(0, 3, 2, 1)); \
\
C0 = _mm256_permute4x64_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \
C1 = _mm256_permute4x64_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \
\
D0 = _mm256_permute4x64_epi64(D0, _MM_SHUFFLE(2, 1, 0, 3)); \
D1 = _mm256_permute4x64_epi64(D1, _MM_SHUFFLE(2, 1, 0, 3)); \
} while ((void)0, 0)
#define UNDIAGONALIZE1(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
B0 = _mm256_permute4x64_epi64(B0, _MM_SHUFFLE(2, 1, 0, 3)); \
B1 = _mm256_permute4x64_epi64(B1, _MM_SHUFFLE(2, 1, 0, 3)); \
\
C0 = _mm256_permute4x64_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \
C1 = _mm256_permute4x64_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \
\
D0 = _mm256_permute4x64_epi64(D0, _MM_SHUFFLE(0, 3, 2, 1)); \
D1 = _mm256_permute4x64_epi64(D1, _MM_SHUFFLE(0, 3, 2, 1)); \
} while ((void)0, 0)
#define DIAGONALIZE2(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
__m256i tmp1, tmp2; \
tmp1 = _mm256_blend_epi32(B0, B1, 0xCC); \
tmp2 = _mm256_blend_epi32(B0, B1, 0x33); \
B1 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \
B0 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \
\
tmp1 = C0; \
C0 = C1; \
C1 = tmp1; \
\
tmp1 = _mm256_blend_epi32(D0, D1, 0xCC); \
tmp2 = _mm256_blend_epi32(D0, D1, 0x33); \
D0 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \
D1 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \
} while ((void)0, 0)
#define UNDIAGONALIZE2(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
__m256i tmp1, tmp2; \
tmp1 = _mm256_blend_epi32(B0, B1, 0xCC); \
tmp2 = _mm256_blend_epi32(B0, B1, 0x33); \
B0 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \
B1 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \
\
tmp1 = C0; \
C0 = C1; \
C1 = tmp1; \
\
tmp1 = _mm256_blend_epi32(D0, D1, 0xCC); \
tmp2 = _mm256_blend_epi32(D0, D1, 0x33); \
D1 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \
D0 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \
} while ((void)0, 0)
#define BLAKE2_ROUND1(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
\
DIAGONALIZE1(A0, B0, C0, D0, A1, B1, C1, D1); \
\
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
\
UNDIAGONALIZE1(A0, B0, C0, D0, A1, B1, C1, D1); \
} while ((void)0, 0)
#define BLAKE2_ROUND2(A0, A1, B0, B1, C0, C1, D0, D1) \
do { \
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
\
DIAGONALIZE2(A0, B0, C0, D0, A1, B1, C1, D1); \
\
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
\
UNDIAGONALIZE2(A0, B0, C0, D0, A1, B1, C1, D1); \
} while ((void)0, 0)
enum {
ARGON2_HWORDS_IN_BLOCK = ARGON2_OWORDS_IN_BLOCK / 2,
};
static void fill_block(__m256i *s, const block *ref_block, block *next_block,
int with_xor)
{
__m256i block_XY[ARGON2_HWORDS_IN_BLOCK];
unsigned int i;
if (with_xor) {
for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) {
s[i] =_mm256_xor_si256(
s[i], _mm256_loadu_si256((const __m256i *)ref_block->v + i));
block_XY[i] = _mm256_xor_si256(
s[i], _mm256_loadu_si256((const __m256i *)next_block->v + i));
}
} else {
for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) {
block_XY[i] = s[i] =_mm256_xor_si256(
s[i], _mm256_loadu_si256((const __m256i *)ref_block->v + i));
}
}
for (i = 0; i < 4; ++i) {
BLAKE2_ROUND1(
s[8 * i + 0], s[8 * i + 1], s[8 * i + 2], s[8 * i + 3],
s[8 * i + 4], s[8 * i + 5], s[8 * i + 6], s[8 * i + 7]);
}
for (i = 0; i < 4; ++i) {
BLAKE2_ROUND2(
s[4 * 0 + i], s[4 * 1 + i], s[4 * 2 + i], s[4 * 3 + i],
s[4 * 4 + i], s[4 * 5 + i], s[4 * 6 + i], s[4 * 7 + i]);
}
for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) {
s[i] = _mm256_xor_si256(s[i], block_XY[i]);
_mm256_storeu_si256((__m256i *)next_block->v + i, s[i]);
}
}
static void next_addresses(block *address_block, block *input_block)
{
/*Temporary zero-initialized blocks*/
__m256i zero_block[ARGON2_HWORDS_IN_BLOCK];
__m256i zero2_block[ARGON2_HWORDS_IN_BLOCK];
memset(zero_block, 0, sizeof(zero_block));
memset(zero2_block, 0, sizeof(zero2_block));
/*Increasing index counter*/
input_block->v[6]++;
/*First iteration of G*/
fill_block(zero_block, input_block, address_block, 0);
/*Second iteration of G*/
fill_block(zero2_block, address_block, address_block, 0);
}
void fill_segment_avx2(const argon2_instance_t *instance,
argon2_position_t position)
{
block *ref_block = NULL, *curr_block = NULL;
block address_block, input_block;
uint64_t pseudo_rand, ref_index, ref_lane;
uint32_t prev_offset, curr_offset;
uint32_t starting_index, i;
__m256i state[ARGON2_HWORDS_IN_BLOCK];
int data_independent_addressing;
if (instance == NULL) {
return;
}
data_independent_addressing = (instance->type == Argon2_i) ||
(instance->type == Argon2_id && (position.pass == 0) &&
(position.slice < ARGON2_SYNC_POINTS / 2));
if (data_independent_addressing) {
init_block_value(&input_block, 0);
input_block.v[0] = position.pass;
input_block.v[1] = position.lane;
input_block.v[2] = position.slice;
input_block.v[3] = instance->memory_blocks;
input_block.v[4] = instance->passes;
input_block.v[5] = instance->type;
}
starting_index = 0;
if ((0 == position.pass) && (0 == position.slice)) {
starting_index = 2; /* we have already generated the first two blocks */
/* Don't forget to generate the first block of addresses: */
if (data_independent_addressing) {
next_addresses(&address_block, &input_block);
}
}
/* Offset of the current block */
curr_offset = position.lane * instance->lane_length +
position.slice * instance->segment_length + starting_index;
if (0 == curr_offset % instance->lane_length) {
/* Last block in this lane */
prev_offset = curr_offset + instance->lane_length - 1;
} else {
/* Previous block */
prev_offset = curr_offset - 1;
}
memcpy(state, ((instance->memory + prev_offset)->v), ARGON2_BLOCK_SIZE);
for (i = starting_index; i < instance->segment_length;
++i, ++curr_offset, ++prev_offset) {
/*1.1 Rotating prev_offset if needed */
if (curr_offset % instance->lane_length == 1) {
prev_offset = curr_offset - 1;
}
/* 1.2 Computing the index of the reference block */
/* 1.2.1 Taking pseudo-random value from the previous block */
if (data_independent_addressing) {
if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) {
next_addresses(&address_block, &input_block);
}
pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK];
} else {
pseudo_rand = instance->memory[prev_offset].v[0];
}
/* 1.2.2 Computing the lane of the reference block */
ref_lane = ((pseudo_rand >> 32)) % instance->lanes;
if ((position.pass == 0) && (position.slice == 0)) {
/* Can not reference other lanes yet */
ref_lane = position.lane;
}
/* 1.2.3 Computing the number of possible reference block within the
* lane.
*/
position.index = i;
ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF,
ref_lane == position.lane);
/* 2 Creating a new block */
ref_block =
instance->memory + instance->lane_length * ref_lane + ref_index;
curr_block = instance->memory + curr_offset;
/* version 1.2.1 and earlier: overwrite, not XOR */
if (0 == position.pass || ARGON2_VERSION_10 == instance->version) {
fill_block(state, ref_block, curr_block, 0);
} else {
fill_block(state, ref_block, curr_block, 1);
}
}
}
int check_avx2(void)
{
return 1;
}
#else
void fill_segment_avx2(const argon2_instance_t *instance,
argon2_position_t position)
{
}
int check_avx2(void)
{
return 0;
}
#endif

View file

@ -0,0 +1,11 @@
#ifndef ARGON2_AVX2_H
#define ARGON2_AVX2_H
#include "core.h"
void fill_segment_avx2(const argon2_instance_t *instance,
argon2_position_t position);
int check_avx2(void);
#endif // ARGON2_AVX2_H

View file

@ -0,0 +1,326 @@
#include "argon2-avx512f.h"
#ifdef HAVE_AVX512F
#include <stdint.h>
#include <string.h>
#include <immintrin.h>
#define ror64(x, n) _mm512_ror_epi64((x), (n))
static __m512i f(__m512i x, __m512i y)
{
__m512i z = _mm512_mul_epu32(x, y);
return _mm512_add_epi64(_mm512_add_epi64(x, y), _mm512_add_epi64(z, z));
}
#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
A0 = f(A0, B0); \
A1 = f(A1, B1); \
\
D0 = _mm512_xor_si512(D0, A0); \
D1 = _mm512_xor_si512(D1, A1); \
\
D0 = ror64(D0, 32); \
D1 = ror64(D1, 32); \
\
C0 = f(C0, D0); \
C1 = f(C1, D1); \
\
B0 = _mm512_xor_si512(B0, C0); \
B1 = _mm512_xor_si512(B1, C1); \
\
B0 = ror64(B0, 24); \
B1 = ror64(B1, 24); \
} while ((void)0, 0)
#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
A0 = f(A0, B0); \
A1 = f(A1, B1); \
\
D0 = _mm512_xor_si512(D0, A0); \
D1 = _mm512_xor_si512(D1, A1); \
\
D0 = ror64(D0, 16); \
D1 = ror64(D1, 16); \
\
C0 = f(C0, D0); \
C1 = f(C1, D1); \
\
B0 = _mm512_xor_si512(B0, C0); \
B1 = _mm512_xor_si512(B1, C1); \
\
B0 = ror64(B0, 63); \
B1 = ror64(B1, 63); \
} while ((void)0, 0)
#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
B0 = _mm512_permutex_epi64(B0, _MM_SHUFFLE(0, 3, 2, 1)); \
B1 = _mm512_permutex_epi64(B1, _MM_SHUFFLE(0, 3, 2, 1)); \
\
C0 = _mm512_permutex_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \
C1 = _mm512_permutex_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \
\
D0 = _mm512_permutex_epi64(D0, _MM_SHUFFLE(2, 1, 0, 3)); \
D1 = _mm512_permutex_epi64(D1, _MM_SHUFFLE(2, 1, 0, 3)); \
} while ((void)0, 0)
#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
B0 = _mm512_permutex_epi64(B0, _MM_SHUFFLE(2, 1, 0, 3)); \
B1 = _mm512_permutex_epi64(B1, _MM_SHUFFLE(2, 1, 0, 3)); \
\
C0 = _mm512_permutex_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \
C1 = _mm512_permutex_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \
\
D0 = _mm512_permutex_epi64(D0, _MM_SHUFFLE(0, 3, 2, 1)); \
D1 = _mm512_permutex_epi64(D1, _MM_SHUFFLE(0, 3, 2, 1)); \
} while ((void)0, 0)
#define BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
\
DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \
\
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
\
UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \
} while ((void)0, 0)
#define SWAP_HALVES(A0, A1) \
do { \
__m512i t0, t1; \
t0 = _mm512_shuffle_i64x2(A0, A1, _MM_SHUFFLE(1, 0, 1, 0)); \
t1 = _mm512_shuffle_i64x2(A0, A1, _MM_SHUFFLE(3, 2, 3, 2)); \
A0 = t0; \
A1 = t1; \
} while((void)0, 0)
#define SWAP_QUARTERS(A0, A1) \
do { \
SWAP_HALVES(A0, A1); \
A0 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A0); \
A1 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A1); \
} while((void)0, 0)
#define UNSWAP_QUARTERS(A0, A1) \
do { \
A0 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A0); \
A1 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A1); \
SWAP_HALVES(A0, A1); \
} while((void)0, 0)
#define BLAKE2_ROUND1(A0, C0, B0, D0, A1, C1, B1, D1) \
do { \
SWAP_HALVES(A0, B0); \
SWAP_HALVES(C0, D0); \
SWAP_HALVES(A1, B1); \
SWAP_HALVES(C1, D1); \
BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1); \
SWAP_HALVES(A0, B0); \
SWAP_HALVES(C0, D0); \
SWAP_HALVES(A1, B1); \
SWAP_HALVES(C1, D1); \
} while ((void)0, 0)
#define BLAKE2_ROUND2(A0, A1, B0, B1, C0, C1, D0, D1) \
do { \
SWAP_QUARTERS(A0, A1); \
SWAP_QUARTERS(B0, B1); \
SWAP_QUARTERS(C0, C1); \
SWAP_QUARTERS(D0, D1); \
BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1); \
UNSWAP_QUARTERS(A0, A1); \
UNSWAP_QUARTERS(B0, B1); \
UNSWAP_QUARTERS(C0, C1); \
UNSWAP_QUARTERS(D0, D1); \
} while ((void)0, 0)
enum {
ARGON2_VECS_IN_BLOCK = ARGON2_OWORDS_IN_BLOCK / 4,
};
static void fill_block(__m512i *s, const block *ref_block, block *next_block,
int with_xor)
{
__m512i block_XY[ARGON2_VECS_IN_BLOCK];
unsigned int i;
if (with_xor) {
for (i = 0; i < ARGON2_VECS_IN_BLOCK; i++) {
s[i] =_mm512_xor_si512(
s[i], _mm512_loadu_si512((const __m512i *)ref_block->v + i));
block_XY[i] = _mm512_xor_si512(
s[i], _mm512_loadu_si512((const __m512i *)next_block->v + i));
}
} else {
for (i = 0; i < ARGON2_VECS_IN_BLOCK; i++) {
block_XY[i] = s[i] =_mm512_xor_si512(
s[i], _mm512_loadu_si512((const __m512i *)ref_block->v + i));
}
}
for (i = 0; i < 2; ++i) {
BLAKE2_ROUND1(
s[8 * i + 0], s[8 * i + 1], s[8 * i + 2], s[8 * i + 3],
s[8 * i + 4], s[8 * i + 5], s[8 * i + 6], s[8 * i + 7]);
}
for (i = 0; i < 2; ++i) {
BLAKE2_ROUND2(
s[2 * 0 + i], s[2 * 1 + i], s[2 * 2 + i], s[2 * 3 + i],
s[2 * 4 + i], s[2 * 5 + i], s[2 * 6 + i], s[2 * 7 + i]);
}
for (i = 0; i < ARGON2_VECS_IN_BLOCK; i++) {
s[i] = _mm512_xor_si512(s[i], block_XY[i]);
_mm512_storeu_si512((__m512i *)next_block->v + i, s[i]);
}
}
static void next_addresses(block *address_block, block *input_block)
{
/*Temporary zero-initialized blocks*/
__m512i zero_block[ARGON2_VECS_IN_BLOCK];
__m512i zero2_block[ARGON2_VECS_IN_BLOCK];
memset(zero_block, 0, sizeof(zero_block));
memset(zero2_block, 0, sizeof(zero2_block));
/*Increasing index counter*/
input_block->v[6]++;
/*First iteration of G*/
fill_block(zero_block, input_block, address_block, 0);
/*Second iteration of G*/
fill_block(zero2_block, address_block, address_block, 0);
}
void fill_segment_avx512f(const argon2_instance_t *instance,
argon2_position_t position)
{
block *ref_block = NULL, *curr_block = NULL;
block address_block, input_block;
uint64_t pseudo_rand, ref_index, ref_lane;
uint32_t prev_offset, curr_offset;
uint32_t starting_index, i;
__m512i state[ARGON2_VECS_IN_BLOCK];
int data_independent_addressing;
if (instance == NULL) {
return;
}
data_independent_addressing = (instance->type == Argon2_i) ||
(instance->type == Argon2_id && (position.pass == 0) &&
(position.slice < ARGON2_SYNC_POINTS / 2));
if (data_independent_addressing) {
init_block_value(&input_block, 0);
input_block.v[0] = position.pass;
input_block.v[1] = position.lane;
input_block.v[2] = position.slice;
input_block.v[3] = instance->memory_blocks;
input_block.v[4] = instance->passes;
input_block.v[5] = instance->type;
}
starting_index = 0;
if ((0 == position.pass) && (0 == position.slice)) {
starting_index = 2; /* we have already generated the first two blocks */
/* Don't forget to generate the first block of addresses: */
if (data_independent_addressing) {
next_addresses(&address_block, &input_block);
}
}
/* Offset of the current block */
curr_offset = position.lane * instance->lane_length +
position.slice * instance->segment_length + starting_index;
if (0 == curr_offset % instance->lane_length) {
/* Last block in this lane */
prev_offset = curr_offset + instance->lane_length - 1;
} else {
/* Previous block */
prev_offset = curr_offset - 1;
}
memcpy(state, ((instance->memory + prev_offset)->v), ARGON2_BLOCK_SIZE);
for (i = starting_index; i < instance->segment_length;
++i, ++curr_offset, ++prev_offset) {
/*1.1 Rotating prev_offset if needed */
if (curr_offset % instance->lane_length == 1) {
prev_offset = curr_offset - 1;
}
/* 1.2 Computing the index of the reference block */
/* 1.2.1 Taking pseudo-random value from the previous block */
if (data_independent_addressing) {
if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) {
next_addresses(&address_block, &input_block);
}
pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK];
} else {
pseudo_rand = instance->memory[prev_offset].v[0];
}
/* 1.2.2 Computing the lane of the reference block */
ref_lane = ((pseudo_rand >> 32)) % instance->lanes;
if ((position.pass == 0) && (position.slice == 0)) {
/* Can not reference other lanes yet */
ref_lane = position.lane;
}
/* 1.2.3 Computing the number of possible reference block within the
* lane.
*/
position.index = i;
ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF,
ref_lane == position.lane);
/* 2 Creating a new block */
ref_block =
instance->memory + instance->lane_length * ref_lane + ref_index;
curr_block = instance->memory + curr_offset;
/* version 1.2.1 and earlier: overwrite, not XOR */
if (0 == position.pass || ARGON2_VERSION_10 == instance->version) {
fill_block(state, ref_block, curr_block, 0);
} else {
fill_block(state, ref_block, curr_block, 1);
}
}
}
int check_avx512f(void)
{
return 1;
}
#else
void fill_segment_avx512f(const argon2_instance_t *instance,
argon2_position_t position)
{
}
int check_avx512f(void)
{
return 0;
}
#endif

View file

@ -0,0 +1,11 @@
#ifndef ARGON2_AVX512F_H
#define ARGON2_AVX512F_H
#include "core.h"
void fill_segment_avx512f(const argon2_instance_t *instance,
argon2_position_t position);
int check_avx512f(void);
#endif // ARGON2_AVX512F_H

View file

@ -0,0 +1,122 @@
#include "argon2-sse2.h"
#ifdef HAVE_SSE2
#include <immintrin.h>
#define ror64_16(x) \
_mm_shufflehi_epi16( \
_mm_shufflelo_epi16((x), _MM_SHUFFLE(0, 3, 2, 1)), \
_MM_SHUFFLE(0, 3, 2, 1))
#define ror64_24(x) \
_mm_xor_si128(_mm_srli_epi64((x), 24), _mm_slli_epi64((x), 40))
#define ror64_32(x) _mm_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1))
#define ror64_63(x) \
_mm_xor_si128(_mm_srli_epi64((x), 63), _mm_add_epi64((x), (x)))
static __m128i f(__m128i x, __m128i y)
{
__m128i z = _mm_mul_epu32(x, y);
return _mm_add_epi64(_mm_add_epi64(x, y), _mm_add_epi64(z, z));
}
#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
A0 = f(A0, B0); \
A1 = f(A1, B1); \
\
D0 = _mm_xor_si128(D0, A0); \
D1 = _mm_xor_si128(D1, A1); \
\
D0 = ror64_32(D0); \
D1 = ror64_32(D1); \
\
C0 = f(C0, D0); \
C1 = f(C1, D1); \
\
B0 = _mm_xor_si128(B0, C0); \
B1 = _mm_xor_si128(B1, C1); \
\
B0 = ror64_24(B0); \
B1 = ror64_24(B1); \
} while ((void)0, 0)
#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
A0 = f(A0, B0); \
A1 = f(A1, B1); \
\
D0 = _mm_xor_si128(D0, A0); \
D1 = _mm_xor_si128(D1, A1); \
\
D0 = ror64_16(D0); \
D1 = ror64_16(D1); \
\
C0 = f(C0, D0); \
C1 = f(C1, D1); \
\
B0 = _mm_xor_si128(B0, C0); \
B1 = _mm_xor_si128(B1, C1); \
\
B0 = ror64_63(B0); \
B1 = ror64_63(B1); \
} while ((void)0, 0)
#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
__m128i t0 = D0; \
__m128i t1 = B0; \
D0 = _mm_unpackhi_epi64(D1, _mm_unpacklo_epi64(t0, t0)); \
D1 = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(D1, D1)); \
B0 = _mm_unpackhi_epi64(B0, _mm_unpacklo_epi64(B1, B1)); \
B1 = _mm_unpackhi_epi64(B1, _mm_unpacklo_epi64(t1, t1)); \
} while ((void)0, 0)
#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
__m128i t0 = B0; \
__m128i t1 = D0; \
B0 = _mm_unpackhi_epi64(B1, _mm_unpacklo_epi64(B0, B0)); \
B1 = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(B1, B1)); \
D0 = _mm_unpackhi_epi64(D0, _mm_unpacklo_epi64(D1, D1)); \
D1 = _mm_unpackhi_epi64(D1, _mm_unpacklo_epi64(t1, t1)); \
} while ((void)0, 0)
#define BLAKE2_ROUND(A0, A1, B0, B1, C0, C1, D0, D1) \
do { \
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
\
DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \
\
G1(A0, B0, C1, D0, A1, B1, C0, D1); \
G2(A0, B0, C1, D0, A1, B1, C0, D1); \
\
UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \
} while ((void)0, 0)
#include "argon2-template-128.h"
void fill_segment_sse2(const argon2_instance_t *instance,
argon2_position_t position)
{
fill_segment_128(instance, position);
}
int check_sse2(void)
{
return 1;
}
#else
void fill_segment_sse2(const argon2_instance_t *instance,
argon2_position_t position)
{
}
int check_sse2(void)
{
return 0;
}
#endif

View file

@ -0,0 +1,11 @@
#ifndef ARGON2_SSE2_H
#define ARGON2_SSE2_H
#include "core.h"
void fill_segment_sse2(const argon2_instance_t *instance,
argon2_position_t position);
int check_sse2(void);
#endif // ARGON2_SSE2_H

View file

@ -0,0 +1,134 @@
#include "argon2-ssse3.h"
#ifdef HAVE_SSSE3
#include <string.h>
#include <immintrin.h>
#define r16 (_mm_setr_epi8( \
2, 3, 4, 5, 6, 7, 0, 1, \
10, 11, 12, 13, 14, 15, 8, 9))
#define r24 (_mm_setr_epi8( \
3, 4, 5, 6, 7, 0, 1, 2, \
11, 12, 13, 14, 15, 8, 9, 10))
#define ror64_16(x) _mm_shuffle_epi8((x), r16)
#define ror64_24(x) _mm_shuffle_epi8((x), r24)
#define ror64_32(x) _mm_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1))
#define ror64_63(x) \
_mm_xor_si128(_mm_srli_epi64((x), 63), _mm_add_epi64((x), (x)))
static __m128i f(__m128i x, __m128i y)
{
__m128i z = _mm_mul_epu32(x, y);
return _mm_add_epi64(_mm_add_epi64(x, y), _mm_add_epi64(z, z));
}
#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
A0 = f(A0, B0); \
A1 = f(A1, B1); \
\
D0 = _mm_xor_si128(D0, A0); \
D1 = _mm_xor_si128(D1, A1); \
\
D0 = ror64_32(D0); \
D1 = ror64_32(D1); \
\
C0 = f(C0, D0); \
C1 = f(C1, D1); \
\
B0 = _mm_xor_si128(B0, C0); \
B1 = _mm_xor_si128(B1, C1); \
\
B0 = ror64_24(B0); \
B1 = ror64_24(B1); \
} while ((void)0, 0)
#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
A0 = f(A0, B0); \
A1 = f(A1, B1); \
\
D0 = _mm_xor_si128(D0, A0); \
D1 = _mm_xor_si128(D1, A1); \
\
D0 = ror64_16(D0); \
D1 = ror64_16(D1); \
\
C0 = f(C0, D0); \
C1 = f(C1, D1); \
\
B0 = _mm_xor_si128(B0, C0); \
B1 = _mm_xor_si128(B1, C1); \
\
B0 = ror64_63(B0); \
B1 = ror64_63(B1); \
} while ((void)0, 0)
#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
__m128i t0 = _mm_alignr_epi8(B1, B0, 8); \
__m128i t1 = _mm_alignr_epi8(B0, B1, 8); \
B0 = t0; \
B1 = t1; \
\
t0 = _mm_alignr_epi8(D1, D0, 8); \
t1 = _mm_alignr_epi8(D0, D1, 8); \
D0 = t1; \
D1 = t0; \
} while ((void)0, 0)
#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
__m128i t0 = _mm_alignr_epi8(B0, B1, 8); \
__m128i t1 = _mm_alignr_epi8(B1, B0, 8); \
B0 = t0; \
B1 = t1; \
\
t0 = _mm_alignr_epi8(D0, D1, 8); \
t1 = _mm_alignr_epi8(D1, D0, 8); \
D0 = t1; \
D1 = t0; \
} while ((void)0, 0)
#define BLAKE2_ROUND(A0, A1, B0, B1, C0, C1, D0, D1) \
do { \
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
\
DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \
\
G1(A0, B0, C1, D0, A1, B1, C0, D1); \
G2(A0, B0, C1, D0, A1, B1, C0, D1); \
\
UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \
} while ((void)0, 0)
#include "argon2-template-128.h"
void fill_segment_ssse3(const argon2_instance_t *instance,
argon2_position_t position)
{
fill_segment_128(instance, position);
}
int check_ssse3(void)
{
return 1;
}
#else
void fill_segment_ssse3(const argon2_instance_t *instance,
argon2_position_t position)
{
}
int check_ssse3(void)
{
return 0;
}
#endif

View file

@ -0,0 +1,11 @@
#ifndef ARGON2_SSSE3_H
#define ARGON2_SSSE3_H
#include "core.h"
void fill_segment_ssse3(const argon2_instance_t *instance,
argon2_position_t position);
int check_ssse3(void);
#endif // ARGON2_SSSE3_H

View file

@ -0,0 +1,164 @@
#include <string.h>
#include <immintrin.h>
#include "core.h"
static void fill_block(__m128i *s, const block *ref_block, block *next_block,
int with_xor)
{
__m128i block_XY[ARGON2_OWORDS_IN_BLOCK];
unsigned int i;
if (with_xor) {
for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) {
s[i] = _mm_xor_si128(
s[i], _mm_loadu_si128((const __m128i *)ref_block->v + i));
block_XY[i] = _mm_xor_si128(
s[i], _mm_loadu_si128((const __m128i *)next_block->v + i));
}
} else {
for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) {
block_XY[i] = s[i] = _mm_xor_si128(
s[i], _mm_loadu_si128((const __m128i *)ref_block->v + i));
}
}
for (i = 0; i < 8; ++i) {
BLAKE2_ROUND(
s[8 * i + 0], s[8 * i + 1], s[8 * i + 2], s[8 * i + 3],
s[8 * i + 4], s[8 * i + 5], s[8 * i + 6], s[8 * i + 7]);
}
for (i = 0; i < 8; ++i) {
BLAKE2_ROUND(
s[8 * 0 + i], s[8 * 1 + i], s[8 * 2 + i], s[8 * 3 + i],
s[8 * 4 + i], s[8 * 5 + i], s[8 * 6 + i], s[8 * 7 + i]);
}
for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) {
s[i] = _mm_xor_si128(s[i], block_XY[i]);
_mm_storeu_si128((__m128i *)next_block->v + i, s[i]);
}
}
static void next_addresses(block *address_block, block *input_block)
{
/*Temporary zero-initialized blocks*/
__m128i zero_block[ARGON2_OWORDS_IN_BLOCK];
__m128i zero2_block[ARGON2_OWORDS_IN_BLOCK];
memset(zero_block, 0, sizeof(zero_block));
memset(zero2_block, 0, sizeof(zero2_block));
/*Increasing index counter*/
input_block->v[6]++;
/*First iteration of G*/
fill_block(zero_block, input_block, address_block, 0);
/*Second iteration of G*/
fill_block(zero2_block, address_block, address_block, 0);
}
static void fill_segment_128(const argon2_instance_t *instance,
argon2_position_t position)
{
block *ref_block = NULL, *curr_block = NULL;
block address_block, input_block;
uint64_t pseudo_rand, ref_index, ref_lane;
uint32_t prev_offset, curr_offset;
uint32_t starting_index, i;
__m128i state[ARGON2_OWORDS_IN_BLOCK];
int data_independent_addressing;
if (instance == NULL) {
return;
}
data_independent_addressing = (instance->type == Argon2_i) ||
(instance->type == Argon2_id && (position.pass == 0) &&
(position.slice < ARGON2_SYNC_POINTS / 2));
if (data_independent_addressing) {
init_block_value(&input_block, 0);
input_block.v[0] = position.pass;
input_block.v[1] = position.lane;
input_block.v[2] = position.slice;
input_block.v[3] = instance->memory_blocks;
input_block.v[4] = instance->passes;
input_block.v[5] = instance->type;
}
starting_index = 0;
if ((0 == position.pass) && (0 == position.slice)) {
starting_index = 2; /* we have already generated the first two blocks */
/* Don't forget to generate the first block of addresses: */
if (data_independent_addressing) {
next_addresses(&address_block, &input_block);
}
}
/* Offset of the current block */
curr_offset = position.lane * instance->lane_length +
position.slice * instance->segment_length + starting_index;
if (0 == curr_offset % instance->lane_length) {
/* Last block in this lane */
prev_offset = curr_offset + instance->lane_length - 1;
} else {
/* Previous block */
prev_offset = curr_offset - 1;
}
memcpy(state, ((instance->memory + prev_offset)->v), ARGON2_BLOCK_SIZE);
for (i = starting_index; i < instance->segment_length;
++i, ++curr_offset, ++prev_offset) {
/*1.1 Rotating prev_offset if needed */
if (curr_offset % instance->lane_length == 1) {
prev_offset = curr_offset - 1;
}
/* 1.2 Computing the index of the reference block */
/* 1.2.1 Taking pseudo-random value from the previous block */
if (data_independent_addressing) {
if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) {
next_addresses(&address_block, &input_block);
}
pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK];
} else {
pseudo_rand = instance->memory[prev_offset].v[0];
}
/* 1.2.2 Computing the lane of the reference block */
ref_lane = ((pseudo_rand >> 32)) % instance->lanes;
if ((position.pass == 0) && (position.slice == 0)) {
/* Can not reference other lanes yet */
ref_lane = position.lane;
}
/* 1.2.3 Computing the number of possible reference block within the
* lane.
*/
position.index = i;
ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF,
ref_lane == position.lane);
/* 2 Creating a new block */
ref_block =
instance->memory + instance->lane_length * ref_lane + ref_index;
curr_block = instance->memory + curr_offset;
/* version 1.2.1 and earlier: overwrite, not XOR */
if (0 == position.pass || ARGON2_VERSION_10 == instance->version) {
fill_block(state, ref_block, curr_block, 0);
} else {
fill_block(state, ref_block, curr_block, 1);
}
}
}

View file

@ -0,0 +1,122 @@
#include "argon2-xop.h"
#ifdef HAVE_XOP
#include <string.h>
#include <immintrin.h>
#define ror64(x, c) _mm_roti_epi64((x), -(c))
static __m128i f(__m128i x, __m128i y)
{
__m128i z = _mm_mul_epu32(x, y);
return _mm_add_epi64(_mm_add_epi64(x, y), _mm_add_epi64(z, z));
}
#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
A0 = f(A0, B0); \
A1 = f(A1, B1); \
\
D0 = _mm_xor_si128(D0, A0); \
D1 = _mm_xor_si128(D1, A1); \
\
D0 = ror64(D0, 32); \
D1 = ror64(D1, 32); \
\
C0 = f(C0, D0); \
C1 = f(C1, D1); \
\
B0 = _mm_xor_si128(B0, C0); \
B1 = _mm_xor_si128(B1, C1); \
\
B0 = ror64(B0, 24); \
B1 = ror64(B1, 24); \
} while ((void)0, 0)
#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
A0 = f(A0, B0); \
A1 = f(A1, B1); \
\
D0 = _mm_xor_si128(D0, A0); \
D1 = _mm_xor_si128(D1, A1); \
\
D0 = ror64(D0, 16); \
D1 = ror64(D1, 16); \
\
C0 = f(C0, D0); \
C1 = f(C1, D1); \
\
B0 = _mm_xor_si128(B0, C0); \
B1 = _mm_xor_si128(B1, C1); \
\
B0 = ror64(B0, 63); \
B1 = ror64(B1, 63); \
} while ((void)0, 0)
#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
__m128i t0 = _mm_alignr_epi8(B1, B0, 8); \
__m128i t1 = _mm_alignr_epi8(B0, B1, 8); \
B0 = t0; \
B1 = t1; \
\
t0 = _mm_alignr_epi8(D1, D0, 8); \
t1 = _mm_alignr_epi8(D0, D1, 8); \
D0 = t1; \
D1 = t0; \
} while ((void)0, 0)
#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \
do { \
__m128i t0 = _mm_alignr_epi8(B0, B1, 8); \
__m128i t1 = _mm_alignr_epi8(B1, B0, 8); \
B0 = t0; \
B1 = t1; \
\
t0 = _mm_alignr_epi8(D0, D1, 8); \
t1 = _mm_alignr_epi8(D1, D0, 8); \
D0 = t1; \
D1 = t0; \
} while ((void)0, 0)
#define BLAKE2_ROUND(A0, A1, B0, B1, C0, C1, D0, D1) \
do { \
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
\
DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \
\
G1(A0, B0, C1, D0, A1, B1, C0, D1); \
G2(A0, B0, C1, D0, A1, B1, C0, D1); \
\
UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \
} while ((void)0, 0)
#include "argon2-template-128.h"
void fill_segment_xop(const argon2_instance_t *instance,
argon2_position_t position)
{
fill_segment_128(instance, position);
}
int check_xop(void)
{
return 1;
}
#else
void fill_segment_xop(const argon2_instance_t *instance,
argon2_position_t position)
{
}
int check_xop(void)
{
return 0;
}
#endif

View file

@ -0,0 +1,11 @@
#ifndef ARGON2_XOP_H
#define ARGON2_XOP_H
#include "core.h"
void fill_segment_xop(const argon2_instance_t *instance,
argon2_position_t position);
int check_xop(void);
#endif // ARGON2_XOP_H

39
src/3rdparty/argon2/cmake_install.cmake vendored Normal file
View file

@ -0,0 +1,39 @@
# Install script for directory: /home/vidi/dev/src/c/xmrigCC/src/3rdparty/argon2
# Set the install prefix
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
set(CMAKE_INSTALL_PREFIX "/usr/local")
endif()
string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
# Set the install configuration name.
if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
if(BUILD_TYPE)
string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
else()
set(CMAKE_INSTALL_CONFIG_NAME "Release")
endif()
message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
endif()
# Set the component getting installed.
if(NOT CMAKE_INSTALL_COMPONENT)
if(COMPONENT)
message(STATUS "Install component: \"${COMPONENT}\"")
set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
else()
set(CMAKE_INSTALL_COMPONENT)
endif()
endif()
# Install shared libraries without execute permission?
if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
set(CMAKE_INSTALL_SO_NO_EXE "1")
endif()
# Is this installation the result of a crosscompile?
if(NOT DEFINED CMAKE_CROSSCOMPILING)
set(CMAKE_CROSSCOMPILING "FALSE")
endif()

108
src/3rdparty/argon2/configure.ac vendored Normal file
View file

@ -0,0 +1,108 @@
dnl ---------------------------------------------------------------------
dnl Copyright (C) 2015, Ondrej Mosnacek <omosnacek@gmail.com>
dnl
dnl This program is free software: you can redistribute it and/or
dnl modify it under the terms of the GNU General Public License
dnl as published by the Free Software Foundation: either version 2
dnl of the License, or (at your option) any later version.
dnl
dnl This program is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
dnl ---------------------------------------------------------------------
AC_CONFIG_MACRO_DIR([m4])
AC_INIT([argon2], [0.1], [])
LT_INIT
AM_INIT_AUTOMAKE([foreign subdir-objects])
AM_SILENT_RULES([yes])
AC_PROG_CC
AC_PROG_CC_C89
AM_PROG_AS
AX_PTHREAD
AC_CANONICAL_HOST
AS_CASE([$host_cpu],
dnl [i?86], [ARCH=i386],
[x86_64], [ARCH=x86_64],
[ARCH=generic
AC_MSG_WARN("No code for architecture $host_cpu; using generic implementation")]
)
AC_SUBST([ARCH])
AM_CONDITIONAL([ARCH_X86_64], [test "$ARCH" = 'x86_64'])
AM_CONDITIONAL([ARCH_GENERIC], [test "$ARCH" = 'generic'])
# AX_CHECK_COMPILER_FEATURE(NAME, FLAG, TEST_SOURCE)
# --------------------------
AC_DEFUN([AX_CHECK_COMPILER_FEATURE], [{
AX_CHECK_COMPILE_FLAG([-m$2], [HAVE_FLAG=1], [HAVE_FLAG=0])
HAVE_FEATURE=0
AS_IF([test "$HAVE_FLAG" = '1'], [{
AC_MSG_CHECKING("whether C compiler supports $1 with -m$2...")
CFLAGS_BACKUP="$CFLAGS"
CFLAGS="-m$2"
AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])], [HAVE_FEATURE=1])
CFLAGS="$CFLAGS_BACKUP"
AS_IF([test "$HAVE_FEATURE" = '1'], [RESULT='yes'], [RESULT='no'])
AC_MSG_RESULT([$RESULT])
}])
HAVE_$1=HAVE_FEATURE
AM_CONDITIONAL([HAVE_$1], [test "$HAVE_FEATURE" = '1'])
}])
AX_CHECK_COMPILER_FEATURE([SSE2], [sse2], [[
#include <x86intrin.h>
void function_sse2(__m128i *dst, const __m128i *a, const __m128i *b)
{
*dst = _mm_xor_si128(*a, *b);
}
]])
AX_CHECK_COMPILER_FEATURE([SSSE3], [ssse3], [[
#include <x86intrin.h>
void function_ssse3(__m128i *dst, const __m128i *a, const __m128i *b)
{
*dst = _mm_shuffle_epi8(*a, *b);
}
]])
AX_CHECK_COMPILER_FEATURE([XOP], [xop], [[
#include <x86intrin.h>
void function_xop(__m128i *dst, const __m128i *a, int b)
{
*dst = _mm_roti_epi64(*a, b);
}
]])
AX_CHECK_COMPILER_FEATURE([AVX2], [avx2], [[
#include <x86intrin.h>
void function_avx2(__m256i *dst, const __m256i *a, const __m256i *b)
{
*dst = _mm256_xor_si256(*a, *b);
}
]])
AX_CHECK_COMPILER_FEATURE([AVX512F], [avx512f], [[
#include <x86intrin.h>
void function_avx512f(__m512i *dst, const __m512i *a)
{
*dst = _mm512_ror_epi64(*a, 57);
}
]])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

485
src/3rdparty/argon2/include/argon2.h vendored Normal file
View file

@ -0,0 +1,485 @@
/*
* Argon2 source code package
*
* Written by Daniel Dinu and Dmitry Khovratovich, 2015
*
* This work is licensed under a Creative Commons CC0 1.0 License/Waiver.
*
* You should have received a copy of the CC0 Public Domain Dedication
* along with this software. If not, see
* <http://creativecommons.org/publicdomain/zero/1.0/>.
*/
#ifndef ARGON2_H
#define ARGON2_H
#include <stdint.h>
#include <stddef.h>
#include <stdio.h>
#include <limits.h>
/* Symbols visibility control */
#if defined(_WIN32) || defined(__CYGWIN__)
#if defined(A2_VISCTL)
#if defined(_MSC_VER)
#define ARGON2_PUBLIC __declspec(dllexport)
#else
#define ARGON2_PUBLIC __attribute__ ((dllexport))
#endif
#else
#if defined(_MSC_VER)
#define ARGON2_PUBLIC __declspec(dllimport)
#else
#define ARGON2_PUBLIC /*__attribute__ ((dllimport))*/
#endif
#endif
#define ARGON2_LOCAL
#else
#if defined(A2_VISCTL)
#define ARGON2_PUBLIC __attribute__ ((visibility ("default")))
#define ARGON2_LOCAL __attribute__ ((visibility ("hidden")))
#else
#define ARGON2_PUBLIC
#define ARGON2_LOCAL
#endif
#endif
#if defined(__cplusplus)
extern "C" {
#endif
/*
* Argon2 input parameter restrictions
*/
/* Minimum and maximum number of lanes (degree of parallelism) */
#define ARGON2_MIN_LANES UINT32_C(1)
#define ARGON2_MAX_LANES UINT32_C(0xFFFFFF)
/* Minimum and maximum number of threads */
#define ARGON2_MIN_THREADS UINT32_C(1)
#define ARGON2_MAX_THREADS UINT32_C(0xFFFFFF)
/* Number of synchronization points between lanes per pass */
#define ARGON2_SYNC_POINTS UINT32_C(4)
/* Minimum and maximum digest size in bytes */
#define ARGON2_MIN_OUTLEN UINT32_C(4)
#define ARGON2_MAX_OUTLEN UINT32_C(0xFFFFFFFF)
/* Minimum and maximum number of memory blocks (each of BLOCK_SIZE bytes) */
#define ARGON2_MIN_MEMORY (2 * ARGON2_SYNC_POINTS) /* 2 blocks per slice */
#define ARGON2_MIN(a, b) ((a) < (b) ? (a) : (b))
/* Max memory size is addressing-space/2, topping at 2^32 blocks (4 TB) */
#define ARGON2_MAX_MEMORY_BITS \
ARGON2_MIN(UINT32_C(32), (sizeof(void *) * CHAR_BIT - 10 - 1))
#define ARGON2_MAX_MEMORY \
ARGON2_MIN(UINT32_C(0xFFFFFFFF), UINT64_C(1) << ARGON2_MAX_MEMORY_BITS)
/* Minimum and maximum number of passes */
#define ARGON2_MIN_TIME UINT32_C(1)
#define ARGON2_MAX_TIME UINT32_C(0xFFFFFFFF)
/* Minimum and maximum password length in bytes */
#define ARGON2_MIN_PWD_LENGTH UINT32_C(0)
#define ARGON2_MAX_PWD_LENGTH UINT32_C(0xFFFFFFFF)
/* Minimum and maximum associated data length in bytes */
#define ARGON2_MIN_AD_LENGTH UINT32_C(0)
#define ARGON2_MAX_AD_LENGTH UINT32_C(0xFFFFFFFF)
/* Minimum and maximum salt length in bytes */
#define ARGON2_MIN_SALT_LENGTH UINT32_C(8)
#define ARGON2_MAX_SALT_LENGTH UINT32_C(0xFFFFFFFF)
/* Minimum and maximum key length in bytes */
#define ARGON2_MIN_SECRET UINT32_C(0)
#define ARGON2_MAX_SECRET UINT32_C(0xFFFFFFFF)
/* Flags to determine which fields are securely wiped (default = no wipe). */
#define ARGON2_DEFAULT_FLAGS UINT32_C(0)
#define ARGON2_FLAG_CLEAR_PASSWORD (UINT32_C(1) << 0)
#define ARGON2_FLAG_CLEAR_SECRET (UINT32_C(1) << 1)
#define ARGON2_FLAG_GENKAT (UINT32_C(1) << 3)
/* Global flag to determine if we are wiping internal memory buffers. This flag
* is defined in core.c and deafults to 1 (wipe internal memory). */
extern int FLAG_clear_internal_memory;
/* Error codes */
typedef enum Argon2_ErrorCodes {
ARGON2_OK = 0,
ARGON2_OUTPUT_PTR_NULL = -1,
ARGON2_OUTPUT_TOO_SHORT = -2,
ARGON2_OUTPUT_TOO_LONG = -3,
ARGON2_PWD_TOO_SHORT = -4,
ARGON2_PWD_TOO_LONG = -5,
ARGON2_SALT_TOO_SHORT = -6,
ARGON2_SALT_TOO_LONG = -7,
ARGON2_AD_TOO_SHORT = -8,
ARGON2_AD_TOO_LONG = -9,
ARGON2_SECRET_TOO_SHORT = -10,
ARGON2_SECRET_TOO_LONG = -11,
ARGON2_TIME_TOO_SMALL = -12,
ARGON2_TIME_TOO_LARGE = -13,
ARGON2_MEMORY_TOO_LITTLE = -14,
ARGON2_MEMORY_TOO_MUCH = -15,
ARGON2_LANES_TOO_FEW = -16,
ARGON2_LANES_TOO_MANY = -17,
ARGON2_PWD_PTR_MISMATCH = -18, /* NULL ptr with non-zero length */
ARGON2_SALT_PTR_MISMATCH = -19, /* NULL ptr with non-zero length */
ARGON2_SECRET_PTR_MISMATCH = -20, /* NULL ptr with non-zero length */
ARGON2_AD_PTR_MISMATCH = -21, /* NULL ptr with non-zero length */
ARGON2_MEMORY_ALLOCATION_ERROR = -22,
ARGON2_FREE_MEMORY_CBK_NULL = -23,
ARGON2_ALLOCATE_MEMORY_CBK_NULL = -24,
ARGON2_INCORRECT_PARAMETER = -25,
ARGON2_INCORRECT_TYPE = -26,
ARGON2_OUT_PTR_MISMATCH = -27,
ARGON2_THREADS_TOO_FEW = -28,
ARGON2_THREADS_TOO_MANY = -29,
ARGON2_MISSING_ARGS = -30,
ARGON2_ENCODING_FAIL = -31,
ARGON2_DECODING_FAIL = -32,
ARGON2_THREAD_FAIL = -33,
ARGON2_DECODING_LENGTH_FAIL = -34,
ARGON2_VERIFY_MISMATCH = -35
} argon2_error_codes;
/* Memory allocator types --- for external allocation */
typedef int (*allocate_fptr)(uint8_t **memory, size_t bytes_to_allocate);
typedef void (*deallocate_fptr)(uint8_t *memory, size_t bytes_to_allocate);
/* Argon2 external data structures */
/*
*****
* Context: structure to hold Argon2 inputs:
* output array and its length,
* password and its length,
* salt and its length,
* secret and its length,
* associated data and its length,
* number of passes, amount of used memory (in KBytes, can be rounded up a bit)
* number of parallel threads that will be run.
* All the parameters above affect the output hash value.
* Additionally, two function pointers can be provided to allocate and
* deallocate the memory (if NULL, memory will be allocated internally).
* Also, three flags indicate whether to erase password, secret as soon as they
* are pre-hashed (and thus not needed anymore), and the entire memory
*****
* Simplest situation: you have output array out[8], password is stored in
* pwd[32], salt is stored in salt[16], you do not have keys nor associated
* data. You need to spend 1 GB of RAM and you run 5 passes of Argon2d with
* 4 parallel lanes.
* You want to erase the password, but you're OK with last pass not being
* erased. You want to use the default memory allocator.
* Then you initialize:
Argon2_Context(out,8,pwd,32,salt,16,NULL,0,NULL,0,5,1<<20,4,4,NULL,NULL,true,false,false,false)
*/
typedef struct Argon2_Context {
uint8_t *out; /* output array */
uint32_t outlen; /* digest length */
uint8_t *pwd; /* password array */
uint32_t pwdlen; /* password length */
uint8_t *salt; /* salt array */
uint32_t saltlen; /* salt length */
uint8_t *secret; /* key array */
uint32_t secretlen; /* key length */
uint8_t *ad; /* associated data array */
uint32_t adlen; /* associated data length */
uint32_t t_cost; /* number of passes */
uint32_t m_cost; /* amount of memory requested (KB) */
uint32_t lanes; /* number of lanes */
uint32_t threads; /* maximum number of threads */
uint32_t version; /* version number */
allocate_fptr allocate_cbk; /* pointer to memory allocator */
deallocate_fptr free_cbk; /* pointer to memory deallocator */
uint32_t flags; /* array of bool options */
} argon2_context;
/* Argon2 primitive type */
typedef enum Argon2_type {
Argon2_d = 0,
Argon2_i = 1,
Argon2_id = 2
} argon2_type;
/* Version of the algorithm */
typedef enum Argon2_version {
ARGON2_VERSION_10 = 0x10,
ARGON2_VERSION_13 = 0x13,
ARGON2_VERSION_NUMBER = ARGON2_VERSION_13
} argon2_version;
/*
* Function that gives the string representation of an argon2_type.
* @param type The argon2_type that we want the string for
* @param uppercase Whether the string should have the first letter uppercase
* @return NULL if invalid type, otherwise the string representation.
*/
ARGON2_PUBLIC const char *argon2_type2string(argon2_type type, int uppercase);
/*
* Function that performs memory-hard hashing with certain degree of parallelism
* @param context Pointer to the Argon2 internal structure
* @return Error code if smth is wrong, ARGON2_OK otherwise
*/
ARGON2_PUBLIC int argon2_ctx(argon2_context *context, argon2_type type, void *memory, size_t memory_size);
/**
* Hashes a password with Argon2i, producing an encoded hash
* @param t_cost Number of iterations
* @param m_cost Sets memory usage to m_cost kibibytes
* @param parallelism Number of threads and compute lanes
* @param pwd Pointer to password
* @param pwdlen Password size in bytes
* @param salt Pointer to salt
* @param saltlen Salt size in bytes
* @param hashlen Desired length of the hash in bytes
* @param encoded Buffer where to write the encoded hash
* @param encodedlen Size of the buffer (thus max size of the encoded hash)
* @pre Different parallelism levels will give different results
* @pre Returns ARGON2_OK if successful
*/
ARGON2_PUBLIC int argon2i_hash_encoded(const uint32_t t_cost,
const uint32_t m_cost,
const uint32_t parallelism,
const void *pwd, const size_t pwdlen,
const void *salt, const size_t saltlen,
const size_t hashlen, char *encoded,
const size_t encodedlen, void *memory,
size_t memory_size);
/**
* Hashes a password with Argon2i, producing a raw hash by allocating memory at
* @hash
* @param t_cost Number of iterations
* @param m_cost Sets memory usage to m_cost kibibytes
* @param parallelism Number of threads and compute lanes
* @param pwd Pointer to password
* @param pwdlen Password size in bytes
* @param salt Pointer to salt
* @param saltlen Salt size in bytes
* @param hash Buffer where to write the raw hash - updated by the function
* @param hashlen Desired length of the hash in bytes
* @pre Different parallelism levels will give different results
* @pre Returns ARGON2_OK if successful
*/
ARGON2_PUBLIC int argon2i_hash_raw(const uint32_t t_cost, const uint32_t m_cost,
const uint32_t parallelism, const void *pwd,
const size_t pwdlen, const void *salt,
const size_t saltlen, void *hash,
const size_t hashlen, void *memory,
size_t memory_size);
ARGON2_PUBLIC int argon2d_hash_encoded(const uint32_t t_cost,
const uint32_t m_cost,
const uint32_t parallelism,
const void *pwd, const size_t pwdlen,
const void *salt, const size_t saltlen,
const size_t hashlen, char *encoded,
const size_t encodedlen, void *memory,
size_t memory_size);
ARGON2_PUBLIC int argon2d_hash_raw(const uint32_t t_cost,
const uint32_t m_cost,
const uint32_t parallelism, const void *pwd,
const size_t pwdlen, const void *salt,
const size_t saltlen, void *hash,
const size_t hashlen, void *memory,
size_t memory_size);
ARGON2_PUBLIC int argon2id_hash_encoded(const uint32_t t_cost,
const uint32_t m_cost,
const uint32_t parallelism,
const void *pwd, const size_t pwdlen,
const void *salt, const size_t saltlen,
const size_t hashlen, char *encoded,
const size_t encodedlen, void *memory,
size_t memory_size);
ARGON2_PUBLIC int argon2id_hash_raw(const uint32_t t_cost,
const uint32_t m_cost,
const uint32_t parallelism, const void *pwd,
const size_t pwdlen, const void *salt,
const size_t saltlen, void *hash,
const size_t hashlen, void *memory,
size_t memory_size);
/* generic function underlying the above ones */
ARGON2_PUBLIC int argon2_hash(const uint32_t t_cost, const uint32_t m_cost,
const uint32_t parallelism, const void *pwd,
const size_t pwdlen, const void *salt,
const size_t saltlen, void *hash,
const size_t hashlen, char *encoded,
const size_t encodedlen, argon2_type type,
const uint32_t version, void *memory,
size_t memory_size);
/**
* Verifies a password against an encoded string
* Encoded string is restricted as in validate_inputs()
* @param encoded String encoding parameters, salt, hash
* @param pwd Pointer to password
* @pre Returns ARGON2_OK if successful
*/
ARGON2_PUBLIC int argon2i_verify(const char *encoded, const void *pwd,
const size_t pwdlen);
ARGON2_PUBLIC int argon2d_verify(const char *encoded, const void *pwd,
const size_t pwdlen);
ARGON2_PUBLIC int argon2id_verify(const char *encoded, const void *pwd,
const size_t pwdlen);
/* generic function underlying the above ones */
ARGON2_PUBLIC int argon2_verify(const char *encoded, const void *pwd,
const size_t pwdlen, argon2_type type);
/**
* Argon2d: Version of Argon2 that picks memory blocks depending
* on the password and salt. Only for side-channel-free
* environment!!
*****
* @param context Pointer to current Argon2 context
* @return Zero if successful, a non zero error code otherwise
*/
ARGON2_PUBLIC int argon2d_ctx(argon2_context *context);
/**
* Argon2i: Version of Argon2 that picks memory blocks
* independent on the password and salt. Good for side-channels,
* but worse w.r.t. tradeoff attacks if only one pass is used.
*****
* @param context Pointer to current Argon2 context
* @return Zero if successful, a non zero error code otherwise
*/
ARGON2_PUBLIC int argon2i_ctx(argon2_context *context);
/**
* Argon2id: Version of Argon2 where the first half-pass over memory is
* password-independent, the rest are password-dependent (on the password and
* salt). OK against side channels (they reduce to 1/2-pass Argon2i), and
* better with w.r.t. tradeoff attacks (similar to Argon2d).
*****
* @param context Pointer to current Argon2 context
* @return Zero if successful, a non zero error code otherwise
*/
ARGON2_PUBLIC int argon2id_ctx(argon2_context *context);
/**
* Verify if a given password is correct for Argon2d hashing
* @param context Pointer to current Argon2 context
* @param hash The password hash to verify. The length of the hash is
* specified by the context outlen member
* @return Zero if successful, a non zero error code otherwise
*/
ARGON2_PUBLIC int argon2d_verify_ctx(argon2_context *context, const char *hash);
/**
* Verify if a given password is correct for Argon2i hashing
* @param context Pointer to current Argon2 context
* @param hash The password hash to verify. The length of the hash is
* specified by the context outlen member
* @return Zero if successful, a non zero error code otherwise
*/
ARGON2_PUBLIC int argon2i_verify_ctx(argon2_context *context, const char *hash);
/**
* Verify if a given password is correct for Argon2id hashing
* @param context Pointer to current Argon2 context
* @param hash The password hash to verify. The length of the hash is
* specified by the context outlen member
* @return Zero if successful, a non zero error code otherwise
*/
ARGON2_PUBLIC int argon2id_verify_ctx(argon2_context *context,
const char *hash);
/* generic function underlying the above ones */
ARGON2_PUBLIC int argon2_verify_ctx(argon2_context *context, const char *hash,
argon2_type type);
/**
* Get the associated error message for given error code
* @return The error message associated with the given error code
*/
ARGON2_PUBLIC const char *argon2_error_message(int error_code);
/**
* Returns the encoded hash length for the given input parameters
* @param t_cost Number of iterations
* @param m_cost Memory usage in kibibytes
* @param parallelism Number of threads; used to compute lanes
* @param saltlen Salt size in bytes
* @param hashlen Hash size in bytes
* @param type The argon2_type that we want the encoded length for
* @return The encoded hash length in bytes
*/
ARGON2_PUBLIC size_t argon2_encodedlen(uint32_t t_cost, uint32_t m_cost,
uint32_t parallelism, uint32_t saltlen,
uint32_t hashlen, argon2_type type);
/* signals availability of argon2_select_impl: */
#define ARGON2_SELECTABLE_IMPL
/**
* Selects the fastest available optimized implementation.
* @param out The file for debug output (e. g. stderr; pass NULL for no
* debug output)
* @param prefix What to print before each line; NULL is equivalent to empty
* string
*/
ARGON2_PUBLIC void argon2_select_impl(FILE *out, const char *prefix);
/* signals support for passing preallocated memory: */
#define ARGON2_PREALLOCATED_MEMORY
ARGON2_PUBLIC size_t argon2_memory_size(uint32_t m_cost, uint32_t parallelism);
/**
* Function that performs memory-hard hashing with certain degree of parallelism
* @param context Pointer to the Argon2 internal structure
* @param type The Argon2 type
* @param memory Preallocated memory for blocks (or NULL)
* @param memory_size The size of preallocated memory
* @return Error code if smth is wrong, ARGON2_OK otherwise
*/
ARGON2_PUBLIC int argon2_ctx_mem(argon2_context *context, argon2_type type,
void *memory, size_t memory_size);
#if defined(__cplusplus)
}
#endif
#endif

View file

@ -0,0 +1,193 @@
#include <string.h>
#include "core.h"
#define MASK_32 UINT64_C(0xFFFFFFFF)
#define F(x, y) ((x) + (y) + 2 * ((x) & MASK_32) * ((y) & MASK_32))
#define G(a, b, c, d) \
do { \
a = F(a, b); \
d = rotr64(d ^ a, 32); \
c = F(c, d); \
b = rotr64(b ^ c, 24); \
a = F(a, b); \
d = rotr64(d ^ a, 16); \
c = F(c, d); \
b = rotr64(b ^ c, 63); \
} while ((void)0, 0)
#define BLAKE2_ROUND_NOMSG(v0, v1, v2, v3, v4, v5, v6, v7, \
v8, v9, v10, v11, v12, v13, v14, v15) \
do { \
G(v0, v4, v8, v12); \
G(v1, v5, v9, v13); \
G(v2, v6, v10, v14); \
G(v3, v7, v11, v15); \
G(v0, v5, v10, v15); \
G(v1, v6, v11, v12); \
G(v2, v7, v8, v13); \
G(v3, v4, v9, v14); \
} while ((void)0, 0)
#define BLAKE2_ROUND_NOMSG1(v) \
BLAKE2_ROUND_NOMSG( \
(v)[ 0], (v)[ 1], (v)[ 2], (v)[ 3], \
(v)[ 4], (v)[ 5], (v)[ 6], (v)[ 7], \
(v)[ 8], (v)[ 9], (v)[10], (v)[11], \
(v)[12], (v)[13], (v)[14], (v)[15])
#define BLAKE2_ROUND_NOMSG2(v) \
BLAKE2_ROUND_NOMSG( \
(v)[ 0], (v)[ 1], (v)[ 16], (v)[ 17], \
(v)[ 32], (v)[ 33], (v)[ 48], (v)[ 49], \
(v)[ 64], (v)[ 65], (v)[ 80], (v)[ 81], \
(v)[ 96], (v)[ 97], (v)[112], (v)[113])
static void fill_block(const block *prev_block, const block *ref_block,
block *next_block, int with_xor)
{
block blockR, block_tmp;
copy_block(&blockR, ref_block);
xor_block(&blockR, prev_block);
copy_block(&block_tmp, &blockR);
if (with_xor) {
xor_block(&block_tmp, next_block);
}
/* Apply Blake2 on columns of 64-bit words: (0,1,...,15) , then
(16,17,..31)... finally (112,113,...127) */
BLAKE2_ROUND_NOMSG1(blockR.v + 0 * 16);
BLAKE2_ROUND_NOMSG1(blockR.v + 1 * 16);
BLAKE2_ROUND_NOMSG1(blockR.v + 2 * 16);
BLAKE2_ROUND_NOMSG1(blockR.v + 3 * 16);
BLAKE2_ROUND_NOMSG1(blockR.v + 4 * 16);
BLAKE2_ROUND_NOMSG1(blockR.v + 5 * 16);
BLAKE2_ROUND_NOMSG1(blockR.v + 6 * 16);
BLAKE2_ROUND_NOMSG1(blockR.v + 7 * 16);
/* Apply Blake2 on rows of 64-bit words: (0,1,16,17,...112,113), then
(2,3,18,19,...,114,115).. finally (14,15,30,31,...,126,127) */
BLAKE2_ROUND_NOMSG2(blockR.v + 0 * 2);
BLAKE2_ROUND_NOMSG2(blockR.v + 1 * 2);
BLAKE2_ROUND_NOMSG2(blockR.v + 2 * 2);
BLAKE2_ROUND_NOMSG2(blockR.v + 3 * 2);
BLAKE2_ROUND_NOMSG2(blockR.v + 4 * 2);
BLAKE2_ROUND_NOMSG2(blockR.v + 5 * 2);
BLAKE2_ROUND_NOMSG2(blockR.v + 6 * 2);
BLAKE2_ROUND_NOMSG2(blockR.v + 7 * 2);
copy_block(next_block, &block_tmp);
xor_block(next_block, &blockR);
}
static void next_addresses(block *address_block, block *input_block,
const block *zero_block)
{
input_block->v[6]++;
fill_block(zero_block, input_block, address_block, 0);
fill_block(zero_block, address_block, address_block, 0);
}
static void fill_segment_64(const argon2_instance_t *instance,
argon2_position_t position)
{
block *ref_block, *curr_block, *prev_block;
block address_block, input_block, zero_block;
uint64_t pseudo_rand, ref_index, ref_lane;
uint32_t prev_offset, curr_offset;
uint32_t starting_index, i;
int data_independent_addressing;
if (instance == NULL) {
return;
}
data_independent_addressing = (instance->type == Argon2_i) ||
(instance->type == Argon2_id && (position.pass == 0) &&
(position.slice < ARGON2_SYNC_POINTS / 2));
if (data_independent_addressing) {
init_block_value(&zero_block, 0);
init_block_value(&input_block, 0);
input_block.v[0] = position.pass;
input_block.v[1] = position.lane;
input_block.v[2] = position.slice;
input_block.v[3] = instance->memory_blocks;
input_block.v[4] = instance->passes;
input_block.v[5] = instance->type;
}
starting_index = 0;
if ((0 == position.pass) && (0 == position.slice)) {
starting_index = 2; /* we have already generated the first two blocks */
/* Don't forget to generate the first block of addresses: */
if (data_independent_addressing) {
next_addresses(&address_block, &input_block, &zero_block);
}
}
/* Offset of the current block */
curr_offset = position.lane * instance->lane_length +
position.slice * instance->segment_length + starting_index;
if (0 == curr_offset % instance->lane_length) {
/* Last block in this lane */
prev_offset = curr_offset + instance->lane_length - 1;
} else {
/* Previous block */
prev_offset = curr_offset - 1;
}
for (i = starting_index; i < instance->segment_length;
++i, ++curr_offset, ++prev_offset) {
/*1.1 Rotating prev_offset if needed */
if (curr_offset % instance->lane_length == 1) {
prev_offset = curr_offset - 1;
}
/* 1.2 Computing the index of the reference block */
/* 1.2.1 Taking pseudo-random value from the previous block */
if (data_independent_addressing) {
if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) {
next_addresses(&address_block, &input_block, &zero_block);
}
pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK];
} else {
pseudo_rand = instance->memory[prev_offset].v[0];
}
/* 1.2.2 Computing the lane of the reference block */
ref_lane = ((pseudo_rand >> 32)) % instance->lanes;
if ((position.pass == 0) && (position.slice == 0)) {
/* Can not reference other lanes yet */
ref_lane = position.lane;
}
/* 1.2.3 Computing the number of possible reference block within the
* lane.
*/
position.index = i;
ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF,
ref_lane == position.lane);
/* 2 Creating a new block */
ref_block =
instance->memory + instance->lane_length * ref_lane + ref_index;
curr_block = instance->memory + curr_offset;
prev_block = instance->memory + prev_offset;
/* version 1.2.1 and earlier: overwrite, not XOR */
if (0 == position.pass || ARGON2_VERSION_10 == instance->version) {
fill_block(prev_block, ref_block, curr_block, 0);
} else {
fill_block(prev_block, ref_block, curr_block, 1);
}
}
}

482
src/3rdparty/argon2/lib/argon2.c vendored Normal file
View file

@ -0,0 +1,482 @@
/*
* Argon2 source code package
*
* Written by Daniel Dinu and Dmitry Khovratovich, 2015
*
* This work is licensed under a Creative Commons CC0 1.0 License/Waiver.
*
* You should have received a copy of the CC0 Public Domain Dedication along
* with
* this software. If not, see
* <http://creativecommons.org/publicdomain/zero/1.0/>.
*/
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "argon2.h"
#include "encoding.h"
#include "core.h"
const char *argon2_type2string(argon2_type type, int uppercase) {
switch (type) {
case Argon2_d:
return uppercase ? "Argon2d" : "argon2d";
case Argon2_i:
return uppercase ? "Argon2i" : "argon2i";
case Argon2_id:
return uppercase ? "Argon2id" : "argon2id";
}
return NULL;
}
static void argon2_compute_memory_blocks(uint32_t *memory_blocks,
uint32_t *segment_length,
uint32_t m_cost, uint32_t lanes)
{
/* Minimum memory_blocks = 8L blocks, where L is the number of lanes */
*memory_blocks = m_cost;
if (*memory_blocks < 2 * ARGON2_SYNC_POINTS * lanes) {
*memory_blocks = 2 * ARGON2_SYNC_POINTS * lanes;
}
*segment_length = *memory_blocks / (lanes * ARGON2_SYNC_POINTS);
/* Ensure that all segments have equal length */
*memory_blocks = *segment_length * (lanes * ARGON2_SYNC_POINTS);
}
size_t argon2_memory_size(uint32_t m_cost, uint32_t parallelism) {
uint32_t memory_blocks, segment_length;
argon2_compute_memory_blocks(&memory_blocks, &segment_length, m_cost,
parallelism);
return memory_blocks * ARGON2_BLOCK_SIZE;
}
int argon2_ctx_mem(argon2_context *context, argon2_type type, void *memory,
size_t memory_size) {
/* 1. Validate all inputs */
int result = validate_inputs(context);
uint32_t memory_blocks, segment_length;
argon2_instance_t instance;
if (ARGON2_OK != result) {
return result;
}
if (Argon2_d != type && Argon2_i != type && Argon2_id != type) {
return ARGON2_INCORRECT_TYPE;
}
/* 2. Align memory size */
argon2_compute_memory_blocks(&memory_blocks, &segment_length,
context->m_cost, context->lanes);
/* check for sufficient memory size: */
if (memory != NULL && (memory_size % ARGON2_BLOCK_SIZE != 0 ||
memory_size / ARGON2_BLOCK_SIZE < memory_blocks)) {
return ARGON2_MEMORY_ALLOCATION_ERROR;
}
instance.version = context->version;
instance.memory = (block *)memory;
instance.passes = context->t_cost;
instance.memory_blocks = memory_blocks;
instance.segment_length = segment_length;
instance.lane_length = segment_length * ARGON2_SYNC_POINTS;
instance.lanes = context->lanes;
instance.threads = context->threads;
instance.type = type;
instance.print_internals = !!(context->flags & ARGON2_FLAG_GENKAT);
instance.keep_memory = memory != NULL;
if (instance.threads > instance.lanes) {
instance.threads = instance.lanes;
}
/* 3. Initialization: Hashing inputs, allocating memory, filling first
* blocks
*/
result = initialize(&instance, context);
if (ARGON2_OK != result) {
return result;
}
/* 4. Filling memory */
result = fill_memory_blocks(&instance);
if (ARGON2_OK != result) {
return result;
}
/* 5. Finalization */
finalize(context, &instance);
return ARGON2_OK;
}
int argon2_ctx(argon2_context *context, argon2_type type, void *memory, size_t memory_size) {
return argon2_ctx_mem(context, type, memory, memory_size);
}
int argon2_hash(const uint32_t t_cost, const uint32_t m_cost,
const uint32_t parallelism, const void *pwd,
const size_t pwdlen, const void *salt, const size_t saltlen,
void *hash, const size_t hashlen, char *encoded,
const size_t encodedlen, argon2_type type,
const uint32_t version, void *memory, size_t memory_size){
argon2_context context;
int result;
uint8_t *out;
if (pwdlen > ARGON2_MAX_PWD_LENGTH) {
return ARGON2_PWD_TOO_LONG;
}
if (saltlen > ARGON2_MAX_SALT_LENGTH) {
return ARGON2_SALT_TOO_LONG;
}
if (hashlen > ARGON2_MAX_OUTLEN) {
return ARGON2_OUTPUT_TOO_LONG;
}
if (hashlen < ARGON2_MIN_OUTLEN) {
return ARGON2_OUTPUT_TOO_SHORT;
}
out = malloc(hashlen);
if (!out) {
return ARGON2_MEMORY_ALLOCATION_ERROR;
}
context.out = (uint8_t *)out;
context.outlen = (uint32_t)hashlen;
context.pwd = CONST_CAST(uint8_t *)pwd;
context.pwdlen = (uint32_t)pwdlen;
context.salt = CONST_CAST(uint8_t *)salt;
context.saltlen = (uint32_t)saltlen;
context.secret = NULL;
context.secretlen = 0;
context.ad = NULL;
context.adlen = 0;
context.t_cost = t_cost;
context.m_cost = m_cost;
context.lanes = parallelism;
context.threads = parallelism;
context.allocate_cbk = NULL;
context.free_cbk = NULL;
context.flags = ARGON2_DEFAULT_FLAGS;
context.version = version;
result = argon2_ctx(&context, type, memory, memory_size);
if (result != ARGON2_OK) {
clear_internal_memory(out, hashlen);
free(out);
return result;
}
/* if raw hash requested, write it */
if (hash) {
memcpy(hash, out, hashlen);
}
/* if encoding requested, write it */
if (encoded && encodedlen) {
if (encode_string(encoded, encodedlen, &context, type) != ARGON2_OK) {
clear_internal_memory(out, hashlen); /* wipe buffers if error */
clear_internal_memory(encoded, encodedlen);
free(out);
return ARGON2_ENCODING_FAIL;
}
}
clear_internal_memory(out, hashlen);
free(out);
return ARGON2_OK;
}
int argon2i_hash_encoded(const uint32_t t_cost, const uint32_t m_cost,
const uint32_t parallelism, const void *pwd,
const size_t pwdlen, const void *salt,
const size_t saltlen, const size_t hashlen,
char *encoded, const size_t encodedlen,
void *memory, size_t memory_size) {
return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen,
NULL, hashlen, encoded, encodedlen, Argon2_i,
ARGON2_VERSION_NUMBER, memory, memory_size);
}
int argon2i_hash_raw(const uint32_t t_cost, const uint32_t m_cost,
const uint32_t parallelism, const void *pwd,
const size_t pwdlen, const void *salt,
const size_t saltlen, void *hash, const size_t hashlen,
void *memory, size_t memory_size) {
return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen,
hash, hashlen, NULL, 0, Argon2_i, ARGON2_VERSION_NUMBER, memory, memory_size);
}
int argon2d_hash_encoded(const uint32_t t_cost, const uint32_t m_cost,
const uint32_t parallelism, const void *pwd,
const size_t pwdlen, const void *salt,
const size_t saltlen, const size_t hashlen,
char *encoded, const size_t encodedlen,
void *memory, size_t memory_size) {
return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen,
NULL, hashlen, encoded, encodedlen, Argon2_d,
ARGON2_VERSION_NUMBER, memory, memory_size);
}
int argon2d_hash_raw(const uint32_t t_cost, const uint32_t m_cost,
const uint32_t parallelism, const void *pwd,
const size_t pwdlen, const void *salt,
const size_t saltlen, void *hash, const size_t hashlen,
void *memory, size_t memory_size) {
return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen,
hash, hashlen, NULL, 0, Argon2_d, ARGON2_VERSION_NUMBER, memory, memory_size);
}
int argon2id_hash_encoded(const uint32_t t_cost, const uint32_t m_cost,
const uint32_t parallelism, const void *pwd,
const size_t pwdlen, const void *salt,
const size_t saltlen, const size_t hashlen,
char *encoded, const size_t encodedlen,
void *memory, size_t memory_size) {
return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen,
NULL, hashlen, encoded, encodedlen, Argon2_id,
ARGON2_VERSION_NUMBER, memory, memory_size);
}
int argon2id_hash_raw(const uint32_t t_cost, const uint32_t m_cost,
const uint32_t parallelism, const void *pwd,
const size_t pwdlen, const void *salt,
const size_t saltlen, void *hash, const size_t hashlen,
void *memory, size_t memory_size) {
return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen,
hash, hashlen, NULL, 0, Argon2_id,
ARGON2_VERSION_NUMBER, memory, memory_size);
}
static int argon2_compare(const uint8_t *b1, const uint8_t *b2, size_t len) {
size_t i;
uint8_t d = 0U;
for (i = 0U; i < len; i++) {
d |= b1[i] ^ b2[i];
}
return (int)((1 & ((d - 1) >> 8)) - 1);
}
int argon2_verify(const char *encoded, const void *pwd, const size_t pwdlen,
argon2_type type) {
argon2_context ctx;
uint8_t *desired_result = NULL;
int ret = ARGON2_OK;
size_t encoded_len;
uint32_t max_field_len;
if (pwdlen > ARGON2_MAX_PWD_LENGTH) {
return ARGON2_PWD_TOO_LONG;
}
if (encoded == NULL) {
return ARGON2_DECODING_FAIL;
}
encoded_len = strlen(encoded);
if (encoded_len > UINT32_MAX) {
return ARGON2_DECODING_FAIL;
}
/* No field can be longer than the encoded length */
max_field_len = (uint32_t)encoded_len;
ctx.saltlen = max_field_len;
ctx.outlen = max_field_len;
ctx.salt = malloc(ctx.saltlen);
ctx.out = malloc(ctx.outlen);
if (!ctx.salt || !ctx.out) {
ret = ARGON2_MEMORY_ALLOCATION_ERROR;
goto fail;
}
ctx.pwd = (uint8_t *)pwd;
ctx.pwdlen = (uint32_t)pwdlen;
ret = decode_string(&ctx, encoded, type);
if (ret != ARGON2_OK) {
goto fail;
}
/* Set aside the desired result, and get a new buffer. */
desired_result = ctx.out;
ctx.out = malloc(ctx.outlen);
if (!ctx.out) {
ret = ARGON2_MEMORY_ALLOCATION_ERROR;
goto fail;
}
ret = argon2_verify_ctx(&ctx, (char *)desired_result, type);
if (ret != ARGON2_OK) {
goto fail;
}
fail:
free(ctx.salt);
free(ctx.out);
free(desired_result);
return ret;
}
int argon2i_verify(const char *encoded, const void *pwd, const size_t pwdlen) {
return argon2_verify(encoded, pwd, pwdlen, Argon2_i);
}
int argon2d_verify(const char *encoded, const void *pwd, const size_t pwdlen) {
return argon2_verify(encoded, pwd, pwdlen, Argon2_d);
}
int argon2id_verify(const char *encoded, const void *pwd, const size_t pwdlen) {
return argon2_verify(encoded, pwd, pwdlen, Argon2_id);
}
int argon2d_ctx(argon2_context *context) {
return argon2_ctx(context, Argon2_d, NULL, 0);
}
int argon2i_ctx(argon2_context *context) {
return argon2_ctx(context, Argon2_i, NULL, 0);
}
int argon2id_ctx(argon2_context *context) {
return argon2_ctx(context, Argon2_id, NULL, 0);
}
int argon2_verify_ctx(argon2_context *context, const char *hash,
argon2_type type) {
int ret = argon2_ctx(context, type, NULL, 0);
if (ret != ARGON2_OK) {
return ret;
}
if (argon2_compare((uint8_t *)hash, context->out, context->outlen)) {
return ARGON2_VERIFY_MISMATCH;
}
return ARGON2_OK;
}
int argon2d_verify_ctx(argon2_context *context, const char *hash) {
return argon2_verify_ctx(context, hash, Argon2_d);
}
int argon2i_verify_ctx(argon2_context *context, const char *hash) {
return argon2_verify_ctx(context, hash, Argon2_i);
}
int argon2id_verify_ctx(argon2_context *context, const char *hash) {
return argon2_verify_ctx(context, hash, Argon2_id);
}
const char *argon2_error_message(int error_code) {
switch (error_code) {
case ARGON2_OK:
return "OK";
case ARGON2_OUTPUT_PTR_NULL:
return "Output pointer is NULL";
case ARGON2_OUTPUT_TOO_SHORT:
return "Output is too short";
case ARGON2_OUTPUT_TOO_LONG:
return "Output is too long";
case ARGON2_PWD_TOO_SHORT:
return "Password is too short";
case ARGON2_PWD_TOO_LONG:
return "Password is too long";
case ARGON2_SALT_TOO_SHORT:
return "Salt is too short";
case ARGON2_SALT_TOO_LONG:
return "Salt is too long";
case ARGON2_AD_TOO_SHORT:
return "Associated data is too short";
case ARGON2_AD_TOO_LONG:
return "Associated data is too long";
case ARGON2_SECRET_TOO_SHORT:
return "Secret is too short";
case ARGON2_SECRET_TOO_LONG:
return "Secret is too long";
case ARGON2_TIME_TOO_SMALL:
return "Time cost is too small";
case ARGON2_TIME_TOO_LARGE:
return "Time cost is too large";
case ARGON2_MEMORY_TOO_LITTLE:
return "Memory cost is too small";
case ARGON2_MEMORY_TOO_MUCH:
return "Memory cost is too large";
case ARGON2_LANES_TOO_FEW:
return "Too few lanes";
case ARGON2_LANES_TOO_MANY:
return "Too many lanes";
case ARGON2_PWD_PTR_MISMATCH:
return "Password pointer is NULL, but password length is not 0";
case ARGON2_SALT_PTR_MISMATCH:
return "Salt pointer is NULL, but salt length is not 0";
case ARGON2_SECRET_PTR_MISMATCH:
return "Secret pointer is NULL, but secret length is not 0";
case ARGON2_AD_PTR_MISMATCH:
return "Associated data pointer is NULL, but ad length is not 0";
case ARGON2_MEMORY_ALLOCATION_ERROR:
return "Memory allocation error";
case ARGON2_FREE_MEMORY_CBK_NULL:
return "The free memory callback is NULL";
case ARGON2_ALLOCATE_MEMORY_CBK_NULL:
return "The allocate memory callback is NULL";
case ARGON2_INCORRECT_PARAMETER:
return "Argon2_Context context is NULL";
case ARGON2_INCORRECT_TYPE:
return "There is no such version of Argon2";
case ARGON2_OUT_PTR_MISMATCH:
return "Output pointer mismatch";
case ARGON2_THREADS_TOO_FEW:
return "Not enough threads";
case ARGON2_THREADS_TOO_MANY:
return "Too many threads";
case ARGON2_MISSING_ARGS:
return "Missing arguments";
case ARGON2_ENCODING_FAIL:
return "Encoding failed";
case ARGON2_DECODING_FAIL:
return "Decoding failed";
case ARGON2_THREAD_FAIL:
return "Threading failure";
case ARGON2_DECODING_LENGTH_FAIL:
return "Some of encoded parameters are too long or too short";
case ARGON2_VERIFY_MISMATCH:
return "The password does not match the supplied hash";
default:
return "Unknown error code";
}
}
size_t argon2_encodedlen(uint32_t t_cost, uint32_t m_cost, uint32_t parallelism,
uint32_t saltlen, uint32_t hashlen, argon2_type type) {
return strlen("$$v=$m=,t=,p=$$") + strlen(argon2_type2string(type, 0)) +
numlen(t_cost) + numlen(m_cost) + numlen(parallelism) +
b64len(saltlen) + b64len(hashlen) + numlen(ARGON2_VERSION_NUMBER) +
1;
}

View file

@ -0,0 +1,90 @@
#ifndef ARGON2_BLAKE2_IMPL_H
#define ARGON2_BLAKE2_IMPL_H
#include <stdint.h>
/* Argon2 Team - Begin Code */
/*
Not an exhaustive list, but should cover the majority of modern platforms
Additionally, the code will always be correct---this is only a performance
tweak.
*/
#if (defined(__BYTE_ORDER__) && \
(__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) || \
defined(__LITTLE_ENDIAN__) || defined(__ARMEL__) || defined(__MIPSEL__) || \
defined(__AARCH64EL__) || defined(__amd64__) || defined(__i386__) || \
defined(_M_IX86) || defined(_M_X64) || defined(_M_AMD64) || \
defined(_M_ARM)
#define NATIVE_LITTLE_ENDIAN
#endif
/* Argon2 Team - End Code */
static inline uint32_t load32(const void *src) {
#if defined(NATIVE_LITTLE_ENDIAN)
return *(const uint32_t *)src;
#else
const uint8_t *p = (const uint8_t *)src;
uint32_t w = *p++;
w |= (uint32_t)(*p++) << 8;
w |= (uint32_t)(*p++) << 16;
w |= (uint32_t)(*p++) << 24;
return w;
#endif
}
static inline uint64_t load64(const void *src) {
#if defined(NATIVE_LITTLE_ENDIAN)
return *(const uint64_t *)src;
#else
const uint8_t *p = (const uint8_t *)src;
uint64_t w = *p++;
w |= (uint64_t)(*p++) << 8;
w |= (uint64_t)(*p++) << 16;
w |= (uint64_t)(*p++) << 24;
w |= (uint64_t)(*p++) << 32;
w |= (uint64_t)(*p++) << 40;
w |= (uint64_t)(*p++) << 48;
w |= (uint64_t)(*p++) << 56;
return w;
#endif
}
static inline void store32(void *dst, uint32_t w) {
#if defined(NATIVE_LITTLE_ENDIAN)
*(uint32_t *)dst = w;
#else
uint8_t *p = (uint8_t *)dst;
*p++ = (uint8_t)w;
w >>= 8;
*p++ = (uint8_t)w;
w >>= 8;
*p++ = (uint8_t)w;
w >>= 8;
*p++ = (uint8_t)w;
#endif
}
static inline void store64(void *dst, uint64_t w) {
#if defined(NATIVE_LITTLE_ENDIAN)
*(uint64_t *)dst = w;
#else
uint8_t *p = (uint8_t *)dst;
*p++ = (uint8_t)w;
w >>= 8;
*p++ = (uint8_t)w;
w >>= 8;
*p++ = (uint8_t)w;
w >>= 8;
*p++ = (uint8_t)w;
w >>= 8;
*p++ = (uint8_t)w;
w >>= 8;
*p++ = (uint8_t)w;
w >>= 8;
*p++ = (uint8_t)w;
w >>= 8;
*p++ = (uint8_t)w;
#endif
}
#endif // ARGON2_BLAKE2_IMPL_H

225
src/3rdparty/argon2/lib/blake2/blake2.c vendored Normal file
View file

@ -0,0 +1,225 @@
#include <string.h>
#include "blake2/blake2.h"
#include "blake2/blake2-impl.h"
#include "core.h"
static const uint64_t blake2b_IV[8] = {
UINT64_C(0x6a09e667f3bcc908), UINT64_C(0xbb67ae8584caa73b),
UINT64_C(0x3c6ef372fe94f82b), UINT64_C(0xa54ff53a5f1d36f1),
UINT64_C(0x510e527fade682d1), UINT64_C(0x9b05688c2b3e6c1f),
UINT64_C(0x1f83d9abfb41bd6b), UINT64_C(0x5be0cd19137e2179)
};
#define rotr64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
static const unsigned int blake2b_sigma[12][16] = {
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
{14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3},
{11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4},
{7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8},
{9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13},
{2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9},
{12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11},
{13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10},
{6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5},
{10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0},
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
{14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3},
};
#define G(m, r, i, a, b, c, d) \
do { \
a = a + b + m[blake2b_sigma[r][2 * i + 0]]; \
d = rotr64(d ^ a, 32); \
c = c + d; \
b = rotr64(b ^ c, 24); \
a = a + b + m[blake2b_sigma[r][2 * i + 1]]; \
d = rotr64(d ^ a, 16); \
c = c + d; \
b = rotr64(b ^ c, 63); \
} while ((void)0, 0)
#define ROUND(m, v, r) \
do { \
G(m, r, 0, v[0], v[4], v[ 8], v[12]); \
G(m, r, 1, v[1], v[5], v[ 9], v[13]); \
G(m, r, 2, v[2], v[6], v[10], v[14]); \
G(m, r, 3, v[3], v[7], v[11], v[15]); \
G(m, r, 4, v[0], v[5], v[10], v[15]); \
G(m, r, 5, v[1], v[6], v[11], v[12]); \
G(m, r, 6, v[2], v[7], v[ 8], v[13]); \
G(m, r, 7, v[3], v[4], v[ 9], v[14]); \
} while ((void)0, 0)
void blake2b_compress(blake2b_state *S, const void *block, uint64_t f0)
{
uint64_t m[16];
uint64_t v[16];
m[ 0] = load64((const uint64_t *)block + 0);
m[ 1] = load64((const uint64_t *)block + 1);
m[ 2] = load64((const uint64_t *)block + 2);
m[ 3] = load64((const uint64_t *)block + 3);
m[ 4] = load64((const uint64_t *)block + 4);
m[ 5] = load64((const uint64_t *)block + 5);
m[ 6] = load64((const uint64_t *)block + 6);
m[ 7] = load64((const uint64_t *)block + 7);
m[ 8] = load64((const uint64_t *)block + 8);
m[ 9] = load64((const uint64_t *)block + 9);
m[10] = load64((const uint64_t *)block + 10);
m[11] = load64((const uint64_t *)block + 11);
m[12] = load64((const uint64_t *)block + 12);
m[13] = load64((const uint64_t *)block + 13);
m[14] = load64((const uint64_t *)block + 14);
m[15] = load64((const uint64_t *)block + 15);
v[ 0] = S->h[0];
v[ 1] = S->h[1];
v[ 2] = S->h[2];
v[ 3] = S->h[3];
v[ 4] = S->h[4];
v[ 5] = S->h[5];
v[ 6] = S->h[6];
v[ 7] = S->h[7];
v[ 8] = blake2b_IV[0];
v[ 9] = blake2b_IV[1];
v[10] = blake2b_IV[2];
v[11] = blake2b_IV[3];
v[12] = blake2b_IV[4] ^ S->t[0];
v[13] = blake2b_IV[5] ^ S->t[1];
v[14] = blake2b_IV[6] ^ f0;
v[15] = blake2b_IV[7];
ROUND(m, v, 0);
ROUND(m, v, 1);
ROUND(m, v, 2);
ROUND(m, v, 3);
ROUND(m, v, 4);
ROUND(m, v, 5);
ROUND(m, v, 6);
ROUND(m, v, 7);
ROUND(m, v, 8);
ROUND(m, v, 9);
ROUND(m, v, 10);
ROUND(m, v, 11);
S->h[0] ^= v[0] ^ v[ 8];
S->h[1] ^= v[1] ^ v[ 9];
S->h[2] ^= v[2] ^ v[10];
S->h[3] ^= v[3] ^ v[11];
S->h[4] ^= v[4] ^ v[12];
S->h[5] ^= v[5] ^ v[13];
S->h[6] ^= v[6] ^ v[14];
S->h[7] ^= v[7] ^ v[15];
}
static void blake2b_increment_counter(blake2b_state *S, uint64_t inc)
{
S->t[0] += inc;
S->t[1] += (S->t[0] < inc);
}
static void blake2b_init_state(blake2b_state *S)
{
memcpy(S->h, blake2b_IV, sizeof(S->h));
S->t[1] = S->t[0] = 0;
S->buflen = 0;
}
void blake2b_init(blake2b_state *S, size_t outlen)
{
blake2b_init_state(S);
/* XOR initial state with param block: */
S->h[0] ^= (uint64_t)outlen | (UINT64_C(1) << 16) | (UINT64_C(1) << 24);
}
void blake2b_update(blake2b_state *S, const void *in, size_t inlen)
{
const uint8_t *pin = (const uint8_t *)in;
if (S->buflen + inlen > BLAKE2B_BLOCKBYTES) {
size_t left = S->buflen;
size_t fill = BLAKE2B_BLOCKBYTES - left;
memcpy(&S->buf[left], pin, fill);
blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES);
blake2b_compress(S, S->buf, 0);
S->buflen = 0;
inlen -= fill;
pin += fill;
/* Avoid buffer copies when possible */
while (inlen > BLAKE2B_BLOCKBYTES) {
blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES);
blake2b_compress(S, pin, 0);
inlen -= BLAKE2B_BLOCKBYTES;
pin += BLAKE2B_BLOCKBYTES;
}
}
memcpy(&S->buf[S->buflen], pin, inlen);
S->buflen += inlen;
}
void blake2b_final(blake2b_state *S, void *out, size_t outlen)
{
uint8_t buffer[BLAKE2B_OUTBYTES] = {0};
unsigned int i;
blake2b_increment_counter(S, S->buflen);
memset(&S->buf[S->buflen], 0, BLAKE2B_BLOCKBYTES - S->buflen); /* Padding */
blake2b_compress(S, S->buf, UINT64_C(0xFFFFFFFFFFFFFFFF));
for (i = 0; i < 8; ++i) { /* Output full hash to temp buffer */
store64(buffer + i * sizeof(uint64_t), S->h[i]);
}
memcpy(out, buffer, outlen);
clear_internal_memory(buffer, sizeof(buffer));
clear_internal_memory(S->buf, sizeof(S->buf));
clear_internal_memory(S->h, sizeof(S->h));
}
void blake2b_long(void *out, size_t outlen, const void *in, size_t inlen)
{
uint8_t *pout = (uint8_t *)out;
blake2b_state blake_state;
uint8_t outlen_bytes[sizeof(uint32_t)] = {0};
store32(outlen_bytes, (uint32_t)outlen);
if (outlen <= BLAKE2B_OUTBYTES) {
blake2b_init(&blake_state, outlen);
blake2b_update(&blake_state, outlen_bytes, sizeof(outlen_bytes));
blake2b_update(&blake_state, in, inlen);
blake2b_final(&blake_state, pout, outlen);
} else {
uint32_t toproduce;
uint8_t out_buffer[BLAKE2B_OUTBYTES];
blake2b_init(&blake_state, BLAKE2B_OUTBYTES);
blake2b_update(&blake_state, outlen_bytes, sizeof(outlen_bytes));
blake2b_update(&blake_state, in, inlen);
blake2b_final(&blake_state, out_buffer, BLAKE2B_OUTBYTES);
memcpy(pout, out_buffer, BLAKE2B_OUTBYTES / 2);
pout += BLAKE2B_OUTBYTES / 2;
toproduce = (uint32_t)outlen - BLAKE2B_OUTBYTES / 2;
while (toproduce > BLAKE2B_OUTBYTES) {
blake2b_init(&blake_state, BLAKE2B_OUTBYTES);
blake2b_update(&blake_state, out_buffer, BLAKE2B_OUTBYTES);
blake2b_final(&blake_state, out_buffer, BLAKE2B_OUTBYTES);
memcpy(pout, out_buffer, BLAKE2B_OUTBYTES / 2);
pout += BLAKE2B_OUTBYTES / 2;
toproduce -= BLAKE2B_OUTBYTES / 2;
}
blake2b_init(&blake_state, toproduce);
blake2b_update(&blake_state, out_buffer, BLAKE2B_OUTBYTES);
blake2b_final(&blake_state, out_buffer, toproduce);
memcpy(pout, out_buffer, toproduce);
clear_internal_memory(out_buffer, sizeof(out_buffer));
}
}

30
src/3rdparty/argon2/lib/blake2/blake2.h vendored Normal file
View file

@ -0,0 +1,30 @@
#ifndef ARGON2_BLAKE2_H
#define ARGON2_BLAKE2_H
#include <stddef.h>
#include <stdint.h>
enum blake2b_constant {
BLAKE2B_BLOCKBYTES = 128,
BLAKE2B_OUTBYTES = 64,
BLAKE2B_KEYBYTES = 64,
BLAKE2B_SALTBYTES = 16,
BLAKE2B_PERSONALBYTES = 16
};
typedef struct __blake2b_state {
uint64_t h[8];
uint64_t t[2];
uint8_t buf[BLAKE2B_BLOCKBYTES];
size_t buflen;
} blake2b_state;
/* Streaming API */
void blake2b_init(blake2b_state *S, size_t outlen);
void blake2b_update(blake2b_state *S, const void *in, size_t inlen);
void blake2b_final(blake2b_state *S, void *out, size_t outlen);
void blake2b_long(void *out, size_t outlen, const void *in, size_t inlen);
#endif // ARGON2_BLAKE2_H

635
src/3rdparty/argon2/lib/core.c vendored Normal file
View file

@ -0,0 +1,635 @@
/*
* Argon2 source code package
*
* Written by Daniel Dinu and Dmitry Khovratovich, 2015
*
* This work is licensed under a Creative Commons CC0 1.0 License/Waiver.
*
* You should have received a copy of the CC0 Public Domain Dedication along
* with
* this software. If not, see
* <http://creativecommons.org/publicdomain/zero/1.0/>.
*/
/*For memory wiping*/
#ifdef _MSC_VER
#include <windows.h>
#include <winbase.h> /* For SecureZeroMemory */
#endif
#if defined __STDC_LIB_EXT1__
#define __STDC_WANT_LIB_EXT1__ 1
#endif
#define VC_GE_2005(version) (version >= 1400)
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "core.h"
#include "thread.h"
#include "blake2/blake2.h"
#include "blake2/blake2-impl.h"
#include "genkat.h"
#if defined(__clang__)
#if __has_attribute(optnone)
#define NOT_OPTIMIZED __attribute__((optnone))
#endif
#elif defined(__GNUC__)
#define GCC_VERSION \
(__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
#if GCC_VERSION >= 40400
#define NOT_OPTIMIZED __attribute__((optimize("O0")))
#endif
#endif
#ifndef NOT_OPTIMIZED
#define NOT_OPTIMIZED
#endif
/***************Instance and Position constructors**********/
void init_block_value(block *b, uint8_t in) { memset(b->v, in, sizeof(b->v)); }
void copy_block(block *dst, const block *src) {
memcpy(dst->v, src->v, sizeof(uint64_t) * ARGON2_QWORDS_IN_BLOCK);
}
void xor_block(block *dst, const block *src) {
int i;
for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) {
dst->v[i] ^= src->v[i];
}
}
static void load_block(block *dst, const void *input) {
unsigned i;
for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) {
dst->v[i] = load64((const uint8_t *)input + i * sizeof(dst->v[i]));
}
}
static void store_block(void *output, const block *src) {
unsigned i;
for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) {
store64((uint8_t *)output + i * sizeof(src->v[i]), src->v[i]);
}
}
/***************Memory functions*****************/
int allocate_memory(const argon2_context *context,
argon2_instance_t *instance) {
size_t blocks = instance->memory_blocks;
size_t memory_size = blocks * ARGON2_BLOCK_SIZE;
/* 0. Check for memory supplied by user: */
/* NOTE: Sufficient memory size is already checked in argon2_ctx_mem() */
if (instance->memory != NULL) {
return ARGON2_OK;
}
return ARGON2_MEMORY_ALLOCATION_ERROR;
/* 1. Check for multiplication overflow */
if (blocks != 0 && memory_size / ARGON2_BLOCK_SIZE != blocks) {
return ARGON2_MEMORY_ALLOCATION_ERROR;
}
/* 2. Try to allocate with appropriate allocator */
if (context->allocate_cbk) {
(context->allocate_cbk)((uint8_t **)&instance->memory, memory_size);
} else {
instance->memory = malloc(memory_size);
}
if (instance->memory == NULL) {
return ARGON2_MEMORY_ALLOCATION_ERROR;
}
return ARGON2_OK;
}
void free_memory(const argon2_context *context,
const argon2_instance_t *instance) {
size_t memory_size = instance->memory_blocks * ARGON2_BLOCK_SIZE;
clear_internal_memory(instance->memory, memory_size);
if (instance->keep_memory) {
/* user-supplied memory -- do not free */
return;
}
if (context->free_cbk) {
(context->free_cbk)((uint8_t *)instance->memory, memory_size);
} else {
free(instance->memory);
}
}
void NOT_OPTIMIZED secure_wipe_memory(void *v, size_t n) {
#if defined(_MSC_VER) && VC_GE_2005(_MSC_VER)
SecureZeroMemory(v, n);
#elif defined memset_s
memset_s(v, n, 0, n);
#elif defined(__OpenBSD__)
explicit_bzero(v, n);
#else
static void *(*const volatile memset_sec)(void *, int, size_t) = &memset;
memset_sec(v, 0, n);
#endif
}
/* Memory clear flag defaults to true. */
int FLAG_clear_internal_memory = 1;
void clear_internal_memory(void *v, size_t n) {
if (FLAG_clear_internal_memory && v) {
secure_wipe_memory(v, n);
}
}
void finalize(const argon2_context *context, argon2_instance_t *instance) {
if (context != NULL && instance != NULL) {
block blockhash;
uint32_t l;
copy_block(&blockhash, instance->memory + instance->lane_length - 1);
/* XOR the last blocks */
for (l = 1; l < instance->lanes; ++l) {
uint32_t last_block_in_lane =
l * instance->lane_length + (instance->lane_length - 1);
xor_block(&blockhash, instance->memory + last_block_in_lane);
}
/* Hash the result */
{
uint8_t blockhash_bytes[ARGON2_BLOCK_SIZE];
store_block(blockhash_bytes, &blockhash);
blake2b_long(context->out, context->outlen, blockhash_bytes,
ARGON2_BLOCK_SIZE);
/* clear blockhash and blockhash_bytes */
clear_internal_memory(blockhash.v, ARGON2_BLOCK_SIZE);
clear_internal_memory(blockhash_bytes, ARGON2_BLOCK_SIZE);
}
if (instance->print_internals) {
print_tag(context->out, context->outlen);
}
free_memory(context, instance);
}
}
uint32_t index_alpha(const argon2_instance_t *instance,
const argon2_position_t *position, uint32_t pseudo_rand,
int same_lane) {
/*
* Pass 0:
* This lane : all already finished segments plus already constructed
* blocks in this segment
* Other lanes : all already finished segments
* Pass 1+:
* This lane : (SYNC_POINTS - 1) last segments plus already constructed
* blocks in this segment
* Other lanes : (SYNC_POINTS - 1) last segments
*/
uint32_t reference_area_size;
uint64_t relative_position;
uint32_t start_position, absolute_position;
if (0 == position->pass) {
/* First pass */
if (0 == position->slice) {
/* First slice */
reference_area_size =
position->index - 1; /* all but the previous */
} else {
if (same_lane) {
/* The same lane => add current segment */
reference_area_size =
position->slice * instance->segment_length +
position->index - 1;
} else {
reference_area_size =
position->slice * instance->segment_length +
((position->index == 0) ? (-1) : 0);
}
}
} else {
/* Second pass */
if (same_lane) {
reference_area_size = instance->lane_length -
instance->segment_length + position->index -
1;
} else {
reference_area_size = instance->lane_length -
instance->segment_length +
((position->index == 0) ? (-1) : 0);
}
}
/* 1.2.4. Mapping pseudo_rand to 0..<reference_area_size-1> and produce
* relative position */
relative_position = pseudo_rand;
relative_position = relative_position * relative_position >> 32;
relative_position = reference_area_size - 1 -
(reference_area_size * relative_position >> 32);
/* 1.2.5 Computing starting position */
start_position = 0;
if (0 != position->pass) {
start_position = (position->slice == ARGON2_SYNC_POINTS - 1)
? 0
: (position->slice + 1) * instance->segment_length;
}
/* 1.2.6. Computing absolute position */
absolute_position = (start_position + relative_position) %
instance->lane_length; /* absolute position */
return absolute_position;
}
#ifdef _WIN32
static unsigned __stdcall fill_segment_thr(void *thread_data)
#else
static void *fill_segment_thr(void *thread_data)
#endif
{
argon2_thread_data *my_data = thread_data;
fill_segment(my_data->instance_ptr, my_data->pos);
argon2_thread_exit();
return 0;
}
/* Single-threaded version for p=1 case */
static int fill_memory_blocks_st(argon2_instance_t *instance) {
uint32_t r, s, l;
for (r = 0; r < instance->passes; ++r) {
for (s = 0; s < ARGON2_SYNC_POINTS; ++s) {
for (l = 0; l < instance->lanes; ++l) {
argon2_position_t position = { r, l, (uint8_t)s, 0 };
fill_segment(instance, position);
}
}
if (instance->print_internals) {
internal_kat(instance, r); /* Print all memory blocks */
}
}
return ARGON2_OK;
}
/* Multi-threaded version for p > 1 case */
static int fill_memory_blocks_mt(argon2_instance_t *instance) {
uint32_t r, s;
argon2_thread_handle_t *thread = NULL;
argon2_thread_data *thr_data = NULL;
int rc = ARGON2_OK;
/* 1. Allocating space for threads */
thread = calloc(instance->lanes, sizeof(argon2_thread_handle_t));
if (thread == NULL) {
rc = ARGON2_MEMORY_ALLOCATION_ERROR;
goto fail;
}
thr_data = calloc(instance->lanes, sizeof(argon2_thread_data));
if (thr_data == NULL) {
rc = ARGON2_MEMORY_ALLOCATION_ERROR;
goto fail;
}
for (r = 0; r < instance->passes; ++r) {
for (s = 0; s < ARGON2_SYNC_POINTS; ++s) {
uint32_t l;
/* 2. Calling threads */
for (l = 0; l < instance->lanes; ++l) {
argon2_position_t position;
/* 2.1 Join a thread if limit is exceeded */
if (l >= instance->threads) {
if (argon2_thread_join(thread[l - instance->threads])) {
rc = ARGON2_THREAD_FAIL;
goto fail;
}
}
/* 2.2 Create thread */
position.pass = r;
position.lane = l;
position.slice = (uint8_t)s;
position.index = 0;
thr_data[l].instance_ptr =
instance; /* preparing the thread input */
memcpy(&(thr_data[l].pos), &position,
sizeof(argon2_position_t));
if (argon2_thread_create(&thread[l], &fill_segment_thr,
(void *)&thr_data[l])) {
rc = ARGON2_THREAD_FAIL;
goto fail;
}
/* fill_segment(instance, position); */
/*Non-thread equivalent of the lines above */
}
/* 3. Joining remaining threads */
for (l = instance->lanes - instance->threads; l < instance->lanes;
++l) {
if (argon2_thread_join(thread[l])) {
rc = ARGON2_THREAD_FAIL;
goto fail;
}
}
}
if (instance->print_internals) {
internal_kat(instance, r); /* Print all memory blocks */
}
}
fail:
if (thread != NULL) {
free(thread);
}
if (thr_data != NULL) {
free(thr_data);
}
return rc;
}
int fill_memory_blocks(argon2_instance_t *instance) {
if (instance == NULL || instance->lanes == 0) {
return ARGON2_INCORRECT_PARAMETER;
}
return instance->threads == 1 ?
fill_memory_blocks_st(instance) : fill_memory_blocks_mt(instance);
}
int validate_inputs(const argon2_context *context) {
if (NULL == context) {
return ARGON2_INCORRECT_PARAMETER;
}
if (NULL == context->out) {
return ARGON2_OUTPUT_PTR_NULL;
}
/* Validate output length */
if (ARGON2_MIN_OUTLEN > context->outlen) {
return ARGON2_OUTPUT_TOO_SHORT;
}
if (ARGON2_MAX_OUTLEN < context->outlen) {
return ARGON2_OUTPUT_TOO_LONG;
}
/* Validate password (required param) */
if (NULL == context->pwd) {
if (0 != context->pwdlen) {
return ARGON2_PWD_PTR_MISMATCH;
}
}
if (ARGON2_MIN_PWD_LENGTH > context->pwdlen) {
return ARGON2_PWD_TOO_SHORT;
}
if (ARGON2_MAX_PWD_LENGTH < context->pwdlen) {
return ARGON2_PWD_TOO_LONG;
}
/* Validate salt (required param) */
if (NULL == context->salt) {
if (0 != context->saltlen) {
return ARGON2_SALT_PTR_MISMATCH;
}
}
if (ARGON2_MIN_SALT_LENGTH > context->saltlen) {
return ARGON2_SALT_TOO_SHORT;
}
if (ARGON2_MAX_SALT_LENGTH < context->saltlen) {
return ARGON2_SALT_TOO_LONG;
}
/* Validate secret (optional param) */
if (NULL == context->secret) {
if (0 != context->secretlen) {
return ARGON2_SECRET_PTR_MISMATCH;
}
} else {
if (ARGON2_MIN_SECRET > context->secretlen) {
return ARGON2_SECRET_TOO_SHORT;
}
if (ARGON2_MAX_SECRET < context->secretlen) {
return ARGON2_SECRET_TOO_LONG;
}
}
/* Validate associated data (optional param) */
if (NULL == context->ad) {
if (0 != context->adlen) {
return ARGON2_AD_PTR_MISMATCH;
}
} else {
if (ARGON2_MIN_AD_LENGTH > context->adlen) {
return ARGON2_AD_TOO_SHORT;
}
if (ARGON2_MAX_AD_LENGTH < context->adlen) {
return ARGON2_AD_TOO_LONG;
}
}
/* Validate memory cost */
if (ARGON2_MIN_MEMORY > context->m_cost) {
return ARGON2_MEMORY_TOO_LITTLE;
}
if (ARGON2_MAX_MEMORY < context->m_cost) {
return ARGON2_MEMORY_TOO_MUCH;
}
if (context->m_cost < 8 * context->lanes) {
return ARGON2_MEMORY_TOO_LITTLE;
}
/* Validate time cost */
if (ARGON2_MIN_TIME > context->t_cost) {
return ARGON2_TIME_TOO_SMALL;
}
if (ARGON2_MAX_TIME < context->t_cost) {
return ARGON2_TIME_TOO_LARGE;
}
/* Validate lanes */
if (ARGON2_MIN_LANES > context->lanes) {
return ARGON2_LANES_TOO_FEW;
}
if (ARGON2_MAX_LANES < context->lanes) {
return ARGON2_LANES_TOO_MANY;
}
/* Validate threads */
if (ARGON2_MIN_THREADS > context->threads) {
return ARGON2_THREADS_TOO_FEW;
}
if (ARGON2_MAX_THREADS < context->threads) {
return ARGON2_THREADS_TOO_MANY;
}
if (NULL != context->allocate_cbk && NULL == context->free_cbk) {
return ARGON2_FREE_MEMORY_CBK_NULL;
}
if (NULL == context->allocate_cbk && NULL != context->free_cbk) {
return ARGON2_ALLOCATE_MEMORY_CBK_NULL;
}
return ARGON2_OK;
}
void fill_first_blocks(uint8_t *blockhash, const argon2_instance_t *instance) {
uint32_t l;
/* Make the first and second block in each lane as G(H0||0||i) or
G(H0||1||i) */
uint8_t blockhash_bytes[ARGON2_BLOCK_SIZE];
for (l = 0; l < instance->lanes; ++l) {
store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, 0);
store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH + 4, l);
blake2b_long(blockhash_bytes, ARGON2_BLOCK_SIZE, blockhash,
ARGON2_PREHASH_SEED_LENGTH);
load_block(&instance->memory[l * instance->lane_length + 0],
blockhash_bytes);
store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, 1);
blake2b_long(blockhash_bytes, ARGON2_BLOCK_SIZE, blockhash,
ARGON2_PREHASH_SEED_LENGTH);
load_block(&instance->memory[l * instance->lane_length + 1],
blockhash_bytes);
}
clear_internal_memory(blockhash_bytes, ARGON2_BLOCK_SIZE);
}
void initial_hash(uint8_t *blockhash, argon2_context *context,
argon2_type type) {
blake2b_state BlakeHash;
uint8_t value[sizeof(uint32_t)];
if (NULL == context || NULL == blockhash) {
return;
}
blake2b_init(&BlakeHash, ARGON2_PREHASH_DIGEST_LENGTH);
store32(&value, context->lanes);
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
store32(&value, context->outlen);
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
store32(&value, context->m_cost);
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
store32(&value, context->t_cost);
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
store32(&value, context->version);
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
store32(&value, (uint32_t)type);
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
store32(&value, context->pwdlen);
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
if (context->pwd != NULL) {
blake2b_update(&BlakeHash, (const uint8_t *)context->pwd,
context->pwdlen);
if (context->flags & ARGON2_FLAG_CLEAR_PASSWORD) {
secure_wipe_memory(context->pwd, context->pwdlen);
context->pwdlen = 0;
}
}
store32(&value, context->saltlen);
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
if (context->salt != NULL) {
blake2b_update(&BlakeHash, (const uint8_t *)context->salt,
context->saltlen);
}
store32(&value, context->secretlen);
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
if (context->secret != NULL) {
blake2b_update(&BlakeHash, (const uint8_t *)context->secret,
context->secretlen);
if (context->flags & ARGON2_FLAG_CLEAR_SECRET) {
secure_wipe_memory(context->secret, context->secretlen);
context->secretlen = 0;
}
}
store32(&value, context->adlen);
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
if (context->ad != NULL) {
blake2b_update(&BlakeHash, (const uint8_t *)context->ad,
context->adlen);
}
blake2b_final(&BlakeHash, blockhash, ARGON2_PREHASH_DIGEST_LENGTH);
}
int initialize(argon2_instance_t *instance, argon2_context *context) {
uint8_t blockhash[ARGON2_PREHASH_SEED_LENGTH];
int result = ARGON2_OK;
if (instance == NULL || context == NULL)
return ARGON2_INCORRECT_PARAMETER;
instance->context_ptr = context;
/* 1. Memory allocation */
result = allocate_memory(context, instance);
if (result != ARGON2_OK) {
return result;
}
/* 2. Initial hashing */
/* H_0 + 8 extra bytes to produce the first blocks */
/* uint8_t blockhash[ARGON2_PREHASH_SEED_LENGTH]; */
/* Hashing all inputs */
initial_hash(blockhash, context, instance->type);
/* Zeroing 8 extra bytes */
clear_internal_memory(blockhash + ARGON2_PREHASH_DIGEST_LENGTH,
ARGON2_PREHASH_SEED_LENGTH -
ARGON2_PREHASH_DIGEST_LENGTH);
if (instance->print_internals) {
initial_kat(blockhash, context, instance->type);
}
/* 3. Creating first blocks, we always have at least two blocks in a slice
*/
fill_first_blocks(blockhash, instance);
/* Clearing the hash */
clear_internal_memory(blockhash, ARGON2_PREHASH_SEED_LENGTH);
return ARGON2_OK;
}

226
src/3rdparty/argon2/lib/core.h vendored Normal file
View file

@ -0,0 +1,226 @@
/*
* Argon2 source code package
*
* Written by Daniel Dinu and Dmitry Khovratovich, 2015
*
* This work is licensed under a Creative Commons CC0 1.0 License/Waiver.
*
* You should have received a copy of the CC0 Public Domain Dedication along
* with
* this software. If not, see
* <http://creativecommons.org/publicdomain/zero/1.0/>.
*/
#ifndef ARGON2_CORE_H
#define ARGON2_CORE_H
#include "argon2.h"
#if defined(_MSC_VER)
#define ALIGN(n) __declspec(align(16))
#elif defined(__GNUC__) || defined(__clang)
#define ALIGN(x) __attribute__((__aligned__(x)))
#else
#define ALIGN(x)
#endif
#define CONST_CAST(x) (x)(uintptr_t)
/**********************Argon2 internal constants*******************************/
enum argon2_core_constants {
/* Memory block size in bytes */
ARGON2_BLOCK_SIZE = 1024,
ARGON2_QWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 8,
ARGON2_OWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 16,
/* Number of pseudo-random values generated by one call to Blake in Argon2i
to
generate reference block positions */
ARGON2_ADDRESSES_IN_BLOCK = 128,
/* Pre-hashing digest length and its extension*/
ARGON2_PREHASH_DIGEST_LENGTH = 64,
ARGON2_PREHASH_SEED_LENGTH = 72
};
/*************************Argon2 internal data types***********************/
/*
* Structure for the (1KB) memory block implemented as 128 64-bit words.
* Memory blocks can be copied, XORed. Internal words can be accessed by [] (no
* bounds checking).
*/
typedef struct block_ { uint64_t v[ARGON2_QWORDS_IN_BLOCK]; } block;
/*****************Functions that work with the block******************/
/* Initialize each byte of the block with @in */
void init_block_value(block *b, uint8_t in);
/* Copy block @src to block @dst */
void copy_block(block *dst, const block *src);
/* XOR @src onto @dst bytewise */
void xor_block(block *dst, const block *src);
/*
* Argon2 instance: memory pointer, number of passes, amount of memory, type,
* and derived values.
* Used to evaluate the number and location of blocks to construct in each
* thread
*/
typedef struct Argon2_instance_t {
block *memory; /* Memory pointer */
uint32_t version;
uint32_t passes; /* Number of passes */
uint32_t memory_blocks; /* Number of blocks in memory */
uint32_t segment_length;
uint32_t lane_length;
uint32_t lanes;
uint32_t threads;
argon2_type type;
int print_internals; /* whether to print the memory blocks */
int keep_memory;
argon2_context *context_ptr; /* points back to original context */
} argon2_instance_t;
/*
* Argon2 position: where we construct the block right now. Used to distribute
* work between threads.
*/
typedef struct Argon2_position_t {
uint32_t pass;
uint32_t lane;
uint8_t slice;
uint32_t index;
} argon2_position_t;
/*Struct that holds the inputs for thread handling FillSegment*/
typedef struct Argon2_thread_data {
argon2_instance_t *instance_ptr;
argon2_position_t pos;
} argon2_thread_data;
/*************************Argon2 core functions********************************/
/* Allocates memory to the given pointer, uses the appropriate allocator as
* specified in the context. Total allocated memory is num*size.
* @param context argon2_context which specifies the allocator
* @param instance the Argon2 instance
* @return ARGON2_OK if memory is allocated successfully
*/
int allocate_memory(const argon2_context *context,
argon2_instance_t *instance);
/*
* Frees memory at the given pointer, uses the appropriate deallocator as
* specified in the context. Also cleans the memory using clear_internal_memory.
* @param context argon2_context which specifies the deallocator
* @param instance the Argon2 instance
*/
void free_memory(const argon2_context *context,
const argon2_instance_t *instance);
/* Function that securely cleans the memory. This ignores any flags set
* regarding clearing memory. Usually one just calls clear_internal_memory.
* @param mem Pointer to the memory
* @param s Memory size in bytes
*/
void secure_wipe_memory(void *v, size_t n);
/* Function that securely clears the memory if FLAG_clear_internal_memory is
* set. If the flag isn't set, this function does nothing.
* @param mem Pointer to the memory
* @param s Memory size in bytes
*/
ARGON2_PUBLIC void clear_internal_memory(void *v, size_t n);
/*
* Computes absolute position of reference block in the lane following a skewed
* distribution and using a pseudo-random value as input
* @param instance Pointer to the current instance
* @param position Pointer to the current position
* @param pseudo_rand 32-bit pseudo-random value used to determine the position
* @param same_lane Indicates if the block will be taken from the current lane.
* If so we can reference the current segment
* @pre All pointers must be valid
*/
uint32_t index_alpha(const argon2_instance_t *instance,
const argon2_position_t *position, uint32_t pseudo_rand,
int same_lane);
/*
* Function that validates all inputs against predefined restrictions and return
* an error code
* @param context Pointer to current Argon2 context
* @return ARGON2_OK if everything is all right, otherwise one of error codes
* (all defined in <argon2.h>
*/
int validate_inputs(const argon2_context *context);
/*
* Hashes all the inputs into @a blockhash[PREHASH_DIGEST_LENGTH], clears
* password and secret if needed
* @param context Pointer to the Argon2 internal structure containing memory
* pointer, and parameters for time and space requirements.
* @param blockhash Buffer for pre-hashing digest
* @param type Argon2 type
* @pre @a blockhash must have at least @a PREHASH_DIGEST_LENGTH bytes
* allocated
*/
void initial_hash(uint8_t *blockhash, argon2_context *context,
argon2_type type);
/*
* Function creates first 2 blocks per lane
* @param instance Pointer to the current instance
* @param blockhash Pointer to the pre-hashing digest
* @pre blockhash must point to @a PREHASH_SEED_LENGTH allocated values
*/
void fill_first_blocks(uint8_t *blockhash, const argon2_instance_t *instance);
/*
* Function allocates memory, hashes the inputs with Blake, and creates first
* two blocks. Returns the pointer to the main memory with 2 blocks per lane
* initialized
* @param context Pointer to the Argon2 internal structure containing memory
* pointer, and parameters for time and space requirements.
* @param instance Current Argon2 instance
* @return Zero if successful, -1 if memory failed to allocate. @context->state
* will be modified if successful.
*/
int initialize(argon2_instance_t *instance, argon2_context *context);
/*
* XORing the last block of each lane, hashing it, making the tag. Deallocates
* the memory.
* @param context Pointer to current Argon2 context (use only the out parameters
* from it)
* @param instance Pointer to current instance of Argon2
* @pre instance->state must point to necessary amount of memory
* @pre context->out must point to outlen bytes of memory
* @pre if context->free_cbk is not NULL, it should point to a function that
* deallocates memory
*/
void finalize(const argon2_context *context, argon2_instance_t *instance);
/*
* Function that fills the segment using previous segments also from other
* threads
* @param instance Pointer to the current instance
* @param position Current position
* @pre all block pointers must be valid
*/
void fill_segment(const argon2_instance_t *instance,
argon2_position_t position);
/*
* Function that fills the entire memory t_cost times based on the first two
* blocks in each lane
* @param instance Pointer to the current instance
* @return ARGON2_OK if successful, @context->state
*/
int fill_memory_blocks(argon2_instance_t *instance);
#endif

432
src/3rdparty/argon2/lib/encoding.c vendored Normal file
View file

@ -0,0 +1,432 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include "encoding.h"
#include "core.h"
/*
* Example code for a decoder and encoder of "hash strings", with Argon2
* parameters.
*
* This code comprises three sections:
*
* -- The first section contains generic Base64 encoding and decoding
* functions. It is conceptually applicable to any hash function
* implementation that uses Base64 to encode and decode parameters,
* salts and outputs. It could be made into a library, provided that
* the relevant functions are made public (non-static) and be given
* reasonable names to avoid collisions with other functions.
*
* -- The second section is specific to Argon2. It encodes and decodes
* the parameters, salts and outputs. It does not compute the hash
* itself.
*
* The code was originally written by Thomas Pornin <pornin@bolet.org>,
* to whom comments and remarks may be sent. It is released under what
* should amount to Public Domain or its closest equivalent; the
* following mantra is supposed to incarnate that fact with all the
* proper legal rituals:
*
* ---------------------------------------------------------------------
* This file is provided under the terms of Creative Commons CC0 1.0
* Public Domain Dedication. To the extent possible under law, the
* author (Thomas Pornin) has waived all copyright and related or
* neighboring rights to this file. This work is published from: Canada.
* ---------------------------------------------------------------------
*
* Copyright (c) 2015 Thomas Pornin
*/
/* ==================================================================== */
/*
* Common code; could be shared between different hash functions.
*
* Note: the Base64 functions below assume that uppercase letters (resp.
* lowercase letters) have consecutive numerical codes, that fit on 8
* bits. All modern systems use ASCII-compatible charsets, where these
* properties are true. If you are stuck with a dinosaur of a system
* that still defaults to EBCDIC then you already have much bigger
* interoperability issues to deal with.
*/
/*
* Some macros for constant-time comparisons. These work over values in
* the 0..255 range. Returned value is 0x00 on "false", 0xFF on "true".
*/
#define EQ(x, y) ((((0U - ((unsigned)(x) ^ (unsigned)(y))) >> 8) & 0xFF) ^ 0xFF)
#define GT(x, y) ((((unsigned)(y) - (unsigned)(x)) >> 8) & 0xFF)
#define GE(x, y) (GT(y, x) ^ 0xFF)
#define LT(x, y) GT(y, x)
#define LE(x, y) GE(y, x)
/*
* Convert value x (0..63) to corresponding Base64 character.
*/
static int b64_byte_to_char(unsigned x) {
return (LT(x, 26) & (x + 'A')) |
(GE(x, 26) & LT(x, 52) & (x + ('a' - 26))) |
(GE(x, 52) & LT(x, 62) & (x + ('0' - 52))) | (EQ(x, 62) & '+') |
(EQ(x, 63) & '/');
}
/*
* Convert character c to the corresponding 6-bit value. If character c
* is not a Base64 character, then 0xFF (255) is returned.
*/
static unsigned b64_char_to_byte(int c) {
unsigned x;
x = (GE(c, 'A') & LE(c, 'Z') & (c - 'A')) |
(GE(c, 'a') & LE(c, 'z') & (c - ('a' - 26))) |
(GE(c, '0') & LE(c, '9') & (c - ('0' - 52))) | (EQ(c, '+') & 62) |
(EQ(c, '/') & 63);
return x | (EQ(x, 0) & (EQ(c, 'A') ^ 0xFF));
}
/*
* Convert some bytes to Base64. 'dst_len' is the length (in characters)
* of the output buffer 'dst'; if that buffer is not large enough to
* receive the result (including the terminating 0), then (size_t)-1
* is returned. Otherwise, the zero-terminated Base64 string is written
* in the buffer, and the output length (counted WITHOUT the terminating
* zero) is returned.
*/
static size_t to_base64(char *dst, size_t dst_len, const void *src,
size_t src_len) {
size_t olen;
const unsigned char *buf;
unsigned acc, acc_len;
olen = (src_len / 3) << 2;
switch (src_len % 3) {
case 2:
olen++;
/* fall through */
case 1:
olen += 2;
break;
}
if (dst_len <= olen) {
return (size_t)-1;
}
acc = 0;
acc_len = 0;
buf = (const unsigned char *)src;
while (src_len-- > 0) {
acc = (acc << 8) + (*buf++);
acc_len += 8;
while (acc_len >= 6) {
acc_len -= 6;
*dst++ = (char)b64_byte_to_char((acc >> acc_len) & 0x3F);
}
}
if (acc_len > 0) {
*dst++ = (char)b64_byte_to_char((acc << (6 - acc_len)) & 0x3F);
}
*dst++ = 0;
return olen;
}
/*
* Decode Base64 chars into bytes. The '*dst_len' value must initially
* contain the length of the output buffer '*dst'; when the decoding
* ends, the actual number of decoded bytes is written back in
* '*dst_len'.
*
* Decoding stops when a non-Base64 character is encountered, or when
* the output buffer capacity is exceeded. If an error occurred (output
* buffer is too small, invalid last characters leading to unprocessed
* buffered bits), then NULL is returned; otherwise, the returned value
* points to the first non-Base64 character in the source stream, which
* may be the terminating zero.
*/
static const char *from_base64(void *dst, size_t *dst_len, const char *src) {
size_t len;
unsigned char *buf;
unsigned acc, acc_len;
buf = (unsigned char *)dst;
len = 0;
acc = 0;
acc_len = 0;
for (;;) {
unsigned d;
d = b64_char_to_byte(*src);
if (d == 0xFF) {
break;
}
src++;
acc = (acc << 6) + d;
acc_len += 6;
if (acc_len >= 8) {
acc_len -= 8;
if ((len++) >= *dst_len) {
return NULL;
}
*buf++ = (acc >> acc_len) & 0xFF;
}
}
/*
* If the input length is equal to 1 modulo 4 (which is
* invalid), then there will remain 6 unprocessed bits;
* otherwise, only 0, 2 or 4 bits are buffered. The buffered
* bits must also all be zero.
*/
if (acc_len > 4 || (acc & (((unsigned)1 << acc_len) - 1)) != 0) {
return NULL;
}
*dst_len = len;
return src;
}
/*
* Decode decimal integer from 'str'; the value is written in '*v'.
* Returned value is a pointer to the next non-decimal character in the
* string. If there is no digit at all, or the value encoding is not
* minimal (extra leading zeros), or the value does not fit in an
* 'unsigned long', then NULL is returned.
*/
static const char *decode_decimal(const char *str, unsigned long *v) {
const char *orig;
unsigned long acc;
acc = 0;
for (orig = str;; str++) {
int c;
c = *str;
if (c < '0' || c > '9') {
break;
}
c -= '0';
if (acc > (ULONG_MAX / 10)) {
return NULL;
}
acc *= 10;
if ((unsigned long)c > (ULONG_MAX - acc)) {
return NULL;
}
acc += (unsigned long)c;
}
if (str == orig || (*orig == '0' && str != (orig + 1))) {
return NULL;
}
*v = acc;
return str;
}
/* ==================================================================== */
/*
* Code specific to Argon2.
*
* The code below applies the following format:
*
* $argon2<T>[$v=<num>]$m=<num>,t=<num>,p=<num>$<bin>$<bin>
*
* where <T> is either 'd', 'id', or 'i', <num> is a decimal integer (positive,
* fits in an 'unsigned long'), and <bin> is Base64-encoded data (no '=' padding
* characters, no newline or whitespace).
*
* The last two binary chunks (encoded in Base64) are, in that order,
* the salt and the output. Both are required. The binary salt length and the
* output length must be in the allowed ranges defined in argon2.h.
*
* The ctx struct must contain buffers large enough to hold the salt and pwd
* when it is fed into decode_string.
*/
int decode_string(argon2_context *ctx, const char *str, argon2_type type) {
/* check for prefix */
#define CC(prefix) \
do { \
size_t cc_len = strlen(prefix); \
if (strncmp(str, prefix, cc_len) != 0) { \
return ARGON2_DECODING_FAIL; \
} \
str += cc_len; \
} while ((void)0, 0)
/* optional prefix checking with supplied code */
#define CC_opt(prefix, code) \
do { \
size_t cc_len = strlen(prefix); \
if (strncmp(str, prefix, cc_len) == 0) { \
str += cc_len; \
{ code; } \
} \
} while ((void)0, 0)
/* Decoding prefix into uint32_t decimal */
#define DECIMAL_U32(x) \
do { \
unsigned long dec_x; \
str = decode_decimal(str, &dec_x); \
if (str == NULL || dec_x > UINT32_MAX) { \
return ARGON2_DECODING_FAIL; \
} \
(x) = (uint32_t)dec_x; \
} while ((void)0, 0)
/* Decoding base64 into a binary buffer */
#define BIN(buf, max_len, len) \
do { \
size_t bin_len = (max_len); \
str = from_base64(buf, &bin_len, str); \
if (str == NULL || bin_len > UINT32_MAX) { \
return ARGON2_DECODING_FAIL; \
} \
(len) = (uint32_t)bin_len; \
} while ((void)0, 0)
size_t maxsaltlen = ctx->saltlen;
size_t maxoutlen = ctx->outlen;
int validation_result;
const char* type_string;
/* We should start with the argon2_type we are using */
type_string = argon2_type2string(type, 0);
if (!type_string) {
return ARGON2_INCORRECT_TYPE;
}
CC("$");
CC(type_string);
/* Reading the version number if the default is suppressed */
ctx->version = ARGON2_VERSION_10;
CC_opt("$v=", DECIMAL_U32(ctx->version));
CC("$m=");
DECIMAL_U32(ctx->m_cost);
CC(",t=");
DECIMAL_U32(ctx->t_cost);
CC(",p=");
DECIMAL_U32(ctx->lanes);
ctx->threads = ctx->lanes;
CC("$");
BIN(ctx->salt, maxsaltlen, ctx->saltlen);
CC("$");
BIN(ctx->out, maxoutlen, ctx->outlen);
/* The rest of the fields get the default values */
ctx->secret = NULL;
ctx->secretlen = 0;
ctx->ad = NULL;
ctx->adlen = 0;
ctx->allocate_cbk = NULL;
ctx->free_cbk = NULL;
ctx->flags = ARGON2_DEFAULT_FLAGS;
/* On return, must have valid context */
validation_result = validate_inputs(ctx);
if (validation_result != ARGON2_OK) {
return validation_result;
}
/* Can't have any additional characters */
if (*str == 0) {
return ARGON2_OK;
} else {
return ARGON2_DECODING_FAIL;
}
#undef CC
#undef CC_opt
#undef DECIMAL_U32
#undef BIN
}
int encode_string(char *dst, size_t dst_len, argon2_context *ctx,
argon2_type type) {
#define SS(str) \
do { \
size_t pp_len = strlen(str); \
if (pp_len >= dst_len) { \
return ARGON2_ENCODING_FAIL; \
} \
memcpy(dst, str, pp_len + 1); \
dst += pp_len; \
dst_len -= pp_len; \
} while ((void)0, 0)
#define SX(x) \
do { \
char tmp[30]; \
sprintf(tmp, "%lu", (unsigned long)(x)); \
SS(tmp); \
} while ((void)0, 0)
#define SB(buf, len) \
do { \
size_t sb_len = to_base64(dst, dst_len, buf, len); \
if (sb_len == (size_t)-1) { \
return ARGON2_ENCODING_FAIL; \
} \
dst += sb_len; \
dst_len -= sb_len; \
} while ((void)0, 0)
const char* type_string = argon2_type2string(type, 0);
int validation_result = validate_inputs(ctx);
if (!type_string) {
return ARGON2_ENCODING_FAIL;
}
if (validation_result != ARGON2_OK) {
return validation_result;
}
SS("$");
SS(type_string);
SS("$v=");
SX(ctx->version);
SS("$m=");
SX(ctx->m_cost);
SS(",t=");
SX(ctx->t_cost);
SS(",p=");
SX(ctx->lanes);
SS("$");
SB(ctx->salt, ctx->saltlen);
SS("$");
SB(ctx->out, ctx->outlen);
return ARGON2_OK;
#undef SS
#undef SX
#undef SB
}
size_t b64len(uint32_t len) {
size_t olen = ((size_t)len / 3) << 2;
switch (len % 3) {
case 2:
olen++;
/* fall through */
case 1:
olen += 2;
break;
}
return olen;
}
size_t numlen(uint32_t num) {
size_t len = 1;
while (num >= 10) {
++len;
num = num / 10;
}
return len;
}

40
src/3rdparty/argon2/lib/encoding.h vendored Normal file
View file

@ -0,0 +1,40 @@
#ifndef ENCODING_H
#define ENCODING_H
#include "argon2.h"
#define ARGON2_MAX_DECODED_LANES UINT32_C(255)
#define ARGON2_MIN_DECODED_SALT_LEN UINT32_C(8)
#define ARGON2_MIN_DECODED_OUT_LEN UINT32_C(12)
/*
* encode an Argon2 hash string into the provided buffer. 'dst_len'
* contains the size, in characters, of the 'dst' buffer; if 'dst_len'
* is less than the number of required characters (including the
* terminating 0), then this function returns ARGON2_ENCODING_ERROR.
*
* on success, ARGON2_OK is returned.
*/
int encode_string(char *dst, size_t dst_len, argon2_context *ctx,
argon2_type type);
/*
* Decodes an Argon2 hash string into the provided structure 'ctx'.
* The only fields that must be set prior to this call are ctx.saltlen and
* ctx.outlen (which must be the maximal salt and out length values that are
* allowed), ctx.salt and ctx.out (which must be buffers of the specified
* length), and ctx.pwd and ctx.pwdlen which must hold a valid password.
*
* Invalid input string causes an error. On success, the ctx is valid and all
* fields have been initialized.
*
* Returned value is ARGON2_OK on success, other ARGON2_ codes on error.
*/
int decode_string(argon2_context *ctx, const char *str, argon2_type type);
/* Returns the length of the encoded byte stream with length len */
size_t b64len(uint32_t len);
/* Returns the length of the encoded number num */
size_t numlen(uint32_t num);
#endif

117
src/3rdparty/argon2/lib/genkat.c vendored Normal file
View file

@ -0,0 +1,117 @@
/*
* Argon2 source code package
*
* Written by Daniel Dinu and Dmitry Khovratovich, 2015
*
* This work is licensed under a Creative Commons CC0 1.0 License/Waiver.
*
* You should have received a copy of the CC0 Public Domain Dedication along
* with
* this software. If not, see
* <http://creativecommons.org/publicdomain/zero/1.0/>.
*/
#include <inttypes.h>
#include <stdio.h>
#include "genkat.h"
void initial_kat(const uint8_t *blockhash, const argon2_context *context,
argon2_type type) {
unsigned i;
if (blockhash != NULL && context != NULL) {
printf("=======================================\n");
printf("%s version number %d\n", argon2_type2string(type, 1),
context->version);
printf("=======================================\n");
printf("Memory: %u KiB, Iterations: %u, Parallelism: %u lanes, Tag "
"length: %u bytes\n",
context->m_cost, context->t_cost, context->lanes,
context->outlen);
printf("Password[%u]: ", context->pwdlen);
if (context->flags & ARGON2_FLAG_CLEAR_PASSWORD) {
printf("CLEARED\n");
} else {
for (i = 0; i < context->pwdlen; ++i) {
printf("%2.2x ", ((unsigned char *)context->pwd)[i]);
}
printf("\n");
}
printf("Salt[%u]: ", context->saltlen);
for (i = 0; i < context->saltlen; ++i) {
printf("%2.2x ", ((unsigned char *)context->salt)[i]);
}
printf("\n");
printf("Secret[%u]: ", context->secretlen);
if (context->flags & ARGON2_FLAG_CLEAR_SECRET) {
printf("CLEARED\n");
} else {
for (i = 0; i < context->secretlen; ++i) {
printf("%2.2x ", ((unsigned char *)context->secret)[i]);
}
printf("\n");
}
printf("Associated data[%u]: ", context->adlen);
for (i = 0; i < context->adlen; ++i) {
printf("%2.2x ", ((unsigned char *)context->ad)[i]);
}
printf("\n");
printf("Pre-hashing digest: ");
for (i = 0; i < ARGON2_PREHASH_DIGEST_LENGTH; ++i) {
printf("%2.2x ", ((unsigned char *)blockhash)[i]);
}
printf("\n");
}
}
void print_tag(const void *out, uint32_t outlen) {
unsigned i;
if (out != NULL) {
printf("Tag: ");
for (i = 0; i < outlen; ++i) {
printf("%2.2x ", ((uint8_t *)out)[i]);
}
printf("\n");
}
}
void internal_kat(const argon2_instance_t *instance, uint32_t pass) {
if (instance != NULL) {
uint32_t i, j;
printf("\n After pass %u:\n", pass);
for (i = 0; i < instance->memory_blocks; ++i) {
uint32_t how_many_words =
(instance->memory_blocks > ARGON2_QWORDS_IN_BLOCK)
? 1
: ARGON2_QWORDS_IN_BLOCK;
for (j = 0; j < how_many_words; ++j)
printf("Block %.4u [%3u]: %016" PRIx64 "\n", i, j,
instance->memory[i].v[j]);
}
}
}

47
src/3rdparty/argon2/lib/genkat.h vendored Normal file
View file

@ -0,0 +1,47 @@
/*
* Argon2 source code package
*
* Written by Daniel Dinu and Dmitry Khovratovich, 2015
*
* This work is licensed under a Creative Commons CC0 1.0 License/Waiver.
*
* You should have received a copy of the CC0 Public Domain Dedication along
* with
* this software. If not, see
* <http://creativecommons.org/publicdomain/zero/1.0/>.
*/
#ifndef ARGON2_KAT_H
#define ARGON2_KAT_H
#include "core.h"
/*
* Initial KAT function that prints the inputs to the file
* @param blockhash Array that contains pre-hashing digest
* @param context Holds inputs
* @param type Argon2 type
* @pre blockhash must point to INPUT_INITIAL_HASH_LENGTH bytes
* @pre context member pointers must point to allocated memory of size according
* to the length values
*/
void initial_kat(const uint8_t *blockhash, const argon2_context *context,
argon2_type type);
/*
* Function that prints the output tag
* @param out output array pointer
* @param outlen digest length
* @pre out must point to @a outlen bytes
**/
void print_tag(const void *out, uint32_t outlen);
/*
* Function that prints the internal state at given moment
* @param instance pointer to the current instance
* @param pass current pass number
* @pre instance must have necessary memory allocated
**/
void internal_kat(const argon2_instance_t *instance, uint32_t pass);
#endif

120
src/3rdparty/argon2/lib/impl-select.c vendored Normal file
View file

@ -0,0 +1,120 @@
#include <time.h>
#include <string.h>
#include "impl-select.h"
#include "argon2.h"
#define log_maybe(file, ...) \
do { \
if (file) { \
fprintf(file, __VA_ARGS__); \
} \
} while((void)0, 0)
#define BENCH_SAMPLES 512
#define BENCH_MEM_BLOCKS 512
static argon2_impl selected_argon_impl = {
"(default)", NULL, fill_segment_default
};
/* the benchmark routine is not thread-safe, so we can use a global var here: */
static block memory[BENCH_MEM_BLOCKS];
static uint64_t benchmark_impl(const argon2_impl *impl) {
clock_t time;
unsigned int i;
uint64_t bench;
argon2_instance_t instance;
argon2_position_t pos;
memset(memory, 0, sizeof(memory));
instance.version = ARGON2_VERSION_NUMBER;
instance.memory = memory;
instance.passes = 1;
instance.memory_blocks = BENCH_MEM_BLOCKS;
instance.segment_length = BENCH_MEM_BLOCKS / ARGON2_SYNC_POINTS;
instance.lane_length = instance.segment_length * ARGON2_SYNC_POINTS;
instance.lanes = 1;
instance.threads = 1;
instance.type = Argon2_i;
pos.lane = 0;
pos.pass = 0;
pos.slice = 0;
pos.index = 0;
/* warm-up cache: */
impl->fill_segment(&instance, pos);
/* OK, now measure: */
bench = 0;
time = clock();
for (i = 0; i < BENCH_SAMPLES; i++) {
impl->fill_segment(&instance, pos);
}
time = clock() - time;
bench = (uint64_t)time;
return bench;
}
static void select_impl(FILE *out, const char *prefix)
{
argon2_impl_list impls;
unsigned int i;
const argon2_impl *best_impl = NULL;
uint64_t best_bench = UINT_MAX;
log_maybe(out, "%sSelecting best fill_segment implementation...\n", prefix);
argon2_get_impl_list(&impls);
for (i = 0; i < impls.count; i++) {
const argon2_impl *impl = &impls.entries[i];
uint64_t bench;
log_maybe(out, "%s%s: Checking availability... ", prefix, impl->name);
if (impl->check != NULL && !impl->check()) {
log_maybe(out, "FAILED!\n");
continue;
}
log_maybe(out, "OK!\n");
log_maybe(out, "%s%s: Benchmarking...\n", prefix, impl->name);
bench = benchmark_impl(impl);
log_maybe(out, "%s%s: Benchmark result: %llu\n", prefix, impl->name,
(unsigned long long)bench);
if (bench < best_bench) {
best_bench = bench;
best_impl = impl;
}
}
if (best_impl != NULL) {
log_maybe(out,
"%sBest implementation: '%s' (bench %llu)\n", prefix,
best_impl->name, (unsigned long long)best_bench);
selected_argon_impl = *best_impl;
} else {
log_maybe(out,
"%sNo optimized implementation available, using default!\n",
prefix);
}
}
void fill_segment(const argon2_instance_t *instance, argon2_position_t position)
{
selected_argon_impl.fill_segment(instance, position);
}
void argon2_select_impl(FILE *out, const char *prefix)
{
if (prefix == NULL) {
prefix = "";
}
select_impl(out, prefix);
}

23
src/3rdparty/argon2/lib/impl-select.h vendored Normal file
View file

@ -0,0 +1,23 @@
#ifndef ARGON2_IMPL_SELECT_H
#define ARGON2_IMPL_SELECT_H
#include "core.h"
typedef struct Argon2_impl {
const char *name;
int (*check)(void);
void (*fill_segment)(const argon2_instance_t *instance,
argon2_position_t position);
} argon2_impl;
typedef struct Argon2_impl_list {
const argon2_impl *entries;
size_t count;
} argon2_impl_list;
void argon2_get_impl_list(argon2_impl_list *list);
void fill_segment_default(const argon2_instance_t *instance,
argon2_position_t position);
#endif // ARGON2_IMPL_SELECT_H

36
src/3rdparty/argon2/lib/thread.c vendored Normal file
View file

@ -0,0 +1,36 @@
#include "thread.h"
#if defined(_WIN32)
#include <windows.h>
#endif
int argon2_thread_create(argon2_thread_handle_t *handle,
argon2_thread_func_t func, void *args) {
if (NULL == handle || func == NULL) {
return -1;
}
#if defined(_WIN32)
*handle = _beginthreadex(NULL, 0, func, args, 0, NULL);
return *handle != 0 ? 0 : -1;
#else
return pthread_create(handle, NULL, func, args);
#endif
}
int argon2_thread_join(argon2_thread_handle_t handle) {
#if defined(_WIN32)
if (WaitForSingleObject((HANDLE)handle, INFINITE) == WAIT_OBJECT_0) {
return CloseHandle((HANDLE)handle) != 0 ? 0 : -1;
}
return -1;
#else
return pthread_join(handle, NULL);
#endif
}
void argon2_thread_exit(void) {
#if defined(_WIN32)
_endthreadex(0);
#else
pthread_exit(NULL);
#endif
}

47
src/3rdparty/argon2/lib/thread.h vendored Normal file
View file

@ -0,0 +1,47 @@
#ifndef ARGON2_THREAD_H
#define ARGON2_THREAD_H
/*
Here we implement an abstraction layer for the simpĺe requirements
of the Argon2 code. We only require 3 primitives---thread creation,
joining, and termination---so full emulation of the pthreads API
is unwarranted. Currently we wrap pthreads and Win32 threads.
The API defines 2 types: the function pointer type,
argon2_thread_func_t,
and the type of the thread handle---argon2_thread_handle_t.
*/
#if defined(_WIN32)
#include <process.h>
#include <stdint.h>
typedef unsigned(__stdcall *argon2_thread_func_t)(void *);
typedef uintptr_t argon2_thread_handle_t;
#else
#include <pthread.h>
typedef void *(*argon2_thread_func_t)(void *);
typedef pthread_t argon2_thread_handle_t;
#endif
/* Creates a thread
* @param handle pointer to a thread handle, which is the output of this
* function. Must not be NULL.
* @param func A function pointer for the thread's entry point. Must not be
* NULL.
* @param args Pointer that is passed as an argument to @func. May be NULL.
* @return 0 if @handle and @func are valid pointers and a thread is successfuly
* created.
*/
int argon2_thread_create(argon2_thread_handle_t *handle,
argon2_thread_func_t func, void *args);
/* Waits for a thread to terminate
* @param handle Handle to a thread created with argon2_thread_create.
* @return 0 if @handle is a valid handle, and joining completed successfully.
*/
int argon2_thread_join(argon2_thread_handle_t handle);
/* Terminate the current thread. Must be run inside a thread created by
* argon2_thread_create.
*/
void argon2_thread_exit(void);
#endif

BIN
src/3rdparty/argon2/libargon2.a vendored Normal file

Binary file not shown.

View file

@ -0,0 +1,74 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
#
# DESCRIPTION
#
# Check whether the given FLAG works with the current language's compiler
# or gives an error. (Warnings, however, are ignored)
#
# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
# success/failure.
#
# If EXTRA-FLAGS is defined, it is added to the current language's default
# flags (e.g. CFLAGS) when the check is done. The check is thus made with
# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
# force the compiler to issue an error when a bad flag is given.
#
# INPUT gives an alternative input source to AC_COMPILE_IFELSE.
#
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
#
# LICENSE
#
# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
#
# This program 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.
#
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
#
# As a special exception, the respective Autoconf Macro's copyright owner
# gives unlimited permission to copy, distribute and modify the configure
# scripts that are the output of Autoconf when processing the Macro. You
# need not follow the terms of the GNU General Public License when using
# or distributing such scripts, even though portions of the text of the
# Macro appear in them. The GNU General Public License (GPL) does govern
# all other use of the material that constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the Autoconf
# Macro released by the Autoconf Archive. When you make and distribute a
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.
#serial 4
AC_DEFUN([AX_CHECK_COMPILE_FLAG],
[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
_AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
[AS_VAR_SET(CACHEVAR,[yes])],
[AS_VAR_SET(CACHEVAR,[no])])
_AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
AS_VAR_IF(CACHEVAR,yes,
[m4_default([$2], :)],
[m4_default([$3], :)])
AS_VAR_POPDEF([CACHEVAR])dnl
])dnl AX_CHECK_COMPILE_FLAGS

485
src/3rdparty/argon2/m4/ax_pthread.m4 vendored Normal file
View file

@ -0,0 +1,485 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_pthread.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
#
# DESCRIPTION
#
# This macro figures out how to build C programs using POSIX threads. It
# sets the PTHREAD_LIBS output variable to the threads library and linker
# flags, and the PTHREAD_CFLAGS output variable to any special C compiler
# flags that are needed. (The user can also force certain compiler
# flags/libs to be tested by setting these environment variables.)
#
# Also sets PTHREAD_CC to any special C compiler that is needed for
# multi-threaded programs (defaults to the value of CC otherwise). (This
# is necessary on AIX to use the special cc_r compiler alias.)
#
# NOTE: You are assumed to not only compile your program with these flags,
# but also to link with them as well. For example, you might link with
# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
#
# If you are only building threaded programs, you may wish to use these
# variables in your default LIBS, CFLAGS, and CC:
#
# LIBS="$PTHREAD_LIBS $LIBS"
# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
# CC="$PTHREAD_CC"
#
# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
# has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to
# that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
#
# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
# PTHREAD_PRIO_INHERIT symbol is defined when compiling with
# PTHREAD_CFLAGS.
#
# ACTION-IF-FOUND is a list of shell commands to run if a threads library
# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
# is not found. If ACTION-IF-FOUND is not specified, the default action
# will define HAVE_PTHREAD.
#
# Please let the authors know if this macro fails on any platform, or if
# you have any other suggestions or comments. This macro was based on work
# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
# Alejandro Forero Cuervo to the autoconf macro repository. We are also
# grateful for the helpful feedback of numerous users.
#
# Updated for Autoconf 2.68 by Daniel Richard G.
#
# LICENSE
#
# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
# Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
#
# This program 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.
#
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
#
# As a special exception, the respective Autoconf Macro's copyright owner
# gives unlimited permission to copy, distribute and modify the configure
# scripts that are the output of Autoconf when processing the Macro. You
# need not follow the terms of the GNU General Public License when using
# or distributing such scripts, even though portions of the text of the
# Macro appear in them. The GNU General Public License (GPL) does govern
# all other use of the material that constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the Autoconf
# Macro released by the Autoconf Archive. When you make and distribute a
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.
#serial 23
AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
AC_DEFUN([AX_PTHREAD], [
AC_REQUIRE([AC_CANONICAL_HOST])
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_PROG_SED])
AC_LANG_PUSH([C])
ax_pthread_ok=no
# We used to check for pthread.h first, but this fails if pthread.h
# requires special compiler flags (e.g. on Tru64 or Sequent).
# It gets checked for in the link test anyway.
# First of all, check if the user has set any of the PTHREAD_LIBS,
# etcetera environment variables, and if threads linking works using
# them:
if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
ax_pthread_save_CC="$CC"
ax_pthread_save_CFLAGS="$CFLAGS"
ax_pthread_save_LIBS="$LIBS"
AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"])
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
LIBS="$PTHREAD_LIBS $LIBS"
AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS])
AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes])
AC_MSG_RESULT([$ax_pthread_ok])
if test "x$ax_pthread_ok" = "xno"; then
PTHREAD_LIBS=""
PTHREAD_CFLAGS=""
fi
CC="$ax_pthread_save_CC"
CFLAGS="$ax_pthread_save_CFLAGS"
LIBS="$ax_pthread_save_LIBS"
fi
# We must check for the threads library under a number of different
# names; the ordering is very important because some systems
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
# libraries is broken (non-POSIX).
# Create a list of thread flags to try. Items starting with a "-" are
# C compiler flags, and other items are library names, except for "none"
# which indicates that we try without any flags at all, and "pthread-config"
# which is a program returning the flags for the Pth emulation library.
ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
# The ordering *is* (sometimes) important. Some notes on the
# individual items follow:
# pthreads: AIX (must check this before -lpthread)
# none: in case threads are in libc; should be tried before -Kthread and
# other compiler flags to prevent continual compiler warnings
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
# (Note: HP C rejects this with "bad form for `-t' option")
# -pthreads: Solaris/gcc (Note: HP C also rejects)
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
# doesn't hurt to check since this sometimes defines pthreads and
# -D_REENTRANT too), HP C (must be checked before -lpthread, which
# is present but should not be used directly; and before -mthreads,
# because the compiler interprets this as "-mt" + "-hreads")
# -mthreads: Mingw32/gcc, Lynx/gcc
# pthread: Linux, etcetera
# --thread-safe: KAI C++
# pthread-config: use pthread-config program (for GNU Pth library)
case $host_os in
freebsd*)
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
ax_pthread_flags="-kthread lthread $ax_pthread_flags"
;;
hpux*)
# From the cc(1) man page: "[-mt] Sets various -D flags to enable
# multi-threading and also sets -lpthread."
ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
;;
openedition*)
# IBM z/OS requires a feature-test macro to be defined in order to
# enable POSIX threads at all, so give the user a hint if this is
# not set. (We don't define these ourselves, as they can affect
# other portions of the system API in unpredictable ways.)
AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING],
[
# if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
AX_PTHREAD_ZOS_MISSING
# endif
],
[AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])])
;;
solaris*)
# On Solaris (at least, for some versions), libc contains stubbed
# (non-functional) versions of the pthreads routines, so link-based
# tests will erroneously succeed. (N.B.: The stubs are missing
# pthread_cleanup_push, or rather a function called by this macro,
# so we could check for that, but who knows whether they'll stub
# that too in a future libc.) So we'll check first for the
# standard Solaris way of linking pthreads (-mt -lpthread).
ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags"
;;
esac
# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
AS_IF([test "x$GCC" = "xyes"],
[ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"])
# The presence of a feature test macro requesting re-entrant function
# definitions is, on some systems, a strong hint that pthreads support is
# correctly enabled
case $host_os in
darwin* | hpux* | linux* | osf* | solaris*)
ax_pthread_check_macro="_REENTRANT"
;;
aix*)
ax_pthread_check_macro="_THREAD_SAFE"
;;
*)
ax_pthread_check_macro="--"
;;
esac
AS_IF([test "x$ax_pthread_check_macro" = "x--"],
[ax_pthread_check_cond=0],
[ax_pthread_check_cond="!defined($ax_pthread_check_macro)"])
# Are we compiling with Clang?
AC_CACHE_CHECK([whether $CC is Clang],
[ax_cv_PTHREAD_CLANG],
[ax_cv_PTHREAD_CLANG=no
# Note that Autoconf sets GCC=yes for Clang as well as GCC
if test "x$GCC" = "xyes"; then
AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG],
[/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
# if defined(__clang__) && defined(__llvm__)
AX_PTHREAD_CC_IS_CLANG
# endif
],
[ax_cv_PTHREAD_CLANG=yes])
fi
])
ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
ax_pthread_clang_warning=no
# Clang needs special handling, because older versions handle the -pthread
# option in a rather... idiosyncratic way
if test "x$ax_pthread_clang" = "xyes"; then
# Clang takes -pthread; it has never supported any other flag
# (Note 1: This will need to be revisited if a system that Clang
# supports has POSIX threads in a separate library. This tends not
# to be the way of modern systems, but it's conceivable.)
# (Note 2: On some systems, notably Darwin, -pthread is not needed
# to get POSIX threads support; the API is always present and
# active. We could reasonably leave PTHREAD_CFLAGS empty. But
# -pthread does define _REENTRANT, and while the Darwin headers
# ignore this macro, third-party headers might not.)
PTHREAD_CFLAGS="-pthread"
PTHREAD_LIBS=
ax_pthread_ok=yes
# However, older versions of Clang make a point of warning the user
# that, in an invocation where only linking and no compilation is
# taking place, the -pthread option has no effect ("argument unused
# during compilation"). They expect -pthread to be passed in only
# when source code is being compiled.
#
# Problem is, this is at odds with the way Automake and most other
# C build frameworks function, which is that the same flags used in
# compilation (CFLAGS) are also used in linking. Many systems
# supported by AX_PTHREAD require exactly this for POSIX threads
# support, and in fact it is often not straightforward to specify a
# flag that is used only in the compilation phase and not in
# linking. Such a scenario is extremely rare in practice.
#
# Even though use of the -pthread flag in linking would only print
# a warning, this can be a nuisance for well-run software projects
# that build with -Werror. So if the active version of Clang has
# this misfeature, we search for an option to squash it.
AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread],
[ax_cv_PTHREAD_CLANG_NO_WARN_FLAG],
[ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
# Create an alternate version of $ac_link that compiles and
# links in two steps (.c -> .o, .o -> exe) instead of one
# (.c -> exe), because the warning occurs only in the second
# step
ax_pthread_save_ac_link="$ac_link"
ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
ax_pthread_save_CFLAGS="$CFLAGS"
for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
AS_IF([test "x$ax_pthread_try" = "xunknown"], [break])
CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
ac_link="$ax_pthread_save_ac_link"
AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
[ac_link="$ax_pthread_2step_ac_link"
AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
[break])
])
done
ac_link="$ax_pthread_save_ac_link"
CFLAGS="$ax_pthread_save_CFLAGS"
AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no])
ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
])
case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
no | unknown) ;;
*) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
esac
fi # $ax_pthread_clang = yes
if test "x$ax_pthread_ok" = "xno"; then
for ax_pthread_try_flag in $ax_pthread_flags; do
case $ax_pthread_try_flag in
none)
AC_MSG_CHECKING([whether pthreads work without any flags])
;;
-mt,pthread)
AC_MSG_CHECKING([whether pthreads work with -mt -lpthread])
PTHREAD_CFLAGS="-mt"
PTHREAD_LIBS="-lpthread"
;;
-*)
AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag])
PTHREAD_CFLAGS="$ax_pthread_try_flag"
;;
pthread-config)
AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])
AS_IF([test "x$ax_pthread_config" = "xno"], [continue])
PTHREAD_CFLAGS="`pthread-config --cflags`"
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
;;
*)
AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag])
PTHREAD_LIBS="-l$ax_pthread_try_flag"
;;
esac
ax_pthread_save_CFLAGS="$CFLAGS"
ax_pthread_save_LIBS="$LIBS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
LIBS="$PTHREAD_LIBS $LIBS"
# Check for various functions. We must include pthread.h,
# since some functions may be macros. (On the Sequent, we
# need a special flag -Kthread to make this header compile.)
# We check for pthread_join because it is in -lpthread on IRIX
# while pthread_create is in libc. We check for pthread_attr_init
# due to DEC craziness with -lpthreads. We check for
# pthread_cleanup_push because it is one of the few pthread
# functions on Solaris that doesn't have a non-functional libc stub.
# We try pthread_create on general principles.
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
# if $ax_pthread_check_cond
# error "$ax_pthread_check_macro must be defined"
# endif
static void routine(void *a) { a = 0; }
static void *start_routine(void *a) { return a; }],
[pthread_t th; pthread_attr_t attr;
pthread_create(&th, 0, start_routine, 0);
pthread_join(th, 0);
pthread_attr_init(&attr);
pthread_cleanup_push(routine, 0);
pthread_cleanup_pop(0) /* ; */])],
[ax_pthread_ok=yes],
[])
CFLAGS="$ax_pthread_save_CFLAGS"
LIBS="$ax_pthread_save_LIBS"
AC_MSG_RESULT([$ax_pthread_ok])
AS_IF([test "x$ax_pthread_ok" = "xyes"], [break])
PTHREAD_LIBS=""
PTHREAD_CFLAGS=""
done
fi
# Various other checks:
if test "x$ax_pthread_ok" = "xyes"; then
ax_pthread_save_CFLAGS="$CFLAGS"
ax_pthread_save_LIBS="$LIBS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
LIBS="$PTHREAD_LIBS $LIBS"
# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
AC_CACHE_CHECK([for joinable pthread attribute],
[ax_cv_PTHREAD_JOINABLE_ATTR],
[ax_cv_PTHREAD_JOINABLE_ATTR=unknown
for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
[int attr = $ax_pthread_attr; return attr /* ; */])],
[ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break],
[])
done
])
AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
test "x$ax_pthread_joinable_attr_defined" != "xyes"],
[AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE],
[$ax_cv_PTHREAD_JOINABLE_ATTR],
[Define to necessary symbol if this constant
uses a non-standard name on your system.])
ax_pthread_joinable_attr_defined=yes
])
AC_CACHE_CHECK([whether more special flags are required for pthreads],
[ax_cv_PTHREAD_SPECIAL_FLAGS],
[ax_cv_PTHREAD_SPECIAL_FLAGS=no
case $host_os in
solaris*)
ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
;;
esac
])
AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
test "x$ax_pthread_special_flags_added" != "xyes"],
[PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
ax_pthread_special_flags_added=yes])
AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
[ax_cv_PTHREAD_PRIO_INHERIT],
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
[[int i = PTHREAD_PRIO_INHERIT;]])],
[ax_cv_PTHREAD_PRIO_INHERIT=yes],
[ax_cv_PTHREAD_PRIO_INHERIT=no])
])
AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
test "x$ax_pthread_prio_inherit_defined" != "xyes"],
[AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])
ax_pthread_prio_inherit_defined=yes
])
CFLAGS="$ax_pthread_save_CFLAGS"
LIBS="$ax_pthread_save_LIBS"
# More AIX lossage: compile with *_r variant
if test "x$GCC" != "xyes"; then
case $host_os in
aix*)
AS_CASE(["x/$CC"],
[x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],
[#handle absolute path differently from PATH based program lookup
AS_CASE(["x$CC"],
[x/*],
[AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])],
[AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])])
;;
esac
fi
fi
test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
AC_SUBST([PTHREAD_LIBS])
AC_SUBST([PTHREAD_CFLAGS])
AC_SUBST([PTHREAD_CC])
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
if test "x$ax_pthread_ok" = "xyes"; then
ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1])
:
else
ax_pthread_ok=no
$2
fi
AC_LANG_POP
])dnl AX_PTHREAD

View file

@ -0,0 +1,3 @@
TEMPLATE = subdirs
SUBDIRS += $$ARCH

View file

@ -0,0 +1 @@
TEMPLATE = subdirs

View file

@ -0,0 +1,23 @@
QT -= core gui
TARGET = argon2-avx2
TEMPLATE = lib
CONFIG += staticlib
ARGON2_ROOT = ../../../..
INCLUDEPATH += \
$$ARGON2_ROOT/include \
$$ARGON2_ROOT/lib \
$$ARGON2_ROOT/arch/$$ARCH/lib
USE_AVX2 {
DEFINES += HAVE_AVX2
QMAKE_CFLAGS += -mavx2
}
SOURCES += \
$$ARGON2_ROOT/arch/x86_64/lib/argon2-avx2.c
HEADERS += \
$$ARGON2_ROOT/arch/x86_64/lib/argon2-avx2.h

View file

@ -0,0 +1,23 @@
QT -= core gui
TARGET = argon2-avx512f
TEMPLATE = lib
CONFIG += staticlib
ARGON2_ROOT = ../../../..
INCLUDEPATH += \
$$ARGON2_ROOT/include \
$$ARGON2_ROOT/lib \
$$ARGON2_ROOT/arch/$$ARCH/lib
USE_AVX512F {
DEFINES += HAVE_AVX512F
QMAKE_CFLAGS += -mavx512f
}
SOURCES += \
$$ARGON2_ROOT/arch/x86_64/lib/argon2-avx512f.c
HEADERS += \
$$ARGON2_ROOT/arch/x86_64/lib/argon2-avx512f.h

View file

@ -0,0 +1,24 @@
QT -= core gui
TARGET = argon2-sse2
TEMPLATE = lib
CONFIG += staticlib
ARGON2_ROOT = ../../../..
INCLUDEPATH += \
$$ARGON2_ROOT/include \
$$ARGON2_ROOT/lib \
$$ARGON2_ROOT/arch/$$ARCH/lib
USE_SSE2 | USE_SSSE3 | USE_XOP | USE_AVX2 {
DEFINES += HAVE_SSE2
QMAKE_CFLAGS += -msse2
}
SOURCES += \
$$ARGON2_ROOT/arch/x86_64/lib/argon2-sse2.c
HEADERS += \
$$ARGON2_ROOT/arch/x86_64/lib/argon2-sse2.h \
$$ARGON2_ROOT/arch/x86_64/lib/argon2-template-128.h

View file

@ -0,0 +1,24 @@
QT -= core gui
TARGET = argon2-ssse3
TEMPLATE = lib
CONFIG += staticlib
ARGON2_ROOT = ../../../..
INCLUDEPATH += \
$$ARGON2_ROOT/include \
$$ARGON2_ROOT/lib \
$$ARGON2_ROOT/arch/$$ARCH/lib
USE_SSSE3 | USE_XOP | USE_AVX2 {
DEFINES += HAVE_SSSE3
QMAKE_CFLAGS += -mssse3
}
SOURCES += \
$$ARGON2_ROOT/arch/x86_64/lib/argon2-ssse3.c
HEADERS += \
$$ARGON2_ROOT/arch/x86_64/lib/argon2-ssse3.h \
$$ARGON2_ROOT/arch/x86_64/lib/argon2-template-128.h

View file

@ -0,0 +1,24 @@
QT -= core gui
TARGET = argon2-xop
TEMPLATE = lib
CONFIG += staticlib
ARGON2_ROOT = ../../../..
INCLUDEPATH += \
$$ARGON2_ROOT/include \
$$ARGON2_ROOT/lib \
$$ARGON2_ROOT/arch/$$ARCH/lib
USE_XOP {
DEFINES += HAVE_XOP
QMAKE_CFLAGS += -mxop
}
SOURCES += \
$$ARGON2_ROOT/arch/x86_64/lib/argon2-xop.c
HEADERS += \
$$ARGON2_ROOT/arch/x86_64/lib/argon2-xop.h \
$$ARGON2_ROOT/arch/x86_64/lib/argon2-template-128.h

View file

@ -0,0 +1,8 @@
TEMPLATE = subdirs
SUBDIRS += \
libargon2-sse2 \
libargon2-ssse3 \
libargon2-xop \
libargon2-avx2 \
libargon2-avx512f

View file

@ -0,0 +1,19 @@
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
ARGON2_ROOT = ../..
SOURCES += \
$$ARGON2_ROOT/src/bench2.c
HEADERS += \
$$ARGON2_ROOT/src/timing.h
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../libargon2/release/ -largon2
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../libargon2/debug/ -largon2
else:unix: LIBS += -L$$OUT_PWD/../libargon2/ -largon2
INCLUDEPATH += $$PWD/../../include
DEPENDPATH += $$PWD/../../include

View file

@ -0,0 +1,16 @@
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
ARGON2_ROOT = ../..
SOURCES += \
$$ARGON2_ROOT/src/genkat.c
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../libargon2/release/ -largon2
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../libargon2/debug/ -largon2
else:unix: LIBS += -L$$OUT_PWD/../libargon2/ -largon2
INCLUDEPATH += $$PWD/../../include
DEPENDPATH += $$PWD/../../include

View file

@ -0,0 +1,16 @@
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
ARGON2_ROOT = ../..
SOURCES += \
$$ARGON2_ROOT/tests/test.c
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../libargon2/release/ -largon2
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../libargon2/debug/ -largon2
else:unix: LIBS += -L$$OUT_PWD/../libargon2/ -largon2
INCLUDEPATH += $$PWD/../../include
DEPENDPATH += $$PWD/../../include

9
src/3rdparty/argon2/qmake/argon2.pro vendored Normal file
View file

@ -0,0 +1,9 @@
TEMPLATE = subdirs
SUBDIRS += \
arch \
libargon2 \
argon2 \
argon2-genkat \
argon2-bench2 \
argon2-test

View file

@ -0,0 +1,18 @@
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
ARGON2_ROOT = ../..
SOURCES += \
$$ARGON2_ROOT/src/run.c
win32: DEFINES += argon2_EXPORT
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../libargon2/release/ -largon2
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../libargon2/debug/ -largon2
else:unix: LIBS += -L$$OUT_PWD/../libargon2/ -largon2
INCLUDEPATH += $$PWD/../../include $$PWD/../../lib
DEPENDPATH += $$PWD/../../include $$PWD/../../lib

View file

@ -0,0 +1,119 @@
#-------------------------------------------------
#
# Project created by QtCreator 2016-08-08T17:43:00
#
#-------------------------------------------------
QT -= core gui
TARGET = argon2
TEMPLATE = lib
ARGON2_ROOT = ../..
INCLUDEPATH += \
$$ARGON2_ROOT/include \
$$ARGON2_ROOT/lib
SOURCES += \
$$ARGON2_ROOT/lib/argon2.c \
$$ARGON2_ROOT/lib/core.c \
$$ARGON2_ROOT/lib/encoding.c \
$$ARGON2_ROOT/lib/genkat.c \
$$ARGON2_ROOT/lib/impl-select.c \
$$ARGON2_ROOT/lib/thread.c \
$$ARGON2_ROOT/lib/blake2/blake2.c
HEADERS += \
$$ARGON2_ROOT/include/argon2.h \
$$ARGON2_ROOT/lib/argon2-template-64.h \
$$ARGON2_ROOT/lib/core.h \
$$ARGON2_ROOT/lib/encoding.h \
$$ARGON2_ROOT/lib/genkat.h \
$$ARGON2_ROOT/lib/impl-select.h \
$$ARGON2_ROOT/lib/thread.h \
$$ARGON2_ROOT/lib/blake2/blake2.h \
$$ARGON2_ROOT/lib/blake2/blake2-impl.h
equals(ARCH, x86_64) {
SOURCES += \
$$ARGON2_ROOT/arch/$$ARCH/lib/cpu-flags.c \
$$ARGON2_ROOT/arch/$$ARCH/lib/argon2-arch.c
HEADERS += \
$$ARGON2_ROOT/arch/$$ARCH/lib/cpu-flags.h
# libargon2-sse2.a:
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../arch/x86_64/libargon2-sse2/release/ -largon2-sse2
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../arch/x86_64/libargon2-sse2/debug/ -largon2-sse2
else:unix: LIBS += -L$$OUT_PWD/../arch/x86_64/libargon2-sse2/ -largon2-sse2
DEPENDPATH += $$PWD/../arch/x86_64/libargon2-sse2
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-sse2/release/libargon2-sse2.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-sse2/debug/libargon2-sse2.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-sse2/release/argon2-sse2.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-sse2/debug/argon2-sse2.lib
else:unix: PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-sse2/libargon2-sse2.a
# libargon2-ssse3.a:
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../arch/x86_64/libargon2-ssse3/release/ -largon2-ssse3
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../arch/x86_64/libargon2-ssse3/debug/ -largon2-ssse3
else:unix: LIBS += -L$$OUT_PWD/../arch/x86_64/libargon2-ssse3/ -largon2-ssse3
DEPENDPATH += $$PWD/../arch/x86_64/libargon2-ssse3
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-ssse3/release/libargon2-ssse3.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-ssse3/debug/libargon2-ssse3.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-ssse3/release/argon2-ssse3.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-ssse3/debug/argon2-ssse3.lib
else:unix: PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-ssse3/libargon2-ssse3.a
# libargon2-xop.a:
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../arch/x86_64/libargon2-xop/release/ -largon2-xop
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../arch/x86_64/libargon2-xop/debug/ -largon2-xop
else:unix: LIBS += -L$$OUT_PWD/../arch/x86_64/libargon2-xop/ -largon2-xop
DEPENDPATH += $$PWD/../arch/x86_64/libargon2-xop
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-xop/release/libargon2-xop.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-xop/debug/libargon2-xop.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-xop/release/argon2-xop.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-xop/debug/argon2-xop.lib
else:unix: PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-xop/libargon2-xop.a
# libargon2-avx2.a:
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../arch/x86_64/libargon2-avx2/release/ -largon2-avx2
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../arch/x86_64/libargon2-avx2/debug/ -largon2-avx2
else:unix: LIBS += -L$$OUT_PWD/../arch/x86_64/libargon2-avx2/ -largon2-avx2
DEPENDPATH += $$PWD/../arch/x86_64/libargon2-avx2
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-avx2/release/libargon2-avx2.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-avx2/debug/libargon2-avx2.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-avx2/release/argon2-avx2.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-avx2/debug/argon2-avx2.lib
else:unix: PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-avx2/libargon2-avx2.a
# libargon2-avx512f.a:
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../arch/x86_64/libargon2-avx512f/release/ -largon2-avx512f
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../arch/x86_64/libargon2-avx512f/debug/ -largon2-avx512f
else:unix: LIBS += -L$$OUT_PWD/../arch/x86_64/libargon2-avx512f/ -largon2-avx512f
DEPENDPATH += $$PWD/../arch/x86_64/libargon2-avx512f
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-avx512f/release/libargon2-avx512f.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-avx512f/debug/libargon2-avx512f.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-avx512f/release/argon2-avx512f.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-avx512f/debug/argon2-avx512f.lib
else:unix: PRE_TARGETDEPS += $$OUT_PWD/../arch/x86_64/libargon2-avx512f/libargon2-avx512f.a
}
equals(ARCH, generic) {
SOURCES += \
$$ARGON2_ROOT/arch/$$ARCH/lib/argon2-arch.c
}
unix {
target.path = /usr/lib
INSTALLS += target
}

View file

@ -0,0 +1,12 @@
#!/bin/bash
dirname="$(dirname "$0")"
cd "$dirname" || exit 1
./start-benchmark.sh luna
./start-benchmark.sh lex '' '' '' '' '' backfill
./start-benchmark.sh mandos
./start-benchmark.sh zubat
PBS_SERVER=wagap.cerit-sc.cz \
./start-benchmark.sh zapat '' '' '' '' '' default@wagap.cerit-sc.cz

View file

@ -0,0 +1,75 @@
#!/bin/bash
machine="$1"
max_t_cost="$2"
max_m_cost="$3"
max_lanes="$4"
branch="$5"
duration="$6"
queue="$7"
run_tests="$8"
if [ -z "$machine" ]; then
echo "ERROR: Machine must be specified!" 1>&2
exit 1
fi
if [ -z "$max_t_cost" ]; then
max_t_cost=16
fi
if [ -z "$max_m_cost" ]; then
max_m_cost=$((8 * 1024 * 1024))
fi
if [ -z "$max_lanes" ]; then
max_lanes=16
fi
if [ -z "$branch" ]; then
branch='master'
fi
if [ -z "$duration" ]; then
duration=2h
fi
REPO_URL='https://github.com/WOnder93/argon2.git'
dest_dir="$(pwd)"
task_file="$(mktemp)"
cat >$task_file <<EOF
#!/bin/bash
#PBS -N argon2-cpu-$machine-$branch
#PBS -l walltime=$duration
#PBS -l nodes=1:ppn=$max_lanes:cl_$machine
#PBS -l mem=$(($max_m_cost / (1024 * 1024) + 1))gb
$(if [ -n "$queue" ]; then echo "#PBS -q $queue"; fi)
module add cmake-3.6.1
mkdir -p "$dest_dir/\$PBS_JOBID" || exit 1
cd "$dest_dir/\$PBS_JOBID" || exit 1
git clone "$REPO_URL" argon2 || exit 1
cd argon2 || exit 1
git checkout "$branch" || exit 1
(autoreconf -i && ./configure && make) || exit 1
if [ "$run_tests" == "yes" ]; then
make check
fi
bash scripts/run-benchmark.sh $max_t_cost $max_m_cost $max_lanes \
>"$dest_dir/\$PBS_JOBID/benchmark-$machine-$branch.csv"
EOF
qsub "$task_file"
rm -f "$task_file"

View file

@ -0,0 +1,40 @@
#!/bin/bash
max_t_cost="$1"
max_m_cost="$2"
max_lanes="$3"
if [ -z "$max_t_cost" ]; then
echo "ERROR: Maximum time cost must be specified!" 1>&2
exit 1
fi
if [ -z "$max_m_cost" ]; then
echo "ERROR: Maximum memory cost must be specified!" 1>&2
exit 1
fi
if [ -z "$max_lanes" ]; then
echo "ERROR: Maximum number of lanes must be specified!" 1>&2
exit 1
fi
dirname="$(dirname "$0")"
cd "$dirname/.." || exit 1
echo "t_cost,m_cost,lanes,ms_i,ms_d,ms_id"
stdbuf -oL ./argon2-bench2 $max_t_cost $max_m_cost $max_lanes |
stdbuf -oL tail -n +2 |
while read line; do
print_comma=0
for x in $line; do
if [ $print_comma -eq 1 ]; then
echo -n ","
else
print_comma=1
fi
echo -n "$x"
done
echo
done

179
src/3rdparty/argon2/src/bench2.c vendored Normal file
View file

@ -0,0 +1,179 @@
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include "argon2.h"
#include "timing.h"
#define ARGON2_BLOCK_SIZE 1024
#define BENCH_MAX_T_COST 16
#define BENCH_MAX_M_COST (1024 * 1024)
#define BENCH_MAX_THREADS 8
#define BENCH_MIN_PASSES (1024 * 1024)
#define BENCH_MAX_SAMPLES 128
#define BENCH_OUTLEN 16
#define BENCH_INLEN 16
static double pick_min(const double *samples, size_t count)
{
size_t i;
double min = INFINITY;
for (i = 0; i < count; i++) {
if (samples[i] < min) {
min = samples[i];
}
}
return min;
}
static int benchmark(void *memory, size_t memory_size,
uint32_t t_cost, uint32_t m_cost, uint32_t p)
{
static const unsigned char PASSWORD[BENCH_OUTLEN] = { 0 };
static const unsigned char SALT[BENCH_INLEN] = { 1 };
unsigned char out[BENCH_OUTLEN];
struct timestamp start, end;
double ms_d[BENCH_MAX_SAMPLES];
double ms_i[BENCH_MAX_SAMPLES];
double ms_id[BENCH_MAX_SAMPLES];
double ms_d_final, ms_i_final, ms_id_final;
unsigned int i, bench_samples;
argon2_context ctx;
int res;
ctx.out = out;
ctx.outlen = sizeof(out);
ctx.pwd = (uint8_t *)PASSWORD;
ctx.pwdlen = sizeof(PASSWORD);
ctx.salt = (uint8_t *)SALT;
ctx.saltlen = sizeof(SALT);
ctx.secret = NULL;
ctx.secretlen = 0;
ctx.ad = NULL;
ctx.adlen = 0;
ctx.t_cost = t_cost;
ctx.m_cost = m_cost;
ctx.lanes = ctx.threads = p;
ctx.version = ARGON2_VERSION_NUMBER;
ctx.allocate_cbk = NULL;
ctx.free_cbk = NULL;
ctx.flags = ARGON2_DEFAULT_FLAGS;
bench_samples = (BENCH_MIN_PASSES * p) / (t_cost * m_cost);
bench_samples += (BENCH_MIN_PASSES * p) % (t_cost * m_cost) != 0;
if (bench_samples > BENCH_MAX_SAMPLES) {
bench_samples = BENCH_MAX_SAMPLES;
}
for (i = 0; i < bench_samples; i++) {
timestamp_store(&start);
res = argon2_ctx_mem(&ctx, Argon2_d, memory, memory_size);
timestamp_store(&end);
if (res != ARGON2_OK) {
return res;
}
ms_d[i] = timestamp_span_ms(&start, &end);
}
for (i = 0; i < bench_samples; i++) {
timestamp_store(&start);
res = argon2_ctx_mem(&ctx, Argon2_i, memory, memory_size);
timestamp_store(&end);
if (res != ARGON2_OK) {
return res;
}
ms_i[i] = timestamp_span_ms(&start, &end);
}
for (i = 0; i < bench_samples; i++) {
timestamp_store(&start);
res = argon2_ctx_mem(&ctx, Argon2_id, memory, memory_size);
timestamp_store(&end);
if (res != ARGON2_OK) {
return res;
}
ms_id[i] = timestamp_span_ms(&start, &end);
}
ms_d_final = pick_min(ms_d, bench_samples);
ms_i_final = pick_min(ms_i, bench_samples);
ms_id_final = pick_min(ms_id, bench_samples);
printf("%8lu%16lu%8lu%16.6lf%16.6lf%16.6lf\n",
(unsigned long)t_cost, (unsigned long)m_cost, (unsigned long)p,
ms_d_final, ms_i_final, ms_id_final);
return 0;
}
int main(int argc, const char * const *argv)
{
uint32_t max_t_cost = BENCH_MAX_T_COST;
uint32_t max_m_cost = BENCH_MAX_M_COST;
uint32_t max_p = BENCH_MAX_THREADS;
uint32_t t_cost, m_cost, p;
char *end;
int res;
if (argc >= 2) {
max_t_cost = strtoul(argv[1], &end, 10);
if (end == argv[1]) {
fprintf(stderr, "ERROR: Invalid number format!\n");
return 1;
}
}
if (argc >= 3) {
max_m_cost = strtoul(argv[2], &end, 10);
if (end == argv[2]) {
fprintf(stderr, "ERROR: Invalid number format!\n");
return 1;
}
}
if (argc >= 4) {
max_p = strtoul(argv[3], &end, 10);
if (end == argv[3]) {
fprintf(stderr, "ERROR: Invalid number format!\n");
return 1;
}
}
argon2_select_impl(stderr, "[libargon2] ");
size_t memory_size = (size_t)max_m_cost * (size_t)ARGON2_BLOCK_SIZE;
void *memory = malloc(memory_size);
if (memory == NULL) {
fprintf(stderr, "ERROR: Memory allocation failed!\n");
return 1;
}
/* make sure the whole memory gets mapped to physical pages: */
memset(memory, 0xAB, memory_size);
printf("%8s%16s%8s%16s%16s%16s\n", "t_cost", "m_cost", "threads",
"Argon2d (ms)", "Argon2i (ms)", "Argon2id (ms)");
for (t_cost = 1; t_cost <= max_t_cost; t_cost *= 2) {
uint32_t min_m_cost = max_p * ARGON2_SYNC_POINTS * 2;
for (m_cost = min_m_cost; m_cost <= max_m_cost; m_cost *= 2) {
for (p = 1; p <= max_p; p *= 2) {
res = benchmark(memory, memory_size, t_cost, m_cost, p);
if (res != 0) {
free(memory);
return res;
}
}
}
}
free(memory);
return 0;
}

90
src/3rdparty/argon2/src/genkat.c vendored Normal file
View file

@ -0,0 +1,90 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "argon2.h"
static void fatal(const char *error) {
fprintf(stderr, "Error: %s\n", error);
exit(1);
}
static void generate_testvectors(argon2_type type, const uint32_t version) {
#define TEST_OUTLEN 32
#define TEST_PWDLEN 32
#define TEST_SALTLEN 16
#define TEST_SECRETLEN 8
#define TEST_ADLEN 12
argon2_context context;
unsigned char out[TEST_OUTLEN];
unsigned char pwd[TEST_PWDLEN];
unsigned char salt[TEST_SALTLEN];
unsigned char secret[TEST_SECRETLEN];
unsigned char ad[TEST_ADLEN];
const allocate_fptr myown_allocator = NULL;
const deallocate_fptr myown_deallocator = NULL;
unsigned t_cost = 3;
unsigned m_cost = 32;
unsigned lanes = 4;
memset(pwd, 1, TEST_OUTLEN);
memset(salt, 2, TEST_SALTLEN);
memset(secret, 3, TEST_SECRETLEN);
memset(ad, 4, TEST_ADLEN);
context.out = out;
context.outlen = TEST_OUTLEN;
context.version = version;
context.pwd = pwd;
context.pwdlen = TEST_PWDLEN;
context.salt = salt;
context.saltlen = TEST_SALTLEN;
context.secret = secret;
context.secretlen = TEST_SECRETLEN;
context.ad = ad;
context.adlen = TEST_ADLEN;
context.t_cost = t_cost;
context.m_cost = m_cost;
context.lanes = lanes;
context.threads = lanes;
context.allocate_cbk = myown_allocator;
context.free_cbk = myown_deallocator;
context.flags = ARGON2_DEFAULT_FLAGS | ARGON2_FLAG_GENKAT;
#undef TEST_OUTLEN
#undef TEST_PWDLEN
#undef TEST_SALTLEN
#undef TEST_SECRETLEN
#undef TEST_ADLEN
argon2_ctx(&context, type);
}
int main(int argc, char *argv[]) {
/* Get and check Argon2 type */
const char *type_str = (argc > 1) ? argv[1] : "i";
argon2_type type = Argon2_i;
uint32_t version = ARGON2_VERSION_NUMBER;
if (!strcmp(type_str, "d")) {
type = Argon2_d;
} else if (!strcmp(type_str, "i")) {
type = Argon2_i;
} else if (!strcmp(type_str, "id")) {
type = Argon2_id;
} else {
fatal("wrong Argon2 type");
}
/* Get and check Argon2 version number */
if(argc > 2) {
version = strtoul(argv[2], NULL, 10);
}
if (ARGON2_VERSION_10 != version && ARGON2_VERSION_NUMBER != version) {
fatal("wrong Argon2 version number");
}
generate_testvectors(type, version);
return ARGON2_OK;
}

315
src/3rdparty/argon2/src/run.c vendored Normal file
View file

@ -0,0 +1,315 @@
/*
* Argon2 source code package
*
* Written by Daniel Dinu and Dmitry Khovratovich, 2015
*
* This work is licensed under a Creative Commons CC0 1.0 License/Waiver.
*
* You should have received a copy of the CC0 Public Domain Dedication along
* with
* this software. If not, see
* <http://creativecommons.org/publicdomain/zero/1.0/>.
*/
#define _GNU_SOURCE 1
#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "argon2.h"
#include "core.h"
#define T_COST_DEF 3
#define LOG_M_COST_DEF 12 /* 2^12 = 4 MiB */
#define LANES_DEF 1
#define THREADS_DEF 1
#define OUTLEN_DEF 32
#define MAX_PASS_LEN 128
#define UNUSED_PARAMETER(x) (void)(x)
static void usage(const char *cmd) {
printf("Usage: %s [-h] salt [-i|-d|-id] [-t iterations] [-m memory] "
"[-p parallelism] [-l hash length] [-e|-r] [-v (10|13)]\n",
cmd);
printf("\tPassword is read from stdin\n");
printf("Parameters:\n");
printf("\tsalt\t\tThe salt to use, at least 8 characters\n");
printf("\t-i\t\tUse Argon2i (this is the default)\n");
printf("\t-d\t\tUse Argon2d instead of Argon2i\n");
printf("\t-id\t\tUse Argon2id instead of Argon2i\n");
printf("\t-t N\t\tSets the number of iterations to N (default = %d)\n",
T_COST_DEF);
printf("\t-m N\t\tSets the memory usage of 2^N KiB (default %d)\n",
LOG_M_COST_DEF);
printf("\t-p N\t\tSets parallelism to N threads (default %d)\n",
THREADS_DEF);
printf("\t-l N\t\tSets hash output length to N bytes (default %d)\n",
OUTLEN_DEF);
printf("\t-e\t\tOutput only encoded hash\n");
printf("\t-r\t\tOutput only the raw bytes of the hash\n");
printf("\t-v (10|13)\tArgon2 version (defaults to the most recent version, "
"currently %x)\n", ARGON2_VERSION_NUMBER);
printf("\t-h\t\tPrint %s usage\n", cmd);
}
static void fatal(const char *error) {
fprintf(stderr, "Error: %s\n", error);
exit(1);
}
static void print_hex(uint8_t *bytes, size_t bytes_len) {
size_t i;
for (i = 0; i < bytes_len; ++i) {
printf("%02x", bytes[i]);
}
printf("\n");
}
/*
Runs Argon2 with certain inputs and parameters, inputs not cleared. Prints the
Base64-encoded hash string
@out output array with at least 32 bytes allocated
@pwd NULL-terminated string, presumably from argv[]
@salt salt array
@t_cost number of iterations
@m_cost amount of requested memory in KB
@lanes amount of requested parallelism
@threads actual parallelism
@type Argon2 type we want to run
@encoded_only display only the encoded hash
@raw_only display only the hexadecimal of the hash
@version Argon2 version
*/
static void run(uint32_t outlen, char *pwd, char *salt, uint32_t t_cost,
uint32_t m_cost, uint32_t lanes, uint32_t threads,
argon2_type type, int encoded_only, int raw_only,
uint32_t version) {
clock_t start_time, stop_time;
size_t pwdlen, saltlen, encodedlen;
int result;
unsigned char * out = NULL;
char * encoded = NULL;
start_time = clock();
if (!pwd) {
fatal("password missing");
}
if (!salt) {
clear_internal_memory(pwd, strlen(pwd));
fatal("salt missing");
}
pwdlen = strlen(pwd);
saltlen = strlen(salt);
if(UINT32_MAX < saltlen) {
fatal("salt is too long");
}
UNUSED_PARAMETER(lanes);
out = malloc(outlen + 1);
if (!out) {
clear_internal_memory(pwd, strlen(pwd));
fatal("could not allocate memory for output");
}
encodedlen = argon2_encodedlen(t_cost, m_cost, lanes, (uint32_t)saltlen, outlen, type);
encoded = malloc(encodedlen + 1);
if (!encoded) {
clear_internal_memory(pwd, strlen(pwd));
fatal("could not allocate memory for hash");
}
result = argon2_hash(t_cost, m_cost, threads, pwd, pwdlen, salt, saltlen,
out, outlen, encoded, encodedlen, type, version);
if (result != ARGON2_OK)
fatal(argon2_error_message(result));
stop_time = clock();
if (encoded_only)
puts(encoded);
if (raw_only)
print_hex(out, outlen);
if (encoded_only || raw_only) {
free(out);
free(encoded);
return;
}
printf("Hash:\t\t");
print_hex(out, outlen);
free(out);
printf("Encoded:\t%s\n", encoded);
printf("%2.3f seconds\n",
((double)stop_time - start_time) / (CLOCKS_PER_SEC));
result = argon2_verify(encoded, pwd, pwdlen, type);
if (result != ARGON2_OK)
fatal(argon2_error_message(result));
printf("Verification ok\n");
free(encoded);
}
int main(int argc, char *argv[]) {
uint32_t outlen = OUTLEN_DEF;
uint32_t m_cost = 1 << LOG_M_COST_DEF;
uint32_t t_cost = T_COST_DEF;
uint32_t lanes = LANES_DEF;
uint32_t threads = THREADS_DEF;
argon2_type type = Argon2_i; /* Argon2i is the default type */
int types_specified = 0;
int encoded_only = 0;
int raw_only = 0;
uint32_t version = ARGON2_VERSION_NUMBER;
int i;
size_t n;
char pwd[MAX_PASS_LEN], *salt;
if (argc < 2) {
usage(argv[0]);
return ARGON2_MISSING_ARGS;
} else if (argc >= 2 && strcmp(argv[1], "-h") == 0) {
usage(argv[0]);
return 1;
}
argon2_select_impl(stderr, "[libargon2] ");
/* get password from stdin */
n = fread(pwd, 1, sizeof pwd - 1, stdin);
if(n < 1) {
fatal("no password read");
}
if(n == MAX_PASS_LEN-1) {
fatal("Provided password longer than supported in command line utility");
}
pwd[n] = '\0';
if (pwd[n - 1] == '\n') {
pwd[n - 1] = '\0';
}
salt = argv[1];
/* parse options */
for (i = 2; i < argc; i++) {
const char *a = argv[i];
unsigned long input = 0;
if (!strcmp(a, "-h")) {
usage(argv[0]);
return 1;
} else if (!strcmp(a, "-m")) {
if (i < argc - 1) {
i++;
input = strtoul(argv[i], NULL, 10);
if (input == 0 || input == ULONG_MAX ||
input > ARGON2_MAX_MEMORY_BITS) {
fatal("bad numeric input for -m");
}
m_cost = ARGON2_MIN(UINT64_C(1) << input, UINT32_C(0xFFFFFFFF));
if (m_cost > ARGON2_MAX_MEMORY) {
fatal("m_cost overflow");
}
continue;
} else {
fatal("missing -m argument");
}
} else if (!strcmp(a, "-t")) {
if (i < argc - 1) {
i++;
input = strtoul(argv[i], NULL, 10);
if (input == 0 || input == ULONG_MAX ||
input > ARGON2_MAX_TIME) {
fatal("bad numeric input for -t");
}
t_cost = input;
continue;
} else {
fatal("missing -t argument");
}
} else if (!strcmp(a, "-p")) {
if (i < argc - 1) {
i++;
input = strtoul(argv[i], NULL, 10);
if (input == 0 || input == ULONG_MAX ||
input > ARGON2_MAX_THREADS || input > ARGON2_MAX_LANES) {
fatal("bad numeric input for -p");
}
threads = input;
lanes = threads;
continue;
} else {
fatal("missing -p argument");
}
} else if (!strcmp(a, "-l")) {
if (i < argc - 1) {
i++;
input = strtoul(argv[i], NULL, 10);
outlen = input;
continue;
} else {
fatal("missing -l argument");
}
} else if (!strcmp(a, "-i")) {
type = Argon2_i;
++types_specified;
} else if (!strcmp(a, "-d")) {
type = Argon2_d;
++types_specified;
} else if (!strcmp(a, "-id")) {
type = Argon2_id;
++types_specified;
} else if (!strcmp(a, "-e")) {
encoded_only = 1;
} else if (!strcmp(a, "-r")) {
raw_only = 1;
} else if (!strcmp(a, "-v")) {
if (i < argc - 1) {
i++;
if (!strcmp(argv[i], "10")) {
version = ARGON2_VERSION_10;
} else if (!strcmp(argv[i], "13")) {
version = ARGON2_VERSION_13;
} else {
fatal("invalid Argon2 version");
}
} else {
fatal("missing -v argument");
}
} else {
fatal("unknown argument");
}
}
if (types_specified > 1) {
fatal("cannot specify multiple Argon2 types");
}
if(encoded_only && raw_only)
fatal("cannot provide both -e and -r");
if(!encoded_only && !raw_only) {
printf("Type:\t\t%s\n", argon2_type2string(type, 1));
printf("Iterations:\t%" PRIu32 " \n", t_cost);
printf("Memory:\t\t%" PRIu32 " KiB\n", m_cost);
printf("Parallelism:\t%" PRIu32 " \n", lanes);
}
run(outlen, pwd, salt, t_cost, m_cost, lanes, threads, type,
encoded_only, raw_only, version);
return ARGON2_OK;
}

41
src/3rdparty/argon2/src/timing.h vendored Normal file
View file

@ -0,0 +1,41 @@
#include <stdlib.h>
#ifdef _POSIX_SOURCE
#include <time.h>
struct timestamp {
struct timespec time;
};
static inline void timestamp_store(struct timestamp *out)
{
clock_gettime(CLOCK_MONOTONIC, &out->time);
}
static inline double timestamp_span_ms(const struct timestamp *start,
const struct timestamp *end)
{
double res = 0.0;
res += (end->time.tv_sec - start->time.tv_sec) * 1000.0;
res += (end->time.tv_nsec - start->time.tv_nsec) / 1000000.0;
return res;
}
#else
#include <time.h>
struct timestamp {
clock_t time;
};
static inline void timestamp_store(struct timestamp *out)
{
out->time = clock();
}
static inline double timestamp_span_ms(const struct timestamp *start,
const struct timestamp *end)
{
double res = (end->time - start->time) * 1000;
return res / CLOCKS_PER_SEC;
}
#endif

239
src/3rdparty/argon2/tests/test.c vendored Normal file
View file

@ -0,0 +1,239 @@
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <assert.h>
#include "argon2.h"
#define OUT_LEN 32
#define ENCODED_LEN 108
/* Test harness will assert:
* argon2_hash() returns ARGON2_OK
* HEX output matches expected
* encoded output matches expected
* argon2_verify() correctly verifies value
*/
void hashtest(uint32_t version, uint32_t t, uint32_t m, uint32_t p, char *pwd,
char *salt, char *hexref, char *mcfref) {
unsigned char out[OUT_LEN];
unsigned char hex_out[OUT_LEN * 2 + 4];
char encoded[ENCODED_LEN];
int ret, i;
printf("Hash test: $v=%d t=%d, m=%d, p=%d, pass=%s, salt=%s: ", version,
t, m, p, pwd, salt);
ret = argon2_hash(t, 1 << m, p, pwd, strlen(pwd), salt, strlen(salt), out,
OUT_LEN, encoded, ENCODED_LEN, Argon2_i, version);
assert(ret == ARGON2_OK);
for (i = 0; i < OUT_LEN; ++i)
sprintf((char *)(hex_out + i * 2), "%02x", out[i]);
assert(memcmp(hex_out, hexref, OUT_LEN * 2) == 0);
if (ARGON2_VERSION_NUMBER == version) {
assert(memcmp(encoded, mcfref, strlen(mcfref)) == 0);
}
ret = argon2_verify(encoded, pwd, strlen(pwd), Argon2_i);
assert(ret == ARGON2_OK);
ret = argon2_verify(mcfref, pwd, strlen(pwd), Argon2_i);
assert(ret == ARGON2_OK);
printf("PASS\n");
}
int main() {
int ret;
unsigned char out[OUT_LEN];
char const *msg;
int version;
argon2_select_impl(stderr, "[libargon2] ");
version = ARGON2_VERSION_10;
printf("Test Argon2i version number: %02x\n", version);
/* Multiple test cases for various input values */
hashtest(version, 2, 16, 1, "password", "somesalt",
"f6c4db4a54e2a370627aff3db6176b94a2a209a62c8e36152711802f7b30c694",
"$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ"
"$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ");
#ifdef TEST_LARGE_RAM
hashtest(version, 2, 20, 1, "password", "somesalt",
"9690ec55d28d3ed32562f2e73ea62b02b018757643a2ae6e79528459de8106e9",
"$argon2i$m=1048576,t=2,p=1$c29tZXNhbHQ"
"$lpDsVdKNPtMlYvLnPqYrArAYdXZDoq5ueVKEWd6BBuk");
#endif
hashtest(version, 2, 18, 1, "password", "somesalt",
"3e689aaa3d28a77cf2bc72a51ac53166761751182f1ee292e3f677a7da4c2467",
"$argon2i$m=262144,t=2,p=1$c29tZXNhbHQ"
"$Pmiaqj0op3zyvHKlGsUxZnYXURgvHuKS4/Z3p9pMJGc");
hashtest(version, 2, 8, 1, "password", "somesalt",
"fd4dd83d762c49bdeaf57c47bdcd0c2f1babf863fdeb490df63ede9975fccf06",
"$argon2i$m=256,t=2,p=1$c29tZXNhbHQ"
"$/U3YPXYsSb3q9XxHvc0MLxur+GP960kN9j7emXX8zwY");
hashtest(version, 2, 8, 2, "password", "somesalt",
"b6c11560a6a9d61eac706b79a2f97d68b4463aa3ad87e00c07e2b01e90c564fb",
"$argon2i$m=256,t=2,p=2$c29tZXNhbHQ"
"$tsEVYKap1h6scGt5ovl9aLRGOqOth+AMB+KwHpDFZPs");
hashtest(version, 1, 16, 1, "password", "somesalt",
"81630552b8f3b1f48cdb1992c4c678643d490b2b5eb4ff6c4b3438b5621724b2",
"$argon2i$m=65536,t=1,p=1$c29tZXNhbHQ"
"$gWMFUrjzsfSM2xmSxMZ4ZD1JCytetP9sSzQ4tWIXJLI");
hashtest(version, 4, 16, 1, "password", "somesalt",
"f212f01615e6eb5d74734dc3ef40ade2d51d052468d8c69440a3a1f2c1c2847b",
"$argon2i$m=65536,t=4,p=1$c29tZXNhbHQ"
"$8hLwFhXm6110c03D70Ct4tUdBSRo2MaUQKOh8sHChHs");
hashtest(version, 2, 16, 1, "differentpassword", "somesalt",
"e9c902074b6754531a3a0be519e5baf404b30ce69b3f01ac3bf21229960109a3",
"$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ"
"$6ckCB0tnVFMaOgvlGeW69ASzDOabPwGsO/ISKZYBCaM");
hashtest(version, 2, 16, 1, "password", "diffsalt",
"79a103b90fe8aef8570cb31fc8b22259778916f8336b7bdac3892569d4f1c497",
"$argon2i$m=65536,t=2,p=1$ZGlmZnNhbHQ"
"$eaEDuQ/orvhXDLMfyLIiWXeJFvgza3vaw4kladTxxJc");
/* Error state tests */
/* Handle an invalid encoding correctly (it is missing a $) */
ret = argon2_verify("$argon2i$m=65536,t=2,p=1c29tZXNhbHQ"
"$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ",
"password", strlen("password"), Argon2_i);
assert(ret == ARGON2_DECODING_FAIL);
printf("Recognise an invalid encoding: PASS\n");
/* Handle an invalid encoding correctly (it is missing a $) */
ret = argon2_verify("$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ"
"9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ",
"password", strlen("password"), Argon2_i);
assert(ret == ARGON2_DECODING_FAIL);
printf("Recognise an invalid encoding: PASS\n");
/* Handle an invalid encoding correctly (salt is too short) */
ret = argon2_verify("$argon2i$m=65536,t=2,p=1$"
"$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ",
"password", strlen("password"), Argon2_i);
assert(ret == ARGON2_SALT_TOO_SHORT);
printf("Recognise an invalid salt in encoding: PASS\n");
/* Handle an mismatching hash (the encoded password is "passwore") */
ret = argon2_verify("$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ"
"$b2G3seW+uPzerwQQC+/E1K50CLLO7YXy0JRcaTuswRo",
"password", strlen("password"), Argon2_i);
assert(ret == ARGON2_VERIFY_MISMATCH);
printf("Verify with mismatched password: PASS\n");
msg = argon2_error_message(ARGON2_DECODING_FAIL);
assert(strcmp(msg, "Decoding failed") == 0);
printf("Decode an error message: PASS\n");
printf("\n");
version = ARGON2_VERSION_NUMBER;
printf("Test Argon2i version number: %02x\n", version);
/* Multiple test cases for various input values */
hashtest(version, 2, 16, 1, "password", "somesalt",
"c1628832147d9720c5bd1cfd61367078729f6dfb6f8fea9ff98158e0d7816ed0",
"$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ"
"$wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtA");
#ifdef TEST_LARGE_RAM
hashtest(version, 2, 20, 1, "password", "somesalt",
"d1587aca0922c3b5d6a83edab31bee3c4ebaef342ed6127a55d19b2351ad1f41",
"$argon2i$v=19$m=1048576,t=2,p=1$c29tZXNhbHQ"
"$0Vh6ygkiw7XWqD7asxvuPE667zQu1hJ6VdGbI1GtH0E");
#endif
hashtest(version, 2, 18, 1, "password", "somesalt",
"296dbae80b807cdceaad44ae741b506f14db0959267b183b118f9b24229bc7cb",
"$argon2i$v=19$m=262144,t=2,p=1$c29tZXNhbHQ"
"$KW266AuAfNzqrUSudBtQbxTbCVkmexg7EY+bJCKbx8s");
hashtest(version, 2, 8, 1, "password", "somesalt",
"89e9029f4637b295beb027056a7336c414fadd43f6b208645281cb214a56452f",
"$argon2i$v=19$m=256,t=2,p=1$c29tZXNhbHQ"
"$iekCn0Y3spW+sCcFanM2xBT63UP2sghkUoHLIUpWRS8");
hashtest(version, 2, 8, 2, "password", "somesalt",
"4ff5ce2769a1d7f4c8a491df09d41a9fbe90e5eb02155a13e4c01e20cd4eab61",
"$argon2i$v=19$m=256,t=2,p=2$c29tZXNhbHQ"
"$T/XOJ2mh1/TIpJHfCdQan76Q5esCFVoT5MAeIM1Oq2E");
hashtest(version, 1, 16, 1, "password", "somesalt",
"d168075c4d985e13ebeae560cf8b94c3b5d8a16c51916b6f4ac2da3ac11bbecf",
"$argon2i$v=19$m=65536,t=1,p=1$c29tZXNhbHQ"
"$0WgHXE2YXhPr6uVgz4uUw7XYoWxRkWtvSsLaOsEbvs8");
hashtest(version, 4, 16, 1, "password", "somesalt",
"aaa953d58af3706ce3df1aefd4a64a84e31d7f54175231f1285259f88174ce5b",
"$argon2i$v=19$m=65536,t=4,p=1$c29tZXNhbHQ"
"$qqlT1YrzcGzj3xrv1KZKhOMdf1QXUjHxKFJZ+IF0zls");
hashtest(version, 2, 16, 1, "differentpassword", "somesalt",
"14ae8da01afea8700c2358dcef7c5358d9021282bd88663a4562f59fb74d22ee",
"$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ"
"$FK6NoBr+qHAMI1jc73xTWNkCEoK9iGY6RWL1n7dNIu4");
hashtest(version, 2, 16, 1, "password", "diffsalt",
"b0357cccfbef91f3860b0dba447b2348cbefecadaf990abfe9cc40726c521271",
"$argon2i$v=19$m=65536,t=2,p=1$ZGlmZnNhbHQ"
"$sDV8zPvvkfOGCw26RHsjSMvv7K2vmQq/6cxAcmxSEnE");
/* Error state tests */
/* Handle an invalid encoding correctly (it is missing a $) */
ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1c29tZXNhbHQ"
"$wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtA",
"password", strlen("password"), Argon2_i);
assert(ret == ARGON2_DECODING_FAIL);
printf("Recognise an invalid encoding: PASS\n");
/* Handle an invalid encoding correctly (it is missing a $) */
ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ"
"wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtA",
"password", strlen("password"), Argon2_i);
assert(ret == ARGON2_DECODING_FAIL);
printf("Recognise an invalid encoding: PASS\n");
/* Handle an invalid encoding correctly (salt is too short) */
ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$"
"$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ",
"password", strlen("password"), Argon2_i);
assert(ret == ARGON2_SALT_TOO_SHORT);
printf("Recognise an invalid salt in encoding: PASS\n");
/* Handle an mismatching hash (the encoded password is "passwore") */
ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ"
"$8iIuixkI73Js3G1uMbezQXD0b8LG4SXGsOwoQkdAQIM",
"password", strlen("password"), Argon2_i);
assert(ret == ARGON2_VERIFY_MISMATCH);
printf("Verify with mismatched password: PASS\n");
msg = argon2_error_message(ARGON2_DECODING_FAIL);
assert(strcmp(msg, "Decoding failed") == 0);
printf("Decode an error message: PASS\n");
/* Common error state tests */
printf("\n");
printf("Common error state tests\n");
ret = argon2_hash(2, 1, 1, "password", strlen("password"),
"diffsalt", strlen("diffsalt"),
out, OUT_LEN, NULL, 0, Argon2_i, version);
assert(ret == ARGON2_MEMORY_TOO_LITTLE);
printf("Fail on invalid memory: PASS\n");
ret = argon2_hash(2, 1 << 12, 1, NULL, strlen("password"),
"diffsalt", strlen("diffsalt"),
out, OUT_LEN, NULL, 0, Argon2_i, version);
assert(ret == ARGON2_PWD_PTR_MISMATCH);
printf("Fail on invalid null pointer: PASS\n");
ret = argon2_hash(2, 1 << 12, 1, "password", strlen("password"), "s", 1,
out, OUT_LEN, NULL, 0, Argon2_i, version);
assert(ret == ARGON2_SALT_TOO_SHORT);
printf("Fail on salt too short: PASS\n");
return 0;
}

File diff suppressed because it is too large Load diff

177
src/3rdparty/libcpuid/ALL_BUILD.vcxproj vendored Executable file
View file

@ -0,0 +1,177 @@
<?xml version="1.0" encoding="UTF-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="MinSizeRel|x64">
<Configuration>MinSizeRel</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="RelWithDebInfo|x64">
<Configuration>RelWithDebInfo</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{41B5C062-1E07-35A4-84DC-CD6F52DD81FB}</ProjectGuid>
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
<Keyword>Win32Proj</Keyword>
<Platform>x64</Platform>
<ProjectName>ALL_BUILD</ProjectName>
<VCProjectUpgraderObjectName>NoUpgrade</VCProjectUpgraderObjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Utility</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Utility</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'" Label="Configuration">
<ConfigurationType>Utility</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'" Label="Configuration">
<ConfigurationType>Utility</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Midl>
<AdditionalIncludeDirectories>C:\xmrigCC-deps\msvc2017\openssl\x64\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
<HeaderFileName>%(Filename).h</HeaderFileName>
<TypeLibraryName>%(Filename).tlb</TypeLibraryName>
<InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Midl>
<AdditionalIncludeDirectories>C:\xmrigCC-deps\msvc2017\openssl\x64\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
<HeaderFileName>%(Filename).h</HeaderFileName>
<TypeLibraryName>%(Filename).tlb</TypeLibraryName>
<InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">
<Midl>
<AdditionalIncludeDirectories>C:\xmrigCC-deps\msvc2017\openssl\x64\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
<HeaderFileName>%(Filename).h</HeaderFileName>
<TypeLibraryName>%(Filename).tlb</TypeLibraryName>
<InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">
<Midl>
<AdditionalIncludeDirectories>C:\xmrigCC-deps\msvc2017\openssl\x64\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
<HeaderFileName>%(Filename).h</HeaderFileName>
<TypeLibraryName>%(Filename).tlb</TypeLibraryName>
<InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl>
</ItemDefinitionGroup>
<ItemGroup>
<CustomBuild Include="C:\xmrigCC\src\3rdparty\libcpuid\CMakeLists.txt">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Building Custom Rule C:/xmrigCC/src/3rdparty/libcpuid/CMakeLists.txt</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">setlocal
"C:\Program Files\CMake\bin\cmake.exe" -HC:/xmrigCC -BC:/xmrigCC --check-stamp-file C:/xmrigCC/src/3rdparty/libcpuid/CMakeFiles/generate.stamp
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal &amp; call :cmErrorLevel %errorlevel% &amp; goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:/xmrigCC/src/3rdparty/libcpuid/CMakeLists.txt;C:\xmrigCC\src\3rdparty\libcpuid\CMakeLists.txt;C:\xmrigCC\CMakeFiles\3.10.1\CMakeASM_MASMCompiler.cmake;C:\Program Files\CMake\share\cmake-3.10\Modules\CMakeASM_MASMInformation.cmake;C:\Program Files\CMake\share\cmake-3.10\Modules\CMakeASMInformation.cmake;C:\xmrigCC\src\3rdparty\libcpuid\CMakeLists.txt;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\xmrigCC\src\3rdparty\libcpuid\CMakeFiles\generate.stamp</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkObjects>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Building Custom Rule C:/xmrigCC/src/3rdparty/libcpuid/CMakeLists.txt</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">setlocal
"C:\Program Files\CMake\bin\cmake.exe" -HC:/xmrigCC -BC:/xmrigCC --check-stamp-file C:/xmrigCC/src/3rdparty/libcpuid/CMakeFiles/generate.stamp
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal &amp; call :cmErrorLevel %errorlevel% &amp; goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:/xmrigCC/src/3rdparty/libcpuid/CMakeLists.txt;C:\xmrigCC\src\3rdparty\libcpuid\CMakeLists.txt;C:\xmrigCC\CMakeFiles\3.10.1\CMakeASM_MASMCompiler.cmake;C:\Program Files\CMake\share\cmake-3.10\Modules\CMakeASM_MASMInformation.cmake;C:\Program Files\CMake\share\cmake-3.10\Modules\CMakeASMInformation.cmake;C:\xmrigCC\src\3rdparty\libcpuid\CMakeLists.txt;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\xmrigCC\src\3rdparty\libcpuid\CMakeFiles\generate.stamp</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkObjects>
<Message Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">Building Custom Rule C:/xmrigCC/src/3rdparty/libcpuid/CMakeLists.txt</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">setlocal
"C:\Program Files\CMake\bin\cmake.exe" -HC:/xmrigCC -BC:/xmrigCC --check-stamp-file C:/xmrigCC/src/3rdparty/libcpuid/CMakeFiles/generate.stamp
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal &amp; call :cmErrorLevel %errorlevel% &amp; goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">C:/xmrigCC/src/3rdparty/libcpuid/CMakeLists.txt;C:\xmrigCC\src\3rdparty\libcpuid\CMakeLists.txt;C:\xmrigCC\CMakeFiles\3.10.1\CMakeASM_MASMCompiler.cmake;C:\Program Files\CMake\share\cmake-3.10\Modules\CMakeASM_MASMInformation.cmake;C:\Program Files\CMake\share\cmake-3.10\Modules\CMakeASMInformation.cmake;C:\xmrigCC\src\3rdparty\libcpuid\CMakeLists.txt;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">C:\xmrigCC\src\3rdparty\libcpuid\CMakeFiles\generate.stamp</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">false</LinkObjects>
<Message Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">Building Custom Rule C:/xmrigCC/src/3rdparty/libcpuid/CMakeLists.txt</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">setlocal
"C:\Program Files\CMake\bin\cmake.exe" -HC:/xmrigCC -BC:/xmrigCC --check-stamp-file C:/xmrigCC/src/3rdparty/libcpuid/CMakeFiles/generate.stamp
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal &amp; call :cmErrorLevel %errorlevel% &amp; goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">C:/xmrigCC/src/3rdparty/libcpuid/CMakeLists.txt;C:\xmrigCC\src\3rdparty\libcpuid\CMakeLists.txt;C:\xmrigCC\CMakeFiles\3.10.1\CMakeASM_MASMCompiler.cmake;C:\Program Files\CMake\share\cmake-3.10\Modules\CMakeASM_MASMInformation.cmake;C:\Program Files\CMake\share\cmake-3.10\Modules\CMakeASMInformation.cmake;C:\xmrigCC\src\3rdparty\libcpuid\CMakeLists.txt;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">C:\xmrigCC\src\3rdparty\libcpuid\CMakeFiles\generate.stamp</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">false</LinkObjects>
</CustomBuild>
</ItemGroup>
<ItemGroup>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="C:\xmrigCC\ZERO_CHECK.vcxproj">
<Project>{79F35D7A-33FF-340B-92A8-8AF786AD2ECC}</Project>
<Name>ZERO_CHECK</Name>
</ProjectReference>
<ProjectReference Include="C:\xmrigCC\src\3rdparty\libcpuid\cpuid.vcxproj">
<Project>{E0B67207-4BB4-391B-A040-74A821FC3C28}</Project>
<Name>cpuid</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
</ImportGroup>
</Project>

Some files were not shown because too many files have changed in this diff Show more