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 } 47