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:
parent
1a98400ff8
commit
89e18c4d52
@ -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))
|
||||||
|
Loading…
Reference in New Issue
Block a user