tkccrypt
author viric@llimona
Wed, 01 Nov 2006 17:48:51 +0100
changeset 3 533cbe2b7f3c
parent 2 063a30048b60
permissions -rwxr-xr-x
GPL license added
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
     1
#!/usr/bin/wish
3
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
     2
# encoding: utf-8
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
     3
#
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
     4
# Tkccrypt - a frontend for Peter Selinger's ccrypt
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
     5
# Copyright (C) 2006 LluĂ­s Batlle i Rossell
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
     6
# 
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
     7
# This program is free software; you can redistribute it and/or
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
     8
# modify it under the terms of the GNU General Public License
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
     9
# as published by the Free Software Foundation; either version 2
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
    10
# of the License, or (at your option) any later version.
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
    11
# 
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
    12
# This program is distributed in the hope that it will be useful,
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
    13
# but WITHOUT ANY WARRANTY; without even the implied warranty of
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
    14
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
    15
# GNU General Public License for more details.
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
    16
# 
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
    17
# You should have received a copy of the GNU General Public License
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
    18
# along with this program; if not, write to the Free Software
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
    19
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
    20
#
0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    21
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    22
text .text -relief sunken -bd 2 -yscrollcommand ".scroll set" -setgrid 1 \
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    23
	-height 30 -undo 1 -autosep 1
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    24
scrollbar .scroll -command ".text yview"
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    25
pack .scroll -side right -fill y
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    26
pack .text -expand yes -fill both
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    27
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    28
menu .menu -tearoff 0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    29
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    30
set File .menu.file
2
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
    31
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
    32
set filetypes {
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
    33
	{"CCrypt files" { ".cpt" } { "CPT "}}
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
    34
}
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
    35
0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    36
menu $File -tearoff 0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    37
.menu add cascade -label "File" -menu $File
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    38
$File add command -label "New" -command { newfile }
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    39
$File add command -label "Open" -command { openfile }
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    40
$File add command -label "Save" -command { savefile $actualfile $actualpass}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    41
$File add command -label "Save as..." -command { savefile }
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    42
$File add separator
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    43
$File add command -label "Quit" -command { exit}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    44
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    45
. configure -menu .menu
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    46
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    47
set actualpass ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    48
set actualfile ""
3
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
    49
wm title . "tkccrypt - New File"
0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    50
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    51
proc askpassword { op entries } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    52
	set tl [toplevel .pass]
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    53
	global password1 password2
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    54
	global actualpass
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    55
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    56
	set password1 ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    57
	set password2 ""
2
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
    58
	label .pass.info -text "Please introduce your password for $op:"
0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    59
	pack .pass.info -side top
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    60
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    61
	entry .pass.entry -textvariable password1 -show "*"
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    62
	pack .pass.entry -side top
2
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
    63
	bind .pass.entry <Return> {destroy .pass}
0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    64
	if { $entries == 2} {
2
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
    65
		label .pass.info2 -text "2nd time, for verification:"
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
    66
		pack .pass.info2 -side top
0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    67
		entry .pass.entry2 -textvariable password2 -show "*"
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    68
		pack .pass.entry2 -side top
2
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
    69
		bind .pass.entry2 <Return> {destroy .pass}
0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    70
	}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    71
	button .pass.ok -text "Ok" -command \
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    72
		{ destroy .pass }
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    73
	pack .pass.ok -side left
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    74
	button .pass.cancel -text "Cancel" \
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    75
		-command {set password1 ""; set password2 ""; destroy .pass}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    76
	pack .pass.cancel -side right
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    77
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    78
	bind .pass.entry <Escape> {set password1 ""; set password2 ""; destroy .pass}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    79
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    80
	focus $tl
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    81
	focus $tl.entry
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    82
	grab $tl
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    83
	tkwait window $tl
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    84
	catch { grab release $tl }
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    85
	focus .
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    86
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    87
	if { $entries != 2 } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    88
		set tmppass $password1
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    89
		set password1 ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    90
		return $tmppass
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    91
	}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    92
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    93
	if { $password1 == $password2 } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    94
		set tmppass $password1
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    95
		set password1 ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    96
		set password2 ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    97
		return $tmppass
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    98
	} else {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    99
		set password1 ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   100
		set password2 ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   101
		tk_messageBox -type ok -message "The passwords don't match" \
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   102
			-icon error
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   103
		return ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   104
	}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   105
}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   106
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   107
proc newfile { } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   108
	global actualpass actualfile
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   109
	set actualpass ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   110
	set actualfile ""
2
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
   111
	.text delete 1.0 end
3
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
   112
	wm title . "tkccrypt - New File"
0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   113
}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   114
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   115
proc openfile { } {
2
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
   116
	global env actualpass actualfile filetypes
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
   117
	set file [tk_getOpenFile -defaultextension .cpt -filetypes $filetypes]
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
   118
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
   119
	if { $file == ""} {
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
   120
		return
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
   121
	}
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
   122
0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   123
	set pass [askpassword "Open" 1]
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   124
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   125
	if { $pass == "" } { return }
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   126
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   127
	# Decode
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   128
	set env(PASS) $pass
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   129
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   130
	set error [ catch { set txt [exec ccrypt -dc -E PASS $file] } result ]
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   131
	if { $error != 0 } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   132
		tk_messageBox -type ok -message "Password incorrect:\n$result" \
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   133
			-icon error
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   134
		return
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   135
	}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   136
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   137
	.text delete 1.0 end
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   138
	.text insert end $txt
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   139
#	while { [eof $fd ] != 1 } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   140
#		set line [gets $fd]
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   141
#		.text insert end $line
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   142
#	}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   143
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   144
	set env(PASS) ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   145
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   146
	set actualpass $pass
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   147
	set actualfile $file
3
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
   148
	wm title . "tkccrypt - $file"
0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   149
}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   150
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   151
proc savefile { {file ""} {pass ""} } {
2
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
   152
	global env actualpass actualfile filetypes
0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   153
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   154
	if { $file == "" } {
2
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
   155
		set file [tk_getSaveFile -defaultextension .cpt -filetypes \
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
   156
			$filetypes]
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
   157
	}
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
   158
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
   159
	if { $file == ""} {
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
   160
		return
0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   161
	}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   162
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   163
	if { $pass == "" } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   164
		set pass [askpassword "Save" 2]
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   165
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   166
		if { $pass == "" } { return }
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   167
	}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   168
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   169
	# Decode
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   170
	set env(PASS) $pass
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   171
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   172
	set error [ catch { set fd [open "|ccrypt -E PASS >$file" w] } result ]
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   173
	if { $error != 0 } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   174
		tk_messageBox -type ok -message "Password incorrect:\n$result" \
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   175
			-icon error
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   176
		return
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   177
	}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   178
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   179
	puts -nonewline $fd [.text get 1.0 end]
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   180
	close $fd
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   181
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   182
	set env(PASS) ""
2
063a30048b60 Fixed bugs
viric@llimona
parents: 1
diff changeset
   183
	set actualpass $pass
0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   184
	set actualfile $file
3
533cbe2b7f3c GPL license added
viric@llimona
parents: 2
diff changeset
   185
	wm title . "tkccrypt - $file"
0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   186
	tk_messageBox -type ok -message "File \"$file\" saved!" \
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   187
			-icon info
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   188
}