Deleted Added
full compact
check-der.c (102644) check-der.c (120945)
1/*
1/*
2 * Copyright (c) 1999 - 2002 Kungliga Tekniska H�gskolan
2 * Copyright (c) 1999 - 2003 Kungliga Tekniska H�gskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright

--- 27 unchanged lines hidden (view full) ---

38#include <string.h>
39#include <err.h>
40#include <roken.h>
41
42#include <asn1-common.h>
43#include <asn1_err.h>
44#include <der.h>
45
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright

--- 27 unchanged lines hidden (view full) ---

38#include <string.h>
39#include <err.h>
40#include <roken.h>
41
42#include <asn1-common.h>
43#include <asn1_err.h>
44#include <der.h>
45
46RCSID("$Id: check-der.c,v 1.8 2002/08/23 03:17:34 assar Exp $");
46#include "check-common.h"
47
47
48static void
49print_bytes (unsigned const char *buf, size_t len)
50{
51 int i;
48RCSID("$Id: check-der.c,v 1.9 2003/01/23 10:19:49 lha Exp $");
52
49
53 for (i = 0; i < len; ++i)
54 printf ("%02x ", buf[i]);
55}
56
57struct test_case {
58 void *val;
59 int byte_len;
60 const unsigned char *bytes;
61 char *name;
62};
63
64static int
50static int
65generic_test (const struct test_case *tests,
66 unsigned ntests,
67 size_t data_size,
68 int (*encode)(unsigned char *, size_t, void *, size_t *),
69 int (*length)(void *),
70 int (*decode)(unsigned char *, size_t, void *, size_t *),
71 int (*cmp)(void *a, void *b))
72{
73 unsigned char buf[4711];
74 int i;
75 int failures = 0;
76 void *val = malloc (data_size);
77
78 if (data_size != 0 && val == NULL)
79 err (1, "malloc");
80
81 for (i = 0; i < ntests; ++i) {
82 int ret;
83 size_t sz, consumed_sz, length_sz;
84 unsigned char *beg;
85
86 ret = (*encode) (buf + sizeof(buf) - 1, sizeof(buf),
87 tests[i].val, &sz);
88 beg = buf + sizeof(buf) - sz;
89 if (ret != 0) {
90 printf ("encoding of %s failed\n", tests[i].name);
91 ++failures;
92 }
93 if (sz != tests[i].byte_len) {
94 printf ("encoding of %s has wrong len (%lu != %lu)\n",
95 tests[i].name,
96 (unsigned long)sz, (unsigned long)tests[i].byte_len);
97 ++failures;
98 }
99
100 length_sz = (*length) (tests[i].val);
101 if (sz != length_sz) {
102 printf ("length for %s is bad (%lu != %lu)\n",
103 tests[i].name, (unsigned long)length_sz, (unsigned long)sz);
104 ++failures;
105 }
106
107 if (memcmp (beg, tests[i].bytes, tests[i].byte_len) != 0) {
108 printf ("encoding of %s has bad bytes:\n"
109 "correct: ", tests[i].name);
110 print_bytes (tests[i].bytes, tests[i].byte_len);
111 printf ("\nactual: ");
112 print_bytes (beg, sz);
113 printf ("\n");
114 ++failures;
115 }
116 ret = (*decode) (beg, sz, val, &consumed_sz);
117 if (ret != 0) {
118 printf ("decoding of %s failed\n", tests[i].name);
119 ++failures;
120 }
121 if (sz != consumed_sz) {
122 printf ("different length decoding %s (%ld != %ld)\n",
123 tests[i].name,
124 (unsigned long)sz, (unsigned long)consumed_sz);
125 ++failures;
126 }
127 if ((*cmp)(val, tests[i].val) != 0) {
128 printf ("%s: comparison failed\n", tests[i].name);
129 ++failures;
130 }
131 }
132 free (val);
133 return failures;
134}
135
136static int
137cmp_integer (void *a, void *b)
138{
139 int *ia = (int *)a;
140 int *ib = (int *)b;
141
142 return *ib - *ia;
143}
144

--- 20 unchanged lines hidden (view full) ---

165 int ntests = sizeof(tests) / sizeof(*tests);
166
167 for (i = 0; i < ntests; ++i) {
168 tests[i].val = &values[i];
169 asprintf (&tests[i].name, "integer %d", values[i]);
170 }
171
172 return generic_test (tests, ntests, sizeof(int),
51cmp_integer (void *a, void *b)
52{
53 int *ia = (int *)a;
54 int *ib = (int *)b;
55
56 return *ib - *ia;
57}
58

--- 20 unchanged lines hidden (view full) ---

79 int ntests = sizeof(tests) / sizeof(*tests);
80
81 for (i = 0; i < ntests; ++i) {
82 tests[i].val = &values[i];
83 asprintf (&tests[i].name, "integer %d", values[i]);
84 }
85
86 return generic_test (tests, ntests, sizeof(int),
173 (int (*)(unsigned char *, size_t,
174 void *, size_t *))encode_integer,
175 (int (*)(void *))length_integer,
176 (int (*)(unsigned char *, size_t,
177 void *, size_t *))decode_integer,
87 (generic_encode)encode_integer,
88 (generic_length) length_integer,
89 (generic_decode)decode_integer,
178 cmp_integer);
179}
180
181static int
182cmp_octet_string (void *a, void *b)
183{
184 octet_string *oa = (octet_string *)a;
185 octet_string *ob = (octet_string *)b;

--- 13 unchanged lines hidden (view full) ---

199 {NULL, 10, "\x04\x08\x01\x23\x45\x67\x89\xab\xcd\xef"}
200 };
201 int ntests = sizeof(tests) / sizeof(*tests);
202
203 tests[0].val = &s1;
204 asprintf (&tests[0].name, "a octet string");
205
206 return generic_test (tests, ntests, sizeof(octet_string),
90 cmp_integer);
91}
92
93static int
94cmp_octet_string (void *a, void *b)
95{
96 octet_string *oa = (octet_string *)a;
97 octet_string *ob = (octet_string *)b;

--- 13 unchanged lines hidden (view full) ---

111 {NULL, 10, "\x04\x08\x01\x23\x45\x67\x89\xab\xcd\xef"}
112 };
113 int ntests = sizeof(tests) / sizeof(*tests);
114
115 tests[0].val = &s1;
116 asprintf (&tests[0].name, "a octet string");
117
118 return generic_test (tests, ntests, sizeof(octet_string),
207 (int (*)(unsigned char *, size_t,
208 void *, size_t *))encode_octet_string,
209 (int (*)(void *))length_octet_string,
210 (int (*)(unsigned char *, size_t,
211 void *, size_t *))decode_octet_string,
119 (generic_encode)encode_octet_string,
120 (generic_length)length_octet_string,
121 (generic_decode)decode_octet_string,
212 cmp_octet_string);
213}
214
215static int
216cmp_general_string (void *a, void *b)
217{
218 unsigned char **sa = (unsigned char **)a;
219 unsigned char **sb = (unsigned char **)b;

--- 10 unchanged lines hidden (view full) ---

230 {NULL, 13, "\x1b\x0b\x54\x65\x73\x74\x20\x55\x73\x65\x72\x20\x31"}
231 };
232 int ntests = sizeof(tests) / sizeof(*tests);
233
234 tests[0].val = &s1;
235 asprintf (&tests[0].name, "the string \"%s\"", s1);
236
237 return generic_test (tests, ntests, sizeof(unsigned char *),
122 cmp_octet_string);
123}
124
125static int
126cmp_general_string (void *a, void *b)
127{
128 unsigned char **sa = (unsigned char **)a;
129 unsigned char **sb = (unsigned char **)b;

--- 10 unchanged lines hidden (view full) ---

140 {NULL, 13, "\x1b\x0b\x54\x65\x73\x74\x20\x55\x73\x65\x72\x20\x31"}
141 };
142 int ntests = sizeof(tests) / sizeof(*tests);
143
144 tests[0].val = &s1;
145 asprintf (&tests[0].name, "the string \"%s\"", s1);
146
147 return generic_test (tests, ntests, sizeof(unsigned char *),
238 (int (*)(unsigned char *, size_t,
239 void *, size_t *))encode_general_string,
240 (int (*)(void *))length_general_string,
241 (int (*)(unsigned char *, size_t,
242 void *, size_t *))decode_general_string,
148 (generic_encode)encode_general_string,
149 (generic_length)length_general_string,
150 (generic_decode)decode_general_string,
243 cmp_general_string);
244}
245
246static int
247cmp_generalized_time (void *a, void *b)
248{
249 time_t *ta = (time_t *)a;
250 time_t *tb = (time_t *)b;

--- 13 unchanged lines hidden (view full) ---

264 int ntests = sizeof(tests) / sizeof(*tests);
265
266 for (i = 0; i < ntests; ++i) {
267 tests[i].val = &values[i];
268 asprintf (&tests[i].name, "time %d", (int)values[i]);
269 }
270
271 return generic_test (tests, ntests, sizeof(time_t),
151 cmp_general_string);
152}
153
154static int
155cmp_generalized_time (void *a, void *b)
156{
157 time_t *ta = (time_t *)a;
158 time_t *tb = (time_t *)b;

--- 13 unchanged lines hidden (view full) ---

172 int ntests = sizeof(tests) / sizeof(*tests);
173
174 for (i = 0; i < ntests; ++i) {
175 tests[i].val = &values[i];
176 asprintf (&tests[i].name, "time %d", (int)values[i]);
177 }
178
179 return generic_test (tests, ntests, sizeof(time_t),
272 (int (*)(unsigned char *, size_t,
273 void *, size_t *))encode_generalized_time,
274 (int (*)(void *))length_generalized_time,
275 (int (*)(unsigned char *, size_t,
276 void *, size_t *))decode_generalized_time,
180 (generic_encode)encode_generalized_time,
181 (generic_length)length_generalized_time,
182 (generic_decode)decode_generalized_time,
277 cmp_generalized_time);
278}
279
280int
281main(int argc, char **argv)
282{
283 int ret = 0;
284
285 ret += test_integer ();
286 ret += test_octet_string ();
287 ret += test_general_string ();
288 ret += test_generalized_time ();
289
290 return ret;
291}
183 cmp_generalized_time);
184}
185
186int
187main(int argc, char **argv)
188{
189 int ret = 0;
190
191 ret += test_integer ();
192 ret += test_octet_string ();
193 ret += test_general_string ();
194 ret += test_generalized_time ();
195
196 return ret;
197}