Skip to content

Commit

Permalink
Merge pull request #21 from mrf345/testing
Browse files Browse the repository at this point in the history
Fix input file overwriting, and  update benchmark results
  • Loading branch information
mrf345 authored Sep 18, 2024
2 parents 233d988 + 014859c commit fc02827
Show file tree
Hide file tree
Showing 9 changed files with 114 additions and 118 deletions.
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

0 comments on commit fc02827

Please sign in to comment.