Lines Matching refs:dev

18 set_random_report_len(fido_dev_t *dev)
20 dev->rx_len = CTAP_MIN_REPORT_LEN +
22 dev->tx_len = CTAP_MIN_REPORT_LEN +
28 fido_dev_set_extension_flags(fido_dev_t *dev, const fido_cbor_info_t *info)
35 dev->flags |= FIDO_DEV_CRED_PROT;
39 fido_dev_set_option_flags(fido_dev_t *dev, const fido_cbor_info_t *info)
47 dev->flags |= val[i] ?
52 dev->flags |= FIDO_DEV_CREDMAN;
54 dev->flags |= val[i] ?
58 dev->flags |= FIDO_DEV_TOKEN_PERMS;
63 fido_dev_set_protocol_flags(fido_dev_t *dev, const fido_cbor_info_t *info)
71 dev->flags |= FIDO_DEV_PIN_PROTOCOL1;
74 dev->flags |= FIDO_DEV_PIN_PROTOCOL2;
84 fido_dev_set_flags(fido_dev_t *dev, const fido_cbor_info_t *info)
86 fido_dev_set_extension_flags(dev, info);
87 fido_dev_set_option_flags(dev, info);
88 fido_dev_set_protocol_flags(dev, info);
92 fido_dev_open_tx(fido_dev_t *dev, const char *path, int *ms)
96 if (dev->io_handle != NULL) {
97 fido_log_debug("%s: handle=%p", __func__, dev->io_handle);
101 if (dev->io.open == NULL || dev->io.close == NULL) {
106 if (dev->cid != CTAP_CID_BROADCAST) {
107 fido_log_debug("%s: cid=0x%x", __func__, dev->cid);
111 if (fido_get_random(&dev->nonce, sizeof(dev->nonce)) < 0) {
116 if ((dev->io_handle = dev->io.open(path)) == NULL) {
117 fido_log_debug("%s: dev->io.open", __func__);
121 if (dev->io_own) {
122 dev->rx_len = CTAP_MAX_REPORT_LEN;
123 dev->tx_len = CTAP_MAX_REPORT_LEN;
125 dev->rx_len = fido_hid_report_in_len(dev->io_handle);
126 dev->tx_len = fido_hid_report_out_len(dev->io_handle);
130 set_random_report_len(dev);
133 if (dev->rx_len < CTAP_MIN_REPORT_LEN ||
134 dev->rx_len > CTAP_MAX_REPORT_LEN) {
135 fido_log_debug("%s: invalid rx_len %zu", __func__, dev->rx_len);
140 if (dev->tx_len < CTAP_MIN_REPORT_LEN ||
141 dev->tx_len > CTAP_MAX_REPORT_LEN) {
142 fido_log_debug("%s: invalid tx_len %zu", __func__, dev->tx_len);
147 if (fido_tx(dev, CTAP_CMD_INIT, &dev->nonce, sizeof(dev->nonce),
156 dev->io.close(dev->io_handle);
157 dev->io_handle = NULL;
163 fido_dev_open_rx(fido_dev_t *dev, int *ms)
169 if ((reply_len = fido_rx(dev, CTAP_CMD_INIT, &dev->attr,
170 sizeof(dev->attr), ms)) < 0) {
177 dev->attr.nonce = dev->nonce;
180 if ((size_t)reply_len != sizeof(dev->attr) ||
181 dev->attr.nonce != dev->nonce) {
187 dev->flags = 0;
188 dev->cid = dev->attr.cid;
190 if (fido_dev_is_fido2(dev)) {
196 if ((r = fido_dev_get_cbor_info_wait(dev, info,
203 fido_dev_force_u2f(dev);
205 fido_dev_set_flags(dev, info);
209 if (fido_dev_is_fido2(dev) && info != NULL) {
210 dev->maxmsgsize = fido_cbor_info_maxmsgsiz(info);
212 FIDO_MAXMSG, (unsigned long)dev->maxmsgsize);
220 dev->io.close(dev->io_handle);
221 dev->io_handle = NULL;
228 fido_dev_open_wait(fido_dev_t *dev, const char *path, int *ms)
234 return (fido_winhello_open(dev));
236 if ((r = fido_dev_open_tx(dev, path, ms)) != FIDO_OK ||
237 (r = fido_dev_open_rx(dev, ms)) != FIDO_OK)
281 fido_dev_open_with_info(fido_dev_t *dev)
283 int ms = dev->timeout_ms;
285 if (dev->path == NULL)
288 return (fido_dev_open_wait(dev, dev->path, &ms));
292 fido_dev_open(fido_dev_t *dev, const char *path)
294 int ms = dev->timeout_ms;
297 if (fido_is_nfc(path) && fido_dev_set_nfc(dev) < 0) {
303 if (fido_is_pcsc(path) && fido_dev_set_pcsc(dev) < 0) {
309 return (fido_dev_open_wait(dev, path, &ms));
313 fido_dev_close(fido_dev_t *dev)
316 if (dev->flags & FIDO_DEV_WINHELLO)
317 return (fido_winhello_close(dev));
319 if (dev->io_handle == NULL || dev->io.close == NULL)
322 dev->io.close(dev->io_handle);
323 dev->io_handle = NULL;
324 dev->cid = CTAP_CID_BROADCAST;
330 fido_dev_set_sigmask(fido_dev_t *dev, const fido_sigset_t *sigmask)
332 if (dev->io_handle == NULL || sigmask == NULL)
336 if (dev->transport.rx == fido_nfc_rx && dev->io.read == fido_nfc_read)
337 return (fido_nfc_set_sigmask(dev->io_handle, sigmask));
339 if (dev->transport.rx == NULL && dev->io.read == fido_hid_read)
340 return (fido_hid_set_sigmask(dev->io_handle, sigmask));
346 fido_dev_cancel(fido_dev_t *dev)
348 int ms = dev->timeout_ms;
351 if (dev->flags & FIDO_DEV_WINHELLO)
352 return (fido_winhello_cancel(dev));
354 if (fido_dev_is_fido2(dev) == false)
356 if (fido_tx(dev, CTAP_CMD_CANCEL, NULL, 0, &ms) < 0)
363 fido_dev_set_io_functions(fido_dev_t *dev, const fido_dev_io_t *io)
365 if (dev->io_handle != NULL) {
376 dev->io = *io;
377 dev->io_own = true;
383 fido_dev_set_transport_functions(fido_dev_t *dev, const fido_dev_transport_t *t)
385 if (dev->io_handle != NULL) {
390 dev->transport = *t;
391 dev->io_own = true;
397 fido_dev_io_handle(const fido_dev_t *dev)
400 return (dev->io_handle);
415 fido_dev_t *dev;
417 if ((dev = calloc(1, sizeof(*dev))) == NULL)
420 dev->cid = CTAP_CID_BROADCAST;
421 dev->timeout_ms = -1;
422 dev->io = (fido_dev_io_t) {
429 return (dev);
435 fido_dev_t *dev;
437 if ((dev = calloc(1, sizeof(*dev))) == NULL)
444 fido_dev_free(&dev);
449 dev->io = di->io;
450 dev->io_own = di->transport.tx != NULL || di->transport.rx != NULL;
451 dev->transport = di->transport;
452 dev->cid = CTAP_CID_BROADCAST;
453 dev->timeout_ms = -1;
455 if ((dev->path = strdup(di->path)) == NULL) {
457 fido_dev_free(&dev);
461 return (dev);
467 fido_dev_t *dev;
469 if (dev_p == NULL || (dev = *dev_p) == NULL)
472 free(dev->path);
473 free(dev);
479 fido_dev_protocol(const fido_dev_t *dev)
481 return (dev->attr.protocol);
485 fido_dev_major(const fido_dev_t *dev)
487 return (dev->attr.major);
491 fido_dev_minor(const fido_dev_t *dev)
493 return (dev->attr.minor);
497 fido_dev_build(const fido_dev_t *dev)
499 return (dev->attr.build);
503 fido_dev_flags(const fido_dev_t *dev)
505 return (dev->attr.flags);
509 fido_dev_is_fido2(const fido_dev_t *dev)
511 return (dev->attr.flags & FIDO_CAP_CBOR);
515 fido_dev_is_winhello(const fido_dev_t *dev)
517 return (dev->flags & FIDO_DEV_WINHELLO);
521 fido_dev_supports_pin(const fido_dev_t *dev)
523 return (dev->flags & (FIDO_DEV_PIN_SET|FIDO_DEV_PIN_UNSET));
527 fido_dev_has_pin(const fido_dev_t *dev)
529 return (dev->flags & FIDO_DEV_PIN_SET);
533 fido_dev_supports_cred_prot(const fido_dev_t *dev)
535 return (dev->flags & FIDO_DEV_CRED_PROT);
539 fido_dev_supports_credman(const fido_dev_t *dev)
541 return (dev->flags & FIDO_DEV_CREDMAN);
545 fido_dev_supports_uv(const fido_dev_t *dev)
547 return (dev->flags & (FIDO_DEV_UV_SET|FIDO_DEV_UV_UNSET));
551 fido_dev_has_uv(const fido_dev_t *dev)
553 return (dev->flags & FIDO_DEV_UV_SET);
557 fido_dev_supports_permissions(const fido_dev_t *dev)
559 return (dev->flags & FIDO_DEV_TOKEN_PERMS);
563 fido_dev_force_u2f(fido_dev_t *dev)
565 dev->attr.flags &= (uint8_t)~FIDO_CAP_CBOR;
566 dev->flags = 0;
570 fido_dev_force_fido2(fido_dev_t *dev)
572 dev->attr.flags |= FIDO_CAP_CBOR;
576 fido_dev_get_pin_protocol(const fido_dev_t *dev)
578 if (dev->flags & FIDO_DEV_PIN_PROTOCOL2)
580 else if (dev->flags & FIDO_DEV_PIN_PROTOCOL1)
587 fido_dev_maxmsgsize(const fido_dev_t *dev)
589 return (dev->maxmsgsize);
593 fido_dev_set_timeout(fido_dev_t *dev, int ms)
598 dev->timeout_ms = ms;