#!/usr/bin/perl
#
# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/MPL/
# 
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
# 
# The Original Code is the Netscape security libraries.
# 
# The Initial Developer of the Original Code is Netscape
# Communications Corporation.  Portions created by Netscape are 
# Copyright (C) 1994-2000 Netscape Communications Corporation.  All
# Rights Reserved.
# 
# Contributor(s):
# 
# Alternatively, the contents of this file may be used under the
# terms of the GNU General Public License Version 2 or later (the
# "GPL"), in which case the provisions of the GPL are applicable 
# instead of those above.  If you wish to allow use of your 
# version of this file only under the terms of the GPL and not to
# allow others to use your version of this file under the MPL,
# indicate your decision by deleting the provisions above and
# replace them with the notice and other provisions required by
# the GPL.  If you do not delete the provisions above, a recipient
# may use your version of this file under either the MPL or the
# GPL.
#


@profiles = (
#            "host:port"	"policy"	"ciphers"  	"exp-cipher"	"expkeysize"

	     [ "cfu:443",	"export",	"efijlmo",	"RC4-40",	"40" ],
	     [ "hbombsgi:448",	"export",	"efijlmo",	"RC4-40",	"40" ],
	     [ "hbombsgi:448",	"domestic",	"abcdefijklmo",	"RC4",	        "128" ],
	     [ "gandalf:5666",	"domestic",	"abcdefijklmo",	"RC4",	        "128" ],
	     [ "gandalf:5666",	"export",	"efijlmo",	"RC4",	        "128" ],
	     [ "gandalf:5666",	"domestic",	"j",	        "3DES-EDE-CBC", "168" ],
	     [ "gandalf:5666",	"domestic",	"k",	        "DES-CBC",      "56" ],
	     [ "gandalf:5666",	"export",	"l",	        "RC4-40",       "40" ],
	     [ "gandalf:5666",	"export",	"efijlmo",	"RC4",	        "128" ],
	     [ "hbombcfu:443",	"export",	"efijlmo",	"RC4",	        "128" ],
	     
	     );

$file = &filename;

open(HTML, ">$file.htm") || die"Cannot open html output file\n";

$mutversion = "";
$platform = $ARGV[0];


print HTML 
"<HTML><HEAD>
<TITLE>ssl/sslstrength: Version: $mutversion Platform: $platform Run date mm/dd/yy</TITLE></HEAD><BODY>\n";

print HTML 
"<TABLE BORDER=1><TR>
<TD><B>Test Case Number</B></TD>
<TD><B>Program</B></TD>
<TD><B>Description of Test Case</B></TD>
<TD><B>Start date/time<B></TD>
<TD><B>End date/time<B></TD>  
<TD><B>PASS/FAIL</B></TD> 
</TR>\n";

$countpass =0;
$countfail =0;


$testnum =0;
for $profile (@profiles) {
    $testnum ++;
    ($host, $policy, $ciphers, $expcipher, $expkeysize) = @$profile;
    
    $cmd = "./sslstrength $host policy=$policy ciphers=$ciphers";

    $starttime = &datestring." ".&timestring;
    print STDERR "$cmd\n";
    open(PIPE, "$cmd|") || die "Cannot start sslstrength\n";

    $cipher = "";
    $keysize = "";
    while (<PIPE>) {
	chop;
	if (/^   Cipher: *(.*)/) {
	    $cipher = $1;
	}
	if (/^   Secret Key Size: (.*)/) {
	    $keysize = $1;
	}
    }
    close(PIPE);
    $endtime = &datestring." ".&timestring;

    if (( $? != 0) || ($cipher ne $expcipher) || ($keysize ne $expkeysize)) {
	$countfail ++;	
	$passed =0;	
    }
    else {
	$countpass ++;
	$passed =1;
    }

print HTML
"<TR>
<TD><B>$testnum</B></TD>
<TD></TD>
<TD>$cmd</TD>
<TD>$starttime</TD>
<TD>$endtime</TD>
<TD><B>".($passed ? "PASS" : "<FONT COLOR=red>FAIL: return code = 
c=$cipher, ec=$expcipher, s=$keysize, es=$expkeysize.</FONT>")."
</B></TD>
</TR>\n";
   
}

print HTML "</table>\n";

close(HTML);

open (SUM, ">$file.sum") ||die "couldn't open summary file for writing\n";

print SUM <<EOM;
[Status]
mut=SSL
mutversion=1.0
platform=$platform
pass=$countpass
fail=$countfail
knownFail=0
malformed=0
EOM

    close(SUM);



sub timestring
{

    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
    my $string;

    $string = sprintf "%2d:%02d:%02d",$hour, $min, $sec;
    return $string;
}

sub datestring
{

    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
    my $string;

    $string = sprintf "%d/%d/%2d",$mon+1, $mday+1, $year;
    return $string;
}

sub filename
{

    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
    my $string;

    $string = sprintf "%04d%02d%02d",$year+1900, $mon+1, $mday;
    return $string;
}






