mirror of
https://github.com/logos-storage/constantine.git
synced 2026-01-03 13:43:10 +00:00
* First draft at bindings generation
* finite field bindings PoC
* support openarray, export NimMain
* PoC extension fields and elliptic curve bindings
* Pasta
* expose more bindings, remove nimZeroMem, remove tracer when unused, codegen name_mangling`gensym issue
* workaround bad C gensym codegen with {.inline.} pragma in non-dirty template nested in generic proc instantiated by template
78 lines
2.7 KiB
Nim
78 lines
2.7 KiB
Nim
# Constantine
|
|
# Copyright (c) 2018-2019 Status Research & Development GmbH
|
|
# Copyright (c) 2020-Present Mamy André-Ratsimbazafy
|
|
# Licensed and distributed under either of
|
|
# * MIT license (license terms in the root directory or at http://opensource.org/licenses/MIT).
|
|
# * Apache v2 license (license terms in the root directory or at http://www.apache.org/licenses/LICENSE-2.0).
|
|
# at your option. This file may not be copied, modified, or distributed except according to those terms.
|
|
|
|
import ./gen_bindings, ./gen_header
|
|
|
|
type
|
|
pallas_fr = Fr[Pallas]
|
|
pallas_fp = Fp[Pallas]
|
|
vesta_fr = Fr[Vesta]
|
|
vesta_fp = Fp[Vesta]
|
|
pallas_ec_aff = ECP_ShortW_Aff[Fp[Pallas], G1]
|
|
pallas_ec_jac = ECP_ShortW_Aff[Fp[Pallas], G1]
|
|
pallas_ec_prj = ECP_ShortW_Aff[Fp[Pallas], G1]
|
|
vesta_ec_aff = ECP_ShortW_Aff[Fp[Vesta], G1]
|
|
vesta_ec_jac = ECP_ShortW_Aff[Fp[Vesta], G1]
|
|
vesta_ec_prj = ECP_ShortW_Aff[Fp[Vesta], G1]
|
|
|
|
collectBindings(cBindings):
|
|
genBindingsField(pallas_fr)
|
|
genBindingsField(pallas_fp)
|
|
genBindingsFieldSqrt(pallas_fp)
|
|
genBindingsField(vesta_fr)
|
|
genBindingsField(vesta_fp)
|
|
genBindingsFieldSqrt(vesta_fp)
|
|
genBindings_EC_ShortW_Affine(pallas_ec_aff, pallas_fp)
|
|
genBindings_EC_ShortW_Affine(vesta_ec_aff, pallas_fp)
|
|
|
|
# Write header
|
|
when isMainModule and defined(CttGenerateHeaders):
|
|
import std/os
|
|
|
|
proc main() =
|
|
echo "Running bindings generation for " & getAppFilename().extractFilename()
|
|
|
|
var header: string
|
|
header = genBuiltinsTypes()
|
|
header &= '\n'
|
|
header &= genCttBaseTypedef()
|
|
header &= '\n'
|
|
header &= genWordsRequired()
|
|
header &= '\n'
|
|
header &= genField("pallas_fr", Pallas.getCurveOrderBitWidth())
|
|
header &= '\n'
|
|
header &= genField("pallas_fp", Pallas.getCurveBitWidth())
|
|
header &= '\n'
|
|
header &= genField("vesta_fr", Vesta.getCurveOrderBitWidth())
|
|
header &= '\n'
|
|
header &= genField("vesta_fp", Vesta.getCurveBitWidth())
|
|
header &= '\n'
|
|
header &= genEllipticCurvePoint("pallas_ec_aff", "x, y", "pallas_fp")
|
|
header &= '\n'
|
|
header &= genEllipticCurvePoint("pallas_ec_jac", "x, y, z", "pallas_fp")
|
|
header &= '\n'
|
|
header &= genEllipticCurvePoint("pallas_ec_prj", "x, y, z", "pallas_fp")
|
|
header &= '\n'
|
|
header &= genEllipticCurvePoint("vesta_ec_aff", "x, y", "vesta_fp")
|
|
header &= '\n'
|
|
header &= genEllipticCurvePoint("vesta_ec_jac", "x, y, z", "vesta_fp")
|
|
header &= '\n'
|
|
header &= genEllipticCurvePoint("vesta_ec_prj", "x, y, z", "vesta_fp")
|
|
header &= '\n'
|
|
header &= cBindings
|
|
header &= '\n'
|
|
header &= declNimMain("pasta")
|
|
|
|
header = genCpp(header)
|
|
header = genHeader("PASTA", header)
|
|
header = genHeaderLicense() & header
|
|
|
|
writeFile("constantine_pasta.h", header)
|
|
|
|
|
|
main() |