Home | History | Annotate | Line # | Download | only in src
      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