]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/libfido2/tools/test.sh
Merge libcxxrt master 03c83f5a57be8c5b1a29a68de5638744f17d28ba
[FreeBSD/FreeBSD.git] / contrib / libfido2 / tools / test.sh
1 #!/bin/sh -ex
2
3 # Copyright (c) 2021-2022 Yubico AB. All rights reserved.
4 # Use of this source code is governed by a BSD-style
5 # license that can be found in the LICENSE file.
6 # SPDX-License-Identifier: BSD-2-Clause
7
8 # usage: ./test.sh "$(mktemp -d fido2test-XXXXXXXX)" device
9
10 # Please note that this test script:
11 # - is incomplete;
12 # - assumes CTAP 2.1-like hmac-secret;
13 # - should pass as-is on a YubiKey with a PIN set;
14 # - may otherwise require set +e above;
15 # - can be executed with UV=1 to run additional UV tests;
16 # - was last tested on 2022-01-11 with firmware 5.4.3.
17
18 cd "$1"
19 DEV="$2"
20 TYPE="es256"
21 #TYPE="es384"
22 #TYPE="eddsa"
23
24 make_cred() {
25         sed /^$/d > cred_param << EOF
26 $(dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64)
27 $1
28 some user name
29 $(dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64)
30 EOF
31         fido2-cred -M $2 "${DEV}" "${TYPE}" > "$3" < cred_param
32 }
33
34 verify_cred() {
35         fido2-cred -V $1 "${TYPE}" > cred_out < "$2"
36         head -1 cred_out > "$3"
37         tail -n +2 cred_out > "$4"
38 }
39
40 get_assert() {
41         sed /^$/d > assert_param << EOF
42 $(dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64)
43 $1
44 $(cat $3)
45 $(cat $4)
46 EOF
47         fido2-assert -G $2 "${DEV}" > "$5" < assert_param
48 }
49
50 verify_assert() {
51         fido2-assert -V $1 "$2" "${TYPE}" < "$3"
52 }
53
54 dd if=/dev/urandom bs=32 count=1 | base64 > hmac-salt
55
56 # u2f
57 if [ "x${TYPE}" = "xes256" ]; then
58         make_cred no.tld "-u" u2f
59         ! make_cred no.tld "-ru" /dev/null
60         ! make_cred no.tld "-uc1" /dev/null
61         ! make_cred no.tld "-uc2" /dev/null
62         verify_cred "--"  u2f u2f-cred u2f-pubkey
63         ! verify_cred "-h" u2f /dev/null /dev/null
64         ! verify_cred "-v" u2f /dev/null /dev/null
65         verify_cred "-c0" u2f /dev/null /dev/null
66         ! verify_cred "-c1" u2f /dev/null /dev/null
67         ! verify_cred "-c2" u2f /dev/null /dev/null
68         ! verify_cred "-c3" u2f /dev/null /dev/null
69 fi
70
71 # wrap (non-resident)
72 make_cred no.tld "--" wrap
73 verify_cred "--" wrap wrap-cred wrap-pubkey
74 ! verify_cred "-h" wrap /dev/null /dev/null
75 ! verify_cred "-v" wrap /dev/null /dev/null
76 verify_cred "-c0" wrap /dev/null /dev/null
77 ! verify_cred "-c1" wrap /dev/null /dev/null
78 ! verify_cred "-c2" wrap /dev/null /dev/null
79 ! verify_cred "-c3" wrap /dev/null /dev/null
80
81 # wrap (non-resident) + hmac-secret
82 make_cred no.tld "-h" wrap-hs
83 ! verify_cred "--" wrap-hs /dev/null /dev/null
84 verify_cred "-h" wrap-hs wrap-hs-cred wrap-hs-pubkey
85 ! verify_cred "-v" wrap-hs /dev/null /dev/null
86 verify_cred "-hc0" wrap-hs /dev/null /dev/null
87 ! verify_cred "-c0" wrap-hs /dev/null /dev/null
88 ! verify_cred "-c1" wrap-hs /dev/null /dev/null
89 ! verify_cred "-c2" wrap-hs /dev/null /dev/null
90 ! verify_cred "-c3" wrap-hs /dev/null /dev/null
91
92 # resident
93 make_cred no.tld "-r" rk
94 verify_cred "--" rk rk-cred rk-pubkey
95 ! verify_cred "-h" rk /dev/null /dev/null
96 ! verify_cred "-v" rk /dev/null /dev/null
97 verify_cred "-c0" rk /dev/null /dev/null
98 ! verify_cred "-c1" rk /dev/null /dev/null
99 ! verify_cred "-c2" rk /dev/null /dev/null
100 ! verify_cred "-c3" rk /dev/null /dev/null
101
102 # resident + hmac-secret
103 make_cred no.tld "-hr" rk-hs
104 ! verify_cred  "--" rk-hs rk-hs-cred rk-hs-pubkey
105 verify_cred "-h" rk-hs /dev/null /dev/null
106 ! verify_cred "-v" rk-hs /dev/null /dev/null
107 verify_cred "-hc0" rk-hs /dev/null /dev/null
108 ! verify_cred "-c0" rk-hs /dev/null /dev/null
109 ! verify_cred "-c1" rk-hs /dev/null /dev/null
110 ! verify_cred "-c2" rk-hs /dev/null /dev/null
111 ! verify_cred "-c3" rk-hs /dev/null /dev/null
112
113 # u2f
114 if [ "x${TYPE}" = "xes256" ]; then
115         get_assert no.tld "-u" u2f-cred /dev/null u2f-assert
116         ! get_assert no.tld "-u -t up=false" u2f-cred /dev/null /dev/null
117         verify_assert "--"  u2f-pubkey u2f-assert
118         verify_assert "-p"  u2f-pubkey u2f-assert
119 fi
120
121 # wrap (non-resident)
122 get_assert no.tld "--" wrap-cred /dev/null wrap-assert
123 verify_assert "--" wrap-pubkey wrap-assert
124 get_assert no.tld "-t pin=true" wrap-cred /dev/null wrap-assert
125 verify_assert "--" wrap-pubkey wrap-assert
126 verify_assert "-v" wrap-pubkey wrap-assert
127 get_assert no.tld "-t pin=false" wrap-cred /dev/null wrap-assert
128 verify_assert "--" wrap-pubkey wrap-assert
129 get_assert no.tld "-t up=true" wrap-cred /dev/null wrap-assert
130 verify_assert "-p" wrap-pubkey wrap-assert
131 get_assert no.tld "-t up=true -t pin=true" wrap-cred /dev/null wrap-assert
132 verify_assert "--" wrap-pubkey wrap-assert
133 verify_assert "-p" wrap-pubkey wrap-assert
134 verify_assert "-v" wrap-pubkey wrap-assert
135 verify_assert "-pv" wrap-pubkey wrap-assert
136 get_assert no.tld "-t up=true -t pin=false" wrap-cred /dev/null wrap-assert
137 verify_assert "--" wrap-pubkey wrap-assert
138 verify_assert "-p" wrap-pubkey wrap-assert
139 get_assert no.tld "-t up=false" wrap-cred /dev/null wrap-assert
140 verify_assert "--" wrap-pubkey wrap-assert
141 ! verify_assert "-p" wrap-pubkey wrap-assert
142 get_assert no.tld "-t up=false -t pin=true" wrap-cred /dev/null wrap-assert
143 ! verify_assert "-p" wrap-pubkey wrap-assert
144 verify_assert "-v" wrap-pubkey wrap-assert
145 ! verify_assert "-pv" wrap-pubkey wrap-assert
146 get_assert no.tld "-t up=false -t pin=false" wrap-cred /dev/null wrap-assert
147 ! verify_assert "-p" wrap-pubkey wrap-assert
148 get_assert no.tld "-h" wrap-cred hmac-salt wrap-assert
149 ! verify_assert "--" wrap-pubkey wrap-assert
150 verify_assert "-h" wrap-pubkey wrap-assert
151 get_assert no.tld "-h -t pin=true" wrap-cred hmac-salt wrap-assert
152 ! verify_assert "--" wrap-pubkey wrap-assert
153 verify_assert "-h" wrap-pubkey wrap-assert
154 verify_assert "-hv" wrap-pubkey wrap-assert
155 get_assert no.tld "-h -t pin=false" wrap-cred hmac-salt wrap-assert
156 ! verify_assert "--" wrap-pubkey wrap-assert
157 verify_assert "-h" wrap-pubkey wrap-assert
158 get_assert no.tld "-h -t up=true" wrap-cred hmac-salt wrap-assert
159 ! verify_assert "--" wrap-pubkey wrap-assert
160 verify_assert "-h" wrap-pubkey wrap-assert
161 verify_assert "-hp" wrap-pubkey wrap-assert
162 get_assert no.tld "-h -t up=true -t pin=true" wrap-cred hmac-salt wrap-assert
163 ! verify_assert "--" wrap-pubkey wrap-assert
164 verify_assert "-h" wrap-pubkey wrap-assert
165 verify_assert "-hp" wrap-pubkey wrap-assert
166 verify_assert "-hv" wrap-pubkey wrap-assert
167 verify_assert "-hpv" wrap-pubkey wrap-assert
168 get_assert no.tld "-h -t up=true -t pin=false" wrap-cred hmac-salt wrap-assert
169 ! verify_assert "--" wrap-pubkey wrap-assert
170 verify_assert "-h" wrap-pubkey wrap-assert
171 verify_assert "-hp" wrap-pubkey wrap-assert
172 ! get_assert no.tld "-h -t up=false" wrap-cred hmac-salt wrap-assert
173 ! get_assert no.tld "-h -t up=false -t pin=true" wrap-cred hmac-salt wrap-assert
174 ! get_assert no.tld "-h -t up=false -t pin=false" wrap-cred hmac-salt wrap-assert
175
176 if [ "x${UV}" != "x" ]; then
177         get_assert no.tld "-t uv=true" wrap-cred /dev/null wrap-assert
178         verify_assert "-v" wrap-pubkey wrap-assert
179         get_assert no.tld "-t uv=true -t pin=true" wrap-cred /dev/null wrap-assert
180         verify_assert "-v" wrap-pubkey wrap-assert
181         get_assert no.tld "-t uv=true -t pin=false" wrap-cred /dev/null wrap-assert
182         verify_assert "-v" wrap-pubkey wrap-assert
183         get_assert no.tld "-t uv=false" wrap-cred /dev/null wrap-assert
184         verify_assert "--" wrap-pubkey wrap-assert
185         get_assert no.tld "-t uv=false -t pin=true" wrap-cred /dev/null wrap-assert
186         verify_assert "-v" wrap-pubkey wrap-assert
187         get_assert no.tld "-t uv=false -t pin=false" wrap-cred /dev/null wrap-assert
188         verify_assert "--" wrap-pubkey wrap-assert
189         get_assert no.tld "-t up=true -t uv=true" wrap-cred /dev/null wrap-assert
190         verify_assert "-pv" wrap-pubkey wrap-assert
191         get_assert no.tld "-t up=true -t uv=true -t pin=true" wrap-cred /dev/null wrap-assert
192         verify_assert "-pv" wrap-pubkey wrap-assert
193         get_assert no.tld "-t up=true -t uv=true -t pin=false" wrap-cred /dev/null wrap-assert
194         verify_assert "-pv" wrap-pubkey wrap-assert
195         get_assert no.tld "-t up=true -t uv=false" wrap-cred /dev/null wrap-assert
196         verify_assert "-p" wrap-pubkey wrap-assert
197         get_assert no.tld "-t up=true -t uv=false -t pin=true" wrap-cred /dev/null wrap-assert
198         verify_assert "-pv" wrap-pubkey wrap-assert
199         get_assert no.tld "-t up=true -t uv=false -t pin=false" wrap-cred /dev/null wrap-assert
200         verify_assert "-p" wrap-pubkey wrap-assert
201         get_assert no.tld "-t up=false -t uv=true" wrap-cred /dev/null wrap-assert
202         verify_assert "-v" wrap-pubkey wrap-assert
203         get_assert no.tld "-t up=false -t uv=true -t pin=true" wrap-cred /dev/null wrap-assert
204         verify_assert "-v" wrap-pubkey wrap-assert
205         get_assert no.tld "-t up=false -t uv=true -t pin=false" wrap-cred /dev/null wrap-assert
206         verify_assert "-v" wrap-pubkey wrap-assert
207         get_assert no.tld "-t up=false -t uv=false" wrap-cred /dev/null wrap-assert
208         ! verify_assert "--" wrap-pubkey wrap-assert
209         get_assert no.tld "-t up=false -t uv=false -t pin=true" wrap-cred /dev/null wrap-assert
210         verify_assert "-v" wrap-pubkey wrap-assert
211         get_assert no.tld "-t up=false -t uv=false -t pin=false" wrap-cred /dev/null wrap-assert
212         ! verify_assert "--" wrap-pubkey wrap-assert
213         get_assert no.tld "-h -t uv=true" wrap-cred hmac-salt wrap-assert
214         verify_assert "-hv" wrap-pubkey wrap-assert
215         get_assert no.tld "-h -t uv=true -t pin=true" wrap-cred hmac-salt wrap-assert
216         verify_assert "-hv" wrap-pubkey wrap-assert
217         get_assert no.tld "-h -t uv=true -t pin=false" wrap-cred hmac-salt wrap-assert
218         verify_assert "-hv" wrap-pubkey wrap-assert
219         get_assert no.tld "-h -t uv=false" wrap-cred hmac-salt wrap-assert
220         verify_assert "-h" wrap-pubkey wrap-assert
221         get_assert no.tld "-h -t uv=false -t pin=true" wrap-cred hmac-salt wrap-assert
222         verify_assert "-hv" wrap-pubkey wrap-assert
223         get_assert no.tld "-h -t uv=false -t pin=false" wrap-cred hmac-salt wrap-assert
224         verify_assert "-h" wrap-pubkey wrap-assert
225         get_assert no.tld "-h -t up=true -t uv=true" wrap-cred hmac-salt wrap-assert
226         verify_assert "-hpv" wrap-pubkey wrap-assert
227         get_assert no.tld "-h -t up=true -t uv=true -t pin=true" wrap-cred hmac-salt wrap-assert
228         verify_assert "-hpv" wrap-pubkey wrap-assert
229         get_assert no.tld "-h -t up=true -t uv=true -t pin=false" wrap-cred hmac-salt wrap-assert
230         verify_assert "-hpv" wrap-pubkey wrap-assert
231         get_assert no.tld "-h -t up=true -t uv=false" wrap-cred hmac-salt wrap-assert
232         verify_assert "-hp" wrap-pubkey wrap-assert
233         get_assert no.tld "-h -t up=true -t uv=false -t pin=true" wrap-cred hmac-salt wrap-assert
234         verify_assert "-hpv" wrap-pubkey wrap-assert
235         get_assert no.tld "-h -t up=true -t uv=false -t pin=false" wrap-cred hmac-salt wrap-assert
236         verify_assert "-hp" wrap-pubkey wrap-assert
237         ! get_assert no.tld "-h -t up=false -t uv=true" wrap-cred hmac-salt wrap-assert
238         ! get_assert no.tld "-h -t up=false -t uv=true -t pin=true" wrap-cred hmac-salt wrap-assert
239         ! get_assert no.tld "-h -t up=false -t uv=true -t pin=false" wrap-cred hmac-salt wrap-assert
240         ! get_assert no.tld "-h -t up=false -t uv=false" wrap-cred hmac-salt wrap-assert
241         ! get_assert no.tld "-h -t up=false -t uv=false -t pin=true" wrap-cred hmac-salt wrap-assert
242         ! get_assert no.tld "-h -t up=false -t uv=false -t pin=false" wrap-cred hmac-salt wrap-assert
243 fi
244
245 # resident
246 get_assert no.tld "-r" /dev/null /dev/null wrap-assert
247 get_assert no.tld "-r -t pin=true" /dev/null /dev/null wrap-assert
248 get_assert no.tld "-r -t pin=false" /dev/null /dev/null wrap-assert
249 get_assert no.tld "-r -t up=true" /dev/null /dev/null wrap-assert
250 get_assert no.tld "-r -t up=true -t pin=true" /dev/null /dev/null wrap-assert
251 get_assert no.tld "-r -t up=true -t pin=false" /dev/null /dev/null wrap-assert
252 get_assert no.tld "-r -t up=false" /dev/null /dev/null wrap-assert
253 get_assert no.tld "-r -t up=false -t pin=true" /dev/null /dev/null wrap-assert
254 get_assert no.tld "-r -t up=false -t pin=false" /dev/null /dev/null wrap-assert
255 get_assert no.tld "-r -h" /dev/null hmac-salt wrap-assert
256 get_assert no.tld "-r -h -t pin=true" /dev/null hmac-salt wrap-assert
257 get_assert no.tld "-r -h -t pin=false" /dev/null hmac-salt wrap-assert
258 get_assert no.tld "-r -h -t up=true" /dev/null hmac-salt wrap-assert
259 get_assert no.tld "-r -h -t up=true -t pin=true" /dev/null hmac-salt wrap-assert
260 get_assert no.tld "-r -h -t up=true -t pin=false" /dev/null hmac-salt wrap-assert
261 ! get_assert no.tld "-r -h -t up=false" /dev/null hmac-salt wrap-assert
262 ! get_assert no.tld "-r -h -t up=false -t pin=true" /dev/null hmac-salt wrap-assert
263 ! get_assert no.tld "-r -h -t up=false -t pin=false" /dev/null hmac-salt wrap-assert
264
265 if [ "x${UV}" != "x" ]; then
266         get_assert no.tld "-r -t uv=true" /dev/null /dev/null wrap-assert
267         get_assert no.tld "-r -t uv=true -t pin=true" /dev/null /dev/null wrap-assert
268         get_assert no.tld "-r -t uv=true -t pin=false" /dev/null /dev/null wrap-assert
269         get_assert no.tld "-r -t uv=false" /dev/null /dev/null wrap-assert
270         get_assert no.tld "-r -t uv=false -t pin=true" /dev/null /dev/null wrap-assert
271         get_assert no.tld "-r -t uv=false -t pin=false" /dev/null /dev/null wrap-assert
272         get_assert no.tld "-r -t up=true -t uv=true" /dev/null /dev/null wrap-assert
273         get_assert no.tld "-r -t up=true -t uv=true -t pin=true" /dev/null /dev/null wrap-assert
274         get_assert no.tld "-r -t up=true -t uv=true -t pin=false" /dev/null /dev/null wrap-assert
275         get_assert no.tld "-r -t up=true -t uv=false" /dev/null /dev/null wrap-assert
276         get_assert no.tld "-r -t up=true -t uv=false -t pin=true" /dev/null /dev/null wrap-assert
277         get_assert no.tld "-r -t up=true -t uv=false -t pin=false" /dev/null /dev/null wrap-assert
278         get_assert no.tld "-r -t up=false -t uv=true" /dev/null /dev/null wrap-assert
279         get_assert no.tld "-r -t up=false -t uv=true -t pin=true" /dev/null /dev/null wrap-assert
280         get_assert no.tld "-r -t up=false -t uv=true -t pin=false" /dev/null /dev/null wrap-assert
281         get_assert no.tld "-r -t up=false -t uv=false" /dev/null /dev/null wrap-assert
282         get_assert no.tld "-r -t up=false -t uv=false -t pin=true" /dev/null /dev/null wrap-assert
283         get_assert no.tld "-r -t up=false -t uv=false -t pin=false" /dev/null /dev/null wrap-assert
284         get_assert no.tld "-r -h -t uv=true" /dev/null hmac-salt wrap-assert
285         get_assert no.tld "-r -h -t uv=true -t pin=true" /dev/null hmac-salt wrap-assert
286         get_assert no.tld "-r -h -t uv=true -t pin=false" /dev/null hmac-salt wrap-assert
287         get_assert no.tld "-r -h -t uv=false" /dev/null hmac-salt wrap-assert
288         get_assert no.tld "-r -h -t uv=false -t pin=true" /dev/null hmac-salt wrap-assert
289         get_assert no.tld "-r -h -t uv=false -t pin=false" /dev/null hmac-salt wrap-assert
290         get_assert no.tld "-r -h -t up=true -t uv=true" /dev/null hmac-salt wrap-assert
291         get_assert no.tld "-r -h -t up=true -t uv=true -t pin=true" /dev/null hmac-salt wrap-assert
292         get_assert no.tld "-r -h -t up=true -t uv=true -t pin=false" /dev/null hmac-salt wrap-assert
293         get_assert no.tld "-r -h -t up=true -t uv=false" /dev/null hmac-salt wrap-assert
294         get_assert no.tld "-r -h -t up=true -t uv=false -t pin=true" /dev/null hmac-salt wrap-assert
295         get_assert no.tld "-r -h -t up=true -t uv=false -t pin=false" /dev/null hmac-salt wrap-assert
296         ! get_assert no.tld "-r -h -t up=false -t uv=true" /dev/null hmac-salt wrap-assert
297         ! get_assert no.tld "-r -h -t up=false -t uv=true -t pin=true" /dev/null hmac-salt wrap-assert
298         ! get_assert no.tld "-r -h -t up=false -t uv=true -t pin=false" /dev/null hmac-salt wrap-assert
299         ! get_assert no.tld "-r -h -t up=false -t uv=false" /dev/null hmac-salt wrap-assert
300         ! get_assert no.tld "-r -h -t up=false -t uv=false -t pin=true" /dev/null hmac-salt wrap-assert
301         ! get_assert no.tld "-r -h -t up=false -t uv=false -t pin=false" /dev/null hmac-salt wrap-assert
302 fi
303
304 exit 0