Crypt-AppleTwoFish
view release on metacpan or search on metacpan
lib/Crypt/AppleTwoFish.pm view on Meta::CPAN
$bytes[ $j * 4 + $k ] = ( $h >> ( 24 - $k * 8 ) ) & 0xFF;
}
}
}
print "\nprecultivation bytes are ", ( join q{}, map { chr } @bytes ), "\n"
if $self->{DEBUG};
$bytes[0] = $self->_hoe_hoe_hoe( $bytes[0], 0, 2, 0x99, 0xDF );
$bytes[4] = $self->_hoe_hoe_hoe( $bytes[4], 4, 3, 0xB5, 0xFF );
$bytes[8] = $self->_hoe_hoe_hoe( $bytes[8], 8, 4, 0x59, 0xD3 );
$bytes[12] = $self->_hoe_hoe_hoe( $bytes[12], 12, 5, 0x2F, 0x1E );
my $tmp = $bytes[1];
$bytes[1] = $self->_hoe_hoe_hoe( $bytes[5], 1, 6, 0x95, 0xFC );
$bytes[5] = $self->_hoe_hoe_hoe( $bytes[9], 5, 7, 0x05, 0x36 );
$bytes[9] = $self->_hoe_hoe_hoe( $bytes[13], 9, 0, 0x05, 0x6D );
$bytes[13] = $self->_hoe_hoe_hoe( $tmp, 13, 9, 0x05, 0xE1 );
$tmp = $bytes[2];
$bytes[2] = $self->_hoe_hoe_hoe( $bytes[10], 2, 10, 0x4D, 0xB0 );
$bytes[10] = $self->_hoe_hoe_hoe( $tmp, 10, 11, 0x0B, 0x2E );
$tmp = $bytes[6];
$bytes[6] = $self->_hoe_hoe_hoe( $bytes[14], 6, 12, 0x93, 0x4E );
$bytes[14] = $self->_hoe_hoe_hoe( $tmp, 14, 13, 0x9b, 0x75 );
$tmp = $bytes[3];
$bytes[3] = $self->_hoe_hoe_hoe( $bytes[15], 3, 14, 0x93, 0xC8 );
$bytes[15] = $self->_hoe_hoe_hoe( $bytes[11], 15, 15, 0x33, 0x8B );
$bytes[11] = $self->_hoe_hoe_hoe( $bytes[7], 11, 1, 0x5B, 0x25 );
$bytes[7] = $self->_hoe_hoe_hoe( $tmp, 7, 8, 0xED, 0xC5 );
print "cultivated bytes are ", ( join q{}, map { chr } @bytes ), "\n"
if $self->{DEBUG};
return @bytes;
}
sub harvest_veggies {
my ( $self, @bytes ) = @_;
my $veggie = $self->{veggie};
use integer;
if ( $veggie =~ m/carrot|garlic|potato|radish|tomato/ ) {
_till( \@bytes, $veggie );
}
_weed( \@bytes, $veggie );
my $sha1 = Digest::SHA->new(1);
$sha1->add( $self->{combine_key} );
my @digest_bytes = map { ord } split //, $sha1->digest;
_weed( \@digest_bytes, 'pepcid' );
for my $i ( 0 .. 13 ) {
my $a = $bytes[ $i + 2 ];
my $b = $digest_bytes[ $i + 1 ];
my $c = ( $a * 0xFFFF9129 + 0xA07E ) | 0xFF;
my $d = ( $a * 0xFFAD8735 + 0x109ABD82 ) ^ $c;
my $e = ( $a * 0xFFFF9129 + 0xA07E ) | ( $a * 0x5278CB + 0xEF65427D );
my $f = $e | 0xFF;
my $g = ( $b * 0xFFFFCB29 + 0x417E ) | 0xFF;
my $h = ( $b * 0xFFFFCB29 + 0x417E ) | ( $b * 0x698AC6 + 0xD597C97D );
my $j = $h | 0xFF;
my $k = ( $b * 0xFF96753A + 0x2A683682 ) ^ $g;
my $m =
( $b * 0xD2ABDE + $j * 0xFFFFFFFC + $k * 0xFFFFFFFE + 0xAB3015F3 ) |
( $a * 0xA413E8 + $d * 0xFFFFFFFE + $f * 0xFFFFFFFC + 0xDECBC5F3 );
$digest_bytes[ $i + 1 ] = (
(
$a * 0x3FC1ACD4 +
$b * 0x5B76357 +
( $d + $k + $m ) * 0x71070EE7 +
( $f + $j ) * 0xE20E1DCE + 0xB7ABCB54
)
) & 0xFF;
}
my $a = ord substr $self->{hwID}, 4, 1;
my $b = $a * 0xFFFF9CFF + 0xB8FF;
my $c = $b | 0xFF;
my $d = $b | ( $a * 0x32FA52 + 0x21E2D7AB );
my $e = ( $a * 0xFFCD05AE + 0xDE1D2854 ) ^ $c;
my $f = $d | 0xFF;
my $nsize = ( $a * 0xFFCD68AF + $e + $f * 2 + 0xDE1C6F57 ) & 0x80000003 + 8;
use bigint;
my $ndigest_bytes = '0x' . join q{},
_dust( @digest_bytes[ 0 .. $nsize - 1 ] );
$ndigest_bytes = substr $ndigest_bytes, 0, ( $nsize * 2 ) + 2;
my $nd = Math::BigInt->new($ndigest_bytes);
my $nbytes_str = '0x' . join q{},
map { length $_ > 1 ? $_ : '0' . $_ } _dust(@bytes);
my $nbytes = Math::BigInt->new($nbytes_str);
# print "nbytes_str is $nbytes_str, nybytes is $nbytes\n" if $self->{DEBUG};
my $nB2 = 0xFFFFFFFFFFFFFFF9C31A00000000000933CCD065;
my $n00 = 0x100000000000000063CE600000000001DB577CE3F;
my $n1 = 1;
my $bits_in_digest = length( ( Math::BigInt->new($nd) )->as_bin ) - 2;
for ( my $i = $bits_in_digest - 1 ; $i >= 0 ; --$i ) {
$n1 *= $n1;
$nbytes *= $nbytes;
if ( $nd & ( 1 << $i ) ) {
$n1 = $nbytes - $n1;
my $m = ( ( ( $n1 >> 159 ) * $n00 ) >> 161 ) * $nB2;
$n1 = ( $n1 - $m ) % $nB2;
$m = ( ( ( $nbytes >> 159 ) * $n00 )>> 161 ) * $nB2;
$nbytes = ( $nbytes - $m ) % $nB2;
}
else {
$nbytes -= $n1;
my $m = ( ( ( $nbytes >> 159 ) * $n00 ) >> 161 )* $nB2;
$nbytes = ( $nbytes - $m )% $nB2;
$m = ( ( ( $n1 >> 159 ) * $n00 ) >> 161 ) * $nB2;
$n1 -= $m;
$nbytes %= $nB2;
}
} # now $n1 is right
my @digits =
( substr( ( Math::BigInt->new($n1) )->as_hex, 2 ) ) =~ m/[\d\w]{2}/g;
my $digit_count = scalar @digits;
my $digest_fodder = join q{}, map { chr( hex $_ ) } @digits;
if ( $digit_count < 32 ) {
my $zeroes = "\x00" x ( 32 - $digit_count );
$digest_fodder = $zeroes . $digest_fodder;
}
$sha1->reset;
$sha1->add($digest_fodder);
my $key_key = substr $sha1->digest, 1, 16;
( run in 0.539 second using v1.01-cache-2.11-cpan-e1769b4cff6 )