;************** ;* FiSH 10 mIRC Script - Hugely based on FiSH v1.30 * ;* Heavily modified for use in AdiIRC * ;************** ; "FiSH 10" by the way means "FiSH 2" in binary, and the year is 2010, therefore "FiSH 10". on *:START: { ; ********** you can change the blow.ini path here if you like: ********** ; for example to use %appdata%\mIRC: ; set %blow_ini $shortfn($mircdir $+ blow.ini) set %blow_ini $shortfn($nofile($mircexe) $+ blow.ini) ; Path to the fish_10.dll set %FiSH_dll $qt($shortfn($nofile($scriptdir) $+ fish_10.dll))) ; this one is just for info: .dll %FiSH_dll _callMe ; and this one is important again: .dll %FiSH_dll FiSH_SetIniPath %blow_ini } ; *** auto-keyXchange *** on *:OPEN:?:{ if (%autokeyx == [On]) { var %tmp1 = $dll(%FiSH_dll,FiSH_GetKey10, $network $nick) if ($len(%tmp1) > 0) { FiSH.DH1080_INIT $nick } unset %tmp1 } } ; Decrypt and echo a encrypted incoming action, halt the default output (mcps) on ^*:ACTION:mcps *:*:{ if ($dll(%FiSH_dll,INI_GetBool,process_incoming 1) == 0) return var %key = $dll(%FiSH_dll,FiSH_GetKey10, $network $target) ; hack, if key is empty, reset the ini path if ($len(%key) == 0) { .dll %FiSH_dll FiSH_SetIniPath %blow_ini %key = $dll(%FiSH_dll,FiSH_GetKey10, $network $target) } if ($len(%key) > 1) { var %msg = $iif($left($2, 1) == *, $right($2-, $calc($len($2-) - 1)), $2-) echo $color(action) -trlmbf $iif($chan, $chan, $nick) * $iif($nick($chan, $nick).pnick,  $+ $nick($chan, $nick).color $+ $v1 $+ , $nick) $dll(%FiSH_dll, FiSH_decrypt_msg, %key %msg) halt } } ; Decrypt and echo a encrypted incoming action, halt the default output on ^*:ACTION:+OK *:*:{ if ($dll(%FiSH_dll,INI_GetBool,process_incoming 1) == 0) return var %key = $dll(%FiSH_dll,FiSH_GetKey10, $network $target) ; hack, if key is empty, reset the ini path if ($len(%key) == 0) { .dll %FiSH_dll FiSH_SetIniPath %blow_ini %key = $dll(%FiSH_dll,FiSH_GetKey10, $network $target) } if ($len(%key) > 1) { var %msg = $iif($left($2, 1) == *, $right($2-, $calc($len($2-) - 1)), $2-) echo $color(action) -trlmbf $iif($chan, $chan, $nick) * $iif($nick($chan, $nick).pnick,  $+ $nick($chan, $nick).color $+ $v1 $+ , $nick) $dll(%FiSH_dll, FiSH_decrypt_msg, %key %msg) halt } } ; Decrypt and echo a encrypted incoming message, halt the default output on ^*:TEXT:+OK *:*:{ if ($dll(%FiSH_dll,INI_GetBool,process_incoming 1) == 0) return var %key = $dll(%FiSH_dll,FiSH_GetKey10, $network $target) ; hack, if key is empty, reset the ini path if ($len(%key) == 0) { .dll %FiSH_dll FiSH_SetIniPath %blow_ini %key = $dll(%FiSH_dll,FiSH_GetKey10, $network $target) } if ($len(%key) > 1) { var %msg = $iif($left($2, 1) == *, $right($2-, $calc($len($2-) - 1)), $2-) echo -trlmbf $iif($chan, $chan, $nick) < $+ $iif($nick($chan, $nick).pnick,  $+ $nick($chan, $nick).color $+ $v1 $+ , $nick) $+ > $dll(%FiSH_dll, FiSH_decrypt_msg, %key %msg) halt } } ; Decrypt and echo a encrypted incoming message, halt the default output (mcps) on ^*:TEXT:mcps *:*:{ if ($dll(%FiSH_dll,INI_GetBool,process_incoming 1) == 0) return var %key = $dll(%FiSH_dll,FiSH_GetKey10, $network $target) ; hack, if key is empty, reset the ini path if ($len(%key) == 0) { .dll %FiSH_dll FiSH_SetIniPath %blow_ini %key = $dll(%FiSH_dll,FiSH_GetKey10, $network $target) } if ($len(%key) > 1) { var %msg = $iif($left($2, 1) == *, $right($2-, $calc($len($2-) - 1)), $2-) echo -trlmbf $iif($chan, $chan, $nick) < $+ $iif($nick($chan, $nick).pnick,  $+ $nick($chan, $nick).color $+ $v1 $+ , $nick) $+ > $dll(%FiSH_dll, FiSH_decrypt_msg, %key %msg) halt } } ; ###################################### ; ### mark outgoing (own text) START ### on *:INPUT:*:{ if (($left($1,1) == / && !$ctrlenter) || (!$1)) return if ($dll(%FiSH_dll,INI_GetBool,process_outgoing 1) == 0) return var %key = $dll(%FiSH_dll,FiSH_GetKey10,$network $target) if ($len(%key) > 1) { var %tmp1 = $readini(%blow_ini,FiSH,plain_prefix) if (%tmp1 == $null) { %tmp1 = +p } var %pfxlen = $len(%tmp1) if (%tmp1 != $left($1,%pfxlen)) { var %tmp1 = $readini(%blow_ini,FiSH,mark_encrypted) if (%mark_style == $null) { %mark_style = 2 } if (%tmp1 == $null) { %tmp1 = $chr(2) $+ $chr(3) $+ 12· $+ $chr(3) $+ $chr(2) } ;### own encrypted text [default crypt mark] ### if (%mark_style == 1) { var %own_encrypted_text = < $+ $iif($nick($chan,$nick).pnick, $v1, $nick) $+ > $1- $+ $chr(32) $+ %tmp1 } ;### [default crypt mark] own encrypted text ### if (%mark_style == 2) { var %own_encrypted_text = < $+ $iif($nick($chan,$nick).pnick, $v1, $nick) $+ > $+ %tmp1 $1- } ;### own encrypted text (the nick brackets are bold+blue) ### if (%mark_style == 3) { var %own_encrypted_text = $+($chr(2), $chr(3), 12<, $chr(3), $chr(2)) $+ $iif(($gettok($readini(mirc.ini, options, n2), 30, 44)) && (($me isvoice $chan) || ($me isop $chan)), $left($nick(#, $nick).pnick, 1)) $+ $iif($nick($chan,$nick).pnick, $v1, $nick) $+ $+($chr(2), $chr(3), 12>, $chr(3), $chr(2)) $1- } echo $color(Own text) -t %own_encrypted_text } else { echo $color(Own text) -t < $+ $iif(($gettok($readini(mirc.ini, options, n2), 30, 44)) && (($me isvoice $chan) || ($me isop $chan)), $left($nick(#, $nick).pnick, 1)) $+ $nick $+ > $right($1-, $calc(0 - %pfxlen)) } privmsg $target : $+ +OK $dll(%FiSH_dll, FiSH_encrypt_msg, %key $1-) halt } unset %tmp1 } ; ### mark outgoing (own text) END ### ; #################################### on *:CONNECT:{ if (%autoset_localip == [On]) { localinfo FiSH.OWNZ $dll(%FiSH_dll,FiSH_GetMyIP,NOT_USED) } } on *:NICK:{ if (($nick == $me) || ($upper($newnick) == $upper($nick))) { return } if (($query($newnick) == $null) || (%NickTrack != [On])) { return } var %ky_tmp = $dll(%FiSH_dll,FiSH_GetKey10,$network $nick) if ($len(%ky_tmp) > 4) { writeini -n %blow_ini $newnick key %ky_tmp writeini -n %blow_ini $newnick dh1080_cbc $readini(%blow_ini,$nick,dh1080_cbc) } unset %ky_tmp } on ^*:NOTICE:DH1080_INIT*:?:{ if ($len($2) > 178 && $len($2) < 182) { query $nick echo $color(Mode text) -tm $nick *** FiSH: Received DH1080 public key from $nick $+ , sending mine... var %tempkey $dll(%FiSH_dll,DH1080_gen,NOT_USED) %FiSH.prv_key = $gettok(%tempkey, 1, 32) %FiSH.pub_key = $gettok(%tempkey, 2, 32) unset %tempkey var %secret = $dll(%FiSH_dll,DH1080_comp, %FiSH.prv_key $2) if ($3 == CBC) { .notice $nick DH1080_FINISH %FiSH.pub_key CBC FiSH.setkey $nick cbc: $+ %secret } else { .notice $nick DH1080_FINISH %FiSH.pub_key FiSH.setkey $nick %secret } unset %FiSH.prv_key unset %FiSH.pub_key unset %secret } halt } on ^*:NOTICE:DH1080_FINISH*:?:{ if ( %FiSH.dh [ $+ [ $nick ] ] != 1 ) { echo "No keyXchange in progress!" halt } if ($len($2) > 178 && $len($2) < 182) { if ($len(%FiSH.prv_key) == 180 || $len(%FiSH.prv_key) == 181) { var %secret = $dll(%FiSH_dll,DH1080_comp, %FiSH.prv_key $2) if ($3 == CBC) FiSH.setkey $nick cbc: $+ %secret else FiSH.setkey $nick %secret unset %FiSH.dh $+ [ $nick ] unset %FiSH.prv_key unset %FiSH.pub_key unset %secret } } halt } alias -l FiSH.WriteKey { if ($2 == /query) var %cur_contact = $active else var %cur_contact = $2 if ($3- == $null) return $dll(%FiSH_dll,FiSH_WriteKey10,$1 $network %cur_contact $3-) var %info = *** FiSH: Key for %cur_contact set to *censored* $iif($gettok($3-,1,58) == cbc, (CBC Mode), ) if ($window(%cur_contact) == $null) echo $color(Mode text) -at %info else echo $color(Mode text) -tm %cur_contact %info } alias FiSH.setkey { FiSH.WriteKey decode_utf8 $1 $2- } alias FiSH.setkey_utf8 { FiSH.WriteKey raw_bytes $1 $2- } alias FiSH.usechankey { var %theKey = $readini(%blow_ini,$2,key) if (%theKey == $null) { echo $color(Mode text) -at *** FiSH: No valid key for $2 found } else { writeini -n %blow_ini $1 key %theKey writeini -n %blow_ini $1 date $date unset %theKey echo $color(Mode text) -at *** FiSH: Using same key as $2 for $1 } } alias FiSH.showkey { if ($1 == /query) var %cur_contact = $active else var %cur_contact = $1 %theKey = $dll(%FiSH_dll,FiSH_GetKey10, $network %cur_contact) if (%theKey != $null) { window -dCo +l @Blowcrypt-Key -1 -1 500 80 aline @Blowcrypt-Key Key for %cur_contact : aline -p @Blowcrypt-Key %theKey unset %theKey } else { echo $color(Mode text) -at *** FiSH: No valid key for %cur_contact found } } alias FiSH.removekey { if ($1 == /query) var %cur_contact = $active else var %cur_contact = $1 $dll(%FiSH_dll,FiSH_DelKey10,$network %cur_contact) echo $color(Mode text) -at *** FiSH: Key for %cur_contact has been removed } alias keyx { FiSH.DH1080_INIT $1 } alias FiSH.DH1080_INIT { if ( ($1 == /query) || ($1 == $null) ) var %cur_contact = $active else var %cur_contact = $1 set %FiSH.dh $+ [ %cur_contact ] 1 var %tempkey $dll(%FiSH_dll,DH1080_gen,NOT_USED) %FiSH.prv_key = $gettok(%tempkey, 1, 32) %FiSH.pub_key = $gettok(%tempkey, 2, 32) unset %tempkey .NOTICE %cur_contact DH1080_INIT %FiSH.pub_key $iif($dll(%FiSH_dll,INI_GetSectionBool,$network %cur_contact dh1080_cbc 1) == 0,, CBC) echo $color(Mode text) -tm $nick *** FiSH: Sent my DH1080 public key to %cur_contact $+ , waiting for reply ... } ; Decrypt topic changes if enabled on ^*:TOPIC:#:{ if ($dll(%FiSH_dll,INI_GetSectionBool,$network $chan encrypt_topic 0) != 1) { return } if ($left($1,3) != +OK && $left($1,4) != mcps) { return } if ($left($1,3) == +OK) { var %msg = $right($1-,$calc($len($1-) - 4)) } if ($left($1,4) == mcps) { var %msg = $right($1-,$calc($len($1-) - 5)) } var %key = $dll(%FiSH_dll,FiSH_GetKey10,$network $target) if ($len(%key) > 1) { var %msg = $iif($left($1,1) == *,$right($1-, $calc($len($1-) - 1)), $1-) echo $color(topic) -t # * $nick changes topic to: $dll(%FiSH_dll, FiSH_decrypt_msg,%key %msg) halt } } ; Decrypt initial topic if enabled raw 332:*:{ if ($dll(%FiSH_dll,INI_GetSectionBool,$network $2 encrypt_topic 0) != 1) { return } if ($left($3,3) != +OK) { return } var %key = $dll(%FiSH_dll,FiSH_GetKey10,$network $2) if ($len(%key) > 1) { var %msg = $iif($left($3,1) == *,$right($3-, $calc($len($3-) - 1)), $3-) echo $color(topic) -t $2 * Topic is: $dll(%FiSH_dll, FiSH_decrypt_msg,%key %msg) halt } } alias FiSH.prefix { if ($1 != $null) { writeini -n %blow_ini FiSH plain_prefix $1- flushini mirc.ini echo $color(Mode text) -at *** FiSH: Plain-prefix set to $1- } } alias FiSH.showmyip { window -dCo +l @Local-IP -1 -1 500 80 aline @Local-IP Your external IP address : aline -p @Local-IP $dll(%FiSH_dll,FiSH_GetMyIP,FiSH) } menu channel { - FiSH .Show key :FiSH.showkey $chan .Set new key :FiSH.setkey $chan $? .Set new key (UTF-8) :FiSH.setkey_utf8 $chan $? .Remove key :FiSH.removekey $chan } menu query { - FiSH .DH1080 keyXchange: FiSH.DH1080_INIT $1 .- .Show key :FiSH.showkey $1 .Set new key :FiSH.setkey $1 $? .Set new key (UTF-8) :FiSH.setkey_utf8 $1 $? .Remove key :FiSH.removekey $1 } menu nicklist { - FiSH .DH1080 keyXchange: FiSH.DH1080_INIT $1 .- .Show key :FiSH.showkey $1 .Set new key :FiSH.setkey $1 $? .Set new key (UTF-8) :FiSH.setkey_utf8 $1 $? .Remove key :FiSH.removekey $1 .Use same key as $chan :FiSH.usechankey $1 $chan } menu status,channel,nicklist,query { FiSH .- .Set plain-prefix $chr(91) $readini(%blow_ini,FiSH,plain_prefix) $chr(93) :FiSH.prefix $?="Enter new plain-prefix:" .Auto-KeyXchange $+ $chr(32) $+ %autokeyx ..Enable :set %autokeyx [On] ..Disable :set %autokeyx [Off] .Local IP ..Set local IP now: localinfo FiSH.OWNZ $dll(%FiSH_dll,FiSH_GetMyIP,FiSH) ..Set after connecting $+ $chr(32) $+ %autoset_localip ...Enable :set %autoset_localip [On] ...Disable :set %autoset_localip [Off] ..Copy local IP to clipboard: clipboard $dll(%FiSH_dll,FiSH_GetMyIP,FiSH) ..Show local IP :FiSH.showmyip .Misc config ..Encrypt outgoing $iif($dll(%FiSH_dll,INI_GetBool,process_outgoing 1) == 0, [Off], [On]) ...Enable :writeini -n %blow_ini FiSH process_outgoing 1 ...Disable :writeini -n %blow_ini FiSH process_outgoing 0 ..Decrypt incoming $iif($dll(%FiSH_dll,INI_GetBool,process_incoming 1) == 0, [Off], [On]) ...Enable :writeini -n %blow_ini FiSH process_incoming 1 ...Disable :writeini -n %blow_ini FiSH process_incoming 0 ..- ..Crypt-Mark (Incoming) ...Prefix :writeini -n %blow_ini FiSH mark_position 2 ...Suffix :writeini -n %blow_ini FiSH mark_position 1 ...Disable :writeini -n %blow_ini FiSH mark_position 0 ..Crypt-Mark (Outgoing) $+ $chr(32) $+ %mark_outgoing ...Enable :set %mark_outgoing [On] ...Disable :set %mark_outgoing [Off] ...- ...Style 1 :{ set %mark_style 1 set %mark_outgoing [On] } ...Style 2 :{ set %mark_style 2 set %mark_outgoing [On] } ...Style 3 :{ set %mark_style 3 set %mark_outgoing [On] } ..NickTracker $+ $chr(32) $+ %NickTrack ...Enable :set %NickTrack [On] ...Disable :set %NickTrack [Off] ..Encrypt NOTICE $iif($dll(%FiSH_dll,INI_GetBool,encrypt_notice) == 1, [On], [Off]) ...Enable :writeini -n %blow_ini FiSH encrypt_notice 1 ...Disable :writeini -n %blow_ini FiSH encrypt_notice 0 ..Encrypt ACTION $iif($dll(%FiSH_dll,INI_GetBool,encrypt_action) == 1, [On], [Off]) ...Enable :writeini -n %blow_ini FiSH encrypt_action 1 ...Disable :writeini -n %blow_ini FiSH encrypt_action 0 ..- ..Open blow.ini :run %blow_ini ..- ..FiSH 10 - based on FiSH 1.30 by RXD :run http://github.com/flakes/mirc_fish_10 } menu channel { FiSH .Misc config ..Crypt-Mark (Incoming) ...- ...Only for $chan $iif($dll(%FiSH_dll, INI_GetSectionBool,$network $chan mark_encrypted $dll(%FiSH_dll, INI_GetBool,mark_encrypted)) == 0, [Off], [On]) ....Enable :dll %FiSH_dll INI_SetSectionBool $network $chan mark_encrypted 1 ....Disable :dll %FiSH_dll INI_SetSectionBool $network $chan mark_encrypted 0 ..Encrypt TOPIC $iif($dll(%FiSH_dll, INI_GetSectionBool,$network $chan encrypt_topic 0) == 1, [On], [Off]) ...Enable :dll %FiSH_dll INI_SetSectionBool $network $chan encrypt_topic 1 ...Disable :dll %FiSH_dll INI_SetSectionBool $network $chan encrypt_topic 0 } menu query { FiSH .Misc config ..Crypt-Mark (Incoming) ...- ...Only for $1 $iif($dll(%FiSH_dll, INI_GetSectionBool,$network $1 mark_encrypted $dll(%FiSH_dll,INI_GetBool, mark_encrypted)) == 0, [Off], [On]) ....Enable :dll %FiSH_dll INI_SetSectionBool $network $1 mark_encrypted 1 ....Disable :dll %FiSH_dll INI_SetSectionBool $network $1 mark_encrypted 1 ..CBC key exchange $iif($dll(%FiSH_dll, INI_GetSectionBool,$network $1 dh1080_cbc 1) == 1, [On], [Off]) ...Enable :dll %FiSH_dll INI_SetSectionBool $network $1 dh1080_cbc 1 ...Disable :dll %FiSH_dll INI_SetSectionBool $network $1 dh1080_cbc 0 }