summaryrefslogtreecommitdiff
path: root/src/info.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/info.c')
-rw-r--r--src/info.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/info.c b/src/info.c
index e896503..8e256fa 100644
--- a/src/info.c
+++ b/src/info.c
@@ -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)
226static int 228static int
227fido_dev_get_cbor_info_tx(fido_dev_t *dev) 229fido_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)
242static int 243static int
243fido_dev_get_cbor_info_rx(fido_dev_t *dev, fido_cbor_info_t *ci, int ms) 244fido_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
263static int 264int
264fido_dev_get_cbor_info_wait(fido_dev_t *dev, fido_cbor_info_t *ci, int ms) 265fido_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
401uint64_t
402fido_cbor_info_fwversion(const fido_cbor_info_t *ci)
403{
404 return (ci->fwversion);
405}
406
400const uint8_t * 407const uint8_t *
401fido_cbor_info_protocols_ptr(const fido_cbor_info_t *ci) 408fido_cbor_info_protocols_ptr(const fido_cbor_info_t *ci)
402{ 409{