test_sshbuf_getput_basic.c revision 323134
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
23void sshbuf_getput_basic_tests(void);
24
25void
26sshbuf_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