#!/usr/bin/perl
#
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# 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 the Initial Developer are Copyright (C) 1994-2000
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****


@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;
}






