155714Skris#!/usr/local/bin/perl
255714Skris#
355714Skris# This file takes as input, the files that have been output from
455714Skris# ssleay speed.
555714Skris# It prints a table of the relative differences with %100 being 'no difference'
655714Skris#
755714Skris
855714Skris($#ARGV == 1) || die "$0 speedout1 speedout2\n";
955714Skris
1055714Skris%one=&loadfile($ARGV[0]);
1155714Skris%two=&loadfile($ARGV[1]);
1255714Skris
1355714Skris$line=0;
1468651Skrisforeach $a ("md2","md4","md5","sha","sha1","rc4","des cfb","des cbc","des ede3",
1555714Skris	"idea cfb","idea cbc","rc2 cfb","rc2 cbc","blowfish cbc","cast cbc")
1655714Skris	{
1755714Skris	if (defined($one{$a,8}) && defined($two{$a,8}))
1855714Skris		{
1955714Skris		print "type              8 byte%    64 byte%   256 byte%  1024 byte%  8192 byte%\n"
2055714Skris			unless $line;
2155714Skris		$line++;
2255714Skris		printf "%-12s ",$a;
2355714Skris		foreach $b (8,64,256,1024,8192)
2455714Skris			{
2555714Skris			$r=$two{$a,$b}/$one{$a,$b}*100;
2655714Skris			printf "%12.2f",$r;
2755714Skris			}
2855714Skris		print "\n";
2955714Skris		}
3055714Skris	}
3155714Skris
3255714Skrisforeach $a	(
3355714Skris		"rsa  512","rsa 1024","rsa 2048","rsa 4096",
3455714Skris		"dsa  512","dsa 1024","dsa 2048",
3555714Skris		)
3655714Skris	{
3755714Skris	if (defined($one{$a,1}) && defined($two{$a,1}))
3855714Skris		{
3955714Skris		$r1=($one{$a,1}/$two{$a,1})*100;
4055714Skris		$r2=($one{$a,2}/$two{$a,2})*100;
4155714Skris		printf "$a bits %%    %6.2f %%    %6.2f\n",$r1,$r2;
4255714Skris		}
4355714Skris	}
4455714Skris
4555714Skrissub loadfile
4655714Skris	{
4755714Skris	local($file)=@_;
4855714Skris	local($_,%ret);
4955714Skris
5055714Skris	open(IN,"<$file") || die "unable to open '$file' for input\n";
5155714Skris	$header=1;
5255714Skris	while (<IN>)
5355714Skris		{
5455714Skris		$header=0 if /^[dr]sa/;
5555714Skris		if (/^type/) { $header=0; next; }
5655714Skris		next if $header;
5755714Skris		chop;
5855714Skris		@a=split;
5955714Skris		if ($a[0] =~ /^[dr]sa$/)
6055714Skris			{
6155714Skris			($n,$t1,$t2)=($_ =~ /^([dr]sa\s+\d+)\s+bits\s+([.\d]+)s\s+([.\d]+)/);
6255714Skris			$ret{$n,1}=$t1;
6355714Skris			$ret{$n,2}=$t2;
6455714Skris			}
6555714Skris		else
6655714Skris			{
6755714Skris			$n=join(' ',grep(/[^k]$/,@a));
6855714Skris			@k=grep(s/k$//,@a);
6955714Skris
7055714Skris			$ret{$n,   8}=$k[0];
7155714Skris			$ret{$n,  64}=$k[1];
7255714Skris			$ret{$n, 256}=$k[2];
7355714Skris			$ret{$n,1024}=$k[3];
7455714Skris			$ret{$n,8192}=$k[4];
7555714Skris			}
7655714Skris		}
7755714Skris	close(IN);
7855714Skris	return(%ret);
7955714Skris	}
8055714Skris
81