tkcrypt
author viric@llimona
Wed, 01 Nov 2006 17:02:47 +0100
changeset 1 f68e1244a263
parent 0 tkcrypt.tk@3a01adf9b543
permissions -rwxr-xr-x
Name changed.
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
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
     2
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
     3
text .text -relief sunken -bd 2 -yscrollcommand ".scroll set" -setgrid 1 \
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
     4
	-height 30 -undo 1 -autosep 1
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
     5
scrollbar .scroll -command ".text yview"
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
     6
pack .scroll -side right -fill y
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
     7
pack .text -expand yes -fill both
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
     8
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
     9
menu .menu -tearoff 0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    10
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    11
set File .menu.file
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    12
menu $File -tearoff 0
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    13
.menu add cascade -label "File" -menu $File
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    14
$File add command -label "New" -command { newfile }
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    15
$File add command -label "Open" -command { openfile }
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    16
$File add command -label "Save" -command { savefile $actualfile $actualpass}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    17
$File add command -label "Save as..." -command { savefile }
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    18
$File add separator
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    19
$File add command -label "Quit" -command { exit}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    20
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    21
. configure -menu .menu
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    22
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    23
set actualpass ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    24
set actualfile ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    25
wm title . "tkcrypt - New File"
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    26
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    27
proc askpassword { op entries } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    28
	set tl [toplevel .pass]
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    29
	global password1 password2
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    30
	global actualpass
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    31
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    32
	set password1 ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    33
	set password2 ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    34
	label .pass.info -text "Please introduce your password two times for $op:"
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    35
	pack .pass.info -side top
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    36
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    37
	entry .pass.entry -textvariable password1 -show "*"
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    38
	pack .pass.entry -side top
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    39
	if { $entries == 2} {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    40
		entry .pass.entry2 -textvariable password2 -show "*"
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    41
		pack .pass.entry2 -side top
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    42
	}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    43
	button .pass.ok -text "Ok" -command \
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    44
		{ destroy .pass }
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    45
	pack .pass.ok -side left
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    46
	button .pass.cancel -text "Cancel" \
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    47
		-command {set password1 ""; set password2 ""; destroy .pass}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    48
	pack .pass.cancel -side right
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    49
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    50
	bind .pass.entry <Return> {destroy .pass}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    51
	bind .pass.entry <Escape> {set password1 ""; set password2 ""; destroy .pass}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    52
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    53
	focus $tl
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    54
	focus $tl.entry
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    55
	grab $tl
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    56
	tkwait window $tl
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    57
	catch { grab release $tl }
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    58
	focus .
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    59
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    60
	if { $entries != 2 } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    61
		set tmppass $password1
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    62
		set password1 ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    63
		return $tmppass
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    64
	}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    65
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    66
	if { $password1 == $password2 } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    67
		set tmppass $password1
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    68
		set password1 ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    69
		set password2 ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    70
		return $tmppass
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    71
	} else {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    72
		set password1 ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    73
		set password2 ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    74
		tk_messageBox -type ok -message "The passwords don't match" \
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    75
			-icon error
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    76
		return ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    77
	}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    78
}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    79
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    80
proc newfile { } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    81
	global actualpass actualfile
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    82
	set actualpass ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    83
	set actualfile ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    84
	wm title . "tkcrypt - New File"
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    85
}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    86
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    87
proc openfile { } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    88
	global env actualpass actualfile
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    89
	set file [tk_getOpenFile]
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    90
	set pass [askpassword "Open" 1]
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    91
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    92
	if { $pass == "" } { return }
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    93
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    94
	# Decode
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    95
	set env(PASS) $pass
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    96
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    97
	set error [ catch { set txt [exec ccrypt -dc -E PASS $file] } result ]
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    98
	if { $error != 0 } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
    99
		tk_messageBox -type ok -message "Password incorrect:\n$result" \
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   100
			-icon error
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   101
		return
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   102
	}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   103
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   104
	.text delete 1.0 end
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   105
	.text insert end $txt
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   106
#	while { [eof $fd ] != 1 } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   107
#		set line [gets $fd]
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   108
#		.text insert end $line
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   109
#	}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   110
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   111
	set env(PASS) ""
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   112
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   113
	set actualpass $pass
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   114
	set actualfile $file
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   115
	wm title . "tkcrypt - $file"
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   116
}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   117
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   118
proc savefile { {file ""} {pass ""} } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   119
	global env actualpass actualfile
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   120
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   121
	if { $file == "" } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   122
		set file [tk_getSaveFile]
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   123
	}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   124
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   125
	if { $pass == "" } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   126
		set pass [askpassword "Save" 2]
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   127
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   128
		if { $pass == "" } { return }
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   129
	}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   130
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   131
	# Decode
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   132
	set env(PASS) $pass
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   133
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   134
	set error [ catch { set fd [open "|ccrypt -E PASS >$file" w] } result ]
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   135
	if { $error != 0 } {
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   136
		tk_messageBox -type ok -message "Password incorrect:\n$result" \
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   137
			-icon error
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   138
		return
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   139
	}
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   140
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   141
	puts -nonewline $fd [.text get 1.0 end]
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   142
	close $fd
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
	set actualfile $file
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   146
	wm title . "tkcrypt - $file"
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   147
	tk_messageBox -type ok -message "File \"$file\" saved!" \
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   148
			-icon info
3a01adf9b543 First release of tkcrypt
viric@llimona
parents:
diff changeset
   149
}