Re: Linux/axp results

New Message Reply About this list Date view Thread view Subject view Author view

David Honig (honig@sprynet.com)
Fri, 09 Apr 1999 10:34:59 -0700


I find that FreeBSD 3.0's /dev/urandom is also good using MUST.
I have not run Diehard because it will take a while to accumulate
that much data.

Here's a version of MUST that I run which looks at successive chunks
of a file and plots its MUST-measure. I've used it to look at
raw tcpdumps.

/*
   ULISCAN.c ---blocksize of 8

1 Oct 98
1 Dec 98
21 Dec 98 uliscan.c derived from ueli8.c

This implements Ueli M Maurer's
"Universal Statistical Test for Random Bit Generators"
using L=8

Accepts a filename on the command line;
writes its results, with other info, to stdout.

Handles input file exhaustion gracefully.

Ref: J. Cryptology v 5 no 2, 1992 pp 89-105
also on the web somewhere, which is where I found it.

-David Honig
honig@sprynet.com

Built with Wedit 2.3, lcc-win32
http://www.cs.virginia.edu/~lcc-win32

Usage:
        ULISCAN filename
        outputs to stdout

*/

#define L 8
#define V (1<<L)
#define Q (10*V)
#define K (100 *Q)
#define MAXSAMP (Q + K)

#include <stdio.h>
#include <math.h>

int main( argc, argv )
int argc;
char **argv;
{
FILE *fptr;
int i,j;
int b, c;
int table[V];
double sum=0.0;
int iproduct=1;
int run;

extern double log(/* double x */);

printf("Uliscan 21 Dec 98 \nL=%d %d %d \n", L, V, MAXSAMP);
if (argc <2)
        {printf("Usage: Uliscan filename\n"); exit(-1); }
else
        printf("Measuring file %s\n", argv[1]);

fptr=fopen(argv[1],"rb");
if (fptr == NULL) {printf("Can't find %s\n", argv[1]); exit(-1); }

for (i=0; i<V; i++) table[i]=0;
for (i=0; i<Q; i++) {
        b= fgetc(fptr);
        table[ b ]=i;
}

printf("Init done\n");

printf("Expected value for L=8 is 7.1836656\n");

run=1;
 while (run)
 { sum=0.0;
    iproduct=1;

        if (run)
          for (i=Q; run && i<Q+K; i++)
                {j=i;
                b=fgetc(fptr); if (b<0) run=0;
                if (run) {
                        if (table[b] > j) j += K;
                        sum += log( (double) ( j-table[b] ) ) ;

                        table[ b ]=i;
                }
        }

        if (!run) printf("Premature end of file; read %d blocks.\n", i-Q);

        sum = (sum/( (double) (i-Q) ) ) / log(2.0);
        printf("%4.4f ", sum);
        for (i=0; i< (int) (sum*8.0 + 0.50 ) ; i++)
                printf("-");
        printf("\n");

        /* refill initial table */
        if (0) for (i=0; i<Q; i++) {
                b= fgetc(fptr);
                if (b<0) run=0;
                else table[ b ]=i;
                }

   }
}

  


New Message Reply About this list Date view Thread view Subject view Author view

 
All trademarks and copyrights are the property of their respective owners.

Other Directory Sites: SeekWonder | Directory Owners Forum

The following archive was created by hippie-mail 7.98617-22 on Thu May 27 1999 - 23:44:21