]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/libfido2/src/reset.c
zfs: merge openzfs/zfs@f795e90a1
[FreeBSD/FreeBSD.git] / contrib / libfido2 / src / reset.c
1 /*
2  * Copyright (c) 2018 Yubico AB. All rights reserved.
3  * Use of this source code is governed by a BSD-style
4  * license that can be found in the LICENSE file.
5  * SPDX-License-Identifier: BSD-2-Clause
6  */
7
8 #include "fido.h"
9
10 static int
11 fido_dev_reset_tx(fido_dev_t *dev, int *ms)
12 {
13         const unsigned char cbor[] = { CTAP_CBOR_RESET };
14
15         if (fido_tx(dev, CTAP_CMD_CBOR, cbor, sizeof(cbor), ms) < 0) {
16                 fido_log_debug("%s: fido_tx", __func__);
17                 return (FIDO_ERR_TX);
18         }
19
20         return (FIDO_OK);
21 }
22
23 static int
24 fido_dev_reset_wait(fido_dev_t *dev, int *ms)
25 {
26         int r;
27
28         if ((r = fido_dev_reset_tx(dev, ms)) != FIDO_OK ||
29             (r = fido_rx_cbor_status(dev, ms)) != FIDO_OK)
30                 return (r);
31
32         if (dev->flags & FIDO_DEV_PIN_SET) {
33                 dev->flags &= ~FIDO_DEV_PIN_SET;
34                 dev->flags |= FIDO_DEV_PIN_UNSET;
35         }
36
37         return (FIDO_OK);
38 }
39
40 int
41 fido_dev_reset(fido_dev_t *dev)
42 {
43         int ms = dev->timeout_ms;
44
45         return (fido_dev_reset_wait(dev, &ms));
46 }