1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-26 00:08:10 +00:00

refactor(core): turn SECP256K1_ZKP into a firmware feature flag

This commit is contained in:
Pavol Rusnak 2020-11-18 14:44:17 +01:00 committed by Tomas Susanka
parent 6508d0a3c7
commit f3d5de15ef
5 changed files with 28 additions and 19 deletions

View File

@ -8,14 +8,13 @@ TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T')
FEATURE_FLAGS = {
"RDI": True,
"SECP256K1_ZKP": True,
}
CCFLAGS_MOD = ''
CPPPATH_MOD = []
CPPDEFINES_MOD = []
SOURCE_MOD = []
if EVERYTHING:
SOURCE_MOD_SECP256K1_ZKP = []
PYOPT = ARGUMENTS.get('PYOPT', '1')
FROZEN = True
@ -107,7 +106,7 @@ if EVERYTHING:
]
# libsecp256k1-zkp
if EVERYTHING:
if EVERYTHING and FEATURE_FLAGS["SECP256K1_ZKP"]:
CPPPATH_MOD += [
'vendor/secp256k1-zkp',
'vendor/secp256k1-zkp/src',
@ -130,7 +129,7 @@ if EVERYTHING:
'ENABLE_MODULE_RECOVERY',
'ENABLE_MODULE_ECDH',
]
SOURCE_MOD_SECP256K1_ZKP += [
SOURCE_MOD_SECP256K1_ZKP = [
'vendor/secp256k1-zkp/src/secp256k1.c',
'vendor/secp256k1-zkp/src/asm/field_10x26_arm.s'
]
@ -565,8 +564,7 @@ if FROZEN:
#
# static secp256-zkp ecmult context
#
if EVERYTHING:
if EVERYTHING and FEATURE_FLAGS["SECP256K1_ZKP"]:
host_env = Environment(ENV=os.environ)
host_env.Replace(
CC=os.getenv('CC_FOR_BUILD') or 'gcc',
@ -589,7 +587,7 @@ if EVERYTHING:
obj_program = []
obj_program.extend(env.Object(source=SOURCE_MOD))
if EVERYTHING:
if EVERYTHING and FEATURE_FLAGS["SECP256K1_ZKP"]:
obj_program.extend(env.Object(source=SOURCE_MOD_SECP256K1_ZKP, CCFLAGS='$CCFLAGS -Wno-unused-function'))
obj_program.extend(env.Object(source=SOURCE_FIRMWARE))
obj_program.extend(env.Object(source=SOURCE_MICROPYTHON))
@ -618,7 +616,7 @@ obj_program.extend(
' $SOURCE $TARGET', ))
env.Depends(obj_program, qstr_generated)
if EVERYTHING:
if EVERYTHING and FEATURE_FLAGS["SECP256K1_ZKP"]:
env.Depends(obj_program, secp256k1_zkp_ecmult_static_context)
program_elf = env.Command(

View File

@ -6,14 +6,16 @@ BITCOIN_ONLY = ARGUMENTS.get('BITCOIN_ONLY', '0')
EVERYTHING = BITCOIN_ONLY != '1'
TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T')
FEATURE_FLAGS = {
"SECP256K1_ZKP": True,
}
CCFLAGS_MOD = ''
CPPPATH_MOD = []
CPPDEFINES_MOD = []
SOURCE_MOD = [
'vendor/micropython/extmod/vfs_posix_file.c',
]
if EVERYTHING:
SOURCE_MOD_SECP256K1_ZKP = []
PYOPT = ARGUMENTS.get('PYOPT', '1')
FROZEN = ARGUMENTS.get('TREZOR_EMULATOR_FROZEN', 0)
@ -103,7 +105,7 @@ if EVERYTHING:
]
# libsecp256k1-zkp
if EVERYTHING:
if EVERYTHING and FEATURE_FLAGS["SECP256K1_ZKP"]:
CPPPATH_MOD += [
'vendor/secp256k1-zkp',
'vendor/secp256k1-zkp/src',
@ -124,7 +126,7 @@ if EVERYTHING:
'ENABLE_MODULE_RECOVERY',
'ENABLE_MODULE_ECDH',
]
SOURCE_MOD_SECP256K1_ZKP += [
SOURCE_MOD_SECP256K1_ZKP = [
'vendor/secp256k1-zkp/src/secp256k1.c',
]
@ -532,8 +534,7 @@ if FROZEN:
#
# static secp256-zkp ecmult context
#
if EVERYTHING:
if EVERYTHING and FEATURE_FLAGS["SECP256K1_ZKP"]:
host_env = Environment(ENV=os.environ)
host_env.Replace(
CC=os.getenv('CC_FOR_BUILD') or 'gcc',
@ -556,7 +557,7 @@ if EVERYTHING:
obj_program = []
obj_program.extend(env.Object(source=SOURCE_MOD))
if EVERYTHING:
if EVERYTHING and FEATURE_FLAGS["SECP256K1_ZKP"]:
obj_program.extend(env.Object(source=SOURCE_MOD_SECP256K1_ZKP, CCFLAGS='$CCFLAGS -Wno-unused-function'))
obj_program.extend(env.Object(source=SOURCE_MICROPYTHON))
obj_program.extend(env.Object(source=SOURCE_UNIX))
@ -564,7 +565,7 @@ if FROZEN:
obj_program.extend(env.Object(source=source_mpyc))
env.Depends(obj_program, qstr_generated)
if EVERYTHING:
if EVERYTHING and FEATURE_FLAGS["SECP256K1_ZKP"]:
env.Depends(obj_program, secp256k1_zkp_ecmult_static_context)
program = env.Command(

View File

@ -52,8 +52,10 @@
#if !BITCOIN_ONLY
#include "modtrezorcrypto-monero.h"
#include "modtrezorcrypto-nem.h"
#ifdef SECP256K1_BUILD
#include "modtrezorcrypto-secp256k1_zkp.h"
#endif
#endif
STATIC const mp_rom_map_elem_t mp_module_trezorcrypto_globals_table[] = {
{MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_trezorcrypto)},
@ -89,8 +91,10 @@ STATIC const mp_rom_map_elem_t mp_module_trezorcrypto_globals_table[] = {
{MP_ROM_QSTR(MP_QSTR_secp256k1),
MP_ROM_PTR(&mod_trezorcrypto_secp256k1_module)},
#if !BITCOIN_ONLY
#ifdef SECP256K1_BUILD
{MP_ROM_QSTR(MP_QSTR_secp256k1_zkp),
MP_ROM_PTR(&mod_trezorcrypto_secp256k1_zkp_module)},
#endif
#endif
{MP_ROM_QSTR(MP_QSTR_sha1), MP_ROM_PTR(&mod_trezorcrypto_Sha1_type)},
{MP_ROM_QSTR(MP_QSTR_sha256), MP_ROM_PTR(&mod_trezorcrypto_Sha256_type)},

View File

@ -3,4 +3,7 @@ from trezorcrypto import curve25519, ed25519, nist256p1, secp256k1 # noqa: F401
from trezor import utils
if not utils.BITCOIN_ONLY:
try:
from trezorcrypto import secp256k1_zkp # noqa: F401
except ImportError:
pass

View File

@ -4,7 +4,10 @@ from trezor.crypto import random
from trezor.crypto.curve import secp256k1
if not utils.BITCOIN_ONLY:
try:
from trezor.crypto.curve import secp256k1_zkp
except ImportError:
secp256k1_zkp = None
class Secp256k1Common(object):
@ -141,7 +144,7 @@ class TestCryptoSecp256k1(Secp256k1Common, unittest.TestCase):
def __init__(self):
self.impl = secp256k1
@unittest.skipUnless(not utils.BITCOIN_ONLY, "altcoin")
@unittest.skipUnless(secp256k1_zkp is not None, "altcoin")
class TestCryptoSecp256k1Zkp(Secp256k1Common, unittest.TestCase):
def __init__(self):
self.impl = secp256k1_zkp.Context()