53 lines
1.4 KiB
Raku
53 lines
1.4 KiB
Raku
sub own-password (Int $password, Int $nonce) {
|
|
my int $n1 = 0;
|
|
my int $n2 = $password;
|
|
for $nonce.comb {
|
|
given $_ {
|
|
when 1 {
|
|
$n1 = $n2 +& 0xFFFFFF80 +> 7;
|
|
$n2 +<= 25;
|
|
}
|
|
when 2 {
|
|
$n1 = $n2 +& 0xFFFFFFF0 +> 4;
|
|
$n2 +<= 28;
|
|
}
|
|
when 3 {
|
|
$n1 = $n2 +& 0xFFFFFFF8 +> 3;
|
|
$n2 +<= 29;
|
|
}
|
|
when 4 {
|
|
$n1 = $n2 +< 1;
|
|
$n2 +>= 31;
|
|
}
|
|
when 5 {
|
|
$n1 = $n2 +< 5;
|
|
$n2 +>= 27;
|
|
}
|
|
when 6 {
|
|
$n1 = $n2 +< 12;
|
|
$n2 +>= 20;
|
|
}
|
|
when 7 {
|
|
$n1 = $n2 +& 0x0000FF00 +| ($n2 +& 0x000000FF +< 24) +| ($n2 +& 0x00FF0000 +> 16);
|
|
$n2 = $n2 +& 0xFF000000 +> 8;
|
|
}
|
|
when 8 {
|
|
$n1 = $n2 +& 0x0000FFFF +< 16 +| $n2 +> 24;
|
|
$n2 = $n2 +& 0x00FF0000 +> 8;
|
|
}
|
|
when 9 { $n1 = +^$n2 }
|
|
default { $n1 = $n2 }
|
|
}
|
|
given $_ {
|
|
when 0 {}
|
|
when 9 {}
|
|
default { $n1 = ($n1 +| $n2) +& 0xFFFFFFFF }
|
|
}
|
|
$n2 = $n1;
|
|
}
|
|
$n1
|
|
}
|
|
|
|
say own-password( 12345, 603356072 );
|
|
say own-password( 12345, 410501656 );
|
|
say own-password( 12345, 630292165 );
|