1ba9bdd8bSchristos.\" Copyright (c) 2018 Yubico AB. All rights reserved. 2*2d40c451Schristos.\" 3*2d40c451Schristos.\" Redistribution and use in source and binary forms, with or without 4*2d40c451Schristos.\" modification, are permitted provided that the following conditions are 5*2d40c451Schristos.\" met: 6*2d40c451Schristos.\" 7*2d40c451Schristos.\" 1. Redistributions of source code must retain the above copyright 8*2d40c451Schristos.\" notice, this list of conditions and the following disclaimer. 9*2d40c451Schristos.\" 2. Redistributions in binary form must reproduce the above copyright 10*2d40c451Schristos.\" notice, this list of conditions and the following disclaimer in 11*2d40c451Schristos.\" the documentation and/or other materials provided with the 12*2d40c451Schristos.\" distribution. 13*2d40c451Schristos.\" 14*2d40c451Schristos.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 15*2d40c451Schristos.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 16*2d40c451Schristos.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 17*2d40c451Schristos.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 18*2d40c451Schristos.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 19*2d40c451Schristos.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 20*2d40c451Schristos.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21*2d40c451Schristos.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22*2d40c451Schristos.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23*2d40c451Schristos.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24*2d40c451Schristos.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25*2d40c451Schristos.\" 26*2d40c451Schristos.\" SPDX-License-Identifier: BSD-2-Clause 27ba9bdd8bSchristos.\" 28ba9bdd8bSchristos.Dd $Mdocdate: May 25 2018 $ 29ba9bdd8bSchristos.Dt FIDO_DEV_OPEN 3 30ba9bdd8bSchristos.Os 31ba9bdd8bSchristos.Sh NAME 32ba9bdd8bSchristos.Nm fido_dev_open , 33*2d40c451Schristos.Nm fido_dev_open_with_info , 34ba9bdd8bSchristos.Nm fido_dev_close , 35ba9bdd8bSchristos.Nm fido_dev_cancel , 36ba9bdd8bSchristos.Nm fido_dev_new , 37*2d40c451Schristos.Nm fido_dev_new_with_info , 38ba9bdd8bSchristos.Nm fido_dev_free , 39ba9bdd8bSchristos.Nm fido_dev_force_fido2 , 40ba9bdd8bSchristos.Nm fido_dev_force_u2f , 41ba9bdd8bSchristos.Nm fido_dev_is_fido2 , 42ede6d7f8Schristos.Nm fido_dev_is_winhello , 4395dbdf32Schristos.Nm fido_dev_supports_credman , 441fc1e710Schristos.Nm fido_dev_supports_cred_prot , 45*2d40c451Schristos.Nm fido_dev_supports_permissions , 461fc1e710Schristos.Nm fido_dev_supports_pin , 4795dbdf32Schristos.Nm fido_dev_supports_uv , 48*2d40c451Schristos.Nm fido_dev_has_pin , 4995dbdf32Schristos.Nm fido_dev_has_uv , 50ba9bdd8bSchristos.Nm fido_dev_protocol , 51ba9bdd8bSchristos.Nm fido_dev_build , 52ba9bdd8bSchristos.Nm fido_dev_flags , 53ba9bdd8bSchristos.Nm fido_dev_major , 54ba9bdd8bSchristos.Nm fido_dev_minor 55ba9bdd8bSchristos.Nd FIDO2 device open/close and related functions 56ba9bdd8bSchristos.Sh SYNOPSIS 57ba9bdd8bSchristos.In fido.h 58ba9bdd8bSchristos.Ft int 59ba9bdd8bSchristos.Fn fido_dev_open "fido_dev_t *dev" "const char *path" 60ba9bdd8bSchristos.Ft int 61*2d40c451Schristos.Fn fido_dev_open_with_info "fido_dev_t *dev" 62*2d40c451Schristos.Ft int 63ba9bdd8bSchristos.Fn fido_dev_close "fido_dev_t *dev" 64ba9bdd8bSchristos.Ft int 65ba9bdd8bSchristos.Fn fido_dev_cancel "fido_dev_t *dev" 66ba9bdd8bSchristos.Ft fido_dev_t * 67ba9bdd8bSchristos.Fn fido_dev_new "void" 68*2d40c451Schristos.Ft fido_dev_t * 69*2d40c451Schristos.Fn fido_dev_new_with_info "const fido_dev_info_t *" 70ba9bdd8bSchristos.Ft void 71ba9bdd8bSchristos.Fn fido_dev_free "fido_dev_t **dev_p" 72ba9bdd8bSchristos.Ft void 73ba9bdd8bSchristos.Fn fido_dev_force_fido2 "fido_dev_t *dev" 74ba9bdd8bSchristos.Ft void 75ba9bdd8bSchristos.Fn fido_dev_force_u2f "fido_dev_t *dev" 76ba9bdd8bSchristos.Ft bool 77ba9bdd8bSchristos.Fn fido_dev_is_fido2 "const fido_dev_t *dev" 781fc1e710Schristos.Ft bool 79ede6d7f8Schristos.Fn fido_dev_is_winhello "const fido_dev_t *dev" 80ede6d7f8Schristos.Ft bool 8195dbdf32Schristos.Fn fido_dev_supports_credman "const fido_dev_t *dev" 8295dbdf32Schristos.Ft bool 831fc1e710Schristos.Fn fido_dev_supports_cred_prot "const fido_dev_t *dev" 841fc1e710Schristos.Ft bool 85*2d40c451Schristos.Fn fido_dev_supports_permissions "const fido_dev_t *dev" 86*2d40c451Schristos.Ft bool 871fc1e710Schristos.Fn fido_dev_supports_pin "const fido_dev_t *dev" 881fc1e710Schristos.Ft bool 8995dbdf32Schristos.Fn fido_dev_supports_uv "const fido_dev_t *dev" 9095dbdf32Schristos.Ft bool 91*2d40c451Schristos.Fn fido_dev_has_pin "const fido_dev_t *dev" 92*2d40c451Schristos.Ft bool 9395dbdf32Schristos.Fn fido_dev_has_uv "const fido_dev_t *dev" 94ba9bdd8bSchristos.Ft uint8_t 95ba9bdd8bSchristos.Fn fido_dev_protocol "const fido_dev_t *dev" 96ba9bdd8bSchristos.Ft uint8_t 97ba9bdd8bSchristos.Fn fido_dev_build "const fido_dev_t *dev" 98ba9bdd8bSchristos.Ft uint8_t 99ba9bdd8bSchristos.Fn fido_dev_flags "const fido_dev_t *dev" 100ba9bdd8bSchristos.Ft uint8_t 101ba9bdd8bSchristos.Fn fido_dev_major "const fido_dev_t *dev" 102ba9bdd8bSchristos.Ft uint8_t 103ba9bdd8bSchristos.Fn fido_dev_minor "const fido_dev_t *dev" 104ba9bdd8bSchristos.Sh DESCRIPTION 105ba9bdd8bSchristosThe 106ba9bdd8bSchristos.Fn fido_dev_open 107ba9bdd8bSchristosfunction opens the device pointed to by 108ba9bdd8bSchristos.Fa path , 109ba9bdd8bSchristoswhere 110ba9bdd8bSchristos.Fa dev 111ba9bdd8bSchristosis a freshly allocated or otherwise closed 112ba9bdd8bSchristos.Vt fido_dev_t . 11395dbdf32SchristosIf 11495dbdf32Schristos.Fa dev 11595dbdf32Schristosclaims to be FIDO2, 11695dbdf32Schristos.Em libfido2 11795dbdf32Schristoswill attempt to speak FIDO2 to 11895dbdf32Schristos.Fa dev . 11995dbdf32SchristosIf that fails, 12095dbdf32Schristos.Em libfido2 12195dbdf32Schristoswill fallback to U2F unless the 12295dbdf32Schristos.Dv FIDO_DISABLE_U2F_FALLBACK 12395dbdf32Schristosflag was set in 12495dbdf32Schristos.Xr fido_init 3 . 125ba9bdd8bSchristos.Pp 126ba9bdd8bSchristosThe 127*2d40c451Schristos.Fn fido_dev_open_with_info 128*2d40c451Schristosfunction opens 129*2d40c451Schristos.Fa dev 130*2d40c451Schristosas previously allocated using 131*2d40c451Schristos.Fn fido_dev_new_with_info . 132*2d40c451Schristos.Pp 133*2d40c451SchristosThe 134ba9bdd8bSchristos.Fn fido_dev_close 135ba9bdd8bSchristosfunction closes the device represented by 136ba9bdd8bSchristos.Fa dev . 137ba9bdd8bSchristosIf 138ba9bdd8bSchristos.Fa dev 139ba9bdd8bSchristosis already closed, 140ba9bdd8bSchristos.Fn fido_dev_close 141ba9bdd8bSchristosis a NOP. 142ba9bdd8bSchristos.Pp 143ba9bdd8bSchristosThe 144ba9bdd8bSchristos.Fn fido_dev_cancel 145ba9bdd8bSchristosfunction cancels any pending requests on 146ba9bdd8bSchristos.Fa dev . 147ba9bdd8bSchristos.Pp 148ba9bdd8bSchristosThe 149ba9bdd8bSchristos.Fn fido_dev_new 150ba9bdd8bSchristosfunction returns a pointer to a newly allocated, empty 151ba9bdd8bSchristos.Vt fido_dev_t . 152ba9bdd8bSchristosIf memory cannot be allocated, NULL is returned. 153ba9bdd8bSchristos.Pp 154ba9bdd8bSchristosThe 155*2d40c451Schristos.Fn fido_dev_new_with_info 156*2d40c451Schristosfunction returns a pointer to a newly allocated 157*2d40c451Schristos.Vt fido_dev_t 158*2d40c451Schristoswith 159*2d40c451Schristos.Vt fido_dev_info_t 160*2d40c451Schristosparameters, for use with 161*2d40c451Schristos.Xr fido_dev_info_manifest 3 162*2d40c451Schristosand 163*2d40c451Schristos.Fn fido_dev_open_with_info . 164*2d40c451SchristosIf memory cannot be allocated, NULL is returned. 165*2d40c451Schristos.Pp 166*2d40c451SchristosThe 167ba9bdd8bSchristos.Fn fido_dev_free 168ba9bdd8bSchristosfunction releases the memory backing 169ba9bdd8bSchristos.Fa *dev_p , 170ba9bdd8bSchristoswhere 171ba9bdd8bSchristos.Fa *dev_p 172ba9bdd8bSchristosmust have been previously allocated by 173ba9bdd8bSchristos.Fn fido_dev_new . 174ba9bdd8bSchristosOn return, 175ba9bdd8bSchristos.Fa *dev_p 176ba9bdd8bSchristosis set to NULL. 177ba9bdd8bSchristosEither 178ba9bdd8bSchristos.Fa dev_p 179ba9bdd8bSchristosor 180ba9bdd8bSchristos.Fa *dev_p 181ba9bdd8bSchristosmay be NULL, in which case 182ba9bdd8bSchristos.Fn fido_dev_free 183ba9bdd8bSchristosis a NOP. 184ba9bdd8bSchristos.Pp 185ba9bdd8bSchristosThe 186ba9bdd8bSchristos.Fn fido_dev_force_fido2 187ba9bdd8bSchristosfunction can be used to force CTAP2 communication with 188*2d40c451Schristos.Fa dev , 189*2d40c451Schristoswhere 190*2d40c451Schristos.Fa dev 191*2d40c451Schristosis an open device. 192ba9bdd8bSchristos.Pp 193ba9bdd8bSchristosThe 194ba9bdd8bSchristos.Fn fido_dev_force_u2f 195ba9bdd8bSchristosfunction can be used to force CTAP1 (U2F) communication with 196*2d40c451Schristos.Fa dev , 197*2d40c451Schristoswhere 198*2d40c451Schristos.Fa dev 199*2d40c451Schristosis an open device. 200ba9bdd8bSchristos.Pp 201ba9bdd8bSchristosThe 202ba9bdd8bSchristos.Fn fido_dev_is_fido2 203ba9bdd8bSchristosfunction returns 204ba9bdd8bSchristos.Dv true 205ba9bdd8bSchristosif 206ba9bdd8bSchristos.Fa dev 207ba9bdd8bSchristosis a FIDO2 device. 208ba9bdd8bSchristos.Pp 209ba9bdd8bSchristosThe 210ede6d7f8Schristos.Fn fido_dev_is_winhello 211ede6d7f8Schristosfunction returns 212ede6d7f8Schristos.Dv true 213ede6d7f8Schristosif 214ede6d7f8Schristos.Fa dev 215ede6d7f8Schristosis a Windows Hello device. 216ede6d7f8Schristos.Pp 217ede6d7f8SchristosThe 21895dbdf32Schristos.Fn fido_dev_supports_credman 21995dbdf32Schristosfunction returns 22095dbdf32Schristos.Dv true 22195dbdf32Schristosif 22295dbdf32Schristos.Fa dev 223*2d40c451Schristossupports CTAP 2.1 Credential Management. 22495dbdf32Schristos.Pp 22595dbdf32SchristosThe 2261fc1e710Schristos.Fn fido_dev_supports_cred_prot 2271fc1e710Schristosfunction returns 2281fc1e710Schristos.Dv true 2291fc1e710Schristosif 2301fc1e710Schristos.Fa dev 231*2d40c451Schristossupports CTAP 2.1 Credential Protection. 232*2d40c451Schristos.Pp 233*2d40c451SchristosThe 234*2d40c451Schristos.Fn fido_dev_supports_permissions 235*2d40c451Schristosfunction returns 236*2d40c451Schristos.Dv true 237*2d40c451Schristosif 238*2d40c451Schristos.Fa dev 239*2d40c451Schristossupports CTAP 2.1 UV token permissions. 2401fc1e710Schristos.Pp 2411fc1e710SchristosThe 2421fc1e710Schristos.Fn fido_dev_supports_pin 2431fc1e710Schristosfunction returns 2441fc1e710Schristos.Dv true 2451fc1e710Schristosif 2461fc1e710Schristos.Fa dev 247*2d40c451Schristossupports CTAP 2.0 Client PINs. 2481fc1e710Schristos.Pp 2491fc1e710SchristosThe 25095dbdf32Schristos.Fn fido_dev_supports_uv 25195dbdf32Schristosfunction returns 25295dbdf32Schristos.Dv true 25395dbdf32Schristosif 25495dbdf32Schristos.Fa dev 25595dbdf32Schristossupports a built-in user verification method. 25695dbdf32Schristos.Pp 25795dbdf32SchristosThe 258*2d40c451Schristos.Fn fido_dev_has_pin 259*2d40c451Schristosfunction returns 260*2d40c451Schristos.Dv true 261*2d40c451Schristosif 262*2d40c451Schristos.Fa dev 263*2d40c451Schristoshas a CTAP 2.0 Client PIN set. 264*2d40c451Schristos.Pp 265*2d40c451SchristosThe 26695dbdf32Schristos.Fn fido_dev_has_uv 26795dbdf32Schristosfunction returns 26895dbdf32Schristos.Dv true 26995dbdf32Schristosif 27095dbdf32Schristos.Fa dev 27195dbdf32Schristossupports built-in user verification and its user verification 27295dbdf32Schristosfeature is configured. 27395dbdf32Schristos.Pp 27495dbdf32SchristosThe 275ba9bdd8bSchristos.Fn fido_dev_protocol 276ba9bdd8bSchristosfunction returns the CTAPHID protocol version identifier of 277ba9bdd8bSchristos.Fa dev . 278ba9bdd8bSchristos.Pp 279ba9bdd8bSchristosThe 280ba9bdd8bSchristos.Fn fido_dev_build 281ba9bdd8bSchristosfunction returns the CTAPHID build version number of 282ba9bdd8bSchristos.Fa dev . 283ba9bdd8bSchristos.Pp 284ba9bdd8bSchristosThe 285ba9bdd8bSchristos.Fn fido_dev_flags 286ba9bdd8bSchristosfunction returns the CTAPHID capabilities flags of 287ba9bdd8bSchristos.Fa dev . 288ba9bdd8bSchristos.Pp 289ba9bdd8bSchristosThe 290ba9bdd8bSchristos.Fn fido_dev_major 291ba9bdd8bSchristosfunction returns the CTAPHID major version number of 292ba9bdd8bSchristos.Fa dev . 293ba9bdd8bSchristos.Pp 294ba9bdd8bSchristosThe 295ba9bdd8bSchristos.Fn fido_dev_minor 296ba9bdd8bSchristosfunction returns the CTAPHID minor version number of 297ba9bdd8bSchristos.Fa dev . 298ba9bdd8bSchristos.Pp 299ba9bdd8bSchristosFor the format and meaning of the CTAPHID parameters returned by 300ba9bdd8bSchristosfunctions above, please refer to the FIDO Client to Authenticator 301ba9bdd8bSchristosProtocol (CTAP) specification. 302ba9bdd8bSchristos.Sh RETURN VALUES 303ba9bdd8bSchristosOn success, 304*2d40c451Schristos.Fn fido_dev_open , 305*2d40c451Schristos.Fn fido_dev_open_with_info , 306ba9bdd8bSchristosand 307ba9bdd8bSchristos.Fn fido_dev_close 308ba9bdd8bSchristosreturn 309ba9bdd8bSchristos.Dv FIDO_OK . 310ba9bdd8bSchristosOn error, a different error code defined in 311ba9bdd8bSchristos.In fido/err.h 312ba9bdd8bSchristosis returned. 313ba9bdd8bSchristos.Sh SEE ALSO 314ba9bdd8bSchristos.Xr fido_dev_info_manifest 3 , 31595dbdf32Schristos.Xr fido_dev_set_io_functions 3 , 31695dbdf32Schristos.Xr fido_init 3 317