]>
git.scottworley.com Git - overonion/blob - overonion
c54048a3351b4103544c8ee9ee345f887fa9ecb8
13 die
"usage: overonion e|d keyfile"
16 if [[ "$mode" != e
&& "$mode" != d
]];then
17 die
"Use 'e' for encrypt or 'd' for decrypt"
20 if [[ ! -e "$keyfile" ]];then
21 die
"Keyfile not found"
23 if [[ ! -r "$keyfile" ]];then
24 die
"Cannot read keyfile"
27 num_layers
=$(wc -l < "$keyfile")
28 if (( num_layers
< 20 ));then
29 die
"Keyfile doesn't have enough layers to be an onion"
32 if [[ "$mode" == e
]];then
33 first_layer
=$num_layers
44 if (( layer
== 0 || layer
> num_layers
));then
47 operation
=$(sed -n "${layer}{;s/ .*//;p;}" "$keyfile")
48 if [[ "$operation" == openssl
-enc ]];then
49 openssl enc
$openssl_decrypt "-$(sed -rn "${layer}s/[^ ]+ ([^ ]+) .*/\\1/p" "$keyfile")" \
50 -pass fd:37 37< <(sed -rn "${layer}s
/^
[^
]+ [^
]+ //p
" "$keyfile")
51 elif [[ "$operation" == reverse ]];then
53 elif [[ "$operation" == openssl-dgst ]];then
54 tee >(echo "$(sed -n "${layer}p" "$keyfile") $(openssl dgst -binary "-$(sed -rn "${layer}s/^[^ ]+ ([^ ]+).
*/\\1/p
" "$keyfile")" | base64
--wrap=0)" > "$hash_dir/$layer")
56 die "Unknown operation
"
58 go $(( layer + next_layer ))
64 for hash_result in "$hash_dir"/*;do
65 layer=$(basename "$hash_result")
66 if [[ "$mode" == e ]];then
67 # Add the hashes to keyfile
68 key_aside_dir=$(mktemp -d "$keyfile.XXXXXXXXXX")
69 key_aside="$key_aside_dir/key.orig
"
70 mv "$keyfile" "$key_aside"
71 sed "${layer}s
,.
*,$(< "$hash_result")," "$key_aside" > "$keyfile"
73 rmdir "$key_aside_dir"
76 if [[ "$(awk '{ print $3 == $4 ? "hash ok" : "mismatch" }' "$hash_result")" != "hash ok
" ]];then
77 die "Hash check
$layer failed
"