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