1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
use strict;
use vars qw($VERSION %IRSSI);
use Irssi qw(command_bind signal_add signal_emit signal_stop);
$VERSION = '3.00';
%IRSSI = (
authors => 'Juerd, Shiar',
contact => 'juerd@juerd.nl, shiar@shiar.org',
name => 'UeberRot encryption',
description => 'Rot n+i encryption and decryption',
license => 'Public Domain',
url => 'http://juerd.nl/site.plp/irssi',
changed => 'Tue Jan 21 01:40 CET 2003',
);
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;
}
sub sig_message {
my $signal = shift;
my $msg = \$_[1];
return unless $$msg =~ s/^\cO(\cB+)\cO(\cB+)\cO(\cO*)//;
my $orig = $$msg;
$$msg = "\cB" . rot 1, length $1, length $2, length $3, $$msg;
$$msg =~ s{\c_\c_\cO([a-zA-Z])}<
my $char = $1;
eval qq{
\$char =~ tr/A-Z/$char1/;
\$char =~ tr/a-z/$char2/;
};
$char;
>ego;
signal_stop;
signal_emit($signal, $_[0], $orig, @_[2..$#_]);
signal_emit($signal, @_);
}
command_bind rot => sub {
my ($data, $server, $window) = @_;
$data =~ s/([$char1$char2])/\c_\c_\cO$1/og;
eval qq{
\$data =~ tr/$char1/A-Z/;
\$data =~ tr/$char2/a-z/;
};
my $rotABC = 1 + int rand 13;
my $rot123 = 1 + 2 * int rand 4;
my $rotshift = 1 + int rand 10;
$window->command(
sprintf "say \cO%s\cO%s\cO%s%s",
"\cB" x $rotABC,
"\cB" x $rot123,
"\cO" x $rotshift,
rot 0, $rotABC, $rot123, $rotshift, $data
);
};
signal_add {
'message private' => sub { sig_message 'message private' => @_ },
'message public' => sub { sig_message 'message public' => @_ },
'message own_private' => sub { sig_message 'message own_private' => @_ },
'message own_public' => sub { sig_message 'message own_public' => @_ },
};
|