From cac5a6aab047dd23d15d2b68c206e0981c9fb6b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Vejpustek?= Date: Tue, 2 Apr 2024 16:51:01 +0200 Subject: [PATCH] chore(core): introduce elligator2 feature flag --- core/SConscript.firmware | 8 +++++++- core/SConscript.unix | 8 +++++++- core/embed/extmod/modtrezorcrypto/modtrezorcrypto.c | 4 ++++ core/src/trezor/crypto/__init__.py | 6 +++++- 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/core/SConscript.firmware b/core/SConscript.firmware index 8b280bbbf..edb0fc240 100644 --- a/core/SConscript.firmware +++ b/core/SConscript.firmware @@ -17,6 +17,7 @@ FEATURE_FLAGS = { "RDI": True, "SECP256K1_ZKP": True, # required for trezor.crypto.curve.bip340 (BIP340/Taproot) "SYSTEM_VIEW": False, + "ELLIGATOR2": False, } FEATURES_WANTED = ["input", "sbu", "sd_card", "rgb_led", "dma2d", "consumption_mask", "usb" ,"optiga"] @@ -110,7 +111,6 @@ SOURCE_MOD += [ 'vendor/trezor-crypto/ed25519-donna/ed25519-sha3.c', 'vendor/trezor-crypto/ed25519-donna/ed25519.c', 'vendor/trezor-crypto/ed25519-donna/modm-donna-32bit.c', - 'vendor/trezor-crypto/elligator2.c', 'vendor/trezor-crypto/groestl.c', 'vendor/trezor-crypto/hasher.c', 'vendor/trezor-crypto/hmac.c', @@ -368,6 +368,12 @@ if FEATURE_FLAGS["SYSTEM_VIEW"]: CPPDEFINES_MOD += ['SYSTEM_VIEW'] CCFLAGS_MOD += '-DSYSTEM_VIEW ' +if FEATURE_FLAGS["ELLIGATOR2"]: + CPPDEFINES_MOD += ['USE_ELLIGATOR2'] + SOURCE_MOD += [ + 'vendor/trezor-crypto/elligator2.c', + ] + # fonts tools.add_font('NORMAL', FONT_NORMAL, CPPDEFINES_MOD, SOURCE_MOD) tools.add_font('BOLD', FONT_BOLD, CPPDEFINES_MOD, SOURCE_MOD) diff --git a/core/SConscript.unix b/core/SConscript.unix index 6154e3905..e828e7228 100644 --- a/core/SConscript.unix +++ b/core/SConscript.unix @@ -23,6 +23,7 @@ if TREZOR_MODEL in ('DISC1', ): FEATURE_FLAGS = { "SECP256K1_ZKP": True, # required for trezor.crypto.curve.bip340 (BIP340/Taproot) + "ELLIGATOR2": True, } CCFLAGS_MOD = '' @@ -113,7 +114,6 @@ SOURCE_MOD += [ 'vendor/trezor-crypto/ed25519-donna/ed25519-sha3.c', 'vendor/trezor-crypto/ed25519-donna/ed25519.c', 'vendor/trezor-crypto/ed25519-donna/modm-donna-32bit.c', - 'vendor/trezor-crypto/elligator2.c', 'vendor/trezor-crypto/groestl.c', 'vendor/trezor-crypto/hasher.c', 'vendor/trezor-crypto/hmac.c', @@ -171,6 +171,12 @@ if FEATURE_FLAGS["SECP256K1_ZKP"]: 'vendor/trezor-crypto/zkp_bip340.c', ] +if FEATURE_FLAGS["ELLIGATOR2"]: + CPPDEFINES_MOD += ['USE_ELLIGATOR2'] + SOURCE_MOD += [ + 'vendor/trezor-crypto/elligator2.c', + ] + # modtrezorio SOURCE_MOD += [ 'embed/extmod/modtrezorio/modtrezorio.c', diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto.c b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto.c index 3f0e4bc9d..f41ad3480 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto.c +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto.c @@ -52,7 +52,9 @@ static void wrapped_ui_wait_callback(uint32_t current, uint32_t total) { #include "modtrezorcrypto-crc.h" #include "modtrezorcrypto-curve25519.h" #include "modtrezorcrypto-ed25519.h" +#if USE_ELLIGATOR2 #include "modtrezorcrypto-elligator2.h" +#endif #include "modtrezorcrypto-groestl.h" #include "modtrezorcrypto-hmac.h" #include "modtrezorcrypto-nist256p1.h" @@ -97,8 +99,10 @@ STATIC const mp_rom_map_elem_t mp_module_trezorcrypto_globals_table[] = { MP_ROM_PTR(&mod_trezorcrypto_curve25519_module)}, {MP_ROM_QSTR(MP_QSTR_ed25519), MP_ROM_PTR(&mod_trezorcrypto_ed25519_module)}, +#if USE_ELLIGATOR2 {MP_ROM_QSTR(MP_QSTR_elligator2), MP_ROM_PTR(&mod_trezorcrypto_elligator2_module)}, +#endif #if !BITCOIN_ONLY {MP_ROM_QSTR(MP_QSTR_monero), MP_ROM_PTR(&mod_trezorcrypto_monero_module)}, #endif diff --git a/core/src/trezor/crypto/__init__.py b/core/src/trezor/crypto/__init__.py index 0a1969afd..20b9552b0 100644 --- a/core/src/trezor/crypto/__init__.py +++ b/core/src/trezor/crypto/__init__.py @@ -4,12 +4,16 @@ from trezorcrypto import ( # noqa: F401 bip39, chacha20poly1305, crc, - elligator2, hmac, pbkdf2, random, ) +try: + from trezorcrypto import elligator2 # noqa: F401 +except Exception: + pass + from trezor import utils if not utils.BITCOIN_ONLY: