Skip to content

Commit fc02827

Browse files
authored
Merge pull request #21 from mrf345/testing
Fix input file overwriting, and update benchmark results
2 parents 233d988 + 014859c commit fc02827

9 files changed

+114
-118
lines changed

README.md

+6-2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22
<h1>
33
safelock-cli
44
<a href='https://github.com/mrf345/safelock-cli/actions/workflows/ci.yml'>
5-
<img src='https://github.com/mrf345/safelock-cli/actions/workflows/ci.yml/badge.svg'>
5+
<img src='https://github.com/mrf345/safelock-cli/actions/workflows/ci.yml/badge.svg' alt='build status'>
6+
</a>
7+
<a href='https://github.com/golangci/golangci-lint/tree/master'>
8+
<img src='https://img.shields.io/badge/linter-golangci--lint-blue.svg?logo=go&logoColor=white' alt='linter badge'>
69
</a>
710
<a href="https://pkg.go.dev/github.com/mrf345/safelock-cli/safelock">
8-
<img src="https://pkg.go.dev/badge/github.com/mrf345/safelock-cli/.svg" alt="Go Reference">
11+
<img src='https://img.shields.io/badge/reference-blue.svg?logo=go&logoColor=white' alt='Go Reference'>
912
</a>
1013
</h1>
1114

@@ -61,6 +64,7 @@ You can find interactive examples of using it as a package to [encrypt](https://
6164
|-------------------------|---------------------------------------------|
6265
| Iterations | 3 |
6366
| Memory size | 64 Megabytes |
67+
| Salt length | 16 |
6468
| Key length | 32 |
6569
| Threads | Number of available cores `runtime.NumCPU()`|
6670
| Minimum password length | 8 |

benchmark/bench_and_plot.py

+21-30
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,28 @@
55
import matplotlib.pyplot as plt
66
from matplotlib.colors import XKCD_COLORS as plot_colors
77

8-
safelock_cmd = "safelock-cli"
8+
safelock_cmd = "~/Projects/safelock-cli/safelock-cli"
99
pwd = "123456789"
1010
rest = "60s"
1111
input_path = "Videos"
1212
output_name = "test"
1313
output_dir = "safelock_dump"
1414
runs = 3
1515
figure_width = 14
16-
figure_height = 2.5
17-
bar_width = 0.6
16+
figure_height = 2.3
17+
bar_width = 0.65
1818
measure = "Seconds"
1919
root = os.getcwd()
2020

21-
def get_label(i, clean=False, key="command"):
21+
def get_label(i, key="command"):
2222
matchers = [
2323
('gpg', 'gpgtar',),
2424
('7z', '7zip (fastest)',),
2525
('age', 'age (tar-zstd)'),
2626
('safelock', 'safelock',),
2727
]
28-
label = next((v for m, v in matchers if m in i[key]))
2928

30-
if clean:
31-
return label
32-
if key == "label":
33-
return f"{label}\n{i['size']:.2f} MB"
34-
35-
return f"{label}\n{i['median']:.3f}s"
29+
return next((v for m, v in matchers if m in i[key]))
3630

3731
def get_name(i):
3832
matchers = [
@@ -48,8 +42,8 @@ def encrypt():
4842
err = os.system(
4943
f"hyperfine --runs {runs} --prepare "
5044
f"'sleep {rest}' "
51-
f"'echo \"{pwd}\" | {safelock_cmd} encrypt {input_path} {get_name('safelock')} --quiet' "
5245
f"'tar cv --zstd {input_path} | . {root}/pipe_age_password.sh | age -e -p -o {get_name('age')}' "
46+
f"'echo \"{pwd}\" | {safelock_cmd} encrypt {input_path} {get_name('safelock')} --quiet' "
5347
f"'7z a -p{pwd} -mx1 {get_name('7z')} {input_path}' "
5448
f"'gpgtar -e -o {get_name('gpg')} -c --yes --batch --gpg-args \"--passphrase {pwd}\" {input_path}' "
5549
f"--export-json {root}/encryption.json"
@@ -62,8 +56,8 @@ def decrypt():
6256
err = os.system(
6357
f"hyperfine --runs {runs} --prepare "
6458
f"'rm -rf {output_dir} {output_name}_*_ && mkdir {output_dir} && sleep {rest}' "
65-
f"'echo \"{pwd}\" | {safelock_cmd} decrypt {get_name('safelock')} {output_dir} --quiet' "
6659
f"'sleep 0.05; xdotool type \"{pwd}\"; xdotool key \"Return\" | age --decrypt {get_name('age')} | tar x --zstd -f - -C {output_dir}' "
60+
f"'echo \"{pwd}\" | {safelock_cmd} decrypt {get_name('safelock')} {output_dir} --quiet' "
6761
f"'7z e -y -p{pwd} -mx1 {get_name('7z')} -o{output_dir}' "
6862
f"'gpgtar -d --yes --batch --gpg-args \"--passphrase {pwd}\" {get_name('gpg')}' "
6963
f"--export-json {root}/decryption.json"
@@ -73,8 +67,8 @@ def decrypt():
7367
exit(err)
7468

7569
os.chdir(os.path.expanduser("~"))
76-
# encrypt()
77-
# decrypt()
70+
encrypt()
71+
decrypt()
7872
os.chdir(root)
7973
plt.margins(3.5)
8074

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

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

111104
fig, ax = plt.subplots()
112105
ax.set_title('Decryption Time')
113106
ax.set_xlabel(measure)
114-
ax.yaxis.set_label_position('right')
115-
ax.set_ylabel('lower is better')
116-
ax.grid(zorder=0, axis='x', color='black')
107+
ax.grid(zorder=0, axis='x')
117108
ax.barh(labels, decryption, bar_width, color=colors, zorder=3)
109+
ax.bar_label(ax.containers[0], label_type='edge', padding=3, fmt=lambda i: f"{i:.2f}")
118110
fig.set_size_inches(w=figure_width, h=figure_height)
119111
fig.tight_layout()
120112
fig.savefig("decryption-time.webp", transparent=True, format="webp")
@@ -126,20 +118,19 @@ def decrypt():
126118
data = sorted([{
127119
'size': os.path.getsize(get_name(get_label(i))) / 1024 / 1024,
128120
'label': get_label(i),
129-
'color': colors_map[get_label(i, 1)],
121+
'color': colors_map[get_label(i)],
130122
} for i in data], key=lambda i: i['size'])
131123
os.chdir(root)
132-
labels = [get_label(i, key='label') for i in data]
124+
labels = [get_label(i, 'label') for i in data]
133125
sizes = [i['size'] for i in data]
134126
colors = [i['color'] for i in data]
135127

136128
fig, ax = plt.subplots()
137129
ax.set_title('File Size')
138-
ax.set_xlabel("Megabytes")
139-
ax.yaxis.set_label_position('right')
140-
ax.set_ylabel('lower is better')
141-
ax.grid(zorder=0, axis='x', color='black')
130+
ax.set_xlabel("MegaBytes")
131+
ax.grid(zorder=0, axis='x')
142132
ax.barh(labels, sizes, bar_width, color=colors, zorder=3)
133+
ax.bar_label(ax.containers[0], label_type='edge', padding=3, fmt=lambda i: f"{i:.0f}")
143134
fig.set_size_inches(w=figure_width, h=figure_height)
144135
fig.tight_layout()
145136
fig.savefig("file-size.webp", transparent=True, format="webp")

benchmark/decryption-time.webp

-936 Bytes
Binary file not shown.

benchmark/decryption.json

+42-42
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
{
22
"results": [
33
{
4-
"command": "echo \"123456789\" | ~/Projects/safelock-cli/safelock-cli decrypt test.sla safelock_dump --quiet",
5-
"mean": 1.8276349158133336,
6-
"stddev": 0.14566191806696024,
7-
"median": 1.9042654354800002,
8-
"user": 2.309450346666667,
9-
"system": 1.9107805599999999,
10-
"min": 1.6596538664800002,
11-
"max": 1.9189854454800002,
4+
"command": "sleep 0.05; xdotool type \"123456789\"; xdotool key \"Return\" | age --decrypt test.age | tar x --zstd -f - -C safelock_dump",
5+
"mean": 3.2734613258266667,
6+
"stddev": 0.38923582353211417,
7+
"median": 3.30132871616,
8+
"user": 2.7651234999999996,
9+
"system": 6.166127426666666,
10+
"min": 2.87104071616,
11+
"max": 3.64801454516,
1212
"times": [
13-
1.9189854454800002,
14-
1.9042654354800002,
15-
1.6596538664800002
13+
3.64801454516,
14+
2.87104071616,
15+
3.30132871616
1616
],
1717
"exit_codes": [
1818
0,
@@ -21,18 +21,18 @@
2121
]
2222
},
2323
{
24-
"command": "sleep 0.05; xdotool type \"123456789\"; xdotool key \"Return\" | age --decrypt test.age | tar x --zstd -f - -C safelock_dump",
25-
"mean": 2.816656686146667,
26-
"stddev": 0.2702910723941267,
27-
"median": 2.9378343294800002,
28-
"user": 2.6122993466666666,
29-
"system": 5.240392226666667,
30-
"min": 2.50698103648,
31-
"max": 3.00515469248,
24+
"command": "echo \"123456789\" | ~/Projects/safelock-cli/safelock-cli decrypt test.sla safelock_dump --quiet",
25+
"mean": 2.0015877658266668,
26+
"stddev": 0.006728462206629033,
27+
"median": 2.00485857816,
28+
"user": 2.4911125000000003,
29+
"system": 2.106313093333333,
30+
"min": 1.9938492011600002,
31+
"max": 2.00605551816,
3232
"times": [
33-
3.00515469248,
34-
2.9378343294800002,
35-
2.50698103648
33+
2.00605551816,
34+
1.9938492011600002,
35+
2.00485857816
3636
],
3737
"exit_codes": [
3838
0,
@@ -42,17 +42,17 @@
4242
},
4343
{
4444
"command": "7z e -y -p123456789 -mx1 test.7z -osafelock_dump",
45-
"mean": 18.76303972514667,
46-
"stddev": 0.10991428273642811,
47-
"median": 18.72587103648,
48-
"user": 20.692533679999997,
49-
"system": 1.3673248933333333,
50-
"min": 18.67652879848,
51-
"max": 18.886719340480003,
45+
"mean": 18.780328156826666,
46+
"stddev": 0.09312114686946973,
47+
"median": 18.83279570716,
48+
"user": 20.808235166666666,
49+
"system": 1.4123247599999997,
50+
"min": 18.672811449159997,
51+
"max": 18.83537731416,
5252
"times": [
53-
18.67652879848,
54-
18.886719340480003,
55-
18.72587103648
53+
18.83537731416,
54+
18.83279570716,
55+
18.672811449159997
5656
],
5757
"exit_codes": [
5858
0,
@@ -62,17 +62,17 @@
6262
},
6363
{
6464
"command": "gpgtar -d --yes --batch --gpg-args \"--passphrase 123456789\" test.gpg",
65-
"mean": 6.573486912813334,
66-
"stddev": 0.3839886822791872,
67-
"median": 6.52200845048,
68-
"user": 0.21511468,
69-
"system": 1.4525625599999998,
70-
"min": 6.21783424048,
71-
"max": 6.98061804748,
65+
"mean": 6.849333490159999,
66+
"stddev": 1.0445899571644215,
67+
"median": 6.89337370116,
68+
"user": 0.2077078333333333,
69+
"system": 1.5517317599999998,
70+
"min": 5.78341994016,
71+
"max": 7.87120682916,
7272
"times": [
73-
6.98061804748,
74-
6.52200845048,
75-
6.21783424048
73+
6.89337370116,
74+
7.87120682916,
75+
5.78341994016
7676
],
7777
"exit_codes": [
7878
0,

benchmark/encryption-time.webp

-1.6 KB
Binary file not shown.

benchmark/encryption.json

+42-42
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
{
22
"results": [
33
{
4-
"command": "echo \"123456789\" | ~/Projects/safelock-cli/safelock-cli encrypt Videos test.sla --quiet",
5-
"mean": 2.915796215026667,
6-
"stddev": 0.6152785400365611,
7-
"median": 2.59659688136,
8-
"user": 2.9221347666666673,
9-
"system": 1.8123637266666666,
10-
"min": 2.52571277236,
11-
"max": 3.62507899136,
4+
"command": "tar cv --zstd Videos | . ~/Projects/safelock-cli/benchmark/pipe_age_password.sh | age -e -p -o test.age",
5+
"mean": 3.402120916973333,
6+
"stddev": 0.36723519264164584,
7+
"median": 3.5784137606399997,
8+
"user": 3.4905991999999997,
9+
"system": 3.9755335666666665,
10+
"min": 2.97998001664,
11+
"max": 3.64796897364,
1212
"times": [
13-
3.62507899136,
14-
2.59659688136,
15-
2.52571277236
13+
3.5784137606399997,
14+
2.97998001664,
15+
3.64796897364
1616
],
1717
"exit_codes": [
1818
0,
@@ -21,18 +21,18 @@
2121
]
2222
},
2323
{
24-
"command": "tar cv --zstd Videos | . /home/mrf3/Projects/safelock-cli/benchmark/pipe_age_password.sh | age -e -p -o test.age",
25-
"mean": 3.5844030323599996,
26-
"stddev": 0.8456093581031698,
27-
"median": 3.99741505136,
28-
"user": 3.664084433333333,
29-
"system": 4.025338726666667,
30-
"min": 2.61165881536,
31-
"max": 4.14413523036,
24+
"command": "echo \"123456789\" | ~/Projects/safelock-cli/safelock-cli encrypt Videos test.sla --quiet",
25+
"mean": 3.513391508973333,
26+
"stddev": 0.38369050393747534,
27+
"median": 3.50677411664,
28+
"user": 2.8737848666666665,
29+
"system": 2.7115099,
30+
"min": 3.13305250164,
31+
"max": 3.9003479086399997,
3232
"times": [
33-
2.61165881536,
34-
3.99741505136,
35-
4.14413523036
33+
3.50677411664,
34+
3.9003479086399997,
35+
3.13305250164
3636
],
3737
"exit_codes": [
3838
0,
@@ -42,17 +42,17 @@
4242
},
4343
{
4444
"command": "7z a -p123456789 -mx1 test.7z Videos",
45-
"mean": 20.89819147436,
46-
"stddev": 0.521090452676126,
47-
"median": 20.99556633936,
48-
"user": 144.56984343333332,
49-
"system": 1.0643993933333333,
50-
"min": 20.33528243436,
51-
"max": 21.36372564936,
45+
"mean": 20.72411361464,
46+
"stddev": 0.31234900452082415,
47+
"median": 20.87433041064,
48+
"user": 144.74405119999997,
49+
"system": 1.040940233333333,
50+
"min": 20.365036756640002,
51+
"max": 20.93297367664,
5252
"times": [
53-
21.36372564936,
54-
20.33528243436,
55-
20.99556633936
53+
20.87433041064,
54+
20.365036756640002,
55+
20.93297367664
5656
],
5757
"exit_codes": [
5858
0,
@@ -62,17 +62,17 @@
6262
},
6363
{
6464
"command": "gpgtar -e -o test.gpg -c --yes --batch --gpg-args \"--passphrase 123456789\" Videos",
65-
"mean": 44.73956679669333,
66-
"stddev": 3.0879084948438327,
67-
"median": 44.51365098336,
68-
"user": 34.082144766666666,
69-
"system": 9.58027806,
70-
"min": 41.77082056336,
71-
"max": 47.93422884336,
65+
"mean": 45.75403499330667,
66+
"stddev": 1.37469158193794,
67+
"median": 45.82139649264,
68+
"user": 34.73840786666667,
69+
"system": 10.408470566666665,
70+
"min": 44.346901016640004,
71+
"max": 47.09380747064,
7272
"times": [
73-
44.51365098336,
74-
47.93422884336,
75-
41.77082056336
73+
47.09380747064,
74+
45.82139649264,
75+
44.346901016640004
7676
],
7777
"exit_codes": [
7878
0,

benchmark/file-size.webp

-1.32 KB
Binary file not shown.

0 commit comments

Comments
 (0)