Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
BitchX
GitHub Repository: BitchX/BitchX1.3
Path: blob/master/doc/tcl/op-crypt.tcl
1072 views
if {![info exists blowfish_version]} {
	putscr "You MUST load the blowfish encryption module prior to loading this!"
	return 0
}

set crypt_timeout 60

#borrowed from alltools.tcl
proc randstring {count} {
  set rs ""
  for {set j 0} {$j < $count} {incr j} {
     set x [rand 62]
     append rs [string range "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" $x $x]
  }
  unset x
  unset j
  return $rs
}

proc crop {n args} {
	global cryptkeeper cryptlist crypt_timeout
	if [onchan $n [_T]] {
		if {![info exists cryptkeeper([string tolower $n])]} {
			putscr "You must first set a pair of crypt keys before using this."
			putscr "Try /addcrypt <nick> <key1> <key2>"
			return 0
		}
		putserv "privmsg $n :crypt_op"
		set cryptlist([string tolower $n]) [utimer $crypt_timeout "unset cryptlist([string tolower $n])"]
	}
	return 0
}

bind msg -1 crypt_op crypt_response

proc crypt_response {n u h a} {
	global cryptkeeper cryptlist
	if {![info exists cryptlist([string tolower $n])]} {
		putscr "$n requesting UNAUTHORIZED crypt verification!"
		return 1
	} {
		unset cryptlist([string tolower $n])
		putserv "privmsg $n :crypt_reply [encrypt [lindex $cryptkeeper([string tolower $n]) 1] [decrypt [lindex $cryptkeeper([string tolower $n]) 0] $a]]"
	}
	return 1
}

proc addcrypt {n k1 k2 args} {
	global cryptkeeper
	set cryptkeeper([string tolower $n]) "$k1 $k2"
	putscr "Added $n to the crypt keeper with keys $k1 and $k2."
}
return 0