nasm/perllib/gensv.pl
H. Peter Anvin b938e043ca phash: don't rely on the build platform Perl version of rand()
rand() in Perl can vary between platforms, so don't use it.  Instead,
remove a completely pointless level of indirection (it introduced a
permutation which cancelled itself out) and provide a canned set of
random numbers for the rest.  This guarantees we will always use the
same numbers.
2007-08-31 18:10:23 +00:00

42 lines
798 B
Perl
Executable file

#!/usr/bin/perl
#
# Generate a list of rotation vectors so we always use the same set.
# This needs to be run on a platform with /dev/urandom.
#
($n) = @ARGV;
sysopen(UR, '/dev/urandom', O_RDONLY) or die;
$maxlen = 78;
print "\@random_sv_vectors = (\n";
$outl = ' ';
for ($i = 0; $i < $n; $i++) {
do {
die if (sysread(UR, $x4, 4) != 4);
@n = unpack("C*", $x4);
$n[0] &= 31;
$n[1] &= 31;
$n[2] &= 31;
$n[3] &= 31;
} while ($n[0] == 0 || $n[1] == 0 || $n[2] == 0 || $n[3] == 0 ||
$n[0] == $n[3] || $n[1] == $n[2]);
$xl = sprintf(" [%d,%d,%d,%d]%s",
$n[0], $n[1], $n[2], $n[3],
($i == $n-1) ? '' : ',');
if (length($outl.$xl) > $maxlen) {
print $outl, "\n";
$outl = ' ';
}
$outl .= $xl;
}
close(UR);
print $outl, "\n";
print ");\n";
print "1;\n";