1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59: #include <stdio.h>
60: #include <stdlib.h>
61: #include <openssl/rand.h>
62:
63: #include "../e_os.h"
64:
65:
66:
67:
68: int main(int argc,char **argv)
69: {
70: unsigned char buf[2500];
71: int i,j,k,s,sign,nsign,err=0;
72: unsigned long n1;
73: unsigned long n2[16];
74: unsigned long runs[2][34];
75:
76: long d;
77:
78: i = RAND_pseudo_bytes(buf,2500);
79: if (i < 0)
80: {
81: printf ("init failed, the rand method is not properly installed\n");
82: err++;
83: goto err;
84: }
85:
86: n1=0;
87: for (i=0; i<16; i++) n2[i]=0;
88: for (i=0; i<34; i++) runs[0][i]=runs[1][i]=0;
89:
90:
91: sign=0;
92: nsign=0;
93: for (i=0; i<2500; i++)
94: {
95: j=buf[i];
96:
97: n2[j&0x0f]++;
98: n2[(j>>4)&0x0f]++;
99:
100: for (k=0; k<8; k++)
101: {
102: s=(j&0x01);
103: if (s == sign)
104: nsign++;
105: else
106: {
107: if (nsign > 34) nsign=34;
108: if (nsign != 0)
109: {
110: runs[sign][nsign-1]++;
111: if (nsign > 6)
112: runs[sign][5]++;
113: }
114: sign=s;
115: nsign=1;
116: }
117:
118: if (s) n1++;
119: j>>=1;
120: }
121: }
122: if (nsign > 34) nsign=34;
123: if (nsign != 0) runs[sign][nsign-1]++;
124:
125:
126: if (!((9654 < n1) && (n1 < 10346)))
127: {
128: printf("test 1 failed, X=%lu\n",n1);
129: err++;
130: }
131: printf("test 1 done\n");
132:
133:
134: #ifdef undef
135: d=0;
136: for (i=0; i<16; i++)
137: d+=n2[i]*n2[i];
138: d=d*16.0/5000.0-5000.0;
139: if (!((1.03 < d) && (d < 57.4)))
140: {
141: printf("test 2 failed, X=%.2f\n",d);
142: err++;
143: }
144: #endif
145: d=0;
146: for (i=0; i<16; i++)
147: d+=n2[i]*n2[i];
148: d=(d*8)/25-500000;
149: if (!((103 < d) && (d < 5740)))
150: {
151: printf("test 2 failed, X=%ld.%02ld\n",d/100L,d%100L);
152: err++;
153: }
154: printf("test 2 done\n");
155:
156:
157: for (i=0; i<2; i++)
158: {
159: if (!((2267 < runs[i][0]) && (runs[i][0] < 2733)))
160: {
161: printf("test 3 failed, bit=%d run=%d num=%lu\n",
162: i,1,runs[i][0]);
163: err++;
164: }
165: if (!((1079 < runs[i][1]) && (runs[i][1] < 1421)))
166: {
167: printf("test 3 failed, bit=%d run=%d num=%lu\n",
168: i,2,runs[i][1]);
169: err++;
170: }
171: if (!(( 502 < runs[i][2]) && (runs[i][2] < 748)))
172: {
173: printf("test 3 failed, bit=%d run=%d num=%lu\n",
174: i,3,runs[i][2]);
175: err++;
176: }
177: if (!(( 223 < runs[i][3]) && (runs[i][3] < 402)))
178: {
179: printf("test 3 failed, bit=%d run=%d num=%lu\n",
180: i,4,runs[i][3]);
181: err++;
182: }
183: if (!(( 90 < runs[i][4]) && (runs[i][4] < 223)))
184: {
185: printf("test 3 failed, bit=%d run=%d num=%lu\n",
186: i,5,runs[i][4]);
187: err++;
188: }
189: if (!(( 90 < runs[i][5]) && (runs[i][5] < 223)))
190: {
191: printf("test 3 failed, bit=%d run=%d num=%lu\n",
192: i,6,runs[i][5]);
193: err++;
194: }
195: }
196: printf("test 3 done\n");
197:
198:
199: if (runs[0][33] != 0)
200: {
201: printf("test 4 failed, bit=%d run=%d num=%lu\n",
202: 0,34,runs[0][33]);
203: err++;
204: }
205: if (runs[1][33] != 0)
206: {
207: printf("test 4 failed, bit=%d run=%d num=%lu\n",
208: 1,34,runs[1][33]);
209: err++;
210: }
211: printf("test 4 done\n");
212: err:
213: err=((err)?1:0);
214: #ifdef OPENSSL_SYS_NETWARE
215: if (err) printf("ERROR: %d\n", err);
216: #endif
217: EXIT(err);
218: return(err);
219: }