1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-26 17:38:39 +00:00

Added support for known appid.

This commit is contained in:
Jochen Hoenicke 2016-04-27 12:54:49 +02:00
parent b3bfc64d2f
commit 5c13e78deb
2 changed files with 81 additions and 24 deletions

View File

@ -32,10 +32,12 @@
#include "nist256p1.h"
#include "rng.h"
#include "hmac.h"
#include "util.h"
#include "u2f/u2f.h"
#include "u2f/u2f_hid.h"
#include "u2f/u2f_keys.h"
#include "u2f_knownapps.h"
#include "u2f.h"
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
@ -96,31 +98,12 @@ uint8_t buttonState(void)
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)
{
static uint8_t n = 0;
static uint8_t id[8][9];
int2hex(id[n], i);
debugLog(0, "", (const char *)id[n]);
static char id[8][9];
uint32hex(i, id[n]);
debugLog(0, "", id[n]);
char *ret = (char *)id[n];
n = (n + 1) % 8;
return ret;
@ -426,6 +409,21 @@ void u2f_version(const APDU *a)
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)
{
static HDNode node;
@ -529,7 +527,8 @@ void u2f_register(const APDU *a)
send_u2f_error(U2F_SW_CONDITIONS_NOT_SATISFIED);
buttonUpdate(); // Clear button state
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;
last_req_state = REG;
return;
@ -661,7 +660,8 @@ void u2f_authenticate(const APDU *a)
send_u2f_error(U2F_SW_CONDITIONS_NOT_SATISFIED);
buttonUpdate(); // Clear button state
layoutDialog(DIALOG_ICON_QUESTION, "Cancel", "Authenticate", NULL,
"Authenticate U2F", "security key", "", "", "", NULL);
"Authenticate U2F", "security key",
"", getReadableAppId(req->appId), "", NULL);
dialog_timeout = U2F_TIMEOUT;
last_req_state = AUTH;
return;

57
firmware/u2f_knownapps.h Normal file
View 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