1 # perl script to run OpenSSL tests
4 my $base_path = "\\openssl";
6 my $output_path = "$base_path\\test_out";
7 my $cert_path = "$base_path\\certs";
8 my $test_path = "$base_path\\test";
9 my $app_path = "$base_path\\apps";
11 my $tmp_cert = "$output_path\\cert.tmp";
12 my $OpenSSL_config = "$app_path\\openssl.cnf";
13 my $log_file = "$output_path\\tests.log";
18 # process the command line args to see if they wanted us to pause
19 # between executing each command
31 ############################################################################
34 # delete all the output files in the output directory
35 unlink <$output_path\\*.*>;
37 # open the main log file
38 open(OUT
, ">$log_file") || die "unable to open $log_file\n";
40 print( OUT
"========================================================\n");
41 my $outFile = "$output_path\\version.out";
42 system("openssl2 version (CLIB_OPT)/>$outFile");
43 log_output
("CHECKING FOR OPENSSL VERSION:", $outFile);
55 print("\nCompleted running tests.\n\n");
56 print("Check log file for errors: $log_file\n");
59 ############################################################################
64 my @tests = ( rsa_test
, destest
, ideatest
, bftest
, bntest
, shatest
, sha1test
,
65 sha256t
, sha512t
, dsatest
, md2test
, md4test
, md5test
, mdc2test
,
66 rc2test
, rc4test
, rc5test
, randtest
, rmdtest
, dhtest
, ecdhtest
,
67 ecdsatest
, ectest
, exptest
, casttest
, hmactest
);
69 print( "\nRUNNING CRYPTO ALGORITHM TESTS:\n\n");
71 print( OUT
"\n========================================================\n");
72 print( OUT
"CRYPTO ALGORITHM TESTS:\n\n");
76 if (-e
"$base_path\\$i.nlm")
78 $outFile = "$output_path\\$i.out";
79 system("$i (CLIB_OPT)/>$outFile");
80 log_desc
("Test: $i\.nlm:");
81 log_output
("", $outFile );
85 log_desc
("Test: $i\.nlm: file not found");
90 ############################################################################
95 my @enc_tests = ( "enc", "rc4", "des-cfb", "des-ede-cfb", "des-ede3-cfb",
96 "des-ofb", "des-ede-ofb", "des-ede3-ofb",
97 "des-ecb", "des-ede", "des-ede3", "des-cbc",
98 "des-ede-cbc", "des-ede3-cbc", "idea-ecb", "idea-cfb",
99 "idea-ofb", "idea-cbc", "rc2-ecb", "rc2-cfb",
100 "rc2-ofb", "rc2-cbc", "bf-ecb", "bf-cfb",
101 "bf-ofb", "bf-cbc" );
103 my $input = "$base_path\\do_tests.pl";
104 my $cipher = "$output_path\\cipher.out";
105 my $clear = "$output_path\\clear.out";
107 print( "\nRUNNING ENCRYPTION & DECRYPTION TESTS:\n\n");
109 print( OUT
"\n========================================================\n");
110 print( OUT
"FILE ENCRYPTION & DECRYPTION TESTS:\n\n");
112 foreach $i (@enc_tests)
114 log_desc
("Testing: $i");
117 $outFile = "$output_path\\enc.out";
118 system("openssl2 $i -e -bufsize 113 -k test -in $input -out $cipher (CLIB_OPT)/>$outFile" );
119 log_output
("Encrypting: $input --> $cipher", $outFile);
122 $outFile = "$output_path\\dec.out";
123 system("openssl2 $i -d -bufsize 157 -k test -in $cipher -out $clear (CLIB_OPT)/>$outFile");
124 log_output
("Decrypting: $cipher --> $clear", $outFile);
127 $x = compare_files
( $input, $clear, 1);
130 print( "\rSUCCESS - files match: $input, $clear\n");
131 print( OUT
"SUCCESS - files match: $input, $clear\n");
135 print( "\rERROR: files don't match\n");
136 print( OUT
"ERROR: files don't match\n");
141 # Now do the same encryption but use Base64
144 $outFile = "$output_path\\B64enc.out";
145 system("openssl2 $i -a -e -bufsize 113 -k test -in $input -out $cipher (CLIB_OPT)/>$outFile");
146 log_output
("Encrypting(B64): $cipher --> $clear", $outFile);
149 $outFile = "$output_path\\B64dec.out";
150 system("openssl2 $i -a -d -bufsize 157 -k test -in $cipher -out $clear (CLIB_OPT)/>$outFile");
151 log_output
("Decrypting(B64): $cipher --> $clear", $outFile);
154 $x = compare_files
( $input, $clear, 1);
157 print( "\rSUCCESS - files match: $input, $clear\n");
158 print( OUT
"SUCCESS - files match: $input, $clear\n");
162 print( "\rERROR: files don't match\n");
163 print( OUT
"ERROR: files don't match\n");
170 # delete the temporary files
176 ############################################################################
181 my $outFile = "$output_path\\pem.out";
184 "crl" => "testcrl.pem",
185 "pkcs7" => "testp7.pem",
186 "req" => "testreq2.pem",
187 "rsa" => "testrsa.pem",
188 "x509" => "testx509.pem",
189 "x509" => "v3-cert1.pem",
190 "sess_id" => "testsid.pem" );
193 print( "\nRUNNING PEM TESTS:\n\n");
195 print( OUT
"\n========================================================\n");
196 print( OUT
"PEM TESTS:\n\n");
198 foreach $i (keys(%pem_tests))
200 log_desc
( "Testing: $i");
202 my $input = "$test_path\\$pem_tests{$i}";
204 $tmp_out = "$output_path\\$pem_tests{$i}";
208 system("openssl2 $i -in $input -out $tmp_out (CLIB_OPT)/>$outFile");
209 log_output
( "openssl2 $i -in $input -out $tmp_out", $outFile);
213 system("openssl2 $i -in $input -out $tmp_out -config $OpenSSL_config (CLIB_OPT)/>$outFile");
214 log_output
( "openssl2 $i -in $input -out $tmp_out -config $OpenSSL_config", $outFile );
217 $x = compare_files
( $input, $tmp_out);
220 print( "\rSUCCESS - files match: $input, $tmp_out\n");
221 print( OUT
"SUCCESS - files match: $input, $tmp_out\n");
225 print( "\rERROR: files don't match\n");
226 print( OUT
"ERROR: files don't match\n");
234 ############################################################################
238 my $outFile = "$output_path\\verify.out";
240 $cert_path =~ s/\\/\//g
;
241 my @cert_files = <$cert_path/*.pem
>;
243 print( "\nRUNNING VERIFY TESTS:\n\n");
245 print( OUT
"\n========================================================\n");
246 print( OUT
"VERIFY TESTS:\n\n");
248 make_tmp_cert_file
();
250 foreach $i (@cert_files)
252 system("openssl2 verify -CAfile $tmp_cert $i (CLIB_OPT)/>$outFile");
253 log_desc
("Verifying cert: $i");
254 log_output
("openssl2 verify -CAfile $tmp_cert $i", $outFile);
259 ############################################################################
262 my $outFile = "$output_path\\ssl_tst.out";
263 my($CAcert) = "$output_path\\certCA.ss";
264 my($Ukey) = "$output_path\\keyU.ss";
265 my($Ucert) = "$output_path\\certU.ss";
266 my($ssltest)= "ssltest -key $Ukey -cert $Ucert -c_key $Ukey -c_cert $Ucert -CAfile $CAcert";
268 print( "\nRUNNING SSL TESTS:\n\n");
270 print( OUT
"\n========================================================\n");
271 print( OUT
"SSL TESTS:\n\n");
273 system("ssltest -ssl2 (CLIB_OPT)/>$outFile");
274 log_desc
("Testing sslv2:");
275 log_output
("ssltest -ssl2", $outFile);
277 system("$ssltest -ssl2 -server_auth (CLIB_OPT)/>$outFile");
278 log_desc
("Testing sslv2 with server authentication:");
279 log_output
("$ssltest -ssl2 -server_auth", $outFile);
281 system("$ssltest -ssl2 -client_auth (CLIB_OPT)/>$outFile");
282 log_desc
("Testing sslv2 with client authentication:");
283 log_output
("$ssltest -ssl2 -client_auth", $outFile);
285 system("$ssltest -ssl2 -server_auth -client_auth (CLIB_OPT)/>$outFile");
286 log_desc
("Testing sslv2 with both client and server authentication:");
287 log_output
("$ssltest -ssl2 -server_auth -client_auth", $outFile);
289 system("ssltest -ssl3 (CLIB_OPT)/>$outFile");
290 log_desc
("Testing sslv3:");
291 log_output
("ssltest -ssl3", $outFile);
293 system("$ssltest -ssl3 -server_auth (CLIB_OPT)/>$outFile");
294 log_desc
("Testing sslv3 with server authentication:");
295 log_output
("$ssltest -ssl3 -server_auth", $outFile);
297 system("$ssltest -ssl3 -client_auth (CLIB_OPT)/>$outFile");
298 log_desc
("Testing sslv3 with client authentication:");
299 log_output
("$ssltest -ssl3 -client_auth", $outFile);
301 system("$ssltest -ssl3 -server_auth -client_auth (CLIB_OPT)/>$outFile");
302 log_desc
("Testing sslv3 with both client and server authentication:");
303 log_output
("$ssltest -ssl3 -server_auth -client_auth", $outFile);
305 system("ssltest (CLIB_OPT)/>$outFile");
306 log_desc
("Testing sslv2/sslv3:");
307 log_output
("ssltest", $outFile);
309 system("$ssltest -server_auth (CLIB_OPT)/>$outFile");
310 log_desc
("Testing sslv2/sslv3 with server authentication:");
311 log_output
("$ssltest -server_auth", $outFile);
313 system("$ssltest -client_auth (CLIB_OPT)/>$outFile");
314 log_desc
("Testing sslv2/sslv3 with client authentication:");
315 log_output
("$ssltest -client_auth ", $outFile);
317 system("$ssltest -server_auth -client_auth (CLIB_OPT)/>$outFile");
318 log_desc
("Testing sslv2/sslv3 with both client and server authentication:");
319 log_output
("$ssltest -server_auth -client_auth", $outFile);
321 system("ssltest -bio_pair -ssl2 (CLIB_OPT)/>$outFile");
322 log_desc
("Testing sslv2 via BIO pair:");
323 log_output
("ssltest -bio_pair -ssl2", $outFile);
325 system("ssltest -bio_pair -dhe1024dsa -v (CLIB_OPT)/>$outFile");
326 log_desc
("Testing sslv2/sslv3 with 1024 bit DHE via BIO pair:");
327 log_output
("ssltest -bio_pair -dhe1024dsa -v", $outFile);
329 system("$ssltest -bio_pair -ssl2 -server_auth (CLIB_OPT)/>$outFile");
330 log_desc
("Testing sslv2 with server authentication via BIO pair:");
331 log_output
("$ssltest -bio_pair -ssl2 -server_auth", $outFile);
333 system("$ssltest -bio_pair -ssl2 -client_auth (CLIB_OPT)/>$outFile");
334 log_desc
("Testing sslv2 with client authentication via BIO pair:");
335 log_output
("$ssltest -bio_pair -ssl2 -client_auth", $outFile);
337 system("$ssltest -bio_pair -ssl2 -server_auth -client_auth (CLIB_OPT)/>$outFile");
338 log_desc
("Testing sslv2 with both client and server authentication via BIO pair:");
339 log_output
("$ssltest -bio_pair -ssl2 -server_auth -client_auth", $outFile);
341 system("ssltest -bio_pair -ssl3 (CLIB_OPT)/>$outFile");
342 log_desc
("Testing sslv3 via BIO pair:");
343 log_output
("ssltest -bio_pair -ssl3", $outFile);
345 system("$ssltest -bio_pair -ssl3 -server_auth (CLIB_OPT)/>$outFile");
346 log_desc
("Testing sslv3 with server authentication via BIO pair:");
347 log_output
("$ssltest -bio_pair -ssl3 -server_auth", $outFile);
349 system("$ssltest -bio_pair -ssl3 -client_auth (CLIB_OPT)/>$outFile");
350 log_desc
("Testing sslv3 with client authentication via BIO pair:");
351 log_output
("$ssltest -bio_pair -ssl3 -client_auth", $outFile);
353 system("$ssltest -bio_pair -ssl3 -server_auth -client_auth (CLIB_OPT)/>$outFile");
354 log_desc
("Testing sslv3 with both client and server authentication via BIO pair:");
355 log_output
("$ssltest -bio_pair -ssl3 -server_auth -client_auth", $outFile);
357 system("ssltest -bio_pair (CLIB_OPT)/>$outFile");
358 log_desc
("Testing sslv2/sslv3 via BIO pair:");
359 log_output
("ssltest -bio_pair", $outFile);
361 system("$ssltest -bio_pair -server_auth (CLIB_OPT)/>$outFile");
362 log_desc
("Testing sslv2/sslv3 with server authentication via BIO pair:");
363 log_output
("$ssltest -bio_pair -server_auth", $outFile);
365 system("$ssltest -bio_pair -client_auth (CLIB_OPT)/>$outFile");
366 log_desc
("Testing sslv2/sslv3 with client authentication via BIO pair:");
367 log_output
("$ssltest -bio_pair -client_auth", $outFile);
369 system("$ssltest -bio_pair -server_auth -client_auth (CLIB_OPT)/>$outFile");
370 log_desc
("Testing sslv2/sslv3 with both client and server authentication via BIO pair:");
371 log_output
("$ssltest -bio_pair -server_auth -client_auth", $outFile);
375 ############################################################################
378 my $outFile = "$output_path\\ca_tst.out";
380 my($CAkey) = "$output_path\\keyCA.ss";
381 my($CAcert) = "$output_path\\certCA.ss";
382 my($CAserial) = "$output_path\\certCA.srl";
383 my($CAreq) = "$output_path\\reqCA.ss";
384 my($CAreq2) = "$output_path\\req2CA.ss";
386 my($CAconf) = "$test_path\\CAss.cnf";
388 my($Uconf) = "$test_path\\Uss.cnf";
390 my($Ukey) = "$output_path\\keyU.ss";
391 my($Ureq) = "$output_path\\reqU.ss";
392 my($Ucert) = "$output_path\\certU.ss";
394 print( "\nRUNNING CA TESTS:\n\n");
396 print( OUT
"\n========================================================\n");
397 print( OUT
"CA TESTS:\n");
399 system("openssl2 req -config $CAconf -out $CAreq -keyout $CAkey -new (CLIB_OPT)/>$outFile");
400 log_desc
("Make a certificate request using req:");
401 log_output
("openssl2 req -config $CAconf -out $CAreq -keyout $CAkey -new", $outFile);
403 system("openssl2 x509 -CAcreateserial -in $CAreq -days 30 -req -out $CAcert -signkey $CAkey (CLIB_OPT)/>$outFile");
404 log_desc
("Convert the certificate request into a self signed certificate using x509:");
405 log_output
("openssl2 x509 -CAcreateserial -in $CAreq -days 30 -req -out $CAcert -signkey $CAkey", $outFile);
407 system("openssl2 x509 -in $CAcert -x509toreq -signkey $CAkey -out $CAreq2 (CLIB_OPT)/>$outFile");
408 log_desc
("Convert a certificate into a certificate request using 'x509':");
409 log_output
("openssl2 x509 -in $CAcert -x509toreq -signkey $CAkey -out $CAreq2", $outFile);
411 system("openssl2 req -config $OpenSSL_config -verify -in $CAreq -noout (CLIB_OPT)/>$outFile");
412 log_output
("openssl2 req -config $OpenSSL_config -verify -in $CAreq -noout", $outFile);
414 system("openssl2 req -config $OpenSSL_config -verify -in $CAreq2 -noout (CLIB_OPT)/>$outFile");
415 log_output
( "openssl2 req -config $OpenSSL_config -verify -in $CAreq2 -noout", $outFile);
417 system("openssl2 verify -CAfile $CAcert $CAcert (CLIB_OPT)/>$outFile");
418 log_output
("openssl2 verify -CAfile $CAcert $CAcert", $outFile);
420 system("openssl2 req -config $Uconf -out $Ureq -keyout $Ukey -new (CLIB_OPT)/>$outFile");
421 log_desc
("Make another certificate request using req:");
422 log_output
("openssl2 req -config $Uconf -out $Ureq -keyout $Ukey -new", $outFile);
424 system("openssl2 x509 -CAcreateserial -in $Ureq -days 30 -req -out $Ucert -CA $CAcert -CAkey $CAkey -CAserial $CAserial (CLIB_OPT)/>$outFile");
425 log_desc
("Sign certificate request with the just created CA via x509:");
426 log_output
("openssl2 x509 -CAcreateserial -in $Ureq -days 30 -req -out $Ucert -CA $CAcert -CAkey $CAkey -CAserial $CAserial", $outFile);
428 system("openssl2 verify -CAfile $CAcert $Ucert (CLIB_OPT)/>$outFile");
429 log_output
("openssl2 verify -CAfile $CAcert $Ucert", $outFile);
431 system("openssl2 x509 -subject -issuer -startdate -enddate -noout -in $Ucert (CLIB_OPT)/>$outFile");
432 log_desc
("Certificate details");
433 log_output
("openssl2 x509 -subject -issuer -startdate -enddate -noout -in $Ucert", $outFile);
436 print(OUT
"The generated CA certificate is $CAcert\n");
437 print(OUT
"The generated CA private key is $CAkey\n");
438 print(OUT
"The current CA signing serial number is in $CAserial\n");
440 print(OUT
"The generated user certificate is $Ucert\n");
441 print(OUT
"The generated user private key is $Ukey\n");
445 ############################################################################
450 print( "\nRUNNING EVP TESTS:\n\n");
452 print( OUT
"\n========================================================\n");
453 print( OUT
"EVP TESTS:\n\n");
455 if (-e
"$base_path\\$i.nlm")
457 my $outFile = "$output_path\\$i.out";
458 system("$i $test_path\\evptests.txt (CLIB_OPT)/>$outFile");
459 log_desc
("Test: $i\.nlm:");
460 log_output
("", $outFile );
464 log_desc
("Test: $i\.nlm: file not found");
468 ############################################################################
469 sub log_output
( $ $ )
471 my( $desc, $file ) = @_;
479 print(OUT
"$desc\n");
482 # loop waiting for test program to complete
483 while ( stat($file) == 0)
484 { print(". "); sleep(1); }
487 # copy test output to log file
497 # close and delete the temporary test output file
503 $msg = "Test Succeeded";
507 $msg = "Test Failed";
514 print("$msg - press ENTER to continue...");
519 # Several of the testing scripts run a loop loading the
520 # same NLM with different options.
521 # On slow NetWare machines there appears to be some delay in the
522 # OS actually unloading the test nlms and the OS complains about.
523 # the NLM already being loaded. This additional pause is to
524 # to help provide a little more time for unloading before trying to
530 ############################################################################
539 print(OUT
"$desc\n");
540 print(OUT
"======================================\n");
543 ############################################################################
544 sub compare_files
( $ $ $ )
546 my( $file1, $file2, $binary ) = @_;
547 my( $n1, $n2, $b1, $b2 );
550 open(IN0
, $file1) || die "\nunable to open $file1\n";
551 open(IN1
, $file2) || die "\nunable to open $file2\n";
561 $n1 = read(IN0
, $b1, 512);
562 $n2 = read(IN1
, $b2, 512);
564 if ($n1 != $n2) {last;}
565 if ($b1 != $b2) {last;}
578 ############################################################################
585 print("Press ENTER to continue...");
592 ############################################################################
593 sub make_tmp_cert_file
()
595 my @cert_files = <$cert_path/*.pem
>;
597 # delete the file if it already exists
600 open( TMP_CERT
, ">$tmp_cert") || die "\nunable to open $tmp_cert\n";
602 print("building temporary cert file\n");
604 # create a temporary cert file that contains all the certs
605 foreach $i (@cert_files)
607 open( IN_CERT
, $i ) || die "\nunable to open $i\n";
611 $n = sysread(IN_CERT
, $data, 1024);
619 syswrite(TMP_CERT
, $data, $n);