diff options
author | tb <> | 2019-01-27 01:13:20 +0000 |
---|---|---|
committer | tb <> | 2019-01-27 01:13:20 +0000 |
commit | 0b90de7cbb515ddd65391d84b8bedb938a707abb (patch) | |
tree | 3505fab6fad1f3f38e660180c0d8a49fbff6a4b5 | |
parent | 1618a68362353d3601eb0795604f0f319e466550 (diff) | |
download | openbsd-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.c | 129 |
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 | ||
132 | const size_t stateinfo_count = sizeof(stateinfo) / sizeof(stateinfo[0]); | 132 | const size_t stateinfo_count = sizeof(stateinfo) / sizeof(stateinfo[0]); |
133 | 133 | ||
134 | void build_table(enum tls13_message_type | 134 | void 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, |
137 | size_t count_handshakes(void); | 137 | struct child path[], uint8_t flags, unsigned int depth); |
138 | const char *flag2str(uint8_t flag); | 138 | size_t count_handshakes(void); |
139 | int generate_graphics(void); | 139 | void edge(enum tls13_message_type start, |
140 | void 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); | 141 | const char *flag2str(uint8_t flag); |
142 | void fprint_flags(FILE *stream, uint8_t flags); | 142 | void flag_label(uint8_t flag); |
143 | const char *mt2str(enum tls13_message_type mt); | 143 | void forced_edges(enum tls13_message_type start, |
144 | __dead void usage(void); | 144 | enum tls13_message_type end, uint8_t forced); |
145 | int verify_table(enum tls13_message_type | 145 | int generate_graphics(void); |
146 | table[UINT8_MAX][TLS13_NUM_MESSAGE_TYPES], int print); | 146 | void fprint_entry(FILE *stream, |
147 | enum tls13_message_type path[TLS13_NUM_MESSAGE_TYPES], | ||
148 | uint8_t flags); | ||
149 | void fprint_flags(FILE *stream, uint8_t flags); | ||
150 | const char *mt2str(enum tls13_message_type mt); | ||
151 | __dead void usage(void); | ||
152 | int verify_table(enum tls13_message_type | ||
153 | table[UINT8_MAX][TLS13_NUM_MESSAGE_TYPES], int print); | ||
147 | 154 | ||
148 | const char * | 155 | const char * |
149 | flag2str(uint8_t flag) | 156 | flag2str(uint8_t flag) |
@@ -269,8 +276,8 @@ fprint_flags(FILE *stream, uint8_t flags) | |||
269 | } | 276 | } |
270 | 277 | ||
271 | void | 278 | void |
272 | fprint_entry(FILE *stream, enum tls13_message_type path[TLS13_NUM_MESSAGE_TYPES], | 279 | fprint_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 | ||
296 | void | ||
297 | edge(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 | |||
305 | void | ||
306 | flag_label(uint8_t flag) | ||
307 | { | ||
308 | if (flag) | ||
309 | printf(" [label=\"%s\"]", flag2str(flag)); | ||
310 | } | ||
311 | |||
312 | void | ||
313 | forced_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 | |||
289 | int | 328 | int |
290 | generate_graphics(void) | 329 | generate_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 | ||
334 | extern enum tls13_message_type handshakes[][TLS13_NUM_MESSAGE_TYPES]; | 357 | extern enum tls13_message_type handshakes[][TLS13_NUM_MESSAGE_TYPES]; |
335 | extern size_t handshake_count; | 358 | extern size_t handshake_count; |
336 | 359 | ||
337 | size_t | 360 | size_t |
338 | count_handshakes(void) | 361 | count_handshakes(void) |