Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/libfido2/tools/test.sh
39507 views
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
305
306