1.\" Copyright (c) 2018 Yubico AB. All rights reserved.
2.\" Use of this source code is governed by a BSD-style
3.\" license that can be found in the LICENSE file.
4.\"
5.Dd $Mdocdate: May 23 2018 $
6.Dt FIDO_ASSERT_SET_AUTHDATA 3
7.Os
8.Sh NAME
9.Nm fido_assert_set_authdata ,
10.Nm fido_assert_set_authdata_raw ,
11.Nm fido_assert_set_clientdata ,
12.Nm fido_assert_set_clientdata_hash ,
13.Nm fido_assert_set_count ,
14.Nm fido_assert_set_extensions ,
15.Nm fido_assert_set_hmac_salt ,
16.Nm fido_assert_set_hmac_secret ,
17.Nm fido_assert_set_up ,
18.Nm fido_assert_set_uv ,
19.Nm fido_assert_set_rp ,
20.Nm fido_assert_set_sig
21.Nd set parameters of a FIDO2 assertion
22.Sh SYNOPSIS
23.In fido.h
24.Bd -literal
25typedef enum {
26	FIDO_OPT_OMIT = 0, /* use authenticator's default */
27	FIDO_OPT_FALSE,    /* explicitly set option to false */
28        FIDO_OPT_TRUE,     /* explicitly set option to true */
29} fido_opt_t;
30.Ed
31.Ft int
32.Fn fido_assert_set_authdata "fido_assert_t *assert" "size_t idx" "const unsigned char *ptr" "size_t len"
33.Ft int
34.Fn fido_assert_set_authdata_raw "fido_assert_t *assert" "size_t idx" "const unsigned char *ptr" "size_t len"
35.Ft int
36.Fn fido_assert_set_clientdata "fido_assert_t *assert" "const unsigned char *ptr" "size_t len"
37.Ft int
38.Fn fido_assert_set_clientdata_hash "fido_assert_t *assert" "const unsigned char *ptr" "size_t len"
39.Ft int
40.Fn fido_assert_set_count "fido_assert_t *assert" "size_t n"
41.Ft int
42.Fn fido_assert_set_extensions "fido_assert_t *assert" "int flags"
43.Ft int
44.Fn fido_assert_set_hmac_salt "fido_assert_t *assert" "const unsigned char *ptr" "size_t len"
45.Ft int
46.Fn fido_assert_set_hmac_secret "fido_assert_t *assert" "size_t idx" "const unsigned char *ptr" "size_t len"
47.Ft int
48.Fn fido_assert_set_up "fido_assert_t *assert" "fido_opt_t up"
49.Ft int
50.Fn fido_assert_set_uv "fido_assert_t *assert" "fido_opt_t uv"
51.Ft int
52.Fn fido_assert_set_rp "fido_assert_t *assert" "const char *id"
53.Ft int
54.Fn fido_assert_set_sig "fido_assert_t *assert" "size_t idx" "const unsigned char *ptr" "size_t len"
55.Sh DESCRIPTION
56The
57.Nm
58set of functions define the various parameters of a FIDO2
59assertion, allowing a
60.Fa fido_assert_t
61type to be prepared for a subsequent call to
62.Xr fido_dev_get_assert 3
63or
64.Xr fido_assert_verify 3 .
65For the complete specification of a FIDO2 assertion and the format
66of its constituent parts, please refer to the Web Authentication
67(webauthn) standard.
68.Pp
69The
70.Fn fido_assert_set_count
71function sets the number of assertion statements in
72.Fa assert
73to
74.Fa n .
75.Pp
76The
77.Fn fido_assert_set_authdata
78and
79.Fn fido_assert_set_sig
80functions set the authenticator data and signature parts of the
81statement with index
82.Fa idx
83of
84.Fa assert
85to
86.Fa ptr ,
87where
88.Fa ptr
89points to
90.Fa len
91bytes.
92A copy of
93.Fa ptr
94is made, and no references to the passed pointer are kept.
95Please note that the first assertion statement of
96.Fa assert
97has an
98.Fa idx
99of
100.Em 0 .
101The authenticator data passed to
102.Fn fido_assert_set_authdata
103must be a CBOR-encoded byte string, as obtained from
104.Fn fido_assert_authdata_ptr .
105Alternatively, a raw binary blob may be passed to
106.Fn fido_assert_set_authdata_raw .
107.Pp
108The
109.Fn fido_assert_set_clientdata_hash
110function sets the client data hash of
111.Fa assert
112to
113.Fa ptr ,
114where
115.Fa ptr
116points to
117.Fa len
118bytes.
119A copy of
120.Fa ptr
121is made, and no references to the passed pointer are kept.
122.Pp
123The
124.Fn fido_assert_set_clientdata
125function allows an application to set the client data hash of
126.Fa assert
127by specifying the assertion's unhashed client data.
128This is required by Windows Hello, which calculates the client data
129hash internally.
130For compatibility with Windows Hello, applications should use
131.Fn fido_assert_set_clientdata
132instead of
133.Fn fido_assert_set_clientdata_hash .
134.Pp
135The
136.Fn fido_assert_set_rp
137function sets the relying party
138.Fa id
139of
140.Fa assert ,
141where
142.Fa id
143is a NUL-terminated UTF-8 string.
144The content of
145.Fa id
146is copied, and no references to the passed pointer are kept.
147.Pp
148The
149.Fn fido_assert_set_extensions
150function sets the extensions of
151.Fa assert
152to the bitmask
153.Fa flags .
154At the moment, only the
155.Dv FIDO_EXT_CRED_BLOB ,
156.Dv FIDO_EXT_HMAC_SECRET ,
157and
158.Dv FIDO_EXT_LARGEBLOB_KEY
159extensions are supported.
160If
161.Fa flags
162is zero, the extensions of
163.Fa assert
164are cleared.
165.Pp
166The
167.Fn fido_assert_set_hmac_salt
168and
169.Fn fido_assert_set_hmac_secret
170functions set the hmac-salt and hmac-secret parts of
171.Fa assert
172to
173.Fa ptr ,
174where
175.Fa ptr
176points to
177.Fa len
178bytes.
179A copy of
180.Fa ptr
181is made, and no references to the passed pointer are kept.
182The HMAC Secret
183.Pq hmac-secret
184Extension is a CTAP 2.0 extension.
185The
186.Fn fido_assert_set_hmac_secret
187function is normally only useful when writing tests.
188.Pp
189The
190.Fn fido_assert_set_up
191and
192.Fn fido_assert_set_uv
193functions set the
194.Fa up
195(user presence) and
196.Fa uv
197(user verification)
198attributes of
199.Fa assert .
200Both are
201.Dv FIDO_OPT_OMIT
202by default, allowing the authenticator to use its default settings.
203.Pp
204Use of the
205.Nm
206set of functions may happen in two distinct situations:
207when asking a FIDO2 device to produce a series of assertion
208statements, prior to
209.Xr fido_dev_get_assert 3
210(i.e, in the context of a FIDO2 client), or when verifying assertion
211statements using
212.Xr fido_assert_verify 3
213(i.e, in the context of a FIDO2 server).
214.Pp
215For a complete description of the generation of a FIDO2 assertion
216and its verification, please refer to the FIDO2 specification.
217An example of how to use the
218.Nm
219set of functions can be found in the
220.Pa examples/assert.c
221file shipped with
222.Em libfido2 .
223.Sh RETURN VALUES
224The
225.Nm
226functions return
227.Dv FIDO_OK
228on success.
229The error codes returned by the
230.Nm
231set of functions are defined in
232.In fido/err.h .
233.Sh SEE ALSO
234.Xr fido_assert_allow_cred 3 ,
235.Xr fido_assert_verify 3 ,
236.Xr fido_dev_get_assert 3
237