From a4e1902ddcc50a64e94abd60f58d1e93cc3bbfb6 Mon Sep 17 00:00:00 2001 From: Bebbo <bartolomeo.mueller@stud.h-da.de> Date: Thu, 24 Oct 2024 10:31:00 +0200 Subject: [PATCH] Added sequence diagram --- .../emulation-exp/code/kex/docs/Makefile | 3 + .../code/kex/docs/sequence_diagram.pdf | Bin 0 -> 175167 bytes .../code/kex/docs/sequence_diagram.puml | 43 ++ .../code/kex/scripts/generate_graphs.py | 625 ++++++++++++++++-- 4 files changed, 607 insertions(+), 64 deletions(-) create mode 100644 pq-tls-benchmark-framework/emulation-exp/code/kex/docs/Makefile create mode 100644 pq-tls-benchmark-framework/emulation-exp/code/kex/docs/sequence_diagram.pdf create mode 100644 pq-tls-benchmark-framework/emulation-exp/code/kex/docs/sequence_diagram.puml diff --git a/pq-tls-benchmark-framework/emulation-exp/code/kex/docs/Makefile b/pq-tls-benchmark-framework/emulation-exp/code/kex/docs/Makefile new file mode 100644 index 000000000..fefa43230 --- /dev/null +++ b/pq-tls-benchmark-framework/emulation-exp/code/kex/docs/Makefile @@ -0,0 +1,3 @@ + +sequence_diagram.pdf: sequence_diagram.puml + plantuml -tpdf $< diff --git a/pq-tls-benchmark-framework/emulation-exp/code/kex/docs/sequence_diagram.pdf b/pq-tls-benchmark-framework/emulation-exp/code/kex/docs/sequence_diagram.pdf new file mode 100644 index 0000000000000000000000000000000000000000..50f677da2ba13b84ddbd7111e8f27ea4a396b5f2 GIT binary patch literal 175167 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 literal 0 HcmV?d00001 diff --git a/pq-tls-benchmark-framework/emulation-exp/code/kex/docs/sequence_diagram.puml b/pq-tls-benchmark-framework/emulation-exp/code/kex/docs/sequence_diagram.puml new file mode 100644 index 000000000..c30ee26c6 --- /dev/null +++ b/pq-tls-benchmark-framework/emulation-exp/code/kex/docs/sequence_diagram.puml @@ -0,0 +1,43 @@ +@startuml sequence_diagram +activate Client +Client -> Client: do_tls_handshake() +activate Client + +' activate NetEm +' ' ||1|| +' deactivate NetEm + +Client -> Client: KeyGen() +activate Client +deactivate Client +Client -> NetEm: { Client Hello } + +' Client -> Client: waiting for response +' deactivate Client +' ... Client waiting ... +' deactivate Client + +activate NetEm +NetEm -> Server: { Client Hello } +' ... Server waiting ... +deactivate NetEm +activate Server +Server -> Server: generate_response() +activate Server +Server -> Server: Encaps() +activate Server +deactivate Server +deactivate Server +' Server -> NetEm: Server Hello, Encrypted Extensions, Certificate, Certificate Verify,Finished +Server -> NetEm: { Server Hello, Certificate, Finished } +deactivate Server + +activate NetEm +NetEm -> Client: { Server Hello, Certificate, Finished } +deactivate NetEm + +Client -> Client: Decaps() +activate Client +deactivate Client +deactivate Client +@enduml diff --git a/pq-tls-benchmark-framework/emulation-exp/code/kex/scripts/generate_graphs.py b/pq-tls-benchmark-framework/emulation-exp/code/kex/scripts/generate_graphs.py index 086e5f193..6adcbba69 100755 --- a/pq-tls-benchmark-framework/emulation-exp/code/kex/scripts/generate_graphs.py +++ b/pq-tls-benchmark-framework/emulation-exp/code/kex/scripts/generate_graphs.py @@ -1,6 +1,7 @@ #!/usr/bin/env python from functools import cmp_to_key +import colorsys import os import sys @@ -18,17 +19,17 @@ PLOTS_DIR = "plots" FEATHERS_DIR = "feathers" cmap = plt.cm.hsv - -# TODO use the riqr to make some graphs +# cmap = plt.colormaps.get_cmap("nipy_spectral") def main(): data = load_data() # generally they both only seconds for graphs when not generating for single algorithms + # plot_general_plots() # takes about 4 seconds plot_lines(data) # takes about 1:50 min # plot_static_data(data) # takes about 4 min - # plot_general_plots() # takes about 4 seconds + # plot_distributions(data) def load_data(): @@ -215,6 +216,7 @@ def filter_data( protocol: str | None = None, sec_level: str | list[str] | None = None, kem_alg: str | None = None, + drop_zero_columns: bool = True, ): filtered_data = data # print(filtered_data["kem_alg"] == "x25519") # is a boolean series @@ -241,7 +243,11 @@ def filter_data( ] return data.drop(columns=zero_columns_to_drop) - filtered_data = drop_columns_with_only_zero_values(filtered_data) + if drop_zero_columns and "measurements" in data.columns: + filtered_data = drop_columns_with_only_zero_values(filtered_data) + + # if drop_zero_columns: + # filtered_data = drop_columns_with_only_zero_values(filtered_data) # print(filtered_data["measurements"].head()) # print(filtered_data) @@ -269,7 +275,7 @@ def get_x_axis(scenario, data, length): case "rate_server": return data["srv_rate"] case "static": - return list(range(length)) + return pd.Series(range(length)) case _: print(f"NO MATCH FOUND FOR {scenario}", file=sys.stderr) sys.exit(1) @@ -289,6 +295,327 @@ def map_security_level_hybrid_together(sec_level: str): return None +def get_color_and_mode(kem_alg: str, combined_with_hybrids: bool = False): + # NOTE maybe just use hle colors directly from the start + primary_mode = "-" + secondary_mode = "--" if combined_with_hybrids else "-" + tertiary_mode = ":" if combined_with_hybrids else "--" + + secondary_lightness_factor = 0.9 if combined_with_hybrids else 1 + tertiary_lightness_factor = 0.8 if combined_with_hybrids else 0.9 + + a = 0.8 if combined_with_hybrids else 1 + + no_algos = 8 + match kem_alg: + case "secp256r1": + return cmap(0 / no_algos), primary_mode + case "secp384r1": + return cmap(0.3 / no_algos), primary_mode + case "secp521r1": + return cmap(0.6 / no_algos), primary_mode + case "x25519": + return cmap(0 / no_algos), secondary_mode + case "x448": + return cmap(0.3 / no_algos), secondary_mode + case "mlkem512": + return cmap(1 / no_algos), primary_mode + case "p256_mlkem512": + return ( + transform_cmap_color( + cmap(1 / no_algos), + alpha_factor=a, + lightness_factor=secondary_lightness_factor, + ), + secondary_mode, + ) + case "x25519_mlkem512": + return ( + transform_cmap_color( + cmap(1 / no_algos), + alpha_factor=a, + lightness_factor=tertiary_lightness_factor, + ), + tertiary_mode, + ) + case "mlkem768": + return cmap(1.3 / no_algos), primary_mode + case "p384_mlkem768": + return ( + transform_cmap_color( + cmap(1.3 / no_algos), + alpha_factor=a, + lightness_factor=secondary_lightness_factor, + ), + secondary_mode, + ) + case "x448_mlkem768": + return ( + transform_cmap_color( + cmap(1.3 / no_algos), + alpha_factor=a, + lightness_factor=tertiary_lightness_factor, + ), + tertiary_mode, + ) + case "mlkem1024": + return cmap(1.6 / no_algos), primary_mode + case "p521_mlkem1024": + return ( + transform_cmap_color( + cmap(1.6 / no_algos), + alpha_factor=a, + lightness_factor=secondary_lightness_factor, + ), + secondary_mode, + ) + case "bikel1": + return cmap(2 / no_algos), primary_mode + case "p256_bikel1": + return ( + transform_cmap_color( + cmap(2 / no_algos), + alpha_factor=a, + lightness_factor=secondary_lightness_factor, + ), + secondary_mode, + ) + case "x25519_bikel1": + return ( + transform_cmap_color( + cmap(2 / no_algos), + alpha_factor=a, + lightness_factor=tertiary_lightness_factor, + ), + tertiary_mode, + ) + case "bikel3": + return cmap(2.3 / no_algos), primary_mode + case "p384_bikel3": + return ( + transform_cmap_color( + cmap(2.3 / no_algos), + alpha_factor=a, + lightness_factor=secondary_lightness_factor, + ), + secondary_mode, + ) + case "x448_bikel3": + return ( + transform_cmap_color( + cmap(2.3 / no_algos), + alpha_factor=a, + lightness_factor=tertiary_lightness_factor, + ), + tertiary_mode, + ) + case "bikel5": + return cmap(2.6 / no_algos), primary_mode + case "p521_bikel5": + return ( + transform_cmap_color( + cmap(2.6 / no_algos), + alpha_factor=a, + lightness_factor=secondary_lightness_factor, + ), + secondary_mode, + ) + case "hqc128": + return cmap(4 / no_algos), primary_mode + case "p256_hqc128": + return ( + transform_cmap_color( + cmap(4 / no_algos), + alpha_factor=a, + lightness_factor=secondary_lightness_factor, + ), + secondary_mode, + ) + case "x25519_hqc128": + return ( + transform_cmap_color( + cmap(4 / no_algos), + alpha_factor=a, + lightness_factor=tertiary_lightness_factor, + ), + tertiary_mode, + ) + case "hqc192": + return cmap(4.3 / no_algos), primary_mode + case "p384_hqc192": + return ( + transform_cmap_color( + cmap(4.3 / no_algos), + alpha_factor=a, + lightness_factor=secondary_lightness_factor, + ), + secondary_mode, + ) + case "x448_hqc192": + return ( + transform_cmap_color( + cmap(4.3 / no_algos), + alpha_factor=a, + lightness_factor=tertiary_lightness_factor, + ), + tertiary_mode, + ) + case "hqc256": + return cmap(4.6 / no_algos), primary_mode + case "p521_hqc256": + return ( + transform_cmap_color( + cmap(4.6 / no_algos), + alpha_factor=a, + lightness_factor=secondary_lightness_factor, + ), + secondary_mode, + ) + case "frodo640aes": + return cmap(5 / no_algos), primary_mode + case "p256_frodo640aes": + return ( + transform_cmap_color( + cmap(5 / no_algos), + alpha_factor=a, + lightness_factor=secondary_lightness_factor, + ), + secondary_mode, + ) + case "x25519_frodo640aes": + return ( + transform_cmap_color( + cmap(5 / no_algos), + alpha_factor=a, + lightness_factor=tertiary_lightness_factor, + ), + tertiary_mode, + ) + case "frodo640shake": + return cmap(6 / no_algos), primary_mode + case "p256_frodo640shake": + return ( + transform_cmap_color( + cmap(6 / no_algos), + alpha_factor=a, + lightness_factor=secondary_lightness_factor, + ), + secondary_mode, + ) + case "x25519_frodo640shake": + return ( + transform_cmap_color( + cmap(6 / no_algos), + alpha_factor=a, + lightness_factor=tertiary_lightness_factor, + ), + tertiary_mode, + ) + case "frodo976aes": + return cmap(5.3 / no_algos), primary_mode + case "p384_frodo976aes": + return ( + transform_cmap_color( + cmap(5.3 / no_algos), + alpha_factor=a, + lightness_factor=secondary_lightness_factor, + ), + secondary_mode, + ) + case "x448_frodo976aes": + return ( + transform_cmap_color( + cmap(5.3 / no_algos), + alpha_factor=a, + lightness_factor=tertiary_lightness_factor, + ), + tertiary_mode, + ) + case "frodo976shake": + return cmap(6.3 / no_algos), primary_mode + case "p384_frodo976shake": + return ( + transform_cmap_color( + cmap(6.3 / no_algos), + alpha_factor=a, + lightness_factor=secondary_lightness_factor, + ), + secondary_mode, + ) + case "x448_frodo976shake": + return ( + transform_cmap_color( + cmap(6.3 / no_algos), + alpha_factor=a, + lightness_factor=tertiary_lightness_factor, + ), + tertiary_mode, + ) + case "frodo1344aes": + return cmap(5.6 / no_algos), primary_mode + case "p521_frodo1344aes": + return ( + transform_cmap_color( + cmap(5.6 / no_algos), + alpha_factor=a, + lightness_factor=secondary_lightness_factor, + ), + secondary_mode, + ) + case "frodo1344shake": + return cmap(6.6 / no_algos), primary_mode + case "p521_frodo1344shake": + return ( + transform_cmap_color( + cmap(6.6 / no_algos), + alpha_factor=a, + lightness_factor=secondary_lightness_factor, + ), + secondary_mode, + ) + case "x25519_mlkem768": + return ( + transform_cmap_color(cmap(7 / no_algos), alpha_factor=a), + primary_mode, + ) + case "p256_mlkem768": + return ( + transform_cmap_color( + cmap(7.5 / no_algos), lightness_factor=secondary_lightness_factor + ), + primary_mode, + ) + case "p384_mlkem1024": + return ( + transform_cmap_color( + cmap(7.99 / no_algos), lightness_factor=tertiary_lightness_factor + ), + primary_mode, + ) + case _: + print(f"NO COLOR MATCH FOUND FOR {kem_alg}", file=sys.stderr) + sys.exit(1) + + +def transform_cmap_color( + color, hue_shift=0, saturation_factor=1, lightness_factor=1, alpha_factor=1 +): + def value_between(minimum, value, maximum): + return max(minimum, min(value, maximum)) + + r, g, b, a = color + h, l, s = colorsys.rgb_to_hls(r, g, b) + h += hue_shift + l *= lightness_factor + l = value_between(0, l, 1) + s *= saturation_factor + s = value_between(0, s, 1) + r, g, b = colorsys.hls_to_rgb(h, l, s) + a *= alpha_factor + return r, g, b, a + + +# plots lines of different statistical values def plot_lines(data): def plot_lines_for_sec_level( data, line_type="median", combined_with_hybrids: bool = False @@ -323,7 +650,11 @@ def plot_lines(data): for idx, kem_alg in enumerate( filtered_data["kem_alg"].unique().sort_values() ): - color = cmap(idx / len(filtered_data["kem_alg"].unique())) + # color = cmap(idx / len(filtered_data["kem_alg"].unique())) + color, mode = get_color_and_mode( + kem_alg, combined_with_hybrids=combined_with_hybrids + ) + filtered_data_single_kem_alg = filter_data( filtered_data, kem_alg=kem_alg ) @@ -338,7 +669,7 @@ def plot_lines(data): # print(f"y: {y}") # plt.fill_between(x, filtered_data_single_kem_alg["qtl_25"], filtered_data_single_kem_alg["qtl_75"], alpha=0.2, color=color) - plt.plot(x, y, linestyle="-", marker=".", color=color, label=kem_alg) + plt.plot(x, y, linestyle=mode, marker=".", color=color, label=kem_alg) plt.ylim(bottom=0) plt.xlim(left=0) @@ -358,7 +689,7 @@ def plot_lines(data): subdir = "combined-with-hybrids/" appendix = "-combined-with-hybrids" plt.savefig( - f"{PLOTS_DIR}/{line_type}s-of-sec-level/{subdir}{line_type}-{row['scenario']}-{row['protocol']}-{row['sec_level']}{appendix}.png" + f"{PLOTS_DIR}/{line_type}s-of-sec-level/{subdir}{line_type}-{row['scenario']}-{row['protocol']}-{row['sec_level']}{appendix}.pdf" ) plt.close() @@ -397,25 +728,10 @@ def plot_lines(data): ) plt.savefig( - f"{PLOTS_DIR}/median-of-single-algorithm/median-{row['scenario']}-{row['protocol']}-{row['sec_level']}-{row['kem_alg']}.png" + f"{PLOTS_DIR}/median-of-single-algorithm/median-{row['scenario']}-{row['protocol']}-{row['sec_level']}-{row['kem_alg']}.pdf" ) plt.close() - # This does not yet seem like a good idea - def plot_median_against_iqr(data): - plt.figure() - plt.hexbin(data["median"], data["iqr"], gridsize=50) - print(data["iqr"].describe()) - print(data["median"].describe()) - # get the line with the maximum median - max_median = data["median"].idxmax() - print(data.iloc[max_median]) - plt.savefig(f"{PLOTS_DIR}/median_against_iqr_hexbin.png") - - plt.figure() - plt.hist2d(data["median"], data["iqr"], bins=50) - plt.savefig(f"{PLOTS_DIR}/median_against_iqr_hist2d.png") - do_graphs_for = [ "median", "qtl_25", @@ -428,6 +744,7 @@ def plot_lines(data): "kurtosis", ] for thing in do_graphs_for: + print(f"Generating graphs for {thing}") plot_lines_for_sec_level(data, line_type=thing, combined_with_hybrids=False) plot_lines_for_sec_level(data, line_type=thing, combined_with_hybrids=True) @@ -435,6 +752,113 @@ def plot_lines(data): # plot_median_against_iqr(data) +# plots distributions of the individual data points +def plot_distributions(data): + os.makedirs( + f"{PLOTS_DIR}/distributions/single", + mode=0o777, + exist_ok=True, + ) + + def plot_multiple_violin_plots(data, filtered: bool = False): + os.makedirs( + f"{PLOTS_DIR}/distributions/filtered", + mode=0o777, + exist_ok=True, + ) + + unique_combinations = data[ + ["scenario", "protocol", "sec_level", "kem_alg"] + ].drop_duplicates() + # print(unique_combinations) + for _, row in unique_combinations.iterrows(): + filtered_data = filter_data( + data, + scenario=row["scenario"], + protocol=row["protocol"], + sec_level=row["sec_level"], + kem_alg=row["kem_alg"], + ) + print( + f"scenario: {row['scenario']}, protocol: {row['protocol']}, sec_level: {row['sec_level']}, kem_alg: {row['kem_alg']}, len: {len(filtered_data)}" + ) + + if filtered: + filtered_data = pd.concat( + [ + filtered_data.iloc[[0]], + filtered_data.iloc[3:-4:4], + filtered_data.iloc[[-1]], + ] + ) + print(filtered_data) + + plt.figure() + x = get_x_axis(row["scenario"], filtered_data, len(filtered_data)) + x = x.to_list() + # print(x) + width = 0.5 if not filtered else 2 + plt.violinplot( + filtered_data["measurements"], + positions=x, + showmedians=True, + widths=width, + ) + # make the median line transparent + # for pc in plt.gca().collections: + # pc.set_alpha(0.5) + + plt.ylim(bottom=0) + plt.xlim(left=0) + plt.xlabel(row["scenario"]) + plt.ylabel(f"Time-to-first-byte (ms)") + + subdir = "filtered/" if filtered else "" + appendix = "-filtered" if filtered else "" + plt.savefig( + f"{PLOTS_DIR}/distributions/{subdir}multiple-violin-plots-for-{row['scenario']}-{row['protocol']}-{row['sec_level']}-{row['kem_alg']}{appendix}.pdf" + ) + plt.close() + + def plot_single_violin_plot(data): + unique_combinations = data[ + ["scenario", "protocol", "sec_level", "kem_alg"] + ].drop_duplicates() + for _, row in unique_combinations.iterrows(): + filtered_data = filter_data( + data, + scenario=row["scenario"], + protocol=row["protocol"], + sec_level=row["sec_level"], + kem_alg=row["kem_alg"], + ) + print( + f"scenario: {row['scenario']}, protocol: {row['protocol']}, sec_level: {row['sec_level']}, kem_alg: {row['kem_alg']}" + ) + for _, row in filtered_data.iterrows(): + if row["scenario"] == "static": + continue + value = get_x_axis(row["scenario"], row, 1) + print(value) + + plt.figure() + plt.violinplot(row["measurements"], showmedians=True) + # plt.ylim(bottom=0) + # plt.xlim(left=0) + plt.xlabel("Dichte") + plt.ylabel(f"Time-to-first-byte (ms)") + + plt.savefig( + f"{PLOTS_DIR}/distributions/single/single-violin-plot-for-{row['scenario']}-{row['protocol']}-{row['sec_level']}-{row['kem_alg']}-{value}.pdf" + ) + plt.close() + # return + + plot_multiple_violin_plots(data, filtered=False) + plot_multiple_violin_plots(data, filtered=True) + # plot_single_violin_plot(data) # takes an age + + # TODO make a violinplot/eventplot for many algos in static scenario def plot_static_data(data): os.makedirs(f"{PLOTS_DIR}/static/single", mode=0o777, exist_ok=True) @@ -492,9 +916,12 @@ def plot_static_data(data): # ) # Get the median irqs for all algorithms + # print(row["protocol"], row["sec_level"]) # print(iqrs) # print(iqrs["iqr"].describe()) - # print("Median: ", iqrs["iqr"].median()) + # print("Median:", iqrs["iqr"].median()) + # print("IQR:", scipy.stats.iqr(iqrs["iqr"])) + # print() plt.xticks( range(len(filtered_data["kem_alg"].unique())), @@ -513,7 +940,7 @@ def plot_static_data(data): os.path.join( PLOTS_DIR, "static", - f"boxplots-of-medians-for-static-{row['protocol']}-{sec_level_string}.png", + f"boxplots-of-medians-for-static-{row['protocol']}-{sec_level_string}.pdf", ) ) plt.close() @@ -522,6 +949,7 @@ def plot_static_data(data): unique_combinations = data[ ["scenario", "protocol", "sec_level", "kem_alg"] ].drop_duplicates() + unique_combinations = filter_data(unique_combinations, scenario="static") for idx, row in unique_combinations.iterrows(): filtered_data = filter_data( data, @@ -531,45 +959,96 @@ def plot_static_data(data): kem_alg=row["kem_alg"], ) - plt.figure() - plt.boxplot(filtered_data["median"]) - plt.savefig( - os.path.join( - PLOTS_DIR, - "static", - "single", - f"boxplot-of-medians-for-{row['scenario']}-{row['protocol']}-{row['sec_level']}-{row['kem_alg']}.png", + def boxplot_of_medians_for_configuration(filtered_data, row): + plt.figure() + plt.boxplot(filtered_data["median"]) + plt.savefig( + os.path.join( + PLOTS_DIR, + "static", + "single", + f"boxplot-of-medians-for-{row['scenario']}-{row['protocol']}-{row['sec_level']}-{row['kem_alg']}.pdf", + ) ) - ) - plt.close() - - plt.figure() - plt.violinplot(filtered_data["measurements"], showmedians=True) - plt.savefig( - os.path.join( - PLOTS_DIR, - "static", - "single", - f"multiple-violin-plots-for-{row['scenario']}-{row['protocol']}-{row['sec_level']}-{row['kem_alg']}.png", + plt.close() + + # why the density of violin plot and kde plot differ, while using the same scott kde just sideways: + # Dove deep into the implementation from matplotlib and scipy, and they seem to calculate scotts factor in the same way, so dunno + def condensed_violin_plot_for_configuration(filtered_data, row): + # for multiple runs of the same static scenario, data taken together + measurements_flattend = filtered_data["measurements"].explode().tolist() + # print(filtered_data["measurements"].explode()) + # print(len(measurements_flattend)) + plt.figure() + plt.violinplot(measurements_flattend, showmedians=True) + plt.ylabel("Time-to-first-byte (ms)") + plt.xlabel("Dichte") + plt.savefig( + os.path.join( + PLOTS_DIR, + "static", + "single", + f"condensed-violin-plot-for-{len(measurements_flattend)}-measurements-of-{row['scenario']}-{row['protocol']}-{row['sec_level']}-{row['kem_alg']}.pdf", + ) ) - ) - plt.close() + plt.close() + + def condensed_histogram_plot_for_configuration(filtered_data, row): + measurements_flattend = filtered_data["measurements"].explode().tolist() + plt.figure() + plt.hist(measurements_flattend, bins=100, density=True) + plt.xlabel("Time-to-first-byte (ms)") + plt.ylabel("Dichte") + + plt.savefig( + os.path.join( + PLOTS_DIR, + "static", + "single", + f"condensed-histogram-plot-for-{len(measurements_flattend)}-measurements-of-{row['scenario']}-{row['protocol']}-{row['sec_level']}-{row['kem_alg']}.pdf", + ) + ) + plt.close() - # for multiple runs of the same static scenario, data taken together - measurements_flattend = filtered_data["measurements"].explode().tolist() - # print(filtered_data["measurements"].explode()) - # print(len(measurements_flattend)) - plt.figure() - plt.violinplot(measurements_flattend, showmedians=True) - plt.savefig( - os.path.join( - PLOTS_DIR, - "static", - "single", - f"condensed-violin-plot-for-{len(measurements_flattend)}-measurements-of-{row['scenario']}-{row['protocol']}-{row['sec_level']}-{row['kem_alg']}.png", + def condensed_kernel_density_estimate_plot_for_configuration( + filtered_data, row + ): + measurements_flattend = filtered_data["measurements"].explode().tolist() + plt.figure() + + kde = scipy.stats.gaussian_kde(measurements_flattend) + xmin = min(measurements_flattend) - 0.2 + xmax = max(measurements_flattend) + 0.1 + x = np.linspace( + xmin, + xmax, + 1000, ) - ) - plt.close() + kde_values = kde(x) + + plt.plot(x, kde_values) + plt.fill_between(x, kde_values, alpha=0.5) + + plt.xlabel("Time-to-first-byte (ms)") + plt.ylabel("Dichte") + plt.xlim([xmin, xmax]) + plt.ylim([0, max(kde_values) + 0.1]) + + plt.savefig( + os.path.join( + PLOTS_DIR, + "static", + "single", + f"condensed-kde-plot-for-{len(measurements_flattend)}-measurements-of-{row['scenario']}-{row['protocol']}-{row['sec_level']}-{row['kem_alg']}.pdf", + ) + ) + plt.close() + + boxplot_of_medians_for_configuration(filtered_data, row) + condensed_violin_plot_for_configuration(filtered_data, row) + condensed_histogram_plot_for_configuration(filtered_data, row) + condensed_kernel_density_estimate_plot_for_configuration(filtered_data, row) + # return plot_static_data_for_multiple_algorithms(data) plot_static_data_for_single_algorithms(data) @@ -643,9 +1122,9 @@ def plot_general_plots(): plt.ylabel("Performance (µs)") name = ( - "scatter-of-bytes-sent-against-kem-performance-with-hybrids.png" + "scatter-of-bytes-sent-against-kem-performance-with-hybrids.pdf" if with_hybrids - else "scatter-of-bytes-sent-against-kem-performance.png" + else "scatter-of-bytes-sent-against-kem-performance.pdf" ) plt.savefig( os.path.join(PLOTS_DIR, "general", name), @@ -718,13 +1197,31 @@ def plot_general_plots(): with_hybrids_string = "-with-hybrids" if with_hybrids else "" with_lines_string = "-with-lines" if with_lines else "" - name = f"scatter-of-public-key-against-ciphertext-length{with_hybrids_string}{with_lines_string}.png" + name = f"scatter-of-public-key-against-ciphertext-length{with_hybrids_string}{with_lines_string}.pdf" plt.savefig( os.path.join(PLOTS_DIR, "general", name), dpi=300, ) plt.close() + # This does not yet seem like a good idea + # TODO use the riqr to make some graphs + def plot_median_against_iqr(data): + plt.figure() + plt.hexbin(data["median"], data["iqr"], gridsize=50) + print(data["iqr"].describe()) + print(data["median"].describe()) + # get the line with the maximum median + max_median = data["median"].idxmax() + print(data.iloc[max_median]) + plt.savefig(f"{PLOTS_DIR}/general/median_against_iqr_hexbin.pdf") + plt.close() + + plt.figure() + plt.hist2d(data["median"], data["iqr"], bins=50) + plt.savefig(f"{PLOTS_DIR}/general/median_against_iqr_hist2d.pdf") + plt.close() + plot_send_bytes_against_kem_performance(df, with_hybrids=False) plot_send_bytes_against_kem_performance(df, with_hybrids=True) -- GitLab