diff options
Diffstat (limited to 'src/info.c')
-rw-r--r-- | src/info.c | 21 |
1 files changed, 14 insertions, 7 deletions
@@ -217,6 +217,8 @@ parse_reply_element(const cbor_item_t *key, const cbor_item_t *val, void *arg) | |||
217 | return (cbor_decode_uint64(val, &ci->maxmsgsiz)); | 217 | return (cbor_decode_uint64(val, &ci->maxmsgsiz)); |
218 | case 6: /* pinProtocols */ | 218 | case 6: /* pinProtocols */ |
219 | return (decode_protocols(val, &ci->protocols)); | 219 | return (decode_protocols(val, &ci->protocols)); |
220 | case 14: /* fwVersion */ | ||
221 | return (cbor_decode_uint64(val, &ci->fwversion)); | ||
220 | default: /* ignore */ | 222 | default: /* ignore */ |
221 | fido_log_debug("%s: cbor type", __func__); | 223 | fido_log_debug("%s: cbor type", __func__); |
222 | return (0); | 224 | return (0); |
@@ -226,12 +228,11 @@ parse_reply_element(const cbor_item_t *key, const cbor_item_t *val, void *arg) | |||
226 | static int | 228 | static int |
227 | fido_dev_get_cbor_info_tx(fido_dev_t *dev) | 229 | fido_dev_get_cbor_info_tx(fido_dev_t *dev) |
228 | { | 230 | { |
229 | const unsigned char cbor[] = { CTAP_CBOR_GETINFO }; | 231 | const unsigned char cbor[] = { CTAP_CBOR_GETINFO }; |
230 | const uint8_t cmd = CTAP_FRAME_INIT | CTAP_CMD_CBOR; | ||
231 | 232 | ||
232 | fido_log_debug("%s: dev=%p", __func__, (void *)dev); | 233 | fido_log_debug("%s: dev=%p", __func__, (void *)dev); |
233 | 234 | ||
234 | if (fido_tx(dev, cmd, cbor, sizeof(cbor)) < 0) { | 235 | if (fido_tx(dev, CTAP_CMD_CBOR, cbor, sizeof(cbor)) < 0) { |
235 | fido_log_debug("%s: fido_tx", __func__); | 236 | fido_log_debug("%s: fido_tx", __func__); |
236 | return (FIDO_ERR_TX); | 237 | return (FIDO_ERR_TX); |
237 | } | 238 | } |
@@ -242,8 +243,7 @@ fido_dev_get_cbor_info_tx(fido_dev_t *dev) | |||
242 | static int | 243 | static int |
243 | fido_dev_get_cbor_info_rx(fido_dev_t *dev, fido_cbor_info_t *ci, int ms) | 244 | fido_dev_get_cbor_info_rx(fido_dev_t *dev, fido_cbor_info_t *ci, int ms) |
244 | { | 245 | { |
245 | const uint8_t cmd = CTAP_FRAME_INIT | CTAP_CMD_CBOR; | 246 | unsigned char reply[FIDO_MAXMSG]; |
246 | unsigned char reply[512]; | ||
247 | int reply_len; | 247 | int reply_len; |
248 | 248 | ||
249 | fido_log_debug("%s: dev=%p, ci=%p, ms=%d", __func__, (void *)dev, | 249 | fido_log_debug("%s: dev=%p, ci=%p, ms=%d", __func__, (void *)dev, |
@@ -251,7 +251,8 @@ fido_dev_get_cbor_info_rx(fido_dev_t *dev, fido_cbor_info_t *ci, int ms) | |||
251 | 251 | ||
252 | memset(ci, 0, sizeof(*ci)); | 252 | memset(ci, 0, sizeof(*ci)); |
253 | 253 | ||
254 | if ((reply_len = fido_rx(dev, cmd, &reply, sizeof(reply), ms)) < 0) { | 254 | if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), |
255 | ms)) < 0) { | ||
255 | fido_log_debug("%s: fido_rx", __func__); | 256 | fido_log_debug("%s: fido_rx", __func__); |
256 | return (FIDO_ERR_RX); | 257 | return (FIDO_ERR_RX); |
257 | } | 258 | } |
@@ -260,7 +261,7 @@ fido_dev_get_cbor_info_rx(fido_dev_t *dev, fido_cbor_info_t *ci, int ms) | |||
260 | parse_reply_element)); | 261 | parse_reply_element)); |
261 | } | 262 | } |
262 | 263 | ||
263 | static int | 264 | int |
264 | fido_dev_get_cbor_info_wait(fido_dev_t *dev, fido_cbor_info_t *ci, int ms) | 265 | fido_dev_get_cbor_info_wait(fido_dev_t *dev, fido_cbor_info_t *ci, int ms) |
265 | { | 266 | { |
266 | int r; | 267 | int r; |
@@ -397,6 +398,12 @@ fido_cbor_info_maxmsgsiz(const fido_cbor_info_t *ci) | |||
397 | return (ci->maxmsgsiz); | 398 | return (ci->maxmsgsiz); |
398 | } | 399 | } |
399 | 400 | ||
401 | uint64_t | ||
402 | fido_cbor_info_fwversion(const fido_cbor_info_t *ci) | ||
403 | { | ||
404 | return (ci->fwversion); | ||
405 | } | ||
406 | |||
400 | const uint8_t * | 407 | const uint8_t * |
401 | fido_cbor_info_protocols_ptr(const fido_cbor_info_t *ci) | 408 | fido_cbor_info_protocols_ptr(const fido_cbor_info_t *ci) |
402 | { | 409 | { |