From cbde3f4fdbf528cb6502dd71f09990b6b0c71083 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Sat, 9 Mar 2019 18:24:49 +0100 Subject: [PATCH] firmware: refactor U2F known apps, add WebAuthn entries --- common.c | 1 + firmware/layout2.c | 7 +- firmware/layout2.h | 2 +- firmware/u2f.c | 14 +-- firmware/u2f_knownapps.h | 174 ++++++++++++++++++---------------- gen/bitmaps.c | 22 +---- gen/bitmaps.h | 11 +-- gen/bitmaps/generate.py | 3 +- gen/bitmaps/u2f_bitbucket.png | Bin 292 -> 0 bytes gen/bitmaps/u2f_bitfinex.png | Bin 285 -> 0 bytes gen/bitmaps/u2f_dropbox.png | Bin 263 -> 0 bytes gen/bitmaps/u2f_fastmail.png | Bin 226 -> 0 bytes gen/bitmaps/u2f_gandi.png | Bin 250 -> 0 bytes gen/bitmaps/u2f_github.png | Bin 236 -> 0 bytes gen/bitmaps/u2f_gitlab.png | Bin 229 -> 0 bytes gen/bitmaps/u2f_google.png | Bin 240 -> 0 bytes gen/bitmaps/u2f_slushpool.png | Bin 214 -> 0 bytes gen/bitmaps/u2f_yubico.png | Bin 253 -> 0 bytes gen/bitmaps/webauthn.png | Bin 0 -> 1076 bytes gen/fonts/generate.py | 3 +- shell.nix | 2 +- 21 files changed, 108 insertions(+), 131 deletions(-) delete mode 100644 gen/bitmaps/u2f_bitbucket.png delete mode 100644 gen/bitmaps/u2f_bitfinex.png delete mode 100644 gen/bitmaps/u2f_dropbox.png delete mode 100644 gen/bitmaps/u2f_fastmail.png delete mode 100644 gen/bitmaps/u2f_gandi.png delete mode 100644 gen/bitmaps/u2f_github.png delete mode 100644 gen/bitmaps/u2f_gitlab.png delete mode 100644 gen/bitmaps/u2f_google.png delete mode 100644 gen/bitmaps/u2f_slushpool.png delete mode 100644 gen/bitmaps/u2f_yubico.png create mode 100644 gen/bitmaps/webauthn.png diff --git a/common.c b/common.c index 2c2e31c09..ae7230613 100644 --- a/common.c +++ b/common.c @@ -23,6 +23,7 @@ #include "layout.h" #include "oled.h" #include "util.h" +#include "bitmaps.h" #include "firmware/usb.h" uint8_t HW_ENTROPY_DATA[HW_ENTROPY_LEN]; diff --git a/firmware/layout2.c b/firmware/layout2.c index 0ca71faf9..b61a46790 100644 --- a/firmware/layout2.c +++ b/firmware/layout2.c @@ -756,11 +756,8 @@ void layoutDecryptIdentity(const IdentityType *identity) NULL); } -void layoutU2FDialog(const char *verb, const char *appname, const BITMAP *appicon) { - if (!appicon) { - appicon = &bmp_icon_question; - } - layoutDialog(appicon, NULL, verb, NULL, verb, _("U2F security key?"), NULL, appname, NULL, NULL); +void layoutU2FDialog(const char *verb, const char *appname) { + layoutDialog(&bmp_webauthn, NULL, verb, NULL, verb, _("U2F security key?"), NULL, appname, NULL, NULL); } void layoutNEMDialog(const BITMAP *icon, const char *btnNo, const char *btnYes, const char *desc, const char *line1, const char *address) { diff --git a/firmware/layout2.h b/firmware/layout2.h index 954832bdf..f3935f409 100644 --- a/firmware/layout2.h +++ b/firmware/layout2.h @@ -59,7 +59,7 @@ void layoutAddress(const char *address, const char *desc, bool qrcode, bool igno void layoutPublicKey(const uint8_t *pubkey); void layoutSignIdentity(const IdentityType *identity, const char *challenge); void layoutDecryptIdentity(const IdentityType *identity); -void layoutU2FDialog(const char *verb, const char *appname, const BITMAP *appicon); +void layoutU2FDialog(const char *verb, const char *appname); void layoutNEMDialog(const BITMAP *icon, const char *btnNo, const char *btnYes, const char *desc, const char *line1, const char *address); void layoutNEMTransferXEM(const char *desc, uint64_t quantity, const bignum256 *multiplier, uint64_t fee); diff --git a/firmware/u2f.c b/firmware/u2f.c index 6cb05914d..1b856aa70 100644 --- a/firmware/u2f.c +++ b/firmware/u2f.c @@ -441,13 +441,12 @@ void u2f_version(const APDU *a) send_u2f_msg(version_response, sizeof(version_response)); } -static void getReadableAppId(const uint8_t appid[U2F_APPID_SIZE], const char **appname, const BITMAP **appicon) { +static void getReadableAppId(const uint8_t appid[U2F_APPID_SIZE], const char **appname) { static char buf[8+2+8+1]; for (unsigned int i = 0; i < sizeof(u2f_well_known)/sizeof(U2FWellKnown); i++) { if (memcmp(appid, u2f_well_known[i].appid, U2F_APPID_SIZE) == 0) { *appname = u2f_well_known[i].appname; - *appicon = u2f_well_known[i].appicon; return; } } @@ -456,7 +455,6 @@ static void getReadableAppId(const uint8_t appid[U2F_APPID_SIZE], const char **a buf[8] = buf[9] = '.'; data2hex(appid + (U2F_APPID_SIZE - 4), 4, &buf[10]); *appname = buf; - *appicon = NULL; } static const HDNode *getDerivedNode(uint32_t *address_n, size_t address_n_count) @@ -575,9 +573,8 @@ void u2f_register(const APDU *a) layoutDialog(&bmp_icon_warning, NULL, _("OK"), NULL, _("Another U2F device"), _("was used to register"), _("in this application."), NULL, NULL, NULL); } else { const char *appname; - const BITMAP *appicon; - getReadableAppId(req->appId, &appname, &appicon); - layoutU2FDialog(_("Register"), appname, appicon); + getReadableAppId(req->appId, &appname); + layoutU2FDialog(_("Register"), appname); } last_req_state = REG; } @@ -709,9 +706,8 @@ void u2f_authenticate(const APDU *a) // error: testof-user-presence is required buttonUpdate(); // Clear button state const char *appname; - const BITMAP *appicon; - getReadableAppId(req->appId, &appname, &appicon); - layoutU2FDialog(_("Authenticate"), appname, appicon); + getReadableAppId(req->appId, &appname); + layoutU2FDialog(_("Authenticate"), appname); last_req_state = AUTH; } diff --git a/firmware/u2f_knownapps.h b/firmware/u2f_knownapps.h index a6a25ea85..2f945e937 100644 --- a/firmware/u2f_knownapps.h +++ b/firmware/u2f_knownapps.h @@ -22,115 +22,127 @@ #include #include "u2f/u2f.h" -#include "bitmaps.h" typedef struct { const uint8_t appid[U2F_APPID_SIZE]; const char *appname; - const BITMAP *appicon; } U2FWellKnown; +// contents generated via script in +// trezor-common/defs/webauthn/gen.py +// do not edit manually + static const U2FWellKnown u2f_well_known[] = { { - // https://www.gstatic.com/securitykey/origins.json - { 0xa5, 0x46, 0x72, 0xb2, 0x22, 0xc4, 0xcf, 0x95, - 0xe1, 0x51, 0xed, 0x8d, 0x4d, 0x3c, 0x76, 0x7a, - 0x6c, 0xc3, 0x49, 0x43, 0x59, 0x43, 0x79, 0x4e, - 0x88, 0x4f, 0x3d, 0x02, 0x3a, 0x82, 0x29, 0xfd }, - "Google", - &bmp_u2f_google + // U2F: https://bitbucket.org + { 0x12, 0x74, 0x3b, 0x92, 0x12, 0x97, 0xb7, 0x7f, 0x11, 0x35, 0xe4, 0x1f, 0xde, 0xdd, 0x4a, 0x84, 0x6a, 0xfe, 0x82, 0xe1, 0xf3, 0x69, 0x32, 0xa9, 0x91, 0x2f, 0x3b, 0x0d, 0x8d, 0xfb, 0x7d, 0x0e }, + "Bitbucket" }, { - // https://github.com/u2f/trusted_facets - { 0x70, 0x61, 0x7d, 0xfe, 0xd0, 0x65, 0x86, 0x3a, - 0xf4, 0x7c, 0x15, 0x55, 0x6c, 0x91, 0x79, 0x88, - 0x80, 0x82, 0x8c, 0xc4, 0x07, 0xfd, 0xf7, 0x0a, - 0xe8, 0x50, 0x11, 0x56, 0x94, 0x65, 0xa0, 0x75 }, - "GitHub", - &bmp_u2f_github + // U2F: https://www.bitfinex.com + { 0x30, 0x2f, 0xd5, 0xb4, 0x49, 0x2a, 0x07, 0xb9, 0xfe, 0xbb, 0x30, 0xe7, 0x32, 0x69, 0xec, 0xa5, 0x01, 0x20, 0x5c, 0xcf, 0xe0, 0xc2, 0x0b, 0xf7, 0xb4, 0x72, 0xfa, 0x2d, 0x31, 0xe2, 0x1e, 0x63 }, + "Bitfinex" }, { - // https://www.dropbox.com/u2f-app-id.json - { 0xc5, 0x0f, 0x8a, 0x7b, 0x70, 0x8e, 0x92, 0xf8, - 0x2e, 0x7a, 0x50, 0xe2, 0xbd, 0xc5, 0x5d, 0x8f, - 0xd9, 0x1a, 0x22, 0xfe, 0x6b, 0x29, 0xc0, 0xcd, - 0xf7, 0x80, 0x55, 0x30, 0x84, 0x2a, 0xf5, 0x81 }, - "Dropbox", - &bmp_u2f_dropbox + // U2F: https://vault.bitwarden.com/app-id.json + { 0xa3, 0x4d, 0x30, 0x9f, 0xfa, 0x28, 0xc1, 0x24, 0x14, 0xb8, 0xba, 0x6c, 0x07, 0xee, 0x1e, 0xfa, 0xe1, 0xa8, 0x5e, 0x8a, 0x04, 0x61, 0x48, 0x59, 0xa6, 0x7c, 0x04, 0x93, 0xb6, 0x95, 0x61, 0x90 }, + "Bitwarden" }, { - // https://slushpool.com/static/security/u2f.json - { 0x08, 0xb2, 0xa3, 0xd4, 0x19, 0x39, 0xaa, 0x31, - 0x66, 0x84, 0x93, 0xcb, 0x36, 0xcd, 0xcc, 0x4f, - 0x16, 0xc4, 0xd9, 0xb4, 0xc8, 0x23, 0x8b, 0x73, - 0xc2, 0xf6, 0x72, 0xc0, 0x33, 0x00, 0x71, 0x97 }, - "Slush Pool", - &bmp_u2f_slushpool + // U2F: https://www.dashlane.com + { 0x68, 0x20, 0x19, 0x15, 0xd7, 0x4c, 0xb4, 0x2a, 0xf5, 0xb3, 0xcc, 0x5c, 0x95, 0xb9, 0x55, 0x3e, 0x3e, 0x3a, 0x83, 0xb4, 0xd2, 0xa9, 0x3b, 0x45, 0xfb, 0xad, 0xaa, 0x84, 0x69, 0xff, 0x8e, 0x6e }, + "Dashlane" }, { - // https://bitbucket.org - { 0x12, 0x74, 0x3b, 0x92, 0x12, 0x97, 0xb7, 0x7f, - 0x11, 0x35, 0xe4, 0x1f, 0xde, 0xdd, 0x4a, 0x84, - 0x6a, 0xfe, 0x82, 0xe1, 0xf3, 0x69, 0x32, 0xa9, - 0x91, 0x2f, 0x3b, 0x0d, 0x8d, 0xfb, 0x7d, 0x0e }, - "Bitbucket", - &bmp_u2f_bitbucket + // U2F: https://www.dropbox.com/u2f-app-id.json + { 0xc5, 0x0f, 0x8a, 0x7b, 0x70, 0x8e, 0x92, 0xf8, 0x2e, 0x7a, 0x50, 0xe2, 0xbd, 0xc5, 0x5d, 0x8f, 0xd9, 0x1a, 0x22, 0xfe, 0x6b, 0x29, 0xc0, 0xcd, 0xf7, 0x80, 0x55, 0x30, 0x84, 0x2a, 0xf5, 0x81 }, + "Dropbox" }, { - // https://gitlab.com - { 0xe7, 0xbe, 0x96, 0xa5, 0x1b, 0xd0, 0x19, 0x2a, - 0x72, 0x84, 0x0d, 0x2e, 0x59, 0x09, 0xf7, 0x2b, - 0xa8, 0x2a, 0x2f, 0xe9, 0x3f, 0xaa, 0x62, 0x4f, - 0x03, 0x39, 0x6b, 0x30, 0xe4, 0x94, 0xc8, 0x04 }, - "GitLab", - &bmp_u2f_gitlab + // WebAuthn: www.dropbox.com + { 0x82, 0xf4, 0xa8, 0xc9, 0x5f, 0xec, 0x94, 0xb2, 0x6b, 0xaf, 0x9e, 0x37, 0x25, 0x0e, 0x95, 0x63, 0xd9, 0xa3, 0x66, 0xc7, 0xbe, 0x26, 0x1c, 0xa4, 0xdd, 0x01, 0x01, 0xf4, 0xd5, 0xef, 0xcb, 0x83 }, + "Dropbox" }, { - // https://www.fastmail.com - { 0x69, 0x66, 0xab, 0xe3, 0x67, 0x4e, 0xa2, 0xf5, - 0x30, 0x79, 0xeb, 0x71, 0x01, 0x97, 0x84, 0x8c, - 0x9b, 0xe6, 0xf3, 0x63, 0x99, 0x2f, 0xd0, 0x29, - 0xe9, 0x89, 0x84, 0x47, 0xcb, 0x9f, 0x00, 0x84 }, - "FastMail", - &bmp_u2f_fastmail + // U2F: https://api-9dcf9b83.duosecurity.com + { 0xf3, 0xe2, 0x04, 0x2f, 0x94, 0x60, 0x7d, 0xa0, 0xa9, 0xc1, 0xf3, 0xb9, 0x5e, 0x0d, 0x2f, 0x2b, 0xb2, 0xe0, 0x69, 0xc5, 0xbb, 0x4f, 0xa7, 0x64, 0xaf, 0xfa, 0x64, 0x7d, 0x84, 0x7b, 0x7e, 0xd6 }, + "Duo" }, { - // https://account.gandi.net/api/u2f/trusted_facets.json - { 0xa4, 0xe2, 0x2d, 0xca, 0xfe, 0xa7, 0xe9, 0x0e, - 0x12, 0x89, 0x50, 0x11, 0x39, 0x89, 0xfc, 0x45, - 0x97, 0x8d, 0xc9, 0xfb, 0x87, 0x76, 0x75, 0x60, - 0x51, 0x6c, 0x1c, 0x69, 0xdf, 0xdf, 0xd1, 0x96 }, - "Gandi", - &bmp_u2f_gandi, + // U2F: https://www.fastmail.com + { 0x69, 0x66, 0xab, 0xe3, 0x67, 0x4e, 0xa2, 0xf5, 0x30, 0x79, 0xeb, 0x71, 0x01, 0x97, 0x84, 0x8c, 0x9b, 0xe6, 0xf3, 0x63, 0x99, 0x2f, 0xd0, 0x29, 0xe9, 0x89, 0x84, 0x47, 0xcb, 0x9f, 0x00, 0x84 }, + "FastMail" }, { - // https://www.bitfinex.com - { 0x30, 0x2f, 0xd5, 0xb4, 0x49, 0x2a, 0x07, 0xb9, - 0xfe, 0xbb, 0x30, 0xe7, 0x32, 0x69, 0xec, 0xa5, - 0x01, 0x20, 0x5c, 0xcf, 0xe0, 0xc2, 0x0b, 0xf7, - 0xb4, 0x72, 0xfa, 0x2d, 0x31, 0xe2, 0x1e, 0x63 }, - "Bitfinex", - &bmp_u2f_bitfinex + // U2F: https://id.fedoraproject.org/u2f-origins.json + { 0x9d, 0x61, 0x44, 0x2f, 0x5c, 0xe1, 0x33, 0xbd, 0x46, 0x54, 0x4f, 0xc4, 0x2f, 0x0a, 0x6d, 0x54, 0xc0, 0xde, 0xb8, 0x88, 0x40, 0xca, 0xc2, 0xb6, 0xae, 0xfa, 0x65, 0x14, 0xf8, 0x93, 0x49, 0xe9 }, + "Fedora" }, { - // https://demo.yubico.com - { 0x55, 0x67, 0x3b, 0x51, 0x38, 0xcc, 0x90, 0xd3, - 0xb7, 0xf3, 0x2b, 0xfd, 0xad, 0x6a, 0x38, 0xa8, - 0xed, 0xd7, 0xb3, 0x55, 0xb7, 0x7a, 0xb9, 0x79, - 0x21, 0x96, 0xf1, 0x06, 0xd1, 0x6c, 0xa3, 0x12 }, - "Yubico U2F Demo", - &bmp_u2f_yubico + // U2F: https://account.gandi.net/api/u2f/trusted_facets.json + { 0xa4, 0xe2, 0x2d, 0xca, 0xfe, 0xa7, 0xe9, 0x0e, 0x12, 0x89, 0x50, 0x11, 0x39, 0x89, 0xfc, 0x45, 0x97, 0x8d, 0xc9, 0xfb, 0x87, 0x76, 0x75, 0x60, 0x51, 0x6c, 0x1c, 0x69, 0xdf, 0xdf, 0xd1, 0x96 }, + "Gandi" }, { - // https://u2f.bin.coffee - { - 0x1b, 0x3c, 0x16, 0xdd, 0x2f, 0x7c, 0x46, 0xe2, - 0xb4, 0xc2, 0x89, 0xdc, 0x16, 0x74, 0x6b, 0xcc, - 0x60, 0xdf, 0xcf, 0x0f, 0xb8, 0x18, 0xe1, 0x32, - 0x15, 0x52, 0x6e, 0x14, 0x08, 0xe7, 0xf4, 0x68 }, - "u2f.bin.coffee", - NULL - } + // U2F: https://github.com/u2f/trusted_facets + { 0x70, 0x61, 0x7d, 0xfe, 0xd0, 0x65, 0x86, 0x3a, 0xf4, 0x7c, 0x15, 0x55, 0x6c, 0x91, 0x79, 0x88, 0x80, 0x82, 0x8c, 0xc4, 0x07, 0xfd, 0xf7, 0x0a, 0xe8, 0x50, 0x11, 0x56, 0x94, 0x65, 0xa0, 0x75 }, + "GitHub" + }, + { + // U2F: https://gitlab.com + { 0xe7, 0xbe, 0x96, 0xa5, 0x1b, 0xd0, 0x19, 0x2a, 0x72, 0x84, 0x0d, 0x2e, 0x59, 0x09, 0xf7, 0x2b, 0xa8, 0x2a, 0x2f, 0xe9, 0x3f, 0xaa, 0x62, 0x4f, 0x03, 0x39, 0x6b, 0x30, 0xe4, 0x94, 0xc8, 0x04 }, + "GitLab" + }, + { + // U2F: https://www.gstatic.com/securitykey/origins.json + { 0xa5, 0x46, 0x72, 0xb2, 0x22, 0xc4, 0xcf, 0x95, 0xe1, 0x51, 0xed, 0x8d, 0x4d, 0x3c, 0x76, 0x7a, 0x6c, 0xc3, 0x49, 0x43, 0x59, 0x43, 0x79, 0x4e, 0x88, 0x4f, 0x3d, 0x02, 0x3a, 0x82, 0x29, 0xfd }, + "Google" + }, + { + // U2F: https://keepersecurity.com + { 0x53, 0xa1, 0x5b, 0xa4, 0x2a, 0x7c, 0x03, 0x25, 0xb8, 0xdb, 0xee, 0x28, 0x96, 0x34, 0xa4, 0x8f, 0x58, 0xae, 0xa3, 0x24, 0x66, 0x45, 0xd5, 0xff, 0x41, 0x8f, 0x9b, 0xb8, 0x81, 0x98, 0x85, 0xa9 }, + "Keeper" + }, + { + // U2F: https://lastpass.com + { 0xd7, 0x55, 0xc5, 0x27, 0xa8, 0x6b, 0xf7, 0x84, 0x45, 0xc2, 0x82, 0xe7, 0x13, 0xdc, 0xb8, 0x6d, 0x46, 0xff, 0x8b, 0x3c, 0xaf, 0xcf, 0xb7, 0x3b, 0x2e, 0x8c, 0xbe, 0x6c, 0x08, 0x84, 0xcb, 0x24 }, + "LastPass" + }, + { + // U2F: https://slushpool.com/static/security/u2f.json + { 0x08, 0xb2, 0xa3, 0xd4, 0x19, 0x39, 0xaa, 0x31, 0x66, 0x84, 0x93, 0xcb, 0x36, 0xcd, 0xcc, 0x4f, 0x16, 0xc4, 0xd9, 0xb4, 0xc8, 0x23, 0x8b, 0x73, 0xc2, 0xf6, 0x72, 0xc0, 0x33, 0x00, 0x71, 0x97 }, + "Slush Pool" + }, + { + // U2F: https://dashboard.stripe.com + { 0x2a, 0xc6, 0xad, 0x09, 0xa6, 0xd0, 0x77, 0x2c, 0x44, 0xda, 0x73, 0xa6, 0x07, 0x2f, 0x9d, 0x24, 0x0f, 0xc6, 0x85, 0x4a, 0x70, 0xd7, 0x9c, 0x10, 0x24, 0xff, 0x7c, 0x75, 0x59, 0x59, 0x32, 0x92 }, + "Stripe" + }, + { + // U2F: https://u2f.bin.coffee + { 0x1b, 0x3c, 0x16, 0xdd, 0x2f, 0x7c, 0x46, 0xe2, 0xb4, 0xc2, 0x89, 0xdc, 0x16, 0x74, 0x6b, 0xcc, 0x60, 0xdf, 0xcf, 0x0f, 0xb8, 0x18, 0xe1, 0x32, 0x15, 0x52, 0x6e, 0x14, 0x08, 0xe7, 0xf4, 0x68 }, + "u2f.bin.coffee" + }, + { + // WebAuthn: webauthn.bin.coffee + { 0xa6, 0x42, 0xd2, 0x1b, 0x7c, 0x6d, 0x55, 0xe1, 0xce, 0x23, 0xc5, 0x39, 0x98, 0x28, 0xd2, 0xc7, 0x49, 0xbf, 0x6a, 0x6e, 0xf2, 0xfe, 0x03, 0xcc, 0x9e, 0x10, 0xcd, 0xf4, 0xed, 0x53, 0x08, 0x8b }, + "webauthn.bin.coffee" + }, + { + // WebAuthn: webauthn.io + { 0x74, 0xa6, 0xea, 0x92, 0x13, 0xc9, 0x9c, 0x2f, 0x74, 0xb2, 0x24, 0x92, 0xb3, 0x20, 0xcf, 0x40, 0x26, 0x2a, 0x94, 0xc1, 0xa9, 0x50, 0xa0, 0x39, 0x7f, 0x29, 0x25, 0x0b, 0x60, 0x84, 0x1e, 0xf0 }, + "WebAuthn.io" + }, + { + // WebAuthn: webauthn.me + { 0xf9, 0x5b, 0xc7, 0x38, 0x28, 0xee, 0x21, 0x0f, 0x9f, 0xd3, 0xbb, 0xe7, 0x2d, 0x97, 0x90, 0x80, 0x13, 0xb0, 0xa3, 0x75, 0x9e, 0x9a, 0xea, 0x3d, 0x0a, 0xe3, 0x18, 0x76, 0x6c, 0xd2, 0xe1, 0xad }, + "WebAuthn.me" + }, + { + // WebAuthn: demo.yubico.com + { 0xc4, 0x6c, 0xef, 0x82, 0xad, 0x1b, 0x54, 0x64, 0x77, 0x59, 0x1d, 0x00, 0x8b, 0x08, 0x75, 0x9e, 0xc3, 0xe6, 0xd2, 0xec, 0xb4, 0xf3, 0x94, 0x74, 0xbf, 0xea, 0x69, 0x69, 0x92, 0x5d, 0x03, 0xb7 }, + "demo.yubico.com" + }, }; #endif // U2F_KNOWNAPPS_INCLUDED diff --git a/gen/bitmaps.c b/gen/bitmaps.c index 49a869164..5d60730d1 100644 --- a/gen/bitmaps.c +++ b/gen/bitmaps.c @@ -23,16 +23,7 @@ const uint8_t bmp_logo48_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x const uint8_t bmp_logo48_empty_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x03, 0x81, 0xc0, 0x00, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x20, 0x3c, 0x04, 0x00, 0x00, 0x20, 0xc3, 0x04, 0x00, 0x00, 0x21, 0x00, 0x84, 0x00, 0x00, 0x41, 0x00, 0x82, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x0f, 0xc3, 0xff, 0xc3, 0xf0, 0x08, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x10, 0x08, 0x7f, 0xff, 0xfe, 0x10, 0x08, 0x40, 0x00, 0x02, 0x10, 0x08, 0x40, 0x00, 0x02, 0x10, 0x08, 0x40, 0x00, 0x02, 0x10, 0x08, 0x40, 0x00, 0x02, 0x10, 0x08, 0x40, 0x00, 0x02, 0x10, 0x08, 0x40, 0x00, 0x02, 0x10, 0x08, 0x40, 0x00, 0x02, 0x10, 0x08, 0x40, 0x00, 0x02, 0x10, 0x08, 0x40, 0x00, 0x02, 0x10, 0x08, 0x40, 0x00, 0x02, 0x10, 0x08, 0x40, 0x00, 0x02, 0x10, 0x08, 0x40, 0x00, 0x02, 0x10, 0x08, 0x40, 0x00, 0x02, 0x10, 0x08, 0x40, 0x00, 0x02, 0x10, 0x08, 0x40, 0x00, 0x02, 0x10, 0x08, 0x30, 0x00, 0x0c, 0x10, 0x08, 0x0c, 0x00, 0x30, 0x10, 0x08, 0x03, 0x00, 0xc0, 0x10, 0x0c, 0x00, 0xc3, 0x00, 0x30, 0x03, 0x00, 0x3c, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x03, 0x00, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x00, 0x03, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; const uint8_t bmp_logo64_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xf8, 0x1f, 0xf8, 0x00, 0x00, 0x3f, 0xf0, 0x0f, 0xfc, 0x00, 0x00, 0x3f, 0xe0, 0x07, 0xfc, 0x00, 0x00, 0x3f, 0xc0, 0x03, 0xfc, 0x00, 0x00, 0x7f, 0x80, 0x01, 0xfe, 0x00, 0x00, 0x7f, 0x80, 0x01, 0xfe, 0x00, 0x00, 0x7f, 0x80, 0x01, 0xfe, 0x00, 0x00, 0x7f, 0x80, 0x01, 0xfe, 0x00, 0x00, 0x7f, 0x80, 0x01, 0xfe, 0x00, 0x00, 0x7f, 0x80, 0x01, 0xfe, 0x00, 0x00, 0x7f, 0x80, 0x01, 0xfe, 0x00, 0x00, 0x7f, 0x80, 0x01, 0xfe, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xf8, 0x1f, 0xf8, 0x00, 0x00, 0x1f, 0xf8, 0x1f, 0xfe, 0x00, 0x00, 0x7f, 0xf8, 0x1f, 0xff, 0x80, 0x01, 0xff, 0xf8, 0x1f, 0xff, 0xe0, 0x07, 0xff, 0xf8, 0x1f, 0xff, 0xf8, 0x1f, 0xff, 0xf8, 0x07, 0xff, 0xfe, 0x7f, 0xff, 0xe0, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x7f, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; const uint8_t bmp_logo64_empty_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x07, 0xe0, 0x10, 0x00, 0x00, 0x10, 0x08, 0x10, 0x08, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x20, 0x20, 0x04, 0x04, 0x00, 0x00, 0x20, 0x40, 0x02, 0x04, 0x00, 0x00, 0x40, 0x80, 0x01, 0x02, 0x00, 0x00, 0x40, 0x80, 0x01, 0x02, 0x00, 0x00, 0x40, 0x80, 0x01, 0x02, 0x00, 0x00, 0x40, 0x80, 0x01, 0x02, 0x00, 0x00, 0x40, 0x80, 0x01, 0x02, 0x00, 0x00, 0x40, 0x80, 0x01, 0x02, 0x00, 0x00, 0x40, 0x80, 0x01, 0x02, 0x00, 0x00, 0x40, 0x80, 0x01, 0x02, 0x00, 0x1f, 0xc0, 0xff, 0xff, 0x03, 0xf8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x3f, 0xff, 0xff, 0xfc, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x04, 0x08, 0x10, 0x18, 0x00, 0x00, 0x18, 0x08, 0x10, 0x06, 0x00, 0x00, 0x60, 0x08, 0x10, 0x01, 0x80, 0x01, 0x80, 0x08, 0x10, 0x00, 0x60, 0x06, 0x00, 0x08, 0x18, 0x00, 0x18, 0x18, 0x00, 0x18, 0x06, 0x00, 0x06, 0x60, 0x00, 0x60, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x60, 0x00, 0x00, 0x06, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -const uint8_t bmp_u2f_bitbucket_data[] = { 0x00, 0x3f, 0xf8, 0x00, 0x07, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xf0, 0x3f, 0x00, 0x01, 0xf8, 0x3c, 0x00, 0x00, 0x78, 0x3f, 0x00, 0x01, 0xf8, 0x3f, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xf8, 0x3f, 0xf8, 0x3f, 0xf8, 0x1f, 0xf0, 0x1f, 0xf0, 0x1f, 0xe3, 0x8f, 0xf0, 0x1f, 0xe7, 0xcf, 0xf0, 0x1f, 0xe7, 0xcf, 0xf0, 0x1f, 0xe7, 0xcf, 0xf0, 0x0f, 0xe3, 0x8f, 0xe0, 0x0f, 0xf0, 0x1f, 0xe0, 0x0f, 0xf8, 0x3f, 0xe0, 0x07, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0x00, 0x04, 0x3f, 0xf8, 0x40, 0x07, 0x00, 0x01, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x0f, 0xe0, 0x00, }; -const uint8_t bmp_u2f_bitfinex_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x03, 0xff, 0xa0, 0x00, 0x0f, 0xff, 0x20, 0x00, 0x3f, 0xff, 0x60, 0x00, 0x7f, 0xfe, 0xe0, 0x00, 0xff, 0xfc, 0xe0, 0x01, 0xff, 0xf1, 0xe0, 0x01, 0xff, 0xe3, 0xe0, 0x03, 0xff, 0xc7, 0xe0, 0x03, 0xff, 0x8f, 0xc0, 0x07, 0xfe, 0x0f, 0xc0, 0x07, 0xfc, 0x1f, 0xc0, 0x07, 0xf0, 0x7f, 0x80, 0x07, 0x80, 0xff, 0x80, 0x00, 0x01, 0xff, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -const uint8_t bmp_u2f_dropbox_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x03, 0x00, 0x01, 0xf0, 0x0f, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x0f, 0xfc, 0x3f, 0xf8, 0x3f, 0xfe, 0x7f, 0xfc, 0x7f, 0xfe, 0x7f, 0xff, 0x7f, 0xfc, 0x1f, 0xfe, 0x3f, 0xf0, 0x0f, 0xfc, 0x1f, 0xe0, 0x03, 0xf8, 0x07, 0x80, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x40, 0x03, 0x00, 0x00, 0x60, 0x07, 0x80, 0x01, 0xf0, 0x1f, 0xe0, 0x03, 0xf8, 0x3f, 0xf0, 0x0f, 0xfc, 0x7f, 0xfc, 0x3f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe, 0x1f, 0xfe, 0x7f, 0xfc, 0x0f, 0xfc, 0x3f, 0xf0, 0x03, 0xf9, 0x9f, 0xc0, 0x00, 0xe3, 0xc7, 0x80, 0x00, 0x47, 0xe2, 0x00, 0x03, 0x1f, 0xf8, 0x40, 0x03, 0xff, 0xfd, 0xc0, 0x01, 0xff, 0xff, 0x80, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, }; -const uint8_t bmp_u2f_fastmail_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xf8, 0x4f, 0xff, 0xff, 0xf2, 0x67, 0xff, 0xff, 0xe6, 0x73, 0xff, 0xff, 0xce, 0x79, 0xff, 0xff, 0x9e, 0x7c, 0xff, 0xff, 0x3e, 0x7e, 0x7f, 0xfe, 0x7e, 0x7f, 0x3f, 0xfc, 0xfe, 0x7f, 0x9f, 0xf9, 0xfe, 0x7f, 0xcf, 0xf3, 0xfe, 0x7f, 0xe7, 0xe7, 0xfe, 0x7f, 0xf3, 0xcf, 0xfe, 0x7f, 0xf8, 0x1f, 0xfe, 0x7f, 0xfc, 0x3f, 0xfe, 0x7f, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -const uint8_t bmp_u2f_gandi_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x1c, 0x70, 0x00, 0x00, 0x1c, 0x70, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x01, 0x8f, 0xe1, 0x00, 0x03, 0xc7, 0xc3, 0x80, 0x03, 0xe0, 0x07, 0x80, 0x01, 0xf0, 0x1f, 0x80, 0x01, 0xff, 0xff, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xf8, 0x30, 0x00, 0x00, 0xf0, 0xfc, 0x00, 0x00, 0xf1, 0xfe, 0x00, 0x00, 0xf3, 0xff, 0x00, 0x00, 0xf1, 0xcf, 0x00, 0x00, 0xf0, 0x8f, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x78, 0x1f, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, }; -const uint8_t bmp_u2f_github_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x78, 0x1f, 0x80, 0x01, 0xf8, 0x1f, 0xe0, 0x03, 0xf8, 0x1f, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xfc, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, 0x1f, 0xf8, 0x20, 0x04, 0x1f, 0xf0, 0x70, 0x0e, 0x0f, 0x70, 0xf0, 0x0f, 0x0e, 0x70, 0xf8, 0x1f, 0x0e, 0x70, 0x70, 0x0e, 0x0e, 0x30, 0x70, 0x0e, 0x0c, 0x38, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x38, 0x0e, 0x00, 0x00, 0x70, 0x07, 0x80, 0x01, 0xe0, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -const uint8_t bmp_u2f_gitlab_data[] = { 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x20, 0x06, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x70, 0x0f, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xf8, 0x1f, 0x80, 0x01, 0xf8, 0x1f, 0x80, 0x01, 0xf8, 0x1f, 0x80, 0x01, 0xf8, 0x3f, 0xc0, 0x03, 0xfc, 0x3f, 0xc0, 0x03, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0x80, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, }; -const uint8_t bmp_u2f_google_data[] = { 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x01, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xc0, 0x07, 0xf0, 0x0f, 0xe0, 0x0f, 0xc0, 0x03, 0xf0, 0x1f, 0x00, 0x01, 0xf8, 0x3e, 0x00, 0x00, 0xfc, 0x3c, 0x00, 0x01, 0xfc, 0x7c, 0x0f, 0xf3, 0xfe, 0x78, 0x1f, 0xff, 0xfe, 0x78, 0x3f, 0xff, 0xfe, 0xf0, 0x3f, 0xff, 0xff, 0xf0, 0x7f, 0xff, 0xff, 0xf0, 0x7f, 0x00, 0x1f, 0xf0, 0x7f, 0x00, 0x1f, 0xf0, 0x7f, 0x00, 0x1f, 0xf0, 0x7f, 0x00, 0x1f, 0xf0, 0x7f, 0xfe, 0x1f, 0xf0, 0x3f, 0xfe, 0x1f, 0x78, 0x3f, 0xfc, 0x1e, 0x78, 0x1f, 0xf8, 0x3e, 0x7c, 0x07, 0xf0, 0x3e, 0x3c, 0x00, 0x00, 0x7c, 0x3e, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0xf8, 0x0f, 0xc0, 0x03, 0xf0, 0x07, 0xf0, 0x0f, 0xe0, 0x03, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0x80, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x0f, 0xf0, 0x00, }; -const uint8_t bmp_u2f_slushpool_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x01, 0xee, 0x00, 0x01, 0xff, 0xff, 0x00, 0x01, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xff, 0xf8, 0x00, 0xfe, 0x0f, 0xf8, 0x00, 0xfe, 0x03, 0xf8, 0x00, 0xfc, 0x03, 0xf8, 0x00, 0xfc, 0x03, 0xf8, 0x01, 0xfc, 0x03, 0xf8, 0x01, 0xfc, 0x03, 0xf0, 0x01, 0xfc, 0x07, 0xf0, 0x01, 0xfc, 0x1f, 0xf0, 0x0f, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -const uint8_t bmp_u2f_yubico_data[] = { 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x01, 0xff, 0xff, 0x80, 0x03, 0xfc, 0x3f, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x0f, 0x80, 0x01, 0xf0, 0x1f, 0x00, 0x00, 0x78, 0x3e, 0x00, 0x00, 0x3c, 0x3c, 0x7c, 0x1f, 0x3c, 0x78, 0x7c, 0x1f, 0x1e, 0x78, 0x7c, 0x3e, 0x0e, 0xf0, 0x3e, 0x3e, 0x0f, 0xf0, 0x3e, 0x3c, 0x0f, 0xf0, 0x1f, 0x7c, 0x0f, 0xe0, 0x1f, 0x7c, 0x07, 0xe0, 0x1f, 0x78, 0x07, 0xe0, 0x0f, 0xf8, 0x07, 0xe0, 0x0f, 0xf0, 0x07, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x07, 0xf0, 0x0f, 0xf0, 0x07, 0xe0, 0x0f, 0x78, 0x03, 0xe0, 0x0e, 0x78, 0x07, 0xc0, 0x1e, 0x3c, 0x07, 0xc0, 0x3e, 0x3c, 0x0f, 0xc0, 0x3c, 0x1e, 0x0f, 0x80, 0x78, 0x0f, 0x8f, 0x81, 0xf0, 0x07, 0xc0, 0x03, 0xe0, 0x03, 0xfc, 0x3f, 0xc0, 0x01, 0xff, 0xff, 0x80, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x1f, 0xf8, 0x00, }; +const uint8_t bmp_webauthn_data[] = { 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x03, 0xfe, 0x1c, 0x00, 0x03, 0xfc, 0x0c, 0x00, 0x07, 0xf8, 0x06, 0x00, 0x07, 0xf8, 0x06, 0x00, 0x0f, 0xf8, 0x06, 0x00, 0x0f, 0xf8, 0x07, 0x00, 0x0f, 0xfc, 0x0f, 0x00, 0x0f, 0xfe, 0x1f, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x07, 0xff, 0xfe, 0x00, 0x0f, 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xfc, 0x00, 0x3f, 0xff, 0xfc, 0x00, 0x7f, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xe0, 0x01, 0xff, 0xdf, 0x80, 0x03, 0xff, 0x80, 0x00, 0x07, 0xff, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, }; const BITMAP bmp_digit0 = {16, 16, bmp_digit0_data}; const BITMAP bmp_digit1 = {16, 16, bmp_digit1_data}; @@ -57,13 +48,4 @@ const BITMAP bmp_logo48 = {40, 48, bmp_logo48_data}; const BITMAP bmp_logo48_empty = {40, 48, bmp_logo48_empty_data}; const BITMAP bmp_logo64 = {48, 64, bmp_logo64_data}; const BITMAP bmp_logo64_empty = {48, 64, bmp_logo64_empty_data}; -const BITMAP bmp_u2f_bitbucket = {32, 32, bmp_u2f_bitbucket_data}; -const BITMAP bmp_u2f_bitfinex = {32, 32, bmp_u2f_bitfinex_data}; -const BITMAP bmp_u2f_dropbox = {32, 32, bmp_u2f_dropbox_data}; -const BITMAP bmp_u2f_fastmail = {32, 32, bmp_u2f_fastmail_data}; -const BITMAP bmp_u2f_gandi = {32, 32, bmp_u2f_gandi_data}; -const BITMAP bmp_u2f_github = {32, 32, bmp_u2f_github_data}; -const BITMAP bmp_u2f_gitlab = {32, 32, bmp_u2f_gitlab_data}; -const BITMAP bmp_u2f_google = {32, 32, bmp_u2f_google_data}; -const BITMAP bmp_u2f_slushpool = {32, 32, bmp_u2f_slushpool_data}; -const BITMAP bmp_u2f_yubico = {32, 32, bmp_u2f_yubico_data}; +const BITMAP bmp_webauthn = {32, 32, bmp_webauthn_data}; diff --git a/gen/bitmaps.h b/gen/bitmaps.h index 29f7b5b06..c06351db0 100644 --- a/gen/bitmaps.h +++ b/gen/bitmaps.h @@ -31,15 +31,6 @@ extern const BITMAP bmp_logo48; extern const BITMAP bmp_logo48_empty; extern const BITMAP bmp_logo64; extern const BITMAP bmp_logo64_empty; -extern const BITMAP bmp_u2f_bitbucket; -extern const BITMAP bmp_u2f_bitfinex; -extern const BITMAP bmp_u2f_dropbox; -extern const BITMAP bmp_u2f_fastmail; -extern const BITMAP bmp_u2f_gandi; -extern const BITMAP bmp_u2f_github; -extern const BITMAP bmp_u2f_gitlab; -extern const BITMAP bmp_u2f_google; -extern const BITMAP bmp_u2f_slushpool; -extern const BITMAP bmp_u2f_yubico; +extern const BITMAP bmp_webauthn; #endif diff --git a/gen/bitmaps/generate.py b/gen/bitmaps/generate.py index 21d72a6de..d0005427c 100755 --- a/gen/bitmaps/generate.py +++ b/gen/bitmaps/generate.py @@ -1,5 +1,4 @@ -#!/usr/bin/env python -from __future__ import print_function +#!/usr/bin/env python3 import glob import os from PIL import Image diff --git a/gen/bitmaps/u2f_bitbucket.png b/gen/bitmaps/u2f_bitbucket.png deleted file mode 100644 index 895f1399056fd7bb7fb60b6822395639e1c7bb97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={W*pj^6T^Rm@;DWu&Cj&(|3p^r= z85p>QL70(Y)*K0-AbW|YuPgflHYs5t%iyPC-9Vv@o-U3d9>?E?dGZ}l;1D_Vf4`4^ zZq(^@$ChZOCnO}eWGpk>{FZ^C&)FzLde;`ND7$zs@SJOL;vKO}gS!2b5|gef&9}CSSluku iwlOE5y8DrnCBw)0nZ}crbj1K2&*16m=d#Wzp$Pyje{vuI diff --git a/gen/bitmaps/u2f_bitfinex.png b/gen/bitmaps/u2f_bitfinex.png deleted file mode 100644 index 48a1048456d5dea18014964b630db2f0e6a4cd9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%Kng>kz0=MA8QXinf?Q%OpAXxT-~~C=FWKytT(DySG{7JA3E=y!{P#k3LfJJ^$GrUD+OH-`Z9IgQr=m#>eEy;wxGS?8M?AF8q-~@{TL31 z<;XVZDZAZkk^8VIHXyQemcv)I5@843pD*+}ejN^L5fqY4=JGw*!}F@`g2cZ5lga^t Z@{3KwY*#I_ivhZt!PC{xWt~$(6977sWiS8$ diff --git a/gen/bitmaps/u2f_dropbox.png b/gen/bitmaps/u2f_dropbox.png deleted file mode 100644 index 9d78cadb004addcb8344a54cd62690849256c0cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263 zcmV+i0r>ujP)*Bi47H{Zla*jJXXUhY zYcWW{RwfmHc!A-Oego-^_%8hk?*_|yOZ N002ovPDHLkV1l8qa>4)r diff --git a/gen/bitmaps/u2f_fastmail.png b/gen/bitmaps/u2f_fastmail.png deleted file mode 100644 index 20d05d163046417c8516776966dd1c7fd378501d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJm7Xq+ArXh)PInY)P~dPq`0-!( zHqo;g84g^!1y{FJuAlUumvMpP11*6)K?*SoF1cp!s}>aeZSG)h^Kd(Z?cR14!;Z*f z{slovE%s&)JvsT#`5ol!l&rC8vsMlJkjnRFLPhg_wu|DNoH0{c#5gr$WR6O4^2S_c z72?#5iFMQFc0Nobmr@l`|iP1`cJp8K)x*E!)pu0PHPKHFHZi9cH($>qWw ZGvi;Fn|RBFsX#|Fc)I$ztaD0e0swITP%8ic diff --git a/gen/bitmaps/u2f_gandi.png b/gen/bitmaps/u2f_gandi.png deleted file mode 100644 index 12abe0ff114a8075d60d926035e4f71b01137394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmVl}sKSjKh{yvs6Z-vK^GUCCruz_mSPGJnA68?>)Wgxs5+|TS>}@oPLy-~rXzC^* z(*d4Q5u8QKrfCx0AaDk8*{}1CAO=iPdJwO3(Q=LpD^#|ix=P)hV{vK>!Cy;AzF6RiKIsgCw07*qoM6N<$g8VOK A&j0`b diff --git a/gen/bitmaps/u2f_github.png b/gen/bitmaps/u2f_github.png deleted file mode 100644 index 9f9be253e30c34e220ea3cac2145152b0189a3f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmVo5iB zVHX|v@n&##lix2uQx+Oi6Fuc1qx{`OzJt8-je~Zd6Z)`{3Iz_vCY>b16WJl0gM-LS zU`2leD-9CL996ouil7PSdzpLq*buDeM=4xCVsx m4V^P)lnh~P}IH05!RFv&zDRA?A|5Q)ueRRzisWGR74`S(Y# z!g@vUB-acQ%h~TC7$%^}<-uU}SFXSjd7<10Ryns6^mhSEh5lR30cNg6(EbUtNwmVz zFJuP4D3CF9?uvwUy&mh|2>%E@0;RuOGDMYdLURs0< flZlRTA&9gS9LG;4emS$N00000NkvXXu0mjfu5n@$ diff --git a/gen/bitmaps/u2f_google.png b/gen/bitmaps/u2f_google.png deleted file mode 100644 index 864f4e18667bf0153e49dc59bf1a8a74141cc1dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmV+jBA_UP z8z^byR*3WzXoUmk=$ylI)vebB6!&?fF?3)o-6!@+L3{e`YG+&_w%ixRA9df%M#;b- zZn-@y?2s|1P>Rbt9UMtAY=VT>is-kjq45^o5a0000RmFP;X;f6Ka+7>t=K<}%hC+Am>L`_^2;*j|5iR4LG* N44$rjF6*2UngASlQk?(* diff --git a/gen/bitmaps/u2f_yubico.png b/gen/bitmaps/u2f_yubico.png deleted file mode 100644 index c4bc1f0a280ddee04f59b57898c707ecede0425d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 253 zcmVCz?)ilsvs_|?z(PRu*NGgGS^ z#zRDh20DqTSAVT=q+?d~9>yw+(x@gU_FBuG=SyQX?J+iHYJH4NckruYrU|iDU=000000NkvXXu0mjf D(wu7= diff --git a/gen/bitmaps/webauthn.png b/gen/bitmaps/webauthn.png new file mode 100644 index 0000000000000000000000000000000000000000..1f1b595abfb99b2ff016691b37755f579724cfdf GIT binary patch literal 1076 zcmV-41k3x0P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3vbmZTsIhTpS_SprE2f#q;LXLc~lpP-i2Qx~;s zT26^#BtQ8QEa-oJ5BOyVCKthr#*jjAcKGBIWxI&(e)O$h$I$uZd^>PEBfNY-*0c4z z4yxat@-}|64|{JDy?B7~@B;5{=&NJR+c-J;N73-RkNa}A-xw{9(bv^wA1n-EUDWCV zZqt}yu_*EKTCk?}6T8->C2P@TSJAuXsw>tiCM0Ax&|?G4IIv^0zG5|vo;s=ZM3s0M zi>#EWvSVaF8xB%V+&D6ErOwPAn076=_)UwyiqSkbG*d#G4DFS}24@CW+8EVYj1X=0 zxW&qJ5ls#_!^rb&W(EYu#!Z$0-`ak_7qDyuWeIb%1!h;)DT?4dw|GeaHaoF?%`en8 zsnL=p-h7LRK{f;~APWX`N~DOMDH@<`%85M{BY+~*OeA^cU~Ho0k@>cF6c<|(TF0$a zjE`_&H8zQ}!SY@#f7D0Ip)4$3M1rV9Ns=LO@IgWd8fML9W%Vi=R5fbS969jl5Ias6MrCP{WNHEu^NM?$m5lbxyQQ zfpedc$;^n6M6WtGxBk26V?FF?qcfz_5TdQ!!)Uj2cJ?}A7%oc1~FFxu^AHyz3w5@htJNL%6 z*w&gynO;}(xZEwn59aWpmd(#y1RN`0Jg<^gL0|8-g{@}rukg>K1>3CWy55;=3gIsC zIGATWJO=F`vKztIZs3W*Qy8ylgoAZoRJfvoYgw{;c*_<}Xk5)qo9IOe-0qGbJZigA zBG0+}!Vtb+@UQv7`6hAA4O|PQJDm$Y^Z(q#2W9$l`Ec3q8MQB)*QHpz3kCd4sITwY zrzqev|5uB)T;729@`1gYKGyO+M&H`jZaD}4@d-LC+5(G*xSb76wh(Nyr;MLa|sa z=UjOJJi|ai3o;<0n=+u#uUVI{-I*4*)jhGb=q>%`U`spzLItuV?re<$o?S_PgzQX| zG=)#hJp;lXs5=<`n<9?hb&EW?>lL^MLXOs$5Isp5V*+aL_fJ?6h==7UF1pO2U uq8|dI@9o$%_3!G>=Xwq5%y$*cFR%fnpI05&HMG9~0000 {}; let - myPython = python3.withPackages(p: [p.trezor p.Mako p.munch]); + myPython = python3.withPackages(p: [p.trezor p.Mako p.munch p.pillow]); in stdenv.mkDerivation { name = "trezor-mcu-dev";