

ADD_EXECUTABLE(curve25519 EXCLUDE_FROM_ALL
    curve25519.c)
TARGET_LINK_LIBRARIES(curve25519 mpfq_p_25519 gmp)

ADD_EXECUTABLE(surf127eps EXCLUDE_FROM_ALL
    surf127eps.c)
SET_SOURCE_FILES_PROPERTIES(surf127eps.c COMPILE_FLAGS "-O")
TARGET_LINK_LIBRARIES(surf127eps mpfq_p_127_735 gmp)

ADD_EXECUTABLE(curve2_251 EXCLUDE_FROM_ALL
    curve2_251.c)
TARGET_LINK_LIBRARIES(curve2_251 mpfq_2_251 gmp)

ADD_EXECUTABLE(surf2_113 EXCLUDE_FROM_ALL
    surf2_113.c)
TARGET_LINK_LIBRARIES(surf2_113 mpfq_2_113 gmp)

ADD_CUSTOM_TARGET(apps)
ADD_DEPENDENCIES(apps curve25519 surf127eps curve2_251 surf2_113)


##################################
###  Data for bench and tests
##################################

# Test data for curve25519
SET (input_curve25519
 80807010984578203925308608286196538954626424777283028112521645237022220463139
 55733833028607976699834723209716956874398376051241301282267543585006903214099)
SET (output_curve25519
 28900896108968887700245167342157870854207414725120603260895377618044279782516)
# Test data for surf127eps
SET (input_surf127eps
 8989806888014370473117755397430651947838921398443070195927188591932991731478
 1
 125502655864557899853401523876923848672
 61968963782336585200062542731328438959
 85200832278915591934167993094470869032)
SET (output_surf127eps
 "1 15611645695747380114852933880187146488 75866353444389142208086070132263339889 138253729419623408912518068110282102028")
# Test data for curve2_251
SET (input_curve2_251
 1411214224289847061698078554422268058798435593322882630984515140092457033472
 2381534459352789112385117940713773459189462301512095627591936004374809288635)
SET (output_curve2_251
 1190426708887629635264698047638771333687697766331653839518769749900108039319)
# Test data for surf2_113
SET (input_surf2_113
 5913369630930828585928565323096496294573733703322036623241333262897
 1
 1238984503090426823044878048926908
 7545492644397800203664618119174637
 2148163187067577342061514160110689)
SET (output_surf2_113
 "1 6831195734377328204627445004668410 6357295029998284436657569880444448 7403711197958053139690888451052614")

##################################

ADD_CUSTOM_TARGET(bench-apps
  COMMAND echo "benching 1000 scalar mul on curve25519..."
  COMMAND time ./curve25519 ${input_curve25519} > /dev/null
  COMMAND echo "benching 1000 scalar mul on surf127eps..."
  COMMAND time ./surf127eps ${input_surf127eps} > /dev/null
  COMMAND echo "benching 1000 scalar mul on curve2_251..."
  COMMAND time ./curve2_251 ${input_curve2_251} > /dev/null
  COMMAND echo "benching 1000 scalar mul on surf2_113..."
  COMMAND time ./surf2_113 ${input_surf2_113} > /dev/null
  VERBATIM
)
ADD_DEPENDENCIES(bench-apps apps)

SET(tmpfile ${CMAKE_CURRENT_BINARY_DIR}/temp)

ADD_CUSTOM_TARGET(check-apps
  COMMAND echo "Testing apps binaries..."
  COMMAND ./curve25519 ${input_curve25519} > ${tmpfile}
  COMMAND echo ${output_curve25519} | diff - ${tmpfile}
  COMMAND ./curve2_251 ${input_curve2_251} > ${tmpfile}
  COMMAND echo ${output_curve2_251} | diff - ${tmpfile}
  COMMAND ./surf127eps ${input_surf127eps} > ${tmpfile}
  COMMAND echo ${output_surf127eps} | diff - ${tmpfile}
  COMMAND ./surf2_113 ${input_surf2_113} > ${tmpfile}
  COMMAND echo ${output_surf2_113} | diff - ${tmpfile}
  COMMAND echo "All tests passed."
  VERBATIM
  )
ADD_DEPENDENCIES(check-apps apps)
