65 lines
1.1 KiB
Perl
65 lines
1.1 KiB
Perl
#!/usr/bin/perl
|
|
|
|
$POLY = 0xedb88320;
|
|
|
|
sub ProcessBit {
|
|
my ($bit) = @_;
|
|
|
|
my $topWasSet = ($shiftReg & (1 << 31));
|
|
|
|
$shiftReg <<= 1;
|
|
if($bit) {
|
|
$shiftReg |= 1;
|
|
}
|
|
|
|
if($topWasSet) {
|
|
$shiftReg ^= $POLY;
|
|
}
|
|
}
|
|
|
|
sub ProcessByte {
|
|
my ($v) = @_;
|
|
for(0..7) {
|
|
ProcessBit($v & (1 << $_));
|
|
}
|
|
}
|
|
|
|
sub ProcessString {
|
|
my ($str) = @_;
|
|
for (split //, $str) {
|
|
if($_ ne "\n" and $_ ne "\r") {
|
|
ProcessByte(ord($_));
|
|
}
|
|
}
|
|
}
|
|
|
|
sub LicenseKey {
|
|
my @MAGIC = ( 203, 244, 134, 225, 45, 250, 70, 65,
|
|
224, 189, 35, 3, 228, 51, 77, 169, );
|
|
my $magic = join('', map { chr($_) } @MAGIC);
|
|
|
|
my ($line1, $line2, $users) = @_;
|
|
|
|
$shiftReg = 0;
|
|
ProcessString($line1);
|
|
ProcessString($line2);
|
|
ProcessString($users);
|
|
ProcessString($magic);
|
|
|
|
my $key = '±²³MechSketchLicense' . "\n";
|
|
$key .= $line1 . "\n";
|
|
$key .= $line2 . "\n";
|
|
$key .= $users . "\n";
|
|
$key .= sprintf("%08x\n", $shiftReg);
|
|
|
|
return $key;
|
|
}
|
|
|
|
|
|
$line1 = "Jonathan Westhues";
|
|
$line2 = "";
|
|
$users = "single-user license";
|
|
|
|
print LicenseKey($line1, $line2, $users);
|
|
|