| // Copyright 2022 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| library fuchsia.fido.report; |
| |
| using zx; |
| |
| /// The maximum message payload is based on the packet size of 64 bytes for full speed devices. |
| /// See the CTAP specification for the calculation of this value. |
| const MAX_DATA_LENGTH uint64 = 7609; |
| |
| /// CTAPHID commands as defined in the CTAP specification. |
| /// Note that the logical rather than numeric ordering here matches that in the specification. |
| type CtapHidCommand = flexible enum : uint8 { |
| /// Mandatory commands required by a CTAPHID device. |
| MSG = 0x03; |
| CBOR = 0x10; |
| INIT = 0x06; |
| PING = 0x01; |
| CANCEL = 0x11; |
| ERROR = 0x3f; |
| KEEPALIVE = 0x3b; |
| /// Optional commands required by a CTAPHID device. Some devices may not support these. |
| WINK = 0x08; |
| LOCK = 0x04; |
| |
| /// Vendor specific commands may appear in the following range. |
| VENDOR_FIRST = 0x40; |
| VENDOR_LAST = 0x7F; |
| }; |
| |
| /// Fields in Message are a combination of the packet tables in the CTAP specification. |
| type Message = table { |
| 1: channel_id uint32; |
| 2: command_id CtapHidCommand; |
| 3: payload_len uint16; |
| 4: data vector<uint8>:MAX_DATA_LENGTH; |
| }; |
| |
| /// All defined values and fields for this protocol come from the CTAP specification at |
| /// https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#usb-message-and-packet-structure |
| protocol SecurityKeyDevice { |
| /// Send a message (request) to a FIDO key. |
| SendMessage(Message) -> () error zx.status; |
| |
| /// Wait for and receive a message (response) from a FIDO key. |
| /// Returns ZX_ERR_ACCESS_DENIED if `channel_id` does not match the |
| /// channel_id in `response`. |
| GetMessage(struct { |
| channel_id uint32; |
| }) -> (Message) error zx.status; |
| }; |