Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix input file overwriting, and update benchmark results #21

Merged
merged 4 commits into from
Sep 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@
<h1>
safelock-cli
<a href='https://github.com/mrf345/safelock-cli/actions/workflows/ci.yml'>
<img src='https://github.com/mrf345/safelock-cli/actions/workflows/ci.yml/badge.svg'>
<img src='https://github.com/mrf345/safelock-cli/actions/workflows/ci.yml/badge.svg' alt='build status'>
</a>
<a href='https://github.com/golangci/golangci-lint/tree/master'>
<img src='https://img.shields.io/badge/linter-golangci--lint-blue.svg?logo=go&logoColor=white' alt='linter badge'>
</a>
<a href="https://pkg.go.dev/github.com/mrf345/safelock-cli/safelock">
<img src="https://pkg.go.dev/badge/github.com/mrf345/safelock-cli/.svg" alt="Go Reference">
<img src='https://img.shields.io/badge/reference-blue.svg?logo=go&logoColor=white' alt='Go Reference'>
</a>
</h1>

Expand Down Expand Up @@ -61,6 +64,7 @@ You can find interactive examples of using it as a package to [encrypt](https://
|-------------------------|---------------------------------------------|
| Iterations | 3 |
| Memory size | 64 Megabytes |
| Salt length | 16 |
| Key length | 32 |
| Threads | Number of available cores `runtime.NumCPU()`|
| Minimum password length | 8 |
Expand Down
51 changes: 21 additions & 30 deletions benchmark/bench_and_plot.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,34 +5,28 @@
import matplotlib.pyplot as plt
from matplotlib.colors import XKCD_COLORS as plot_colors

safelock_cmd = "safelock-cli"
safelock_cmd = "~/Projects/safelock-cli/safelock-cli"
pwd = "123456789"
rest = "60s"
input_path = "Videos"
output_name = "test"
output_dir = "safelock_dump"
runs = 3
figure_width = 14
figure_height = 2.5
bar_width = 0.6
figure_height = 2.3
bar_width = 0.65
measure = "Seconds"
root = os.getcwd()

def get_label(i, clean=False, key="command"):
def get_label(i, key="command"):
matchers = [
('gpg', 'gpgtar',),
('7z', '7zip (fastest)',),
('age', 'age (tar-zstd)'),
('safelock', 'safelock',),
]
label = next((v for m, v in matchers if m in i[key]))

if clean:
return label
if key == "label":
return f"{label}\n{i['size']:.2f} MB"

return f"{label}\n{i['median']:.3f}s"
return next((v for m, v in matchers if m in i[key]))

def get_name(i):
matchers = [
Expand All @@ -48,8 +42,8 @@ def encrypt():
err = os.system(
f"hyperfine --runs {runs} --prepare "
f"'sleep {rest}' "
f"'echo \"{pwd}\" | {safelock_cmd} encrypt {input_path} {get_name('safelock')} --quiet' "
f"'tar cv --zstd {input_path} | . {root}/pipe_age_password.sh | age -e -p -o {get_name('age')}' "
f"'echo \"{pwd}\" | {safelock_cmd} encrypt {input_path} {get_name('safelock')} --quiet' "
f"'7z a -p{pwd} -mx1 {get_name('7z')} {input_path}' "
f"'gpgtar -e -o {get_name('gpg')} -c --yes --batch --gpg-args \"--passphrase {pwd}\" {input_path}' "
f"--export-json {root}/encryption.json"
Expand All @@ -62,8 +56,8 @@ def decrypt():
err = os.system(
f"hyperfine --runs {runs} --prepare "
f"'rm -rf {output_dir} {output_name}_*_ && mkdir {output_dir} && sleep {rest}' "
f"'echo \"{pwd}\" | {safelock_cmd} decrypt {get_name('safelock')} {output_dir} --quiet' "
f"'sleep 0.05; xdotool type \"{pwd}\"; xdotool key \"Return\" | age --decrypt {get_name('age')} | tar x --zstd -f - -C {output_dir}' "
f"'echo \"{pwd}\" | {safelock_cmd} decrypt {get_name('safelock')} {output_dir} --quiet' "
f"'7z e -y -p{pwd} -mx1 {get_name('7z')} -o{output_dir}' "
f"'gpgtar -d --yes --batch --gpg-args \"--passphrase {pwd}\" {get_name('gpg')}' "
f"--export-json {root}/decryption.json"
Expand All @@ -73,8 +67,8 @@ def decrypt():
exit(err)

os.chdir(os.path.expanduser("~"))
# encrypt()
# decrypt()
encrypt()
decrypt()
os.chdir(root)
plt.margins(3.5)

Expand All @@ -85,16 +79,15 @@ def decrypt():
data = sorted(json.load(f)['results'], key=lambda i: i['median'])
labels = [get_label(i) for i in data]
scores = [i['median'] for i in data]
colors_map = {get_label(i, 1): random.choice(list(plot_colors.values())) for i in data}
colors = [colors_map[get_label(i, 1)] for i in data]
colors_map = {get_label(i): random.choice(list(plot_colors.values())) for i in data}
colors = [colors_map[get_label(i)] for i in data]

fig, ax = plt.subplots()
ax.set_title('Encryption Time')
ax.set_xlabel(measure)
ax.yaxis.set_label_position('right')
ax.set_ylabel('lower is better')
ax.grid(zorder=0, axis='x', color='black')
ax.grid(zorder=0, axis='x')
ax.barh(labels, scores, bar_width, color=colors, zorder=3)
ax.bar_label(ax.containers[0], label_type='edge', padding=3, fmt=lambda i: f"{i:.2f}")
fig.set_size_inches(w=figure_width, h=figure_height)
fig.tight_layout()
fig.savefig("encryption-time.webp", transparent=True, format="webp")
Expand All @@ -106,15 +99,14 @@ def decrypt():
data = sorted(json.load(f)['results'], key=lambda i: i['median'])
labels = [get_label(i) for i in data]
decryption = [i['median'] for i in data]
colors = [colors_map[get_label(i, 1)] for i in data]
colors = [colors_map[get_label(i)] for i in data]

fig, ax = plt.subplots()
ax.set_title('Decryption Time')
ax.set_xlabel(measure)
ax.yaxis.set_label_position('right')
ax.set_ylabel('lower is better')
ax.grid(zorder=0, axis='x', color='black')
ax.grid(zorder=0, axis='x')
ax.barh(labels, decryption, bar_width, color=colors, zorder=3)
ax.bar_label(ax.containers[0], label_type='edge', padding=3, fmt=lambda i: f"{i:.2f}")
fig.set_size_inches(w=figure_width, h=figure_height)
fig.tight_layout()
fig.savefig("decryption-time.webp", transparent=True, format="webp")
Expand All @@ -126,20 +118,19 @@ def decrypt():
data = sorted([{
'size': os.path.getsize(get_name(get_label(i))) / 1024 / 1024,
'label': get_label(i),
'color': colors_map[get_label(i, 1)],
'color': colors_map[get_label(i)],
} for i in data], key=lambda i: i['size'])
os.chdir(root)
labels = [get_label(i, key='label') for i in data]
labels = [get_label(i, 'label') for i in data]
sizes = [i['size'] for i in data]
colors = [i['color'] for i in data]

fig, ax = plt.subplots()
ax.set_title('File Size')
ax.set_xlabel("Megabytes")
ax.yaxis.set_label_position('right')
ax.set_ylabel('lower is better')
ax.grid(zorder=0, axis='x', color='black')
ax.set_xlabel("MegaBytes")
ax.grid(zorder=0, axis='x')
ax.barh(labels, sizes, bar_width, color=colors, zorder=3)
ax.bar_label(ax.containers[0], label_type='edge', padding=3, fmt=lambda i: f"{i:.0f}")
fig.set_size_inches(w=figure_width, h=figure_height)
fig.tight_layout()
fig.savefig("file-size.webp", transparent=True, format="webp")
Binary file modified benchmark/decryption-time.webp
Binary file not shown.
84 changes: 42 additions & 42 deletions benchmark/decryption.json
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
{
"results": [
{
"command": "echo \"123456789\" | ~/Projects/safelock-cli/safelock-cli decrypt test.sla safelock_dump --quiet",
"mean": 1.8276349158133336,
"stddev": 0.14566191806696024,
"median": 1.9042654354800002,
"user": 2.309450346666667,
"system": 1.9107805599999999,
"min": 1.6596538664800002,
"max": 1.9189854454800002,
"command": "sleep 0.05; xdotool type \"123456789\"; xdotool key \"Return\" | age --decrypt test.age | tar x --zstd -f - -C safelock_dump",
"mean": 3.2734613258266667,
"stddev": 0.38923582353211417,
"median": 3.30132871616,
"user": 2.7651234999999996,
"system": 6.166127426666666,
"min": 2.87104071616,
"max": 3.64801454516,
"times": [
1.9189854454800002,
1.9042654354800002,
1.6596538664800002
3.64801454516,
2.87104071616,
3.30132871616
],
"exit_codes": [
0,
Expand All @@ -21,18 +21,18 @@
]
},
{
"command": "sleep 0.05; xdotool type \"123456789\"; xdotool key \"Return\" | age --decrypt test.age | tar x --zstd -f - -C safelock_dump",
"mean": 2.816656686146667,
"stddev": 0.2702910723941267,
"median": 2.9378343294800002,
"user": 2.6122993466666666,
"system": 5.240392226666667,
"min": 2.50698103648,
"max": 3.00515469248,
"command": "echo \"123456789\" | ~/Projects/safelock-cli/safelock-cli decrypt test.sla safelock_dump --quiet",
"mean": 2.0015877658266668,
"stddev": 0.006728462206629033,
"median": 2.00485857816,
"user": 2.4911125000000003,
"system": 2.106313093333333,
"min": 1.9938492011600002,
"max": 2.00605551816,
"times": [
3.00515469248,
2.9378343294800002,
2.50698103648
2.00605551816,
1.9938492011600002,
2.00485857816
],
"exit_codes": [
0,
Expand All @@ -42,17 +42,17 @@
},
{
"command": "7z e -y -p123456789 -mx1 test.7z -osafelock_dump",
"mean": 18.76303972514667,
"stddev": 0.10991428273642811,
"median": 18.72587103648,
"user": 20.692533679999997,
"system": 1.3673248933333333,
"min": 18.67652879848,
"max": 18.886719340480003,
"mean": 18.780328156826666,
"stddev": 0.09312114686946973,
"median": 18.83279570716,
"user": 20.808235166666666,
"system": 1.4123247599999997,
"min": 18.672811449159997,
"max": 18.83537731416,
"times": [
18.67652879848,
18.886719340480003,
18.72587103648
18.83537731416,
18.83279570716,
18.672811449159997
],
"exit_codes": [
0,
Expand All @@ -62,17 +62,17 @@
},
{
"command": "gpgtar -d --yes --batch --gpg-args \"--passphrase 123456789\" test.gpg",
"mean": 6.573486912813334,
"stddev": 0.3839886822791872,
"median": 6.52200845048,
"user": 0.21511468,
"system": 1.4525625599999998,
"min": 6.21783424048,
"max": 6.98061804748,
"mean": 6.849333490159999,
"stddev": 1.0445899571644215,
"median": 6.89337370116,
"user": 0.2077078333333333,
"system": 1.5517317599999998,
"min": 5.78341994016,
"max": 7.87120682916,
"times": [
6.98061804748,
6.52200845048,
6.21783424048
6.89337370116,
7.87120682916,
5.78341994016
],
"exit_codes": [
0,
Expand Down
Binary file modified benchmark/encryption-time.webp
Binary file not shown.
84 changes: 42 additions & 42 deletions benchmark/encryption.json
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
{
"results": [
{
"command": "echo \"123456789\" | ~/Projects/safelock-cli/safelock-cli encrypt Videos test.sla --quiet",
"mean": 2.915796215026667,
"stddev": 0.6152785400365611,
"median": 2.59659688136,
"user": 2.9221347666666673,
"system": 1.8123637266666666,
"min": 2.52571277236,
"max": 3.62507899136,
"command": "tar cv --zstd Videos | . ~/Projects/safelock-cli/benchmark/pipe_age_password.sh | age -e -p -o test.age",
"mean": 3.402120916973333,
"stddev": 0.36723519264164584,
"median": 3.5784137606399997,
"user": 3.4905991999999997,
"system": 3.9755335666666665,
"min": 2.97998001664,
"max": 3.64796897364,
"times": [
3.62507899136,
2.59659688136,
2.52571277236
3.5784137606399997,
2.97998001664,
3.64796897364
],
"exit_codes": [
0,
Expand All @@ -21,18 +21,18 @@
]
},
{
"command": "tar cv --zstd Videos | . /home/mrf3/Projects/safelock-cli/benchmark/pipe_age_password.sh | age -e -p -o test.age",
"mean": 3.5844030323599996,
"stddev": 0.8456093581031698,
"median": 3.99741505136,
"user": 3.664084433333333,
"system": 4.025338726666667,
"min": 2.61165881536,
"max": 4.14413523036,
"command": "echo \"123456789\" | ~/Projects/safelock-cli/safelock-cli encrypt Videos test.sla --quiet",
"mean": 3.513391508973333,
"stddev": 0.38369050393747534,
"median": 3.50677411664,
"user": 2.8737848666666665,
"system": 2.7115099,
"min": 3.13305250164,
"max": 3.9003479086399997,
"times": [
2.61165881536,
3.99741505136,
4.14413523036
3.50677411664,
3.9003479086399997,
3.13305250164
],
"exit_codes": [
0,
Expand All @@ -42,17 +42,17 @@
},
{
"command": "7z a -p123456789 -mx1 test.7z Videos",
"mean": 20.89819147436,
"stddev": 0.521090452676126,
"median": 20.99556633936,
"user": 144.56984343333332,
"system": 1.0643993933333333,
"min": 20.33528243436,
"max": 21.36372564936,
"mean": 20.72411361464,
"stddev": 0.31234900452082415,
"median": 20.87433041064,
"user": 144.74405119999997,
"system": 1.040940233333333,
"min": 20.365036756640002,
"max": 20.93297367664,
"times": [
21.36372564936,
20.33528243436,
20.99556633936
20.87433041064,
20.365036756640002,
20.93297367664
],
"exit_codes": [
0,
Expand All @@ -62,17 +62,17 @@
},
{
"command": "gpgtar -e -o test.gpg -c --yes --batch --gpg-args \"--passphrase 123456789\" Videos",
"mean": 44.73956679669333,
"stddev": 3.0879084948438327,
"median": 44.51365098336,
"user": 34.082144766666666,
"system": 9.58027806,
"min": 41.77082056336,
"max": 47.93422884336,
"mean": 45.75403499330667,
"stddev": 1.37469158193794,
"median": 45.82139649264,
"user": 34.73840786666667,
"system": 10.408470566666665,
"min": 44.346901016640004,
"max": 47.09380747064,
"times": [
44.51365098336,
47.93422884336,
41.77082056336
47.09380747064,
45.82139649264,
44.346901016640004
],
"exit_codes": [
0,
Expand Down
Binary file modified benchmark/file-size.webp
Binary file not shown.
Loading