1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-28 00:58:09 +00:00

apps.fido_u2f: simulate button press after 2 secs

This commit is contained in:
Jan Pochyla 2017-05-29 17:49:11 +02:00
parent 1a98400ff8
commit 89e18c4d52

View File

@ -1,5 +1,6 @@
import uctypes import uctypes
import ustruct import ustruct
import utime
from trezor import log from trezor import log
from trezor import loop from trezor import loop
@ -320,7 +321,8 @@ def cmd_init(req: Cmd) -> Cmd:
if req.cid == 0: if req.cid == 0:
return cmd_error(req.cid, _ERR_INVALID_CID) return cmd_error(req.cid, _ERR_INVALID_CID)
elif req.cid == _CID_BROADCAST: elif req.cid == _CID_BROADCAST:
resp_cid = random.uniform(0xfffffffe) + 1 # uint32_t except 0 and 0xffffffff # uint32_t except 0 and 0xffffffff
resp_cid = random.uniform(0xfffffffe) + 1
else: else:
resp_cid = req.cid resp_cid = req.cid
@ -336,22 +338,35 @@ def cmd_init(req: Cmd) -> Cmd:
return Cmd(req.cid, req.cmd, buf) return Cmd(req.cid, req.cmd, buf)
_register_state = 0
async def msg_register(req: Msg) -> Cmd: async def msg_register(req: Msg) -> Cmd:
global _register_state
if len(req.data) != 64: if len(req.data) != 64:
return msg_error(req, _SW_WRONG_LENGTH) return msg_error(req, _SW_WRONG_LENGTH)
chal = req.data[:32]
app_id = req.data[32:]
from apps.common import storage from apps.common import storage
if not storage.is_initialized(): if not storage.is_initialized():
return msg_error(req, _SW_CONDITIONS_NOT_SATISFIED) return msg_error(req, _SW_CONDITIONS_NOT_SATISFIED)
chal = req.data[:32] if _register_state == 0:
app_id = req.data[32:] _register_state = utime.ticks_ms()
buf = msg_register_sign(chal, app_id) if utime.ticks_ms() - _register_state < 2000:
return msg_error(req, _SW_CONDITIONS_NOT_SATISFIED)
_register_state = 0
buf = msg_register_sign(chal, app_id, _U2F_ATT_CERT)
return Cmd(req.cid, _CMD_MSG, buf) return Cmd(req.cid, _CMD_MSG, buf)
def msg_register_sign(challenge: bytes, app_id: bytes) -> bytes: def msg_register_sign(challenge: bytes, app_id: bytes, cert: bytes) -> bytes:
from apps.common import seed from apps.common import seed
@ -391,7 +406,7 @@ def msg_register_sign(challenge: bytes, app_id: bytes) -> bytes:
resp.registerId = _U2F_REGISTER_ID resp.registerId = _U2F_REGISTER_ID
resp.status = _SW_NO_ERROR resp.status = _SW_NO_ERROR
resp.keyHandleLen = len(keybuf) + len(keybase) resp.keyHandleLen = len(keybuf) + len(keybase)
utils.memcpy(resp.cert, 0, _U2F_ATT_CERT, 0, len(_U2F_ATT_CERT)) utils.memcpy(resp.cert, 0, cert, 0, len(cert))
utils.memcpy(resp.pubKey, 0, pubkey, 0, len(pubkey)) utils.memcpy(resp.pubKey, 0, pubkey, 0, len(pubkey))
utils.memcpy(resp.keyHandle, 0, keybuf, 0, len(keybuf)) utils.memcpy(resp.keyHandle, 0, keybuf, 0, len(keybuf))
utils.memcpy(resp.keyHandle, len(keybuf), keybase, 0, len(keybase)) utils.memcpy(resp.keyHandle, len(keybuf), keybase, 0, len(keybase))