MD4: Difference between revisions
Undo revision 356315 by Grondilu (talk) on second thought this code may be wrong
(→{{header|Raku}}: use native types) |
|||
Line 1,982:
(formerly Perl 6)
<syntaxhighlight lang="raku" line>sub md4($str) {
my
my
{ $^x +& $^y +| +^$x +& $^z },▼
{ $^x +& $^y +| $x +& $^z +| $y +& $z },▼
{ $^x +^ $^y +^ $^z },▼
-> uint32 $v, $s { $v +< $s +| $v +> (32 - $s) }▼
my \mask = (1 +< 32) - 1;
my &f = -> $x, $y, $z { ($x +& $y) +| ($x +^ mask) +& $z }
sub pack-le (@a) {
gather for @a -> $a,$b,$c,$d { take $d +< 24 + $c +< 16 + $b +< 8 + $a }
my
my $term = False;
my $last = False;
repeat until $last {
my @block = @buf[$
my
given +@block {
@x = pack-le
when 56..63 {
$term =
@block.push(slip 0 xx 63
@x = pack-le
when 0..55 {
@block.push($term ?? 0 !!
@block.push(slip 0 xx 55 - $_);
my $bit_len
@x.push: $bit_len +& mask,
$last =
default {
die "oops";
}
}
}
▲ }
}
▲ }
}
▲ }
$a
$b = ($b + $bb) +& mask;
$c = ($c + $cc) +& mask;
$d = ($d + $dd) +& mask;
}
my $x = 0;
for ^4 {
$x +<= 8;
$n +>= 8;
}
$x;
}
b2l($a) +< 96 +
b2l($b) +< 64 +
b2l($c) +< 32 +
b2l($d);
}
|