diff --git a/Makefile b/Makefile index 939b6f7..469217b 100755 --- a/Makefile +++ b/Makefile @@ -24,7 +24,7 @@ APP_LOAD_PARAMS=--appFlags 0x50 --path "" --curve secp256k1 $(COMMON_LOAD_PARAMS APPVERSION_M=1 APPVERSION_N=1 -APPVERSION_P=7 +APPVERSION_P=8 APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) # ifndef COIN @@ -39,6 +39,10 @@ else ifeq ($(COIN),bitcoin) # Bitcoin mainnet DEFINES += BTCHIP_P2PKH_VERSION=0 BTCHIP_P2SH_VERSION=5 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Bitcoin\" COINID_UPCASE=\"BITCOIN\" COLOR_HDR=0xFCB653 COLOR_DB=0xFEDBA9 COINID_NAME=\"Bitcoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"BTC\" COIN_BITCOIN APPNAME ="Bitcoin" +else ifeq ($(COIN),bitcoin_cash) +# Bitcoin cash +DEFINES += BTCHIP_P2PKH_VERSION=0 BTCHIP_P2SH_VERSION=5 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Bitcoin\" COINID_UPCASE=\"BITCOINCASH\" COLOR_HDR=0x85bb65 COLOR_DB=0xc2ddb2 COINID_NAME=\"BitcoinCash\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"BCH\" COIN_BITCOIN_CASH +APPNAME ="Bitcoin Cash" else ifeq ($(COIN),litecoin) # Litecoin DEFINES += BTCHIP_P2PKH_VERSION=48 BTCHIP_P2SH_VERSION=5 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Litecoin\" COINID_UPCASE=\"LITECOIN\" COLOR_HDR=0xCCCCCC COLOR_DB=0xE6E6E6 COINID_NAME=\"Litecoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"LTC\" COIN_LITECOIN @@ -68,11 +72,11 @@ else ifeq ($(COIN),peercoin) DEFINES += BTCHIP_P2PKH_VERSION=55 BTCHIP_P2SH_VERSION=117 BTCHIP_COIN_FAMILY=2 BTCHIP_COINID=\"Peercoin\" COINID_UPCASE=\"PPC\" COLOR_HDR=0x3790CA COLOR_DB=0x9BC8E5 COINID_NAME=\"Peercoin\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"PPC\" COIN_PEERCOIN HAVE_PEERCOIN_SUPPORT APPNAME ="Peercoin" else ifeq ($(COIN),posw) -DEFINES += BTCHIP_P2PKH_VERSION=55 BTCHIP_P2SH_VERSION=85 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"PoSWallet\" COINID_UPCASE=\"POSW\" COLOR_HDR=0x23273D COLOR_DB=0x91939E COINID_NAME=\"PoSW\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"POSW\" COIN_POSW +DEFINES += BTCHIP_P2PKH_VERSION=55 BTCHIP_P2SH_VERSION=85 BTCHIP_COIN_FAMILY=2 BTCHIP_COINID=\"PoSWallet\" COINID_UPCASE=\"POSW\" COLOR_HDR=0x23273D COLOR_DB=0x91939E COINID_NAME=\"PoSW\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"POSW\" COIN_POSW HAVE_PEERCOIN_SUPPORT APPNAME ="PoSW" else ifeq ($(filter clean,$(MAKECMDGOALS)),) -$(error Unsupported COIN - use bitcoin_testnet, bitcoin, litecoin, dogecoin, dash, zcash, komodo, stratis, peercoin, posw) +$(error Unsupported COIN - use bitcoin_testnet, bitcoin, bitcoin_cash, litecoin, dogecoin, dash, zcash, komodo, stratis, peercoin, posw) endif endif diff --git a/blue_app_bitcoin_cash.gif b/blue_app_bitcoin_cash.gif new file mode 100644 index 0000000..adcfbb6 Binary files /dev/null and b/blue_app_bitcoin_cash.gif differ diff --git a/glyphs/blue_badge_bitcoin_cash.gif b/glyphs/blue_badge_bitcoin_cash.gif new file mode 100644 index 0000000..9a63e6d Binary files /dev/null and b/glyphs/blue_badge_bitcoin_cash.gif differ diff --git a/glyphs/nanos_badge_bitcoin_cash.gif b/glyphs/nanos_badge_bitcoin_cash.gif new file mode 100644 index 0000000..d43e12f Binary files /dev/null and b/glyphs/nanos_badge_bitcoin_cash.gif differ diff --git a/nanos_app_bitcoin_cash.gif b/nanos_app_bitcoin_cash.gif new file mode 100644 index 0000000..9fa736b Binary files /dev/null and b/nanos_app_bitcoin_cash.gif differ diff --git a/src/btchip_apdu_get_trusted_input.c b/src/btchip_apdu_get_trusted_input.c index a1b31ab..3bee3e3 100644 --- a/src/btchip_apdu_get_trusted_input.c +++ b/src/btchip_apdu_get_trusted_input.c @@ -50,6 +50,7 @@ unsigned short btchip_apdu_get_trusted_input() { btchip_set_check_internal_structure_integrity(1); dataOffset = 4; btchip_context_D.transactionHashOption = TRANSACTION_HASH_FULL; + btchip_context_D.usingSegwit = 0; } else if (G_io_apdu_buffer[ISO_OFFSET_P1] != GET_TRUSTED_INPUT_P1_NEXT) { return BTCHIP_SW_INCORRECT_P1_P2; } diff --git a/src/btchip_apdu_hash_sign.c b/src/btchip_apdu_hash_sign.c index f2bdde1..3f93935 100644 --- a/src/btchip_apdu_hash_sign.c +++ b/src/btchip_apdu_hash_sign.c @@ -19,6 +19,9 @@ #include "btchip_apdu_constants.h" #define SIGHASH_ALL 0x01 +#ifdef COIN_BITCOIN_CASH +#define SIGHASH_FORKID 0x40 +#endif unsigned short btchip_apdu_hash_sign() { unsigned long int lockTime; @@ -84,10 +87,17 @@ unsigned short btchip_apdu_hash_sign() { if (((N_btchip.bkp.config.options & BTCHIP_OPTION_FREE_SIGHASHTYPE) == 0)) { +#ifdef COIN_BITCOIN_CASH + if (sighashType != (SIGHASH_ALL | SIGHASH_FORKID)) { + sw = BTCHIP_SW_INCORRECT_DATA; + goto discardTransaction; + } +#else if (sighashType != SIGHASH_ALL) { sw = BTCHIP_SW_INCORRECT_DATA; goto discardTransaction; } +#endif } // Read transaction parameters