mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-18 12:38:37 +00:00
Added support for known appid.
This commit is contained in:
parent
b3bfc64d2f
commit
5c13e78deb
@ -32,10 +32,12 @@
|
|||||||
#include "nist256p1.h"
|
#include "nist256p1.h"
|
||||||
#include "rng.h"
|
#include "rng.h"
|
||||||
#include "hmac.h"
|
#include "hmac.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
#include "u2f/u2f.h"
|
#include "u2f/u2f.h"
|
||||||
#include "u2f/u2f_hid.h"
|
#include "u2f/u2f_hid.h"
|
||||||
#include "u2f/u2f_keys.h"
|
#include "u2f/u2f_keys.h"
|
||||||
|
#include "u2f_knownapps.h"
|
||||||
#include "u2f.h"
|
#include "u2f.h"
|
||||||
|
|
||||||
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
|
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
|
||||||
@ -96,31 +98,12 @@ uint8_t buttonState(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void int2hex(uint8_t *dst, const uint32_t i)
|
|
||||||
{
|
|
||||||
dst[0] = '0' + ((i >> 28) & 0x0F);
|
|
||||||
dst[1] = '0' + ((i >> 24) & 0x0F);
|
|
||||||
dst[2] = '0' + ((i >> 20) & 0x0F);
|
|
||||||
dst[3] = '0' + ((i >> 16) & 0x0F);
|
|
||||||
dst[4] = '0' + ((i >> 12) & 0x0F);
|
|
||||||
dst[5] = '0' + ((i >> 8) & 0x0F);
|
|
||||||
dst[6] = '0' + ((i >> 4) & 0x0F);
|
|
||||||
dst[7] = '0' + (i & 0x0F);
|
|
||||||
dst[8] = '\0';
|
|
||||||
|
|
||||||
int t = 0;
|
|
||||||
for (; t < 8; t++) {
|
|
||||||
if (dst[t] > '9')
|
|
||||||
dst[t] += 7; // 'A'-'9'+1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
char *debugInt(const uint32_t i)
|
char *debugInt(const uint32_t i)
|
||||||
{
|
{
|
||||||
static uint8_t n = 0;
|
static uint8_t n = 0;
|
||||||
static uint8_t id[8][9];
|
static char id[8][9];
|
||||||
int2hex(id[n], i);
|
uint32hex(i, id[n]);
|
||||||
debugLog(0, "", (const char *)id[n]);
|
debugLog(0, "", id[n]);
|
||||||
char *ret = (char *)id[n];
|
char *ret = (char *)id[n];
|
||||||
n = (n + 1) % 8;
|
n = (n + 1) % 8;
|
||||||
return ret;
|
return ret;
|
||||||
@ -426,6 +409,21 @@ void u2f_version(const APDU *a)
|
|||||||
send_u2f_msg(version_response, sizeof(version_response));
|
send_u2f_msg(version_response, sizeof(version_response));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *getReadableAppId(const uint8_t appid[32]) {
|
||||||
|
unsigned int i;
|
||||||
|
static char buf[6+2+6+1];
|
||||||
|
|
||||||
|
for (i = 0; i < sizeof(u2f_well_known)/sizeof(U2FWellKnown); i++) {
|
||||||
|
if (memcmp(appid, u2f_well_known[i].appid, 32) == 0)
|
||||||
|
return u2f_well_known[i].appname;
|
||||||
|
}
|
||||||
|
|
||||||
|
data2hex(appid, 3, &buf[0]);
|
||||||
|
buf[6] = buf[7] = '.';
|
||||||
|
data2hex(appid+(sizeof(appid)-3), 3, &buf[8]);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
const HDNode *getDerivedNode(uint32_t *address_n, size_t address_n_count)
|
const HDNode *getDerivedNode(uint32_t *address_n, size_t address_n_count)
|
||||||
{
|
{
|
||||||
static HDNode node;
|
static HDNode node;
|
||||||
@ -529,7 +527,8 @@ void u2f_register(const APDU *a)
|
|||||||
send_u2f_error(U2F_SW_CONDITIONS_NOT_SATISFIED);
|
send_u2f_error(U2F_SW_CONDITIONS_NOT_SATISFIED);
|
||||||
buttonUpdate(); // Clear button state
|
buttonUpdate(); // Clear button state
|
||||||
layoutDialog(DIALOG_ICON_QUESTION, "Cancel", "Register",
|
layoutDialog(DIALOG_ICON_QUESTION, "Cancel", "Register",
|
||||||
NULL, "Register U2F", "security key", "", "", "", NULL);
|
NULL, "Register U2F", "security key",
|
||||||
|
"", getReadableAppId(req->appId), "", NULL);
|
||||||
dialog_timeout = U2F_TIMEOUT;
|
dialog_timeout = U2F_TIMEOUT;
|
||||||
last_req_state = REG;
|
last_req_state = REG;
|
||||||
return;
|
return;
|
||||||
@ -661,7 +660,8 @@ void u2f_authenticate(const APDU *a)
|
|||||||
send_u2f_error(U2F_SW_CONDITIONS_NOT_SATISFIED);
|
send_u2f_error(U2F_SW_CONDITIONS_NOT_SATISFIED);
|
||||||
buttonUpdate(); // Clear button state
|
buttonUpdate(); // Clear button state
|
||||||
layoutDialog(DIALOG_ICON_QUESTION, "Cancel", "Authenticate", NULL,
|
layoutDialog(DIALOG_ICON_QUESTION, "Cancel", "Authenticate", NULL,
|
||||||
"Authenticate U2F", "security key", "", "", "", NULL);
|
"Authenticate U2F", "security key",
|
||||||
|
"", getReadableAppId(req->appId), "", NULL);
|
||||||
dialog_timeout = U2F_TIMEOUT;
|
dialog_timeout = U2F_TIMEOUT;
|
||||||
last_req_state = AUTH;
|
last_req_state = AUTH;
|
||||||
return;
|
return;
|
||||||
|
57
firmware/u2f_knownapps.h
Normal file
57
firmware/u2f_knownapps.h
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the TREZOR project.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2016 Jochen Hoenicke <hoenicke@gmail.com>
|
||||||
|
*
|
||||||
|
* This library is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __U2F_KNOWNAPPS_H_INCLUDED__
|
||||||
|
#define __U2F_KNOWNAPPS_H_INCLUDED__
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t appid[32];
|
||||||
|
const char *appname;
|
||||||
|
} U2FWellKnown;
|
||||||
|
|
||||||
|
static const U2FWellKnown u2f_well_known[3] = {
|
||||||
|
{
|
||||||
|
// didn't feel like tracing that one yet
|
||||||
|
{ 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"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// 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"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// 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"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // U2F_KNOWNAPPS_INCLUDED
|
Loading…
Reference in New Issue
Block a user