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 FIDO 2 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" "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 FIDO 2
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 FIDO 2 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 ,
110.Fn fido_assert_set_hmac_salt ,
111and
112.Fn fido_assert_set_hmac_secret
113functions set the client data hash and hmac-salt parts of
114.Fa assert
115to
116.Fa ptr ,
117where
118.Fa ptr
119points to
120.Fa len
121bytes.
122A copy of
123.Fa ptr
124is made, and no references to the passed pointer are kept.
125.Pp
126The
127.Fn fido_assert_set_clientdata
128function allows an application to set the client data hash of
129.Fa assert
130by specifying the assertion's unhashed client data.
131This is required by Windows Hello, which calculates the client data
132hash internally.
133For compatibility with Windows Hello, applications should use
134.Fn fido_assert_set_clientdata
135instead of
136.Fn fido_assert_set_clientdata_hash .
137.Pp
138The
139.Fn fido_assert_set_rp
140function sets the relying party
141.Fa id
142of
143.Fa assert ,
144where
145.Fa id
146is a NUL-terminated UTF-8 string.
147The content of
148.Fa id
149is copied, and no references to the passed pointer are kept.
150.Pp
151The
152.Fn fido_assert_set_extensions
153function sets the extensions of
154.Fa assert
155to the bitmask
156.Fa flags .
157At the moment, only the
158.Dv FIDO_EXT_CRED_BLOB ,
159.Dv FIDO_EXT_HMAC_SECRET ,
160and
161.Dv FIDO_EXT_LARGEBLOB_KEY
162extensions are supported.
163If
164.Fa flags
165is zero, the extensions of
166.Fa assert
167are cleared.
168.Pp
169The
170.Fn fido_assert_set_up
171and
172.Fn fido_assert_set_uv
173functions set the
174.Fa up
175(user presence) and
176.Fa uv
177(user verification)
178attributes of
179.Fa assert .
180Both are
181.Dv FIDO_OPT_OMIT
182by default, allowing the authenticator to use its default settings.
183.Pp
184Use of the
185.Nm
186set of functions may happen in two distinct situations:
187when asking a FIDO device to produce a series of assertion
188statements, prior to
189.Xr fido_dev_get_assert 3
190(i.e, in the context of a FIDO client), or when verifying assertion
191statements using
192.Xr fido_assert_verify 3
193(i.e, in the context of a FIDO server).
194.Pp
195For a complete description of the generation of a FIDO 2 assertion
196and its verification, please refer to the FIDO 2 specification.
197An example of how to use the
198.Nm
199set of functions can be found in the
200.Pa examples/assert.c
201file shipped with
202.Em libfido2 .
203.Pp
204.Fn fido_assert_set_hmac_secret
205is not normally useful in a FIDO client or server \(em it is provided
206to enable testing other functionality that relies on retrieving the
207HMAC secret from an assertion obtained from an authenticator.
208.Sh RETURN VALUES
209The
210.Nm
211functions return
212.Dv FIDO_OK
213on success.
214The error codes returned by the
215.Nm
216set of functions are defined in
217.In fido/err.h .
218.Sh SEE ALSO
219.Xr fido_assert_allow_cred 3 ,
220.Xr fido_assert_verify 3 ,
221.Xr fido_dev_get_assert 3
222