2 * Crude test driver for processing the VST and MCT testvector files
3 * generated by the CMVP RNGVS product.
5 * Note the input files are assumed to have a _very_ specific format
6 * as described in the NIST document "The Random Number Generator
7 * Validation System (RNGVS)", May 25, 2004.
10 #include <openssl/opensslconf.h>
16 printf("No FIPS RNG support\n");
21 #include <openssl/bn.h>
22 #include <openssl/dsa.h>
23 #include <openssl/fips.h>
24 #include <openssl/err.h>
25 #include <openssl/rand.h>
26 #include <openssl/fips_rand.h>
27 #include <openssl/x509v3.h>
35 unsigned char *key = NULL;
36 unsigned char *v = NULL;
37 unsigned char *dt = NULL;
38 unsigned char ret[16];
41 char *keyword, *value;
46 while(fgets(buf,sizeof buf,stdin) != NULL)
49 if(!strncmp(buf,"[AES 128-Key]", 13))
51 else if(!strncmp(buf,"[AES 192-Key]", 13))
53 else if(!strncmp(buf,"[AES 256-Key]", 13))
55 if (!parse_line(&keyword, &value, lbuf, buf))
57 if(!strcmp(keyword,"Key"))
59 key=hex2bin_m(value,&i);
62 fprintf(stderr, "Invalid key length, expecting %ld\n", keylen);
66 else if(!strcmp(keyword,"DT"))
68 dt=hex2bin_m(value,&i);
71 fprintf(stderr, "Invalid DT length\n");
75 else if(!strcmp(keyword,"V"))
77 v=hex2bin_m(value,&i);
80 fprintf(stderr, "Invalid V length\n");
86 fprintf(stderr, "Missing key or DT\n");
90 FIPS_rand_set_key(key, keylen);
93 if (FIPS_rand_bytes(ret,16) <= 0)
95 fprintf(stderr, "Error getting PRNG value\n");
112 unsigned char *key = NULL;
113 unsigned char *v = NULL;
114 unsigned char *dt = NULL;
115 unsigned char ret[16];
118 char *keyword, *value;
124 while(fgets(buf,sizeof buf,stdin) != NULL)
127 if(!strncmp(buf,"[AES 128-Key]", 13))
129 else if(!strncmp(buf,"[AES 192-Key]", 13))
131 else if(!strncmp(buf,"[AES 256-Key]", 13))
133 if (!parse_line(&keyword, &value, lbuf, buf))
135 if(!strcmp(keyword,"Key"))
137 key=hex2bin_m(value,&i);
140 fprintf(stderr, "Invalid key length, expecting %ld\n", keylen);
144 else if(!strcmp(keyword,"DT"))
146 dt=hex2bin_m(value,&i);
149 fprintf(stderr, "Invalid DT length\n");
153 else if(!strcmp(keyword,"V"))
155 v=hex2bin_m(value,&i);
158 fprintf(stderr, "Invalid V length\n");
164 fprintf(stderr, "Missing key or DT\n");
168 FIPS_rand_set_key(key, keylen);
169 FIPS_rand_seed(v,16);
170 for (i = 0; i < 10000; i++)
172 FIPS_rand_set_dt(dt);
173 if (FIPS_rand_bytes(ret,16) <= 0)
175 fprintf(stderr, "Error getting PRNG value\n");
179 for (j = 15; j >= 0; j--)
198 int main(int argc,char **argv)
202 fprintf(stderr,"%s [mct|vst]\n",argv[0]);
205 if(!FIPS_mode_set(1))
211 if (!FIPS_rand_test_mode())
213 fprintf(stderr, "Error setting PRNG test mode\n");
217 if(!strcmp(argv[1],"mct"))
219 else if(!strcmp(argv[1],"vst"))
223 fprintf(stderr,"Don't know how to %s.\n",argv[1]);