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:
Simon L. B. Nielsen 2008-09-21 14:12:30 +00:00
parent 9d8854235b
commit 11bac091f5
90 changed files with 0 additions and 23577 deletions

View File

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

View File

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

View File

@ -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 :-(

View File

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

View File

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

View File

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

View File

@ -1,9 +0,0 @@
-----BEGIN X509 CRL-----
MIIBNDCBnjANBgkqhkiG9w0BAQIFADBFMSEwHwYDVQQKExhFdXJvcGVhbiBJQ0Ut
VEVMIFByb2plY3QxIDAeBgNVBAsTF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5Fw05
NzA2MDkxNDQyNDNaFw05NzA3MDkxNDQyNDNaMCgwEgIBChcNOTcwMzAzMTQ0MjU0
WjASAgEJFw05NjEwMDIxMjI5MjdaMA0GCSqGSIb3DQEBAgUAA4GBAH4vgWo2Tej/
i7kbiw4Imd30If91iosjClNpBFwvwUDBclPEeMuYimHbLOk4H8Nofc0fw11+U/IO
KSNouUDcqG7B64oY7c4SXKn+i1MWOb5OJiWeodX3TehHjBlyWzoNMWCnYA8XqFP1
mOKp8Jla1BibEZf14+/HqCi2hnZUiEXh
-----END X509 CRL-----

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1 +0,0 @@
New dev version.

View File

@ -1 +0,0 @@
Fix for ASN1 parsing bugs.

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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();

View File

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

View File

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

View File

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

View File

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

View File

@ -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 */

View File

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

View File

@ -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 = &parameter;
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 = &parameter;
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 */

View File

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

View File

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

View File

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

View File

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

View File

@ -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 */

View File

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

View File

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

View File

@ -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 */

View File

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

View File

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

View File

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

View File

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

View File

@ -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 */

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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)());

View File

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

View File

@ -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 */

View File

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

View File

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

View File

@ -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*/

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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