From a46fd6f5088d44e8055a1e93ff81278ddf04483f Mon Sep 17 00:00:00 2001 From: matejcik Date: Thu, 28 Nov 2019 14:44:00 +0100 Subject: [PATCH] core: auto-generate FIDO icons --- Makefile | 10 +- core/src/apps/webauthn/res/icon_binance.toif | Bin 609 -> 556 bytes .../src/apps/webauthn/res/icon_bitbucket.toif | Bin 931 -> 863 bytes core/src/apps/webauthn/res/icon_bitfinex.toif | Bin 1322 -> 1157 bytes .../src/apps/webauthn/res/icon_bitwarden.toif | Bin 0 -> 621 bytes core/src/apps/webauthn/res/icon_dashlane.toif | Bin 2482 -> 2124 bytes core/src/apps/webauthn/res/icon_dropbox.toif | Bin 940 -> 858 bytes core/src/apps/webauthn/res/icon_duo.toif | Bin 574 -> 463 bytes core/src/apps/webauthn/res/icon_fastmail.toif | Bin 1108 -> 800 bytes core/src/apps/webauthn/res/icon_fedora.toif | Bin 1510 -> 1195 bytes core/src/apps/webauthn/res/icon_gandi.toif | Bin 1367 -> 1243 bytes core/src/apps/webauthn/res/icon_github.toif | Bin 1947 -> 1603 bytes core/src/apps/webauthn/res/icon_gitlab.toif | Bin 1117 -> 955 bytes core/src/apps/webauthn/res/icon_google.toif | Bin 1260 -> 1070 bytes core/src/apps/webauthn/res/icon_keeper.toif | Bin 1852 -> 1522 bytes core/src/apps/webauthn/res/icon_lastpass.toif | Bin 763 -> 454 bytes .../src/apps/webauthn/res/icon_login.gov.toif | Bin 682 -> 654 bytes .../src/apps/webauthn/res/icon_microsoft.toif | Bin 177 -> 164 bytes core/src/apps/webauthn/res/icon_mojeid.toif | Bin 1335 -> 1329 bytes .../apps/webauthn/res/icon_slush_pool.toif | Bin 1931 -> 0 bytes .../src/apps/webauthn/res/icon_slushpool.toif | Bin 0 -> 1527 bytes core/src/apps/webauthn/res/icon_stripe.toif | Bin 766 -> 674 bytes core/tools/build_icons.py | 91 +++++++++++++ python/src/trezorlib/_internal/toif.py | 128 ++++++++++++++++++ python/src/trezorlib/firmware.py | 22 ++- 25 files changed, 248 insertions(+), 3 deletions(-) create mode 100644 core/src/apps/webauthn/res/icon_bitwarden.toif delete mode 100644 core/src/apps/webauthn/res/icon_slush_pool.toif create mode 100644 core/src/apps/webauthn/res/icon_slushpool.toif create mode 100755 core/tools/build_icons.py create mode 100644 python/src/trezorlib/_internal/toif.py diff --git a/Makefile b/Makefile index 24f776043f..798015226d 100644 --- a/Makefile +++ b/Makefile @@ -65,14 +65,20 @@ templates: ## rebuild coin lists from definitions in common templates_check: ## check that coin lists are up to date ./core/tools/build_templates --check +icons: ## generate FIDO service icons + python3 core/tools/build_icons.py + +icons_check: ## generate FIDO service icons + python3 core/tools/build_icons.py --check + protobuf: ## generate python protobuf headers ./tools/build_protobuf protobuf_check: ## check that generated protobuf headers are up to date ./tools/build_protobuf --check -gen: mocks templates protobuf ## regeneate auto-generated files from sources +gen: mocks templates protobuf icons ## regeneate auto-generated files from sources make -C python coins_json -gen_check: mocks_check templates_check protobuf_check ## check validity of auto-generated files +gen_check: mocks_check templates_check protobuf_check icons_check ## check validity of auto-generated files make -C python coins_json_check diff --git a/core/src/apps/webauthn/res/icon_binance.toif b/core/src/apps/webauthn/res/icon_binance.toif index 8d4d22936d9bda475a55f66f975c1e83baeb2eab..914792da1f74eb523b8a07c22f0aac918dafdec2 100644 GIT binary patch literal 556 zcmV+{0@M9ePf2D#06+jB0ssKT(yeX+K@^7Jg&>eCE1|SWkw_e(2y7(^NVoxH6$#-g zDxnV93n&yEvXzLYtVH6Q3E3>O^PTx)&+ftTGw;Lf2?GBK2OrO^dQi}WgYELXi^jzW zE_LxLLXgyp5Xkks1!_G{0j}pIpzC=E^mT55xy~uDt8)qL>l^~Nde#E>dX@rxeOWoZ za|-nJStAH~Yd(RwE{02BSLYJg*Lei1ihbQE=vF(f{iokU*S@Y7yp(;O02WYnTHsg5 z0$m*o{OhW~R96MA^>9iHP`z2w2~b@vB-0+A=A#i7P&-e(kL#07G;Y=Dx=mU6; zu>jY__pu>lZ<@UilDaC;*O5S9R|Rri7MSa4fw?XV)OsR7_1=0_sn#d~s!ukv1|`7ti(nt2y7<-V z0Sj$eHix=Enc{ROzL6X3e9;B7&j zh6Qx}yxSkqo*D&T_5yu9oce8mt$?R)E8wf!2zcva78=3#k-KiX1OB>?AltgDAp5$D ufTwON;H%pRcq5KorMu(}I;TW5ysPB*u(vq!B~bj-4oN{{cp( zRER16L{VYupU@#fy+f`w|rOz652x4}n?lT42|^6ySPS0=nLXz+IOX`0J7aUR_GSuS*ER>f08C*S9I4 z>zVrgH&e0#SA98)qUqN>mJ|5udgKJ0x}1Ppmk~VN^6Nf9ro#K9#mgPP?h@qj{CAV{ zM*_M|37XcCz+FdzHg!G2iojp53&QJz6H0*V<6pD@*9T{G{b)Zw{O}G5$elkVevfhe z;yzR36;;oaR@;Kn;_5B+KMC2*`!}dwoD32a_2S%Yf$KZ-_M)sKL0RVs%suA_s`a|S ztosFKog=8%s{*_37T9&40M$2w$uw2yo)(;++wYp+;CIo2%Rkf;>H27AxJa&vyJ|AE z-!@vk+)-Y%^Z(C_6hEB~PNHadh6I_K?BmlMeM5pgosa8bV?kNB z1@5{n@YQXBSvLj#x+&n)O@Uo61*m@f@#kksfa{mf%NZrW^^E}4^;1}oCa8XKpU0WH zIzWQt3suKc)b)h~Xmq{!j?06n<&<@=rcL`9v zx!}ics&F3*sJgzA)3BWn7r5$Ajp`u+nL1Y>SLX<1>psEbo^;(OkgqopY_}dN*nT}k vAXDcGUx%++SdO8&Iv(Q diff --git a/core/src/apps/webauthn/res/icon_bitbucket.toif b/core/src/apps/webauthn/res/icon_bitbucket.toif index c4cce921b41dd03bf4032974e7c6cc33d0031443..0a49f766153ab2cdd299d5367e1d570474e6761c 100644 GIT binary patch literal 863 zcmV-l1EBm=Pf2D#06+j!0{{T+(mzZSQ5*;G-?7kZ7y53fxi?%ccZ1>rx|m2p>?jjN z2a-({zLhb%8_(umO`X4uwd>5ts~#Nr^Q<@2-EifA76tTa)L& z?>GPM^Ub?2!1YL-qP|8ma#ml1A|1Df<*lO|GJV^y=4ATToL-UX>lM-`(#I|;e09O~VON%)*z`n z>4Rw-2>%jrvy%MnY^|r(bL8!&vl~5c!wcD~6RU)I0a(WHN`Hzr5*)P>Y(x^w`fv0q z>W@ufeD!mRh7xQ>6DU9ZH)OEA#_}fl$o0JhHFg5!RUq>M#-|yS|Fz|FTACO(&+8#%gJ)I=)xd|s_DyR;%mi00m<`|Q zRa67}g#Njf^CzhLkpx=!j*Mb_{Xp2hCCAUDA_;;$R6ayo;D2)x!;C zBz%`R!T7cT6I^~$oA>-2zXh-#xy;%Is)0AT{#nb9Ch)ZYCZng;7RFEi;I?m3E5s)V zwBTdht$u-O;2O7mcO1VE`UlY#JdV31qo@X!cs@Dwd_e-`OWbXG71=bC0Jc*BQZQ)+P z{R{3|f4se<-@V;&cDv!1IW4HMo{whGzCS_J4%AT`36y@G4-?LJI`$DQn1^Mq z57u!vFCa{i1C#I58y)(B7St1vUmzHg@7NEtz=~@@nLHEu=}%qw!XB#UB46$8-eIu94L4g5cM=wyD?l31kX*!su$@>P z8qGyItkeokObB#mC1@ci2I)8}&<0}A!xAbIV{)iOD8LFZ`IJnbPq7B6_ivzmGJQHo<|H=2 zOw19L+tU8NOaGu2o=5moFaVfY(blzXZTrZ&voFLhihWeIm*C3Y3yWnC zzO8Oyc;#Fj(|!s+JV7T|`)`Z_;*XhR6y-m2d~X7mue_;zL)%e}?ZEijsXDfoU_B^- za<}pg8BLnezEMQ*miD0J`y_Dv1EtO7tK3F3Upc5?jJEMSVV11NNz6#%)psEGR_v&}F z1LGTo2);?XsrT;d>KQ^-yW^_$s$C4TM~%pVJM; zcO~$&U=cofU-CSvfoDV8M|Sl7&=yR>ZSUn+2J;6JpF`U>rjO{ukqIvP{Y9gIYT$U7 zuO%FR*!vG$33O=ozNKkY15?lw$T!mo;qPA{pasfn-`mY%e4dAyKz~3#rcb*Q`22%y z<+`um!fk|ala@e#S-&iNcLHw<))nIWI>+;=Mfp{&@wqZHYx7biD zKcWTR1j2s@1A#sm#h8BV9%>WN9PHD+*nW4s7HB6SWD={j`iK@d3CPnhpR^_$|6qb8 zZx5B;FduS!qXr+}!!B3}^({73lONrJa)M)!4fUIhVvRnkhx9od5A}f#9?TE#p>`f3 zCb3$xk7xn;66KRtZvU+W!oL>fgLQxgM6^IZ4No9?vNUZJ54dZ_8ZGa_-rgj=a5(?j F{07Yc(6j&m diff --git a/core/src/apps/webauthn/res/icon_bitfinex.toif b/core/src/apps/webauthn/res/icon_bitfinex.toif index d86c16dc0025e74e4e3bd811d4a787c184930a01..96d9e3f06dcad672df129c46d5fd2e85b360ea55 100644 GIT binary patch literal 1157 zcmV;01bX{aPf2D#06+kF1ONcN(!X!wNE8R~Q55Ay))X#7XQL>>bV=#Tnrt?#Q@V5$ z%byZy#M>SQuv`%lRv2=y?pzJS+E@Yd9$rb{U5%=cFN4b`Qi1^ zEe!KEdeZ!pa8j2I%n#)gy=+zXs&Cy?wJUdqN!p1;jQ=uo(cPd)UT@ruDbh}p)5k;H zGYfI$xz1URc;U_{GM+IEdN+JiBCmi1~3lvdg!nic7Vq$$wZ2P%WGY3+)jplwX zR?0f+$m*xC=c)HHFVv@W?psduxl`No)cc9YB+x0UPomvhE?G`m+smEm=N(pC_iz4m zKQ48XrTm?q*BkzOdSjte)XeX@xK?Ii`?~Q21OPJBg56)& zJs*bZ&Ijl~{jsT2l@FGJj*{*y&~=$h=?L zX_!tCF0K07XJ&fd_!|g|cct29?iVd}m-^W&J6$g?b-vTQ3)kD|c=)#aDyz#ARqd@T zRj?}IIz{fU<%O<~nCKIdKR;Z*={B9BW`6Oj;~^WpJ{2!kb@`-?w)s>lUXRpC8aWDPVutmjf`podbh_Qo zWY=}?&D?I?OW$?y(@Zw)-l4Lg1HG|Nr|52+di!49&kw=7(oXm56yZ|vYh#==@5XpN z@4xk(rwNVtmK23c63E{k(S3~t5(R7Nm)8LEq!?;_w3Zel( zn%VvBi`fL}o7jE%1PI}JwA2MnxaC)o?PpA&5^e)QZ$#HAQb&sq^+vS0ac`^bW!Nml z(cKx}S$u2!yT_hd75Q?z4FEr=PvhtmnQ-~F33p6A(I2GRwtEL98m;?yIz{5e9^aEq z=uKS(dkPbG7FV~O)fYDQ?_FAdkT3ZG*juo8H;!vl)J9VGo$qDaEa+vqBx0a|NF~*p zYJ8m{>&yB(nXFXH9Ka%oQBcvZ;_uyWcb3V5lqJ;&m&Ep4FQ>EljxlbdqEEKHTg>8;@j&wKjFs$neHvx`h)9-MCLrPz>0cqGukH2y6BV&m`bWIP)K*)o`PDNkAu}J(IbQ&NxELV7 zI@PDf)DxXyv47}7eoBpD6AC|M3RIsia0C8Kypt;OweqYLwW@ZhU+LY|xzaAZ-$f15 znKV0vO%|UXi*xx}E9zb2aqoFCb7qb|P6LKDy1*Yx6%Fd61M2%RbIOC=6Xyx#I;-HJ za(}Sf&w5F2s0)JRPW&Cy1y6ns-|=Se>f-ds?h&LFV|Cpu&*Vlv`Kg%;bk7$L=bXD$o|D_YF8>1s0OZD6_k8ux#-$T|l#Yr!R>D<$E8l?LEtK!^6n|^!w&D;yh zeLD6^FH&RwRkmfTWXm_YyL493ifQWkC;wGg*MD#81nIxO>Rc5(x?MSn4K(h01+?=)lPcIgD!H(cv|_D?Bo-qXb) z5Z3R)x>nq+6J&|`>DyAv30%64K@?a|8gee zTVGwg{Zl5582P&$c@k&zr-fh2RjSa$XZ4 z)^{~{C~F$z&%W#1FScNG35s%*hmZVd)jeHzY1&n}!Jp9?AbXo^8JJ$J@U?(k_*S zRN*h!mbYmJ94@AO+x{EX_Kya)J7X1Yz+!3)Yanz{eW_yK#L?{@*8<6kDbI|Ni%6^^ zSCZj$M!9w-B&KdWQsekG)feZM7}xe@f3uyuXf`(6OBco0T_j~=+GBCpUOKM?B{>>| z^~kiqDssgtxrih@MmOT-nfw%A=vDiMpya3hmo9{bVV%X;)Sz|lB7)M^V zrgCjO+P$>oVDe#l=LTlZnGlrjabDF$$h|Yzw0r65*10%@weXQE&#Y2voln#STL2M@ zF6dR~HTl$y(diKoK#YQQ@y-(C+b(J^u?d?XLD3nx6DJGKf5r%#R39WShQ)Hn65Y^U zTj$C{c?Rns#mY~ysTHmBeTi@;R!Lp(7x^h*z)uvDpO$A*R$Uk)GiQmmYO9uNm5fKd gDtEBSwY+)%jQr_;z#7%hPw5O@pfl9iOIS+k|F_D)^Z)<= diff --git a/core/src/apps/webauthn/res/icon_bitwarden.toif b/core/src/apps/webauthn/res/icon_bitwarden.toif new file mode 100644 index 0000000000000000000000000000000000000000..c8cb4f71e60e14499b1516380ae9059d45097a22 GIT binary patch literal 621 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 CEj<|k literal 2482 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 diff --git a/core/src/apps/webauthn/res/icon_dropbox.toif b/core/src/apps/webauthn/res/icon_dropbox.toif index a284d1b58ed28d34057d7519afcf323b0c4e4b8d..bbc921ba8e1e3178706d90e605dba07eb467cf23 100644 GIT binary patch literal 858 zcmV-g1Eu^_Pf2D#06+jv0{{T+(k*o2KokYw``$Wgo7z3WHoEnREwxbHXt1R|*rLIM zEm-0~gC*#uw&<{FfHXjUW(L}xJ%<~cZ{GY|;GAcmuhty6xp~>Q|M`)SAu?U;3wP_ogSUSg@2SECA>*X z85^&m!HRsDK2$s{VTOIVU{6IyJMhS$63>tD*Wt~Ll>O%`jJc!iM|g{x^D5e$^cGTE z$tPRr@PpLOJLvE9&*7SsZ=#32P=yylc115p2^nHd;(+Q%kHuP{uE9Z8OaWhojl8_G zo72}j6vfZ=28yH8G*xS`03km}^_MUqnm%`StP3A9X>oJMk0kwPpBfyjHBF&II#iGS zK*fi#xyl{%p&FZS_!&KAU#1xi75Bbw!Z18LDeCuilevqDlJ{djmbMma$^Ot%qPw3l z`Etk4P?l&;g%?R3ox-CFVQ;W^;OA5l!VcH=ZM?=UY?01p`YTukJAdI-mX1~ksGjTV z9OU{1RWfm(J9#!D@LZTKrAL}2l^&_>veo~3tC~N z_$yeDNn#3nbP@0DGPl(qC~y9JPxv{NARnEk(V9z``8T_B&aYWznnivV?@2!W_)cxE z7R^q))%LC@7~=$?ItQZDqa7@SyH=bYKg-OH_wWSg1ScP;%--x^MUA63;P8|3{3`5| zynclj(z87>aJpE0B{lsLCQckG@my%O3m@N;GR=yn(-1noGZXG+p1gw|zCT25ULDL1 ksDYo0!w);ttFZCIp$ade*&Z4AojmdlYp`(6Isa+?0mWvs4gdfE literal 940 zcmV;d15^A|Pf2D#06+ks0{{T+(jj!>OcVv+d*3?H)b0tk{1!aXV2j_>f^G1@77ZRW zwZu2IV9R=HiBA5IrYWHb%!GDpdTV-m`n@-qxxi0;QW!J(`8Lmr*fL}lEXP@myv<4} zZ*eWbuiw9ZOF$ovws*Ko{SLQU)?h=Xd;9hyOLkyf;HPXT`pw^+l%}Syj*K?A)9kLp0MEqtQPBkJSuMBh6wa4KY_xX)4F8)y7J79T$LQ3CpK zpc0ddT))FDRP!Xgj2^NILOq_eGTvrI%L8o=#EtES53rz{I{T?#z(kqMXhg?=l&Q#PH^f|u((xlz!eG%^2REk4LbWqUkh!!gW^H@PV7$*K%hZ92ooOX@3P zYx^FyuYI8}fv!&aw8kwQ?n?TD)viu5`QiZcM@d#Cbj6T_aQ4{ z=gz-NU)7<1?CGaXQ3+XcO7HY!vkLEeoBB)A=0IGP-3MLkDt7IBJh{=?otz+)CgztfXJ0n@+mkbF z*tz%skJ3_m_naHJ`ivVuon2XKZ=do%82GG==u4oyJKzouJ~sxhWumm*W(CAo#Nz7o zEkuo5z{FQ(D|dz4d+_k}F*%mahutm*XyaeyQCbqFyFT&gw${_> zj%9eLHojBu&oRuMS`=P1kSUAL%eq+^4Fagc&@~pbN%=G@pY7_}aU}+VAP9mW2!i-W Fz5vpX?u-Bc literal 574 zcmV-E0>S-MPf2D#06+jT0ssK*lD&@NFc5%^K*%L7-6gE<3YVcwvx@J~7A{jR5(4GI zV{nKFULz>0eU7ZqsmjO4$`jAoNYxc?8y8{^gL64yU#L$;e#C& zLx0PwNXPtUN6z9>F~R&S&$UK>8qYDCUvg{xub&}*(~DnY+>Xm;-@&+vUil5D^?dc8rcnR{$H=|ZtKhdA#roP4==6AOIrLEs|n!DOD z>A?IGJUF!Q?{L^WeOiBl`JL_Xfwu7LM_5(h}oK0lPBo@8Mk9lUpK30i0qqQ+7Z-GXRyB9gXM|u*hk3p zpnkj*{l>oXTvmhp#vV!NuJ{5~?~l;O%hpeS#y-Fwi9QY!KhlaDsP<$3NBstp>AMIu z`XhUj^vl4ZaAAJAt(9;qd&?T*gdQ9GGE2D0Epv!|eS&t#%!L^oCu$L}h4n$2~i87AzQc z@2lzV>b6t;XgXq?d4$W)EEpW}b83|ZvE&!0p<1v{WfuNTXT|EfTWdHZS>FztB85Vs MP$(1%h2p>Q7X_3qAOHXW diff --git a/core/src/apps/webauthn/res/icon_fastmail.toif b/core/src/apps/webauthn/res/icon_fastmail.toif index 6cf90f00371d67100211be130c6e31a45b4fc37f..e4e14dc683bc909fcaba7dd0b397f6334d62c6f1 100644 GIT binary patch literal 800 zcmV+*1K<2qPf2D#06+i~0{{T+l0Qt_KorIgDM$t}+>li1Mi}Xo1;ki)s?;n@h$#^g zL!@Rw9TF*vWo4ieNC+_`3yUXI2?n;XFqkDBN~LV^0&3F%We8G-$oJ~wa=vrOAKOW$ z`n$=#Kfm|B_aPK1QlvA8W(t;rMa| z+lQm)Ao7B>W_9?PaC`tG&d;PP!{0tV;U`kDQS|V9T7l?p(A!RV`%u(3)S(s>Apwc} zudsaCUvILTRi4qI^Qn_Ad1v3*CRjm`$YQ>Fw+gh~E@O&z{YvzQR zl(vgxS?(L&h%Hq?sPxcUoQ@BmW0~Hpx*Ha`lw5CZo(ne|K)#(nG_zcq~0^29M`b>%VR!A~@oAslecJE54Z&WQ zJTFZ;KFH_V%H_419*AEjUHgxlwM(e^x%8UP^AN!QmeX~{zUz0r4)NDH_s_@Ky!Q1& zUfasy>;%3AMe>t;a>>i&YIM?q_)k;NFq{{cNQNAfd-4nk*o2*zwFz=oo+Kuzloq7`{#S+Z$aJZkghu1IA1f;c>eVn%vq_} eIDWcf_2x;}F`B4UOjYKyP^3taB1MYypX(nmM5*rp literal 1108 zcmV-a1gra0Pf2D#06+jp1ONc-l21q@R~*M*w}H-<9_FwqbI4%=79!~-P+W6chprGY zhZRaCAT-^ZL5md+NeFDy;6Y?vBqy^-*4^Z?xM1k+L7cGN>I6zFtlD_kZgP+|7O`{C zG6k9U`rbSflWhLYL@#B&j|7tU=kxo0e_sGhnKEU{lqpkXvC--KF*Yn;{)(|9bDi*4 zzd%Yc67#1K4DpoTsA$wE;!mY&(BY3r}&Y%!kbHk7guL`Z_XN$NM~dp5qvu8=nbW;<9;LZ^I^ z8M{TR-IBV2oztn3E#PGaG`gd3cJXS*eBz!$QcH6yNA%FQg91aJ40z?SstsLyg!1d> z@9-mY`SlLr#ncVz9L~>#vRu2Tk5BR|IOt~YZ7soVBuA#7(d01x_@a`nuT3u>zc?1~ z(rq?6f2Xb=RPWcw9N@`W?%?5WBX9Kcagvt<6EsVJ_Z?NGsZQcP%?rt_s5G995k9UU z8(*ZZ0^rU`T%#K2r`Q#G!Zq83ZkSK>aF;uv$GC%drgpN0Gv5*Q9RPtTym{wx0VU8V zvcl8w2i!eleC)46b4`;ikCp$IICrl6LWB7%!4v3J|59_RgjafR%XiHfACvkkBp^8Q z>%`FuUjPVr>+(4Y7t}*SJzt~(>3Fb71#S7nX@MypxA#onzxz=+7mPnF*U&>6n=;dC z4m#l)vOZxpKUbx_Eu;L}Szn0p$1~NVf;&}g2@az^^p?0KIQZl*DOEDgCs_}8YcJX@ zt23xrIq)TPQl~Yx6InGjQE|uv!1wPT4|c;R6@=xo?_>_5QrX&oYig<7IlK-}&_>lo zjh~1`54z(M#WS=5f!PjL{=8Y$`5~TnqV5v*-vvSk>{obVe0O|QeEuRV&rg+X=f4y1 zftu4gC+r0jYIJAF!zY*AVvt|0x9}8R$K14*^hp$KRx|Oxf_ph0eY*L0 zGxXD)S8hL-Ed-lXD$> z?w;>j=<#^e^T=fve`|5KfHu%5?%7)*JK+xQx}d|eCjOHY{Lr(P`sZgj0TX##^coj>@mTWN=@SvsG as4G3>xr!w??3Q+PQ>ILrGG*%jt^WXhj55Fg diff --git a/core/src/apps/webauthn/res/icon_fedora.toif b/core/src/apps/webauthn/res/icon_fedora.toif index 4982615f2d6a57c16b46b5483ba3e47672783b05..316cd66ccd53e9e62a5e1083b81a294591153053 100644 GIT binary patch literal 1195 zcmV;c1XTM}Pf2D#06+kr1ONcF(m!Y$R~P{BH{NudlN9q(I=oEc2AP~?0v1{1CDel) z6hpAmsa_--D%`{fEV9Uxr9d34VhBkVc@k-{sRE^~JW10@g929!cD0>Hm#RdlG+fV? z@6UU8?@sR|ecz^gPrvv50f05Qyr9AmOrr{tud@QvFeIp49!xS~f{F?v@11Z*P(f_m zv{3h#?THFPeQdUhWER_egRFOA#Nf)oZ0ikNIWUf3Y82bth!j8pD$kErInjkY>&$~V z^FJjwoDIE^82V9;_uie&s zqV{Cq+h4%tDLg_li~r`HpRRRQ9~*vj)0hI10dk#uibYRuxPiTna@yEZPA}f}j$3Ez zSxdj#gX>L%DVN@t+4k=3{KS$iLsW`v+McKZ5xg>kEhl**%f3_U-=O zC-2j%S=}WtK^->%E4nr_KIiJ+^?#Br~jVh!1rD@kwGg6n-r7n32Rgmmy#l@G> z;lhpWXGO(I<<#z9JTEHSRU@B9=Kq%3#MCL(>%L6&)_zj_mhd%xeK+Jv)r<=963VVkMBjkLgFW{nGcZ>7_?E zA5F9Cz2k)s=08N7TW2Lq+kL$AMwVDR(8=`&H)n5(8M=Mthirb_O^?n=-Q>@u>4U71 z)f1dkPT&7xW$9jGPipJC?jsLUP%S@t%VlR>dsoADvZxFrxhI!5{UwLKOS@I=kH^2m z17P^%=F#=>`EbYb9i8VV?+dEw6T9a=_i_6mX86)B=108mjmJlN_f7w3`0kI(=jv3y zJ$WC=00gbSF^~Blg6^KpXPW=TH+DZ430}S7i*d}~6ldsnlN%ZqiMs)2UnYDW_q`_2 zSh4H98oLft0Fb`aB|4CCzq?(+tFN9g_r3{`(-$+i@BRW(*RtiMreR1> J>03^Z{{it3ca#7C literal 1510 zcmVGA>|tk5HW10$P&T2b_M|0Pl9EGeFM6^f3hqz1;%6c=WQA&1|vb(s? z#BtsmXVhnt?>h*-_vZI~|NkEV#uB-dZHo897%byfaCd)Wyx%s(rGN-7tvJbA=fkk< zR0NB0JMk=h*jneL3r0h036o8^`i2Ugq6FXtvFk81E}5DlW37Mb3|x9Lwl)Koo)|9j zey8#!^z%&c{z+2FrQj>(Z5vuU$p2q)DK!T;I&5TcWSWqA?3A{f}?WH!DQc7g&Q4zK^fG!{Xh{7F5NJ z>+t=p=Xio8^jdXcSPpRJ8GJ`8`D$lG?cc=ovsNd73YRj$i!j6D`-^Wz(VNNT9hL7} zQeA)?Ge~?|&tu zDPS$JY>(Bq)7pntVZ-b;O6VML_Z29qd_K&^kIN+ga2;pP{Jz^aOHLp})Du2@PUj@3 zFu89@KP36-hr@5v4hV_<9ttN-kUiYl0?FTMnX7;1z$ul$gm!YCK{oZfov)JoxICP1 zwtvq75tc8NZ|XmGpbSJV#p*sIKSI)dK_Ni!6)t6)Vx_b3Y4?40`qVbX`!AD^5)^$6 z9n#f#h#bLxny+dlf(xdUw42>A;uEL-}qzZvwqu z{O$2}T-I9tNb*nSwpx$(|c!lK0TjZ(k?$Cw`m+JE)I(iT#%-&@S=6sfhWgx12bgJ7uVg4?E zL3}<8K#%YC&FYl5Tt44g@AGN(gTkH5=VSLJm5&l6-(w&C@?!X1_51wX`08I&{;VZa z{_%+Ys}x_JgbyHhu-@7S)B>5Y6+4(SbzP-v9A|&4z6auC% z8`7Khfktm1gjQMkIQeM+D8Ab_JDvk*fmXkE)w{>KJ?{rV$G4zUN`W<$Fn$}~@6Ug}n)H&}UU z_fDtiMFAGNQ&Dq2$j1r`J^qBmd7zRiD@Ka#0CuVzwu#=M&uiP@5k`_ij2EQm6O5 z&oArmVi$sV{}<-$W^${A0u1yFoq4kOu)&K6`YZaj`O=8pt{vW!astEVydQ|bw5%nk zV)!z${PodpyGW1^POfIF_bVtce&%6}OM~GB4Hdxcu%MOD_Zz{uyw!@!8xN#s;vW9u z`0Nb!9D{Q@(l-)NBS7+>?SwKNV}oq!LUxWLp-1(q?n&Pjl^ptZz@VHqkDbQyPy M_uHm$%0*W2|2aAq)c^nh diff --git a/core/src/apps/webauthn/res/icon_gandi.toif b/core/src/apps/webauthn/res/icon_gandi.toif index 070bb1e78f8f7a1ee8737dec89ebd541ef8a9fab..b840c107cceba8991bb574b748af49d690199d75 100644 GIT binary patch literal 1243 zcmV<11SI=ZPf2D#06+lG1ONcNl0RtbTo}gB;Efb9fWi!n4v=khYTIg;E*r(TAM#c zTQ%{wnR9%f_dL%7z@8AWN&149qz@Lrk-?&|K;uKIt0^_FM8-GeYpMi@W2xhV#s}gx z3rd8WVCiG1lV^RTIU!d&-fsX4LQUI*T!dbyz$7$zqrRr5!Y|&wetctpv-M|V>ZJqW z7jy5VIz6J=Oiqay-)3*H>79NiWcHeBe||kNTtGZk@=l+9HuQ%VtF{L()zp{17{fel zU(W0_KKM*UF;YRimko^Hn))V}ul1}6(kFDyso?M4>61RiZz{Vi)rIbCVfv!=U$Lln z`hci*v~9@r+)XvA#7(LlCSiCQ%v#@TMd-r9>LzT`^Xi`>3@d=xPo17Ck>%X+JylwL zrblYtSzYQGxA1qp75}=T=DEo}8<1z_tcMq09uUa~ClAIqRD1PbEZsUaP7ogp?5>{) zS?9M-4R3>&jj8U9{5fBgdfWsbe5pr^aCNq%e7CzkTd{YmF*P;-1nEmYvd_g|Y$X;j zwEwEJ&q%cXwK3g2fmi_X_6=I6MiZTZ&GNNfU6V7R-QSNz%^4agCm*orrpAVq{;Spb zf8D{&{_M~|-}q*I10)JvdW64Qwjl69{I+$j=GX7f7Dg|3CH&&l^uLZO{{CyV!#*7tsaN8kYBSBhWT8^klY-J56c;RX-BMa?sbL)DilIQ8H=W{c#58|up@ zHl~Q*!FTcLcQ6ZF1dGORhd2^{qAv9^Cs-P|4lE=epMG!mLCshHkUroQ#I`mfQK*F# zw=#E9&zvZc4dU|fBKd$tJ=4}3z)d!IFH7}I2o?bFSlzLGil0;Q0q~ei$m#8fZ=D9S zz;nWiQ|?mT+r(GE<`7@cymd5BCVhOM_^quUUX1VUeP9xY z>9dth{sW>hHMcEuf~8@hd}q~fe7M{{)i@)4LU(zp`04pFY0_s+rT>aW57DPeh&Rt0 z;#k@^g@xn;r!om6WxbWX&G&Z)Hm&mz9}8@|Z*Rq+@3*GBoCphB@|s)oYMn20*`N3o z60IF9{@V1WVAkrErm@f9Kwx2rTW2Cs-(WpeBCL$>Z8v$U4GxAL*&NV45Ni75FK4l6 zFk8M;^R`=>P&+XF<@B^r)7DV)LXA^1A+}P!>%Xe0^&8)H_2*Ef*+ScyYR8S&FG)VG zySp8siw}T%5Sh>}8}t$B1MWi5b0zX4ak+JlzXJ~lD}AKN+r?)KCWobgN5Cdqk$M|; zkY{g2=(_J~-~)QzI-k9%DJ1Hf$VgNoQoZp(kMzb7;5ZPl5X{D~_*E(8m@nb2w F%>P?De)#|Z literal 1367 zcmV-d1*rN|Pf2D#06+js1polmk}+uNTpY#k;BW_rj2SW{;Goc>%hO=pg9uzz#w(IArLM!68G3e0lY05{Hjv)12>O@Fv zYgxmA{2@${=69$^@|{;hF?P@!V$J^-paUso>_P7fn%^n#Nxfn0Ma5|7@AN(0Ik8sK z`}P&F?WY5D*xtKgj0@7R@FLHxwaG0J@Y8*(d8XIl&qdsxi5e$W|MZ2arQds7w>|nS zf2>!vER*n0zwlt`n@)#Tt4zX5Ma%lxK(=K$t@o>!L;&WZcT&;HU!F(u{^>{Zv#zD3 z_lGg5ID4`@F$}4Qlus;*TYn)X){Fz_4KBFv+hdf;kua^^@Yn04e|OECcP~;A9js5H z3ocl_sUUP1=8jY6g7W;gx2Df1sjgQu?<(f5K1q|K^~Xd=O0Bx0V#4&87ew#ullI=$ z9zZHHcJV;z>6j9{*U z{Mq|M_44aYC_HR+t1q^#bRiYVXU4*`f)pOudsBOJKT;N^TFLpX*#5dclhCr;FQ_jg z7l*$>7uCycb-m9gzwSR$wr99bVTfkNNYnibm}3&1N4>vY4YNA|a0HQyp1#|1Eh`nd zVB`WRZ#>0ejtH@>`clPq&(FFv1V=(cm!|)Av@z>;9>tn4<*y4b)k`Tgx!rbsg&NPi ze?9vRID0?q8v9W`e|yog{57P27jWjv-GjfQVy1cycm=1!L-f#;?#!MtV~?}jnkcrl z?7wSkrJp~@k%!!OfH}6+d3EpDb|)rj?hI*ylY3!H7qANyUG zQcU7hnY(4coyl`|ZN1TZ%Z!n-Z<7P0EKJ=ysP~64K8Y@XkHDO%?wb6pD`-Rr_zTV_ z-DcOa^mA>5q)7ybfcdHuw;}VcH=NE3Q%E`T8L%y}-Fus)C+Xf>^@hDaoi~uGFP+o> z{9(TxQcR-rs+FASNJTn)8Xt(jq|wX>_wkc)wun>&MVTicF_Ub5;XqW zOc~#_GPeKx*C7Ivv?Jv#dw=MBa&6L~DPIn&B#s2f$nX`fQP_cS{xFoC6LIDWoCI<-dotWnc6HY~ zVr}D)SMbbu*WJTNMIr!B2Bi3;8vkc;rSllcgOdU&E-26cMO<&xmqZAh9-Iz$UiJRr z$tSn`HPQq=fi4OUleGIA^v2}2f|$PJz)x@@#0BfiNm|9UlHSl8T2}rT#>95!-E`ew ZZCe}A1vz38>^*Zuhog7s08-$8$$yRn$7lcm diff --git a/core/src/apps/webauthn/res/icon_github.toif b/core/src/apps/webauthn/res/icon_github.toif index 8f820626006daec91a6ce7965866b0ecdc080e65..d56fee3fb646934eb67bb7a70a3c2942b4337c9a 100644 GIT binary patch literal 1603 zcmV-J2E6%HPf2D#06+jY1^@ujcmke4@wBE z@o2%`zc|T3#VaLqo2`i(xU$i<)(Z3NjX#WyHxr zP1A+MqtM!{8`1RhPqHmrb}dz1FZ;cN<=^kU_j&L89)^`WfCnPri73usrVh>$Q6Q2c z&YFuSMb!XrGzSp?1<|IeXYzcdhC&@koRN)HO#a5m9GeB&NYM;TS?PlZoJtK_rgb5J(QR*6yR9q?wSPuV=LhlIIB zfljytTBx0yo;o(MCnSWXMlXzB2wlG-OdOaQyRj%VCbAwg7tg=X{A6|mh^RKMv3=se z`h)b_MfO&zDOH!XrgT%uYg00I-l^5X9N%6)Go8zNwuGZ+idU*`)MtvX(f`V}npGN- zBx!BuQAPHwG%tJ2r)NW9hA$<556^cQ9L^K%EK2=Y;@3<)_tUmYJK^L%yhrJ+nuY=6uLbFc1A|EAB+^h|Cd zpJYao(A~r_H5U=Bl8*sijY%%$_=jNL$MCyVA3Z+K>UWEgIHNTXRbv+Dy#8?d(Efa( zy#BE_kdM5BivFY5bN#c$9LScf!UVqDli$DOZJ7Dica`=pnSnkxKF{x8?`Fm6=jj?1 z)CqV_=5lkAl=}VdIZ4`C&J)-Bx0ebk7?jpzpH7*+mL5cR%_HjcHNEHh&M8q;7sy6Y zHo>LjJ}V8uygPptb{uo^+ZqjKrFq$FK0S;6&)rwL7fU-=$Yl=BqR5VyQcbz+XNwhI zpV@v;GKT^$*UJ@mui{ZFIR14(1%=j>%x-70w%k6Pzo2Lzz)T&SMN?ol7HGZvOVhV5 z-s(&0zNP9u-v4BDG$kU6_P}#;s&Bni>!!4hHp!*XcJnaW`tlR5S_QcVbsLXt^zR-O zruya<7ii&3B9x5D7D|K!*8)BF%T!-T=-=9C-@t!ZFry;1MJa1NY^$@&!QQZT|*7{9xKAe5r>@kZD5hX=0O*LpI z3U9R?7w;qyu&M&6w4>K|35ZlX&hBdfyn9TgslRaVv^Ul%fHSZHsvT|uWgB>CziJ-= z3IonZ%g0$@F<-4fqc-}D>hKvf8!P$Qi3jq^s(eD9A9xyk<&d%|JMm2T1v~ja|5@|t zUCslD+Og$6ioTpj9lh|Evf-@t+eck<_6$(=R{QAiF z@UpkRb!(r^3bg&2*A?!LtRkz5A6LDHm)&E;9rJ8@7k63Bm9;q4p5>3}@x8T3|KRi5 z7~dr`O5m(-Mw3Ujfdpa=B=q>|oqMb}E;8O$V-Qbq?-b>T`}(N{nBUPGiRbv==J}Ci z#}-nc>wb8=xCUpR5qw)sNqh~=Y#-^GhPk;{5!LJR&7dz|KdjM9+pkeJQgoKYN8+^x zrr^6&93LL?cltft3bzvEBCE=-H3VD2L-zOJck8I^GtT|Pt@uCkcjh-XZ;syT`8qR{ zEqEC6xs|T_ut%!imw>n2Ysyykq1TZY^UwHzDgFOl>F5jW9b9cIQH%4Mc592%?9@6K_ zlSX__{R(pB_`}Pz9W#0G<83wEoZ^IuxU BFwOt~ literal 1947 zcmV;M2W0qEPf2D#06+kb2LJ%ol3!?B*B!?N6ZC}O?0S&q*lXb)kfFC>9uifca{F){ z8#)V`A#HJpoQG>{(;2OXxN=LQ`=TJdIF%VHa6;_-Pl_;UK@8VfA6RhSpA5HOv7V^3O!~VHe(VLq;U}4Mn2KxKu zQ$F2z8YWvef2iAmt#qGUK~mQYXeiPx4m~qyb@w_IXzA>W(WnRNIUkmVzEeFD09>uy z$jJ1WN9E{e`WO>3mW7EiG5v*e6J4vqWOLJpB4axHM(BEcW_kVA`ttg6EIzT={k!c@ zYI&E#DcE$voa9}APissS9i9+t#{M)6JnlXiMO_AO9|GBGP>+lD|Rz+e{B%g9p$bijEgH(@Iy8SCVqy@I9A9nbw$QMY>XyFGXAWsfb{@twa(EAq>!>FXMw z5*p(hXjt&x#-z&k=Dta!64w{D7Pd0GbtW*IySe1n?nqhLt5fscnwFHWLB0VdHGaxb zOMdNHGgT(fCaTQ zpos_Y1p2iJ;M_w}7H94(@^VKLi?_PVG`Jx}aPJXyLR0Y=GQnEiYu&Q-JP0`Xop|<* z&2&NUS=m!1u^HMrc2IvBD|Xp}2-56p_*Fcf2-vcsezIDjr+j zS!-Xjq#QUbYnHY4<(+tJ{!}P6dD!uSc~oW#`lk+9LSn8`LSnV`BQ% z=wnRCM81-a;fE9^1G+iAiQ48zwsAC8`y8-1I9y9bU?K_DKp$Y*1}fQmhv;p-ZTlH~ zP{$FP4rPHWU=0Ue%pW}`z%X&01vuZVl@TUstUoPQ2Kfe)2kYKo=;*R{6DnYlkqOww zaV_Qk;Ht@`aqtQXlkg#v^G)Uo@ReyVRPu-(r9t^x!^cjXWqf{gYy+qkmpFaoZ%U@FNxvQN0<{Gj;}#8l@De?sBA zVj~uX`qmTI4mo44^6&6(k2rg`Q2-1dlnl5R4-HxTpNAvSY&0A8+73O1|4)S<>?C)i znXs21bk3l$rsu(020YJ(=j3c8_Jcj<+fb&~;*%ZbkNQ7|?ib!$o03N)knh@*rp z^WBrk2nj3A4_5Q>H?wbZ&tBKVKiO8%L&gHs4!-Qq~Pc4l7i2Kih=VfKj{TkYTZX2+7^9jNaN2*^&GebYp z=Rh>(IZ-*o=!*Yaxx?oI&*9&1`8~{9@$c~&{tG;pSLFWp!YfsE&keN$pF!uMKD58? z|EjD8l^=XH%qv<4d8~=LQ>RnOU*QKWTO2XCrm0+j) zeanFU&dV3z&{*&G$Rz(kut%jno$n2H@`FR|w&@O|fi|>i(Lg|BmKRU{(0R}O2mXxb hWzV~OBKV3-P2l}y&#|GG?7y+4EQdO}z;L5!{|&Ty0Hy!{ diff --git a/core/src/apps/webauthn/res/icon_gitlab.toif b/core/src/apps/webauthn/res/icon_gitlab.toif index 4c2c412107f18a688829f5a1c4dd4ec02ddadf7b..2dd96830d52aa1fd967acdc78d321d519ac81891 100644 GIT binary patch literal 955 zcmV;s14R5(Pf2D#06+k*0{{T+l0Q%CP#DHfq$Z9X9UEE_Mn~C7#DR^KO=DfyT-i$N z;Qa=M1(Pz|Fgf2vxyOwUfrPsdCOh_!-2S0(+Vh8=w(8=0CTn?~)8Fp};AhC`Ogq!> z%R4t0$BX0oby@B8>mcvk%=-SrMex3OSH96AL+>!8@+R{hriuC4L%mCf2@P);H2d zLI(dg2Z$!<9%wg$K3U(OO1#>Ym#!MQz>pJ^ju0na8p4@h@xt$3ITL z6L-Z1BKlhb(6gDpY-Kc1^IFUd8^L{BWT0*CpZGVhiyGk3M>gKoHiQ15ia+yjpcON~ zrjN8_(@+ii*D(3i-vU^`0GmG1vxaHA6Fm9j`2Hu$T--vdNp4uM(Vj4}l z2M=a6K+<2*xi^}CI2GaCtdl&5cp*fq+ zRN@B7FVkrKUSd;_L2R6QHV2tT)`#Q`q=bP>qW?0{PJH=L<#SI@+e~kxhgnz=239zI zC%tiP69|tonpF}6Ahw4Zhkk1BW))=wa!!AcxPi?yfYC=b{+s>)6q-g8_kea^xf& zrVPaN5sWwPYz|5vSs%tXNEvXYu-%CMJ5Y$qdjz`E&Xus`UCJ~(`c?CvO@ztePpj;qY1urWc|-yq^-uQ dG14a1=WQHsdR5nOjb0Ue+tgp`FW_ei%zyf^-3tH! literal 1117 zcmV-j1fu&?Pf2D#06+jy1ONc-l09tNKp2J(bdfwVGFqvTGL|iDPH+acb}JhRRBFev zHB+3pL%U|Gy43PzVye28g(TOZV=JbJ1-J<@0hu_Y+6D*z+!-4?>C*4p67#+G^Sl83 zAO8s8#r2D8;h)`;^*i_n?yG6#@2h{{9hCK`&wnfrb_P4|chky$ziZw5SdR8|PW*pI%-1jyaaMQB(H`zN*lD~KSo4D_7GT^0^+`!wwy?5E@w2~T# zd(TfRse!ong0!rCn@x{?m{At3BnIN%W6?@tAnrXjEo)!hY?J@$hIfx;lt;_j&-HEc zKi7HpSO$2sto=nqIc~Zr|Ki?b8Q{~}&OrFR+8{cu?F_`bXVWV1*ECRzMZdQ3p2z61 zK2@eLY=1z#u3tpl`VSa>ZK@pW?)+ArYIAMg;P1rxo}GwWn2@krbB$^(mjSUuv<0L} z=x?OKQRMuixfFJbDho(7vE$^QWERj`3d4Ri`VcjL^dU4IF4ImjYx=8vGRL6?BIbwE z$CND790N=G_DU3mv>>X1F!~xr3u&3=7;9Yh22wHu zeEL-KCVj~QkpJ3MeEDQf5*R3O=@ZAivt1?swc4Ng{%W=W&(XF9xbzXl3*Yz8NVVU( z@TD)`Kx6lCf;ZB~oZe~vbZcAnF=pgj78H(wLOA^?lRj10DPzpbH{Sp<4ZIGe|C*T& zc^PATdd?+4<~XhaCVlMhojVfDiswl zN9-8o`(O+397Qn@ppPi_o4x zj(!I6f4bfedwbVwRQrMmVonjX4NnWux`zP+Zu-b;zHJo2c9W}}o{zDM0oQtW5BWzc`iSDCd4igUf(%le(!uTUp@*8+z>2=+^zL?8IsmCp{_HY4 zv*}XBV_-#}+C7<(%WVD(Jjw{-Nru?%rqE@;rcZ6_y+*Y!h~N>YnE7tlJ;aUyn?AOB z*EWja@h4aNbTh_g3($m^1_~2m^=^z$&vP~KL{m|_3e{`_CVi@Pm5K_UboM%}`b-*K jjjm>r@l5Q1Cm%s>?hd7))Z7(h@QQ!B#5? z$<0uR#)C>$Qd!PD-5=dm-#6a7_xs-WeE>!SbMaD=JXk--mE}tPH%F!Zv|g0+sWdPC zIWK{Y!DZ8YS#CLoWz~^SiB%W2R`zm9^0Yo&9;_m}&RNt8y!;hkb+k<6K`yp4nvJkT z%-Jt9za3mNJ#R^C+WKa(F=0lR$mn)|5?;=T?ZWw#b$T}|^^21JZ7<5!>fI^COM3P4 z76; z{RV_rO9we~I>3W+_P9evre<`tCv?5o3C1@Aro5X&wxPmoswu zlGygQ?$Y%n0b64qltV>2zD#+$&AKfjtIbz_q> z6Hhk#zH-=>j$iBhV%2WlwW$Y<{N&r7Wv|HtbA?qfx@g7#Wf zM%aG;5vT4ehxhY=&1m7vOe*<}YA-eSQ|eo1y7S z0dY3_OK?3%(+{7CdbVdYAIS^U>HmT4_uZ4@_Q%_Qw`08fhh)I*0Nd2B4IGet3qyrupIX-5ai|>hj)YffYO# zVC0y-NAvyh?swOwa&`lczPZZ^-DJKP-4Fdj^WC?4C!TDc)}IwWiS=~WiVm#svos$P zy(70Xef_81_pkJIR){n~8in`IQKx_Bk`ZPt*A&wAVj(N&I#9gDdKKH+{0H-fz(L@H>NNnMt~S(t`kCgL<5< z^GohqgQuPT;XW%cK~&U@CqnIE`r>!5{z7hORlrVl=D=y%*mExOCI8VdfBK%ve^R8W zS%DB~`fBKiYG-{ZCVz60i6*JD|4{vB_hW7U#Vl@;fajcZrBg{3vZ(4zcrMI1m>3&6 zeJc8csy~aU+e`v_E6|tGfB0)>egE9B*)ho43fQ;!&jxz`w#N2|%uS0ccr*I#e|!HB z5}Ny)WzrT`AVhyY(SJvKpeH2Ddmyl{N2lp~_v#c#!&;w7qaqjzUyTh}rIQATU^tu! zCU1d0<=Y0c!F9SYHB#Rv(GiRks7T&3Hwh-@-UVwS>ysm819ph~=-vWr13R}!KyxFe oNW;T}1olPN{n#gy&zT^TX3CLfq{)<-7-`G|JiK!Su(8Yj1(9JTApigX literal 1260 zcmV2n%8o7jZhmZvv6>G#@ z$HtOd4U^*~jvartBwNe#9Q|3p_kG?60DZDTcbu0KAFRyh#Z6^Pkue$DQY3LbyA++V zjHO@@m?SG4OC`wlY?WC?SjHq#i1IQO=`EXz#K^pe<~Dm%S&ELOaM%mBJCfiwl`^K+ zGPW`wPT^g#FR(Gv2)jOm5FL#hrH`f7v&Px=Tg+IjP=DKE>t@K`8y_r6#kq(2aXGpg~VgBssI7pCszAUTXu3GL19e~M# ztZ}3DY=Y!vR&YnCh&wVG4;N-ELR1pvF6dNH5<9acF;0%gaoD;$yu7*~8=?d771xQq zsl+TW*x`mSTv*TQr?Ypql=k$Md3QwHw=TdqDT#XMI21DNo0cH05a>{+oEkNr{3BH^ zq3JOT4onnG=PJd6$ct!sq!m9-no0*3L5ZytRSWx;@@LI-A*wHV{kokzq#t@eRTfXu zC6S7lOUKzYw$4}Y5PZQM-9g598JMi&^y?P>d0xI=<*#PV&K`i9ppt9i7c05_JLPQo zf7l*?Ie3a*v+L&{VNk;dh77wZ_y8dI#dK0bdlb(V&wGY^W8hB!tg{@r@vZqK7UoRmZ{tdE_T_AA{HTQ|SnFPMu4c~Pc*}f}asP^XQ0tfl;7CvmCS4}P(zX2|ywpXuz z{`eV8s|_p_zP#1UuHC><0?-gXL_b5({jYGP{%}0^ z@>MgEdWU>RIBy?j-U)nxrmNe3-(u!nW~$Q!KAK55N<;{-Ey*m==U8AUAFaN8J@5^3 z`!_+b)!*%}`T9FfpxV2~P)^J~Ow183qEB_mmbMQ&F$VWahwPd!1s-zOPSgFr+0G%7 zgHB8f|0oL|?cJ-|N1UKGIPf?3aWmg_zRm68?EDuKh?a(7UUVc#}hDt zN5_|+#50}hOZ2G?>g@!V0>4!6;9tTOph5U<&oh_^{N;Is?A>Vz`Lz3G|3} zh-$NYL#N3_JP-5=+S1He_bD)vV*#+hm;{H&NL|qT$z>u0x)RYxju@JufB2m3x#7*5 zW>9m`ehbClR#YpNb W{XW9G$0Qhvyz9u?(rV9jk^cp}27_Dx diff --git a/core/src/apps/webauthn/res/icon_keeper.toif b/core/src/apps/webauthn/res/icon_keeper.toif index 8c3e80303c4bd7277ee58b774354aef8ce5473d5..d749a449008e6cb8e2d5e76281c3ac6f105e02bd 100644 GIT binary patch literal 1522 zcmV`6c7;@n4PUUtZaV}Pn!dq@N zUdIPgD$As?njs17d*Al~uy|!Y7mB+d4|k3}9sTzD=NHfNYw8L3mrC1yt$uiUetdrX z?#ba!^=swp;l|OYw}0-w$$WWewzB!+S-?Krv2P2-#9Gs~mE6P8)sxq1F!$Co%g>V(PrI`h&6w zAb{$t)u-Ba_AI-vUla_#10(Z!+4$`CyC>(zZ~rzAwpPsdt4}A@$?l6D&H@$kYwG4w zbC=tFbAJ5crRTPFIZfZyr}~BHKnZdnv{_nd>xJTnm%AU$;?|0`KEtFheh0n=lNx<{ z={MQ4!<|CWx-1lD&!w$z7yPpa;lKaS@b@2=uWgU`@PEMH7J3>B@z(=>!BBGF&Q*|&nxMg) zyz@)*r@CAJtMaQ(G@ud%Jv3h>W!{A@8G<29TX(=E*Pu-uSR)lsA_mtnWC~mcU&U3_ z!!GewI(_;Yur6#9XVZD!aI5<-epG*7oS!4^Xf4X0Tzz&8TBwFgG)L$87V_yb`SGP= z8NR{f`2*geb+X6HtjwzLlwX5siShYlnfx{}!K9)pwor$q-^j`F`Fwsi_Ev@(%tAJ{ z#C$4_X6T_5K9%8{U>?62&aL7--c5YF;w3+43UVgy8BB@~XY(83D>ms*(b*Nwc-2UJ zH@FPnn#phZ3Mc)u+enB8#pYwi0}4Uo3=?0Pj--@1HLdHPv@J^ z*OkUP61f8~xS69~>N>PR19dip-j$e67L?(aMs$}Zvc-aI$K41M4>ME|uV+XPc`j%D zuRRQ)N`|8jEF{IJ)A$>He#VJ!lVI{P_mVi^74iQpQi-SGIC0|)*jR>NX6byFdNhN_ zvOv7^_1LKr3ErrO%mxLZ3K!(_biVf%08TuAoWOuV`Zwfz1Z$I4Y z`E&&)GYYx48>PMr<9R7j8GZ$%^Szhh=&cHvoZeem(U&&T=o-WwD>E5>6^{7v*?^bt z+-OJly=;OcUlY6bNO4EpDUI&zaVb7Z?!h)Wxz%P`c@$5x< z%&!JZ=lj}%77l)0ho_t2v^|s!-POd*b>ihy$9Ew9LY+wQc{;zr#?yJL%!2a&9 z?}AfqW0m+F@(xS(z965a&o|&@uEgF_ph{E{-^tJ#zMIgeCC8`p_(2xyBuACxi%|B5fbUtqbo%pQZ^r!7=w8j!6Lb@BJ} zUDC!iWJ1Wn!li*0UYy^j9o7U@XdxXd7<^~hq=#nlU2-kDY_KY{aZaeKAh6`hh-rGb Y3p>KUQ(hw#P$DMCQ4OdBz-3YX0T`DL#Q*>R literal 1852 zcmV-C2gCSOPf2D#06+jR2LJ%wl0Rr8#~#P0xc8VM#TF^H96y|g7E)v(jk=#iT&y95 z7t(As);$+is?(9iYKGI1!g8m>ja&?8pC6dL6hVHKih&4RoXr)7O2L2;E)H=;kV^Ar zW>Z>k?&{Cf2J(Yu2uPk#yby$xJIf5syI zY4z=^FV7EO|8(^G!Pax9`r-LE2Tz`V^Y{yLjmYPPJ1-x9{pwrA{^4Nj@z>%0=5DgX z-EcqLFXogB+ng6U(DJ1W%#?RNnpZ1v*Y7!|1{zIr+)<>A^+!u zpTDul>+|q;^)9TWfuGJV;=cpmTTl9A&-Zp#%HR0Q`Ts3?o52$NjR}AI)447$(WYqf zlYgCjck)%E|Kgvuoj~NNM~HN}Lopz-fS>zRK9LpC5q)-xZpkf}P0U6^IpBTPgDceL zEqW~Lw2I0sL&D%{TiV@SBiLy>a@%Q=};SfAjbT`Vm@T-IcJBmz^wSvimyqi zM_aVP_EcLcqDGpcqr98We{U;iZTMR@d>G0YB0>Zrv)^KplO@`wLz$sKIcviY(E`4@ zxg!FJ4H;9PY$;}mMG%Ob`4vNmEPEh~OR9-hC!Fz6Y}toL!_%u|;{fQUmI_w?tX z(oXp;I`KmDxeb3Wn{V3VvTia>N^<$tl&*dq2w$J#y~K0q2n^w*ffZrHuc8codb6+o zCO22j*$D15gbZatsmjx|q0r`tEX%KD^7~ZxDiBHfBUCV6HpT6%0vO8ttmAMjb)U!Y z_oNk{WbwPE>**}e=Q-UymnPoi~x8&0-ell^|EY(7t zGa@aR;X{jRkH%*@+~t_I+4MvWZ1@e9#UBV?sdq&>n@Kip8l(!rH}^+i=)zOyD||Zr zEvZv0KF{E*9clMSobaH{^{f~gd}K1{h&)5aUtjr9H$4nwpU>uF$8Toy70FCIxvwJi zGloD`M5x-~vKn#C8EkZfsIR?Gw)vvLtoUNW7qk2xn9i||NE{f5GRKodJ=KK~Dj5$j z_==^zhM|n1$$K>9m{P0#}fx)kSZ9V7L;h9rdOSzNiW+hCLKQD$<%ewee9`rOAz&^xG4(Bwu7r*P=d2 zobpLU#N-O~=|CmkXFcffrYJGbyv~Dip3Hg_+wdWVhxxh(dy-7DbSM!X@(@wZU`UjC zs(Itq&G3m0zqN>OX6iwM1(L{=n11W>JS{WrU{*U~u;SB&{BhG&Q#+ys$FeDoWeYl@ zM~5h)aEg1 qaK&SR%u^yAhW`NZTuohI<2A-3sHgl#Lxh(fcJlA-O*$K diff --git a/core/src/apps/webauthn/res/icon_lastpass.toif b/core/src/apps/webauthn/res/icon_lastpass.toif index c3cde22396d061617b721fc6a6f6c08b46079f5f..6482fe8056522cf6f946e2eedbb3d65c342a31ff 100644 GIT binary patch literal 454 zcmV;%0XhCuPf2D#06+k`0RRB)(xI+{Fcb#hCcH=!`T)q;CY2L?0R%}OfESp6WCA&Z zM`B30Vjf)Quvm~oPIEVwE-+ZS1ZZz^`HwuncQ`EoTgI`ln@2`QI4forXBmkMH@EP& zHuY0fu;nX7)R);1#^xHfsMv(?v%YgUSyS)MgX|oA`sWECRHHv97@tCnRO#J4KyP>6 zQ>j0SdVN1ds{ORL0Sl|vA7x?TySWbE&4nKsI{e5Genxco84*5bI(*KAUobtj`KtZf zxjmE@eSUk-^=I=p|L^)`(1fjhf6#8iG8lhjPG9cVv>l|T!!OM1%ls;7N2!wK`V#-x z?d?5waa^b`@vD71nQFgGU*=y=)9+tT%k=-cuY3Qx@8A6ol8Nb)<@z$eU^N}SUDJMd zZeQ*ftPGm4+oRotWiaf`?SJF1S)0H4|JlEt+e3NL=MQW1pW#|`{_-=T!_SEDBSVKD z8NzpS9lo0j-@-b43xiiuq*_lA=!JT!ed>WhVx=31P4E^7IZ>r^0wEY>=ct*0lbr)5 wqhf;3`tuZGbKP^F+WauoPgl8%DWX33G8T68$jAtvzi*b2$Z&HDgDn&J1&nCrlmGw# literal 763 zcmV5#$Ujc@4iN;B9k!VL-ziDa-&Rw#G{ z!C(qXDOg-Qj)D;p5h*=53YMebgFA4jV4(*J7K~t#gMu8`L9j!H3>_RDZt&hqTJGQA zQtpO(pA30d!+DrR4)^aDcquNd+L#jmqJJ-s!LS8{TI9%Ku z9B!-;KOX6_1~?=)_=<((I8I{s9!QQFQA2W4k(6jLY#@1Ms$3fX?2lE4{_C^5*Yo38 zHIlJ|Lw|2^xf`p_rpu+hUXp12Bi(i6%?2Me8hn#vA!}ZxEjGmlU*`de7CS24&zr0L zb^e$95x{T|u^>^5Okez@Bs`-P+F9KF3A27Z)MH=|3Lp zwD)~dVb~~G4ZgvT)Pf~B^(QexG^4&+C)v3EurX3QBE3P@9P4#naI9lJYyR$sgUNYs z5!sGa?e+Ip?lj!JnN7F$Bbgumk($O~L)H+glZ?Yg*l3Fti$sUgxGAcaBr2A?TyK6EjjuoIJjvDTSrk`fjuce)&sQ=@u<-`2g4%)$z zbbU5YTz?+I#Z7Ieb~Kyz7L)F5>MQ%o^Th1i5c z74oiFq#v6Qt)4%C_Z~}tJ|Qn0q&y|51oj@GwIQZFZ|Aua+J6p3wo4$_f&)p(n$L3u tQ5@&Zycs98AUTe+X4;fAnnIGS$t=j+N|KmkFc=I5gTY`h7!1Z=;XBvrfO7x< diff --git a/core/src/apps/webauthn/res/icon_login.gov.toif b/core/src/apps/webauthn/res/icon_login.gov.toif index a87cd907822727a089534232898ffcd55323ac86..5eef2dae35a41cec07dedefee982694c0a35af99 100644 GIT binary patch literal 654 zcmV;90&)FRPf2D#06+kO0ssK*($9+$VHm*i=Qz-14t49GK``C+61dPo4Z@>)*pNCVbkP_Bmjs;{5tR1i>>dK&R&3c;XU6x{ zdEbH9@AC(I-X9OZbRKUa^|?}4>fKqhSCRGEBk7rPB*_C_@mQnV#+(|=8&dTqHO?*_k z!O9=JGxOCatbC(k<~Mg(`RJ;d|Ld5IuL;Ps<6CU}-a4|Vc!!1G-?s8gX%_y#u=3R! z3xBw5<##SK*}t#7!~VCy(}7{!HL{)6&dsLUTv6Ya(#401`5rHh|L+{c@pk@fa%Hed zF3|QPNju*cr0eH&4(!W_G<|<`1`j+`6#_p*q9^izk)PlXsuhB_-{%3ZjR!P*ApqEY z5S{izQ6Pu|so%>i66cXju#466&ycP_IQ9w{M0s1`Vy6!pW6kmT(I&t ows>GsIC#2`XMQ5@@dCplvC$dEej+afz=guMbK+)RSm@q=0BibVegFUf literal 682 zcmV;b0#*G~Pf2D#06+kq0ssK*(!XmHVHm*icjzFvbnM`82MQSq%_I&EO@xw)LON7J zL8z@mU8EpN7eQi-btypv16{hJ*xM%+U^#)1wq^ z^WNS2CUKEFkb*9Q1R0a7(^QuLuvLeQB zey|);CIt9}&Z?7N{SmxxT(BHFybg0g`^{0yC72A{zcpCj2n}}szyIIQLH<9z-WqfA zl?f5PUNDbndS%61_rn_dzJ_1!S_qXUhh0jI!2cr(YC1(Gv zjFZ1LDZs~V)5))_3Gj=ZPfmVqTEza1SIw`j_4cE-Y2Gn6YENp@)k<}0_u_*PR1|qJ3Cj~rK2EEJ?pXq4GvgA~D22*n|TM&!U3G+A? zU?V2V(PGqxH+|?rtsh{wn`T_g2uc<47R?u=&Yzx6Z`X>T6~f|6~UM D-}hO0 literal 177 zcmWIX_e^tOa9~)3>^b@9U zPII(v6a_xryMNw1Fv{6m>-M6nU23;(eTq?Aqqw8~^m@s)W%Y~v=iAl(`ttJfaxlaG z;cYqlm&!Z|&)@t@{LP>{>(B3BiyS9!m)~(BBf&Cq#i``V<67(9^;gclXtfkoYy6jk VU1|IEmj^8Ld|$W8@8Y651^`sZSxo={ diff --git a/core/src/apps/webauthn/res/icon_mojeid.toif b/core/src/apps/webauthn/res/icon_mojeid.toif index caea946380cb2837d819549e9b964a677b43fb44..2b57d472967d3eb459456c22c477fb2fd54e8019 100644 GIT binary patch literal 1329 zcmV-11rw2cM-3 zvBZF-3|K-sJ7NGPKn#wBWd4Xs3F-hS10Zy!p#y>pmFYkeWE0mJDDHr82Cy+u>jrRc zhz<{_eZA*9?ECX<&WULke}BUb@6YGGcRv7{X{MR~IXFoNKmd2+M(V%EZB!~)^cG22 z*M=b)HD~1`+po70{;lx<>%=fpk51CpglJ3U4IpN1jq`OUzx(FBd*im37w%4~%Yrw; z7sJ@ceyaWwZlKkRRIu?rd3jgV_xO%B>fT`IZ{-Z@=*W>K%eiq)Xp=mSq5B#GhNB0S|?aJ1a(HQUx^cY z^S=5CoSk>=!?-utezc!l`eOgovw!uV9;!#_RiKTk;PKwjj`v zTYX6{oTL01;~(6IuN1aWxu{Q<4dZ@RUf9c;wW~LOl)buCn}kuf4nTlK^j~|) zujqS)J#H=4qFjkbVj<1VLvB!Cwtv(50TzIt&!8^YlCJi9Gr6c*e?3{x&0#PyzpC}! z8zo<^PjOQx=aqHSxY{lf(>TB}a^=vouiqc;;Sn*t75u39*9&W+&iPLEq%%9hq}t}r zdNTkJ9myS@_gw1c@$|7)PcFeB!B^-vzA^Zx=H0WCRvZ9lr}&oo{lH(S+t2k%e(A4E zx|4IBtihg3Y3`mP@CX1;zUEKG^?H5l?9B>gECX_SFIlyOhV5E z*vfi+KGDJ0QF`1Yjtl;jOuwIN{reoHV-x^0M)?kUeCsS)=XuwlPLi8b$5OK*sJ_5T90?%%n^KEoWu&;ivEiQecDA3dk(sW_K})`*b5oLD@ePk6aMsp1->}5H zF;eD};=2pFv#gi>(TF&!aXw==UC4jbG70Ugi(HFLm;7+~oQ?7sJJF$Rlw~K>uP(}e zzU*hcMyjzsW4An1H|nw(>YPuZL*HNvR%SKAPxKLO0HFL_t4bIA=U(}&FZbt0o3+Z-C2HLWc*- zcHiCE=I-9JeH2Go{QZshd+&4ay&nLz)KbgWO#|t$>M*?Mo&%P0x{-uur?fRpSHqXX zJ2(4?rc(Yajp|wIn5mvG{X@TN4Das@;QSp|; ze`@&>zBrMNGxfgROqM|XdC!;eVPf_z_0Ai}1VjeVcdD8X@4$Mk+_}Nx_o#H5^62(s zNa>n`mS5GoJHRPOdXmgJxx^STr^oy5Ikb;xvR==$`4-sDa(@tP2M>&1UvZ|h@LuUZ zaPW`!U1OD2xyDi}c%SVAmPh)r%02+SZ%Vy{dt2_Xk`AD*ai*dlOZ}BPboJ=@^R8yT zAA194`TKEPp8Naa;${6<>JZin@0@AVcX!t7)FJKVNw>bac;sO2(+2->$YmTNJXWFjj_*8s@JSVxt{ch)^_=Pp2KHsn354J=5 zH{QwS?dXT_zI{tEXJ8FP$gDxVQ_{0T_e$U0+qfI(eS`InFun<%`e(K?Cfj@A#n6=e ze%;K5B{`iXG%~$r=~0}c!IoM+1T6IT!FhbA>X)baj$pJcZOP0@m_@K3?82UN(65%t4+3ZIbmOd@H+_)mlF zhob?R<-gzEeSV^{VF`&P2Ix%L`9~`R`h@ zKWg>&af$}IvpG?6{_gcaCLnl|jp~)XAVQ%hpB(@XN_Y|VHz%Oa75X5oF4?E(q)n@H zN5gR9W{mP(>i2Q8m&^Hf^S(+Kx;_TPnd4TqdUCoK_AlS&V)A;uzJ05(LY<*j$+s2m zUD6wc#*f}X5~JJ1nNyxbpKm=$t>EIL8M$|81!CUaFwG;O+4_;p3SOQGlejeJ-2eBSxITlrG{I$7uHRJ!D!8-S&{erm;f zt)7(qOHseMQoMZL=TsTN!`B`bzxAW!|L;fB?m18<`+-bCtG_=2 tRq*-#pvnFkRLCDk5kgztjJC_S%bN97^h0>@AhmpJJpr}UQcEpm@*nJf(n|mU diff --git a/core/src/apps/webauthn/res/icon_slush_pool.toif b/core/src/apps/webauthn/res/icon_slush_pool.toif deleted file mode 100644 index c3e5fc0c6c49811fa4fdfa20b169daee6d3000e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1931 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 Ipr9xE3-#wxyZ`_I literal 766 zcmVI`3gwnp1jGz1om&+>-H)x?>zT(FGJ>+nRyBE^78WX^78WX`hYkqISq#Ify>79 zX_UPv^EJKEETpWyp4V;mV&g0LveB*WP43?2$MXKY>wcs_b(d4slp)eFB-X+{R~%d z0$l4~bM4LS$anJ1o@Vp(=b1+%d|9F2r|fi})r6;ky`zlW$+CJ- wE^;E8O%=Id9lHKLI@``a)_>18X{4)Y4C(jqsrBUp@$&NW^78WX@_Ivm0Hd&&EdT%j diff --git a/core/tools/build_icons.py b/core/tools/build_icons.py new file mode 100755 index 0000000000..d20041e2bd --- /dev/null +++ b/core/tools/build_icons.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 + +from pathlib import Path +import sys + +import click +from PIL import Image + +from trezorlib._internal import toif + +HERE = Path(__file__).parent +ROOT = HERE.parent.parent + +ICON_SIZE = (64, 64) +DESTINATION = ROOT / "core" / "src" / "apps" / "webauthn" / "res" +EXCLUDE = {"icon_webauthn"} + +# insert ../../common/tools to sys.path, so that we can import coin_info +# XXX this is hacky, but we want to keep coin_info in the common/ subdir for the purpose +# of exporting it to e.g. Connect +# And making a special python package out of it seems needless + +COMMON_TOOLS_PATH = ROOT / "common" / "tools" +sys.path.insert(0, str(COMMON_TOOLS_PATH)) + +import coin_info + + +@click.command() +@click.option("-c", "--check", is_flag=True, help="Do not write, only check.") +@click.option("-r", "--remove", is_flag=True, help="Remove unrecognized files.") +def build_icons(check, remove): + """Build FIDO app icons in the source tree.""" + + checks_ok = True + apps = coin_info.fido_info() + + total_size = 0 + + for app in apps: + if app["icon"] is None: + if not app.get("demo"): + raise click.ClickException(f"Icon not found for: {app['key']}") + else: + continue + + im = Image.open(app["icon"]) + resized = im.resize(ICON_SIZE, Image.BOX) + toi = toif.from_image(resized) + dest_path = DESTINATION / f"icon_{app['key']}.toif" + + total_size += len(toi.to_bytes()) + + if not check: + toi.save(dest_path) + else: + if not dest_path.exists(): + print(f"Missing TOIF: {dest_path}") + checks_ok = False + continue + data = dest_path.read_bytes() + if data != toi.to_bytes(): + print(f"Icon different from source: {dest_path}") + checks_ok = False + + print(f"Total icon size: {total_size} bytes") + + keys = EXCLUDE | {"icon_" + app["key"] for app in apps} + unrecognized_files = False + for icon_file in DESTINATION.glob("*.toif"): + name = icon_file.stem + if name not in keys: + unrecognized_files = True + if remove: + print(f"Removing unrecognized file: {icon_file}") + icon_file.unlink() + else: + print(f"Unrecognized file: {icon_file}") + checks_ok = False + + if not remove and unrecognized_files: + raise click.ClickException( + "Unrecognized files found in icon directory.\n" + "Use 'build_icons.py -r' to remove them automatically." + ) + if not checks_ok: + raise click.ClickException("Some checks have failed.") + + +if __name__ == "__main__": + build_icons() diff --git a/python/src/trezorlib/_internal/toif.py b/python/src/trezorlib/_internal/toif.py new file mode 100644 index 0000000000..0d4436c54e --- /dev/null +++ b/python/src/trezorlib/_internal/toif.py @@ -0,0 +1,128 @@ +import struct +import zlib +from typing import Sequence, Tuple + +import attr +from PIL import Image + +from .. import firmware + +RGBPixel = Tuple[int, int, int] + + +def _compress(data: bytes) -> bytes: + z = zlib.compressobj(level=9, wbits=-10) + return z.compress(data) + z.flush() + + +def _decompress(data: bytes) -> bytes: + return zlib.decompress(data, wbits=-10) + + +def _from_pil_rgb(pixels: Sequence[RGBPixel]) -> bytes: + data = bytearray() + for r, g, b in pixels: + c = ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | ((b & 0xF8) >> 3) + data += struct.pack(">H", c) + return bytes(data) + + +def _to_rgb(data: bytes) -> bytes: + res = bytearray() + for i in range(0, len(data), 2): + (c,) = struct.unpack(">H", data[i : i + 2]) + r = (c & 0xF800) >> 8 + g = (c & 0x07C0) >> 3 + b = (c & 0x001F) << 3 + res += bytes((r, g, b)) + return bytes(res) + + +def _from_pil_grayscale(pixels: Sequence[int]) -> bytes: + data = bytearray() + for i in range(0, len(pixels), 2): + left, right = pixels[i], pixels[i + 1] + c = (left & 0xF0) | ((right & 0xF0) >> 4) + data += struct.pack(">B", c) + return bytes(data) + + +def _to_grayscale(data: bytes) -> bytes: + res = bytearray() + for pixel in data: + left = pixel & 0xF0 + right = (pixel & 0x0F) << 4 + res += bytes((left, right)) + return bytes(res) + + +@attr.s +class Toif: + mode = attr.ib() # type: firmware.ToifMode + size = attr.ib() # type: Tuple[int, int] + data = attr.ib() # type: bytes + + def _expected_data_length(self) -> int: + width, height = self.size + if self.mode is firmware.ToifMode.grayscale: + return width * height // 2 + else: + return width * height * 2 + + def to_image(self) -> Image: + uncompressed = _decompress(self.data) + expected_size = self._expected_data_length() + if len(uncompressed) != expected_size: + raise ValueError( + "Uncompressed data is {} bytes, expected {}".format( + len(uncompressed), expected_size + ) + ) + + if self.mode is firmware.ToifMode.grayscale: + pil_mode = "L" + raw_data = _to_grayscale(uncompressed) + else: + pil_mode = "RGB" + raw_data = _to_rgb(uncompressed) + + return Image.frombuffer(pil_mode, self.size, raw_data, "raw", pil_mode, 0, 1) + + def to_bytes(self) -> bytes: + width, height = self.size + return firmware.Toif.build( + dict(format=self.mode, width=width, height=height, data=self.data) + ) + + def save(self, filename: str) -> None: + with open(filename, "wb") as out: + out.write(self.to_bytes()) + + +def from_bytes(data: bytes) -> Toif: + parsed = firmware.Toif.parse(data) + return Toif(parsed.format, (parsed.width, parsed.height), parsed.data) + + +def load(filename: str) -> Toif: + with open(filename, "rb") as f: + return from_bytes(f.read()) + + +def from_image(image: Image, background=(0, 0, 0, 255)) -> Toif: + if image.mode == "RGBA": + background = Image.new("RGBA", image.size, background) + blend = Image.alpha_composite(background, image) + image = blend.convert("RGB") + + if image.mode == "L": + toif_mode = firmware.ToifMode.grayscale + toif_data = _from_pil_grayscale(image.getdata()) + elif image.mode == "RGB": + toif_mode = firmware.ToifMode.full_color + toif_data = _from_pil_rgb(image.getdata()) + else: + raise ValueError("Unsupported image mode: {}".format(image.mode)) + + data = _compress(toif_data) + return Toif(toif_mode, image.size, data) diff --git a/python/src/trezorlib/firmware.py b/python/src/trezorlib/firmware.py index a2ed7f0421..36ed6be399 100644 --- a/python/src/trezorlib/firmware.py +++ b/python/src/trezorlib/firmware.py @@ -75,10 +75,30 @@ class Unsigned(FirmwareIntegrityError): pass +class ToifMode(Enum): + full_color = b"f" + grayscale = b"g" + + +class EnumAdapter(c.Adapter): + def __init__(self, subcon, enum): + self.enum = enum + super().__init__(subcon) + + def _encode(self, obj, ctx, path): + return obj.value + + def _decode(self, obj, ctx, path): + try: + return self.enum(obj) + except ValueError: + return obj + + # fmt: off Toif = c.Struct( "magic" / c.Const(b"TOI"), - "format" / c.Enum(c.Byte, full_color=b"f", grayscale=b"g"), + "format" / EnumAdapter(c.Bytes(1), ToifMode), "width" / c.Int16ul, "height" / c.Int16ul, "data" / c.Prefixed(c.Int32ul, c.GreedyBytes),