summaryrefslogtreecommitdiff
path: root/fuzz/fuzz_bio.c
diff options
context:
space:
mode:
authorColin Watson <cjwatson@debian.org>2020-04-17 20:57:17 +0100
committerColin Watson <cjwatson@debian.org>2020-04-17 20:57:17 +0100
commit75073d0a8478441cc97a6efa10b566c5fb1dac81 (patch)
treeb73bff259e1b16829ed8b19ee92df2bbbf36ef7d /fuzz/fuzz_bio.c
parentc923f422b1e455bdd8ec3bdb10d005e3bfbacfe0 (diff)
New upstream version 1.4.0
Diffstat (limited to 'fuzz/fuzz_bio.c')
-rw-r--r--fuzz/fuzz_bio.c398
1 files changed, 39 insertions, 359 deletions
diff --git a/fuzz/fuzz_bio.c b/fuzz/fuzz_bio.c
index f1596a7..05f6ce3 100644
--- a/fuzz/fuzz_bio.c
+++ b/fuzz/fuzz_bio.c
@@ -11,6 +11,9 @@
11#include <stdio.h> 11#include <stdio.h>
12 12
13#include "mutator_aux.h" 13#include "mutator_aux.h"
14#include "wiredata_fido2.h"
15#include "dummy.h"
16
14#include "fido.h" 17#include "fido.h"
15#include "fido/bio.h" 18#include "fido/bio.h"
16 19
@@ -39,32 +42,14 @@ struct param {
39 struct blob remove_wire_data; 42 struct blob remove_wire_data;
40}; 43};
41 44
42/* Example parameters. */
43static const uint8_t dummy_id[] = { 0x5e, 0xd2, };
44static const char dummy_pin[] = "3Q;I){TAx";
45static const char dummy_name[] = "finger1";
46
47/* 45/*
48 * Collection of HID reports from an authenticator issued with a FIDO2 46 * Collection of HID reports from an authenticator issued with a FIDO2
49 * 'getFingerprintSensorInfo' bio enrollment command. 47 * 'getFingerprintSensorInfo' bio enrollment command.
50 */ 48 */
51static const uint8_t dummy_info_wire_data[] = { 49static const uint8_t dummy_info_wire_data[] = {
52 0xff, 0xff, 0xff, 0xff, 0x86, 0x00, 0x11, 0xf0, 50 WIREDATA_CTAP_INIT,
53 0x08, 0xc1, 0x8f, 0x76, 0x4b, 0x8f, 0xa9, 0x00, 51 WIREDATA_CTAP_CBOR_INFO,
54 0x10, 0x00, 0x04, 0x02, 0x00, 0x04, 0x06, 0x05, 52 WIREDATA_CTAP_CBOR_BIO_INFO,
55 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
56 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
57 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60 0x00, 0x10, 0x00, 0x04, 0x90, 0x00, 0x06, 0x00,
61 0xa2, 0x02, 0x01, 0x03, 0x04, 0x00, 0x00, 0x00,
62 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
63 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
64 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
65 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
66 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
67 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68}; 53};
69 54
70/* 55/*
@@ -72,221 +57,11 @@ static const uint8_t dummy_info_wire_data[] = {
72 * 'enrollBegin' + 'enrollCaptureNextSample' bio enrollment commands. 57 * 'enrollBegin' + 'enrollCaptureNextSample' bio enrollment commands.
73 */ 58 */
74static const uint8_t dummy_enroll_wire_data[] = { 59static const uint8_t dummy_enroll_wire_data[] = {
75 0xff, 0xff, 0xff, 0xff, 0x86, 0x00, 0x11, 0x06, 60 WIREDATA_CTAP_INIT,
76 0xb4, 0xba, 0x2e, 0xb3, 0x88, 0x24, 0x38, 0x00, 61 WIREDATA_CTAP_CBOR_INFO,
77 0x0a, 0x00, 0x05, 0x02, 0x00, 0x04, 0x06, 0x05, 62 WIREDATA_CTAP_CBOR_AUTHKEY,
78 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 63 WIREDATA_CTAP_CBOR_PINTOKEN,
79 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 64 WIREDATA_CTAP_CBOR_BIO_ENROLL,
80 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
82 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83 0x00, 0x0a, 0x00, 0x05, 0x90, 0x00, 0x51, 0x00,
84 0xa1, 0x01, 0xa5, 0x01, 0x02, 0x03, 0x38, 0x18,
85 0x20, 0x01, 0x21, 0x58, 0x20, 0xc9, 0x12, 0x01,
86 0xab, 0x88, 0xd7, 0x0a, 0x24, 0xdd, 0xdc, 0xde,
87 0x16, 0x27, 0x50, 0x77, 0x37, 0x06, 0xd3, 0x48,
88 0xe6, 0xf9, 0xdb, 0xaa, 0x10, 0x83, 0x81, 0xac,
89 0x13, 0x3c, 0xf9, 0x77, 0x2d, 0x22, 0x58, 0x20,
90 0xda, 0x20, 0x71, 0x03, 0x01, 0x40, 0xac, 0xd0,
91 0x00, 0x0a, 0x00, 0x05, 0x00, 0xb8, 0xdf, 0x2a,
92 0x95, 0xd3, 0x88, 0x1c, 0x06, 0x34, 0x30, 0xf1,
93 0xf3, 0xcd, 0x27, 0x40, 0x90, 0x5c, 0xc6, 0x74,
94 0x66, 0xff, 0x10, 0xde, 0xb6, 0x00, 0x00, 0x00,
95 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
97 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
99 0x00, 0x0a, 0x00, 0x05, 0x90, 0x00, 0x14, 0x00,
100 0xa1, 0x02, 0x50, 0x18, 0x81, 0xff, 0xf2, 0xf5,
101 0xde, 0x74, 0x43, 0xd5, 0xe0, 0x77, 0x37, 0x6b,
102 0x6c, 0x18, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00,
103 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
107 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
108 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
111 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
112 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
113 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
114 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
116 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
117 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
118 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
119 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
120 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
124 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
125 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
131 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
132 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
133 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
134 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
136 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
138 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
139 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
140 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
143 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
144 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
148 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
151 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
152 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
154 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
155 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
158 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
159 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
160 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
163 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
166 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
167 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
169 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
170 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
171 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
172 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
173 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
175 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
176 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
177 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
178 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
179 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
180 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
181 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
183 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
184 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
185 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
186 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
187 0x00, 0x0a, 0x00, 0x05, 0x90, 0x00, 0x0a, 0x00,
188 0xa3, 0x04, 0x42, 0x68, 0x96, 0x05, 0x00, 0x06,
189 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
190 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
191 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
192 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
193 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
194 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
195 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
196 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
197 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
198 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
199 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
200 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
201 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
202 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
203 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
204 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
205 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
206 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
207 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
208 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
209 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
210 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
211 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
212 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
213 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
214 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
215 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
216 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
217 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
218 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
219 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
220 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
221 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
222 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
223 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
224 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
225 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
226 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
227 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
228 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
229 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
230 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
231 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
232 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
233 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
234 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
235 0x00, 0x0a, 0x00, 0x05, 0x90, 0x00, 0x06, 0x00,
236 0xa2, 0x05, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00,
237 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
238 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
239 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
240 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
241 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
242 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
243 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
244 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
245 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
246 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
247 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
248 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
249 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
250 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
251 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
252 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
253 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
254 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
255 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
256 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
257 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
258 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
259 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
260 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
261 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
262 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
263 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
264 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
265 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
266 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
267 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
268 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
269 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
270 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
271 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
272 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
273 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
274 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
275 0x00, 0x0a, 0x00, 0x05, 0xbb, 0x00, 0x01, 0x02,
276 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
277 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
278 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
279 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
280 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
281 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
282 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
283 0x00, 0x0a, 0x00, 0x05, 0x90, 0x00, 0x06, 0x00,
284 0xa2, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
285 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
286 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
287 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
288 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
289 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
290}; 65};
291 66
292/* 67/*
@@ -294,46 +69,11 @@ static const uint8_t dummy_enroll_wire_data[] = {
294 * 'enumerateEnrollments' bio enrollment command. 69 * 'enumerateEnrollments' bio enrollment command.
295 */ 70 */
296static const uint8_t dummy_list_wire_data[] = { 71static const uint8_t dummy_list_wire_data[] = {
297 0xff, 0xff, 0xff, 0xff, 0x86, 0x00, 0x11, 0xae, 72 WIREDATA_CTAP_INIT,
298 0x21, 0x88, 0x51, 0x09, 0x6f, 0xd7, 0xbb, 0x00, 73 WIREDATA_CTAP_CBOR_INFO,
299 0x10, 0x00, 0x0f, 0x02, 0x00, 0x04, 0x06, 0x05, 74 WIREDATA_CTAP_CBOR_AUTHKEY,
300 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 75 WIREDATA_CTAP_CBOR_PINTOKEN,
301 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 76 WIREDATA_CTAP_CBOR_BIO_ENUM,
302 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
303 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
304 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
305 0x00, 0x10, 0x00, 0x0f, 0x90, 0x00, 0x51, 0x00,
306 0xa1, 0x01, 0xa5, 0x01, 0x02, 0x03, 0x38, 0x18,
307 0x20, 0x01, 0x21, 0x58, 0x20, 0x5a, 0x70, 0x63,
308 0x11, 0x5b, 0xa6, 0xe1, 0x8e, 0x4a, 0xb0, 0x75,
309 0xe7, 0xfd, 0x39, 0x26, 0x29, 0xed, 0x69, 0xb0,
310 0xc1, 0x1f, 0xa5, 0x7d, 0xcb, 0x64, 0x1e, 0x7c,
311 0x9f, 0x60, 0x5e, 0xb2, 0xf8, 0x22, 0x58, 0x20,
312 0xec, 0xe9, 0x1b, 0x11, 0xac, 0x2a, 0x0d, 0xd5,
313 0x00, 0x10, 0x00, 0x0f, 0x00, 0x3b, 0x9f, 0xba,
314 0x0f, 0x25, 0xd5, 0x24, 0x33, 0x4c, 0x5d, 0x0f,
315 0x63, 0xbf, 0xf1, 0xf3, 0x64, 0x55, 0x78, 0x1a,
316 0x59, 0x6e, 0x65, 0x59, 0xfc, 0x00, 0x00, 0x00,
317 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
318 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
319 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
320 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
321 0x00, 0x10, 0x00, 0x0f, 0x90, 0x00, 0x14, 0x00,
322 0xa1, 0x02, 0x50, 0xb9, 0x31, 0x34, 0xe2, 0x71,
323 0x6a, 0x8e, 0xa3, 0x60, 0xec, 0x5e, 0xd2, 0x13,
324 0x2e, 0x19, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
325 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
326 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
327 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
328 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
329 0x00, 0x10, 0x00, 0x0f, 0x90, 0x00, 0x2e, 0x00,
330 0xa1, 0x07, 0x83, 0xa2, 0x01, 0x42, 0xce, 0xa3,
331 0x02, 0x67, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72,
332 0x31, 0xa2, 0x01, 0x42, 0xbf, 0x5e, 0x02, 0x67,
333 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x32, 0xa2,
334 0x01, 0x42, 0x5e, 0xd2, 0x02, 0x67, 0x66, 0x69,
335 0x6e, 0x67, 0x65, 0x72, 0x33, 0x00, 0x00, 0x00,
336 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
337}; 77};
338 78
339/* 79/*
@@ -341,46 +81,11 @@ static const uint8_t dummy_list_wire_data[] = {
341 * 'setFriendlyName' bio enrollment command. 81 * 'setFriendlyName' bio enrollment command.
342 */ 82 */
343static const uint8_t dummy_set_name_wire_data[] = { 83static const uint8_t dummy_set_name_wire_data[] = {
344 0xff, 0xff, 0xff, 0xff, 0x86, 0x00, 0x11, 0xac, 84 WIREDATA_CTAP_INIT,
345 0x48, 0xfd, 0xbd, 0xdd, 0x36, 0x24, 0x4d, 0x00, 85 WIREDATA_CTAP_CBOR_INFO,
346 0x10, 0x00, 0x10, 0x02, 0x00, 0x04, 0x06, 0x05, 86 WIREDATA_CTAP_CBOR_AUTHKEY,
347 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 87 WIREDATA_CTAP_CBOR_PINTOKEN,
348 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 88 WIREDATA_CTAP_CBOR_STATUS,
349 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
350 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
351 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
352 0x00, 0x10, 0x00, 0x10, 0x90, 0x00, 0x51, 0x00,
353 0xa1, 0x01, 0xa5, 0x01, 0x02, 0x03, 0x38, 0x18,
354 0x20, 0x01, 0x21, 0x58, 0x20, 0x5a, 0x70, 0x63,
355 0x11, 0x5b, 0xa6, 0xe1, 0x8e, 0x4a, 0xb0, 0x75,
356 0xe7, 0xfd, 0x39, 0x26, 0x29, 0xed, 0x69, 0xb0,
357 0xc1, 0x1f, 0xa5, 0x7d, 0xcb, 0x64, 0x1e, 0x7c,
358 0x9f, 0x60, 0x5e, 0xb2, 0xf8, 0x22, 0x58, 0x20,
359 0xec, 0xe9, 0x1b, 0x11, 0xac, 0x2a, 0x0d, 0xd5,
360 0x00, 0x10, 0x00, 0x10, 0x00, 0x3b, 0x9f, 0xba,
361 0x0f, 0x25, 0xd5, 0x24, 0x33, 0x4c, 0x5d, 0x0f,
362 0x63, 0xbf, 0xf1, 0xf3, 0x64, 0x55, 0x78, 0x1a,
363 0x59, 0x6e, 0x65, 0x59, 0xfc, 0x00, 0x00, 0x00,
364 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
365 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
366 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
367 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
368 0x00, 0x10, 0x00, 0x10, 0x90, 0x00, 0x14, 0x00,
369 0xa1, 0x02, 0x50, 0x40, 0x95, 0xf3, 0xcb, 0xae,
370 0xf2, 0x8d, 0xd9, 0xe0, 0xe0, 0x8a, 0xbd, 0xc3,
371 0x03, 0x58, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00,
372 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
373 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
374 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
375 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
376 0x00, 0x10, 0x00, 0x10, 0x90, 0x00, 0x01, 0x00,
377 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
378 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
379 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
380 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
381 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
382 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
383 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
384}; 89};
385 90
386/* 91/*
@@ -388,46 +93,11 @@ static const uint8_t dummy_set_name_wire_data[] = {
388 * 'removeEnrollment' bio enrollment command. 93 * 'removeEnrollment' bio enrollment command.
389 */ 94 */
390static const uint8_t dummy_remove_wire_data[] = { 95static const uint8_t dummy_remove_wire_data[] = {
391 0xff, 0xff, 0xff, 0xff, 0x86, 0x00, 0x11, 0x4b, 96 WIREDATA_CTAP_INIT,
392 0x24, 0xde, 0xd9, 0x06, 0x57, 0x1a, 0xbd, 0x00, 97 WIREDATA_CTAP_CBOR_INFO,
393 0x10, 0x00, 0x15, 0x02, 0x00, 0x04, 0x06, 0x05, 98 WIREDATA_CTAP_CBOR_AUTHKEY,
394 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 99 WIREDATA_CTAP_CBOR_PINTOKEN,
395 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 100 WIREDATA_CTAP_CBOR_STATUS,
396 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
397 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
398 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
399 0x00, 0x10, 0x00, 0x15, 0x90, 0x00, 0x51, 0x00,
400 0xa1, 0x01, 0xa5, 0x01, 0x02, 0x03, 0x38, 0x18,
401 0x20, 0x01, 0x21, 0x58, 0x20, 0x5a, 0x70, 0x63,
402 0x11, 0x5b, 0xa6, 0xe1, 0x8e, 0x4a, 0xb0, 0x75,
403 0xe7, 0xfd, 0x39, 0x26, 0x29, 0xed, 0x69, 0xb0,
404 0xc1, 0x1f, 0xa5, 0x7d, 0xcb, 0x64, 0x1e, 0x7c,
405 0x9f, 0x60, 0x5e, 0xb2, 0xf8, 0x22, 0x58, 0x20,
406 0xec, 0xe9, 0x1b, 0x11, 0xac, 0x2a, 0x0d, 0xd5,
407 0x00, 0x10, 0x00, 0x15, 0x00, 0x3b, 0x9f, 0xba,
408 0x0f, 0x25, 0xd5, 0x24, 0x33, 0x4c, 0x5d, 0x0f,
409 0x63, 0xbf, 0xf1, 0xf3, 0x64, 0x55, 0x78, 0x1a,
410 0x59, 0x6e, 0x65, 0x59, 0xfc, 0x00, 0x00, 0x00,
411 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
412 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
413 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
414 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
415 0x00, 0x10, 0x00, 0x15, 0x90, 0x00, 0x14, 0x00,
416 0xa1, 0x02, 0x50, 0xb0, 0xd0, 0x71, 0x2f, 0xa7,
417 0x8b, 0x89, 0xbd, 0xca, 0xa4, 0x1e, 0x6c, 0x43,
418 0xa1, 0x71, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00,
419 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
420 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
421 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
422 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
423 0x00, 0x10, 0x00, 0x15, 0x90, 0x00, 0x01, 0x00,
424 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
425 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
426 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
427 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
428 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
429 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
430 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
431}; 101};
432 102
433int LLVMFuzzerTestOneInput(const uint8_t *, size_t); 103int LLVMFuzzerTestOneInput(const uint8_t *, size_t);
@@ -471,12 +141,20 @@ pack(uint8_t *ptr, size_t len, const struct param *p)
471 return (max - len); 141 return (max - len);
472} 142}
473 143
144static size_t
145input_len(int max)
146{
147 return (2 * len_string(max) + len_int() + 6 * len_blob(max));
148}
149
474static fido_dev_t * 150static fido_dev_t *
475prepare_dev() 151prepare_dev()
476{ 152{
477 fido_dev_t *dev; 153 fido_dev_t *dev;
478 fido_dev_io_t io; 154 fido_dev_io_t io;
479 155
156 memset(&io, 0, sizeof(io));
157
480 io.open = dev_open; 158 io.open = dev_open;
481 io.close = dev_close; 159 io.close = dev_close;
482 io.read = dev_read; 160 io.read = dev_read;
@@ -659,12 +337,14 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
659 337
660 memset(&p, 0, sizeof(p)); 338 memset(&p, 0, sizeof(p));
661 339
662 if (unpack(data, size, &p) < 0) 340 if (size < input_len(GETLEN_MIN) || size > input_len(GETLEN_MAX) ||
341 unpack(data, size, &p) < 0)
663 return (0); 342 return (0);
664 343
665 srandom((unsigned int)p.seed); 344 prng_init((unsigned int)p.seed);
666 345
667 fido_init(0); 346 fido_init(FIDO_DEBUG);
347 fido_set_log_handler(consume_str);
668 348
669 get_info(&p); 349 get_info(&p);
670 enroll(&p); 350 enroll(&p);