xref: /netbsd-src/external/bsd/libfido2/dist/man/fido_dev_open.3 (revision 2d40c4512a84c0d064ec30a492c5e2a14d230bc3)
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