diff --git a/.circleci/clang_format.sh b/.circleci/clang_format.sh deleted file mode 100644 index 40201aad..00000000 --- a/.circleci/clang_format.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash -ex - -grep -nr '\s$' src test examples .gitignore .gitmodules 2>&1 > /dev/null -if $?; then - echo Trailing whitespace found, aborting - exit 1 -fi - -# Default clang-format points to default 5.0 version one -CLANG_FORMAT=clang-format-5.0 -$CLANG_FORMAT --version - -#TODO: Create equivlient for CircleCI -#if [ "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then -# # Get list of every file modified in this pull request -# files_to_lint="$(git diff --name-only --diff-filter=ACMRTUXB $TRAVIS_COMMIT_RANGE | grep '^src/[^.]*[.]\(cpp\|h\)$' || true)" -#else - # Check everything for branch pushes - files_to_lint="$(find . -not \( -path ./CMakeFiles -prune \) -not \( -path ./src/lib -prune \) -not \( -path ./test/lib -prune \) -not \( -path ./examples/cmake_example/lib -prune \) -not \( -path ./examples/cmake_example/CMakeFiles -prune \) -not \( -path ./examples/platformio_example -prune \) -name \*.h -o -name \*.cpp)" -#fi - -# Turn off tracing for this because it's too verbose -set +x - -for f in $files_to_lint; do - d=$(diff -u "$f" <($CLANG_FORMAT "$f") || true) - if ! [ -z "$d" ]; then - echo "!!! $f not compliant to coding style, here is the fix:" - echo "$d" - fail=1 - fi -done - -set -x - -if [ "$fail" = 1 ]; then - # Don't fail the build yet - #exit 1 - exit 0 -fi diff --git a/.circleci/clang_tidy.sh b/.circleci/clang_tidy.sh deleted file mode 100644 index b97b592d..00000000 --- a/.circleci/clang_tidy.sh +++ /dev/null @@ -1,16 +0,0 @@ -# run clang tidy -cmake -DENABLE_CLANG_TIDY=ON . -make tidy > output.txt -#if [[ -n $(grep "warning: " output.txt) ]] || [[ -n $(grep "error: " output.txt) ]]; then -# for now only fail the test on errors. Change this as project matures -if [[ -n $(grep "error: " output.txt) ]]; then - echo "You must pass the clang tidy checks before submitting a pull request" - echo "" - grep --color -E '^|warning: |error: ' output.txt - exit -1; -else - # still output the file to show warnings - echo "" - grep --color -E '^|warning: |error: ' output.txt - echo -e "\033[1;32m\xE2\x9C\x93 passed:\033[0m $1"; -fi diff --git a/.circleci/config.yml b/.circleci/config.yml index 67c56785..46d78cb7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -13,116 +13,10 @@ jobs: - run: name: Build command: ./.circleci/script_arduino.sh - build-linux-default: - machine: true - steps: - - checkout - - run: - name: Make scripts executable - command: sudo chmod -R +x ./.circleci/*.sh - - run: - name: Install - command: ./.circleci/install_platform_io.sh - - run: - name: Build - command: ./.circleci/script_platform_io.sh - build-linux-gcc7: - machine: true - steps: - - checkout - - run: - name: Install dependencies - command: | - sudo apt-get remove cmake cmake-data - sudo apt-add-repository -y ppa:ubuntu-toolchain-r/test - sudo apt-add-repository -y ppa:george-edison55/cmake-3.x - sudo apt-get update - sudo apt-get -y install g++-7 gcc-7 lcov cmake - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-7 - sudo update-alternatives --config gcc - - run: - name: Make scripts executable - command: sudo chmod -R +x ./.circleci/*.sh - - - run: - name: Build - command: ./.circleci/script_desktop.sh - - run: - name: Codecov upload - command: bash <(curl -s https://codecov.io/bash) - build-linux-clang-5: - machine: true - steps: - - checkout - - run: - name: Install dependencies - command: | - sudo apt-get remove cmake cmake-data - sudo apt-add-repository -y "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-5.0 main" - sudo apt-add-repository -y ppa:george-edison55/cmake-3.x - sudo apt-get update - sudo apt install python-lldb-5.0 lcov cmake - sudo apt install clang-5.0 clang-tidy-5.0 clang-format-5.0 clang-5.0-doc libclang-common-5.0-dev libclang-5.0-dev libclang1-5.0 libllvm5.0 lldb-5.0 llvm-5.0 llvm-5.0-dev - - sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang-5.0 60 - sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 50 - sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-5.0 60 - sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 50 - - - run: - name: Make scripts executable - command: sudo chmod -R +x ./.circleci/*.sh - - - run: - name: Build - command: ./.circleci/script_desktop.sh - - - run: - name: Clang Tidy - command: ./.circleci/clang_tidy.sh - - - run: - name: Clang Format - command: ./.circleci/clang_format.sh - - build-macos-9-2: - macos: - xcode: "9.2.0" - steps: - - checkout - - run: COMPILER=clang++ - - run: - name: Install dependencies - command: brew install cmake lcov - - run: - name: Make scripts executable - command: sudo chmod -R +x ./.circleci/*.sh - - run: - name: Build - command: ./.circleci/script_desktop.sh - build-macos-9-3: - macos: - xcode: "9.3.0" - steps: - - checkout - - run: - name: Install dependencies - command: brew install cmake lcov - - run: - name: Make scripts executable - command: sudo chmod -R +x ./.circleci/*.sh - - run: - name: Build - command: ./.circleci/script_desktop.sh workflows: version: 2 build: jobs: - build-arduino-default - - build-linux-default - - build-linux-gcc7 - - build-linux-clang-5 - - build-macos-9-2 - - build-macos-9-3 - + \ No newline at end of file diff --git a/.circleci/install_platform_io.sh b/.circleci/install_platform_io.sh deleted file mode 100644 index 080a666a..00000000 --- a/.circleci/install_platform_io.sh +++ /dev/null @@ -1,8 +0,0 @@ -# install PlatformIO -sudo pip install -U platformio - -# update PlatformIO -platformio update - -# ensure all git submodules have bee clone -git submodule update --init --recursive diff --git a/.circleci/script_arduino.sh b/.circleci/script_arduino.sh index 1b9fc6ac..ca5e3769 100644 --- a/.circleci/script_arduino.sh +++ b/.circleci/script_arduino.sh @@ -7,4 +7,4 @@ mv ~/project/* ~/Arduino/libraries/cpp-crypto arduino-cli lib install "ArduinoJson@5.13.4" -arduino-cli compile --output temp.bin -b esp32:esp32:esp32 ~/Arduino/libraries/cpp-crypto/examples/arduino/ESP32/ESP32.ino --debug +arduino-cli compile --output temp.bin -b esp32:esp32:esp32 ~/Arduino/libraries/cpp-crypto/examples/ESP32/ESP32.ino --debug diff --git a/.circleci/script_desktop.sh b/.circleci/script_desktop.sh deleted file mode 100644 index 1b353277..00000000 --- a/.circleci/script_desktop.sh +++ /dev/null @@ -1,12 +0,0 @@ -# run desktop builds -cmake . -DCMAKE_BUILD_TYPE=Coverage -cmake --build . - -# build examples -cd ./examples/cmake_example -cmake . -cmake --build . - -# run Gtest -cd ../../ -./test/Ark-Cpp-Crypto-tests diff --git a/.circleci/script_platform_io.sh b/.circleci/script_platform_io.sh deleted file mode 100644 index da9305f3..00000000 --- a/.circleci/script_platform_io.sh +++ /dev/null @@ -1,3 +0,0 @@ -# run PlatformIO builds -platformio run -platformio run -d ./test diff --git a/.clang-format b/.clang-format deleted file mode 100644 index d3f8d0c6..00000000 --- a/.clang-format +++ /dev/null @@ -1,117 +0,0 @@ ---- -Language: Cpp -# BasedOnStyle: Google -AccessModifierOffset: -1 -AlignAfterOpenBracket: Align -AlignConsecutiveAssignments: false -AlignConsecutiveDeclarations: false -AlignEscapedNewlines: Left -AlignOperands: true -AlignTrailingComments: true -AllowAllParametersOfDeclarationOnNextLine: true -AllowShortBlocksOnASingleLine: false -AllowShortCaseLabelsOnASingleLine: false -AllowShortFunctionsOnASingleLine: Inline -AllowShortIfStatementsOnASingleLine: true -AllowShortLoopsOnASingleLine: true -AlwaysBreakAfterDefinitionReturnType: None -AlwaysBreakAfterReturnType: None -AlwaysBreakBeforeMultilineStrings: true -AlwaysBreakTemplateDeclarations: true -BinPackArguments: true -BinPackParameters: true -BraceWrapping: - AfterClass: false - AfterControlStatement: false - AfterEnum: false - AfterFunction: false - AfterNamespace: false - AfterObjCDeclaration: false - AfterStruct: false - AfterUnion: false - AfterExternBlock: false - BeforeCatch: false - BeforeElse: false - IndentBraces: false - SplitEmptyFunction: true - SplitEmptyRecord: true - SplitEmptyNamespace: true -BreakBeforeBinaryOperators: None -BreakBeforeBraces: Attach -BreakBeforeInheritanceComma: false -BreakBeforeTernaryOperators: true -BreakConstructorInitializersBeforeComma: false -BreakConstructorInitializers: BeforeColon -BreakAfterJavaFieldAnnotations: false -BreakStringLiterals: true -ColumnLimit: 120 -CommentPragmas: '^ IWYU pragma:' -CompactNamespaces: false -ConstructorInitializerAllOnOneLineOrOnePerLine: true -ConstructorInitializerIndentWidth: 4 -ContinuationIndentWidth: 4 -Cpp11BracedListStyle: true -DerivePointerAlignment: true -DisableFormat: false -ExperimentalAutoDetectBinPacking: false -FixNamespaceComments: true -ForEachMacros: - - foreach - - Q_FOREACH - - BOOST_FOREACH -IncludeBlocks: Preserve -IncludeCategories: - - Regex: '^' - Priority: 2 - - Regex: '^<.*\.h>' - Priority: 1 - - Regex: '^<.*' - Priority: 2 - - Regex: '.*' - Priority: 3 -IncludeIsMainRegex: '([-_](test|unittest))?$' -IndentCaseLabels: true -IndentPPDirectives: None -IndentWidth: 2 -IndentWrappedFunctionNames: false -JavaScriptQuotes: Leave -JavaScriptWrapImports: true -KeepEmptyLinesAtTheStartOfBlocks: false -MacroBlockBegin: '' -MacroBlockEnd: '' -MaxEmptyLinesToKeep: 1 -NamespaceIndentation: None -ObjCBlockIndentWidth: 2 -ObjCSpaceAfterProperty: false -ObjCSpaceBeforeProtocolList: false -PenaltyBreakAssignment: 2 -PenaltyBreakBeforeFirstCallParameter: 1 -PenaltyBreakComment: 300 -PenaltyBreakFirstLessLess: 120 -PenaltyBreakString: 1000 -PenaltyExcessCharacter: 1000000 -PenaltyReturnTypeOnItsOwnLine: 200 -PointerAlignment: Left -RawStringFormats: - - Delimiter: pb - Language: TextProto - BasedOnStyle: google -ReflowComments: true -SortIncludes: true -SortUsingDeclarations: true -SpaceAfterCStyleCast: false -SpaceAfterTemplateKeyword: true -SpaceBeforeAssignmentOperators: true -SpaceBeforeParens: ControlStatements -SpaceInEmptyParentheses: false -SpacesBeforeTrailingComments: 2 -SpacesInAngles: false -SpacesInContainerLiterals: true -SpacesInCStyleCastParentheses: false -SpacesInParentheses: false -SpacesInSquareBrackets: false -Standard: Auto -TabWidth: 8 -UseTab: Never -... - diff --git a/.codecov.yml b/.codecov.yml deleted file mode 100644 index e43e15be..00000000 --- a/.codecov.yml +++ /dev/null @@ -1,4 +0,0 @@ -ignore: - - "src/lib" - - "test" - - "extras" diff --git a/.gitattributes b/.gitattributes index 59cd6ed8..a084fcab 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,4 +5,3 @@ /.editorconfig export-ignore /.gitattributes export-ignore /.gitignore export-ignore -/README.md export-ignore diff --git a/.gitignore b/.gitignore index c0ef3129..e9589af5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,74 +1,4 @@ -.DS_Store -/.history -/.vs +/.circleci /.vscode -.pioenvs -.piolibdeps -.vscode/.browse.c_cpp.db* -.vscode/c_cpp_properties.json -.vscode/launch.json -/include/uECC -/lib/ -/bin/ -/src/CMakeFiles -/CMakeFiles -/src/Ark-Cpp-Crypto-lib.dir -/src/cmake_install.cmake -/src/Ark-Cpp-Crypto-lib.vcxproj.filters -/src/Ark-Cpp-Crypto-lib.vcxproj -/src/Ark-Cpp-Crypto-lib.sln -/src/ALL_BUILD.vcxproj.filters -/src/ALL_BUILD.vcxproj -/test/Ark-Cpp-Crypto-tests.dir -/test/CMakeFiles -/test/NightlyMemoryCheck.vcxproj.filters -/test/NightlyMemoryCheck.vcxproj -/test/Nightly.vcxproj.filters -/test/Nightly.vcxproj -/test/Experimental.vcxproj.filters -/test/Experimental.vcxproj -/test/DartConfiguration.tcl -/test/CTestTestfile.cmake -/test/Continuous.vcxproj.filters -/test/Continuous.vcxproj -/test/cmake_install.cmake -/test/Ark-Cpp-Crypto-tests.vcxproj.filters -/test/Ark-Cpp-Crypto-tests.vcxproj -/test/Ark-Cpp-Crypto-tests.sln -/test/ALL_BUILD.vcxproj.filters -/test/ALL_BUILD.vcxproj -/test/INSTALL.vcxproj.filters -/test/INSTALL.vcxproj -/Win32 -/_3rdParty/Hunter -/ZERO_CHECK.vcxproj.filters -/ZERO_CHECK.vcxproj -/cmake_install.cmake -/CMakeCache.txt -/Ark-Cpp-Crypto.sln -/ALL_BUILD.vcxproj.filters -/ALL_BUILD.vcxproj -/src/INSTALL.vcxproj.filters -/src/INSTALL.vcxproj -/INSTALL.vcxproj.filters -/INSTALL.vcxproj -/src/Debug -/test/Debug -/examples/cmake_example/ZERO_CHECK.vcxproj.filters -/examples/cmake_example/Win32/Debug -/examples/cmake_example/cmake_example.vcxproj.filters -/examples/cmake_example/cmake_example.vcxproj -/examples/cmake_example/cmake_example.sln -/examples/cmake_example/cmake_example.dir/Debug -/examples/cmake_example/Debug -/examples/cmake_example/cmake_install.cmake -/examples/cmake_example/CMakeFiles -/examples/cmake_example/CMakeCache.txt -/examples/cmake_example/ALL_BUILD.vcxproj.filters -/examples/cmake_example/ALL_BUILD.vcxproj -/examples/cmake_example/ZERO_CHECK.vcxproj -/examples/cmake_example/Cpp-Crypto-Example.dir/Debug -/examples/cmake_example/Cpp-Crypto-Example.vcxproj.filters -/examples/cmake_example/Cpp-Crypto-Example.vcxproj -/examples/cmake_example/Cpp-Crypto-Example.sln +.DS_Store diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 164236c2..00000000 --- a/.gitmodules +++ /dev/null @@ -1,12 +0,0 @@ -[submodule "src/lib/uECC"] - path = src/lib/uECC - url = https://github.com/kmackay/micro-ecc -[submodule "src/lib/bip39"] - path = src/lib/bip39 - url = https://github.com/ciband/bip39.git -[submodule "test/lib/googletest"] - path = test/lib/googletest - url = https://github.com/google/googletest.git -[submodule "src/lib/ArduinoJson"] - path = src/lib/ArduinoJson - url = https://github.com/bblanchon/ArduinoJson diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index d116fc67..00000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,59 +0,0 @@ -cmake_minimum_required(VERSION 3.2) -project(Ark-Cpp-Crypto) - -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_CXX_STANDARD 11) - -set(CMAKE_INSTALL_PREFIX ${PROJECT_SOURCE_DIR}) - -if (MSVC) - add_definitions( - -D_CRT_SECURE_NO_WARNINGS - -D_SCL_SECURE_NO_WARNINGS - -DNOMINMAX - ) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") -endif() - -# clone submodules -execute_process( - COMMAND git submodule update --init --recursive - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} -) - -# ------------------------------------------------------------------------------ -# Clang Tidy -# ------------------------------------------------------------------------------ - -if(ENABLE_CLANG_TIDY) - - find_program(CLANG_TIDY_BIN clang-tidy-5.0) - find_program(RUN_CLANG_TIDY_BIN run-clang-tidy-5.0.py) - - if(CLANG_TIDY_BIN STREQUAL "CLANG_TIDY_BIN-NOTFOUND") - message(FATAL_ERROR "unable to locate clang-tidy-5.0") - endif() - - if(RUN_CLANG_TIDY_BIN STREQUAL "RUN_CLANG_TIDY_BIN-NOTFOUND") - message(FATAL_ERROR "unable to locate run-clang-tidy-5.0.py") - endif() - - list(APPEND RUN_CLANG_TIDY_BIN_ARGS - -clang-tidy-binary ${CLANG_TIDY_BIN} - -header-filter=.* - -checks=clan*,cert*,misc*,perf*,cppc*,read*,mode*,-cert-err58-cpp,-misc-noexcept-move-constructor,-cppcoreguidelines-* - ) - - add_custom_target( - tidy - COMMAND ${RUN_CLANG_TIDY_BIN} ${RUN_CLANG_TIDY_BIN_ARGS} - COMMENT "running clang tidy" - ) - -endif() - -add_subdirectory(src) -add_subdirectory(test) - diff --git a/cmake/CodeCoverage.cmake b/cmake/CodeCoverage.cmake deleted file mode 100644 index 71fd6b27..00000000 --- a/cmake/CodeCoverage.cmake +++ /dev/null @@ -1,204 +0,0 @@ -# Copyright (c) 2012 - 2015, Lars Bilke -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, -# are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its contributors -# may be used to endorse or promote products derived from this software without -# specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# -# -# 2012-01-31, Lars Bilke -# - Enable Code Coverage -# -# 2013-09-17, Joakim SΓΆderberg -# - Added support for Clang. -# - Some additional usage instructions. -# -# USAGE: - -# 0. (Mac only) If you use Xcode 5.1 make sure to patch geninfo as described here: -# http://stackoverflow.com/a/22404544/80480 -# -# 1. Copy this file into your cmake modules path. -# -# 2. Add the following line to your CMakeLists.txt: -# INCLUDE(CodeCoverage) -# -# 3. Set compiler flags to turn off optimization and enable coverage: -# SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") -# SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") -# -# 3. Use the function SETUP_TARGET_FOR_COVERAGE to create a custom make target -# which runs your test executable and produces a lcov code coverage report: -# Example: -# SETUP_TARGET_FOR_COVERAGE( -# my_coverage_target # Name for custom target. -# test_driver # Name of the test driver executable that runs the tests. -# # NOTE! This should always have a ZERO as exit code -# # otherwise the coverage generation will not complete. -# coverage # Name of output directory. -# ) -# -# 4. Build a Debug build: -# cmake -DCMAKE_BUILD_TYPE=Debug .. -# make -# make my_coverage_target -# -# - -# Check prereqs -FIND_PROGRAM( GCOV_PATH gcov ) -FIND_PROGRAM( LCOV_PATH lcov ) -FIND_PROGRAM( GENHTML_PATH genhtml ) -FIND_PROGRAM( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/tests) - -IF(NOT GCOV_PATH) - MESSAGE(FATAL_ERROR "gcov not found! Aborting...") -ENDIF() # NOT GCOV_PATH - -IF("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") - IF("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3) - MESSAGE(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...") - ENDIF() -ELSEIF(NOT CMAKE_COMPILER_IS_GNUCXX) - MESSAGE(FATAL_ERROR "Compiler is not GNU gcc! Aborting...") -ENDIF() # CHECK VALID COMPILER - -SET(CMAKE_CXX_FLAGS_COVERAGE - "-g -O0 --coverage -fprofile-arcs -ftest-coverage" - CACHE STRING "Flags used by the C++ compiler during coverage builds." - FORCE ) -SET(CMAKE_C_FLAGS_COVERAGE - "-g -O0 --coverage -fprofile-arcs -ftest-coverage" - CACHE STRING "Flags used by the C compiler during coverage builds." - FORCE ) -SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE - "" - CACHE STRING "Flags used for linking binaries during coverage builds." - FORCE ) -SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE - "" - CACHE STRING "Flags used by the shared libraries linker during coverage builds." - FORCE ) -MARK_AS_ADVANCED( - CMAKE_CXX_FLAGS_COVERAGE - CMAKE_C_FLAGS_COVERAGE - CMAKE_EXE_LINKER_FLAGS_COVERAGE - CMAKE_SHARED_LINKER_FLAGS_COVERAGE ) - -IF ( NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "Coverage")) - MESSAGE( WARNING "Code coverage results with an optimized (non-Debug) build may be misleading" ) -ENDIF() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug" - - -# Param _targetname The name of new the custom make target -# Param _testrunner The name of the target which runs the tests. -# MUST return ZERO always, even on errors. -# If not, no coverage report will be created! -# Param _outputname lcov output is generated as _outputname.info -# HTML report is generated in _outputname/index.html -# Optional fourth parameter is passed as arguments to _testrunner -# Pass them in list form, e.g.: "-j;2" for -j 2 -FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _testrunner _outputname) - - IF(NOT LCOV_PATH) - MESSAGE(FATAL_ERROR "lcov not found! Aborting...") - ENDIF() # NOT LCOV_PATH - - IF(NOT GENHTML_PATH) - MESSAGE(FATAL_ERROR "genhtml not found! Aborting...") - ENDIF() # NOT GENHTML_PATH - - SET(coverage_info "${CMAKE_BINARY_DIR}/${_outputname}.info") - SET(coverage_cleaned "${coverage_info}.cleaned") - - SEPARATE_ARGUMENTS(test_command UNIX_COMMAND "${_testrunner}") - - # Setup target - ADD_CUSTOM_TARGET(${_targetname} - - # Cleanup lcov - ${LCOV_PATH} --directory . --zerocounters - - # Run tests - COMMAND ${test_command} ${ARGV3} - - COMMAND lcov --version - COMMAND gcov --version - COMMAND g++ --version - - # Capturing lcov counters and generating report - COMMAND ${LCOV_PATH} --directory . --base-directory . --capture --output-file coverage.info - COMMAND ${LCOV_PATH} --remove coverage.info '/usr*' '*/test/*' '*/ext/*' -o coverage.info - - #COMMAND ${LCOV_PATH} --directory . --capture --output-file ${coverage_info} - #COMMAND ${LCOV_PATH} --remove ${coverage_info} 'tests/*' '/usr/*' --output-file ${coverage_cleaned} - #COMMAND ${GENHTML_PATH} -o ${_outputname} ${coverage_cleaned} - #COMMAND ${CMAKE_COMMAND} -E remove ${coverage_info} ${coverage_cleaned} - - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." - ) - - # Show info where to find the report - #ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD - # COMMAND ; - # COMMENT "Open ./${_outputname}/index.html in your browser to view the coverage report." - #) - -ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE - -# Param _targetname The name of new the custom make target -# Param _testrunner The name of the target which runs the tests -# Param _outputname cobertura output is generated as _outputname.xml -# Optional fourth parameter is passed as arguments to _testrunner -# Pass them in list form, e.g.: "-j;2" for -j 2 -FUNCTION(SETUP_TARGET_FOR_COVERAGE_COBERTURA _targetname _testrunner _outputname) - - IF(NOT PYTHON_EXECUTABLE) - MESSAGE(FATAL_ERROR "Python not found! Aborting...") - ENDIF() # NOT PYTHON_EXECUTABLE - - IF(NOT GCOVR_PATH) - MESSAGE(FATAL_ERROR "gcovr not found! Aborting...") - ENDIF() # NOT GCOVR_PATH - - ADD_CUSTOM_TARGET(${_targetname} - - # Run tests - ${_testrunner} ${ARGV3} - - # Running gcovr - COMMAND ${GCOVR_PATH} -x -r ${CMAKE_SOURCE_DIR} -e '${CMAKE_SOURCE_DIR}/tests/' -o ${_outputname}.xml - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Running gcovr to produce Cobertura code coverage report." - ) - - # Show info where to find the report - ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD - COMMAND ; - COMMENT "Cobertura code coverage report saved in ${_outputname}.xml." - ) - -ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE_COBERTURA diff --git a/docs/INSTALL_OS.md b/docs/INSTALL_OS.md deleted file mode 100644 index 12105191..00000000 --- a/docs/INSTALL_OS.md +++ /dev/null @@ -1,33 +0,0 @@ - - -# OS Builds - -### dependencies - -**CMake:** -> Use an installer package from the following link: -> ```https://www.cmake.org/download/``` - -or -**Homebrew:** -> `brew install cmake` - -# - -> note: all other dependencies will be automatically installed via CMake and Hunter Package Manager. - -# - -### make and build -**`cd`** into **`.../cpp-crypto/`** -then run the following commands: -> init & update micro-ecc submodule ->`git submodule init && git submodule update` - -> make and build -> `cmake . && cmake --build .` - -# - -### run tests -> `./bin/Ark-Cpp-Crypto-tests` diff --git a/docs/INSTALL_PLATFORMIO.md b/docs/INSTALL_PLATFORMIO.md deleted file mode 100644 index 1dad9614..00000000 --- a/docs/INSTALL_PLATFORMIO.md +++ /dev/null @@ -1,39 +0,0 @@ - - -# PlatformIO - -### dependencies - -**Python:** -Use an installer package from the following link: -> ```https://www.python.org/downloads/``` - -# - -**PlatformIO:** -install PlatformIO if not already installed -> ```pip install -U platformio``` -or -> ```python -c "$(curl -fsSL > https://raw.githubusercontent.com/platformio/platformio/develop/scripts/get-platformio.py)"``` - - -also install platformio dependencies: -> install AUnit (2778), micro-ecc (1665) bip39 (5886) ArduinoJson@5.13.4 libraries ->```platformio lib -g install 2778 1665 5886 ArduinoJson@5.13.4``` - -# - -### running the tests on an Arduino board using PlatformIO - -**`cd` into this directory "*.../Cpp-Crypto/test*"** -> ```cd test``` - -**execute the following command to upload test to your board** - ->| board | command | ->|:-- |:-- | ->| ESP8266 | ```pio run -e esp8266 -t upload``` | ->| ESP32 | ```pio run -e esp32 -t upload``` | - -> ^ the above runs the tests rooted in the following file: -> "*.../cpp-crypto/test/IoT/test_main.cpp*" diff --git a/examples/arduino/ESP32/ESP32.ino b/examples/ESP32/ESP32.ino similarity index 100% rename from examples/arduino/ESP32/ESP32.ino rename to examples/ESP32/ESP32.ino diff --git a/examples/arduino/ESP8266/ESP8266.ino b/examples/ESP8266/ESP8266.ino similarity index 100% rename from examples/arduino/ESP8266/ESP8266.ino rename to examples/ESP8266/ESP8266.ino diff --git a/examples/cmake_example/.gitmodules b/examples/cmake_example/.gitmodules deleted file mode 100644 index 8ed2845c..00000000 --- a/examples/cmake_example/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "lib/cpp-crypto"] - path = lib/cpp-crypto - url = https://github.com/ArkEcosystem/cpp-crypto.git diff --git a/examples/cmake_example/CMakeLists.txt b/examples/cmake_example/CMakeLists.txt deleted file mode 100644 index c1834a43..00000000 --- a/examples/cmake_example/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -cmake_minimum_required(VERSION 3.2) -project(Cpp-Crypto-Example) - -set(CMAKE_CXX_STANDARD 11) - -set(CMAKE_INSTALL_PREFIX ${PROJECT_SOURCE_DIR}) - -if (MSVC) - add_definitions( - -D_CRT_SECURE_NO_WARNINGS - -D_SCL_SECURE_NO_WARNINGS - -DNOMINMAX - ) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") -endif() - -# clone submodules -execute_process( - COMMAND git submodule update --init --recursive - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} -) - -add_subdirectory(lib/cpp-crypto/src) - -set(SOURCE_FILES main.cpp) - -add_executable(${PROJECT_NAME} ${SOURCE_FILES}) -target_link_libraries(${PROJECT_NAME} Ark-Cpp-Crypto-lib) - diff --git a/examples/cmake_example/CMakeSettings.json b/examples/cmake_example/CMakeSettings.json deleted file mode 100644 index 4ecdae92..00000000 --- a/examples/cmake_example/CMakeSettings.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "configurations": [ - { - "name": "x86-Debug", - "generator": "Visual Studio 15 2017", - "configurationType": "Debug", - "inheritEnvironments": [ "msvc_x86" ], - "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", - "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "" - }, - { - "name": "x86-Release", - "generator": "Visual Studio 15 2017", - "configurationType": "Release", - "inheritEnvironments": [ "msvc_x86" ], - "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", - "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "" - }, - { - "name": "x64-Debug", - "generator": "Visual Studio 15 2017 Win64", - "configurationType": "Debug", - "inheritEnvironments": [ "msvc_x64_x64" ], - "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", - "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "" - }, - { - "name": "x64-Release", - "generator": "Visual Studio 15 2017 Win64", - "configurationType": "Release", - "inheritEnvironments": [ "msvc_x64_x64" ], - "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", - "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "" - }, - { - "name": "Linux-Debug", - "generator": "Unix Makefiles", - "remoteMachineName": "${defaultRemoteMachineName}", - "configurationType": "Debug", - "remoteCMakeListsRoot": "/var/tmp/src/${workspaceHash}/${name}", - "cmakeExecutable": "/usr/local/bin/cmake", - "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", - "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", - "remoteBuildRoot": "/var/tmp/build/${workspaceHash}/build/${name}", - "remoteInstallRoot": "/var/tmp/build/${workspaceHash}/install/${name}", - "remoteCopySources": true, - "remoteCopySourcesOutputVerbosity": "Normal", - "remoteCopySourcesConcurrentCopies": "10", - "remoteCopySourcesMethod": "sftp", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "", - "inheritEnvironments": [ "linux-x64" ] - }, - { - "name": "Linux-Release", - "generator": "Unix Makefiles", - "remoteMachineName": "${defaultRemoteMachineName}", - "configurationType": "Release", - "remoteCMakeListsRoot": "/var/tmp/src/${workspaceHash}/${name}", - "cmakeExecutable": "/usr/local/bin/cmake", - "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", - "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", - "remoteBuildRoot": "/var/tmp/build/${workspaceHash}/build/${name}", - "remoteInstallRoot": "/var/tmp/build/${workspaceHash}/install/${name}", - "remoteCopySources": true, - "remoteCopySourcesOutputVerbosity": "Normal", - "remoteCopySourcesConcurrentCopies": "10", - "remoteCopySourcesMethod": "sftp", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "", - "inheritEnvironments": [ "linux-x64" ] - } - ] -} \ No newline at end of file diff --git a/examples/cmake_example/lib/put-cpp-crypto-folder-here b/examples/cmake_example/lib/put-cpp-crypto-folder-here deleted file mode 100644 index e69de29b..00000000 diff --git a/examples/cmake_example/main.cpp b/examples/cmake_example/main.cpp deleted file mode 100644 index 240df745..00000000 --- a/examples/cmake_example/main.cpp +++ /dev/null @@ -1,112 +0,0 @@ -#include "arkCrypto.h" - -#include -#include -#include -#include - -int main(int argc, char* argv[]) { - const auto text = "Computer science is no more about computers than astronomy is about telescopes."; - const auto passphrase = "viable weasel wage promote praise inflict jaguar tackle color unusual exclude direct"; - - // Message - sign - Ark::Crypto::Utils::Message message; - message.sign(text, passphrase); - - std::cout << "Message\n"; - std::cout << "\tText: " << text << '\n'; - std::cout << "\tPassphrase: " << passphrase << '\n'; - std::cout << "\tJson: " << message.toJson() << '\n'; - std::cout << '\n'; - - // Message - verify - auto publicKey = PublicKey::fromHex("0275776018638e5c40f1b922901e96cac2caa734585ef302b4a2801ee9a338a456"); - auto signature = HexToBytes("3044022021704f2adb2e4a10a3ddc1d7d64552b8061c05f6d12a168c69091c75581d611402200edf37689d2786fc690af9f0f6fa1f629c95695039f648a6d455484302402e93"); - - message = Ark::Crypto::Utils::Message( - text, - publicKey, - signature - ); - - std::cout << "Message\n"; - std::cout << "\tJson: " << message.toJson() << '\n'; - std::cout << "\tVerified: " << std::boolalpha << message.verify() << '\n'; - std::cout << '\n'; - - // Mnemonic - const auto new_passphrase = Ark::Crypto::Identities::Mnemonic::generate(); - std::cout << "Generated Mnemonic: " << new_passphrase << '\n'; - std::cout << '\n'; - - // Address - from passphrase - const uint8_t networkVersion = 0x1E; - auto address = Address::fromPassphrase(passphrase, networkVersion); - std::cout << "Address from passphrase\n"; - std::cout << "\tPassphrase: " << passphrase << '\n'; - std::cout << "\tNetwork Version: 0x" << std::hex << static_cast(networkVersion) << '\n'; - std::cout << "\tAddress: " << address.toString() << '\n'; - std::cout << '\n'; - - // Address - from publickey - publicKey = PublicKey("029fdf41a7d69d8efc7b236c21b9509a23d862ea4ed8b13a56e31eee58dbfd97b4"); - address = Address::fromPublicKey(publicKey, networkVersion); - std::cout << "Address from public key\n"; - std::cout << "\tPublic Key: " << publicKey.toString() << '\n'; - std::cout << "\tAddress: " << address.toString() << '\n'; - std::cout << '\n'; - - // Address - from privatekey - PrivateKey privateKey("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021"); - address = Address::fromPrivateKey(privateKey, networkVersion); - std::cout << "Address from private key\n"; - std::cout << "\tPrivate Key: " << privateKey.toString() << '\n'; - std::cout << "\tAddress: " << address.toString() << '\n'; - std::cout << '\n'; - - // Address - validate - address = Address("DStZXkgpEjxbG355nQ26vnkp95p24U9tsV"); - auto isValidAddress = Address::validate(address, networkVersion); - std::cout << "Valid Address\n"; - std::cout << "\tAddress: " << address.toString() << '\n'; - std::cout << "\t Valid Address: " << std::boolalpha << isValidAddress << '\n'; - std::cout << '\n'; - - // Private Key - from passphrase - privateKey = PrivateKey::fromPassphrase(passphrase); - std::cout << "Private Key from passprase\n"; - std::cout << "\tPassphrase: " << passphrase << '\n'; - std::cout << "\tPrivate Key: " << privateKey.toString() << '\n'; - std::cout << '\n'; - - // Private Key - object from hex - privateKey = PrivateKey::fromHex("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021"); - std::cout << "Private Key from hex\n"; - std::cout << "\tHex: 950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021\n"; - std::cout << "\tPrivate Key: " << privateKey.toString() << '\n'; - std::cout << '\n'; - - // Public Key - from passphrase - publicKey = PublicKey::fromPassphrase(passphrase); - std::cout << "Public Key from passprase\n"; - std::cout << "\tPassphrase: " << passphrase << '\n'; - std::cout << "\tPublic Key: " << publicKey.toString() << '\n'; - std::cout << '\n'; - - // Public Key - object from hex - publicKey = PublicKey::fromHex("029fdf41a7d69d8efc7b236c21b9509a23d862ea4ed8b13a56e31eee58dbfd97b4"); - std::cout << "Public Key from hex\n"; - std::cout << "\tHex: 029fdf41a7d69d8efc7b236c21b9509a23d862ea4ed8b13a56e31eee58dbfd97b4\n"; - std::cout << "\tPublic Key: " << publicKey.toString() << '\n'; - std::cout << '\n'; - - // WIF - from passphrase - const uint8_t wifByte = 0xaa; - auto wif = WIF::fromPassphrase(passphrase, wifByte); - std::cout << "WIF from passphrase\n"; - std::cout << "\tPassphrase: " << passphrase << '\n'; - std::cout << "\tWIF Byte: 0x" << std::hex << static_cast(wifByte) << '\n'; - std::cout << "\tWIF: " << wif.toString() << std::endl; - - return 0; -} diff --git a/examples/platformio_example/platformio.ini b/examples/platformio_example/platformio.ini deleted file mode 100644 index 10720046..00000000 --- a/examples/platformio_example/platformio.ini +++ /dev/null @@ -1,26 +0,0 @@ -; PlatformIO Project Configuration File -; -; Build options: build flags, source filter -; Upload options: custom upload port, speed and extra flags -; Library options: dependencies, extra library storages -; Advanced options: extra scripting -; -; Please visit documentation for the other options and examples -; http://docs.platformio.org/page/projectconf.html - - -[platformio] - -[env:esp8266] -lib_deps = Ark-Cpp-Crypto -platform = espressif8266 -board = huzzah -framework = arduino -upload_speed = 921600 - -[env:esp32] -lib_deps = Ark-Cpp-Crypto -platform = espressif32 -board = esp32dev -framework = arduino -upload_speed = 921600 diff --git a/examples/platformio_example/src/main.ino b/examples/platformio_example/src/main.ino deleted file mode 100644 index 729bbdf6..00000000 --- a/examples/platformio_example/src/main.ino +++ /dev/null @@ -1,119 +0,0 @@ -#include "arkCrypto.h" - -#include -#include -#include - -#include - -void setup() { - Serial.begin(115200); - - while (!Serial) { delay(100); }; - // ^for the Arduino Leonardo/Micro only -} - -void loop() { - const auto text = "Computer science is no more about computers than astronomy is about telescopes."; - const auto passphrase = "viable weasel wage promote praise inflict jaguar tackle color unusual exclude direct"; - - // Message - sign - Ark::Crypto::Utils::Message message; - message.sign(text, passphrase); - - Serial.println("Message"); - Serial.print("\tText: "); Serial.print(text); Serial.println(); - Serial.print("\tPassphrase: "); Serial.print(passphrase); Serial.println(); - Serial.print("\tJson: "); Serial.print(message.toJson().c_str()); Serial.println(); - Serial.println(); - - // Message - verify - auto publicKey = PublicKey::fromHex("0275776018638e5c40f1b922901e96cac2caa734585ef302b4a2801ee9a338a456"); - auto signature = HexToBytes("3044022021704f2adb2e4a10a3ddc1d7d64552b8061c05f6d12a168c69091c75581d611402200edf37689d2786fc690af9f0f6fa1f629c95695039f648a6d455484302402e93"); - - message = Ark::Crypto::Utils::Message( - text, - publicKey, - signature - ); - - Serial.println("Message"); - Serial.print("\tJson: "); Serial.print(message.toJson().c_str()); Serial.println(); - Serial.print("\tVerified: "); Serial.print(message.verify()); Serial.println(); - Serial.println(); - - // Mnemonic - const auto new_passphrase = Ark::Crypto::Identities::Mnemonic::generate(); - Serial.print("Generated Mnemonic: "); Serial.print(new_passphrase.c_str()); Serial.println(); - Serial.println(); - - // Address - from passphrase - const uint8_t networkVersion = 0x1E; - auto address = Address::fromPassphrase(passphrase, networkVersion); - Serial.println("Address from passphrase"); - Serial.print("\tPassphrase: "); Serial.print(passphrase); Serial.println(); - Serial.print("\tNetwork Version: 0x"); Serial.print(static_cast(networkVersion)); Serial.println(); - Serial.print("\tAddress: "); Serial.print(address.toString().c_str()); Serial.println(); - Serial.println(); - - // Address - from publickey - publicKey = PublicKey("029fdf41a7d69d8efc7b236c21b9509a23d862ea4ed8b13a56e31eee58dbfd97b4"); - address = Address::fromPublicKey(publicKey, networkVersion); - Serial.println("Address from public key"); - Serial.print("\tPublic Key: "); Serial.print(publicKey.toString().c_str()); Serial.println(); - Serial.print("\tAddress: "); Serial.print(address.toString().c_str()); Serial.println(); - Serial.println(); - - // Address - from privatekey - PrivateKey privateKey("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021"); - address = Address::fromPrivateKey(privateKey, networkVersion); - Serial.println("Address from private key"); - Serial.print("\tPrivate Key: "); Serial.print(privateKey.toString().c_str()); Serial.println(); - Serial.print("\tAddress: "); Serial.print(address.toString().c_str()); Serial.println(); - Serial.println(); - - // Address - validate - address = Address("DStZXkgpEjxbG355nQ26vnkp95p24U9tsV"); - auto isValidAddress = Address::validate(address, networkVersion); - Serial.println("Valid Address"); - Serial.print("\tAddress: "); Serial.print(address.toString().c_str()); Serial.println(); - Serial.print("\t Valid Address: "); Serial.print(isValidAddress); Serial.println(); - Serial.println(); - - // Private Key - from passphrase - privateKey = PrivateKey::fromPassphrase(passphrase); - Serial.println("Private Key from passprase"); - Serial.print("\tPassphrase: "); Serial.print(passphrase); Serial.println(); - Serial.print("\tPrivate Key: "); Serial.print(privateKey.toString().c_str()); Serial.println(); - Serial.println(); - - // Private Key - object from hex - privateKey = PrivateKey::fromHex("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021"); - Serial.println("Private Key from hex"); - Serial.println("\tHex: 950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021"); - Serial.print("\tPrivate Key: "); Serial.print(privateKey.toString().c_str()); Serial.println(); - Serial.println(); - - // Public Key - from passphrase - publicKey = PublicKey::fromPassphrase(passphrase); - Serial.println("Public Key from passprase"); - Serial.print("\tPassphrase: "); Serial.print(passphrase); Serial.println(); - Serial.print("\tPublic Key: "); Serial.print(publicKey.toString().c_str()); Serial.println(); - Serial.println(); - - // Public Key - object from hex - publicKey = PublicKey::fromHex("029fdf41a7d69d8efc7b236c21b9509a23d862ea4ed8b13a56e31eee58dbfd97b4"); - Serial.println("Public Key from hex"); - Serial.println("\tHex: 029fdf41a7d69d8efc7b236c21b9509a23d862ea4ed8b13a56e31eee58dbfd97b4"); - Serial.print("\tPublic Key: "); Serial.print(publicKey.toString().c_str()); Serial.println(); - Serial.println(); - - // WIF - from passphrase - const uint8_t wifByte = 0xaa; - auto wif = WIF::fromPassphrase(passphrase, wifByte); - Serial.println("WIF from passphrase"); - Serial.print("\tPassphrase: "); Serial.print(passphrase); Serial.println(); - Serial.print("\tWIF Byte: "); Serial.print(static_cast(wifByte)); Serial.println(); - Serial.print("\tWIF: "); Serial.print(wif.toString().c_str()); Serial.println(); - -} diff --git a/extras/ARDUINO_IDE.sh b/extras/ARDUINO_IDE.sh deleted file mode 100644 index d296f211..00000000 --- a/extras/ARDUINO_IDE.sh +++ /dev/null @@ -1,246 +0,0 @@ -#!/usr/bin/env bash -# This file is part of Ark Cpp Crypto. -# -# (c) Ark Ecosystem -# -# For the full copyright and license information, please view the LICENSE -# file that was distributed with this source code. - -# ######### -# This script extends support to the Arduino IDE. -# -# The Arduino IDE doesn't support extending its search path outside of the 'src' folder. -# The Ark Cpp-Crypto SDK exposes its public interface via the 'include' folder. -# -# This script moves the headers from 'include' into their relative directories in the 'src' folder; -# it then delete the 'include' folder. -# -# Additionally, once this script has been ran, it can be executed again to undo these changes. -# (i.e. recreates the directory tree and moves headers back to 'include'.) -# ######### - -# Flags -# You can skip the interface by passing '--auto'; eg 'bash ARDUINO_IDE.sh -auto' -AUTO='0' -if [ "$1" == "--auto" ]; then - AUTO='1' -fi - -# Directories -EXTRAS_DIR=`dirname "$0"` -PROJECT_ROOT=${EXTRAS_DIR}/../ -INCLUDE_DIR=${EXTRAS_DIR}/../src/include -INCLUDE_CRYPTO_DIR=${INCLUDE_DIR}/cpp-crypto -SRC_DIR=${EXTRAS_DIR}/../src - -EXTRAS_BACKUP_DIR=${EXTRAS_DIR}/BACKUP - -SRC_LIB_DIR=${SRC_DIR}/lib -EXTRAS_LIB_DIR=${EXTRAS_BACKUP_DIR}/lib - -EXTRAS_IDENTITIES_DIR=${EXTRAS_BACKUP_DIR}/identities - -INCLUDE_CONFIGURATION_DIR=${INCLUDE_CRYPTO_DIR}/configuration -SRC_CONFIGURATION_DIR=${SRC_DIR}/configuration - -INCLUDE_ENUMS_DIR=${INCLUDE_CRYPTO_DIR}/enums -SRC_ENUMS_DIR=${SRC_DIR}/enums - -INCLUDE_HELPERS_DIR=${INCLUDE_CRYPTO_DIR}/helpers -SRC_HELPERS_DIR=${SRC_DIR}/helpers - -INCLUDE_ENCODING_DIR=${INCLUDE_HELPERS_DIR}/encoding -SRC_ENCODING_DIR=${SRC_HELPERS_DIR}/encoding - -INCLUDE_IDENTITIES_DIR=${INCLUDE_CRYPTO_DIR}/identities -SRC_IDENTITIES_DIR=${SRC_DIR}/identities - -INCLUDE_NETWORKS_DIR=${INCLUDE_CRYPTO_DIR}/networks -SRC_NETWORKS_DIR=${SRC_DIR}/networks - -INCLUDE_TRANSACTIONS_DIR=${INCLUDE_CRYPTO_DIR}/transactions -SRC_TRANSACTIONS_DIR=${SRC_DIR}/transactions - -if [[ $AUTO == '0' ]]; then - -# Interface -echo -e "\n\nπŸ‘‹ Welcome Aboard 🚒\n\n" -sleep 1 - -if [[ -d ${INCLUDE_DIR} ]]; then - echo -e "πŸ€– This script extends compatibility to the Arduino IDE πŸ€–\n" - sleep 1 - echo -e "πŸ’ͺ All header files will be moved to their 'src' folders πŸ’ͺ\n" - sleep 1 -else - echo -e "πŸ€– Looks like this library was already converted to support the Arduino IDE πŸ€–\n" - sleep 1 - echo -e "πŸ’ͺ All header files will be moved back to the 'include' folder πŸ’ͺ\n" - sleep 1 -fi - -echo -e "\nπŸ›‘ These changes are permanent, any unsaved changes will be lost πŸ›‘\n" -sleep 2 - -# Prompts for continuation -read -p "⚠️ Are you sure you want to continue? (Y/n):" -n 1 -r -echo -if [[ ${REPLY} =~ ^[Nn]$ ]]; then - echo -e "\n\nπŸ‘Œ Exiting script...\nNo Changes were made πŸ‘\n\n"; - exit 0; -else - echo -e "\n\nπŸ‘Œ Let's go!\n"; -fi - -fi # /if [[ ${AUTO} ]]; then - -if [[ -d ${INCLUDE_DIR} ]]; then - # This will run if headers are in the 'include' directory tree. - echo -e "****************************************\n" - echo -e "Moving 'arkCrypto.h' to 'src' directory.\n" - mv ${INCLUDE_CRYPTO_DIR}/arkCrypto.h ${SRC_DIR} - - echo -e "Moving 'configuration' headers.\n" - mv ${INCLUDE_CONFIGURATION_DIR}/fee.h ${SRC_CONFIGURATION_DIR} - mv ${INCLUDE_CONFIGURATION_DIR}/network.h ${SRC_CONFIGURATION_DIR} - - echo "Creating 'enums' folder πŸ—‚" - mkdir ${SRC_ENUMS_DIR} - - echo -e "Moving 'enums' headers.\n" - mv ${INCLUDE_ENUMS_DIR}/fees.h ${SRC_ENUMS_DIR} - mv ${INCLUDE_ENUMS_DIR}/types.h ${SRC_ENUMS_DIR} - - echo -e "Moving 'helpers' headers.\n" - mv ${INCLUDE_HELPERS_DIR}/encoding/der.h ${SRC_HELPERS_DIR}/encoding - mv ${INCLUDE_HELPERS_DIR}/encoding/hex.h ${SRC_HELPERS_DIR}/encoding - - ## 'bip39' library is not supported in Arduino - echo -e "Backing up and removing 'mnemonic.h'.\n" - mkdir ${EXTRAS_BACKUP_DIR} - mkdir ${EXTRAS_IDENTITIES_DIR} - mv ${INCLUDE_IDENTITIES_DIR}/mnemonic.h ${EXTRAS_IDENTITIES_DIR} - mv ${SRC_IDENTITIES_DIR}/mnemonic.cpp ${EXTRAS_IDENTITIES_DIR} - echo "// this is a dummy file" >> ${SRC_IDENTITIES_DIR}/mnemonic.h - echo "// this is a dummy file" >> ${SRC_IDENTITIES_DIR}/mnemonic.cpp - - echo -e "Moving 'identites' headers.\n" - mv ${INCLUDE_IDENTITIES_DIR}/address.h ${SRC_IDENTITIES_DIR} - mv ${INCLUDE_IDENTITIES_DIR}/privatekey.h ${SRC_IDENTITIES_DIR} - mv ${INCLUDE_IDENTITIES_DIR}/publickey.h ${SRC_IDENTITIES_DIR} - mv ${INCLUDE_IDENTITIES_DIR}/wif.h ${SRC_IDENTITIES_DIR} - - echo -e "Moving 'networks' headers.\n" - mv ${INCLUDE_NETWORKS_DIR}/abstractnetwork.h ${SRC_NETWORKS_DIR} - mv ${INCLUDE_NETWORKS_DIR}/devnet.h ${SRC_NETWORKS_DIR} - mv ${INCLUDE_NETWORKS_DIR}/mainnet.h ${SRC_NETWORKS_DIR} - mv ${INCLUDE_NETWORKS_DIR}/testnet.h ${SRC_NETWORKS_DIR} - - echo -e "Moving 'transactions' headers.\n" - mv ${INCLUDE_TRANSACTIONS_DIR}/builder.h ${SRC_TRANSACTIONS_DIR} - mv ${INCLUDE_TRANSACTIONS_DIR}/deserializer.h ${SRC_TRANSACTIONS_DIR} - mv ${INCLUDE_TRANSACTIONS_DIR}/serializer.h ${SRC_TRANSACTIONS_DIR} - mv ${INCLUDE_TRANSACTIONS_DIR}/transaction.h ${SRC_TRANSACTIONS_DIR} - - echo -e "Backing up, moving, and removing relevant modules from the 'lib' directory.\n" - mv ${SRC_LIB_DIR}/ArduinoJson ${EXTRAS_BACKUP_DIR} - mv ${SRC_LIB_DIR}/bip39 ${EXTRAS_BACKUP_DIR} - mv ${SRC_LIB_DIR}/uECC ${EXTRAS_BACKUP_DIR} - mv ${SRC_LIB_DIR}/bcl ${SRC_DIR} - mv ${SRC_LIB_DIR}/date ${SRC_DIR} - mv ${SRC_LIB_DIR}/rfc6979 ${SRC_DIR} - mv ${SRC_LIB_DIR}/stl ${SRC_DIR} - - echo -e "Moving Docs to the './extras' directory.\n" - mv ${PROJECT_ROOT}/docs ${EXTRAS_DIR} - - echo -e "Removing old directories πŸ—‘\n" - rm -rf ${INCLUDE_DIR} - rm -rf ${SRC_LIB_DIR} - - echo -e "****************************************\n" - - echo -e "\nAll Done!\nπŸ‘πŸ‘πŸ‘πŸ‘πŸ‘\n" - echo -e "\nYou can now use Cpp-Crypto with the Arduino IDE πŸ‘\n\n" - exit 0 - -else - # This will run if headers are already in the 'src' directory tree. - echo -e "****************************************\n" - - echo -e "Creating the 'include' directory tree πŸ—‚\n" - mkdir ${INCLUDE_DIR} - mkdir ${INCLUDE_CRYPTO_DIR} - mkdir ${INCLUDE_CONFIGURATION_DIR} - mkdir ${INCLUDE_ENUMS_DIR} - mkdir ${INCLUDE_HELPERS_DIR} - mkdir ${INCLUDE_ENCODING_DIR} - mkdir ${INCLUDE_IDENTITIES_DIR} - mkdir ${INCLUDE_NETWORKS_DIR} - mkdir ${INCLUDE_TRANSACTIONS_DIR} - - echo -e "Moving 'arkCrypto.h' back to the 'include/cpp-crypto/' directory.\n" - mv ${SRC_DIR}/arkCrypto.h ${INCLUDE_CRYPTO_DIR} - - echo -e "Moving 'configuration' headers.\n" - mv ${SRC_CONFIGURATION_DIR}/fee.h ${INCLUDE_CONFIGURATION_DIR} - mv ${SRC_CONFIGURATION_DIR}/network.h ${INCLUDE_CONFIGURATION_DIR} - - echo -e "Moving 'enums' headers.\n" - mv ${SRC_ENUMS_DIR}/fees.h ${INCLUDE_ENUMS_DIR} - mv ${SRC_ENUMS_DIR}/types.h ${INCLUDE_ENUMS_DIR} - - echo -e "Moving 'helpers/encoding' headers.\n" - mv ${SRC_ENCODING_DIR}/hex.h ${INCLUDE_ENCODING_DIR} - - echo -e "Moving 'identities' headers.\n" - mv ${SRC_IDENTITIES_DIR}/address.h ${INCLUDE_IDENTITIES_DIR} - mv ${SRC_IDENTITIES_DIR}/mnemonic.h ${INCLUDE_IDENTITIES_DIR} - mv ${SRC_IDENTITIES_DIR}/privatekey.h ${INCLUDE_IDENTITIES_DIR} - mv ${SRC_IDENTITIES_DIR}/publickey.h ${INCLUDE_IDENTITIES_DIR} - mv ${SRC_IDENTITIES_DIR}/wif.h ${INCLUDE_IDENTITIES_DIR} - - echo -e "Moving 'networks' headers.\n" - mv ${SRC_NETWORKS_DIR}/abstractnetwork.h ${INCLUDE_NETWORKS_DIR} - mv ${SRC_NETWORKS_DIR}/devnet.h ${INCLUDE_NETWORKS_DIR} - mv ${SRC_NETWORKS_DIR}/mainnet.h ${INCLUDE_NETWORKS_DIR} - mv ${SRC_NETWORKS_DIR}/testnet.h ${INCLUDE_NETWORKS_DIR} - - echo -e "Moving 'transactions' headers.\n" - mv ${SRC_TRANSACTIONS_DIR}/builder.h ${INCLUDE_TRANSACTIONS_DIR} - mv ${SRC_TRANSACTIONS_DIR}/deserializer.h ${INCLUDE_TRANSACTIONS_DIR} - mv ${SRC_TRANSACTIONS_DIR}/serializer.h ${INCLUDE_TRANSACTIONS_DIR} - mv ${SRC_TRANSACTIONS_DIR}/transaction.h ${INCLUDE_TRANSACTIONS_DIR} - - ## 'bip39' library is not supported in Arduino - echo -e "Restoring 'mnemonic.h'.\n" - rm -rf ${SRC_IDENTITIES_DIR}/mnemonic.h - rm -rf ${SRC_IDENTITIES_DIR}/mnemonic.cpp - mv ${EXTRAS_IDENTITIES_DIR}/mnemonic.h ${INCLUDE_IDENTITIES_DIR} - mv ${EXTRAS_IDENTITIES_DIR}/mnemonic.cpp ${SRC_IDENTITIES_DIR} - rm -rf ${EXTRAS_IDENTITIES_DIR}/mnemonic.cpp - - echo -e "Restoring the 'lib' directory.\n" - mkdir ${SRC_LIB_DIR} - mv ${EXTRAS_BACKUP_DIR}/ArduinoJson ${SRC_LIB_DIR} - mv ${EXTRAS_BACKUP_DIR}/bip39 ${SRC_LIB_DIR} - mv ${EXTRAS_BACKUP_DIR}/uECC ${SRC_LIB_DIR} - mv ${SRC_DIR}/bcl ${SRC_LIB_DIR} - mv ${SRC_DIR}/date ${SRC_LIB_DIR} - mv ${SRC_DIR}/rfc6979 ${SRC_LIB_DIR} - mv ${SRC_DIR}/stl ${SRC_LIB_DIR} - - echo -e "Moving Docs back to the project root directory.\n" - mv ${EXTRAS_DIR}/docs ${PROJECT_ROOT} - - echo -e "Removing old directories πŸ—‘\n" - rm -rf ${SRC_ENUMS_DIR} - rm -rf ${EXTRAS_BACKUP_DIR} - - echo -e "****************************************\n" - - echo -e "\nAll Done!\nπŸ‘πŸ‘πŸ‘πŸ‘πŸ‘\n" - echo -e "\nArduino IDE compatibility has been reverted πŸ‘\n\n" - exit 0 - -fi diff --git a/docs/INSTALL_ARDUINO.MD b/extras/docs/INSTALL_ARDUINO.MD similarity index 100% rename from docs/INSTALL_ARDUINO.MD rename to extras/docs/INSTALL_ARDUINO.MD diff --git a/docs/cpp.md b/extras/docs/cpp.md similarity index 85% rename from docs/cpp.md rename to extras/docs/cpp.md index ed031d48..cdf32d5f 100644 --- a/docs/cpp.md +++ b/extras/docs/cpp.md @@ -4,18 +4,10 @@ title: "Cpp" # Cpp -::: warning -This project is still under development. This page will get more content as the project evolves. In the meantime you can view its source on [Github](https://github.com/ArkEcosystem/cpp-crypto/). -::: - [[toc]] -## Installation -* [Arduino](#Arduino) -* [Linux >= 16.04](#OS) -* [macOS >= 10.10](#OS) -* [Windows >= 7](#OS) - +## Installation +* [Arduino](#Arduino) ### Sign @@ -68,18 +60,6 @@ message.verify(); ## Identities -### Passphrase - -#### Generate a default passphrase with 12 words in English -```cpp -const auto passphrase = Ark::Crypto::Identies::Mnemonic::generate(); -``` - -#### Generate a passphrase with the given language and 24 words -```cpp -const auto passphrase = Ark::Crypto::Identies::Mnemonic::generate(24, Ark::Crypto::Identies::Language::en); -``` - ### Address #### Get an address from a passphrase @@ -144,16 +124,16 @@ const uint8_t wifByte = 0xaa; WIF wif = WIF::fromPassphrase(passphrase, wifByte); ``` -# +# # Arduino -**Arduino IDE:** -Download and install the Arduino IDE (>=1.8.5) from the following link: +**Arduino IDE:** +Download and install the Arduino IDE (>=1.8.5) from the following link: ```https://www.arduino.cc/en/Main/Software``` -Using the Arduino IDE's built in Library Manager, -install the following Libraries: -```micro-ecc``` +Using the Arduino IDE's built in Library Manager, +install the following Libraries: +```micro-ecc``` ```AUnit``` #### Ensure all git submodules have been cloned @@ -207,11 +187,11 @@ void setup() void loop() {} ``` -**PlatformIO IDE:** +**PlatformIO IDE:** -#### Python: -Use an installer package from the following link or use your preferred method to install Python: -```https://www.python.org/downloads/``` +#### Python: +Use an installer package from the following link or use your preferred method to install Python: +```https://www.python.org/downloads/``` Install PlatformIO: @@ -234,7 +214,7 @@ Install AUnit (2778), micro-ecc (1665) cd test -#### execute the following command to upload test to your board +#### execute the following command to upload test to your board >| board | command | >|:-- |:-- | @@ -246,20 +226,20 @@ Install AUnit (2778), micro-ecc (1665) # OS ## Linux, macOS and Windows -**CMake:** +**CMake:** -Use an installer package from the following link, Homebrew, or use your preferred method: +Use an installer package from the following link, Homebrew, or use your preferred method: ```https://www.cmake.org/download/``` using -**Homebrew:** +**Homebrew:** brew install cmake > note: all other dependencies will be automatically installed via CMake and Hunter Package Manager. ### make and build - cd cpp-crypto + cd cpp-crypto cmake . && cmake --build . ### run tests (Linux, macOS) diff --git a/keywords.txt b/keywords.txt index 88450489..98cd5e48 100644 --- a/keywords.txt +++ b/keywords.txt @@ -22,7 +22,6 @@ Fees KEYWORD1 Types KEYWORD1 Address KEYWORD1 -Mnemonic KEYWORD1 PrivateKey KEYWORD1 PublicKey KEYWORD1 WIF KEYWORD1 diff --git a/lib/readme.txt b/lib/readme.txt deleted file mode 100644 index 131f1bfd..00000000 --- a/lib/readme.txt +++ /dev/null @@ -1,41 +0,0 @@ - -This directory is intended for the project specific (private) libraries. -PlatformIO will compile them to static libraries and link to executable file. - -The source code of each library should be placed in separate directory, like -"lib/private_lib/[here are source files]". - -For example, see how can be organized `Foo` and `Bar` libraries: - -|--lib -| | -| |--Bar -| | |--docs -| | |--examples -| | |--src -| | |- Bar.c -| | |- Bar.h -| | |- library.json (optional, custom build options, etc) http://docs.platformio.org/page/librarymanager/config.html -| | -| |--Foo -| | |- Foo.c -| | |- Foo.h -| | -| |- readme.txt --> THIS FILE -| -|- platformio.ini -|--src - |- main.c - -Then in `src/main.c` you should use: - -#include -#include - -// rest H/C/CPP code - -PlatformIO will find your libraries automatically, configure preprocessor's -include paths and build them. - -More information about PlatformIO Library Dependency Finder -- http://docs.platformio.org/page/librarymanager/ldf.html diff --git a/library.json b/library.json index 5e5873b6..305e1aac 100644 --- a/library.json +++ b/library.json @@ -7,7 +7,7 @@ "type": "git", "url": "https://github.com/ArkEcosystem/Cpp-Crypto.git" }, - "version": "0.3.0", + "version": "0.3.0-arduino", "authors": [ { "name": "Ark Ecosystem", @@ -21,9 +21,6 @@ { "name": "micro-ecc" }, - { - "name": "bip39" - }, { "name": "ArduinoJson" } @@ -40,14 +37,6 @@ "LICENSE", "*.ini", "keywords.txt" - ], - "exclude": [ - "*/*.txt" - ] - }, - "build": { - "flags": [ - "-I src/include/cpp-crypto" ] } } diff --git a/library.properties b/library.properties index 9f1c3ddf..600bff5d 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Ark-Cpp-Crypto -version=0.3.0 +version=0.3.0-arduino author=Ark Ecosystem maintainer=Ark Ecosystem sentence=A simple Cryptography Implementation in C++ for the ARK Blockchain. diff --git a/platformio.ini b/platformio.ini deleted file mode 100644 index 406cb8d4..00000000 --- a/platformio.ini +++ /dev/null @@ -1,40 +0,0 @@ -; PlatformIO Project Configuration File -; -; Build options: build flags, source filter -; Upload options: custom upload port, speed and extra flags -; Library options: dependencies, extra library storages -; Advanced options: extra scripting -; -; Please visit documentation for the other options and examples -; http://docs.platformio.org/page/projectconf.html - -[platformio] -description = "A simple Cryptography Implementation in C++ for the ARK Blockchain." - -[common] -lib_ldf_mode = off -lib_deps = micro-ecc, bip39@^1.1, ArduinoJson -build_flags = -I./src/ -I./src/lib -I./src/include/cpp-crypto -src_filter = +<*> -<.git/> - - - - - -upload_speed = 921600 - -[env:esp8266] -platform = espressif8266 -board = huzzah -framework = arduino -lib_ldf_mode = ${common.lib_ldf_mode} -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} -src_filter = ${common.src_filter} -upload_speed = ${common.upload_speed} - -[env:esp32] -platform = espressif32 -board = esp32dev -framework = arduino -lib_ldf_mode = ${common.lib_ldf_mode} -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} -src_filter = ${common.src_filter} -upload_speed = ${common.upload_speed} - diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt deleted file mode 100644 index efca42da..00000000 --- a/src/CMakeLists.txt +++ /dev/null @@ -1,71 +0,0 @@ - -cmake_minimum_required(VERSION 3.2.2) - -project(Ark-Cpp-Crypto-lib C CXX) - -add_subdirectory(lib/bip39/src) - -set(BCL_SRC - lib/bcl/Base58Check.cpp - lib/bcl/CurvePoint.cpp - lib/bcl/Ecdsa.cpp - lib/bcl/FieldInt.cpp - lib/bcl/Ripemd160.cpp - lib/bcl/Sha256Hash.cpp - lib/bcl/Sha256.cpp - lib/bcl/Sha512.cpp - lib/bcl/Uint256.cpp - lib/bcl/Utils.cpp -) - -set(uECC_SRC - lib/uECC/uECC.c -) - -set(COMMON_SRC - configuration/fee.cpp - configuration/network.cpp - helpers/crypto.cpp - helpers/encoding/der.cpp - identities/address.cpp - identities/mnemonic.cpp - identities/privatekey.cpp - identities/publickey.cpp - identities/wif.cpp - networks/abstractnetwork.cpp - transactions/builder.cpp - transactions/deserializer.cpp - transactions/serializer.cpp - transactions/transaction.cpp - utils/message.cpp - utils/slot.cpp -) - -add_library(${PROJECT_NAME} - STATIC - ${BCL_SRC} - ${uECC_SRC} - ${COMMON_SRC} -) - -set(cpp_crypto_build_include_dirs - ${PROJECT_SOURCE_DIR} - ${PROJECT_SOURCE_DIR}/include/cpp-crypto -) -include_directories(${cpp_crypto_build_include_dirs}) -include_directories(${PROJECT_SOURCE_DIR}/lib/) -include_directories(${PROJECT_SOURCE_DIR}/lib/ArduinoJson) -include_directories(${PROJECT_SOURCE_DIR}/lib/bcl) -include_directories(${PROJECT_SOURCE_DIR}/lib/bip39) -include_directories(${PROJECT_SOURCE_DIR}/lib/rfc6979) -include_directories(${PROJECT_SOURCE_DIR}/lib/uECC) - -target_include_directories( ${PROJECT_NAME} - PUBLIC ${cpp_crypto_build_include_dirs} -) - -target_link_libraries(${PROJECT_NAME} PRIVATE bip39) - -if (MSVC) - target_link_libraries(${PROJECT_NAME} PUBLIC crypt32) -endif() diff --git a/src/include/cpp-crypto/arkCrypto.h b/src/arkCrypto.h similarity index 97% rename from src/include/cpp-crypto/arkCrypto.h rename to src/arkCrypto.h index ff9f56b9..17f23742 100644 --- a/src/include/cpp-crypto/arkCrypto.h +++ b/src/arkCrypto.h @@ -22,7 +22,6 @@ #include "enums/types.h" #include "identities/address.h" -#include "identities/mnemonic.h" #include "identities/privatekey.h" #include "identities/publickey.h" #include "identities/wif.h" diff --git a/src/lib/bcl/Base58Check.cpp b/src/bcl/Base58Check.cpp similarity index 100% rename from src/lib/bcl/Base58Check.cpp rename to src/bcl/Base58Check.cpp diff --git a/src/lib/bcl/Base58Check.hpp b/src/bcl/Base58Check.hpp similarity index 100% rename from src/lib/bcl/Base58Check.hpp rename to src/bcl/Base58Check.hpp diff --git a/src/lib/bcl/CurvePoint.cpp b/src/bcl/CurvePoint.cpp similarity index 100% rename from src/lib/bcl/CurvePoint.cpp rename to src/bcl/CurvePoint.cpp diff --git a/src/lib/bcl/CurvePoint.hpp b/src/bcl/CurvePoint.hpp similarity index 100% rename from src/lib/bcl/CurvePoint.hpp rename to src/bcl/CurvePoint.hpp diff --git a/src/lib/bcl/Ecdsa.cpp b/src/bcl/Ecdsa.cpp similarity index 100% rename from src/lib/bcl/Ecdsa.cpp rename to src/bcl/Ecdsa.cpp diff --git a/src/lib/bcl/Ecdsa.hpp b/src/bcl/Ecdsa.hpp similarity index 100% rename from src/lib/bcl/Ecdsa.hpp rename to src/bcl/Ecdsa.hpp diff --git a/src/lib/bcl/FieldInt.cpp b/src/bcl/FieldInt.cpp similarity index 100% rename from src/lib/bcl/FieldInt.cpp rename to src/bcl/FieldInt.cpp diff --git a/src/lib/bcl/FieldInt.hpp b/src/bcl/FieldInt.hpp similarity index 100% rename from src/lib/bcl/FieldInt.hpp rename to src/bcl/FieldInt.hpp diff --git a/src/lib/bcl/Ripemd160.cpp b/src/bcl/Ripemd160.cpp similarity index 100% rename from src/lib/bcl/Ripemd160.cpp rename to src/bcl/Ripemd160.cpp diff --git a/src/lib/bcl/Ripemd160.hpp b/src/bcl/Ripemd160.hpp similarity index 100% rename from src/lib/bcl/Ripemd160.hpp rename to src/bcl/Ripemd160.hpp diff --git a/src/lib/bcl/Sha256.cpp b/src/bcl/Sha256.cpp similarity index 100% rename from src/lib/bcl/Sha256.cpp rename to src/bcl/Sha256.cpp diff --git a/src/lib/bcl/Sha256.hpp b/src/bcl/Sha256.hpp similarity index 100% rename from src/lib/bcl/Sha256.hpp rename to src/bcl/Sha256.hpp diff --git a/src/lib/bcl/Sha256Hash.cpp b/src/bcl/Sha256Hash.cpp similarity index 100% rename from src/lib/bcl/Sha256Hash.cpp rename to src/bcl/Sha256Hash.cpp diff --git a/src/lib/bcl/Sha256Hash.hpp b/src/bcl/Sha256Hash.hpp similarity index 100% rename from src/lib/bcl/Sha256Hash.hpp rename to src/bcl/Sha256Hash.hpp diff --git a/src/lib/bcl/Sha512.cpp b/src/bcl/Sha512.cpp similarity index 100% rename from src/lib/bcl/Sha512.cpp rename to src/bcl/Sha512.cpp diff --git a/src/lib/bcl/Sha512.hpp b/src/bcl/Sha512.hpp similarity index 100% rename from src/lib/bcl/Sha512.hpp rename to src/bcl/Sha512.hpp diff --git a/src/lib/bcl/Uint256.cpp b/src/bcl/Uint256.cpp similarity index 100% rename from src/lib/bcl/Uint256.cpp rename to src/bcl/Uint256.cpp diff --git a/src/lib/bcl/Uint256.hpp b/src/bcl/Uint256.hpp similarity index 100% rename from src/lib/bcl/Uint256.hpp rename to src/bcl/Uint256.hpp diff --git a/src/lib/bcl/Utils.cpp b/src/bcl/Utils.cpp similarity index 100% rename from src/lib/bcl/Utils.cpp rename to src/bcl/Utils.cpp diff --git a/src/lib/bcl/Utils.hpp b/src/bcl/Utils.hpp similarity index 100% rename from src/lib/bcl/Utils.hpp rename to src/bcl/Utils.hpp diff --git a/src/include/cpp-crypto/configuration/fee.h b/src/configuration/fee.h similarity index 100% rename from src/include/cpp-crypto/configuration/fee.h rename to src/configuration/fee.h diff --git a/src/include/cpp-crypto/configuration/network.h b/src/configuration/network.h similarity index 100% rename from src/include/cpp-crypto/configuration/network.h rename to src/configuration/network.h diff --git a/src/lib/date/date.h b/src/date/date.h similarity index 100% rename from src/lib/date/date.h rename to src/date/date.h diff --git a/src/include/cpp-crypto/enums/fees.h b/src/enums/fees.h similarity index 100% rename from src/include/cpp-crypto/enums/fees.h rename to src/enums/fees.h diff --git a/src/include/cpp-crypto/enums/types.h b/src/enums/types.h similarity index 100% rename from src/include/cpp-crypto/enums/types.h rename to src/enums/types.h diff --git a/src/include/cpp-crypto/helpers/encoding/der.h b/src/helpers/encoding/der.h similarity index 100% rename from src/include/cpp-crypto/helpers/encoding/der.h rename to src/helpers/encoding/der.h diff --git a/src/include/cpp-crypto/helpers/encoding/hex.h b/src/helpers/encoding/hex.h similarity index 100% rename from src/include/cpp-crypto/helpers/encoding/hex.h rename to src/helpers/encoding/hex.h diff --git a/src/include/cpp-crypto/identities/address.h b/src/identities/address.h similarity index 100% rename from src/include/cpp-crypto/identities/address.h rename to src/identities/address.h diff --git a/src/identities/mnemonic.cpp b/src/identities/mnemonic.cpp deleted file mode 100644 index d3bffc76..00000000 --- a/src/identities/mnemonic.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/** - * This file is part of Ark Cpp Crypto. - * - * (c) Ark Ecosystem - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - **/ - -#include "identities/mnemonic.h" - -#include "bip39/bip39.h" - -#include - -namespace Ark { -namespace Crypto { -namespace Identities { - -std::string Mnemonic::generate(size_t num_words /* = 12u */, Language language /* = Language::en */) { - static const std::map words_to_entropy = {{12, BIP39::entropy_bits_t::_128}, - {15, BIP39::entropy_bits_t::_160}, - {18, BIP39::entropy_bits_t::_192}, - {21, BIP39::entropy_bits_t::_224}, - {24, BIP39::entropy_bits_t::_256}}; - static const std::map language_map = { - {Language::en, BIP39::language::en}, {Language::es, BIP39::language::es}, - {Language::ja, BIP39::language::ja}, {Language::it, BIP39::language::it}, - {Language::fr, BIP39::language::fr}, {Language::ko, BIP39::language::ko}, - {Language::zh_Hans, BIP39::language::zh_Hans}, {Language::zh_Hant, BIP39::language::zh_Hant}}; - - const auto entropy_it = words_to_entropy.find(num_words); - assert(entropy_it != words_to_entropy.end()); - - const auto lang = language_map.find(language); - assert(lang != language_map.end()); - - return BIP39::generate_mnemonic(entropy_it->second, lang->second).to_string(); -} - -} // namespace Identities -} // namespace Crypto -} // namespace Ark diff --git a/src/include/cpp-crypto/identities/privatekey.h b/src/identities/privatekey.h similarity index 100% rename from src/include/cpp-crypto/identities/privatekey.h rename to src/identities/privatekey.h diff --git a/src/include/cpp-crypto/identities/publickey.h b/src/identities/publickey.h similarity index 100% rename from src/include/cpp-crypto/identities/publickey.h rename to src/identities/publickey.h diff --git a/src/include/cpp-crypto/identities/wif.h b/src/identities/wif.h similarity index 100% rename from src/include/cpp-crypto/identities/wif.h rename to src/identities/wif.h diff --git a/src/include/cpp-crypto/identities/mnemonic.h b/src/include/cpp-crypto/identities/mnemonic.h deleted file mode 100644 index 831a1988..00000000 --- a/src/include/cpp-crypto/identities/mnemonic.h +++ /dev/null @@ -1,30 +0,0 @@ -/** - * This file is part of Ark Cpp Crypto. - * - * (c) Ark Ecosystem - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - **/ - -#ifndef MNEMONIC_H -#define MNEMONIC_H - -#include - -namespace Ark { -namespace Crypto { -namespace Identities { - -enum class Language { en, es, ja, it, fr, ko, zh_Hans, zh_Hant }; - -class Mnemonic { - public: - /// Generate a BIP39 passphrase with the given number of words (12,15,18,21,24) and given language - static std::string generate(size_t num_words = 12u, Language language = Language::en); -}; - -} // namespace Identities -} // namespace Crypto -} // namespace Ark -#endif diff --git a/src/lib/ArduinoJson b/src/lib/ArduinoJson deleted file mode 160000 index 0685a36f..00000000 --- a/src/lib/ArduinoJson +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0685a36f0e51ba71b96c441697e0432ed2a6b176 diff --git a/src/lib/bip39 b/src/lib/bip39 deleted file mode 160000 index ea4224e8..00000000 --- a/src/lib/bip39 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ea4224e8055210f2578a862ce00fee7429fabeba diff --git a/src/lib/uECC b/src/lib/uECC deleted file mode 160000 index 601bd110..00000000 --- a/src/lib/uECC +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 601bd11062c551b108adbb43ba99f199b840777c diff --git a/src/include/cpp-crypto/networks/abstractnetwork.h b/src/networks/abstractnetwork.h similarity index 100% rename from src/include/cpp-crypto/networks/abstractnetwork.h rename to src/networks/abstractnetwork.h diff --git a/src/include/cpp-crypto/networks/devnet.h b/src/networks/devnet.h similarity index 100% rename from src/include/cpp-crypto/networks/devnet.h rename to src/networks/devnet.h diff --git a/src/include/cpp-crypto/networks/mainnet.h b/src/networks/mainnet.h similarity index 100% rename from src/include/cpp-crypto/networks/mainnet.h rename to src/networks/mainnet.h diff --git a/src/include/cpp-crypto/networks/testnet.h b/src/networks/testnet.h similarity index 100% rename from src/include/cpp-crypto/networks/testnet.h rename to src/networks/testnet.h diff --git a/src/lib/rfc6979/rfc6979.h b/src/rfc6979/rfc6979.h similarity index 100% rename from src/lib/rfc6979/rfc6979.h rename to src/rfc6979/rfc6979.h diff --git a/src/lib/stl/array b/src/stl/array similarity index 100% rename from src/lib/stl/array rename to src/stl/array diff --git a/src/lib/stl/cassert b/src/stl/cassert similarity index 100% rename from src/lib/stl/cassert rename to src/stl/cassert diff --git a/src/lib/stl/cctype b/src/stl/cctype similarity index 100% rename from src/lib/stl/cctype rename to src/stl/cctype diff --git a/src/lib/stl/cstddef b/src/stl/cstddef similarity index 100% rename from src/lib/stl/cstddef rename to src/stl/cstddef diff --git a/src/lib/stl/cstdint b/src/stl/cstdint similarity index 100% rename from src/lib/stl/cstdint rename to src/stl/cstdint diff --git a/src/lib/stl/cstdio b/src/stl/cstdio similarity index 100% rename from src/lib/stl/cstdio rename to src/stl/cstdio diff --git a/src/lib/stl/cstring b/src/stl/cstring similarity index 100% rename from src/lib/stl/cstring rename to src/stl/cstring diff --git a/src/lib/stl/details/to_string.h b/src/stl/details/to_string.h similarity index 100% rename from src/lib/stl/details/to_string.h rename to src/stl/details/to_string.h diff --git a/src/lib/stl/memory b/src/stl/memory similarity index 100% rename from src/lib/stl/memory rename to src/stl/memory diff --git a/src/include/cpp-crypto/transactions/builder.h b/src/transactions/builder.h similarity index 100% rename from src/include/cpp-crypto/transactions/builder.h rename to src/transactions/builder.h diff --git a/src/include/cpp-crypto/transactions/deserializer.h b/src/transactions/deserializer.h similarity index 100% rename from src/include/cpp-crypto/transactions/deserializer.h rename to src/transactions/deserializer.h diff --git a/src/include/cpp-crypto/transactions/serializer.h b/src/transactions/serializer.h similarity index 100% rename from src/include/cpp-crypto/transactions/serializer.h rename to src/transactions/serializer.h diff --git a/src/include/cpp-crypto/transactions/transaction.h b/src/transactions/transaction.h similarity index 100% rename from src/include/cpp-crypto/transactions/transaction.h rename to src/transactions/transaction.h diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt deleted file mode 100644 index 5739a897..00000000 --- a/test/CMakeLists.txt +++ /dev/null @@ -1,59 +0,0 @@ -cmake_minimum_required(VERSION 3.2.2) - -project(Ark-Cpp-Crypto-tests C CXX) - -set(BUILD_GMOCK OFF FORCE) - -add_subdirectory(lib/googletest) - -include(CTest) -enable_testing() - -set (PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/../include) -set (PROJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../lib") - -include_directories(${PROJECT_SOURCE_DIR}/../src) -include_directories(${PROJECT_SOURCE_DIR}/../src/lib) -include_directories(${PROJECT_SOURCE_DIR}/../src/lib/ArduinoJson) -include_directories(${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) - -set (TEST_SRC - ${PROJECT_SOURCE_DIR}/configuration/fee.cpp - ${PROJECT_SOURCE_DIR}/configuration/network.cpp - ${PROJECT_SOURCE_DIR}/enums/fees.cpp - ${PROJECT_SOURCE_DIR}/enums/types.cpp - ${PROJECT_SOURCE_DIR}/helpers/encoding/der.cpp - ${PROJECT_SOURCE_DIR}/identities/address.cpp - ${PROJECT_SOURCE_DIR}/identities/mnemonic.cpp - ${PROJECT_SOURCE_DIR}/identities/privatekey.cpp - ${PROJECT_SOURCE_DIR}/identities/publickey.cpp - ${PROJECT_SOURCE_DIR}/identities/wif.cpp - ${PROJECT_SOURCE_DIR}/networks/abstractnetwork.cpp - ${PROJECT_SOURCE_DIR}/networks/devnet.cpp - ${PROJECT_SOURCE_DIR}/networks/mainnet.cpp - ${PROJECT_SOURCE_DIR}/networks/testnet.cpp - ${PROJECT_SOURCE_DIR}/transactions/builder.cpp - ${PROJECT_SOURCE_DIR}/transactions/deserializer.cpp - ${PROJECT_SOURCE_DIR}/transactions/serializer.cpp - ${PROJECT_SOURCE_DIR}/transactions/transaction.cpp - ${PROJECT_SOURCE_DIR}/utils/message.cpp - ${PROJECT_SOURCE_DIR}/utils/slot.cpp -) - -find_library(Ark-Cpp-Crypto-tests PUBLIC) - -add_executable(Ark-Cpp-Crypto-tests ${TEST_SRC}) - -target_link_libraries(Ark-Cpp-Crypto-tests Ark-Cpp-Crypto-lib gtest gtest_main) - -add_test(NAME test COMMAND Ark-Cpp-Crypto-tests) - -if (CMAKE_BUILD_TYPE STREQUAL "Coverage") - include("${CMAKE_SOURCE_DIR}/cmake/CodeCoverage.cmake") - - setup_target_for_coverage(${PROJECT_NAME}_coverage Ark-Cpp-Crypto-tests coverage) - - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") - endif() #CMAKE_BUILD_TYPE STREQUAL "Coverage" diff --git a/test/configuration/fee.cpp b/test/configuration/fee.cpp deleted file mode 100644 index 99c5d1eb..00000000 --- a/test/configuration/fee.cpp +++ /dev/null @@ -1,39 +0,0 @@ - -#include "arkCrypto.h" -#include "gtest/gtest.h" - -TEST(configuration, fee_get) { - Ark::Crypto::Configuration::Fee fee; - ASSERT_TRUE(10000000 == fee.get(0)); - ASSERT_TRUE(500000000 == fee.get(1)); - ASSERT_TRUE(2500000000 == fee.get(2)); - ASSERT_TRUE(100000000 == fee.get(3)); - ASSERT_TRUE(500000000 == fee.get(4)); - ASSERT_TRUE(0 == fee.get(5)); - ASSERT_TRUE(0 == fee.get(6)); - ASSERT_TRUE(0 == fee.get(7)); - ASSERT_TRUE(0 == fee.get(8)); -} - -TEST(configuration, fee_set) { - Ark::Crypto::Configuration::Fee fee; - fee.set(0, 20000000ul); - fee.set(1, 1000000000ul); - fee.set(2, 4000000000ul); - fee.set(3, 200000000ul); - fee.set(4, 1000000000ul); - fee.set(5, 1ul); - fee.set(6, 1ul); - fee.set(7, 1ul); - fee.set(8, 1ul); - - ASSERT_TRUE(20000000 == fee.get(0)); - ASSERT_TRUE(1000000000 == fee.get(1)); - ASSERT_TRUE(4000000000 == fee.get(2)); - ASSERT_TRUE(200000000 == fee.get(3)); - ASSERT_TRUE(1000000000 == fee.get(4)); - ASSERT_TRUE(1 == fee.get(5)); - ASSERT_TRUE(1 == fee.get(6)); - ASSERT_TRUE(1 == fee.get(7)); - ASSERT_TRUE(1 == fee.get(8)); -} diff --git a/test/configuration/network.cpp b/test/configuration/network.cpp deleted file mode 100644 index 41aa3763..00000000 --- a/test/configuration/network.cpp +++ /dev/null @@ -1,29 +0,0 @@ - -#include "arkCrypto.h" -#include "gtest/gtest.h" - -TEST(configuration, network_get) { - auto network = Network().get(); // defaults to devnet - ASSERT_EQ(0x1E, network.getBase58Prefix(BASE58_ADDRESS_P2PKH)); - ASSERT_EQ(0x00, network.getBase58Prefix(BASE58_ADDRESS_P2SH)); - ASSERT_EQ(0xaa, network.getBase58Prefix(BASE58_WIF)); - ASSERT_EQ(46090600, network.getBIP32Prefix(BIP32_PREFIX_XPUB)); - ASSERT_EQ(46089520, network.getBIP32Prefix(BIP32_PREFIX_XPRV)); - ASSERT_STREQ("2017-03-21T13:00:00.000Z", network.epoch()); - ASSERT_EQ(true, network.isLocked()); - ASSERT_EQ(30, network.version()); -} - -TEST(configuration, network_set) { - Network network; - network.set(Testnet); - auto testnet = network.get(); - ASSERT_EQ(0x17, testnet.getBase58Prefix(BASE58_ADDRESS_P2PKH)); - ASSERT_EQ(0x00, testnet.getBase58Prefix(BASE58_ADDRESS_P2SH)); - ASSERT_EQ(0xba, testnet.getBase58Prefix(BASE58_WIF)); - ASSERT_EQ(70617039, testnet.getBIP32Prefix(BIP32_PREFIX_XPUB)); - ASSERT_EQ(70615956, testnet.getBIP32Prefix(BIP32_PREFIX_XPRV)); - ASSERT_STREQ("2017-03-21T13:00:00.000Z", testnet.epoch()); - ASSERT_EQ(true, testnet.isLocked()); - ASSERT_EQ(23, testnet.version()); -} diff --git a/test/enums/fees.cpp b/test/enums/fees.cpp deleted file mode 100644 index d1aedb5b..00000000 --- a/test/enums/fees.cpp +++ /dev/null @@ -1,34 +0,0 @@ -#include "gtest/gtest.h" - -#include "enums/fees.h" - -TEST(enums, fees) { - Ark::Crypto::Enums::Fees fees; - - auto feeZERO = fees.TRANSFER; - ASSERT_TRUE(10000000 == feeZERO); - - auto feeONE = fees.SECOND_SIGNATURE_REGISTRATION; - ASSERT_TRUE(500000000 == feeONE); - - auto feeTWO = fees.DELEGATE_REGISTRATION; - ASSERT_TRUE(2500000000 == feeTWO); - - auto feeTHREE = fees.VOTE; - ASSERT_TRUE(100000000 == feeTHREE); - - auto feeFOUR = fees.MULTI_SIGNATURE_REGISTRATION; - ASSERT_TRUE(500000000 == feeFOUR); - - auto feeFIVE = fees.IPFS; - ASSERT_TRUE(0 == feeFIVE); - - auto feeSIX = fees.TIMELOCK_TRANSFER; - ASSERT_TRUE(0 == feeSIX); - - auto feeSEVEN = fees.MULTI_PAYMENT; - ASSERT_TRUE(0 == feeSEVEN); - - auto feeEIGHT = fees.DELEGATE_RESIGNATION; - ASSERT_TRUE(0 == feeEIGHT); -} diff --git a/test/enums/types.cpp b/test/enums/types.cpp deleted file mode 100644 index 4d482025..00000000 --- a/test/enums/types.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include "gtest/gtest.h" - -#include "enums/types.h" - -TEST(enums, types) { - ASSERT_EQ(0, Ark::Crypto::Enums::Types::TRANSFER); - ASSERT_EQ(1, Ark::Crypto::Enums::Types::SECOND_SIGNATURE_REGISTRATION); - ASSERT_EQ(2, Ark::Crypto::Enums::Types::DELEGATE_REGISTRATION); - ASSERT_EQ(3, Ark::Crypto::Enums::Types::VOTE); - ASSERT_EQ(4, Ark::Crypto::Enums::Types::MULTI_SIGNATURE_REGISTRATION); - ASSERT_EQ(5, Ark::Crypto::Enums::Types::IPFS); - ASSERT_EQ(6, Ark::Crypto::Enums::Types::TIMELOCK_TRANSFER); - ASSERT_EQ(7, Ark::Crypto::Enums::Types::MULTI_PAYMENT); - ASSERT_EQ(8, Ark::Crypto::Enums::Types::DELEGATE_RESIGNATION); -} diff --git a/test/helpers/encoding/der.cpp b/test/helpers/encoding/der.cpp deleted file mode 100644 index 6a94c19c..00000000 --- a/test/helpers/encoding/der.cpp +++ /dev/null @@ -1,220 +0,0 @@ -/** - * This file is part of Ark Cpp Crypto. - * - * (c) Ark Ecosystem - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - **/ - -#include "gtest/gtest.h" - -#include "helpers/encoding/der.h" -#include "helpers/encoding/hex.h" - -TEST(helpers_encoding_der, decodeDER) { - auto signature = HexToBytes( - "3044022033a69cd2065432a30f3d1ce4eb0d59b8ab58c74f27c41a7fdb5696ad4e6108c902206f807982866f785d3f6418d24163ddae117b" - "7db4d5fdf0071de069fa54342262"); - std::vector r; - std::vector s; - - decodeDER(signature, r, s); - ASSERT_STRCASEEQ("33A69CD2065432A30F3D1CE4EB0D59B8AB58C74F27C41A7FDB5696AD4E6108C9", BytesToHex(r).c_str()); - ASSERT_STRCASEEQ("6F807982866F785D3F6418D24163DDAE117B7DB4D5FDF0071DE069FA54342262", BytesToHex(s).c_str()); - - signature = HexToBytes( - "3044022054c4a33c6423d689378f160a7ff8b61330444abb58fb470f96ea16d99d4a2fed022007082304410efa6b2943111b6a4e0aaa7b7d" - "b55a07e9861d1fb3cb1f421044a5"); - decodeDER(signature, r, s); - ASSERT_STRCASEEQ("54C4A33C6423D689378F160A7FF8B61330444ABB58FB470F96EA16D99D4A2FED", BytesToHex(r).c_str()); - ASSERT_STRCASEEQ("07082304410EFA6B2943111B6A4E0AAA7B7DB55A07E9861D1FB3CB1F421044A5", BytesToHex(s).c_str()); - - signature = HexToBytes( - "3045022100ff466a9f1b7b273e2f4c3ffe032eb2e814121ed18ef84665d0f515360dab3dd002206fc95f5132e5ecfdc8e5e6e616cc771514" - "55d46ed48f5589b7db7771a332b283"); - decodeDER(signature, r, s); - ASSERT_STRCASEEQ("00FF466A9F1B7B273E2F4C3FFE032EB2E814121ED18EF84665D0F515360DAB3DD0", BytesToHex(r).c_str()); - ASSERT_STRCASEEQ("6FC95F5132E5ECFDC8E5E6E616CC77151455D46ED48F5589B7DB7771A332B283", BytesToHex(s).c_str()); - - signature = HexToBytes( - "3045022100c0dafec8251f1d5010289d210232220b03202cba34ec11fec58b3e93a85b91d3022075afdc06b7d6322a590955bf264e7aaa15" - "5847f614d80078a90292fe205064d3"); - decodeDER(signature, r, s); - ASSERT_STRCASEEQ("00C0DAFEC8251F1D5010289D210232220B03202CBA34EC11FEC58B3E93A85B91D3", BytesToHex(r).c_str()); - ASSERT_STRCASEEQ("75AFDC06B7D6322A590955BF264E7AAA155847F614D80078A90292FE205064D3", BytesToHex(s).c_str()); - - signature = HexToBytes( - "304402207186363571d65e084e7f02b0b77c3ec44fb1b257dee26274c38c928986fea45d02200de0b38e06807e46bda1f1e293f4f6323e85" - "4c86d58abdd00c46c16441085df6"); - decodeDER(signature, r, s); - ASSERT_STRCASEEQ("7186363571D65E084E7F02B0B77C3EC44FB1B257DEE26274C38C928986FEA45D", BytesToHex(r).c_str()); - ASSERT_STRCASEEQ("0DE0B38E06807E46BDA1F1E293F4F6323E854C86D58ABDD00C46C16441085DF6", BytesToHex(s).c_str()); - - signature = HexToBytes( - "3045022100fbfe5076a15860ba8ed00e75e9bd22e05d230f02a936b653eb55b61c99dda48702200e68880ebb0050fe4312b1b1eb0899e1b8" - "2da89baa5b895f612619edf34cbd37"); - decodeDER(signature, r, s); - ASSERT_STRCASEEQ("00FBFE5076A15860BA8ED00E75E9BD22E05D230F02A936B653EB55B61C99DDA487", BytesToHex(r).c_str()); - ASSERT_STRCASEEQ("0E68880EBB0050FE4312B1B1EB0899E1B82DA89BAA5B895F612619EDF34CBD37", BytesToHex(s).c_str()); - - signature = HexToBytes( - "3045022100cde1302d83f8dd835d89aef803c74a119f561fbaef3eb9129e45f30de86abbf9022006ce643f5049ee1f27890467b77a6a8e11" - "ec4661cc38cd8badf90115fbd03cef"); - decodeDER(signature, r, s); - ASSERT_STRCASEEQ("00CDE1302D83F8DD835D89AEF803C74A119F561FBAEF3EB9129E45F30DE86ABBF9", BytesToHex(r).c_str()); - ASSERT_STRCASEEQ("06CE643F5049EE1F27890467B77A6A8E11EC4661CC38CD8BADF90115FBD03CEF", BytesToHex(s).c_str()); -} - -TEST(helpers_encoding_der, encodeDER) { - auto r = HexToBytes( - "33A69CD2065432A30F3D1CE4EB0D59B8AB58C74F27C41A7FDB5696AD4E6108C9"); // dec: - // 23362334225185207751494092901091441011938859014081160902781146257181456271561 - auto s = HexToBytes( - "6F807982866F785D3F6418D24163DDAE117B7DB4D5FDF0071DE069FA54342262"); // dec: - // 50433721247292933944369538617440297985091596895097604618403996029256432099938 - std::vector signature; - encodeDER(toDER(r), toDER(s), signature); - ASSERT_STRCASEEQ( - "3044022033a69cd2065432a30f3d1ce4eb0d59b8ab58c74f27c41a7fdb5696ad4e6108c902206f807982866f785d3f6418d24163ddae117b" - "7db4d5fdf0071de069fa54342262", - BytesToHex(signature).c_str()); - - r = HexToBytes( - "54C4A33C6423D689378F160A7FF8B61330444ABB58FB470F96EA16D99D4A2FED"); // dec: - // 38341707918488238920692284707283974715538935465589664377561695343399725051885 - s = HexToBytes( - "07082304410EFA6B2943111B6A4E0AAA7B7DB55A07E9861D1FB3CB1F421044A5"); // dec: - // 3180566392414476763164587487324397066658063772201694230600609996154610926757 - encodeDER(toDER(r), toDER(s), signature); - ASSERT_STRCASEEQ( - "3044022054c4a33c6423d689378f160a7ff8b61330444abb58fb470f96ea16d99d4a2fed022007082304410efa6b2943111b6a4e0aaa7b7d" - "b55a07e9861d1fb3cb1f421044a5", - BytesToHex(signature).c_str()); - - r = HexToBytes( - "FF466A9F1B7B273E2F4C3FFE032EB2E814121ED18EF84665D0F515360DAB3DD0"); // dec: - // 115464191557905790016094131873849783294273568009648050793030031933291767741904 - s = HexToBytes( - "6FC95F5132E5ECFDC8E5E6E616CC77151455D46ED48F5589B7DB7771A332B283"); // dec: - // 50562520307781850052192542766631199590053690478900449960232079510155113443971 - encodeDER(toDER(r), toDER(s), signature); - ASSERT_STRCASEEQ( - "3045022100ff466a9f1b7b273e2f4c3ffe032eb2e814121ed18ef84665d0f515360dab3dd002206fc95f5132e5ecfdc8e5e6e616cc771514" - "55d46ed48f5589b7db7771a332b283", - BytesToHex(signature).c_str()); - - r = HexToBytes( - "C0DAFEC8251F1D5010289D210232220B03202CBA34EC11FEC58B3E93A85B91D3"); // dec: - // 87230998027579607140680851455601772643840468630989315269459846730712163783123 - s = HexToBytes( - "75AFDC06B7D6322A590955BF264E7AAA155847F614D80078A90292FE205064D3"); // dec: - // 53231320085894623106179381504478252331065330583563809963303318469380290929875 - encodeDER(toDER(r), toDER(s), signature); - ASSERT_STRCASEEQ( - "3045022100c0dafec8251f1d5010289d210232220b03202cba34ec11fec58b3e93a85b91d3022075afdc06b7d6322a590955bf264e7aaa15" - "5847f614d80078a90292fe205064d3", - BytesToHex(signature).c_str()); - - r = HexToBytes( - "7186363571D65E084E7F02B0B77C3EC44FB1B257DEE26274C38C928986FEA45D"); // dec: - // 51348483531757779992459563033975330355971795607481991320287437101831125115997 - s = HexToBytes( - "0DE0B38E06807E46BDA1F1E293F4F6323E854C86D58ABDD00C46C16441085DF6"); // dec: - // 6277080015686056199074771961940657638578000617958603212944619747099038735862 - encodeDER(toDER(r), toDER(s), signature); - ASSERT_STRCASEEQ( - "304402207186363571d65e084e7f02b0b77c3ec44fb1b257dee26274c38c928986fea45d02200de0b38e06807e46bda1f1e293f4f6323e85" - "4c86d58abdd00c46c16441085df6", - BytesToHex(signature).c_str()); - - r = HexToBytes( - "FBFE5076A15860BA8ED00E75E9BD22E05D230F02A936B653EB55B61C99DDA487"); // dec: - // 113979859486826658566290715281614250298918272782414232881639314569529560769671 - s = HexToBytes( - "0E68880EBB0050FE4312B1B1EB0899E1B82DA89BAA5B895F612619EDF34CBD37"); // dec: - // 6517071009538626957379450615706485096874328019806177698938278220732027419959 - encodeDER(toDER(r), toDER(s), signature); - ASSERT_STRCASEEQ( - "3045022100fbfe5076a15860ba8ed00e75e9bd22e05d230f02a936b653eb55b61c99dda48702200e68880ebb0050fe4312b1b1eb0899e1b8" - "2da89baa5b895f612619edf34cbd37", - BytesToHex(signature).c_str()); - - r = HexToBytes( - "CDE1302D83F8DD835D89AEF803C74A119F561FBAEF3EB9129E45F30DE86ABBF9"); // dec: - // 93122007060065279508564838030979550535085999589142852106617159184757394422777 - s = HexToBytes( - "06CE643F5049EE1F27890467B77A6A8E11EC4661CC38CD8BADF90115FBD03CEF"); // dec: - // 3078539468410661027472930027406594684630312677495124015420811882501887769839 - encodeDER(toDER(r), toDER(s), signature); - ASSERT_STRCASEEQ( - "3045022100cde1302d83f8dd835d89aef803c74a119f561fbaef3eb9129e45f30de86abbf9022006ce643f5049ee1f27890467b77a6a8e11" - "ec4661cc38cd8badf90115fbd03cef", - BytesToHex(signature).c_str()); -} - -TEST(helpers_encoding_der_packed, encodeDER) { - auto packed_signature = HexToBytes( - "33A69CD2065432A30F3D1CE4EB0D59B8AB58C74F27C41A7FDB5696AD4E6108C96F807982866F785D3F6418D24163DDAE117B7DB4D5FDF007" - "1DE069FA54342262"); - std::vector signature; - encodeDER(&packed_signature[0], signature); - ASSERT_STRCASEEQ( - "3044022033a69cd2065432a30f3d1ce4eb0d59b8ab58c74f27c41a7fdb5696ad4e6108c902206f807982866f785d3f6418d24163ddae117b" - "7db4d5fdf0071de069fa54342262", - BytesToHex(signature).c_str()); - - packed_signature = HexToBytes( - "54C4A33C6423D689378F160A7FF8B61330444ABB58FB470F96EA16D99D4A2FED07082304410EFA6B2943111B6A4E0AAA7B7DB55A07E9861D" - "1FB3CB1F421044A5"); - encodeDER(&packed_signature[0], signature); - ASSERT_STRCASEEQ( - "3044022054c4a33c6423d689378f160a7ff8b61330444abb58fb470f96ea16d99d4a2fed022007082304410efa6b2943111b6a4e0aaa7b7d" - "b55a07e9861d1fb3cb1f421044a5", - BytesToHex(signature).c_str()); - - packed_signature = HexToBytes( - "FF466A9F1B7B273E2F4C3FFE032EB2E814121ED18EF84665D0F515360DAB3DD06FC95F5132E5ECFDC8E5E6E616CC77151455D46ED48F5589" - "B7DB7771A332B283"); - encodeDER(&packed_signature[0], signature); - ASSERT_STRCASEEQ( - "3045022100ff466a9f1b7b273e2f4c3ffe032eb2e814121ed18ef84665d0f515360dab3dd002206fc95f5132e5ecfdc8e5e6e616cc771514" - "55d46ed48f5589b7db7771a332b283", - BytesToHex(signature).c_str()); - - packed_signature = HexToBytes( - "C0DAFEC8251F1D5010289D210232220B03202CBA34EC11FEC58B3E93A85B91D375AFDC06B7D6322A590955BF264E7AAA155847F614D80078" - "A90292FE205064D3"); - encodeDER(&packed_signature[0], signature); - ASSERT_STRCASEEQ( - "3045022100c0dafec8251f1d5010289d210232220b03202cba34ec11fec58b3e93a85b91d3022075afdc06b7d6322a590955bf264e7aaa15" - "5847f614d80078a90292fe205064d3", - BytesToHex(signature).c_str()); - - packed_signature = HexToBytes( - "7186363571D65E084E7F02B0B77C3EC44FB1B257DEE26274C38C928986FEA45D0DE0B38E06807E46BDA1F1E293F4F6323E854C86D58ABDD0" - "0C46C16441085DF6"); - encodeDER(&packed_signature[0], signature); - ASSERT_STRCASEEQ( - "304402207186363571d65e084e7f02b0b77c3ec44fb1b257dee26274c38c928986fea45d02200de0b38e06807e46bda1f1e293f4f6323e85" - "4c86d58abdd00c46c16441085df6", - BytesToHex(signature).c_str()); - - packed_signature = HexToBytes( - "FBFE5076A15860BA8ED00E75E9BD22E05D230F02A936B653EB55B61C99DDA4870E68880EBB0050FE4312B1B1EB0899E1B82DA89BAA5B895F" - "612619EDF34CBD37"); - encodeDER(&packed_signature[0], signature); - ASSERT_STRCASEEQ( - "3045022100fbfe5076a15860ba8ed00e75e9bd22e05d230f02a936b653eb55b61c99dda48702200e68880ebb0050fe4312b1b1eb0899e1b8" - "2da89baa5b895f612619edf34cbd37", - BytesToHex(signature).c_str()); - - packed_signature = HexToBytes( - "CDE1302D83F8DD835D89AEF803C74A119F561FBAEF3EB9129E45F30DE86ABBF906CE643F5049EE1F27890467B77A6A8E11EC4661CC38CD8B" - "ADF90115FBD03CEF"); - encodeDER(&packed_signature[0], signature); - ASSERT_STRCASEEQ( - "3045022100cde1302d83f8dd835d89aef803c74a119f561fbaef3eb9129e45f30de86abbf9022006ce643f5049ee1f27890467b77a6a8e11" - "ec4661cc38cd8badf90115fbd03cef", - BytesToHex(signature).c_str()); -} diff --git a/test/identities/address.cpp b/test/identities/address.cpp deleted file mode 100644 index 10eb27a8..00000000 --- a/test/identities/address.cpp +++ /dev/null @@ -1,39 +0,0 @@ - -#include "gtest/gtest.h" - -#include "identities/address.h" -#include "identities/privatekey.h" -#include "identities/publickey.h" -using namespace Ark::Crypto::Identities; - -namespace { -const auto passphrase = "bullet parade snow bacon mutual deposit brass floor staff list concert ask"; -const uint8_t networkVersion = 0x1E; -} // namespace - -TEST(identities, address_from_passphrase) { - Address address = Address::fromPassphrase(passphrase, networkVersion); - ASSERT_STREQ("DStZXkgpEjxbG355nQ26vnkp95p24U9tsV", address.toString().c_str()); -} - -TEST(identities, address_from_privatekey) { - PrivateKey privateKey("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021"); - Address address = Address::fromPrivateKey(privateKey, networkVersion); - ASSERT_STREQ("DStZXkgpEjxbG355nQ26vnkp95p24U9tsV", address.toString().c_str()); -} - -TEST(identities, address_from_publickey) { - PublicKey publicKey("029fdf41a7d69d8efc7b236c21b9509a23d862ea4ed8b13a56e31eee58dbfd97b4"); - Address address = Address::fromPublicKey(publicKey, networkVersion); - ASSERT_STREQ("DStZXkgpEjxbG355nQ26vnkp95p24U9tsV", address.toString().c_str()); -} - -TEST(identities, address_from_string) { - Address address("DStZXkgpEjxbG355nQ26vnkp95p24U9tsV"); - ASSERT_STREQ("DStZXkgpEjxbG355nQ26vnkp95p24U9tsV", address.toString().c_str()); -} - -TEST(identities, address_validate) { - Address address("DStZXkgpEjxbG355nQ26vnkp95p24U9tsV"); - ASSERT_TRUE(Address::validate(address, networkVersion)); -} diff --git a/test/identities/mnemonic.cpp b/test/identities/mnemonic.cpp deleted file mode 100644 index c021244d..00000000 --- a/test/identities/mnemonic.cpp +++ /dev/null @@ -1,169 +0,0 @@ - -#include "gtest/gtest.h" - -#include "identities/mnemonic.h" - -#include -#include - -namespace { - -const auto MAX_WORD_BYTES = - ((8 * 4) + 1) * - 24; // ((8 characters per word * 4 potential octets per character) + 1 nul terminator) * maximum of 24 words -} - -// Note: generate_mnemonic_valid_[lang] tests could be refactored to use a single helper function with a language -// argument. -// This causes problems with AUnit when building and testing IoT due to ASSERT macros not being available. -TEST(mnemonic, generate_mnemonic_valid_en) { - for (auto num_words = 12u; num_words <= 24u; num_words += 3) { - auto passphrase = Ark::Crypto::Identities::Mnemonic::generate(num_words, Ark::Crypto::Identities::Language::en); - // use a set to ensure no duplicate words can be added - std::set words; - char s[MAX_WORD_BYTES] = {}; - strncpy(s, passphrase.c_str(), sizeof(s)); - auto pch = strtok(s, " "); - while (pch != nullptr) { - ASSERT_TRUE(words.insert(pch).second); - pch = strtok(nullptr, " "); - } - - ASSERT_EQ(num_words, words.size()); - } -} - -TEST(mnemonic, generate_mnemonic_valid_es) { - for (auto num_words = 12u; num_words <= 24u; num_words += 3) { - auto passphrase = Ark::Crypto::Identities::Mnemonic::generate(num_words, Ark::Crypto::Identities::Language::es); - // use a set to ensure no duplicate words can be added - std::set words; - char s[MAX_WORD_BYTES] = {}; - strncpy(s, passphrase.c_str(), sizeof(s)); - auto pch = strtok(s, " "); - while (pch != nullptr) { - ASSERT_TRUE(words.insert(pch).second); - pch = strtok(nullptr, " "); - } - - ASSERT_EQ(num_words, words.size()); - } -} - -TEST(mnemonic, generate_mnemonic_valid_ja) { - for (auto num_words = 12u; num_words <= 24u; num_words += 3) { - auto passphrase = Ark::Crypto::Identities::Mnemonic::generate(num_words, Ark::Crypto::Identities::Language::ja); - // use a set to ensure no duplicate words can be added - std::set words; - char s[MAX_WORD_BYTES] = {}; - strncpy(s, passphrase.c_str(), sizeof(s)); - auto pch = strtok(s, " "); - while (pch != nullptr) { - ASSERT_TRUE(words.insert(pch).second); - pch = strtok(nullptr, " "); - } - - ASSERT_EQ(num_words, words.size()); - } -} - -TEST(mnemonic, generate_mnemonic_valid_it) { - for (auto num_words = 12u; num_words <= 24u; num_words += 3) { - auto passphrase = Ark::Crypto::Identities::Mnemonic::generate(num_words, Ark::Crypto::Identities::Language::it); - // use a set to ensure no duplicate words can be added - std::set words; - char s[MAX_WORD_BYTES] = {}; - strncpy(s, passphrase.c_str(), sizeof(s)); - auto pch = strtok(s, " "); - while (pch != nullptr) { - ASSERT_TRUE(words.insert(pch).second); - pch = strtok(nullptr, " "); - } - - ASSERT_EQ(num_words, words.size()); - } -} - -TEST(mnemonic, generate_mnemonic_valid_fr) { - for (auto num_words = 12u; num_words <= 24u; num_words += 3) { - auto passphrase = Ark::Crypto::Identities::Mnemonic::generate(num_words, Ark::Crypto::Identities::Language::fr); - // use a set to ensure no duplicate words can be added - std::set words; - char s[MAX_WORD_BYTES] = {}; - strncpy(s, passphrase.c_str(), sizeof(s)); - auto pch = strtok(s, " "); - while (pch != nullptr) { - ASSERT_TRUE(words.insert(pch).second); - pch = strtok(nullptr, " "); - } - - ASSERT_EQ(num_words, words.size()); - } -} - -TEST(mnemonic, generate_mnemonic_valid_ko) { - for (auto num_words = 12u; num_words <= 24u; num_words += 3) { - auto passphrase = Ark::Crypto::Identities::Mnemonic::generate(num_words, Ark::Crypto::Identities::Language::ko); - // use a set to ensure no duplicate words can be added - std::set words; - char s[MAX_WORD_BYTES] = {}; - strncpy(s, passphrase.c_str(), sizeof(s)); - auto pch = strtok(s, " "); - while (pch != nullptr) { - ASSERT_TRUE(words.insert(pch).second); - pch = strtok(nullptr, " "); - } - - ASSERT_EQ(num_words, words.size()); - } -} - -TEST(mnemonic, generate_mnemonic_valid_zh_Hans) { - for (auto num_words = 12u; num_words <= 24u; num_words += 3) { - auto passphrase = - Ark::Crypto::Identities::Mnemonic::generate(num_words, Ark::Crypto::Identities::Language::zh_Hans); - // use a set to ensure no duplicate words can be added - std::set words; - char s[MAX_WORD_BYTES] = {}; - strncpy(s, passphrase.c_str(), sizeof(s)); - auto pch = strtok(s, " "); - while (pch != nullptr) { - ASSERT_TRUE(words.insert(pch).second); - pch = strtok(nullptr, " "); - } - - ASSERT_EQ(num_words, words.size()); - } -} - -TEST(mnemonic, generate_mnemonic_valid_zh_Hant) { - for (auto num_words = 12u; num_words <= 24u; num_words += 3) { - auto passphrase = - Ark::Crypto::Identities::Mnemonic::generate(num_words, Ark::Crypto::Identities::Language::zh_Hant); - // use a set to ensure no duplicate words can be added - std::set words; - char s[MAX_WORD_BYTES] = {}; - strncpy(s, passphrase.c_str(), sizeof(s)); - auto pch = strtok(s, " "); - while (pch != nullptr) { - ASSERT_TRUE(words.insert(pch).second); - pch = strtok(nullptr, " "); - } - - ASSERT_EQ(num_words, words.size()); - } -} - -// These tests depend on the library asserting, disable this test for Release builds -#ifdef DEBUG -TEST(mnemonic, generate_mnemonic_invalid) { - for (auto num_words = 0u; num_words <= 100u; ++num_words) { - // skip the valid word cases - if (num_words == 12u || num_words == 15u || num_words == 18u || num_words == 21u || num_words == 24u) { - continue; - } - - ASSERT_DEATH(Ark::Crypto::Identities::Mnemonic::generate(num_words), ""); - } -} -#endif diff --git a/test/identities/privatekey.cpp b/test/identities/privatekey.cpp deleted file mode 100644 index ae310271..00000000 --- a/test/identities/privatekey.cpp +++ /dev/null @@ -1,65 +0,0 @@ - -#include "gtest/gtest.h" - -#include "identities/privatekey.h" -using namespace Ark::Crypto::Identities; - -namespace { -const auto passphrase = "bullet parade snow bacon mutual deposit brass floor staff list concert ask"; -const uint8_t testPrivateKeyBytes[32] = {149, 9, 129, 206, 23, 223, 102, 45, 188, 29, 37, 48, 95, 133, 151, 167, - 19, 9, 251, 143, 114, 50, 32, 58, 9, 68, 71, 126, 37, 52, 176, 33}; -const uint8_t wifByte = 0xaa; - -} // namespace - -TEST(identities, privatekey_construct_bytes) { - PrivateKey privateKey(testPrivateKeyBytes); - ASSERT_STREQ("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021", privateKey.toString().c_str()); -} - -TEST(identities, privatekey_construct_string) { - PrivateKey privateKey("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021"); - ASSERT_STREQ("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021", privateKey.toString().c_str()); -} - -TEST(identities, privatekey_from_hex) { - PrivateKey privateKey = PrivateKey::fromHex("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021"); - ASSERT_STREQ("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021", privateKey.toString().c_str()); -} - -TEST(identities, privatekey_from_passphrase) { - PrivateKey privateKey = PrivateKey::fromPassphrase(passphrase); - ASSERT_STREQ("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021", privateKey.toString().c_str()); -} - -TEST(identities, privatekey_from_string) { - PrivateKey privateKey("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021"); - ASSERT_STREQ("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021", privateKey.toString().c_str()); -} - -TEST(identities, privatekey_from_wif_string) { - const char* wifStr = "SEZuJZouNK8GLXNApjciH4QnSKiNr971exVcL2Y6XfrDF5o977zB"; - PrivateKey privateKey = PrivateKey::fromWIFString(wifStr, wifByte); - ASSERT_STREQ("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021", privateKey.toString().c_str()); -} - -TEST(identities, privatekey_get_bytes) { - PrivateKey privateKey("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021"); - const auto privateKeyBytes = privateKey.toBytes(); - for (unsigned int i = 0; i < PRIVATEKEY_SIZE; i++) { - ASSERT_EQ(privateKeyBytes[i], testPrivateKeyBytes[i]); - }; -} - -TEST(identities, privatekey_validate) { - PrivateKey privateKey("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021"); - ASSERT_TRUE(PrivateKey::validate(privateKey)); -} - -TEST(identities, privatekey_validate_bytes) { - ASSERT_TRUE(PrivateKey::validate(testPrivateKeyBytes)); -} - -TEST(identities, privatekey_validate_string) { - ASSERT_TRUE(PrivateKey::validate("950981ce17df662dbc1d25305f8597a71309fb8f7232203a0944477e2534b021")); -} diff --git a/test/identities/publickey.cpp b/test/identities/publickey.cpp deleted file mode 100644 index 328c7163..00000000 --- a/test/identities/publickey.cpp +++ /dev/null @@ -1,53 +0,0 @@ - -#include "gtest/gtest.h" - -#include "identities/publickey.h" -using namespace Ark::Crypto::Identities; - -namespace { -const auto passphrase = "bullet parade snow bacon mutual deposit brass floor staff list concert ask"; -const uint8_t testPublicKeyBytes[33] = {2, 159, 223, 65, 167, 214, 157, 142, 252, 123, 35, - 108, 33, 185, 80, 154, 35, 216, 98, 234, 78, 216, - 177, 58, 86, 227, 30, 238, 88, 219, 253, 151, 180}; -} // namespace - -TEST(identities, publickey_from_bytes) { - PublicKey publicKey(testPublicKeyBytes); - ASSERT_STREQ("029fdf41a7d69d8efc7b236c21b9509a23d862ea4ed8b13a56e31eee58dbfd97b4", publicKey.toString().c_str()); -} - -TEST(identities, publickey_from_hex) { - PublicKey publicKey = PublicKey::fromHex("029fdf41a7d69d8efc7b236c21b9509a23d862ea4ed8b13a56e31eee58dbfd97b4"); - ASSERT_STREQ("029fdf41a7d69d8efc7b236c21b9509a23d862ea4ed8b13a56e31eee58dbfd97b4", publicKey.toString().c_str()); -} - -TEST(identities, publickey_from_passphrase) { - PublicKey publicKey = PublicKey::fromPassphrase(passphrase); - ASSERT_STREQ("029fdf41a7d69d8efc7b236c21b9509a23d862ea4ed8b13a56e31eee58dbfd97b4", publicKey.toString().c_str()); -} - -TEST(identities, publickey_from_string) { - PublicKey publicKey("029fdf41a7d69d8efc7b236c21b9509a23d862ea4ed8b13a56e31eee58dbfd97b4"); - ASSERT_STREQ("029fdf41a7d69d8efc7b236c21b9509a23d862ea4ed8b13a56e31eee58dbfd97b4", publicKey.toString().c_str()); -} - -TEST(identities, publickey_get_bytes) { - PublicKey publicKey("029fdf41a7d69d8efc7b236c21b9509a23d862ea4ed8b13a56e31eee58dbfd97b4"); - const auto publicKeyBytes = publicKey.toBytes(); - for (unsigned int i = 0; i < COMPRESSED_PUBLICKEY_SIZE; i++) { - ASSERT_EQ(publicKeyBytes[i], testPublicKeyBytes[i]); - }; -} - -TEST(identities, publickey_validate) { - PublicKey publicKey("029fdf41a7d69d8efc7b236c21b9509a23d862ea4ed8b13a56e31eee58dbfd97b4"); - ASSERT_TRUE(PublicKey::validate(publicKey)); -} - -TEST(identities, publickey_validate_bytes) { - ASSERT_TRUE(PublicKey::validate(testPublicKeyBytes)); -} - -TEST(identities, publickey_validate_string) { - ASSERT_TRUE(PublicKey::validate("029fdf41a7d69d8efc7b236c21b9509a23d862ea4ed8b13a56e31eee58dbfd97b4")); -} diff --git a/test/identities/wif.cpp b/test/identities/wif.cpp deleted file mode 100644 index df62a5e3..00000000 --- a/test/identities/wif.cpp +++ /dev/null @@ -1,36 +0,0 @@ - -#include "gtest/gtest.h" - -#include "identities/wif.h" -using namespace Ark::Crypto::Identities; - -namespace { -const auto passphrase = "bullet parade snow bacon mutual deposit brass floor staff list concert ask"; -const uint8_t testWIFBytes[52] = {83, 69, 90, 117, 74, 90, 111, 117, 78, 75, 56, 71, 76, 88, 78, 65, 112, 106, - 99, 105, 72, 52, 81, 110, 83, 75, 105, 78, 114, 57, 55, 49, 101, 120, 86, 99, - 76, 50, 89, 54, 88, 102, 114, 68, 70, 53, 111, 57, 55, 55, 122, 66}; -const uint8_t wifByte = 0xaa; -} // namespace - -TEST(identities, wif_from_bytes) { - WIF wif(testWIFBytes); - ASSERT_STREQ("SEZuJZouNK8GLXNApjciH4QnSKiNr971exVcL2Y6XfrDF5o977zB", wif.toString().c_str()); -} - -TEST(identities, wif_from_passphrase) { - WIF wif = WIF::fromPassphrase(passphrase, wifByte); - ASSERT_STREQ("SEZuJZouNK8GLXNApjciH4QnSKiNr971exVcL2Y6XfrDF5o977zB", wif.toString().c_str()); -} - -TEST(identities, wif_from_string) { - WIF wif("SEZuJZouNK8GLXNApjciH4QnSKiNr971exVcL2Y6XfrDF5o977zB"); - ASSERT_STREQ("SEZuJZouNK8GLXNApjciH4QnSKiNr971exVcL2Y6XfrDF5o977zB", wif.toString().c_str()); -} - -TEST(identities, wif_get_bytes) { - WIF wif("SEZuJZouNK8GLXNApjciH4QnSKiNr971exVcL2Y6XfrDF5o977zB"); - const auto wifBytes = wif.toBytes(); - for (unsigned int i = 0; i < WIF_SIZE; i++) { - ASSERT_EQ(wifBytes[i], testWIFBytes[i]); - }; -} diff --git a/test/iot/gtest/gtest.h b/test/iot/gtest/gtest.h deleted file mode 100644 index 49e5ebec..00000000 --- a/test/iot/gtest/gtest.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef __GTEST_H__ -#define __GTEST_H__ - -#include -#include - -#endif diff --git a/test/iot/test_main.cpp b/test/iot/test_main.cpp deleted file mode 100644 index ddc1f14f..00000000 --- a/test/iot/test_main.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#if (defined PLATFORMIO && defined UNIT_TEST) - -#include - -// Set Dummy Time for testing board -#include -void setDummyTime() { - // set board time to: 21 March 2019(in seconds) - // 2 years after Mainnet launch. - struct timeval tv; - tv.tv_sec = 1553173200ull; - settimeofday(&tv, NULL); -}; - -void setup() { - Serial.begin(115200); - - setDummyTime(); - - aunit::TestRunner::setTimeout(0); - - delay(1000); -} - -void loop() { - aunit::TestRunner::run(); -} - -#endif diff --git a/test/lib/googletest b/test/lib/googletest deleted file mode 160000 index 3cf8f514..00000000 --- a/test/lib/googletest +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3cf8f514d859d65b7202e51c662a03a92887b8e2 diff --git a/test/networks/abstractnetwork.cpp b/test/networks/abstractnetwork.cpp deleted file mode 100644 index 42a2ef4b..00000000 --- a/test/networks/abstractnetwork.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include "gtest/gtest.h" - -#include "networks/abstractnetwork.h" -using namespace Ark::Crypto::Networks; - -#include - -AbstractNetwork CUSTOM_NETWORK = { - { - 0x01, // BASE58_ADDRESS_P2PKH - 0x02, // BASE58_ADDRESS_P2SH - 0x03 // BASE58_WIF - }, - { - 00010100, // BIP32_PREFIX_XPUB - 00010101 // BIP32_PREFIX_XPRV - }, - "0000-00-00T00:00:00.000Z", // Epoch - false // isLocked -}; - -TEST(networks, abstract_network_base58_prefix_get) { - ASSERT_EQ(1, CUSTOM_NETWORK.getBase58Prefix(BASE58_ADDRESS_P2PKH)); - ASSERT_EQ(2, CUSTOM_NETWORK.getBase58Prefix(BASE58_ADDRESS_P2SH)); - ASSERT_EQ(3, CUSTOM_NETWORK.getBase58Prefix(BASE58_WIF)); -} - -TEST(networks, abstract_network_base58_prefix_set) { - CUSTOM_NETWORK.setBase58Prefix(BASE58_ADDRESS_P2PKH, 0x10); - ASSERT_EQ(0x10, CUSTOM_NETWORK.getBase58Prefix(BASE58_ADDRESS_P2PKH)); - - CUSTOM_NETWORK.setBase58Prefix(BASE58_ADDRESS_P2SH, 0x20); - ASSERT_EQ(0x20, CUSTOM_NETWORK.getBase58Prefix(BASE58_ADDRESS_P2SH)); - - CUSTOM_NETWORK.setBase58Prefix(BASE58_WIF, 0x30); - ASSERT_EQ(0x30, CUSTOM_NETWORK.getBase58Prefix(BASE58_WIF)); -} - -TEST(networks, abstract_network_bip32_prefix_get) { - ASSERT_EQ(00010100, CUSTOM_NETWORK.getBIP32Prefix(BIP32_PREFIX_XPUB)); - ASSERT_EQ(00010101, CUSTOM_NETWORK.getBIP32Prefix(BIP32_PREFIX_XPRV)); -} - -TEST(networks, abstract_network_bip32_prefix_set) { - CUSTOM_NETWORK.setBIP32Prefix(BIP32_PREFIX_XPUB, 1000000); - ASSERT_EQ(1000000, CUSTOM_NETWORK.getBIP32Prefix(BIP32_PREFIX_XPUB)); - - CUSTOM_NETWORK.setBIP32Prefix(BIP32_PREFIX_XPRV, 1000001); - ASSERT_EQ(1000001, CUSTOM_NETWORK.getBIP32Prefix(BIP32_PREFIX_XPRV)); -} - -TEST(networks, abstract_network_epoch) { - ASSERT_STREQ("0000-00-00T00:00:00.000Z", CUSTOM_NETWORK.epoch()); -} - -TEST(networks, abstract_network_is_locked) { - ASSERT_EQ(false, CUSTOM_NETWORK.isLocked()); -} - -TEST(networks, abstract_network_version) { - AbstractNetwork customNetwork = CUSTOM_NETWORK; - customNetwork.setBase58Prefix(BASE58_ADDRESS_P2PKH, 0x14); - ASSERT_EQ(20, customNetwork.version()); -} diff --git a/test/networks/devnet.cpp b/test/networks/devnet.cpp deleted file mode 100644 index f02bdc49..00000000 --- a/test/networks/devnet.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "gtest/gtest.h" - -#include "networks/devnet.h" -using namespace Ark::Crypto::Networks; - -TEST(networks, devnet_base58_prefix_get) { - ASSERT_EQ(0x1E, Devnet.getBase58Prefix(BASE58_ADDRESS_P2PKH)); - ASSERT_EQ(0x00, Devnet.getBase58Prefix(BASE58_ADDRESS_P2SH)); - ASSERT_EQ(0xaa, Devnet.getBase58Prefix(BASE58_WIF)); -} - -TEST(networks, devnet_bip32_prefix_get) { - ASSERT_EQ(46090600, Devnet.getBIP32Prefix(BIP32_PREFIX_XPUB)); - ASSERT_EQ(46089520, Devnet.getBIP32Prefix(BIP32_PREFIX_XPRV)); -} - -TEST(networks, devnet_epoch) { - ASSERT_STREQ("2017-03-21T13:00:00.000Z", Devnet.epoch()); -} - -TEST(networks, devnet_is_locked) { - ASSERT_EQ(true, Devnet.isLocked()); -} - -TEST(networks, devnet_version) { - ASSERT_EQ(30, Devnet.version()); -} diff --git a/test/networks/mainnet.cpp b/test/networks/mainnet.cpp deleted file mode 100644 index 36acb4f1..00000000 --- a/test/networks/mainnet.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "gtest/gtest.h" - -#include "networks/mainnet.h" -using namespace Ark::Crypto::Networks; - -TEST(networks, mainnet_base58_prefix_get) { - ASSERT_EQ(0x17, Mainnet.getBase58Prefix(BASE58_ADDRESS_P2PKH)); - ASSERT_EQ(0x00, Mainnet.getBase58Prefix(BASE58_ADDRESS_P2SH)); - ASSERT_EQ(0xaa, Mainnet.getBase58Prefix(BASE58_WIF)); -} - -TEST(networks, mainnet_bip32_prefix_get) { - ASSERT_EQ(46090600, Mainnet.getBIP32Prefix(BIP32_PREFIX_XPUB)); - ASSERT_EQ(46089520, Mainnet.getBIP32Prefix(BIP32_PREFIX_XPRV)); -} - -TEST(networks, mainnet_epoch) { - ASSERT_STREQ("2017-03-21T13:00:00.000Z", Mainnet.epoch()); -} - -TEST(networks, mainnet_is_locked) { - ASSERT_EQ(true, Mainnet.isLocked()); -} - -TEST(networks, mainnet_version) { - ASSERT_EQ(23, Mainnet.version()); -} diff --git a/test/networks/testnet.cpp b/test/networks/testnet.cpp deleted file mode 100644 index 2a56c867..00000000 --- a/test/networks/testnet.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "gtest/gtest.h" - -#include "networks/testnet.h" -using namespace Ark::Crypto::Networks; - -TEST(networks, testnet_base58_prefix_get) { - ASSERT_EQ(0x17, Testnet.getBase58Prefix(BASE58_ADDRESS_P2PKH)); - ASSERT_EQ(0x00, Testnet.getBase58Prefix(BASE58_ADDRESS_P2SH)); - ASSERT_EQ(0xba, Testnet.getBase58Prefix(BASE58_WIF)); -} - -TEST(networks, testnet_bip32_prefix_get) { - ASSERT_EQ(70617039, Testnet.getBIP32Prefix(BIP32_PREFIX_XPUB)); - ASSERT_EQ(70615956, Testnet.getBIP32Prefix(BIP32_PREFIX_XPRV)); -} - -TEST(networks, testnet_epoch) { - ASSERT_STREQ("2017-03-21T13:00:00.000Z", Testnet.epoch()); -} - -TEST(networks, testnet_is_locked) { - ASSERT_EQ(true, Testnet.isLocked()); -} - -TEST(networks, testnet_version) { - ASSERT_EQ(23, Testnet.version()); -} diff --git a/test/platformio.ini b/test/platformio.ini deleted file mode 100644 index c1b53faf..00000000 --- a/test/platformio.ini +++ /dev/null @@ -1,41 +0,0 @@ -; PlatformIO Project Configuration File -; -; Build options: build flags, source filter -; Upload options: custom upload port, speed and extra flags -; Library options: dependencies, extra library storages -; Advanced options: extra scripting -; -; Please visit documentation for the other options and examples -; http://docs.platformio.org/page/projectconf.html - -[platformio] -description = "Unit Tests for Ark-Cpp-Crypto" -src_dir = .. -lib_dir = .. - -[common] -lib_ldf_mode = off -lib_deps = micro-ecc, bip39@^1.1, AUnit, ArduinoJson@5.13.4 -build_flags = -I../test/iot/ -I../src -I../src/lib -I../src/include/cpp-crypto -DUNIT_TEST -src_filter = +<*> -<.git/> - - - - -<_3rdParty> - - - - - - - -upload_speed = 921600 - -[env:esp8266] -platform = espressif8266 -board = huzzah -framework = arduino -lib_ldf_mode = ${common.lib_ldf_mode} -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} -src_filter = ${common.src_filter} -upload_speed = ${common.upload_speed} - -[env:esp32] -platform = espressif32 -board = esp32dev -framework = arduino -lib_ldf_mode = ${common.lib_ldf_mode} -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} -src_filter = ${common.src_filter} -upload_speed = ${common.upload_speed} diff --git a/test/transactions/builder.cpp b/test/transactions/builder.cpp deleted file mode 100644 index 35ce86f3..00000000 --- a/test/transactions/builder.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include "gtest/gtest.h" - -#include "configuration/fee.h" -#include "enums/types.h" -#include "transactions/builder.h" -using namespace Ark::Crypto::Transactions; - -TEST(transactions, build_transfer) { - const auto actual = Ark::Crypto::Transactions::Builder::buildTransfer("D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib", 100000000, - "", "Secret passphrase"); - ASSERT_EQ(Ark::Crypto::Enums::Types::TRANSFER, actual.type); - ASSERT_TRUE(Ark::Crypto::Configuration::Fee().get(Ark::Crypto::Enums::Types::TRANSFER) == actual.fee); - ASSERT_STREQ("D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib", actual.recipientId.c_str()); - ASSERT_TRUE(100000000 == actual.amount); - ASSERT_STREQ("", actual.vendorField.c_str()); -} diff --git a/test/transactions/deserializer.cpp b/test/transactions/deserializer.cpp deleted file mode 100644 index 88cbad91..00000000 --- a/test/transactions/deserializer.cpp +++ /dev/null @@ -1,195 +0,0 @@ -#include "gtest/gtest.h" - -#include "enums/types.h" -#include "identities/address.h" -#include "identities/publickey.h" -#include "transactions/deserializer.h" - -TEST(transactions, deserialize_transfer) { - // transfer/passphrase-with-vendor-field.json - Ark::Crypto::Transactions::Deserializer deserializer( - "ff011e0007627802034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed19280969800000000000b48656c6c6f20" - "576f726c6400c2eb0b00000000000000001e0995750207ecaf0ccf251c1265b92ad84f553662304402205616d6e361439d67a5c2067bbfc8" - "fce61b93061a4fa113315a1c5cf965ff6f3202200a1d99caaa98aeebcec04edd5365352500addb830c79f49b9de484ec616bb1e1"); - auto actual = deserializer.deserialize(); - - ASSERT_EQ(0xFF, actual.header); - ASSERT_EQ(1, actual.version); - ASSERT_EQ(30, actual.network); - ASSERT_EQ(Ark::Crypto::Enums::Types::TRANSFER, actual.type); - ASSERT_EQ(41443847, actual.timestamp); - ASSERT_STREQ("034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed192", actual.senderPublicKey.c_str()); - ASSERT_TRUE(10000000 == actual.fee); - ASSERT_STREQ("48656c6c6f20576f726c64", actual.vendorFieldHex.c_str()); - ASSERT_STREQ("Hello World", actual.vendorField.c_str()); - ASSERT_TRUE(200000000 == actual.amount); - ASSERT_STREQ("ecf558fbddd62ae42edcfcba02f402d987a94b72a7636ef1121e8625487e2a1e", actual.id.c_str()); - ASSERT_STREQ("D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib", actual.recipientId.c_str()); - ASSERT_STREQ( - "304402205616d6e361439d67a5c2067bbfc8fce61b93061a4fa113315a1c5cf965ff6f3202200a1d99caaa98aeebcec04edd5365352500ad" - "db830c79f49b9de484ec616bb1e1", - actual.signature.c_str()); - ASSERT_TRUE(actual.verify()); -} - -TEST(transactions, deserialize_second_signature_registration) { - // second_signature_registration/second-passphrase.json - Ark::Crypto::Transactions::Deserializer deserializer( - "ff011e013bc27502034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed1920065cd1d000000000003699e966b25" - "25f9088a6941d8d94f7869964a000efe65783d78ac82e1199fe609304402202aab49477dd3531e4473196d08fbd7c00ebb79223d5eaaeaf0" - "2c52c4041a86cf02201a7d82655f9b1d22af3ea94e6f183649bb4610cdeca3b9e20d6c8773f869831c"); - auto actual = deserializer.deserialize(); - - ASSERT_EQ(0xFF, actual.header); - ASSERT_EQ(1, actual.version); - ASSERT_EQ(30, actual.network); - ASSERT_EQ(Ark::Crypto::Enums::Types::SECOND_SIGNATURE_REGISTRATION, actual.type); - ASSERT_EQ(41271867, actual.timestamp); - ASSERT_STREQ("034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed192", actual.senderPublicKey.c_str()); - ASSERT_TRUE(500000000 == actual.fee); - ASSERT_TRUE(0 == actual.amount); - ASSERT_EQ(0, actual.expiration); - ASSERT_STREQ("6d1615924d172d352c8f44d4ded84cbbece3c03ebb3e4fc3f3334784ae332590", actual.id.c_str()); - ASSERT_STREQ("03699e966b2525f9088a6941d8d94f7869964a000efe65783d78ac82e1199fe609", - actual.asset.signature.publicKey.c_str()); - ASSERT_STREQ( - "304402202aab49477dd3531e4473196d08fbd7c00ebb79223d5eaaeaf02c52c4041a86cf02201a7d82655f9b1d22af3ea94e6f183649bb46" - "10cdeca3b9e20d6c8773f869831c", - actual.signature.c_str()); - ASSERT_TRUE(actual.verify()); - - // special case as the type 1 transaction itself has no recipientId - const auto publicKey = Ark::Crypto::Identities::PublicKey::fromHex(actual.senderPublicKey.c_str()); - const auto address = Ark::Crypto::Identities::Address::fromPublicKey(publicKey, actual.network); - ASSERT_STREQ(address.toString().c_str(), actual.recipientId.c_str()); -} - -#if 0 -TEST(transactions, deserialize_delegate_registration) -{ - // delegate_registration/second-passphrase.json - Ark::Crypto::Transactions::Deserializer deserializer("ff011e02b0b87502034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed19200f90295000000000009626f6c646e696e6a613045022100f21b742fa052cd18de43328e1d068539ba7cbe9d33a9dcbd862a82871383955d0220053b06d22ed3e3ad6168c6b27aa0ec68e7e40958c7709aec0e1555087ea9ad94304402207da580da4feec955edcb8e8eb36947867b439de3d28d38e58c844fd8c45b564302200e6741b6ad11c2588a57b3afd180df1e9b345d48a9c2ae98be57dced869cf38c"); - auto actual = deserializer.deserialize(); - - ASSERT_EQ(0xFF, actual.header); - ASSERT_EQ(1, actual.version); - ASSERT_EQ(30, actual.network); - ASSERT_EQ(Ark::Crypto::Enums::Types::DELEGATE_REGISTRATION, actual.type); - ASSERT_EQ(41269424, actual.timestamp); - ASSERT_STREQ("034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed192", actual.senderPublicKey.c_str()); - ASSERT_TRUE(2500000000 == actual.fee); - ASSERT_TRUE(0 == actual.amount); - ASSERT_EQ(0, actual.expiration); - ASSERT_STREQ("bf7e018ff9c0066f7a9f51e95d3f78c08cad5dd8581325d630d64350181a91bb", actual.id.c_str()); - ASSERT_STREQ("boldninja", actual.asset.delegate.username.c_str()); - ASSERT_STREQ("3045022100f21b742fa052cd18de43328e1d068539ba7cbe9d33a9dcbd862a82871383955d0220053b06d22ed3e3ad6168c6b27aa0ec68e7e40958c7709aec0e1555087ea9ad94", actual.signature.c_str()); - ASSERT_STREQ("304402207da580da4feec955edcb8e8eb36947867b439de3d28d38e58c844fd8c45b564302200e6741b6ad11c2588a57b3afd180df1e9b345d48a9c2ae98be57dced869cf38c", actual.secondSignature.c_str()); - ASSERT_TRUE(actual.verify()); -} -#endif - -TEST(transactions, deserialize_vote) { - // vote/second-passphrase.json - Ark::Crypto::Transactions::Deserializer deserializer( - "ff011e0376b87502034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed19200e1f50500000000000101022cca95" - "29ec97a772156c152a00aad155ee6708243e65c9d211a589cb5d43234d304402204b8bb403e2db7f9599d46d0f5d39f8bb1d0663d875af7e" - "c1154448e98466e86302201e92fb57e13fb729b07e1027fa3d6e3f28e0d5828ed2d7c53a5e8db08cb6d068304402201329882762a42d1af9" - "079c822a9e3feefa47b7476b0afe61440637408958a64402206da179b08e31d9c784fbb23abe2c9b50353ed7881dc29787a5e8ecbee2dfda" - "66"); - auto actual = deserializer.deserialize(); - - ASSERT_EQ(0xFF, actual.header); - ASSERT_EQ(1, actual.version); - ASSERT_EQ(30, actual.network); - ASSERT_EQ(Ark::Crypto::Enums::Types::VOTE, actual.type); - ASSERT_EQ(41269366, actual.timestamp); - ASSERT_STREQ("034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed192", actual.senderPublicKey.c_str()); - ASSERT_TRUE(100000000 == actual.fee); - ASSERT_TRUE(0 == actual.amount); - ASSERT_EQ(0, actual.expiration); - ASSERT_STREQ("16f28a180cd6f3ea46c10f358a457989e956e9d355258230d0c7b07acec10b73", actual.id.c_str()); - ASSERT_STREQ("D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib", actual.recipientId.c_str()); - - std::vector votes = {std::string("+022cca9529ec97a772156c152a00aad155ee6708243e65c9d211a589cb5d43234d")}; - ASSERT_EQ(1, actual.asset.votes.size()); - ASSERT_STREQ(votes[0].c_str(), actual.asset.votes[0].c_str()); - - ASSERT_STREQ( - "304402204b8bb403e2db7f9599d46d0f5d39f8bb1d0663d875af7ec1154448e98466e86302201e92fb57e13fb729b07e1027fa3d6e3f28e0" - "d5828ed2d7c53a5e8db08cb6d068", - actual.signature.c_str()); - ASSERT_STREQ( - "304402201329882762a42d1af9079c822a9e3feefa47b7476b0afe61440637408958a64402206da179b08e31d9c784fbb23abe2c9b50353e" - "d7881dc29787a5e8ecbee2dfda66", - actual.secondSignature.c_str()); - ASSERT_TRUE(actual.verify()); -} - -TEST(transactions, deserialize_multi_signature_registration) { - // multi_signature_registration/passphrase.json - Ark::Crypto::Transactions::Deserializer deserializer( - "ff011704724c9a00036928c98ee53a1f52ed01dd87db10ffe1980eb47cd7c0a7d688321f47b5d7d76000943577000000000002031803543c" - "6cc3545be6bac09c82721973a052c690658283472e88f24d14739f75acc80276dc5b8706a85ca9fdc46e571ac84e52fbb48e13ec7a165a80" - "731b44ae89f1fc02e8d5d17eb17bbc8d7bf1001d29a2d25d1249b7bb7a5b7ad8b7422063091f4b3130440220324d89c5792e4a54ae70b4f1" - "e27e2f87a8b7169cc6f2f7b2c83dba894960f987022053b8d0ae23ff9d1769364db7b6fd03216d93753c82a711c3558045e787bc01a53044" - "02201fcd54a9ac9c0269b8cec213566ddf43207798e2cf9ca1ce3c5d315d66321c6902201aa94c4ed3e5e479a12220aa886b259e488eb89b" - "697c711f91e8c03b9620e0b1ff304502210097f17c8eecf36f86a967cc52a83fa661e4ffc70cc4ea08df58673669406d424c0220798f5710" - "897b75dda42f6548f841afbe4ed1fa262097112cf5a1b3f7dade60e4304402201a4a4c718bfdc699bbb891b2e89be018027d2dcd10640b5d" - "df07802424dab78e02204ec7c7d505d2158c3b51fdd3843d16aecd2eaaa4c6c7a555ef123c5e59fd41fb304402207e660489bced5ce80c33" - "d45c86781b63898775ab4a231bb48780f97b40073a63022026f0cefd0d83022d822522ab4366a82e3b89085c328817919939f2efeabd913" - "d"); - auto actual = deserializer.deserialize(); - - ASSERT_EQ(0xFF, actual.header); - ASSERT_EQ(1, actual.version); - ASSERT_EQ(23, actual.network); - ASSERT_EQ(Ark::Crypto::Enums::Types::MULTI_SIGNATURE_REGISTRATION, actual.type); - ASSERT_EQ(10112114, actual.timestamp); - ASSERT_STREQ("036928c98ee53a1f52ed01dd87db10ffe1980eb47cd7c0a7d688321f47b5d7d760", actual.senderPublicKey.c_str()); - ASSERT_TRUE(2000000000 == actual.fee); - ASSERT_TRUE(0 == actual.amount); - ASSERT_EQ(0, actual.expiration); - - std::vector keysgroup = {"+03543c6cc3545be6bac09c82721973a052c690658283472e88f24d14739f75acc8", - "+0276dc5b8706a85ca9fdc46e571ac84e52fbb48e13ec7a165a80731b44ae89f1fc", - "+02e8d5d17eb17bbc8d7bf1001d29a2d25d1249b7bb7a5b7ad8b7422063091f4b31"}; - - ASSERT_EQ(3, actual.asset.multiSignature.keysgroup.size()); - ASSERT_EQ(2, actual.asset.multiSignature.min); - ASSERT_EQ(24, actual.asset.multiSignature.lifetime); - - for (uint8_t i = 0; i < keysgroup.size(); i++) { - ASSERT_STREQ(keysgroup[i].c_str(), actual.asset.multiSignature.keysgroup[i].c_str()); - } - - ASSERT_STREQ("cbd6862966bb1b03ba742397b7e5a88d6eefb393a362ead0d605723b840db2af", actual.id.c_str()); - - ASSERT_STREQ( - "30440220324d89c5792e4a54ae70b4f1e27e2f87a8b7169cc6f2f7b2c83dba894960f987022053b8d0ae23ff9d1769364db7b6fd03216d93" - "753c82a711c3558045e787bc01a5", - actual.signature.c_str()); - ASSERT_STREQ( - "304402201fcd54a9ac9c0269b8cec213566ddf43207798e2cf9ca1ce3c5d315d66321c6902201aa94c4ed3e5e479a12220aa886b259e488e" - "b89b697c711f91e8c03b9620e0b1", - actual.secondSignature.c_str()); - - std::vector signatures = { - "304502210097f17c8eecf36f86a967cc52a83fa661e4ffc70cc4ea08df58673669406d424c0220798f5710897b75dda42f6548f841afbe4e" - "d1fa262097112cf5a1b3f7dade60e4", - "304402201a4a4c718bfdc699bbb891b2e89be018027d2dcd10640b5ddf07802424dab78e02204ec7c7d505d2158c3b51fdd3843d16aecd2e" - "aaa4c6c7a555ef123c5e59fd41fb", - "304402207e660489bced5ce80c33d45c86781b63898775ab4a231bb48780f97b40073a63022026f0cefd0d83022d822522ab4366a82e3b89" - "085c328817919939f2efeabd913d"}; - - ASSERT_EQ(3, actual.signatures.size()); - for (uint8_t i = 0; i < signatures.size(); i++) { - ASSERT_STREQ(signatures[i].c_str(), actual.signatures[i].c_str()); - } - - ASSERT_TRUE(actual.verify()); - - // special case as the type 4 transaction itself has no recipientId - const auto publicKey = Ark::Crypto::Identities::PublicKey::fromHex(actual.senderPublicKey.c_str()); - const auto address = Ark::Crypto::Identities::Address::fromPublicKey(publicKey, actual.network); - ASSERT_STREQ(address.toString().c_str(), actual.recipientId.c_str()); -} diff --git a/test/transactions/serializer.cpp b/test/transactions/serializer.cpp deleted file mode 100644 index a5b29cb1..00000000 --- a/test/transactions/serializer.cpp +++ /dev/null @@ -1,154 +0,0 @@ -#include "gtest/gtest.h" - -#include "transactions/serializer.h" - -TEST(transactions, serialize_transfer) { - // transfer/passphrase-with-vendor-field.json - Ark::Crypto::Transactions::Transaction transaction; - - transaction.type = 0; - transaction.fee = 10000000; - transaction.amount = 200000000; - transaction.timestamp = 41443847; - transaction.recipientId = "D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib"; - transaction.senderPublicKey = "034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed192"; - transaction.vendorField = "Hello World"; - transaction.signature = - "304402205616d6e361439d67a5c2067bbfc8fce61b93061a4fa113315a1c5cf965ff6f3202200a1d99caaa98aeebcec04edd5365352500ad" - "db830c79f49b9de484ec616bb1e1"; - - Ark::Crypto::Transactions::Serializer serializer(transaction); - std::string actual = serializer.serialize(); - - ASSERT_STREQ( - "ff011e0007627802034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed19280969800000000000b48656c6c6f20" - "576f726c6400c2eb0b00000000000000001e0995750207ecaf0ccf251c1265b92ad84f553662304402205616d6e361439d67a5c2067bbfc8" - "fce61b93061a4fa113315a1c5cf965ff6f3202200a1d99caaa98aeebcec04edd5365352500addb830c79f49b9de484ec616bb1e1", - actual.c_str()); -} - -TEST(transactions, serialize_second_signature_registration) { - // second_signature_registration/second-passphrase.json - Ark::Crypto::Transactions::Transaction transaction; - - transaction.type = 1; - transaction.fee = 500000000; - transaction.timestamp = 41271867; - transaction.senderPublicKey = "034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed192"; - transaction.signature = - "304402202aab49477dd3531e4473196d08fbd7c00ebb79223d5eaaeaf02c52c4041a86cf02201a7d82655f9b1d22af3ea94e6f183649bb46" - "10cdeca3b9e20d6c8773f869831c"; - transaction.asset.signature.publicKey = "03699e966b2525f9088a6941d8d94f7869964a000efe65783d78ac82e1199fe609"; - - Ark::Crypto::Transactions::Serializer serializer(transaction); - std::string actual = serializer.serialize(); - - ASSERT_STREQ( - "ff011e013bc27502034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed1920065cd1d000000000003699e966b25" - "25f9088a6941d8d94f7869964a000efe65783d78ac82e1199fe609304402202aab49477dd3531e4473196d08fbd7c00ebb79223d5eaaeaf0" - "2c52c4041a86cf02201a7d82655f9b1d22af3ea94e6f183649bb4610cdeca3b9e20d6c8773f869831c", - actual.c_str()); -} - -TEST(transactions, serialize_delegate_registration) { - // delegate_registration/second-passphrase.json - Ark::Crypto::Transactions::Transaction transaction; - - transaction.type = 2; - transaction.fee = 2500000000; - transaction.timestamp = 41269424; - transaction.senderPublicKey = "034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed192"; - transaction.signature = - "3045022100f21b742fa052cd18de43328e1d068539ba7cbe9d33a9dcbd862a82871383955d0220053b06d22ed3e3ad6168c6b27aa0ec68e7" - "e40958c7709aec0e1555087ea9ad94"; - transaction.secondSignature = - "304402207da580da4feec955edcb8e8eb36947867b439de3d28d38e58c844fd8c45b564302200e6741b6ad11c2588a57b3afd180df1e9b34" - "5d48a9c2ae98be57dced869cf38c"; - transaction.asset.delegate.username = "boldninja"; - - Ark::Crypto::Transactions::Serializer serializer(transaction); - std::string actual = serializer.serialize(); - - ASSERT_STREQ( - "ff011e02b0b87502034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed19200f90295000000000009626f6c646e" - "696e6a613045022100f21b742fa052cd18de43328e1d068539ba7cbe9d33a9dcbd862a82871383955d0220053b06d22ed3e3ad6168c6b27a" - "a0ec68e7e40958c7709aec0e1555087ea9ad94304402207da580da4feec955edcb8e8eb36947867b439de3d28d38e58c844fd8c45b564302" - "200e6741b6ad11c2588a57b3afd180df1e9b345d48a9c2ae98be57dced869cf38c", - actual.c_str()); -} - -TEST(transactions, serialize_vote) { - // vote/second-passphrase.json - Ark::Crypto::Transactions::Transaction transaction; - - transaction.type = 3; - transaction.fee = 100000000; - transaction.timestamp = 41269366; - transaction.recipientId = "D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib"; - transaction.senderPublicKey = "034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed192"; - transaction.signature = - "304402204b8bb403e2db7f9599d46d0f5d39f8bb1d0663d875af7ec1154448e98466e86302201e92fb57e13fb729b07e1027fa3d6e3f28e0" - "d5828ed2d7c53a5e8db08cb6d068"; - transaction.secondSignature = - "304402201329882762a42d1af9079c822a9e3feefa47b7476b0afe61440637408958a64402206da179b08e31d9c784fbb23abe2c9b50353e" - "d7881dc29787a5e8ecbee2dfda66"; - transaction.asset.votes = {"+022cca9529ec97a772156c152a00aad155ee6708243e65c9d211a589cb5d43234d"}; - - Ark::Crypto::Transactions::Serializer serializer(transaction); - std::string actual = serializer.serialize(); - - ASSERT_STREQ( - "ff011e0376b87502034151a3ec46b5670a682b0a63394f863587d1bc97483b1b6c70eb58e7f0aed19200e1f50500000000000101022cca95" - "29ec97a772156c152a00aad155ee6708243e65c9d211a589cb5d43234d304402204b8bb403e2db7f9599d46d0f5d39f8bb1d0663d875af7e" - "c1154448e98466e86302201e92fb57e13fb729b07e1027fa3d6e3f28e0d5828ed2d7c53a5e8db08cb6d068304402201329882762a42d1af9" - "079c822a9e3feefa47b7476b0afe61440637408958a64402206da179b08e31d9c784fbb23abe2c9b50353ed7881dc29787a5e8ecbee2dfda" - "66", - actual.c_str()); -} - -TEST(transactions, serialize_multi_signature_registration) { - // multi_signature_registration/passphrase.json - Ark::Crypto::Transactions::Transaction transaction; - - transaction.type = 4; - transaction.version = 1; - transaction.network = 23; - transaction.fee = 2000000000; - transaction.timestamp = 10112114; - transaction.senderPublicKey = "036928c98ee53a1f52ed01dd87db10ffe1980eb47cd7c0a7d688321f47b5d7d760"; - transaction.signature = - "30440220324d89c5792e4a54ae70b4f1e27e2f87a8b7169cc6f2f7b2c83dba894960f987022053b8d0ae23ff9d1769364db7b6fd03216d93" - "753c82a711c3558045e787bc01a5"; - transaction.secondSignature = - "304402201fcd54a9ac9c0269b8cec213566ddf43207798e2cf9ca1ce3c5d315d66321c6902201aa94c4ed3e5e479a12220aa886b259e488e" - "b89b697c711f91e8c03b9620e0b1"; - transaction.signatures = { - "304502210097f17c8eecf36f86a967cc52a83fa661e4ffc70cc4ea08df58673669406d424c0220798f5710897b75dda42f6548f841afbe4e" - "d1fa262097112cf5a1b3f7dade60e4", - "304402201a4a4c718bfdc699bbb891b2e89be018027d2dcd10640b5ddf07802424dab78e02204ec7c7d505d2158c3b51fdd3843d16aecd2e" - "aaa4c6c7a555ef123c5e59fd41fb", - "304402207e660489bced5ce80c33d45c86781b63898775ab4a231bb48780f97b40073a63022026f0cefd0d83022d822522ab4366a82e3b89" - "085c328817919939f2efeabd913d"}; - - transaction.asset.multiSignature.keysgroup = {"+03543c6cc3545be6bac09c82721973a052c690658283472e88f24d14739f75acc8", - "+0276dc5b8706a85ca9fdc46e571ac84e52fbb48e13ec7a165a80731b44ae89f1fc", - "+02e8d5d17eb17bbc8d7bf1001d29a2d25d1249b7bb7a5b7ad8b7422063091f4b31"}; - transaction.asset.multiSignature.lifetime = 24; - transaction.asset.multiSignature.min = 2; - - Ark::Crypto::Transactions::Serializer serializer(transaction); - std::string actual = serializer.serialize(); - - ASSERT_STREQ( - "ff011704724c9a00036928c98ee53a1f52ed01dd87db10ffe1980eb47cd7c0a7d688321f47b5d7d76000943577000000000002031803543c" - "6cc3545be6bac09c82721973a052c690658283472e88f24d14739f75acc80276dc5b8706a85ca9fdc46e571ac84e52fbb48e13ec7a165a80" - "731b44ae89f1fc02e8d5d17eb17bbc8d7bf1001d29a2d25d1249b7bb7a5b7ad8b7422063091f4b3130440220324d89c5792e4a54ae70b4f1" - "e27e2f87a8b7169cc6f2f7b2c83dba894960f987022053b8d0ae23ff9d1769364db7b6fd03216d93753c82a711c3558045e787bc01a53044" - "02201fcd54a9ac9c0269b8cec213566ddf43207798e2cf9ca1ce3c5d315d66321c6902201aa94c4ed3e5e479a12220aa886b259e488eb89b" - "697c711f91e8c03b9620e0b1ff304502210097f17c8eecf36f86a967cc52a83fa661e4ffc70cc4ea08df58673669406d424c0220798f5710" - "897b75dda42f6548f841afbe4ed1fa262097112cf5a1b3f7dade60e4304402201a4a4c718bfdc699bbb891b2e89be018027d2dcd10640b5d" - "df07802424dab78e02204ec7c7d505d2158c3b51fdd3843d16aecd2eaaa4c6c7a555ef123c5e59fd41fb304402207e660489bced5ce80c33" - "d45c86781b63898775ab4a231bb48780f97b40073a63022026f0cefd0d83022d822522ab4366a82e3b89085c328817919939f2efeabd913" - "d", - actual.c_str()); -} diff --git a/test/transactions/transaction.cpp b/test/transactions/transaction.cpp deleted file mode 100644 index 3f4db81b..00000000 --- a/test/transactions/transaction.cpp +++ /dev/null @@ -1,197 +0,0 @@ -#include "gtest/gtest.h" - -#include "transactions/builder.h" -#include "helpers/json.h" - -#include -#include - -TEST(transactions, transaction_to_array) { - // Type 0 - auto transfer = Ark::Crypto::Transactions::Builder::buildTransfer("D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib", 1, "", "Secret passphrase"); - std::map tArray = transfer.toArray(); - - // Amount - ASSERT_STREQ("1", tArray["amount"].c_str()); - // Fee - ASSERT_STREQ("10000000", tArray["fee"].c_str()); - // Id - ASSERT_STRNE("", tArray["id"].c_str()); - // RecipientId - ASSERT_STREQ("D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib", tArray["recipientId"].c_str()); - // SenderPublicKey - ASSERT_STREQ("02f21aca9b6d224ea86a1689f57910534af21c3cc9f80602fed252c13e275f0699", tArray["senderPublicKey"].c_str()); - // Signature - ASSERT_STRNE("", tArray["signature"].c_str()); - // Timestamp - ASSERT_STRNE("", tArray["timestamp"].c_str()); - // Type - ASSERT_STREQ("0", tArray["type"].c_str()); - - - // Type 1 - auto secondSignatureRegistration = Ark::Crypto::Transactions::Builder::buildSecondSignatureRegistration("Secret passphrase", "Second Secret passphrase"); - std::map ssArray = secondSignatureRegistration.toArray(); - - // Amount - ASSERT_STREQ("0", ssArray["amount"].c_str()); - // Asset - ASSERT_STREQ("02e1684d8990c0a5625aec85977fcf22204884bc08d45dbc71b2859e5fa4f45104", ssArray["publicKey"].c_str()); - // Fee - ASSERT_STREQ("500000000", ssArray["fee"].c_str()); - // Id - ASSERT_STRNE("", ssArray["id"].c_str()); - // RecipientId - ASSERT_STREQ("", ssArray["recipientId"].c_str()); - // SecondSignature - ASSERT_STRNE("", ssArray["secondSignature"].c_str()); - // SenderPublicKey - ASSERT_STREQ("02f21aca9b6d224ea86a1689f57910534af21c3cc9f80602fed252c13e275f0699", ssArray["senderPublicKey"].c_str()); - // Signature - ASSERT_STRNE("", ssArray["signature"].c_str()); - // Timestamp - ASSERT_STRNE("", ssArray["timestamp"].c_str()); - // Type - ASSERT_STREQ("1", ssArray["type"].c_str()); - - - // Type 2 - auto delegateRegistration = Ark::Crypto::Transactions::Builder::buildDelegateRegistration("testName", "Secret passphrase"); - std::map dArray = delegateRegistration.toArray(); - - // Amount - ASSERT_STREQ("0", dArray["amount"].c_str()); - // Asset - ASSERT_STREQ("testName", dArray["username"].c_str()); - // Fee - ASSERT_STREQ("2500000000", dArray["fee"].c_str()); - // Id - ASSERT_STRNE("", dArray["id"].c_str()); - // RecipientId - ASSERT_STREQ("", dArray["recipientId"].c_str()); - // SecondSignature - ASSERT_STREQ("", dArray["secondSignature"].c_str()); - // SenderPublicKey - ASSERT_STREQ("02f21aca9b6d224ea86a1689f57910534af21c3cc9f80602fed252c13e275f0699", dArray["senderPublicKey"].c_str()); - // Signature - ASSERT_STRNE("", dArray["signature"].c_str()); - // Timestamp - ASSERT_STRNE("", dArray["timestamp"].c_str()); - // Type - ASSERT_STREQ("2", dArray["type"].c_str()); - - - // Type 3 - std::vector votes = { "-0250b742256f9321bd7d46f3ed9769b215a7c2fb02be951acf43bc51eb57ceadf6", "+0250b742256f9321bd7d46f3ed9769b215a7c2fb02be951acf43bc51eb57ceadf6" }; - auto vote = Ark::Crypto::Transactions::Builder::buildVote(votes, "Secret passphrase"); - std::map vArray = vote.toArray(); - - // Amount - ASSERT_STREQ("0", vArray["amount"].c_str()); - // Asset - ASSERT_STREQ("-0250b742256f9321bd7d46f3ed9769b215a7c2fb02be951acf43bc51eb57ceadf6,+0250b742256f9321bd7d46f3ed9769b215a7c2fb02be951acf43bc51eb57ceadf6", vArray["votes"].c_str()); - // Fee - ASSERT_STREQ("100000000", vArray["fee"].c_str()); - // Id - ASSERT_STRNE("", vArray["id"].c_str()); - // RecipientId - ASSERT_STREQ("DPgZq5MK6rm5yVks9b7TrA22F8FwRvkCtF", vArray["recipientId"].c_str()); - // SecondSignature - ASSERT_STREQ("", vArray["secondSignature"].c_str()); - // SenderPublicKey - ASSERT_STREQ("02f21aca9b6d224ea86a1689f57910534af21c3cc9f80602fed252c13e275f0699", vArray["senderPublicKey"].c_str()); - // Signature - ASSERT_STRNE("", vArray["signature"].c_str()); - // Timestamp - ASSERT_STRNE("", vArray["timestamp"].c_str()); - // Type - ASSERT_STREQ("3", vArray["type"].c_str()); -} - -TEST(transactions, transaction_to_json) { - - // Type 0 - auto transfer = Ark::Crypto::Transactions::Builder::buildTransfer("D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib", 1, "", "Secret passphrase"); - std::string tJson = transfer.toJson(); - - const size_t tCapacity = JSON_OBJECT_SIZE(8) + 450; - DynamicJsonBuffer tJsonBuffer(tCapacity); - - JsonObject& tRoot = tJsonBuffer.parseObject(tJson); - - ASSERT_EQ(tRoot["amount"], 1); - ASSERT_EQ(tRoot["fee"], 10000000); - ASSERT_STRNE("", tRoot["id"].as()); - ASSERT_STREQ("D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib", tRoot["recipientId"].as()); - ASSERT_STREQ("02f21aca9b6d224ea86a1689f57910534af21c3cc9f80602fed252c13e275f0699", tRoot["senderPublicKey"].as()); - ASSERT_STRNE("", tRoot["signature"].as()); - ASSERT_GT(tRoot["timestamp"], 50000000); - ASSERT_LT(tRoot["timestamp"], 1000000000); - ASSERT_EQ(tRoot["type"], 0); - - - // Type 1 - auto secondSignatureRegistration = Ark::Crypto::Transactions::Builder::buildSecondSignatureRegistration("Secret passphrase", "Second Secret passphrase"); - std::string ssJson = secondSignatureRegistration.toJson(); - - const size_t ssCapacity = 2*JSON_OBJECT_SIZE(1) + JSON_OBJECT_SIZE(10) + 690; - DynamicJsonBuffer ssJsonBuffer(ssCapacity); - - JsonObject& ssRoot = ssJsonBuffer.parseObject(ssJson); - - ASSERT_EQ(ssRoot["amount"], 0); - ASSERT_STREQ("02e1684d8990c0a5625aec85977fcf22204884bc08d45dbc71b2859e5fa4f45104", ssRoot["asset"]["signature"]["publicKey"].as()); - ASSERT_EQ(ssRoot["fee"], 500000000); - ASSERT_STRNE("", ssRoot["id"].as()); - ASSERT_STREQ("", ssRoot["recipientId"].as()); - ASSERT_STRNE("", ssRoot["secondSignature"].as()); - ASSERT_STREQ("02f21aca9b6d224ea86a1689f57910534af21c3cc9f80602fed252c13e275f0699", ssRoot["senderPublicKey"].as()); - ASSERT_STRNE("", ssRoot["signature"].as()); - ASSERT_GT(ssRoot["timestamp"], 50000000); - ASSERT_LT(ssRoot["timestamp"], 1000000000); - ASSERT_EQ(ssRoot["type"], 1); - - - // Type 2 - auto delegateRegistration = Ark::Crypto::Transactions::Builder::buildDelegateRegistration("testName", "Secret passphrase"); - std::string dJson = delegateRegistration.toJson(); - - const size_t dCapacity = 2*JSON_OBJECT_SIZE(1) + JSON_OBJECT_SIZE(9) + 450; - DynamicJsonBuffer dJsonBuffer(dCapacity); - - JsonObject& dRoot = dJsonBuffer.parseObject(dJson); - - ASSERT_EQ(dRoot["amount"], 0); - ASSERT_STREQ("testName", dRoot["asset"]["delegate"]["username"].as()); - ASSERT_EQ(dRoot["fee"], 2500000000); - ASSERT_STRNE("", dRoot["id"].as()); - ASSERT_STREQ("", dRoot["recipientId"].as()); - ASSERT_STREQ("02f21aca9b6d224ea86a1689f57910534af21c3cc9f80602fed252c13e275f0699", dRoot["senderPublicKey"].as()); - ASSERT_STRNE("", dRoot["signature"].as()); - ASSERT_GT(dRoot["timestamp"], 50000000); - ASSERT_LT(dRoot["timestamp"], 1000000000); - ASSERT_EQ(dRoot["type"], 2); - - - // Type 3 - std::vector votes = { "-0250b742256f9321bd7d46f3ed9769b215a7c2fb02be951acf43bc51eb57ceadf6,+0250b742256f9321bd7d46f3ed9769b215a7c2fb02be951acf43bc51eb57ceadf6" }; - auto vote = Ark::Crypto::Transactions::Builder::buildVote(votes, "Secret passphrase"); - std::string vJson = vote.toJson(); - - const size_t vCapacity = JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(1) + JSON_OBJECT_SIZE(9) + 540; - DynamicJsonBuffer vJsonBuffer(vCapacity); - - JsonObject& vRoot = vJsonBuffer.parseObject(vJson); - - ASSERT_EQ(vRoot["amount"], 0); - ASSERT_STREQ("-0250b742256f9321bd7d46f3ed9769b215a7c2fb02be951acf43bc51eb57ceadf6", vRoot["asset"]["votes"][0].as()); - ASSERT_STREQ("+0250b742256f9321bd7d46f3ed9769b215a7c2fb02be951acf43bc51eb57ceadf6", vRoot["asset"]["votes"][1].as()); - ASSERT_EQ(vRoot["fee"], 100000000); - ASSERT_STRNE("", vRoot["id"].as()); - ASSERT_STREQ("DPgZq5MK6rm5yVks9b7TrA22F8FwRvkCtF", vRoot["recipientId"].as()); - ASSERT_STREQ("02f21aca9b6d224ea86a1689f57910534af21c3cc9f80602fed252c13e275f0699", vRoot["senderPublicKey"].as()); - ASSERT_STRNE("", vRoot["signature"].as()); - ASSERT_GT(vRoot["timestamp"], 50000000); - ASSERT_LT(vRoot["timestamp"], 1000000000); - ASSERT_EQ(vRoot["type"], 3); -}; diff --git a/test/utils/message.cpp b/test/utils/message.cpp deleted file mode 100644 index b1170001..00000000 --- a/test/utils/message.cpp +++ /dev/null @@ -1,52 +0,0 @@ - -#include "gtest/gtest.h" - -#include "utils/message.h" - -#include - -namespace { // NOLINT -const auto text = "Computer science is no more about computers than astronomy is about telescopes."; -const auto passphrase = "viable weasel wage promote praise inflict jaguar tackle color unusual exclude direct"; -const auto expectedSignature = "3044022021704f2adb2e4a10a3ddc1d7d64552b8061c05f6d12a168c69091c75581d611402200edf37689d2786fc690af9f0f6fa1f629c95695039f648a6d455484302402e93"; -const auto expectedPublicKey = "0275776018638e5c40f1b922901e96cac2caa734585ef302b4a2801ee9a338a456"; -const auto expectedJsonString = "{\"publickey\":\"0275776018638e5c40f1b922901e96cac2caa734585ef302b4a2801ee9a338a456\",\"signature\":\"3044022021704f2adb2e4a10a3ddc1d7d64552b8061c05f6d12a168c69091c75581d611402200edf37689d2786fc690af9f0f6fa1f629c95695039f648a6d455484302402e93\",\"message\":\"Computer science is no more about computers than astronomy is about telescopes.\"}"; -} // namespace - -TEST(utils, message_sign) { - Ark::Crypto::Utils::Message message; - - message.sign(text, passphrase); - - ASSERT_STREQ(expectedSignature, BytesToHex(message.signature).c_str()); - ASSERT_TRUE(message.verify()); -} - -TEST(utils, message_to_array) { - Ark::Crypto::Utils::Message message; - - message.sign(text, passphrase); - - std::map messageArray = message.toArray(); - - ASSERT_STREQ(expectedPublicKey, messageArray["publickey"].c_str()); - ASSERT_STREQ(expectedSignature, messageArray["signature"].c_str()); - ASSERT_STREQ(text, messageArray["message"].c_str()); -} - -TEST(utils, message_to_json) { - Ark::Crypto::Utils::Message message; - - message.sign(text, passphrase); - - ASSERT_STREQ(expectedJsonString, message.toJson().c_str()); -} - -TEST(utils, message_verify) { - PublicKey publicKey = PublicKey::fromHex(expectedPublicKey); - std::vector signature = HexToBytes(expectedSignature); - - Ark::Crypto::Utils::Message message(text, publicKey, signature); - - ASSERT_TRUE(message.verify()); -} diff --git a/test/utils/slot.cpp b/test/utils/slot.cpp deleted file mode 100644 index 80a46b41..00000000 --- a/test/utils/slot.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include "gtest/gtest.h" -#include "gtest/gtest.h" - -#include "helpers/crypto_helpers.h" -#include "utils/slot.h" - -TEST(utilities, slots_epoch) { - const auto devnet = Ark::Crypto::Networks::Devnet; - const auto arkEpoch = 1490101200ull; - ASSERT_EQ(arkEpoch, Ark::Crypto::Utils::Slot::epoch(devnet)); -} - -TEST(utilities, slots_time) { - const auto devnet = Ark::Crypto::Networks::Devnet; - - // 28 Jan 2019(in seconds) - Ark Epoch (seconds) - const auto testTime = (1548725761ull - 1490101200ull); - const auto slotTime = Ark::Crypto::Utils::Slot::time(devnet); - - // test that slot-time is more recent than 'testTime', - ASSERT_GT(slotTime , testTime); - // also check that the 'slotTime' is not too large (e.g. from an overflow). - ASSERT_LT(slotTime, (testTime) + 315360000); // 315360000s = 10yrs -}