Remove files from vendor tree which were not part of OpenSSL 0.9.8e
(last vendor import). The file were removed in different earlier releases, but were not removed from the CVS vendor branch at the time.
This commit is contained in:
parent
9d8854235b
commit
11bac091f5
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/vendor-crypto/openssl/dist/; revision=183231
305
apps/der_chop
305
apps/der_chop
@ -1,305 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
#
|
|
||||||
# der_chop ... this is one total hack that Eric is really not proud of
|
|
||||||
# so don't look at it and don't ask for support
|
|
||||||
#
|
|
||||||
# The "documentation" for this (i.e. all the comments) are my fault --tjh
|
|
||||||
#
|
|
||||||
# This program takes the "raw" output of derparse/asn1parse and
|
|
||||||
# converts it into tokens and then runs regular expression matches
|
|
||||||
# to try to figure out what to grab to get the things that are needed
|
|
||||||
# and it is possible that this will do the wrong thing as it is a *hack*
|
|
||||||
#
|
|
||||||
# SSLeay 0.5.2+ should have direct read support for x509 (via -inform NET)
|
|
||||||
# [I know ... promises promises :-)]
|
|
||||||
#
|
|
||||||
# To convert a Netscape Certificate:
|
|
||||||
# der_chop < ServerCert.der > cert.pem
|
|
||||||
# To convert a Netscape Key (and encrypt it again to protect it)
|
|
||||||
# rsa -inform NET -in ServerKey.der -des > key.pem
|
|
||||||
#
|
|
||||||
# 23-Apr-96 eay Added the extra ASN.1 string types, I still think this
|
|
||||||
# is an evil hack. If nothing else the parsing should
|
|
||||||
# be relative, not absolute.
|
|
||||||
# 19-Apr-96 tjh hacked (with eay) into 0.5.x format
|
|
||||||
#
|
|
||||||
# Tim Hudson
|
|
||||||
# tjh@cryptsoft.com
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
require 'getopts.pl';
|
|
||||||
|
|
||||||
$debug=0;
|
|
||||||
|
|
||||||
# this was the 0.4.x way of doing things ...
|
|
||||||
$cmd="derparse";
|
|
||||||
$x509_cmd="x509";
|
|
||||||
$crl_cmd="crl";
|
|
||||||
$rc4_cmd="rc4";
|
|
||||||
$md2_cmd="md2";
|
|
||||||
$md4_cmd="md4";
|
|
||||||
$rsa_cmd="rsa -des -inform der ";
|
|
||||||
|
|
||||||
# this was the 0.5.x way of doing things ...
|
|
||||||
$cmd="openssl asn1parse";
|
|
||||||
$x509_cmd="openssl x509";
|
|
||||||
$crl_cmd="openssl crl";
|
|
||||||
$rc4_cmd="openssl rc4";
|
|
||||||
$md2_cmd="openssl md2";
|
|
||||||
$md4_cmd="openssl md4";
|
|
||||||
$rsa_cmd="openssl rsa -des -inform der ";
|
|
||||||
|
|
||||||
&Getopts('vd:') || die "usage:$0 [-v] [-d num] file";
|
|
||||||
$depth=($opt_d =~ /^\d+$/)?$opt_d:0;
|
|
||||||
|
|
||||||
&init_der();
|
|
||||||
|
|
||||||
if ($#ARGV != -1)
|
|
||||||
{
|
|
||||||
foreach $file (@ARGV)
|
|
||||||
{
|
|
||||||
print STDERR "doing $file\n";
|
|
||||||
&dofile($file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$file="/tmp/a$$.DER";
|
|
||||||
open(OUT,">$file") || die "unable to open $file:$!\n";
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
$i=sysread(STDIN,$b,1024*10);
|
|
||||||
last if ($i <= 0);
|
|
||||||
$i=syswrite(OUT,$b,$i);
|
|
||||||
}
|
|
||||||
&dofile($file);
|
|
||||||
unlink($file);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub dofile
|
|
||||||
{
|
|
||||||
local($file)=@_;
|
|
||||||
local(@p);
|
|
||||||
|
|
||||||
$b=&load_file($file);
|
|
||||||
@p=&load_file_parse($file);
|
|
||||||
|
|
||||||
foreach $_ (@p)
|
|
||||||
{
|
|
||||||
($off,$d,$hl,$len)=&parse_line($_);
|
|
||||||
$d-=$depth;
|
|
||||||
next if ($d != 0);
|
|
||||||
next if ($len == 0);
|
|
||||||
|
|
||||||
$o=substr($b,$off,$len+$hl);
|
|
||||||
($str,@data)=&der_str($o);
|
|
||||||
print "$str\n" if ($opt_v);
|
|
||||||
if ($str =~ /^$crl/)
|
|
||||||
{
|
|
||||||
open(OUT,"|$crl_cmd -inform d -hash -issuer") ||
|
|
||||||
die "unable to run $crl_cmd:$!\n";
|
|
||||||
print OUT $o;
|
|
||||||
close(OUT);
|
|
||||||
}
|
|
||||||
elsif ($str =~ /^$x509/)
|
|
||||||
{
|
|
||||||
open(OUT,"|$x509_cmd -inform d -hash -subject -issuer")
|
|
||||||
|| die "unable to run $x509_cmd:$!\n";
|
|
||||||
print OUT $o;
|
|
||||||
close(OUT);
|
|
||||||
}
|
|
||||||
elsif ($str =~ /^$rsa/)
|
|
||||||
{
|
|
||||||
($type)=($data[3] =~ /OBJECT_IDENTIFIER :(.*)\s*$/);
|
|
||||||
next unless ($type eq "rsaEncryption");
|
|
||||||
($off,$d,$hl,$len)=&parse_line($data[5]);
|
|
||||||
$os=substr($o,$off+$hl,$len);
|
|
||||||
open(OUT,"|$rsa_cmd")
|
|
||||||
|| die "unable to run $rsa_cmd:$!\n";
|
|
||||||
print OUT $os;
|
|
||||||
close(OUT);
|
|
||||||
}
|
|
||||||
elsif ($str =~ /^0G-1D-1G/)
|
|
||||||
{
|
|
||||||
($off,$d,$hl,$len)=&parse_line($data[1]);
|
|
||||||
$os=substr($o,$off+$hl,$len);
|
|
||||||
print STDERR "<$os>\n" if $opt_v;
|
|
||||||
&do_certificate($o,@data)
|
|
||||||
if (($os eq "certificate") &&
|
|
||||||
($str =! /^0G-1D-1G-2G-3F-3E-2D/));
|
|
||||||
&do_private_key($o,@data)
|
|
||||||
if (($os eq "private-key") &&
|
|
||||||
($str =! /^0G-1D-1G-2G-3F-3E-2D/));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub der_str
|
|
||||||
{
|
|
||||||
local($str)=@_;
|
|
||||||
local(*OUT,*IN,@a,$t,$d,$ret);
|
|
||||||
local($file)="/tmp/b$$.DER";
|
|
||||||
local(@ret);
|
|
||||||
|
|
||||||
open(OUT,">$file");
|
|
||||||
print OUT $str;
|
|
||||||
close(OUT);
|
|
||||||
open(IN,"$cmd -inform 'd' -in $file |") ||
|
|
||||||
die "unable to run $cmd:$!\n";
|
|
||||||
$ret="";
|
|
||||||
while (<IN>)
|
|
||||||
{
|
|
||||||
chop;
|
|
||||||
push(@ret,$_);
|
|
||||||
|
|
||||||
print STDERR "$_\n" if ($debug);
|
|
||||||
|
|
||||||
@a=split(/\s*:\s*/);
|
|
||||||
($d)=($a[1] =~ /d=\s*(\d+)/);
|
|
||||||
$a[2] =~ s/\s+$//;
|
|
||||||
$t=$DER_s2i{$a[2]};
|
|
||||||
$ret.="$d$t-";
|
|
||||||
}
|
|
||||||
close(IN);
|
|
||||||
unlink($file);
|
|
||||||
chop $ret;
|
|
||||||
$ret =~ s/(-3H(-4G-5F-5[IJKMQRS])+)+/-NAME/g;
|
|
||||||
$ret =~ s/(-3G-4B-4L)+/-RCERT/g;
|
|
||||||
return($ret,@ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub init_der
|
|
||||||
{
|
|
||||||
$crl= "0G-1G-2G-3F-3E-2G-NAME-2L-2L-2G-RCERT-1G-2F-2E-1C";
|
|
||||||
$x509="0G-1G-2B-2G-3F-3E-2G-NAME-2G-3L-3L-2G-NAME-2G-3G-4F-4E-3C-1G-2F-2E-1C";
|
|
||||||
$rsa= "0G-1B-1G-2F-2E-1D";
|
|
||||||
|
|
||||||
%DER_i2s=(
|
|
||||||
# SSLeay 0.4.x has this list
|
|
||||||
"A","EOC",
|
|
||||||
"B","INTEGER",
|
|
||||||
"C","BIT STRING",
|
|
||||||
"D","OCTET STRING",
|
|
||||||
"E","NULL",
|
|
||||||
"F","OBJECT",
|
|
||||||
"G","SEQUENCE",
|
|
||||||
"H","SET",
|
|
||||||
"I","PRINTABLESTRING",
|
|
||||||
"J","T61STRING",
|
|
||||||
"K","IA5STRING",
|
|
||||||
"L","UTCTIME",
|
|
||||||
"M","NUMERICSTRING",
|
|
||||||
"N","VIDEOTEXSTRING",
|
|
||||||
"O","GENERALIZEDTIME",
|
|
||||||
"P","GRAPHICSTRING",
|
|
||||||
"Q","ISO64STRING",
|
|
||||||
"R","GENERALSTRING",
|
|
||||||
"S","UNIVERSALSTRING",
|
|
||||||
|
|
||||||
# SSLeay 0.5.x changed some things ... and I'm
|
|
||||||
# leaving in the old stuff but adding in these
|
|
||||||
# to handle the new as well --tjh
|
|
||||||
# - Well I've just taken them out and added the extra new
|
|
||||||
# ones :-) - eay
|
|
||||||
);
|
|
||||||
|
|
||||||
foreach (keys %DER_i2s)
|
|
||||||
{ $DER_s2i{$DER_i2s{$_}}=$_; }
|
|
||||||
}
|
|
||||||
|
|
||||||
sub parse_line
|
|
||||||
{
|
|
||||||
local($_)=@_;
|
|
||||||
|
|
||||||
return(/\s*(\d+):d=\s*(\d+)\s+hl=\s*(\d+)\s+l=\s*(\d+|inf)\s/);
|
|
||||||
}
|
|
||||||
|
|
||||||
# 0:d=0 hl=4 l=377 cons: univ: SEQUENCE
|
|
||||||
# 4:d=1 hl=2 l= 11 prim: univ: OCTET_STRING
|
|
||||||
# 17:d=1 hl=4 l=360 cons: univ: SEQUENCE
|
|
||||||
# 21:d=2 hl=2 l= 12 cons: univ: SEQUENCE
|
|
||||||
# 23:d=3 hl=2 l= 8 prim: univ: OBJECT_IDENTIFIER :rc4
|
|
||||||
# 33:d=3 hl=2 l= 0 prim: univ: NULL
|
|
||||||
# 35:d=2 hl=4 l=342 prim: univ: OCTET_STRING
|
|
||||||
sub do_private_key
|
|
||||||
{
|
|
||||||
local($data,@struct)=@_;
|
|
||||||
local($file)="/tmp/b$$.DER";
|
|
||||||
local($off,$d,$hl,$len,$_,$b,@p,$s);
|
|
||||||
|
|
||||||
($type)=($struct[4] =~ /OBJECT_IDENTIFIER :(.*)\s*$/);
|
|
||||||
if ($type eq "rc4")
|
|
||||||
{
|
|
||||||
($off,$d,$hl,$len)=&parse_line($struct[6]);
|
|
||||||
open(OUT,"|$rc4_cmd >$file") ||
|
|
||||||
die "unable to run $rc4_cmd:$!\n";
|
|
||||||
print OUT substr($data,$off+$hl,$len);
|
|
||||||
close(OUT);
|
|
||||||
|
|
||||||
$b=&load_file($file);
|
|
||||||
unlink($file);
|
|
||||||
|
|
||||||
($s,@p)=&der_str($b);
|
|
||||||
die "unknown rsa key type\n$s\n"
|
|
||||||
if ($s ne '0G-1B-1G-2F-2E-1D');
|
|
||||||
local($off,$d,$hl,$len)=&parse_line($p[5]);
|
|
||||||
$b=substr($b,$off+$hl,$len);
|
|
||||||
($s,@p)=&der_str($b);
|
|
||||||
open(OUT,"|$rsa_cmd") || die "unable to run $rsa_cmd:$!\n";
|
|
||||||
print OUT $b;
|
|
||||||
close(OUT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print "'$type' is unknown\n";
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub do_certificate
|
|
||||||
{
|
|
||||||
local($data,@struct)=@_;
|
|
||||||
local($file)="/tmp/b$$.DER";
|
|
||||||
local($off,$d,$hl,$len,$_,$b,@p,$s);
|
|
||||||
|
|
||||||
($off,$d,$hl,$len)=&parse_line($struct[2]);
|
|
||||||
$b=substr($data,$off,$len+$hl);
|
|
||||||
|
|
||||||
open(OUT,"|$x509_cmd -inform d") || die "unable to run $x509_cmd:$!\n";
|
|
||||||
print OUT $b;
|
|
||||||
close(OUT);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub load_file
|
|
||||||
{
|
|
||||||
local($file)=@_;
|
|
||||||
local(*IN,$r,$b,$i);
|
|
||||||
|
|
||||||
$r="";
|
|
||||||
open(IN,"<$file") || die "unable to open $file:$!\n";
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
$i=sysread(IN,$b,10240);
|
|
||||||
last if ($i <= 0);
|
|
||||||
$r.=$b;
|
|
||||||
}
|
|
||||||
close(IN);
|
|
||||||
return($r);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub load_file_parse
|
|
||||||
{
|
|
||||||
local($file)=@_;
|
|
||||||
local(*IN,$r,@ret,$_,$i,$n,$b);
|
|
||||||
|
|
||||||
open(IN,"$cmd -inform d -in $file|")
|
|
||||||
|| die "unable to run der_parse\n";
|
|
||||||
while (<IN>)
|
|
||||||
{
|
|
||||||
chop;
|
|
||||||
push(@ret,$_);
|
|
||||||
}
|
|
||||||
return($r,@ret);
|
|
||||||
}
|
|
||||||
|
|
305
apps/der_chop.in
305
apps/der_chop.in
@ -1,305 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
#
|
|
||||||
# der_chop ... this is one total hack that Eric is really not proud of
|
|
||||||
# so don't look at it and don't ask for support
|
|
||||||
#
|
|
||||||
# The "documentation" for this (i.e. all the comments) are my fault --tjh
|
|
||||||
#
|
|
||||||
# This program takes the "raw" output of derparse/asn1parse and
|
|
||||||
# converts it into tokens and then runs regular expression matches
|
|
||||||
# to try to figure out what to grab to get the things that are needed
|
|
||||||
# and it is possible that this will do the wrong thing as it is a *hack*
|
|
||||||
#
|
|
||||||
# SSLeay 0.5.2+ should have direct read support for x509 (via -inform NET)
|
|
||||||
# [I know ... promises promises :-)]
|
|
||||||
#
|
|
||||||
# To convert a Netscape Certificate:
|
|
||||||
# der_chop < ServerCert.der > cert.pem
|
|
||||||
# To convert a Netscape Key (and encrypt it again to protect it)
|
|
||||||
# rsa -inform NET -in ServerKey.der -des > key.pem
|
|
||||||
#
|
|
||||||
# 23-Apr-96 eay Added the extra ASN.1 string types, I still think this
|
|
||||||
# is an evil hack. If nothing else the parsing should
|
|
||||||
# be relative, not absolute.
|
|
||||||
# 19-Apr-96 tjh hacked (with eay) into 0.5.x format
|
|
||||||
#
|
|
||||||
# Tim Hudson
|
|
||||||
# tjh@cryptsoft.com
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
require 'getopts.pl';
|
|
||||||
|
|
||||||
$debug=0;
|
|
||||||
|
|
||||||
# this was the 0.4.x way of doing things ...
|
|
||||||
$cmd="derparse";
|
|
||||||
$x509_cmd="x509";
|
|
||||||
$crl_cmd="crl";
|
|
||||||
$rc4_cmd="rc4";
|
|
||||||
$md2_cmd="md2";
|
|
||||||
$md4_cmd="md4";
|
|
||||||
$rsa_cmd="rsa -des -inform der ";
|
|
||||||
|
|
||||||
# this was the 0.5.x way of doing things ...
|
|
||||||
$cmd="openssl asn1parse";
|
|
||||||
$x509_cmd="openssl x509";
|
|
||||||
$crl_cmd="openssl crl";
|
|
||||||
$rc4_cmd="openssl rc4";
|
|
||||||
$md2_cmd="openssl md2";
|
|
||||||
$md4_cmd="openssl md4";
|
|
||||||
$rsa_cmd="openssl rsa -des -inform der ";
|
|
||||||
|
|
||||||
&Getopts('vd:') || die "usage:$0 [-v] [-d num] file";
|
|
||||||
$depth=($opt_d =~ /^\d+$/)?$opt_d:0;
|
|
||||||
|
|
||||||
&init_der();
|
|
||||||
|
|
||||||
if ($#ARGV != -1)
|
|
||||||
{
|
|
||||||
foreach $file (@ARGV)
|
|
||||||
{
|
|
||||||
print STDERR "doing $file\n";
|
|
||||||
&dofile($file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$file="/tmp/a$$.DER";
|
|
||||||
open(OUT,">$file") || die "unable to open $file:$!\n";
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
$i=sysread(STDIN,$b,1024*10);
|
|
||||||
last if ($i <= 0);
|
|
||||||
$i=syswrite(OUT,$b,$i);
|
|
||||||
}
|
|
||||||
&dofile($file);
|
|
||||||
unlink($file);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub dofile
|
|
||||||
{
|
|
||||||
local($file)=@_;
|
|
||||||
local(@p);
|
|
||||||
|
|
||||||
$b=&load_file($file);
|
|
||||||
@p=&load_file_parse($file);
|
|
||||||
|
|
||||||
foreach $_ (@p)
|
|
||||||
{
|
|
||||||
($off,$d,$hl,$len)=&parse_line($_);
|
|
||||||
$d-=$depth;
|
|
||||||
next if ($d != 0);
|
|
||||||
next if ($len == 0);
|
|
||||||
|
|
||||||
$o=substr($b,$off,$len+$hl);
|
|
||||||
($str,@data)=&der_str($o);
|
|
||||||
print "$str\n" if ($opt_v);
|
|
||||||
if ($str =~ /^$crl/)
|
|
||||||
{
|
|
||||||
open(OUT,"|$crl_cmd -inform d -hash -issuer") ||
|
|
||||||
die "unable to run $crl_cmd:$!\n";
|
|
||||||
print OUT $o;
|
|
||||||
close(OUT);
|
|
||||||
}
|
|
||||||
elsif ($str =~ /^$x509/)
|
|
||||||
{
|
|
||||||
open(OUT,"|$x509_cmd -inform d -hash -subject -issuer")
|
|
||||||
|| die "unable to run $x509_cmd:$!\n";
|
|
||||||
print OUT $o;
|
|
||||||
close(OUT);
|
|
||||||
}
|
|
||||||
elsif ($str =~ /^$rsa/)
|
|
||||||
{
|
|
||||||
($type)=($data[3] =~ /OBJECT_IDENTIFIER :(.*)\s*$/);
|
|
||||||
next unless ($type eq "rsaEncryption");
|
|
||||||
($off,$d,$hl,$len)=&parse_line($data[5]);
|
|
||||||
$os=substr($o,$off+$hl,$len);
|
|
||||||
open(OUT,"|$rsa_cmd")
|
|
||||||
|| die "unable to run $rsa_cmd:$!\n";
|
|
||||||
print OUT $os;
|
|
||||||
close(OUT);
|
|
||||||
}
|
|
||||||
elsif ($str =~ /^0G-1D-1G/)
|
|
||||||
{
|
|
||||||
($off,$d,$hl,$len)=&parse_line($data[1]);
|
|
||||||
$os=substr($o,$off+$hl,$len);
|
|
||||||
print STDERR "<$os>\n" if $opt_v;
|
|
||||||
&do_certificate($o,@data)
|
|
||||||
if (($os eq "certificate") &&
|
|
||||||
($str =! /^0G-1D-1G-2G-3F-3E-2D/));
|
|
||||||
&do_private_key($o,@data)
|
|
||||||
if (($os eq "private-key") &&
|
|
||||||
($str =! /^0G-1D-1G-2G-3F-3E-2D/));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub der_str
|
|
||||||
{
|
|
||||||
local($str)=@_;
|
|
||||||
local(*OUT,*IN,@a,$t,$d,$ret);
|
|
||||||
local($file)="/tmp/b$$.DER";
|
|
||||||
local(@ret);
|
|
||||||
|
|
||||||
open(OUT,">$file");
|
|
||||||
print OUT $str;
|
|
||||||
close(OUT);
|
|
||||||
open(IN,"$cmd -inform 'd' -in $file |") ||
|
|
||||||
die "unable to run $cmd:$!\n";
|
|
||||||
$ret="";
|
|
||||||
while (<IN>)
|
|
||||||
{
|
|
||||||
chop;
|
|
||||||
push(@ret,$_);
|
|
||||||
|
|
||||||
print STDERR "$_\n" if ($debug);
|
|
||||||
|
|
||||||
@a=split(/\s*:\s*/);
|
|
||||||
($d)=($a[1] =~ /d=\s*(\d+)/);
|
|
||||||
$a[2] =~ s/\s+$//;
|
|
||||||
$t=$DER_s2i{$a[2]};
|
|
||||||
$ret.="$d$t-";
|
|
||||||
}
|
|
||||||
close(IN);
|
|
||||||
unlink($file);
|
|
||||||
chop $ret;
|
|
||||||
$ret =~ s/(-3H(-4G-5F-5[IJKMQRS])+)+/-NAME/g;
|
|
||||||
$ret =~ s/(-3G-4B-4L)+/-RCERT/g;
|
|
||||||
return($ret,@ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub init_der
|
|
||||||
{
|
|
||||||
$crl= "0G-1G-2G-3F-3E-2G-NAME-2L-2L-2G-RCERT-1G-2F-2E-1C";
|
|
||||||
$x509="0G-1G-2B-2G-3F-3E-2G-NAME-2G-3L-3L-2G-NAME-2G-3G-4F-4E-3C-1G-2F-2E-1C";
|
|
||||||
$rsa= "0G-1B-1G-2F-2E-1D";
|
|
||||||
|
|
||||||
%DER_i2s=(
|
|
||||||
# SSLeay 0.4.x has this list
|
|
||||||
"A","EOC",
|
|
||||||
"B","INTEGER",
|
|
||||||
"C","BIT STRING",
|
|
||||||
"D","OCTET STRING",
|
|
||||||
"E","NULL",
|
|
||||||
"F","OBJECT",
|
|
||||||
"G","SEQUENCE",
|
|
||||||
"H","SET",
|
|
||||||
"I","PRINTABLESTRING",
|
|
||||||
"J","T61STRING",
|
|
||||||
"K","IA5STRING",
|
|
||||||
"L","UTCTIME",
|
|
||||||
"M","NUMERICSTRING",
|
|
||||||
"N","VIDEOTEXSTRING",
|
|
||||||
"O","GENERALIZEDTIME",
|
|
||||||
"P","GRAPHICSTRING",
|
|
||||||
"Q","ISO64STRING",
|
|
||||||
"R","GENERALSTRING",
|
|
||||||
"S","UNIVERSALSTRING",
|
|
||||||
|
|
||||||
# SSLeay 0.5.x changed some things ... and I'm
|
|
||||||
# leaving in the old stuff but adding in these
|
|
||||||
# to handle the new as well --tjh
|
|
||||||
# - Well I've just taken them out and added the extra new
|
|
||||||
# ones :-) - eay
|
|
||||||
);
|
|
||||||
|
|
||||||
foreach (keys %DER_i2s)
|
|
||||||
{ $DER_s2i{$DER_i2s{$_}}=$_; }
|
|
||||||
}
|
|
||||||
|
|
||||||
sub parse_line
|
|
||||||
{
|
|
||||||
local($_)=@_;
|
|
||||||
|
|
||||||
return(/\s*(\d+):d=\s*(\d+)\s+hl=\s*(\d+)\s+l=\s*(\d+|inf)\s/);
|
|
||||||
}
|
|
||||||
|
|
||||||
# 0:d=0 hl=4 l=377 cons: univ: SEQUENCE
|
|
||||||
# 4:d=1 hl=2 l= 11 prim: univ: OCTET_STRING
|
|
||||||
# 17:d=1 hl=4 l=360 cons: univ: SEQUENCE
|
|
||||||
# 21:d=2 hl=2 l= 12 cons: univ: SEQUENCE
|
|
||||||
# 23:d=3 hl=2 l= 8 prim: univ: OBJECT_IDENTIFIER :rc4
|
|
||||||
# 33:d=3 hl=2 l= 0 prim: univ: NULL
|
|
||||||
# 35:d=2 hl=4 l=342 prim: univ: OCTET_STRING
|
|
||||||
sub do_private_key
|
|
||||||
{
|
|
||||||
local($data,@struct)=@_;
|
|
||||||
local($file)="/tmp/b$$.DER";
|
|
||||||
local($off,$d,$hl,$len,$_,$b,@p,$s);
|
|
||||||
|
|
||||||
($type)=($struct[4] =~ /OBJECT_IDENTIFIER :(.*)\s*$/);
|
|
||||||
if ($type eq "rc4")
|
|
||||||
{
|
|
||||||
($off,$d,$hl,$len)=&parse_line($struct[6]);
|
|
||||||
open(OUT,"|$rc4_cmd >$file") ||
|
|
||||||
die "unable to run $rc4_cmd:$!\n";
|
|
||||||
print OUT substr($data,$off+$hl,$len);
|
|
||||||
close(OUT);
|
|
||||||
|
|
||||||
$b=&load_file($file);
|
|
||||||
unlink($file);
|
|
||||||
|
|
||||||
($s,@p)=&der_str($b);
|
|
||||||
die "unknown rsa key type\n$s\n"
|
|
||||||
if ($s ne '0G-1B-1G-2F-2E-1D');
|
|
||||||
local($off,$d,$hl,$len)=&parse_line($p[5]);
|
|
||||||
$b=substr($b,$off+$hl,$len);
|
|
||||||
($s,@p)=&der_str($b);
|
|
||||||
open(OUT,"|$rsa_cmd") || die "unable to run $rsa_cmd:$!\n";
|
|
||||||
print OUT $b;
|
|
||||||
close(OUT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print "'$type' is unknown\n";
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub do_certificate
|
|
||||||
{
|
|
||||||
local($data,@struct)=@_;
|
|
||||||
local($file)="/tmp/b$$.DER";
|
|
||||||
local($off,$d,$hl,$len,$_,$b,@p,$s);
|
|
||||||
|
|
||||||
($off,$d,$hl,$len)=&parse_line($struct[2]);
|
|
||||||
$b=substr($data,$off,$len+$hl);
|
|
||||||
|
|
||||||
open(OUT,"|$x509_cmd -inform d") || die "unable to run $x509_cmd:$!\n";
|
|
||||||
print OUT $b;
|
|
||||||
close(OUT);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub load_file
|
|
||||||
{
|
|
||||||
local($file)=@_;
|
|
||||||
local(*IN,$r,$b,$i);
|
|
||||||
|
|
||||||
$r="";
|
|
||||||
open(IN,"<$file") || die "unable to open $file:$!\n";
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
$i=sysread(IN,$b,10240);
|
|
||||||
last if ($i <= 0);
|
|
||||||
$r.=$b;
|
|
||||||
}
|
|
||||||
close(IN);
|
|
||||||
return($r);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub load_file_parse
|
|
||||||
{
|
|
||||||
local($file)=@_;
|
|
||||||
local(*IN,$r,@ret,$_,$i,$n,$b);
|
|
||||||
|
|
||||||
open(IN,"$cmd -inform d -in $file|")
|
|
||||||
|| die "unable to run der_parse\n";
|
|
||||||
while (<IN>)
|
|
||||||
{
|
|
||||||
chop;
|
|
||||||
push(@ret,$_);
|
|
||||||
}
|
|
||||||
return($r,@ret);
|
|
||||||
}
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
|||||||
Microsoft (R) C/C++ Optimizing Compiler Version 8.00c
|
|
||||||
|
|
||||||
Compile with /O2 chokes the compiler on these files
|
|
||||||
|
|
||||||
crypto\md\md5_dgst.c warning '@(#)reg86.c:1.26', line 1110
|
|
||||||
crypto\des\ofb64ede.c warning '@(#)grammar.c:1.147', line 168
|
|
||||||
crypto\des\ofb64enc.c warning '@(#)grammar.c:1.147', line 168
|
|
||||||
crypto\des\qud_cksm.c warning '@(#)grammar.c:1.147', line 168
|
|
||||||
crypto\rc2\rc2ofb64.c warning '@(#)grammar.c:1.147', line 168
|
|
||||||
crypto\objects\obj_dat.c warning '@(#)grammar.c:1.147', line 168
|
|
||||||
fatal '@(#)grammar.c:1.147', line 168
|
|
||||||
crypto\objects\obj_lib.c warning '@(#)grammar.c:1.147', line 168
|
|
||||||
fatal '@(#)grammar.c:1.147', line 168
|
|
||||||
ssl\ssl_auth.c warning '@(#)grammar.c:1.147', line 168
|
|
||||||
fatal '@(#)grammar.c:1.147', line 168
|
|
||||||
|
|
||||||
Turning on /G3 with build flags that worked fine for /G2 came up with
|
|
||||||
divide by zero errors in 'normal' code in speed.c :-(
|
|
@ -1,59 +0,0 @@
|
|||||||
Certificate:
|
|
||||||
Data:
|
|
||||||
Version: 3 (0x2)
|
|
||||||
Serial Number: 1 (0x1)
|
|
||||||
Signature Algorithm: md5WithRSAEncryption
|
|
||||||
Issuer: O=European ICE-TEL project, OU=V3-Certification Authority
|
|
||||||
Validity
|
|
||||||
Not Before: Apr 2 17:35:53 1997 GMT
|
|
||||||
Not After : Apr 2 17:35:53 1998 GMT
|
|
||||||
Subject: O=European ICE-TEL project, OU=V3-Certification Authority, L=Darmstadt
|
|
||||||
Subject Public Key Info:
|
|
||||||
Public Key Algorithm: rsa
|
|
||||||
RSA Public Key: (512 bit)
|
|
||||||
Modulus (512 bit):
|
|
||||||
00:82:75:ba:f6:d1:60:b5:f9:15:b3:6a:dd:29:8f:
|
|
||||||
8b:a4:6f:1a:88:e0:50:43:40:0b:79:41:d5:d3:16:
|
|
||||||
44:7d:74:65:17:42:06:52:0b:e9:50:c8:10:cd:24:
|
|
||||||
e2:ae:8d:22:30:73:e6:b4:b7:93:1f:e5:6e:a2:ae:
|
|
||||||
49:11:a5:c9:45
|
|
||||||
Exponent: 65537 (0x10001)
|
|
||||||
X509v3 extensions:
|
|
||||||
X509v3 Authority Key Identifier:
|
|
||||||
0.........z.."p......e..
|
|
||||||
X509v3 Subject Key Identifier:
|
|
||||||
..~r..:..B.44fu......3
|
|
||||||
X509v3 Key Usage: critical
|
|
||||||
....
|
|
||||||
X509v3 Certificate Policies: critical
|
|
||||||
0.0...*...
|
|
||||||
X509v3 Subject Alternative Name:
|
|
||||||
0!..secude-support@darmstadt.gmd.de
|
|
||||||
X509v3 Issuer Alternative Name:
|
|
||||||
0I..ice-tel-ca@darmstadt.gmd.de.*http://www.darmstadt.gmd.de/ice-tel/euroca
|
|
||||||
X509v3 Basic Constraints: critical
|
|
||||||
0....
|
|
||||||
X509v3 CRL Distribution Points:
|
|
||||||
0200...,.*http://www.darmstadt.gmd.de/ice-tel/euroca
|
|
||||||
Signature Algorithm: md5WithRSAEncryption
|
|
||||||
17:a2:88:b7:99:5a:05:41:e4:13:34:67:e6:1f:3e:26:ec:4b:
|
|
||||||
69:f9:3e:28:22:be:9d:1c:ab:41:6f:0c:00:85:fe:45:74:f6:
|
|
||||||
98:f0:ce:9b:65:53:4a:50:42:c7:d4:92:bd:d7:a2:a8:3d:98:
|
|
||||||
88:73:cd:60:28:79:a3:fc:48:7a
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICzDCCAnagAwIBAgIBATANBgkqhkiG9w0BAQQFADBIMSEwHwYDVQQKExhFdXJv
|
|
||||||
cGVhbiBJQ0UtVEVMIHByb2plY3QxIzAhBgNVBAsTGlYzLUNlcnRpZmljYXRpb24g
|
|
||||||
QXV0aG9yaXR5MB4XDTk3MDQwMjE3MzU1M1oXDTk4MDQwMjE3MzU1M1owXDEhMB8G
|
|
||||||
A1UEChMYRXVyb3BlYW4gSUNFLVRFTCBwcm9qZWN0MSMwIQYDVQQLExpWMy1DZXJ0
|
|
||||||
aWZpY2F0aW9uIEF1dGhvcml0eTESMBAGA1UEBxMJRGFybXN0YWR0MFkwCgYEVQgB
|
|
||||||
AQICAgADSwAwSAJBAIJ1uvbRYLX5FbNq3SmPi6RvGojgUENAC3lB1dMWRH10ZRdC
|
|
||||||
BlIL6VDIEM0k4q6NIjBz5rS3kx/lbqKuSRGlyUUCAwEAAaOCATgwggE0MB8GA1Ud
|
|
||||||
IwQYMBaAFIr3yNUOx3ro1yJw4AuJ1bbsZbzPMB0GA1UdDgQWBBR+cvL4OoacQog0
|
|
||||||
NGZ1w9T80aIRMzAOBgNVHQ8BAf8EBAMCAfYwFAYDVR0gAQH/BAowCDAGBgQqAwQF
|
|
||||||
MCoGA1UdEQQjMCGBH3NlY3VkZS1zdXBwb3J0QGRhcm1zdGFkdC5nbWQuZGUwUgYD
|
|
||||||
VR0SBEswSYEbaWNlLXRlbC1jYUBkYXJtc3RhZHQuZ21kLmRlhipodHRwOi8vd3d3
|
|
||||||
LmRhcm1zdGFkdC5nbWQuZGUvaWNlLXRlbC9ldXJvY2EwDwYDVR0TAQH/BAUwAwEB
|
|
||||||
/zA7BgNVHR8ENDAyMDCgLqAshipodHRwOi8vd3d3LmRhcm1zdGFkdC5nbWQuZGUv
|
|
||||||
aWNlLXRlbC9ldXJvY2EwDQYJKoZIhvcNAQEEBQADQQAXooi3mVoFQeQTNGfmHz4m
|
|
||||||
7Etp+T4oIr6dHKtBbwwAhf5FdPaY8M6bZVNKUELH1JK916KoPZiIc81gKHmj/Eh6
|
|
||||||
-----END CERTIFICATE-----
|
|
@ -1,48 +0,0 @@
|
|||||||
Certificate:
|
|
||||||
Data:
|
|
||||||
Version: 3 (0x2)
|
|
||||||
Serial Number: 0 (0x0)
|
|
||||||
Signature Algorithm: md5WithRSAEncryption
|
|
||||||
Issuer: O=European ICE-TEL project, OU=V3-Certification Authority
|
|
||||||
Validity
|
|
||||||
Not Before: Apr 2 17:33:36 1997 GMT
|
|
||||||
Not After : Apr 2 17:33:36 1998 GMT
|
|
||||||
Subject: O=European ICE-TEL project, OU=V3-Certification Authority
|
|
||||||
Subject Public Key Info:
|
|
||||||
Public Key Algorithm: rsa
|
|
||||||
RSA Public Key: (512 bit)
|
|
||||||
Modulus (512 bit):
|
|
||||||
00:80:3e:eb:ae:47:a9:fe:10:54:0b:81:8b:9c:2b:
|
|
||||||
82:ab:3a:61:36:65:8b:f3:73:9f:ac:ac:7a:15:a7:
|
|
||||||
13:8f:b4:c4:ba:a3:0f:bc:a5:58:8d:cc:b1:93:31:
|
|
||||||
9e:81:9e:8c:19:61:86:fa:52:73:54:d1:97:76:22:
|
|
||||||
e7:c7:9f:41:cd
|
|
||||||
Exponent: 65537 (0x10001)
|
|
||||||
X509v3 extensions:
|
|
||||||
X509v3 Subject Key Identifier:
|
|
||||||
........z.."p......e..
|
|
||||||
X509v3 Key Usage: critical
|
|
||||||
....
|
|
||||||
X509v3 Subject Alternative Name:
|
|
||||||
0I.*http://www.darmstadt.gmd.de/ice-tel/euroca..ice-tel-ca@darmstadt.gmd.de
|
|
||||||
X509v3 Basic Constraints: critical
|
|
||||||
0....
|
|
||||||
Signature Algorithm: md5WithRSAEncryption
|
|
||||||
76:69:61:db:b7:cf:8b:06:9e:d8:8c:96:53:d2:4d:a8:23:a6:
|
|
||||||
03:44:e8:8f:24:a5:c0:84:a8:4b:77:d4:2d:2b:7d:37:91:67:
|
|
||||||
f2:2c:ce:02:31:4c:6b:cc:ce:f2:68:a6:11:11:ab:7d:88:b8:
|
|
||||||
7e:22:9f:25:06:60:bd:79:30:3d
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICFjCCAcCgAwIBAgIBADANBgkqhkiG9w0BAQQFADBIMSEwHwYDVQQKExhFdXJv
|
|
||||||
cGVhbiBJQ0UtVEVMIHByb2plY3QxIzAhBgNVBAsTGlYzLUNlcnRpZmljYXRpb24g
|
|
||||||
QXV0aG9yaXR5MB4XDTk3MDQwMjE3MzMzNloXDTk4MDQwMjE3MzMzNlowSDEhMB8G
|
|
||||||
A1UEChMYRXVyb3BlYW4gSUNFLVRFTCBwcm9qZWN0MSMwIQYDVQQLExpWMy1DZXJ0
|
|
||||||
aWZpY2F0aW9uIEF1dGhvcml0eTBZMAoGBFUIAQECAgIAA0sAMEgCQQCAPuuuR6n+
|
|
||||||
EFQLgYucK4KrOmE2ZYvzc5+srHoVpxOPtMS6ow+8pViNzLGTMZ6BnowZYYb6UnNU
|
|
||||||
0Zd2IufHn0HNAgMBAAGjgZcwgZQwHQYDVR0OBBYEFIr3yNUOx3ro1yJw4AuJ1bbs
|
|
||||||
ZbzPMA4GA1UdDwEB/wQEAwIB9jBSBgNVHREESzBJhipodHRwOi8vd3d3LmRhcm1z
|
|
||||||
dGFkdC5nbWQuZGUvaWNlLXRlbC9ldXJvY2GBG2ljZS10ZWwtY2FAZGFybXN0YWR0
|
|
||||||
LmdtZC5kZTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBAUAA0EAdmlh27fP
|
|
||||||
iwae2IyWU9JNqCOmA0TojySlwISoS3fULSt9N5Fn8izOAjFMa8zO8mimERGrfYi4
|
|
||||||
fiKfJQZgvXkwPQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
@ -1,63 +0,0 @@
|
|||||||
Certificate:
|
|
||||||
Data:
|
|
||||||
Version: 3 (0x2)
|
|
||||||
Serial Number: 1 (0x1)
|
|
||||||
Signature Algorithm: md5WithRSAEncryption
|
|
||||||
Issuer: O=European ICE-TEL project, OU=V3-Certification Authority, L=Darmstadt
|
|
||||||
Validity
|
|
||||||
Not Before: Apr 2 17:35:59 1997 GMT
|
|
||||||
Not After : Apr 2 17:35:59 1998 GMT
|
|
||||||
Subject: O=European ICE-TEL project, OU=V3-Certification Authority, L=Darmstadt, CN=USER
|
|
||||||
Subject Public Key Info:
|
|
||||||
Public Key Algorithm: rsa
|
|
||||||
RSA Public Key: (512 bit)
|
|
||||||
Modulus (512 bit):
|
|
||||||
00:a8:a8:53:63:49:1b:93:c3:c3:0b:6c:88:11:55:
|
|
||||||
de:7e:6a:e2:f9:52:a0:dc:69:25:c4:c8:bf:55:e1:
|
|
||||||
31:a8:ce:e4:a9:29:85:99:8a:15:9a:de:f6:2f:e1:
|
|
||||||
b4:50:5f:5e:04:75:a6:f4:76:dc:3c:0e:39:dc:3a:
|
|
||||||
be:3e:a4:61:8b
|
|
||||||
Exponent: 65537 (0x10001)
|
|
||||||
X509v3 extensions:
|
|
||||||
X509v3 Authority Key Identifier:
|
|
||||||
0...~r..:..B.44fu......3
|
|
||||||
X509v3 Subject Key Identifier:
|
|
||||||
...... .*...1.*.......
|
|
||||||
X509v3 Key Usage: critical
|
|
||||||
....
|
|
||||||
X509v3 Certificate Policies: critical
|
|
||||||
0.0...*...0.......
|
|
||||||
X509v3 Subject Alternative Name:
|
|
||||||
0:..user@darmstadt.gmd.de.!http://www.darmstadt.gmd.de/~user
|
|
||||||
X509v3 Issuer Alternative Name:
|
|
||||||
0....gmdca@gmd.de..http://www.gmd.de..saturn.darmstadt.gmd.de.\1!0...U.
|
|
||||||
..European ICE-TEL project1#0!..U....V3-Certification Authority1.0...U....Darmstadt..141.12.62.26
|
|
||||||
X509v3 Basic Constraints: critical
|
|
||||||
0.
|
|
||||||
X509v3 CRL Distribution Points:
|
|
||||||
0.0.......gmdca@gmd.de
|
|
||||||
Signature Algorithm: md5WithRSAEncryption
|
|
||||||
69:0c:e1:b7:a7:f2:d8:fb:e8:69:c0:13:cd:37:ad:21:06:22:
|
|
||||||
4d:e8:c6:db:f1:04:0b:b7:e0:b3:d6:0c:81:03:ce:c3:6a:3e:
|
|
||||||
c7:e7:24:24:a4:92:64:c2:83:83:06:42:53:0e:6f:09:1e:84:
|
|
||||||
9a:f7:6f:63:9b:94:99:83:d6:a4
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDTzCCAvmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBcMSEwHwYDVQQKExhFdXJv
|
|
||||||
cGVhbiBJQ0UtVEVMIHByb2plY3QxIzAhBgNVBAsTGlYzLUNlcnRpZmljYXRpb24g
|
|
||||||
QXV0aG9yaXR5MRIwEAYDVQQHEwlEYXJtc3RhZHQwHhcNOTcwNDAyMTczNTU5WhcN
|
|
||||||
OTgwNDAyMTczNTU5WjBrMSEwHwYDVQQKExhFdXJvcGVhbiBJQ0UtVEVMIHByb2pl
|
|
||||||
Y3QxIzAhBgNVBAsTGlYzLUNlcnRpZmljYXRpb24gQXV0aG9yaXR5MRIwEAYDVQQH
|
|
||||||
EwlEYXJtc3RhZHQxDTALBgNVBAMTBFVTRVIwWTAKBgRVCAEBAgICAANLADBIAkEA
|
|
||||||
qKhTY0kbk8PDC2yIEVXefmri+VKg3GklxMi/VeExqM7kqSmFmYoVmt72L+G0UF9e
|
|
||||||
BHWm9HbcPA453Dq+PqRhiwIDAQABo4IBmDCCAZQwHwYDVR0jBBgwFoAUfnLy+DqG
|
|
||||||
nEKINDRmdcPU/NGiETMwHQYDVR0OBBYEFJfc4B8gjSoRmLUx4Sq/ucIYiMrPMA4G
|
|
||||||
A1UdDwEB/wQEAwIB8DAcBgNVHSABAf8EEjAQMAYGBCoDBAUwBgYECQgHBjBDBgNV
|
|
||||||
HREEPDA6gRV1c2VyQGRhcm1zdGFkdC5nbWQuZGWGIWh0dHA6Ly93d3cuZGFybXN0
|
|
||||||
YWR0LmdtZC5kZS9+dXNlcjCBsQYDVR0SBIGpMIGmgQxnbWRjYUBnbWQuZGWGEWh0
|
|
||||||
dHA6Ly93d3cuZ21kLmRlghdzYXR1cm4uZGFybXN0YWR0LmdtZC5kZaRcMSEwHwYD
|
|
||||||
VQQKExhFdXJvcGVhbiBJQ0UtVEVMIHByb2plY3QxIzAhBgNVBAsTGlYzLUNlcnRp
|
|
||||||
ZmljYXRpb24gQXV0aG9yaXR5MRIwEAYDVQQHEwlEYXJtc3RhZHSHDDE0MS4xMi42
|
|
||||||
Mi4yNjAMBgNVHRMBAf8EAjAAMB0GA1UdHwQWMBQwEqAQoA6BDGdtZGNhQGdtZC5k
|
|
||||||
ZTANBgkqhkiG9w0BAQQFAANBAGkM4ben8tj76GnAE803rSEGIk3oxtvxBAu34LPW
|
|
||||||
DIEDzsNqPsfnJCSkkmTCg4MGQlMObwkehJr3b2OblJmD1qQ=
|
|
||||||
-----END CERTIFICATE-----
|
|
@ -1,9 +0,0 @@
|
|||||||
-----BEGIN X509 CRL-----
|
|
||||||
MIIBNDCBnjANBgkqhkiG9w0BAQIFADBFMSEwHwYDVQQKExhFdXJvcGVhbiBJQ0Ut
|
|
||||||
VEVMIFByb2plY3QxIDAeBgNVBAsTF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5Fw05
|
|
||||||
NzA2MDkxNDQyNDNaFw05NzA3MDkxNDQyNDNaMCgwEgIBChcNOTcwMzAzMTQ0MjU0
|
|
||||||
WjASAgEJFw05NjEwMDIxMjI5MjdaMA0GCSqGSIb3DQEBAgUAA4GBAH4vgWo2Tej/
|
|
||||||
i7kbiw4Imd30If91iosjClNpBFwvwUDBclPEeMuYimHbLOk4H8Nofc0fw11+U/IO
|
|
||||||
KSNouUDcqG7B64oY7c4SXKn+i1MWOb5OJiWeodX3TehHjBlyWzoNMWCnYA8XqFP1
|
|
||||||
mOKp8Jla1BibEZf14+/HqCi2hnZUiEXh
|
|
||||||
-----END X509 CRL-----
|
|
@ -1,19 +0,0 @@
|
|||||||
issuer= CN=4R-CA 1:PN+0.2.262.1.10.7.20=#130131,O=Regulierungsbeh\C3\88orde f\C3\88ur Telekommunikation und Post,C=DE
|
|
||||||
notBefore=Jan 21 16:04:53 1999 GMT
|
|
||||||
notAfter=Jan 21 16:04:53 2004 GMT
|
|
||||||
subject= CN=4R-CA 1:PN+0.2.262.1.10.7.20=#130131,O=Regulierungsbeh\C3\88orde f\C3\88ur Telekommunikation und Post,C=DE
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICZzCCAdOgAwIBAgIEOwVn1DAKBgYrJAMDAQIFADBvMQswCQYDVQQGEwJERTE9
|
|
||||||
MDsGA1UEChQ0UmVndWxpZXJ1bmdzYmVoyG9yZGUgZsh1ciBUZWxla29tbXVuaWth
|
|
||||||
dGlvbiB1bmQgUG9zdDEhMAwGBwKCBgEKBxQTATEwEQYDVQQDFAo0Ui1DQSAxOlBO
|
|
||||||
MCIYDzE5OTkwMTIxMTYwNDUzWhgPMjAwNDAxMjExNjA0NTNaMG8xCzAJBgNVBAYT
|
|
||||||
AkRFMT0wOwYDVQQKFDRSZWd1bGllcnVuZ3NiZWjIb3JkZSBmyHVyIFRlbGVrb21t
|
|
||||||
dW5pa2F0aW9uIHVuZCBQb3N0MSEwDAYHAoIGAQoHFBMBMTARBgNVBAMUCjRSLUNB
|
|
||||||
IDE6UE4wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGAjzHbq2asUlqeWbXTQHso
|
|
||||||
aVF6YIPVH3c/B2cbuy9HJ/lnE6x0asOzM2DGDqi47xkdAxPc0LZ0fxO87rkmz7xs
|
|
||||||
jJObnVrMXpyUSDSp5Y0wqKJdsFdr6mGFOQZteIti8AJnr8xMkwnWVyuOlEXsFe1h
|
|
||||||
5gxwQXrOcPinE6qu1t/3PmECBMAAAAGjEjAQMA4GA1UdDwEB/wQEAwIBBjAKBgYr
|
|
||||||
JAMDAQIFAAOBgQA+RdocBmA2VV9E5aKPBcp01tdZAvvW9Tve3docArVKR/4/yvSX
|
|
||||||
Z+wvzzk+uu4qBp49HN3nqPYMrzbTmjBFu4ce5fkZ7dHF0W1sSBL0rox5z36Aq2re
|
|
||||||
JjfEOEmSnNe0+opuh4FSVOssXblXTE8lEQU0FhhItgDx2ADnWZibaxLG4w==
|
|
||||||
-----END CERTIFICATE-----
|
|
@ -1,33 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIC5TCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQQFADBcMQswCQYDVQQGEwJBVTET
|
|
||||||
MBEGA1UECBMKUXVlZW5zbGFuZDEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQx
|
|
||||||
HDAaBgNVBAMTE1Rlc3QgUENBICgxMDI0IGJpdCkwHhcNOTkxMjAyMjEzODUxWhcN
|
|
||||||
MDUwNzEwMjEzODUxWjBbMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFu
|
|
||||||
ZDEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxGzAZBgNVBAMTElRlc3QgQ0Eg
|
|
||||||
KDEwMjQgYml0KTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAo7ujy3XXpU/p
|
|
||||||
yDJtOxkMJmGv3mdiVm7JrdoKLUgqjO2rBaeNuYMUiuI6oYU+tlD6agwRML0Pn2JF
|
|
||||||
b90VdK/UXrmRr9djaEuH17EIKjte5RwOzndCndsjcCYyoeODMTyg7dqPIkDMmRNM
|
|
||||||
5R5xBTabD+Aji0wzQupYxBLuW5PLj7ECAwEAAaOBtzCBtDAdBgNVHQ4EFgQU1WWA
|
|
||||||
U42mkhi3ecgey1dsJjU61+UwgYQGA1UdIwR9MHuAFE0RaEcrj18q1dw+G6nJbsTW
|
|
||||||
R213oWCkXjBcMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
|
|
||||||
A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxHDAaBgNVBAMTE1Rlc3QgUENBICgxMDI0
|
|
||||||
IGJpdCmCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQBb39BRphHL
|
|
||||||
6aRAQyymsvBvPSCiG9+kR0R1L23aTpNbhXp2BebyFjbEQYZc2kWGiKKcHkNECA35
|
|
||||||
3d4LoqUlVey8DFyafOIJd9hxdZfg+rxlHMxnL7uCJRmx9+xB411Jtsol9/wg1uCK
|
|
||||||
sleGpgB4j8cG2SVCz7V2MNZNK+d5QCnR7A==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIICXQIBAAKBgQCju6PLddelT+nIMm07GQwmYa/eZ2JWbsmt2gotSCqM7asFp425
|
|
||||||
gxSK4jqhhT62UPpqDBEwvQ+fYkVv3RV0r9ReuZGv12NoS4fXsQgqO17lHA7Od0Kd
|
|
||||||
2yNwJjKh44MxPKDt2o8iQMyZE0zlHnEFNpsP4COLTDNC6ljEEu5bk8uPsQIDAQAB
|
|
||||||
AoGAVZmpFZsDZfr0l2S9tLLwpjRWNOlKATQkno6q2WesT0eGLQufTciY+c8ypfU6
|
|
||||||
hyio8r5iUl/VhhdjhAtKx1mRpiotftHo/eYf8rtsrnprOnWG0bWjLjtIoMbcxGn2
|
|
||||||
J3bN6LJmbJMjDs0eJ3KnTu646F3nDUw2oGAwmpzKXA1KAP0CQQDRvQhxk2D3Pehs
|
|
||||||
HvG665u2pB5ipYQngEFlZO7RHJZzJOZEWSLuuMqaF/7pTfA5jiBvWqCgJeCRRInL
|
|
||||||
21ru4dlPAkEAx9jj7BgKn5TYnMoBSSe0afjsV9oApVpN1Nacb1YDtCwy+scp3++s
|
|
||||||
nFxlv98wxIlSdpwMUn+AUWfjiWR7Tu/G/wJBAJ/KjwZIrFVxewP0x2ILYsTRYLzz
|
|
||||||
MS4PDsO7FB+I0i7DbBOifXS2oNSpd3I0CNMwrxFnUHzynpbOStVfN3ZL5w0CQQCa
|
|
||||||
pwFahxBRhkJKsxhjoFJBX9yl75JoY4Wvm5Tbo9ih6UJaRx3kqfkN14L2BKYcsZgb
|
|
||||||
KY9vmDOYy6iNfjDeWTfJAkBkfPUb8oTJ/nSP5zN6sqGxSY4krc4xLxpRmxoJ8HL2
|
|
||||||
XfhqXkTzbU13RX9JJ/NZ8vQN9Vm2NhxRGJocQkmcdVtJ
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
@ -1,43 +0,0 @@
|
|||||||
-----BEGIN DSA PRIVATE KEY-----
|
|
||||||
Proc-Type: 4,ENCRYPTED
|
|
||||||
DEK-Info: DES-EDE3-CBC,C5B6C7CC9E1FE2C0
|
|
||||||
|
|
||||||
svCXBcBRhMuU22UXOfiKZA+thmz6KYXpt1Yg5Rd+TYQcQ1MdvNy0B0tkP1SxzDq0
|
|
||||||
Xh1eMeTML9/9/0rKakgNXXXbpi5RB8t6BmwRSyej89F7nn1mtR3qzoyPRpp15SDl
|
|
||||||
Tn67C+2v+HDF3MFk88hiNCYkNbcmi7TWvChsl8N1r7wdZwtIox56yXdgxw6ZIpa/
|
|
||||||
par0oUCzN7fiavPgCWz1kfPNSaBQSdxwH7TZi5tMHAr0J3C7a7QRnZfE09R59Uqr
|
|
||||||
zslrq+ndIw1BZAxoY0SlBu+iFOVaBVlwToC4AsHkv7j7l8ITtr7f42YbBa44D9TO
|
|
||||||
uOhONmkk/v3Fso4RaOEzdKZC+hnmmzvHs6TiTWm6yzJgSFwyOUK0eGmKEeVxpcH5
|
|
||||||
rUOlHOwzen+FFtocZDZAfdFnb7QY7L/boQvyA5A+ZbRG4DUpmBQeQsSaICHM5Rxx
|
|
||||||
1QaLF413VNPXTLPbW0ilSc2H8x2iZTIVKfd33oSO6NhXPtSYQgfecEF4BvNHY5c4
|
|
||||||
HovjT4mckbK95bcBzoCHu43vuSQkmZzdYo/ydSZt6zoPavbBLueTpgSbdXiDi827
|
|
||||||
MVqOsYxGCb+kez0FoDSTgw==
|
|
||||||
-----END DSA PRIVATE KEY-----
|
|
||||||
-----BEGIN CERTIFICATE REQUEST-----
|
|
||||||
MIICUjCCAhECAQAwUjELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUx
|
|
||||||
ITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDELMAkGA1UEAxMCQ0Ew
|
|
||||||
ggG0MIIBKQYFKw4DAgwwggEeAoGBAKc/boW/QWopffCfRxkwkJoJHdpqMx7FPYaW
|
|
||||||
sxXgUy6P4FmCc5A+dTGZR3pS+4Xk2aZ7OJtoioSbh8YetX6GS1NbWc9xZRmIbs5m
|
|
||||||
rmuINvvsKNzC16W75Sw5JkvamnAYlTeVEFYj9hXtugRe3jlP/bdDH7WkZW/NgBHk
|
|
||||||
cJVbUM1JAhUA9wcx7fpsBgPVhYocrJxl51BmZW8CgYBN30wDppGK9RlvUEYlmeVo
|
|
||||||
bzDjaeHls12YuyiGSPzemQQ/X4gMnHMkDSBduSqaPxiWJ+Rih8F7dGJT/GEnqHqR
|
|
||||||
CZ228U2cVA9YBu5JdAfOVX4jzhb2ytxaYQF+yXG1TfbcNCmHaPZeIJOz2/XkCWxB
|
|
||||||
F5WS6wG1c6Vqftgy7Q4CuAOBhAACgYAapll6iqz9XrZFlk2GCVcB+KihxWnH7IuH
|
|
||||||
vSLw9YUrJahcBHmbpvt494lF4gC5w3WPM+vXJofbusk4GoQEEsQNMDaah4m49uUq
|
|
||||||
AylOVFJJJXuirVJ+o+0TtOFDITEAl+YZZariXOD7tdOSOl9RLMPC6+daHKS9e68u
|
|
||||||
3enxhqnDGaAAMAkGBSsOAwIbBQADMAAwLQIVAJGVuFsG/0DBuSZ0jF7ypdU0/G0v
|
|
||||||
AhQfeF5BoMMDbX/kidUVpQ6gadPlZA==
|
|
||||||
-----END CERTIFICATE REQUEST-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIBrjCCAWwCAQswCQYFKw4DAhsFADBTMQswCQYDVQQGEwJBVTETMBEGA1UECBMK
|
|
||||||
U29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQww
|
|
||||||
CgYDVQQDEwNQQ0EwHhcNOTcwNjE1MDIxNDI5WhcNOTcwNzE1MDIxNDI5WjBSMQsw
|
|
||||||
CQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJu
|
|
||||||
ZXQgV2lkZ2l0cyBQdHkgTHRkMQswCQYDVQQDEwJDQTCBkjAJBgUrDgMCDAUAA4GE
|
|
||||||
AAKBgBqmWXqKrP1etkWWTYYJVwH4qKHFacfsi4e9IvD1hSslqFwEeZum+3j3iUXi
|
|
||||||
ALnDdY8z69cmh9u6yTgahAQSxA0wNpqHibj25SoDKU5UUkkle6KtUn6j7RO04UMh
|
|
||||||
MQCX5hllquJc4Pu105I6X1Esw8Lr51ocpL17ry7d6fGGqcMZMAkGBSsOAwIbBQAD
|
|
||||||
MQAwLgIVAJ4wtQsANPxHo7Q4IQZYsL12SKdbAhUAjJ9n38zxT+iai2164xS+LIfa
|
|
||||||
C1Q=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
|||||||
-----BEGIN DSA PRIVATE KEY-----
|
|
||||||
Proc-Type: 4,ENCRYPTED
|
|
||||||
DEK-Info: DES-EDE3-CBC,F80EEEBEEA7386C4
|
|
||||||
|
|
||||||
GZ9zgFcHOlnhPoiSbVi/yXc9mGoj44A6IveD4UlpSEUt6Xbse3Fr0KHIUyQ3oGnS
|
|
||||||
mClKoAp/eOTb5Frhto85SzdsxYtac+X1v5XwdzAMy2KowHVk1N8A5jmE2OlkNPNt
|
|
||||||
of132MNlo2cyIRYaa35PPYBGNCmUm7YcYS8O90YtkrQZZTf4+2C4kllhMcdkQwkr
|
|
||||||
FWSWC8YOQ7w0LHb4cX1FejHHom9Nd/0PN3vn3UyySvfOqoR7nbXkrpHXmPIr0hxX
|
|
||||||
RcF0aXcV/CzZ1/nfXWQf4o3+oD0T22SDoVcZY60IzI0oIc3pNCbDV3uKNmgekrFd
|
|
||||||
qOUJ+QW8oWp7oefRx62iBfIeC8DZunohMXaWAQCU0sLQOR4yEdeUCnzCSywe0bG1
|
|
||||||
diD0KYaEe+Yub1BQH4aLsBgDjardgpJRTQLq0DUvw0/QGO1irKTJzegEDNVBKrVn
|
|
||||||
V4AHOKT1CUKqvGNRP1UnccUDTF6miOAtaj/qpzra7sSk7dkGBvIEeFoAg84kfh9h
|
|
||||||
hVvF1YyzC9bwZepruoqoUwke/WdNIR5ymOVZ/4Liw0JdIOcq+atbdRX08niqIRkf
|
|
||||||
dsZrUj4leo3zdefYUQ7w4N2Ns37yDFq7
|
|
||||||
-----END DSA PRIVATE KEY-----
|
|
||||||
-----BEGIN CERTIFICATE REQUEST-----
|
|
||||||
MIICVTCCAhMCAQAwUzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUx
|
|
||||||
ITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEMMAoGA1UEAxMDUENB
|
|
||||||
MIIBtTCCASkGBSsOAwIMMIIBHgKBgQCnP26Fv0FqKX3wn0cZMJCaCR3aajMexT2G
|
|
||||||
lrMV4FMuj+BZgnOQPnUxmUd6UvuF5NmmezibaIqEm4fGHrV+hktTW1nPcWUZiG7O
|
|
||||||
Zq5riDb77Cjcwtelu+UsOSZL2ppwGJU3lRBWI/YV7boEXt45T/23Qx+1pGVvzYAR
|
|
||||||
5HCVW1DNSQIVAPcHMe36bAYD1YWKHKycZedQZmVvAoGATd9MA6aRivUZb1BGJZnl
|
|
||||||
aG8w42nh5bNdmLsohkj83pkEP1+IDJxzJA0gXbkqmj8YlifkYofBe3RiU/xhJ6h6
|
|
||||||
kQmdtvFNnFQPWAbuSXQHzlV+I84W9srcWmEBfslxtU323DQph2j2XiCTs9v15Als
|
|
||||||
QReVkusBtXOlan7YMu0OArgDgYUAAoGBAKbtuR5AdW+ICjCFe2ixjUiJJzM2IKwe
|
|
||||||
6NZEMXg39+HQ1UTPTmfLZLps+rZfolHDXuRKMXbGFdSF0nXYzotPCzi7GauwEJTZ
|
|
||||||
yr27ZZjA1C6apGSQ9GzuwNvZ4rCXystVEagAS8OQ4H3D4dWS17Zg31ICb5o4E5r0
|
|
||||||
z09o/Uz46u0VoAAwCQYFKw4DAhsFAAMxADAuAhUArRubTxsbIXy3AhtjQ943AbNB
|
|
||||||
nSICFQCu+g1iW3jwF+gOcbroD4S/ZcvB3w==
|
|
||||||
-----END CERTIFICATE REQUEST-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIC0zCCApECAQAwCQYFKw4DAhsFADBTMQswCQYDVQQGEwJBVTETMBEGA1UECBMK
|
|
||||||
U29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQww
|
|
||||||
CgYDVQQDEwNQQ0EwHhcNOTcwNjE0MjI1NDQ1WhcNOTcwNzE0MjI1NDQ1WjBTMQsw
|
|
||||||
CQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJu
|
|
||||||
ZXQgV2lkZ2l0cyBQdHkgTHRkMQwwCgYDVQQDEwNQQ0EwggG1MIIBKQYFKw4DAgww
|
|
||||||
ggEeAoGBAKc/boW/QWopffCfRxkwkJoJHdpqMx7FPYaWsxXgUy6P4FmCc5A+dTGZ
|
|
||||||
R3pS+4Xk2aZ7OJtoioSbh8YetX6GS1NbWc9xZRmIbs5mrmuINvvsKNzC16W75Sw5
|
|
||||||
JkvamnAYlTeVEFYj9hXtugRe3jlP/bdDH7WkZW/NgBHkcJVbUM1JAhUA9wcx7fps
|
|
||||||
BgPVhYocrJxl51BmZW8CgYBN30wDppGK9RlvUEYlmeVobzDjaeHls12YuyiGSPze
|
|
||||||
mQQ/X4gMnHMkDSBduSqaPxiWJ+Rih8F7dGJT/GEnqHqRCZ228U2cVA9YBu5JdAfO
|
|
||||||
VX4jzhb2ytxaYQF+yXG1TfbcNCmHaPZeIJOz2/XkCWxBF5WS6wG1c6Vqftgy7Q4C
|
|
||||||
uAOBhQACgYEApu25HkB1b4gKMIV7aLGNSIknMzYgrB7o1kQxeDf34dDVRM9OZ8tk
|
|
||||||
umz6tl+iUcNe5EoxdsYV1IXSddjOi08LOLsZq7AQlNnKvbtlmMDULpqkZJD0bO7A
|
|
||||||
29nisJfKy1URqABLw5DgfcPh1ZLXtmDfUgJvmjgTmvTPT2j9TPjq7RUwCQYFKw4D
|
|
||||||
AhsFAAMxADAuAhUAvtv6AkMolix1Jvy3UnVEIUqdCUICFQC+jq8P49mwrY9oJ24n
|
|
||||||
5rKUjNBhSg==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICTTCCAbagAwIBAgIBADANBgkqhkiG9w0BAQQFADBMMQswCQYDVQQGEwJHQjEM
|
|
||||||
MAoGA1UEChMDVUNMMRgwFgYDVQQLEw9JQ0UtVEVMIFByb2plY3QxFTATBgNVBAMT
|
|
||||||
DFRydXN0RmFjdG9yeTAeFw05NzA0MjIxNDM5MTRaFw05ODA0MjIxNDM5MTRaMEwx
|
|
||||||
CzAJBgNVBAYTAkdCMQwwCgYDVQQKEwNVQ0wxGDAWBgNVBAsTD0lDRS1URUwgUHJv
|
|
||||||
amVjdDEVMBMGA1UEAxMMVHJ1c3RGYWN0b3J5MIGcMAoGBFUIAQECAgQAA4GNADCB
|
|
||||||
iQKBgQCEieR8NcXkUW1f0G6aC6u0i8q/98JqS6RxK5YmHIGKCkuTWAUjzLfUa4dt
|
|
||||||
U9igGCjTuxaDqlzEim+t/02pmiBZT9HaX++35MjQPUWmsChcYU5WyzGErXi+rQaw
|
|
||||||
zlwS73zM8qiPj/97lXYycWhgL0VaiDSPxRXEUdWoaGruom4mNQIDAQABo0IwQDAd
|
|
||||||
BgNVHQ4EFgQUHal1LZr7oVg5z6lYzrhTgZRCmcUwDgYDVR0PAQH/BAQDAgH2MA8G
|
|
||||||
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAfaggfl6FZoioecjv0dq8
|
|
||||||
/DXo/u11iMZvXn08gjX/zl2b4wtPbShOSY5FhkSm8GeySasz+/Nwb/uzfnIhokWi
|
|
||||||
lfPZHtlCWtXbIy/TN51eJyq04ceDCQDWvLC2enVg9KB+GJ34b5c5VaPRzq8MBxsA
|
|
||||||
S7ELuYGtmYgYm9NZOIr7yU0=
|
|
||||||
-----END CERTIFICATE-----
|
|
@ -1,16 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICajCCAdMCBDGA0QUwDQYJKoZIhvcNAQEEBQAwfTELMAkGA1UEBhMCQ2ExDzAN
|
|
||||||
BgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmlsaXR5IEFjY2VwdGVkMR8w
|
|
||||||
HQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRwwGgYDVQQDExNFbnRydXN0
|
|
||||||
IERlbW8gV2ViIENBMB4XDTk2MDQyNjEzMzUwMVoXDTA2MDQyNjEzMzUwMVowfTEL
|
|
||||||
MAkGA1UEBhMCQ2ExDzANBgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmls
|
|
||||||
aXR5IEFjY2VwdGVkMR8wHQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRww
|
|
||||||
GgYDVQQDExNFbnRydXN0IERlbW8gV2ViIENBMIGdMA0GCSqGSIb3DQEBAQUAA4GL
|
|
||||||
ADCBhwKBgQCaroS7O1DA0hm4IefNYU1cx/nqOmzEnk291d1XqznDeF4wEgakbkCc
|
|
||||||
zTKxK791yNpXG5RmngqH7cygDRTHZJ6mfCRn0wGC+AI00F2vYTGqPGRQL1N3lZT0
|
|
||||||
YDKFC0SQeMMjFIZ1aeQigroFQnHo0VB3zWIMpNkka8PY9lxHZAmWwQIBAzANBgkq
|
|
||||||
hkiG9w0BAQQFAAOBgQBAx0UMVA1s54lMQyXjMX5kj99FJN5itb8bK1Rk+cegPQPF
|
|
||||||
cWO9SEWyEjjBjIkjjzAwBkaEszFsNGxemxtXvwjIm1xEUMTVlPEWTs2qnDvAUA9W
|
|
||||||
YqhWbhH0toGT36236QAsqCZ76rbTRVSSX2BHyJwJMG2tCRv7kRJ//NIgxj3H4w==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIC5jCCAk+gAwIBAgIBADANBgkqhkiG9w0BAQQFADBcMQswCQYDVQQGEwJBVTET
|
|
||||||
MBEGA1UECBMKUXVlZW5zbGFuZDEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQx
|
|
||||||
HDAaBgNVBAMTE1Rlc3QgUENBICgxMDI0IGJpdCkwHhcNOTkxMjAyMjEzNTQ4WhcN
|
|
||||||
MDUwNzExMjEzNTQ4WjBcMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFu
|
|
||||||
ZDEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxHDAaBgNVBAMTE1Rlc3QgUENB
|
|
||||||
ICgxMDI0IGJpdCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJ2haT/f5Zwy
|
|
||||||
V+MiuSDjSR62adBoSiBB7Usty44lXqsp9RICw+DCCxpsn/CfxPEDXLLd4olsWXc6
|
|
||||||
JRcxGynbYmnzk+Z6aIPPJQhK3CTvaqGnWKZsA1m+WaUIUqJCuNTK4N+7hMAGaf6S
|
|
||||||
S3e9HVgEQ4a34gXJ7VQFVIBNV1EnZRWHAgMBAAGjgbcwgbQwHQYDVR0OBBYEFE0R
|
|
||||||
aEcrj18q1dw+G6nJbsTWR213MIGEBgNVHSMEfTB7gBRNEWhHK49fKtXcPhupyW7E
|
|
||||||
1kdtd6FgpF4wXDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
|
|
||||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYDVQQDExNUZXN0IFBDQSAoMTAy
|
|
||||||
NCBiaXQpggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAUa8B3pho
|
|
||||||
+Mvxeq9HsEzJxHIFQla05S5J/e/V+DQTYoKiRFchKPrDAdrzYSEvP3h4QJEtsNqQ
|
|
||||||
JfOxg5M42uLFq7aPGWkF6ZZqZsYS+zA9IVT14g7gNA6Ne+5QtJqQtH9HA24st0T0
|
|
||||||
Tga/lZ9M2ovImovaxSL/kRHbpCWcqWVxpOw=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIICXAIBAAKBgQCdoWk/3+WcMlfjIrkg40ketmnQaEogQe1LLcuOJV6rKfUSAsPg
|
|
||||||
wgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp22Jp85PmemiDzyUIStwk72qhp1imbANZ
|
|
||||||
vlmlCFKiQrjUyuDfu4TABmn+kkt3vR1YBEOGt+IFye1UBVSATVdRJ2UVhwIDAQAB
|
|
||||||
AoGAba4fTtuap5l7/8ZsbE7Z1O32KJY4ZcOZukLOLUUhXxXduT+FTgGWujc0/rgc
|
|
||||||
z9qYCLlNZHOouMYTgtSfYvuMuLZ11VIt0GYH+nRioLShE59Yy+zCRyC+gPigS1kz
|
|
||||||
xvo14AsOIPYV14Tk/SsHyq6E0eTk7VzaIE197giiINUERPECQQDSKmtPTh/lRKw7
|
|
||||||
HSZSM0I1mFWn/1zqrAbontRQY5w98QWIOe5qmzYyFbPXYT3d9BzlsMyhgiRNoBbD
|
|
||||||
yvohSHXJAkEAwAHx6ezAZeWWzD5yXD36nyjpkVCw7Tk7TSmOceLJMWt1QcrCfqlS
|
|
||||||
xA5jjpQ6Z8suU5DdtWAryM2sAir1WisYzwJAd6Zcx56jvAQ3xcPXsE6scBTVFzrj
|
|
||||||
7FqZ6E+cclPzfLQ+QQsyOBE7bpI6e/FJppY26XGZXo3YGzV8IGXrt40oOQJALETG
|
|
||||||
h86EFXo3qGOFbmsDy4pdP5nBERCu8X1xUCSfintiD4c2DInxgS5oGclnJeMcjTvL
|
|
||||||
QjQoJCX3UJCi/OUO1QJBAKgcDHWjMvt+l1pjJBsSEZ0HX9AAIIVx0RQmbFGS+F2Q
|
|
||||||
hhu5l77WnnZOQ9vvhV5u7NPCUF9nhU3jh60qWWO8mkc=
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
@ -1,19 +0,0 @@
|
|||||||
subject=/C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
|
|
||||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
|
|
||||||
notBefore=941104185834Z
|
|
||||||
notAfter =991103185834Z
|
|
||||||
-----BEGIN X509 CERTIFICATE-----
|
|
||||||
|
|
||||||
MIICIzCCAZACBQJBAAAWMA0GCSqGSIb3DQEBAgUAMFwxCzAJBgNVBAYTAlVTMSAw
|
|
||||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVy
|
|
||||||
Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDQxODU4MzRaFw05
|
|
||||||
OTExMDMxODU4MzRaMFwxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBT
|
|
||||||
ZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9u
|
|
||||||
IEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCk+4Fie84QJ93o
|
|
||||||
975sbsZwmdu41QUDaSiCnHJ/lj+O7Kwpkj+KFPhCdr69XQO5kNTQvAayUTNfxMK/
|
|
||||||
touPmbZiImDd298ggrTKoi8tUO2UMt7gVY3UaOLgTNLNBRYulWZcYVI4HlGogqHE
|
|
||||||
7yXpCuaLK44xZtn42f29O2nZ6wIDAQABMA0GCSqGSIb3DQEBAgUAA34AdrW2EP4j
|
|
||||||
9/dZYkuwX5zBaLxJu7NJbyFHXSudVMQAKD+YufKKg5tgf+tQx6sFEC097TgCwaVI
|
|
||||||
0v5loMC86qYjFmZsGySp8+x5NRhPJsjjr1BKx6cxa9B8GJ1Qv6km+iYrRpwUqbtb
|
|
||||||
MJhCKLVLU7tDCZJAuqiqWqTGtotXTcU=
|
|
||||||
-----END X509 CERTIFICATE-----
|
|
@ -1,16 +0,0 @@
|
|||||||
Tims test GCI CA
|
|
||||||
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIB8DCCAZoCAQAwDQYJKoZIhvcNAQEEBQAwgYIxCzAJBgNVBAYTAkFVMRMwEQYD
|
|
||||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
|
|
||||||
cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2RldmVsb3BtZW50MRkwFwYDVQQDExBD
|
|
||||||
cnlwdFNvZnQgRGV2IENBMB4XDTk3MDMyMjEzMzQwNFoXDTk4MDMyMjEzMzQwNFow
|
|
||||||
gYIxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhC
|
|
||||||
cmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2Rl
|
|
||||||
dmVsb3BtZW50MRkwFwYDVQQDExBDcnlwdFNvZnQgRGV2IENBMFwwDQYJKoZIhvcN
|
|
||||||
AQEBBQADSwAwSAJBAOAOAqogG5QwAmLhzyO4CoRnx/wVy4NZP4dxJy83O1EnL0rw
|
|
||||||
OdsamJKvPOLHgSXo3gDu9uVyvCf/QJmZAmC5ml8CAwEAATANBgkqhkiG9w0BAQQF
|
|
||||||
AANBADRRS/GVdd7rAqRW6SdmgLJduOU2yq3avBu99kRqbp9A/dLu6r6jU+eP4oOA
|
|
||||||
TfdbFZtAAD2Hx9jUtY3tfdrJOb8=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICVjCCAgACAQAwDQYJKoZIhvcNAQEEBQAwgbUxCzAJBgNVBAYTAkFVMRMwEQYD
|
|
||||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
|
|
||||||
cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsTI1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9O
|
|
||||||
IEFVVEhPUklUSUVTMTQwMgYDVQQDEytaRVJPIFZBTFVFIENBIC0gREVNT05TVFJB
|
|
||||||
VElPTiBQVVJQT1NFUyBPTkxZMB4XDTk3MDQwMzEzMjI1NFoXDTk4MDQwMzEzMjI1
|
|
||||||
NFowgbUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQH
|
|
||||||
EwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsT
|
|
||||||
I1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9OIEFVVEhPUklUSUVTMTQwMgYDVQQDEyta
|
|
||||||
RVJPIFZBTFVFIENBIC0gREVNT05TVFJBVElPTiBQVVJQT1NFUyBPTkxZMFwwDQYJ
|
|
||||||
KoZIhvcNAQEBBQADSwAwSAJBAOZ7T7yqP/tyspcko3yPY1y0Cm2EmwNvzW4QgVXR
|
|
||||||
Fjs3HmJ4xtSpXdo6mwcGezL3Abt/aQXaxv9PU8xt+Jr0OFUCAwEAATANBgkqhkiG
|
|
||||||
9w0BAQQFAANBAOQpYmGgyCqCy1OljgJhCqQOu627oVlHzK1L+t9vBaMfn40AVUR4
|
|
||||||
WzQVWO31KTgi5vTK1U+3h46fgUWqQ0h+6rU=
|
|
||||||
-----END CERTIFICATE-----
|
|
@ -1,18 +0,0 @@
|
|||||||
subject=/C=US/O=VeriSign, Inc./OU=Class 2 Public Primary Certification Authority
|
|
||||||
notBefore=Jan 29 00:00:00 1996 GMT
|
|
||||||
notAfter=Jan 7 23:59:59 2004 GMT
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICPTCCAaYCEQC6WslMBTuS1qe2307QU5INMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
|
|
||||||
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
|
|
||||||
c3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
|
|
||||||
NjAxMjkwMDAwMDBaFw0wNDAxMDcyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
|
|
||||||
VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMiBQdWJsaWMgUHJp
|
|
||||||
bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
|
|
||||||
jQAwgYkCgYEAtlqLow1qI4OAa885h/QhEzMGTCWi7VUSl8WngLn6g8EgoPovFQ18
|
|
||||||
oWBrfnks+gYPOq72G2+x0v8vKFJfg31LxHq3+GYfgFT8t8KOWUoUV0bRmpO+QZED
|
|
||||||
uxWAk1zr58wIbD8+s0r8/0tsI9VQgiZEGY4jw3HqGSRHBJ51v8imAB8CAwEAATAN
|
|
||||||
BgkqhkiG9w0BAQIFAAOBgQC2AB+TV6QHp0DOZUA/VV7t7/pUSaUw1iF8YYfug5ML
|
|
||||||
v7Qz8pisnwa/TqjOFIFMywROWMPPX+5815pvy0GKt3+BuP+EYcYnQ2UdDOyxAArd
|
|
||||||
G6S7x3ggKLKi3TaVLuFUT79guXdoEZkj6OpS6KoATmdOu5C1RZtG644W78QzWzM9
|
|
||||||
1Q==
|
|
||||||
-----END CERTIFICATE-----
|
|
@ -1,18 +0,0 @@
|
|||||||
subject=/O=VeriSign, Inc/OU=www.verisign.com/repository/TestCPS Incorp. By Ref. Liab. LTD./OU=For VeriSign authorized testing only. No assurances (C)VS1997
|
|
||||||
notBefore=Mar 4 00:00:00 1997 GMT
|
|
||||||
notAfter=Mar 4 23:59:59 2025 GMT
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICTTCCAfcCEEdoCqpuXxnoK27q7d58Qc4wDQYJKoZIhvcNAQEEBQAwgakxFjAU
|
|
||||||
BgNVBAoTDVZlcmlTaWduLCBJbmMxRzBFBgNVBAsTPnd3dy52ZXJpc2lnbi5jb20v
|
|
||||||
cmVwb3NpdG9yeS9UZXN0Q1BTIEluY29ycC4gQnkgUmVmLiBMaWFiLiBMVEQuMUYw
|
|
||||||
RAYDVQQLEz1Gb3IgVmVyaVNpZ24gYXV0aG9yaXplZCB0ZXN0aW5nIG9ubHkuIE5v
|
|
||||||
IGFzc3VyYW5jZXMgKEMpVlMxOTk3MB4XDTk3MDMwNDAwMDAwMFoXDTI1MDMwNDIz
|
|
||||||
NTk1OVowgakxFjAUBgNVBAoTDVZlcmlTaWduLCBJbmMxRzBFBgNVBAsTPnd3dy52
|
|
||||||
ZXJpc2lnbi5jb20vcmVwb3NpdG9yeS9UZXN0Q1BTIEluY29ycC4gQnkgUmVmLiBM
|
|
||||||
aWFiLiBMVEQuMUYwRAYDVQQLEz1Gb3IgVmVyaVNpZ24gYXV0aG9yaXplZCB0ZXN0
|
|
||||||
aW5nIG9ubHkuIE5vIGFzc3VyYW5jZXMgKEMpVlMxOTk3MFwwDQYJKoZIhvcNAQEB
|
|
||||||
BQADSwAwSAJBAMak6xImJx44jMKcbkACy5/CyMA2fqXK4PlzTtCxRq5tFkDzne7s
|
|
||||||
cI8oFK/J+gFZNE3bjidDxf07O3JOYG9RGx8CAwEAATANBgkqhkiG9w0BAQQFAANB
|
|
||||||
ADT523tENOKrEheZFpsJx1UUjPrG7TwYc/C4NBHrZI4gZJcKVFIfNulftVS6UMYW
|
|
||||||
ToLEMaUojc3DuNXHG21PDG8=
|
|
||||||
-----END CERTIFICATE-----
|
|
File diff suppressed because it is too large
Load Diff
@ -1,533 +0,0 @@
|
|||||||
|
|
||||||
# DEC Alpha assember
|
|
||||||
# The bn_div64 is actually gcc output but the other parts are hand done.
|
|
||||||
# Thanks to tzeruch@ceddec.com for sending me the gcc output for
|
|
||||||
# bn_div64.
|
|
||||||
# I've gone back and re-done most of routines.
|
|
||||||
# The key thing to remeber for the 164 CPU is that while a
|
|
||||||
# multiply operation takes 8 cycles, another one can only be issued
|
|
||||||
# after 4 cycles have elapsed. I've done modification to help
|
|
||||||
# improve this. Also, normally, a ld instruction will not be available
|
|
||||||
# for about 3 cycles.
|
|
||||||
.file 1 "bn_asm.c"
|
|
||||||
.set noat
|
|
||||||
gcc2_compiled.:
|
|
||||||
__gnu_compiled_c:
|
|
||||||
.text
|
|
||||||
.align 3
|
|
||||||
.globl bn_mul_add_words
|
|
||||||
.ent bn_mul_add_words
|
|
||||||
bn_mul_add_words:
|
|
||||||
bn_mul_add_words..ng:
|
|
||||||
.frame $30,0,$26,0
|
|
||||||
.prologue 0
|
|
||||||
.align 5
|
|
||||||
subq $18,4,$18
|
|
||||||
bis $31,$31,$0
|
|
||||||
blt $18,$43 # if we are -1, -2, -3 or -4 goto tail code
|
|
||||||
ldq $20,0($17) # 1 1
|
|
||||||
ldq $1,0($16) # 1 1
|
|
||||||
.align 3
|
|
||||||
$42:
|
|
||||||
mulq $20,$19,$5 # 1 2 1 ######
|
|
||||||
ldq $21,8($17) # 2 1
|
|
||||||
ldq $2,8($16) # 2 1
|
|
||||||
umulh $20,$19,$20 # 1 2 ######
|
|
||||||
ldq $27,16($17) # 3 1
|
|
||||||
ldq $3,16($16) # 3 1
|
|
||||||
mulq $21,$19,$6 # 2 2 1 ######
|
|
||||||
ldq $28,24($17) # 4 1
|
|
||||||
addq $1,$5,$1 # 1 2 2
|
|
||||||
ldq $4,24($16) # 4 1
|
|
||||||
umulh $21,$19,$21 # 2 2 ######
|
|
||||||
cmpult $1,$5,$22 # 1 2 3 1
|
|
||||||
addq $20,$22,$20 # 1 3 1
|
|
||||||
addq $1,$0,$1 # 1 2 3 1
|
|
||||||
mulq $27,$19,$7 # 3 2 1 ######
|
|
||||||
cmpult $1,$0,$0 # 1 2 3 2
|
|
||||||
addq $2,$6,$2 # 2 2 2
|
|
||||||
addq $20,$0,$0 # 1 3 2
|
|
||||||
cmpult $2,$6,$23 # 2 2 3 1
|
|
||||||
addq $21,$23,$21 # 2 3 1
|
|
||||||
umulh $27,$19,$27 # 3 2 ######
|
|
||||||
addq $2,$0,$2 # 2 2 3 1
|
|
||||||
cmpult $2,$0,$0 # 2 2 3 2
|
|
||||||
subq $18,4,$18
|
|
||||||
mulq $28,$19,$8 # 4 2 1 ######
|
|
||||||
addq $21,$0,$0 # 2 3 2
|
|
||||||
addq $3,$7,$3 # 3 2 2
|
|
||||||
addq $16,32,$16
|
|
||||||
cmpult $3,$7,$24 # 3 2 3 1
|
|
||||||
stq $1,-32($16) # 1 2 4
|
|
||||||
umulh $28,$19,$28 # 4 2 ######
|
|
||||||
addq $27,$24,$27 # 3 3 1
|
|
||||||
addq $3,$0,$3 # 3 2 3 1
|
|
||||||
stq $2,-24($16) # 2 2 4
|
|
||||||
cmpult $3,$0,$0 # 3 2 3 2
|
|
||||||
stq $3,-16($16) # 3 2 4
|
|
||||||
addq $4,$8,$4 # 4 2 2
|
|
||||||
addq $27,$0,$0 # 3 3 2
|
|
||||||
cmpult $4,$8,$25 # 4 2 3 1
|
|
||||||
addq $17,32,$17
|
|
||||||
addq $28,$25,$28 # 4 3 1
|
|
||||||
addq $4,$0,$4 # 4 2 3 1
|
|
||||||
cmpult $4,$0,$0 # 4 2 3 2
|
|
||||||
stq $4,-8($16) # 4 2 4
|
|
||||||
addq $28,$0,$0 # 4 3 2
|
|
||||||
blt $18,$43
|
|
||||||
|
|
||||||
ldq $20,0($17) # 1 1
|
|
||||||
ldq $1,0($16) # 1 1
|
|
||||||
|
|
||||||
br $42
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
$45:
|
|
||||||
ldq $20,0($17) # 4 1
|
|
||||||
ldq $1,0($16) # 4 1
|
|
||||||
mulq $20,$19,$5 # 4 2 1
|
|
||||||
subq $18,1,$18
|
|
||||||
addq $16,8,$16
|
|
||||||
addq $17,8,$17
|
|
||||||
umulh $20,$19,$20 # 4 2
|
|
||||||
addq $1,$5,$1 # 4 2 2
|
|
||||||
cmpult $1,$5,$22 # 4 2 3 1
|
|
||||||
addq $20,$22,$20 # 4 3 1
|
|
||||||
addq $1,$0,$1 # 4 2 3 1
|
|
||||||
cmpult $1,$0,$0 # 4 2 3 2
|
|
||||||
addq $20,$0,$0 # 4 3 2
|
|
||||||
stq $1,-8($16) # 4 2 4
|
|
||||||
bgt $18,$45
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
$43:
|
|
||||||
addq $18,4,$18
|
|
||||||
bgt $18,$45 # goto tail code
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
|
|
||||||
.end bn_mul_add_words
|
|
||||||
.align 3
|
|
||||||
.globl bn_mul_words
|
|
||||||
.ent bn_mul_words
|
|
||||||
bn_mul_words:
|
|
||||||
bn_mul_words..ng:
|
|
||||||
.frame $30,0,$26,0
|
|
||||||
.prologue 0
|
|
||||||
.align 5
|
|
||||||
subq $18,4,$18
|
|
||||||
bis $31,$31,$0
|
|
||||||
blt $18,$143 # if we are -1, -2, -3 or -4 goto tail code
|
|
||||||
ldq $20,0($17) # 1 1
|
|
||||||
.align 3
|
|
||||||
$142:
|
|
||||||
|
|
||||||
mulq $20,$19,$5 # 1 2 1 #####
|
|
||||||
ldq $21,8($17) # 2 1
|
|
||||||
ldq $27,16($17) # 3 1
|
|
||||||
umulh $20,$19,$20 # 1 2 #####
|
|
||||||
ldq $28,24($17) # 4 1
|
|
||||||
mulq $21,$19,$6 # 2 2 1 #####
|
|
||||||
addq $5,$0,$5 # 1 2 3 1
|
|
||||||
subq $18,4,$18
|
|
||||||
cmpult $5,$0,$0 # 1 2 3 2
|
|
||||||
umulh $21,$19,$21 # 2 2 #####
|
|
||||||
addq $20,$0,$0 # 1 3 2
|
|
||||||
addq $17,32,$17
|
|
||||||
addq $6,$0,$6 # 2 2 3 1
|
|
||||||
mulq $27,$19,$7 # 3 2 1 #####
|
|
||||||
cmpult $6,$0,$0 # 2 2 3 2
|
|
||||||
addq $21,$0,$0 # 2 3 2
|
|
||||||
addq $16,32,$16
|
|
||||||
umulh $27,$19,$27 # 3 2 #####
|
|
||||||
stq $5,-32($16) # 1 2 4
|
|
||||||
mulq $28,$19,$8 # 4 2 1 #####
|
|
||||||
addq $7,$0,$7 # 3 2 3 1
|
|
||||||
stq $6,-24($16) # 2 2 4
|
|
||||||
cmpult $7,$0,$0 # 3 2 3 2
|
|
||||||
umulh $28,$19,$28 # 4 2 #####
|
|
||||||
addq $27,$0,$0 # 3 3 2
|
|
||||||
stq $7,-16($16) # 3 2 4
|
|
||||||
addq $8,$0,$8 # 4 2 3 1
|
|
||||||
cmpult $8,$0,$0 # 4 2 3 2
|
|
||||||
|
|
||||||
addq $28,$0,$0 # 4 3 2
|
|
||||||
|
|
||||||
stq $8,-8($16) # 4 2 4
|
|
||||||
|
|
||||||
blt $18,$143
|
|
||||||
|
|
||||||
ldq $20,0($17) # 1 1
|
|
||||||
|
|
||||||
br $142
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
$145:
|
|
||||||
ldq $20,0($17) # 4 1
|
|
||||||
mulq $20,$19,$5 # 4 2 1
|
|
||||||
subq $18,1,$18
|
|
||||||
umulh $20,$19,$20 # 4 2
|
|
||||||
addq $5,$0,$5 # 4 2 3 1
|
|
||||||
addq $16,8,$16
|
|
||||||
cmpult $5,$0,$0 # 4 2 3 2
|
|
||||||
addq $17,8,$17
|
|
||||||
addq $20,$0,$0 # 4 3 2
|
|
||||||
stq $5,-8($16) # 4 2 4
|
|
||||||
|
|
||||||
bgt $18,$145
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
$143:
|
|
||||||
addq $18,4,$18
|
|
||||||
bgt $18,$145 # goto tail code
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
|
|
||||||
.end bn_mul_words
|
|
||||||
.align 3
|
|
||||||
.globl bn_sqr_words
|
|
||||||
.ent bn_sqr_words
|
|
||||||
bn_sqr_words:
|
|
||||||
bn_sqr_words..ng:
|
|
||||||
.frame $30,0,$26,0
|
|
||||||
.prologue 0
|
|
||||||
|
|
||||||
subq $18,4,$18
|
|
||||||
blt $18,$543 # if we are -1, -2, -3 or -4 goto tail code
|
|
||||||
ldq $20,0($17) # 1 1
|
|
||||||
.align 3
|
|
||||||
$542:
|
|
||||||
mulq $20,$20,$5 ######
|
|
||||||
ldq $21,8($17) # 1 1
|
|
||||||
subq $18,4
|
|
||||||
umulh $20,$20,$1 ######
|
|
||||||
ldq $27,16($17) # 1 1
|
|
||||||
mulq $21,$21,$6 ######
|
|
||||||
ldq $28,24($17) # 1 1
|
|
||||||
stq $5,0($16) # r[0]
|
|
||||||
umulh $21,$21,$2 ######
|
|
||||||
stq $1,8($16) # r[1]
|
|
||||||
mulq $27,$27,$7 ######
|
|
||||||
stq $6,16($16) # r[0]
|
|
||||||
umulh $27,$27,$3 ######
|
|
||||||
stq $2,24($16) # r[1]
|
|
||||||
mulq $28,$28,$8 ######
|
|
||||||
stq $7,32($16) # r[0]
|
|
||||||
umulh $28,$28,$4 ######
|
|
||||||
stq $3,40($16) # r[1]
|
|
||||||
|
|
||||||
addq $16,64,$16
|
|
||||||
addq $17,32,$17
|
|
||||||
stq $8,-16($16) # r[0]
|
|
||||||
stq $4,-8($16) # r[1]
|
|
||||||
|
|
||||||
blt $18,$543
|
|
||||||
ldq $20,0($17) # 1 1
|
|
||||||
br $542
|
|
||||||
|
|
||||||
$442:
|
|
||||||
ldq $20,0($17) # a[0]
|
|
||||||
mulq $20,$20,$5 # a[0]*w low part r2
|
|
||||||
addq $16,16,$16
|
|
||||||
addq $17,8,$17
|
|
||||||
subq $18,1,$18
|
|
||||||
umulh $20,$20,$1 # a[0]*w high part r3
|
|
||||||
stq $5,-16($16) # r[0]
|
|
||||||
stq $1,-8($16) # r[1]
|
|
||||||
|
|
||||||
bgt $18,$442
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
$543:
|
|
||||||
addq $18,4,$18
|
|
||||||
bgt $18,$442 # goto tail code
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
.end bn_sqr_words
|
|
||||||
|
|
||||||
.align 3
|
|
||||||
.globl bn_add_words
|
|
||||||
.ent bn_add_words
|
|
||||||
bn_add_words:
|
|
||||||
bn_add_words..ng:
|
|
||||||
.frame $30,0,$26,0
|
|
||||||
.prologue 0
|
|
||||||
|
|
||||||
subq $19,4,$19
|
|
||||||
bis $31,$31,$0 # carry = 0
|
|
||||||
blt $19,$900
|
|
||||||
ldq $5,0($17) # a[0]
|
|
||||||
ldq $1,0($18) # b[1]
|
|
||||||
.align 3
|
|
||||||
$901:
|
|
||||||
addq $1,$5,$1 # r=a+b;
|
|
||||||
ldq $6,8($17) # a[1]
|
|
||||||
cmpult $1,$5,$22 # did we overflow?
|
|
||||||
ldq $2,8($18) # b[1]
|
|
||||||
addq $1,$0,$1 # c+= overflow
|
|
||||||
ldq $7,16($17) # a[2]
|
|
||||||
cmpult $1,$0,$0 # overflow?
|
|
||||||
ldq $3,16($18) # b[2]
|
|
||||||
addq $0,$22,$0
|
|
||||||
ldq $8,24($17) # a[3]
|
|
||||||
addq $2,$6,$2 # r=a+b;
|
|
||||||
ldq $4,24($18) # b[3]
|
|
||||||
cmpult $2,$6,$23 # did we overflow?
|
|
||||||
addq $3,$7,$3 # r=a+b;
|
|
||||||
addq $2,$0,$2 # c+= overflow
|
|
||||||
cmpult $3,$7,$24 # did we overflow?
|
|
||||||
cmpult $2,$0,$0 # overflow?
|
|
||||||
addq $4,$8,$4 # r=a+b;
|
|
||||||
addq $0,$23,$0
|
|
||||||
cmpult $4,$8,$25 # did we overflow?
|
|
||||||
addq $3,$0,$3 # c+= overflow
|
|
||||||
stq $1,0($16) # r[0]=c
|
|
||||||
cmpult $3,$0,$0 # overflow?
|
|
||||||
stq $2,8($16) # r[1]=c
|
|
||||||
addq $0,$24,$0
|
|
||||||
stq $3,16($16) # r[2]=c
|
|
||||||
addq $4,$0,$4 # c+= overflow
|
|
||||||
subq $19,4,$19 # loop--
|
|
||||||
cmpult $4,$0,$0 # overflow?
|
|
||||||
addq $17,32,$17 # a++
|
|
||||||
addq $0,$25,$0
|
|
||||||
stq $4,24($16) # r[3]=c
|
|
||||||
addq $18,32,$18 # b++
|
|
||||||
addq $16,32,$16 # r++
|
|
||||||
|
|
||||||
blt $19,$900
|
|
||||||
ldq $5,0($17) # a[0]
|
|
||||||
ldq $1,0($18) # b[1]
|
|
||||||
br $901
|
|
||||||
.align 4
|
|
||||||
$945:
|
|
||||||
ldq $5,0($17) # a[0]
|
|
||||||
ldq $1,0($18) # b[1]
|
|
||||||
addq $1,$5,$1 # r=a+b;
|
|
||||||
subq $19,1,$19 # loop--
|
|
||||||
addq $1,$0,$1 # c+= overflow
|
|
||||||
addq $17,8,$17 # a++
|
|
||||||
cmpult $1,$5,$22 # did we overflow?
|
|
||||||
cmpult $1,$0,$0 # overflow?
|
|
||||||
addq $18,8,$18 # b++
|
|
||||||
stq $1,0($16) # r[0]=c
|
|
||||||
addq $0,$22,$0
|
|
||||||
addq $16,8,$16 # r++
|
|
||||||
|
|
||||||
bgt $19,$945
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
|
|
||||||
$900:
|
|
||||||
addq $19,4,$19
|
|
||||||
bgt $19,$945 # goto tail code
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
.end bn_add_words
|
|
||||||
|
|
||||||
#
|
|
||||||
# What follows was taken directly from the C compiler with a few
|
|
||||||
# hacks to redo the lables.
|
|
||||||
#
|
|
||||||
.text
|
|
||||||
.align 3
|
|
||||||
.globl bn_div64
|
|
||||||
.ent bn_div64
|
|
||||||
bn_div64:
|
|
||||||
ldgp $29,0($27)
|
|
||||||
bn_div64..ng:
|
|
||||||
lda $30,-48($30)
|
|
||||||
.frame $30,48,$26,0
|
|
||||||
stq $26,0($30)
|
|
||||||
stq $9,8($30)
|
|
||||||
stq $10,16($30)
|
|
||||||
stq $11,24($30)
|
|
||||||
stq $12,32($30)
|
|
||||||
stq $13,40($30)
|
|
||||||
.mask 0x4003e00,-48
|
|
||||||
.prologue 1
|
|
||||||
bis $16,$16,$9
|
|
||||||
bis $17,$17,$10
|
|
||||||
bis $18,$18,$11
|
|
||||||
bis $31,$31,$13
|
|
||||||
bis $31,2,$12
|
|
||||||
bne $11,$119
|
|
||||||
lda $0,-1
|
|
||||||
br $31,$136
|
|
||||||
.align 4
|
|
||||||
$119:
|
|
||||||
bis $11,$11,$16
|
|
||||||
jsr $26,BN_num_bits_word
|
|
||||||
ldgp $29,0($26)
|
|
||||||
subq $0,64,$1
|
|
||||||
beq $1,$120
|
|
||||||
bis $31,1,$1
|
|
||||||
sll $1,$0,$1
|
|
||||||
cmpule $9,$1,$1
|
|
||||||
bne $1,$120
|
|
||||||
# lda $16,_IO_stderr_
|
|
||||||
# lda $17,$C32
|
|
||||||
# bis $0,$0,$18
|
|
||||||
# jsr $26,fprintf
|
|
||||||
# ldgp $29,0($26)
|
|
||||||
jsr $26,abort
|
|
||||||
ldgp $29,0($26)
|
|
||||||
.align 4
|
|
||||||
$120:
|
|
||||||
bis $31,64,$3
|
|
||||||
cmpult $9,$11,$2
|
|
||||||
subq $3,$0,$1
|
|
||||||
addl $1,$31,$0
|
|
||||||
subq $9,$11,$1
|
|
||||||
cmoveq $2,$1,$9
|
|
||||||
beq $0,$122
|
|
||||||
zapnot $0,15,$2
|
|
||||||
subq $3,$0,$1
|
|
||||||
sll $11,$2,$11
|
|
||||||
sll $9,$2,$3
|
|
||||||
srl $10,$1,$1
|
|
||||||
sll $10,$2,$10
|
|
||||||
bis $3,$1,$9
|
|
||||||
$122:
|
|
||||||
srl $11,32,$5
|
|
||||||
zapnot $11,15,$6
|
|
||||||
lda $7,-1
|
|
||||||
.align 5
|
|
||||||
$123:
|
|
||||||
srl $9,32,$1
|
|
||||||
subq $1,$5,$1
|
|
||||||
bne $1,$126
|
|
||||||
zapnot $7,15,$27
|
|
||||||
br $31,$127
|
|
||||||
.align 4
|
|
||||||
$126:
|
|
||||||
bis $9,$9,$24
|
|
||||||
bis $5,$5,$25
|
|
||||||
divqu $24,$25,$27
|
|
||||||
$127:
|
|
||||||
srl $10,32,$4
|
|
||||||
.align 5
|
|
||||||
$128:
|
|
||||||
mulq $27,$5,$1
|
|
||||||
subq $9,$1,$3
|
|
||||||
zapnot $3,240,$1
|
|
||||||
bne $1,$129
|
|
||||||
mulq $6,$27,$2
|
|
||||||
sll $3,32,$1
|
|
||||||
addq $1,$4,$1
|
|
||||||
cmpule $2,$1,$2
|
|
||||||
bne $2,$129
|
|
||||||
subq $27,1,$27
|
|
||||||
br $31,$128
|
|
||||||
.align 4
|
|
||||||
$129:
|
|
||||||
mulq $27,$6,$1
|
|
||||||
mulq $27,$5,$4
|
|
||||||
srl $1,32,$3
|
|
||||||
sll $1,32,$1
|
|
||||||
addq $4,$3,$4
|
|
||||||
cmpult $10,$1,$2
|
|
||||||
subq $10,$1,$10
|
|
||||||
addq $2,$4,$2
|
|
||||||
cmpult $9,$2,$1
|
|
||||||
bis $2,$2,$4
|
|
||||||
beq $1,$134
|
|
||||||
addq $9,$11,$9
|
|
||||||
subq $27,1,$27
|
|
||||||
$134:
|
|
||||||
subl $12,1,$12
|
|
||||||
subq $9,$4,$9
|
|
||||||
beq $12,$124
|
|
||||||
sll $27,32,$13
|
|
||||||
sll $9,32,$2
|
|
||||||
srl $10,32,$1
|
|
||||||
sll $10,32,$10
|
|
||||||
bis $2,$1,$9
|
|
||||||
br $31,$123
|
|
||||||
.align 4
|
|
||||||
$124:
|
|
||||||
bis $13,$27,$0
|
|
||||||
$136:
|
|
||||||
ldq $26,0($30)
|
|
||||||
ldq $9,8($30)
|
|
||||||
ldq $10,16($30)
|
|
||||||
ldq $11,24($30)
|
|
||||||
ldq $12,32($30)
|
|
||||||
ldq $13,40($30)
|
|
||||||
addq $30,48,$30
|
|
||||||
ret $31,($26),1
|
|
||||||
.end bn_div64
|
|
||||||
|
|
||||||
.set noat
|
|
||||||
.text
|
|
||||||
.align 3
|
|
||||||
.globl bn_sub_words
|
|
||||||
.ent bn_sub_words
|
|
||||||
bn_sub_words:
|
|
||||||
bn_sub_words..ng:
|
|
||||||
.frame $30,0,$26,0
|
|
||||||
.prologue 0
|
|
||||||
|
|
||||||
subq $19, 4, $19
|
|
||||||
bis $31, $31, $0
|
|
||||||
blt $19, $100
|
|
||||||
ldq $1, 0($17)
|
|
||||||
ldq $2, 0($18)
|
|
||||||
$101:
|
|
||||||
ldq $3, 8($17)
|
|
||||||
cmpult $1, $2, $4
|
|
||||||
ldq $5, 8($18)
|
|
||||||
subq $1, $2, $1
|
|
||||||
ldq $6, 16($17)
|
|
||||||
cmpult $1, $0, $2
|
|
||||||
ldq $7, 16($18)
|
|
||||||
subq $1, $0, $23
|
|
||||||
ldq $8, 24($17)
|
|
||||||
addq $2, $4, $0
|
|
||||||
cmpult $3, $5, $24
|
|
||||||
subq $3, $5, $3
|
|
||||||
ldq $22, 24($18)
|
|
||||||
cmpult $3, $0, $5
|
|
||||||
subq $3, $0, $25
|
|
||||||
addq $5, $24, $0
|
|
||||||
cmpult $6, $7, $27
|
|
||||||
subq $6, $7, $6
|
|
||||||
stq $23, 0($16)
|
|
||||||
cmpult $6, $0, $7
|
|
||||||
subq $6, $0, $28
|
|
||||||
addq $7, $27, $0
|
|
||||||
cmpult $8, $22, $21
|
|
||||||
subq $8, $22, $8
|
|
||||||
stq $25, 8($16)
|
|
||||||
cmpult $8, $0, $22
|
|
||||||
subq $8, $0, $20
|
|
||||||
addq $22, $21, $0
|
|
||||||
stq $28, 16($16)
|
|
||||||
subq $19, 4, $19
|
|
||||||
stq $20, 24($16)
|
|
||||||
addq $17, 32, $17
|
|
||||||
addq $18, 32, $18
|
|
||||||
addq $16, 32, $16
|
|
||||||
blt $19, $100
|
|
||||||
ldq $1, 0($17)
|
|
||||||
ldq $2, 0($18)
|
|
||||||
br $101
|
|
||||||
$102:
|
|
||||||
ldq $1, 0($17)
|
|
||||||
ldq $2, 0($18)
|
|
||||||
cmpult $1, $2, $27
|
|
||||||
subq $1, $2, $1
|
|
||||||
cmpult $1, $0, $2
|
|
||||||
subq $1, $0, $1
|
|
||||||
stq $1, 0($16)
|
|
||||||
addq $2, $27, $0
|
|
||||||
addq $17, 8, $17
|
|
||||||
addq $18, 8, $18
|
|
||||||
addq $16, 8, $16
|
|
||||||
subq $19, 1, $19
|
|
||||||
bgt $19, $102
|
|
||||||
ret $31,($26),1
|
|
||||||
$100:
|
|
||||||
addq $19, 4, $19
|
|
||||||
bgt $19, $102
|
|
||||||
$103:
|
|
||||||
ret $31,($26),1
|
|
||||||
.end bn_sub_words
|
|
@ -1,119 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub bn_add_words
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local($cc,$a,$b,$r);
|
|
||||||
|
|
||||||
&init_pool(4);
|
|
||||||
($cc)=GR("r0");
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$bp=&wparam(2);
|
|
||||||
$count=&wparam(3);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
&sub($count,4,$count);
|
|
||||||
&mov("zero",$cc);
|
|
||||||
&br(&label("finish"));
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
|
|
||||||
($a0,$b0)=&NR(2);
|
|
||||||
&ld($a0,&QWPw(0,$ap));
|
|
||||||
&ld($b0,&QWPw(0,$bp));
|
|
||||||
|
|
||||||
##########################################################
|
|
||||||
&set_label("loop");
|
|
||||||
|
|
||||||
($a1)=&NR(1); &ld($a1,&QWPw(1,$ap));
|
|
||||||
($b1)=&NR(1); &ld($b1,&QWPw(1,$bp));
|
|
||||||
($a2)=&NR(1); &ld($a2,&QWPw(2,$ap));
|
|
||||||
($b2)=&NR(1); &ld($b2,&QWPw(2,$bp));
|
|
||||||
($a3)=&NR(1); &ld($a3,&QWPw(3,$ap));
|
|
||||||
($b3)=&NR(1); &ld($b3,&QWPw(3,$bp));
|
|
||||||
|
|
||||||
($o0,$t0)=&NR(2);
|
|
||||||
&add($a0,$b0,$o0);
|
|
||||||
&cmpult($o0,$b0,$t0);
|
|
||||||
&add($o0,$cc,$o0);
|
|
||||||
&cmpult($o0,$cc,$cc);
|
|
||||||
&add($cc,$t0,$cc); &FR($t0);
|
|
||||||
|
|
||||||
($t1,$o1)=&NR(2);
|
|
||||||
|
|
||||||
&add($a1,$b1,$o1); &FR($a1);
|
|
||||||
&cmpult($o1,$b1,$t1); &FR($b1);
|
|
||||||
&add($o1,$cc,$o1);
|
|
||||||
&cmpult($o1,$cc,$cc);
|
|
||||||
&add($cc,$t1,$cc); &FR($t1);
|
|
||||||
|
|
||||||
($t2,$o2)=&NR(2);
|
|
||||||
|
|
||||||
&add($a2,$b2,$o2); &FR($a2);
|
|
||||||
&cmpult($o2,$b2,$t2); &FR($b2);
|
|
||||||
&add($o2,$cc,$o2);
|
|
||||||
&cmpult($o2,$cc,$cc);
|
|
||||||
&add($cc,$t2,$cc); &FR($t2);
|
|
||||||
|
|
||||||
($t3,$o3)=&NR(2);
|
|
||||||
|
|
||||||
&add($a3,$b3,$o3); &FR($a3);
|
|
||||||
&cmpult($o3,$b3,$t3); &FR($b3);
|
|
||||||
&add($o3,$cc,$o3);
|
|
||||||
&cmpult($o3,$cc,$cc);
|
|
||||||
&add($cc,$t3,$cc); &FR($t3);
|
|
||||||
|
|
||||||
&st($o0,&QWPw(0,$rp)); &FR($o0);
|
|
||||||
&st($o1,&QWPw(0,$rp)); &FR($o1);
|
|
||||||
&st($o2,&QWPw(0,$rp)); &FR($o2);
|
|
||||||
&st($o3,&QWPw(0,$rp)); &FR($o3);
|
|
||||||
|
|
||||||
&sub($count,4,$count); # count-=4
|
|
||||||
&add($ap,4*$QWS,$ap); # count+=4
|
|
||||||
&add($bp,4*$QWS,$bp); # count+=4
|
|
||||||
&add($rp,4*$QWS,$rp); # count+=4
|
|
||||||
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
&ld($a0,&QWPw(0,$ap));
|
|
||||||
&ld($b0,&QWPw(0,$bp));
|
|
||||||
&br(&label("loop"));
|
|
||||||
##################################################
|
|
||||||
# Do the last 0..3 words
|
|
||||||
|
|
||||||
($t0,$o0)=&NR(2);
|
|
||||||
&set_label("last_loop");
|
|
||||||
|
|
||||||
&ld($a0,&QWPw(0,$ap)); # get a
|
|
||||||
&ld($b0,&QWPw(0,$bp)); # get b
|
|
||||||
|
|
||||||
&add($a0,$b0,$o0);
|
|
||||||
&cmpult($o0,$b0,$t0); # will we borrow?
|
|
||||||
&add($o0,$cc,$o0); # will we borrow?
|
|
||||||
&cmpult($o0,$cc,$cc); # will we borrow?
|
|
||||||
&add($cc,$t0,$cc); # add the borrows
|
|
||||||
&st($o0,&QWPw(0,$rp)); # save
|
|
||||||
|
|
||||||
&add($ap,$QWS,$ap);
|
|
||||||
&add($bp,$QWS,$bp);
|
|
||||||
&add($rp,$QWS,$rp);
|
|
||||||
&sub($count,1,$count);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
&function_end_A($name);
|
|
||||||
|
|
||||||
######################################################
|
|
||||||
&set_label("finish");
|
|
||||||
&add($count,4,$count);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
|
|
||||||
&FR($o0,$t0,$a0,$b0);
|
|
||||||
&set_label("end");
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,144 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
|
|
||||||
sub bn_div64
|
|
||||||
{
|
|
||||||
local($data)=<<'EOF';
|
|
||||||
#
|
|
||||||
# What follows was taken directly from the C compiler with a few
|
|
||||||
# hacks to redo the lables.
|
|
||||||
#
|
|
||||||
.text
|
|
||||||
.set noreorder
|
|
||||||
.set volatile
|
|
||||||
.align 3
|
|
||||||
.globl bn_div64
|
|
||||||
.ent bn_div64
|
|
||||||
bn_div64:
|
|
||||||
ldgp $29,0($27)
|
|
||||||
bn_div64..ng:
|
|
||||||
lda $30,-48($30)
|
|
||||||
.frame $30,48,$26,0
|
|
||||||
stq $26,0($30)
|
|
||||||
stq $9,8($30)
|
|
||||||
stq $10,16($30)
|
|
||||||
stq $11,24($30)
|
|
||||||
stq $12,32($30)
|
|
||||||
stq $13,40($30)
|
|
||||||
.mask 0x4003e00,-48
|
|
||||||
.prologue 1
|
|
||||||
bis $16,$16,$9
|
|
||||||
bis $17,$17,$10
|
|
||||||
bis $18,$18,$11
|
|
||||||
bis $31,$31,$13
|
|
||||||
bis $31,2,$12
|
|
||||||
bne $11,$9119
|
|
||||||
lda $0,-1
|
|
||||||
br $31,$9136
|
|
||||||
.align 4
|
|
||||||
$9119:
|
|
||||||
bis $11,$11,$16
|
|
||||||
jsr $26,BN_num_bits_word
|
|
||||||
ldgp $29,0($26)
|
|
||||||
subq $0,64,$1
|
|
||||||
beq $1,$9120
|
|
||||||
bis $31,1,$1
|
|
||||||
sll $1,$0,$1
|
|
||||||
cmpule $9,$1,$1
|
|
||||||
bne $1,$9120
|
|
||||||
# lda $16,_IO_stderr_
|
|
||||||
# lda $17,$C32
|
|
||||||
# bis $0,$0,$18
|
|
||||||
# jsr $26,fprintf
|
|
||||||
# ldgp $29,0($26)
|
|
||||||
jsr $26,abort
|
|
||||||
ldgp $29,0($26)
|
|
||||||
.align 4
|
|
||||||
$9120:
|
|
||||||
bis $31,64,$3
|
|
||||||
cmpult $9,$11,$2
|
|
||||||
subq $3,$0,$1
|
|
||||||
addl $1,$31,$0
|
|
||||||
subq $9,$11,$1
|
|
||||||
cmoveq $2,$1,$9
|
|
||||||
beq $0,$9122
|
|
||||||
zapnot $0,15,$2
|
|
||||||
subq $3,$0,$1
|
|
||||||
sll $11,$2,$11
|
|
||||||
sll $9,$2,$3
|
|
||||||
srl $10,$1,$1
|
|
||||||
sll $10,$2,$10
|
|
||||||
bis $3,$1,$9
|
|
||||||
$9122:
|
|
||||||
srl $11,32,$5
|
|
||||||
zapnot $11,15,$6
|
|
||||||
lda $7,-1
|
|
||||||
.align 5
|
|
||||||
$9123:
|
|
||||||
srl $9,32,$1
|
|
||||||
subq $1,$5,$1
|
|
||||||
bne $1,$9126
|
|
||||||
zapnot $7,15,$27
|
|
||||||
br $31,$9127
|
|
||||||
.align 4
|
|
||||||
$9126:
|
|
||||||
bis $9,$9,$24
|
|
||||||
bis $5,$5,$25
|
|
||||||
divqu $24,$25,$27
|
|
||||||
$9127:
|
|
||||||
srl $10,32,$4
|
|
||||||
.align 5
|
|
||||||
$9128:
|
|
||||||
mulq $27,$5,$1
|
|
||||||
subq $9,$1,$3
|
|
||||||
zapnot $3,240,$1
|
|
||||||
bne $1,$9129
|
|
||||||
mulq $6,$27,$2
|
|
||||||
sll $3,32,$1
|
|
||||||
addq $1,$4,$1
|
|
||||||
cmpule $2,$1,$2
|
|
||||||
bne $2,$9129
|
|
||||||
subq $27,1,$27
|
|
||||||
br $31,$9128
|
|
||||||
.align 4
|
|
||||||
$9129:
|
|
||||||
mulq $27,$6,$1
|
|
||||||
mulq $27,$5,$4
|
|
||||||
srl $1,32,$3
|
|
||||||
sll $1,32,$1
|
|
||||||
addq $4,$3,$4
|
|
||||||
cmpult $10,$1,$2
|
|
||||||
subq $10,$1,$10
|
|
||||||
addq $2,$4,$2
|
|
||||||
cmpult $9,$2,$1
|
|
||||||
bis $2,$2,$4
|
|
||||||
beq $1,$9134
|
|
||||||
addq $9,$11,$9
|
|
||||||
subq $27,1,$27
|
|
||||||
$9134:
|
|
||||||
subl $12,1,$12
|
|
||||||
subq $9,$4,$9
|
|
||||||
beq $12,$9124
|
|
||||||
sll $27,32,$13
|
|
||||||
sll $9,32,$2
|
|
||||||
srl $10,32,$1
|
|
||||||
sll $10,32,$10
|
|
||||||
bis $2,$1,$9
|
|
||||||
br $31,$9123
|
|
||||||
.align 4
|
|
||||||
$9124:
|
|
||||||
bis $13,$27,$0
|
|
||||||
$9136:
|
|
||||||
ldq $26,0($30)
|
|
||||||
ldq $9,8($30)
|
|
||||||
ldq $10,16($30)
|
|
||||||
ldq $11,24($30)
|
|
||||||
ldq $12,32($30)
|
|
||||||
ldq $13,40($30)
|
|
||||||
addq $30,48,$30
|
|
||||||
ret $31,($26),1
|
|
||||||
.end bn_div64
|
|
||||||
EOF
|
|
||||||
&asm_add($data);
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,116 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub bn_mul_words
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local($cc,$a,$b,$r,$couny);
|
|
||||||
|
|
||||||
&init_pool(4);
|
|
||||||
($cc)=GR("r0");
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$count=&wparam(2);
|
|
||||||
$word=&wparam(3);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
&sub($count,4,$count);
|
|
||||||
&mov("zero",$cc);
|
|
||||||
&br(&label("finish"));
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
|
|
||||||
($a0,$r0)=&NR(2);
|
|
||||||
&ld($a0,&QWPw(0,$ap));
|
|
||||||
&ld($r0,&QWPw(0,$rp));
|
|
||||||
|
|
||||||
$a=<<'EOF';
|
|
||||||
##########################################################
|
|
||||||
&set_label("loop");
|
|
||||||
|
|
||||||
($a1)=&NR(1); &ld($a1,&QWPw(1,$ap));
|
|
||||||
($b1)=&NR(1); &ld($b1,&QWPw(1,$bp));
|
|
||||||
($a2)=&NR(1); &ld($a2,&QWPw(2,$ap));
|
|
||||||
($b2)=&NR(1); &ld($b2,&QWPw(2,$bp));
|
|
||||||
($a3)=&NR(1); &ld($a3,&QWPw(3,$ap));
|
|
||||||
($b3)=&NR(1); &ld($b3,&QWPw(3,$bp));
|
|
||||||
|
|
||||||
($o0,$t0)=&NR(2);
|
|
||||||
&add($a0,$b0,$o0);
|
|
||||||
&cmpult($o0,$b0,$t0);
|
|
||||||
&add($o0,$cc,$o0);
|
|
||||||
&cmpult($o0,$cc,$cc);
|
|
||||||
&add($cc,$t0,$cc); &FR($t0);
|
|
||||||
|
|
||||||
($t1,$o1)=&NR(2);
|
|
||||||
|
|
||||||
&add($a1,$b1,$o1); &FR($a1);
|
|
||||||
&cmpult($o1,$b1,$t1); &FR($b1);
|
|
||||||
&add($o1,$cc,$o1);
|
|
||||||
&cmpult($o1,$cc,$cc);
|
|
||||||
&add($cc,$t1,$cc); &FR($t1);
|
|
||||||
|
|
||||||
($t2,$o2)=&NR(2);
|
|
||||||
|
|
||||||
&add($a2,$b2,$o2); &FR($a2);
|
|
||||||
&cmpult($o2,$b2,$t2); &FR($b2);
|
|
||||||
&add($o2,$cc,$o2);
|
|
||||||
&cmpult($o2,$cc,$cc);
|
|
||||||
&add($cc,$t2,$cc); &FR($t2);
|
|
||||||
|
|
||||||
($t3,$o3)=&NR(2);
|
|
||||||
|
|
||||||
&add($a3,$b3,$o3); &FR($a3);
|
|
||||||
&cmpult($o3,$b3,$t3); &FR($b3);
|
|
||||||
&add($o3,$cc,$o3);
|
|
||||||
&cmpult($o3,$cc,$cc);
|
|
||||||
&add($cc,$t3,$cc); &FR($t3);
|
|
||||||
|
|
||||||
&st($o0,&QWPw(0,$rp)); &FR($o0);
|
|
||||||
&st($o1,&QWPw(0,$rp)); &FR($o1);
|
|
||||||
&st($o2,&QWPw(0,$rp)); &FR($o2);
|
|
||||||
&st($o3,&QWPw(0,$rp)); &FR($o3);
|
|
||||||
|
|
||||||
&sub($count,4,$count); # count-=4
|
|
||||||
&add($ap,4*$QWS,$ap); # count+=4
|
|
||||||
&add($bp,4*$QWS,$bp); # count+=4
|
|
||||||
&add($rp,4*$QWS,$rp); # count+=4
|
|
||||||
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
&ld($a0,&QWPw(0,$ap));
|
|
||||||
&ld($b0,&QWPw(0,$bp));
|
|
||||||
&br(&label("loop"));
|
|
||||||
EOF
|
|
||||||
##################################################
|
|
||||||
# Do the last 0..3 words
|
|
||||||
|
|
||||||
&set_label("last_loop");
|
|
||||||
|
|
||||||
&ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a
|
|
||||||
&mul($a0,$word,($l0)=&NR(1));
|
|
||||||
&add($ap,$QWS,$ap);
|
|
||||||
&muh($a0,$word,($h0)=&NR(1)); &FR($a0);
|
|
||||||
&add($l0,$cc,$l0);
|
|
||||||
&add($rp,$QWS,$rp);
|
|
||||||
&sub($count,1,$count);
|
|
||||||
&cmpult($l0,$cc,$cc);
|
|
||||||
&st($l0,&QWPw(-1,$rp)); &FR($l0);
|
|
||||||
&add($h0,$cc,$cc); &FR($h0);
|
|
||||||
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
&function_end_A($name);
|
|
||||||
|
|
||||||
######################################################
|
|
||||||
&set_label("finish");
|
|
||||||
&add($count,4,$count);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
|
|
||||||
&set_label("end");
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,120 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub bn_mul_add_words
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local($cc,$a,$b,$r,$couny);
|
|
||||||
|
|
||||||
&init_pool(4);
|
|
||||||
($cc)=GR("r0");
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$count=&wparam(2);
|
|
||||||
$word=&wparam(3);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
&sub($count,4,$count);
|
|
||||||
&mov("zero",$cc);
|
|
||||||
&br(&label("finish"));
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
|
|
||||||
($a0,$r0)=&NR(2);
|
|
||||||
&ld($a0,&QWPw(0,$ap));
|
|
||||||
&ld($r0,&QWPw(0,$rp));
|
|
||||||
|
|
||||||
$a=<<'EOF';
|
|
||||||
##########################################################
|
|
||||||
&set_label("loop");
|
|
||||||
|
|
||||||
($a1)=&NR(1); &ld($a1,&QWPw(1,$ap));
|
|
||||||
($b1)=&NR(1); &ld($b1,&QWPw(1,$bp));
|
|
||||||
($a2)=&NR(1); &ld($a2,&QWPw(2,$ap));
|
|
||||||
($b2)=&NR(1); &ld($b2,&QWPw(2,$bp));
|
|
||||||
($a3)=&NR(1); &ld($a3,&QWPw(3,$ap));
|
|
||||||
($b3)=&NR(1); &ld($b3,&QWPw(3,$bp));
|
|
||||||
|
|
||||||
($o0,$t0)=&NR(2);
|
|
||||||
&add($a0,$b0,$o0);
|
|
||||||
&cmpult($o0,$b0,$t0);
|
|
||||||
&add($o0,$cc,$o0);
|
|
||||||
&cmpult($o0,$cc,$cc);
|
|
||||||
&add($cc,$t0,$cc); &FR($t0);
|
|
||||||
|
|
||||||
($t1,$o1)=&NR(2);
|
|
||||||
|
|
||||||
&add($a1,$b1,$o1); &FR($a1);
|
|
||||||
&cmpult($o1,$b1,$t1); &FR($b1);
|
|
||||||
&add($o1,$cc,$o1);
|
|
||||||
&cmpult($o1,$cc,$cc);
|
|
||||||
&add($cc,$t1,$cc); &FR($t1);
|
|
||||||
|
|
||||||
($t2,$o2)=&NR(2);
|
|
||||||
|
|
||||||
&add($a2,$b2,$o2); &FR($a2);
|
|
||||||
&cmpult($o2,$b2,$t2); &FR($b2);
|
|
||||||
&add($o2,$cc,$o2);
|
|
||||||
&cmpult($o2,$cc,$cc);
|
|
||||||
&add($cc,$t2,$cc); &FR($t2);
|
|
||||||
|
|
||||||
($t3,$o3)=&NR(2);
|
|
||||||
|
|
||||||
&add($a3,$b3,$o3); &FR($a3);
|
|
||||||
&cmpult($o3,$b3,$t3); &FR($b3);
|
|
||||||
&add($o3,$cc,$o3);
|
|
||||||
&cmpult($o3,$cc,$cc);
|
|
||||||
&add($cc,$t3,$cc); &FR($t3);
|
|
||||||
|
|
||||||
&st($o0,&QWPw(0,$rp)); &FR($o0);
|
|
||||||
&st($o1,&QWPw(0,$rp)); &FR($o1);
|
|
||||||
&st($o2,&QWPw(0,$rp)); &FR($o2);
|
|
||||||
&st($o3,&QWPw(0,$rp)); &FR($o3);
|
|
||||||
|
|
||||||
&sub($count,4,$count); # count-=4
|
|
||||||
&add($ap,4*$QWS,$ap); # count+=4
|
|
||||||
&add($bp,4*$QWS,$bp); # count+=4
|
|
||||||
&add($rp,4*$QWS,$rp); # count+=4
|
|
||||||
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
&ld($a0,&QWPw(0,$ap));
|
|
||||||
&ld($b0,&QWPw(0,$bp));
|
|
||||||
&br(&label("loop"));
|
|
||||||
EOF
|
|
||||||
##################################################
|
|
||||||
# Do the last 0..3 words
|
|
||||||
|
|
||||||
&set_label("last_loop");
|
|
||||||
|
|
||||||
&ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a
|
|
||||||
&ld(($r0)=&NR(1),&QWPw(0,$rp)); # get b
|
|
||||||
&mul($a0,$word,($l0)=&NR(1));
|
|
||||||
&sub($count,1,$count);
|
|
||||||
&add($ap,$QWS,$ap);
|
|
||||||
&muh($a0,$word,($h0)=&NR(1)); &FR($a0);
|
|
||||||
&add($r0,$l0,$r0);
|
|
||||||
&add($rp,$QWS,$rp);
|
|
||||||
&cmpult($r0,$l0,($t0)=&NR(1)); &FR($l0);
|
|
||||||
&add($r0,$cc,$r0);
|
|
||||||
&add($h0,$t0,$h0); &FR($t0);
|
|
||||||
&cmpult($r0,$cc,$cc);
|
|
||||||
&st($r0,&QWPw(-1,$rp)); &FR($r0);
|
|
||||||
&add($h0,$cc,$cc); &FR($h0);
|
|
||||||
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
&function_end_A($name);
|
|
||||||
|
|
||||||
######################################################
|
|
||||||
&set_label("finish");
|
|
||||||
&add($count,4,$count);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
|
|
||||||
&set_label("end");
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,213 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub mul_add_c
|
|
||||||
{
|
|
||||||
local($a,$b,$c0,$c1,$c2)=@_;
|
|
||||||
local($l1,$h1,$t1,$t2);
|
|
||||||
|
|
||||||
&mul($a,$b,($l1)=&NR(1));
|
|
||||||
&muh($a,$b,($h1)=&NR(1));
|
|
||||||
&add($c0,$l1,$c0);
|
|
||||||
&cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1);
|
|
||||||
&add($t1,$h1,$h1); &FR($t1);
|
|
||||||
&add($c1,$h1,$c1);
|
|
||||||
&cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1);
|
|
||||||
&add($c2,$t2,$c2); &FR($t2);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub bn_mul_comba4
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local(@a,@b,$r,$c0,$c1,$c2);
|
|
||||||
|
|
||||||
$cnt=1;
|
|
||||||
&init_pool(3);
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$bp=&wparam(2);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
|
|
||||||
&ld(($a[0])=&NR(1),&QWPw(0,$ap));
|
|
||||||
&ld(($b[0])=&NR(1),&QWPw(0,$bp));
|
|
||||||
&ld(($a[1])=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($b[1])=&NR(1),&QWPw(1,$bp));
|
|
||||||
&mul($a[0],$b[0],($r00)=&NR(1));
|
|
||||||
&ld(($a[2])=&NR(1),&QWPw(2,$ap));
|
|
||||||
&ld(($b[2])=&NR(1),&QWPw(2,$bp));
|
|
||||||
&muh($a[0],$b[0],($r01)=&NR(1));
|
|
||||||
&FR($ap); &ld(($a[3])=&NR(1),&QWPw(3,$ap));
|
|
||||||
&FR($bp); &ld(($b[3])=&NR(1),&QWPw(3,$bp));
|
|
||||||
&mul($a[0],$b[1],($r02)=&NR(1));
|
|
||||||
|
|
||||||
($R,$H1,$H2)=&NR(3);
|
|
||||||
|
|
||||||
&st($r00,&QWPw(0,$rp)); &FR($r00);
|
|
||||||
|
|
||||||
&mov("zero",$R);
|
|
||||||
&mul($a[1],$b[0],($r03)=&NR(1));
|
|
||||||
|
|
||||||
&mov("zero",$H1);
|
|
||||||
&mov("zero",$H0);
|
|
||||||
&add($R,$r01,$R);
|
|
||||||
&muh($a[0],$b[1],($r04)=&NR(1));
|
|
||||||
&cmpult($R,$r01,($t01)=&NR(1)); &FR($r01);
|
|
||||||
&add($R,$r02,$R);
|
|
||||||
&add($H1,$t01,$H1) &FR($t01);
|
|
||||||
&muh($a[1],$b[0],($r05)=&NR(1));
|
|
||||||
&cmpult($R,$r02,($t02)=&NR(1)); &FR($r02);
|
|
||||||
&add($R,$r03,$R);
|
|
||||||
&add($H2,$t02,$H2) &FR($t02);
|
|
||||||
&mul($a[0],$b[2],($r06)=&NR(1));
|
|
||||||
&cmpult($R,$r03,($t03)=&NR(1)); &FR($r03);
|
|
||||||
&add($H1,$t03,$H1) &FR($t03);
|
|
||||||
&st($R,&QWPw(1,$rp));
|
|
||||||
&add($H1,$H2,$R);
|
|
||||||
|
|
||||||
&mov("zero",$H1);
|
|
||||||
&add($R,$r04,$R);
|
|
||||||
&mov("zero",$H2);
|
|
||||||
&mul($a[1],$b[1],($r07)=&NR(1));
|
|
||||||
&cmpult($R,$r04,($t04)=&NR(1)); &FR($r04);
|
|
||||||
&add($R,$r05,$R);
|
|
||||||
&add($H1,$t04,$H1) &FR($t04);
|
|
||||||
&mul($a[2],$b[0],($r08)=&NR(1));
|
|
||||||
&cmpult($R,$r05,($t05)=&NR(1)); &FR($r05);
|
|
||||||
&add($R,$r01,$R);
|
|
||||||
&add($H2,$t05,$H2) &FR($t05);
|
|
||||||
&muh($a[0],$b[2],($r09)=&NR(1));
|
|
||||||
&cmpult($R,$r06,($t06)=&NR(1)); &FR($r06);
|
|
||||||
&add($R,$r07,$R);
|
|
||||||
&add($H1,$t06,$H1) &FR($t06);
|
|
||||||
&muh($a[1],$b[1],($r10)=&NR(1));
|
|
||||||
&cmpult($R,$r07,($t07)=&NR(1)); &FR($r07);
|
|
||||||
&add($R,$r08,$R);
|
|
||||||
&add($H2,$t07,$H2) &FR($t07);
|
|
||||||
&muh($a[2],$b[0],($r11)=&NR(1));
|
|
||||||
&cmpult($R,$r08,($t08)=&NR(1)); &FR($r08);
|
|
||||||
&add($H1,$t08,$H1) &FR($t08);
|
|
||||||
&st($R,&QWPw(2,$rp));
|
|
||||||
&add($H1,$H2,$R);
|
|
||||||
|
|
||||||
&mov("zero",$H1);
|
|
||||||
&add($R,$r09,$R);
|
|
||||||
&mov("zero",$H2);
|
|
||||||
&mul($a[0],$b[3],($r12)=&NR(1));
|
|
||||||
&cmpult($R,$r09,($t09)=&NR(1)); &FR($r09);
|
|
||||||
&add($R,$r10,$R);
|
|
||||||
&add($H1,$t09,$H1) &FR($t09);
|
|
||||||
&mul($a[1],$b[2],($r13)=&NR(1));
|
|
||||||
&cmpult($R,$r10,($t10)=&NR(1)); &FR($r10);
|
|
||||||
&add($R,$r11,$R);
|
|
||||||
&add($H1,$t10,$H1) &FR($t10);
|
|
||||||
&mul($a[2],$b[1],($r14)=&NR(1));
|
|
||||||
&cmpult($R,$r11,($t11)=&NR(1)); &FR($r11);
|
|
||||||
&add($R,$r12,$R);
|
|
||||||
&add($H1,$t11,$H1) &FR($t11);
|
|
||||||
&mul($a[3],$b[0],($r15)=&NR(1));
|
|
||||||
&cmpult($R,$r12,($t12)=&NR(1)); &FR($r12);
|
|
||||||
&add($R,$r13,$R);
|
|
||||||
&add($H1,$t12,$H1) &FR($t12);
|
|
||||||
&muh($a[0],$b[3],($r16)=&NR(1));
|
|
||||||
&cmpult($R,$r13,($t13)=&NR(1)); &FR($r13);
|
|
||||||
&add($R,$r14,$R);
|
|
||||||
&add($H1,$t13,$H1) &FR($t13);
|
|
||||||
&muh($a[1],$b[2],($r17)=&NR(1));
|
|
||||||
&cmpult($R,$r14,($t14)=&NR(1)); &FR($r14);
|
|
||||||
&add($R,$r15,$R);
|
|
||||||
&add($H1,$t14,$H1) &FR($t14);
|
|
||||||
&muh($a[2],$b[1],($r18)=&NR(1));
|
|
||||||
&cmpult($R,$r15,($t15)=&NR(1)); &FR($r15);
|
|
||||||
&add($H1,$t15,$H1) &FR($t15);
|
|
||||||
&st($R,&QWPw(3,$rp));
|
|
||||||
&add($H1,$H2,$R);
|
|
||||||
|
|
||||||
&mov("zero",$H1);
|
|
||||||
&add($R,$r16,$R);
|
|
||||||
&mov("zero",$H2);
|
|
||||||
&muh($a[3],$b[0],($r19)=&NR(1));
|
|
||||||
&cmpult($R,$r16,($t16)=&NR(1)); &FR($r16);
|
|
||||||
&add($R,$r17,$R);
|
|
||||||
&add($H1,$t16,$H1) &FR($t16);
|
|
||||||
&mul($a[1],$b[3],($r20)=&NR(1));
|
|
||||||
&cmpult($R,$r17,($t17)=&NR(1)); &FR($r17);
|
|
||||||
&add($R,$r18,$R);
|
|
||||||
&add($H1,$t17,$H1) &FR($t17);
|
|
||||||
&mul($a[2],$b[2],($r21)=&NR(1));
|
|
||||||
&cmpult($R,$r18,($t18)=&NR(1)); &FR($r18);
|
|
||||||
&add($R,$r19,$R);
|
|
||||||
&add($H1,$t18,$H1) &FR($t18);
|
|
||||||
&mul($a[3],$b[1],($r22)=&NR(1));
|
|
||||||
&cmpult($R,$r19,($t19)=&NR(1)); &FR($r19);
|
|
||||||
&add($R,$r20,$R);
|
|
||||||
&add($H1,$t19,$H1) &FR($t19);
|
|
||||||
&muh($a[1],$b[3],($r23)=&NR(1));
|
|
||||||
&cmpult($R,$r20,($t20)=&NR(1)); &FR($r20);
|
|
||||||
&add($R,$r21,$R);
|
|
||||||
&add($H1,$t20,$H1) &FR($t20);
|
|
||||||
&muh($a[2],$b[2],($r24)=&NR(1));
|
|
||||||
&cmpult($R,$r21,($t21)=&NR(1)); &FR($r21);
|
|
||||||
&add($R,$r22,$R);
|
|
||||||
&add($H1,$t21,$H1) &FR($t21);
|
|
||||||
&muh($a[3],$b[1],($r25)=&NR(1));
|
|
||||||
&cmpult($R,$r22,($t22)=&NR(1)); &FR($r22);
|
|
||||||
&add($H1,$t22,$H1) &FR($t22);
|
|
||||||
&st($R,&QWPw(4,$rp));
|
|
||||||
&add($H1,$H2,$R);
|
|
||||||
|
|
||||||
&mov("zero",$H1);
|
|
||||||
&add($R,$r23,$R);
|
|
||||||
&mov("zero",$H2);
|
|
||||||
&mul($a[2],$b[3],($r26)=&NR(1));
|
|
||||||
&cmpult($R,$r23,($t23)=&NR(1)); &FR($r23);
|
|
||||||
&add($R,$r24,$R);
|
|
||||||
&add($H1,$t23,$H1) &FR($t23);
|
|
||||||
&mul($a[3],$b[2],($r27)=&NR(1));
|
|
||||||
&cmpult($R,$r24,($t24)=&NR(1)); &FR($r24);
|
|
||||||
&add($R,$r25,$R);
|
|
||||||
&add($H1,$t24,$H1) &FR($t24);
|
|
||||||
&muh($a[2],$b[3],($r28)=&NR(1));
|
|
||||||
&cmpult($R,$r25,($t25)=&NR(1)); &FR($r25);
|
|
||||||
&add($R,$r26,$R);
|
|
||||||
&add($H1,$t25,$H1) &FR($t25);
|
|
||||||
&muh($a[3],$b[2],($r29)=&NR(1));
|
|
||||||
&cmpult($R,$r26,($t26)=&NR(1)); &FR($r26);
|
|
||||||
&add($R,$r27,$R);
|
|
||||||
&add($H1,$t26,$H1) &FR($t26);
|
|
||||||
&mul($a[3],$b[3],($r30)=&NR(1));
|
|
||||||
&cmpult($R,$r27,($t27)=&NR(1)); &FR($r27);
|
|
||||||
&add($H1,$t27,$H1) &FR($t27);
|
|
||||||
&st($R,&QWPw(5,$rp));
|
|
||||||
&add($H1,$H2,$R);
|
|
||||||
|
|
||||||
&mov("zero",$H1);
|
|
||||||
&add($R,$r28,$R);
|
|
||||||
&mov("zero",$H2);
|
|
||||||
&muh($a[3],$b[3],($r31)=&NR(1));
|
|
||||||
&cmpult($R,$r28,($t28)=&NR(1)); &FR($r28);
|
|
||||||
&add($R,$r29,$R);
|
|
||||||
&add($H1,$t28,$H1) &FR($t28);
|
|
||||||
############
|
|
||||||
&cmpult($R,$r29,($t29)=&NR(1)); &FR($r29);
|
|
||||||
&add($R,$r30,$R);
|
|
||||||
&add($H1,$t29,$H1) &FR($t29);
|
|
||||||
############
|
|
||||||
&cmpult($R,$r30,($t30)=&NR(1)); &FR($r30);
|
|
||||||
&add($H1,$t30,$H1) &FR($t30);
|
|
||||||
&st($R,&QWPw(6,$rp));
|
|
||||||
&add($H1,$H2,$R);
|
|
||||||
|
|
||||||
&add($R,$r31,$R); &FR($r31);
|
|
||||||
&st($R,&QWPw(7,$rp));
|
|
||||||
|
|
||||||
&FR($R,$H1,$H2);
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,98 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub mul_add_c
|
|
||||||
{
|
|
||||||
local($a,$b,$c0,$c1,$c2)=@_;
|
|
||||||
local($l1,$h1,$t1,$t2);
|
|
||||||
|
|
||||||
print STDERR "count=$cnt\n"; $cnt++;
|
|
||||||
&mul($a,$b,($l1)=&NR(1));
|
|
||||||
&muh($a,$b,($h1)=&NR(1));
|
|
||||||
&add($c0,$l1,$c0);
|
|
||||||
&cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1);
|
|
||||||
&add($t1,$h1,$h1); &FR($t1);
|
|
||||||
&add($c1,$h1,$c1);
|
|
||||||
&cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1);
|
|
||||||
&add($c2,$t2,$c2); &FR($t2);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub bn_mul_comba4
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local(@a,@b,$r,$c0,$c1,$c2);
|
|
||||||
|
|
||||||
$cnt=1;
|
|
||||||
&init_pool(3);
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$bp=&wparam(2);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
|
|
||||||
&ld(($a[0])=&NR(1),&QWPw(0,$ap));
|
|
||||||
&ld(($b[0])=&NR(1),&QWPw(0,$bp));
|
|
||||||
&ld(($a[1])=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($b[1])=&NR(1),&QWPw(1,$bp));
|
|
||||||
&ld(($a[2])=&NR(1),&QWPw(2,$ap));
|
|
||||||
&ld(($b[2])=&NR(1),&QWPw(2,$bp));
|
|
||||||
&ld(($a[3])=&NR(1),&QWPw(3,$ap)); &FR($ap);
|
|
||||||
&ld(($b[3])=&NR(1),&QWPw(3,$bp)); &FR($bp);
|
|
||||||
|
|
||||||
($c0,$c1,$c2)=&NR(3);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
&mul($a[0],$b[0],$c0);
|
|
||||||
&muh($a[0],$b[0],$c1);
|
|
||||||
&st($c0,&QWPw(0,$rp)); &FR($c0); ($c0)=&NR($c0);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[1],$b[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(1,$rp)); &FR($c0); ($c0)=&NR($c0);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[1],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[0],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[2],$b[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(2,$rp)); &FR($c0); ($c0)=&NR($c0);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[3],$c0,$c1,$c2); &FR($a[0]);
|
|
||||||
&mul_add_c($a[1],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[2],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[3],$b[0],$c0,$c1,$c2); &FR($b[0]);
|
|
||||||
&st($c0,&QWPw(3,$rp)); &FR($c0); ($c0)=&NR($c0);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[1],$b[3],$c0,$c1,$c2); &FR($a[1]);
|
|
||||||
&mul_add_c($a[2],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[3],$b[1],$c0,$c1,$c2); &FR($b[1]);
|
|
||||||
&st($c0,&QWPw(4,$rp)); &FR($c0); ($c0)=&NR($c0);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[2],$b[3],$c0,$c1,$c2); &FR($a[2]);
|
|
||||||
&mul_add_c($a[3],$b[2],$c0,$c1,$c2); &FR($b[2]);
|
|
||||||
&st($c0,&QWPw(5,$rp)); &FR($c0); ($c0)=&NR($c0);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[3],$b[3],$c0,$c1,$c2); &FR($a[3],$b[3]);
|
|
||||||
&st($c0,&QWPw(6,$rp));
|
|
||||||
&st($c1,&QWPw(7,$rp));
|
|
||||||
|
|
||||||
&FR($c0,$c1,$c2);
|
|
||||||
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,177 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub bn_mul_comba8
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local(@a,@b,$r,$c0,$c1,$c2);
|
|
||||||
|
|
||||||
$cnt=1;
|
|
||||||
&init_pool(3);
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$bp=&wparam(2);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
|
|
||||||
&stack_push(2);
|
|
||||||
&ld(($a[0])=&NR(1),&QWPw(0,$ap));
|
|
||||||
&ld(($b[0])=&NR(1),&QWPw(0,$bp));
|
|
||||||
&st($reg_s0,&swtmp(0)); &FR($reg_s0);
|
|
||||||
&st($reg_s1,&swtmp(1)); &FR($reg_s1);
|
|
||||||
&ld(($a[1])=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($b[1])=&NR(1),&QWPw(1,$bp));
|
|
||||||
&ld(($a[2])=&NR(1),&QWPw(2,$ap));
|
|
||||||
&ld(($b[2])=&NR(1),&QWPw(2,$bp));
|
|
||||||
&ld(($a[3])=&NR(1),&QWPw(3,$ap));
|
|
||||||
&ld(($b[3])=&NR(1),&QWPw(3,$bp));
|
|
||||||
&ld(($a[4])=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($b[4])=&NR(1),&QWPw(1,$bp));
|
|
||||||
&ld(($a[5])=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($b[5])=&NR(1),&QWPw(1,$bp));
|
|
||||||
&ld(($a[6])=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($b[6])=&NR(1),&QWPw(1,$bp));
|
|
||||||
&ld(($a[7])=&NR(1),&QWPw(1,$ap)); &FR($ap);
|
|
||||||
&ld(($b[7])=&NR(1),&QWPw(1,$bp)); &FR($bp);
|
|
||||||
|
|
||||||
($c0,$c1,$c2)=&NR(3);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
&mul($a[0],$b[0],$c0);
|
|
||||||
&muh($a[0],$b[0],$c1);
|
|
||||||
&st($c0,&QWPw(0,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[1],$b[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(1,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[1],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[2],$b[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(2,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[3],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[1],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[2],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[3],$b[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(3,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[4],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[1],$b[3],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[2],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[3],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[4],$b[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(4,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[5],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[1],$b[4],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[2],$b[3],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[3],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[4],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[5],$b[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(5,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[6],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[1],$b[5],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[2],$b[4],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[3],$b[3],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[4],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[5],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[6],$b[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(6,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[7],$c0,$c1,$c2); &FR($a[0]);
|
|
||||||
&mul_add_c($a[1],$b[6],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[2],$b[5],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[3],$b[4],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[4],$b[3],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[5],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[6],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[7],$b[0],$c0,$c1,$c2); &FR($b[0]);
|
|
||||||
&st($c0,&QWPw(7,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[1],$b[7],$c0,$c1,$c2); &FR($a[1]);
|
|
||||||
&mul_add_c($a[2],$b[6],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[3],$b[5],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[4],$b[4],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[5],$b[3],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[6],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[7],$b[1],$c0,$c1,$c2); &FR($b[1]);
|
|
||||||
&st($c0,&QWPw(8,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[2],$b[7],$c0,$c1,$c2); &FR($a[2]);
|
|
||||||
&mul_add_c($a[3],$b[6],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[4],$b[5],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[5],$b[4],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[6],$b[3],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[7],$b[2],$c0,$c1,$c2); &FR($b[2]);
|
|
||||||
&st($c0,&QWPw(9,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[3],$b[7],$c0,$c1,$c2); &FR($a[3]);
|
|
||||||
&mul_add_c($a[4],$b[6],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[5],$b[5],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[6],$b[4],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[7],$b[3],$c0,$c1,$c2); &FR($b[3]);
|
|
||||||
&st($c0,&QWPw(10,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[4],$b[7],$c0,$c1,$c2); &FR($a[4]);
|
|
||||||
&mul_add_c($a[5],$b[6],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[6],$b[5],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[7],$b[4],$c0,$c1,$c2); &FR($b[4]);
|
|
||||||
&st($c0,&QWPw(11,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[5],$b[7],$c0,$c1,$c2); &FR($a[5]);
|
|
||||||
&mul_add_c($a[6],$b[6],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[7],$b[5],$c0,$c1,$c2); &FR($b[5]);
|
|
||||||
&st($c0,&QWPw(12,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[6],$b[7],$c0,$c1,$c2); &FR($a[6]);
|
|
||||||
&mul_add_c($a[7],$b[6],$c0,$c1,$c2); &FR($b[6]);
|
|
||||||
&st($c0,&QWPw(13,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[7],$b[7],$c0,$c1,$c2); &FR($a[7],$b[7]);
|
|
||||||
&st($c0,&QWPw(14,$rp));
|
|
||||||
&st($c1,&QWPw(15,$rp));
|
|
||||||
|
|
||||||
&FR($c0,$c1,$c2);
|
|
||||||
|
|
||||||
&ld($reg_s0,&swtmp(0));
|
|
||||||
&ld($reg_s1,&swtmp(1));
|
|
||||||
&stack_pop(2);
|
|
||||||
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,113 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub bn_sqr_words
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local($cc,$a,$b,$r,$couny);
|
|
||||||
|
|
||||||
&init_pool(3);
|
|
||||||
($cc)=GR("r0");
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$count=&wparam(2);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
&sub($count,4,$count);
|
|
||||||
&mov("zero",$cc);
|
|
||||||
&br(&label("finish"));
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
|
|
||||||
($a0,$r0)=&NR(2);
|
|
||||||
&ld($a0,&QWPw(0,$ap));
|
|
||||||
&ld($r0,&QWPw(0,$rp));
|
|
||||||
|
|
||||||
$a=<<'EOF';
|
|
||||||
##########################################################
|
|
||||||
&set_label("loop");
|
|
||||||
|
|
||||||
($a1)=&NR(1); &ld($a1,&QWPw(1,$ap));
|
|
||||||
($b1)=&NR(1); &ld($b1,&QWPw(1,$bp));
|
|
||||||
($a2)=&NR(1); &ld($a2,&QWPw(2,$ap));
|
|
||||||
($b2)=&NR(1); &ld($b2,&QWPw(2,$bp));
|
|
||||||
($a3)=&NR(1); &ld($a3,&QWPw(3,$ap));
|
|
||||||
($b3)=&NR(1); &ld($b3,&QWPw(3,$bp));
|
|
||||||
|
|
||||||
($o0,$t0)=&NR(2);
|
|
||||||
&add($a0,$b0,$o0);
|
|
||||||
&cmpult($o0,$b0,$t0);
|
|
||||||
&add($o0,$cc,$o0);
|
|
||||||
&cmpult($o0,$cc,$cc);
|
|
||||||
&add($cc,$t0,$cc); &FR($t0);
|
|
||||||
|
|
||||||
($t1,$o1)=&NR(2);
|
|
||||||
|
|
||||||
&add($a1,$b1,$o1); &FR($a1);
|
|
||||||
&cmpult($o1,$b1,$t1); &FR($b1);
|
|
||||||
&add($o1,$cc,$o1);
|
|
||||||
&cmpult($o1,$cc,$cc);
|
|
||||||
&add($cc,$t1,$cc); &FR($t1);
|
|
||||||
|
|
||||||
($t2,$o2)=&NR(2);
|
|
||||||
|
|
||||||
&add($a2,$b2,$o2); &FR($a2);
|
|
||||||
&cmpult($o2,$b2,$t2); &FR($b2);
|
|
||||||
&add($o2,$cc,$o2);
|
|
||||||
&cmpult($o2,$cc,$cc);
|
|
||||||
&add($cc,$t2,$cc); &FR($t2);
|
|
||||||
|
|
||||||
($t3,$o3)=&NR(2);
|
|
||||||
|
|
||||||
&add($a3,$b3,$o3); &FR($a3);
|
|
||||||
&cmpult($o3,$b3,$t3); &FR($b3);
|
|
||||||
&add($o3,$cc,$o3);
|
|
||||||
&cmpult($o3,$cc,$cc);
|
|
||||||
&add($cc,$t3,$cc); &FR($t3);
|
|
||||||
|
|
||||||
&st($o0,&QWPw(0,$rp)); &FR($o0);
|
|
||||||
&st($o1,&QWPw(0,$rp)); &FR($o1);
|
|
||||||
&st($o2,&QWPw(0,$rp)); &FR($o2);
|
|
||||||
&st($o3,&QWPw(0,$rp)); &FR($o3);
|
|
||||||
|
|
||||||
&sub($count,4,$count); # count-=4
|
|
||||||
&add($ap,4*$QWS,$ap); # count+=4
|
|
||||||
&add($bp,4*$QWS,$bp); # count+=4
|
|
||||||
&add($rp,4*$QWS,$rp); # count+=4
|
|
||||||
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
&ld($a0,&QWPw(0,$ap));
|
|
||||||
&ld($b0,&QWPw(0,$bp));
|
|
||||||
&br(&label("loop"));
|
|
||||||
EOF
|
|
||||||
##################################################
|
|
||||||
# Do the last 0..3 words
|
|
||||||
|
|
||||||
&set_label("last_loop");
|
|
||||||
|
|
||||||
&ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a
|
|
||||||
&mul($a0,$a0,($l0)=&NR(1));
|
|
||||||
&add($ap,$QWS,$ap);
|
|
||||||
&add($rp,2*$QWS,$rp);
|
|
||||||
&sub($count,1,$count);
|
|
||||||
&muh($a0,$a0,($h0)=&NR(1)); &FR($a0);
|
|
||||||
&st($l0,&QWPw(-2,$rp)); &FR($l0);
|
|
||||||
&st($h0,&QWPw(-1,$rp)); &FR($h0);
|
|
||||||
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
&function_end_A($name);
|
|
||||||
|
|
||||||
######################################################
|
|
||||||
&set_label("finish");
|
|
||||||
&add($count,4,$count);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
|
|
||||||
&set_label("end");
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,109 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub sqr_add_c
|
|
||||||
{
|
|
||||||
local($a,$c0,$c1,$c2)=@_;
|
|
||||||
local($l1,$h1,$t1,$t2);
|
|
||||||
|
|
||||||
&mul($a,$a,($l1)=&NR(1));
|
|
||||||
&muh($a,$a,($h1)=&NR(1));
|
|
||||||
&add($c0,$l1,$c0);
|
|
||||||
&add($c1,$h1,$c1);
|
|
||||||
&cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1);
|
|
||||||
&cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1);
|
|
||||||
&add($c1,$t1,$c1); &FR($t1);
|
|
||||||
&add($c2,$t2,$c2); &FR($t2);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub sqr_add_c2
|
|
||||||
{
|
|
||||||
local($a,$b,$c0,$c1,$c2)=@_;
|
|
||||||
local($l1,$h1,$t1,$t2);
|
|
||||||
|
|
||||||
&mul($a,$b,($l1)=&NR(1));
|
|
||||||
&muh($a,$b,($h1)=&NR(1));
|
|
||||||
&cmplt($l1,"zero",($lc1)=&NR(1));
|
|
||||||
&cmplt($h1,"zero",($hc1)=&NR(1));
|
|
||||||
&add($l1,$l1,$l1);
|
|
||||||
&add($h1,$h1,$h1);
|
|
||||||
&add($h1,$lc1,$h1); &FR($lc1);
|
|
||||||
&add($c2,$hc1,$c2); &FR($hc1);
|
|
||||||
|
|
||||||
&add($c0,$l1,$c0);
|
|
||||||
&add($c1,$h1,$c1);
|
|
||||||
&cmpult($c0,$l1,($lc1)=&NR(1)); &FR($l1);
|
|
||||||
&cmpult($c1,$h1,($hc1)=&NR(1)); &FR($h1);
|
|
||||||
|
|
||||||
&add($c1,$lc1,$c1); &FR($lc1);
|
|
||||||
&add($c2,$hc1,$c2); &FR($hc1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub bn_sqr_comba4
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local(@a,@b,$r,$c0,$c1,$c2);
|
|
||||||
|
|
||||||
$cnt=1;
|
|
||||||
&init_pool(2);
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
|
|
||||||
&ld(($a[0])=&NR(1),&QWPw(0,$ap));
|
|
||||||
&ld(($a[1])=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($a[2])=&NR(1),&QWPw(2,$ap));
|
|
||||||
&ld(($a[3])=&NR(1),&QWPw(3,$ap)); &FR($ap);
|
|
||||||
|
|
||||||
($c0,$c1,$c2)=&NR(3);
|
|
||||||
|
|
||||||
&mov("zero",$c2);
|
|
||||||
&mul($a[0],$a[0],$c0);
|
|
||||||
&muh($a[0],$a[0],$c1);
|
|
||||||
&st($c0,&QWPw(0,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[0],$a[1],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(1,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[1],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[2],$a[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(2,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[3],$a[0],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[2],$a[1],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(3,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[2],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[3],$a[1],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(4,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[3],$a[2],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(5,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[3],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(6,$rp));
|
|
||||||
&st($c1,&QWPw(7,$rp));
|
|
||||||
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,132 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub bn_sqr_comba8
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local(@a,@b,$r,$c0,$c1,$c2);
|
|
||||||
|
|
||||||
$cnt=1;
|
|
||||||
&init_pool(2);
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
|
|
||||||
&ld(($a[0])=&NR(1),&QWPw(0,$ap));
|
|
||||||
&ld(($a[1])=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($a[2])=&NR(1),&QWPw(2,$ap));
|
|
||||||
&ld(($a[3])=&NR(1),&QWPw(3,$ap));
|
|
||||||
&ld(($a[4])=&NR(1),&QWPw(4,$ap));
|
|
||||||
&ld(($a[5])=&NR(1),&QWPw(5,$ap));
|
|
||||||
&ld(($a[6])=&NR(1),&QWPw(6,$ap));
|
|
||||||
&ld(($a[7])=&NR(1),&QWPw(7,$ap)); &FR($ap);
|
|
||||||
|
|
||||||
($c0,$c1,$c2)=&NR(3);
|
|
||||||
|
|
||||||
&mov("zero",$c2);
|
|
||||||
&mul($a[0],$a[0],$c0);
|
|
||||||
&muh($a[0],$a[0],$c1);
|
|
||||||
&st($c0,&QWPw(0,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[1],$a[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(1,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[1],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[2],$a[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(2,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[2],$a[1],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[3],$a[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(3,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[2],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[3],$a[1],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[4],$a[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(4,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[3],$a[2],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[4],$a[1],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[5],$a[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(5,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[3],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[4],$a[2],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[5],$a[1],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[6],$a[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(6,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[4],$a[3],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[5],$a[2],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[6],$a[1],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[7],$a[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(7,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[4],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[5],$a[3],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[6],$a[2],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[7],$a[1],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(8,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[5],$a[4],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[6],$a[3],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[7],$a[2],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(9,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[5],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[6],$a[4],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[7],$a[3],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(10,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[6],$a[5],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[7],$a[4],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(11,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[6],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[7],$a[5],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(12,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[7],$a[6],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(13,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[7],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(14,$rp));
|
|
||||||
&st($c1,&QWPw(15,$rp));
|
|
||||||
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,108 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub bn_sub_words
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local($cc,$a,$b,$r);
|
|
||||||
|
|
||||||
&init_pool(4);
|
|
||||||
($cc)=GR("r0");
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$bp=&wparam(2);
|
|
||||||
$count=&wparam(3);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
&sub($count,4,$count);
|
|
||||||
&mov("zero",$cc);
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
|
|
||||||
($a0,$b0)=&NR(2);
|
|
||||||
&ld($a0,&QWPw(0,$ap));
|
|
||||||
&ld($b0,&QWPw(0,$bp));
|
|
||||||
|
|
||||||
##########################################################
|
|
||||||
&set_label("loop");
|
|
||||||
|
|
||||||
($a1,$tmp,$b1,$a2,$b2,$a3,$b3,$o0)=&NR(8);
|
|
||||||
&ld($a1,&QWPw(1,$ap));
|
|
||||||
&cmpult($a0,$b0,$tmp); # will we borrow?
|
|
||||||
&ld($b1,&QWPw(1,$bp));
|
|
||||||
&sub($a0,$b0,$a0); # do the subtract
|
|
||||||
&ld($a2,&QWPw(2,$ap));
|
|
||||||
&cmpult($a0,$cc,$b0); # will we borrow?
|
|
||||||
&ld($b2,&QWPw(2,$bp));
|
|
||||||
&sub($a0,$cc,$o0); # will we borrow?
|
|
||||||
&ld($a3,&QWPw(3,$ap));
|
|
||||||
&add($b0,$tmp,$cc); ($t1,$o1)=&NR(2); &FR($tmp);
|
|
||||||
|
|
||||||
&cmpult($a1,$b1,$t1); # will we borrow?
|
|
||||||
&sub($a1,$b1,$a1); # do the subtract
|
|
||||||
&ld($b3,&QWPw(3,$bp));
|
|
||||||
&cmpult($a1,$cc,$b1); # will we borrow?
|
|
||||||
&sub($a1,$cc,$o1); # will we borrow?
|
|
||||||
&add($b1,$t1,$cc); ($tmp,$o2)=&NR(2); &FR($t1,$a1,$b1);
|
|
||||||
|
|
||||||
&cmpult($a2,$b2,$tmp); # will we borrow?
|
|
||||||
&sub($a2,$b2,$a2); # do the subtract
|
|
||||||
&st($o0,&QWPw(0,$rp)); &FR($o0); # save
|
|
||||||
&cmpult($a2,$cc,$b2); # will we borrow?
|
|
||||||
&sub($a2,$cc,$o2); # will we borrow?
|
|
||||||
&add($b2,$tmp,$cc); ($t3,$o3)=&NR(2); &FR($tmp,$a2,$b2);
|
|
||||||
|
|
||||||
&cmpult($a3,$b3,$t3); # will we borrow?
|
|
||||||
&sub($a3,$b3,$a3); # do the subtract
|
|
||||||
&st($o1,&QWPw(1,$rp)); &FR($o1);
|
|
||||||
&cmpult($a3,$cc,$b3); # will we borrow?
|
|
||||||
&sub($a3,$cc,$o3); # will we borrow?
|
|
||||||
&add($b3,$t3,$cc); &FR($t3,$a3,$b3);
|
|
||||||
|
|
||||||
&st($o2,&QWPw(2,$rp)); &FR($o2);
|
|
||||||
&sub($count,4,$count); # count-=4
|
|
||||||
&st($o3,&QWPw(3,$rp)); &FR($o3);
|
|
||||||
&add($ap,4*$QWS,$ap); # count+=4
|
|
||||||
&add($bp,4*$QWS,$bp); # count+=4
|
|
||||||
&add($rp,4*$QWS,$rp); # count+=4
|
|
||||||
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
&ld($a0,&QWPw(0,$ap));
|
|
||||||
&ld($b0,&QWPw(0,$bp));
|
|
||||||
&br(&label("loop"));
|
|
||||||
##################################################
|
|
||||||
# Do the last 0..3 words
|
|
||||||
|
|
||||||
&set_label("last_loop");
|
|
||||||
|
|
||||||
&ld($a0,&QWPw(0,$ap)); # get a
|
|
||||||
&ld($b0,&QWPw(0,$bp)); # get b
|
|
||||||
&cmpult($a0,$b0,$tmp); # will we borrow?
|
|
||||||
&sub($a0,$b0,$a0); # do the subtract
|
|
||||||
&cmpult($a0,$cc,$b0); # will we borrow?
|
|
||||||
&sub($a0,$cc,$a0); # will we borrow?
|
|
||||||
&st($a0,&QWPw(0,$rp)); # save
|
|
||||||
&add($b0,$tmp,$cc); # add the borrows
|
|
||||||
|
|
||||||
&add($ap,$QWS,$ap);
|
|
||||||
&add($bp,$QWS,$bp);
|
|
||||||
&add($rp,$QWS,$rp);
|
|
||||||
&sub($count,1,$count);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
&function_end_A($name);
|
|
||||||
|
|
||||||
######################################################
|
|
||||||
&set_label("finish");
|
|
||||||
&add($count,4,$count);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
|
|
||||||
&FR($a0,$b0);
|
|
||||||
&set_label("end");
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,118 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub bn_add_words
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local($cc,$a,$b,$r);
|
|
||||||
|
|
||||||
&init_pool(4);
|
|
||||||
($cc)=GR("r0");
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$bp=&wparam(2);
|
|
||||||
$count=&wparam(3);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
&sub($count,4,$count);
|
|
||||||
&mov("zero",$cc);
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
|
|
||||||
($a0,$b0)=&NR(2);
|
|
||||||
|
|
||||||
##########################################################
|
|
||||||
&set_label("loop");
|
|
||||||
|
|
||||||
&ld(($a0)=&NR(1),&QWPw(0,$ap));
|
|
||||||
&ld(($b0)=&NR(1),&QWPw(0,$bp));
|
|
||||||
&ld(($a1)=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($b1)=&NR(1),&QWPw(1,$bp));
|
|
||||||
|
|
||||||
($o0,$t0)=&NR(2);
|
|
||||||
&add($a0,$b0,$o0);
|
|
||||||
&ld(($a2)=&NR(1),&QWPw(2,$ap));
|
|
||||||
&cmpult($o0,$b0,$t0);
|
|
||||||
&add($o0,$cc,$o0);
|
|
||||||
&cmpult($o0,$cc,$cc);
|
|
||||||
&ld(($b2)=&NR(1),&QWPw(2,$bp));
|
|
||||||
&add($cc,$t0,$cc); &FR($t0);
|
|
||||||
|
|
||||||
($t1,$o1)=&NR(2);
|
|
||||||
|
|
||||||
&add($a1,$b1,$o1); &FR($a1);
|
|
||||||
&cmpult($o1,$b1,$t1); &FR($b1);
|
|
||||||
&add($o1,$cc,$o1);
|
|
||||||
&cmpult($o1,$cc,$cc);
|
|
||||||
&ld(($a3)=&NR(1),&QWPw(3,$ap));
|
|
||||||
&add($cc,$t1,$cc); &FR($t1);
|
|
||||||
|
|
||||||
($t2,$o2)=&NR(2);
|
|
||||||
|
|
||||||
&add($a2,$b2,$o2); &FR($a2);
|
|
||||||
&cmpult($o2,$b2,$t2); &FR($b2);
|
|
||||||
&add($o2,$cc,$o2);
|
|
||||||
&cmpult($o2,$cc,$cc);
|
|
||||||
&ld(($b3)=&NR(1),&QWPw(3,$bp));
|
|
||||||
&st($o0,&QWPw(0,$rp)); &FR($o0);
|
|
||||||
&add($cc,$t2,$cc); &FR($t2);
|
|
||||||
|
|
||||||
($t3,$o3)=&NR(2);
|
|
||||||
|
|
||||||
&st($o1,&QWPw(0,$rp)); &FR($o1);
|
|
||||||
&add($a3,$b3,$o3); &FR($a3);
|
|
||||||
&cmpult($o3,$b3,$t3); &FR($b3);
|
|
||||||
&add($o3,$cc,$o3);
|
|
||||||
&st($o2,&QWPw(0,$rp)); &FR($o2);
|
|
||||||
&cmpult($o3,$cc,$cc);
|
|
||||||
&st($o3,&QWPw(0,$rp)); &FR($o3);
|
|
||||||
&add($cc,$t3,$cc); &FR($t3);
|
|
||||||
|
|
||||||
|
|
||||||
&sub($count,4,$count); # count-=4
|
|
||||||
&add($ap,4*$QWS,$ap); # count+=4
|
|
||||||
&add($bp,4*$QWS,$bp); # count+=4
|
|
||||||
&add($rp,4*$QWS,$rp); # count+=4
|
|
||||||
|
|
||||||
###
|
|
||||||
&bge($count,&label("loop"));
|
|
||||||
###
|
|
||||||
&br(&label("finish"));
|
|
||||||
##################################################
|
|
||||||
# Do the last 0..3 words
|
|
||||||
|
|
||||||
($t0,$o0)=&NR(2);
|
|
||||||
&set_label("last_loop");
|
|
||||||
|
|
||||||
&ld($a0,&QWPw(0,$ap)); # get a
|
|
||||||
&ld($b0,&QWPw(0,$bp)); # get b
|
|
||||||
&add($ap,$QWS,$ap);
|
|
||||||
&add($bp,$QWS,$bp);
|
|
||||||
&add($a0,$b0,$o0);
|
|
||||||
&sub($count,1,$count);
|
|
||||||
&cmpult($o0,$b0,$t0); # will we borrow?
|
|
||||||
&add($o0,$cc,$o0); # will we borrow?
|
|
||||||
&cmpult($o0,$cc,$cc); # will we borrow?
|
|
||||||
&add($rp,$QWS,$rp);
|
|
||||||
&st($o0,&QWPw(-1,$rp)); # save
|
|
||||||
&add($cc,$t0,$cc); # add the borrows
|
|
||||||
|
|
||||||
###
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
&function_end_A($name);
|
|
||||||
|
|
||||||
######################################################
|
|
||||||
&set_label("finish");
|
|
||||||
&add($count,4,$count);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
|
|
||||||
&FR($o0,$t0,$a0,$b0);
|
|
||||||
&set_label("end");
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,144 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
|
|
||||||
sub bn_div_words
|
|
||||||
{
|
|
||||||
local($data)=<<'EOF';
|
|
||||||
#
|
|
||||||
# What follows was taken directly from the C compiler with a few
|
|
||||||
# hacks to redo the lables.
|
|
||||||
#
|
|
||||||
.text
|
|
||||||
.set noreorder
|
|
||||||
.set volatile
|
|
||||||
.align 3
|
|
||||||
.globl bn_div_words
|
|
||||||
.ent bn_div_words
|
|
||||||
bn_div_words
|
|
||||||
ldgp $29,0($27)
|
|
||||||
bn_div_words.ng:
|
|
||||||
lda $30,-48($30)
|
|
||||||
.frame $30,48,$26,0
|
|
||||||
stq $26,0($30)
|
|
||||||
stq $9,8($30)
|
|
||||||
stq $10,16($30)
|
|
||||||
stq $11,24($30)
|
|
||||||
stq $12,32($30)
|
|
||||||
stq $13,40($30)
|
|
||||||
.mask 0x4003e00,-48
|
|
||||||
.prologue 1
|
|
||||||
bis $16,$16,$9
|
|
||||||
bis $17,$17,$10
|
|
||||||
bis $18,$18,$11
|
|
||||||
bis $31,$31,$13
|
|
||||||
bis $31,2,$12
|
|
||||||
bne $11,$9119
|
|
||||||
lda $0,-1
|
|
||||||
br $31,$9136
|
|
||||||
.align 4
|
|
||||||
$9119:
|
|
||||||
bis $11,$11,$16
|
|
||||||
jsr $26,BN_num_bits_word
|
|
||||||
ldgp $29,0($26)
|
|
||||||
subq $0,64,$1
|
|
||||||
beq $1,$9120
|
|
||||||
bis $31,1,$1
|
|
||||||
sll $1,$0,$1
|
|
||||||
cmpule $9,$1,$1
|
|
||||||
bne $1,$9120
|
|
||||||
# lda $16,_IO_stderr_
|
|
||||||
# lda $17,$C32
|
|
||||||
# bis $0,$0,$18
|
|
||||||
# jsr $26,fprintf
|
|
||||||
# ldgp $29,0($26)
|
|
||||||
jsr $26,abort
|
|
||||||
ldgp $29,0($26)
|
|
||||||
.align 4
|
|
||||||
$9120:
|
|
||||||
bis $31,64,$3
|
|
||||||
cmpult $9,$11,$2
|
|
||||||
subq $3,$0,$1
|
|
||||||
addl $1,$31,$0
|
|
||||||
subq $9,$11,$1
|
|
||||||
cmoveq $2,$1,$9
|
|
||||||
beq $0,$9122
|
|
||||||
zapnot $0,15,$2
|
|
||||||
subq $3,$0,$1
|
|
||||||
sll $11,$2,$11
|
|
||||||
sll $9,$2,$3
|
|
||||||
srl $10,$1,$1
|
|
||||||
sll $10,$2,$10
|
|
||||||
bis $3,$1,$9
|
|
||||||
$9122:
|
|
||||||
srl $11,32,$5
|
|
||||||
zapnot $11,15,$6
|
|
||||||
lda $7,-1
|
|
||||||
.align 5
|
|
||||||
$9123:
|
|
||||||
srl $9,32,$1
|
|
||||||
subq $1,$5,$1
|
|
||||||
bne $1,$9126
|
|
||||||
zapnot $7,15,$27
|
|
||||||
br $31,$9127
|
|
||||||
.align 4
|
|
||||||
$9126:
|
|
||||||
bis $9,$9,$24
|
|
||||||
bis $5,$5,$25
|
|
||||||
divqu $24,$25,$27
|
|
||||||
$9127:
|
|
||||||
srl $10,32,$4
|
|
||||||
.align 5
|
|
||||||
$9128:
|
|
||||||
mulq $27,$5,$1
|
|
||||||
subq $9,$1,$3
|
|
||||||
zapnot $3,240,$1
|
|
||||||
bne $1,$9129
|
|
||||||
mulq $6,$27,$2
|
|
||||||
sll $3,32,$1
|
|
||||||
addq $1,$4,$1
|
|
||||||
cmpule $2,$1,$2
|
|
||||||
bne $2,$9129
|
|
||||||
subq $27,1,$27
|
|
||||||
br $31,$9128
|
|
||||||
.align 4
|
|
||||||
$9129:
|
|
||||||
mulq $27,$6,$1
|
|
||||||
mulq $27,$5,$4
|
|
||||||
srl $1,32,$3
|
|
||||||
sll $1,32,$1
|
|
||||||
addq $4,$3,$4
|
|
||||||
cmpult $10,$1,$2
|
|
||||||
subq $10,$1,$10
|
|
||||||
addq $2,$4,$2
|
|
||||||
cmpult $9,$2,$1
|
|
||||||
bis $2,$2,$4
|
|
||||||
beq $1,$9134
|
|
||||||
addq $9,$11,$9
|
|
||||||
subq $27,1,$27
|
|
||||||
$9134:
|
|
||||||
subl $12,1,$12
|
|
||||||
subq $9,$4,$9
|
|
||||||
beq $12,$9124
|
|
||||||
sll $27,32,$13
|
|
||||||
sll $9,32,$2
|
|
||||||
srl $10,32,$1
|
|
||||||
sll $10,32,$10
|
|
||||||
bis $2,$1,$9
|
|
||||||
br $31,$9123
|
|
||||||
.align 4
|
|
||||||
$9124:
|
|
||||||
bis $13,$27,$0
|
|
||||||
$9136:
|
|
||||||
ldq $26,0($30)
|
|
||||||
ldq $9,8($30)
|
|
||||||
ldq $10,16($30)
|
|
||||||
ldq $11,24($30)
|
|
||||||
ldq $12,32($30)
|
|
||||||
ldq $13,40($30)
|
|
||||||
addq $30,48,$30
|
|
||||||
ret $31,($26),1
|
|
||||||
.end bn_div_words
|
|
||||||
EOF
|
|
||||||
&asm_add($data);
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,104 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub bn_mul_words
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local($cc,$a,$b,$r,$couny);
|
|
||||||
|
|
||||||
&init_pool(4);
|
|
||||||
($cc)=GR("r0");
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$count=&wparam(2);
|
|
||||||
$word=&wparam(3);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
&sub($count,4,$count);
|
|
||||||
&mov("zero",$cc);
|
|
||||||
###
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
|
|
||||||
($a0)=&NR(1); &ld($a0,&QWPw(0,$ap));
|
|
||||||
|
|
||||||
&set_label("loop");
|
|
||||||
|
|
||||||
($a1)=&NR(1); &ld($a1,&QWPw(1,$ap));
|
|
||||||
($a2)=&NR(1); &ld($a2,&QWPw(2,$ap));
|
|
||||||
|
|
||||||
&muh($a0,$word,($h0)=&NR(1)); &FR($a0);
|
|
||||||
($a3)=&NR(1); &ld($a3,&QWPw(3,$ap));
|
|
||||||
### wait 8
|
|
||||||
&mul($a0,$word,($l0)=&NR(1)); &FR($a0);
|
|
||||||
### wait 8
|
|
||||||
&muh($a1,$word,($h1)=&NR(1)); &FR($a1);
|
|
||||||
&add($l0,$cc,$l0); ### wait 8
|
|
||||||
&mul($a1,$word,($l1)=&NR(1)); &FR($a1);
|
|
||||||
&cmpult($l0,$cc,$cc); ### wait 8
|
|
||||||
&muh($a2,$word,($h2)=&NR(1)); &FR($a2);
|
|
||||||
&add($h0,$cc,$cc); &FR($h0); ### wait 8
|
|
||||||
&mul($a2,$word,($l2)=&NR(1)); &FR($a2);
|
|
||||||
&add($l1,$cc,$l1); ### wait 8
|
|
||||||
&st($l0,&QWPw(0,$rp)); &FR($l0);
|
|
||||||
&cmpult($l1,$cc,$cc); ### wait 8
|
|
||||||
&muh($a3,$word,($h3)=&NR(1)); &FR($a3);
|
|
||||||
&add($h1,$cc,$cc); &FR($h1);
|
|
||||||
&mul($a3,$word,($l3)=&NR(1)); &FR($a3);
|
|
||||||
&add($l2,$cc,$l2);
|
|
||||||
&st($l1,&QWPw(1,$rp)); &FR($l1);
|
|
||||||
&cmpult($l2,$cc,$cc);
|
|
||||||
&add($h2,$cc,$cc); &FR($h2);
|
|
||||||
&sub($count,4,$count); # count-=4
|
|
||||||
&st($l2,&QWPw(2,$rp)); &FR($l2);
|
|
||||||
&add($l3,$cc,$l3);
|
|
||||||
&cmpult($l3,$cc,$cc);
|
|
||||||
&add($bp,4*$QWS,$bp); # count+=4
|
|
||||||
&add($h3,$cc,$cc); &FR($h3);
|
|
||||||
&add($ap,4*$QWS,$ap); # count+=4
|
|
||||||
&st($l3,&QWPw(3,$rp)); &FR($l3);
|
|
||||||
&add($rp,4*$QWS,$rp); # count+=4
|
|
||||||
###
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
($a0)=&NR(1); &ld($a0,&QWPw(0,$ap));
|
|
||||||
&br(&label("finish"));
|
|
||||||
##################################################
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# Do the last 0..3 words
|
|
||||||
|
|
||||||
&set_label("last_loop");
|
|
||||||
|
|
||||||
&ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a
|
|
||||||
###
|
|
||||||
###
|
|
||||||
###
|
|
||||||
&muh($a0,$word,($h0)=&NR(1));
|
|
||||||
### Wait 8 for next mul issue
|
|
||||||
&mul($a0,$word,($l0)=&NR(1)); &FR($a0)
|
|
||||||
&add($ap,$QWS,$ap);
|
|
||||||
### Loose 12 until result is available
|
|
||||||
&add($rp,$QWS,$rp);
|
|
||||||
&sub($count,1,$count);
|
|
||||||
&add($l0,$cc,$l0);
|
|
||||||
###
|
|
||||||
&st($l0,&QWPw(-1,$rp)); &FR($l0);
|
|
||||||
&cmpult($l0,$cc,$cc);
|
|
||||||
&add($h0,$cc,$cc); &FR($h0);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
&function_end_A($name);
|
|
||||||
|
|
||||||
######################################################
|
|
||||||
&set_label("finish");
|
|
||||||
&add($count,4,$count);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
|
|
||||||
&set_label("end");
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,123 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub bn_mul_add_words
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local($cc,$a,$b,$r,$couny);
|
|
||||||
|
|
||||||
&init_pool(4);
|
|
||||||
($cc)=GR("r0");
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$count=&wparam(2);
|
|
||||||
$word=&wparam(3);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
&sub($count,4,$count);
|
|
||||||
&mov("zero",$cc);
|
|
||||||
###
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
|
|
||||||
&ld(($a0)=&NR(1),&QWPw(0,$ap));
|
|
||||||
|
|
||||||
$a=<<'EOF';
|
|
||||||
##########################################################
|
|
||||||
&set_label("loop");
|
|
||||||
|
|
||||||
&ld(($r0)=&NR(1),&QWPw(0,$rp));
|
|
||||||
&ld(($a1)=&NR(1),&QWPw(1,$ap));
|
|
||||||
&muh($a0,$word,($h0)=&NR(1));
|
|
||||||
&ld(($r1)=&NR(1),&QWPw(1,$rp));
|
|
||||||
&ld(($a2)=&NR(1),&QWPw(2,$ap));
|
|
||||||
###
|
|
||||||
&mul($a0,$word,($l0)=&NR(1)); &FR($a0);
|
|
||||||
&ld(($r2)=&NR(1),&QWPw(2,$rp));
|
|
||||||
&muh($a1,$word,($h1)=&NR(1));
|
|
||||||
&ld(($a3)=&NR(1),&QWPw(3,$ap));
|
|
||||||
&mul($a1,$word,($l1)=&NR(1)); &FR($a1);
|
|
||||||
&ld(($r3)=&NR(1),&QWPw(3,$rp));
|
|
||||||
&add($r0,$l0,$r0);
|
|
||||||
&add($r1,$l1,$r1);
|
|
||||||
&cmpult($r0,$l0,($t0)=&NR(1)); &FR($l0);
|
|
||||||
&cmpult($r1,$l1,($t1)=&NR(1)); &FR($l1);
|
|
||||||
&muh($a2,$word,($h2)=&NR(1));
|
|
||||||
&add($r0,$cc,$r0);
|
|
||||||
&add($h0,$t0,$h0); &FR($t0);
|
|
||||||
&cmpult($r0,$cc,$cc);
|
|
||||||
&add($h1,$t1,$h1); &FR($t1);
|
|
||||||
&add($h0,$cc,$cc); &FR($h0);
|
|
||||||
&mul($a2,$word,($l2)=&NR(1)); &FR($a2);
|
|
||||||
&add($r1,$cc,$r1);
|
|
||||||
&cmpult($r1,$cc,$cc);
|
|
||||||
&add($r2,$l2,$r2);
|
|
||||||
&add($h1,$cc,$cc); &FR($h1);
|
|
||||||
&cmpult($r2,$l2,($t2)=&NR(1)); &FR($l2);
|
|
||||||
&muh($a3,$word,($h3)=&NR(1));
|
|
||||||
&add($r2,$cc,$r2);
|
|
||||||
&st($r0,&QWPw(0,$rp)); &FR($r0);
|
|
||||||
&add($h2,$t2,$h2); &FR($t2);
|
|
||||||
&st($r1,&QWPw(1,$rp)); &FR($r1);
|
|
||||||
&cmpult($r2,$cc,$cc);
|
|
||||||
&mul($a3,$word,($l3)=&NR(1)); &FR($a3);
|
|
||||||
&add($h2,$cc,$cc); &FR($h2);
|
|
||||||
&st($r2,&QWPw(2,$rp)); &FR($r2);
|
|
||||||
&sub($count,4,$count); # count-=4
|
|
||||||
&add($rp,4*$QWS,$rp); # count+=4
|
|
||||||
&add($r3,$l3,$r3);
|
|
||||||
&add($ap,4*$QWS,$ap); # count+=4
|
|
||||||
&cmpult($r3,$l3,($t3)=&NR(1)); &FR($l3);
|
|
||||||
&add($r3,$cc,$r3);
|
|
||||||
&add($h3,$t3,$h3); &FR($t3);
|
|
||||||
&cmpult($r3,$cc,$cc);
|
|
||||||
&st($r3,&QWPw(-1,$rp)); &FR($r3);
|
|
||||||
&add($h3,$cc,$cc); &FR($h3);
|
|
||||||
|
|
||||||
###
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
&ld(($a0)=&NR(1),&QWPw(0,$ap));
|
|
||||||
&br(&label("loop"));
|
|
||||||
EOF
|
|
||||||
##################################################
|
|
||||||
# Do the last 0..3 words
|
|
||||||
|
|
||||||
&set_label("last_loop");
|
|
||||||
|
|
||||||
&ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a
|
|
||||||
&ld(($r0)=&NR(1),&QWPw(0,$rp)); # get b
|
|
||||||
###
|
|
||||||
###
|
|
||||||
&muh($a0,$word,($h0)=&NR(1)); &FR($a0);
|
|
||||||
### wait 8
|
|
||||||
&mul($a0,$word,($l0)=&NR(1)); &FR($a0);
|
|
||||||
&add($rp,$QWS,$rp);
|
|
||||||
&add($ap,$QWS,$ap);
|
|
||||||
&sub($count,1,$count);
|
|
||||||
### wait 3 until l0 is available
|
|
||||||
&add($r0,$l0,$r0);
|
|
||||||
###
|
|
||||||
&cmpult($r0,$l0,($t0)=&NR(1)); &FR($l0);
|
|
||||||
&add($r0,$cc,$r0);
|
|
||||||
&add($h0,$t0,$h0); &FR($t0);
|
|
||||||
&cmpult($r0,$cc,$cc);
|
|
||||||
&add($h0,$cc,$cc); &FR($h0);
|
|
||||||
|
|
||||||
&st($r0,&QWPw(-1,$rp)); &FR($r0);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
&function_end_A($name);
|
|
||||||
|
|
||||||
######################################################
|
|
||||||
&set_label("finish");
|
|
||||||
&add($count,4,$count);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
|
|
||||||
&set_label("end");
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,215 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
# upto
|
|
||||||
|
|
||||||
sub mul_add_c
|
|
||||||
{
|
|
||||||
local($a,$b,$c0,$c1,$c2)=@_;
|
|
||||||
local($l1,$h1,$t1,$t2);
|
|
||||||
|
|
||||||
&mul($a,$b,($l1)=&NR(1));
|
|
||||||
&muh($a,$b,($h1)=&NR(1));
|
|
||||||
&add($c0,$l1,$c0);
|
|
||||||
&cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1);
|
|
||||||
&add($t1,$h1,$h1); &FR($t1);
|
|
||||||
&add($c1,$h1,$c1);
|
|
||||||
&cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1);
|
|
||||||
&add($c2,$t2,$c2); &FR($t2);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub bn_mul_comba4
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local(@a,@b,$r,$c0,$c1,$c2);
|
|
||||||
|
|
||||||
$cnt=1;
|
|
||||||
&init_pool(3);
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$bp=&wparam(2);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
|
|
||||||
&ld(($a[0])=&NR(1),&QWPw(0,$ap));
|
|
||||||
&ld(($b[0])=&NR(1),&QWPw(0,$bp));
|
|
||||||
&ld(($a[1])=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($b[1])=&NR(1),&QWPw(1,$bp));
|
|
||||||
&mul($a[0],$b[0],($r00)=&NR(1));
|
|
||||||
&ld(($a[2])=&NR(1),&QWPw(2,$ap));
|
|
||||||
&ld(($b[2])=&NR(1),&QWPw(2,$bp));
|
|
||||||
&muh($a[0],$b[0],($r01)=&NR(1));
|
|
||||||
&FR($ap); &ld(($a[3])=&NR(1),&QWPw(3,$ap));
|
|
||||||
&FR($bp); &ld(($b[3])=&NR(1),&QWPw(3,$bp));
|
|
||||||
&mul($a[0],$b[1],($r02)=&NR(1));
|
|
||||||
|
|
||||||
($R,$H1,$H2)=&NR(3);
|
|
||||||
|
|
||||||
&st($r00,&QWPw(0,$rp)); &FR($r00);
|
|
||||||
|
|
||||||
&mov("zero",$R);
|
|
||||||
&mul($a[1],$b[0],($r03)=&NR(1));
|
|
||||||
|
|
||||||
&mov("zero",$H1);
|
|
||||||
&mov("zero",$H0);
|
|
||||||
&add($R,$r01,$R);
|
|
||||||
&muh($a[0],$b[1],($r04)=&NR(1));
|
|
||||||
&cmpult($R,$r01,($t01)=&NR(1)); &FR($r01);
|
|
||||||
&add($R,$r02,$R);
|
|
||||||
&add($H1,$t01,$H1) &FR($t01);
|
|
||||||
&muh($a[1],$b[0],($r05)=&NR(1));
|
|
||||||
&cmpult($R,$r02,($t02)=&NR(1)); &FR($r02);
|
|
||||||
&add($R,$r03,$R);
|
|
||||||
&add($H2,$t02,$H2) &FR($t02);
|
|
||||||
&mul($a[0],$b[2],($r06)=&NR(1));
|
|
||||||
&cmpult($R,$r03,($t03)=&NR(1)); &FR($r03);
|
|
||||||
&add($H1,$t03,$H1) &FR($t03);
|
|
||||||
&st($R,&QWPw(1,$rp));
|
|
||||||
&add($H1,$H2,$R);
|
|
||||||
|
|
||||||
&mov("zero",$H1);
|
|
||||||
&add($R,$r04,$R);
|
|
||||||
&mov("zero",$H2);
|
|
||||||
&mul($a[1],$b[1],($r07)=&NR(1));
|
|
||||||
&cmpult($R,$r04,($t04)=&NR(1)); &FR($r04);
|
|
||||||
&add($R,$r05,$R);
|
|
||||||
&add($H1,$t04,$H1) &FR($t04);
|
|
||||||
&mul($a[2],$b[0],($r08)=&NR(1));
|
|
||||||
&cmpult($R,$r05,($t05)=&NR(1)); &FR($r05);
|
|
||||||
&add($R,$r01,$R);
|
|
||||||
&add($H2,$t05,$H2) &FR($t05);
|
|
||||||
&muh($a[0],$b[2],($r09)=&NR(1));
|
|
||||||
&cmpult($R,$r06,($t06)=&NR(1)); &FR($r06);
|
|
||||||
&add($R,$r07,$R);
|
|
||||||
&add($H1,$t06,$H1) &FR($t06);
|
|
||||||
&muh($a[1],$b[1],($r10)=&NR(1));
|
|
||||||
&cmpult($R,$r07,($t07)=&NR(1)); &FR($r07);
|
|
||||||
&add($R,$r08,$R);
|
|
||||||
&add($H2,$t07,$H2) &FR($t07);
|
|
||||||
&muh($a[2],$b[0],($r11)=&NR(1));
|
|
||||||
&cmpult($R,$r08,($t08)=&NR(1)); &FR($r08);
|
|
||||||
&add($H1,$t08,$H1) &FR($t08);
|
|
||||||
&st($R,&QWPw(2,$rp));
|
|
||||||
&add($H1,$H2,$R);
|
|
||||||
|
|
||||||
&mov("zero",$H1);
|
|
||||||
&add($R,$r09,$R);
|
|
||||||
&mov("zero",$H2);
|
|
||||||
&mul($a[0],$b[3],($r12)=&NR(1));
|
|
||||||
&cmpult($R,$r09,($t09)=&NR(1)); &FR($r09);
|
|
||||||
&add($R,$r10,$R);
|
|
||||||
&add($H1,$t09,$H1) &FR($t09);
|
|
||||||
&mul($a[1],$b[2],($r13)=&NR(1));
|
|
||||||
&cmpult($R,$r10,($t10)=&NR(1)); &FR($r10);
|
|
||||||
&add($R,$r11,$R);
|
|
||||||
&add($H1,$t10,$H1) &FR($t10);
|
|
||||||
&mul($a[2],$b[1],($r14)=&NR(1));
|
|
||||||
&cmpult($R,$r11,($t11)=&NR(1)); &FR($r11);
|
|
||||||
&add($R,$r12,$R);
|
|
||||||
&add($H1,$t11,$H1) &FR($t11);
|
|
||||||
&mul($a[3],$b[0],($r15)=&NR(1));
|
|
||||||
&cmpult($R,$r12,($t12)=&NR(1)); &FR($r12);
|
|
||||||
&add($R,$r13,$R);
|
|
||||||
&add($H1,$t12,$H1) &FR($t12);
|
|
||||||
&muh($a[0],$b[3],($r16)=&NR(1));
|
|
||||||
&cmpult($R,$r13,($t13)=&NR(1)); &FR($r13);
|
|
||||||
&add($R,$r14,$R);
|
|
||||||
&add($H1,$t13,$H1) &FR($t13);
|
|
||||||
&muh($a[1],$b[2],($r17)=&NR(1));
|
|
||||||
&cmpult($R,$r14,($t14)=&NR(1)); &FR($r14);
|
|
||||||
&add($R,$r15,$R);
|
|
||||||
&add($H1,$t14,$H1) &FR($t14);
|
|
||||||
&muh($a[2],$b[1],($r18)=&NR(1));
|
|
||||||
&cmpult($R,$r15,($t15)=&NR(1)); &FR($r15);
|
|
||||||
&add($H1,$t15,$H1) &FR($t15);
|
|
||||||
&st($R,&QWPw(3,$rp));
|
|
||||||
&add($H1,$H2,$R);
|
|
||||||
|
|
||||||
&mov("zero",$H1);
|
|
||||||
&add($R,$r16,$R);
|
|
||||||
&mov("zero",$H2);
|
|
||||||
&muh($a[3],$b[0],($r19)=&NR(1));
|
|
||||||
&cmpult($R,$r16,($t16)=&NR(1)); &FR($r16);
|
|
||||||
&add($R,$r17,$R);
|
|
||||||
&add($H1,$t16,$H1) &FR($t16);
|
|
||||||
&mul($a[1],$b[3],($r20)=&NR(1));
|
|
||||||
&cmpult($R,$r17,($t17)=&NR(1)); &FR($r17);
|
|
||||||
&add($R,$r18,$R);
|
|
||||||
&add($H1,$t17,$H1) &FR($t17);
|
|
||||||
&mul($a[2],$b[2],($r21)=&NR(1));
|
|
||||||
&cmpult($R,$r18,($t18)=&NR(1)); &FR($r18);
|
|
||||||
&add($R,$r19,$R);
|
|
||||||
&add($H1,$t18,$H1) &FR($t18);
|
|
||||||
&mul($a[3],$b[1],($r22)=&NR(1));
|
|
||||||
&cmpult($R,$r19,($t19)=&NR(1)); &FR($r19);
|
|
||||||
&add($R,$r20,$R);
|
|
||||||
&add($H1,$t19,$H1) &FR($t19);
|
|
||||||
&muh($a[1],$b[3],($r23)=&NR(1));
|
|
||||||
&cmpult($R,$r20,($t20)=&NR(1)); &FR($r20);
|
|
||||||
&add($R,$r21,$R);
|
|
||||||
&add($H1,$t20,$H1) &FR($t20);
|
|
||||||
&muh($a[2],$b[2],($r24)=&NR(1));
|
|
||||||
&cmpult($R,$r21,($t21)=&NR(1)); &FR($r21);
|
|
||||||
&add($R,$r22,$R);
|
|
||||||
&add($H1,$t21,$H1) &FR($t21);
|
|
||||||
&muh($a[3],$b[1],($r25)=&NR(1));
|
|
||||||
&cmpult($R,$r22,($t22)=&NR(1)); &FR($r22);
|
|
||||||
&add($H1,$t22,$H1) &FR($t22);
|
|
||||||
&st($R,&QWPw(4,$rp));
|
|
||||||
&add($H1,$H2,$R);
|
|
||||||
|
|
||||||
&mov("zero",$H1);
|
|
||||||
&add($R,$r23,$R);
|
|
||||||
&mov("zero",$H2);
|
|
||||||
&mul($a[2],$b[3],($r26)=&NR(1));
|
|
||||||
&cmpult($R,$r23,($t23)=&NR(1)); &FR($r23);
|
|
||||||
&add($R,$r24,$R);
|
|
||||||
&add($H1,$t23,$H1) &FR($t23);
|
|
||||||
&mul($a[3],$b[2],($r27)=&NR(1));
|
|
||||||
&cmpult($R,$r24,($t24)=&NR(1)); &FR($r24);
|
|
||||||
&add($R,$r25,$R);
|
|
||||||
&add($H1,$t24,$H1) &FR($t24);
|
|
||||||
&muh($a[2],$b[3],($r28)=&NR(1));
|
|
||||||
&cmpult($R,$r25,($t25)=&NR(1)); &FR($r25);
|
|
||||||
&add($R,$r26,$R);
|
|
||||||
&add($H1,$t25,$H1) &FR($t25);
|
|
||||||
&muh($a[3],$b[2],($r29)=&NR(1));
|
|
||||||
&cmpult($R,$r26,($t26)=&NR(1)); &FR($r26);
|
|
||||||
&add($R,$r27,$R);
|
|
||||||
&add($H1,$t26,$H1) &FR($t26);
|
|
||||||
&mul($a[3],$b[3],($r30)=&NR(1));
|
|
||||||
&cmpult($R,$r27,($t27)=&NR(1)); &FR($r27);
|
|
||||||
&add($H1,$t27,$H1) &FR($t27);
|
|
||||||
&st($R,&QWPw(5,$rp));
|
|
||||||
&add($H1,$H2,$R);
|
|
||||||
|
|
||||||
&mov("zero",$H1);
|
|
||||||
&add($R,$r28,$R);
|
|
||||||
&mov("zero",$H2);
|
|
||||||
&muh($a[3],$b[3],($r31)=&NR(1));
|
|
||||||
&cmpult($R,$r28,($t28)=&NR(1)); &FR($r28);
|
|
||||||
&add($R,$r29,$R);
|
|
||||||
&add($H1,$t28,$H1) &FR($t28);
|
|
||||||
############
|
|
||||||
&cmpult($R,$r29,($t29)=&NR(1)); &FR($r29);
|
|
||||||
&add($R,$r30,$R);
|
|
||||||
&add($H1,$t29,$H1) &FR($t29);
|
|
||||||
############
|
|
||||||
&cmpult($R,$r30,($t30)=&NR(1)); &FR($r30);
|
|
||||||
&add($H1,$t30,$H1) &FR($t30);
|
|
||||||
&st($R,&QWPw(6,$rp));
|
|
||||||
&add($H1,$H2,$R);
|
|
||||||
|
|
||||||
&add($R,$r31,$R); &FR($r31);
|
|
||||||
&st($R,&QWPw(7,$rp));
|
|
||||||
|
|
||||||
&FR($R,$H1,$H2);
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,98 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub mul_add_c
|
|
||||||
{
|
|
||||||
local($a,$b,$c0,$c1,$c2)=@_;
|
|
||||||
local($l1,$h1,$t1,$t2);
|
|
||||||
|
|
||||||
print STDERR "count=$cnt\n"; $cnt++;
|
|
||||||
&mul($a,$b,($l1)=&NR(1));
|
|
||||||
&muh($a,$b,($h1)=&NR(1));
|
|
||||||
&add($c0,$l1,$c0);
|
|
||||||
&cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1);
|
|
||||||
&add($t1,$h1,$h1); &FR($t1);
|
|
||||||
&add($c1,$h1,$c1);
|
|
||||||
&cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1);
|
|
||||||
&add($c2,$t2,$c2); &FR($t2);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub bn_mul_comba4
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local(@a,@b,$r,$c0,$c1,$c2);
|
|
||||||
|
|
||||||
$cnt=1;
|
|
||||||
&init_pool(3);
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$bp=&wparam(2);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
|
|
||||||
&ld(($a[0])=&NR(1),&QWPw(0,$ap));
|
|
||||||
&ld(($b[0])=&NR(1),&QWPw(0,$bp));
|
|
||||||
&ld(($a[1])=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($b[1])=&NR(1),&QWPw(1,$bp));
|
|
||||||
&ld(($a[2])=&NR(1),&QWPw(2,$ap));
|
|
||||||
&ld(($b[2])=&NR(1),&QWPw(2,$bp));
|
|
||||||
&ld(($a[3])=&NR(1),&QWPw(3,$ap)); &FR($ap);
|
|
||||||
&ld(($b[3])=&NR(1),&QWPw(3,$bp)); &FR($bp);
|
|
||||||
|
|
||||||
($c0,$c1,$c2)=&NR(3);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
&mul($a[0],$b[0],$c0);
|
|
||||||
&muh($a[0],$b[0],$c1);
|
|
||||||
&st($c0,&QWPw(0,$rp)); &FR($c0); ($c0)=&NR($c0);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[1],$b[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(1,$rp)); &FR($c0); ($c0)=&NR($c0);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[1],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[0],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[2],$b[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(2,$rp)); &FR($c0); ($c0)=&NR($c0);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[3],$c0,$c1,$c2); &FR($a[0]);
|
|
||||||
&mul_add_c($a[1],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[2],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[3],$b[0],$c0,$c1,$c2); &FR($b[0]);
|
|
||||||
&st($c0,&QWPw(3,$rp)); &FR($c0); ($c0)=&NR($c0);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[1],$b[3],$c0,$c1,$c2); &FR($a[1]);
|
|
||||||
&mul_add_c($a[2],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[3],$b[1],$c0,$c1,$c2); &FR($b[1]);
|
|
||||||
&st($c0,&QWPw(4,$rp)); &FR($c0); ($c0)=&NR($c0);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[2],$b[3],$c0,$c1,$c2); &FR($a[2]);
|
|
||||||
&mul_add_c($a[3],$b[2],$c0,$c1,$c2); &FR($b[2]);
|
|
||||||
&st($c0,&QWPw(5,$rp)); &FR($c0); ($c0)=&NR($c0);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[3],$b[3],$c0,$c1,$c2); &FR($a[3],$b[3]);
|
|
||||||
&st($c0,&QWPw(6,$rp));
|
|
||||||
&st($c1,&QWPw(7,$rp));
|
|
||||||
|
|
||||||
&FR($c0,$c1,$c2);
|
|
||||||
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,177 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub bn_mul_comba8
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local(@a,@b,$r,$c0,$c1,$c2);
|
|
||||||
|
|
||||||
$cnt=1;
|
|
||||||
&init_pool(3);
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$bp=&wparam(2);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
|
|
||||||
&stack_push(2);
|
|
||||||
&ld(($a[0])=&NR(1),&QWPw(0,$ap));
|
|
||||||
&ld(($b[0])=&NR(1),&QWPw(0,$bp));
|
|
||||||
&st($reg_s0,&swtmp(0)); &FR($reg_s0);
|
|
||||||
&st($reg_s1,&swtmp(1)); &FR($reg_s1);
|
|
||||||
&ld(($a[1])=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($b[1])=&NR(1),&QWPw(1,$bp));
|
|
||||||
&ld(($a[2])=&NR(1),&QWPw(2,$ap));
|
|
||||||
&ld(($b[2])=&NR(1),&QWPw(2,$bp));
|
|
||||||
&ld(($a[3])=&NR(1),&QWPw(3,$ap));
|
|
||||||
&ld(($b[3])=&NR(1),&QWPw(3,$bp));
|
|
||||||
&ld(($a[4])=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($b[4])=&NR(1),&QWPw(1,$bp));
|
|
||||||
&ld(($a[5])=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($b[5])=&NR(1),&QWPw(1,$bp));
|
|
||||||
&ld(($a[6])=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($b[6])=&NR(1),&QWPw(1,$bp));
|
|
||||||
&ld(($a[7])=&NR(1),&QWPw(1,$ap)); &FR($ap);
|
|
||||||
&ld(($b[7])=&NR(1),&QWPw(1,$bp)); &FR($bp);
|
|
||||||
|
|
||||||
($c0,$c1,$c2)=&NR(3);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
&mul($a[0],$b[0],$c0);
|
|
||||||
&muh($a[0],$b[0],$c1);
|
|
||||||
&st($c0,&QWPw(0,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[1],$b[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(1,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[1],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[2],$b[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(2,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[3],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[1],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[2],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[3],$b[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(3,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[4],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[1],$b[3],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[2],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[3],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[4],$b[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(4,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[5],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[1],$b[4],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[2],$b[3],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[3],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[4],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[5],$b[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(5,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[6],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[1],$b[5],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[2],$b[4],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[3],$b[3],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[4],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[5],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[6],$b[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(6,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[0],$b[7],$c0,$c1,$c2); &FR($a[0]);
|
|
||||||
&mul_add_c($a[1],$b[6],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[2],$b[5],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[3],$b[4],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[4],$b[3],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[5],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[6],$b[1],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[7],$b[0],$c0,$c1,$c2); &FR($b[0]);
|
|
||||||
&st($c0,&QWPw(7,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[1],$b[7],$c0,$c1,$c2); &FR($a[1]);
|
|
||||||
&mul_add_c($a[2],$b[6],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[3],$b[5],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[4],$b[4],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[5],$b[3],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[6],$b[2],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[7],$b[1],$c0,$c1,$c2); &FR($b[1]);
|
|
||||||
&st($c0,&QWPw(8,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[2],$b[7],$c0,$c1,$c2); &FR($a[2]);
|
|
||||||
&mul_add_c($a[3],$b[6],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[4],$b[5],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[5],$b[4],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[6],$b[3],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[7],$b[2],$c0,$c1,$c2); &FR($b[2]);
|
|
||||||
&st($c0,&QWPw(9,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[3],$b[7],$c0,$c1,$c2); &FR($a[3]);
|
|
||||||
&mul_add_c($a[4],$b[6],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[5],$b[5],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[6],$b[4],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[7],$b[3],$c0,$c1,$c2); &FR($b[3]);
|
|
||||||
&st($c0,&QWPw(10,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[4],$b[7],$c0,$c1,$c2); &FR($a[4]);
|
|
||||||
&mul_add_c($a[5],$b[6],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[6],$b[5],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[7],$b[4],$c0,$c1,$c2); &FR($b[4]);
|
|
||||||
&st($c0,&QWPw(11,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[5],$b[7],$c0,$c1,$c2); &FR($a[5]);
|
|
||||||
&mul_add_c($a[6],$b[6],$c0,$c1,$c2);
|
|
||||||
&mul_add_c($a[7],$b[5],$c0,$c1,$c2); &FR($b[5]);
|
|
||||||
&st($c0,&QWPw(12,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[6],$b[7],$c0,$c1,$c2); &FR($a[6]);
|
|
||||||
&mul_add_c($a[7],$b[6],$c0,$c1,$c2); &FR($b[6]);
|
|
||||||
&st($c0,&QWPw(13,$rp)); &FR($c0); ($c0)=&NR(1);
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&mul_add_c($a[7],$b[7],$c0,$c1,$c2); &FR($a[7],$b[7]);
|
|
||||||
&st($c0,&QWPw(14,$rp));
|
|
||||||
&st($c1,&QWPw(15,$rp));
|
|
||||||
|
|
||||||
&FR($c0,$c1,$c2);
|
|
||||||
|
|
||||||
&ld($reg_s0,&swtmp(0));
|
|
||||||
&ld($reg_s1,&swtmp(1));
|
|
||||||
&stack_pop(2);
|
|
||||||
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,113 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub bn_sqr_words
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local($cc,$a,$b,$r,$couny);
|
|
||||||
|
|
||||||
&init_pool(3);
|
|
||||||
($cc)=GR("r0");
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$count=&wparam(2);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
&sub($count,4,$count);
|
|
||||||
&mov("zero",$cc);
|
|
||||||
&br(&label("finish"));
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
|
|
||||||
($a0,$r0)=&NR(2);
|
|
||||||
&ld($a0,&QWPw(0,$ap));
|
|
||||||
&ld($r0,&QWPw(0,$rp));
|
|
||||||
|
|
||||||
$a=<<'EOF';
|
|
||||||
##########################################################
|
|
||||||
&set_label("loop");
|
|
||||||
|
|
||||||
($a1)=&NR(1); &ld($a1,&QWPw(1,$ap));
|
|
||||||
($b1)=&NR(1); &ld($b1,&QWPw(1,$bp));
|
|
||||||
($a2)=&NR(1); &ld($a2,&QWPw(2,$ap));
|
|
||||||
($b2)=&NR(1); &ld($b2,&QWPw(2,$bp));
|
|
||||||
($a3)=&NR(1); &ld($a3,&QWPw(3,$ap));
|
|
||||||
($b3)=&NR(1); &ld($b3,&QWPw(3,$bp));
|
|
||||||
|
|
||||||
($o0,$t0)=&NR(2);
|
|
||||||
&add($a0,$b0,$o0);
|
|
||||||
&cmpult($o0,$b0,$t0);
|
|
||||||
&add($o0,$cc,$o0);
|
|
||||||
&cmpult($o0,$cc,$cc);
|
|
||||||
&add($cc,$t0,$cc); &FR($t0);
|
|
||||||
|
|
||||||
($t1,$o1)=&NR(2);
|
|
||||||
|
|
||||||
&add($a1,$b1,$o1); &FR($a1);
|
|
||||||
&cmpult($o1,$b1,$t1); &FR($b1);
|
|
||||||
&add($o1,$cc,$o1);
|
|
||||||
&cmpult($o1,$cc,$cc);
|
|
||||||
&add($cc,$t1,$cc); &FR($t1);
|
|
||||||
|
|
||||||
($t2,$o2)=&NR(2);
|
|
||||||
|
|
||||||
&add($a2,$b2,$o2); &FR($a2);
|
|
||||||
&cmpult($o2,$b2,$t2); &FR($b2);
|
|
||||||
&add($o2,$cc,$o2);
|
|
||||||
&cmpult($o2,$cc,$cc);
|
|
||||||
&add($cc,$t2,$cc); &FR($t2);
|
|
||||||
|
|
||||||
($t3,$o3)=&NR(2);
|
|
||||||
|
|
||||||
&add($a3,$b3,$o3); &FR($a3);
|
|
||||||
&cmpult($o3,$b3,$t3); &FR($b3);
|
|
||||||
&add($o3,$cc,$o3);
|
|
||||||
&cmpult($o3,$cc,$cc);
|
|
||||||
&add($cc,$t3,$cc); &FR($t3);
|
|
||||||
|
|
||||||
&st($o0,&QWPw(0,$rp)); &FR($o0);
|
|
||||||
&st($o1,&QWPw(0,$rp)); &FR($o1);
|
|
||||||
&st($o2,&QWPw(0,$rp)); &FR($o2);
|
|
||||||
&st($o3,&QWPw(0,$rp)); &FR($o3);
|
|
||||||
|
|
||||||
&sub($count,4,$count); # count-=4
|
|
||||||
&add($ap,4*$QWS,$ap); # count+=4
|
|
||||||
&add($bp,4*$QWS,$bp); # count+=4
|
|
||||||
&add($rp,4*$QWS,$rp); # count+=4
|
|
||||||
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
&ld($a0,&QWPw(0,$ap));
|
|
||||||
&ld($b0,&QWPw(0,$bp));
|
|
||||||
&br(&label("loop"));
|
|
||||||
EOF
|
|
||||||
##################################################
|
|
||||||
# Do the last 0..3 words
|
|
||||||
|
|
||||||
&set_label("last_loop");
|
|
||||||
|
|
||||||
&ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a
|
|
||||||
&mul($a0,$a0,($l0)=&NR(1));
|
|
||||||
&add($ap,$QWS,$ap);
|
|
||||||
&add($rp,2*$QWS,$rp);
|
|
||||||
&sub($count,1,$count);
|
|
||||||
&muh($a0,$a0,($h0)=&NR(1)); &FR($a0);
|
|
||||||
&st($l0,&QWPw(-2,$rp)); &FR($l0);
|
|
||||||
&st($h0,&QWPw(-1,$rp)); &FR($h0);
|
|
||||||
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
&function_end_A($name);
|
|
||||||
|
|
||||||
######################################################
|
|
||||||
&set_label("finish");
|
|
||||||
&add($count,4,$count);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
|
|
||||||
&set_label("end");
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,109 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub sqr_add_c
|
|
||||||
{
|
|
||||||
local($a,$c0,$c1,$c2)=@_;
|
|
||||||
local($l1,$h1,$t1,$t2);
|
|
||||||
|
|
||||||
&mul($a,$a,($l1)=&NR(1));
|
|
||||||
&muh($a,$a,($h1)=&NR(1));
|
|
||||||
&add($c0,$l1,$c0);
|
|
||||||
&add($c1,$h1,$c1);
|
|
||||||
&cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1);
|
|
||||||
&cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1);
|
|
||||||
&add($c1,$t1,$c1); &FR($t1);
|
|
||||||
&add($c2,$t2,$c2); &FR($t2);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub sqr_add_c2
|
|
||||||
{
|
|
||||||
local($a,$b,$c0,$c1,$c2)=@_;
|
|
||||||
local($l1,$h1,$t1,$t2);
|
|
||||||
|
|
||||||
&mul($a,$b,($l1)=&NR(1));
|
|
||||||
&muh($a,$b,($h1)=&NR(1));
|
|
||||||
&cmplt($l1,"zero",($lc1)=&NR(1));
|
|
||||||
&cmplt($h1,"zero",($hc1)=&NR(1));
|
|
||||||
&add($l1,$l1,$l1);
|
|
||||||
&add($h1,$h1,$h1);
|
|
||||||
&add($h1,$lc1,$h1); &FR($lc1);
|
|
||||||
&add($c2,$hc1,$c2); &FR($hc1);
|
|
||||||
|
|
||||||
&add($c0,$l1,$c0);
|
|
||||||
&add($c1,$h1,$c1);
|
|
||||||
&cmpult($c0,$l1,($lc1)=&NR(1)); &FR($l1);
|
|
||||||
&cmpult($c1,$h1,($hc1)=&NR(1)); &FR($h1);
|
|
||||||
|
|
||||||
&add($c1,$lc1,$c1); &FR($lc1);
|
|
||||||
&add($c2,$hc1,$c2); &FR($hc1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub bn_sqr_comba4
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local(@a,@b,$r,$c0,$c1,$c2);
|
|
||||||
|
|
||||||
$cnt=1;
|
|
||||||
&init_pool(2);
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
|
|
||||||
&ld(($a[0])=&NR(1),&QWPw(0,$ap));
|
|
||||||
&ld(($a[1])=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($a[2])=&NR(1),&QWPw(2,$ap));
|
|
||||||
&ld(($a[3])=&NR(1),&QWPw(3,$ap)); &FR($ap);
|
|
||||||
|
|
||||||
($c0,$c1,$c2)=&NR(3);
|
|
||||||
|
|
||||||
&mov("zero",$c2);
|
|
||||||
&mul($a[0],$a[0],$c0);
|
|
||||||
&muh($a[0],$a[0],$c1);
|
|
||||||
&st($c0,&QWPw(0,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[0],$a[1],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(1,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[1],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[2],$a[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(2,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[3],$a[0],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[2],$a[1],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(3,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[2],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[3],$a[1],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(4,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[3],$a[2],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(5,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[3],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(6,$rp));
|
|
||||||
&st($c1,&QWPw(7,$rp));
|
|
||||||
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,132 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub bn_sqr_comba8
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local(@a,@b,$r,$c0,$c1,$c2);
|
|
||||||
|
|
||||||
$cnt=1;
|
|
||||||
&init_pool(2);
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
|
|
||||||
&ld(($a[0])=&NR(1),&QWPw(0,$ap));
|
|
||||||
&ld(($a[1])=&NR(1),&QWPw(1,$ap));
|
|
||||||
&ld(($a[2])=&NR(1),&QWPw(2,$ap));
|
|
||||||
&ld(($a[3])=&NR(1),&QWPw(3,$ap));
|
|
||||||
&ld(($a[4])=&NR(1),&QWPw(4,$ap));
|
|
||||||
&ld(($a[5])=&NR(1),&QWPw(5,$ap));
|
|
||||||
&ld(($a[6])=&NR(1),&QWPw(6,$ap));
|
|
||||||
&ld(($a[7])=&NR(1),&QWPw(7,$ap)); &FR($ap);
|
|
||||||
|
|
||||||
($c0,$c1,$c2)=&NR(3);
|
|
||||||
|
|
||||||
&mov("zero",$c2);
|
|
||||||
&mul($a[0],$a[0],$c0);
|
|
||||||
&muh($a[0],$a[0],$c1);
|
|
||||||
&st($c0,&QWPw(0,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[1],$a[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(1,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[1],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[2],$a[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(2,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[2],$a[1],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[3],$a[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(3,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[2],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[3],$a[1],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[4],$a[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(4,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[3],$a[2],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[4],$a[1],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[5],$a[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(5,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[3],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[4],$a[2],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[5],$a[1],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[6],$a[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(6,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[4],$a[3],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[5],$a[2],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[6],$a[1],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[7],$a[0],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(7,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[4],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[5],$a[3],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[6],$a[2],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[7],$a[1],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(8,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[5],$a[4],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[6],$a[3],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[7],$a[2],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(9,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[5],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[6],$a[4],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[7],$a[3],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(10,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[6],$a[5],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[7],$a[4],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(11,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[6],$c0,$c1,$c2);
|
|
||||||
&sqr_add_c2($a[7],$a[5],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(12,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c2($a[7],$a[6],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(13,$rp));
|
|
||||||
($c0,$c1,$c2)=($c1,$c2,$c0);
|
|
||||||
&mov("zero",$c2);
|
|
||||||
|
|
||||||
&sqr_add_c($a[7],$c0,$c1,$c2);
|
|
||||||
&st($c0,&QWPw(14,$rp));
|
|
||||||
&st($c1,&QWPw(15,$rp));
|
|
||||||
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,108 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# alpha assember
|
|
||||||
|
|
||||||
sub bn_sub_words
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local($cc,$a,$b,$r);
|
|
||||||
|
|
||||||
&init_pool(4);
|
|
||||||
($cc)=GR("r0");
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$bp=&wparam(2);
|
|
||||||
$count=&wparam(3);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
&sub($count,4,$count);
|
|
||||||
&mov("zero",$cc);
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
|
|
||||||
($a0,$b0)=&NR(2);
|
|
||||||
&ld($a0,&QWPw(0,$ap));
|
|
||||||
&ld($b0,&QWPw(0,$bp));
|
|
||||||
|
|
||||||
##########################################################
|
|
||||||
&set_label("loop");
|
|
||||||
|
|
||||||
($a1,$tmp,$b1,$a2,$b2,$a3,$b3,$o0)=&NR(8);
|
|
||||||
&ld($a1,&QWPw(1,$ap));
|
|
||||||
&cmpult($a0,$b0,$tmp); # will we borrow?
|
|
||||||
&ld($b1,&QWPw(1,$bp));
|
|
||||||
&sub($a0,$b0,$a0); # do the subtract
|
|
||||||
&ld($a2,&QWPw(2,$ap));
|
|
||||||
&cmpult($a0,$cc,$b0); # will we borrow?
|
|
||||||
&ld($b2,&QWPw(2,$bp));
|
|
||||||
&sub($a0,$cc,$o0); # will we borrow?
|
|
||||||
&ld($a3,&QWPw(3,$ap));
|
|
||||||
&add($b0,$tmp,$cc); ($t1,$o1)=&NR(2); &FR($tmp);
|
|
||||||
|
|
||||||
&cmpult($a1,$b1,$t1); # will we borrow?
|
|
||||||
&sub($a1,$b1,$a1); # do the subtract
|
|
||||||
&ld($b3,&QWPw(3,$bp));
|
|
||||||
&cmpult($a1,$cc,$b1); # will we borrow?
|
|
||||||
&sub($a1,$cc,$o1); # will we borrow?
|
|
||||||
&add($b1,$t1,$cc); ($tmp,$o2)=&NR(2); &FR($t1,$a1,$b1);
|
|
||||||
|
|
||||||
&cmpult($a2,$b2,$tmp); # will we borrow?
|
|
||||||
&sub($a2,$b2,$a2); # do the subtract
|
|
||||||
&st($o0,&QWPw(0,$rp)); &FR($o0); # save
|
|
||||||
&cmpult($a2,$cc,$b2); # will we borrow?
|
|
||||||
&sub($a2,$cc,$o2); # will we borrow?
|
|
||||||
&add($b2,$tmp,$cc); ($t3,$o3)=&NR(2); &FR($tmp,$a2,$b2);
|
|
||||||
|
|
||||||
&cmpult($a3,$b3,$t3); # will we borrow?
|
|
||||||
&sub($a3,$b3,$a3); # do the subtract
|
|
||||||
&st($o1,&QWPw(1,$rp)); &FR($o1);
|
|
||||||
&cmpult($a3,$cc,$b3); # will we borrow?
|
|
||||||
&sub($a3,$cc,$o3); # will we borrow?
|
|
||||||
&add($b3,$t3,$cc); &FR($t3,$a3,$b3);
|
|
||||||
|
|
||||||
&st($o2,&QWPw(2,$rp)); &FR($o2);
|
|
||||||
&sub($count,4,$count); # count-=4
|
|
||||||
&st($o3,&QWPw(3,$rp)); &FR($o3);
|
|
||||||
&add($ap,4*$QWS,$ap); # count+=4
|
|
||||||
&add($bp,4*$QWS,$bp); # count+=4
|
|
||||||
&add($rp,4*$QWS,$rp); # count+=4
|
|
||||||
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
&ld($a0,&QWPw(0,$ap));
|
|
||||||
&ld($b0,&QWPw(0,$bp));
|
|
||||||
&br(&label("loop"));
|
|
||||||
##################################################
|
|
||||||
# Do the last 0..3 words
|
|
||||||
|
|
||||||
&set_label("last_loop");
|
|
||||||
|
|
||||||
&ld($a0,&QWPw(0,$ap)); # get a
|
|
||||||
&ld($b0,&QWPw(0,$bp)); # get b
|
|
||||||
&cmpult($a0,$b0,$tmp); # will we borrow?
|
|
||||||
&sub($a0,$b0,$a0); # do the subtract
|
|
||||||
&cmpult($a0,$cc,$b0); # will we borrow?
|
|
||||||
&sub($a0,$cc,$a0); # will we borrow?
|
|
||||||
&st($a0,&QWPw(0,$rp)); # save
|
|
||||||
&add($b0,$tmp,$cc); # add the borrows
|
|
||||||
|
|
||||||
&add($ap,$QWS,$ap);
|
|
||||||
&add($bp,$QWS,$bp);
|
|
||||||
&add($rp,$QWS,$rp);
|
|
||||||
&sub($count,1,$count);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
&function_end_A($name);
|
|
||||||
|
|
||||||
######################################################
|
|
||||||
&set_label("finish");
|
|
||||||
&add($count,4,$count);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
|
|
||||||
&FR($a0,$b0);
|
|
||||||
&set_label("end");
|
|
||||||
&function_end($name);
|
|
||||||
|
|
||||||
&fin_pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
@ -1,571 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# I have this in perl so I can use more usefull register names and then convert
|
|
||||||
# them into alpha registers.
|
|
||||||
#
|
|
||||||
|
|
||||||
$d=&data();
|
|
||||||
$d =~ s/CC/0/g;
|
|
||||||
$d =~ s/R1/1/g;
|
|
||||||
$d =~ s/R2/2/g;
|
|
||||||
$d =~ s/R3/3/g;
|
|
||||||
$d =~ s/R4/4/g;
|
|
||||||
$d =~ s/L1/5/g;
|
|
||||||
$d =~ s/L2/6/g;
|
|
||||||
$d =~ s/L3/7/g;
|
|
||||||
$d =~ s/L4/8/g;
|
|
||||||
$d =~ s/O1/22/g;
|
|
||||||
$d =~ s/O2/23/g;
|
|
||||||
$d =~ s/O3/24/g;
|
|
||||||
$d =~ s/O4/25/g;
|
|
||||||
$d =~ s/A1/20/g;
|
|
||||||
$d =~ s/A2/21/g;
|
|
||||||
$d =~ s/A3/27/g;
|
|
||||||
$d =~ s/A4/28/g;
|
|
||||||
if (0){
|
|
||||||
}
|
|
||||||
|
|
||||||
print $d;
|
|
||||||
|
|
||||||
sub data
|
|
||||||
{
|
|
||||||
local($data)=<<'EOF';
|
|
||||||
|
|
||||||
# DEC Alpha assember
|
|
||||||
# The bn_div_words is actually gcc output but the other parts are hand done.
|
|
||||||
# Thanks to tzeruch@ceddec.com for sending me the gcc output for
|
|
||||||
# bn_div_words.
|
|
||||||
# I've gone back and re-done most of routines.
|
|
||||||
# The key thing to remeber for the 164 CPU is that while a
|
|
||||||
# multiply operation takes 8 cycles, another one can only be issued
|
|
||||||
# after 4 cycles have elapsed. I've done modification to help
|
|
||||||
# improve this. Also, normally, a ld instruction will not be available
|
|
||||||
# for about 3 cycles.
|
|
||||||
.file 1 "bn_asm.c"
|
|
||||||
.set noat
|
|
||||||
gcc2_compiled.:
|
|
||||||
__gnu_compiled_c:
|
|
||||||
.text
|
|
||||||
.align 3
|
|
||||||
.globl bn_mul_add_words
|
|
||||||
.ent bn_mul_add_words
|
|
||||||
bn_mul_add_words:
|
|
||||||
bn_mul_add_words..ng:
|
|
||||||
.frame $30,0,$26,0
|
|
||||||
.prologue 0
|
|
||||||
.align 5
|
|
||||||
subq $18,4,$18
|
|
||||||
bis $31,$31,$CC
|
|
||||||
blt $18,$43 # if we are -1, -2, -3 or -4 goto tail code
|
|
||||||
ldq $A1,0($17) # 1 1
|
|
||||||
ldq $R1,0($16) # 1 1
|
|
||||||
.align 3
|
|
||||||
$42:
|
|
||||||
mulq $A1,$19,$L1 # 1 2 1 ######
|
|
||||||
ldq $A2,8($17) # 2 1
|
|
||||||
ldq $R2,8($16) # 2 1
|
|
||||||
umulh $A1,$19,$A1 # 1 2 ######
|
|
||||||
ldq $A3,16($17) # 3 1
|
|
||||||
ldq $R3,16($16) # 3 1
|
|
||||||
mulq $A2,$19,$L2 # 2 2 1 ######
|
|
||||||
ldq $A4,24($17) # 4 1
|
|
||||||
addq $R1,$L1,$R1 # 1 2 2
|
|
||||||
ldq $R4,24($16) # 4 1
|
|
||||||
umulh $A2,$19,$A2 # 2 2 ######
|
|
||||||
cmpult $R1,$L1,$O1 # 1 2 3 1
|
|
||||||
addq $A1,$O1,$A1 # 1 3 1
|
|
||||||
addq $R1,$CC,$R1 # 1 2 3 1
|
|
||||||
mulq $A3,$19,$L3 # 3 2 1 ######
|
|
||||||
cmpult $R1,$CC,$CC # 1 2 3 2
|
|
||||||
addq $R2,$L2,$R2 # 2 2 2
|
|
||||||
addq $A1,$CC,$CC # 1 3 2
|
|
||||||
cmpult $R2,$L2,$O2 # 2 2 3 1
|
|
||||||
addq $A2,$O2,$A2 # 2 3 1
|
|
||||||
umulh $A3,$19,$A3 # 3 2 ######
|
|
||||||
addq $R2,$CC,$R2 # 2 2 3 1
|
|
||||||
cmpult $R2,$CC,$CC # 2 2 3 2
|
|
||||||
subq $18,4,$18
|
|
||||||
mulq $A4,$19,$L4 # 4 2 1 ######
|
|
||||||
addq $A2,$CC,$CC # 2 3 2
|
|
||||||
addq $R3,$L3,$R3 # 3 2 2
|
|
||||||
addq $16,32,$16
|
|
||||||
cmpult $R3,$L3,$O3 # 3 2 3 1
|
|
||||||
stq $R1,-32($16) # 1 2 4
|
|
||||||
umulh $A4,$19,$A4 # 4 2 ######
|
|
||||||
addq $A3,$O3,$A3 # 3 3 1
|
|
||||||
addq $R3,$CC,$R3 # 3 2 3 1
|
|
||||||
stq $R2,-24($16) # 2 2 4
|
|
||||||
cmpult $R3,$CC,$CC # 3 2 3 2
|
|
||||||
stq $R3,-16($16) # 3 2 4
|
|
||||||
addq $R4,$L4,$R4 # 4 2 2
|
|
||||||
addq $A3,$CC,$CC # 3 3 2
|
|
||||||
cmpult $R4,$L4,$O4 # 4 2 3 1
|
|
||||||
addq $17,32,$17
|
|
||||||
addq $A4,$O4,$A4 # 4 3 1
|
|
||||||
addq $R4,$CC,$R4 # 4 2 3 1
|
|
||||||
cmpult $R4,$CC,$CC # 4 2 3 2
|
|
||||||
stq $R4,-8($16) # 4 2 4
|
|
||||||
addq $A4,$CC,$CC # 4 3 2
|
|
||||||
blt $18,$43
|
|
||||||
|
|
||||||
ldq $A1,0($17) # 1 1
|
|
||||||
ldq $R1,0($16) # 1 1
|
|
||||||
|
|
||||||
br $42
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
$45:
|
|
||||||
ldq $A1,0($17) # 4 1
|
|
||||||
ldq $R1,0($16) # 4 1
|
|
||||||
mulq $A1,$19,$L1 # 4 2 1
|
|
||||||
subq $18,1,$18
|
|
||||||
addq $16,8,$16
|
|
||||||
addq $17,8,$17
|
|
||||||
umulh $A1,$19,$A1 # 4 2
|
|
||||||
addq $R1,$L1,$R1 # 4 2 2
|
|
||||||
cmpult $R1,$L1,$O1 # 4 2 3 1
|
|
||||||
addq $A1,$O1,$A1 # 4 3 1
|
|
||||||
addq $R1,$CC,$R1 # 4 2 3 1
|
|
||||||
cmpult $R1,$CC,$CC # 4 2 3 2
|
|
||||||
addq $A1,$CC,$CC # 4 3 2
|
|
||||||
stq $R1,-8($16) # 4 2 4
|
|
||||||
bgt $18,$45
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
$43:
|
|
||||||
addq $18,4,$18
|
|
||||||
bgt $18,$45 # goto tail code
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
|
|
||||||
.end bn_mul_add_words
|
|
||||||
.align 3
|
|
||||||
.globl bn_mul_words
|
|
||||||
.ent bn_mul_words
|
|
||||||
bn_mul_words:
|
|
||||||
bn_mul_words..ng:
|
|
||||||
.frame $30,0,$26,0
|
|
||||||
.prologue 0
|
|
||||||
.align 5
|
|
||||||
subq $18,4,$18
|
|
||||||
bis $31,$31,$CC
|
|
||||||
blt $18,$143 # if we are -1, -2, -3 or -4 goto tail code
|
|
||||||
ldq $A1,0($17) # 1 1
|
|
||||||
.align 3
|
|
||||||
$142:
|
|
||||||
|
|
||||||
mulq $A1,$19,$L1 # 1 2 1 #####
|
|
||||||
ldq $A2,8($17) # 2 1
|
|
||||||
ldq $A3,16($17) # 3 1
|
|
||||||
umulh $A1,$19,$A1 # 1 2 #####
|
|
||||||
ldq $A4,24($17) # 4 1
|
|
||||||
mulq $A2,$19,$L2 # 2 2 1 #####
|
|
||||||
addq $L1,$CC,$L1 # 1 2 3 1
|
|
||||||
subq $18,4,$18
|
|
||||||
cmpult $L1,$CC,$CC # 1 2 3 2
|
|
||||||
umulh $A2,$19,$A2 # 2 2 #####
|
|
||||||
addq $A1,$CC,$CC # 1 3 2
|
|
||||||
addq $17,32,$17
|
|
||||||
addq $L2,$CC,$L2 # 2 2 3 1
|
|
||||||
mulq $A3,$19,$L3 # 3 2 1 #####
|
|
||||||
cmpult $L2,$CC,$CC # 2 2 3 2
|
|
||||||
addq $A2,$CC,$CC # 2 3 2
|
|
||||||
addq $16,32,$16
|
|
||||||
umulh $A3,$19,$A3 # 3 2 #####
|
|
||||||
stq $L1,-32($16) # 1 2 4
|
|
||||||
mulq $A4,$19,$L4 # 4 2 1 #####
|
|
||||||
addq $L3,$CC,$L3 # 3 2 3 1
|
|
||||||
stq $L2,-24($16) # 2 2 4
|
|
||||||
cmpult $L3,$CC,$CC # 3 2 3 2
|
|
||||||
umulh $A4,$19,$A4 # 4 2 #####
|
|
||||||
addq $A3,$CC,$CC # 3 3 2
|
|
||||||
stq $L3,-16($16) # 3 2 4
|
|
||||||
addq $L4,$CC,$L4 # 4 2 3 1
|
|
||||||
cmpult $L4,$CC,$CC # 4 2 3 2
|
|
||||||
|
|
||||||
addq $A4,$CC,$CC # 4 3 2
|
|
||||||
|
|
||||||
stq $L4,-8($16) # 4 2 4
|
|
||||||
|
|
||||||
blt $18,$143
|
|
||||||
|
|
||||||
ldq $A1,0($17) # 1 1
|
|
||||||
|
|
||||||
br $142
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
$145:
|
|
||||||
ldq $A1,0($17) # 4 1
|
|
||||||
mulq $A1,$19,$L1 # 4 2 1
|
|
||||||
subq $18,1,$18
|
|
||||||
umulh $A1,$19,$A1 # 4 2
|
|
||||||
addq $L1,$CC,$L1 # 4 2 3 1
|
|
||||||
addq $16,8,$16
|
|
||||||
cmpult $L1,$CC,$CC # 4 2 3 2
|
|
||||||
addq $17,8,$17
|
|
||||||
addq $A1,$CC,$CC # 4 3 2
|
|
||||||
stq $L1,-8($16) # 4 2 4
|
|
||||||
|
|
||||||
bgt $18,$145
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
$143:
|
|
||||||
addq $18,4,$18
|
|
||||||
bgt $18,$145 # goto tail code
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
|
|
||||||
.end bn_mul_words
|
|
||||||
.align 3
|
|
||||||
.globl bn_sqr_words
|
|
||||||
.ent bn_sqr_words
|
|
||||||
bn_sqr_words:
|
|
||||||
bn_sqr_words..ng:
|
|
||||||
.frame $30,0,$26,0
|
|
||||||
.prologue 0
|
|
||||||
|
|
||||||
subq $18,4,$18
|
|
||||||
blt $18,$543 # if we are -1, -2, -3 or -4 goto tail code
|
|
||||||
ldq $A1,0($17) # 1 1
|
|
||||||
.align 3
|
|
||||||
$542:
|
|
||||||
mulq $A1,$A1,$L1 ######
|
|
||||||
ldq $A2,8($17) # 1 1
|
|
||||||
subq $18,4
|
|
||||||
umulh $A1,$A1,$R1 ######
|
|
||||||
ldq $A3,16($17) # 1 1
|
|
||||||
mulq $A2,$A2,$L2 ######
|
|
||||||
ldq $A4,24($17) # 1 1
|
|
||||||
stq $L1,0($16) # r[0]
|
|
||||||
umulh $A2,$A2,$R2 ######
|
|
||||||
stq $R1,8($16) # r[1]
|
|
||||||
mulq $A3,$A3,$L3 ######
|
|
||||||
stq $L2,16($16) # r[0]
|
|
||||||
umulh $A3,$A3,$R3 ######
|
|
||||||
stq $R2,24($16) # r[1]
|
|
||||||
mulq $A4,$A4,$L4 ######
|
|
||||||
stq $L3,32($16) # r[0]
|
|
||||||
umulh $A4,$A4,$R4 ######
|
|
||||||
stq $R3,40($16) # r[1]
|
|
||||||
|
|
||||||
addq $16,64,$16
|
|
||||||
addq $17,32,$17
|
|
||||||
stq $L4,-16($16) # r[0]
|
|
||||||
stq $R4,-8($16) # r[1]
|
|
||||||
|
|
||||||
blt $18,$543
|
|
||||||
ldq $A1,0($17) # 1 1
|
|
||||||
br $542
|
|
||||||
|
|
||||||
$442:
|
|
||||||
ldq $A1,0($17) # a[0]
|
|
||||||
mulq $A1,$A1,$L1 # a[0]*w low part r2
|
|
||||||
addq $16,16,$16
|
|
||||||
addq $17,8,$17
|
|
||||||
subq $18,1,$18
|
|
||||||
umulh $A1,$A1,$R1 # a[0]*w high part r3
|
|
||||||
stq $L1,-16($16) # r[0]
|
|
||||||
stq $R1,-8($16) # r[1]
|
|
||||||
|
|
||||||
bgt $18,$442
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
$543:
|
|
||||||
addq $18,4,$18
|
|
||||||
bgt $18,$442 # goto tail code
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
.end bn_sqr_words
|
|
||||||
|
|
||||||
.align 3
|
|
||||||
.globl bn_add_words
|
|
||||||
.ent bn_add_words
|
|
||||||
bn_add_words:
|
|
||||||
bn_add_words..ng:
|
|
||||||
.frame $30,0,$26,0
|
|
||||||
.prologue 0
|
|
||||||
|
|
||||||
subq $19,4,$19
|
|
||||||
bis $31,$31,$CC # carry = 0
|
|
||||||
blt $19,$900
|
|
||||||
ldq $L1,0($17) # a[0]
|
|
||||||
ldq $R1,0($18) # b[1]
|
|
||||||
.align 3
|
|
||||||
$901:
|
|
||||||
addq $R1,$L1,$R1 # r=a+b;
|
|
||||||
ldq $L2,8($17) # a[1]
|
|
||||||
cmpult $R1,$L1,$O1 # did we overflow?
|
|
||||||
ldq $R2,8($18) # b[1]
|
|
||||||
addq $R1,$CC,$R1 # c+= overflow
|
|
||||||
ldq $L3,16($17) # a[2]
|
|
||||||
cmpult $R1,$CC,$CC # overflow?
|
|
||||||
ldq $R3,16($18) # b[2]
|
|
||||||
addq $CC,$O1,$CC
|
|
||||||
ldq $L4,24($17) # a[3]
|
|
||||||
addq $R2,$L2,$R2 # r=a+b;
|
|
||||||
ldq $R4,24($18) # b[3]
|
|
||||||
cmpult $R2,$L2,$O2 # did we overflow?
|
|
||||||
addq $R3,$L3,$R3 # r=a+b;
|
|
||||||
addq $R2,$CC,$R2 # c+= overflow
|
|
||||||
cmpult $R3,$L3,$O3 # did we overflow?
|
|
||||||
cmpult $R2,$CC,$CC # overflow?
|
|
||||||
addq $R4,$L4,$R4 # r=a+b;
|
|
||||||
addq $CC,$O2,$CC
|
|
||||||
cmpult $R4,$L4,$O4 # did we overflow?
|
|
||||||
addq $R3,$CC,$R3 # c+= overflow
|
|
||||||
stq $R1,0($16) # r[0]=c
|
|
||||||
cmpult $R3,$CC,$CC # overflow?
|
|
||||||
stq $R2,8($16) # r[1]=c
|
|
||||||
addq $CC,$O3,$CC
|
|
||||||
stq $R3,16($16) # r[2]=c
|
|
||||||
addq $R4,$CC,$R4 # c+= overflow
|
|
||||||
subq $19,4,$19 # loop--
|
|
||||||
cmpult $R4,$CC,$CC # overflow?
|
|
||||||
addq $17,32,$17 # a++
|
|
||||||
addq $CC,$O4,$CC
|
|
||||||
stq $R4,24($16) # r[3]=c
|
|
||||||
addq $18,32,$18 # b++
|
|
||||||
addq $16,32,$16 # r++
|
|
||||||
|
|
||||||
blt $19,$900
|
|
||||||
ldq $L1,0($17) # a[0]
|
|
||||||
ldq $R1,0($18) # b[1]
|
|
||||||
br $901
|
|
||||||
.align 4
|
|
||||||
$945:
|
|
||||||
ldq $L1,0($17) # a[0]
|
|
||||||
ldq $R1,0($18) # b[1]
|
|
||||||
addq $R1,$L1,$R1 # r=a+b;
|
|
||||||
subq $19,1,$19 # loop--
|
|
||||||
addq $R1,$CC,$R1 # c+= overflow
|
|
||||||
addq $17,8,$17 # a++
|
|
||||||
cmpult $R1,$L1,$O1 # did we overflow?
|
|
||||||
cmpult $R1,$CC,$CC # overflow?
|
|
||||||
addq $18,8,$18 # b++
|
|
||||||
stq $R1,0($16) # r[0]=c
|
|
||||||
addq $CC,$O1,$CC
|
|
||||||
addq $16,8,$16 # r++
|
|
||||||
|
|
||||||
bgt $19,$945
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
|
|
||||||
$900:
|
|
||||||
addq $19,4,$19
|
|
||||||
bgt $19,$945 # goto tail code
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
.end bn_add_words
|
|
||||||
|
|
||||||
.align 3
|
|
||||||
.globl bn_sub_words
|
|
||||||
.ent bn_sub_words
|
|
||||||
bn_sub_words:
|
|
||||||
bn_sub_words..ng:
|
|
||||||
.frame $30,0,$26,0
|
|
||||||
.prologue 0
|
|
||||||
|
|
||||||
subq $19,4,$19
|
|
||||||
bis $31,$31,$CC # carry = 0
|
|
||||||
br $800
|
|
||||||
blt $19,$800
|
|
||||||
ldq $L1,0($17) # a[0]
|
|
||||||
ldq $R1,0($18) # b[1]
|
|
||||||
.align 3
|
|
||||||
$801:
|
|
||||||
addq $R1,$L1,$R1 # r=a+b;
|
|
||||||
ldq $L2,8($17) # a[1]
|
|
||||||
cmpult $R1,$L1,$O1 # did we overflow?
|
|
||||||
ldq $R2,8($18) # b[1]
|
|
||||||
addq $R1,$CC,$R1 # c+= overflow
|
|
||||||
ldq $L3,16($17) # a[2]
|
|
||||||
cmpult $R1,$CC,$CC # overflow?
|
|
||||||
ldq $R3,16($18) # b[2]
|
|
||||||
addq $CC,$O1,$CC
|
|
||||||
ldq $L4,24($17) # a[3]
|
|
||||||
addq $R2,$L2,$R2 # r=a+b;
|
|
||||||
ldq $R4,24($18) # b[3]
|
|
||||||
cmpult $R2,$L2,$O2 # did we overflow?
|
|
||||||
addq $R3,$L3,$R3 # r=a+b;
|
|
||||||
addq $R2,$CC,$R2 # c+= overflow
|
|
||||||
cmpult $R3,$L3,$O3 # did we overflow?
|
|
||||||
cmpult $R2,$CC,$CC # overflow?
|
|
||||||
addq $R4,$L4,$R4 # r=a+b;
|
|
||||||
addq $CC,$O2,$CC
|
|
||||||
cmpult $R4,$L4,$O4 # did we overflow?
|
|
||||||
addq $R3,$CC,$R3 # c+= overflow
|
|
||||||
stq $R1,0($16) # r[0]=c
|
|
||||||
cmpult $R3,$CC,$CC # overflow?
|
|
||||||
stq $R2,8($16) # r[1]=c
|
|
||||||
addq $CC,$O3,$CC
|
|
||||||
stq $R3,16($16) # r[2]=c
|
|
||||||
addq $R4,$CC,$R4 # c+= overflow
|
|
||||||
subq $19,4,$19 # loop--
|
|
||||||
cmpult $R4,$CC,$CC # overflow?
|
|
||||||
addq $17,32,$17 # a++
|
|
||||||
addq $CC,$O4,$CC
|
|
||||||
stq $R4,24($16) # r[3]=c
|
|
||||||
addq $18,32,$18 # b++
|
|
||||||
addq $16,32,$16 # r++
|
|
||||||
|
|
||||||
blt $19,$800
|
|
||||||
ldq $L1,0($17) # a[0]
|
|
||||||
ldq $R1,0($18) # b[1]
|
|
||||||
br $801
|
|
||||||
.align 4
|
|
||||||
$845:
|
|
||||||
ldq $L1,0($17) # a[0]
|
|
||||||
ldq $R1,0($18) # b[1]
|
|
||||||
cmpult $L1,$R1,$O1 # will we borrow?
|
|
||||||
subq $L1,$R1,$R1 # r=a-b;
|
|
||||||
subq $19,1,$19 # loop--
|
|
||||||
cmpult $R1,$CC,$O2 # will we borrow?
|
|
||||||
subq $R1,$CC,$R1 # c+= overflow
|
|
||||||
addq $17,8,$17 # a++
|
|
||||||
addq $18,8,$18 # b++
|
|
||||||
stq $R1,0($16) # r[0]=c
|
|
||||||
addq $O2,$O1,$CC
|
|
||||||
addq $16,8,$16 # r++
|
|
||||||
|
|
||||||
bgt $19,$845
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
|
|
||||||
$800:
|
|
||||||
addq $19,4,$19
|
|
||||||
bgt $19,$845 # goto tail code
|
|
||||||
ret $31,($26),1 # else exit
|
|
||||||
.end bn_sub_words
|
|
||||||
|
|
||||||
#
|
|
||||||
# What follows was taken directly from the C compiler with a few
|
|
||||||
# hacks to redo the lables.
|
|
||||||
#
|
|
||||||
.text
|
|
||||||
.align 3
|
|
||||||
.globl bn_div_words
|
|
||||||
.ent bn_div_words
|
|
||||||
bn_div_words:
|
|
||||||
ldgp $29,0($27)
|
|
||||||
bn_div_words..ng:
|
|
||||||
lda $30,-48($30)
|
|
||||||
.frame $30,48,$26,0
|
|
||||||
stq $26,0($30)
|
|
||||||
stq $9,8($30)
|
|
||||||
stq $10,16($30)
|
|
||||||
stq $11,24($30)
|
|
||||||
stq $12,32($30)
|
|
||||||
stq $13,40($30)
|
|
||||||
.mask 0x4003e00,-48
|
|
||||||
.prologue 1
|
|
||||||
bis $16,$16,$9
|
|
||||||
bis $17,$17,$10
|
|
||||||
bis $18,$18,$11
|
|
||||||
bis $31,$31,$13
|
|
||||||
bis $31,2,$12
|
|
||||||
bne $11,$119
|
|
||||||
lda $0,-1
|
|
||||||
br $31,$136
|
|
||||||
.align 4
|
|
||||||
$119:
|
|
||||||
bis $11,$11,$16
|
|
||||||
jsr $26,BN_num_bits_word
|
|
||||||
ldgp $29,0($26)
|
|
||||||
subq $0,64,$1
|
|
||||||
beq $1,$120
|
|
||||||
bis $31,1,$1
|
|
||||||
sll $1,$0,$1
|
|
||||||
cmpule $9,$1,$1
|
|
||||||
bne $1,$120
|
|
||||||
# lda $16,_IO_stderr_
|
|
||||||
# lda $17,$C32
|
|
||||||
# bis $0,$0,$18
|
|
||||||
# jsr $26,fprintf
|
|
||||||
# ldgp $29,0($26)
|
|
||||||
jsr $26,abort
|
|
||||||
ldgp $29,0($26)
|
|
||||||
.align 4
|
|
||||||
$120:
|
|
||||||
bis $31,64,$3
|
|
||||||
cmpult $9,$11,$2
|
|
||||||
subq $3,$0,$1
|
|
||||||
addl $1,$31,$0
|
|
||||||
subq $9,$11,$1
|
|
||||||
cmoveq $2,$1,$9
|
|
||||||
beq $0,$122
|
|
||||||
zapnot $0,15,$2
|
|
||||||
subq $3,$0,$1
|
|
||||||
sll $11,$2,$11
|
|
||||||
sll $9,$2,$3
|
|
||||||
srl $10,$1,$1
|
|
||||||
sll $10,$2,$10
|
|
||||||
bis $3,$1,$9
|
|
||||||
$122:
|
|
||||||
srl $11,32,$5
|
|
||||||
zapnot $11,15,$6
|
|
||||||
lda $7,-1
|
|
||||||
.align 5
|
|
||||||
$123:
|
|
||||||
srl $9,32,$1
|
|
||||||
subq $1,$5,$1
|
|
||||||
bne $1,$126
|
|
||||||
zapnot $7,15,$27
|
|
||||||
br $31,$127
|
|
||||||
.align 4
|
|
||||||
$126:
|
|
||||||
bis $9,$9,$24
|
|
||||||
bis $5,$5,$25
|
|
||||||
divqu $24,$25,$27
|
|
||||||
$127:
|
|
||||||
srl $10,32,$4
|
|
||||||
.align 5
|
|
||||||
$128:
|
|
||||||
mulq $27,$5,$1
|
|
||||||
subq $9,$1,$3
|
|
||||||
zapnot $3,240,$1
|
|
||||||
bne $1,$129
|
|
||||||
mulq $6,$27,$2
|
|
||||||
sll $3,32,$1
|
|
||||||
addq $1,$4,$1
|
|
||||||
cmpule $2,$1,$2
|
|
||||||
bne $2,$129
|
|
||||||
subq $27,1,$27
|
|
||||||
br $31,$128
|
|
||||||
.align 4
|
|
||||||
$129:
|
|
||||||
mulq $27,$6,$1
|
|
||||||
mulq $27,$5,$4
|
|
||||||
srl $1,32,$3
|
|
||||||
sll $1,32,$1
|
|
||||||
addq $4,$3,$4
|
|
||||||
cmpult $10,$1,$2
|
|
||||||
subq $10,$1,$10
|
|
||||||
addq $2,$4,$2
|
|
||||||
cmpult $9,$2,$1
|
|
||||||
bis $2,$2,$4
|
|
||||||
beq $1,$134
|
|
||||||
addq $9,$11,$9
|
|
||||||
subq $27,1,$27
|
|
||||||
$134:
|
|
||||||
subl $12,1,$12
|
|
||||||
subq $9,$4,$9
|
|
||||||
beq $12,$124
|
|
||||||
sll $27,32,$13
|
|
||||||
sll $9,32,$2
|
|
||||||
srl $10,32,$1
|
|
||||||
sll $10,32,$10
|
|
||||||
bis $2,$1,$9
|
|
||||||
br $31,$123
|
|
||||||
.align 4
|
|
||||||
$124:
|
|
||||||
bis $13,$27,$0
|
|
||||||
$136:
|
|
||||||
ldq $26,0($30)
|
|
||||||
ldq $9,8($30)
|
|
||||||
ldq $10,16($30)
|
|
||||||
ldq $11,24($30)
|
|
||||||
ldq $12,32($30)
|
|
||||||
ldq $13,40($30)
|
|
||||||
addq $30,48,$30
|
|
||||||
ret $31,($26),1
|
|
||||||
.end bn_div_words
|
|
||||||
EOF
|
|
||||||
return($data);
|
|
||||||
}
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# I have this in perl so I can use more usefull register names and then convert
|
|
||||||
# them into alpha registers.
|
|
||||||
#
|
|
||||||
|
|
||||||
push(@INC,"perlasm","../../perlasm");
|
|
||||||
require "alpha.pl";
|
|
||||||
require "alpha/mul_add.pl";
|
|
||||||
require "alpha/mul.pl";
|
|
||||||
require "alpha/sqr.pl";
|
|
||||||
require "alpha/add.pl";
|
|
||||||
require "alpha/sub.pl";
|
|
||||||
require "alpha/mul_c8.pl";
|
|
||||||
require "alpha/mul_c4.pl";
|
|
||||||
require "alpha/sqr_c4.pl";
|
|
||||||
require "alpha/sqr_c8.pl";
|
|
||||||
require "alpha/div.pl";
|
|
||||||
|
|
||||||
&asm_init($ARGV[0],$0);
|
|
||||||
|
|
||||||
&bn_mul_words("bn_mul_words");
|
|
||||||
&bn_sqr_words("bn_sqr_words");
|
|
||||||
&bn_mul_add_words("bn_mul_add_words");
|
|
||||||
&bn_add_words("bn_add_words");
|
|
||||||
&bn_sub_words("bn_sub_words");
|
|
||||||
&bn_div_words("bn_div_words");
|
|
||||||
&bn_mul_comba8("bn_mul_comba8");
|
|
||||||
&bn_mul_comba4("bn_mul_comba4");
|
|
||||||
&bn_sqr_comba4("bn_sqr_comba4");
|
|
||||||
&bn_sqr_comba8("bn_sqr_comba8");
|
|
||||||
|
|
||||||
&asm_finish();
|
|
||||||
|
|
@ -1,116 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# I have this in perl so I can use more usefull register names and then convert
|
|
||||||
# them into alpha registers.
|
|
||||||
#
|
|
||||||
|
|
||||||
push(@INC,"perlasm","../../perlasm");
|
|
||||||
require "alpha.pl";
|
|
||||||
|
|
||||||
&asm_init($ARGV[0],$0);
|
|
||||||
|
|
||||||
print &bn_sub_words("bn_sub_words");
|
|
||||||
|
|
||||||
&asm_finish();
|
|
||||||
|
|
||||||
sub bn_sub_words
|
|
||||||
{
|
|
||||||
local($name)=@_;
|
|
||||||
local($cc,$a,$b,$r);
|
|
||||||
|
|
||||||
$cc="r0";
|
|
||||||
$a0="r1"; $b0="r5"; $r0="r9"; $tmp="r13";
|
|
||||||
$a1="r2"; $b1="r6"; $r1="r10"; $t1="r14";
|
|
||||||
$a2="r3"; $b2="r7"; $r2="r11";
|
|
||||||
$a3="r4"; $b3="r8"; $r3="r12"; $t3="r15";
|
|
||||||
|
|
||||||
$rp=&wparam(0);
|
|
||||||
$ap=&wparam(1);
|
|
||||||
$bp=&wparam(2);
|
|
||||||
$count=&wparam(3);
|
|
||||||
|
|
||||||
&function_begin($name,"");
|
|
||||||
|
|
||||||
&comment("");
|
|
||||||
&sub($count,4,$count);
|
|
||||||
&mov("zero",$cc);
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
|
|
||||||
&ld($a0,&QWPw(0,$ap));
|
|
||||||
&ld($b0,&QWPw(0,$bp));
|
|
||||||
|
|
||||||
##########################################################
|
|
||||||
&set_label("loop");
|
|
||||||
|
|
||||||
&ld($a1,&QWPw(1,$ap));
|
|
||||||
&cmpult($a0,$b0,$tmp); # will we borrow?
|
|
||||||
&ld($b1,&QWPw(1,$bp));
|
|
||||||
&sub($a0,$b0,$a0); # do the subtract
|
|
||||||
&ld($a2,&QWPw(2,$ap));
|
|
||||||
&cmpult($a0,$cc,$b0); # will we borrow?
|
|
||||||
&ld($b2,&QWPw(2,$bp));
|
|
||||||
&sub($a0,$cc,$a0); # will we borrow?
|
|
||||||
&ld($a3,&QWPw(3,$ap));
|
|
||||||
&add($b0,$tmp,$cc); # add the borrows
|
|
||||||
|
|
||||||
&cmpult($a1,$b1,$t1); # will we borrow?
|
|
||||||
&sub($a1,$b1,$a1); # do the subtract
|
|
||||||
&ld($b3,&QWPw(3,$bp));
|
|
||||||
&cmpult($a1,$cc,$b1); # will we borrow?
|
|
||||||
&sub($a1,$cc,$a1); # will we borrow?
|
|
||||||
&add($b1,$t1,$cc); # add the borrows
|
|
||||||
|
|
||||||
&cmpult($a2,$b2,$tmp); # will we borrow?
|
|
||||||
&sub($a2,$b2,$a2); # do the subtract
|
|
||||||
&st($a0,&QWPw(0,$rp)); # save
|
|
||||||
&cmpult($a2,$cc,$b2); # will we borrow?
|
|
||||||
&sub($a2,$cc,$a2); # will we borrow?
|
|
||||||
&add($b2,$tmp,$cc); # add the borrows
|
|
||||||
|
|
||||||
&cmpult($a3,$b3,$t3); # will we borrow?
|
|
||||||
&sub($a3,$b3,$a3); # do the subtract
|
|
||||||
&st($a1,&QWPw(1,$rp)); # save
|
|
||||||
&cmpult($a3,$cc,$b3); # will we borrow?
|
|
||||||
&sub($a3,$cc,$a3); # will we borrow?
|
|
||||||
&add($b3,$t3,$cc); # add the borrows
|
|
||||||
|
|
||||||
&st($a2,&QWPw(2,$rp)); # save
|
|
||||||
&sub($count,4,$count); # count-=4
|
|
||||||
&st($a3,&QWPw(3,$rp)); # save
|
|
||||||
&add($ap,4*$QWS,$ap); # count+=4
|
|
||||||
&add($bp,4*$QWS,$bp); # count+=4
|
|
||||||
&add($rp,4*$QWS,$rp); # count+=4
|
|
||||||
|
|
||||||
&blt($count,&label("finish"));
|
|
||||||
&ld($a0,&QWPw(0,$ap));
|
|
||||||
&ld($b0,&QWPw(0,$bp));
|
|
||||||
&br(&label("loop"));
|
|
||||||
##################################################
|
|
||||||
# Do the last 0..3 words
|
|
||||||
|
|
||||||
&set_label("last_loop");
|
|
||||||
|
|
||||||
&ld($a0,&QWPw(0,$ap)); # get a
|
|
||||||
&ld($b0,&QWPw(0,$bp)); # get b
|
|
||||||
&cmpult($a0,$b0,$tmp); # will we borrow?
|
|
||||||
&sub($a0,$b0,$a0); # do the subtract
|
|
||||||
&cmpult($a0,$cc,$b0); # will we borrow?
|
|
||||||
&sub($a0,$cc,$a0); # will we borrow?
|
|
||||||
&st($a0,&QWPw(0,$rp)); # save
|
|
||||||
&add($b0,$tmp,$cc); # add the borrows
|
|
||||||
|
|
||||||
&add($ap,$QWS,$ap);
|
|
||||||
&add($bp,$QWS,$bp);
|
|
||||||
&add($rp,$QWS,$rp);
|
|
||||||
&sub($count,1,$count);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
&function_end_A($name);
|
|
||||||
|
|
||||||
######################################################
|
|
||||||
&set_label("finish");
|
|
||||||
&add($count,4,$count);
|
|
||||||
&bgt($count,&label("last_loop"));
|
|
||||||
|
|
||||||
&set_label("end");
|
|
||||||
&function_end($name);
|
|
||||||
}
|
|
||||||
|
|
@ -1,539 +0,0 @@
|
|||||||
/* This assember is for R2000/R3000 machines, or higher ones that do
|
|
||||||
* no want to do any 64 bit arithmatic.
|
|
||||||
* Make sure that the SSLeay bignum library is compiled with
|
|
||||||
* THIRTY_TWO_BIT set.
|
|
||||||
* This must either be compiled with the system CC, or, if you use GNU gas,
|
|
||||||
* cc -E mips1.s|gas -o mips1.o
|
|
||||||
*/
|
|
||||||
.set reorder
|
|
||||||
.set noat
|
|
||||||
|
|
||||||
#define R1 $1
|
|
||||||
#define CC $2
|
|
||||||
#define R2 $3
|
|
||||||
#define R3 $8
|
|
||||||
#define R4 $9
|
|
||||||
#define L1 $10
|
|
||||||
#define L2 $11
|
|
||||||
#define L3 $12
|
|
||||||
#define L4 $13
|
|
||||||
#define H1 $14
|
|
||||||
#define H2 $15
|
|
||||||
#define H3 $24
|
|
||||||
#define H4 $25
|
|
||||||
|
|
||||||
#define P1 $4
|
|
||||||
#define P2 $5
|
|
||||||
#define P3 $6
|
|
||||||
#define P4 $7
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
.ent bn_mul_add_words
|
|
||||||
.globl bn_mul_add_words
|
|
||||||
.text
|
|
||||||
bn_mul_add_words:
|
|
||||||
.frame $sp,0,$31
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
|
|
||||||
#blt P3,4,$lab34
|
|
||||||
|
|
||||||
subu R1,P3,4
|
|
||||||
move CC,$0
|
|
||||||
bltz R1,$lab34
|
|
||||||
$lab2:
|
|
||||||
lw R1,0(P1)
|
|
||||||
lw L1,0(P2)
|
|
||||||
lw R2,4(P1)
|
|
||||||
lw L2,4(P2)
|
|
||||||
lw R3,8(P1)
|
|
||||||
lw L3,8(P2)
|
|
||||||
lw R4,12(P1)
|
|
||||||
lw L4,12(P2)
|
|
||||||
multu L1,P4
|
|
||||||
addu R1,R1,CC
|
|
||||||
mflo L1
|
|
||||||
sltu CC,R1,CC
|
|
||||||
addu R1,R1,L1
|
|
||||||
mfhi H1
|
|
||||||
sltu L1,R1,L1
|
|
||||||
sw R1,0(P1)
|
|
||||||
addu CC,CC,L1
|
|
||||||
multu L2,P4
|
|
||||||
addu CC,H1,CC
|
|
||||||
mflo L2
|
|
||||||
addu R2,R2,CC
|
|
||||||
sltu CC,R2,CC
|
|
||||||
mfhi H2
|
|
||||||
addu R2,R2,L2
|
|
||||||
addu P2,P2,16
|
|
||||||
sltu L2,R2,L2
|
|
||||||
sw R2,4(P1)
|
|
||||||
addu CC,CC,L2
|
|
||||||
multu L3,P4
|
|
||||||
addu CC,H2,CC
|
|
||||||
mflo L3
|
|
||||||
addu R3,R3,CC
|
|
||||||
sltu CC,R3,CC
|
|
||||||
mfhi H3
|
|
||||||
addu R3,R3,L3
|
|
||||||
addu P1,P1,16
|
|
||||||
sltu L3,R3,L3
|
|
||||||
sw R3,-8(P1)
|
|
||||||
addu CC,CC,L3
|
|
||||||
multu L4,P4
|
|
||||||
addu CC,H3,CC
|
|
||||||
mflo L4
|
|
||||||
addu R4,R4,CC
|
|
||||||
sltu CC,R4,CC
|
|
||||||
mfhi H4
|
|
||||||
addu R4,R4,L4
|
|
||||||
subu P3,P3,4
|
|
||||||
sltu L4,R4,L4
|
|
||||||
addu CC,CC,L4
|
|
||||||
addu CC,H4,CC
|
|
||||||
|
|
||||||
subu R1,P3,4
|
|
||||||
sw R4,-4(P1) # delay slot
|
|
||||||
bgez R1,$lab2
|
|
||||||
|
|
||||||
bleu P3,0,$lab3
|
|
||||||
.align 2
|
|
||||||
$lab33:
|
|
||||||
lw L1,0(P2)
|
|
||||||
lw R1,0(P1)
|
|
||||||
multu L1,P4
|
|
||||||
addu R1,R1,CC
|
|
||||||
sltu CC,R1,CC
|
|
||||||
addu P1,P1,4
|
|
||||||
mflo L1
|
|
||||||
mfhi H1
|
|
||||||
addu R1,R1,L1
|
|
||||||
addu P2,P2,4
|
|
||||||
sltu L1,R1,L1
|
|
||||||
subu P3,P3,1
|
|
||||||
addu CC,CC,L1
|
|
||||||
sw R1,-4(P1)
|
|
||||||
addu CC,H1,CC
|
|
||||||
bgtz P3,$lab33
|
|
||||||
j $31
|
|
||||||
.align 2
|
|
||||||
$lab3:
|
|
||||||
j $31
|
|
||||||
.align 2
|
|
||||||
$lab34:
|
|
||||||
bgt P3,0,$lab33
|
|
||||||
j $31
|
|
||||||
.end bn_mul_add_words
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
# Program Unit: bn_mul_words
|
|
||||||
.ent bn_mul_words
|
|
||||||
.globl bn_mul_words
|
|
||||||
.text
|
|
||||||
bn_mul_words:
|
|
||||||
.frame $sp,0,$31
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
|
|
||||||
subu P3,P3,4
|
|
||||||
move CC,$0
|
|
||||||
bltz P3,$lab45
|
|
||||||
$lab44:
|
|
||||||
lw L1,0(P2)
|
|
||||||
lw L2,4(P2)
|
|
||||||
lw L3,8(P2)
|
|
||||||
lw L4,12(P2)
|
|
||||||
multu L1,P4
|
|
||||||
subu P3,P3,4
|
|
||||||
mflo L1
|
|
||||||
mfhi H1
|
|
||||||
addu L1,L1,CC
|
|
||||||
multu L2,P4
|
|
||||||
sltu CC,L1,CC
|
|
||||||
sw L1,0(P1)
|
|
||||||
addu CC,H1,CC
|
|
||||||
mflo L2
|
|
||||||
mfhi H2
|
|
||||||
addu L2,L2,CC
|
|
||||||
multu L3,P4
|
|
||||||
sltu CC,L2,CC
|
|
||||||
sw L2,4(P1)
|
|
||||||
addu CC,H2,CC
|
|
||||||
mflo L3
|
|
||||||
mfhi H3
|
|
||||||
addu L3,L3,CC
|
|
||||||
multu L4,P4
|
|
||||||
sltu CC,L3,CC
|
|
||||||
sw L3,8(P1)
|
|
||||||
addu CC,H3,CC
|
|
||||||
mflo L4
|
|
||||||
mfhi H4
|
|
||||||
addu L4,L4,CC
|
|
||||||
addu P1,P1,16
|
|
||||||
sltu CC,L4,CC
|
|
||||||
addu P2,P2,16
|
|
||||||
addu CC,H4,CC
|
|
||||||
sw L4,-4(P1)
|
|
||||||
|
|
||||||
bgez P3,$lab44
|
|
||||||
b $lab45
|
|
||||||
$lab46:
|
|
||||||
lw L1,0(P2)
|
|
||||||
addu P1,P1,4
|
|
||||||
multu L1,P4
|
|
||||||
addu P2,P2,4
|
|
||||||
mflo L1
|
|
||||||
mfhi H1
|
|
||||||
addu L1,L1,CC
|
|
||||||
subu P3,P3,1
|
|
||||||
sltu CC,L1,CC
|
|
||||||
sw L1,-4(P1)
|
|
||||||
addu CC,H1,CC
|
|
||||||
bgtz P3,$lab46
|
|
||||||
j $31
|
|
||||||
$lab45:
|
|
||||||
addu P3,P3,4
|
|
||||||
bgtz P3,$lab46
|
|
||||||
j $31
|
|
||||||
.align 2
|
|
||||||
.end bn_mul_words
|
|
||||||
|
|
||||||
# Program Unit: bn_sqr_words
|
|
||||||
.ent bn_sqr_words
|
|
||||||
.globl bn_sqr_words
|
|
||||||
.text
|
|
||||||
bn_sqr_words:
|
|
||||||
.frame $sp,0,$31
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
|
|
||||||
subu P3,P3,4
|
|
||||||
bltz P3,$lab55
|
|
||||||
$lab54:
|
|
||||||
lw L1,0(P2)
|
|
||||||
lw L2,4(P2)
|
|
||||||
lw L3,8(P2)
|
|
||||||
lw L4,12(P2)
|
|
||||||
|
|
||||||
multu L1,L1
|
|
||||||
subu P3,P3,4
|
|
||||||
mflo L1
|
|
||||||
mfhi H1
|
|
||||||
sw L1,0(P1)
|
|
||||||
sw H1,4(P1)
|
|
||||||
|
|
||||||
multu L2,L2
|
|
||||||
addu P1,P1,32
|
|
||||||
mflo L2
|
|
||||||
mfhi H2
|
|
||||||
sw L2,-24(P1)
|
|
||||||
sw H2,-20(P1)
|
|
||||||
|
|
||||||
multu L3,L3
|
|
||||||
addu P2,P2,16
|
|
||||||
mflo L3
|
|
||||||
mfhi H3
|
|
||||||
sw L3,-16(P1)
|
|
||||||
sw H3,-12(P1)
|
|
||||||
|
|
||||||
multu L4,L4
|
|
||||||
|
|
||||||
mflo L4
|
|
||||||
mfhi H4
|
|
||||||
sw L4,-8(P1)
|
|
||||||
sw H4,-4(P1)
|
|
||||||
|
|
||||||
bgtz P3,$lab54
|
|
||||||
b $lab55
|
|
||||||
$lab56:
|
|
||||||
lw L1,0(P2)
|
|
||||||
addu P1,P1,8
|
|
||||||
multu L1,L1
|
|
||||||
addu P2,P2,4
|
|
||||||
subu P3,P3,1
|
|
||||||
mflo L1
|
|
||||||
mfhi H1
|
|
||||||
sw L1,-8(P1)
|
|
||||||
sw H1,-4(P1)
|
|
||||||
|
|
||||||
bgtz P3,$lab56
|
|
||||||
j $31
|
|
||||||
$lab55:
|
|
||||||
addu P3,P3,4
|
|
||||||
bgtz P3,$lab56
|
|
||||||
j $31
|
|
||||||
.align 2
|
|
||||||
.end bn_sqr_words
|
|
||||||
|
|
||||||
# Program Unit: bn_add_words
|
|
||||||
.ent bn_add_words
|
|
||||||
.globl bn_add_words
|
|
||||||
.text
|
|
||||||
bn_add_words: # 0x590
|
|
||||||
.frame $sp,0,$31
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
|
|
||||||
subu P4,P4,4
|
|
||||||
move CC,$0
|
|
||||||
bltz P4,$lab65
|
|
||||||
$lab64:
|
|
||||||
lw L1,0(P2)
|
|
||||||
lw R1,0(P3)
|
|
||||||
lw L2,4(P2)
|
|
||||||
lw R2,4(P3)
|
|
||||||
|
|
||||||
addu L1,L1,CC
|
|
||||||
lw L3,8(P2)
|
|
||||||
sltu CC,L1,CC
|
|
||||||
addu L1,L1,R1
|
|
||||||
sltu R1,L1,R1
|
|
||||||
lw R3,8(P3)
|
|
||||||
addu CC,CC,R1
|
|
||||||
lw L4,12(P2)
|
|
||||||
|
|
||||||
addu L2,L2,CC
|
|
||||||
lw R4,12(P3)
|
|
||||||
sltu CC,L2,CC
|
|
||||||
addu L2,L2,R2
|
|
||||||
sltu R2,L2,R2
|
|
||||||
sw L1,0(P1)
|
|
||||||
addu CC,CC,R2
|
|
||||||
addu P1,P1,16
|
|
||||||
addu L3,L3,CC
|
|
||||||
sw L2,-12(P1)
|
|
||||||
|
|
||||||
sltu CC,L3,CC
|
|
||||||
addu L3,L3,R3
|
|
||||||
sltu R3,L3,R3
|
|
||||||
addu P2,P2,16
|
|
||||||
addu CC,CC,R3
|
|
||||||
|
|
||||||
addu L4,L4,CC
|
|
||||||
addu P3,P3,16
|
|
||||||
sltu CC,L4,CC
|
|
||||||
addu L4,L4,R4
|
|
||||||
subu P4,P4,4
|
|
||||||
sltu R4,L4,R4
|
|
||||||
sw L3,-8(P1)
|
|
||||||
addu CC,CC,R4
|
|
||||||
sw L4,-4(P1)
|
|
||||||
|
|
||||||
bgtz P4,$lab64
|
|
||||||
b $lab65
|
|
||||||
$lab66:
|
|
||||||
lw L1,0(P2)
|
|
||||||
lw R1,0(P3)
|
|
||||||
addu L1,L1,CC
|
|
||||||
addu P1,P1,4
|
|
||||||
sltu CC,L1,CC
|
|
||||||
addu P2,P2,4
|
|
||||||
addu P3,P3,4
|
|
||||||
addu L1,L1,R1
|
|
||||||
subu P4,P4,1
|
|
||||||
sltu R1,L1,R1
|
|
||||||
sw L1,-4(P1)
|
|
||||||
addu CC,CC,R1
|
|
||||||
|
|
||||||
bgtz P4,$lab66
|
|
||||||
j $31
|
|
||||||
$lab65:
|
|
||||||
addu P4,P4,4
|
|
||||||
bgtz P4,$lab66
|
|
||||||
j $31
|
|
||||||
.end bn_add_words
|
|
||||||
|
|
||||||
# Program Unit: bn_div64
|
|
||||||
.set at
|
|
||||||
.set reorder
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl bn_div64
|
|
||||||
# 321 {
|
|
||||||
.ent bn_div64 2
|
|
||||||
bn_div64:
|
|
||||||
subu $sp, 64
|
|
||||||
sw $31, 56($sp)
|
|
||||||
sw $16, 48($sp)
|
|
||||||
.mask 0x80010000, -56
|
|
||||||
.frame $sp, 64, $31
|
|
||||||
move $9, $4
|
|
||||||
move $12, $5
|
|
||||||
move $16, $6
|
|
||||||
# 322 BN_ULONG dh,dl,q,ret=0,th,tl,t;
|
|
||||||
move $31, $0
|
|
||||||
# 323 int i,count=2;
|
|
||||||
li $13, 2
|
|
||||||
# 324
|
|
||||||
# 325 if (d == 0) return(BN_MASK2);
|
|
||||||
bne $16, 0, $80
|
|
||||||
li $2, -1
|
|
||||||
b $93
|
|
||||||
$80:
|
|
||||||
# 326
|
|
||||||
# 327 i=BN_num_bits_word(d);
|
|
||||||
move $4, $16
|
|
||||||
sw $31, 16($sp)
|
|
||||||
sw $9, 24($sp)
|
|
||||||
sw $12, 32($sp)
|
|
||||||
sw $13, 40($sp)
|
|
||||||
.livereg 0x800ff0e,0xfff
|
|
||||||
jal BN_num_bits_word
|
|
||||||
li $4, 32
|
|
||||||
lw $31, 16($sp)
|
|
||||||
lw $9, 24($sp)
|
|
||||||
lw $12, 32($sp)
|
|
||||||
lw $13, 40($sp)
|
|
||||||
move $3, $2
|
|
||||||
# 328 if ((i != BN_BITS2) && (h > (BN_ULONG)1<<i))
|
|
||||||
beq $2, $4, $81
|
|
||||||
li $14, 1
|
|
||||||
sll $15, $14, $2
|
|
||||||
bleu $9, $15, $81
|
|
||||||
# 329 {
|
|
||||||
# 330 #if !defined(NO_STDIO) && !defined(WIN16)
|
|
||||||
# 331 fprintf(stderr,"Division would overflow (%d)\n",i);
|
|
||||||
# 332 #endif
|
|
||||||
# 333 abort();
|
|
||||||
sw $3, 8($sp)
|
|
||||||
sw $9, 24($sp)
|
|
||||||
sw $12, 32($sp)
|
|
||||||
sw $13, 40($sp)
|
|
||||||
sw $31, 26($sp)
|
|
||||||
.livereg 0xff0e,0xfff
|
|
||||||
jal abort
|
|
||||||
lw $3, 8($sp)
|
|
||||||
li $4, 32
|
|
||||||
lw $9, 24($sp)
|
|
||||||
lw $12, 32($sp)
|
|
||||||
lw $13, 40($sp)
|
|
||||||
lw $31, 26($sp)
|
|
||||||
# 334 }
|
|
||||||
$81:
|
|
||||||
# 335 i=BN_BITS2-i;
|
|
||||||
subu $3, $4, $3
|
|
||||||
# 336 if (h >= d) h-=d;
|
|
||||||
bltu $9, $16, $82
|
|
||||||
subu $9, $9, $16
|
|
||||||
$82:
|
|
||||||
# 337
|
|
||||||
# 338 if (i)
|
|
||||||
beq $3, 0, $83
|
|
||||||
# 339 {
|
|
||||||
# 340 d<<=i;
|
|
||||||
sll $16, $16, $3
|
|
||||||
# 341 h=(h<<i)|(l>>(BN_BITS2-i));
|
|
||||||
sll $24, $9, $3
|
|
||||||
subu $25, $4, $3
|
|
||||||
srl $14, $12, $25
|
|
||||||
or $9, $24, $14
|
|
||||||
# 342 l<<=i;
|
|
||||||
sll $12, $12, $3
|
|
||||||
# 343 }
|
|
||||||
$83:
|
|
||||||
# 344 dh=(d&BN_MASK2h)>>BN_BITS4;
|
|
||||||
# 345 dl=(d&BN_MASK2l);
|
|
||||||
and $8, $16, -65536
|
|
||||||
srl $8, $8, 16
|
|
||||||
and $10, $16, 65535
|
|
||||||
li $6, -65536
|
|
||||||
$84:
|
|
||||||
# 346 for (;;)
|
|
||||||
# 347 {
|
|
||||||
# 348 if ((h>>BN_BITS4) == dh)
|
|
||||||
srl $15, $9, 16
|
|
||||||
bne $8, $15, $85
|
|
||||||
# 349 q=BN_MASK2l;
|
|
||||||
li $5, 65535
|
|
||||||
b $86
|
|
||||||
$85:
|
|
||||||
# 350 else
|
|
||||||
# 351 q=h/dh;
|
|
||||||
divu $5, $9, $8
|
|
||||||
$86:
|
|
||||||
# 352
|
|
||||||
# 353 for (;;)
|
|
||||||
# 354 {
|
|
||||||
# 355 t=(h-q*dh);
|
|
||||||
mul $4, $5, $8
|
|
||||||
subu $2, $9, $4
|
|
||||||
move $3, $2
|
|
||||||
# 356 if ((t&BN_MASK2h) ||
|
|
||||||
# 357 ((dl*q) <= (
|
|
||||||
# 358 (t<<BN_BITS4)+
|
|
||||||
# 359 ((l&BN_MASK2h)>>BN_BITS4))))
|
|
||||||
and $25, $2, $6
|
|
||||||
bne $25, $0, $87
|
|
||||||
mul $24, $10, $5
|
|
||||||
sll $14, $3, 16
|
|
||||||
and $15, $12, $6
|
|
||||||
srl $25, $15, 16
|
|
||||||
addu $15, $14, $25
|
|
||||||
bgtu $24, $15, $88
|
|
||||||
$87:
|
|
||||||
# 360 break;
|
|
||||||
mul $3, $10, $5
|
|
||||||
b $89
|
|
||||||
$88:
|
|
||||||
# 361 q--;
|
|
||||||
addu $5, $5, -1
|
|
||||||
# 362 }
|
|
||||||
b $86
|
|
||||||
$89:
|
|
||||||
# 363 th=q*dh;
|
|
||||||
# 364 tl=q*dl;
|
|
||||||
# 365 t=(tl>>BN_BITS4);
|
|
||||||
# 366 tl=(tl<<BN_BITS4)&BN_MASK2h;
|
|
||||||
sll $14, $3, 16
|
|
||||||
and $2, $14, $6
|
|
||||||
move $11, $2
|
|
||||||
# 367 th+=t;
|
|
||||||
srl $25, $3, 16
|
|
||||||
addu $7, $4, $25
|
|
||||||
# 368
|
|
||||||
# 369 if (l < tl) th++;
|
|
||||||
bgeu $12, $2, $90
|
|
||||||
addu $7, $7, 1
|
|
||||||
$90:
|
|
||||||
# 370 l-=tl;
|
|
||||||
subu $12, $12, $11
|
|
||||||
# 371 if (h < th)
|
|
||||||
bgeu $9, $7, $91
|
|
||||||
# 372 {
|
|
||||||
# 373 h+=d;
|
|
||||||
addu $9, $9, $16
|
|
||||||
# 374 q--;
|
|
||||||
addu $5, $5, -1
|
|
||||||
# 375 }
|
|
||||||
$91:
|
|
||||||
# 376 h-=th;
|
|
||||||
subu $9, $9, $7
|
|
||||||
# 377
|
|
||||||
# 378 if (--count == 0) break;
|
|
||||||
addu $13, $13, -1
|
|
||||||
beq $13, 0, $92
|
|
||||||
# 379
|
|
||||||
# 380 ret=q<<BN_BITS4;
|
|
||||||
sll $31, $5, 16
|
|
||||||
# 381 h=((h<<BN_BITS4)|(l>>BN_BITS4))&BN_MASK2;
|
|
||||||
sll $24, $9, 16
|
|
||||||
srl $15, $12, 16
|
|
||||||
or $9, $24, $15
|
|
||||||
# 382 l=(l&BN_MASK2l)<<BN_BITS4;
|
|
||||||
and $12, $12, 65535
|
|
||||||
sll $12, $12, 16
|
|
||||||
# 383 }
|
|
||||||
b $84
|
|
||||||
$92:
|
|
||||||
# 384 ret|=q;
|
|
||||||
or $31, $31, $5
|
|
||||||
# 385 return(ret);
|
|
||||||
move $2, $31
|
|
||||||
$93:
|
|
||||||
lw $16, 48($sp)
|
|
||||||
lw $31, 56($sp)
|
|
||||||
addu $sp, 64
|
|
||||||
j $31
|
|
||||||
.end bn_div64
|
|
||||||
|
|
@ -1,710 +0,0 @@
|
|||||||
.SPACE $PRIVATE$
|
|
||||||
.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
|
|
||||||
.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
|
|
||||||
.SPACE $TEXT$
|
|
||||||
.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
|
|
||||||
.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
|
|
||||||
.IMPORT $global$,DATA
|
|
||||||
.IMPORT $$dyncall,MILLICODE
|
|
||||||
; gcc_compiled.:
|
|
||||||
.SPACE $TEXT$
|
|
||||||
.SUBSPA $CODE$
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
.EXPORT bn_mul_add_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR
|
|
||||||
bn_mul_add_words
|
|
||||||
.PROC
|
|
||||||
.CALLINFO FRAME=0,CALLS,SAVE_RP
|
|
||||||
.ENTRY
|
|
||||||
stw %r2,-20(0,%r30)
|
|
||||||
ldi 0,%r28
|
|
||||||
extru %r23,31,16,%r2
|
|
||||||
stw %r2,-16(0,%r30)
|
|
||||||
extru %r23,15,16,%r23
|
|
||||||
ldil L'65536,%r31
|
|
||||||
fldws -16(0,%r30),%fr11R
|
|
||||||
stw %r23,-16(0,%r30)
|
|
||||||
ldo 12(%r25),%r29
|
|
||||||
ldo 12(%r26),%r23
|
|
||||||
fldws -16(0,%r30),%fr11L
|
|
||||||
L$0002
|
|
||||||
ldw 0(0,%r25),%r19
|
|
||||||
extru %r19,31,16,%r20
|
|
||||||
stw %r20,-16(0,%r30)
|
|
||||||
extru %r19,15,16,%r19
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
stw %r19,-16(0,%r30)
|
|
||||||
xmpyu %fr22L,%fr11R,%fr8
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
xmpyu %fr11R,%fr22L,%fr10
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
stw %r20,-16(0,%r30)
|
|
||||||
xmpyu %fr22L,%fr11L,%fr9
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
fstws %fr10R,-16(0,%r30)
|
|
||||||
copy %r2,%r22
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
fstws %fr9R,-16(0,%r30)
|
|
||||||
xmpyu %fr11L,%fr22L,%fr8
|
|
||||||
copy %r2,%r19
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
copy %r2,%r20
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
addl %r2,%r19,%r21
|
|
||||||
comclr,<<= %r19,%r21,0
|
|
||||||
addl %r20,%r31,%r20
|
|
||||||
L$0005
|
|
||||||
extru %r21,15,16,%r19
|
|
||||||
addl %r20,%r19,%r20
|
|
||||||
zdep %r21,15,16,%r19
|
|
||||||
addl %r22,%r19,%r22
|
|
||||||
comclr,<<= %r19,%r22,0
|
|
||||||
addi,tr 1,%r20,%r19
|
|
||||||
copy %r20,%r19
|
|
||||||
addl %r22,%r28,%r20
|
|
||||||
comclr,<<= %r28,%r20,0
|
|
||||||
addi 1,%r19,%r19
|
|
||||||
ldw 0(0,%r26),%r28
|
|
||||||
addl %r20,%r28,%r20
|
|
||||||
comclr,<<= %r28,%r20,0
|
|
||||||
addi,tr 1,%r19,%r28
|
|
||||||
copy %r19,%r28
|
|
||||||
addib,= -1,%r24,L$0003
|
|
||||||
stw %r20,0(0,%r26)
|
|
||||||
ldw -8(0,%r29),%r19
|
|
||||||
extru %r19,31,16,%r20
|
|
||||||
stw %r20,-16(0,%r30)
|
|
||||||
extru %r19,15,16,%r19
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
stw %r19,-16(0,%r30)
|
|
||||||
xmpyu %fr22L,%fr11R,%fr8
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
xmpyu %fr11R,%fr22L,%fr10
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
stw %r20,-16(0,%r30)
|
|
||||||
xmpyu %fr22L,%fr11L,%fr9
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
fstws %fr10R,-16(0,%r30)
|
|
||||||
copy %r2,%r22
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
fstws %fr9R,-16(0,%r30)
|
|
||||||
xmpyu %fr11L,%fr22L,%fr8
|
|
||||||
copy %r2,%r19
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
copy %r2,%r20
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
addl %r2,%r19,%r21
|
|
||||||
comclr,<<= %r19,%r21,0
|
|
||||||
addl %r20,%r31,%r20
|
|
||||||
L$0010
|
|
||||||
extru %r21,15,16,%r19
|
|
||||||
addl %r20,%r19,%r20
|
|
||||||
zdep %r21,15,16,%r19
|
|
||||||
addl %r22,%r19,%r22
|
|
||||||
comclr,<<= %r19,%r22,0
|
|
||||||
addi,tr 1,%r20,%r19
|
|
||||||
copy %r20,%r19
|
|
||||||
addl %r22,%r28,%r20
|
|
||||||
comclr,<<= %r28,%r20,0
|
|
||||||
addi 1,%r19,%r19
|
|
||||||
ldw -8(0,%r23),%r28
|
|
||||||
addl %r20,%r28,%r20
|
|
||||||
comclr,<<= %r28,%r20,0
|
|
||||||
addi,tr 1,%r19,%r28
|
|
||||||
copy %r19,%r28
|
|
||||||
addib,= -1,%r24,L$0003
|
|
||||||
stw %r20,-8(0,%r23)
|
|
||||||
ldw -4(0,%r29),%r19
|
|
||||||
extru %r19,31,16,%r20
|
|
||||||
stw %r20,-16(0,%r30)
|
|
||||||
extru %r19,15,16,%r19
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
stw %r19,-16(0,%r30)
|
|
||||||
xmpyu %fr22L,%fr11R,%fr8
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
xmpyu %fr11R,%fr22L,%fr10
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
stw %r20,-16(0,%r30)
|
|
||||||
xmpyu %fr22L,%fr11L,%fr9
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
fstws %fr10R,-16(0,%r30)
|
|
||||||
copy %r2,%r22
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
fstws %fr9R,-16(0,%r30)
|
|
||||||
xmpyu %fr11L,%fr22L,%fr8
|
|
||||||
copy %r2,%r19
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
copy %r2,%r20
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
addl %r2,%r19,%r21
|
|
||||||
comclr,<<= %r19,%r21,0
|
|
||||||
addl %r20,%r31,%r20
|
|
||||||
L$0015
|
|
||||||
extru %r21,15,16,%r19
|
|
||||||
addl %r20,%r19,%r20
|
|
||||||
zdep %r21,15,16,%r19
|
|
||||||
addl %r22,%r19,%r22
|
|
||||||
comclr,<<= %r19,%r22,0
|
|
||||||
addi,tr 1,%r20,%r19
|
|
||||||
copy %r20,%r19
|
|
||||||
addl %r22,%r28,%r20
|
|
||||||
comclr,<<= %r28,%r20,0
|
|
||||||
addi 1,%r19,%r19
|
|
||||||
ldw -4(0,%r23),%r28
|
|
||||||
addl %r20,%r28,%r20
|
|
||||||
comclr,<<= %r28,%r20,0
|
|
||||||
addi,tr 1,%r19,%r28
|
|
||||||
copy %r19,%r28
|
|
||||||
addib,= -1,%r24,L$0003
|
|
||||||
stw %r20,-4(0,%r23)
|
|
||||||
ldw 0(0,%r29),%r19
|
|
||||||
extru %r19,31,16,%r20
|
|
||||||
stw %r20,-16(0,%r30)
|
|
||||||
extru %r19,15,16,%r19
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
stw %r19,-16(0,%r30)
|
|
||||||
xmpyu %fr22L,%fr11R,%fr8
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
xmpyu %fr11R,%fr22L,%fr10
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
stw %r20,-16(0,%r30)
|
|
||||||
xmpyu %fr22L,%fr11L,%fr9
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
fstws %fr10R,-16(0,%r30)
|
|
||||||
copy %r2,%r22
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
fstws %fr9R,-16(0,%r30)
|
|
||||||
xmpyu %fr11L,%fr22L,%fr8
|
|
||||||
copy %r2,%r19
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
copy %r2,%r20
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
addl %r2,%r19,%r21
|
|
||||||
comclr,<<= %r19,%r21,0
|
|
||||||
addl %r20,%r31,%r20
|
|
||||||
L$0020
|
|
||||||
extru %r21,15,16,%r19
|
|
||||||
addl %r20,%r19,%r20
|
|
||||||
zdep %r21,15,16,%r19
|
|
||||||
addl %r22,%r19,%r22
|
|
||||||
comclr,<<= %r19,%r22,0
|
|
||||||
addi,tr 1,%r20,%r19
|
|
||||||
copy %r20,%r19
|
|
||||||
addl %r22,%r28,%r20
|
|
||||||
comclr,<<= %r28,%r20,0
|
|
||||||
addi 1,%r19,%r19
|
|
||||||
ldw 0(0,%r23),%r28
|
|
||||||
addl %r20,%r28,%r20
|
|
||||||
comclr,<<= %r28,%r20,0
|
|
||||||
addi,tr 1,%r19,%r28
|
|
||||||
copy %r19,%r28
|
|
||||||
addib,= -1,%r24,L$0003
|
|
||||||
stw %r20,0(0,%r23)
|
|
||||||
ldo 16(%r29),%r29
|
|
||||||
ldo 16(%r25),%r25
|
|
||||||
ldo 16(%r23),%r23
|
|
||||||
bl L$0002,0
|
|
||||||
ldo 16(%r26),%r26
|
|
||||||
L$0003
|
|
||||||
ldw -20(0,%r30),%r2
|
|
||||||
bv,n 0(%r2)
|
|
||||||
.EXIT
|
|
||||||
.PROCEND
|
|
||||||
.align 4
|
|
||||||
.EXPORT bn_mul_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR
|
|
||||||
bn_mul_words
|
|
||||||
.PROC
|
|
||||||
.CALLINFO FRAME=0,CALLS,SAVE_RP
|
|
||||||
.ENTRY
|
|
||||||
stw %r2,-20(0,%r30)
|
|
||||||
ldi 0,%r28
|
|
||||||
extru %r23,31,16,%r2
|
|
||||||
stw %r2,-16(0,%r30)
|
|
||||||
extru %r23,15,16,%r23
|
|
||||||
ldil L'65536,%r31
|
|
||||||
fldws -16(0,%r30),%fr11R
|
|
||||||
stw %r23,-16(0,%r30)
|
|
||||||
ldo 12(%r26),%r29
|
|
||||||
ldo 12(%r25),%r23
|
|
||||||
fldws -16(0,%r30),%fr11L
|
|
||||||
L$0026
|
|
||||||
ldw 0(0,%r25),%r19
|
|
||||||
extru %r19,31,16,%r20
|
|
||||||
stw %r20,-16(0,%r30)
|
|
||||||
extru %r19,15,16,%r19
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
stw %r19,-16(0,%r30)
|
|
||||||
xmpyu %fr22L,%fr11R,%fr8
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
xmpyu %fr11R,%fr22L,%fr10
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
stw %r20,-16(0,%r30)
|
|
||||||
xmpyu %fr22L,%fr11L,%fr9
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
fstws %fr10R,-16(0,%r30)
|
|
||||||
copy %r2,%r22
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
fstws %fr9R,-16(0,%r30)
|
|
||||||
xmpyu %fr11L,%fr22L,%fr8
|
|
||||||
copy %r2,%r19
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
copy %r2,%r20
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
addl %r2,%r19,%r21
|
|
||||||
comclr,<<= %r19,%r21,0
|
|
||||||
addl %r20,%r31,%r20
|
|
||||||
L$0029
|
|
||||||
extru %r21,15,16,%r19
|
|
||||||
addl %r20,%r19,%r20
|
|
||||||
zdep %r21,15,16,%r19
|
|
||||||
addl %r22,%r19,%r22
|
|
||||||
comclr,<<= %r19,%r22,0
|
|
||||||
addi,tr 1,%r20,%r19
|
|
||||||
copy %r20,%r19
|
|
||||||
addl %r22,%r28,%r20
|
|
||||||
comclr,<<= %r28,%r20,0
|
|
||||||
addi,tr 1,%r19,%r28
|
|
||||||
copy %r19,%r28
|
|
||||||
addib,= -1,%r24,L$0027
|
|
||||||
stw %r20,0(0,%r26)
|
|
||||||
ldw -8(0,%r23),%r19
|
|
||||||
extru %r19,31,16,%r20
|
|
||||||
stw %r20,-16(0,%r30)
|
|
||||||
extru %r19,15,16,%r19
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
stw %r19,-16(0,%r30)
|
|
||||||
xmpyu %fr22L,%fr11R,%fr8
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
xmpyu %fr11R,%fr22L,%fr10
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
stw %r20,-16(0,%r30)
|
|
||||||
xmpyu %fr22L,%fr11L,%fr9
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
fstws %fr10R,-16(0,%r30)
|
|
||||||
copy %r2,%r22
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
fstws %fr9R,-16(0,%r30)
|
|
||||||
xmpyu %fr11L,%fr22L,%fr8
|
|
||||||
copy %r2,%r19
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
copy %r2,%r20
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
addl %r2,%r19,%r21
|
|
||||||
comclr,<<= %r19,%r21,0
|
|
||||||
addl %r20,%r31,%r20
|
|
||||||
L$0033
|
|
||||||
extru %r21,15,16,%r19
|
|
||||||
addl %r20,%r19,%r20
|
|
||||||
zdep %r21,15,16,%r19
|
|
||||||
addl %r22,%r19,%r22
|
|
||||||
comclr,<<= %r19,%r22,0
|
|
||||||
addi,tr 1,%r20,%r19
|
|
||||||
copy %r20,%r19
|
|
||||||
addl %r22,%r28,%r20
|
|
||||||
comclr,<<= %r28,%r20,0
|
|
||||||
addi,tr 1,%r19,%r28
|
|
||||||
copy %r19,%r28
|
|
||||||
addib,= -1,%r24,L$0027
|
|
||||||
stw %r20,-8(0,%r29)
|
|
||||||
ldw -4(0,%r23),%r19
|
|
||||||
extru %r19,31,16,%r20
|
|
||||||
stw %r20,-16(0,%r30)
|
|
||||||
extru %r19,15,16,%r19
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
stw %r19,-16(0,%r30)
|
|
||||||
xmpyu %fr22L,%fr11R,%fr8
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
xmpyu %fr11R,%fr22L,%fr10
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
stw %r20,-16(0,%r30)
|
|
||||||
xmpyu %fr22L,%fr11L,%fr9
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
fstws %fr10R,-16(0,%r30)
|
|
||||||
copy %r2,%r22
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
fstws %fr9R,-16(0,%r30)
|
|
||||||
xmpyu %fr11L,%fr22L,%fr8
|
|
||||||
copy %r2,%r19
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
copy %r2,%r20
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
addl %r2,%r19,%r21
|
|
||||||
comclr,<<= %r19,%r21,0
|
|
||||||
addl %r20,%r31,%r20
|
|
||||||
L$0037
|
|
||||||
extru %r21,15,16,%r19
|
|
||||||
addl %r20,%r19,%r20
|
|
||||||
zdep %r21,15,16,%r19
|
|
||||||
addl %r22,%r19,%r22
|
|
||||||
comclr,<<= %r19,%r22,0
|
|
||||||
addi,tr 1,%r20,%r19
|
|
||||||
copy %r20,%r19
|
|
||||||
addl %r22,%r28,%r20
|
|
||||||
comclr,<<= %r28,%r20,0
|
|
||||||
addi,tr 1,%r19,%r28
|
|
||||||
copy %r19,%r28
|
|
||||||
addib,= -1,%r24,L$0027
|
|
||||||
stw %r20,-4(0,%r29)
|
|
||||||
ldw 0(0,%r23),%r19
|
|
||||||
extru %r19,31,16,%r20
|
|
||||||
stw %r20,-16(0,%r30)
|
|
||||||
extru %r19,15,16,%r19
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
stw %r19,-16(0,%r30)
|
|
||||||
xmpyu %fr22L,%fr11R,%fr8
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
xmpyu %fr11R,%fr22L,%fr10
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
stw %r20,-16(0,%r30)
|
|
||||||
xmpyu %fr22L,%fr11L,%fr9
|
|
||||||
fldws -16(0,%r30),%fr22L
|
|
||||||
fstws %fr10R,-16(0,%r30)
|
|
||||||
copy %r2,%r22
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
fstws %fr9R,-16(0,%r30)
|
|
||||||
xmpyu %fr11L,%fr22L,%fr8
|
|
||||||
copy %r2,%r19
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
copy %r2,%r20
|
|
||||||
ldw -16(0,%r30),%r2
|
|
||||||
addl %r2,%r19,%r21
|
|
||||||
comclr,<<= %r19,%r21,0
|
|
||||||
addl %r20,%r31,%r20
|
|
||||||
L$0041
|
|
||||||
extru %r21,15,16,%r19
|
|
||||||
addl %r20,%r19,%r20
|
|
||||||
zdep %r21,15,16,%r19
|
|
||||||
addl %r22,%r19,%r22
|
|
||||||
comclr,<<= %r19,%r22,0
|
|
||||||
addi,tr 1,%r20,%r19
|
|
||||||
copy %r20,%r19
|
|
||||||
addl %r22,%r28,%r20
|
|
||||||
comclr,<<= %r28,%r20,0
|
|
||||||
addi,tr 1,%r19,%r28
|
|
||||||
copy %r19,%r28
|
|
||||||
addib,= -1,%r24,L$0027
|
|
||||||
stw %r20,0(0,%r29)
|
|
||||||
ldo 16(%r23),%r23
|
|
||||||
ldo 16(%r25),%r25
|
|
||||||
ldo 16(%r29),%r29
|
|
||||||
bl L$0026,0
|
|
||||||
ldo 16(%r26),%r26
|
|
||||||
L$0027
|
|
||||||
ldw -20(0,%r30),%r2
|
|
||||||
bv,n 0(%r2)
|
|
||||||
.EXIT
|
|
||||||
.PROCEND
|
|
||||||
.align 4
|
|
||||||
.EXPORT bn_sqr_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR
|
|
||||||
bn_sqr_words
|
|
||||||
.PROC
|
|
||||||
.CALLINFO FRAME=0,NO_CALLS
|
|
||||||
.ENTRY
|
|
||||||
ldo 28(%r26),%r23
|
|
||||||
ldo 12(%r25),%r28
|
|
||||||
L$0046
|
|
||||||
ldw 0(0,%r25),%r21
|
|
||||||
extru %r21,31,16,%r22
|
|
||||||
stw %r22,-16(0,%r30)
|
|
||||||
extru %r21,15,16,%r21
|
|
||||||
fldws -16(0,%r30),%fr10L
|
|
||||||
stw %r21,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
xmpyu %fr10L,%fr10R,%fr8
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
ldw -16(0,%r30),%r29
|
|
||||||
stw %r22,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
stw %r21,-16(0,%r30)
|
|
||||||
copy %r29,%r19
|
|
||||||
xmpyu %fr10L,%fr10R,%fr8
|
|
||||||
fldws -16(0,%r30),%fr10L
|
|
||||||
stw %r21,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
extru %r19,16,17,%r20
|
|
||||||
zdep %r19,14,15,%r19
|
|
||||||
ldw -16(0,%r30),%r29
|
|
||||||
xmpyu %fr10L,%fr10R,%fr9
|
|
||||||
addl %r29,%r19,%r22
|
|
||||||
stw %r22,0(0,%r26)
|
|
||||||
fstws %fr9R,-16(0,%r30)
|
|
||||||
ldw -16(0,%r30),%r29
|
|
||||||
addl %r29,%r20,%r21
|
|
||||||
comclr,<<= %r19,%r22,0
|
|
||||||
addi 1,%r21,%r21
|
|
||||||
addib,= -1,%r24,L$0057
|
|
||||||
stw %r21,-24(0,%r23)
|
|
||||||
ldw -8(0,%r28),%r21
|
|
||||||
extru %r21,31,16,%r22
|
|
||||||
stw %r22,-16(0,%r30)
|
|
||||||
extru %r21,15,16,%r21
|
|
||||||
fldws -16(0,%r30),%fr10L
|
|
||||||
stw %r21,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
xmpyu %fr10L,%fr10R,%fr8
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
ldw -16(0,%r30),%r29
|
|
||||||
stw %r22,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
stw %r21,-16(0,%r30)
|
|
||||||
copy %r29,%r19
|
|
||||||
xmpyu %fr10L,%fr10R,%fr8
|
|
||||||
fldws -16(0,%r30),%fr10L
|
|
||||||
stw %r21,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
extru %r19,16,17,%r20
|
|
||||||
zdep %r19,14,15,%r19
|
|
||||||
ldw -16(0,%r30),%r29
|
|
||||||
xmpyu %fr10L,%fr10R,%fr9
|
|
||||||
addl %r29,%r19,%r22
|
|
||||||
stw %r22,-20(0,%r23)
|
|
||||||
fstws %fr9R,-16(0,%r30)
|
|
||||||
ldw -16(0,%r30),%r29
|
|
||||||
addl %r29,%r20,%r21
|
|
||||||
comclr,<<= %r19,%r22,0
|
|
||||||
addi 1,%r21,%r21
|
|
||||||
addib,= -1,%r24,L$0057
|
|
||||||
stw %r21,-16(0,%r23)
|
|
||||||
ldw -4(0,%r28),%r21
|
|
||||||
extru %r21,31,16,%r22
|
|
||||||
stw %r22,-16(0,%r30)
|
|
||||||
extru %r21,15,16,%r21
|
|
||||||
fldws -16(0,%r30),%fr10L
|
|
||||||
stw %r21,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
xmpyu %fr10L,%fr10R,%fr8
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
ldw -16(0,%r30),%r29
|
|
||||||
stw %r22,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
stw %r21,-16(0,%r30)
|
|
||||||
copy %r29,%r19
|
|
||||||
xmpyu %fr10L,%fr10R,%fr8
|
|
||||||
fldws -16(0,%r30),%fr10L
|
|
||||||
stw %r21,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
extru %r19,16,17,%r20
|
|
||||||
zdep %r19,14,15,%r19
|
|
||||||
ldw -16(0,%r30),%r29
|
|
||||||
xmpyu %fr10L,%fr10R,%fr9
|
|
||||||
addl %r29,%r19,%r22
|
|
||||||
stw %r22,-12(0,%r23)
|
|
||||||
fstws %fr9R,-16(0,%r30)
|
|
||||||
ldw -16(0,%r30),%r29
|
|
||||||
addl %r29,%r20,%r21
|
|
||||||
comclr,<<= %r19,%r22,0
|
|
||||||
addi 1,%r21,%r21
|
|
||||||
addib,= -1,%r24,L$0057
|
|
||||||
stw %r21,-8(0,%r23)
|
|
||||||
ldw 0(0,%r28),%r21
|
|
||||||
extru %r21,31,16,%r22
|
|
||||||
stw %r22,-16(0,%r30)
|
|
||||||
extru %r21,15,16,%r21
|
|
||||||
fldws -16(0,%r30),%fr10L
|
|
||||||
stw %r21,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
xmpyu %fr10L,%fr10R,%fr8
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
ldw -16(0,%r30),%r29
|
|
||||||
stw %r22,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
stw %r21,-16(0,%r30)
|
|
||||||
copy %r29,%r19
|
|
||||||
xmpyu %fr10L,%fr10R,%fr8
|
|
||||||
fldws -16(0,%r30),%fr10L
|
|
||||||
stw %r21,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
extru %r19,16,17,%r20
|
|
||||||
zdep %r19,14,15,%r19
|
|
||||||
ldw -16(0,%r30),%r29
|
|
||||||
xmpyu %fr10L,%fr10R,%fr9
|
|
||||||
addl %r29,%r19,%r22
|
|
||||||
stw %r22,-4(0,%r23)
|
|
||||||
fstws %fr9R,-16(0,%r30)
|
|
||||||
ldw -16(0,%r30),%r29
|
|
||||||
addl %r29,%r20,%r21
|
|
||||||
comclr,<<= %r19,%r22,0
|
|
||||||
addi 1,%r21,%r21
|
|
||||||
addib,= -1,%r24,L$0057
|
|
||||||
stw %r21,0(0,%r23)
|
|
||||||
ldo 16(%r28),%r28
|
|
||||||
ldo 16(%r25),%r25
|
|
||||||
ldo 32(%r23),%r23
|
|
||||||
bl L$0046,0
|
|
||||||
ldo 32(%r26),%r26
|
|
||||||
L$0057
|
|
||||||
bv,n 0(%r2)
|
|
||||||
.EXIT
|
|
||||||
.PROCEND
|
|
||||||
.IMPORT BN_num_bits_word,CODE
|
|
||||||
.IMPORT fprintf,CODE
|
|
||||||
.IMPORT __iob,DATA
|
|
||||||
.SPACE $TEXT$
|
|
||||||
.SUBSPA $LIT$
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
L$C0000
|
|
||||||
.STRING "Division would overflow\x0a\x00"
|
|
||||||
.IMPORT abort,CODE
|
|
||||||
.SPACE $TEXT$
|
|
||||||
.SUBSPA $CODE$
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
.EXPORT bn_div64,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,RTNVAL=GR
|
|
||||||
bn_div64
|
|
||||||
.PROC
|
|
||||||
.CALLINFO FRAME=128,CALLS,SAVE_RP,ENTRY_GR=8
|
|
||||||
.ENTRY
|
|
||||||
stw %r2,-20(0,%r30)
|
|
||||||
stwm %r8,128(0,%r30)
|
|
||||||
stw %r7,-124(0,%r30)
|
|
||||||
stw %r4,-112(0,%r30)
|
|
||||||
stw %r3,-108(0,%r30)
|
|
||||||
copy %r26,%r3
|
|
||||||
copy %r25,%r4
|
|
||||||
stw %r6,-120(0,%r30)
|
|
||||||
ldi 0,%r7
|
|
||||||
stw %r5,-116(0,%r30)
|
|
||||||
movb,<> %r24,%r5,L$0059
|
|
||||||
ldi 2,%r6
|
|
||||||
bl L$0076,0
|
|
||||||
ldi -1,%r28
|
|
||||||
L$0059
|
|
||||||
.CALL ARGW0=GR
|
|
||||||
bl BN_num_bits_word,%r2
|
|
||||||
copy %r5,%r26
|
|
||||||
ldi 32,%r19
|
|
||||||
comb,= %r19,%r28,L$0060
|
|
||||||
subi 31,%r28,%r19
|
|
||||||
mtsar %r19
|
|
||||||
zvdepi 1,32,%r19
|
|
||||||
comb,>>= %r19,%r3,L$0060
|
|
||||||
addil LR'__iob-$global$+32,%r27
|
|
||||||
ldo RR'__iob-$global$+32(%r1),%r26
|
|
||||||
ldil LR'L$C0000,%r25
|
|
||||||
.CALL ARGW0=GR,ARGW1=GR
|
|
||||||
bl fprintf,%r2
|
|
||||||
ldo RR'L$C0000(%r25),%r25
|
|
||||||
.CALL
|
|
||||||
bl abort,%r2
|
|
||||||
nop
|
|
||||||
L$0060
|
|
||||||
comb,>> %r5,%r3,L$0061
|
|
||||||
subi 32,%r28,%r28
|
|
||||||
sub %r3,%r5,%r3
|
|
||||||
L$0061
|
|
||||||
comib,= 0,%r28,L$0062
|
|
||||||
subi 31,%r28,%r19
|
|
||||||
mtsar %r19
|
|
||||||
zvdep %r5,32,%r5
|
|
||||||
zvdep %r3,32,%r21
|
|
||||||
subi 32,%r28,%r20
|
|
||||||
mtsar %r20
|
|
||||||
vshd 0,%r4,%r20
|
|
||||||
or %r21,%r20,%r3
|
|
||||||
mtsar %r19
|
|
||||||
zvdep %r4,32,%r4
|
|
||||||
L$0062
|
|
||||||
extru %r5,15,16,%r23
|
|
||||||
extru %r5,31,16,%r28
|
|
||||||
L$0063
|
|
||||||
extru %r3,15,16,%r19
|
|
||||||
comb,<> %r23,%r19,L$0066
|
|
||||||
copy %r3,%r26
|
|
||||||
bl L$0067,0
|
|
||||||
zdepi -1,31,16,%r29
|
|
||||||
L$0066
|
|
||||||
.IMPORT $$divU,MILLICODE
|
|
||||||
bl $$divU,%r31
|
|
||||||
copy %r23,%r25
|
|
||||||
L$0067
|
|
||||||
stw %r29,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10L
|
|
||||||
stw %r28,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
stw %r23,-16(0,%r30)
|
|
||||||
xmpyu %fr10L,%fr10R,%fr8
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
xmpyu %fr10L,%fr10R,%fr9
|
|
||||||
ldw -16(0,%r30),%r8
|
|
||||||
fstws %fr9R,-16(0,%r30)
|
|
||||||
copy %r8,%r22
|
|
||||||
ldw -16(0,%r30),%r8
|
|
||||||
extru %r4,15,16,%r24
|
|
||||||
copy %r8,%r21
|
|
||||||
L$0068
|
|
||||||
sub %r3,%r21,%r20
|
|
||||||
copy %r20,%r19
|
|
||||||
depi 0,31,16,%r19
|
|
||||||
comib,<> 0,%r19,L$0069
|
|
||||||
zdep %r20,15,16,%r19
|
|
||||||
addl %r19,%r24,%r19
|
|
||||||
comb,>>= %r19,%r22,L$0069
|
|
||||||
sub %r22,%r28,%r22
|
|
||||||
sub %r21,%r23,%r21
|
|
||||||
bl L$0068,0
|
|
||||||
ldo -1(%r29),%r29
|
|
||||||
L$0069
|
|
||||||
stw %r29,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10L
|
|
||||||
stw %r28,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
xmpyu %fr10L,%fr10R,%fr8
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
ldw -16(0,%r30),%r8
|
|
||||||
stw %r23,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
copy %r8,%r19
|
|
||||||
xmpyu %fr10L,%fr10R,%fr8
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
extru %r19,15,16,%r20
|
|
||||||
ldw -16(0,%r30),%r8
|
|
||||||
zdep %r19,15,16,%r19
|
|
||||||
addl %r8,%r20,%r20
|
|
||||||
comclr,<<= %r19,%r4,0
|
|
||||||
addi 1,%r20,%r20
|
|
||||||
comb,<<= %r20,%r3,L$0074
|
|
||||||
sub %r4,%r19,%r4
|
|
||||||
addl %r3,%r5,%r3
|
|
||||||
ldo -1(%r29),%r29
|
|
||||||
L$0074
|
|
||||||
addib,= -1,%r6,L$0064
|
|
||||||
sub %r3,%r20,%r3
|
|
||||||
zdep %r29,15,16,%r7
|
|
||||||
shd %r3,%r4,16,%r3
|
|
||||||
bl L$0063,0
|
|
||||||
zdep %r4,15,16,%r4
|
|
||||||
L$0064
|
|
||||||
or %r7,%r29,%r28
|
|
||||||
L$0076
|
|
||||||
ldw -148(0,%r30),%r2
|
|
||||||
ldw -124(0,%r30),%r7
|
|
||||||
ldw -120(0,%r30),%r6
|
|
||||||
ldw -116(0,%r30),%r5
|
|
||||||
ldw -112(0,%r30),%r4
|
|
||||||
ldw -108(0,%r30),%r3
|
|
||||||
bv 0(%r2)
|
|
||||||
ldwm -128(0,%r30),%r8
|
|
||||||
.EXIT
|
|
||||||
.PROCEND
|
|
@ -1,646 +0,0 @@
|
|||||||
.file 1 "../bn_mulw.c"
|
|
||||||
.set nobopt
|
|
||||||
.option pic2
|
|
||||||
|
|
||||||
# GNU C 2.6.3 [AL 1.1, MM 40] SGI running IRIX 5.0 compiled by GNU C
|
|
||||||
|
|
||||||
# Cc1 defaults:
|
|
||||||
# -mabicalls
|
|
||||||
|
|
||||||
# Cc1 arguments (-G value = 0, Cpu = 3000, ISA = 1):
|
|
||||||
# -quiet -dumpbase -O2 -o
|
|
||||||
|
|
||||||
gcc2_compiled.:
|
|
||||||
__gnu_compiled_c:
|
|
||||||
.rdata
|
|
||||||
|
|
||||||
.byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f
|
|
||||||
.byte 0x6e,0x3a,0x20,0x31,0x2e,0x34,0x39,0x20
|
|
||||||
.byte 0x24,0x0
|
|
||||||
|
|
||||||
.byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f
|
|
||||||
.byte 0x6e,0x3a,0x20,0x31,0x2e,0x33,0x34,0x20
|
|
||||||
.byte 0x24,0x0
|
|
||||||
|
|
||||||
.byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f
|
|
||||||
.byte 0x6e,0x3a,0x20,0x31,0x2e,0x35,0x20,0x24
|
|
||||||
.byte 0x0
|
|
||||||
|
|
||||||
.byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f
|
|
||||||
.byte 0x6e,0x3a,0x20,0x31,0x2e,0x38,0x20,0x24
|
|
||||||
.byte 0x0
|
|
||||||
|
|
||||||
.byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f
|
|
||||||
.byte 0x6e,0x3a,0x20,0x31,0x2e,0x32,0x33,0x20
|
|
||||||
.byte 0x24,0x0
|
|
||||||
|
|
||||||
.byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f
|
|
||||||
.byte 0x6e,0x3a,0x20,0x31,0x2e,0x37,0x38,0x20
|
|
||||||
.byte 0x24,0x0
|
|
||||||
|
|
||||||
.byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f
|
|
||||||
.byte 0x6e,0x3a,0x20,0x33,0x2e,0x37,0x30,0x20
|
|
||||||
.byte 0x24,0x0
|
|
||||||
|
|
||||||
.byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f
|
|
||||||
.byte 0x6e,0x3a,0x20,0x31,0x2e,0x32,0x20,0x24
|
|
||||||
.byte 0x0
|
|
||||||
|
|
||||||
.byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f
|
|
||||||
.byte 0x6e,0x3a,0x20,0x31,0x2e,0x34,0x20,0x24
|
|
||||||
.byte 0x0
|
|
||||||
|
|
||||||
.byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f
|
|
||||||
.byte 0x6e,0x3a,0x20,0x31,0x2e,0x38,0x20,0x24
|
|
||||||
.byte 0x0
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl bn_mul_add_words
|
|
||||||
.ent bn_mul_add_words
|
|
||||||
bn_mul_add_words:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, extra= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
.set noreorder
|
|
||||||
.cpload $25
|
|
||||||
.set reorder
|
|
||||||
move $12,$4
|
|
||||||
move $14,$5
|
|
||||||
move $9,$6
|
|
||||||
move $13,$7
|
|
||||||
move $8,$0
|
|
||||||
addu $10,$12,12
|
|
||||||
addu $11,$14,12
|
|
||||||
$L2:
|
|
||||||
lw $6,0($14)
|
|
||||||
#nop
|
|
||||||
multu $13,$6
|
|
||||||
mfhi $6
|
|
||||||
mflo $7
|
|
||||||
#nop
|
|
||||||
move $5,$8
|
|
||||||
move $4,$0
|
|
||||||
lw $3,0($12)
|
|
||||||
addu $9,$9,-1
|
|
||||||
move $2,$0
|
|
||||||
addu $7,$7,$3
|
|
||||||
sltu $8,$7,$3
|
|
||||||
addu $6,$6,$2
|
|
||||||
addu $6,$6,$8
|
|
||||||
addu $7,$7,$5
|
|
||||||
sltu $2,$7,$5
|
|
||||||
addu $6,$6,$4
|
|
||||||
addu $6,$6,$2
|
|
||||||
srl $3,$6,0
|
|
||||||
move $2,$0
|
|
||||||
move $8,$3
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $9,$0,$L3
|
|
||||||
sw $7,0($12)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $6,-8($11)
|
|
||||||
#nop
|
|
||||||
multu $13,$6
|
|
||||||
mfhi $6
|
|
||||||
mflo $7
|
|
||||||
#nop
|
|
||||||
move $5,$8
|
|
||||||
move $4,$0
|
|
||||||
lw $3,-8($10)
|
|
||||||
addu $9,$9,-1
|
|
||||||
move $2,$0
|
|
||||||
addu $7,$7,$3
|
|
||||||
sltu $8,$7,$3
|
|
||||||
addu $6,$6,$2
|
|
||||||
addu $6,$6,$8
|
|
||||||
addu $7,$7,$5
|
|
||||||
sltu $2,$7,$5
|
|
||||||
addu $6,$6,$4
|
|
||||||
addu $6,$6,$2
|
|
||||||
srl $3,$6,0
|
|
||||||
move $2,$0
|
|
||||||
move $8,$3
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $9,$0,$L3
|
|
||||||
sw $7,-8($10)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $6,-4($11)
|
|
||||||
#nop
|
|
||||||
multu $13,$6
|
|
||||||
mfhi $6
|
|
||||||
mflo $7
|
|
||||||
#nop
|
|
||||||
move $5,$8
|
|
||||||
move $4,$0
|
|
||||||
lw $3,-4($10)
|
|
||||||
addu $9,$9,-1
|
|
||||||
move $2,$0
|
|
||||||
addu $7,$7,$3
|
|
||||||
sltu $8,$7,$3
|
|
||||||
addu $6,$6,$2
|
|
||||||
addu $6,$6,$8
|
|
||||||
addu $7,$7,$5
|
|
||||||
sltu $2,$7,$5
|
|
||||||
addu $6,$6,$4
|
|
||||||
addu $6,$6,$2
|
|
||||||
srl $3,$6,0
|
|
||||||
move $2,$0
|
|
||||||
move $8,$3
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $9,$0,$L3
|
|
||||||
sw $7,-4($10)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $6,0($11)
|
|
||||||
#nop
|
|
||||||
multu $13,$6
|
|
||||||
mfhi $6
|
|
||||||
mflo $7
|
|
||||||
#nop
|
|
||||||
move $5,$8
|
|
||||||
move $4,$0
|
|
||||||
lw $3,0($10)
|
|
||||||
addu $9,$9,-1
|
|
||||||
move $2,$0
|
|
||||||
addu $7,$7,$3
|
|
||||||
sltu $8,$7,$3
|
|
||||||
addu $6,$6,$2
|
|
||||||
addu $6,$6,$8
|
|
||||||
addu $7,$7,$5
|
|
||||||
sltu $2,$7,$5
|
|
||||||
addu $6,$6,$4
|
|
||||||
addu $6,$6,$2
|
|
||||||
srl $3,$6,0
|
|
||||||
move $2,$0
|
|
||||||
move $8,$3
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $9,$0,$L3
|
|
||||||
sw $7,0($10)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addu $11,$11,16
|
|
||||||
addu $14,$14,16
|
|
||||||
addu $10,$10,16
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L2
|
|
||||||
addu $12,$12,16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L3:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
move $2,$8
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end bn_mul_add_words
|
|
||||||
.align 2
|
|
||||||
.globl bn_mul_words
|
|
||||||
.ent bn_mul_words
|
|
||||||
bn_mul_words:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, extra= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
.set noreorder
|
|
||||||
.cpload $25
|
|
||||||
.set reorder
|
|
||||||
move $11,$4
|
|
||||||
move $12,$5
|
|
||||||
move $8,$6
|
|
||||||
move $6,$0
|
|
||||||
addu $10,$11,12
|
|
||||||
addu $9,$12,12
|
|
||||||
$L10:
|
|
||||||
lw $4,0($12)
|
|
||||||
#nop
|
|
||||||
multu $7,$4
|
|
||||||
mfhi $4
|
|
||||||
mflo $5
|
|
||||||
#nop
|
|
||||||
move $3,$6
|
|
||||||
move $2,$0
|
|
||||||
addu $8,$8,-1
|
|
||||||
addu $5,$5,$3
|
|
||||||
sltu $6,$5,$3
|
|
||||||
addu $4,$4,$2
|
|
||||||
addu $4,$4,$6
|
|
||||||
srl $3,$4,0
|
|
||||||
move $2,$0
|
|
||||||
move $6,$3
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $8,$0,$L11
|
|
||||||
sw $5,0($11)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $4,-8($9)
|
|
||||||
#nop
|
|
||||||
multu $7,$4
|
|
||||||
mfhi $4
|
|
||||||
mflo $5
|
|
||||||
#nop
|
|
||||||
move $3,$6
|
|
||||||
move $2,$0
|
|
||||||
addu $8,$8,-1
|
|
||||||
addu $5,$5,$3
|
|
||||||
sltu $6,$5,$3
|
|
||||||
addu $4,$4,$2
|
|
||||||
addu $4,$4,$6
|
|
||||||
srl $3,$4,0
|
|
||||||
move $2,$0
|
|
||||||
move $6,$3
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $8,$0,$L11
|
|
||||||
sw $5,-8($10)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $4,-4($9)
|
|
||||||
#nop
|
|
||||||
multu $7,$4
|
|
||||||
mfhi $4
|
|
||||||
mflo $5
|
|
||||||
#nop
|
|
||||||
move $3,$6
|
|
||||||
move $2,$0
|
|
||||||
addu $8,$8,-1
|
|
||||||
addu $5,$5,$3
|
|
||||||
sltu $6,$5,$3
|
|
||||||
addu $4,$4,$2
|
|
||||||
addu $4,$4,$6
|
|
||||||
srl $3,$4,0
|
|
||||||
move $2,$0
|
|
||||||
move $6,$3
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $8,$0,$L11
|
|
||||||
sw $5,-4($10)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $4,0($9)
|
|
||||||
#nop
|
|
||||||
multu $7,$4
|
|
||||||
mfhi $4
|
|
||||||
mflo $5
|
|
||||||
#nop
|
|
||||||
move $3,$6
|
|
||||||
move $2,$0
|
|
||||||
addu $8,$8,-1
|
|
||||||
addu $5,$5,$3
|
|
||||||
sltu $6,$5,$3
|
|
||||||
addu $4,$4,$2
|
|
||||||
addu $4,$4,$6
|
|
||||||
srl $3,$4,0
|
|
||||||
move $2,$0
|
|
||||||
move $6,$3
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $8,$0,$L11
|
|
||||||
sw $5,0($10)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addu $9,$9,16
|
|
||||||
addu $12,$12,16
|
|
||||||
addu $10,$10,16
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L10
|
|
||||||
addu $11,$11,16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L11:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
move $2,$6
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end bn_mul_words
|
|
||||||
.align 2
|
|
||||||
.globl bn_sqr_words
|
|
||||||
.ent bn_sqr_words
|
|
||||||
bn_sqr_words:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, extra= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
.set noreorder
|
|
||||||
.cpload $25
|
|
||||||
.set reorder
|
|
||||||
move $9,$4
|
|
||||||
addu $7,$9,28
|
|
||||||
addu $8,$5,12
|
|
||||||
$L18:
|
|
||||||
lw $2,0($5)
|
|
||||||
#nop
|
|
||||||
multu $2,$2
|
|
||||||
mfhi $2
|
|
||||||
mflo $3
|
|
||||||
#nop
|
|
||||||
addu $6,$6,-1
|
|
||||||
sw $3,0($9)
|
|
||||||
srl $3,$2,0
|
|
||||||
move $2,$0
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $6,$0,$L19
|
|
||||||
sw $3,-24($7)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $2,-8($8)
|
|
||||||
#nop
|
|
||||||
multu $2,$2
|
|
||||||
mfhi $2
|
|
||||||
mflo $3
|
|
||||||
#nop
|
|
||||||
addu $6,$6,-1
|
|
||||||
sw $3,-20($7)
|
|
||||||
srl $3,$2,0
|
|
||||||
move $2,$0
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $6,$0,$L19
|
|
||||||
sw $3,-16($7)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $2,-4($8)
|
|
||||||
#nop
|
|
||||||
multu $2,$2
|
|
||||||
mfhi $2
|
|
||||||
mflo $3
|
|
||||||
#nop
|
|
||||||
addu $6,$6,-1
|
|
||||||
sw $3,-12($7)
|
|
||||||
srl $3,$2,0
|
|
||||||
move $2,$0
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $6,$0,$L19
|
|
||||||
sw $3,-8($7)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $2,0($8)
|
|
||||||
#nop
|
|
||||||
multu $2,$2
|
|
||||||
mfhi $2
|
|
||||||
mflo $3
|
|
||||||
#nop
|
|
||||||
addu $6,$6,-1
|
|
||||||
sw $3,-4($7)
|
|
||||||
srl $3,$2,0
|
|
||||||
move $2,$0
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $6,$0,$L19
|
|
||||||
sw $3,0($7)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addu $8,$8,16
|
|
||||||
addu $5,$5,16
|
|
||||||
addu $7,$7,32
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L18
|
|
||||||
addu $9,$9,32
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L19:
|
|
||||||
j $31
|
|
||||||
.end bn_sqr_words
|
|
||||||
.rdata
|
|
||||||
.align 2
|
|
||||||
$LC0:
|
|
||||||
|
|
||||||
.byte 0x44,0x69,0x76,0x69,0x73,0x69,0x6f,0x6e
|
|
||||||
.byte 0x20,0x77,0x6f,0x75,0x6c,0x64,0x20,0x6f
|
|
||||||
.byte 0x76,0x65,0x72,0x66,0x6c,0x6f,0x77,0xa
|
|
||||||
.byte 0x0
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl bn_div64
|
|
||||||
.ent bn_div64
|
|
||||||
bn_div64:
|
|
||||||
.frame $sp,56,$31 # vars= 0, regs= 7/0, args= 16, extra= 8
|
|
||||||
.mask 0x901f0000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
.set noreorder
|
|
||||||
.cpload $25
|
|
||||||
.set reorder
|
|
||||||
subu $sp,$sp,56
|
|
||||||
.cprestore 16
|
|
||||||
sw $16,24($sp)
|
|
||||||
move $16,$4
|
|
||||||
sw $17,28($sp)
|
|
||||||
move $17,$5
|
|
||||||
sw $18,32($sp)
|
|
||||||
move $18,$6
|
|
||||||
sw $20,40($sp)
|
|
||||||
move $20,$0
|
|
||||||
sw $19,36($sp)
|
|
||||||
li $19,0x00000002 # 2
|
|
||||||
sw $31,48($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $18,$0,$L26
|
|
||||||
sw $28,44($sp)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L43
|
|
||||||
li $2,-1 # 0xffffffff
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L26:
|
|
||||||
move $4,$18
|
|
||||||
jal BN_num_bits_word
|
|
||||||
move $4,$2
|
|
||||||
li $2,0x00000020 # 32
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $4,$2,$L27
|
|
||||||
li $2,0x00000001 # 1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
sll $2,$2,$4
|
|
||||||
sltu $2,$2,$16
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$0,$L44
|
|
||||||
li $5,0x00000020 # 32
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
la $4,__iob+32
|
|
||||||
la $5,$LC0
|
|
||||||
jal fprintf
|
|
||||||
jal abort
|
|
||||||
$L27:
|
|
||||||
li $5,0x00000020 # 32
|
|
||||||
$L44:
|
|
||||||
sltu $2,$16,$18
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $2,$0,$L28
|
|
||||||
subu $4,$5,$4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
subu $16,$16,$18
|
|
||||||
$L28:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $4,$0,$L29
|
|
||||||
li $10,-65536 # 0xffff0000
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
sll $18,$18,$4
|
|
||||||
sll $3,$16,$4
|
|
||||||
subu $2,$5,$4
|
|
||||||
srl $2,$17,$2
|
|
||||||
or $16,$3,$2
|
|
||||||
sll $17,$17,$4
|
|
||||||
$L29:
|
|
||||||
srl $7,$18,16
|
|
||||||
andi $9,$18,0xffff
|
|
||||||
$L30:
|
|
||||||
srl $2,$16,16
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$7,$L34
|
|
||||||
li $6,0x0000ffff # 65535
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
divu $6,$16,$7
|
|
||||||
$L34:
|
|
||||||
mult $6,$9
|
|
||||||
mflo $5
|
|
||||||
#nop
|
|
||||||
#nop
|
|
||||||
mult $6,$7
|
|
||||||
and $2,$17,$10
|
|
||||||
srl $8,$2,16
|
|
||||||
mflo $4
|
|
||||||
$L35:
|
|
||||||
subu $3,$16,$4
|
|
||||||
and $2,$3,$10
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $2,$0,$L36
|
|
||||||
sll $2,$3,16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addu $2,$2,$8
|
|
||||||
sltu $2,$2,$5
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$0,$L36
|
|
||||||
subu $5,$5,$9
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
subu $4,$4,$7
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L35
|
|
||||||
addu $6,$6,-1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L36:
|
|
||||||
mult $6,$7
|
|
||||||
mflo $5
|
|
||||||
#nop
|
|
||||||
#nop
|
|
||||||
mult $6,$9
|
|
||||||
mflo $4
|
|
||||||
#nop
|
|
||||||
#nop
|
|
||||||
srl $3,$4,16
|
|
||||||
sll $2,$4,16
|
|
||||||
and $4,$2,$10
|
|
||||||
sltu $2,$17,$4
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$0,$L40
|
|
||||||
addu $5,$5,$3
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addu $5,$5,1
|
|
||||||
$L40:
|
|
||||||
sltu $2,$16,$5
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$0,$L41
|
|
||||||
subu $17,$17,$4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addu $16,$16,$18
|
|
||||||
addu $6,$6,-1
|
|
||||||
$L41:
|
|
||||||
addu $19,$19,-1
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $19,$0,$L31
|
|
||||||
subu $16,$16,$5
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
sll $20,$6,16
|
|
||||||
sll $3,$16,16
|
|
||||||
srl $2,$17,16
|
|
||||||
or $16,$3,$2
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L30
|
|
||||||
sll $17,$17,16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L31:
|
|
||||||
or $2,$20,$6
|
|
||||||
$L43:
|
|
||||||
lw $31,48($sp)
|
|
||||||
lw $20,40($sp)
|
|
||||||
lw $19,36($sp)
|
|
||||||
lw $18,32($sp)
|
|
||||||
lw $17,28($sp)
|
|
||||||
lw $16,24($sp)
|
|
||||||
addu $sp,$sp,56
|
|
||||||
j $31
|
|
||||||
.end bn_div64
|
|
||||||
|
|
||||||
.globl abort .text
|
|
||||||
.globl fprintf .text
|
|
||||||
.globl BN_num_bits_word .text
|
|
@ -1,133 +0,0 @@
|
|||||||
/* crypto/ec/ecp_recp.c */
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@openssl.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "ec_lcl.h"
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
const EC_METHOD *EC_GFp_recp_method(void)
|
|
||||||
{
|
|
||||||
static const EC_METHOD ret = {
|
|
||||||
ec_GFp_recp_group_init,
|
|
||||||
ec_GFp_recp_group_finish,
|
|
||||||
ec_GFp_recp_group_clear_finish,
|
|
||||||
ec_GFp_recp_group_copy,
|
|
||||||
ec_GFp_recp_group_set_curve_GFp,
|
|
||||||
ec_GFp_simple_group_get_curve_GFp,
|
|
||||||
ec_GFp_simple_group_set_generator,
|
|
||||||
ec_GFp_simple_group_get0_generator,
|
|
||||||
ec_GFp_simple_group_get_order,
|
|
||||||
ec_GFp_simple_group_get_cofactor,
|
|
||||||
ec_GFp_simple_point_init,
|
|
||||||
ec_GFp_simple_point_finish,
|
|
||||||
ec_GFp_simple_point_clear_finish,
|
|
||||||
ec_GFp_simple_point_copy,
|
|
||||||
ec_GFp_simple_point_set_to_infinity,
|
|
||||||
ec_GFp_simple_set_Jprojective_coordinates_GFp,
|
|
||||||
ec_GFp_simple_get_Jprojective_coordinates_GFp,
|
|
||||||
ec_GFp_simple_point_set_affine_coordinates_GFp,
|
|
||||||
ec_GFp_simple_point_get_affine_coordinates_GFp,
|
|
||||||
ec_GFp_simple_set_compressed_coordinates_GFp,
|
|
||||||
ec_GFp_simple_point2oct,
|
|
||||||
ec_GFp_simple_oct2point,
|
|
||||||
ec_GFp_simple_add,
|
|
||||||
ec_GFp_simple_dbl,
|
|
||||||
ec_GFp_simple_invert,
|
|
||||||
ec_GFp_simple_is_at_infinity,
|
|
||||||
ec_GFp_simple_is_on_curve,
|
|
||||||
ec_GFp_simple_cmp,
|
|
||||||
ec_GFp_simple_make_affine,
|
|
||||||
ec_GFp_simple_points_make_affine,
|
|
||||||
ec_GFp_recp_field_mul,
|
|
||||||
ec_GFp_recp_field_sqr,
|
|
||||||
0 /* field_encode */,
|
|
||||||
0 /* field_decode */,
|
|
||||||
0 /* field_set_to_one */ };
|
|
||||||
|
|
||||||
return &ret;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int ec_GFp_recp_group_init(EC_GROUP *group)
|
|
||||||
{
|
|
||||||
int ok;
|
|
||||||
|
|
||||||
ok = ec_GFp_simple_group_init(group);
|
|
||||||
group->field_data1 = NULL;
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int ec_GFp_recp_group_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
|
|
||||||
/* TODO */
|
|
||||||
|
|
||||||
|
|
||||||
void ec_GFp_recp_group_finish(EC_GROUP *group);
|
|
||||||
/* TODO */
|
|
||||||
|
|
||||||
|
|
||||||
void ec_GFp_recp_group_clear_finish(EC_GROUP *group);
|
|
||||||
/* TODO */
|
|
||||||
|
|
||||||
|
|
||||||
int ec_GFp_recp_group_copy(EC_GROUP *dest, const EC_GROUP *src);
|
|
||||||
/* TODO */
|
|
||||||
|
|
||||||
|
|
||||||
int ec_GFp_recp_field_mul(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
|
|
||||||
/* TODO */
|
|
||||||
|
|
||||||
|
|
||||||
int ec_GFp_recp_field_sqr(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a, BN_CTX *ctx);
|
|
||||||
/* TODO */
|
|
@ -1,8 +0,0 @@
|
|||||||
L AEPHK hw_aep_err.h hw_aep_err.c
|
|
||||||
L ATALLA hw_atalla_err.h hw_atalla_err.c
|
|
||||||
L CSWIFT hw_cswift_err.h hw_cswift_err.c
|
|
||||||
L HWCRHK hw_ncipher_err.h hw_ncipher_err.c
|
|
||||||
L NURON hw_nuron_err.h hw_nuron_err.c
|
|
||||||
L SUREWARE hw_sureware_err.h hw_sureware_err.c
|
|
||||||
L UBSEC hw_ubsec_err.h hw_ubsec_err.c
|
|
||||||
L CCA4758 hw_4758_cca_err.h hw_4758_cca_err.c
|
|
@ -1,969 +0,0 @@
|
|||||||
/* Author: Maurice Gittens <maurice@gittens.nl> */
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* licensing@OpenSSL.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <openssl/crypto.h>
|
|
||||||
/* #include <openssl/pem.h> */
|
|
||||||
#include "cryptlib.h"
|
|
||||||
#include <openssl/dso.h>
|
|
||||||
#include <openssl/x509.h>
|
|
||||||
#include <openssl/objects.h>
|
|
||||||
#include <openssl/engine.h>
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_HW
|
|
||||||
#ifndef OPENSSL_NO_HW_4758_CCA
|
|
||||||
|
|
||||||
#ifdef FLAT_INC
|
|
||||||
#include "hw_4758_cca.h"
|
|
||||||
#else
|
|
||||||
#include "vendor_defns/hw_4758_cca.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "hw_4758_cca_err.c"
|
|
||||||
|
|
||||||
static int ibm_4758_cca_destroy(ENGINE *e);
|
|
||||||
static int ibm_4758_cca_init(ENGINE *e);
|
|
||||||
static int ibm_4758_cca_finish(ENGINE *e);
|
|
||||||
static int ibm_4758_cca_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)());
|
|
||||||
|
|
||||||
/* rsa functions */
|
|
||||||
/*---------------*/
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
static int cca_rsa_pub_enc(int flen, const unsigned char *from,
|
|
||||||
unsigned char *to, RSA *rsa,int padding);
|
|
||||||
static int cca_rsa_priv_dec(int flen, const unsigned char *from,
|
|
||||||
unsigned char *to, RSA *rsa,int padding);
|
|
||||||
static int cca_rsa_sign(int type, const unsigned char *m, unsigned int m_len,
|
|
||||||
unsigned char *sigret, unsigned int *siglen, const RSA *rsa);
|
|
||||||
static int cca_rsa_verify(int dtype, const unsigned char *m, unsigned int m_len,
|
|
||||||
unsigned char *sigbuf, unsigned int siglen, const RSA *rsa);
|
|
||||||
|
|
||||||
/* utility functions */
|
|
||||||
/*-----------------------*/
|
|
||||||
static EVP_PKEY *ibm_4758_load_privkey(ENGINE*, const char*,
|
|
||||||
UI_METHOD *ui_method, void *callback_data);
|
|
||||||
static EVP_PKEY *ibm_4758_load_pubkey(ENGINE*, const char*,
|
|
||||||
UI_METHOD *ui_method, void *callback_data);
|
|
||||||
|
|
||||||
static int getModulusAndExponent(const unsigned char *token, long *exponentLength,
|
|
||||||
unsigned char *exponent, long *modulusLength,
|
|
||||||
long *modulusFieldLength, unsigned char *modulus);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* RAND number functions */
|
|
||||||
/*-----------------------*/
|
|
||||||
static int cca_get_random_bytes(unsigned char*, int );
|
|
||||||
static int cca_random_status(void);
|
|
||||||
|
|
||||||
static void cca_ex_free(void *obj, void *item, CRYPTO_EX_DATA *ad,
|
|
||||||
int idx,long argl, void *argp);
|
|
||||||
|
|
||||||
/* Function pointers for CCA verbs */
|
|
||||||
/*---------------------------------*/
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
static F_KEYRECORDREAD keyRecordRead;
|
|
||||||
static F_DIGITALSIGNATUREGENERATE digitalSignatureGenerate;
|
|
||||||
static F_DIGITALSIGNATUREVERIFY digitalSignatureVerify;
|
|
||||||
static F_PUBLICKEYEXTRACT publicKeyExtract;
|
|
||||||
static F_PKAENCRYPT pkaEncrypt;
|
|
||||||
static F_PKADECRYPT pkaDecrypt;
|
|
||||||
#endif
|
|
||||||
static F_RANDOMNUMBERGENERATE randomNumberGenerate;
|
|
||||||
|
|
||||||
/* static variables */
|
|
||||||
/*------------------*/
|
|
||||||
static const char *CCA4758_LIB_NAME = NULL;
|
|
||||||
static const char *get_CCA4758_LIB_NAME(void)
|
|
||||||
{
|
|
||||||
if(CCA4758_LIB_NAME)
|
|
||||||
return CCA4758_LIB_NAME;
|
|
||||||
return CCA_LIB_NAME;
|
|
||||||
}
|
|
||||||
static void free_CCA4758_LIB_NAME(void)
|
|
||||||
{
|
|
||||||
if(CCA4758_LIB_NAME)
|
|
||||||
OPENSSL_free((void*)CCA4758_LIB_NAME);
|
|
||||||
CCA4758_LIB_NAME = NULL;
|
|
||||||
}
|
|
||||||
static long set_CCA4758_LIB_NAME(const char *name)
|
|
||||||
{
|
|
||||||
free_CCA4758_LIB_NAME();
|
|
||||||
return (((CCA4758_LIB_NAME = BUF_strdup(name)) != NULL) ? 1 : 0);
|
|
||||||
}
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
static const char* n_keyRecordRead = CSNDKRR;
|
|
||||||
static const char* n_digitalSignatureGenerate = CSNDDSG;
|
|
||||||
static const char* n_digitalSignatureVerify = CSNDDSV;
|
|
||||||
static const char* n_publicKeyExtract = CSNDPKX;
|
|
||||||
static const char* n_pkaEncrypt = CSNDPKE;
|
|
||||||
static const char* n_pkaDecrypt = CSNDPKD;
|
|
||||||
#endif
|
|
||||||
static const char* n_randomNumberGenerate = CSNBRNG;
|
|
||||||
|
|
||||||
static int hndidx = -1;
|
|
||||||
static DSO *dso = NULL;
|
|
||||||
|
|
||||||
/* openssl engine initialization structures */
|
|
||||||
/*------------------------------------------*/
|
|
||||||
|
|
||||||
#define CCA4758_CMD_SO_PATH ENGINE_CMD_BASE
|
|
||||||
static const ENGINE_CMD_DEFN cca4758_cmd_defns[] = {
|
|
||||||
{CCA4758_CMD_SO_PATH,
|
|
||||||
"SO_PATH",
|
|
||||||
"Specifies the path to the '4758cca' shared library",
|
|
||||||
ENGINE_CMD_FLAG_STRING},
|
|
||||||
{0, NULL, NULL, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
static RSA_METHOD ibm_4758_cca_rsa =
|
|
||||||
{
|
|
||||||
"IBM 4758 CCA RSA method",
|
|
||||||
cca_rsa_pub_enc,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
cca_rsa_priv_dec,
|
|
||||||
NULL, /*rsa_mod_exp,*/
|
|
||||||
NULL, /*mod_exp_mont,*/
|
|
||||||
NULL, /* init */
|
|
||||||
NULL, /* finish */
|
|
||||||
RSA_FLAG_SIGN_VER, /* flags */
|
|
||||||
NULL, /* app_data */
|
|
||||||
cca_rsa_sign, /* rsa_sign */
|
|
||||||
cca_rsa_verify /* rsa_verify */
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static RAND_METHOD ibm_4758_cca_rand =
|
|
||||||
{
|
|
||||||
/* "IBM 4758 RAND method", */
|
|
||||||
NULL, /* seed */
|
|
||||||
cca_get_random_bytes, /* get random bytes from the card */
|
|
||||||
NULL, /* cleanup */
|
|
||||||
NULL, /* add */
|
|
||||||
cca_get_random_bytes, /* pseudo rand */
|
|
||||||
cca_random_status, /* status */
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char *engine_4758_cca_id = "4758cca";
|
|
||||||
static const char *engine_4758_cca_name = "IBM 4758 CCA hardware engine support";
|
|
||||||
|
|
||||||
/* engine implementation */
|
|
||||||
/*-----------------------*/
|
|
||||||
static int bind_helper(ENGINE *e)
|
|
||||||
{
|
|
||||||
if(!ENGINE_set_id(e, engine_4758_cca_id) ||
|
|
||||||
!ENGINE_set_name(e, engine_4758_cca_name) ||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
!ENGINE_set_RSA(e, &ibm_4758_cca_rsa) ||
|
|
||||||
#endif
|
|
||||||
!ENGINE_set_RAND(e, &ibm_4758_cca_rand) ||
|
|
||||||
!ENGINE_set_destroy_function(e, ibm_4758_cca_destroy) ||
|
|
||||||
!ENGINE_set_init_function(e, ibm_4758_cca_init) ||
|
|
||||||
!ENGINE_set_finish_function(e, ibm_4758_cca_finish) ||
|
|
||||||
!ENGINE_set_ctrl_function(e, ibm_4758_cca_ctrl) ||
|
|
||||||
!ENGINE_set_load_privkey_function(e, ibm_4758_load_privkey) ||
|
|
||||||
!ENGINE_set_load_pubkey_function(e, ibm_4758_load_pubkey) ||
|
|
||||||
!ENGINE_set_cmd_defns(e, cca4758_cmd_defns))
|
|
||||||
return 0;
|
|
||||||
/* Ensure the error handling is set up */
|
|
||||||
ERR_load_CCA4758_strings();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef ENGINE_DYNAMIC_SUPPORT
|
|
||||||
static ENGINE *engine_4758_cca(void)
|
|
||||||
{
|
|
||||||
ENGINE *ret = ENGINE_new();
|
|
||||||
if(!ret)
|
|
||||||
return NULL;
|
|
||||||
if(!bind_helper(ret))
|
|
||||||
{
|
|
||||||
ENGINE_free(ret);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ENGINE_load_4758cca(void)
|
|
||||||
{
|
|
||||||
ENGINE *e_4758 = engine_4758_cca();
|
|
||||||
if (!e_4758) return;
|
|
||||||
ENGINE_add(e_4758);
|
|
||||||
ENGINE_free(e_4758);
|
|
||||||
ERR_clear_error();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int ibm_4758_cca_destroy(ENGINE *e)
|
|
||||||
{
|
|
||||||
ERR_unload_CCA4758_strings();
|
|
||||||
free_CCA4758_LIB_NAME();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int ibm_4758_cca_init(ENGINE *e)
|
|
||||||
{
|
|
||||||
if(dso)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_INIT,CCA4758_R_ALREADY_LOADED);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
dso = DSO_load(NULL, get_CCA4758_LIB_NAME(), NULL, 0);
|
|
||||||
if(!dso)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_INIT,CCA4758_R_DSO_FAILURE);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
if(!(keyRecordRead = (F_KEYRECORDREAD)
|
|
||||||
DSO_bind_func(dso, n_keyRecordRead)) ||
|
|
||||||
!(randomNumberGenerate = (F_RANDOMNUMBERGENERATE)
|
|
||||||
DSO_bind_func(dso, n_randomNumberGenerate)) ||
|
|
||||||
!(digitalSignatureGenerate = (F_DIGITALSIGNATUREGENERATE)
|
|
||||||
DSO_bind_func(dso, n_digitalSignatureGenerate)) ||
|
|
||||||
!(digitalSignatureVerify = (F_DIGITALSIGNATUREVERIFY)
|
|
||||||
DSO_bind_func(dso, n_digitalSignatureVerify)) ||
|
|
||||||
!(publicKeyExtract = (F_PUBLICKEYEXTRACT)
|
|
||||||
DSO_bind_func(dso, n_publicKeyExtract)) ||
|
|
||||||
!(pkaEncrypt = (F_PKAENCRYPT)
|
|
||||||
DSO_bind_func(dso, n_pkaEncrypt)) ||
|
|
||||||
!(pkaDecrypt = (F_PKADECRYPT)
|
|
||||||
DSO_bind_func(dso, n_pkaDecrypt)))
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_INIT,CCA4758_R_DSO_FAILURE);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if(!(randomNumberGenerate = (F_RANDOMNUMBERGENERATE)
|
|
||||||
DSO_bind_func(dso, n_randomNumberGenerate)))
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_INIT,CCA4758_R_DSO_FAILURE);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
hndidx = RSA_get_ex_new_index(0, "IBM 4758 CCA RSA key handle",
|
|
||||||
NULL, NULL, cca_ex_free);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
err:
|
|
||||||
if(dso)
|
|
||||||
DSO_free(dso);
|
|
||||||
dso = NULL;
|
|
||||||
|
|
||||||
keyRecordRead = (F_KEYRECORDREAD)0;
|
|
||||||
randomNumberGenerate = (F_RANDOMNUMBERGENERATE)0;
|
|
||||||
digitalSignatureGenerate = (F_DIGITALSIGNATUREGENERATE)0;
|
|
||||||
digitalSignatureVerify = (F_DIGITALSIGNATUREVERIFY)0;
|
|
||||||
publicKeyExtract = (F_PUBLICKEYEXTRACT)0;
|
|
||||||
pkaEncrypt = (F_PKAENCRYPT)0;
|
|
||||||
pkaDecrypt = (F_PKADECRYPT)0;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int ibm_4758_cca_finish(ENGINE *e)
|
|
||||||
{
|
|
||||||
free_CCA4758_LIB_NAME();
|
|
||||||
if(!dso)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_FINISH,
|
|
||||||
CCA4758_R_NOT_LOADED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if(!DSO_free(dso))
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_FINISH,
|
|
||||||
CCA4758_R_UNIT_FAILURE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
dso = NULL;
|
|
||||||
keyRecordRead = (F_KEYRECORDREAD)0;
|
|
||||||
randomNumberGenerate = (F_RANDOMNUMBERGENERATE)0;
|
|
||||||
digitalSignatureGenerate = (F_DIGITALSIGNATUREGENERATE)0;
|
|
||||||
digitalSignatureVerify = (F_DIGITALSIGNATUREVERIFY)0;
|
|
||||||
publicKeyExtract = (F_PUBLICKEYEXTRACT)0;
|
|
||||||
pkaEncrypt = (F_PKAENCRYPT)0;
|
|
||||||
pkaDecrypt = (F_PKADECRYPT)0;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int ibm_4758_cca_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)())
|
|
||||||
{
|
|
||||||
int initialised = ((dso == NULL) ? 0 : 1);
|
|
||||||
switch(cmd)
|
|
||||||
{
|
|
||||||
case CCA4758_CMD_SO_PATH:
|
|
||||||
if(p == NULL)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_CTRL,
|
|
||||||
ERR_R_PASSED_NULL_PARAMETER);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if(initialised)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_CTRL,
|
|
||||||
CCA4758_R_ALREADY_LOADED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return set_CCA4758_LIB_NAME((const char *)p);
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_CTRL,
|
|
||||||
CCA4758_R_COMMAND_NOT_IMPLEMENTED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
|
|
||||||
#define MAX_CCA_PKA_TOKEN_SIZE 2500
|
|
||||||
|
|
||||||
static EVP_PKEY *ibm_4758_load_privkey(ENGINE* e, const char* key_id,
|
|
||||||
UI_METHOD *ui_method, void *callback_data)
|
|
||||||
{
|
|
||||||
RSA *rtmp = NULL;
|
|
||||||
EVP_PKEY *res = NULL;
|
|
||||||
unsigned char* keyToken = NULL;
|
|
||||||
unsigned char pubKeyToken[MAX_CCA_PKA_TOKEN_SIZE];
|
|
||||||
long pubKeyTokenLength = MAX_CCA_PKA_TOKEN_SIZE;
|
|
||||||
long keyTokenLength = MAX_CCA_PKA_TOKEN_SIZE;
|
|
||||||
long returnCode;
|
|
||||||
long reasonCode;
|
|
||||||
long exitDataLength = 0;
|
|
||||||
long ruleArrayLength = 0;
|
|
||||||
unsigned char exitData[8];
|
|
||||||
unsigned char ruleArray[8];
|
|
||||||
unsigned char keyLabel[64];
|
|
||||||
long keyLabelLength = strlen(key_id);
|
|
||||||
unsigned char modulus[256];
|
|
||||||
long modulusFieldLength = sizeof(modulus);
|
|
||||||
long modulusLength = 0;
|
|
||||||
unsigned char exponent[256];
|
|
||||||
long exponentLength = sizeof(exponent);
|
|
||||||
|
|
||||||
if (keyLabelLength > sizeof(keyLabel))
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_LOAD_PRIVKEY,
|
|
||||||
CCA4758_R_SIZE_TOO_LARGE_OR_TOO_SMALL);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(keyLabel,' ', sizeof(keyLabel));
|
|
||||||
memcpy(keyLabel, key_id, keyLabelLength);
|
|
||||||
|
|
||||||
keyToken = OPENSSL_malloc(MAX_CCA_PKA_TOKEN_SIZE + sizeof(long));
|
|
||||||
if (!keyToken)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_LOAD_PRIVKEY,
|
|
||||||
ERR_R_MALLOC_FAILURE);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
keyRecordRead(&returnCode, &reasonCode, &exitDataLength,
|
|
||||||
exitData, &ruleArrayLength, ruleArray, keyLabel,
|
|
||||||
&keyTokenLength, keyToken+sizeof(long));
|
|
||||||
|
|
||||||
if (returnCode)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_LOAD_PRIVKEY,
|
|
||||||
CCA4758_R_FAILED_LOADING_PRIVATE_KEY);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
publicKeyExtract(&returnCode, &reasonCode, &exitDataLength,
|
|
||||||
exitData, &ruleArrayLength, ruleArray, &keyTokenLength,
|
|
||||||
keyToken+sizeof(long), &pubKeyTokenLength, pubKeyToken);
|
|
||||||
|
|
||||||
if (returnCode)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_LOAD_PRIVKEY,
|
|
||||||
CCA4758_R_FAILED_LOADING_PRIVATE_KEY);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!getModulusAndExponent(pubKeyToken, &exponentLength,
|
|
||||||
exponent, &modulusLength, &modulusFieldLength,
|
|
||||||
modulus))
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_LOAD_PRIVKEY,
|
|
||||||
CCA4758_R_FAILED_LOADING_PRIVATE_KEY);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*(long*)keyToken) = keyTokenLength;
|
|
||||||
rtmp = RSA_new_method(e);
|
|
||||||
RSA_set_ex_data(rtmp, hndidx, (char *)keyToken);
|
|
||||||
|
|
||||||
rtmp->e = BN_bin2bn(exponent, exponentLength, NULL);
|
|
||||||
rtmp->n = BN_bin2bn(modulus, modulusFieldLength, NULL);
|
|
||||||
rtmp->flags |= RSA_FLAG_EXT_PKEY;
|
|
||||||
|
|
||||||
res = EVP_PKEY_new();
|
|
||||||
EVP_PKEY_assign_RSA(res, rtmp);
|
|
||||||
|
|
||||||
return res;
|
|
||||||
err:
|
|
||||||
if (keyToken)
|
|
||||||
OPENSSL_free(keyToken);
|
|
||||||
if (res)
|
|
||||||
EVP_PKEY_free(res);
|
|
||||||
if (rtmp)
|
|
||||||
RSA_free(rtmp);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static EVP_PKEY *ibm_4758_load_pubkey(ENGINE* e, const char* key_id,
|
|
||||||
UI_METHOD *ui_method, void *callback_data)
|
|
||||||
{
|
|
||||||
RSA *rtmp = NULL;
|
|
||||||
EVP_PKEY *res = NULL;
|
|
||||||
unsigned char* keyToken = NULL;
|
|
||||||
long keyTokenLength = MAX_CCA_PKA_TOKEN_SIZE;
|
|
||||||
long returnCode;
|
|
||||||
long reasonCode;
|
|
||||||
long exitDataLength = 0;
|
|
||||||
long ruleArrayLength = 0;
|
|
||||||
unsigned char exitData[8];
|
|
||||||
unsigned char ruleArray[8];
|
|
||||||
unsigned char keyLabel[64];
|
|
||||||
long keyLabelLength = strlen(key_id);
|
|
||||||
unsigned char modulus[512];
|
|
||||||
long modulusFieldLength = sizeof(modulus);
|
|
||||||
long modulusLength = 0;
|
|
||||||
unsigned char exponent[512];
|
|
||||||
long exponentLength = sizeof(exponent);
|
|
||||||
|
|
||||||
if (keyLabelLength > sizeof(keyLabel))
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_LOAD_PRIVKEY,
|
|
||||||
CCA4758_R_SIZE_TOO_LARGE_OR_TOO_SMALL);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(keyLabel,' ', sizeof(keyLabel));
|
|
||||||
memcpy(keyLabel, key_id, keyLabelLength);
|
|
||||||
|
|
||||||
keyToken = OPENSSL_malloc(MAX_CCA_PKA_TOKEN_SIZE + sizeof(long));
|
|
||||||
if (!keyToken)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_LOAD_PUBKEY,
|
|
||||||
ERR_R_MALLOC_FAILURE);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
keyRecordRead(&returnCode, &reasonCode, &exitDataLength, exitData,
|
|
||||||
&ruleArrayLength, ruleArray, keyLabel, &keyTokenLength,
|
|
||||||
keyToken+sizeof(long));
|
|
||||||
|
|
||||||
if (returnCode)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_LOAD_PRIVKEY,
|
|
||||||
ERR_R_MALLOC_FAILURE);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!getModulusAndExponent(keyToken+sizeof(long), &exponentLength,
|
|
||||||
exponent, &modulusLength, &modulusFieldLength, modulus))
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_LOAD_PRIVKEY,
|
|
||||||
CCA4758_R_FAILED_LOADING_PUBLIC_KEY);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*(long*)keyToken) = keyTokenLength;
|
|
||||||
rtmp = RSA_new_method(e);
|
|
||||||
RSA_set_ex_data(rtmp, hndidx, (char *)keyToken);
|
|
||||||
rtmp->e = BN_bin2bn(exponent, exponentLength, NULL);
|
|
||||||
rtmp->n = BN_bin2bn(modulus, modulusFieldLength, NULL);
|
|
||||||
rtmp->flags |= RSA_FLAG_EXT_PKEY;
|
|
||||||
res = EVP_PKEY_new();
|
|
||||||
EVP_PKEY_assign_RSA(res, rtmp);
|
|
||||||
|
|
||||||
return res;
|
|
||||||
err:
|
|
||||||
if (keyToken)
|
|
||||||
OPENSSL_free(keyToken);
|
|
||||||
if (res)
|
|
||||||
EVP_PKEY_free(res);
|
|
||||||
if (rtmp)
|
|
||||||
RSA_free(rtmp);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cca_rsa_pub_enc(int flen, const unsigned char *from,
|
|
||||||
unsigned char *to, RSA *rsa,int padding)
|
|
||||||
{
|
|
||||||
long returnCode;
|
|
||||||
long reasonCode;
|
|
||||||
long lflen = flen;
|
|
||||||
long exitDataLength = 0;
|
|
||||||
unsigned char exitData[8];
|
|
||||||
long ruleArrayLength = 1;
|
|
||||||
unsigned char ruleArray[8] = "PKCS-1.2";
|
|
||||||
long dataStructureLength = 0;
|
|
||||||
unsigned char dataStructure[8];
|
|
||||||
long outputLength = RSA_size(rsa);
|
|
||||||
long keyTokenLength;
|
|
||||||
unsigned char* keyToken = (unsigned char*)RSA_get_ex_data(rsa, hndidx);
|
|
||||||
|
|
||||||
keyTokenLength = *(long*)keyToken;
|
|
||||||
keyToken+=sizeof(long);
|
|
||||||
|
|
||||||
pkaEncrypt(&returnCode, &reasonCode, &exitDataLength, exitData,
|
|
||||||
&ruleArrayLength, ruleArray, &lflen, (unsigned char*)from,
|
|
||||||
&dataStructureLength, dataStructure, &keyTokenLength,
|
|
||||||
keyToken, &outputLength, to);
|
|
||||||
|
|
||||||
if (returnCode || reasonCode)
|
|
||||||
return -(returnCode << 16 | reasonCode);
|
|
||||||
return outputLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cca_rsa_priv_dec(int flen, const unsigned char *from,
|
|
||||||
unsigned char *to, RSA *rsa,int padding)
|
|
||||||
{
|
|
||||||
long returnCode;
|
|
||||||
long reasonCode;
|
|
||||||
long lflen = flen;
|
|
||||||
long exitDataLength = 0;
|
|
||||||
unsigned char exitData[8];
|
|
||||||
long ruleArrayLength = 1;
|
|
||||||
unsigned char ruleArray[8] = "PKCS-1.2";
|
|
||||||
long dataStructureLength = 0;
|
|
||||||
unsigned char dataStructure[8];
|
|
||||||
long outputLength = RSA_size(rsa);
|
|
||||||
long keyTokenLength;
|
|
||||||
unsigned char* keyToken = (unsigned char*)RSA_get_ex_data(rsa, hndidx);
|
|
||||||
|
|
||||||
keyTokenLength = *(long*)keyToken;
|
|
||||||
keyToken+=sizeof(long);
|
|
||||||
|
|
||||||
pkaDecrypt(&returnCode, &reasonCode, &exitDataLength, exitData,
|
|
||||||
&ruleArrayLength, ruleArray, &lflen, (unsigned char*)from,
|
|
||||||
&dataStructureLength, dataStructure, &keyTokenLength,
|
|
||||||
keyToken, &outputLength, to);
|
|
||||||
|
|
||||||
return (returnCode | reasonCode) ? 0 : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define SSL_SIG_LEN 36
|
|
||||||
|
|
||||||
static int cca_rsa_verify(int type, const unsigned char *m, unsigned int m_len,
|
|
||||||
unsigned char *sigbuf, unsigned int siglen, const RSA *rsa)
|
|
||||||
{
|
|
||||||
long returnCode;
|
|
||||||
long reasonCode;
|
|
||||||
long lsiglen = siglen;
|
|
||||||
long exitDataLength = 0;
|
|
||||||
unsigned char exitData[8];
|
|
||||||
long ruleArrayLength = 1;
|
|
||||||
unsigned char ruleArray[8] = "PKCS-1.1";
|
|
||||||
long keyTokenLength;
|
|
||||||
unsigned char* keyToken = (unsigned char*)RSA_get_ex_data(rsa, hndidx);
|
|
||||||
long length = SSL_SIG_LEN;
|
|
||||||
long keyLength ;
|
|
||||||
unsigned char *hashBuffer = NULL;
|
|
||||||
X509_SIG sig;
|
|
||||||
ASN1_TYPE parameter;
|
|
||||||
X509_ALGOR algorithm;
|
|
||||||
ASN1_OCTET_STRING digest;
|
|
||||||
|
|
||||||
keyTokenLength = *(long*)keyToken;
|
|
||||||
keyToken+=sizeof(long);
|
|
||||||
|
|
||||||
if (type == NID_md5 || type == NID_sha1)
|
|
||||||
{
|
|
||||||
sig.algor = &algorithm;
|
|
||||||
algorithm.algorithm = OBJ_nid2obj(type);
|
|
||||||
|
|
||||||
if (!algorithm.algorithm)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_VERIFY,
|
|
||||||
CCA4758_R_UNKNOWN_ALGORITHM_TYPE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!algorithm.algorithm->length)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_VERIFY,
|
|
||||||
CCA4758_R_ASN1_OID_UNKNOWN_FOR_MD);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
parameter.type = V_ASN1_NULL;
|
|
||||||
parameter.value.ptr = NULL;
|
|
||||||
algorithm.parameter = ¶meter;
|
|
||||||
|
|
||||||
sig.digest = &digest;
|
|
||||||
sig.digest->data = (unsigned char*)m;
|
|
||||||
sig.digest->length = m_len;
|
|
||||||
|
|
||||||
length = i2d_X509_SIG(&sig, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
keyLength = RSA_size(rsa);
|
|
||||||
|
|
||||||
if (length - RSA_PKCS1_PADDING > keyLength)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_VERIFY,
|
|
||||||
CCA4758_R_SIZE_TOO_LARGE_OR_TOO_SMALL);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case NID_md5_sha1 :
|
|
||||||
if (m_len != SSL_SIG_LEN)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_VERIFY,
|
|
||||||
CCA4758_R_SIZE_TOO_LARGE_OR_TOO_SMALL);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
hashBuffer = (unsigned char *)m;
|
|
||||||
length = m_len;
|
|
||||||
break;
|
|
||||||
case NID_md5 :
|
|
||||||
{
|
|
||||||
unsigned char *ptr;
|
|
||||||
ptr = hashBuffer = OPENSSL_malloc(
|
|
||||||
(unsigned int)keyLength+1);
|
|
||||||
if (!hashBuffer)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_VERIFY,
|
|
||||||
ERR_R_MALLOC_FAILURE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
i2d_X509_SIG(&sig, &ptr);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case NID_sha1 :
|
|
||||||
{
|
|
||||||
unsigned char *ptr;
|
|
||||||
ptr = hashBuffer = OPENSSL_malloc(
|
|
||||||
(unsigned int)keyLength+1);
|
|
||||||
if (!hashBuffer)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_VERIFY,
|
|
||||||
ERR_R_MALLOC_FAILURE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
i2d_X509_SIG(&sig, &ptr);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
digitalSignatureVerify(&returnCode, &reasonCode, &exitDataLength,
|
|
||||||
exitData, &ruleArrayLength, ruleArray, &keyTokenLength,
|
|
||||||
keyToken, &length, hashBuffer, &lsiglen, sigbuf);
|
|
||||||
|
|
||||||
if (type == NID_sha1 || type == NID_md5)
|
|
||||||
{
|
|
||||||
OPENSSL_cleanse(hashBuffer, keyLength+1);
|
|
||||||
OPENSSL_free(hashBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ((returnCode || reasonCode) ? 0 : 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define SSL_SIG_LEN 36
|
|
||||||
|
|
||||||
static int cca_rsa_sign(int type, const unsigned char *m, unsigned int m_len,
|
|
||||||
unsigned char *sigret, unsigned int *siglen, const RSA *rsa)
|
|
||||||
{
|
|
||||||
long returnCode;
|
|
||||||
long reasonCode;
|
|
||||||
long exitDataLength = 0;
|
|
||||||
unsigned char exitData[8];
|
|
||||||
long ruleArrayLength = 1;
|
|
||||||
unsigned char ruleArray[8] = "PKCS-1.1";
|
|
||||||
long outputLength=256;
|
|
||||||
long outputBitLength;
|
|
||||||
long keyTokenLength;
|
|
||||||
unsigned char *hashBuffer = NULL;
|
|
||||||
unsigned char* keyToken = (unsigned char*)RSA_get_ex_data(rsa, hndidx);
|
|
||||||
long length = SSL_SIG_LEN;
|
|
||||||
long keyLength ;
|
|
||||||
X509_SIG sig;
|
|
||||||
ASN1_TYPE parameter;
|
|
||||||
X509_ALGOR algorithm;
|
|
||||||
ASN1_OCTET_STRING digest;
|
|
||||||
|
|
||||||
keyTokenLength = *(long*)keyToken;
|
|
||||||
keyToken+=sizeof(long);
|
|
||||||
|
|
||||||
if (type == NID_md5 || type == NID_sha1)
|
|
||||||
{
|
|
||||||
sig.algor = &algorithm;
|
|
||||||
algorithm.algorithm = OBJ_nid2obj(type);
|
|
||||||
|
|
||||||
if (!algorithm.algorithm)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_SIGN,
|
|
||||||
CCA4758_R_UNKNOWN_ALGORITHM_TYPE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!algorithm.algorithm->length)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_SIGN,
|
|
||||||
CCA4758_R_ASN1_OID_UNKNOWN_FOR_MD);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
parameter.type = V_ASN1_NULL;
|
|
||||||
parameter.value.ptr = NULL;
|
|
||||||
algorithm.parameter = ¶meter;
|
|
||||||
|
|
||||||
sig.digest = &digest;
|
|
||||||
sig.digest->data = (unsigned char*)m;
|
|
||||||
sig.digest->length = m_len;
|
|
||||||
|
|
||||||
length = i2d_X509_SIG(&sig, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
keyLength = RSA_size(rsa);
|
|
||||||
|
|
||||||
if (length - RSA_PKCS1_PADDING > keyLength)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_SIGN,
|
|
||||||
CCA4758_R_SIZE_TOO_LARGE_OR_TOO_SMALL);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case NID_md5_sha1 :
|
|
||||||
if (m_len != SSL_SIG_LEN)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_SIGN,
|
|
||||||
CCA4758_R_SIZE_TOO_LARGE_OR_TOO_SMALL);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
hashBuffer = (unsigned char*)m;
|
|
||||||
length = m_len;
|
|
||||||
break;
|
|
||||||
case NID_md5 :
|
|
||||||
{
|
|
||||||
unsigned char *ptr;
|
|
||||||
ptr = hashBuffer = OPENSSL_malloc(
|
|
||||||
(unsigned int)keyLength+1);
|
|
||||||
if (!hashBuffer)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_VERIFY,
|
|
||||||
ERR_R_MALLOC_FAILURE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
i2d_X509_SIG(&sig, &ptr);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case NID_sha1 :
|
|
||||||
{
|
|
||||||
unsigned char *ptr;
|
|
||||||
ptr = hashBuffer = OPENSSL_malloc(
|
|
||||||
(unsigned int)keyLength+1);
|
|
||||||
if (!hashBuffer)
|
|
||||||
{
|
|
||||||
CCA4758err(CCA4758_F_IBM_4758_CCA_VERIFY,
|
|
||||||
ERR_R_MALLOC_FAILURE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
i2d_X509_SIG(&sig, &ptr);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
digitalSignatureGenerate(&returnCode, &reasonCode, &exitDataLength,
|
|
||||||
exitData, &ruleArrayLength, ruleArray, &keyTokenLength,
|
|
||||||
keyToken, &length, hashBuffer, &outputLength, &outputBitLength,
|
|
||||||
sigret);
|
|
||||||
|
|
||||||
if (type == NID_sha1 || type == NID_md5)
|
|
||||||
{
|
|
||||||
OPENSSL_cleanse(hashBuffer, keyLength+1);
|
|
||||||
OPENSSL_free(hashBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
*siglen = outputLength;
|
|
||||||
|
|
||||||
return ((returnCode || reasonCode) ? 0 : 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int getModulusAndExponent(const unsigned char*token, long *exponentLength,
|
|
||||||
unsigned char *exponent, long *modulusLength, long *modulusFieldLength,
|
|
||||||
unsigned char *modulus)
|
|
||||||
{
|
|
||||||
unsigned long len;
|
|
||||||
|
|
||||||
if (*token++ != (char)0x1E) /* internal PKA token? */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (*token++) /* token version must be zero */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
len = *token++;
|
|
||||||
len = len << 8;
|
|
||||||
len |= (unsigned char)*token++;
|
|
||||||
|
|
||||||
token += 4; /* skip reserved bytes */
|
|
||||||
|
|
||||||
if (*token++ == (char)0x04)
|
|
||||||
{
|
|
||||||
if (*token++) /* token version must be zero */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
len = *token++;
|
|
||||||
len = len << 8;
|
|
||||||
len |= (unsigned char)*token++;
|
|
||||||
|
|
||||||
token+=2; /* skip reserved section */
|
|
||||||
|
|
||||||
len = *token++;
|
|
||||||
len = len << 8;
|
|
||||||
len |= (unsigned char)*token++;
|
|
||||||
|
|
||||||
*exponentLength = len;
|
|
||||||
|
|
||||||
len = *token++;
|
|
||||||
len = len << 8;
|
|
||||||
len |= (unsigned char)*token++;
|
|
||||||
|
|
||||||
*modulusLength = len;
|
|
||||||
|
|
||||||
len = *token++;
|
|
||||||
len = len << 8;
|
|
||||||
len |= (unsigned char)*token++;
|
|
||||||
|
|
||||||
*modulusFieldLength = len;
|
|
||||||
|
|
||||||
memcpy(exponent, token, *exponentLength);
|
|
||||||
token+= *exponentLength;
|
|
||||||
|
|
||||||
memcpy(modulus, token, *modulusFieldLength);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* OPENSSL_NO_RSA */
|
|
||||||
|
|
||||||
static int cca_random_status(void)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cca_get_random_bytes(unsigned char* buf, int num)
|
|
||||||
{
|
|
||||||
long ret_code;
|
|
||||||
long reason_code;
|
|
||||||
long exit_data_length;
|
|
||||||
unsigned char exit_data[4];
|
|
||||||
unsigned char form[] = "RANDOM ";
|
|
||||||
unsigned char rand_buf[8];
|
|
||||||
|
|
||||||
while(num >= sizeof(rand_buf))
|
|
||||||
{
|
|
||||||
randomNumberGenerate(&ret_code, &reason_code, &exit_data_length,
|
|
||||||
exit_data, form, rand_buf);
|
|
||||||
if (ret_code)
|
|
||||||
return 0;
|
|
||||||
num -= sizeof(rand_buf);
|
|
||||||
memcpy(buf, rand_buf, sizeof(rand_buf));
|
|
||||||
buf += sizeof(rand_buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (num)
|
|
||||||
{
|
|
||||||
randomNumberGenerate(&ret_code, &reason_code, NULL, NULL,
|
|
||||||
form, rand_buf);
|
|
||||||
if (ret_code)
|
|
||||||
return 0;
|
|
||||||
memcpy(buf, rand_buf, num);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void cca_ex_free(void *obj, void *item, CRYPTO_EX_DATA *ad, int idx,
|
|
||||||
long argl, void *argp)
|
|
||||||
{
|
|
||||||
if (item)
|
|
||||||
OPENSSL_free(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Goo to handle building as a dynamic engine */
|
|
||||||
#ifdef ENGINE_DYNAMIC_SUPPORT
|
|
||||||
static int bind_fn(ENGINE *e, const char *id)
|
|
||||||
{
|
|
||||||
if(id && (strcmp(id, engine_4758_cca_id) != 0))
|
|
||||||
return 0;
|
|
||||||
if(!bind_helper(e))
|
|
||||||
return 0;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
IMPLEMENT_DYNAMIC_CHECK_FN()
|
|
||||||
IMPLEMENT_DYNAMIC_BIND_FN(bind_fn)
|
|
||||||
#endif /* ENGINE_DYNAMIC_SUPPORT */
|
|
||||||
|
|
||||||
#endif /* !OPENSSL_NO_HW_4758_CCA */
|
|
||||||
#endif /* !OPENSSL_NO_HW */
|
|
@ -1,149 +0,0 @@
|
|||||||
/* hw_4758_cca_err.c */
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1999-2002 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@OpenSSL.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* NOTE: this file was auto generated by the mkerr.pl script: any changes
|
|
||||||
* made to it will be overwritten when the script next updates this file,
|
|
||||||
* only reason strings will be preserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <openssl/err.h>
|
|
||||||
#include "hw_4758_cca_err.h"
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
static ERR_STRING_DATA CCA4758_str_functs[]=
|
|
||||||
{
|
|
||||||
{ERR_PACK(0,CCA4758_F_IBM_4758_CCA_CTRL,0), "IBM_4758_CCA_CTRL"},
|
|
||||||
{ERR_PACK(0,CCA4758_F_IBM_4758_CCA_FINISH,0), "IBM_4758_CCA_FINISH"},
|
|
||||||
{ERR_PACK(0,CCA4758_F_IBM_4758_CCA_INIT,0), "IBM_4758_CCA_INIT"},
|
|
||||||
{ERR_PACK(0,CCA4758_F_IBM_4758_CCA_LOAD_PRIVKEY,0), "IBM_4758_CCA_LOAD_PRIVKEY"},
|
|
||||||
{ERR_PACK(0,CCA4758_F_IBM_4758_CCA_LOAD_PUBKEY,0), "IBM_4758_CCA_LOAD_PUBKEY"},
|
|
||||||
{ERR_PACK(0,CCA4758_F_IBM_4758_CCA_SIGN,0), "IBM_4758_CCA_SIGN"},
|
|
||||||
{ERR_PACK(0,CCA4758_F_IBM_4758_CCA_VERIFY,0), "IBM_4758_CCA_VERIFY"},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
static ERR_STRING_DATA CCA4758_str_reasons[]=
|
|
||||||
{
|
|
||||||
{CCA4758_R_ALREADY_LOADED ,"already loaded"},
|
|
||||||
{CCA4758_R_ASN1_OID_UNKNOWN_FOR_MD ,"asn1 oid unknown for md"},
|
|
||||||
{CCA4758_R_COMMAND_NOT_IMPLEMENTED ,"command not implemented"},
|
|
||||||
{CCA4758_R_DSO_FAILURE ,"dso failure"},
|
|
||||||
{CCA4758_R_FAILED_LOADING_PRIVATE_KEY ,"failed loading private key"},
|
|
||||||
{CCA4758_R_FAILED_LOADING_PUBLIC_KEY ,"failed loading public key"},
|
|
||||||
{CCA4758_R_NOT_LOADED ,"not loaded"},
|
|
||||||
{CCA4758_R_SIZE_TOO_LARGE_OR_TOO_SMALL ,"size too large or too small"},
|
|
||||||
{CCA4758_R_UNIT_FAILURE ,"unit failure"},
|
|
||||||
{CCA4758_R_UNKNOWN_ALGORITHM_TYPE ,"unknown algorithm type"},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CCA4758_LIB_NAME
|
|
||||||
static ERR_STRING_DATA CCA4758_lib_name[]=
|
|
||||||
{
|
|
||||||
{0 ,CCA4758_LIB_NAME},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
static int CCA4758_lib_error_code=0;
|
|
||||||
static int CCA4758_error_init=1;
|
|
||||||
|
|
||||||
static void ERR_load_CCA4758_strings(void)
|
|
||||||
{
|
|
||||||
if (CCA4758_lib_error_code == 0)
|
|
||||||
CCA4758_lib_error_code=ERR_get_next_error_library();
|
|
||||||
|
|
||||||
if (CCA4758_error_init)
|
|
||||||
{
|
|
||||||
CCA4758_error_init=0;
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
ERR_load_strings(CCA4758_lib_error_code,CCA4758_str_functs);
|
|
||||||
ERR_load_strings(CCA4758_lib_error_code,CCA4758_str_reasons);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CCA4758_LIB_NAME
|
|
||||||
CCA4758_lib_name->error = ERR_PACK(CCA4758_lib_error_code,0,0);
|
|
||||||
ERR_load_strings(0,CCA4758_lib_name);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ERR_unload_CCA4758_strings(void)
|
|
||||||
{
|
|
||||||
if (CCA4758_error_init == 0)
|
|
||||||
{
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
ERR_unload_strings(CCA4758_lib_error_code,CCA4758_str_functs);
|
|
||||||
ERR_unload_strings(CCA4758_lib_error_code,CCA4758_str_reasons);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CCA4758_LIB_NAME
|
|
||||||
ERR_unload_strings(0,CCA4758_lib_name);
|
|
||||||
#endif
|
|
||||||
CCA4758_error_init=1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ERR_CCA4758_error(int function, int reason, char *file, int line)
|
|
||||||
{
|
|
||||||
if (CCA4758_lib_error_code == 0)
|
|
||||||
CCA4758_lib_error_code=ERR_get_next_error_library();
|
|
||||||
ERR_PUT_error(CCA4758_lib_error_code,function,reason,file,line);
|
|
||||||
}
|
|
@ -1,93 +0,0 @@
|
|||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 2001 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@openssl.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_CCA4758_ERR_H
|
|
||||||
#define HEADER_CCA4758_ERR_H
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
|
||||||
* made after this point may be overwritten when the script is next run.
|
|
||||||
*/
|
|
||||||
static void ERR_load_CCA4758_strings(void);
|
|
||||||
static void ERR_unload_CCA4758_strings(void);
|
|
||||||
static void ERR_CCA4758_error(int function, int reason, char *file, int line);
|
|
||||||
#define CCA4758err(f,r) ERR_CCA4758_error((f),(r),__FILE__,__LINE__)
|
|
||||||
|
|
||||||
/* Error codes for the CCA4758 functions. */
|
|
||||||
|
|
||||||
/* Function codes. */
|
|
||||||
#define CCA4758_F_IBM_4758_CCA_CTRL 100
|
|
||||||
#define CCA4758_F_IBM_4758_CCA_FINISH 101
|
|
||||||
#define CCA4758_F_IBM_4758_CCA_INIT 102
|
|
||||||
#define CCA4758_F_IBM_4758_CCA_LOAD_PRIVKEY 103
|
|
||||||
#define CCA4758_F_IBM_4758_CCA_LOAD_PUBKEY 104
|
|
||||||
#define CCA4758_F_IBM_4758_CCA_SIGN 105
|
|
||||||
#define CCA4758_F_IBM_4758_CCA_VERIFY 106
|
|
||||||
|
|
||||||
/* Reason codes. */
|
|
||||||
#define CCA4758_R_ALREADY_LOADED 100
|
|
||||||
#define CCA4758_R_ASN1_OID_UNKNOWN_FOR_MD 101
|
|
||||||
#define CCA4758_R_COMMAND_NOT_IMPLEMENTED 102
|
|
||||||
#define CCA4758_R_DSO_FAILURE 103
|
|
||||||
#define CCA4758_R_FAILED_LOADING_PRIVATE_KEY 104
|
|
||||||
#define CCA4758_R_FAILED_LOADING_PUBLIC_KEY 105
|
|
||||||
#define CCA4758_R_NOT_LOADED 106
|
|
||||||
#define CCA4758_R_SIZE_TOO_LARGE_OR_TOO_SMALL 107
|
|
||||||
#define CCA4758_R_UNIT_FAILURE 108
|
|
||||||
#define CCA4758_R_UNKNOWN_ALGORITHM_TYPE 109
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
File diff suppressed because it is too large
Load Diff
@ -1,157 +0,0 @@
|
|||||||
/* hw_aep_err.c */
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@OpenSSL.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* NOTE: this file was auto generated by the mkerr.pl script: any changes
|
|
||||||
* made to it will be overwritten when the script next updates this file,
|
|
||||||
* only reason strings will be preserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <openssl/err.h>
|
|
||||||
#include "hw_aep_err.h"
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
static ERR_STRING_DATA AEPHK_str_functs[]=
|
|
||||||
{
|
|
||||||
{ERR_PACK(0,AEPHK_F_AEP_CTRL,0), "AEP_CTRL"},
|
|
||||||
{ERR_PACK(0,AEPHK_F_AEP_FINISH,0), "AEP_FINISH"},
|
|
||||||
{ERR_PACK(0,AEPHK_F_AEP_GET_CONNECTION,0), "AEP_GET_CONNECTION"},
|
|
||||||
{ERR_PACK(0,AEPHK_F_AEP_INIT,0), "AEP_INIT"},
|
|
||||||
{ERR_PACK(0,AEPHK_F_AEP_MOD_EXP,0), "AEP_MOD_EXP"},
|
|
||||||
{ERR_PACK(0,AEPHK_F_AEP_MOD_EXP_CRT,0), "AEP_MOD_EXP_CRT"},
|
|
||||||
{ERR_PACK(0,AEPHK_F_AEP_RAND,0), "AEP_RAND"},
|
|
||||||
{ERR_PACK(0,AEPHK_F_AEP_RSA_MOD_EXP,0), "AEP_RSA_MOD_EXP"},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
static ERR_STRING_DATA AEPHK_str_reasons[]=
|
|
||||||
{
|
|
||||||
{AEPHK_R_ALREADY_LOADED ,"already loaded"},
|
|
||||||
{AEPHK_R_CLOSE_HANDLES_FAILED ,"close handles failed"},
|
|
||||||
{AEPHK_R_CONNECTIONS_IN_USE ,"connections in use"},
|
|
||||||
{AEPHK_R_CTRL_COMMAND_NOT_IMPLEMENTED ,"ctrl command not implemented"},
|
|
||||||
{AEPHK_R_FINALIZE_FAILED ,"finalize failed"},
|
|
||||||
{AEPHK_R_GET_HANDLE_FAILED ,"get handle failed"},
|
|
||||||
{AEPHK_R_GET_RANDOM_FAILED ,"get random failed"},
|
|
||||||
{AEPHK_R_INIT_FAILURE ,"init failure"},
|
|
||||||
{AEPHK_R_MISSING_KEY_COMPONENTS ,"missing key components"},
|
|
||||||
{AEPHK_R_MOD_EXP_CRT_FAILED ,"mod exp crt failed"},
|
|
||||||
{AEPHK_R_MOD_EXP_FAILED ,"mod exp failed"},
|
|
||||||
{AEPHK_R_NOT_LOADED ,"not loaded"},
|
|
||||||
{AEPHK_R_OK ,"ok"},
|
|
||||||
{AEPHK_R_RETURN_CONNECTION_FAILED ,"return connection failed"},
|
|
||||||
{AEPHK_R_SETBNCALLBACK_FAILURE ,"setbncallback failure"},
|
|
||||||
{AEPHK_R_SIZE_TOO_LARGE_OR_TOO_SMALL ,"size too large or too small"},
|
|
||||||
{AEPHK_R_UNIT_FAILURE ,"unit failure"},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef AEPHK_LIB_NAME
|
|
||||||
static ERR_STRING_DATA AEPHK_lib_name[]=
|
|
||||||
{
|
|
||||||
{0 ,AEPHK_LIB_NAME},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
static int AEPHK_lib_error_code=0;
|
|
||||||
static int AEPHK_error_init=1;
|
|
||||||
|
|
||||||
static void ERR_load_AEPHK_strings(void)
|
|
||||||
{
|
|
||||||
if (AEPHK_lib_error_code == 0)
|
|
||||||
AEPHK_lib_error_code=ERR_get_next_error_library();
|
|
||||||
|
|
||||||
if (AEPHK_error_init)
|
|
||||||
{
|
|
||||||
AEPHK_error_init=0;
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
ERR_load_strings(AEPHK_lib_error_code,AEPHK_str_functs);
|
|
||||||
ERR_load_strings(AEPHK_lib_error_code,AEPHK_str_reasons);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef AEPHK_LIB_NAME
|
|
||||||
AEPHK_lib_name->error = ERR_PACK(AEPHK_lib_error_code,0,0);
|
|
||||||
ERR_load_strings(0,AEPHK_lib_name);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ERR_unload_AEPHK_strings(void)
|
|
||||||
{
|
|
||||||
if (AEPHK_error_init == 0)
|
|
||||||
{
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
ERR_unload_strings(AEPHK_lib_error_code,AEPHK_str_functs);
|
|
||||||
ERR_unload_strings(AEPHK_lib_error_code,AEPHK_str_reasons);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef AEPHK_LIB_NAME
|
|
||||||
ERR_unload_strings(0,AEPHK_lib_name);
|
|
||||||
#endif
|
|
||||||
AEPHK_error_init=1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ERR_AEPHK_error(int function, int reason, char *file, int line)
|
|
||||||
{
|
|
||||||
if (AEPHK_lib_error_code == 0)
|
|
||||||
AEPHK_lib_error_code=ERR_get_next_error_library();
|
|
||||||
ERR_PUT_error(AEPHK_lib_error_code,function,reason,file,line);
|
|
||||||
}
|
|
@ -1,101 +0,0 @@
|
|||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 2001 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@openssl.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_AEPHK_ERR_H
|
|
||||||
#define HEADER_AEPHK_ERR_H
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
|
||||||
* made after this point may be overwritten when the script is next run.
|
|
||||||
*/
|
|
||||||
static void ERR_load_AEPHK_strings(void);
|
|
||||||
static void ERR_unload_AEPHK_strings(void);
|
|
||||||
static void ERR_AEPHK_error(int function, int reason, char *file, int line);
|
|
||||||
#define AEPHKerr(f,r) ERR_AEPHK_error((f),(r),__FILE__,__LINE__)
|
|
||||||
|
|
||||||
/* Error codes for the AEPHK functions. */
|
|
||||||
|
|
||||||
/* Function codes. */
|
|
||||||
#define AEPHK_F_AEP_CTRL 100
|
|
||||||
#define AEPHK_F_AEP_FINISH 101
|
|
||||||
#define AEPHK_F_AEP_GET_CONNECTION 102
|
|
||||||
#define AEPHK_F_AEP_INIT 103
|
|
||||||
#define AEPHK_F_AEP_MOD_EXP 104
|
|
||||||
#define AEPHK_F_AEP_MOD_EXP_CRT 105
|
|
||||||
#define AEPHK_F_AEP_RAND 106
|
|
||||||
#define AEPHK_F_AEP_RSA_MOD_EXP 107
|
|
||||||
|
|
||||||
/* Reason codes. */
|
|
||||||
#define AEPHK_R_ALREADY_LOADED 100
|
|
||||||
#define AEPHK_R_CLOSE_HANDLES_FAILED 101
|
|
||||||
#define AEPHK_R_CONNECTIONS_IN_USE 102
|
|
||||||
#define AEPHK_R_CTRL_COMMAND_NOT_IMPLEMENTED 103
|
|
||||||
#define AEPHK_R_FINALIZE_FAILED 104
|
|
||||||
#define AEPHK_R_GET_HANDLE_FAILED 105
|
|
||||||
#define AEPHK_R_GET_RANDOM_FAILED 106
|
|
||||||
#define AEPHK_R_INIT_FAILURE 107
|
|
||||||
#define AEPHK_R_MISSING_KEY_COMPONENTS 108
|
|
||||||
#define AEPHK_R_MOD_EXP_CRT_FAILED 109
|
|
||||||
#define AEPHK_R_MOD_EXP_FAILED 110
|
|
||||||
#define AEPHK_R_NOT_LOADED 111
|
|
||||||
#define AEPHK_R_OK 112
|
|
||||||
#define AEPHK_R_RETURN_CONNECTION_FAILED 113
|
|
||||||
#define AEPHK_R_SETBNCALLBACK_FAILURE 114
|
|
||||||
#define AEPHK_R_SIZE_TOO_LARGE_OR_TOO_SMALL 116
|
|
||||||
#define AEPHK_R_UNIT_FAILURE 115
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
@ -1,594 +0,0 @@
|
|||||||
/* crypto/engine/hw_atalla.c */
|
|
||||||
/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
|
|
||||||
* project 2000.
|
|
||||||
*/
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1999-2001 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* licensing@OpenSSL.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <openssl/crypto.h>
|
|
||||||
#include "cryptlib.h"
|
|
||||||
#include <openssl/dso.h>
|
|
||||||
#include <openssl/engine.h>
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_HW
|
|
||||||
#ifndef OPENSSL_NO_HW_ATALLA
|
|
||||||
|
|
||||||
#ifdef FLAT_INC
|
|
||||||
#include "atalla.h"
|
|
||||||
#else
|
|
||||||
#include "vendor_defns/atalla.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ATALLA_LIB_NAME "atalla engine"
|
|
||||||
#include "hw_atalla_err.c"
|
|
||||||
|
|
||||||
static int atalla_destroy(ENGINE *e);
|
|
||||||
static int atalla_init(ENGINE *e);
|
|
||||||
static int atalla_finish(ENGINE *e);
|
|
||||||
static int atalla_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)());
|
|
||||||
|
|
||||||
/* BIGNUM stuff */
|
|
||||||
static int atalla_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx);
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
/* RSA stuff */
|
|
||||||
static int atalla_rsa_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa);
|
|
||||||
#endif
|
|
||||||
/* This function is aliased to mod_exp (with the mont stuff dropped). */
|
|
||||||
static int atalla_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
/* DSA stuff */
|
|
||||||
static int atalla_dsa_mod_exp(DSA *dsa, BIGNUM *rr, BIGNUM *a1,
|
|
||||||
BIGNUM *p1, BIGNUM *a2, BIGNUM *p2, BIGNUM *m,
|
|
||||||
BN_CTX *ctx, BN_MONT_CTX *in_mont);
|
|
||||||
static int atalla_mod_exp_dsa(DSA *dsa, BIGNUM *r, BIGNUM *a,
|
|
||||||
const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx,
|
|
||||||
BN_MONT_CTX *m_ctx);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
/* DH stuff */
|
|
||||||
/* This function is alised to mod_exp (with the DH and mont dropped). */
|
|
||||||
static int atalla_mod_exp_dh(const DH *dh, BIGNUM *r,
|
|
||||||
const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The definitions for control commands specific to this engine */
|
|
||||||
#define ATALLA_CMD_SO_PATH ENGINE_CMD_BASE
|
|
||||||
static const ENGINE_CMD_DEFN atalla_cmd_defns[] = {
|
|
||||||
{ATALLA_CMD_SO_PATH,
|
|
||||||
"SO_PATH",
|
|
||||||
"Specifies the path to the 'atasi' shared library",
|
|
||||||
ENGINE_CMD_FLAG_STRING},
|
|
||||||
{0, NULL, NULL, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
/* Our internal RSA_METHOD that we provide pointers to */
|
|
||||||
static RSA_METHOD atalla_rsa =
|
|
||||||
{
|
|
||||||
"Atalla RSA method",
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
atalla_rsa_mod_exp,
|
|
||||||
atalla_mod_exp_mont,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
0,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
/* Our internal DSA_METHOD that we provide pointers to */
|
|
||||||
static DSA_METHOD atalla_dsa =
|
|
||||||
{
|
|
||||||
"Atalla DSA method",
|
|
||||||
NULL, /* dsa_do_sign */
|
|
||||||
NULL, /* dsa_sign_setup */
|
|
||||||
NULL, /* dsa_do_verify */
|
|
||||||
atalla_dsa_mod_exp, /* dsa_mod_exp */
|
|
||||||
atalla_mod_exp_dsa, /* bn_mod_exp */
|
|
||||||
NULL, /* init */
|
|
||||||
NULL, /* finish */
|
|
||||||
0, /* flags */
|
|
||||||
NULL /* app_data */
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
/* Our internal DH_METHOD that we provide pointers to */
|
|
||||||
static DH_METHOD atalla_dh =
|
|
||||||
{
|
|
||||||
"Atalla DH method",
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
atalla_mod_exp_dh,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
0,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Constants used when creating the ENGINE */
|
|
||||||
static const char *engine_atalla_id = "atalla";
|
|
||||||
static const char *engine_atalla_name = "Atalla hardware engine support";
|
|
||||||
|
|
||||||
/* This internal function is used by ENGINE_atalla() and possibly by the
|
|
||||||
* "dynamic" ENGINE support too */
|
|
||||||
static int bind_helper(ENGINE *e)
|
|
||||||
{
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
const RSA_METHOD *meth1;
|
|
||||||
#endif
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
const DSA_METHOD *meth2;
|
|
||||||
#endif
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
const DH_METHOD *meth3;
|
|
||||||
#endif
|
|
||||||
if(!ENGINE_set_id(e, engine_atalla_id) ||
|
|
||||||
!ENGINE_set_name(e, engine_atalla_name) ||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
!ENGINE_set_RSA(e, &atalla_rsa) ||
|
|
||||||
#endif
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
!ENGINE_set_DSA(e, &atalla_dsa) ||
|
|
||||||
#endif
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
!ENGINE_set_DH(e, &atalla_dh) ||
|
|
||||||
#endif
|
|
||||||
!ENGINE_set_destroy_function(e, atalla_destroy) ||
|
|
||||||
!ENGINE_set_init_function(e, atalla_init) ||
|
|
||||||
!ENGINE_set_finish_function(e, atalla_finish) ||
|
|
||||||
!ENGINE_set_ctrl_function(e, atalla_ctrl) ||
|
|
||||||
!ENGINE_set_cmd_defns(e, atalla_cmd_defns))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
/* We know that the "PKCS1_SSLeay()" functions hook properly
|
|
||||||
* to the atalla-specific mod_exp and mod_exp_crt so we use
|
|
||||||
* those functions. NB: We don't use ENGINE_openssl() or
|
|
||||||
* anything "more generic" because something like the RSAref
|
|
||||||
* code may not hook properly, and if you own one of these
|
|
||||||
* cards then you have the right to do RSA operations on it
|
|
||||||
* anyway! */
|
|
||||||
meth1 = RSA_PKCS1_SSLeay();
|
|
||||||
atalla_rsa.rsa_pub_enc = meth1->rsa_pub_enc;
|
|
||||||
atalla_rsa.rsa_pub_dec = meth1->rsa_pub_dec;
|
|
||||||
atalla_rsa.rsa_priv_enc = meth1->rsa_priv_enc;
|
|
||||||
atalla_rsa.rsa_priv_dec = meth1->rsa_priv_dec;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
/* Use the DSA_OpenSSL() method and just hook the mod_exp-ish
|
|
||||||
* bits. */
|
|
||||||
meth2 = DSA_OpenSSL();
|
|
||||||
atalla_dsa.dsa_do_sign = meth2->dsa_do_sign;
|
|
||||||
atalla_dsa.dsa_sign_setup = meth2->dsa_sign_setup;
|
|
||||||
atalla_dsa.dsa_do_verify = meth2->dsa_do_verify;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
/* Much the same for Diffie-Hellman */
|
|
||||||
meth3 = DH_OpenSSL();
|
|
||||||
atalla_dh.generate_key = meth3->generate_key;
|
|
||||||
atalla_dh.compute_key = meth3->compute_key;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Ensure the atalla error handling is set up */
|
|
||||||
ERR_load_ATALLA_strings();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef ENGINE_DYNAMIC_SUPPORT
|
|
||||||
static ENGINE *engine_atalla(void)
|
|
||||||
{
|
|
||||||
ENGINE *ret = ENGINE_new();
|
|
||||||
if(!ret)
|
|
||||||
return NULL;
|
|
||||||
if(!bind_helper(ret))
|
|
||||||
{
|
|
||||||
ENGINE_free(ret);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ENGINE_load_atalla(void)
|
|
||||||
{
|
|
||||||
/* Copied from eng_[openssl|dyn].c */
|
|
||||||
ENGINE *toadd = engine_atalla();
|
|
||||||
if(!toadd) return;
|
|
||||||
ENGINE_add(toadd);
|
|
||||||
ENGINE_free(toadd);
|
|
||||||
ERR_clear_error();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This is a process-global DSO handle used for loading and unloading
|
|
||||||
* the Atalla library. NB: This is only set (or unset) during an
|
|
||||||
* init() or finish() call (reference counts permitting) and they're
|
|
||||||
* operating with global locks, so this should be thread-safe
|
|
||||||
* implicitly. */
|
|
||||||
static DSO *atalla_dso = NULL;
|
|
||||||
|
|
||||||
/* These are the function pointers that are (un)set when the library has
|
|
||||||
* successfully (un)loaded. */
|
|
||||||
static tfnASI_GetHardwareConfig *p_Atalla_GetHardwareConfig = NULL;
|
|
||||||
static tfnASI_RSAPrivateKeyOpFn *p_Atalla_RSAPrivateKeyOpFn = NULL;
|
|
||||||
static tfnASI_GetPerformanceStatistics *p_Atalla_GetPerformanceStatistics = NULL;
|
|
||||||
|
|
||||||
/* These are the static string constants for the DSO file name and the function
|
|
||||||
* symbol names to bind to. Regrettably, the DSO name on *nix appears to be
|
|
||||||
* "atasi.so" rather than something more consistent like "libatasi.so". At the
|
|
||||||
* time of writing, I'm not sure what the file name on win32 is but clearly
|
|
||||||
* native name translation is not possible (eg libatasi.so on *nix, and
|
|
||||||
* atasi.dll on win32). For the purposes of testing, I have created a symbollic
|
|
||||||
* link called "libatasi.so" so that we can use native name-translation - a
|
|
||||||
* better solution will be needed. */
|
|
||||||
static const char *ATALLA_LIBNAME = NULL;
|
|
||||||
static const char *get_ATALLA_LIBNAME(void)
|
|
||||||
{
|
|
||||||
if(ATALLA_LIBNAME)
|
|
||||||
return ATALLA_LIBNAME;
|
|
||||||
return "atasi";
|
|
||||||
}
|
|
||||||
static void free_ATALLA_LIBNAME(void)
|
|
||||||
{
|
|
||||||
if(ATALLA_LIBNAME)
|
|
||||||
OPENSSL_free((void*)ATALLA_LIBNAME);
|
|
||||||
ATALLA_LIBNAME = NULL;
|
|
||||||
}
|
|
||||||
static long set_ATALLA_LIBNAME(const char *name)
|
|
||||||
{
|
|
||||||
free_ATALLA_LIBNAME();
|
|
||||||
return (((ATALLA_LIBNAME = BUF_strdup(name)) != NULL) ? 1 : 0);
|
|
||||||
}
|
|
||||||
static const char *ATALLA_F1 = "ASI_GetHardwareConfig";
|
|
||||||
static const char *ATALLA_F2 = "ASI_RSAPrivateKeyOpFn";
|
|
||||||
static const char *ATALLA_F3 = "ASI_GetPerformanceStatistics";
|
|
||||||
|
|
||||||
/* Destructor (complements the "ENGINE_atalla()" constructor) */
|
|
||||||
static int atalla_destroy(ENGINE *e)
|
|
||||||
{
|
|
||||||
free_ATALLA_LIBNAME();
|
|
||||||
/* Unload the atalla error strings so any error state including our
|
|
||||||
* functs or reasons won't lead to a segfault (they simply get displayed
|
|
||||||
* without corresponding string data because none will be found). */
|
|
||||||
ERR_unload_ATALLA_strings();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (de)initialisation functions. */
|
|
||||||
static int atalla_init(ENGINE *e)
|
|
||||||
{
|
|
||||||
tfnASI_GetHardwareConfig *p1;
|
|
||||||
tfnASI_RSAPrivateKeyOpFn *p2;
|
|
||||||
tfnASI_GetPerformanceStatistics *p3;
|
|
||||||
/* Not sure of the origin of this magic value, but Ben's code had it
|
|
||||||
* and it seemed to have been working for a few people. :-) */
|
|
||||||
unsigned int config_buf[1024];
|
|
||||||
|
|
||||||
if(atalla_dso != NULL)
|
|
||||||
{
|
|
||||||
ATALLAerr(ATALLA_F_ATALLA_INIT,ATALLA_R_ALREADY_LOADED);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* Attempt to load libatasi.so/atasi.dll/whatever. Needs to be
|
|
||||||
* changed unfortunately because the Atalla drivers don't have
|
|
||||||
* standard library names that can be platform-translated well. */
|
|
||||||
/* TODO: Work out how to actually map to the names the Atalla
|
|
||||||
* drivers really use - for now a symbollic link needs to be
|
|
||||||
* created on the host system from libatasi.so to atasi.so on
|
|
||||||
* unix variants. */
|
|
||||||
atalla_dso = DSO_load(NULL, get_ATALLA_LIBNAME(), NULL, 0);
|
|
||||||
if(atalla_dso == NULL)
|
|
||||||
{
|
|
||||||
ATALLAerr(ATALLA_F_ATALLA_INIT,ATALLA_R_NOT_LOADED);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if(!(p1 = (tfnASI_GetHardwareConfig *)DSO_bind_func(
|
|
||||||
atalla_dso, ATALLA_F1)) ||
|
|
||||||
!(p2 = (tfnASI_RSAPrivateKeyOpFn *)DSO_bind_func(
|
|
||||||
atalla_dso, ATALLA_F2)) ||
|
|
||||||
!(p3 = (tfnASI_GetPerformanceStatistics *)DSO_bind_func(
|
|
||||||
atalla_dso, ATALLA_F3)))
|
|
||||||
{
|
|
||||||
ATALLAerr(ATALLA_F_ATALLA_INIT,ATALLA_R_NOT_LOADED);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* Copy the pointers */
|
|
||||||
p_Atalla_GetHardwareConfig = p1;
|
|
||||||
p_Atalla_RSAPrivateKeyOpFn = p2;
|
|
||||||
p_Atalla_GetPerformanceStatistics = p3;
|
|
||||||
/* Perform a basic test to see if there's actually any unit
|
|
||||||
* running. */
|
|
||||||
if(p1(0L, config_buf) != 0)
|
|
||||||
{
|
|
||||||
ATALLAerr(ATALLA_F_ATALLA_INIT,ATALLA_R_UNIT_FAILURE);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* Everything's fine. */
|
|
||||||
return 1;
|
|
||||||
err:
|
|
||||||
if(atalla_dso)
|
|
||||||
DSO_free(atalla_dso);
|
|
||||||
p_Atalla_GetHardwareConfig = NULL;
|
|
||||||
p_Atalla_RSAPrivateKeyOpFn = NULL;
|
|
||||||
p_Atalla_GetPerformanceStatistics = NULL;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int atalla_finish(ENGINE *e)
|
|
||||||
{
|
|
||||||
free_ATALLA_LIBNAME();
|
|
||||||
if(atalla_dso == NULL)
|
|
||||||
{
|
|
||||||
ATALLAerr(ATALLA_F_ATALLA_FINISH,ATALLA_R_NOT_LOADED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if(!DSO_free(atalla_dso))
|
|
||||||
{
|
|
||||||
ATALLAerr(ATALLA_F_ATALLA_FINISH,ATALLA_R_UNIT_FAILURE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
atalla_dso = NULL;
|
|
||||||
p_Atalla_GetHardwareConfig = NULL;
|
|
||||||
p_Atalla_RSAPrivateKeyOpFn = NULL;
|
|
||||||
p_Atalla_GetPerformanceStatistics = NULL;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int atalla_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)())
|
|
||||||
{
|
|
||||||
int initialised = ((atalla_dso == NULL) ? 0 : 1);
|
|
||||||
switch(cmd)
|
|
||||||
{
|
|
||||||
case ATALLA_CMD_SO_PATH:
|
|
||||||
if(p == NULL)
|
|
||||||
{
|
|
||||||
ATALLAerr(ATALLA_F_ATALLA_CTRL,ERR_R_PASSED_NULL_PARAMETER);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if(initialised)
|
|
||||||
{
|
|
||||||
ATALLAerr(ATALLA_F_ATALLA_CTRL,ATALLA_R_ALREADY_LOADED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return set_ATALLA_LIBNAME((const char *)p);
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
ATALLAerr(ATALLA_F_ATALLA_CTRL,ATALLA_R_CTRL_COMMAND_NOT_IMPLEMENTED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int atalla_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx)
|
|
||||||
{
|
|
||||||
/* I need somewhere to store temporary serialised values for
|
|
||||||
* use with the Atalla API calls. A neat cheat - I'll use
|
|
||||||
* BIGNUMs from the BN_CTX but access their arrays directly as
|
|
||||||
* byte arrays <grin>. This way I don't have to clean anything
|
|
||||||
* up. */
|
|
||||||
BIGNUM *modulus;
|
|
||||||
BIGNUM *exponent;
|
|
||||||
BIGNUM *argument;
|
|
||||||
BIGNUM *result;
|
|
||||||
RSAPrivateKey keydata;
|
|
||||||
int to_return, numbytes;
|
|
||||||
|
|
||||||
modulus = exponent = argument = result = NULL;
|
|
||||||
to_return = 0; /* expect failure */
|
|
||||||
|
|
||||||
if(!atalla_dso)
|
|
||||||
{
|
|
||||||
ATALLAerr(ATALLA_F_ATALLA_MOD_EXP,ATALLA_R_NOT_LOADED);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* Prepare the params */
|
|
||||||
BN_CTX_start(ctx);
|
|
||||||
modulus = BN_CTX_get(ctx);
|
|
||||||
exponent = BN_CTX_get(ctx);
|
|
||||||
argument = BN_CTX_get(ctx);
|
|
||||||
result = BN_CTX_get(ctx);
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
ATALLAerr(ATALLA_F_ATALLA_MOD_EXP,ATALLA_R_BN_CTX_FULL);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if(!bn_wexpand(modulus, m->top) || !bn_wexpand(exponent, m->top) ||
|
|
||||||
!bn_wexpand(argument, m->top) || !bn_wexpand(result, m->top))
|
|
||||||
{
|
|
||||||
ATALLAerr(ATALLA_F_ATALLA_MOD_EXP,ATALLA_R_BN_EXPAND_FAIL);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* Prepare the key-data */
|
|
||||||
memset(&keydata, 0,sizeof keydata);
|
|
||||||
numbytes = BN_num_bytes(m);
|
|
||||||
memset(exponent->d, 0, numbytes);
|
|
||||||
memset(modulus->d, 0, numbytes);
|
|
||||||
BN_bn2bin(p, (unsigned char *)exponent->d + numbytes - BN_num_bytes(p));
|
|
||||||
BN_bn2bin(m, (unsigned char *)modulus->d + numbytes - BN_num_bytes(m));
|
|
||||||
keydata.privateExponent.data = (unsigned char *)exponent->d;
|
|
||||||
keydata.privateExponent.len = numbytes;
|
|
||||||
keydata.modulus.data = (unsigned char *)modulus->d;
|
|
||||||
keydata.modulus.len = numbytes;
|
|
||||||
/* Prepare the argument */
|
|
||||||
memset(argument->d, 0, numbytes);
|
|
||||||
memset(result->d, 0, numbytes);
|
|
||||||
BN_bn2bin(a, (unsigned char *)argument->d + numbytes - BN_num_bytes(a));
|
|
||||||
/* Perform the operation */
|
|
||||||
if(p_Atalla_RSAPrivateKeyOpFn(&keydata, (unsigned char *)result->d,
|
|
||||||
(unsigned char *)argument->d,
|
|
||||||
keydata.modulus.len) != 0)
|
|
||||||
{
|
|
||||||
ATALLAerr(ATALLA_F_ATALLA_MOD_EXP,ATALLA_R_REQUEST_FAILED);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* Convert the response */
|
|
||||||
BN_bin2bn((unsigned char *)result->d, numbytes, r);
|
|
||||||
to_return = 1;
|
|
||||||
err:
|
|
||||||
BN_CTX_end(ctx);
|
|
||||||
return to_return;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
static int atalla_rsa_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa)
|
|
||||||
{
|
|
||||||
BN_CTX *ctx = NULL;
|
|
||||||
int to_return = 0;
|
|
||||||
|
|
||||||
if(!atalla_dso)
|
|
||||||
{
|
|
||||||
ATALLAerr(ATALLA_F_ATALLA_RSA_MOD_EXP,ATALLA_R_NOT_LOADED);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if((ctx = BN_CTX_new()) == NULL)
|
|
||||||
goto err;
|
|
||||||
if(!rsa->d || !rsa->n)
|
|
||||||
{
|
|
||||||
ATALLAerr(ATALLA_F_ATALLA_RSA_MOD_EXP,ATALLA_R_MISSING_KEY_COMPONENTS);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
to_return = atalla_mod_exp(r0, I, rsa->d, rsa->n, ctx);
|
|
||||||
err:
|
|
||||||
if(ctx)
|
|
||||||
BN_CTX_free(ctx);
|
|
||||||
return to_return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
/* This code was liberated and adapted from the commented-out code in
|
|
||||||
* dsa_ossl.c. Because of the unoptimised form of the Atalla acceleration
|
|
||||||
* (it doesn't have a CRT form for RSA), this function means that an
|
|
||||||
* Atalla system running with a DSA server certificate can handshake
|
|
||||||
* around 5 or 6 times faster/more than an equivalent system running with
|
|
||||||
* RSA. Just check out the "signs" statistics from the RSA and DSA parts
|
|
||||||
* of "openssl speed -engine atalla dsa1024 rsa1024". */
|
|
||||||
static int atalla_dsa_mod_exp(DSA *dsa, BIGNUM *rr, BIGNUM *a1,
|
|
||||||
BIGNUM *p1, BIGNUM *a2, BIGNUM *p2, BIGNUM *m,
|
|
||||||
BN_CTX *ctx, BN_MONT_CTX *in_mont)
|
|
||||||
{
|
|
||||||
BIGNUM t;
|
|
||||||
int to_return = 0;
|
|
||||||
|
|
||||||
BN_init(&t);
|
|
||||||
/* let rr = a1 ^ p1 mod m */
|
|
||||||
if (!atalla_mod_exp(rr,a1,p1,m,ctx)) goto end;
|
|
||||||
/* let t = a2 ^ p2 mod m */
|
|
||||||
if (!atalla_mod_exp(&t,a2,p2,m,ctx)) goto end;
|
|
||||||
/* let rr = rr * t mod m */
|
|
||||||
if (!BN_mod_mul(rr,rr,&t,m,ctx)) goto end;
|
|
||||||
to_return = 1;
|
|
||||||
end:
|
|
||||||
BN_free(&t);
|
|
||||||
return to_return;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int atalla_mod_exp_dsa(DSA *dsa, BIGNUM *r, BIGNUM *a,
|
|
||||||
const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx,
|
|
||||||
BN_MONT_CTX *m_ctx)
|
|
||||||
{
|
|
||||||
return atalla_mod_exp(r, a, p, m, ctx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This function is aliased to mod_exp (with the mont stuff dropped). */
|
|
||||||
static int atalla_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)
|
|
||||||
{
|
|
||||||
return atalla_mod_exp(r, a, p, m, ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
/* This function is aliased to mod_exp (with the dh and mont dropped). */
|
|
||||||
static int atalla_mod_exp_dh(const DH *dh, BIGNUM *r,
|
|
||||||
const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)
|
|
||||||
{
|
|
||||||
return atalla_mod_exp(r, a, p, m, ctx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This stuff is needed if this ENGINE is being compiled into a self-contained
|
|
||||||
* shared-library. */
|
|
||||||
#ifdef ENGINE_DYNAMIC_SUPPORT
|
|
||||||
static int bind_fn(ENGINE *e, const char *id)
|
|
||||||
{
|
|
||||||
if(id && (strcmp(id, engine_atalla_id) != 0))
|
|
||||||
return 0;
|
|
||||||
if(!bind_helper(e))
|
|
||||||
return 0;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
IMPLEMENT_DYNAMIC_CHECK_FN()
|
|
||||||
IMPLEMENT_DYNAMIC_BIND_FN(bind_fn)
|
|
||||||
#endif /* ENGINE_DYNAMIC_SUPPORT */
|
|
||||||
|
|
||||||
#endif /* !OPENSSL_NO_HW_ATALLA */
|
|
||||||
#endif /* !OPENSSL_NO_HW */
|
|
@ -1,145 +0,0 @@
|
|||||||
/* hw_atalla_err.c */
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@OpenSSL.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* NOTE: this file was auto generated by the mkerr.pl script: any changes
|
|
||||||
* made to it will be overwritten when the script next updates this file,
|
|
||||||
* only reason strings will be preserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <openssl/err.h>
|
|
||||||
#include "hw_atalla_err.h"
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
static ERR_STRING_DATA ATALLA_str_functs[]=
|
|
||||||
{
|
|
||||||
{ERR_PACK(0,ATALLA_F_ATALLA_CTRL,0), "ATALLA_CTRL"},
|
|
||||||
{ERR_PACK(0,ATALLA_F_ATALLA_FINISH,0), "ATALLA_FINISH"},
|
|
||||||
{ERR_PACK(0,ATALLA_F_ATALLA_INIT,0), "ATALLA_INIT"},
|
|
||||||
{ERR_PACK(0,ATALLA_F_ATALLA_MOD_EXP,0), "ATALLA_MOD_EXP"},
|
|
||||||
{ERR_PACK(0,ATALLA_F_ATALLA_RSA_MOD_EXP,0), "ATALLA_RSA_MOD_EXP"},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
static ERR_STRING_DATA ATALLA_str_reasons[]=
|
|
||||||
{
|
|
||||||
{ATALLA_R_ALREADY_LOADED ,"already loaded"},
|
|
||||||
{ATALLA_R_BN_CTX_FULL ,"bn ctx full"},
|
|
||||||
{ATALLA_R_BN_EXPAND_FAIL ,"bn expand fail"},
|
|
||||||
{ATALLA_R_CTRL_COMMAND_NOT_IMPLEMENTED ,"ctrl command not implemented"},
|
|
||||||
{ATALLA_R_MISSING_KEY_COMPONENTS ,"missing key components"},
|
|
||||||
{ATALLA_R_NOT_LOADED ,"not loaded"},
|
|
||||||
{ATALLA_R_REQUEST_FAILED ,"request failed"},
|
|
||||||
{ATALLA_R_UNIT_FAILURE ,"unit failure"},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ATALLA_LIB_NAME
|
|
||||||
static ERR_STRING_DATA ATALLA_lib_name[]=
|
|
||||||
{
|
|
||||||
{0 ,ATALLA_LIB_NAME},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
static int ATALLA_lib_error_code=0;
|
|
||||||
static int ATALLA_error_init=1;
|
|
||||||
|
|
||||||
static void ERR_load_ATALLA_strings(void)
|
|
||||||
{
|
|
||||||
if (ATALLA_lib_error_code == 0)
|
|
||||||
ATALLA_lib_error_code=ERR_get_next_error_library();
|
|
||||||
|
|
||||||
if (ATALLA_error_init)
|
|
||||||
{
|
|
||||||
ATALLA_error_init=0;
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
ERR_load_strings(ATALLA_lib_error_code,ATALLA_str_functs);
|
|
||||||
ERR_load_strings(ATALLA_lib_error_code,ATALLA_str_reasons);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ATALLA_LIB_NAME
|
|
||||||
ATALLA_lib_name->error = ERR_PACK(ATALLA_lib_error_code,0,0);
|
|
||||||
ERR_load_strings(0,ATALLA_lib_name);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ERR_unload_ATALLA_strings(void)
|
|
||||||
{
|
|
||||||
if (ATALLA_error_init == 0)
|
|
||||||
{
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
ERR_unload_strings(ATALLA_lib_error_code,ATALLA_str_functs);
|
|
||||||
ERR_unload_strings(ATALLA_lib_error_code,ATALLA_str_reasons);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ATALLA_LIB_NAME
|
|
||||||
ERR_unload_strings(0,ATALLA_lib_name);
|
|
||||||
#endif
|
|
||||||
ATALLA_error_init=1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ERR_ATALLA_error(int function, int reason, char *file, int line)
|
|
||||||
{
|
|
||||||
if (ATALLA_lib_error_code == 0)
|
|
||||||
ATALLA_lib_error_code=ERR_get_next_error_library();
|
|
||||||
ERR_PUT_error(ATALLA_lib_error_code,function,reason,file,line);
|
|
||||||
}
|
|
@ -1,89 +0,0 @@
|
|||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 2001 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@openssl.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_ATALLA_ERR_H
|
|
||||||
#define HEADER_ATALLA_ERR_H
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
|
||||||
* made after this point may be overwritten when the script is next run.
|
|
||||||
*/
|
|
||||||
static void ERR_load_ATALLA_strings(void);
|
|
||||||
static void ERR_unload_ATALLA_strings(void);
|
|
||||||
static void ERR_ATALLA_error(int function, int reason, char *file, int line);
|
|
||||||
#define ATALLAerr(f,r) ERR_ATALLA_error((f),(r),__FILE__,__LINE__)
|
|
||||||
|
|
||||||
/* Error codes for the ATALLA functions. */
|
|
||||||
|
|
||||||
/* Function codes. */
|
|
||||||
#define ATALLA_F_ATALLA_CTRL 100
|
|
||||||
#define ATALLA_F_ATALLA_FINISH 101
|
|
||||||
#define ATALLA_F_ATALLA_INIT 102
|
|
||||||
#define ATALLA_F_ATALLA_MOD_EXP 103
|
|
||||||
#define ATALLA_F_ATALLA_RSA_MOD_EXP 104
|
|
||||||
|
|
||||||
/* Reason codes. */
|
|
||||||
#define ATALLA_R_ALREADY_LOADED 100
|
|
||||||
#define ATALLA_R_BN_CTX_FULL 101
|
|
||||||
#define ATALLA_R_BN_EXPAND_FAIL 102
|
|
||||||
#define ATALLA_R_CTRL_COMMAND_NOT_IMPLEMENTED 103
|
|
||||||
#define ATALLA_R_MISSING_KEY_COMPONENTS 104
|
|
||||||
#define ATALLA_R_NOT_LOADED 105
|
|
||||||
#define ATALLA_R_REQUEST_FAILED 106
|
|
||||||
#define ATALLA_R_UNIT_FAILURE 107
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
File diff suppressed because it is too large
Load Diff
@ -1,997 +0,0 @@
|
|||||||
/* crypto/engine/hw_cswift.c */
|
|
||||||
/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
|
|
||||||
* project 2000.
|
|
||||||
*/
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1999-2001 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* licensing@OpenSSL.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <openssl/crypto.h>
|
|
||||||
#include "cryptlib.h"
|
|
||||||
#include <openssl/dso.h>
|
|
||||||
#include <openssl/engine.h>
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_HW
|
|
||||||
#ifndef OPENSSL_NO_HW_CSWIFT
|
|
||||||
|
|
||||||
/* Attribution notice: Rainbow have generously allowed me to reproduce
|
|
||||||
* the necessary definitions here from their API. This means the support
|
|
||||||
* can build independently of whether application builders have the
|
|
||||||
* API or hardware. This will allow developers to easily produce software
|
|
||||||
* that has latent hardware support for any users that have accelerators
|
|
||||||
* installed, without the developers themselves needing anything extra.
|
|
||||||
*
|
|
||||||
* I have only clipped the parts from the CryptoSwift header files that
|
|
||||||
* are (or seem) relevant to the CryptoSwift support code. This is
|
|
||||||
* simply to keep the file sizes reasonable.
|
|
||||||
* [Geoff]
|
|
||||||
*/
|
|
||||||
#ifdef FLAT_INC
|
|
||||||
#include "cswift.h"
|
|
||||||
#else
|
|
||||||
#include "vendor_defns/cswift.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define CSWIFT_LIB_NAME "cswift engine"
|
|
||||||
#include "hw_cswift_err.c"
|
|
||||||
|
|
||||||
static int cswift_destroy(ENGINE *e);
|
|
||||||
static int cswift_init(ENGINE *e);
|
|
||||||
static int cswift_finish(ENGINE *e);
|
|
||||||
static int cswift_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)());
|
|
||||||
|
|
||||||
/* BIGNUM stuff */
|
|
||||||
static int cswift_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx);
|
|
||||||
static int cswift_mod_exp_crt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *q, const BIGNUM *dmp1, const BIGNUM *dmq1,
|
|
||||||
const BIGNUM *iqmp, BN_CTX *ctx);
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
/* RSA stuff */
|
|
||||||
static int cswift_rsa_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa);
|
|
||||||
#endif
|
|
||||||
/* This function is aliased to mod_exp (with the mont stuff dropped). */
|
|
||||||
static int cswift_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
/* DSA stuff */
|
|
||||||
static DSA_SIG *cswift_dsa_sign(const unsigned char *dgst, int dlen, DSA *dsa);
|
|
||||||
static int cswift_dsa_verify(const unsigned char *dgst, int dgst_len,
|
|
||||||
DSA_SIG *sig, DSA *dsa);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
/* DH stuff */
|
|
||||||
/* This function is alised to mod_exp (with the DH and mont dropped). */
|
|
||||||
static int cswift_mod_exp_dh(const DH *dh, BIGNUM *r,
|
|
||||||
const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* RAND stuff */
|
|
||||||
static int cswift_rand_bytes(unsigned char *buf, int num);
|
|
||||||
static int cswift_rand_status(void);
|
|
||||||
|
|
||||||
/* The definitions for control commands specific to this engine */
|
|
||||||
#define CSWIFT_CMD_SO_PATH ENGINE_CMD_BASE
|
|
||||||
static const ENGINE_CMD_DEFN cswift_cmd_defns[] = {
|
|
||||||
{CSWIFT_CMD_SO_PATH,
|
|
||||||
"SO_PATH",
|
|
||||||
"Specifies the path to the 'cswift' shared library",
|
|
||||||
ENGINE_CMD_FLAG_STRING},
|
|
||||||
{0, NULL, NULL, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
/* Our internal RSA_METHOD that we provide pointers to */
|
|
||||||
static RSA_METHOD cswift_rsa =
|
|
||||||
{
|
|
||||||
"CryptoSwift RSA method",
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
cswift_rsa_mod_exp,
|
|
||||||
cswift_mod_exp_mont,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
0,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
/* Our internal DSA_METHOD that we provide pointers to */
|
|
||||||
static DSA_METHOD cswift_dsa =
|
|
||||||
{
|
|
||||||
"CryptoSwift DSA method",
|
|
||||||
cswift_dsa_sign,
|
|
||||||
NULL, /* dsa_sign_setup */
|
|
||||||
cswift_dsa_verify,
|
|
||||||
NULL, /* dsa_mod_exp */
|
|
||||||
NULL, /* bn_mod_exp */
|
|
||||||
NULL, /* init */
|
|
||||||
NULL, /* finish */
|
|
||||||
0, /* flags */
|
|
||||||
NULL /* app_data */
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
/* Our internal DH_METHOD that we provide pointers to */
|
|
||||||
static DH_METHOD cswift_dh =
|
|
||||||
{
|
|
||||||
"CryptoSwift DH method",
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
cswift_mod_exp_dh,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
0,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static RAND_METHOD cswift_random =
|
|
||||||
{
|
|
||||||
/* "CryptoSwift RAND method", */
|
|
||||||
NULL,
|
|
||||||
cswift_rand_bytes,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
cswift_rand_bytes,
|
|
||||||
cswift_rand_status,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* Constants used when creating the ENGINE */
|
|
||||||
static const char *engine_cswift_id = "cswift";
|
|
||||||
static const char *engine_cswift_name = "CryptoSwift hardware engine support";
|
|
||||||
|
|
||||||
/* This internal function is used by ENGINE_cswift() and possibly by the
|
|
||||||
* "dynamic" ENGINE support too */
|
|
||||||
static int bind_helper(ENGINE *e)
|
|
||||||
{
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
const RSA_METHOD *meth1;
|
|
||||||
#endif
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
const DH_METHOD *meth2;
|
|
||||||
#endif
|
|
||||||
if(!ENGINE_set_id(e, engine_cswift_id) ||
|
|
||||||
!ENGINE_set_name(e, engine_cswift_name) ||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
!ENGINE_set_RSA(e, &cswift_rsa) ||
|
|
||||||
#endif
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
!ENGINE_set_DSA(e, &cswift_dsa) ||
|
|
||||||
#endif
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
!ENGINE_set_DH(e, &cswift_dh) ||
|
|
||||||
#endif
|
|
||||||
!ENGINE_set_RAND(e, &cswift_random) ||
|
|
||||||
!ENGINE_set_destroy_function(e, cswift_destroy) ||
|
|
||||||
!ENGINE_set_init_function(e, cswift_init) ||
|
|
||||||
!ENGINE_set_finish_function(e, cswift_finish) ||
|
|
||||||
!ENGINE_set_ctrl_function(e, cswift_ctrl) ||
|
|
||||||
!ENGINE_set_cmd_defns(e, cswift_cmd_defns))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
/* We know that the "PKCS1_SSLeay()" functions hook properly
|
|
||||||
* to the cswift-specific mod_exp and mod_exp_crt so we use
|
|
||||||
* those functions. NB: We don't use ENGINE_openssl() or
|
|
||||||
* anything "more generic" because something like the RSAref
|
|
||||||
* code may not hook properly, and if you own one of these
|
|
||||||
* cards then you have the right to do RSA operations on it
|
|
||||||
* anyway! */
|
|
||||||
meth1 = RSA_PKCS1_SSLeay();
|
|
||||||
cswift_rsa.rsa_pub_enc = meth1->rsa_pub_enc;
|
|
||||||
cswift_rsa.rsa_pub_dec = meth1->rsa_pub_dec;
|
|
||||||
cswift_rsa.rsa_priv_enc = meth1->rsa_priv_enc;
|
|
||||||
cswift_rsa.rsa_priv_dec = meth1->rsa_priv_dec;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
/* Much the same for Diffie-Hellman */
|
|
||||||
meth2 = DH_OpenSSL();
|
|
||||||
cswift_dh.generate_key = meth2->generate_key;
|
|
||||||
cswift_dh.compute_key = meth2->compute_key;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Ensure the cswift error handling is set up */
|
|
||||||
ERR_load_CSWIFT_strings();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef ENGINE_DYNAMIC_SUPPORT
|
|
||||||
static ENGINE *engine_cswift(void)
|
|
||||||
{
|
|
||||||
ENGINE *ret = ENGINE_new();
|
|
||||||
if(!ret)
|
|
||||||
return NULL;
|
|
||||||
if(!bind_helper(ret))
|
|
||||||
{
|
|
||||||
ENGINE_free(ret);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ENGINE_load_cswift(void)
|
|
||||||
{
|
|
||||||
/* Copied from eng_[openssl|dyn].c */
|
|
||||||
ENGINE *toadd = engine_cswift();
|
|
||||||
if(!toadd) return;
|
|
||||||
ENGINE_add(toadd);
|
|
||||||
ENGINE_free(toadd);
|
|
||||||
ERR_clear_error();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This is a process-global DSO handle used for loading and unloading
|
|
||||||
* the CryptoSwift library. NB: This is only set (or unset) during an
|
|
||||||
* init() or finish() call (reference counts permitting) and they're
|
|
||||||
* operating with global locks, so this should be thread-safe
|
|
||||||
* implicitly. */
|
|
||||||
static DSO *cswift_dso = NULL;
|
|
||||||
|
|
||||||
/* These are the function pointers that are (un)set when the library has
|
|
||||||
* successfully (un)loaded. */
|
|
||||||
t_swAcquireAccContext *p_CSwift_AcquireAccContext = NULL;
|
|
||||||
t_swAttachKeyParam *p_CSwift_AttachKeyParam = NULL;
|
|
||||||
t_swSimpleRequest *p_CSwift_SimpleRequest = NULL;
|
|
||||||
t_swReleaseAccContext *p_CSwift_ReleaseAccContext = NULL;
|
|
||||||
|
|
||||||
/* Used in the DSO operations. */
|
|
||||||
static const char *CSWIFT_LIBNAME = NULL;
|
|
||||||
static const char *get_CSWIFT_LIBNAME(void)
|
|
||||||
{
|
|
||||||
if(CSWIFT_LIBNAME)
|
|
||||||
return CSWIFT_LIBNAME;
|
|
||||||
return "swift";
|
|
||||||
}
|
|
||||||
static void free_CSWIFT_LIBNAME(void)
|
|
||||||
{
|
|
||||||
if(CSWIFT_LIBNAME)
|
|
||||||
OPENSSL_free((void*)CSWIFT_LIBNAME);
|
|
||||||
CSWIFT_LIBNAME = NULL;
|
|
||||||
}
|
|
||||||
static long set_CSWIFT_LIBNAME(const char *name)
|
|
||||||
{
|
|
||||||
free_CSWIFT_LIBNAME();
|
|
||||||
return (((CSWIFT_LIBNAME = BUF_strdup(name)) != NULL) ? 1 : 0);
|
|
||||||
}
|
|
||||||
static const char *CSWIFT_F1 = "swAcquireAccContext";
|
|
||||||
static const char *CSWIFT_F2 = "swAttachKeyParam";
|
|
||||||
static const char *CSWIFT_F3 = "swSimpleRequest";
|
|
||||||
static const char *CSWIFT_F4 = "swReleaseAccContext";
|
|
||||||
|
|
||||||
|
|
||||||
/* CryptoSwift library functions and mechanics - these are used by the
|
|
||||||
* higher-level functions further down. NB: As and where there's no
|
|
||||||
* error checking, take a look lower down where these functions are
|
|
||||||
* called, the checking and error handling is probably down there. */
|
|
||||||
|
|
||||||
/* utility function to obtain a context */
|
|
||||||
static int get_context(SW_CONTEXT_HANDLE *hac)
|
|
||||||
{
|
|
||||||
SW_STATUS status;
|
|
||||||
|
|
||||||
status = p_CSwift_AcquireAccContext(hac);
|
|
||||||
if(status != SW_OK)
|
|
||||||
return 0;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* similarly to release one. */
|
|
||||||
static void release_context(SW_CONTEXT_HANDLE hac)
|
|
||||||
{
|
|
||||||
p_CSwift_ReleaseAccContext(hac);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Destructor (complements the "ENGINE_cswift()" constructor) */
|
|
||||||
static int cswift_destroy(ENGINE *e)
|
|
||||||
{
|
|
||||||
free_CSWIFT_LIBNAME();
|
|
||||||
ERR_unload_CSWIFT_strings();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (de)initialisation functions. */
|
|
||||||
static int cswift_init(ENGINE *e)
|
|
||||||
{
|
|
||||||
SW_CONTEXT_HANDLE hac;
|
|
||||||
t_swAcquireAccContext *p1;
|
|
||||||
t_swAttachKeyParam *p2;
|
|
||||||
t_swSimpleRequest *p3;
|
|
||||||
t_swReleaseAccContext *p4;
|
|
||||||
|
|
||||||
if(cswift_dso != NULL)
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_INIT,CSWIFT_R_ALREADY_LOADED);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* Attempt to load libswift.so/swift.dll/whatever. */
|
|
||||||
cswift_dso = DSO_load(NULL, get_CSWIFT_LIBNAME(), NULL, 0);
|
|
||||||
if(cswift_dso == NULL)
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_INIT,CSWIFT_R_NOT_LOADED);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if(!(p1 = (t_swAcquireAccContext *)
|
|
||||||
DSO_bind_func(cswift_dso, CSWIFT_F1)) ||
|
|
||||||
!(p2 = (t_swAttachKeyParam *)
|
|
||||||
DSO_bind_func(cswift_dso, CSWIFT_F2)) ||
|
|
||||||
!(p3 = (t_swSimpleRequest *)
|
|
||||||
DSO_bind_func(cswift_dso, CSWIFT_F3)) ||
|
|
||||||
!(p4 = (t_swReleaseAccContext *)
|
|
||||||
DSO_bind_func(cswift_dso, CSWIFT_F4)))
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_INIT,CSWIFT_R_NOT_LOADED);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* Copy the pointers */
|
|
||||||
p_CSwift_AcquireAccContext = p1;
|
|
||||||
p_CSwift_AttachKeyParam = p2;
|
|
||||||
p_CSwift_SimpleRequest = p3;
|
|
||||||
p_CSwift_ReleaseAccContext = p4;
|
|
||||||
/* Try and get a context - if not, we may have a DSO but no
|
|
||||||
* accelerator! */
|
|
||||||
if(!get_context(&hac))
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_INIT,CSWIFT_R_UNIT_FAILURE);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
release_context(hac);
|
|
||||||
/* Everything's fine. */
|
|
||||||
return 1;
|
|
||||||
err:
|
|
||||||
if(cswift_dso)
|
|
||||||
DSO_free(cswift_dso);
|
|
||||||
p_CSwift_AcquireAccContext = NULL;
|
|
||||||
p_CSwift_AttachKeyParam = NULL;
|
|
||||||
p_CSwift_SimpleRequest = NULL;
|
|
||||||
p_CSwift_ReleaseAccContext = NULL;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cswift_finish(ENGINE *e)
|
|
||||||
{
|
|
||||||
free_CSWIFT_LIBNAME();
|
|
||||||
if(cswift_dso == NULL)
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_FINISH,CSWIFT_R_NOT_LOADED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if(!DSO_free(cswift_dso))
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_FINISH,CSWIFT_R_UNIT_FAILURE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
cswift_dso = NULL;
|
|
||||||
p_CSwift_AcquireAccContext = NULL;
|
|
||||||
p_CSwift_AttachKeyParam = NULL;
|
|
||||||
p_CSwift_SimpleRequest = NULL;
|
|
||||||
p_CSwift_ReleaseAccContext = NULL;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cswift_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)())
|
|
||||||
{
|
|
||||||
int initialised = ((cswift_dso == NULL) ? 0 : 1);
|
|
||||||
switch(cmd)
|
|
||||||
{
|
|
||||||
case CSWIFT_CMD_SO_PATH:
|
|
||||||
if(p == NULL)
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_CTRL,ERR_R_PASSED_NULL_PARAMETER);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if(initialised)
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_CTRL,CSWIFT_R_ALREADY_LOADED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return set_CSWIFT_LIBNAME((const char *)p);
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_CTRL,CSWIFT_R_CTRL_COMMAND_NOT_IMPLEMENTED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Un petit mod_exp */
|
|
||||||
static int cswift_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx)
|
|
||||||
{
|
|
||||||
/* I need somewhere to store temporary serialised values for
|
|
||||||
* use with the CryptoSwift API calls. A neat cheat - I'll use
|
|
||||||
* BIGNUMs from the BN_CTX but access their arrays directly as
|
|
||||||
* byte arrays <grin>. This way I don't have to clean anything
|
|
||||||
* up. */
|
|
||||||
BIGNUM *modulus;
|
|
||||||
BIGNUM *exponent;
|
|
||||||
BIGNUM *argument;
|
|
||||||
BIGNUM *result;
|
|
||||||
SW_STATUS sw_status;
|
|
||||||
SW_LARGENUMBER arg, res;
|
|
||||||
SW_PARAM sw_param;
|
|
||||||
SW_CONTEXT_HANDLE hac;
|
|
||||||
int to_return, acquired;
|
|
||||||
|
|
||||||
modulus = exponent = argument = result = NULL;
|
|
||||||
to_return = 0; /* expect failure */
|
|
||||||
acquired = 0;
|
|
||||||
|
|
||||||
if(!get_context(&hac))
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP,CSWIFT_R_UNIT_FAILURE);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
acquired = 1;
|
|
||||||
/* Prepare the params */
|
|
||||||
BN_CTX_start(ctx);
|
|
||||||
modulus = BN_CTX_get(ctx);
|
|
||||||
exponent = BN_CTX_get(ctx);
|
|
||||||
argument = BN_CTX_get(ctx);
|
|
||||||
result = BN_CTX_get(ctx);
|
|
||||||
if(!result)
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP,CSWIFT_R_BN_CTX_FULL);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if(!bn_wexpand(modulus, m->top) || !bn_wexpand(exponent, p->top) ||
|
|
||||||
!bn_wexpand(argument, a->top) || !bn_wexpand(result, m->top))
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP,CSWIFT_R_BN_EXPAND_FAIL);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
sw_param.type = SW_ALG_EXP;
|
|
||||||
sw_param.up.exp.modulus.nbytes = BN_bn2bin(m,
|
|
||||||
(unsigned char *)modulus->d);
|
|
||||||
sw_param.up.exp.modulus.value = (unsigned char *)modulus->d;
|
|
||||||
sw_param.up.exp.exponent.nbytes = BN_bn2bin(p,
|
|
||||||
(unsigned char *)exponent->d);
|
|
||||||
sw_param.up.exp.exponent.value = (unsigned char *)exponent->d;
|
|
||||||
/* Attach the key params */
|
|
||||||
sw_status = p_CSwift_AttachKeyParam(hac, &sw_param);
|
|
||||||
switch(sw_status)
|
|
||||||
{
|
|
||||||
case SW_OK:
|
|
||||||
break;
|
|
||||||
case SW_ERR_INPUT_SIZE:
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP,CSWIFT_R_BAD_KEY_SIZE);
|
|
||||||
goto err;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
char tmpbuf[DECIMAL_SIZE(sw_status)+1];
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP,CSWIFT_R_REQUEST_FAILED);
|
|
||||||
sprintf(tmpbuf, "%ld", sw_status);
|
|
||||||
ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
|
|
||||||
}
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* Prepare the argument and response */
|
|
||||||
arg.nbytes = BN_bn2bin(a, (unsigned char *)argument->d);
|
|
||||||
arg.value = (unsigned char *)argument->d;
|
|
||||||
res.nbytes = BN_num_bytes(m);
|
|
||||||
memset(result->d, 0, res.nbytes);
|
|
||||||
res.value = (unsigned char *)result->d;
|
|
||||||
/* Perform the operation */
|
|
||||||
if((sw_status = p_CSwift_SimpleRequest(hac, SW_CMD_MODEXP, &arg, 1,
|
|
||||||
&res, 1)) != SW_OK)
|
|
||||||
{
|
|
||||||
char tmpbuf[DECIMAL_SIZE(sw_status)+1];
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP,CSWIFT_R_REQUEST_FAILED);
|
|
||||||
sprintf(tmpbuf, "%ld", sw_status);
|
|
||||||
ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* Convert the response */
|
|
||||||
BN_bin2bn((unsigned char *)result->d, res.nbytes, r);
|
|
||||||
to_return = 1;
|
|
||||||
err:
|
|
||||||
if(acquired)
|
|
||||||
release_context(hac);
|
|
||||||
BN_CTX_end(ctx);
|
|
||||||
return to_return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Un petit mod_exp chinois */
|
|
||||||
static int cswift_mod_exp_crt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *q, const BIGNUM *dmp1,
|
|
||||||
const BIGNUM *dmq1, const BIGNUM *iqmp, BN_CTX *ctx)
|
|
||||||
{
|
|
||||||
SW_STATUS sw_status;
|
|
||||||
SW_LARGENUMBER arg, res;
|
|
||||||
SW_PARAM sw_param;
|
|
||||||
SW_CONTEXT_HANDLE hac;
|
|
||||||
BIGNUM *rsa_p = NULL;
|
|
||||||
BIGNUM *rsa_q = NULL;
|
|
||||||
BIGNUM *rsa_dmp1 = NULL;
|
|
||||||
BIGNUM *rsa_dmq1 = NULL;
|
|
||||||
BIGNUM *rsa_iqmp = NULL;
|
|
||||||
BIGNUM *argument = NULL;
|
|
||||||
BIGNUM *result = NULL;
|
|
||||||
int to_return = 0; /* expect failure */
|
|
||||||
int acquired = 0;
|
|
||||||
|
|
||||||
if(!get_context(&hac))
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_UNIT_FAILURE);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
acquired = 1;
|
|
||||||
/* Prepare the params */
|
|
||||||
BN_CTX_start(ctx);
|
|
||||||
rsa_p = BN_CTX_get(ctx);
|
|
||||||
rsa_q = BN_CTX_get(ctx);
|
|
||||||
rsa_dmp1 = BN_CTX_get(ctx);
|
|
||||||
rsa_dmq1 = BN_CTX_get(ctx);
|
|
||||||
rsa_iqmp = BN_CTX_get(ctx);
|
|
||||||
argument = BN_CTX_get(ctx);
|
|
||||||
result = BN_CTX_get(ctx);
|
|
||||||
if(!result)
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_BN_CTX_FULL);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if(!bn_wexpand(rsa_p, p->top) || !bn_wexpand(rsa_q, q->top) ||
|
|
||||||
!bn_wexpand(rsa_dmp1, dmp1->top) ||
|
|
||||||
!bn_wexpand(rsa_dmq1, dmq1->top) ||
|
|
||||||
!bn_wexpand(rsa_iqmp, iqmp->top) ||
|
|
||||||
!bn_wexpand(argument, a->top) ||
|
|
||||||
!bn_wexpand(result, p->top + q->top))
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_BN_EXPAND_FAIL);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
sw_param.type = SW_ALG_CRT;
|
|
||||||
sw_param.up.crt.p.nbytes = BN_bn2bin(p, (unsigned char *)rsa_p->d);
|
|
||||||
sw_param.up.crt.p.value = (unsigned char *)rsa_p->d;
|
|
||||||
sw_param.up.crt.q.nbytes = BN_bn2bin(q, (unsigned char *)rsa_q->d);
|
|
||||||
sw_param.up.crt.q.value = (unsigned char *)rsa_q->d;
|
|
||||||
sw_param.up.crt.dmp1.nbytes = BN_bn2bin(dmp1,
|
|
||||||
(unsigned char *)rsa_dmp1->d);
|
|
||||||
sw_param.up.crt.dmp1.value = (unsigned char *)rsa_dmp1->d;
|
|
||||||
sw_param.up.crt.dmq1.nbytes = BN_bn2bin(dmq1,
|
|
||||||
(unsigned char *)rsa_dmq1->d);
|
|
||||||
sw_param.up.crt.dmq1.value = (unsigned char *)rsa_dmq1->d;
|
|
||||||
sw_param.up.crt.iqmp.nbytes = BN_bn2bin(iqmp,
|
|
||||||
(unsigned char *)rsa_iqmp->d);
|
|
||||||
sw_param.up.crt.iqmp.value = (unsigned char *)rsa_iqmp->d;
|
|
||||||
/* Attach the key params */
|
|
||||||
sw_status = p_CSwift_AttachKeyParam(hac, &sw_param);
|
|
||||||
switch(sw_status)
|
|
||||||
{
|
|
||||||
case SW_OK:
|
|
||||||
break;
|
|
||||||
case SW_ERR_INPUT_SIZE:
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_BAD_KEY_SIZE);
|
|
||||||
goto err;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
char tmpbuf[DECIMAL_SIZE(sw_status)+1];
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_REQUEST_FAILED);
|
|
||||||
sprintf(tmpbuf, "%ld", sw_status);
|
|
||||||
ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
|
|
||||||
}
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* Prepare the argument and response */
|
|
||||||
arg.nbytes = BN_bn2bin(a, (unsigned char *)argument->d);
|
|
||||||
arg.value = (unsigned char *)argument->d;
|
|
||||||
res.nbytes = 2 * BN_num_bytes(p);
|
|
||||||
memset(result->d, 0, res.nbytes);
|
|
||||||
res.value = (unsigned char *)result->d;
|
|
||||||
/* Perform the operation */
|
|
||||||
if((sw_status = p_CSwift_SimpleRequest(hac, SW_CMD_MODEXP_CRT, &arg, 1,
|
|
||||||
&res, 1)) != SW_OK)
|
|
||||||
{
|
|
||||||
char tmpbuf[DECIMAL_SIZE(sw_status)+1];
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_REQUEST_FAILED);
|
|
||||||
sprintf(tmpbuf, "%ld", sw_status);
|
|
||||||
ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* Convert the response */
|
|
||||||
BN_bin2bn((unsigned char *)result->d, res.nbytes, r);
|
|
||||||
to_return = 1;
|
|
||||||
err:
|
|
||||||
if(acquired)
|
|
||||||
release_context(hac);
|
|
||||||
BN_CTX_end(ctx);
|
|
||||||
return to_return;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
static int cswift_rsa_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa)
|
|
||||||
{
|
|
||||||
BN_CTX *ctx;
|
|
||||||
int to_return = 0;
|
|
||||||
|
|
||||||
if((ctx = BN_CTX_new()) == NULL)
|
|
||||||
goto err;
|
|
||||||
if(!rsa->p || !rsa->q || !rsa->dmp1 || !rsa->dmq1 || !rsa->iqmp)
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_RSA_MOD_EXP,CSWIFT_R_MISSING_KEY_COMPONENTS);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
to_return = cswift_mod_exp_crt(r0, I, rsa->p, rsa->q, rsa->dmp1,
|
|
||||||
rsa->dmq1, rsa->iqmp, ctx);
|
|
||||||
err:
|
|
||||||
if(ctx)
|
|
||||||
BN_CTX_free(ctx);
|
|
||||||
return to_return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This function is aliased to mod_exp (with the mont stuff dropped). */
|
|
||||||
static int cswift_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)
|
|
||||||
{
|
|
||||||
return cswift_mod_exp(r, a, p, m, ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
static DSA_SIG *cswift_dsa_sign(const unsigned char *dgst, int dlen, DSA *dsa)
|
|
||||||
{
|
|
||||||
SW_CONTEXT_HANDLE hac;
|
|
||||||
SW_PARAM sw_param;
|
|
||||||
SW_STATUS sw_status;
|
|
||||||
SW_LARGENUMBER arg, res;
|
|
||||||
unsigned char *ptr;
|
|
||||||
BN_CTX *ctx;
|
|
||||||
BIGNUM *dsa_p = NULL;
|
|
||||||
BIGNUM *dsa_q = NULL;
|
|
||||||
BIGNUM *dsa_g = NULL;
|
|
||||||
BIGNUM *dsa_key = NULL;
|
|
||||||
BIGNUM *result = NULL;
|
|
||||||
DSA_SIG *to_return = NULL;
|
|
||||||
int acquired = 0;
|
|
||||||
|
|
||||||
if((ctx = BN_CTX_new()) == NULL)
|
|
||||||
goto err;
|
|
||||||
if(!get_context(&hac))
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_DSA_SIGN,CSWIFT_R_UNIT_FAILURE);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
acquired = 1;
|
|
||||||
/* Prepare the params */
|
|
||||||
BN_CTX_start(ctx);
|
|
||||||
dsa_p = BN_CTX_get(ctx);
|
|
||||||
dsa_q = BN_CTX_get(ctx);
|
|
||||||
dsa_g = BN_CTX_get(ctx);
|
|
||||||
dsa_key = BN_CTX_get(ctx);
|
|
||||||
result = BN_CTX_get(ctx);
|
|
||||||
if(!result)
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_DSA_SIGN,CSWIFT_R_BN_CTX_FULL);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if(!bn_wexpand(dsa_p, dsa->p->top) ||
|
|
||||||
!bn_wexpand(dsa_q, dsa->q->top) ||
|
|
||||||
!bn_wexpand(dsa_g, dsa->g->top) ||
|
|
||||||
!bn_wexpand(dsa_key, dsa->priv_key->top) ||
|
|
||||||
!bn_wexpand(result, dsa->p->top))
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_DSA_SIGN,CSWIFT_R_BN_EXPAND_FAIL);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
sw_param.type = SW_ALG_DSA;
|
|
||||||
sw_param.up.dsa.p.nbytes = BN_bn2bin(dsa->p,
|
|
||||||
(unsigned char *)dsa_p->d);
|
|
||||||
sw_param.up.dsa.p.value = (unsigned char *)dsa_p->d;
|
|
||||||
sw_param.up.dsa.q.nbytes = BN_bn2bin(dsa->q,
|
|
||||||
(unsigned char *)dsa_q->d);
|
|
||||||
sw_param.up.dsa.q.value = (unsigned char *)dsa_q->d;
|
|
||||||
sw_param.up.dsa.g.nbytes = BN_bn2bin(dsa->g,
|
|
||||||
(unsigned char *)dsa_g->d);
|
|
||||||
sw_param.up.dsa.g.value = (unsigned char *)dsa_g->d;
|
|
||||||
sw_param.up.dsa.key.nbytes = BN_bn2bin(dsa->priv_key,
|
|
||||||
(unsigned char *)dsa_key->d);
|
|
||||||
sw_param.up.dsa.key.value = (unsigned char *)dsa_key->d;
|
|
||||||
/* Attach the key params */
|
|
||||||
sw_status = p_CSwift_AttachKeyParam(hac, &sw_param);
|
|
||||||
switch(sw_status)
|
|
||||||
{
|
|
||||||
case SW_OK:
|
|
||||||
break;
|
|
||||||
case SW_ERR_INPUT_SIZE:
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_DSA_SIGN,CSWIFT_R_BAD_KEY_SIZE);
|
|
||||||
goto err;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
char tmpbuf[DECIMAL_SIZE(sw_status)+1];
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_DSA_SIGN,CSWIFT_R_REQUEST_FAILED);
|
|
||||||
sprintf(tmpbuf, "%ld", sw_status);
|
|
||||||
ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
|
|
||||||
}
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* Prepare the argument and response */
|
|
||||||
arg.nbytes = dlen;
|
|
||||||
arg.value = (unsigned char *)dgst;
|
|
||||||
res.nbytes = BN_num_bytes(dsa->p);
|
|
||||||
memset(result->d, 0, res.nbytes);
|
|
||||||
res.value = (unsigned char *)result->d;
|
|
||||||
/* Perform the operation */
|
|
||||||
sw_status = p_CSwift_SimpleRequest(hac, SW_CMD_DSS_SIGN, &arg, 1,
|
|
||||||
&res, 1);
|
|
||||||
if(sw_status != SW_OK)
|
|
||||||
{
|
|
||||||
char tmpbuf[DECIMAL_SIZE(sw_status)+1];
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_DSA_SIGN,CSWIFT_R_REQUEST_FAILED);
|
|
||||||
sprintf(tmpbuf, "%ld", sw_status);
|
|
||||||
ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* Convert the response */
|
|
||||||
ptr = (unsigned char *)result->d;
|
|
||||||
if((to_return = DSA_SIG_new()) == NULL)
|
|
||||||
goto err;
|
|
||||||
to_return->r = BN_bin2bn((unsigned char *)result->d, 20, NULL);
|
|
||||||
to_return->s = BN_bin2bn((unsigned char *)result->d + 20, 20, NULL);
|
|
||||||
|
|
||||||
err:
|
|
||||||
if(acquired)
|
|
||||||
release_context(hac);
|
|
||||||
if(ctx)
|
|
||||||
{
|
|
||||||
BN_CTX_end(ctx);
|
|
||||||
BN_CTX_free(ctx);
|
|
||||||
}
|
|
||||||
return to_return;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cswift_dsa_verify(const unsigned char *dgst, int dgst_len,
|
|
||||||
DSA_SIG *sig, DSA *dsa)
|
|
||||||
{
|
|
||||||
SW_CONTEXT_HANDLE hac;
|
|
||||||
SW_PARAM sw_param;
|
|
||||||
SW_STATUS sw_status;
|
|
||||||
SW_LARGENUMBER arg[2], res;
|
|
||||||
unsigned long sig_result;
|
|
||||||
BN_CTX *ctx;
|
|
||||||
BIGNUM *dsa_p = NULL;
|
|
||||||
BIGNUM *dsa_q = NULL;
|
|
||||||
BIGNUM *dsa_g = NULL;
|
|
||||||
BIGNUM *dsa_key = NULL;
|
|
||||||
BIGNUM *argument = NULL;
|
|
||||||
int to_return = -1;
|
|
||||||
int acquired = 0;
|
|
||||||
|
|
||||||
if((ctx = BN_CTX_new()) == NULL)
|
|
||||||
goto err;
|
|
||||||
if(!get_context(&hac))
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_DSA_VERIFY,CSWIFT_R_UNIT_FAILURE);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
acquired = 1;
|
|
||||||
/* Prepare the params */
|
|
||||||
BN_CTX_start(ctx);
|
|
||||||
dsa_p = BN_CTX_get(ctx);
|
|
||||||
dsa_q = BN_CTX_get(ctx);
|
|
||||||
dsa_g = BN_CTX_get(ctx);
|
|
||||||
dsa_key = BN_CTX_get(ctx);
|
|
||||||
argument = BN_CTX_get(ctx);
|
|
||||||
if(!argument)
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_DSA_VERIFY,CSWIFT_R_BN_CTX_FULL);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if(!bn_wexpand(dsa_p, dsa->p->top) ||
|
|
||||||
!bn_wexpand(dsa_q, dsa->q->top) ||
|
|
||||||
!bn_wexpand(dsa_g, dsa->g->top) ||
|
|
||||||
!bn_wexpand(dsa_key, dsa->pub_key->top) ||
|
|
||||||
!bn_wexpand(argument, 40))
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_DSA_VERIFY,CSWIFT_R_BN_EXPAND_FAIL);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
sw_param.type = SW_ALG_DSA;
|
|
||||||
sw_param.up.dsa.p.nbytes = BN_bn2bin(dsa->p,
|
|
||||||
(unsigned char *)dsa_p->d);
|
|
||||||
sw_param.up.dsa.p.value = (unsigned char *)dsa_p->d;
|
|
||||||
sw_param.up.dsa.q.nbytes = BN_bn2bin(dsa->q,
|
|
||||||
(unsigned char *)dsa_q->d);
|
|
||||||
sw_param.up.dsa.q.value = (unsigned char *)dsa_q->d;
|
|
||||||
sw_param.up.dsa.g.nbytes = BN_bn2bin(dsa->g,
|
|
||||||
(unsigned char *)dsa_g->d);
|
|
||||||
sw_param.up.dsa.g.value = (unsigned char *)dsa_g->d;
|
|
||||||
sw_param.up.dsa.key.nbytes = BN_bn2bin(dsa->pub_key,
|
|
||||||
(unsigned char *)dsa_key->d);
|
|
||||||
sw_param.up.dsa.key.value = (unsigned char *)dsa_key->d;
|
|
||||||
/* Attach the key params */
|
|
||||||
sw_status = p_CSwift_AttachKeyParam(hac, &sw_param);
|
|
||||||
switch(sw_status)
|
|
||||||
{
|
|
||||||
case SW_OK:
|
|
||||||
break;
|
|
||||||
case SW_ERR_INPUT_SIZE:
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_DSA_VERIFY,CSWIFT_R_BAD_KEY_SIZE);
|
|
||||||
goto err;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
char tmpbuf[DECIMAL_SIZE(sw_status)+1];
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_DSA_VERIFY,CSWIFT_R_REQUEST_FAILED);
|
|
||||||
sprintf(tmpbuf, "%ld", sw_status);
|
|
||||||
ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
|
|
||||||
}
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* Prepare the argument and response */
|
|
||||||
arg[0].nbytes = dgst_len;
|
|
||||||
arg[0].value = (unsigned char *)dgst;
|
|
||||||
arg[1].nbytes = 40;
|
|
||||||
arg[1].value = (unsigned char *)argument->d;
|
|
||||||
memset(arg[1].value, 0, 40);
|
|
||||||
BN_bn2bin(sig->r, arg[1].value + 20 - BN_num_bytes(sig->r));
|
|
||||||
BN_bn2bin(sig->s, arg[1].value + 40 - BN_num_bytes(sig->s));
|
|
||||||
res.nbytes = 4; /* unsigned long */
|
|
||||||
res.value = (unsigned char *)(&sig_result);
|
|
||||||
/* Perform the operation */
|
|
||||||
sw_status = p_CSwift_SimpleRequest(hac, SW_CMD_DSS_VERIFY, arg, 2,
|
|
||||||
&res, 1);
|
|
||||||
if(sw_status != SW_OK)
|
|
||||||
{
|
|
||||||
char tmpbuf[DECIMAL_SIZE(sw_status)+1];
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_DSA_VERIFY,CSWIFT_R_REQUEST_FAILED);
|
|
||||||
sprintf(tmpbuf, "%ld", sw_status);
|
|
||||||
ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* Convert the response */
|
|
||||||
to_return = ((sig_result == 0) ? 0 : 1);
|
|
||||||
|
|
||||||
err:
|
|
||||||
if(acquired)
|
|
||||||
release_context(hac);
|
|
||||||
if(ctx)
|
|
||||||
{
|
|
||||||
BN_CTX_end(ctx);
|
|
||||||
BN_CTX_free(ctx);
|
|
||||||
}
|
|
||||||
return to_return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
/* This function is aliased to mod_exp (with the dh and mont dropped). */
|
|
||||||
static int cswift_mod_exp_dh(const DH *dh, BIGNUM *r,
|
|
||||||
const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)
|
|
||||||
{
|
|
||||||
return cswift_mod_exp(r, a, p, m, ctx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Random bytes are good */
|
|
||||||
static int cswift_rand_bytes(unsigned char *buf, int num)
|
|
||||||
{
|
|
||||||
SW_CONTEXT_HANDLE hac;
|
|
||||||
SW_STATUS swrc;
|
|
||||||
SW_LARGENUMBER largenum;
|
|
||||||
size_t nbytes = 0;
|
|
||||||
int acquired = 0;
|
|
||||||
int to_return = 0; /* assume failure */
|
|
||||||
|
|
||||||
if (!get_context(&hac))
|
|
||||||
{
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_CTRL, CSWIFT_R_UNIT_FAILURE);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
acquired = 1;
|
|
||||||
|
|
||||||
while (nbytes < (size_t)num)
|
|
||||||
{
|
|
||||||
/* tell CryptoSwift how many bytes we want and where we want it.
|
|
||||||
* Note: - CryptoSwift cannot do more than 4096 bytes at a time.
|
|
||||||
* - CryptoSwift can only do multiple of 32-bits. */
|
|
||||||
largenum.value = (SW_BYTE *) buf + nbytes;
|
|
||||||
if (4096 > num - nbytes)
|
|
||||||
largenum.nbytes = num - nbytes;
|
|
||||||
else
|
|
||||||
largenum.nbytes = 4096;
|
|
||||||
|
|
||||||
swrc = p_CSwift_SimpleRequest(hac, SW_CMD_RAND, NULL, 0, &largenum, 1);
|
|
||||||
if (swrc != SW_OK)
|
|
||||||
{
|
|
||||||
char tmpbuf[20];
|
|
||||||
CSWIFTerr(CSWIFT_F_CSWIFT_CTRL, CSWIFT_R_REQUEST_FAILED);
|
|
||||||
sprintf(tmpbuf, "%ld", swrc);
|
|
||||||
ERR_add_error_data(2, "CryptoSwift error number is ", tmpbuf);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
nbytes += largenum.nbytes;
|
|
||||||
}
|
|
||||||
to_return = 1; /* success */
|
|
||||||
|
|
||||||
err:
|
|
||||||
if (acquired)
|
|
||||||
release_context(hac);
|
|
||||||
return to_return;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cswift_rand_status(void)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* This stuff is needed if this ENGINE is being compiled into a self-contained
|
|
||||||
* shared-library. */
|
|
||||||
#ifdef ENGINE_DYNAMIC_SUPPORT
|
|
||||||
static int bind_fn(ENGINE *e, const char *id)
|
|
||||||
{
|
|
||||||
if(id && (strcmp(id, engine_cswift_id) != 0))
|
|
||||||
return 0;
|
|
||||||
if(!bind_helper(e))
|
|
||||||
return 0;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
IMPLEMENT_DYNAMIC_CHECK_FN()
|
|
||||||
IMPLEMENT_DYNAMIC_BIND_FN(bind_fn)
|
|
||||||
#endif /* ENGINE_DYNAMIC_SUPPORT */
|
|
||||||
|
|
||||||
#endif /* !OPENSSL_NO_HW_CSWIFT */
|
|
||||||
#endif /* !OPENSSL_NO_HW */
|
|
@ -1,149 +0,0 @@
|
|||||||
/* hw_cswift_err.c */
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@OpenSSL.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* NOTE: this file was auto generated by the mkerr.pl script: any changes
|
|
||||||
* made to it will be overwritten when the script next updates this file,
|
|
||||||
* only reason strings will be preserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <openssl/err.h>
|
|
||||||
#include "hw_cswift_err.h"
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
static ERR_STRING_DATA CSWIFT_str_functs[]=
|
|
||||||
{
|
|
||||||
{ERR_PACK(0,CSWIFT_F_CSWIFT_CTRL,0), "CSWIFT_CTRL"},
|
|
||||||
{ERR_PACK(0,CSWIFT_F_CSWIFT_DSA_SIGN,0), "CSWIFT_DSA_SIGN"},
|
|
||||||
{ERR_PACK(0,CSWIFT_F_CSWIFT_DSA_VERIFY,0), "CSWIFT_DSA_VERIFY"},
|
|
||||||
{ERR_PACK(0,CSWIFT_F_CSWIFT_FINISH,0), "CSWIFT_FINISH"},
|
|
||||||
{ERR_PACK(0,CSWIFT_F_CSWIFT_INIT,0), "CSWIFT_INIT"},
|
|
||||||
{ERR_PACK(0,CSWIFT_F_CSWIFT_MOD_EXP,0), "CSWIFT_MOD_EXP"},
|
|
||||||
{ERR_PACK(0,CSWIFT_F_CSWIFT_MOD_EXP_CRT,0), "CSWIFT_MOD_EXP_CRT"},
|
|
||||||
{ERR_PACK(0,CSWIFT_F_CSWIFT_RSA_MOD_EXP,0), "CSWIFT_RSA_MOD_EXP"},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
static ERR_STRING_DATA CSWIFT_str_reasons[]=
|
|
||||||
{
|
|
||||||
{CSWIFT_R_ALREADY_LOADED ,"already loaded"},
|
|
||||||
{CSWIFT_R_BAD_KEY_SIZE ,"bad key size"},
|
|
||||||
{CSWIFT_R_BN_CTX_FULL ,"bn ctx full"},
|
|
||||||
{CSWIFT_R_BN_EXPAND_FAIL ,"bn expand fail"},
|
|
||||||
{CSWIFT_R_CTRL_COMMAND_NOT_IMPLEMENTED ,"ctrl command not implemented"},
|
|
||||||
{CSWIFT_R_MISSING_KEY_COMPONENTS ,"missing key components"},
|
|
||||||
{CSWIFT_R_NOT_LOADED ,"not loaded"},
|
|
||||||
{CSWIFT_R_REQUEST_FAILED ,"request failed"},
|
|
||||||
{CSWIFT_R_UNIT_FAILURE ,"unit failure"},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CSWIFT_LIB_NAME
|
|
||||||
static ERR_STRING_DATA CSWIFT_lib_name[]=
|
|
||||||
{
|
|
||||||
{0 ,CSWIFT_LIB_NAME},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
static int CSWIFT_lib_error_code=0;
|
|
||||||
static int CSWIFT_error_init=1;
|
|
||||||
|
|
||||||
static void ERR_load_CSWIFT_strings(void)
|
|
||||||
{
|
|
||||||
if (CSWIFT_lib_error_code == 0)
|
|
||||||
CSWIFT_lib_error_code=ERR_get_next_error_library();
|
|
||||||
|
|
||||||
if (CSWIFT_error_init)
|
|
||||||
{
|
|
||||||
CSWIFT_error_init=0;
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
ERR_load_strings(CSWIFT_lib_error_code,CSWIFT_str_functs);
|
|
||||||
ERR_load_strings(CSWIFT_lib_error_code,CSWIFT_str_reasons);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CSWIFT_LIB_NAME
|
|
||||||
CSWIFT_lib_name->error = ERR_PACK(CSWIFT_lib_error_code,0,0);
|
|
||||||
ERR_load_strings(0,CSWIFT_lib_name);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ERR_unload_CSWIFT_strings(void)
|
|
||||||
{
|
|
||||||
if (CSWIFT_error_init == 0)
|
|
||||||
{
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
ERR_unload_strings(CSWIFT_lib_error_code,CSWIFT_str_functs);
|
|
||||||
ERR_unload_strings(CSWIFT_lib_error_code,CSWIFT_str_reasons);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CSWIFT_LIB_NAME
|
|
||||||
ERR_unload_strings(0,CSWIFT_lib_name);
|
|
||||||
#endif
|
|
||||||
CSWIFT_error_init=1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ERR_CSWIFT_error(int function, int reason, char *file, int line)
|
|
||||||
{
|
|
||||||
if (CSWIFT_lib_error_code == 0)
|
|
||||||
CSWIFT_lib_error_code=ERR_get_next_error_library();
|
|
||||||
ERR_PUT_error(CSWIFT_lib_error_code,function,reason,file,line);
|
|
||||||
}
|
|
@ -1,93 +0,0 @@
|
|||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 2001 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@openssl.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_CSWIFT_ERR_H
|
|
||||||
#define HEADER_CSWIFT_ERR_H
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
|
||||||
* made after this point may be overwritten when the script is next run.
|
|
||||||
*/
|
|
||||||
static void ERR_load_CSWIFT_strings(void);
|
|
||||||
static void ERR_unload_CSWIFT_strings(void);
|
|
||||||
static void ERR_CSWIFT_error(int function, int reason, char *file, int line);
|
|
||||||
#define CSWIFTerr(f,r) ERR_CSWIFT_error((f),(r),__FILE__,__LINE__)
|
|
||||||
|
|
||||||
/* Error codes for the CSWIFT functions. */
|
|
||||||
|
|
||||||
/* Function codes. */
|
|
||||||
#define CSWIFT_F_CSWIFT_CTRL 100
|
|
||||||
#define CSWIFT_F_CSWIFT_DSA_SIGN 101
|
|
||||||
#define CSWIFT_F_CSWIFT_DSA_VERIFY 102
|
|
||||||
#define CSWIFT_F_CSWIFT_FINISH 103
|
|
||||||
#define CSWIFT_F_CSWIFT_INIT 104
|
|
||||||
#define CSWIFT_F_CSWIFT_MOD_EXP 105
|
|
||||||
#define CSWIFT_F_CSWIFT_MOD_EXP_CRT 106
|
|
||||||
#define CSWIFT_F_CSWIFT_RSA_MOD_EXP 107
|
|
||||||
|
|
||||||
/* Reason codes. */
|
|
||||||
#define CSWIFT_R_ALREADY_LOADED 100
|
|
||||||
#define CSWIFT_R_BAD_KEY_SIZE 101
|
|
||||||
#define CSWIFT_R_BN_CTX_FULL 102
|
|
||||||
#define CSWIFT_R_BN_EXPAND_FAIL 103
|
|
||||||
#define CSWIFT_R_CTRL_COMMAND_NOT_IMPLEMENTED 104
|
|
||||||
#define CSWIFT_R_MISSING_KEY_COMPONENTS 105
|
|
||||||
#define CSWIFT_R_NOT_LOADED 106
|
|
||||||
#define CSWIFT_R_REQUEST_FAILED 107
|
|
||||||
#define CSWIFT_R_UNIT_FAILURE 108
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
File diff suppressed because it is too large
Load Diff
@ -1,157 +0,0 @@
|
|||||||
/* hw_ncipher_err.c */
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1999-2002 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@OpenSSL.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* NOTE: this file was auto generated by the mkerr.pl script: any changes
|
|
||||||
* made to it will be overwritten when the script next updates this file,
|
|
||||||
* only reason strings will be preserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <openssl/err.h>
|
|
||||||
#include "hw_ncipher_err.h"
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
static ERR_STRING_DATA HWCRHK_str_functs[]=
|
|
||||||
{
|
|
||||||
{ERR_PACK(0,HWCRHK_F_HWCRHK_CTRL,0), "HWCRHK_CTRL"},
|
|
||||||
{ERR_PACK(0,HWCRHK_F_HWCRHK_FINISH,0), "HWCRHK_FINISH"},
|
|
||||||
{ERR_PACK(0,HWCRHK_F_HWCRHK_GET_PASS,0), "HWCRHK_GET_PASS"},
|
|
||||||
{ERR_PACK(0,HWCRHK_F_HWCRHK_INIT,0), "HWCRHK_INIT"},
|
|
||||||
{ERR_PACK(0,HWCRHK_F_HWCRHK_INSERT_CARD,0), "HWCRHK_INSERT_CARD"},
|
|
||||||
{ERR_PACK(0,HWCRHK_F_HWCRHK_LOAD_PRIVKEY,0), "HWCRHK_LOAD_PRIVKEY"},
|
|
||||||
{ERR_PACK(0,HWCRHK_F_HWCRHK_LOAD_PUBKEY,0), "HWCRHK_LOAD_PUBKEY"},
|
|
||||||
{ERR_PACK(0,HWCRHK_F_HWCRHK_MOD_EXP,0), "HWCRHK_MOD_EXP"},
|
|
||||||
{ERR_PACK(0,HWCRHK_F_HWCRHK_RAND_BYTES,0), "HWCRHK_RAND_BYTES"},
|
|
||||||
{ERR_PACK(0,HWCRHK_F_HWCRHK_RSA_MOD_EXP,0), "HWCRHK_RSA_MOD_EXP"},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
static ERR_STRING_DATA HWCRHK_str_reasons[]=
|
|
||||||
{
|
|
||||||
{HWCRHK_R_ALREADY_LOADED ,"already loaded"},
|
|
||||||
{HWCRHK_R_BIO_WAS_FREED ,"bio was freed"},
|
|
||||||
{HWCRHK_R_CHIL_ERROR ,"chil error"},
|
|
||||||
{HWCRHK_R_CTRL_COMMAND_NOT_IMPLEMENTED ,"ctrl command not implemented"},
|
|
||||||
{HWCRHK_R_DSO_FAILURE ,"dso failure"},
|
|
||||||
{HWCRHK_R_DYNAMIC_LOCKING_MISSING ,"dynamic locking missing"},
|
|
||||||
{HWCRHK_R_MISSING_KEY_COMPONENTS ,"missing key components"},
|
|
||||||
{HWCRHK_R_NOT_INITIALISED ,"not initialised"},
|
|
||||||
{HWCRHK_R_NOT_LOADED ,"not loaded"},
|
|
||||||
{HWCRHK_R_NO_CALLBACK ,"no callback"},
|
|
||||||
{HWCRHK_R_NO_KEY ,"no key"},
|
|
||||||
{HWCRHK_R_PRIVATE_KEY_ALGORITHMS_DISABLED,"private key algorithms disabled"},
|
|
||||||
{HWCRHK_R_REQUEST_FAILED ,"request failed"},
|
|
||||||
{HWCRHK_R_REQUEST_FALLBACK ,"request fallback"},
|
|
||||||
{HWCRHK_R_UNIT_FAILURE ,"unit failure"},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HWCRHK_LIB_NAME
|
|
||||||
static ERR_STRING_DATA HWCRHK_lib_name[]=
|
|
||||||
{
|
|
||||||
{0 ,HWCRHK_LIB_NAME},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
static int HWCRHK_lib_error_code=0;
|
|
||||||
static int HWCRHK_error_init=1;
|
|
||||||
|
|
||||||
static void ERR_load_HWCRHK_strings(void)
|
|
||||||
{
|
|
||||||
if (HWCRHK_lib_error_code == 0)
|
|
||||||
HWCRHK_lib_error_code=ERR_get_next_error_library();
|
|
||||||
|
|
||||||
if (HWCRHK_error_init)
|
|
||||||
{
|
|
||||||
HWCRHK_error_init=0;
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
ERR_load_strings(HWCRHK_lib_error_code,HWCRHK_str_functs);
|
|
||||||
ERR_load_strings(HWCRHK_lib_error_code,HWCRHK_str_reasons);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HWCRHK_LIB_NAME
|
|
||||||
HWCRHK_lib_name->error = ERR_PACK(HWCRHK_lib_error_code,0,0);
|
|
||||||
ERR_load_strings(0,HWCRHK_lib_name);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ERR_unload_HWCRHK_strings(void)
|
|
||||||
{
|
|
||||||
if (HWCRHK_error_init == 0)
|
|
||||||
{
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
ERR_unload_strings(HWCRHK_lib_error_code,HWCRHK_str_functs);
|
|
||||||
ERR_unload_strings(HWCRHK_lib_error_code,HWCRHK_str_reasons);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HWCRHK_LIB_NAME
|
|
||||||
ERR_unload_strings(0,HWCRHK_lib_name);
|
|
||||||
#endif
|
|
||||||
HWCRHK_error_init=1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ERR_HWCRHK_error(int function, int reason, char *file, int line)
|
|
||||||
{
|
|
||||||
if (HWCRHK_lib_error_code == 0)
|
|
||||||
HWCRHK_lib_error_code=ERR_get_next_error_library();
|
|
||||||
ERR_PUT_error(HWCRHK_lib_error_code,function,reason,file,line);
|
|
||||||
}
|
|
@ -1,101 +0,0 @@
|
|||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 2001 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@openssl.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_HWCRHK_ERR_H
|
|
||||||
#define HEADER_HWCRHK_ERR_H
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
|
||||||
* made after this point may be overwritten when the script is next run.
|
|
||||||
*/
|
|
||||||
static void ERR_load_HWCRHK_strings(void);
|
|
||||||
static void ERR_unload_HWCRHK_strings(void);
|
|
||||||
static void ERR_HWCRHK_error(int function, int reason, char *file, int line);
|
|
||||||
#define HWCRHKerr(f,r) ERR_HWCRHK_error((f),(r),__FILE__,__LINE__)
|
|
||||||
|
|
||||||
/* Error codes for the HWCRHK functions. */
|
|
||||||
|
|
||||||
/* Function codes. */
|
|
||||||
#define HWCRHK_F_HWCRHK_CTRL 100
|
|
||||||
#define HWCRHK_F_HWCRHK_FINISH 101
|
|
||||||
#define HWCRHK_F_HWCRHK_GET_PASS 102
|
|
||||||
#define HWCRHK_F_HWCRHK_INIT 103
|
|
||||||
#define HWCRHK_F_HWCRHK_INSERT_CARD 104
|
|
||||||
#define HWCRHK_F_HWCRHK_LOAD_PRIVKEY 105
|
|
||||||
#define HWCRHK_F_HWCRHK_LOAD_PUBKEY 106
|
|
||||||
#define HWCRHK_F_HWCRHK_MOD_EXP 107
|
|
||||||
#define HWCRHK_F_HWCRHK_RAND_BYTES 108
|
|
||||||
#define HWCRHK_F_HWCRHK_RSA_MOD_EXP 109
|
|
||||||
|
|
||||||
/* Reason codes. */
|
|
||||||
#define HWCRHK_R_ALREADY_LOADED 100
|
|
||||||
#define HWCRHK_R_BIO_WAS_FREED 101
|
|
||||||
#define HWCRHK_R_CHIL_ERROR 102
|
|
||||||
#define HWCRHK_R_CTRL_COMMAND_NOT_IMPLEMENTED 103
|
|
||||||
#define HWCRHK_R_DSO_FAILURE 104
|
|
||||||
#define HWCRHK_R_DYNAMIC_LOCKING_MISSING 114
|
|
||||||
#define HWCRHK_R_MISSING_KEY_COMPONENTS 105
|
|
||||||
#define HWCRHK_R_NOT_INITIALISED 106
|
|
||||||
#define HWCRHK_R_NOT_LOADED 107
|
|
||||||
#define HWCRHK_R_NO_CALLBACK 108
|
|
||||||
#define HWCRHK_R_NO_KEY 109
|
|
||||||
#define HWCRHK_R_PRIVATE_KEY_ALGORITHMS_DISABLED 110
|
|
||||||
#define HWCRHK_R_REQUEST_FAILED 111
|
|
||||||
#define HWCRHK_R_REQUEST_FALLBACK 112
|
|
||||||
#define HWCRHK_R_UNIT_FAILURE 113
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
@ -1,418 +0,0 @@
|
|||||||
/* crypto/engine/hw_nuron.c */
|
|
||||||
/* Written by Ben Laurie for the OpenSSL Project, leaning heavily on Geoff
|
|
||||||
* Thorpe's Atalla implementation.
|
|
||||||
*/
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 2000-2001 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* licensing@OpenSSL.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <openssl/crypto.h>
|
|
||||||
#include "cryptlib.h"
|
|
||||||
#include <openssl/dso.h>
|
|
||||||
#include <openssl/engine.h>
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_HW
|
|
||||||
#ifndef OPENSSL_NO_HW_NURON
|
|
||||||
|
|
||||||
#define NURON_LIB_NAME "nuron engine"
|
|
||||||
#include "hw_nuron_err.c"
|
|
||||||
|
|
||||||
static const char *NURON_LIBNAME = NULL;
|
|
||||||
static const char *get_NURON_LIBNAME(void)
|
|
||||||
{
|
|
||||||
if(NURON_LIBNAME)
|
|
||||||
return NURON_LIBNAME;
|
|
||||||
return "nuronssl";
|
|
||||||
}
|
|
||||||
static void free_NURON_LIBNAME(void)
|
|
||||||
{
|
|
||||||
if(NURON_LIBNAME)
|
|
||||||
OPENSSL_free((void*)NURON_LIBNAME);
|
|
||||||
NURON_LIBNAME = NULL;
|
|
||||||
}
|
|
||||||
static long set_NURON_LIBNAME(const char *name)
|
|
||||||
{
|
|
||||||
free_NURON_LIBNAME();
|
|
||||||
return (((NURON_LIBNAME = BUF_strdup(name)) != NULL) ? 1 : 0);
|
|
||||||
}
|
|
||||||
static const char *NURON_F1 = "nuron_mod_exp";
|
|
||||||
|
|
||||||
/* The definitions for control commands specific to this engine */
|
|
||||||
#define NURON_CMD_SO_PATH ENGINE_CMD_BASE
|
|
||||||
static const ENGINE_CMD_DEFN nuron_cmd_defns[] = {
|
|
||||||
{NURON_CMD_SO_PATH,
|
|
||||||
"SO_PATH",
|
|
||||||
"Specifies the path to the 'nuronssl' shared library",
|
|
||||||
ENGINE_CMD_FLAG_STRING},
|
|
||||||
{0, NULL, NULL, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef int tfnModExp(BIGNUM *r,const BIGNUM *a,const BIGNUM *p,const BIGNUM *m);
|
|
||||||
static tfnModExp *pfnModExp = NULL;
|
|
||||||
|
|
||||||
static DSO *pvDSOHandle = NULL;
|
|
||||||
|
|
||||||
static int nuron_destroy(ENGINE *e)
|
|
||||||
{
|
|
||||||
free_NURON_LIBNAME();
|
|
||||||
ERR_unload_NURON_strings();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int nuron_init(ENGINE *e)
|
|
||||||
{
|
|
||||||
if(pvDSOHandle != NULL)
|
|
||||||
{
|
|
||||||
NURONerr(NURON_F_NURON_INIT,NURON_R_ALREADY_LOADED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
pvDSOHandle = DSO_load(NULL, get_NURON_LIBNAME(), NULL,
|
|
||||||
DSO_FLAG_NAME_TRANSLATION_EXT_ONLY);
|
|
||||||
if(!pvDSOHandle)
|
|
||||||
{
|
|
||||||
NURONerr(NURON_F_NURON_INIT,NURON_R_DSO_NOT_FOUND);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
pfnModExp = (tfnModExp *)DSO_bind_func(pvDSOHandle, NURON_F1);
|
|
||||||
if(!pfnModExp)
|
|
||||||
{
|
|
||||||
NURONerr(NURON_F_NURON_INIT,NURON_R_DSO_FUNCTION_NOT_FOUND);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int nuron_finish(ENGINE *e)
|
|
||||||
{
|
|
||||||
free_NURON_LIBNAME();
|
|
||||||
if(pvDSOHandle == NULL)
|
|
||||||
{
|
|
||||||
NURONerr(NURON_F_NURON_FINISH,NURON_R_NOT_LOADED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if(!DSO_free(pvDSOHandle))
|
|
||||||
{
|
|
||||||
NURONerr(NURON_F_NURON_FINISH,NURON_R_DSO_FAILURE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
pvDSOHandle=NULL;
|
|
||||||
pfnModExp=NULL;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int nuron_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)())
|
|
||||||
{
|
|
||||||
int initialised = ((pvDSOHandle == NULL) ? 0 : 1);
|
|
||||||
switch(cmd)
|
|
||||||
{
|
|
||||||
case NURON_CMD_SO_PATH:
|
|
||||||
if(p == NULL)
|
|
||||||
{
|
|
||||||
NURONerr(NURON_F_NURON_CTRL,ERR_R_PASSED_NULL_PARAMETER);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if(initialised)
|
|
||||||
{
|
|
||||||
NURONerr(NURON_F_NURON_CTRL,NURON_R_ALREADY_LOADED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return set_NURON_LIBNAME((const char *)p);
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
NURONerr(NURON_F_NURON_CTRL,NURON_R_CTRL_COMMAND_NOT_IMPLEMENTED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int nuron_mod_exp(BIGNUM *r,const BIGNUM *a,const BIGNUM *p,
|
|
||||||
const BIGNUM *m,BN_CTX *ctx)
|
|
||||||
{
|
|
||||||
if(!pvDSOHandle)
|
|
||||||
{
|
|
||||||
NURONerr(NURON_F_NURON_MOD_EXP,NURON_R_NOT_LOADED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return pfnModExp(r,a,p,m);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
static int nuron_rsa_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa)
|
|
||||||
{
|
|
||||||
return nuron_mod_exp(r0,I,rsa->d,rsa->n,NULL);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
/* This code was liberated and adapted from the commented-out code in
|
|
||||||
* dsa_ossl.c. Because of the unoptimised form of the Atalla acceleration
|
|
||||||
* (it doesn't have a CRT form for RSA), this function means that an
|
|
||||||
* Atalla system running with a DSA server certificate can handshake
|
|
||||||
* around 5 or 6 times faster/more than an equivalent system running with
|
|
||||||
* RSA. Just check out the "signs" statistics from the RSA and DSA parts
|
|
||||||
* of "openssl speed -engine atalla dsa1024 rsa1024". */
|
|
||||||
static int nuron_dsa_mod_exp(DSA *dsa, BIGNUM *rr, BIGNUM *a1,
|
|
||||||
BIGNUM *p1, BIGNUM *a2, BIGNUM *p2, BIGNUM *m,
|
|
||||||
BN_CTX *ctx, BN_MONT_CTX *in_mont)
|
|
||||||
{
|
|
||||||
BIGNUM t;
|
|
||||||
int to_return = 0;
|
|
||||||
|
|
||||||
BN_init(&t);
|
|
||||||
/* let rr = a1 ^ p1 mod m */
|
|
||||||
if (!nuron_mod_exp(rr,a1,p1,m,ctx))
|
|
||||||
goto end;
|
|
||||||
/* let t = a2 ^ p2 mod m */
|
|
||||||
if (!nuron_mod_exp(&t,a2,p2,m,ctx))
|
|
||||||
goto end;
|
|
||||||
/* let rr = rr * t mod m */
|
|
||||||
if (!BN_mod_mul(rr,rr,&t,m,ctx))
|
|
||||||
goto end;
|
|
||||||
to_return = 1;
|
|
||||||
end:
|
|
||||||
BN_free(&t);
|
|
||||||
return to_return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int nuron_mod_exp_dsa(DSA *dsa, BIGNUM *r, BIGNUM *a,
|
|
||||||
const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx,
|
|
||||||
BN_MONT_CTX *m_ctx)
|
|
||||||
{
|
|
||||||
return nuron_mod_exp(r, a, p, m, ctx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This function is aliased to mod_exp (with the mont stuff dropped). */
|
|
||||||
static int nuron_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)
|
|
||||||
{
|
|
||||||
return nuron_mod_exp(r, a, p, m, ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
/* This function is aliased to mod_exp (with the dh and mont dropped). */
|
|
||||||
static int nuron_mod_exp_dh(const DH *dh, BIGNUM *r,
|
|
||||||
const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)
|
|
||||||
{
|
|
||||||
return nuron_mod_exp(r, a, p, m, ctx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
static RSA_METHOD nuron_rsa =
|
|
||||||
{
|
|
||||||
"Nuron RSA method",
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
nuron_rsa_mod_exp,
|
|
||||||
nuron_mod_exp_mont,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
0,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
static DSA_METHOD nuron_dsa =
|
|
||||||
{
|
|
||||||
"Nuron DSA method",
|
|
||||||
NULL, /* dsa_do_sign */
|
|
||||||
NULL, /* dsa_sign_setup */
|
|
||||||
NULL, /* dsa_do_verify */
|
|
||||||
nuron_dsa_mod_exp, /* dsa_mod_exp */
|
|
||||||
nuron_mod_exp_dsa, /* bn_mod_exp */
|
|
||||||
NULL, /* init */
|
|
||||||
NULL, /* finish */
|
|
||||||
0, /* flags */
|
|
||||||
NULL /* app_data */
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
static DH_METHOD nuron_dh =
|
|
||||||
{
|
|
||||||
"Nuron DH method",
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
nuron_mod_exp_dh,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
0,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Constants used when creating the ENGINE */
|
|
||||||
static const char *engine_nuron_id = "nuron";
|
|
||||||
static const char *engine_nuron_name = "Nuron hardware engine support";
|
|
||||||
|
|
||||||
/* This internal function is used by ENGINE_nuron() and possibly by the
|
|
||||||
* "dynamic" ENGINE support too */
|
|
||||||
static int bind_helper(ENGINE *e)
|
|
||||||
{
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
const RSA_METHOD *meth1;
|
|
||||||
#endif
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
const DSA_METHOD *meth2;
|
|
||||||
#endif
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
const DH_METHOD *meth3;
|
|
||||||
#endif
|
|
||||||
if(!ENGINE_set_id(e, engine_nuron_id) ||
|
|
||||||
!ENGINE_set_name(e, engine_nuron_name) ||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
!ENGINE_set_RSA(e, &nuron_rsa) ||
|
|
||||||
#endif
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
!ENGINE_set_DSA(e, &nuron_dsa) ||
|
|
||||||
#endif
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
!ENGINE_set_DH(e, &nuron_dh) ||
|
|
||||||
#endif
|
|
||||||
!ENGINE_set_destroy_function(e, nuron_destroy) ||
|
|
||||||
!ENGINE_set_init_function(e, nuron_init) ||
|
|
||||||
!ENGINE_set_finish_function(e, nuron_finish) ||
|
|
||||||
!ENGINE_set_ctrl_function(e, nuron_ctrl) ||
|
|
||||||
!ENGINE_set_cmd_defns(e, nuron_cmd_defns))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
/* We know that the "PKCS1_SSLeay()" functions hook properly
|
|
||||||
* to the nuron-specific mod_exp and mod_exp_crt so we use
|
|
||||||
* those functions. NB: We don't use ENGINE_openssl() or
|
|
||||||
* anything "more generic" because something like the RSAref
|
|
||||||
* code may not hook properly, and if you own one of these
|
|
||||||
* cards then you have the right to do RSA operations on it
|
|
||||||
* anyway! */
|
|
||||||
meth1=RSA_PKCS1_SSLeay();
|
|
||||||
nuron_rsa.rsa_pub_enc=meth1->rsa_pub_enc;
|
|
||||||
nuron_rsa.rsa_pub_dec=meth1->rsa_pub_dec;
|
|
||||||
nuron_rsa.rsa_priv_enc=meth1->rsa_priv_enc;
|
|
||||||
nuron_rsa.rsa_priv_dec=meth1->rsa_priv_dec;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
/* Use the DSA_OpenSSL() method and just hook the mod_exp-ish
|
|
||||||
* bits. */
|
|
||||||
meth2=DSA_OpenSSL();
|
|
||||||
nuron_dsa.dsa_do_sign=meth2->dsa_do_sign;
|
|
||||||
nuron_dsa.dsa_sign_setup=meth2->dsa_sign_setup;
|
|
||||||
nuron_dsa.dsa_do_verify=meth2->dsa_do_verify;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
/* Much the same for Diffie-Hellman */
|
|
||||||
meth3=DH_OpenSSL();
|
|
||||||
nuron_dh.generate_key=meth3->generate_key;
|
|
||||||
nuron_dh.compute_key=meth3->compute_key;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Ensure the nuron error handling is set up */
|
|
||||||
ERR_load_NURON_strings();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef ENGINE_DYNAMIC_SUPPORT
|
|
||||||
static ENGINE *engine_nuron(void)
|
|
||||||
{
|
|
||||||
ENGINE *ret = ENGINE_new();
|
|
||||||
if(!ret)
|
|
||||||
return NULL;
|
|
||||||
if(!bind_helper(ret))
|
|
||||||
{
|
|
||||||
ENGINE_free(ret);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ENGINE_load_nuron(void)
|
|
||||||
{
|
|
||||||
/* Copied from eng_[openssl|dyn].c */
|
|
||||||
ENGINE *toadd = engine_nuron();
|
|
||||||
if(!toadd) return;
|
|
||||||
ENGINE_add(toadd);
|
|
||||||
ENGINE_free(toadd);
|
|
||||||
ERR_clear_error();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This stuff is needed if this ENGINE is being compiled into a self-contained
|
|
||||||
* shared-library. */
|
|
||||||
#ifdef ENGINE_DYNAMIC_SUPPORT
|
|
||||||
static int bind_fn(ENGINE *e, const char *id)
|
|
||||||
{
|
|
||||||
if(id && (strcmp(id, engine_nuron_id) != 0))
|
|
||||||
return 0;
|
|
||||||
if(!bind_helper(e))
|
|
||||||
return 0;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
IMPLEMENT_DYNAMIC_CHECK_FN()
|
|
||||||
IMPLEMENT_DYNAMIC_BIND_FN(bind_fn)
|
|
||||||
#endif /* ENGINE_DYNAMIC_SUPPORT */
|
|
||||||
|
|
||||||
#endif /* !OPENSSL_NO_HW_NURON */
|
|
||||||
#endif /* !OPENSSL_NO_HW */
|
|
@ -1,142 +0,0 @@
|
|||||||
/* hw_nuron_err.c */
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@OpenSSL.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* NOTE: this file was auto generated by the mkerr.pl script: any changes
|
|
||||||
* made to it will be overwritten when the script next updates this file,
|
|
||||||
* only reason strings will be preserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <openssl/err.h>
|
|
||||||
#include "hw_nuron_err.h"
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
static ERR_STRING_DATA NURON_str_functs[]=
|
|
||||||
{
|
|
||||||
{ERR_PACK(0,NURON_F_NURON_CTRL,0), "NURON_CTRL"},
|
|
||||||
{ERR_PACK(0,NURON_F_NURON_FINISH,0), "NURON_FINISH"},
|
|
||||||
{ERR_PACK(0,NURON_F_NURON_INIT,0), "NURON_INIT"},
|
|
||||||
{ERR_PACK(0,NURON_F_NURON_MOD_EXP,0), "NURON_MOD_EXP"},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
static ERR_STRING_DATA NURON_str_reasons[]=
|
|
||||||
{
|
|
||||||
{NURON_R_ALREADY_LOADED ,"already loaded"},
|
|
||||||
{NURON_R_CTRL_COMMAND_NOT_IMPLEMENTED ,"ctrl command not implemented"},
|
|
||||||
{NURON_R_DSO_FAILURE ,"dso failure"},
|
|
||||||
{NURON_R_DSO_FUNCTION_NOT_FOUND ,"dso function not found"},
|
|
||||||
{NURON_R_DSO_NOT_FOUND ,"dso not found"},
|
|
||||||
{NURON_R_NOT_LOADED ,"not loaded"},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef NURON_LIB_NAME
|
|
||||||
static ERR_STRING_DATA NURON_lib_name[]=
|
|
||||||
{
|
|
||||||
{0 ,NURON_LIB_NAME},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
static int NURON_lib_error_code=0;
|
|
||||||
static int NURON_error_init=1;
|
|
||||||
|
|
||||||
static void ERR_load_NURON_strings(void)
|
|
||||||
{
|
|
||||||
if (NURON_lib_error_code == 0)
|
|
||||||
NURON_lib_error_code=ERR_get_next_error_library();
|
|
||||||
|
|
||||||
if (NURON_error_init)
|
|
||||||
{
|
|
||||||
NURON_error_init=0;
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
ERR_load_strings(NURON_lib_error_code,NURON_str_functs);
|
|
||||||
ERR_load_strings(NURON_lib_error_code,NURON_str_reasons);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef NURON_LIB_NAME
|
|
||||||
NURON_lib_name->error = ERR_PACK(NURON_lib_error_code,0,0);
|
|
||||||
ERR_load_strings(0,NURON_lib_name);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ERR_unload_NURON_strings(void)
|
|
||||||
{
|
|
||||||
if (NURON_error_init == 0)
|
|
||||||
{
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
ERR_unload_strings(NURON_lib_error_code,NURON_str_functs);
|
|
||||||
ERR_unload_strings(NURON_lib_error_code,NURON_str_reasons);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef NURON_LIB_NAME
|
|
||||||
ERR_unload_strings(0,NURON_lib_name);
|
|
||||||
#endif
|
|
||||||
NURON_error_init=1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ERR_NURON_error(int function, int reason, char *file, int line)
|
|
||||||
{
|
|
||||||
if (NURON_lib_error_code == 0)
|
|
||||||
NURON_lib_error_code=ERR_get_next_error_library();
|
|
||||||
ERR_PUT_error(NURON_lib_error_code,function,reason,file,line);
|
|
||||||
}
|
|
@ -1,86 +0,0 @@
|
|||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 2001 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@openssl.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_NURON_ERR_H
|
|
||||||
#define HEADER_NURON_ERR_H
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
|
||||||
* made after this point may be overwritten when the script is next run.
|
|
||||||
*/
|
|
||||||
static void ERR_load_NURON_strings(void);
|
|
||||||
static void ERR_unload_NURON_strings(void);
|
|
||||||
static void ERR_NURON_error(int function, int reason, char *file, int line);
|
|
||||||
#define NURONerr(f,r) ERR_NURON_error((f),(r),__FILE__,__LINE__)
|
|
||||||
|
|
||||||
/* Error codes for the NURON functions. */
|
|
||||||
|
|
||||||
/* Function codes. */
|
|
||||||
#define NURON_F_NURON_CTRL 100
|
|
||||||
#define NURON_F_NURON_FINISH 101
|
|
||||||
#define NURON_F_NURON_INIT 102
|
|
||||||
#define NURON_F_NURON_MOD_EXP 103
|
|
||||||
|
|
||||||
/* Reason codes. */
|
|
||||||
#define NURON_R_ALREADY_LOADED 100
|
|
||||||
#define NURON_R_CTRL_COMMAND_NOT_IMPLEMENTED 101
|
|
||||||
#define NURON_R_DSO_FAILURE 102
|
|
||||||
#define NURON_R_DSO_FUNCTION_NOT_FOUND 103
|
|
||||||
#define NURON_R_DSO_NOT_FOUND 104
|
|
||||||
#define NURON_R_NOT_LOADED 105
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
File diff suppressed because it is too large
Load Diff
@ -1,150 +0,0 @@
|
|||||||
/* hw_sureware_err.c */
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@OpenSSL.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* NOTE: this file was auto generated by the mkerr.pl script: any changes
|
|
||||||
* made to it will be overwritten when the script next updates this file,
|
|
||||||
* only reason strings will be preserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <openssl/err.h>
|
|
||||||
#include "hw_sureware_err.h"
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
static ERR_STRING_DATA SUREWARE_str_functs[]=
|
|
||||||
{
|
|
||||||
{ERR_PACK(0,SUREWARE_F_SUREWAREHK_CTRL,0), "SUREWAREHK_CTRL"},
|
|
||||||
{ERR_PACK(0,SUREWARE_F_SUREWAREHK_DSA_DO_SIGN,0), "SUREWAREHK_DSA_DO_SIGN"},
|
|
||||||
{ERR_PACK(0,SUREWARE_F_SUREWAREHK_EX_FREE,0), "SUREWAREHK_EX_FREE"},
|
|
||||||
{ERR_PACK(0,SUREWARE_F_SUREWAREHK_FINISH,0), "SUREWAREHK_FINISH"},
|
|
||||||
{ERR_PACK(0,SUREWARE_F_SUREWAREHK_INIT,0), "SUREWAREHK_INIT"},
|
|
||||||
{ERR_PACK(0,SUREWARE_F_SUREWAREHK_LOAD_PRIVATE_KEY,0), "SUREWAREHK_LOAD_PRIVATE_KEY"},
|
|
||||||
{ERR_PACK(0,SUREWARE_F_SUREWAREHK_LOAD_PUBLIC_KEY,0), "SUREWAREHK_LOAD_PUBLIC_KEY"},
|
|
||||||
{ERR_PACK(0,SUREWARE_F_SUREWAREHK_MOD_EXP,0), "SUREWAREHK_MOD_EXP"},
|
|
||||||
{ERR_PACK(0,SUREWARE_F_SUREWAREHK_RAND_BYTES,0), "SUREWAREHK_RAND_BYTES"},
|
|
||||||
{ERR_PACK(0,SUREWARE_F_SUREWAREHK_RAND_SEED,0), "SUREWAREHK_RAND_SEED"},
|
|
||||||
{ERR_PACK(0,SUREWARE_F_SUREWAREHK_RSA_PRIV_DEC,0), "SUREWAREHK_RSA_PRIV_DEC"},
|
|
||||||
{ERR_PACK(0,SUREWARE_F_SUREWAREHK_RSA_PRIV_ENC,0), "SUREWAREHK_RSA_PRIV_ENC"},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
static ERR_STRING_DATA SUREWARE_str_reasons[]=
|
|
||||||
{
|
|
||||||
{SUREWARE_R_BIO_WAS_FREED ,"bio was freed"},
|
|
||||||
{SUREWARE_R_MISSING_KEY_COMPONENTS ,"missing key components"},
|
|
||||||
{SUREWARE_R_REQUEST_FAILED ,"request failed"},
|
|
||||||
{SUREWARE_R_REQUEST_FALLBACK ,"request fallback"},
|
|
||||||
{SUREWARE_R_SIZE_TOO_LARGE_OR_TOO_SMALL ,"size too large or too small"},
|
|
||||||
{SUREWARE_R_UNIT_FAILURE ,"unit failure"},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SUREWARE_LIB_NAME
|
|
||||||
static ERR_STRING_DATA SUREWARE_lib_name[]=
|
|
||||||
{
|
|
||||||
{0 ,SUREWARE_LIB_NAME},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
static int SUREWARE_lib_error_code=0;
|
|
||||||
static int SUREWARE_error_init=1;
|
|
||||||
|
|
||||||
static void ERR_load_SUREWARE_strings(void)
|
|
||||||
{
|
|
||||||
if (SUREWARE_lib_error_code == 0)
|
|
||||||
SUREWARE_lib_error_code=ERR_get_next_error_library();
|
|
||||||
|
|
||||||
if (SUREWARE_error_init)
|
|
||||||
{
|
|
||||||
SUREWARE_error_init=0;
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
ERR_load_strings(SUREWARE_lib_error_code,SUREWARE_str_functs);
|
|
||||||
ERR_load_strings(SUREWARE_lib_error_code,SUREWARE_str_reasons);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SUREWARE_LIB_NAME
|
|
||||||
SUREWARE_lib_name->error = ERR_PACK(SUREWARE_lib_error_code,0,0);
|
|
||||||
ERR_load_strings(0,SUREWARE_lib_name);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ERR_unload_SUREWARE_strings(void)
|
|
||||||
{
|
|
||||||
if (SUREWARE_error_init == 0)
|
|
||||||
{
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
ERR_unload_strings(SUREWARE_lib_error_code,SUREWARE_str_functs);
|
|
||||||
ERR_unload_strings(SUREWARE_lib_error_code,SUREWARE_str_reasons);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SUREWARE_LIB_NAME
|
|
||||||
ERR_unload_strings(0,SUREWARE_lib_name);
|
|
||||||
#endif
|
|
||||||
SUREWARE_error_init=1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ERR_SUREWARE_error(int function, int reason, char *file, int line)
|
|
||||||
{
|
|
||||||
if (SUREWARE_lib_error_code == 0)
|
|
||||||
SUREWARE_lib_error_code=ERR_get_next_error_library();
|
|
||||||
ERR_PUT_error(SUREWARE_lib_error_code,function,reason,file,line);
|
|
||||||
}
|
|
@ -1,94 +0,0 @@
|
|||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 2001 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@openssl.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_SUREWARE_ERR_H
|
|
||||||
#define HEADER_SUREWARE_ERR_H
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
|
||||||
* made after this point may be overwritten when the script is next run.
|
|
||||||
*/
|
|
||||||
static void ERR_load_SUREWARE_strings(void);
|
|
||||||
static void ERR_unload_SUREWARE_strings(void);
|
|
||||||
static void ERR_SUREWARE_error(int function, int reason, char *file, int line);
|
|
||||||
#define SUREWAREerr(f,r) ERR_SUREWARE_error((f),(r),__FILE__,__LINE__)
|
|
||||||
|
|
||||||
/* Error codes for the SUREWARE functions. */
|
|
||||||
|
|
||||||
/* Function codes. */
|
|
||||||
#define SUREWARE_F_SUREWAREHK_CTRL 100
|
|
||||||
#define SUREWARE_F_SUREWAREHK_DSA_DO_SIGN 101
|
|
||||||
#define SUREWARE_F_SUREWAREHK_EX_FREE 102
|
|
||||||
#define SUREWARE_F_SUREWAREHK_FINISH 103
|
|
||||||
#define SUREWARE_F_SUREWAREHK_INIT 104
|
|
||||||
#define SUREWARE_F_SUREWAREHK_LOAD_PRIVATE_KEY 105
|
|
||||||
#define SUREWARE_F_SUREWAREHK_LOAD_PUBLIC_KEY 106
|
|
||||||
#define SUREWARE_F_SUREWAREHK_MOD_EXP 107
|
|
||||||
#define SUREWARE_F_SUREWAREHK_RAND_BYTES 108
|
|
||||||
#define SUREWARE_F_SUREWAREHK_RAND_SEED 109
|
|
||||||
#define SUREWARE_F_SUREWAREHK_RSA_PRIV_DEC 110
|
|
||||||
#define SUREWARE_F_SUREWAREHK_RSA_PRIV_ENC 111
|
|
||||||
|
|
||||||
/* Reason codes. */
|
|
||||||
#define SUREWARE_R_BIO_WAS_FREED 100
|
|
||||||
#define SUREWARE_R_MISSING_KEY_COMPONENTS 105
|
|
||||||
#define SUREWARE_R_REQUEST_FAILED 101
|
|
||||||
#define SUREWARE_R_REQUEST_FALLBACK 102
|
|
||||||
#define SUREWARE_R_SIZE_TOO_LARGE_OR_TOO_SMALL 103
|
|
||||||
#define SUREWARE_R_UNIT_FAILURE 104
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
File diff suppressed because it is too large
Load Diff
@ -1,151 +0,0 @@
|
|||||||
/* hw_ubsec_err.c */
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@OpenSSL.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* NOTE: this file was auto generated by the mkerr.pl script: any changes
|
|
||||||
* made to it will be overwritten when the script next updates this file,
|
|
||||||
* only reason strings will be preserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <openssl/err.h>
|
|
||||||
#include "hw_ubsec_err.h"
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
static ERR_STRING_DATA UBSEC_str_functs[]=
|
|
||||||
{
|
|
||||||
{ERR_PACK(0,UBSEC_F_UBSEC_CTRL,0), "UBSEC_CTRL"},
|
|
||||||
{ERR_PACK(0,UBSEC_F_UBSEC_DH_COMPUTE_KEY,0), "UBSEC_DH_COMPUTE_KEY"},
|
|
||||||
{ERR_PACK(0,UBSEC_F_UBSEC_DSA_SIGN,0), "UBSEC_DSA_SIGN"},
|
|
||||||
{ERR_PACK(0,UBSEC_F_UBSEC_DSA_VERIFY,0), "UBSEC_DSA_VERIFY"},
|
|
||||||
{ERR_PACK(0,UBSEC_F_UBSEC_FINISH,0), "UBSEC_FINISH"},
|
|
||||||
{ERR_PACK(0,UBSEC_F_UBSEC_INIT,0), "UBSEC_INIT"},
|
|
||||||
{ERR_PACK(0,UBSEC_F_UBSEC_MOD_EXP,0), "UBSEC_MOD_EXP"},
|
|
||||||
{ERR_PACK(0,UBSEC_F_UBSEC_RNG_BYTES,0), "UBSEC_RNG_BYTES"},
|
|
||||||
{ERR_PACK(0,UBSEC_F_UBSEC_RSA_MOD_EXP,0), "UBSEC_RSA_MOD_EXP"},
|
|
||||||
{ERR_PACK(0,UBSEC_F_UBSEC_RSA_MOD_EXP_CRT,0), "UBSEC_RSA_MOD_EXP_CRT"},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
static ERR_STRING_DATA UBSEC_str_reasons[]=
|
|
||||||
{
|
|
||||||
{UBSEC_R_ALREADY_LOADED ,"already loaded"},
|
|
||||||
{UBSEC_R_BN_EXPAND_FAIL ,"bn expand fail"},
|
|
||||||
{UBSEC_R_CTRL_COMMAND_NOT_IMPLEMENTED ,"ctrl command not implemented"},
|
|
||||||
{UBSEC_R_DSO_FAILURE ,"dso failure"},
|
|
||||||
{UBSEC_R_MISSING_KEY_COMPONENTS ,"missing key components"},
|
|
||||||
{UBSEC_R_NOT_LOADED ,"not loaded"},
|
|
||||||
{UBSEC_R_REQUEST_FAILED ,"request failed"},
|
|
||||||
{UBSEC_R_SIZE_TOO_LARGE_OR_TOO_SMALL ,"size too large or too small"},
|
|
||||||
{UBSEC_R_UNIT_FAILURE ,"unit failure"},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef UBSEC_LIB_NAME
|
|
||||||
static ERR_STRING_DATA UBSEC_lib_name[]=
|
|
||||||
{
|
|
||||||
{0 ,UBSEC_LIB_NAME},
|
|
||||||
{0,NULL}
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
static int UBSEC_lib_error_code=0;
|
|
||||||
static int UBSEC_error_init=1;
|
|
||||||
|
|
||||||
static void ERR_load_UBSEC_strings(void)
|
|
||||||
{
|
|
||||||
if (UBSEC_lib_error_code == 0)
|
|
||||||
UBSEC_lib_error_code=ERR_get_next_error_library();
|
|
||||||
|
|
||||||
if (UBSEC_error_init)
|
|
||||||
{
|
|
||||||
UBSEC_error_init=0;
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
ERR_load_strings(UBSEC_lib_error_code,UBSEC_str_functs);
|
|
||||||
ERR_load_strings(UBSEC_lib_error_code,UBSEC_str_reasons);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef UBSEC_LIB_NAME
|
|
||||||
UBSEC_lib_name->error = ERR_PACK(UBSEC_lib_error_code,0,0);
|
|
||||||
ERR_load_strings(0,UBSEC_lib_name);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ERR_unload_UBSEC_strings(void)
|
|
||||||
{
|
|
||||||
if (UBSEC_error_init == 0)
|
|
||||||
{
|
|
||||||
#ifndef OPENSSL_NO_ERR
|
|
||||||
ERR_unload_strings(UBSEC_lib_error_code,UBSEC_str_functs);
|
|
||||||
ERR_unload_strings(UBSEC_lib_error_code,UBSEC_str_reasons);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef UBSEC_LIB_NAME
|
|
||||||
ERR_unload_strings(0,UBSEC_lib_name);
|
|
||||||
#endif
|
|
||||||
UBSEC_error_init=1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ERR_UBSEC_error(int function, int reason, char *file, int line)
|
|
||||||
{
|
|
||||||
if (UBSEC_lib_error_code == 0)
|
|
||||||
UBSEC_lib_error_code=ERR_get_next_error_library();
|
|
||||||
ERR_PUT_error(UBSEC_lib_error_code,function,reason,file,line);
|
|
||||||
}
|
|
@ -1,95 +0,0 @@
|
|||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 2001 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@openssl.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_UBSEC_ERR_H
|
|
||||||
#define HEADER_UBSEC_ERR_H
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
|
||||||
* made after this point may be overwritten when the script is next run.
|
|
||||||
*/
|
|
||||||
static void ERR_load_UBSEC_strings(void);
|
|
||||||
static void ERR_unload_UBSEC_strings(void);
|
|
||||||
static void ERR_UBSEC_error(int function, int reason, char *file, int line);
|
|
||||||
#define UBSECerr(f,r) ERR_UBSEC_error((f),(r),__FILE__,__LINE__)
|
|
||||||
|
|
||||||
/* Error codes for the UBSEC functions. */
|
|
||||||
|
|
||||||
/* Function codes. */
|
|
||||||
#define UBSEC_F_UBSEC_CTRL 100
|
|
||||||
#define UBSEC_F_UBSEC_DH_COMPUTE_KEY 101
|
|
||||||
#define UBSEC_F_UBSEC_DSA_SIGN 102
|
|
||||||
#define UBSEC_F_UBSEC_DSA_VERIFY 103
|
|
||||||
#define UBSEC_F_UBSEC_FINISH 104
|
|
||||||
#define UBSEC_F_UBSEC_INIT 105
|
|
||||||
#define UBSEC_F_UBSEC_MOD_EXP 106
|
|
||||||
#define UBSEC_F_UBSEC_RNG_BYTES 107
|
|
||||||
#define UBSEC_F_UBSEC_RSA_MOD_EXP 108
|
|
||||||
#define UBSEC_F_UBSEC_RSA_MOD_EXP_CRT 109
|
|
||||||
|
|
||||||
/* Reason codes. */
|
|
||||||
#define UBSEC_R_ALREADY_LOADED 100
|
|
||||||
#define UBSEC_R_BN_EXPAND_FAIL 101
|
|
||||||
#define UBSEC_R_CTRL_COMMAND_NOT_IMPLEMENTED 102
|
|
||||||
#define UBSEC_R_DSO_FAILURE 103
|
|
||||||
#define UBSEC_R_MISSING_KEY_COMPONENTS 104
|
|
||||||
#define UBSEC_R_NOT_LOADED 105
|
|
||||||
#define UBSEC_R_REQUEST_FAILED 106
|
|
||||||
#define UBSEC_R_SIZE_TOO_LARGE_OR_TOO_SMALL 107
|
|
||||||
#define UBSEC_R_UNIT_FAILURE 108
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
@ -1,178 +0,0 @@
|
|||||||
/* This header declares the necessary definitions for using the exponentiation
|
|
||||||
* acceleration capabilities, and rnd number generation of the AEP card.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* Some AEP defines
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*Successful return value*/
|
|
||||||
#define AEP_R_OK 0x00000000
|
|
||||||
|
|
||||||
/*Miscelleanous unsuccessful return value*/
|
|
||||||
#define AEP_R_GENERAL_ERROR 0x10000001
|
|
||||||
|
|
||||||
/*Insufficient host memory*/
|
|
||||||
#define AEP_R_HOST_MEMORY 0x10000002
|
|
||||||
|
|
||||||
#define AEP_R_FUNCTION_FAILED 0x10000006
|
|
||||||
|
|
||||||
/*Invalid arguments in function call*/
|
|
||||||
#define AEP_R_ARGUMENTS_BAD 0x10020000
|
|
||||||
|
|
||||||
#define AEP_R_NO_TARGET_RESOURCES 0x10030000
|
|
||||||
|
|
||||||
/*Error occuring on socket operation*/
|
|
||||||
#define AEP_R_SOCKERROR 0x10000010
|
|
||||||
|
|
||||||
/*Socket has been closed from the other end*/
|
|
||||||
#define AEP_R_SOCKEOF 0x10000011
|
|
||||||
|
|
||||||
/*Invalid handles*/
|
|
||||||
#define AEP_R_CONNECTION_HANDLE_INVALID 0x100000B3
|
|
||||||
|
|
||||||
#define AEP_R_TRANSACTION_HANDLE_INVALID 0x10040000
|
|
||||||
|
|
||||||
/*Transaction has not yet returned from accelerator*/
|
|
||||||
#define AEP_R_TRANSACTION_NOT_READY 0x00010000
|
|
||||||
|
|
||||||
/*There is already a thread waiting on this transaction*/
|
|
||||||
#define AEP_R_TRANSACTION_CLAIMED 0x10050000
|
|
||||||
|
|
||||||
/*The transaction timed out*/
|
|
||||||
#define AEP_R_TIMED_OUT 0x10060000
|
|
||||||
|
|
||||||
#define AEP_R_FXN_NOT_IMPLEMENTED 0x10070000
|
|
||||||
|
|
||||||
#define AEP_R_TARGET_ERROR 0x10080000
|
|
||||||
|
|
||||||
/*Error in the AEP daemon process*/
|
|
||||||
#define AEP_R_DAEMON_ERROR 0x10090000
|
|
||||||
|
|
||||||
/*Invalid ctx id*/
|
|
||||||
#define AEP_R_INVALID_CTX_ID 0x10009000
|
|
||||||
|
|
||||||
#define AEP_R_NO_KEY_MANAGER 0x1000a000
|
|
||||||
|
|
||||||
/*Error obtaining a mutex*/
|
|
||||||
#define AEP_R_MUTEX_BAD 0x000001A0
|
|
||||||
|
|
||||||
/*Fxn call before AEP_Initialise ot after AEP_Finialise*/
|
|
||||||
#define AEP_R_AEPAPI_NOT_INITIALIZED 0x10000190
|
|
||||||
|
|
||||||
/*AEP_Initialise has already been called*/
|
|
||||||
#define AEP_R_AEPAPI_ALREADY_INITIALIZED 0x10000191
|
|
||||||
|
|
||||||
/*Maximum number of connections to daemon reached*/
|
|
||||||
#define AEP_R_NO_MORE_CONNECTION_HNDLS 0x10000200
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* Some AEP Type definitions
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* an unsigned 8-bit value */
|
|
||||||
typedef unsigned char AEP_U8;
|
|
||||||
|
|
||||||
/* an unsigned 8-bit character */
|
|
||||||
typedef char AEP_CHAR;
|
|
||||||
|
|
||||||
/* a BYTE-sized Boolean flag */
|
|
||||||
typedef AEP_U8 AEP_BBOOL;
|
|
||||||
|
|
||||||
/*Unsigned value, at least 16 bits long*/
|
|
||||||
typedef unsigned short AEP_U16;
|
|
||||||
|
|
||||||
/* an unsigned value, at least 32 bits long */
|
|
||||||
#ifdef SIXTY_FOUR_BIT_LONG
|
|
||||||
typedef unsigned int AEP_U32;
|
|
||||||
#else
|
|
||||||
typedef unsigned long AEP_U32;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SIXTY_FOUR_BIT_LONG
|
|
||||||
typedef unsigned long AEP_U64;
|
|
||||||
#else
|
|
||||||
typedef struct { unsigned long l1, l2; } AEP_U64;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* at least 32 bits; each bit is a Boolean flag */
|
|
||||||
typedef AEP_U32 AEP_FLAGS;
|
|
||||||
|
|
||||||
typedef AEP_U8 *AEP_U8_PTR;
|
|
||||||
typedef AEP_CHAR *AEP_CHAR_PTR;
|
|
||||||
typedef AEP_U32 *AEP_U32_PTR;
|
|
||||||
typedef AEP_U64 *AEP_U64_PTR;
|
|
||||||
typedef void *AEP_VOID_PTR;
|
|
||||||
|
|
||||||
/* Pointer to a AEP_VOID_PTR-- i.e., pointer to pointer to void */
|
|
||||||
typedef AEP_VOID_PTR *AEP_VOID_PTR_PTR;
|
|
||||||
|
|
||||||
/*Used to identify an AEP connection handle*/
|
|
||||||
typedef AEP_U32 AEP_CONNECTION_HNDL;
|
|
||||||
|
|
||||||
/*Pointer to an AEP connection handle*/
|
|
||||||
typedef AEP_CONNECTION_HNDL *AEP_CONNECTION_HNDL_PTR;
|
|
||||||
|
|
||||||
/*Used by an application (in conjunction with the apps process id) to
|
|
||||||
identify an individual transaction*/
|
|
||||||
typedef AEP_U32 AEP_TRANSACTION_ID;
|
|
||||||
|
|
||||||
/*Pointer to an applications transaction identifier*/
|
|
||||||
typedef AEP_TRANSACTION_ID *AEP_TRANSACTION_ID_PTR;
|
|
||||||
|
|
||||||
/*Return value type*/
|
|
||||||
typedef AEP_U32 AEP_RV;
|
|
||||||
|
|
||||||
#define MAX_PROCESS_CONNECTIONS 256
|
|
||||||
|
|
||||||
#define RAND_BLK_SIZE 1024
|
|
||||||
|
|
||||||
typedef enum{
|
|
||||||
NotConnected= 0,
|
|
||||||
Connected= 1,
|
|
||||||
InUse= 2
|
|
||||||
} AEP_CONNECTION_STATE;
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct AEP_CONNECTION_ENTRY{
|
|
||||||
AEP_CONNECTION_STATE conn_state;
|
|
||||||
AEP_CONNECTION_HNDL conn_hndl;
|
|
||||||
} AEP_CONNECTION_ENTRY;
|
|
||||||
|
|
||||||
|
|
||||||
typedef AEP_RV t_AEP_OpenConnection(AEP_CONNECTION_HNDL_PTR phConnection);
|
|
||||||
typedef AEP_RV t_AEP_CloseConnection(AEP_CONNECTION_HNDL hConnection);
|
|
||||||
|
|
||||||
typedef AEP_RV t_AEP_ModExp(AEP_CONNECTION_HNDL hConnection,
|
|
||||||
AEP_VOID_PTR pA, AEP_VOID_PTR pP,
|
|
||||||
AEP_VOID_PTR pN,
|
|
||||||
AEP_VOID_PTR pResult,
|
|
||||||
AEP_TRANSACTION_ID* pidTransID);
|
|
||||||
|
|
||||||
typedef AEP_RV t_AEP_ModExpCrt(AEP_CONNECTION_HNDL hConnection,
|
|
||||||
AEP_VOID_PTR pA, AEP_VOID_PTR pP,
|
|
||||||
AEP_VOID_PTR pQ,
|
|
||||||
AEP_VOID_PTR pDmp1, AEP_VOID_PTR pDmq1,
|
|
||||||
AEP_VOID_PTR pIqmp,
|
|
||||||
AEP_VOID_PTR pResult,
|
|
||||||
AEP_TRANSACTION_ID* pidTransID);
|
|
||||||
|
|
||||||
#ifdef AEPRAND
|
|
||||||
typedef AEP_RV t_AEP_GenRandom(AEP_CONNECTION_HNDL hConnection,
|
|
||||||
AEP_U32 Len,
|
|
||||||
AEP_U32 Type,
|
|
||||||
AEP_VOID_PTR pResult,
|
|
||||||
AEP_TRANSACTION_ID* pidTransID);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef AEP_RV t_AEP_Initialize(AEP_VOID_PTR pInitArgs);
|
|
||||||
typedef AEP_RV t_AEP_Finalize();
|
|
||||||
typedef AEP_RV t_AEP_SetBNCallBacks(AEP_RV (*GetBigNumSizeFunc)(),
|
|
||||||
AEP_RV (*MakeAEPBigNumFunc)(),
|
|
||||||
AEP_RV (*ConverAEPBigNumFunc)());
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
|||||||
/* This header declares the necessary definitions for using the exponentiation
|
|
||||||
* acceleration capabilities of Atalla cards. The only cryptographic operation
|
|
||||||
* is performed by "ASI_RSAPrivateKeyOpFn" and this takes a structure that
|
|
||||||
* defines an "RSA private key". However, it is really only performing a
|
|
||||||
* regular mod_exp using the supplied modulus and exponent - no CRT form is
|
|
||||||
* being used. Hence, it is a generic mod_exp function in disguise, and we use
|
|
||||||
* it as such.
|
|
||||||
*
|
|
||||||
* Thanks to the people at Atalla for letting me know these definitions are
|
|
||||||
* fine and that they can be reproduced here.
|
|
||||||
*
|
|
||||||
* Geoff.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct ItemStr
|
|
||||||
{
|
|
||||||
unsigned char *data;
|
|
||||||
int len;
|
|
||||||
} Item;
|
|
||||||
|
|
||||||
typedef struct RSAPrivateKeyStr
|
|
||||||
{
|
|
||||||
void *reserved;
|
|
||||||
Item version;
|
|
||||||
Item modulus;
|
|
||||||
Item publicExponent;
|
|
||||||
Item privateExponent;
|
|
||||||
Item prime[2];
|
|
||||||
Item exponent[2];
|
|
||||||
Item coefficient;
|
|
||||||
} RSAPrivateKey;
|
|
||||||
|
|
||||||
/* Predeclare the function pointer types that we dynamically load from the DSO.
|
|
||||||
* These use the same names and form that Ben's original support code had (in
|
|
||||||
* crypto/bn/bn_exp.c) unless of course I've inadvertently changed the style
|
|
||||||
* somewhere along the way!
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef int tfnASI_GetPerformanceStatistics(int reset_flag,
|
|
||||||
unsigned int *ret_buf);
|
|
||||||
|
|
||||||
typedef int tfnASI_GetHardwareConfig(long card_num, unsigned int *ret_buf);
|
|
||||||
|
|
||||||
typedef int tfnASI_RSAPrivateKeyOpFn(RSAPrivateKey * rsaKey,
|
|
||||||
unsigned char *output,
|
|
||||||
unsigned char *input,
|
|
||||||
unsigned int modulus_len);
|
|
||||||
|
|
@ -1,234 +0,0 @@
|
|||||||
/* Attribution notice: Rainbow have generously allowed me to reproduce
|
|
||||||
* the necessary definitions here from their API. This means the support
|
|
||||||
* can build independently of whether application builders have the
|
|
||||||
* API or hardware. This will allow developers to easily produce software
|
|
||||||
* that has latent hardware support for any users that have accelertors
|
|
||||||
* installed, without the developers themselves needing anything extra.
|
|
||||||
*
|
|
||||||
* I have only clipped the parts from the CryptoSwift header files that
|
|
||||||
* are (or seem) relevant to the CryptoSwift support code. This is
|
|
||||||
* simply to keep the file sizes reasonable.
|
|
||||||
* [Geoff]
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* NB: These type widths do *not* seem right in general, in particular
|
|
||||||
* they're not terribly friendly to 64-bit architectures (unsigned long)
|
|
||||||
* will be 64-bit on IA-64 for a start. I'm leaving these alone as they
|
|
||||||
* agree with Rainbow's API and this will only be called into question
|
|
||||||
* on platforms with Rainbow support anyway! ;-) */
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /* __cplusplus */
|
|
||||||
|
|
||||||
typedef long SW_STATUS; /* status */
|
|
||||||
typedef unsigned char SW_BYTE; /* 8 bit byte */
|
|
||||||
typedef unsigned short SW_U16; /* 16 bit number */
|
|
||||||
#if defined(_IRIX)
|
|
||||||
#include <sgidefs.h>
|
|
||||||
typedef __uint32_t SW_U32;
|
|
||||||
#else
|
|
||||||
typedef unsigned long SW_U32; /* 32 bit integer */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(OPENSSL_SYS_WIN32)
|
|
||||||
typedef struct _SW_U64 {
|
|
||||||
SW_U32 low32;
|
|
||||||
SW_U32 high32;
|
|
||||||
} SW_U64; /* 64 bit integer */
|
|
||||||
#elif defined(OPENSSL_SYS_MACINTOSH_CLASSIC)
|
|
||||||
typedef longlong SW_U64
|
|
||||||
#else /* Unix variants */
|
|
||||||
typedef struct _SW_U64 {
|
|
||||||
SW_U32 low32;
|
|
||||||
SW_U32 high32;
|
|
||||||
} SW_U64; /* 64 bit integer */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* status codes */
|
|
||||||
#define SW_OK (0L)
|
|
||||||
#define SW_ERR_BASE (-10000L)
|
|
||||||
#define SW_ERR_NO_CARD (SW_ERR_BASE-1) /* The Card is not present */
|
|
||||||
#define SW_ERR_CARD_NOT_READY (SW_ERR_BASE-2) /* The card has not powered */
|
|
||||||
/* up yet */
|
|
||||||
#define SW_ERR_TIME_OUT (SW_ERR_BASE-3) /* Execution of a command */
|
|
||||||
/* time out */
|
|
||||||
#define SW_ERR_NO_EXECUTE (SW_ERR_BASE-4) /* The Card failed to */
|
|
||||||
/* execute the command */
|
|
||||||
#define SW_ERR_INPUT_NULL_PTR (SW_ERR_BASE-5) /* a required pointer is */
|
|
||||||
/* NULL */
|
|
||||||
#define SW_ERR_INPUT_SIZE (SW_ERR_BASE-6) /* size is invalid, too */
|
|
||||||
/* small, too large. */
|
|
||||||
#define SW_ERR_INVALID_HANDLE (SW_ERR_BASE-7) /* Invalid SW_ACC_CONTEXT */
|
|
||||||
/* handle */
|
|
||||||
#define SW_ERR_PENDING (SW_ERR_BASE-8) /* A request is already out- */
|
|
||||||
/* standing at this */
|
|
||||||
/* context handle */
|
|
||||||
#define SW_ERR_AVAILABLE (SW_ERR_BASE-9) /* A result is available. */
|
|
||||||
#define SW_ERR_NO_PENDING (SW_ERR_BASE-10)/* No request is pending. */
|
|
||||||
#define SW_ERR_NO_MEMORY (SW_ERR_BASE-11)/* Not enough memory */
|
|
||||||
#define SW_ERR_BAD_ALGORITHM (SW_ERR_BASE-12)/* Invalid algorithm type */
|
|
||||||
/* in SW_PARAM structure */
|
|
||||||
#define SW_ERR_MISSING_KEY (SW_ERR_BASE-13)/* No key is associated with */
|
|
||||||
/* context. */
|
|
||||||
/* swAttachKeyParam() is */
|
|
||||||
/* not called. */
|
|
||||||
#define SW_ERR_KEY_CMD_MISMATCH \
|
|
||||||
(SW_ERR_BASE-14)/* Cannot perform requested */
|
|
||||||
/* SW_COMMAND_CODE since */
|
|
||||||
/* key attached via */
|
|
||||||
/* swAttachKeyParam() */
|
|
||||||
/* cannot be used for this*/
|
|
||||||
/* SW_COMMAND_CODE. */
|
|
||||||
#define SW_ERR_NOT_IMPLEMENTED \
|
|
||||||
(SW_ERR_BASE-15)/* Not implemented */
|
|
||||||
#define SW_ERR_BAD_COMMAND (SW_ERR_BASE-16)/* Bad command code */
|
|
||||||
#define SW_ERR_BAD_ITEM_SIZE (SW_ERR_BASE-17)/* too small or too large in */
|
|
||||||
/* the "initems" or */
|
|
||||||
/* "outitems". */
|
|
||||||
#define SW_ERR_BAD_ACCNUM (SW_ERR_BASE-18)/* Bad accelerator number */
|
|
||||||
#define SW_ERR_SELFTEST_FAIL (SW_ERR_BASE-19)/* At least one of the self */
|
|
||||||
/* test fail, look at the */
|
|
||||||
/* selfTestBitmap in */
|
|
||||||
/* SW_ACCELERATOR_INFO for*/
|
|
||||||
/* details. */
|
|
||||||
#define SW_ERR_MISALIGN (SW_ERR_BASE-20)/* Certain alogrithms require*/
|
|
||||||
/* key materials aligned */
|
|
||||||
/* in certain order, e.g. */
|
|
||||||
/* 128 bit for CRT */
|
|
||||||
#define SW_ERR_OUTPUT_NULL_PTR \
|
|
||||||
(SW_ERR_BASE-21)/* a required pointer is */
|
|
||||||
/* NULL */
|
|
||||||
#define SW_ERR_OUTPUT_SIZE \
|
|
||||||
(SW_ERR_BASE-22)/* size is invalid, too */
|
|
||||||
/* small, too large. */
|
|
||||||
#define SW_ERR_FIRMWARE_CHECKSUM \
|
|
||||||
(SW_ERR_BASE-23)/* firmware checksum mismatch*/
|
|
||||||
/* download failed. */
|
|
||||||
#define SW_ERR_UNKNOWN_FIRMWARE \
|
|
||||||
(SW_ERR_BASE-24)/* unknown firmware error */
|
|
||||||
#define SW_ERR_INTERRUPT (SW_ERR_BASE-25)/* request is abort when */
|
|
||||||
/* it's waiting to be */
|
|
||||||
/* completed. */
|
|
||||||
#define SW_ERR_NVWRITE_FAIL (SW_ERR_BASE-26)/* error in writing to Non- */
|
|
||||||
/* volatile memory */
|
|
||||||
#define SW_ERR_NVWRITE_RANGE (SW_ERR_BASE-27)/* out of range error in */
|
|
||||||
/* writing to NV memory */
|
|
||||||
#define SW_ERR_RNG_ERROR (SW_ERR_BASE-28)/* Random Number Generation */
|
|
||||||
/* failure */
|
|
||||||
#define SW_ERR_DSS_FAILURE (SW_ERR_BASE-29)/* DSS Sign or Verify failure*/
|
|
||||||
#define SW_ERR_MODEXP_FAILURE (SW_ERR_BASE-30)/* Failure in various math */
|
|
||||||
/* calculations */
|
|
||||||
#define SW_ERR_ONBOARD_MEMORY (SW_ERR_BASE-31)/* Error in accessing on - */
|
|
||||||
/* board memory */
|
|
||||||
#define SW_ERR_FIRMWARE_VERSION \
|
|
||||||
(SW_ERR_BASE-32)/* Wrong version in firmware */
|
|
||||||
/* update */
|
|
||||||
#define SW_ERR_ZERO_WORKING_ACCELERATOR \
|
|
||||||
(SW_ERR_BASE-44)/* All accelerators are bad */
|
|
||||||
|
|
||||||
|
|
||||||
/* algorithm type */
|
|
||||||
#define SW_ALG_CRT 1
|
|
||||||
#define SW_ALG_EXP 2
|
|
||||||
#define SW_ALG_DSA 3
|
|
||||||
#define SW_ALG_NVDATA 4
|
|
||||||
|
|
||||||
/* command code */
|
|
||||||
#define SW_CMD_MODEXP_CRT 1 /* perform Modular Exponentiation using */
|
|
||||||
/* Chinese Remainder Theorem (CRT) */
|
|
||||||
#define SW_CMD_MODEXP 2 /* perform Modular Exponentiation */
|
|
||||||
#define SW_CMD_DSS_SIGN 3 /* perform DSS sign */
|
|
||||||
#define SW_CMD_DSS_VERIFY 4 /* perform DSS verify */
|
|
||||||
#define SW_CMD_RAND 5 /* perform random number generation */
|
|
||||||
#define SW_CMD_NVREAD 6 /* perform read to nonvolatile RAM */
|
|
||||||
#define SW_CMD_NVWRITE 7 /* perform write to nonvolatile RAM */
|
|
||||||
|
|
||||||
typedef SW_U32 SW_ALGTYPE; /* alogrithm type */
|
|
||||||
typedef SW_U32 SW_STATE; /* state */
|
|
||||||
typedef SW_U32 SW_COMMAND_CODE; /* command code */
|
|
||||||
typedef SW_U32 SW_COMMAND_BITMAP[4]; /* bitmap */
|
|
||||||
|
|
||||||
typedef struct _SW_LARGENUMBER {
|
|
||||||
SW_U32 nbytes; /* number of bytes in the buffer "value" */
|
|
||||||
SW_BYTE* value; /* the large integer as a string of */
|
|
||||||
/* bytes in network (big endian) order */
|
|
||||||
} SW_LARGENUMBER;
|
|
||||||
|
|
||||||
#if defined(OPENSSL_SYS_WIN32)
|
|
||||||
#include <windows.h>
|
|
||||||
typedef HANDLE SW_OSHANDLE; /* handle to kernel object */
|
|
||||||
#define SW_OS_INVALID_HANDLE INVALID_HANDLE_VALUE
|
|
||||||
#define SW_CALLCONV _stdcall
|
|
||||||
#elif defined(OPENSSL_SYS_MACINTOSH_CLASSIC)
|
|
||||||
/* async callback mechanisms */
|
|
||||||
/* swiftCallbackLevel */
|
|
||||||
#define SW_MAC_CALLBACK_LEVEL_NO 0
|
|
||||||
#define SW_MAC_CALLBACK_LEVEL_HARDWARE 1 /* from the hardware ISR */
|
|
||||||
#define SW_MAC_CALLBACK_LEVEL_SECONDARY 2 /* as secondary ISR */
|
|
||||||
typedef int SW_MAC_CALLBACK_LEVEL;
|
|
||||||
typedef int SW_OSHANDLE;
|
|
||||||
#define SW_OS_INVALID_HANDLE (-1)
|
|
||||||
#define SW_CALLCONV
|
|
||||||
#else /* Unix variants */
|
|
||||||
typedef int SW_OSHANDLE; /* handle to driver */
|
|
||||||
#define SW_OS_INVALID_HANDLE (-1)
|
|
||||||
#define SW_CALLCONV
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct _SW_CRT {
|
|
||||||
SW_LARGENUMBER p; /* prime number p */
|
|
||||||
SW_LARGENUMBER q; /* prime number q */
|
|
||||||
SW_LARGENUMBER dmp1; /* exponent1 */
|
|
||||||
SW_LARGENUMBER dmq1; /* exponent2 */
|
|
||||||
SW_LARGENUMBER iqmp; /* CRT coefficient */
|
|
||||||
} SW_CRT;
|
|
||||||
|
|
||||||
typedef struct _SW_EXP {
|
|
||||||
SW_LARGENUMBER modulus; /* modulus */
|
|
||||||
SW_LARGENUMBER exponent;/* exponent */
|
|
||||||
} SW_EXP;
|
|
||||||
|
|
||||||
typedef struct _SW_DSA {
|
|
||||||
SW_LARGENUMBER p; /* */
|
|
||||||
SW_LARGENUMBER q; /* */
|
|
||||||
SW_LARGENUMBER g; /* */
|
|
||||||
SW_LARGENUMBER key; /* private/public key */
|
|
||||||
} SW_DSA;
|
|
||||||
|
|
||||||
typedef struct _SW_NVDATA {
|
|
||||||
SW_U32 accnum; /* accelerator board number */
|
|
||||||
SW_U32 offset; /* offset in byte */
|
|
||||||
} SW_NVDATA;
|
|
||||||
|
|
||||||
typedef struct _SW_PARAM {
|
|
||||||
SW_ALGTYPE type; /* type of the alogrithm */
|
|
||||||
union {
|
|
||||||
SW_CRT crt;
|
|
||||||
SW_EXP exp;
|
|
||||||
SW_DSA dsa;
|
|
||||||
SW_NVDATA nvdata;
|
|
||||||
} up;
|
|
||||||
} SW_PARAM;
|
|
||||||
|
|
||||||
typedef SW_U32 SW_CONTEXT_HANDLE; /* opaque context handle */
|
|
||||||
|
|
||||||
|
|
||||||
/* Now the OpenSSL bits, these function types are the for the function
|
|
||||||
* pointers that will bound into the Rainbow shared libraries. */
|
|
||||||
typedef SW_STATUS SW_CALLCONV t_swAcquireAccContext(SW_CONTEXT_HANDLE *hac);
|
|
||||||
typedef SW_STATUS SW_CALLCONV t_swAttachKeyParam(SW_CONTEXT_HANDLE hac,
|
|
||||||
SW_PARAM *key_params);
|
|
||||||
typedef SW_STATUS SW_CALLCONV t_swSimpleRequest(SW_CONTEXT_HANDLE hac,
|
|
||||||
SW_COMMAND_CODE cmd,
|
|
||||||
SW_LARGENUMBER pin[],
|
|
||||||
SW_U32 pin_count,
|
|
||||||
SW_LARGENUMBER pout[],
|
|
||||||
SW_U32 pout_count);
|
|
||||||
typedef SW_STATUS SW_CALLCONV t_swReleaseAccContext(SW_CONTEXT_HANDLE hac);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /* __cplusplus */
|
|
||||||
|
|
@ -1,149 +0,0 @@
|
|||||||
/**********************************************************************/
|
|
||||||
/* */
|
|
||||||
/* Prototypes of the CCA verbs used by the 4758 CCA openssl driver */
|
|
||||||
/* */
|
|
||||||
/* Maurice Gittens <maurice@gittens.nl> */
|
|
||||||
/* */
|
|
||||||
/**********************************************************************/
|
|
||||||
|
|
||||||
#ifndef __HW_4758_CCA__
|
|
||||||
#define __HW_4758_CCA__
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Only WIN32 support for now
|
|
||||||
*/
|
|
||||||
#if defined(WIN32)
|
|
||||||
|
|
||||||
#define CCA_LIB_NAME "CSUNSAPI"
|
|
||||||
|
|
||||||
#define CSNDPKX "CSNDPKX_32"
|
|
||||||
#define CSNDKRR "CSNDKRR_32"
|
|
||||||
#define CSNDPKE "CSNDPKE_32"
|
|
||||||
#define CSNDPKD "CSNDPKD_32"
|
|
||||||
#define CSNDDSV "CSNDDSV_32"
|
|
||||||
#define CSNDDSG "CSNDDSG_32"
|
|
||||||
#define CSNBRNG "CSNBRNG_32"
|
|
||||||
|
|
||||||
#define SECURITYAPI __stdcall
|
|
||||||
#else
|
|
||||||
/* Fixme!!
|
|
||||||
Find out the values of these constants for other platforms.
|
|
||||||
*/
|
|
||||||
#define CCA_LIB_NAME "CSUNSAPI"
|
|
||||||
|
|
||||||
#define CSNDPKX "CSNDPKX"
|
|
||||||
#define CSNDKRR "CSNDKRR"
|
|
||||||
#define CSNDPKE "CSNDPKE"
|
|
||||||
#define CSNDPKD "CSNDPKD"
|
|
||||||
#define CSNDDSV "CSNDDSV"
|
|
||||||
#define CSNDDSG "CSNDDSG"
|
|
||||||
#define CSNBRNG "CSNBRNG"
|
|
||||||
|
|
||||||
#define SECURITYAPI
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* security API prototypes
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* PKA Key Record Read */
|
|
||||||
typedef void (SECURITYAPI *F_KEYRECORDREAD)
|
|
||||||
(long * return_code,
|
|
||||||
long * reason_code,
|
|
||||||
long * exit_data_length,
|
|
||||||
unsigned char * exit_data,
|
|
||||||
long * rule_array_count,
|
|
||||||
unsigned char * rule_array,
|
|
||||||
unsigned char * key_label,
|
|
||||||
long * key_token_length,
|
|
||||||
unsigned char * key_token);
|
|
||||||
|
|
||||||
/* Random Number Generate */
|
|
||||||
typedef void (SECURITYAPI *F_RANDOMNUMBERGENERATE)
|
|
||||||
(long * return_code,
|
|
||||||
long * reason_code,
|
|
||||||
long * exit_data_length,
|
|
||||||
unsigned char * exit_data,
|
|
||||||
unsigned char * form,
|
|
||||||
unsigned char * random_number);
|
|
||||||
|
|
||||||
/* Digital Signature Generate */
|
|
||||||
typedef void (SECURITYAPI *F_DIGITALSIGNATUREGENERATE)
|
|
||||||
(long * return_code,
|
|
||||||
long * reason_code,
|
|
||||||
long * exit_data_length,
|
|
||||||
unsigned char * exit_data,
|
|
||||||
long * rule_array_count,
|
|
||||||
unsigned char * rule_array,
|
|
||||||
long * PKA_private_key_id_length,
|
|
||||||
unsigned char * PKA_private_key_id,
|
|
||||||
long * hash_length,
|
|
||||||
unsigned char * hash,
|
|
||||||
long * signature_field_length,
|
|
||||||
long * signature_bit_length,
|
|
||||||
unsigned char * signature_field);
|
|
||||||
|
|
||||||
/* Digital Signature Verify */
|
|
||||||
typedef void (SECURITYAPI *F_DIGITALSIGNATUREVERIFY)(
|
|
||||||
long * return_code,
|
|
||||||
long * reason_code,
|
|
||||||
long * exit_data_length,
|
|
||||||
unsigned char * exit_data,
|
|
||||||
long * rule_array_count,
|
|
||||||
unsigned char * rule_array,
|
|
||||||
long * PKA_public_key_id_length,
|
|
||||||
unsigned char * PKA_public_key_id,
|
|
||||||
long * hash_length,
|
|
||||||
unsigned char * hash,
|
|
||||||
long * signature_field_length,
|
|
||||||
unsigned char * signature_field);
|
|
||||||
|
|
||||||
/* PKA Public Key Extract */
|
|
||||||
typedef void (SECURITYAPI *F_PUBLICKEYEXTRACT)(
|
|
||||||
long * return_code,
|
|
||||||
long * reason_code,
|
|
||||||
long * exit_data_length,
|
|
||||||
unsigned char * exit_data,
|
|
||||||
long * rule_array_count,
|
|
||||||
unsigned char * rule_array,
|
|
||||||
long * source_key_identifier_length,
|
|
||||||
unsigned char * source_key_identifier,
|
|
||||||
long * target_key_token_length,
|
|
||||||
unsigned char * target_key_token);
|
|
||||||
|
|
||||||
/* PKA Encrypt */
|
|
||||||
typedef void (SECURITYAPI *F_PKAENCRYPT)
|
|
||||||
(long * return_code,
|
|
||||||
long * reason_code,
|
|
||||||
long * exit_data_length,
|
|
||||||
unsigned char * exit_data,
|
|
||||||
long * rule_array_count,
|
|
||||||
unsigned char * rule_array,
|
|
||||||
long * key_value_length,
|
|
||||||
unsigned char * key_value,
|
|
||||||
long * data_struct_length,
|
|
||||||
unsigned char * data_struct,
|
|
||||||
long * RSA_public_key_length,
|
|
||||||
unsigned char * RSA_public_key,
|
|
||||||
long * RSA_encipher_length,
|
|
||||||
unsigned char * RSA_encipher );
|
|
||||||
|
|
||||||
/* PKA Decrypt */
|
|
||||||
typedef void (SECURITYAPI *F_PKADECRYPT)
|
|
||||||
(long * return_code,
|
|
||||||
long * reason_code,
|
|
||||||
long * exit_data_length,
|
|
||||||
unsigned char * exit_data,
|
|
||||||
long * rule_array_count,
|
|
||||||
unsigned char * rule_array,
|
|
||||||
long * enciphered_key_length,
|
|
||||||
unsigned char * enciphered_key,
|
|
||||||
long * data_struct_length,
|
|
||||||
unsigned char * data_struct,
|
|
||||||
long * RSA_private_key_length,
|
|
||||||
unsigned char * RSA_private_key,
|
|
||||||
long * key_value_length,
|
|
||||||
unsigned char * key_value );
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,100 +0,0 @@
|
|||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* Copyright 2000
|
|
||||||
* Broadcom Corporation
|
|
||||||
* 16215 Alton Parkway
|
|
||||||
* PO Box 57013
|
|
||||||
* Irvine CA 92619-7013
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
/*
|
|
||||||
* Broadcom Corporation uBSec SDK
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* Character device header file.
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* Revision History:
|
|
||||||
*
|
|
||||||
* October 2000 JTT Created.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define MAX_PUBLIC_KEY_BITS (1024)
|
|
||||||
#define MAX_PUBLIC_KEY_BYTES (1024/8)
|
|
||||||
#define SHA_BIT_SIZE (160)
|
|
||||||
#define MAX_CRYPTO_KEY_LENGTH 24
|
|
||||||
#define MAX_MAC_KEY_LENGTH 64
|
|
||||||
#define UBSEC_CRYPTO_DEVICE_NAME ((unsigned char *)"/dev/ubscrypt")
|
|
||||||
#define UBSEC_KEY_DEVICE_NAME ((unsigned char *)"/dev/ubskey")
|
|
||||||
|
|
||||||
/* Math command types. */
|
|
||||||
#define UBSEC_MATH_MODADD 0x0001
|
|
||||||
#define UBSEC_MATH_MODSUB 0x0002
|
|
||||||
#define UBSEC_MATH_MODMUL 0x0004
|
|
||||||
#define UBSEC_MATH_MODEXP 0x0008
|
|
||||||
#define UBSEC_MATH_MODREM 0x0010
|
|
||||||
#define UBSEC_MATH_MODINV 0x0020
|
|
||||||
|
|
||||||
typedef long ubsec_MathCommand_t;
|
|
||||||
typedef long ubsec_RNGCommand_t;
|
|
||||||
|
|
||||||
typedef struct ubsec_crypto_context_s {
|
|
||||||
unsigned int flags;
|
|
||||||
unsigned char crypto[MAX_CRYPTO_KEY_LENGTH];
|
|
||||||
unsigned char auth[MAX_MAC_KEY_LENGTH];
|
|
||||||
} ubsec_crypto_context_t, *ubsec_crypto_context_p;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Predeclare the function pointer types that we dynamically load from the DSO.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef int t_UBSEC_ubsec_bytes_to_bits(unsigned char *n, int bytes);
|
|
||||||
|
|
||||||
typedef int t_UBSEC_ubsec_bits_to_bytes(int bits);
|
|
||||||
|
|
||||||
typedef int t_UBSEC_ubsec_open(unsigned char *device);
|
|
||||||
|
|
||||||
typedef int t_UBSEC_ubsec_close(int fd);
|
|
||||||
|
|
||||||
typedef int t_UBSEC_diffie_hellman_generate_ioctl (int fd,
|
|
||||||
unsigned char *x, int *x_len, unsigned char *y, int *y_len,
|
|
||||||
unsigned char *g, int g_len, unsigned char *m, int m_len,
|
|
||||||
unsigned char *userX, int userX_len, int random_bits);
|
|
||||||
|
|
||||||
typedef int t_UBSEC_diffie_hellman_agree_ioctl (int fd,
|
|
||||||
unsigned char *x, int x_len, unsigned char *y, int y_len,
|
|
||||||
unsigned char *m, int m_len, unsigned char *k, int *k_len);
|
|
||||||
|
|
||||||
typedef int t_UBSEC_rsa_mod_exp_ioctl (int fd,
|
|
||||||
unsigned char *x, int x_len, unsigned char *m, int m_len,
|
|
||||||
unsigned char *e, int e_len, unsigned char *y, int *y_len);
|
|
||||||
|
|
||||||
typedef int t_UBSEC_rsa_mod_exp_crt_ioctl (int fd,
|
|
||||||
unsigned char *x, int x_len, unsigned char *qinv, int qinv_len,
|
|
||||||
unsigned char *edq, int edq_len, unsigned char *q, int q_len,
|
|
||||||
unsigned char *edp, int edp_len, unsigned char *p, int p_len,
|
|
||||||
unsigned char *y, int *y_len);
|
|
||||||
|
|
||||||
typedef int t_UBSEC_dsa_sign_ioctl (int fd,
|
|
||||||
int hash, unsigned char *data, int data_len,
|
|
||||||
unsigned char *rndom, int random_len,
|
|
||||||
unsigned char *p, int p_len, unsigned char *q, int q_len,
|
|
||||||
unsigned char *g, int g_len, unsigned char *key, int key_len,
|
|
||||||
unsigned char *r, int *r_len, unsigned char *s, int *s_len);
|
|
||||||
|
|
||||||
typedef int t_UBSEC_dsa_verify_ioctl (int fd,
|
|
||||||
int hash, unsigned char *data, int data_len,
|
|
||||||
unsigned char *p, int p_len, unsigned char *q, int q_len,
|
|
||||||
unsigned char *g, int g_len, unsigned char *key, int key_len,
|
|
||||||
unsigned char *r, int r_len, unsigned char *s, int s_len,
|
|
||||||
unsigned char *v, int *v_len);
|
|
||||||
|
|
||||||
typedef int t_UBSEC_math_accelerate_ioctl(int fd, ubsec_MathCommand_t command,
|
|
||||||
unsigned char *ModN, int *ModN_len, unsigned char *ExpE, int *ExpE_len,
|
|
||||||
unsigned char *ParamA, int *ParamA_len, unsigned char *ParamB, int *ParamB_len,
|
|
||||||
unsigned char *Result, int *Result_len);
|
|
||||||
|
|
||||||
typedef int t_UBSEC_rng_ioctl(int fd, ubsec_RNGCommand_t command,
|
|
||||||
unsigned char *Result, int *Result_len);
|
|
||||||
|
|
||||||
typedef int t_UBSEC_max_key_len_ioctl(int fd, int *max_key_len);
|
|
@ -1,486 +0,0 @@
|
|||||||
/*
|
|
||||||
* ModExp / RSA (with/without KM) plugin API
|
|
||||||
*
|
|
||||||
* The application will load a dynamic library which
|
|
||||||
* exports entrypoint(s) defined in this file.
|
|
||||||
*
|
|
||||||
* This set of entrypoints provides only a multithreaded,
|
|
||||||
* synchronous-within-each-thread, facility.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* This file is Copyright 1998-2000 nCipher Corporation Limited.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with opr without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the copyright notice,
|
|
||||||
* this list of conditions, and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions, and the following
|
|
||||||
* disclaimer, in the documentation and/or other materials provided
|
|
||||||
* with the distribution
|
|
||||||
*
|
|
||||||
* IN NO EVENT SHALL NCIPHER CORPORATION LIMITED (`NCIPHER') AND/OR
|
|
||||||
* ANY OTHER AUTHORS OR DISTRIBUTORS OF THIS FILE BE LIABLE for any
|
|
||||||
* damages arising directly or indirectly from this file, its use or
|
|
||||||
* this licence. Without prejudice to the generality of the
|
|
||||||
* foregoing: all liability shall be excluded for direct, indirect,
|
|
||||||
* special, incidental, consequential or other damages or any loss of
|
|
||||||
* profits, business, revenue goodwill or anticipated savings;
|
|
||||||
* liability shall be excluded even if nCipher or anyone else has been
|
|
||||||
* advised of the possibility of damage. In any event, if the
|
|
||||||
* exclusion of liability is not effective, the liability of nCipher
|
|
||||||
* or any author or distributor shall be limited to the lesser of the
|
|
||||||
* price paid and 1,000 pounds sterling. This licence only fails to
|
|
||||||
* exclude or limit liability for death or personal injury arising out
|
|
||||||
* of negligence, and only to the extent that such an exclusion or
|
|
||||||
* limitation is not effective.
|
|
||||||
*
|
|
||||||
* NCIPHER AND THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ALL
|
|
||||||
* AND ANY WARRANTIES (WHETHER EXPRESS OR IMPLIED), including, but not
|
|
||||||
* limited to, any implied warranties of merchantability, fitness for
|
|
||||||
* a particular purpose, satisfactory quality, and/or non-infringement
|
|
||||||
* of any third party rights.
|
|
||||||
*
|
|
||||||
* US Government use: This software and documentation is Commercial
|
|
||||||
* Computer Software and Computer Software Documentation, as defined in
|
|
||||||
* sub-paragraphs (a)(1) and (a)(5) of DFAR 252.227-7014, "Rights in
|
|
||||||
* Noncommercial Computer Software and Noncommercial Computer Software
|
|
||||||
* Documentation." Use, duplication or disclosure by the Government is
|
|
||||||
* subject to the terms and conditions specified here.
|
|
||||||
*
|
|
||||||
* By using or distributing this file you will be accepting these
|
|
||||||
* terms and conditions, including the limitation of liability and
|
|
||||||
* lack of warranty. If you do not wish to accept these terms and
|
|
||||||
* conditions, DO NOT USE THE FILE.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* The actual dynamically loadable plugin, and the library files for
|
|
||||||
* static linking, which are also provided in some distributions, are
|
|
||||||
* not covered by the licence described above. You should have
|
|
||||||
* received a separate licence with terms and conditions for these
|
|
||||||
* library files; if you received the library files without a licence,
|
|
||||||
* please contact nCipher.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Id: hwcryptohook.h,v 1.3 2001/07/04 12:26:39 ben Exp $
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HWCRYPTOHOOK_H
|
|
||||||
#define HWCRYPTOHOOK_H
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#ifndef HWCRYPTOHOOK_DECLARE_APPTYPES
|
|
||||||
#define HWCRYPTOHOOK_DECLARE_APPTYPES 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define HWCRYPTOHOOK_ERROR_FAILED -1
|
|
||||||
#define HWCRYPTOHOOK_ERROR_FALLBACK -2
|
|
||||||
#define HWCRYPTOHOOK_ERROR_MPISIZE -3
|
|
||||||
|
|
||||||
#if HWCRYPTOHOOK_DECLARE_APPTYPES
|
|
||||||
|
|
||||||
/* These structs are defined by the application and opaque to the
|
|
||||||
* crypto plugin. The application may define these as it sees fit.
|
|
||||||
* Default declarations are provided here, but the application may
|
|
||||||
* #define HWCRYPTOHOOK_DECLARE_APPTYPES 0
|
|
||||||
* to prevent these declarations, and instead provide its own
|
|
||||||
* declarations of these types. (Pointers to them must still be
|
|
||||||
* ordinary pointers to structs or unions, or the resulting combined
|
|
||||||
* program will have a type inconsistency.)
|
|
||||||
*/
|
|
||||||
typedef struct HWCryptoHook_MutexValue HWCryptoHook_Mutex;
|
|
||||||
typedef struct HWCryptoHook_CondVarValue HWCryptoHook_CondVar;
|
|
||||||
typedef struct HWCryptoHook_PassphraseContextValue HWCryptoHook_PassphraseContext;
|
|
||||||
typedef struct HWCryptoHook_CallerContextValue HWCryptoHook_CallerContext;
|
|
||||||
|
|
||||||
#endif /* HWCRYPTOHOOK_DECLARE_APPTYPES */
|
|
||||||
|
|
||||||
/* These next two structs are opaque to the application. The crypto
|
|
||||||
* plugin will return pointers to them; the caller simply manipulates
|
|
||||||
* the pointers.
|
|
||||||
*/
|
|
||||||
typedef struct HWCryptoHook_Context *HWCryptoHook_ContextHandle;
|
|
||||||
typedef struct HWCryptoHook_RSAKey *HWCryptoHook_RSAKeyHandle;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
char *buf;
|
|
||||||
size_t size;
|
|
||||||
} HWCryptoHook_ErrMsgBuf;
|
|
||||||
/* Used for error reporting. When a HWCryptoHook function fails it
|
|
||||||
* will return a sentinel value (0 for pointer-valued functions, or a
|
|
||||||
* negative number, usually HWCRYPTOHOOK_ERROR_FAILED, for
|
|
||||||
* integer-valued ones). It will, if an ErrMsgBuf is passed, also put
|
|
||||||
* an error message there.
|
|
||||||
*
|
|
||||||
* size is the size of the buffer, and will not be modified. If you
|
|
||||||
* pass 0 for size you must pass 0 for buf, and nothing will be
|
|
||||||
* recorded (just as if you passed 0 for the struct pointer).
|
|
||||||
* Messages written to the buffer will always be null-terminated, even
|
|
||||||
* when truncated to fit within size bytes.
|
|
||||||
*
|
|
||||||
* The contents of the buffer are not defined if there is no error.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct HWCryptoHook_MPIStruct {
|
|
||||||
unsigned char *buf;
|
|
||||||
size_t size;
|
|
||||||
} HWCryptoHook_MPI;
|
|
||||||
/* When one of these is returned, a pointer is passed to the function.
|
|
||||||
* At call, size is the space available. Afterwards it is updated to
|
|
||||||
* be set to the actual length (which may be more than the space available,
|
|
||||||
* if there was not enough room and the result was truncated).
|
|
||||||
* buf (the pointer) is not updated.
|
|
||||||
*
|
|
||||||
* size is in bytes and may be zero at call or return, but must be a
|
|
||||||
* multiple of the limb size. Zero limbs at the MS end are not
|
|
||||||
* permitted.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define HWCryptoHook_InitFlags_FallbackModExp 0x0002UL
|
|
||||||
#define HWCryptoHook_InitFlags_FallbackRSAImmed 0x0004UL
|
|
||||||
/* Enable requesting fallback to software in case of problems with the
|
|
||||||
* hardware support. This indicates to the crypto provider that the
|
|
||||||
* application is prepared to fall back to software operation if the
|
|
||||||
* ModExp* or RSAImmed* functions return HWCRYPTOHOOK_ERROR_FALLBACK.
|
|
||||||
* Without this flag those calls will never return
|
|
||||||
* HWCRYPTOHOOK_ERROR_FALLBACK. The flag will also cause the crypto
|
|
||||||
* provider to avoid repeatedly attempting to contact dead hardware
|
|
||||||
* within a short interval, if appropriate.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define HWCryptoHook_InitFlags_SimpleForkCheck 0x0010UL
|
|
||||||
/* Without _SimpleForkCheck the library is allowed to assume that the
|
|
||||||
* application will not fork and call the library in the child(ren).
|
|
||||||
*
|
|
||||||
* When it is specified, this is allowed. However, after a fork
|
|
||||||
* neither parent nor child may unload any loaded keys or call
|
|
||||||
* _Finish. Instead, they should call exit (or die with a signal)
|
|
||||||
* without calling _Finish. After all the children have died the
|
|
||||||
* parent may unload keys or call _Finish.
|
|
||||||
*
|
|
||||||
* This flag only has any effect on UN*X platforms.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
unsigned long flags;
|
|
||||||
void *logstream; /* usually a FILE*. See below. */
|
|
||||||
|
|
||||||
size_t limbsize; /* bignum format - size of radix type, must be power of 2 */
|
|
||||||
int mslimbfirst; /* 0 or 1 */
|
|
||||||
int msbytefirst; /* 0 or 1; -1 = native */
|
|
||||||
|
|
||||||
/* All the callback functions should return 0 on success, or a
|
|
||||||
* nonzero integer (whose value will be visible in the error message
|
|
||||||
* put in the buffer passed to the call).
|
|
||||||
*
|
|
||||||
* If a callback is not available pass a null function pointer.
|
|
||||||
*
|
|
||||||
* The callbacks may not call down again into the crypto plugin.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* For thread-safety. Set everything to 0 if you promise only to be
|
|
||||||
* singlethreaded. maxsimultaneous is the number of calls to
|
|
||||||
* ModExp[Crt]/RSAImmed{Priv,Pub}/RSA. If you don't know what to
|
|
||||||
* put there then say 0 and the hook library will use a default.
|
|
||||||
*
|
|
||||||
* maxmutexes is a small limit on the number of simultaneous mutexes
|
|
||||||
* which will be requested by the library. If there is no small
|
|
||||||
* limit, set it to 0. If the crypto plugin cannot create the
|
|
||||||
* advertised number of mutexes the calls to its functions may fail.
|
|
||||||
* If a low number of mutexes is advertised the plugin will try to
|
|
||||||
* do the best it can. Making larger numbers of mutexes available
|
|
||||||
* may improve performance and parallelism by reducing contention
|
|
||||||
* over critical sections. Unavailability of any mutexes, implying
|
|
||||||
* single-threaded operation, should be indicated by the setting
|
|
||||||
* mutex_init et al to 0.
|
|
||||||
*/
|
|
||||||
int maxmutexes;
|
|
||||||
int maxsimultaneous;
|
|
||||||
size_t mutexsize;
|
|
||||||
int (*mutex_init)(HWCryptoHook_Mutex*, HWCryptoHook_CallerContext *cactx);
|
|
||||||
int (*mutex_acquire)(HWCryptoHook_Mutex*);
|
|
||||||
void (*mutex_release)(HWCryptoHook_Mutex*);
|
|
||||||
void (*mutex_destroy)(HWCryptoHook_Mutex*);
|
|
||||||
|
|
||||||
/* For greater efficiency, can use condition vars internally for
|
|
||||||
* synchronisation. In this case maxsimultaneous is ignored, but
|
|
||||||
* the other mutex stuff must be available. In singlethreaded
|
|
||||||
* programs, set everything to 0.
|
|
||||||
*/
|
|
||||||
size_t condvarsize;
|
|
||||||
int (*condvar_init)(HWCryptoHook_CondVar*, HWCryptoHook_CallerContext *cactx);
|
|
||||||
int (*condvar_wait)(HWCryptoHook_CondVar*, HWCryptoHook_Mutex*);
|
|
||||||
void (*condvar_signal)(HWCryptoHook_CondVar*);
|
|
||||||
void (*condvar_broadcast)(HWCryptoHook_CondVar*);
|
|
||||||
void (*condvar_destroy)(HWCryptoHook_CondVar*);
|
|
||||||
|
|
||||||
/* The semantics of acquiring and releasing mutexes and broadcasting
|
|
||||||
* and waiting on condition variables are expected to be those from
|
|
||||||
* POSIX threads (pthreads). The mutexes may be (in pthread-speak)
|
|
||||||
* fast mutexes, recursive mutexes, or nonrecursive ones.
|
|
||||||
*
|
|
||||||
* The _release/_signal/_broadcast and _destroy functions must
|
|
||||||
* always succeed when given a valid argument; if they are given an
|
|
||||||
* invalid argument then the program (crypto plugin + application)
|
|
||||||
* has an internal error, and they should abort the program.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int (*getpassphrase)(const char *prompt_info,
|
|
||||||
int *len_io, char *buf,
|
|
||||||
HWCryptoHook_PassphraseContext *ppctx,
|
|
||||||
HWCryptoHook_CallerContext *cactx);
|
|
||||||
/* Passphrases and the prompt_info, if they contain high-bit-set
|
|
||||||
* characters, are UTF-8. The prompt_info may be a null pointer if
|
|
||||||
* no prompt information is available (it should not be an empty
|
|
||||||
* string). It will not contain text like `enter passphrase';
|
|
||||||
* instead it might say something like `Operator Card for John
|
|
||||||
* Smith' or `SmartCard in nFast Module #1, Slot #1'.
|
|
||||||
*
|
|
||||||
* buf points to a buffer in which to return the passphrase; on
|
|
||||||
* entry *len_io is the length of the buffer. It should be updated
|
|
||||||
* by the callback. The returned passphrase should not be
|
|
||||||
* null-terminated by the callback.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int (*getphystoken)(const char *prompt_info,
|
|
||||||
const char *wrong_info,
|
|
||||||
HWCryptoHook_PassphraseContext *ppctx,
|
|
||||||
HWCryptoHook_CallerContext *cactx);
|
|
||||||
/* Requests that the human user physically insert a different
|
|
||||||
* smartcard, DataKey, etc. The plugin should check whether the
|
|
||||||
* currently inserted token(s) are appropriate, and if they are it
|
|
||||||
* should not make this call.
|
|
||||||
*
|
|
||||||
* prompt_info is as before. wrong_info is a description of the
|
|
||||||
* currently inserted token(s) so that the user is told what
|
|
||||||
* something is. wrong_info, like prompt_info, may be null, but
|
|
||||||
* should not be an empty string. Its contents should be
|
|
||||||
* syntactically similar to that of prompt_info.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Note that a single LoadKey operation might cause several calls to
|
|
||||||
* getpassphrase and/or requestphystoken. If requestphystoken is
|
|
||||||
* not provided (ie, a null pointer is passed) then the plugin may
|
|
||||||
* not support loading keys for which authorisation by several cards
|
|
||||||
* is required. If getpassphrase is not provided then cards with
|
|
||||||
* passphrases may not be supported.
|
|
||||||
*
|
|
||||||
* getpassphrase and getphystoken do not need to check that the
|
|
||||||
* passphrase has been entered correctly or the correct token
|
|
||||||
* inserted; the crypto plugin will do that. If this is not the
|
|
||||||
* case then the crypto plugin is responsible for calling these
|
|
||||||
* routines again as appropriate until the correct token(s) and
|
|
||||||
* passphrase(s) are supplied as required, or until any retry limits
|
|
||||||
* implemented by the crypto plugin are reached.
|
|
||||||
*
|
|
||||||
* In either case, the application must allow the user to say `no'
|
|
||||||
* or `cancel' to indicate that they do not know the passphrase or
|
|
||||||
* have the appropriate token; this should cause the callback to
|
|
||||||
* return nonzero indicating error.
|
|
||||||
*/
|
|
||||||
|
|
||||||
void (*logmessage)(void *logstream, const char *message);
|
|
||||||
/* A log message will be generated at least every time something goes
|
|
||||||
* wrong and an ErrMsgBuf is filled in (or would be if one was
|
|
||||||
* provided). Other diagnostic information may be written there too,
|
|
||||||
* including more detailed reasons for errors which are reported in an
|
|
||||||
* ErrMsgBuf.
|
|
||||||
*
|
|
||||||
* When a log message is generated, this callback is called. It
|
|
||||||
* should write a message to the relevant logging arrangements.
|
|
||||||
*
|
|
||||||
* The message string passed will be null-terminated and may be of arbitrary
|
|
||||||
* length. It will not be prefixed by the time and date, nor by the
|
|
||||||
* name of the library that is generating it - if this is required,
|
|
||||||
* the logmessage callback must do it. The message will not have a
|
|
||||||
* trailing newline (though it may contain internal newlines).
|
|
||||||
*
|
|
||||||
* If a null pointer is passed for logmessage a default function is
|
|
||||||
* used. The default function treats logstream as a FILE* which has
|
|
||||||
* been converted to a void*. If logstream is 0 it does nothing.
|
|
||||||
* Otherwise it prepends the date and time and library name and
|
|
||||||
* writes the message to logstream. Each line will be prefixed by a
|
|
||||||
* descriptive string containing the date, time and identity of the
|
|
||||||
* crypto plugin. Errors on the logstream are not reported
|
|
||||||
* anywhere, and the default function doesn't flush the stream, so
|
|
||||||
* the application must set the buffering how it wants it.
|
|
||||||
*
|
|
||||||
* The crypto plugin may also provide a facility to have copies of
|
|
||||||
* log messages sent elsewhere, and or for adjusting the verbosity
|
|
||||||
* of the log messages; any such facilities will be configured by
|
|
||||||
* external means.
|
|
||||||
*/
|
|
||||||
|
|
||||||
} HWCryptoHook_InitInfo;
|
|
||||||
|
|
||||||
typedef
|
|
||||||
HWCryptoHook_ContextHandle HWCryptoHook_Init_t(const HWCryptoHook_InitInfo *initinfo,
|
|
||||||
size_t initinfosize,
|
|
||||||
const HWCryptoHook_ErrMsgBuf *errors,
|
|
||||||
HWCryptoHook_CallerContext *cactx);
|
|
||||||
extern HWCryptoHook_Init_t HWCryptoHook_Init;
|
|
||||||
|
|
||||||
/* Caller should set initinfosize to the size of the HWCryptoHook struct,
|
|
||||||
* so it can be extended later.
|
|
||||||
*
|
|
||||||
* On success, a message for display or logging by the server,
|
|
||||||
* including the name and version number of the plugin, will be filled
|
|
||||||
* in into *errors; on failure *errors is used for error handling, as
|
|
||||||
* usual.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* All these functions return 0 on success, HWCRYPTOHOOK_ERROR_FAILED
|
|
||||||
* on most failures. HWCRYPTOHOOK_ERROR_MPISIZE means at least one of
|
|
||||||
* the output MPI buffer(s) was too small; the sizes of all have been
|
|
||||||
* set to the desired size (and for those where the buffer was large
|
|
||||||
* enough, the value may have been copied in), and no error message
|
|
||||||
* has been recorded.
|
|
||||||
*
|
|
||||||
* You may pass 0 for the errors struct. In any case, unless you set
|
|
||||||
* _NoStderr at init time then messages may be reported to stderr.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* The RSAImmed* functions (and key managed RSA) only work with
|
|
||||||
* modules which have an RSA patent licence - currently that means KM
|
|
||||||
* units; the ModExp* ones work with all modules, so you need a patent
|
|
||||||
* licence in the software in the US. They are otherwise identical.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef
|
|
||||||
void HWCryptoHook_Finish_t(HWCryptoHook_ContextHandle hwctx);
|
|
||||||
extern HWCryptoHook_Finish_t HWCryptoHook_Finish;
|
|
||||||
/* You must not have any calls going or keys loaded when you call this. */
|
|
||||||
|
|
||||||
typedef
|
|
||||||
int HWCryptoHook_RandomBytes_t(HWCryptoHook_ContextHandle hwctx,
|
|
||||||
unsigned char *buf, size_t len,
|
|
||||||
const HWCryptoHook_ErrMsgBuf *errors);
|
|
||||||
extern HWCryptoHook_RandomBytes_t HWCryptoHook_RandomBytes;
|
|
||||||
|
|
||||||
typedef
|
|
||||||
int HWCryptoHook_ModExp_t(HWCryptoHook_ContextHandle hwctx,
|
|
||||||
HWCryptoHook_MPI a,
|
|
||||||
HWCryptoHook_MPI p,
|
|
||||||
HWCryptoHook_MPI n,
|
|
||||||
HWCryptoHook_MPI *r,
|
|
||||||
const HWCryptoHook_ErrMsgBuf *errors);
|
|
||||||
extern HWCryptoHook_ModExp_t HWCryptoHook_ModExp;
|
|
||||||
|
|
||||||
typedef
|
|
||||||
int HWCryptoHook_RSAImmedPub_t(HWCryptoHook_ContextHandle hwctx,
|
|
||||||
HWCryptoHook_MPI m,
|
|
||||||
HWCryptoHook_MPI e,
|
|
||||||
HWCryptoHook_MPI n,
|
|
||||||
HWCryptoHook_MPI *r,
|
|
||||||
const HWCryptoHook_ErrMsgBuf *errors);
|
|
||||||
extern HWCryptoHook_RSAImmedPub_t HWCryptoHook_RSAImmedPub;
|
|
||||||
|
|
||||||
typedef
|
|
||||||
int HWCryptoHook_ModExpCRT_t(HWCryptoHook_ContextHandle hwctx,
|
|
||||||
HWCryptoHook_MPI a,
|
|
||||||
HWCryptoHook_MPI p,
|
|
||||||
HWCryptoHook_MPI q,
|
|
||||||
HWCryptoHook_MPI dmp1,
|
|
||||||
HWCryptoHook_MPI dmq1,
|
|
||||||
HWCryptoHook_MPI iqmp,
|
|
||||||
HWCryptoHook_MPI *r,
|
|
||||||
const HWCryptoHook_ErrMsgBuf *errors);
|
|
||||||
extern HWCryptoHook_ModExpCRT_t HWCryptoHook_ModExpCRT;
|
|
||||||
|
|
||||||
typedef
|
|
||||||
int HWCryptoHook_RSAImmedPriv_t(HWCryptoHook_ContextHandle hwctx,
|
|
||||||
HWCryptoHook_MPI m,
|
|
||||||
HWCryptoHook_MPI p,
|
|
||||||
HWCryptoHook_MPI q,
|
|
||||||
HWCryptoHook_MPI dmp1,
|
|
||||||
HWCryptoHook_MPI dmq1,
|
|
||||||
HWCryptoHook_MPI iqmp,
|
|
||||||
HWCryptoHook_MPI *r,
|
|
||||||
const HWCryptoHook_ErrMsgBuf *errors);
|
|
||||||
extern HWCryptoHook_RSAImmedPriv_t HWCryptoHook_RSAImmedPriv;
|
|
||||||
|
|
||||||
/* The RSAImmed* and ModExp* functions may return E_FAILED or
|
|
||||||
* E_FALLBACK for failure.
|
|
||||||
*
|
|
||||||
* E_FAILED means the failure is permanent and definite and there
|
|
||||||
* should be no attempt to fall back to software. (Eg, for some
|
|
||||||
* applications, which support only the acceleration-only
|
|
||||||
* functions, the `key material' may actually be an encoded key
|
|
||||||
* identifier, and doing the operation in software would give wrong
|
|
||||||
* answers.)
|
|
||||||
*
|
|
||||||
* E_FALLBACK means that doing the computation in software would seem
|
|
||||||
* reasonable. If an application pays attention to this and is
|
|
||||||
* able to fall back, it should also set the Fallback init flags.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef
|
|
||||||
int HWCryptoHook_RSALoadKey_t(HWCryptoHook_ContextHandle hwctx,
|
|
||||||
const char *key_ident,
|
|
||||||
HWCryptoHook_RSAKeyHandle *keyhandle_r,
|
|
||||||
const HWCryptoHook_ErrMsgBuf *errors,
|
|
||||||
HWCryptoHook_PassphraseContext *ppctx);
|
|
||||||
extern HWCryptoHook_RSALoadKey_t HWCryptoHook_RSALoadKey;
|
|
||||||
/* The key_ident is a null-terminated string configured by the
|
|
||||||
* user via the application's usual configuration mechanisms.
|
|
||||||
* It is provided to the user by the crypto provider's key management
|
|
||||||
* system. The user must be able to enter at least any string of between
|
|
||||||
* 1 and 1023 characters inclusive, consisting of printable 7-bit
|
|
||||||
* ASCII characters. The provider should avoid using
|
|
||||||
* any characters except alphanumerics and the punctuation
|
|
||||||
* characters _ - + . / @ ~ (the user is expected to be able
|
|
||||||
* to enter these without quoting). The string may be case-sensitive.
|
|
||||||
* The application may allow the user to enter other NULL-terminated strings,
|
|
||||||
* and the provider must cope (returning an error if the string is not
|
|
||||||
* valid).
|
|
||||||
*
|
|
||||||
* If the key does not exist, no error is recorded and 0 is returned;
|
|
||||||
* keyhandle_r will be set to 0 instead of to a key handle.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef
|
|
||||||
int HWCryptoHook_RSAGetPublicKey_t(HWCryptoHook_RSAKeyHandle k,
|
|
||||||
HWCryptoHook_MPI *n,
|
|
||||||
HWCryptoHook_MPI *e,
|
|
||||||
const HWCryptoHook_ErrMsgBuf *errors);
|
|
||||||
extern HWCryptoHook_RSAGetPublicKey_t HWCryptoHook_RSAGetPublicKey;
|
|
||||||
/* The crypto plugin will not store certificates.
|
|
||||||
*
|
|
||||||
* Although this function for acquiring the public key value is
|
|
||||||
* provided, it is not the purpose of this API to deal fully with the
|
|
||||||
* handling of the public key.
|
|
||||||
*
|
|
||||||
* It is expected that the crypto supplier's key generation program
|
|
||||||
* will provide general facilities for producing X.509
|
|
||||||
* self-certificates and certificate requests in PEM format. These
|
|
||||||
* will be given to the user so that they can configure them in the
|
|
||||||
* application, send them to CAs, or whatever.
|
|
||||||
*
|
|
||||||
* In case this kind of certificate handling is not appropriate, the
|
|
||||||
* crypto supplier's key generation program should be able to be
|
|
||||||
* configured not to generate such a self-certificate or certificate
|
|
||||||
* request. Then the application will need to do all of this, and
|
|
||||||
* will need to store and handle the public key and certificates
|
|
||||||
* itself.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef
|
|
||||||
int HWCryptoHook_RSAUnloadKey_t(HWCryptoHook_RSAKeyHandle k,
|
|
||||||
const HWCryptoHook_ErrMsgBuf *errors);
|
|
||||||
extern HWCryptoHook_RSAUnloadKey_t HWCryptoHook_RSAUnloadKey;
|
|
||||||
/* Might fail due to locking problems, or other serious internal problems. */
|
|
||||||
|
|
||||||
typedef
|
|
||||||
int HWCryptoHook_RSA_t(HWCryptoHook_MPI m,
|
|
||||||
HWCryptoHook_RSAKeyHandle k,
|
|
||||||
HWCryptoHook_MPI *r,
|
|
||||||
const HWCryptoHook_ErrMsgBuf *errors);
|
|
||||||
extern HWCryptoHook_RSA_t HWCryptoHook_RSA;
|
|
||||||
/* RSA private key operation (sign or decrypt) - raw, unpadded. */
|
|
||||||
|
|
||||||
#endif /*HWCRYPTOHOOK_H*/
|
|
@ -1,239 +0,0 @@
|
|||||||
/*
|
|
||||||
* Written by Corinne Dive-Reclus(cdive@baltimore.com)
|
|
||||||
*
|
|
||||||
* Copyright@2001 Baltimore Technologies Ltd.
|
|
||||||
* *
|
|
||||||
* THIS FILE IS PROVIDED BY BALTIMORE TECHNOLOGIES ``AS IS'' AND *
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE *
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE *
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL BALTIMORE TECHNOLOGIES BE LIABLE *
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL *
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS *
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT *
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF *
|
|
||||||
* SUCH DAMAGE. *
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#ifdef WIN32
|
|
||||||
#define SW_EXPORT __declspec ( dllexport )
|
|
||||||
#else
|
|
||||||
#define SW_EXPORT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* List of exposed SureWare errors
|
|
||||||
*/
|
|
||||||
#define SUREWAREHOOK_ERROR_FAILED -1
|
|
||||||
#define SUREWAREHOOK_ERROR_FALLBACK -2
|
|
||||||
#define SUREWAREHOOK_ERROR_UNIT_FAILURE -3
|
|
||||||
#define SUREWAREHOOK_ERROR_DATA_SIZE -4
|
|
||||||
#define SUREWAREHOOK_ERROR_INVALID_PAD -5
|
|
||||||
/*
|
|
||||||
* -----------------WARNING-----------------------------------
|
|
||||||
* In all the following functions:
|
|
||||||
* msg is a string with at least 24 bytes free.
|
|
||||||
* A 24 bytes string will be concatenated to the existing content of msg.
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* SureWare Initialisation function
|
|
||||||
* in param threadsafe, if !=0, thread safe enabled
|
|
||||||
* return SureWareHOOK_ERROR_UNIT_FAILURE if failure, 1 if success
|
|
||||||
*/
|
|
||||||
typedef int SureWareHook_Init_t(char*const msg,int threadsafe);
|
|
||||||
extern SW_EXPORT SureWareHook_Init_t SureWareHook_Init;
|
|
||||||
/*
|
|
||||||
* SureWare Finish function
|
|
||||||
*/
|
|
||||||
typedef void SureWareHook_Finish_t();
|
|
||||||
extern SW_EXPORT SureWareHook_Finish_t SureWareHook_Finish;
|
|
||||||
/*
|
|
||||||
* PRE_CONDITION:
|
|
||||||
* DO NOT CALL ANY OF THE FOLLOWING FUNCTIONS IN CASE OF INIT FAILURE
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* SureWare RAND Bytes function
|
|
||||||
* In case of failure, the content of buf is unpredictable.
|
|
||||||
* return 1 if success
|
|
||||||
* SureWareHOOK_ERROR_FALLBACK if function not available in hardware
|
|
||||||
* SureWareHOOK_ERROR_FAILED if error while processing
|
|
||||||
* SureWareHOOK_ERROR_UNIT_FAILURE if hardware failure
|
|
||||||
* SUREWAREHOOK_ERROR_DATA_SIZE wrong size for buf
|
|
||||||
*
|
|
||||||
* in/out param buf : a num bytes long buffer where random bytes will be put
|
|
||||||
* in param num : the number of bytes into buf
|
|
||||||
*/
|
|
||||||
typedef int SureWareHook_Rand_Bytes_t(char*const msg,unsigned char *buf, int num);
|
|
||||||
extern SW_EXPORT SureWareHook_Rand_Bytes_t SureWareHook_Rand_Bytes;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* SureWare RAND Seed function
|
|
||||||
* Adds some seed to the Hardware Random Number Generator
|
|
||||||
* return 1 if success
|
|
||||||
* SureWareHOOK_ERROR_FALLBACK if function not available in hardware
|
|
||||||
* SureWareHOOK_ERROR_FAILED if error while processing
|
|
||||||
* SureWareHOOK_ERROR_UNIT_FAILURE if hardware failure
|
|
||||||
* SUREWAREHOOK_ERROR_DATA_SIZE wrong size for buf
|
|
||||||
*
|
|
||||||
* in param buf : the seed to add into the HRNG
|
|
||||||
* in param num : the number of bytes into buf
|
|
||||||
*/
|
|
||||||
typedef int SureWareHook_Rand_Seed_t(char*const msg,const void *buf, int num);
|
|
||||||
extern SW_EXPORT SureWareHook_Rand_Seed_t SureWareHook_Rand_Seed;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* SureWare Load Private Key function
|
|
||||||
* return 1 if success
|
|
||||||
* SureWareHOOK_ERROR_FAILED if error while processing
|
|
||||||
* No hardware is contact for this function.
|
|
||||||
*
|
|
||||||
* in param key_id :the name of the private protected key file without the extension
|
|
||||||
".sws"
|
|
||||||
* out param hptr : a pointer to a buffer allocated by SureWare_Hook
|
|
||||||
* out param num: the effective key length in bytes
|
|
||||||
* out param keytype: 1 if RSA 2 if DSA
|
|
||||||
*/
|
|
||||||
typedef int SureWareHook_Load_Privkey_t(char*const msg,const char *key_id,char **hptr,unsigned long *num,char *keytype);
|
|
||||||
extern SW_EXPORT SureWareHook_Load_Privkey_t SureWareHook_Load_Privkey;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* SureWare Info Public Key function
|
|
||||||
* return 1 if success
|
|
||||||
* SureWareHOOK_ERROR_FAILED if error while processing
|
|
||||||
* No hardware is contact for this function.
|
|
||||||
*
|
|
||||||
* in param key_id :the name of the private protected key file without the extension
|
|
||||||
".swp"
|
|
||||||
* out param hptr : a pointer to a buffer allocated by SureWare_Hook
|
|
||||||
* out param num: the effective key length in bytes
|
|
||||||
* out param keytype: 1 if RSA 2 if DSA
|
|
||||||
*/
|
|
||||||
typedef int SureWareHook_Info_Pubkey_t(char*const msg,const char *key_id,unsigned long *num,
|
|
||||||
char *keytype);
|
|
||||||
extern SW_EXPORT SureWareHook_Info_Pubkey_t SureWareHook_Info_Pubkey;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* SureWare Load Public Key function
|
|
||||||
* return 1 if success
|
|
||||||
* SureWareHOOK_ERROR_FAILED if error while processing
|
|
||||||
* No hardware is contact for this function.
|
|
||||||
*
|
|
||||||
* in param key_id :the name of the public protected key file without the extension
|
|
||||||
".swp"
|
|
||||||
* in param num : the bytes size of n and e
|
|
||||||
* out param n: where to write modulus in bn format
|
|
||||||
* out param e: where to write exponent in bn format
|
|
||||||
*/
|
|
||||||
typedef int SureWareHook_Load_Rsa_Pubkey_t(char*const msg,const char *key_id,unsigned long num,
|
|
||||||
unsigned long *n, unsigned long *e);
|
|
||||||
extern SW_EXPORT SureWareHook_Load_Rsa_Pubkey_t SureWareHook_Load_Rsa_Pubkey;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* SureWare Load DSA Public Key function
|
|
||||||
* return 1 if success
|
|
||||||
* SureWareHOOK_ERROR_FAILED if error while processing
|
|
||||||
* No hardware is contact for this function.
|
|
||||||
*
|
|
||||||
* in param key_id :the name of the public protected key file without the extension
|
|
||||||
".swp"
|
|
||||||
* in param num : the bytes size of n and e
|
|
||||||
* out param pub: where to write pub key in bn format
|
|
||||||
* out param p: where to write prime in bn format
|
|
||||||
* out param q: where to write sunprime (length 20 bytes) in bn format
|
|
||||||
* out param g: where to write base in bn format
|
|
||||||
*/
|
|
||||||
typedef int SureWareHook_Load_Dsa_Pubkey_t(char*const msg,const char *key_id,unsigned long num,
|
|
||||||
unsigned long *pub, unsigned long *p,unsigned long*q,
|
|
||||||
unsigned long *g);
|
|
||||||
extern SW_EXPORT SureWareHook_Load_Dsa_Pubkey_t SureWareHook_Load_Dsa_Pubkey;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* SureWare Free function
|
|
||||||
* Destroy the key into the hardware if destroy==1
|
|
||||||
*/
|
|
||||||
typedef void SureWareHook_Free_t(char *p,int destroy);
|
|
||||||
extern SW_EXPORT SureWareHook_Free_t SureWareHook_Free;
|
|
||||||
|
|
||||||
#define SUREWARE_PKCS1_PAD 1
|
|
||||||
#define SUREWARE_ISO9796_PAD 2
|
|
||||||
#define SUREWARE_NO_PAD 0
|
|
||||||
/*
|
|
||||||
* SureWare RSA Private Decryption
|
|
||||||
* return 1 if success
|
|
||||||
* SureWareHOOK_ERROR_FAILED if error while processing
|
|
||||||
* SureWareHOOK_ERROR_UNIT_FAILURE if hardware failure
|
|
||||||
* SUREWAREHOOK_ERROR_DATA_SIZE wrong size for buf
|
|
||||||
*
|
|
||||||
* in param flen : byte size of from and to
|
|
||||||
* in param from : encrypted data buffer, should be a not-null valid pointer
|
|
||||||
* out param tlen: byte size of decrypted data, if error, unexpected value
|
|
||||||
* out param to : decrypted data buffer, should be a not-null valid pointer
|
|
||||||
* in param prsa: a protected key pointer, should be a not-null valid pointer
|
|
||||||
* int padding: padding id as follow
|
|
||||||
* SUREWARE_PKCS1_PAD
|
|
||||||
* SUREWARE_NO_PAD
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
typedef int SureWareHook_Rsa_Priv_Dec_t(char*const msg,int flen,unsigned char *from,
|
|
||||||
int *tlen,unsigned char *to,
|
|
||||||
char *prsa,int padding);
|
|
||||||
extern SW_EXPORT SureWareHook_Rsa_Priv_Dec_t SureWareHook_Rsa_Priv_Dec;
|
|
||||||
/*
|
|
||||||
* SureWare RSA Signature
|
|
||||||
* return 1 if success
|
|
||||||
* SureWareHOOK_ERROR_FAILED if error while processing
|
|
||||||
* SureWareHOOK_ERROR_UNIT_FAILURE if hardware failure
|
|
||||||
* SUREWAREHOOK_ERROR_DATA_SIZE wrong size for buf
|
|
||||||
*
|
|
||||||
* in param flen : byte size of from and to
|
|
||||||
* in param from : encrypted data buffer, should be a not-null valid pointer
|
|
||||||
* out param tlen: byte size of decrypted data, if error, unexpected value
|
|
||||||
* out param to : decrypted data buffer, should be a not-null valid pointer
|
|
||||||
* in param prsa: a protected key pointer, should be a not-null valid pointer
|
|
||||||
* int padding: padding id as follow
|
|
||||||
* SUREWARE_PKCS1_PAD
|
|
||||||
* SUREWARE_ISO9796_PAD
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
typedef int SureWareHook_Rsa_Sign_t(char*const msg,int flen,unsigned char *from,
|
|
||||||
int *tlen,unsigned char *to,
|
|
||||||
char *prsa,int padding);
|
|
||||||
extern SW_EXPORT SureWareHook_Rsa_Sign_t SureWareHook_Rsa_Sign;
|
|
||||||
/*
|
|
||||||
* SureWare DSA Signature
|
|
||||||
* return 1 if success
|
|
||||||
* SureWareHOOK_ERROR_FAILED if error while processing
|
|
||||||
* SureWareHOOK_ERROR_UNIT_FAILURE if hardware failure
|
|
||||||
* SUREWAREHOOK_ERROR_DATA_SIZE wrong size for buf
|
|
||||||
*
|
|
||||||
* in param flen : byte size of from and to
|
|
||||||
* in param from : encrypted data buffer, should be a not-null valid pointer
|
|
||||||
* out param to : decrypted data buffer, should be a 40bytes valid pointer
|
|
||||||
* in param pdsa: a protected key pointer, should be a not-null valid pointer
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
typedef int SureWareHook_Dsa_Sign_t(char*const msg,int flen,const unsigned char *from,
|
|
||||||
unsigned long *r,unsigned long *s,char *pdsa);
|
|
||||||
extern SW_EXPORT SureWareHook_Dsa_Sign_t SureWareHook_Dsa_Sign;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* SureWare Mod Exp
|
|
||||||
* return 1 if success
|
|
||||||
* SureWareHOOK_ERROR_FAILED if error while processing
|
|
||||||
* SureWareHOOK_ERROR_UNIT_FAILURE if hardware failure
|
|
||||||
* SUREWAREHOOK_ERROR_DATA_SIZE wrong size for buf
|
|
||||||
*
|
|
||||||
* mod and res are mlen bytes long.
|
|
||||||
* exp is elen bytes long
|
|
||||||
* data is dlen bytes long
|
|
||||||
* mlen,elen and dlen are all multiple of sizeof(unsigned long)
|
|
||||||
*/
|
|
||||||
typedef int SureWareHook_Mod_Exp_t(char*const msg,int mlen,const unsigned long *mod,
|
|
||||||
int elen,const unsigned long *exp,
|
|
||||||
int dlen,unsigned long *data,
|
|
||||||
unsigned long *res);
|
|
||||||
extern SW_EXPORT SureWareHook_Mod_Exp_t SureWareHook_Mod_Exp;
|
|
||||||
|
|
@ -1,434 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
|
|
||||||
package alpha;
|
|
||||||
use Carp qw(croak cluck);
|
|
||||||
|
|
||||||
$label="100";
|
|
||||||
|
|
||||||
$n_debug=0;
|
|
||||||
$smear_regs=1;
|
|
||||||
$reg_alloc=1;
|
|
||||||
|
|
||||||
$align="3";
|
|
||||||
$com_start="#";
|
|
||||||
|
|
||||||
sub main'asm_init_output { @out=(); }
|
|
||||||
sub main'asm_get_output { return(@out); }
|
|
||||||
sub main'get_labels { return(@labels); }
|
|
||||||
sub main'external_label { push(@labels,@_); }
|
|
||||||
|
|
||||||
# General registers
|
|
||||||
|
|
||||||
%regs=( 'r0', '$0',
|
|
||||||
'r1', '$1',
|
|
||||||
'r2', '$2',
|
|
||||||
'r3', '$3',
|
|
||||||
'r4', '$4',
|
|
||||||
'r5', '$5',
|
|
||||||
'r6', '$6',
|
|
||||||
'r7', '$7',
|
|
||||||
'r8', '$8',
|
|
||||||
'r9', '$22',
|
|
||||||
'r10', '$23',
|
|
||||||
'r11', '$24',
|
|
||||||
'r12', '$25',
|
|
||||||
'r13', '$27',
|
|
||||||
'r14', '$28',
|
|
||||||
'r15', '$21', # argc == 5
|
|
||||||
'r16', '$20', # argc == 4
|
|
||||||
'r17', '$19', # argc == 3
|
|
||||||
'r18', '$18', # argc == 2
|
|
||||||
'r19', '$17', # argc == 1
|
|
||||||
'r20', '$16', # argc == 0
|
|
||||||
'r21', '$9', # save 0
|
|
||||||
'r22', '$10', # save 1
|
|
||||||
'r23', '$11', # save 2
|
|
||||||
'r24', '$12', # save 3
|
|
||||||
'r25', '$13', # save 4
|
|
||||||
'r26', '$14', # save 5
|
|
||||||
|
|
||||||
'a0', '$16',
|
|
||||||
'a1', '$17',
|
|
||||||
'a2', '$18',
|
|
||||||
'a3', '$19',
|
|
||||||
'a4', '$20',
|
|
||||||
'a5', '$21',
|
|
||||||
|
|
||||||
's0', '$9',
|
|
||||||
's1', '$10',
|
|
||||||
's2', '$11',
|
|
||||||
's3', '$12',
|
|
||||||
's4', '$13',
|
|
||||||
's5', '$14',
|
|
||||||
'zero', '$31',
|
|
||||||
'sp', '$30',
|
|
||||||
);
|
|
||||||
|
|
||||||
$main'reg_s0="r21";
|
|
||||||
$main'reg_s1="r22";
|
|
||||||
$main'reg_s2="r23";
|
|
||||||
$main'reg_s3="r24";
|
|
||||||
$main'reg_s4="r25";
|
|
||||||
$main'reg_s5="r26";
|
|
||||||
|
|
||||||
@reg=( '$0', '$1' ,'$2' ,'$3' ,'$4' ,'$5' ,'$6' ,'$7' ,'$8',
|
|
||||||
'$22','$23','$24','$25','$20','$21','$27','$28');
|
|
||||||
|
|
||||||
|
|
||||||
sub main'sub { &out3("subq",@_); }
|
|
||||||
sub main'add { &out3("addq",@_); }
|
|
||||||
sub main'mov { &out3("bis",$_[0],$_[0],$_[1]); }
|
|
||||||
sub main'or { &out3("bis",@_); }
|
|
||||||
sub main'bis { &out3("bis",@_); }
|
|
||||||
sub main'br { &out1("br",@_); }
|
|
||||||
sub main'ld { &out2("ldq",@_); }
|
|
||||||
sub main'st { &out2("stq",@_); }
|
|
||||||
sub main'cmpult { &out3("cmpult",@_); }
|
|
||||||
sub main'cmplt { &out3("cmplt",@_); }
|
|
||||||
sub main'bgt { &out2("bgt",@_); }
|
|
||||||
sub main'ble { &out2("ble",@_); }
|
|
||||||
sub main'blt { &out2("blt",@_); }
|
|
||||||
sub main'mul { &out3("mulq",@_); }
|
|
||||||
sub main'muh { &out3("umulh",@_); }
|
|
||||||
|
|
||||||
$main'QWS=8;
|
|
||||||
|
|
||||||
sub main'asm_add
|
|
||||||
{
|
|
||||||
push(@out,@_);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'asm_finish
|
|
||||||
{
|
|
||||||
&main'file_end();
|
|
||||||
print &main'asm_get_output();
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'asm_init
|
|
||||||
{
|
|
||||||
($type,$fn)=@_;
|
|
||||||
$filename=$fn;
|
|
||||||
|
|
||||||
&main'asm_init_output();
|
|
||||||
&main'comment("Don't even think of reading this code");
|
|
||||||
&main'comment("It was automatically generated by $filename");
|
|
||||||
&main'comment("Which is a perl program used to generate the alpha assember.");
|
|
||||||
&main'comment("eric <eay\@cryptsoft.com>");
|
|
||||||
&main'comment("");
|
|
||||||
|
|
||||||
$filename =~ s/\.pl$//;
|
|
||||||
&main'file($filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub conv
|
|
||||||
{
|
|
||||||
local($r)=@_;
|
|
||||||
local($v);
|
|
||||||
|
|
||||||
return($regs{$r}) if defined($regs{$r});
|
|
||||||
return($r);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'QWPw
|
|
||||||
{
|
|
||||||
local($off,$reg)=@_;
|
|
||||||
|
|
||||||
return(&main'QWP($off*8,$reg));
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'QWP
|
|
||||||
{
|
|
||||||
local($off,$reg)=@_;
|
|
||||||
|
|
||||||
$ret="$off(".&conv($reg).")";
|
|
||||||
return($ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub out3
|
|
||||||
{
|
|
||||||
local($name,$p1,$p2,$p3)=@_;
|
|
||||||
|
|
||||||
$p1=&conv($p1);
|
|
||||||
$p2=&conv($p2);
|
|
||||||
$p3=&conv($p3);
|
|
||||||
push(@out,"\t$name\t");
|
|
||||||
$l=length($p1)+1;
|
|
||||||
push(@out,$p1.",");
|
|
||||||
$ll=3-($l+9)/8;
|
|
||||||
$tmp1=sprintf("\t" x $ll);
|
|
||||||
push(@out,$tmp1);
|
|
||||||
|
|
||||||
$l=length($p2)+1;
|
|
||||||
push(@out,$p2.",");
|
|
||||||
$ll=3-($l+9)/8;
|
|
||||||
$tmp1=sprintf("\t" x $ll);
|
|
||||||
push(@out,$tmp1);
|
|
||||||
|
|
||||||
push(@out,&conv($p3)."\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
sub out2
|
|
||||||
{
|
|
||||||
local($name,$p1,$p2,$p3)=@_;
|
|
||||||
|
|
||||||
$p1=&conv($p1);
|
|
||||||
$p2=&conv($p2);
|
|
||||||
push(@out,"\t$name\t");
|
|
||||||
$l=length($p1)+1;
|
|
||||||
push(@out,$p1.",");
|
|
||||||
$ll=3-($l+9)/8;
|
|
||||||
$tmp1=sprintf("\t" x $ll);
|
|
||||||
push(@out,$tmp1);
|
|
||||||
|
|
||||||
push(@out,&conv($p2)."\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
sub out1
|
|
||||||
{
|
|
||||||
local($name,$p1)=@_;
|
|
||||||
|
|
||||||
$p1=&conv($p1);
|
|
||||||
push(@out,"\t$name\t".$p1."\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
sub out0
|
|
||||||
{
|
|
||||||
push(@out,"\t$_[0]\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'file
|
|
||||||
{
|
|
||||||
local($file)=@_;
|
|
||||||
|
|
||||||
local($tmp)=<<"EOF";
|
|
||||||
# DEC Alpha assember
|
|
||||||
# Generated from perl scripts contains in SSLeay
|
|
||||||
.file 1 "$file.s"
|
|
||||||
.set noat
|
|
||||||
EOF
|
|
||||||
push(@out,$tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'function_begin
|
|
||||||
{
|
|
||||||
local($func)=@_;
|
|
||||||
|
|
||||||
print STDERR "$func\n";
|
|
||||||
local($tmp)=<<"EOF";
|
|
||||||
.text
|
|
||||||
.align $align
|
|
||||||
.globl $func
|
|
||||||
.ent $func
|
|
||||||
${func}:
|
|
||||||
${func}..ng:
|
|
||||||
.frame \$30,0,\$26,0
|
|
||||||
.prologue 0
|
|
||||||
EOF
|
|
||||||
push(@out,$tmp);
|
|
||||||
$stack=0;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'function_end
|
|
||||||
{
|
|
||||||
local($func)=@_;
|
|
||||||
|
|
||||||
local($tmp)=<<"EOF";
|
|
||||||
ret \$31,(\$26),1
|
|
||||||
.end $func
|
|
||||||
EOF
|
|
||||||
push(@out,$tmp);
|
|
||||||
$stack=0;
|
|
||||||
%label=();
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'function_end_A
|
|
||||||
{
|
|
||||||
local($func)=@_;
|
|
||||||
|
|
||||||
local($tmp)=<<"EOF";
|
|
||||||
ret \$31,(\$26),1
|
|
||||||
EOF
|
|
||||||
push(@out,$tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'function_end_B
|
|
||||||
{
|
|
||||||
local($func)=@_;
|
|
||||||
|
|
||||||
$func=$under.$func;
|
|
||||||
|
|
||||||
push(@out,"\t.end $func\n");
|
|
||||||
$stack=0;
|
|
||||||
%label=();
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'wparam
|
|
||||||
{
|
|
||||||
local($num)=@_;
|
|
||||||
|
|
||||||
if ($num < 6)
|
|
||||||
{
|
|
||||||
$num=20-$num;
|
|
||||||
return("r$num");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ return(&main'QWP($stack+$num*8,"sp")); }
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'stack_push
|
|
||||||
{
|
|
||||||
local($num)=@_;
|
|
||||||
$stack+=$num*8;
|
|
||||||
&main'sub("sp",$num*8,"sp");
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'stack_pop
|
|
||||||
{
|
|
||||||
local($num)=@_;
|
|
||||||
$stack-=$num*8;
|
|
||||||
&main'add("sp",$num*8,"sp");
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'swtmp
|
|
||||||
{
|
|
||||||
return(&main'QWP(($_[0])*8,"sp"));
|
|
||||||
}
|
|
||||||
|
|
||||||
# Should use swtmp, which is above sp. Linix can trash the stack above esp
|
|
||||||
#sub main'wtmp
|
|
||||||
# {
|
|
||||||
# local($num)=@_;
|
|
||||||
#
|
|
||||||
# return(&main'QWP(-($num+1)*4,"esp","",0));
|
|
||||||
# }
|
|
||||||
|
|
||||||
sub main'comment
|
|
||||||
{
|
|
||||||
foreach (@_)
|
|
||||||
{
|
|
||||||
if (/^\s*$/)
|
|
||||||
{ push(@out,"\n"); }
|
|
||||||
else
|
|
||||||
{ push(@out,"\t$com_start $_ $com_end\n"); }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'label
|
|
||||||
{
|
|
||||||
if (!defined($label{$_[0]}))
|
|
||||||
{
|
|
||||||
$label{$_[0]}=$label;
|
|
||||||
$label++;
|
|
||||||
}
|
|
||||||
return('$'.$label{$_[0]});
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'set_label
|
|
||||||
{
|
|
||||||
if (!defined($label{$_[0]}))
|
|
||||||
{
|
|
||||||
$label{$_[0]}=$label;
|
|
||||||
$label++;
|
|
||||||
}
|
|
||||||
# push(@out,".align $align\n") if ($_[1] != 0);
|
|
||||||
push(@out,'$'."$label{$_[0]}:\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'file_end
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'data_word
|
|
||||||
{
|
|
||||||
push(@out,"\t.long $_[0]\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
@pool_free=();
|
|
||||||
@pool_taken=();
|
|
||||||
$curr_num=0;
|
|
||||||
$max=0;
|
|
||||||
|
|
||||||
sub main'init_pool
|
|
||||||
{
|
|
||||||
local($args)=@_;
|
|
||||||
local($i);
|
|
||||||
|
|
||||||
@pool_free=();
|
|
||||||
for ($i=(14+(6-$args)); $i >= 0; $i--)
|
|
||||||
{
|
|
||||||
push(@pool_free,"r$i");
|
|
||||||
}
|
|
||||||
print STDERR "START :register pool:@pool_free\n";
|
|
||||||
$curr_num=$max=0;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'fin_pool
|
|
||||||
{
|
|
||||||
printf STDERR "END %2d:register pool:@pool_free\n",$max;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'GR
|
|
||||||
{
|
|
||||||
local($r)=@_;
|
|
||||||
local($i,@n,$_);
|
|
||||||
|
|
||||||
foreach (@pool_free)
|
|
||||||
{
|
|
||||||
if ($r ne $_)
|
|
||||||
{ push(@n,$_); }
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$curr_num++;
|
|
||||||
$max=$curr_num if ($curr_num > $max);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@pool_free=@n;
|
|
||||||
print STDERR "GR:@pool_free\n" if $reg_alloc;
|
|
||||||
return(@_);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'NR
|
|
||||||
{
|
|
||||||
local($num)=@_;
|
|
||||||
local(@ret);
|
|
||||||
|
|
||||||
$num=1 if $num == 0;
|
|
||||||
($#pool_free >= ($num-1)) || croak "out of registers: want $num, have @pool_free";
|
|
||||||
while ($num > 0)
|
|
||||||
{
|
|
||||||
push(@ret,pop @pool_free);
|
|
||||||
$curr_num++;
|
|
||||||
$max=$curr_num if ($curr_num > $max);
|
|
||||||
$num--
|
|
||||||
}
|
|
||||||
print STDERR "nr @ret\n" if $n_debug;
|
|
||||||
print STDERR "NR:@pool_free\n" if $reg_alloc;
|
|
||||||
return(@ret);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main'FR
|
|
||||||
{
|
|
||||||
local(@r)=@_;
|
|
||||||
local(@a,$v,$w);
|
|
||||||
|
|
||||||
print STDERR "fr @r\n" if $n_debug;
|
|
||||||
# cluck "fr @r";
|
|
||||||
for $w (@pool_free)
|
|
||||||
{
|
|
||||||
foreach $v (@r)
|
|
||||||
{
|
|
||||||
croak "double register free of $v (@pool_free)" if $w eq $v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach $v (@r)
|
|
||||||
{
|
|
||||||
croak "bad argument to FR" if ($v !~ /^r\d+$/);
|
|
||||||
if ($smear_regs)
|
|
||||||
{ unshift(@pool_free,$v); }
|
|
||||||
else { push(@pool_free,$v); }
|
|
||||||
$curr_num--;
|
|
||||||
}
|
|
||||||
print STDERR "FR:@pool_free\n" if $reg_alloc;
|
|
||||||
}
|
|
||||||
1;
|
|
113
test/testfipsssl
113
test/testfipsssl
@ -1,113 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
if [ "$1" = "" ]; then
|
|
||||||
key=../apps/server.pem
|
|
||||||
else
|
|
||||||
key="$1"
|
|
||||||
fi
|
|
||||||
if [ "$2" = "" ]; then
|
|
||||||
cert=../apps/server.pem
|
|
||||||
else
|
|
||||||
cert="$2"
|
|
||||||
fi
|
|
||||||
|
|
||||||
ciphers="DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:AES256-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DES-CBC3-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:AES128-SHA:EXP1024-DHE-DSS-DES-CBC-SHA:EXP1024-DES-CBC-SHA:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA"
|
|
||||||
|
|
||||||
ssltest="./ssltest -F -key $key -cert $cert -c_key $key -c_cert $cert -cipher $ciphers"
|
|
||||||
|
|
||||||
if ../apps/openssl x509 -in $cert -text -noout | fgrep 'DSA Public Key' >/dev/null; then
|
|
||||||
dsa_cert=YES
|
|
||||||
else
|
|
||||||
dsa_cert=NO
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$3" = "" ]; then
|
|
||||||
CA="-CApath ../certs"
|
|
||||||
else
|
|
||||||
CA="-CAfile $3"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$4" = "" ]; then
|
|
||||||
extra=""
|
|
||||||
else
|
|
||||||
extra="$4"
|
|
||||||
fi
|
|
||||||
|
|
||||||
#############################################################################
|
|
||||||
|
|
||||||
echo test ssl3 is forbidden in FIPS mode
|
|
||||||
$ssltest -ssl3 $extra && exit 1
|
|
||||||
|
|
||||||
echo test ssl2 is forbidden in FIPS mode
|
|
||||||
$ssltest -ssl2 $extra && exit 1
|
|
||||||
|
|
||||||
echo test tls1
|
|
||||||
$ssltest -tls1 $extra || exit 1
|
|
||||||
|
|
||||||
echo test tls1 with server authentication
|
|
||||||
$ssltest -tls1 -server_auth $CA $extra || exit 1
|
|
||||||
|
|
||||||
echo test tls1 with client authentication
|
|
||||||
$ssltest -tls1 -client_auth $CA $extra || exit 1
|
|
||||||
|
|
||||||
echo test tls1 with both client and server authentication
|
|
||||||
$ssltest -tls1 -server_auth -client_auth $CA $extra || exit 1
|
|
||||||
|
|
||||||
echo test tls1 via BIO pair
|
|
||||||
$ssltest -bio_pair -tls1 $extra || exit 1
|
|
||||||
|
|
||||||
echo test tls1 with server authentication via BIO pair
|
|
||||||
$ssltest -bio_pair -tls1 -server_auth $CA $extra || exit 1
|
|
||||||
|
|
||||||
echo test tls1 with client authentication via BIO pair
|
|
||||||
$ssltest -bio_pair -tls1 -client_auth $CA $extra || exit 1
|
|
||||||
|
|
||||||
echo test tls1 with both client and server authentication via BIO pair
|
|
||||||
$ssltest -bio_pair -tls1 -server_auth -client_auth $CA $extra || exit 1
|
|
||||||
|
|
||||||
# note that all the below actually choose TLS...
|
|
||||||
|
|
||||||
if [ $dsa_cert = NO ]; then
|
|
||||||
echo test sslv2/sslv3 w/o DHE via BIO pair
|
|
||||||
$ssltest -bio_pair -no_dhe $extra || exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo test sslv2/sslv3 with 1024bit DHE via BIO pair
|
|
||||||
$ssltest -bio_pair -dhe1024dsa -v $extra || exit 1
|
|
||||||
|
|
||||||
echo test sslv2/sslv3 with server authentication
|
|
||||||
$ssltest -bio_pair -server_auth $CA $extra || exit 1
|
|
||||||
|
|
||||||
echo test sslv2/sslv3 with client authentication via BIO pair
|
|
||||||
$ssltest -bio_pair -client_auth $CA $extra || exit 1
|
|
||||||
|
|
||||||
echo test sslv2/sslv3 with both client and server authentication via BIO pair
|
|
||||||
$ssltest -bio_pair -server_auth -client_auth $CA $extra || exit 1
|
|
||||||
|
|
||||||
echo test sslv2/sslv3 with both client and server authentication via BIO pair and app verify
|
|
||||||
$ssltest -bio_pair -server_auth -client_auth -app_verify $CA $extra || exit 1
|
|
||||||
|
|
||||||
#############################################################################
|
|
||||||
|
|
||||||
if ../apps/openssl no-dh; then
|
|
||||||
echo skipping anonymous DH tests
|
|
||||||
else
|
|
||||||
echo test tls1 with 1024bit anonymous DH, multiple handshakes
|
|
||||||
$ssltest -v -bio_pair -tls1 -cipher ADH -dhe1024dsa -num 10 -f -time $extra || exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ../apps/openssl no-rsa; then
|
|
||||||
echo skipping RSA tests
|
|
||||||
else
|
|
||||||
echo test tls1 with 1024bit RSA, no DHE, multiple handshakes
|
|
||||||
./ssltest -v -bio_pair -tls1 -cert ../apps/server2.pem -no_dhe -num 10 -f -time $extra || exit 1
|
|
||||||
|
|
||||||
if ../apps/openssl no-dh; then
|
|
||||||
echo skipping RSA+DHE tests
|
|
||||||
else
|
|
||||||
echo test tls1 with 1024bit RSA, 1024bit DHE, multiple handshakes
|
|
||||||
./ssltest -v -bio_pair -tls1 -cert ../apps/server2.pem -dhe1024dsa -num 10 -f -time $extra || exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
|
151
util/pl/BC-16.pl
151
util/pl/BC-16.pl
@ -1,151 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# VCw16lib.pl - the file for Visual C++ 1.52b for windows, static libraries
|
|
||||||
#
|
|
||||||
|
|
||||||
$o='\\';
|
|
||||||
$cp='copy';
|
|
||||||
$rm='del';
|
|
||||||
|
|
||||||
# C compiler stuff
|
|
||||||
$cc='bcc';
|
|
||||||
|
|
||||||
if ($debug)
|
|
||||||
{ $op="-v "; }
|
|
||||||
else { $op="-O "; }
|
|
||||||
|
|
||||||
$cflags="-d -ml $op -DL_ENDIAN";
|
|
||||||
# I add the stack opt
|
|
||||||
$base_lflags="/c /C";
|
|
||||||
$lflags="$base_lflags";
|
|
||||||
|
|
||||||
if ($win16)
|
|
||||||
{
|
|
||||||
$shlib=1;
|
|
||||||
$cflags.=" -DOPENSSL_SYSNAME_WIN16";
|
|
||||||
$app_cflag="-W";
|
|
||||||
$lib_cflag="-WD";
|
|
||||||
$lflags.="/Twe";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$cflags.=" -DOENSSL_SYSNAME_MSDOS";
|
|
||||||
$lflags.=" /Tde";
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($shlib)
|
|
||||||
{
|
|
||||||
$mlflags=" /Twd $base_lflags"; # stack if defined in .def file
|
|
||||||
$libs="libw ldllcew";
|
|
||||||
$no_asm=1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ $mlflags=''; }
|
|
||||||
|
|
||||||
$obj='.obj';
|
|
||||||
$ofile="-o";
|
|
||||||
|
|
||||||
# EXE linking stuff
|
|
||||||
$link="tlink";
|
|
||||||
$efile="";
|
|
||||||
$exep='.exe';
|
|
||||||
$ex_libs="CL";
|
|
||||||
$ex_libs.=$no_sock?"":" winsock.lib";
|
|
||||||
|
|
||||||
$app_ex_obj="C0L.obj ";
|
|
||||||
$shlib_ex_obj="" if ($shlib);
|
|
||||||
|
|
||||||
# static library stuff
|
|
||||||
$mklib='tlib';
|
|
||||||
$ranlib='echo no ranlib';
|
|
||||||
$plib="";
|
|
||||||
$libp=".lib";
|
|
||||||
$shlibp=($shlib)?".dll":".lib";
|
|
||||||
$lfile='';
|
|
||||||
|
|
||||||
$asm='bcc -c -B -Tml';
|
|
||||||
$afile='/o';
|
|
||||||
if ($no_asm || $fips)
|
|
||||||
{
|
|
||||||
$bn_asm_obj='';
|
|
||||||
$bn_asm_src='';
|
|
||||||
}
|
|
||||||
elsif ($asmbits == 32)
|
|
||||||
{
|
|
||||||
$bn_asm_obj='crypto\bn\asm\x86w32.obj';
|
|
||||||
$bn_asm_src='crypto\bn\asm\x86w32.asm';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$bn_asm_obj='crypto\bn\asm\x86w16.obj';
|
|
||||||
$bn_asm_src='crypto\bn\asm\x86w16.asm';
|
|
||||||
}
|
|
||||||
|
|
||||||
sub do_lib_rule
|
|
||||||
{
|
|
||||||
local($target,$name,$shlib)=@_;
|
|
||||||
local($ret,$Name);
|
|
||||||
|
|
||||||
$taget =~ s/\//$o/g if $o ne '/';
|
|
||||||
($Name=$name) =~ tr/a-z/A-Z/;
|
|
||||||
|
|
||||||
$ret.="$target: \$(${Name}OBJ)\n";
|
|
||||||
$ret.="\t\$(RM) \$(O_$Name)\n";
|
|
||||||
|
|
||||||
# Due to a pathetic line length limit, I unwrap the args.
|
|
||||||
local($lib_names)="";
|
|
||||||
local($dll_names)="";
|
|
||||||
foreach $_ (sort split(/\s+/,$Vars{"${Name}OBJ"}))
|
|
||||||
{
|
|
||||||
$lib_names.=" +$_ &\n";
|
|
||||||
$dll_names.=" $_\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$shlib)
|
|
||||||
{
|
|
||||||
$ret.="\t\$(MKLIB) $target & <<|\n$lib_names\n,\n|\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
local($ex)=($Name eq "SSL")?' $(L_CRYPTO) winsock':"";
|
|
||||||
$ret.="\t\$(LINK) \$(MLFLAGS) @&&|\n";
|
|
||||||
$ret.=$dll_names;
|
|
||||||
$ret.="\n $target\n\n $ex $libs\nms$o${name}16.def;\n|\n";
|
|
||||||
($out_lib=$target) =~ s/O_/L_/;
|
|
||||||
$ret.="\timplib /nowep $out_lib $target\n\n";
|
|
||||||
}
|
|
||||||
$ret.="\n";
|
|
||||||
return($ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub do_link_rule
|
|
||||||
{
|
|
||||||
local($target,$files,$dep_libs,$libs,$sha1file,$openssl)=@_;
|
|
||||||
local($ret,$f,$_,@f);
|
|
||||||
|
|
||||||
$file =~ s/\//$o/g if $o ne '/';
|
|
||||||
$n=&bname($target);
|
|
||||||
$ret.="$target: $files $dep_libs\n";
|
|
||||||
$ret.=" \$(LINK) @&&|";
|
|
||||||
|
|
||||||
# Due to a pathetic line length limit, I have to unwrap the args.
|
|
||||||
$ret.=" \$(LFLAGS) ";
|
|
||||||
if ($files =~ /\(([^)]*)\)$/)
|
|
||||||
{
|
|
||||||
$ret.=" \$(APP_EX_OBJ)";
|
|
||||||
foreach $_ (sort split(/\s+/,$Vars{$1}))
|
|
||||||
{ $ret.="\n $r $_ +"; }
|
|
||||||
chop($ret);
|
|
||||||
$ret.="\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ $ret.="\n $r \$(APP_EX_OBJ) $files\n"; }
|
|
||||||
$ret.=" $target\n\n $libs\n\n|\n";
|
|
||||||
if (defined $sha1file)
|
|
||||||
{
|
|
||||||
$ret.=" $openssl sha1 -hmac etaonrishdlcupfm -binary $target > $sha1file";
|
|
||||||
}
|
|
||||||
$ret.="\n";
|
|
||||||
return($ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
177
util/pl/VC-16.pl
177
util/pl/VC-16.pl
@ -1,177 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# VCw16lib.pl - the file for Visual C++ 1.52b for windows, static libraries
|
|
||||||
#
|
|
||||||
|
|
||||||
$ssl= "ssleay16";
|
|
||||||
$crypto="libeay16";
|
|
||||||
|
|
||||||
$o='\\';
|
|
||||||
$cp='copy';
|
|
||||||
$rm='del';
|
|
||||||
|
|
||||||
# C compiler stuff
|
|
||||||
$cc='cl';
|
|
||||||
|
|
||||||
$out_def="out16";
|
|
||||||
$tmp_def="tmp16";
|
|
||||||
$inc_def="inc16";
|
|
||||||
|
|
||||||
if ($debug)
|
|
||||||
{
|
|
||||||
$op="/Od /Zi /Zd";
|
|
||||||
$base_lflags="/CO";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$op="/G2 /f- /Ocgnotb2";
|
|
||||||
}
|
|
||||||
$base_lflags.=" /FARCALL /NOLOGO /NOD /SEG:1024 /ONERROR:NOEXE /NOE /PACKC:60000";
|
|
||||||
if ($win16) { $base_lflags.=" /PACKD:60000"; }
|
|
||||||
|
|
||||||
$cflags="/ALw /Gx- /Gt256 /Gf $op /W3 /WX -DL_ENDIAN /nologo";
|
|
||||||
# I add the stack opt
|
|
||||||
$lflags="$base_lflags /STACK:20000";
|
|
||||||
|
|
||||||
if ($win16)
|
|
||||||
{
|
|
||||||
$cflags.=" -DOPENSSL_SYSNAME_WIN16";
|
|
||||||
$app_cflag="/Gw /FPi87";
|
|
||||||
$lib_cflag="/Gw";
|
|
||||||
$lib_cflag.=" -D_WINDLL -D_DLL" if $shlib;
|
|
||||||
$lib_cflag.=" -DWIN16TTY" if !$shlib;
|
|
||||||
$lflags.=" /ALIGN:256";
|
|
||||||
$ex_libs.="oldnames llibcewq libw";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$no_sock=1;
|
|
||||||
$cflags.=" -DMSDOS";
|
|
||||||
$lflags.=" /EXEPACK";
|
|
||||||
$ex_libs.="oldnames.lib llibce.lib";
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($shlib)
|
|
||||||
{
|
|
||||||
$mlflags="$base_lflags";
|
|
||||||
$libs="oldnames ldllcew libw";
|
|
||||||
$shlib_ex_obj="";
|
|
||||||
# $no_asm=1;
|
|
||||||
$out_def="out16dll";
|
|
||||||
$tmp_def="tmp16dll";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ $mlflags=''; }
|
|
||||||
|
|
||||||
$app_ex_obj="";
|
|
||||||
|
|
||||||
$obj='.obj';
|
|
||||||
$ofile="/Fo";
|
|
||||||
|
|
||||||
# EXE linking stuff
|
|
||||||
$link="link";
|
|
||||||
$efile="";
|
|
||||||
$exep='.exe';
|
|
||||||
$ex_libs.=$no_sock?"":" winsock";
|
|
||||||
|
|
||||||
# static library stuff
|
|
||||||
$mklib='lib /PAGESIZE:1024';
|
|
||||||
$ranlib='';
|
|
||||||
$plib="";
|
|
||||||
$libp=".lib";
|
|
||||||
$shlibp=($shlib)?".dll":".lib";
|
|
||||||
$lfile='';
|
|
||||||
|
|
||||||
$asm='ml /Cp /c /Cx';
|
|
||||||
$afile='/Fo';
|
|
||||||
|
|
||||||
$bn_asm_obj='';
|
|
||||||
$bn_asm_src='';
|
|
||||||
$des_enc_obj='';
|
|
||||||
$des_enc_src='';
|
|
||||||
$bf_enc_obj='';
|
|
||||||
$bf_enc_src='';
|
|
||||||
|
|
||||||
if (!$no_asm && !$fips)
|
|
||||||
{
|
|
||||||
if ($asmbits == 32)
|
|
||||||
{
|
|
||||||
$bn_asm_obj='crypto\bn\asm\x86w32.obj';
|
|
||||||
$bn_asm_src='crypto\bn\asm\x86w32.asm';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$bn_asm_obj='crypto\bn\asm\x86w16.obj';
|
|
||||||
$bn_asm_src='crypto\bn\asm\x86w16.asm';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub do_lib_rule
|
|
||||||
{
|
|
||||||
local($objs,$target,$name,$shlib)=@_;
|
|
||||||
local($ret,$Name);
|
|
||||||
|
|
||||||
$taget =~ s/\//$o/g if $o ne '/';
|
|
||||||
($Name=$name) =~ tr/a-z/A-Z/;
|
|
||||||
|
|
||||||
# $target="\$(LIB_D)$o$target";
|
|
||||||
$ret.="$target: $objs\n";
|
|
||||||
# $ret.="\t\$(RM) \$(O_$Name)\n";
|
|
||||||
|
|
||||||
# Due to a pathetic line length limit, I unwrap the args.
|
|
||||||
local($lib_names)="";
|
|
||||||
local($dll_names)=" \$(SHLIB_EX_OBJ) +\n";
|
|
||||||
($obj)= ($objs =~ /\((.*)\)/);
|
|
||||||
foreach $_ (sort split(/\s+/,$Vars{$obj}))
|
|
||||||
{
|
|
||||||
$lib_names.="+$_ &\n";
|
|
||||||
$dll_names.=" $_ +\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$shlib)
|
|
||||||
{
|
|
||||||
$ret.="\tdel $target\n";
|
|
||||||
$ret.="\t\$(MKLIB) @<<\n$target\ny\n$lib_names\n\n<<\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
local($ex)=($target =~ /O_SSL/)?'$(L_CRYPTO)':"";
|
|
||||||
$ex.=' winsock';
|
|
||||||
$ret.="\t\$(LINK) \$(MLFLAGS) @<<\n";
|
|
||||||
$ret.=$dll_names;
|
|
||||||
$ret.="\n $target\n\n $ex $libs\nms$o${name}.def;\n<<\n";
|
|
||||||
($out_lib=$target) =~ s/O_/L_/;
|
|
||||||
$ret.="\timplib /noignorecase /nowep $out_lib $target\n";
|
|
||||||
}
|
|
||||||
$ret.="\n";
|
|
||||||
return($ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub do_link_rule
|
|
||||||
{
|
|
||||||
local($target,$files,$dep_libs,$libs,$sha1file,$openssl)=@_;
|
|
||||||
local($ret,$f,$_,@f);
|
|
||||||
|
|
||||||
$file =~ s/\//$o/g if $o ne '/';
|
|
||||||
$n=&bname($targer);
|
|
||||||
$ret.="$target: $files $dep_libs\n";
|
|
||||||
$ret.=" \$(LINK) \$(LFLAGS) @<<\n";
|
|
||||||
|
|
||||||
# Due to a pathetic line length limit, I have to unwrap the args.
|
|
||||||
if ($files =~ /\(([^)]*)\)$/)
|
|
||||||
{
|
|
||||||
@a=('$(APP_EX_OBJ)');
|
|
||||||
push(@a,sort split(/\s+/,$Vars{$1}));
|
|
||||||
for $_ (@a)
|
|
||||||
{ $ret.=" $_ +\n"; }
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ $ret.=" \$(APP_EX_OBJ) $files"; }
|
|
||||||
$ret.="\n $target\n\n $libs\n\n<<\n";
|
|
||||||
if (defined $sha1file)
|
|
||||||
{
|
|
||||||
$ret.=" $openssl sha1 -hmac etaonrishdlcupfm -binary $target > $sha1file";
|
|
||||||
}
|
|
||||||
$ret.="\n";
|
|
||||||
return($ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
116
util/pl/VC-CE.pl
116
util/pl/VC-CE.pl
@ -1,116 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
# VC-CE.pl - the file for eMbedded Visual C++ 3.0 for windows CE, static libraries
|
|
||||||
#
|
|
||||||
|
|
||||||
$ssl= "ssleay32";
|
|
||||||
$crypto="libeay32";
|
|
||||||
$RSAref="RSAref32";
|
|
||||||
|
|
||||||
$o='\\';
|
|
||||||
$cp='copy nul+'; # Timestamps get stuffed otherwise
|
|
||||||
$rm='del';
|
|
||||||
|
|
||||||
# C compiler stuff
|
|
||||||
$cc='$(CC)';
|
|
||||||
$cflags=' /W3 /WX /Ox /O2 /Ob2 /Gs0 /GF /Gy /nologo $(WCETARGETDEFS) -DUNICODE -D_UNICODE -DWIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DNO_CHMOD -I$(WCECOMPAT)/include';
|
|
||||||
$lflags='/nologo /subsystem:windowsce,$(WCELDVERSION) /machine:$(WCELDMACHINE) /opt:ref';
|
|
||||||
$mlflags='';
|
|
||||||
|
|
||||||
$out_def='out32_$(TARGETCPU)';
|
|
||||||
$tmp_def='tmp32_$(TARGETCPU)';
|
|
||||||
$inc_def="inc32";
|
|
||||||
|
|
||||||
if ($debug)
|
|
||||||
{
|
|
||||||
$cflags=" /MDd /W3 /WX /Zi /Yd /Od /nologo -DWIN32 -D_DEBUG -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -DDEBUG -DDSO_WIN32";
|
|
||||||
$lflags.=" /debug";
|
|
||||||
$mlflags.=' /debug';
|
|
||||||
}
|
|
||||||
|
|
||||||
$obj='.obj';
|
|
||||||
$ofile="/Fo";
|
|
||||||
|
|
||||||
# EXE linking stuff
|
|
||||||
$link="link";
|
|
||||||
$efile="/out:";
|
|
||||||
$exep='.exe';
|
|
||||||
if ($no_sock)
|
|
||||||
{ $ex_libs=""; }
|
|
||||||
else { $ex_libs='winsock.lib $(WCECOMPAT)/lib/wcecompatex.lib $(WCELDFLAGS)'; }
|
|
||||||
|
|
||||||
# static library stuff
|
|
||||||
$mklib='lib';
|
|
||||||
$ranlib='';
|
|
||||||
$plib="";
|
|
||||||
$libp=".lib";
|
|
||||||
$shlibp=($shlib)?".dll":".lib";
|
|
||||||
$lfile='/out:';
|
|
||||||
|
|
||||||
$shlib_ex_obj="";
|
|
||||||
$app_ex_obj="";
|
|
||||||
$app_ex_obj="";
|
|
||||||
|
|
||||||
$bn_asm_obj='';
|
|
||||||
$bn_asm_src='';
|
|
||||||
$des_enc_obj='';
|
|
||||||
$des_enc_src='';
|
|
||||||
$bf_enc_obj='';
|
|
||||||
$bf_enc_src='';
|
|
||||||
|
|
||||||
if ($shlib)
|
|
||||||
{
|
|
||||||
$mlflags.=" $lflags /dll";
|
|
||||||
# $cflags =~ s| /MD| /MT|;
|
|
||||||
$lib_cflag=" -D_WINDLL -D_DLL";
|
|
||||||
$out_def='out32dll_$(TARGETCPU)';
|
|
||||||
$tmp_def='tmp32dll_$(TARGETCPU)';
|
|
||||||
}
|
|
||||||
|
|
||||||
$cflags.=" /Fd$out_def";
|
|
||||||
|
|
||||||
sub do_lib_rule
|
|
||||||
{
|
|
||||||
local($objs,$target,$name,$shlib)=@_;
|
|
||||||
local($ret,$Name);
|
|
||||||
|
|
||||||
$taget =~ s/\//$o/g if $o ne '/';
|
|
||||||
($Name=$name) =~ tr/a-z/A-Z/;
|
|
||||||
|
|
||||||
# $target="\$(LIB_D)$o$target";
|
|
||||||
$ret.="$target: $objs\n";
|
|
||||||
if (!$shlib)
|
|
||||||
{
|
|
||||||
# $ret.="\t\$(RM) \$(O_$Name)\n";
|
|
||||||
$ex =' ';
|
|
||||||
$ret.="\t\$(MKLIB) $lfile$target @<<\n $objs $ex\n<<\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
local($ex)=($target =~ /O_SSL/)?' $(L_CRYPTO)':'';
|
|
||||||
# $ex.=' winsock.lib coredll.lib $(WCECOMPAT)/lib/wcecompatex.lib';
|
|
||||||
$ex.=' winsock.lib $(WCECOMPAT)/lib/wcecompatex.lib';
|
|
||||||
$ret.="\t\$(LINK) \$(MLFLAGS) $efile$target /def:ms/${Name}.def @<<\n \$(SHLIB_EX_OBJ) $objs $ex\n<<\n";
|
|
||||||
}
|
|
||||||
$ret.="\n";
|
|
||||||
return($ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub do_link_rule
|
|
||||||
{
|
|
||||||
local($target,$files,$dep_libs,$libs,$sha1file,$openssl)=@_;
|
|
||||||
local($ret,$_);
|
|
||||||
|
|
||||||
$file =~ s/\//$o/g if $o ne '/';
|
|
||||||
$n=&bname($targer);
|
|
||||||
$ret.="$target: $files $dep_libs\n";
|
|
||||||
$ret.=" \$(LINK) \$(LFLAGS) $efile$target @<<\n";
|
|
||||||
$ret.=" \$(APP_EX_OBJ) $files $libs\n<<\n";
|
|
||||||
if (defined $sha1file)
|
|
||||||
{
|
|
||||||
$ret.=" $openssl sha1 -hmac etaonrishdlcupfm -binary $target > $sha1file";
|
|
||||||
}
|
|
||||||
$ret.="\n";
|
|
||||||
return($ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
Loading…
Reference in New Issue
Block a user