Makefile.in: Drop dist target
[secnet] / test-example / random-fake-userv
1 #!/usr/bin/perl -w
2
3 use strict;
4 use POSIX;
5
6 open R, '/dev/urandom' or die $!;
7
8 system 'cat >/dev/null &';
9
10 sub randbytes ($) {
11 my ($count) = @_;
12 my $s;
13 my $r = read R, $s, $count;
14 die $! unless $r==$count;
15 return $s;
16 }
17
18 sub randbyteval () {
19 my $b = randbytes 1;
20 my ($r) = unpack 'C', $b;
21 return $r;
22 }
23
24 sub randvalue ($$) {
25 my ($min,$maxplus1) = @_;
26 my $b = randbyteval;
27 return floor(($b/256.0) * ($maxplus1-$min)) + $min;
28 }
29
30 for (;;) {
31 my $lenbits = randvalue 0,14;
32 my $len= (randbyteval << 8) | randbyteval;
33 $len &= (1 << $lenbits)-1;
34 my $data = randbytes $len;
35 if (randbyteval >= 0x80) {
36 $data =~ s{[\xc0\xdb]}{
37 $& eq "\xc0" ? "\xcb\xdc" :
38 $& eq "\xdb" ? "\xcb\xdd" :
39 die
40 }ge;
41 }
42 print "\xc0";
43 print $data;
44 STDOUT->flush;
45 }