summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortb <>2019-01-27 01:13:20 +0000
committertb <>2019-01-27 01:13:20 +0000
commit0b90de7cbb515ddd65391d84b8bedb938a707abb (patch)
tree3505fab6fad1f3f38e660180c0d8a49fbff6a4b5
parent1618a68362353d3601eb0795604f0f319e466550 (diff)
downloadopenbsd-0b90de7cbb515ddd65391d84b8bedb938a707abb.tar.gz
openbsd-0b90de7cbb515ddd65391d84b8bedb938a707abb.tar.bz2
openbsd-0b90de7cbb515ddd65391d84b8bedb938a707abb.zip
refactor and clean up the code generating dot output.
-rw-r--r--src/regress/lib/libssl/handshake/handshake_table.c129
1 files changed, 76 insertions, 53 deletions
diff --git a/src/regress/lib/libssl/handshake/handshake_table.c b/src/regress/lib/libssl/handshake/handshake_table.c
index 23b1db3216..6d2fb9842b 100644
--- a/src/regress/lib/libssl/handshake/handshake_table.c
+++ b/src/regress/lib/libssl/handshake/handshake_table.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: handshake_table.c,v 1.7 2019/01/25 01:21:44 tb Exp $ */ 1/* $OpenBSD: handshake_table.c,v 1.8 2019/01/27 01:13:20 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2019 Theo Buehler <tb@openbsd.org> 3 * Copyright (c) 2019 Theo Buehler <tb@openbsd.org>
4 * 4 *
@@ -129,21 +129,28 @@ static struct child stateinfo[][TLS13_NUM_MESSAGE_TYPES] = {
129 }, 129 },
130}; 130};
131 131
132const size_t stateinfo_count = sizeof(stateinfo) / sizeof(stateinfo[0]); 132const size_t stateinfo_count = sizeof(stateinfo) / sizeof(stateinfo[0]);
133 133
134void build_table(enum tls13_message_type 134void build_table(enum tls13_message_type
135 table[UINT8_MAX][TLS13_NUM_MESSAGE_TYPES], struct child current, 135 table[UINT8_MAX][TLS13_NUM_MESSAGE_TYPES],
136 struct child end, struct child path[], uint8_t flags, unsigned int depth); 136 struct child current, struct child end,
137size_t count_handshakes(void); 137 struct child path[], uint8_t flags, unsigned int depth);
138const char *flag2str(uint8_t flag); 138size_t count_handshakes(void);
139int generate_graphics(void); 139void edge(enum tls13_message_type start,
140void fprint_entry(FILE *stream, 140 enum tls13_message_type end, uint8_t flag);
141 enum tls13_message_type path[TLS13_NUM_MESSAGE_TYPES], uint8_t flags); 141const char *flag2str(uint8_t flag);
142void fprint_flags(FILE *stream, uint8_t flags); 142void flag_label(uint8_t flag);
143const char *mt2str(enum tls13_message_type mt); 143void forced_edges(enum tls13_message_type start,
144__dead void usage(void); 144 enum tls13_message_type end, uint8_t forced);
145int verify_table(enum tls13_message_type 145int generate_graphics(void);
146 table[UINT8_MAX][TLS13_NUM_MESSAGE_TYPES], int print); 146void fprint_entry(FILE *stream,
147 enum tls13_message_type path[TLS13_NUM_MESSAGE_TYPES],
148 uint8_t flags);
149void fprint_flags(FILE *stream, uint8_t flags);
150const char *mt2str(enum tls13_message_type mt);
151__dead void usage(void);
152int verify_table(enum tls13_message_type
153 table[UINT8_MAX][TLS13_NUM_MESSAGE_TYPES], int print);
147 154
148const char * 155const char *
149flag2str(uint8_t flag) 156flag2str(uint8_t flag)
@@ -269,8 +276,8 @@ fprint_flags(FILE *stream, uint8_t flags)
269} 276}
270 277
271void 278void
272fprint_entry(FILE *stream, enum tls13_message_type path[TLS13_NUM_MESSAGE_TYPES], 279fprint_entry(FILE *stream,
273 uint8_t flags) 280 enum tls13_message_type path[TLS13_NUM_MESSAGE_TYPES], uint8_t flags)
274{ 281{
275 int i; 282 int i;
276 283
@@ -286,44 +293,60 @@ fprint_entry(FILE *stream, enum tls13_message_type path[TLS13_NUM_MESSAGE_TYPES]
286 fprintf(stream, "\t},\n"); 293 fprintf(stream, "\t},\n");
287} 294}
288 295
296void
297edge(enum tls13_message_type start, enum tls13_message_type end,
298 uint8_t flag)
299{
300 printf("\t%s -> %s", mt2str(start), mt2str(end));
301 flag_label(flag);
302 printf(";\n");
303}
304
305void
306flag_label(uint8_t flag)
307{
308 if (flag)
309 printf(" [label=\"%s\"]", flag2str(flag));
310}
311
312void
313forced_edges(enum tls13_message_type start, enum tls13_message_type end,
314 uint8_t forced)
315{
316 uint8_t forced_flag, i;
317
318 if (forced == 0)
319 return;
320
321 for (i = 0; i < 8; i++) {
322 forced_flag = forced & (1U << i);
323 if (forced_flag)
324 edge(start, end, forced_flag);
325 }
326}
327
289int 328int
290generate_graphics(void) 329generate_graphics(void)
291{ 330{
292 unsigned int start, end; 331 enum tls13_message_type start, end;
293 uint8_t flag; 332 unsigned int child;
294 uint8_t forced, illegal; 333 uint8_t flag;
334 uint8_t forced;
295 335
296 printf("digraph G {\n"); 336 printf("digraph G {\n");
297 printf("\t%s [shape=box]\n", mt2str(CLIENT_HELLO)); 337 printf("\t%s [shape=box];\n", mt2str(CLIENT_HELLO));
298 printf("\t%s [shape=box]\n", mt2str(APPLICATION_DATA)); 338 printf("\t%s [shape=box];\n", mt2str(APPLICATION_DATA));
299 339
300 for (start = 1; start < stateinfo_count - 1; start++) { 340 for (start = CLIENT_HELLO; start < APPLICATION_DATA; start++) {
301 for (end = 0; stateinfo[start][end].mt != 0; end++) { 341 for (child = 0; stateinfo[start][child].mt != 0; child++) {
302 flag = stateinfo[start][end].flag; 342 end = stateinfo[start][child].mt;
303 forced = stateinfo[start][end].forced; 343 flag = stateinfo[start][child].flag;
304 illegal = stateinfo[start][end].illegal; 344 forced = stateinfo[start][child].forced;
305 345
306 printf("\t%s -> %s", mt2str(start), 346 if (forced == 0)
307 mt2str(stateinfo[start][end].mt)); 347 edge(start, end, flag);
308 348 else
309 if (flag || forced || illegal) 349 forced_edges(start, end, forced);
310 printf(" [");
311 if (flag)
312 printf("label=\"%s\"%s", flag2str(flag),
313 (forced || illegal) ? ", " : "");
314 if (forced) {
315 printf("label=\"if ");
316 fprint_flags(stdout, forced);
317 printf("\"%s", illegal ? ", " : "");
318 }
319 if (illegal) {
320 printf("label=\"not if ");
321 fprint_flags(stdout, illegal);
322 printf("\"");
323 }
324 if (flag || forced || illegal)
325 printf("]");
326 printf(";\n");
327 } 350 }
328 } 351 }
329 352
@@ -331,8 +354,8 @@ generate_graphics(void)
331 return 0; 354 return 0;
332} 355}
333 356
334extern enum tls13_message_type handshakes[][TLS13_NUM_MESSAGE_TYPES]; 357extern enum tls13_message_type handshakes[][TLS13_NUM_MESSAGE_TYPES];
335extern size_t handshake_count; 358extern size_t handshake_count;
336 359
337size_t 360size_t
338count_handshakes(void) 361count_handshakes(void)