From 6fcd9d27f078e0a035019562adc4a875d9aa27e6 Mon Sep 17 00:00:00 2001 From: BTChip github Date: Wed, 2 Aug 2017 01:57:00 +0200 Subject: [PATCH] Fix mixed Segwit/regular inputs signing, add Bitcoin Cash app --- Makefile | 10 +++++++--- blue_app_bitcoin_cash.gif | Bin 0 -> 446 bytes glyphs/blue_badge_bitcoin_cash.gif | Bin 0 -> 1420 bytes glyphs/nanos_badge_bitcoin_cash.gif | Bin 0 -> 68 bytes nanos_app_bitcoin_cash.gif | Bin 0 -> 1131 bytes src/btchip_apdu_get_trusted_input.c | 1 + src/btchip_apdu_hash_sign.c | 10 ++++++++++ 7 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 blue_app_bitcoin_cash.gif create mode 100644 glyphs/blue_badge_bitcoin_cash.gif create mode 100644 glyphs/nanos_badge_bitcoin_cash.gif create mode 100644 nanos_app_bitcoin_cash.gif 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 0000000000000000000000000000000000000000..adcfbb63b65ad22d519a11128caa0eeb6750ea26 GIT binary patch literal 446 zcmV;v0YUypNk%w1VKM+R0J8u9i@j|2`1RN5%*5Wc>hk2G%7~G`bK~yYz1geF;l7;5 zf${b3tk0GC`T76<|Ao3_EC2ui05SkF000F4u*pf=5{M}Sp8p^S7z%?3OQo(&kQ8Ao z&t8!P>^c~9?|X(pZbE?lj=cgQci`*MYrr)U z>vclXjeElj`}*QdI0POC4r5;!eSd+2WEqEm4}yeV8c+ra2?P!cmJ1FC0}NgpPznyE zrl+MRCyGy;gs&85g90S*Y# z(+&j+-rouZvue`7sOQAm9_Ht$z3RXm0Q2+)N)7?l#m-T@>JR*8K>8O@#z1(~XaKmD z4Ph`D0H8S_=R;o)U<5L1)MzTwkrB6Z+MV)vgaoAl10xV%Qmue&kg&dz0$52&wylyQNJ0T*r*nQ$s)DJWnQpS7v4w)U zrJkXwrG=4+j)IYap_#scrM{twu7RPIfu)s!p#l^r0c|TvNwW%aaf8|g1^l#~=$ z>Fbx5m+O@q>*W`v>l<2HTIw4Z=^Gj80#)c1SLT%@R_NvxE5l51Ni9w;$}A|!%+FH* znV6WAUs__T1av9H3%LbwWAlpjz~0eI&d=4aNG#Ad)H48i38v837r)ZnT)67ulAu(C zd$Af^98y`3svneEoL^d$oC;K~46>@g%DE^tu_V7JBtJg~7K#BG`6cQdFB2=9ZF3nBND}m`vLFl!>sTY(WatnYqyQCInmZhe+73JqD zfIV)NiQ6rvIL(9VO~LIJGn{($fsWA!MK4lx!-Rlo2*iXZULXga{8RIQX}$=UxEcTd z`}^njub)4@fBX97^QVs=-oJbM=Jl(WFP=Yp`sDGWhY#-GyL;#Mt(!NlU%Ptc@}-Lx z&YwGb=JctPCypOGdgSn-g9rBS+q-A?uAMu!Z`-%OrteG>WPn$Yr@}!9q`ulo&y1P0%+S^)NnwuIM>g#H2s;eq1%F9Yiii-*h z^7C?Yva>QX($i8?l9Lh>;^SgtqN5@s!oxyCf`bAB{QZ1=yuCa<+}&JVoShsU?CorA ztgS48acyd1Y-DJlucxb{t);1EF>tv&&SKd&Be*V z&c@2Z%*4pRp!k!80R(hF1gHdIVER9&zmidxUz%gpt=$ZFYW#V^ddvg47rUl)^qxPy zi|LG3W0dlzS^S!JPw#2k|6pl^_s5=Xi5@3e?xrbZguD{5ofdw2iuDYpT_@K%8LLgd z%x%n_TX20J#}6w#hU7PiKPOu~5Py7({gUIQWc7-|8xxJMs!!M~8j$(&kl3csj2X|r zPG~;Xxv?T3O7T@>vD6BwqU57RT$bA}I#*`SROK$by<=f|qV-SfJzRoo40hi>x#~?7 zo0SFgT}hwcR>r3y)++yfJ|VOAORQ=0+LgK+<*eWJ1jqzxzhwR~Wsxjn$~-so{0(bc z=QKpU5Zn@QBHpa|+cI6t70djbnUj=ey%y7)Db;Fy(ZFrZj_0z%6U0r~6n~~a5>;6k wHzViZrsGqJ-O6GnZhX&lZhFv%%+*VnTiNFo*Bo1%d9kg9PpCsqgMq;s0HpsJqyPW_ literal 0 HcmV?d00001 diff --git a/glyphs/nanos_badge_bitcoin_cash.gif b/glyphs/nanos_badge_bitcoin_cash.gif new file mode 100644 index 0000000000000000000000000000000000000000..d43e12f59dd2c522385aa55c73167b4ce91b1bde GIT binary patch literal 68 zcmZ?wbhEHbh+i z#(Mch>H3D2mX`VkM*2oZx|Z5PB_e>IEf;+ybD@E~!PCWvMA{Mftf3V2@j6;&zKE zPV=C8Q*gV*45wawpkwqw(Tfz_Fd<+X0x{u<7s!Dp|I|ESnlAz-ZpQ!r{{H#>>*tT} z-@bnN{ORL|_wU}mdHw3;i|5atK6(7;;e-44?%uh5>*kH?*REcZ;0$^0LyB;-bQW{Jh+p?5xa; z^t9BJ|cQ;oTXD3GodplbjYb#3&b2C#D zVqwaWPR5VIe^Qem-6vZZ1v^b~aWPW+p~p z3GtH!SWYl7=zs`N*}=f1(9*y1^j*dU+*@{OygV~0^moDBMUqd0nx2$bU1U986vV(_ F4FE|6k1YTI literal 0 HcmV?d00001 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