Commit 3b5aa771 authored by Juerd's avatar Juerd Committed by Sébastien Helleu

New script foo.pl: rot n+i encryption and decryption

parent 2cd99788
use strict;
use Encode qw(encode_utf8);
weechat::register(
'foo',
'Juerd <#####@juerd.nl>',
'3.00',
'PD',
'Rot n+i encryption and decryption',
'',
''
);
# This is a port of the irssi script foo.pl that has existed since 2001.
# It was originally written as a simple scripting example, but is still
# sometimes used for fun.
# Didn't port the non-ascii stuff to weechat, because it assumes Windows-1252
# or latin1, which nobody uses anymore. Some UTF-8 thing would be better.
#my $char1 = "\xC0-\xCF\xD2-\xD6\xD8-\xDD";
#my $char2 = "\xE0-\xF6\xF8-\xFF";
sub rot {
my ($dir, $rotABC, $rot123, $rotshift, $msg) = @_;
my $i = 0;
for (0 .. length $msg) {
my $char = \substr $msg, $_, 1;
$i += $rotshift;
$$char =~ tr/a-zA-Z/b-zaB-ZA/ for 1..abs $dir *26 - ($rotABC + $i) % 26;
$$char =~ tr/0-9/1-90/ for 1..abs $dir *10 - ($rot123 + $i) % 10;
}
return $msg;
}
# weechat encodes ^O, ^B, and ^_ differently.
my $O = "\x1c";
my $B = "(?:[\x1a\x1b]\x01)"; # \x1a is on, \x1b is off.
my $U = "(?:[\x1a\x1b]\x04)";
sub hook_print_cb {
my ($data, $buffer, $date, $tags, $displayed, $highlight, $prefix, $msg) = @_;
return weechat::WEECHAT_RC_OK unless $msg =~ s/^$O($B+)$O($B+)$O($O*)//;
$msg = rot 1, length($1)/2, length($2)/2, length $3, $msg;
weechat::print_date_tags($buffer, $date, $tags, "$prefix\t\x1a\x01$msg");
return weechat::WEECHAT_RC_OK;
}
sub hook_cmd_rot_cb {
my ($data, $buffer, $args) = @_;
my $rotABC = 1 + int rand 13;
my $rot123 = 1 + 2 * int rand 4;
my $rotshift = 1 + int rand 10;
weechat::command(
$buffer,
encode_utf8(sprintf "/say \cO%s\cO%s\cO%s%s",
"\cB" x $rotABC,
"\cB" x $rot123,
"\cO" x $rotshift,
rot 0, $rotABC, $rot123, $rotshift, $args
)
);
}
# Yuck, symbolic references to subs instead of actual CODE refs...
weechat::hook_print("", "notify_none,notify_message,notify_private,notify_highlight", "", 0, "hook_print_cb", "");
weechat::hook_command("rot", "Sends via UeberRot", "", "", "", "hook_cmd_rot_cb", "");
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment