1 /* 	$OpenBSD: test_sshbuf_getput_basic.c,v 1.1 2014/04/30 05:32:00 djm Exp $ */
2 /*
3  * Regress test for sshbuf.h buffer API
4  *
5  * Placed in the public domain
6  */
7 
8 #include <sys/types.h>
9 #include <sys/param.h>
10 #include <stdio.h>
11 #include <stdint.h>
12 #include <stdlib.h>
13 #include <string.h>
14 
15 #include "test_helper.h"
16 #include "ssherr.h"
17 #include "sshbuf.h"
18 
19 void sshbuf_getput_basic_tests(void);
20 
21 void
22 sshbuf_getput_basic_tests(void)
23 {
24 	struct sshbuf *p1, *p2;
25 	const u_char *cd;
26 	u_char *d, d2[32], x[] = {
27 		0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x00, 0x99
28 	};
29 	u_int64_t v64;
30 	u_int32_t v32;
31 	u_int16_t v16;
32 	u_char v8;
33 	size_t s;
34 	char *s2;
35 	int r;
36 	u_char bn1[] = { 0x00, 0x00, 0x00 };
37 	u_char bn2[] = { 0x00, 0x00, 0x01, 0x02 };
38 	u_char bn3[] = { 0x00, 0x80, 0x09 };
39 	u_char bn_exp1[] = { 0x00, 0x00, 0x00, 0x00 };
40 	u_char bn_exp2[] = { 0x00, 0x00, 0x00, 0x02, 0x01, 0x02 };
41 	u_char bn_exp3[] = { 0x00, 0x00, 0x00, 0x03, 0x00, 0x80, 0x09 };
42 
43 	TEST_START("PEEK_U64");
44 	ASSERT_U64_EQ(PEEK_U64(x), 0x1122334455667788ULL);
45 	TEST_DONE();
46 
47 	TEST_START("PEEK_U32");
48 	ASSERT_U32_EQ(PEEK_U32(x), 0x11223344);
49 	TEST_DONE();
50 
51 	TEST_START("PEEK_U16");
52 	ASSERT_U16_EQ(PEEK_U16(x), 0x1122);
53 	TEST_DONE();
54 
55 	TEST_START("POKE_U64");
56 	bzero(d2, sizeof(d2));
57 	POKE_U64(d2, 0x1122334455667788ULL);
58 	ASSERT_MEM_EQ(d2, x, 8);
59 	TEST_DONE();
60 
61 	TEST_START("POKE_U32");
62 	bzero(d2, sizeof(d2));
63 	POKE_U32(d2, 0x11223344);
64 	ASSERT_MEM_EQ(d2, x, 4);
65 	TEST_DONE();
66 
67 	TEST_START("POKE_U16");
68 	bzero(d2, sizeof(d2));
69 	POKE_U16(d2, 0x1122);
70 	ASSERT_MEM_EQ(d2, x, 2);
71 	TEST_DONE();
72 
73 	TEST_START("sshbuf_put");
74 	p1 = sshbuf_new();
75 	ASSERT_PTR_NE(p1, NULL);
76 	ASSERT_INT_EQ(sshbuf_put(p1, x, 5), 0);
77 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 5);
78 	cd = sshbuf_ptr(p1);
79 	ASSERT_PTR_NE(cd, NULL);
80 	ASSERT_U8_EQ(cd[0], 0x11);
81 	ASSERT_U8_EQ(cd[1], 0x22);
82 	ASSERT_U8_EQ(cd[2], 0x33);
83 	ASSERT_U8_EQ(cd[3], 0x44);
84 	ASSERT_U8_EQ(cd[4], 0x55);
85 	TEST_DONE();
86 
87 	TEST_START("sshbuf_get");
88 	ASSERT_INT_EQ(sshbuf_get(p1, d2, 4), 0);
89 	ASSERT_MEM_EQ(d2, x, 4);
90 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 1);
91 	ASSERT_U8_EQ(*(sshbuf_ptr(p1)), 0x55);
92 	TEST_DONE();
93 
94 	TEST_START("sshbuf_get truncated");
95 	r = sshbuf_get(p1, d2, 4);
96 	ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE);
97 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 1);
98 	ASSERT_U8_EQ(*(sshbuf_ptr(p1)), 0x55);
99 	TEST_DONE();
100 
101 	TEST_START("sshbuf_put truncated");
102 	ASSERT_INT_EQ(sshbuf_set_max_size(p1, 4), 0);
103 	r = sshbuf_put(p1, x, 5);
104 	ASSERT_INT_EQ(r, SSH_ERR_NO_BUFFER_SPACE);
105 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 1);
106 	sshbuf_free(p1);
107 	TEST_DONE();
108 
109 	TEST_START("sshbuf_get_u64");
110 	p1 = sshbuf_new();
111 	ASSERT_PTR_NE(p1, NULL);
112 	ASSERT_INT_EQ(sshbuf_put(p1, x, 10), 0);
113 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 10);
114 	ASSERT_INT_EQ(sshbuf_get_u64(p1, &v64), 0);
115 	ASSERT_U64_EQ(v64, 0x1122334455667788ULL);
116 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
117 	TEST_DONE();
118 
119 	TEST_START("sshbuf_get_u64 truncated");
120 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
121 	r = sshbuf_get_u64(p1, &v64);
122 	ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE);
123 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
124 	sshbuf_free(p1);
125 	TEST_DONE();
126 
127 	TEST_START("sshbuf_get_u32");
128 	p1 = sshbuf_new();
129 	ASSERT_PTR_NE(p1, NULL);
130 	ASSERT_INT_EQ(sshbuf_put(p1, x, 10), 0);
131 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 10);
132 	ASSERT_INT_EQ(sshbuf_get_u32(p1, &v32), 0);
133 	ASSERT_U32_EQ(v32, 0x11223344);
134 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 6);
135 	ASSERT_INT_EQ(sshbuf_get_u32(p1, &v32), 0);
136 	ASSERT_U32_EQ(v32, 0x55667788);
137 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
138 	TEST_DONE();
139 
140 	TEST_START("sshbuf_get_u32 truncated");
141 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
142 	r = sshbuf_get_u32(p1, &v32);
143 	ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE);
144 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
145 	sshbuf_free(p1);
146 	TEST_DONE();
147 
148 	TEST_START("sshbuf_get_u16");
149 	p1 = sshbuf_new();
150 	ASSERT_PTR_NE(p1, NULL);
151 	ASSERT_INT_EQ(sshbuf_put(p1, x, 9), 0);
152 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 9);
153 	ASSERT_INT_EQ(sshbuf_get_u16(p1, &v16), 0);
154 	ASSERT_U16_EQ(v16, 0x1122);
155 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 7);
156 	ASSERT_INT_EQ(sshbuf_get_u16(p1, &v16), 0);
157 	ASSERT_U16_EQ(v16, 0x3344);
158 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 5);
159 	ASSERT_INT_EQ(sshbuf_get_u16(p1, &v16), 0);
160 	ASSERT_U16_EQ(v16, 0x5566);
161 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 3);
162 	ASSERT_INT_EQ(sshbuf_get_u16(p1, &v16), 0);
163 	ASSERT_U16_EQ(v16, 0x7788);
164 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 1);
165 	TEST_DONE();
166 
167 	TEST_START("sshbuf_get_u16 truncated");
168 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 1);
169 	r = sshbuf_get_u16(p1, &v16);
170 	ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE);
171 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 1);
172 	sshbuf_free(p1);
173 	TEST_DONE();
174 
175 	TEST_START("sshbuf_get_u8");
176 	p1 = sshbuf_new();
177 	ASSERT_PTR_NE(p1, NULL);
178 	ASSERT_INT_EQ(sshbuf_put(p1, x, 2), 0);
179 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
180 	ASSERT_INT_EQ(sshbuf_get_u8(p1, &v8), 0);
181 	ASSERT_U8_EQ(v8, 0x11);
182 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 1);
183 	ASSERT_INT_EQ(sshbuf_get_u8(p1, &v8), 0);
184 	ASSERT_U8_EQ(v8, 0x22);
185 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 0);
186 	TEST_DONE();
187 
188 	TEST_START("sshbuf_get_u8 truncated");
189 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 0);
190 	r = sshbuf_get_u8(p1, &v8);
191 	ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE);
192 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 0);
193 	sshbuf_free(p1);
194 	TEST_DONE();
195 
196 	TEST_START("sshbuf_put_u64");
197 	p1 = sshbuf_new();
198 	ASSERT_PTR_NE(p1, NULL);
199 	ASSERT_INT_EQ(sshbuf_put_u64(p1, 0x1122334455667788ULL), 0);
200 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 8);
201 	ASSERT_MEM_EQ(sshbuf_ptr(p1), x, 8);
202 	sshbuf_free(p1);
203 	TEST_DONE();
204 
205 	TEST_START("sshbuf_put_u64 exact");
206 	p1 = sshbuf_new();
207 	ASSERT_PTR_NE(p1, NULL);
208 	ASSERT_INT_EQ(sshbuf_set_max_size(p1, 8), 0);
209 	ASSERT_INT_EQ(sshbuf_put_u64(p1, 0x1122334455667788ULL), 0);
210 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 8);
211 	ASSERT_MEM_EQ(sshbuf_ptr(p1), x, 8);
212 	sshbuf_free(p1);
213 	TEST_DONE();
214 
215 	TEST_START("sshbuf_put_u64 limited");
216 	p1 = sshbuf_new();
217 	ASSERT_PTR_NE(p1, NULL);
218 	ASSERT_INT_EQ(sshbuf_set_max_size(p1, 7), 0);
219 	r = sshbuf_put_u64(p1, 0x1122334455667788ULL);
220 	ASSERT_INT_EQ(r, SSH_ERR_NO_BUFFER_SPACE);
221 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 0);
222 	sshbuf_free(p1);
223 	TEST_DONE();
224 
225 	TEST_START("sshbuf_put_u32");
226 	p1 = sshbuf_new();
227 	ASSERT_PTR_NE(p1, NULL);
228 	ASSERT_INT_EQ(sshbuf_put_u32(p1, 0x11223344), 0);
229 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 4);
230 	ASSERT_MEM_EQ(sshbuf_ptr(p1), x, 4);
231 	sshbuf_free(p1);
232 	TEST_DONE();
233 
234 	TEST_START("sshbuf_put_u32 exact");
235 	p1 = sshbuf_new();
236 	ASSERT_PTR_NE(p1, NULL);
237 	ASSERT_INT_EQ(sshbuf_set_max_size(p1, 4), 0);
238 	ASSERT_INT_EQ(sshbuf_put_u32(p1, 0x11223344), 0);
239 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 4);
240 	ASSERT_MEM_EQ(sshbuf_ptr(p1), x, 4);
241 	sshbuf_free(p1);
242 	TEST_DONE();
243 
244 	TEST_START("sshbuf_put_u32 limited");
245 	p1 = sshbuf_new();
246 	ASSERT_PTR_NE(p1, NULL);
247 	ASSERT_INT_EQ(sshbuf_set_max_size(p1, 3), 0);
248 	r = sshbuf_put_u32(p1, 0x11223344);
249 	ASSERT_INT_EQ(r, SSH_ERR_NO_BUFFER_SPACE);
250 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 0);
251 	sshbuf_free(p1);
252 	TEST_DONE();
253 
254 	TEST_START("sshbuf_put_u16");
255 	p1 = sshbuf_new();
256 	ASSERT_PTR_NE(p1, NULL);
257 	ASSERT_INT_EQ(sshbuf_put_u16(p1, 0x1122), 0);
258 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
259 	ASSERT_MEM_EQ(sshbuf_ptr(p1), x, 2);
260 	sshbuf_free(p1);
261 	TEST_DONE();
262 
263 	TEST_START("sshbuf_put_u16");
264 	p1 = sshbuf_new();
265 	ASSERT_PTR_NE(p1, NULL);
266 	ASSERT_INT_EQ(sshbuf_set_max_size(p1, 2), 0);
267 	ASSERT_INT_EQ(sshbuf_put_u16(p1, 0x1122), 0);
268 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
269 	ASSERT_MEM_EQ(sshbuf_ptr(p1), x, 2);
270 	sshbuf_free(p1);
271 	TEST_DONE();
272 
273 	TEST_START("sshbuf_put_u16 limited");
274 	p1 = sshbuf_new();
275 	ASSERT_PTR_NE(p1, NULL);
276 	ASSERT_INT_EQ(sshbuf_set_max_size(p1, 1), 0);
277 	r = sshbuf_put_u16(p1, 0x1122);
278 	ASSERT_INT_EQ(r, SSH_ERR_NO_BUFFER_SPACE);
279 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 0);
280 	sshbuf_free(p1);
281 	TEST_DONE();
282 
283 	TEST_START("sshbuf_get_string");
284 	p1 = sshbuf_new();
285 	ASSERT_PTR_NE(p1, NULL);
286 	ASSERT_INT_EQ(sshbuf_put_u32(p1, sizeof(x)), 0);
287 	ASSERT_INT_EQ(sshbuf_put(p1, x, sizeof(x)), 0);
288 	ASSERT_INT_EQ(sshbuf_put_u32(p1, sizeof(x)), 0);
289 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(x) + 4 + 4);
290 	ASSERT_INT_EQ(sshbuf_get_string(p1, &d, &s), 0);
291 	ASSERT_SIZE_T_EQ(s, sizeof(x));
292 	ASSERT_MEM_EQ(d, x, sizeof(x));
293 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 4);
294 	free(d);
295 	sshbuf_free(p1);
296 	TEST_DONE();
297 
298 	TEST_START("sshbuf_get_string exact");
299 	p1 = sshbuf_new();
300 	ASSERT_PTR_NE(p1, NULL);
301 	ASSERT_INT_EQ(sshbuf_set_max_size(p1, sizeof(x) + 4), 0);
302 	ASSERT_INT_EQ(sshbuf_put_u32(p1, sizeof(x)), 0);
303 	ASSERT_INT_EQ(sshbuf_put(p1, x, sizeof(x)), 0);
304 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(x) + 4);
305 	ASSERT_INT_EQ(sshbuf_get_string(p1, &d, &s), 0);
306 	ASSERT_SIZE_T_EQ(s, sizeof(x));
307 	ASSERT_MEM_EQ(d, x, sizeof(x));
308 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 0);
309 	free(d);
310 	sshbuf_free(p1);
311 	TEST_DONE();
312 
313 	TEST_START("sshbuf_get_string truncated");
314 	p1 = sshbuf_new();
315 	ASSERT_PTR_NE(p1, NULL);
316 	ASSERT_INT_EQ(sshbuf_put_u32(p1, sizeof(x)), 0);
317 	ASSERT_INT_EQ(sshbuf_put(p1, x, sizeof(x)), 0);
318 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(x) + 4);
319 	ASSERT_INT_EQ(sshbuf_consume_end(p1, 1), 0);
320 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(x) + 3);
321 	r = sshbuf_get_string(p1, &d, &s);
322 	ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE);
323 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(x) + 3);
324 	sshbuf_free(p1);
325 	TEST_DONE();
326 
327 	TEST_START("sshbuf_get_string giant");
328 	p1 = sshbuf_new();
329 	ASSERT_PTR_NE(p1, NULL);
330 	ASSERT_INT_EQ(sshbuf_put_u32(p1, 0xffffffff), 0);
331 	ASSERT_INT_EQ(sshbuf_put(p1, x, sizeof(x)), 0);
332 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(x) + 4);
333 	r = sshbuf_get_string(p1, &d, &s);
334 	ASSERT_INT_EQ(r, SSH_ERR_STRING_TOO_LARGE);
335 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(x) + 4);
336 	sshbuf_free(p1);
337 	TEST_DONE();
338 
339 	TEST_START("sshbuf_get_cstring giant");
340 	p1 = sshbuf_new();
341 	ASSERT_PTR_NE(p1, NULL);
342 	ASSERT_INT_EQ(sshbuf_put_u32(p1, 0xffffffff), 0);
343 	ASSERT_INT_EQ(sshbuf_put(p1, x, sizeof(x)), 0);
344 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(x) + 4);
345 	r = sshbuf_get_cstring(p1, &s2, &s);
346 	ASSERT_INT_EQ(r, SSH_ERR_STRING_TOO_LARGE);
347 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(x) + 4);
348 	sshbuf_free(p1);
349 	TEST_DONE();
350 
351 	TEST_START("sshbuf_get_cstring embedded \\0");
352 	p1 = sshbuf_new();
353 	ASSERT_PTR_NE(p1, NULL);
354 	ASSERT_INT_EQ(sshbuf_put_u32(p1, sizeof(x)), 0);
355 	ASSERT_INT_EQ(sshbuf_put(p1, x, sizeof(x)), 0);
356 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(x) + 4);
357 	r = sshbuf_get_cstring(p1, &s2, NULL);
358 	ASSERT_INT_EQ(r, SSH_ERR_INVALID_FORMAT);
359 	sshbuf_free(p1);
360 	TEST_DONE();
361 
362 	TEST_START("sshbuf_get_cstring trailing \\0");
363 	p1 = sshbuf_new();
364 	ASSERT_PTR_NE(p1, NULL);
365 	ASSERT_INT_EQ(sshbuf_put_u32(p1, sizeof(x) - 1), 0);
366 	ASSERT_INT_EQ(sshbuf_put(p1, x, sizeof(x) - 1), 0);
367 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(x) + 4 - 1);
368 	ASSERT_INT_EQ(sshbuf_get_cstring(p1, &s2, &s), 0);
369 	ASSERT_SIZE_T_EQ(s, sizeof(x) - 1);
370 	ASSERT_MEM_EQ(s2, x, s);
371 	free(s2);
372 	sshbuf_free(p1);
373 	TEST_DONE();
374 
375 	TEST_START("sshbuf_put_string");
376 	p1 = sshbuf_new();
377 	ASSERT_PTR_NE(p1, NULL);
378 	ASSERT_INT_EQ(sshbuf_put_string(p1, x, sizeof(x)), 0);
379 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(x) + 4);
380 	ASSERT_U32_EQ(PEEK_U32(sshbuf_ptr(p1)), sizeof(x));
381 	ASSERT_MEM_EQ(sshbuf_ptr(p1) + 4, x, sizeof(x));
382 	sshbuf_free(p1);
383 	TEST_DONE();
384 
385 	TEST_START("sshbuf_put_string limited");
386 	p1 = sshbuf_new();
387 	ASSERT_PTR_NE(p1, NULL);
388 	ASSERT_INT_EQ(sshbuf_set_max_size(p1, sizeof(x) + 4 - 1), 0);
389 	r = sshbuf_put_string(p1, x, sizeof(x));
390 	ASSERT_INT_EQ(r, SSH_ERR_NO_BUFFER_SPACE);
391 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 0);
392 	sshbuf_free(p1);
393 	TEST_DONE();
394 
395 	TEST_START("sshbuf_put_string giant");
396 	p1 = sshbuf_new();
397 	ASSERT_PTR_NE(p1, NULL);
398 	r = sshbuf_put_string(p1, (void *)0x01, 0xfffffffc);
399 	ASSERT_INT_EQ(r, SSH_ERR_NO_BUFFER_SPACE);
400 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 0);
401 	sshbuf_free(p1);
402 	TEST_DONE();
403 
404 	TEST_START("sshbuf_putf");
405 	p1 = sshbuf_new();
406 	ASSERT_PTR_NE(p1, NULL);
407 	r = sshbuf_putf(p1, "%s %d %x", "hello", 23, 0x5f);
408 	ASSERT_INT_EQ(r, 0);
409 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), 11);
410 	ASSERT_MEM_EQ(sshbuf_ptr(p1), "hello 23 5f", 11);
411 	sshbuf_free(p1);
412 	TEST_DONE();
413 
414 	TEST_START("sshbuf_putb");
415 	p1 = sshbuf_new();
416 	ASSERT_PTR_NE(p1, NULL);
417 	p2 = sshbuf_new();
418 	ASSERT_PTR_NE(p2, NULL);
419 	ASSERT_INT_EQ(sshbuf_put(p1, "blahblahblah", 12), 0);
420 	ASSERT_INT_EQ(sshbuf_putb(p2, p1), 0);
421 	sshbuf_free(p1);
422 	ASSERT_SIZE_T_EQ(sshbuf_len(p2), 12);
423 	ASSERT_MEM_EQ(sshbuf_ptr(p2), "blahblahblah", 12);
424 	sshbuf_free(p2);
425 	TEST_DONE();
426 
427 	TEST_START("sshbuf_put_bignum2_bytes empty buf");
428 	p1 = sshbuf_new();
429 	ASSERT_PTR_NE(p1, NULL);
430 	ASSERT_INT_EQ(sshbuf_put_bignum2_bytes(p1, NULL, 0), 0);
431 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(bn_exp1));
432 	ASSERT_MEM_EQ(sshbuf_ptr(p1), bn_exp1, sizeof(bn_exp1));
433 	sshbuf_free(p1);
434 	TEST_DONE();
435 
436 	TEST_START("sshbuf_put_bignum2_bytes all zeroes");
437 	p1 = sshbuf_new();
438 	ASSERT_PTR_NE(p1, NULL);
439 	ASSERT_INT_EQ(sshbuf_put_bignum2_bytes(p1, bn1, sizeof(bn1)), 0);
440 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(bn_exp1));
441 	ASSERT_MEM_EQ(sshbuf_ptr(p1), bn_exp1, sizeof(bn_exp1));
442 	sshbuf_free(p1);
443 	TEST_DONE();
444 
445 	TEST_START("sshbuf_put_bignum2_bytes simple");
446 	p1 = sshbuf_new();
447 	ASSERT_PTR_NE(p1, NULL);
448 	ASSERT_INT_EQ(sshbuf_put_bignum2_bytes(p1, bn2+2, sizeof(bn2)-2), 0);
449 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(bn_exp2));
450 	ASSERT_MEM_EQ(sshbuf_ptr(p1), bn_exp2, sizeof(bn_exp2));
451 	sshbuf_free(p1);
452 	TEST_DONE();
453 
454 	TEST_START("sshbuf_put_bignum2_bytes leading zero");
455 	p1 = sshbuf_new();
456 	ASSERT_PTR_NE(p1, NULL);
457 	ASSERT_INT_EQ(sshbuf_put_bignum2_bytes(p1, bn2, sizeof(bn2)), 0);
458 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(bn_exp2));
459 	ASSERT_MEM_EQ(sshbuf_ptr(p1), bn_exp2, sizeof(bn_exp2));
460 	sshbuf_free(p1);
461 	TEST_DONE();
462 
463 	TEST_START("sshbuf_put_bignum2_bytes neg");
464 	p1 = sshbuf_new();
465 	ASSERT_PTR_NE(p1, NULL);
466 	ASSERT_INT_EQ(sshbuf_put_bignum2_bytes(p1, bn3+1, sizeof(bn3)-1), 0);
467 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(bn_exp3));
468 	ASSERT_MEM_EQ(sshbuf_ptr(p1), bn_exp3, sizeof(bn_exp3));
469 	sshbuf_free(p1);
470 	TEST_DONE();
471 
472 	TEST_START("sshbuf_put_bignum2_bytes neg and leading zero");
473 	p1 = sshbuf_new();
474 	ASSERT_PTR_NE(p1, NULL);
475 	ASSERT_INT_EQ(sshbuf_put_bignum2_bytes(p1, bn3, sizeof(bn3)), 0);
476 	ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(bn_exp3));
477 	ASSERT_MEM_EQ(sshbuf_ptr(p1), bn_exp3, sizeof(bn_exp3));
478 	sshbuf_free(p1);
479 	TEST_DONE();
480 }
481