View difference between Paste ID: aq9FW97f and qbqb6n4L
SHOW: | | - or go back to the newest paste.
1
#!/bin/bash
2
3
# A Front-End to mcrypt and mdecrypt.
4
# Store the executable script as xcrr and make a symbolic link
5
# to the same file as xcrrd.
6
# xcrr will encrypt, xcrrd will decrypt.
7
8
# ©2016 Michael Uplawski <michael.uplawski@uplawski.eu>
9
# Use at your own risk, modify as you please.
10
11
# set your preferred crypto- and hash algorithm. Verify,
12
# that they are supported by mcrypt
13
DEF_ALGO='rijndael-256'
14
DEF_HASH='sha256'
15
16
# Some arrays will facilitate adaptations to the current
17
# version of mcrypt
18
19
declare -a FILES
20
declare -a HASHES
21
declare -a ALGOS
22
23
# get the supported cryptographic algorithms
24
ALGOS=($(mcrypt --list|cut -d\( -f1|tr -d "[:cntrl:]"))
25
26
# get the supported hash algorithms
27
HASHES=($(mcrypt --list-hash|cut -d':' -f2|tr -d "[:blank:]"|tr "\n" " "))
28
29
# set the names of the supported modes in a string
30
# variable. These values are not yet presented by
31
# mcrypt itself. CFB is the default, hence the '^'.
32
MODES="ECB ^CFB OFB nOFB CBX STREAM"
33
34
# default action (script xcrr)
35
ACTION="encrypt"
36
ICON="encrypt.png"
37
38
# modify action do decrypt, if the script is called
39
# as xcrrd
40
if [ "xcrrd" == `basename "$0"` ]
41
then
42
	ACTION="decrypt"
43
	ICON="decrypt.png"
44
fi
45
46
# find the default algorithm and mark it
47
# with '^' for yad
48
AL=''
49
for i in `seq 0 50` 
50
do
51
	if [ ${ALGOS[$i]} != ' ' ]
52
	then
53
		a=${ALGOS[$i]}
54
		if [ "$DEF_ALGO" == $a ]
55
		then
56
			a="^$a"
57
		fi
58
		AL="$a $AL"
59
	else
60
		break
61
	fi
62
done
63
64
# find the default hash and mark it with '^'
65
# for yad
66
HS=''
67
for i in `seq 0 50` 
68
do
69
	if [ ${HASHES[$i]} != ' ' ]
70
	then
71
		h=${HASHES[$i]}
72
		if [ "sha256" == $h ]
73
		then
74
			h="^$h"
75
		fi
76
		HS="$h $HS"
77
	else
78
		break
79
	fi
80
done
81-
FILES=($(yad --title "$ACTION" --image="/usr/share/pixmaps/decrypt.png" --window-icon="/usr/share/pixmaps/decrypt.png" --form --separator=' ' --field="File to $ACTION":FL " " --field="Key file":FL ' ' --field="Algorithm":CB "$AL" --field="Mode":CB "$MODES" --field="Hash":CB "$HS" --item-separator=' ' ))
81+
82
# call yad and present the user-interface
83
FILES=($(yad --title "$ACTION" --image="$ICON" --window-icon="$ICON" --form --separator=' ' --field="File to $ACTION":FL " " --field="Key file":FL ' ' --field="Algorithm":CB "$AL" --field="Mode":CB "$MODES" --field="Hash":CB "$HS" --item-separator=' ' ))
84
85
# extrct the user-provided values
86
FILE=${FILES[0]}
87
KFILE=${FILES[1]}
88
ALGO=${FILES[2]}
89
MODE=${FILES[3]}
90
HASH=${FILES[4]}
91
92
# verifications and error-handling
93
if [ ! -e "$FILE" ]
94
then
95
	yad --image "dialog-error" --title "ERROR" --text="File $FILE does not exist"
96
	exit 1
97
fi
98
99
if [ ! -f "$FILE" ]
100
then
101
	yad --image "dialog-error" --title "ERROR" --text="$FILE is not a valid file for $ACTIONion! Aborting."
102
	exit 0
103
fi
104
105
if [ ! -e "$KFILE" ]
106
then
107
	yad --image "dialog-error"  --title "ERROR" --text="Key-file $KFILE does not exist"
108
	exit 1
109
fi
110
111
if [ ! -f "$KFILE" ]
112
then
113
	yad --image "dialog-error" --title "ERROR" --text="$KFILE is not a valid key-file! Aborting."
114
	exit 0
115
fi
116
117
# Do it. 
118
# Remove pre-existing files if we are about to replace them anyway.
119
120
if [ "encrypt" == "$ACTION" ]
121
then
122
	if [ -e "$FILE".nc ]
123
	then
124
		rm -f "$FILE".nc
125
	fi
126
127
	mcrypt -a "$ALGO" -h "$HASH" -m "$MODE" -f "$KFILE" "$FILE" 
128
129
	if [ -e "$FILE".nc ]
130
	then
131
		yad --image "dialog-information" --title "result" --text="encrypted file $FILE.nc has been written"
132
	else
133
		yad --image "dialog-warning"  --title "result" --text="An error occured, check console-output"
134
	fi
135
elif [ "decrypt" == "$ACTION" ]
136
then
137
	dir=`dirname $FILE`
138
	out=$dir/`basename "$FILE" .nc`
139
	
140
	if [ -e "$out" ]
141
	then
142
		rm -f "$out" 
143
	fi
144
	mdecrypt -a "$ALGO" -h "$HASH" -m "$MODE" -f "$KFILE" "$FILE"
145
146
	if [ -e "$out" ]
147
	then
148
		yad --image "dialog-information" --title "result" --text="File $out has been written"
149
	fi
150
fi
151
152
# EOF