diff options
| author | manuel <manuel@mausz.at> | 2012-03-27 11:51:08 +0200 |
|---|---|---|
| committer | manuel <manuel@mausz.at> | 2012-03-27 11:51:08 +0200 |
| commit | 4f670845ff9ab6c48bcb5f7bf4d4ef6dc3c3064b (patch) | |
| tree | 868c52e06f207b5ec8a3cc141f4b8b2bdfcc165c /tests/arc4.pm | |
| parent | eae0bd57f0a26314a94785061888d193d186944a (diff) | |
| download | progos-4f670845ff9ab6c48bcb5f7bf4d4ef6dc3c3064b.tar.gz progos-4f670845ff9ab6c48bcb5f7bf4d4ef6dc3c3064b.tar.bz2 progos-4f670845ff9ab6c48bcb5f7bf4d4ef6dc3c3064b.zip | |
reorganize file structure to match the upstream requirements
Diffstat (limited to 'tests/arc4.pm')
| -rw-r--r-- | tests/arc4.pm | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/tests/arc4.pm b/tests/arc4.pm new file mode 100644 index 0000000..df19216 --- /dev/null +++ b/tests/arc4.pm | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | use strict; | ||
| 2 | use warnings; | ||
| 3 | |||
| 4 | sub arc4_init { | ||
| 5 | my ($key) = @_; | ||
| 6 | my (@s) = 0...255; | ||
| 7 | my ($j) = 0; | ||
| 8 | for my $i (0...255) { | ||
| 9 | $j = ($j + $s[$i] + ord (substr ($key, $i % length ($key), 1))) & 0xff; | ||
| 10 | @s[$i, $j] = @s[$j, $i]; | ||
| 11 | } | ||
| 12 | return (0, 0, @s); | ||
| 13 | } | ||
| 14 | |||
| 15 | sub arc4_crypt { | ||
| 16 | my ($arc4, $buf) = @_; | ||
| 17 | my ($i, $j, @s) = @$arc4; | ||
| 18 | my ($out) = ""; | ||
| 19 | for my $c (split (//, $buf)) { | ||
| 20 | $i = ($i + 1) & 0xff; | ||
| 21 | $j = ($j + $s[$i]) & 0xff; | ||
| 22 | @s[$i, $j] = @s[$j, $i]; | ||
| 23 | $out .= chr (ord ($c) ^ $s[($s[$i] + $s[$j]) & 0xff]); | ||
| 24 | } | ||
| 25 | @$arc4 = ($i, $j, @s); | ||
| 26 | return $out; | ||
| 27 | } | ||
| 28 | |||
| 29 | 1; | ||
