diff --git a/CMakeLists.txt b/CMakeLists.txt index 958336e..6011f7c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,10 +10,20 @@ project(DECAF VERSION 0.9.4 LANGUAGES C CXX) set(DECAF_SO_VERSION "0") +find_package( PythonInterp 2.7 REQUIRED ) + option(ENABLE_SHARED "Build shared library." ON) option(ENABLE_STATIC "Build static library." ON) option(ENABLE_STRICT "Build with strict compile options." YES) option(ENABLE_TESTS "Enable compilation of tests." YES) +option(GENERATED_SOURCE_PATH "Where the generated source code is stored, default in the building tree" OFF) + +if (GENERATED_SOURCE_PATH) + set(GSOURCE_PATH ${GENERATED_SOURCE_PATH}) +else() + set(GSOURCE_PATH ${PROJECT_BINARY_DIR}/src/GENERATED) +endif() +message("Generated source code in ${GSOURCE_PATH}") if(NOT CPACK_GENERATOR AND NOT CMAKE_INSTALL_RPATH AND CMAKE_INSTALL_PREFIX) set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR}) @@ -25,7 +35,7 @@ include(CheckSymbolExists) include(CMakePushCheckState) include_directories( - src/GENERATED/include/ + ${GSOURCE_PATH}/include/ src/include/ src/ ${CMAKE_CURRENT_BINARY_DIR} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2585c73..6ad75fd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -58,20 +58,23 @@ include_directories( set(DECAF_SOURCE_FILES_CXX ) -add_subdirectory(GENERATED/c/p25519) -add_subdirectory(GENERATED/c/p448) -add_subdirectory(GENERATED/c/curve25519) -add_subdirectory(GENERATED/c/ed448goldilocks) +add_subdirectory(curve25519) +add_subdirectory(ed448goldilocks) +add_subdirectory(p25519) +add_subdirectory(p448) +add_subdirectory(generator) if(ENABLE_STATIC) add_library(decaf-static STATIC ${DECAF_HEADER_FILES} ${DECAF_SOURCE_FILES_C} ${DECAF_SOURCE_FILES_CXX} $ $ $ $) + add_dependencies(decaf-static generatedCode) set_target_properties(decaf-static PROPERTIES OUTPUT_NAME decaf) target_include_directories(decaf-static PUBLIC) target_link_libraries(decaf-static INTERFACE) endif() if(ENABLE_SHARED) add_library(decaf SHARED ${DECAF_HEADER_FILES} ${DECAF_SOURCE_FILES_C} ${DECAF_SOURCE_FILES_CXX} $ $ $ $) + add_dependencies(decaf generatedCode) if(APPLE) set_target_properties(decaf PROPERTIES LINK_FLAGS "-stdlib=libc++") endif() @@ -105,7 +108,7 @@ if(ENABLE_SHARED) ) endif() -install(DIRECTORY GENERATED/include/ +install(DIRECTORY ${GSOURCE_PATH}/include/ DESTINATION include/decaf FILES_MATCHING PATTERN "*.h*" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ diff --git a/src/GENERATED/c/curve25519/CMakeLists.txt b/src/GENERATED/c/curve25519/CMakeLists.txt deleted file mode 100644 index dd64d1c..0000000 --- a/src/GENERATED/c/curve25519/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -############################################################################ -# CMakeLists.txt -# -# Released under the MIT License. See LICENSE.txt for license information. -# -############################################################################ - -include_directories( - ${PROJECT_SOURCE_DIR}/src/p25519 - ${PROJECT_SOURCE_DIR}/src/GENERATED/c/p25519 -) - -include_directories( - ${PROJECT_SOURCE_DIR}/src/p25519/${TARGET_ARCH_DIR_P25519} -) - -set(CURVE25519_SOURCE_FILES_C - decaf.c - elligator.c - scalar.c - eddsa.c - decaf_tables.c -) - -add_library(CURVE25519 OBJECT ${CURVE25519_SOURCE_FILES_C}) -set_target_properties(CURVE25519 PROPERTIES POSITION_INDEPENDENT_CODE True) diff --git a/src/GENERATED/c/ed448goldilocks/CMakeLists.txt b/src/GENERATED/c/ed448goldilocks/CMakeLists.txt deleted file mode 100644 index 180efc6..0000000 --- a/src/GENERATED/c/ed448goldilocks/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -############################################################################ -# CMakeLists.txt -# -# Released under the MIT License. See LICENSE.txt for license information. -# -############################################################################ - -include_directories( - ${PROJECT_SOURCE_DIR}/src/p448 - ${PROJECT_SOURCE_DIR}/src/GENERATED/c/p448 -) - -include_directories( - ${PROJECT_SOURCE_DIR}/src/p448/${TARGET_ARCH_DIR_P448} -) - -set(CURVE448_SOURCE_FILES_C - decaf.c - elligator.c - scalar.c - eddsa.c - decaf_tables.c -) - -add_library(CURVE448 OBJECT ${CURVE448_SOURCE_FILES_C}) -set_target_properties(CURVE448 PROPERTIES POSITION_INDEPENDENT_CODE True) diff --git a/src/curve25519/CMakeLists.txt b/src/curve25519/CMakeLists.txt new file mode 100644 index 0000000..49c7cb3 --- /dev/null +++ b/src/curve25519/CMakeLists.txt @@ -0,0 +1,30 @@ +############################################################################ +# CMakeLists.txt +# +# Released under the MIT License. See LICENSE.txt for license information. +# +############################################################################ + +include_directories( + ${PROJECT_SOURCE_DIR}/src/p25519 + ${GSOURCE_PATH}/c/p25519 + ${PROJECT_SOURCE_DIR}/src/p25519/${TARGET_ARCH_DIR_P25519} +) + +set(CURVE25519_SOURCE_FILES_C + ${GSOURCE_PATH}/c/curve25519/decaf.c + ${GSOURCE_PATH}/c/curve25519/elligator.c + ${GSOURCE_PATH}/c/curve25519/scalar.c + ${GSOURCE_PATH}/c/curve25519/eddsa.c + ${GSOURCE_PATH}/c/curve25519/decaf_tables.c +) + +SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/curve25519/decaf.c PROPERTIES GENERATED 1) +SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/curve25519/elligator.c PROPERTIES GENERATED 1) +SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/curve25519/scalar.c PROPERTIES GENERATED 1) +SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/curve25519/eddsa.c PROPERTIES GENERATED 1) +SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/curve25519/decaf_tables.c PROPERTIES GENERATED 1) + +add_library(CURVE25519 OBJECT ${CURVE25519_SOURCE_FILES_C}) +add_dependencies(CURVE25519 generatedCode) +set_target_properties(CURVE25519 PROPERTIES POSITION_INDEPENDENT_CODE True) diff --git a/src/ed448goldilocks/CMakeLists.txt b/src/ed448goldilocks/CMakeLists.txt new file mode 100644 index 0000000..9bb0367 --- /dev/null +++ b/src/ed448goldilocks/CMakeLists.txt @@ -0,0 +1,30 @@ +############################################################################ +# CMakeLists.txt +# +# Released under the MIT License. See LICENSE.txt for license information. +# +############################################################################ + +include_directories( + ${PROJECT_SOURCE_DIR}/src/p448 + ${GSOURCE_PATH}/c/p448 + ${PROJECT_SOURCE_DIR}/src/p448/${TARGET_ARCH_DIR_P448} +) + +set(CURVE448_SOURCE_FILES_C + ${GSOURCE_PATH}/c/ed448goldilocks/decaf.c + ${GSOURCE_PATH}/c/ed448goldilocks/elligator.c + ${GSOURCE_PATH}/c/ed448goldilocks/scalar.c + ${GSOURCE_PATH}/c/ed448goldilocks/eddsa.c + ${GSOURCE_PATH}/c/ed448goldilocks/decaf_tables.c +) + +SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/ed448goldilocks/decaf.c PROPERTIES GENERATED 1) +SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/ed448goldilocks/elligator.c PROPERTIES GENERATED 1) +SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/ed448goldilocks/scalar.c PROPERTIES GENERATED 1) +SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/ed448goldilocks/eddsa.c PROPERTIES GENERATED 1) +SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/ed448goldilocks/decaf_tables.c PROPERTIES GENERATED 1) + +add_library(CURVE448 OBJECT ${CURVE448_SOURCE_FILES_C}) +add_dependencies(CURVE448 generatedCode) +set_target_properties(CURVE448 PROPERTIES POSITION_INDEPENDENT_CODE True) diff --git a/src/generator/CMakeLists.txt b/src/generator/CMakeLists.txt new file mode 100644 index 0000000..de797d3 --- /dev/null +++ b/src/generator/CMakeLists.txt @@ -0,0 +1,160 @@ +############################################################################ +# CMakeLists.txt +# +# Released under the MIT License. See LICENSE.txt for license information. +# +############################################################################ +# global include files +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=global --guard=decaf.h -o ${GSOURCE_PATH}/include/decaf.h ${PROJECT_SOURCE_DIR}/src/public_include/decaf.tmpl.h + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/public_include/decaf.tmpl.h + OUTPUT ${GSOURCE_PATH}/include/decaf.h + COMMENT "Generating code for include/decaf.h" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=global --guard=decaf/eddsa.hxx -o ${GSOURCE_PATH}/include/decaf/eddsa.hxx ${PROJECT_SOURCE_DIR}/src/public_include/decaf/eddsa.tmpl.hxx + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/public_include/decaf/eddsa.tmpl.hxx + OUTPUT ${GSOURCE_PATH}/include/decaf/eddsa.hxx + COMMENT "Generating code for include/decaf/eddsa.hxx" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=global --guard=decaf.hxx -o ${GSOURCE_PATH}/include/decaf.hxx ${PROJECT_SOURCE_DIR}/src/public_include/decaf.tmpl.hxx + + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/public_include/decaf.tmpl.hxx + OUTPUT ${GSOURCE_PATH}/include/decaf.hxx + COMMENT "Generating code for include/decaf.hxx" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=global --guard=decaf/crypto.hxx -o ${GSOURCE_PATH}/c/decaf/crypto.hxx ${PROJECT_SOURCE_DIR}/src/include/decaf/crypto.tmpl.hxx + + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/include/decaf/crypto.tmpl.hxx + OUTPUT ${GSOURCE_PATH}/c/decaf/crypto.hxx + COMMENT "Generating code for decaf/crypto.hxx" +) + +# copying +add_custom_command( + COMMAND ${CMAKE_COMMAND} -E copy + ${PROJECT_SOURCE_DIR}/src/public_include/decaf/common.h + ${GSOURCE_PATH}/include/decaf/common.h + DEPENDS ${PROJECT_SOURCE_DIR}/src/public_include/decaf/common.h + OUTPUT ${GSOURCE_PATH}/include/decaf/common.h +) + +add_custom_command( + COMMAND ${CMAKE_COMMAND} -E copy + ${PROJECT_SOURCE_DIR}/src/public_include/decaf/sha512.hxx + ${GSOURCE_PATH}/include/decaf/sha512.hxx + DEPENDS ${PROJECT_SOURCE_DIR}/src/public_include/decaf/sha512.hxx + OUTPUT ${GSOURCE_PATH}/include/decaf/sha512.hxx +) + +add_custom_command( + COMMAND ${CMAKE_COMMAND} -E copy + ${PROJECT_SOURCE_DIR}/src/public_include/decaf/spongerng.h + ${GSOURCE_PATH}/include/decaf/spongerng.h + DEPENDS ${PROJECT_SOURCE_DIR}/src/public_include/decaf/spongerng.h + OUTPUT ${GSOURCE_PATH}/include/decaf/spongerng.h +) + +add_custom_command( + COMMAND ${CMAKE_COMMAND} -E copy + ${PROJECT_SOURCE_DIR}/src/public_include/decaf/shake.hxx + ${GSOURCE_PATH}/include/decaf/shake.hxx + DEPENDS ${PROJECT_SOURCE_DIR}/src/public_include/decaf/shake.hxx + OUTPUT ${GSOURCE_PATH}/include/decaf/shake.hxx +) + +add_custom_command( + COMMAND ${CMAKE_COMMAND} -E copy + ${PROJECT_SOURCE_DIR}/src/public_include/decaf/shake.h + ${GSOURCE_PATH}/include/decaf/shake.h + DEPENDS ${PROJECT_SOURCE_DIR}/src/public_include/decaf/shake.h + OUTPUT ${GSOURCE_PATH}/include/decaf/shake.h +) + +add_custom_command( + COMMAND ${CMAKE_COMMAND} -E copy + ${PROJECT_SOURCE_DIR}/src/public_include/decaf/spongerng.hxx + ${GSOURCE_PATH}/include/decaf/spongerng.hxx + DEPENDS ${PROJECT_SOURCE_DIR}/src/public_include/decaf/spongerng.hxx + OUTPUT ${GSOURCE_PATH}/include/decaf/spongerng.hxx +) +add_custom_command( + COMMAND ${CMAKE_COMMAND} -E copy + ${PROJECT_SOURCE_DIR}/src/public_include/decaf/secure_buffer.hxx + ${GSOURCE_PATH}/include/decaf/secure_buffer.hxx + DEPENDS ${PROJECT_SOURCE_DIR}/src/public_include/decaf/secure_buffer.hxx + OUTPUT ${GSOURCE_PATH}/include/decaf/secure_buffer.hxx +) +add_custom_command( + COMMAND ${CMAKE_COMMAND} -E copy + ${PROJECT_SOURCE_DIR}/src/public_include/decaf/sha512.h + ${GSOURCE_PATH}/include/decaf/sha512.h + DEPENDS ${PROJECT_SOURCE_DIR}/src/public_include/decaf/sha512.h + OUTPUT ${GSOURCE_PATH}/include/decaf/sha512.h +) + + +#these files shall be part of generatorCurve25519 and generatorEd448goldilocks targets but they are both included through decaf.h in a source file +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=curve25519 --guard=decaf/point_255.h -o ${GSOURCE_PATH}/include/decaf/point_255.h ${PROJECT_SOURCE_DIR}/src/per_curve/point.tmpl.h + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/point.tmpl.h + OUTPUT ${GSOURCE_PATH}/include/decaf/point_255.h + COMMENT "Generating code for decaf/point_255.h" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=curve25519 --guard=decaf/ed255.h -o ${GSOURCE_PATH}/include/decaf/ed255.h ${PROJECT_SOURCE_DIR}/src/per_curve/eddsa.tmpl.h + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/eddsa.tmpl.h + OUTPUT ${GSOURCE_PATH}/include/decaf/ed255.h + COMMENT "Generating code for decaf/ed255.h" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=ed448goldilocks --guard=decaf/point_448.h -o ${GSOURCE_PATH}/include/decaf/point_448.h ${PROJECT_SOURCE_DIR}/src/per_curve/point.tmpl.h + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/point.tmpl.h + OUTPUT ${GSOURCE_PATH}/include/decaf/point_448.h + COMMENT "Generating code for decaf/point_448.h" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=ed448goldilocks --guard=decaf/ed448.h -o ${GSOURCE_PATH}/include/decaf/ed448.h ${PROJECT_SOURCE_DIR}/src/per_curve/eddsa.tmpl.h + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/eddsa.tmpl.h + OUTPUT ${GSOURCE_PATH}/include/decaf/ed448.h + COMMENT "Generating code for decaf/ed448.h" +) + + + +add_custom_target(generatorCommonCode DEPENDS + ${GSOURCE_PATH}/include/decaf.h + ${GSOURCE_PATH}/include/decaf/eddsa.hxx + ${GSOURCE_PATH}/include/decaf.hxx + ${GSOURCE_PATH}/c/decaf/crypto.hxx + ${GSOURCE_PATH}/include/decaf/common.h + ${GSOURCE_PATH}/include/decaf/sha512.hxx + ${GSOURCE_PATH}/include/decaf/sha512.h + ${GSOURCE_PATH}/include/decaf/shake.hxx + ${GSOURCE_PATH}/include/decaf/shake.h + ${GSOURCE_PATH}/include/decaf/spongerng.hxx + ${GSOURCE_PATH}/include/decaf/spongerng.h + ${GSOURCE_PATH}/include/decaf/secure_buffer.hxx + #these files shall be part of curve25519 and ed448goldilocks targets but they are included through decaf.h in common *.c + ${GSOURCE_PATH}/include/decaf/point_255.h + ${GSOURCE_PATH}/include/decaf/point_448.h + ${GSOURCE_PATH}/include/decaf/ed255.h + ${GSOURCE_PATH}/include/decaf/ed448.h + ) + +add_subdirectory(curve25519) +add_subdirectory(ed448goldilocks) + +add_custom_target(generatedCode DEPENDS + generatorCommonCode + generatorEd448goldilocks + generatorCurve25519 + ) diff --git a/src/generator/curve25519/CMakeLists.txt b/src/generator/curve25519/CMakeLists.txt new file mode 100644 index 0000000..5cbe529 --- /dev/null +++ b/src/generator/curve25519/CMakeLists.txt @@ -0,0 +1,108 @@ +############################################################################ +# CMakeLists.txt +# +# Released under the MIT License. See LICENSE.txt for license information. +# +############################################################################ +# p25519 field +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=field --guard=p25519/`basename ${GSOURCE_PATH}/c/p25519/f_field.h` --item=p25519 -o ${GSOURCE_PATH}/c/p25519/f_field.h ${PROJECT_SOURCE_DIR}/src/per_field/f_field.tmpl.h + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_field/f_field.tmpl.h + OUTPUT ${GSOURCE_PATH}/c/p25519/f_field.h + COMMENT "Generating code for p25519/f_field.h" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=field --guard=p25519/`basename ${GSOURCE_PATH}/c/p25519/f_generic.c` --item=p25519 -o ${GSOURCE_PATH}/c/p25519/f_generic.c ${PROJECT_SOURCE_DIR}/src/per_field/f_generic.tmpl.c + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_field/f_generic.tmpl.c + OUTPUT ${GSOURCE_PATH}/c/p25519/f_generic.c + COMMENT "Generating code for p25519/f_generic.c" +) + +add_custom_target(generatorP25519 DEPENDS + generatorCommonCode + ${GSOURCE_PATH}/c/p25519/f_field.h + ${GSOURCE_PATH}/c/p25519/f_generic.c + ) + +# curve25519 +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=curve25519 --guard=curve25519/`basename src/GENERATED/c/curve25519/scalar.c` -o ${GSOURCE_PATH}/c/curve25519/scalar.c ${PROJECT_SOURCE_DIR}/src/per_curve/scalar.tmpl.c + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/scalar.tmpl.c + OUTPUT ${GSOURCE_PATH}/c/curve25519/scalar.c + COMMENT "Generating code for curve25519/scalar.c" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=curve25519 --guard=curve25519/`basename src/GENERATED/c/curve25519/decaf.c` -o ${GSOURCE_PATH}/c/curve25519/decaf.c ${PROJECT_SOURCE_DIR}/src/per_curve/decaf.tmpl.c + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/decaf.tmpl.c + OUTPUT ${GSOURCE_PATH}/c/curve25519/decaf.c + COMMENT "Generating code for curve25519/decaf.c" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=curve25519 --guard=curve25519/`basename src/GENERATED/c/curve25519/elligator.c` -o ${GSOURCE_PATH}/c/curve25519/elligator.c ${PROJECT_SOURCE_DIR}/src/per_curve/elligator.tmpl.c + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/elligator.tmpl.c + OUTPUT ${GSOURCE_PATH}/c/curve25519/elligator.c + COMMENT "Generating code for curve25519/elligator.c" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=curve25519 --guard=curve25519/`basename src/GENERATED/c/curve25519/eddsa.c` -o ${GSOURCE_PATH}/c/curve25519/eddsa.c ${PROJECT_SOURCE_DIR}/src/per_curve/eddsa.tmpl.c + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/eddsa.tmpl.c + OUTPUT ${GSOURCE_PATH}/c/curve25519/eddsa.c + COMMENT "Generating code for curve25519/eddsa.c" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=curve25519 --guard=curve25519/`basename src/GENERATED/c/curve25519/decaf_gen_tables.c` -o ${GSOURCE_PATH}/c/curve25519/decaf_gen_tables.c ${PROJECT_SOURCE_DIR}/src/per_curve/decaf_gen_tables.tmpl.c + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/decaf_gen_tables.tmpl.c + OUTPUT ${GSOURCE_PATH}/c/curve25519/decaf_gen_tables.c + COMMENT "Generating code for curve25519/decaf_gen_tables.c" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=curve25519 --guard=decaf/point_255.hxx -o ${GSOURCE_PATH}/include/decaf/point_255.hxx ${PROJECT_SOURCE_DIR}/src/per_curve/point.tmpl.hxx + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/point.tmpl.hxx + OUTPUT ${GSOURCE_PATH}/include/decaf/point_255.hxx + COMMENT "Generating code for include/decaf/point_255.hxx" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=curve25519 --guard=decaf/ed255.hxx -o ${GSOURCE_PATH}/include/decaf/ed255.hxx ${PROJECT_SOURCE_DIR}/src/per_curve/eddsa.tmpl.hxx + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/eddsa.tmpl.hxx + OUTPUT ${GSOURCE_PATH}/include/decaf/ed255.hxx + COMMENT "Generating code for include/decaf/ed255.hxx" +) + +#python -B src/generator/template.py --per=curve --item=curve25519 --guard=decaf/point_255.hxx -o src/GENERATED/include/decaf/point_255.hxx src/per_curve/point.tmpl.hxx +#python -B src/generator/template.py --per=curve --item=curve25519 --guard=decaf/ed255.hxx -o src/GENERATED/include/decaf/ed255.hxx src/per_curve/eddsa.tmpl.hxx + + +add_custom_target(generatorCurve25519 DEPENDS + ${GSOURCE_PATH}/c/curve25519/scalar.c + ${GSOURCE_PATH}/c/curve25519/decaf.c + ${GSOURCE_PATH}/c/curve25519/elligator.c + ${GSOURCE_PATH}/c/curve25519/eddsa.c + ${GSOURCE_PATH}/c/curve25519/decaf_tables.c + ${GSOURCE_PATH}/include/decaf/point_255.hxx + ${GSOURCE_PATH}/include/decaf/ed255.hxx + ) +include_directories( + ${PROJECT_SOURCE_DIR}/src/p25519 + ${GSOURCE_PATH}/c/p25519 + ${PROJECT_SOURCE_DIR}/src/p25519/${TARGET_ARCH_DIR_P25519} +) + +add_executable(decaf_gen_tables_curve25519 ${GSOURCE_PATH}/c/curve25519/decaf_gen_tables.c + ${GSOURCE_PATH}/c/curve25519/decaf.c + ${GSOURCE_PATH}/c/curve25519/scalar.c + ${PROJECT_SOURCE_DIR}/src/utils.c + $) + +add_custom_command( + COMMAND decaf_gen_tables_curve25519 > ${GSOURCE_PATH}/c/curve25519/decaf_tables.c + DEPENDS decaf_gen_tables_curve25519 + OUTPUT ${GSOURCE_PATH}/c/curve25519/decaf_tables.c + COMMENT "Generating code for curve25519/decaf_tables.c" +) diff --git a/src/generator/ed448goldilocks/CMakeLists.txt b/src/generator/ed448goldilocks/CMakeLists.txt new file mode 100644 index 0000000..a1a31b9 --- /dev/null +++ b/src/generator/ed448goldilocks/CMakeLists.txt @@ -0,0 +1,112 @@ +############################################################################ +# CMakeLists.txt +# +# Released under the MIT License. See LICENSE.txt for license information. +# +############################################################################ +# p448 field +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=field --guard=p448/`basename ${GSOURCE_PATH}/c/p448/f_field.h` --item=p448 -o ${GSOURCE_PATH}/c/p448/f_field.h ${PROJECT_SOURCE_DIR}/src/per_field/f_field.tmpl.h + + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_field/f_field.tmpl.h + OUTPUT ${GSOURCE_PATH}/c/p448/f_field.h + COMMENT "Generating code for p448/f_field.h" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=field --guard=p448/`basename ${GSOURCE_PATH}/c/p448/f_generic.c` --item=p448 -o ${GSOURCE_PATH}/c/p448/f_generic.c ${PROJECT_SOURCE_DIR}/src/per_field/f_generic.tmpl.c + + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_field/f_generic.tmpl.c + OUTPUT ${GSOURCE_PATH}/c/p448/f_generic.c + COMMENT "Generating code for p448/f_generic.c" +) + +add_custom_target(generatorP448 DEPENDS + generatorCommonCode + ${GSOURCE_PATH}/c/p448/f_field.h + ${GSOURCE_PATH}/c/p448/f_generic.c + ) + +# ed448goldilocks +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=ed448goldilocks --guard=ed448goldilocks/`basename src/GENERATED/c/ed448goldilocks/scalar.c` -o ${GSOURCE_PATH}/c/ed448goldilocks/scalar.c ${PROJECT_SOURCE_DIR}/src/per_curve/scalar.tmpl.c + + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/scalar.tmpl.c + OUTPUT ${GSOURCE_PATH}/c/ed448goldilocks/scalar.c + COMMENT "Generating code for ed448goldilocks/scalar.c" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=ed448goldilocks --guard=ed448goldilocks/`basename src/GENERATED/c/ed448goldilocks/decaf.c` -o ${GSOURCE_PATH}/c/ed448goldilocks/decaf.c ${PROJECT_SOURCE_DIR}/src/per_curve/decaf.tmpl.c + + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/decaf.tmpl.c + OUTPUT ${GSOURCE_PATH}/c/ed448goldilocks/decaf.c + COMMENT "Generating code for ed448goldilocks/decaf.c" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=ed448goldilocks --guard=ed448goldilocks/`basename src/GENERATED/c/ed448goldilocks/elligator.c` -o ${GSOURCE_PATH}/c/ed448goldilocks/elligator.c ${PROJECT_SOURCE_DIR}/src/per_curve/elligator.tmpl.c + + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/elligator.tmpl.c + OUTPUT ${GSOURCE_PATH}/c/ed448goldilocks/elligator.c + COMMENT "Generating code for ed448goldilocks/elligator.c" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=ed448goldilocks --guard=ed448goldilocks/`basename src/GENERATED/c/ed448goldilocks/eddsa.c` -o ${GSOURCE_PATH}/c/ed448goldilocks/eddsa.c ${PROJECT_SOURCE_DIR}/src/per_curve/eddsa.tmpl.c + + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/eddsa.tmpl.c + OUTPUT ${GSOURCE_PATH}/c/ed448goldilocks/eddsa.c + COMMENT "Generating code for ed448goldilocks/eddsa.c" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=ed448goldilocks --guard=ed448goldilocks/`basename src/GENERATED/c/ed448goldilocks/decaf_gen_tables.c` -o ${GSOURCE_PATH}/c/ed448goldilocks/decaf_gen_tables.c ${PROJECT_SOURCE_DIR}/src/per_curve/decaf_gen_tables.tmpl.c + + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/decaf_gen_tables.tmpl.c + OUTPUT ${GSOURCE_PATH}/c/ed448goldilocks/decaf_gen_tables.c + COMMENT "Generating code for ed448goldilocks/decaf_gen_tables.c" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=ed448goldilocks --guard=decaf/point_448.hxx -o ${GSOURCE_PATH}/include/decaf/point_448.hxx ${PROJECT_SOURCE_DIR}/src/per_curve/point.tmpl.hxx + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/point.tmpl.hxx + OUTPUT ${GSOURCE_PATH}/include/decaf/point_448.hxx + COMMENT "Generating code for include/decaf/point_448.hxx" +) + +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/src/generator/template.py --per=curve --item=ed448goldilocks --guard=decaf/ed448.hxx -o ${GSOURCE_PATH}/include/decaf/ed448.hxx ${PROJECT_SOURCE_DIR}/src/per_curve/eddsa.tmpl.hxx + DEPENDS ${PROJECT_SOURCE_DIR}/src/generator/template.py ${PROJECT_SOURCE_DIR}/src/per_curve/eddsa.tmpl.hxx + OUTPUT ${GSOURCE_PATH}/include/decaf/ed448.hxx + COMMENT "Generating code for include/decaf/ed448.hxx" +) + + +add_custom_target(generatorEd448goldilocks DEPENDS + ${GSOURCE_PATH}/c/ed448goldilocks/scalar.c + ${GSOURCE_PATH}/c/ed448goldilocks/decaf.c + ${GSOURCE_PATH}/c/ed448goldilocks/elligator.c + ${GSOURCE_PATH}/c/ed448goldilocks/eddsa.c + ${GSOURCE_PATH}/c/ed448goldilocks/decaf_tables.c + ${GSOURCE_PATH}/include/decaf/point_448.hxx + ${GSOURCE_PATH}/include/decaf/ed448.hxx + ) +include_directories( + ${PROJECT_SOURCE_DIR}/src/p448 + ${GSOURCE_PATH}/c/p448 + ${PROJECT_SOURCE_DIR}/src/p448/${TARGET_ARCH_DIR_P448} +) + +add_executable(decaf_gen_tables_ed448goldilocks ${GSOURCE_PATH}/c/ed448goldilocks/decaf_gen_tables.c + ${GSOURCE_PATH}/c/ed448goldilocks/decaf.c + ${GSOURCE_PATH}/c/ed448goldilocks/scalar.c + ${PROJECT_SOURCE_DIR}/src/utils.c + $) + +add_custom_command( + COMMAND decaf_gen_tables_ed448goldilocks > ${GSOURCE_PATH}/c/ed448goldilocks/decaf_tables.c + DEPENDS decaf_gen_tables_ed448goldilocks + OUTPUT ${GSOURCE_PATH}/c/ed448goldilocks/decaf_tables.c + COMMENT "Generating code for ed448goldilocks/decaf_tables.c" +) diff --git a/src/GENERATED/c/p25519/CMakeLists.txt b/src/p25519/CMakeLists.txt similarity index 58% rename from src/GENERATED/c/p25519/CMakeLists.txt rename to src/p25519/CMakeLists.txt index 3371afd..c6153fc 100644 --- a/src/GENERATED/c/p25519/CMakeLists.txt +++ b/src/p25519/CMakeLists.txt @@ -4,25 +4,26 @@ # Released under the MIT License. See LICENSE.txt for license information. # ############################################################################ - include_directories( ${PROJECT_SOURCE_DIR}/src/p25519 - ${PROJECT_SOURCE_DIR}/src/GENERATED/c/p25519 -) - -include_directories( + ${GSOURCE_PATH}/c/p25519 ${PROJECT_SOURCE_DIR}/src/p25519/${TARGET_ARCH_DIR_P25519} ) set(P25519_HEADER_FILES - f_field.h - ${PROJECT_SOURCE_DIR}/src/p25519/${TARGET_ARCH_DIR_P25519}/f_impl.h + ${GSOURCE_PATH}/c/p25519/f_field.h + ${TARGET_ARCH_DIR_P25519}/f_impl.h ) set(P25519_SOURCE_FILES_C - ${PROJECT_SOURCE_DIR}/src/p25519/${TARGET_ARCH_DIR_P25519}/f_impl.c - ${PROJECT_SOURCE_DIR}/src/p25519/f_arithmetic.c - f_generic.c + ${TARGET_ARCH_DIR_P25519}/f_impl.c + f_arithmetic.c + ${GSOURCE_PATH}/c/p25519/f_generic.c ) +SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/p25519/f_field.h PROPERTIES GENERATED 1) +SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/p25519/f_generic.c PROPERTIES GENERATED 1) + add_library(p25519 OBJECT ${P25519_HEADER_FILES} ${P25519_SOURCE_FILES_C}) +add_dependencies(p25519 generatorP25519) + set_target_properties(p25519 PROPERTIES POSITION_INDEPENDENT_CODE True) diff --git a/src/GENERATED/c/p448/CMakeLists.txt b/src/p448/CMakeLists.txt similarity index 59% rename from src/GENERATED/c/p448/CMakeLists.txt rename to src/p448/CMakeLists.txt index fc7b350..c9eef94 100644 --- a/src/GENERATED/c/p448/CMakeLists.txt +++ b/src/p448/CMakeLists.txt @@ -4,26 +4,26 @@ # Released under the MIT License. See LICENSE.txt for license information. # ############################################################################ - include_directories( ${PROJECT_SOURCE_DIR}/src/p448 - ${PROJECT_SOURCE_DIR}/src/GENERATED/c/p448 -) - -include_directories( + ${GSOURCE_PATH}/c/p448 ${PROJECT_SOURCE_DIR}/src/p448/${TARGET_ARCH_DIR_P448} ) - set(P448_HEADER_FILES - f_field.h - ${PROJECT_SOURCE_DIR}/src/p448/${TARGET_ARCH_DIR_P448}/f_impl.h + ${GSOURCE_PATH}/c/p448/f_field.h + ${TARGET_ARCH_DIR_P448}/f_impl.h ) set(P448_SOURCE_FILES_C - ${PROJECT_SOURCE_DIR}/src/p448/${TARGET_ARCH_DIR_P448}/f_impl.c - ${PROJECT_SOURCE_DIR}/src/p448/f_arithmetic.c - f_generic.c + ${TARGET_ARCH_DIR_P448}/f_impl.c + f_arithmetic.c + ${GSOURCE_PATH}/c/p448/f_generic.c ) +SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/p448/f_field.h PROPERTIES GENERATED 1) +SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/p448/f_generic.c PROPERTIES GENERATED 1) + add_library(p448 OBJECT ${P448_HEADER_FILES} ${P448_SOURCE_FILES_C}) +add_dependencies(p448 generatorP448) + set_target_properties(p448 PROPERTIES POSITION_INDEPENDENT_CODE True)