diff --git a/core/SConscript.firmware b/core/SConscript.firmware index 7cf7b9298..e1e8b7eac 100644 --- a/core/SConscript.firmware +++ b/core/SConscript.firmware @@ -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( diff --git a/core/SConscript.unix b/core/SConscript.unix index 993a5f439..f2abcc0f5 100644 --- a/core/SConscript.unix +++ b/core/SConscript.unix @@ -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( diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto.c b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto.c index 7e46d9408..fc4f7778b 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto.c +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto.c @@ -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)}, diff --git a/core/src/trezor/crypto/curve.py b/core/src/trezor/crypto/curve.py index e4dc1dcdf..c3dfa8dc2 100644 --- a/core/src/trezor/crypto/curve.py +++ b/core/src/trezor/crypto/curve.py @@ -3,4 +3,7 @@ from trezorcrypto import curve25519, ed25519, nist256p1, secp256k1 # noqa: F401 from trezor import utils if not utils.BITCOIN_ONLY: - from trezorcrypto import secp256k1_zkp # noqa: F401 + try: + from trezorcrypto import secp256k1_zkp # noqa: F401 + except ImportError: + pass diff --git a/core/tests/test_trezor.crypto.curve.secp256k1.py b/core/tests/test_trezor.crypto.curve.secp256k1.py index ef435b91a..12edb3ee2 100644 --- a/core/tests/test_trezor.crypto.curve.secp256k1.py +++ b/core/tests/test_trezor.crypto.curve.secp256k1.py @@ -4,7 +4,10 @@ from trezor.crypto import random from trezor.crypto.curve import secp256k1 if not utils.BITCOIN_ONLY: - from trezor.crypto.curve import secp256k1_zkp + 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()