(linenum→info "unix/slp.c:2238")

openssl/0.9.8g/Netware/do_tests.pl

    1: # perl script to run OpenSSL tests
    2: 
    3: 
    4: my $base_path      = "\\openssl";
    5: 
    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";
   10: 
   11: my $tmp_cert       = "$output_path\\cert.tmp";
   12: my $OpenSSL_config = "$app_path\\openssl.cnf";
   13: my $log_file       = "$output_path\\tests.log";
   14: 
   15: my $pause = 0;
   16: 
   17: 
   18: #  process the command line args to see if they wanted us to pause
   19: #  between executing each command
   20: foreach $i (@ARGV)
   21: {
   22:    if ($i =~ /^-p$/)
   23:    { $pause=1; }
   24: }
   25: 
   26: 
   27: 
   28: main();
   29: 
   30: 
   31: ############################################################################
   32: sub main()
   33: {
   34:    # delete all the output files in the output directory
   35:    unlink <$output_path\\*.*>;
   36: 
   37:    # open the main log file 
   38:    open(OUT, ">$log_file") || die "unable to open $log_file\n";
   39: 
   40:    
   41:    algorithm_tests();
   42:    encryption_tests();
   43:    pem_tests();
   44:    verify_tests();
   45:    ca_tests();
   46:    ssl_tests();
   47: 
   48:    close(OUT);
   49: 
   50:    print("\nCompleted running tests.\n\n");
   51:    print("Check log file for errors: $log_file\n");
   52: }
   53: 
   54: ############################################################################
   55: sub algorithm_tests
   56: {
   57:    my $i;
   58:    my $outFile;
   59:    my @tests = ( rsa_test, destest, ideatest, bftest, shatest, sha1test,
   60:                  md5test, dsatest, md2test, mdc2test, rc2test, rc4test, randtest,
   61:                  dhtest, exptest );
   62: 
   63:    print( "\nRUNNING CRYPTO ALGORITHM TESTS:\n\n");
   64: 
   65:    print( OUT "\n========================================================\n");
   66:    print( OUT "CRYPTO ALGORITHM TESTS:\n\n");
   67: 
   68:    foreach $i (@tests)
   69:    {
   70:       if (-e "$base_path\\$i.nlm")
   71:           {
   72:          $outFile = "$output_path\\$i.out";
   73:          system("$i > $outFile");
   74:          log_desc("Test: $i\.nlm:");
   75:          log_output("", $outFile );
   76:           }
   77:           else
   78:           {
   79:          log_desc("Test: $i\.nlm: file not found");
   80:           }
   81:    }
   82: }
   83: 
   84: ############################################################################
   85: sub encryption_tests
   86: {
   87:    my $i;
   88:    my $outFile;
   89:    my @enc_tests = ( "enc", "rc4", "des-cfb", "des-ede-cfb", "des-ede3-cfb",
   90:                      "des-ofb", "des-ede-ofb", "des-ede3-ofb",
   91:                      "des-ecb", "des-ede", "des-ede3", "des-cbc",
   92:                      "des-ede-cbc", "des-ede3-cbc", "idea-ecb", "idea-cfb",
   93:                      "idea-ofb", "idea-cbc", "rc2-ecb", "rc2-cfb",
   94:                      "rc2-ofb", "rc2-cbc", "bf-ecb", "bf-cfb",
   95:                      "bf-ofb", "bf-cbc" );
   96: 
   97:    my $input = "$base_path\\do_tests.pl";
   98:    my $cipher = "$output_path\\cipher.out";
   99:    my $clear = "$output_path\\clear.out";
  100: 
  101:    print( "\nRUNNING ENCRYPTION & DECRYPTION TESTS:\n\n");
  102: 
  103:    print( OUT "\n========================================================\n");
  104:    print( OUT "FILE ENCRYPTION & DECRYPTION TESTS:\n\n");
  105: 
  106:    foreach $i (@enc_tests)
  107:    {
  108:       log_desc("Testing: $i");
  109: 
  110:       # do encryption
  111:       $outFile = "$output_path\\enc.out";
  112:       system("openssl2 $i -e -bufsize 113 -k test -in $input -out $cipher > $outFile" );
  113:       log_output("Encrypting: $input --> $cipher", $outFile);
  114: 
  115:       # do decryption
  116:       $outFile = "$output_path\\dec.out";
  117:       system("openssl2 $i -d -bufsize 157 -k test -in $cipher -out $clear > $outFile");
  118:       log_output("Decrypting: $cipher --> $clear", $outFile);
  119: 
  120:       # compare files
  121:       $x = compare_files( $input, $clear, 1);
  122:       if ( $x == 0 )
  123:       {
  124:          print( "SUCCESS - files match: $input, $clear\n");
  125:          print( OUT "SUCCESS - files match: $input, $clear\n");
  126:       }
  127:       else
  128:       {
  129:          print( "ERROR: files don't match\n");
  130:          print( OUT "ERROR: files don't match\n");
  131:       }
  132: 
  133:       do_wait();
  134: 
  135:       # Now do the same encryption but use Base64
  136: 
  137:       # do encryption B64
  138:       $outFile = "$output_path\\B64enc.out";
  139:       system("openssl2 $i -a -e -bufsize 113 -k test -in $input -out $cipher > $outFile");
  140:       log_output("Encrypting(B64): $cipher --> $clear", $outFile);
  141: 
  142:       # do decryption B64
  143:       $outFile = "$output_path\\B64dec.out";
  144:       system("openssl2 $i -a -d -bufsize 157 -k test -in $cipher -out $clear > $outFile");
  145:       log_output("Decrypting(B64): $cipher --> $clear", $outFile);
  146: 
  147:       # compare files
  148:       $x = compare_files( $input, $clear, 1);
  149:       if ( $x == 0 )
  150:       {
  151:          print( "SUCCESS - files match: $input, $clear\n");
  152:          print( OUT "SUCCESS - files match: $input, $clear\n");
  153:       }
  154:       else
  155:       {
  156:          print( "ERROR: files don't match\n");
  157:          print( OUT "ERROR: files don't match\n");
  158:       }
  159: 
  160:       do_wait();
  161: 
  162:    } # end foreach
  163: 
  164:    # delete the temporary files
  165:    unlink($cipher);
  166:    unlink($clear);
  167: }
  168: 
  169: 
  170: ############################################################################
  171: sub pem_tests
  172: {
  173:    my $i;
  174:    my $tmp_out;
  175:    my $outFile = "$output_path\\pem.out";
  176: 
  177:    my %pem_tests = (
  178:          "crl"      => "testcrl.pem",
  179:           "pkcs7"   => "testp7.pem",
  180:           "req"     => "testreq2.pem",
  181:           "rsa"     => "testrsa.pem",
  182:           "x509"    => "testx509.pem",
  183:           "x509"    => "v3-cert1.pem",
  184:           "sess_id" => "testsid.pem"  );
  185: 
  186: 
  187:    print( "\nRUNNING PEM TESTS:\n\n");
  188: 
  189:    print( OUT "\n========================================================\n");
  190:    print( OUT "PEM TESTS:\n\n");
  191: 
  192:    foreach $i (keys(%pem_tests))
  193:    {
  194:       log_desc( "Testing: $i");
  195: 
  196:       my $input = "$test_path\\$pem_tests{$i}";
  197: 
  198:       $tmp_out = "$output_path\\$pem_tests{$i}";
  199: 
  200:       if ($i ne "req" )
  201:       {
  202:          system("openssl2 $i -in $input -out $tmp_out > $outFile");
  203:          log_output( "openssl2 $i -in $input -out $tmp_out", $outFile);
  204:       }
  205:       else
  206:       {
  207:          system("openssl2 $i -in $input -out $tmp_out -config $OpenSSL_config > $outFile");
  208:          log_output( "openssl2 $i -in $input -out $tmp_out -config $OpenSSL_config", $outFile );
  209:       }
  210: 
  211:       $x = compare_files( $input, $tmp_out);
  212:       if ( $x == 0 )
  213:       {
  214:          print( "SUCCESS - files match: $input, $tmp_out\n");
  215:          print( OUT "SUCCESS - files match: $input, $tmp_out\n");
  216:       }
  217:       else
  218:       {
  219:          print( "ERROR: files don't match\n");
  220:          print( OUT "ERROR: files don't match\n");
  221:       }
  222:       do_wait();
  223: 
  224:    } # end foreach
  225: }
  226: 
  227: 
  228: ############################################################################
  229: sub verify_tests
  230: {
  231:    my $i;
  232:    my $outFile = "$output_path\\verify.out";
  233: 
  234:    my @cert_files = <$cert_path\\*.pem>;
  235: 
  236:    print( "\nRUNNING VERIFY TESTS:\n\n");
  237: 
  238:    print( OUT "\n========================================================\n");
  239:    print( OUT "VERIFY TESTS:\n\n");
  240: 
  241:    make_tmp_cert_file();
  242: 
  243:    foreach $i (@cert_files)
  244:    {
  245:       system("openssl2 verify -CAfile $tmp_cert $i >$outFile");
  246:       log_desc("Verifying cert: $i");
  247:       log_output("openssl2 verify -CAfile $tmp_cert $i", $outFile);
  248:    }
  249: }
  250: 
  251: 
  252: ############################################################################
  253: sub ssl_tests
  254: {
  255:    my $outFile = "$output_path\\ssl_tst.out";
  256:    my($CAcert) = "$output_path\\certCA.ss";
  257:    my($Ukey)   = "$output_path\\keyU.ss";
  258:    my($Ucert)  = "$output_path\\certU.ss";
  259:    my($ssltest)= "ssltest -key $Ukey -cert $Ucert -c_key $Ukey -c_cert $Ucert -CAfile $CAcert";
  260: 
  261:    print( "\nRUNNING SSL TESTS:\n\n");
  262: 
  263:    print( OUT "\n========================================================\n");
  264:    print( OUT "SSL TESTS:\n\n");
  265: 
  266:    system("ssltest -ssl2 >$outFile");
  267:    log_desc("Testing sslv2:");
  268:    log_output("ssltest -ssl2", $outFile);
  269: 
  270:    system("$ssltest -ssl2 -server_auth >$outFile");
  271:    log_desc("Testing sslv2 with server authentication:");
  272:    log_output("$ssltest -ssl2 -server_auth", $outFile);
  273: 
  274:    system("$ssltest -ssl2 -client_auth >$outFile");
  275:    log_desc("Testing sslv2 with client authentication:");
  276:    log_output("$ssltest -ssl2 -client_auth", $outFile);
  277: 
  278:    system("$ssltest -ssl2 -server_auth -client_auth >$outFile");
  279:    log_desc("Testing sslv2 with both client and server authentication:");
  280:    log_output("$ssltest -ssl2 -server_auth -client_auth", $outFile);
  281: 
  282:    system("ssltest -ssl3 >$outFile");
  283:    log_desc("Testing sslv3:");
  284:    log_output("ssltest -ssl3", $outFile);
  285: 
  286:    system("$ssltest -ssl3 -server_auth >$outFile");
  287:    log_desc("Testing sslv3 with server authentication:");
  288:    log_output("$ssltest -ssl3 -server_auth", $outFile);
  289: 
  290:    system("$ssltest -ssl3 -client_auth >$outFile");
  291:    log_desc("Testing sslv3 with client authentication:");
  292:    log_output("$ssltest -ssl3 -client_auth", $outFile);
  293: 
  294:    system("$ssltest -ssl3 -server_auth -client_auth >$outFile");
  295:    log_desc("Testing sslv3 with both client and server authentication:");
  296:    log_output("$ssltest -ssl3 -server_auth -client_auth", $outFile);
  297: 
  298:    system("ssltest >$outFile");
  299:    log_desc("Testing sslv2/sslv3:");
  300:    log_output("ssltest", $outFile);
  301: 
  302:    system("$ssltest -server_auth >$outFile");
  303:    log_desc("Testing sslv2/sslv3 with server authentication:");
  304:    log_output("$ssltest -server_auth", $outFile);
  305: 
  306:    system("$ssltest -client_auth >$outFile");
  307:    log_desc("Testing sslv2/sslv3 with client authentication:");
  308:    log_output("$ssltest -client_auth ", $outFile);
  309: 
  310:    system("$ssltest -server_auth -client_auth >$outFile");
  311:    log_desc("Testing sslv2/sslv3 with both client and server authentication:");
  312:    log_output("$ssltest -server_auth -client_auth", $outFile);
  313: 
  314:    system("ssltest -bio_pair -ssl2 >$outFile");
  315:    log_desc("Testing sslv2 via BIO pair:");
  316:    log_output("ssltest -bio_pair -ssl2", $outFile);
  317: 
  318:    system("ssltest -bio_pair -dhe1024dsa -v >$outFile");
  319:    log_desc("Testing sslv2/sslv3 with 1024 bit DHE via BIO pair:");
  320:    log_output("ssltest -bio_pair -dhe1024dsa -v", $outFile);
  321: 
  322:    system("$ssltest -bio_pair -ssl2 -server_auth >$outFile");
  323:    log_desc("Testing sslv2 with server authentication via BIO pair:");
  324:    log_output("$ssltest -bio_pair -ssl2 -server_auth", $outFile);
  325: 
  326:    system("$ssltest -bio_pair -ssl2 -client_auth >$outFile");
  327:    log_desc("Testing sslv2 with client authentication via BIO pair:");
  328:    log_output("$ssltest -bio_pair -ssl2 -client_auth", $outFile);
  329: 
  330:    system("$ssltest -bio_pair -ssl2 -server_auth -client_auth >$outFile");
  331:    log_desc("Testing sslv2 with both client and server authentication via BIO pair:");
  332:    log_output("$ssltest -bio_pair -ssl2 -server_auth -client_auth", $outFile);
  333: 
  334:    system("ssltest -bio_pair -ssl3 >$outFile");
  335:    log_desc("Testing sslv3 via BIO pair:");
  336:    log_output("ssltest -bio_pair -ssl3", $outFile);
  337: 
  338:    system("$ssltest -bio_pair -ssl3 -server_auth >$outFile");
  339:    log_desc("Testing sslv3 with server authentication via BIO pair:");
  340:    log_output("$ssltest -bio_pair -ssl3 -server_auth", $outFile);
  341: 
  342:    system("$ssltest -bio_pair -ssl3 -client_auth >$outFile");
  343:    log_desc("Testing sslv3 with client authentication  via BIO pair:");
  344:    log_output("$ssltest -bio_pair -ssl3 -client_auth", $outFile);
  345: 
  346:    system("$ssltest -bio_pair -ssl3 -server_auth -client_auth >$outFile");
  347:    log_desc("Testing sslv3 with both client and server authentication via BIO pair:");
  348:    log_output("$ssltest -bio_pair -ssl3 -server_auth -client_auth", $outFile);
  349: 
  350:    system("ssltest -bio_pair >$outFile");
  351:    log_desc("Testing sslv2/sslv3 via BIO pair:");
  352:    log_output("ssltest -bio_pair", $outFile);
  353: 
  354:    system("$ssltest -bio_pair -server_auth >$outFile");
  355:    log_desc("Testing sslv2/sslv3 with server authentication via BIO pair:");
  356:    log_output("$ssltest -bio_pair -server_auth", $outFile);
  357: 
  358:    system("$ssltest -bio_pair -client_auth >$outFile");
  359:    log_desc("Testing sslv2/sslv3 with client authentication via BIO pair:");
  360:    log_output("$ssltest -bio_pair -client_auth", $outFile);
  361: 
  362:    system("$ssltest -bio_pair -server_auth -client_auth >$outFile");
  363:    log_desc("Testing sslv2/sslv3 with both client and server authentication via BIO pair:");
  364:    log_output("$ssltest -bio_pair -server_auth -client_auth", $outFile);
  365: }
  366: 
  367: 
  368: ############################################################################
  369: sub ca_tests
  370: {
  371:    my $outFile = "$output_path\\ca_tst.out";
  372: 
  373:    my($CAkey)     = "$output_path\\keyCA.ss";
  374:    my($CAcert)    = "$output_path\\certCA.ss";
  375:    my($CAserial)  = "$output_path\\certCA.srl";
  376:    my($CAreq)     = "$output_path\\reqCA.ss";
  377:    my($CAreq2)    = "$output_path\\req2CA.ss";
  378: 
  379:    my($CAconf)    = "$test_path\\CAss.cnf";
  380: 
  381:    my($Uconf)     = "$test_path\\Uss.cnf";
  382: 
  383:    my($Ukey)      = "$output_path\\keyU.ss";
  384:    my($Ureq)      = "$output_path\\reqU.ss";
  385:    my($Ucert)     = "$output_path\\certU.ss";
  386: 
  387:    print( "\nRUNNING CA TESTS:\n\n");
  388: 
  389:    print( OUT "\n========================================================\n");
  390:    print( OUT "CA TESTS:\n");
  391: 
  392:    system("openssl2 req -config $CAconf -out $CAreq -keyout $CAkey -new >$outFile");
  393:    log_desc("Make a certificate request using req:");
  394:    log_output("openssl2 req -config $CAconf -out $CAreq -keyout $CAkey -new", $outFile);
  395: 
  396:    system("openssl2 x509 -CAcreateserial -in $CAreq -days 30 -req -out $CAcert -signkey $CAkey >$outFile");
  397:    log_desc("Convert the certificate request into a self signed certificate using x509:");
  398:    log_output("openssl2 x509 -CAcreateserial -in $CAreq -days 30 -req -out $CAcert -signkey $CAkey", $outFile);
  399: 
  400:    system("openssl2 x509 -in $CAcert -x509toreq -signkey $CAkey -out $CAreq2 >$outFile");
  401:    log_desc("Convert a certificate into a certificate request using 'x509':");
  402:    log_output("openssl2 x509 -in $CAcert -x509toreq -signkey $CAkey -out $CAreq2", $outFile);
  403: 
  404:    system("openssl2 req -config $OpenSSL_config -verify -in $CAreq -noout >$outFile");
  405:    log_output("openssl2 req -config $OpenSSL_config -verify -in $CAreq -noout", $outFile);
  406: 
  407:    system("openssl2 req -config $OpenSSL_config -verify -in $CAreq2 -noout >$outFile");
  408:    log_output( "openssl2 req -config $OpenSSL_config -verify -in $CAreq2 -noout", $outFile);
  409: 
  410:    system("openssl2 verify -CAfile $CAcert $CAcert >$outFile");
  411:    log_output("openssl2 verify -CAfile $CAcert $CAcert", $outFile);
  412: 
  413:    system("openssl2 req -config $Uconf -out $Ureq -keyout $Ukey -new >$outFile");
  414:    log_desc("Make another certificate request using req:");
  415:    log_output("openssl2 req -config $Uconf -out $Ureq -keyout $Ukey -new", $outFile);
  416: 
  417:    system("openssl2 x509 -CAcreateserial -in $Ureq -days 30 -req -out $Ucert -CA $CAcert -CAkey $CAkey -CAserial $CAserial >$outFile");
  418:    log_desc("Sign certificate request with the just created CA via x509:");
  419:    log_output("openssl2 x509 -CAcreateserial -in $Ureq -days 30 -req -out $Ucert -CA $CAcert -CAkey $CAkey -CAserial $CAserial", $outFile);
  420: 
  421:    system("openssl2 verify -CAfile $CAcert $Ucert >$outFile");
  422:    log_output("openssl2 verify -CAfile $CAcert $Ucert", $outFile);
  423: 
  424:    system("openssl2 x509 -subject -issuer -startdate -enddate -noout -in $Ucert >$outFile");
  425:    log_desc("Certificate details");
  426:    log_output("openssl2 x509 -subject -issuer -startdate -enddate -noout -in $Ucert", $outFile);
  427: 
  428:    print(OUT "-- \n");
  429:    print(OUT "The generated CA certificate is $CAcert\n");
  430:    print(OUT "The generated CA private key is $CAkey\n");
  431:    print(OUT "The current CA signing serial number is in $CAserial\n");
  432: 
  433:    print(OUT "The generated user certificate is $Ucert\n");
  434:    print(OUT "The generated user private key is $Ukey\n");
  435:    print(OUT "--\n");
  436: }
  437: 
  438: ############################################################################
  439: sub log_output( $ $ )
  440: {
  441:    my( $desc, $file ) = @_;
  442:    my($error) = 0;
  443:    my($key);
  444:    my($msg);
  445: 
  446:    if ($desc)
  447:    {
  448:       print("$desc\n");
  449:       print(OUT "$desc\n");
  450:    }
  451: 
  452:       # loop waiting for test program to complete
  453:    while ( stat($file) == 0)
  454:       { print(". "); sleep(1); }
  455: 
  456: 
  457:       # copy test output to log file
  458:    open(IN, "<$file");
  459:    while (<IN>)
  460:    { 
  461:       print(OUT $_); 
  462:       if ( $_ =~ /ERROR/ )
  463:       {
  464:          $error = 1;
  465:       }
  466:    }
  467:       # close and delete the temporary test output file
  468:    close(IN);
  469:    unlink($file);
  470: 
  471:    if ( $error == 0 )
  472:    {
  473:       $msg = "Test Succeeded";
  474:    }
  475:    else
  476:    {
  477:       $msg = "Test Failed";
  478:    }
  479: 
  480:    print(OUT "$msg\n");
  481: 
  482:    if ($pause)
  483:    {
  484:       print("$msg - press ENTER to continue...");
  485:       $key = getc;
  486:       print("\n");
  487:    }
  488:       
  489:       # Several of the testing scripts run a loop loading the 
  490:       # same NLM with different options.
  491:       # On slow NetWare machines there appears to be some delay in the 
  492:       # OS actually unloading the test nlms and the OS complains about.
  493:       # the NLM already being loaded.  This additional pause is to 
  494:       # to help provide a little more time for unloading before trying to 
  495:       # load again.
  496:    sleep(1);
  497: }
  498: 
  499: 
  500: ############################################################################
  501: sub log_desc( $ )
  502: {
  503:    my( $desc ) = @_;
  504: 
  505:    print("\n");
  506:    print("$desc\n");
  507: 
  508:    print(OUT "\n");
  509:    print(OUT "$desc\n");
  510:    print(OUT "======================================\n");
  511: }
  512: 
  513: ############################################################################
  514: sub compare_files( $ $ $ )
  515: {
  516:    my( $file1, $file2, $binary ) = @_;
  517:    my( $n1, $n2, $b1, $b2 );
  518:    my($ret) = 1;
  519: 
  520:    open(IN0, $file1) || die "\nunable to open $file1\n";
  521:    open(IN1, $file2) || die "\nunable to open $file2\n";
  522: 
  523:   if ($binary)
  524:   {
  525:       binmode IN0;
  526:       binmode IN1;
  527:   }
  528: 
  529:    for (;;)
  530:    {
  531:       $n1 = read(IN0, $b1, 512);
  532:       $n2 = read(IN1, $b2, 512);
  533: 
  534:       if ($n1 != $n2) {last;}
  535:       if ($b1 != $b2) {last;}
  536: 
  537:       if ($n1 == 0)
  538:       {
  539:          $ret = 0;
  540:          last;
  541:       }
  542:    }
  543:    close(IN0);
  544:    close(IN1);
  545:    return($ret);
  546: }
  547: 
  548: ############################################################################
  549: sub do_wait()
  550: {
  551:    my($key);
  552: 
  553:    if ($pause)
  554:    {
  555:       print("Press ENTER to continue...");
  556:       $key = getc;
  557:       print("\n");
  558:    }
  559: }
  560: 
  561: 
  562: ############################################################################
  563: sub make_tmp_cert_file()
  564: {
  565:    my @cert_files = <$cert_path\\*.pem>;
  566: 
  567:       # delete the file if it already exists
  568:    unlink($tmp_cert);
  569: 
  570:    open( TMP_CERT, ">$tmp_cert") || die "\nunable to open $tmp_cert\n";
  571: 
  572:    print("building temporary cert file\n");
  573:    
  574:    # create a temporary cert file that contains all the certs
  575:    foreach $i (@cert_files)
  576:    {
  577:       open( IN_CERT, $i ) || die "\nunable to open $i\n";
  578: 
  579:       for(;;)
  580:       {
  581:          $n = sysread(IN_CERT, $data, 1024);
  582: 
  583:          if ($n == 0)
  584:          {
  585:             close(IN_CERT);
  586:             last;
  587:          };
  588: 
  589:          syswrite(TMP_CERT, $data, $n);
  590:       }
  591:    }
  592: 
  593:    close( TMP_CERT );
  594: }
1
Syntax (Markdown)