Compare commits

...

4 Commits

Author SHA1 Message Date
cvs2svn
162d5f30be This commit was manufactured by cvs2svn to create tag 'SSLeay_0_9_1b'. 1998-12-21 11:00:57 +00:00
Ralf S. Engelschall
15403de6ca Import of old SSLeay release: SSLeay 0.9.1b (unreleased) 1998-12-21 11:00:43 +00:00
Ralf S. Engelschall
c7e9169997 Import of old SSLeay release: SSLeay 0.9.0b 1998-12-21 10:56:30 +00:00
Ralf S. Engelschall
ec96f926b9 Import of old SSLeay release: SSLeay 0.8.1b 1998-12-21 10:52:45 +00:00
84 changed files with 12 additions and 17537 deletions

View File

@ -1,324 +0,0 @@
/* crypto/bio/bss_file.c */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#define APPS_WIN16
#include <stdio.h>
#include <errno.h>
#include "cryptlib.h"
#include "bio.h"
#include "err.h"
#ifndef NOPROTO
static int MS_CALLBACK file_write(BIO *h,char *buf,int num);
static int MS_CALLBACK file_read(BIO *h,char *buf,int size);
static int MS_CALLBACK file_puts(BIO *h,char *str);
static int MS_CALLBACK file_gets(BIO *h,char *str,int size);
static long MS_CALLBACK file_ctrl(BIO *h,int cmd,long arg1,char *arg2);
static int MS_CALLBACK file_new(BIO *h);
static int MS_CALLBACK file_free(BIO *data);
#else
static int MS_CALLBACK file_write();
static int MS_CALLBACK file_read();
static int MS_CALLBACK file_puts();
static int MS_CALLBACK file_gets();
static long MS_CALLBACK file_ctrl();
static int MS_CALLBACK file_new();
static int MS_CALLBACK file_free();
#endif
static BIO_METHOD methods_filep=
{
BIO_TYPE_FILE,"FILE pointer",
file_write,
file_read,
file_puts,
file_gets,
file_ctrl,
file_new,
file_free,
};
BIO *BIO_new_file(filename,mode)
char *filename;
char *mode;
{
BIO *ret;
FILE *file;
if ((file=fopen(filename,mode)) == NULL)
{
SYSerr(SYS_F_FOPEN,errno);
BIOerr(BIO_F_BIO_NEW_FILE,ERR_R_SYS_LIB);
return(NULL);
}
if ((ret=BIO_new_fp(file,BIO_CLOSE)) == NULL)
{
fclose(file);
return(NULL);
}
return(ret);
}
BIO *BIO_new_fp(stream,close_flag)
FILE *stream;
int close_flag;
{
BIO *ret;
if ((ret=BIO_new(BIO_s_file())) == NULL)
return(NULL);
BIO_set_fp(ret,stream,close_flag);
return(ret);
}
#if !defined(WIN16) || defined(APPS_WIN16)
BIO_METHOD *BIO_s_file()
{
return(&methods_filep);
}
#else
BIO_METHOD *BIO_s_file_internal_w16()
{
return(&methods_filep);
}
#endif
static int MS_CALLBACK file_new(bi)
BIO *bi;
{
bi->init=0;
bi->num=0;
bi->ptr=NULL;
return(1);
}
static int MS_CALLBACK file_free(a)
BIO *a;
{
if (a == NULL) return(0);
if (a->shutdown)
{
if ((a->init) && (a->ptr != NULL))
{
fclose((FILE *)a->ptr);
a->ptr=NULL;
}
a->init=0;
}
return(1);
}
static int MS_CALLBACK file_read(b,out,outl)
BIO *b;
char *out;
int outl;
{
int ret=0;
if (b->init && (out != NULL))
{
ret=fread(out,1,(int)outl,(FILE *)b->ptr);
}
return(ret);
}
static int MS_CALLBACK file_write(b,in,inl)
BIO *b;
char *in;
int inl;
{
int ret=0;
if (b->init && (in != NULL))
{
if (fwrite(in,(int)inl,1,(FILE *)b->ptr))
ret=inl;
/* ret=fwrite(in,1,(int)inl,(FILE *)b->ptr); */
/* acording to Tim Hudson <tjh@cryptsoft.com>, the commented
* out version above can cause 'inl' write calls under
* some stupid stdio implementations (VMS) */
}
return(ret);
}
static long MS_CALLBACK file_ctrl(b,cmd,num,ptr)
BIO *b;
int cmd;
long num;
char *ptr;
{
long ret=1;
FILE *fp=(FILE *)b->ptr;
FILE **fpp;
char p[4];
switch (cmd)
{
case BIO_CTRL_RESET:
ret=(long)fseek(fp,num,0);
break;
case BIO_CTRL_EOF:
ret=(long)feof(fp);
break;
case BIO_CTRL_INFO:
ret=ftell(fp);
break;
case BIO_C_SET_FILE_PTR:
file_free(b);
b->shutdown=(int)num;
b->ptr=(char *)ptr;
b->init=1;
break;
case BIO_C_SET_FILENAME:
file_free(b);
b->shutdown=(int)num&BIO_CLOSE;
if (num & BIO_FP_APPEND)
{
if (num & BIO_FP_READ)
strcpy(p,"a+");
else strcpy(p,"a");
}
else if ((num & BIO_FP_READ) && (num & BIO_FP_WRITE))
strcpy(p,"r+");
else if (num & BIO_FP_WRITE)
strcpy(p,"w");
else if (num & BIO_FP_READ)
strcpy(p,"r");
else
{
BIOerr(BIO_F_FILE_CTRL,BIO_R_BAD_FOPEN_MODE);
ret=0;
break;
}
#if defined(MSDOS) || defined(WINDOWS)
if (!(num & BIO_FP_TEXT))
strcat(p,"b");
else
strcat(p,"t");
#endif
fp=fopen(ptr,p);
if (fp == NULL)
{
SYSerr(SYS_F_FOPEN,errno);
BIOerr(BIO_F_FILE_CTRL,ERR_R_SYS_LIB);
ret=0;
break;
}
b->ptr=(char *)fp;
b->init=1;
break;
case BIO_C_GET_FILE_PTR:
/* the ptr parameter is actually a FILE ** in this case. */
if (ptr != NULL)
{
fpp=(FILE **)ptr;
*fpp=(FILE *)b->ptr;
}
break;
case BIO_CTRL_GET_CLOSE:
ret=(long)b->shutdown;
break;
case BIO_CTRL_SET_CLOSE:
b->shutdown=(int)num;
break;
case BIO_CTRL_FLUSH:
fflush((FILE *)b->ptr);
break;
case BIO_CTRL_DUP:
ret=1;
break;
case BIO_CTRL_PENDING:
case BIO_CTRL_PUSH:
case BIO_CTRL_POP:
default:
ret=0;
break;
}
return(ret);
}
static int MS_CALLBACK file_gets(bp,buf,size)
BIO *bp;
char *buf;
int size;
{
int ret=0;
buf[0]='\0';
fgets(buf,size,(FILE *)bp->ptr);
if (buf[0] != '\0')
ret=strlen(buf);
return(ret);
}
static int MS_CALLBACK file_puts(bp,str)
BIO *bp;
char *str;
{
int n,ret;
n=strlen(str);
ret=file_write(bp,str,n);
return(ret);
}

View File

@ -1,9 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
MIIBOwIBAAJBALtv55QyzG6i2PlwZ1pah7++Gv8L5j6Hnyr/uTZE1NLG0ABDDexm
q/R4KedLjFEIYjocDui+IXs62NNtXrT8odkCAwEAAQJAbwXq0vJ/+uyEvsNgxLko
/V86mGXQ/KrSkeKlL0r4ENxjcyeMAGoKu6J9yMY7+X9+Zm4nxShNfTsf/+Freoe1
HQIhAPOSm5Q1YI+KIsII2GeVJx1U69+wnd71OasIPakS1L1XAiEAxQAW+J3/JWE0
ftEYakbhUOKL8tD1OaFZS71/5GdG7E8CIQCefUMmySSvwd6kC0VlATSWbW+d+jp/
nWmM1KvqnAo5uQIhALqEADu5U1Wvt8UN8UDGBRPQulHWNycuNV45d3nnskWPAiAw
ueTyr6WsZ5+SD8g/Hy3xuvF3nPmJRH+rwvVihlcFOg==
-----END RSA PRIVATE KEY-----

View File

@ -1,8 +0,0 @@
-----BEGIN CERTIFICATE REQUEST-----
MIIBGzCBxgIBADBjMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEa
MBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxIzAhBgNVBAMTGkNsaWVudCB0ZXN0
IGNlcnQgKDUxMiBiaXQpMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALtv55QyzG6i
2PlwZ1pah7++Gv8L5j6Hnyr/uTZE1NLG0ABDDexmq/R4KedLjFEIYjocDui+IXs6
2NNtXrT8odkCAwEAATANBgkqhkiG9w0BAQQFAANBAC5JBTeji7RosqMaUIDzIW13
oO6+kPhx9fXSpMFHIsY3aH92Milkov/2A4SuZTcnv/P6+8klmS0EaiUKcRzak4E=
-----END CERTIFICATE REQUEST-----

View File

@ -1,8 +0,0 @@
-----BEGIN X509 CRL-----
MIIBDjCBuTANBgkqhkiG9w0BAQQFADBgMQswCQYDVQQGEwJBVTEMMAoGA1UECBMD
UUxEMRkwFwYDVQQKExBNaW5jb20gUHR5LiBMdGQuMQswCQYDVQQLEwJDUzEbMBkG
A1UEAxMSU1NMZWF5IGRlbW8gc2VydmVyFw05NzA3MDkwMDAwMjJaFw05NzA4MDgw
MDAwMjJaMCgwEgIBARcNOTUxMDA5MjMzMjA1WjASAgEDFw05NTEyMDEwMTAwMDBa
MA0GCSqGSIb3DQEBBAUAA0EAcEBIWVZPXxSlLMPPLfBi4s0N3lzTgskZkgO6pjZi
oQRwh5vi5zFqDNQteGx7RTHpUYntgyoAZ87FZE0GOJgBaQ==
-----END X509 CRL-----

5
apps/f
View File

@ -1,5 +0,0 @@
586
2481
1400
2064

Binary file not shown.

View File

@ -1,25 +0,0 @@
-----BEGIN xxx-----
MIAGCSqGSIb3DQEHAqCAMIACAQExADCABgkqhkiG9w0BBwEAAKCAMIIB
rTCCAUkCAgC2MA0GCSqGSIb3DQEBAgUAME0xCzAJBgNVBAYTAlVTMSAw
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEcMBoGA1UECxMT
UGVyc29uYSBDZXJ0aWZpY2F0ZTAeFw05NDA0MDkwMDUwMzdaFw05NDA4
MDIxODM4NTdaMGcxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0
YSBTZWN1cml0eSwgSW5jLjEcMBoGA1UECxMTUGVyc29uYSBDZXJ0aWZp
Y2F0ZTEYMBYGA1UEAxMPU2V0ZWMgQXN0cm9ub215MFwwDQYJKoZIhvcN
AQEBBQADSwAwSAJBAMy8QcW7RMrB4sTdQ8Nmb2DFmJmkWn+el+NdeamI
DElX/qw9mIQu4xNj1FfepfJNxzPvA0OtMKhy6+bkrlyMEU8CAwEAATAN
BgkqhkiG9w0BAQIFAANPAAYn7jDgirhiIL4wnP8nGzUisGSpsFsF4/7z
2P2wqne6Qk8Cg/Dstu3RyaN78vAMGP8d82H5+Ndfhi2mRp4YHiGHz0Hl
K6VbPfnyvS2wdjCCAccwggFRAgUCQAAAFDANBgkqhkiG9w0BAQIFADBf
MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXUlNBIERhdGEgU2VjdXJpdHks
IEluYy4xLjAsBgNVBAsTJUxvdyBBc3N1cmFuY2UgQ2VydGlmaWNhdGlv
biBBdXRob3JpdHkwHhcNOTQwMTA3MDAwMDAwWhcNOTYwMTA3MjM1OTU5
WjBNMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXUlNBIERhdGEgU2VjdXJp
dHksIEluYy4xHDAaBgNVBAsTE1BlcnNvbmEgQ2VydGlmaWNhdGUwaTAN
BgkqhkiG9w0BAQEFAANYADBVAk4GqghQDa9Xi/2zAdYEqJVIcYhlLN1F
pI9tXQ1m6zZ39PYXK8Uhoj0Es7kWRv8hC04vqkOKwndWbzVtvoHQOmP8
nOkkuBi+AQvgFoRcgOUCAwEAATANBgkqhkiG9w0BAQIFAANhAD/5Uo7x
Ddp49oZm9GoNcPhZcW1e+nojLvHXWAU/CBkwfcR+FSf4hQ5eFu1AjYv6
Wqf430Xe9Et5+jgnMTiq4LnwgTdA8xQX4elJz9QzQobkE3XVOjVAtCFc
miin80RB8AAAMYAAAAAAAAAAAA==
-----END xxx-----

View File

@ -1,11 +0,0 @@
-----BEGIN PRIVACY-ENHANCED MESSAGE-----
MIAGCSqGSIb3DQEHBqCAMIACAQAwgAYJKoZIhvcNAQcBMBEGBSsOAwIHBAifqtdy
x6uIMYCCARgvFzJtOZBn773DtmXlx037ck3giqnV0WC0QAx5f+fesAiGaxMqWcir
r9XvT0nT0LgSQ/8tiLCDBEKdyCNgdcJAduy3D0r2sb5sNTT0TyL9uydG3w55vTnW
aPbCPCWLudArI1UHDZbnoJICrVehxG/sYX069M8v6VO8PsJS7//hh1yM+0nekzQ5
l1p0j7uWKu4W0csrlGqhLvEJanj6dQAGSTNCOoH3jzEXGQXntgesk8poFPfHdtj0
5RH4MuJRajDmoEjlrNcnGl/BdHAd2JaCo6uZWGcnGAgVJ/TVfSVSwN5nlCK87tXl
nL7DJwaPRYwxb3mnPKNq7ATiJPf5u162MbwxrddmiE7e3sST7naSN+GS0ateY5X7
AAAAAAAAAAA=
-----END PRIVACY-ENHANCED MESSAGE-----

View File

@ -1,12 +0,0 @@
-----BEGIN PRIVACY-ENHANCED MESSAGE-----
MIAGCSqGSIb3DQEHA6CAMIACAQAxgDCBqQIBADBTME0xCzAJBgNVBAYTAlVTMSAw
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEcMBoGA1UECxMTUGVyc29u
YSBDZXJ0aWZpY2F0ZQICALYwDQYJKoZIhvcNAQEBBQAEQCU/R+YCJSUsV6XLilHG
cNVzwqKcWzmT/rZ+duOv8Ggb7oO/d8H3xUVGQ2LsX4kYGq2szwj8Q6eWhsmhf4oz
lvMAADCABgkqhkiG9w0BBwEwEQYFKw4DAgcECFif7BadXlw3oIAEgZBNcMexKe16
+mNxx8YQPukBCL0bWqS86lvws/AgRkKPELmysBi5lco8MBCsWK/fCyrnxIRHs1oK
BXBVlsAhKkkusk1kCf/GbXSAphdSgG+d6LxrNZwHbBFOX6A2hYS63Iczd5bOVDDW
Op2gcgUtMJq6k2LFrs4L7HHqRPPlqNJ6j5mFP4xkzOCNIQynpD1rV6EECMIk/T7k
1JLSAAAAAAAAAAAAAA==
-----END PRIVACY-ENHANCED MESSAGE-----

View File

@ -1,46 +0,0 @@
-----BEGIN PKCS7-----
MIIIEgYJKoZIhvcNAQcCMIIIAwIBATEAMAsGCSqGSIb3DQEHAaCCBDUwggIhMIIB
jgIFAnIAAGcwDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMxIDAeBgNVBAoT
F1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2VydmVy
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk1MDUxNzAwMDAwMFoXDTk1MTEx
NjIzNTk1OVowdzELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5h
MRIwEAYDVQQHEwlDaGFybG90dGUxIzAhBgNVBAoTGlZuZXQgSW50ZXJuZXQgQWNj
ZXNzLCBJbmMuMRYwFAYDVQQDFA13d3cqLnZuZXQubmV0MHwwDQYJKoZIhvcNAQEB
BQADawAwaAJhAOngW+io4W1lAp1b2k4+KqICaLHatp6AWkPLpa3Li2mwmggSGeRD
AmTI4FQB0EFrDMfKLOteHgGoDJ0vifmV5cKvevRt5Gn+xPn54Halu7i145iUldyv
oViUNpWmLJhKTQIDAQABMA0GCSqGSIb3DQEBAgUAA34AQkyfJje6H8fxtN68TvXV
RibnPpQol2jMbh0VnK9cP9ePvsXy+7JoGuWxj6zlgjZGwia49xITggZ+0b+wP51l
5e8xEEc2K7eC5QVD0qh/NSqdPcVP+UG6UK/LT25w/yLuZgqJ3g87kGbOo9myLhkZ
3jr3kXnsriBmwmqcjgUwggIMMIIBlgIFAkAAAEUwDQYJKoZIhvcNAQECBQAwXzEL
MAkGA1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4w
LAYDVQQLEyVMb3cgQXNzdXJhbmNlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
DTk0MTEwOTIzMTk0NFoXDTk5MTIzMTIzMTk0NFowXzELMAkGA1UEBhMCVVMxIDAe
BgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUg
U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUA
A4GJADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwji
ioII0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJ
VphIuR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJ
KoZIhvcNAQECBQADYQAjOCnuhWTdRq+8PhUBSzKbOhmafQQPQ8Ltw+49U8N1zgq9
1ROaW46znUQykAPUdaAIflEfV2e0ULuyOWCwDJ2ME7NUmWL86SLkk6QLC9iItjva
h+tdpLV/+TerjmrxCWChggOyMIICjTCCAfowDQYJKoZIhvcNAQECBQAwXzELMAkG
A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD
VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5Fw05NTA1
MDIwMjEyMjZaFw05NTA2MDEwMDAxNDlaMIIBaDAWAgUCQQAABBcNOTUwMjAxMTcy
NDI2WjAWAgUCQQAACRcNOTUwMjEwMDIxNjM5WjAWAgUCQQAADxcNOTUwMjI0MDAx
MjQ5WjAWAgUCQQAADBcNOTUwMjI1MDA0NjQ0WjAWAgUCQQAAGxcNOTUwMzEzMTg0
MDQ5WjAWAgUCQQAAFhcNOTUwMzE1MTkxNjU0WjAWAgUCQQAAGhcNOTUwMzE1MTk0
MDQxWjAWAgUCQQAAHxcNOTUwMzI0MTk0NDMzWjAWAgUCcgAABRcNOTUwMzI5MjAw
NzExWjAWAgUCcgAAERcNOTUwMzMwMDIzNDI2WjAWAgUCQQAAIBcNOTUwNDA3MDEx
MzIxWjAWAgUCcgAAHhcNOTUwNDA4MDAwMjU5WjAWAgUCcgAAQRcNOTUwNDI4MTcx
NzI0WjAWAgUCcgAAOBcNOTUwNDI4MTcyNzIxWjAWAgUCcgAATBcNOTUwNTAyMDIx
MjI2WjANBgkqhkiG9w0BAQIFAAN+AHqOEJXSDejYy0UwxxrH/9+N2z5xu/if0J6q
QmK92W0hW158wpJg+ovV3+wQwvIEPRL2rocL0tKfAsVq1IawSJzSNgxG0lrcla3M
rJBnZ4GaZDu4FutZh72MR3GtJaAL3iTJHJD55kK2D/VoyY1djlsPuNh6AEgdVwFA
yp0vMIIBHTCBqDANBgkqhkiG9w0BAQIFADBfMQswCQYDVQQGEwJVUzEgMB4GA1UE
ChMXUlNBIERhdGEgU2VjdXJpdHksIEluYy4xLjAsBgNVBAsTJUxvdyBBc3N1cmFu
Y2UgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkXDTk1MDUwMTE5MjcyOVoXDTk1MDYw
MTA4MDAwMFowGDAWAgUCQAAAXhcNOTUwMjA4MDE0NjIyWjANBgkqhkiG9w0BAQIF
AANhAF70VxEAKgGlS2otYkWSqYJ286MMDbdAIoEGCDTtVuLCOP3YKHOSTjFhbIhL
5mBd+Q/W+lKSqdoyYhdObaBk4I4Wk+/BE2QK1x4QhtYG144spESXIRIKAbhffg1g
rRe/ETEA
-----END PKCS7-----

View File

@ -1,16 +0,0 @@
www.microsoft.com:443
sectest.microsoft.com:443
https://sectest.microsoft.com/ClientAuth/test.asp
ssl3.netscape.com:443
ssl3.netscape.com:444
www.openmarket.com:443 - no session ID caching. - no swap
Servers
bad www.openmarket.com Open-Market-Secure-WebServer/V2.1
bad www.microsoft.com Server: Microsoft-IIS/3.0
good transact.netscape.com Netscape-Enterprise/2.01
clients
good netscape
hmm MSIE

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,16 +0,0 @@
subject=/C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
issuer= /C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
-----BEGIN CERTIFICATE-----
MIICMTCCAZoCBQKmAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMg
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LJ1
9njQrlpQ9OlQqZ+M1++RlHDo0iSQdomF1t+s5gEXMoDwnZNHvJplnR+Xrr/phnVj
IIm9gFidBAydqMEk6QvlMXi9/C0MN2qeeIDpRnX57aP7E3vIwUzSo+/1PLBij0pd
O92VZ48TucE81qcmm+zDO3rZTbxtm+gVAePwR6kCAwEAATANBgkqhkiG9w0BAQIF
AAOBgQBT3dPwnCR+QKri/AAa19oM/DJhuBUNlvP6Vxt/M3yv6ZiaYch6s7f/sdyZ
g9ysEvxwyR84Qu1E9oAuW2szaayc01znX1oYx7EteQSWQZGZQbE8DbqEOcY7l/Am
yY7uvcxClf8exwI/VAx49byqYHwCaejcrOICdmHEPgPq0ook0Q==
-----END CERTIFICATE-----

View File

@ -1,117 +0,0 @@
/* crypto/asn1/pk.c */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include "../error/err.h"
#include "./asn1.h"
#include "rsa.h"
#include "x509.h"
#include "pkcs7.h"
main()
{
PKCS7 *x;
FILE *in;
unsigned char buf[10240],buf2[10240],*p;
int num,i;
PKCS7 *nx=NULL,*mx=NULL;
in=fopen("pkcs7.der","r");
if (in == NULL)
{
perror("pkcs7.der");
exit(1);
}
num=fread(buf,1,10240,in);
fclose(in);
p=buf;
if (d2i_PKCS7(&nx,&p,num) == NULL) goto err;
printf("num=%d p-buf=%d\n",num,p-buf);
exit(0);
p=buf2;
num=i2d_PKCS7(nx,&p);
printf("num=%d p-buf=%d\n",num,p-buf2);
if (memcmp(buf,buf2,num) != 0)
{
fprintf(stderr,"data difference\n");
for (i=0; i<num; i++)
fprintf(stderr,"%c%03d <%02X-%02X>\n",
(buf[i] == buf2[i])?' ':'*',i,
buf[i],buf2[i]);
fprintf(stderr,"\n");
exit(1);
}
p=buf2;
if (d2i_PKCS7(&mx,&p,num) == NULL) goto err;
printf("num=%d p-buf=%d\n",num,p-buf2);
/* X509_print(stdout,mx);*/
exit(0);
err:
ERR_load_crypto_strings();
ERR_print_errors(stderr);
exit(1);
}

View File

@ -1,253 +0,0 @@
/* crypto/asn1/test.c */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include "../error/err.h"
#include "./asn1.h"
#include "rsa.h"
#include "../x509/x509.h"
#include "x509.h"
main()
{
main1();
main2();
main3();
main4();
}
main1()
{
FILE *in;
unsigned char buf[10240],buf2[10240],*p;
int num,i;
X509 *nx=NULL,*mx=NULL;
in=fopen("x.der","r");
if (in == NULL)
{
perror("x.der");
exit(1);
}
num=fread(buf,1,10240,in);
fclose(in);
p=buf;
if (d2i_X509(&nx,&p,num) == NULL) goto err;
printf("num=%d p-buf=%d\n",num,p-buf);
p=buf2;
num=i2d_X509(nx,&p);
printf("num=%d p-buf=%d\n",num,p-buf2);
if (memcmp(buf,buf2,num) != 0)
{
fprintf(stderr,"data difference\n");
for (i=0; i<num; i++)
fprintf(stderr,"%c%03d <%02X-%02X>\n",
(buf[i] == buf2[i])?' ':'*',i,
buf[i],buf2[i]);
fprintf(stderr,"\n");
exit(1);
}
p=buf2;
if (d2i_X509(&mx,&p,num) == NULL) goto err;
printf("num=%d p-buf=%d\n",num,p-buf2);
return(1);
err:
ERR_load_crypto_strings();
ERR_print_errors(stderr);
return(0);
}
main2()
{
FILE *in;
unsigned char buf[10240],buf2[10240],*p;
int num,i;
X509_CRL *nx=NULL,*mx=NULL;
in=fopen("crl.der","r");
if (in == NULL)
{
perror("crl.der");
exit(1);
}
num=fread(buf,1,10240,in);
fclose(in);
p=buf;
if (d2i_X509_CRL(&nx,&p,num) == NULL) goto err;
printf("num=%d p-buf=%d\n",num,p-buf);
p=buf2;
num=i2d_X509_CRL(nx,&p);
printf("num=%d p-buf=%d\n",num,p-buf2);
if (memcmp(buf,buf2,num) != 0)
{
fprintf(stderr,"data difference\n");
for (i=0; i<num; i++)
fprintf(stderr,"%c%03d <%02X-%02X>\n",
(buf[i] == buf2[i])?' ':'*',i,
buf[i],buf2[i]);
fprintf(stderr,"\n");
exit(1);
}
return(1);
err:
ERR_load_crypto_strings();
ERR_print_errors(stderr);
return(0);
}
main3()
{
FILE *in;
unsigned char buf[10240],buf2[10240],*p;
int num,i;
X509_REQ *nx=NULL,*mx=NULL;
in=fopen("req.der","r");
if (in == NULL)
{
perror("req.der");
exit(1);
}
num=fread(buf,1,10240,in);
fclose(in);
p=buf;
if (d2i_X509_REQ(&nx,&p,num) == NULL) goto err;
printf("num=%d p-buf=%d\n",num,p-buf);
p=buf2;
num=i2d_X509_REQ(nx,&p);
printf("num=%d p-buf=%d\n",num,p-buf2);
if (memcmp(buf,buf2,num) != 0)
{
fprintf(stderr,"data difference\n");
for (i=0; i<num; i++)
fprintf(stderr,"%c%03d <%02X-%02X>\n",
(buf[i] == buf2[i])?' ':'*',i,
buf[i],buf2[i]);
fprintf(stderr,"\n");
exit(1);
}
return(1);
err:
ERR_load_crypto_strings();
ERR_print_errors(stderr);
return(0);
}
main4()
{
FILE *in;
unsigned char buf[10240],buf2[10240],*p;
int num,i;
RSA *nx=NULL,*mx=NULL;
in=fopen("rsa.der","r");
if (in == NULL)
{
perror("rsa.der");
exit(1);
}
num=fread(buf,1,10240,in);
fclose(in);
p=buf;
if (d2i_RSAPrivateKey(&nx,&p,num) == NULL) goto err;
printf("num=%d p-buf=%d\n",num,p-buf);
p=buf2;
num=i2d_RSAPrivateKey(nx,&p);
printf("num=%d p-buf=%d\n",num,p-buf2);
if (memcmp(buf,buf2,num) != 0)
{
fprintf(stderr,"data difference\n");
for (i=0; i<num; i++)
fprintf(stderr,"%c%03d <%02X-%02X>\n",
(buf[i] == buf2[i])?' ':'*',i,
buf[i],buf2[i]);
fprintf(stderr,"\n");
exit(1);
}
return(1);
err:
ERR_load_crypto_strings();
ERR_print_errors(stderr);
return(0);
}

View File

@ -1,159 +0,0 @@
#!/usr/local/bin/perl
#!/usr/local/bin/perl
$prog="bf586.pl";
# base code is in microsft
# op dest, source
# format.
#
if ( ($ARGV[0] eq "elf"))
{ require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "a.out"))
{ $aout=1; require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "sol"))
{ $sol=1; require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "cpp"))
{ $cpp=1; require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "win32"))
{ require "x86ms.pl"; }
else
{
print STDERR <<"EOF";
Pick one target type from
elf - linux, FreeBSD etc
a.out - old linux
sol - x86 solaris
cpp - format so x86unix.cpp can be used
win32 - Windows 95/Windows NT
EOF
exit(1);
}
&comment("Don't even think of reading this code");
&comment("It was automatically generated by $prog");
&comment("Which is a perl program used to generate the x86 assember for");
&comment("any of elf, a.out, Win32, or Solaris");
&comment("It can be found in SSLeay 0.7.0+");
&comment("eric <eay\@cryptsoft.com>");
&comment("");
&file("bfx86xxxx");
$BF_ROUNDS=16;
$BF_OFF=($BF_ROUNDS+2)*4;
$L="ecx";
$R="edx";
$P="edi";
$tot="esi";
$tmp1="eax";
$tmp2="ebx";
$tmp3="ebp";
&des_encrypt("BF_encrypt");
&file_end();
sub des_encrypt
{
local($name)=@_;
&function_begin($name,3,"");
&comment("");
&comment("Load the 2 words");
&mov("eax",&wparam(0));
&mov($L,&DWP(0,"eax","",0));
&mov($R,&DWP(4,"eax","",0));
&comment("");
&comment("P pointer, s and enc flag");
&mov($P,&wparam(1));
&xor( $tmp1, $tmp1);
&xor( $tmp2, $tmp2);
# encrypting part
&mov("ebp",&wparam(2)); # get encrypt flag
&cmp("ebp","0");
&je(&label("start_decrypt"));
&xor($L,&DWP(0,$P,"",0));
for ($i=0; $i<$BF_ROUNDS; $i+=2)
{
&comment("");
&comment("Round $i");
&BF_ENCRYPT($i+1,$R,$L,$P,$tot,$tmp1,$tmp2,$tmp3);
&comment("");
&comment("Round ".sprintf("%d",$i+1));
&BF_ENCRYPT($i+2,$L,$R,$P,$tot,$tmp1,$tmp2,$tmp3);
}
&xor($R,&DWP(($BF_ROUNDS+1)*4,$P,"",0));
&mov("eax",&wparam(0));
&mov(&DWP(0,"eax","",0),$R);
&mov(&DWP(4,"eax","",0),$L);
&function_end_A($name);
&set_label("start_decrypt");
&xor($L,&DWP(($BF_ROUNDS+1)*4,$P,"",0));
for ($i=$BF_ROUNDS; $i>0; $i-=2)
{
&comment("");
&comment("Round $i");
&BF_ENCRYPT($i,$R,$L,$P,$tot,$tmp1,$tmp2,$tmp3);
&comment("");
&comment("Round ".sprintf("%d",$i-1));
&BF_ENCRYPT($i-1,$L,$R,$P,$tot,$tmp1,$tmp2,$tmp3);
}
&xor($R,&DWP(0,$P,"",0));
&mov("eax",&wparam(0));
&mov(&DWP(0,"eax","",0),$R);
&mov(&DWP(4,"eax","",0),$L);
&function_end_A($name);
&function_end_B($name);
}
sub BF_ENCRYPT
{
local($i,$L,$R,$P,$tot,$tmp1,$tmp2,$tmp3)=@_;
&rotr( $R, 16);
&mov( $tot, &DWP(&n2a($i*4),$P,"",0));
&movb( &LB($tmp1), &HB($R));
&movb( &LB($tmp2), &LB($R));
&rotr( $R, 16);
&xor( $L, $tot);
&mov( $tot, &DWP(&n2a($BF_OFF+0x0000),$P,$tmp1,4));
&mov( $tmp3, &DWP(&n2a($BF_OFF+0x0400),$P,$tmp2,4));
&movb( &LB($tmp1), &HB($R));
&movb( &LB($tmp2), &LB($R));
&add( $tot, $tmp3);
&mov( $tmp1, &DWP(&n2a($BF_OFF+0x0800),$P,$tmp1,4)); # delay
&xor( $tot, $tmp1);
&mov( $tmp3, &DWP(&n2a($BF_OFF+0x0C00),$P,$tmp2,4));
&add( $tot, $tmp3);
&xor( $tmp1, $tmp1);
&xor( $L, $tot);
# delay
}
sub n2a
{
sprintf("%d",$_[0]);
}

View File

@ -1,666 +0,0 @@
/* Don't even think of reading this code */
/* It was automatically generated by bf586.pl */
/* Which is a perl program used to generate the x86 assember for */
/* any of elf, a.out, Win32, or Solaris */
/* It can be found in SSLeay 0.7.0+ */
/* eric <eay@cryptsoft.com> */
.file "bfx86xxxx.s"
.version "01.01"
gcc2_compiled.:
.text
.align ALIGN
.globl BF_encrypt
TYPE(BF_encrypt,@function)
BF_encrypt:
pushl %ebp
pushl %ebx
pushl %esi
pushl %edi
/* Load the 2 words */
movl 20(%esp), %eax
movl (%eax), %ecx
movl 4(%eax), %edx
/* P pointer, s and enc flag */
movl 24(%esp), %edi
xorl %eax, %eax
xorl %ebx, %ebx
movl 28(%esp), %ebp
cmpl $0, %ebp
je .L000start_decrypt
xorl (%edi), %ecx
/* Round 0 */
rorl $16, %ecx
movl 4(%edi), %esi
movb %ch, %al
movb %cl, %bl
rorl $16, %ecx
xorl %esi, %edx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %ch, %al
movb %cl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %edx
/* Round 1 */
rorl $16, %edx
movl 8(%edi), %esi
movb %dh, %al
movb %dl, %bl
rorl $16, %edx
xorl %esi, %ecx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %dh, %al
movb %dl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %ecx
/* Round 2 */
rorl $16, %ecx
movl 12(%edi), %esi
movb %ch, %al
movb %cl, %bl
rorl $16, %ecx
xorl %esi, %edx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %ch, %al
movb %cl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %edx
/* Round 3 */
rorl $16, %edx
movl 16(%edi), %esi
movb %dh, %al
movb %dl, %bl
rorl $16, %edx
xorl %esi, %ecx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %dh, %al
movb %dl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %ecx
/* Round 4 */
rorl $16, %ecx
movl 20(%edi), %esi
movb %ch, %al
movb %cl, %bl
rorl $16, %ecx
xorl %esi, %edx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %ch, %al
movb %cl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %edx
/* Round 5 */
rorl $16, %edx
movl 24(%edi), %esi
movb %dh, %al
movb %dl, %bl
rorl $16, %edx
xorl %esi, %ecx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %dh, %al
movb %dl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %ecx
/* Round 6 */
rorl $16, %ecx
movl 28(%edi), %esi
movb %ch, %al
movb %cl, %bl
rorl $16, %ecx
xorl %esi, %edx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %ch, %al
movb %cl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %edx
/* Round 7 */
rorl $16, %edx
movl 32(%edi), %esi
movb %dh, %al
movb %dl, %bl
rorl $16, %edx
xorl %esi, %ecx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %dh, %al
movb %dl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %ecx
/* Round 8 */
rorl $16, %ecx
movl 36(%edi), %esi
movb %ch, %al
movb %cl, %bl
rorl $16, %ecx
xorl %esi, %edx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %ch, %al
movb %cl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %edx
/* Round 9 */
rorl $16, %edx
movl 40(%edi), %esi
movb %dh, %al
movb %dl, %bl
rorl $16, %edx
xorl %esi, %ecx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %dh, %al
movb %dl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %ecx
/* Round 10 */
rorl $16, %ecx
movl 44(%edi), %esi
movb %ch, %al
movb %cl, %bl
rorl $16, %ecx
xorl %esi, %edx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %ch, %al
movb %cl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %edx
/* Round 11 */
rorl $16, %edx
movl 48(%edi), %esi
movb %dh, %al
movb %dl, %bl
rorl $16, %edx
xorl %esi, %ecx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %dh, %al
movb %dl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %ecx
/* Round 12 */
rorl $16, %ecx
movl 52(%edi), %esi
movb %ch, %al
movb %cl, %bl
rorl $16, %ecx
xorl %esi, %edx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %ch, %al
movb %cl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %edx
/* Round 13 */
rorl $16, %edx
movl 56(%edi), %esi
movb %dh, %al
movb %dl, %bl
rorl $16, %edx
xorl %esi, %ecx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %dh, %al
movb %dl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %ecx
/* Round 14 */
rorl $16, %ecx
movl 60(%edi), %esi
movb %ch, %al
movb %cl, %bl
rorl $16, %ecx
xorl %esi, %edx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %ch, %al
movb %cl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %edx
/* Round 15 */
rorl $16, %edx
movl 64(%edi), %esi
movb %dh, %al
movb %dl, %bl
rorl $16, %edx
xorl %esi, %ecx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %dh, %al
movb %dl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %ecx
xorl 68(%edi), %edx
movl 20(%esp), %eax
movl %edx, (%eax)
movl %ecx, 4(%eax)
popl %edi
popl %esi
popl %ebx
popl %ebp
ret
.align ALIGN
.L000start_decrypt:
xorl 68(%edi), %ecx
/* Round 16 */
rorl $16, %ecx
movl 64(%edi), %esi
movb %ch, %al
movb %cl, %bl
rorl $16, %ecx
xorl %esi, %edx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %ch, %al
movb %cl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %edx
/* Round 15 */
rorl $16, %edx
movl 60(%edi), %esi
movb %dh, %al
movb %dl, %bl
rorl $16, %edx
xorl %esi, %ecx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %dh, %al
movb %dl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %ecx
/* Round 14 */
rorl $16, %ecx
movl 56(%edi), %esi
movb %ch, %al
movb %cl, %bl
rorl $16, %ecx
xorl %esi, %edx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %ch, %al
movb %cl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %edx
/* Round 13 */
rorl $16, %edx
movl 52(%edi), %esi
movb %dh, %al
movb %dl, %bl
rorl $16, %edx
xorl %esi, %ecx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %dh, %al
movb %dl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %ecx
/* Round 12 */
rorl $16, %ecx
movl 48(%edi), %esi
movb %ch, %al
movb %cl, %bl
rorl $16, %ecx
xorl %esi, %edx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %ch, %al
movb %cl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %edx
/* Round 11 */
rorl $16, %edx
movl 44(%edi), %esi
movb %dh, %al
movb %dl, %bl
rorl $16, %edx
xorl %esi, %ecx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %dh, %al
movb %dl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %ecx
/* Round 10 */
rorl $16, %ecx
movl 40(%edi), %esi
movb %ch, %al
movb %cl, %bl
rorl $16, %ecx
xorl %esi, %edx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %ch, %al
movb %cl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %edx
/* Round 9 */
rorl $16, %edx
movl 36(%edi), %esi
movb %dh, %al
movb %dl, %bl
rorl $16, %edx
xorl %esi, %ecx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %dh, %al
movb %dl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %ecx
/* Round 8 */
rorl $16, %ecx
movl 32(%edi), %esi
movb %ch, %al
movb %cl, %bl
rorl $16, %ecx
xorl %esi, %edx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %ch, %al
movb %cl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %edx
/* Round 7 */
rorl $16, %edx
movl 28(%edi), %esi
movb %dh, %al
movb %dl, %bl
rorl $16, %edx
xorl %esi, %ecx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %dh, %al
movb %dl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %ecx
/* Round 6 */
rorl $16, %ecx
movl 24(%edi), %esi
movb %ch, %al
movb %cl, %bl
rorl $16, %ecx
xorl %esi, %edx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %ch, %al
movb %cl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %edx
/* Round 5 */
rorl $16, %edx
movl 20(%edi), %esi
movb %dh, %al
movb %dl, %bl
rorl $16, %edx
xorl %esi, %ecx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %dh, %al
movb %dl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %ecx
/* Round 4 */
rorl $16, %ecx
movl 16(%edi), %esi
movb %ch, %al
movb %cl, %bl
rorl $16, %ecx
xorl %esi, %edx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %ch, %al
movb %cl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %edx
/* Round 3 */
rorl $16, %edx
movl 12(%edi), %esi
movb %dh, %al
movb %dl, %bl
rorl $16, %edx
xorl %esi, %ecx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %dh, %al
movb %dl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %ecx
/* Round 2 */
rorl $16, %ecx
movl 8(%edi), %esi
movb %ch, %al
movb %cl, %bl
rorl $16, %ecx
xorl %esi, %edx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %ch, %al
movb %cl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %edx
/* Round 1 */
rorl $16, %edx
movl 4(%edi), %esi
movb %dh, %al
movb %dl, %bl
rorl $16, %edx
xorl %esi, %ecx
movl 72(%edi,%eax,4),%esi
movl 1096(%edi,%ebx,4),%ebp
movb %dh, %al
movb %dl, %bl
addl %ebp, %esi
movl 2120(%edi,%eax,4),%eax
xorl %eax, %esi
movl 3144(%edi,%ebx,4),%ebp
addl %ebp, %esi
xorl %eax, %eax
xorl %esi, %ecx
xorl (%edi), %edx
movl 20(%esp), %eax
movl %edx, (%eax)
movl %ecx, 4(%eax)
popl %edi
popl %esi
popl %ebx
popl %ebp
ret
.BF_encrypt_end:
SIZE(BF_encrypt,.BF_encrypt_end-BF_encrypt)
.ident "desasm.pl"

View File

@ -1,663 +0,0 @@
; Don't even think of reading this code
; It was automatically generated by bf586.pl
; Which is a perl program used to generate the x86 assember for
; any of elf, a.out, Win32, or Solaris
; It can be found in SSLeay 0.7.0+
; eric <eay@cryptsoft.com>
;
TITLE bfx86xxxx.asm
.386
.model FLAT
_TEXT SEGMENT
PUBLIC _BF_encrypt
EXTRN _des_SPtrans:DWORD
_BF_encrypt PROC NEAR
push ebp
push ebx
push esi
push edi
;
; Load the 2 words
mov eax, DWORD PTR 20[esp]
mov ecx, DWORD PTR [eax]
mov edx, DWORD PTR 4[eax]
;
; P pointer, s and enc flag
mov edi, DWORD PTR 24[esp]
xor eax, eax
xor ebx, ebx
mov ebp, DWORD PTR 28[esp]
cmp ebp, 0
je $L000start_decrypt
xor ecx, DWORD PTR [edi]
;
; Round 0
ror ecx, 16
mov esi, DWORD PTR 4[edi]
mov al, ch
mov bl, cl
ror ecx, 16
xor edx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, ch
mov bl, cl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor edx, esi
;
; Round 1
ror edx, 16
mov esi, DWORD PTR 8[edi]
mov al, dh
mov bl, dl
ror edx, 16
xor ecx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, dh
mov bl, dl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor ecx, esi
;
; Round 2
ror ecx, 16
mov esi, DWORD PTR 12[edi]
mov al, ch
mov bl, cl
ror ecx, 16
xor edx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, ch
mov bl, cl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor edx, esi
;
; Round 3
ror edx, 16
mov esi, DWORD PTR 16[edi]
mov al, dh
mov bl, dl
ror edx, 16
xor ecx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, dh
mov bl, dl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor ecx, esi
;
; Round 4
ror ecx, 16
mov esi, DWORD PTR 20[edi]
mov al, ch
mov bl, cl
ror ecx, 16
xor edx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, ch
mov bl, cl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor edx, esi
;
; Round 5
ror edx, 16
mov esi, DWORD PTR 24[edi]
mov al, dh
mov bl, dl
ror edx, 16
xor ecx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, dh
mov bl, dl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor ecx, esi
;
; Round 6
ror ecx, 16
mov esi, DWORD PTR 28[edi]
mov al, ch
mov bl, cl
ror ecx, 16
xor edx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, ch
mov bl, cl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor edx, esi
;
; Round 7
ror edx, 16
mov esi, DWORD PTR 32[edi]
mov al, dh
mov bl, dl
ror edx, 16
xor ecx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, dh
mov bl, dl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor ecx, esi
;
; Round 8
ror ecx, 16
mov esi, DWORD PTR 36[edi]
mov al, ch
mov bl, cl
ror ecx, 16
xor edx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, ch
mov bl, cl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor edx, esi
;
; Round 9
ror edx, 16
mov esi, DWORD PTR 40[edi]
mov al, dh
mov bl, dl
ror edx, 16
xor ecx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, dh
mov bl, dl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor ecx, esi
;
; Round 10
ror ecx, 16
mov esi, DWORD PTR 44[edi]
mov al, ch
mov bl, cl
ror ecx, 16
xor edx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, ch
mov bl, cl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor edx, esi
;
; Round 11
ror edx, 16
mov esi, DWORD PTR 48[edi]
mov al, dh
mov bl, dl
ror edx, 16
xor ecx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, dh
mov bl, dl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor ecx, esi
;
; Round 12
ror ecx, 16
mov esi, DWORD PTR 52[edi]
mov al, ch
mov bl, cl
ror ecx, 16
xor edx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, ch
mov bl, cl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor edx, esi
;
; Round 13
ror edx, 16
mov esi, DWORD PTR 56[edi]
mov al, dh
mov bl, dl
ror edx, 16
xor ecx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, dh
mov bl, dl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor ecx, esi
;
; Round 14
ror ecx, 16
mov esi, DWORD PTR 60[edi]
mov al, ch
mov bl, cl
ror ecx, 16
xor edx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, ch
mov bl, cl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor edx, esi
;
; Round 15
ror edx, 16
mov esi, DWORD PTR 64[edi]
mov al, dh
mov bl, dl
ror edx, 16
xor ecx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, dh
mov bl, dl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor ecx, esi
xor edx, DWORD PTR 68[edi]
mov eax, DWORD PTR 20[esp]
mov DWORD PTR [eax],edx
mov DWORD PTR 4[eax],ecx
pop edi
pop esi
pop ebx
pop ebp
ret
$L000start_decrypt:
xor ecx, DWORD PTR 68[edi]
;
; Round 16
ror ecx, 16
mov esi, DWORD PTR 64[edi]
mov al, ch
mov bl, cl
ror ecx, 16
xor edx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, ch
mov bl, cl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor edx, esi
;
; Round 15
ror edx, 16
mov esi, DWORD PTR 60[edi]
mov al, dh
mov bl, dl
ror edx, 16
xor ecx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, dh
mov bl, dl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor ecx, esi
;
; Round 14
ror ecx, 16
mov esi, DWORD PTR 56[edi]
mov al, ch
mov bl, cl
ror ecx, 16
xor edx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, ch
mov bl, cl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor edx, esi
;
; Round 13
ror edx, 16
mov esi, DWORD PTR 52[edi]
mov al, dh
mov bl, dl
ror edx, 16
xor ecx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, dh
mov bl, dl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor ecx, esi
;
; Round 12
ror ecx, 16
mov esi, DWORD PTR 48[edi]
mov al, ch
mov bl, cl
ror ecx, 16
xor edx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, ch
mov bl, cl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor edx, esi
;
; Round 11
ror edx, 16
mov esi, DWORD PTR 44[edi]
mov al, dh
mov bl, dl
ror edx, 16
xor ecx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, dh
mov bl, dl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor ecx, esi
;
; Round 10
ror ecx, 16
mov esi, DWORD PTR 40[edi]
mov al, ch
mov bl, cl
ror ecx, 16
xor edx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, ch
mov bl, cl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor edx, esi
;
; Round 9
ror edx, 16
mov esi, DWORD PTR 36[edi]
mov al, dh
mov bl, dl
ror edx, 16
xor ecx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, dh
mov bl, dl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor ecx, esi
;
; Round 8
ror ecx, 16
mov esi, DWORD PTR 32[edi]
mov al, ch
mov bl, cl
ror ecx, 16
xor edx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, ch
mov bl, cl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor edx, esi
;
; Round 7
ror edx, 16
mov esi, DWORD PTR 28[edi]
mov al, dh
mov bl, dl
ror edx, 16
xor ecx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, dh
mov bl, dl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor ecx, esi
;
; Round 6
ror ecx, 16
mov esi, DWORD PTR 24[edi]
mov al, ch
mov bl, cl
ror ecx, 16
xor edx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, ch
mov bl, cl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor edx, esi
;
; Round 5
ror edx, 16
mov esi, DWORD PTR 20[edi]
mov al, dh
mov bl, dl
ror edx, 16
xor ecx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, dh
mov bl, dl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor ecx, esi
;
; Round 4
ror ecx, 16
mov esi, DWORD PTR 16[edi]
mov al, ch
mov bl, cl
ror ecx, 16
xor edx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, ch
mov bl, cl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor edx, esi
;
; Round 3
ror edx, 16
mov esi, DWORD PTR 12[edi]
mov al, dh
mov bl, dl
ror edx, 16
xor ecx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, dh
mov bl, dl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor ecx, esi
;
; Round 2
ror ecx, 16
mov esi, DWORD PTR 8[edi]
mov al, ch
mov bl, cl
ror ecx, 16
xor edx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, ch
mov bl, cl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor edx, esi
;
; Round 1
ror edx, 16
mov esi, DWORD PTR 4[edi]
mov al, dh
mov bl, dl
ror edx, 16
xor ecx, esi
mov esi, DWORD PTR 72[eax*4+edi]
mov ebp, DWORD PTR 1096[ebx*4+edi]
mov al, dh
mov bl, dl
add esi, ebp
mov eax, DWORD PTR 2120[eax*4+edi]
xor esi, eax
mov ebp, DWORD PTR 3144[ebx*4+edi]
add esi, ebp
xor eax, eax
xor ecx, esi
xor edx, DWORD PTR [edi]
mov eax, DWORD PTR 20[esp]
mov DWORD PTR [eax],edx
mov DWORD PTR 4[eax],ecx
pop edi
pop esi
pop ebx
pop ebp
ret
_BF_encrypt ENDP
_TEXT ENDS
END

View File

@ -1,243 +0,0 @@
/* crypto/bf/bf_local.h */
/* Copyright (C) 1995-1997 Eric Young (eay@mincom.oz.au)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@mincom.oz.au).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@mincom.oz.au).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@mincom.oz.au)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@mincom.oz.au)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
/* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
*
* Always modify bf_locl.org since bf_locl.h is automatically generated from
* it during SSLeay configuration.
*
* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
*/
/* Special defines which change the way the code is built depending on the
CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find
even newer MIPS CPU's, but at the moment one size fits all for
optimization options. Older Sparc's work better with only UNROLL, but
there's no way to tell at compile time what it is you're running on */
#if defined( sun ) /* Newer Sparc's */
# define BF_PTR
#elif defined( __ultrix ) /* Older MIPS */
# define BF_PTR
#elif defined( __osf1__ ) /* Alpha */
/* None */
#elif defined ( _AIX ) /* RS6000 */
/* Unknown */
#elif defined( __hpux ) /* HP-PA */
/* None */
#elif defined( __aux ) /* 68K */
/* Unknown */
#elif defined( __dgux ) /* 88K (but P6 in latest boxes) */
/* Unknown */
#elif defined( __sgi ) /* Newer MIPS */
# define BF_PTR
#elif defined( i386 ) /* x86 boxes, should be gcc */
# define BF_PTR2
#elif defined( _MSC_VER ) /* x86 boxes, Visual C */
# define BF_PTR2
#endif /* Systems-specific speed defines */
#undef c2l
#define c2l(c,l) (l =((unsigned long)(*((c)++))) , \
l|=((unsigned long)(*((c)++)))<< 8L, \
l|=((unsigned long)(*((c)++)))<<16L, \
l|=((unsigned long)(*((c)++)))<<24L)
/* NOTE - c is not incremented as per c2l */
#undef c2ln
#define c2ln(c,l1,l2,n) { \
c+=n; \
l1=l2=0; \
switch (n) { \
case 8: l2 =((unsigned long)(*(--(c))))<<24L; \
case 7: l2|=((unsigned long)(*(--(c))))<<16L; \
case 6: l2|=((unsigned long)(*(--(c))))<< 8L; \
case 5: l2|=((unsigned long)(*(--(c)))); \
case 4: l1 =((unsigned long)(*(--(c))))<<24L; \
case 3: l1|=((unsigned long)(*(--(c))))<<16L; \
case 2: l1|=((unsigned long)(*(--(c))))<< 8L; \
case 1: l1|=((unsigned long)(*(--(c)))); \
} \
}
#undef l2c
#define l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \
*((c)++)=(unsigned char)(((l)>> 8L)&0xff), \
*((c)++)=(unsigned char)(((l)>>16L)&0xff), \
*((c)++)=(unsigned char)(((l)>>24L)&0xff))
/* NOTE - c is not incremented as per l2c */
#undef l2cn
#define l2cn(l1,l2,c,n) { \
c+=n; \
switch (n) { \
case 8: *(--(c))=(unsigned char)(((l2)>>24L)&0xff); \
case 7: *(--(c))=(unsigned char)(((l2)>>16L)&0xff); \
case 6: *(--(c))=(unsigned char)(((l2)>> 8L)&0xff); \
case 5: *(--(c))=(unsigned char)(((l2) )&0xff); \
case 4: *(--(c))=(unsigned char)(((l1)>>24L)&0xff); \
case 3: *(--(c))=(unsigned char)(((l1)>>16L)&0xff); \
case 2: *(--(c))=(unsigned char)(((l1)>> 8L)&0xff); \
case 1: *(--(c))=(unsigned char)(((l1) )&0xff); \
} \
}
/* NOTE - c is not incremented as per n2l */
#define n2ln(c,l1,l2,n) { \
c+=n; \
l1=l2=0; \
switch (n) { \
case 8: l2 =((unsigned long)(*(--(c)))) ; \
case 7: l2|=((unsigned long)(*(--(c))))<< 8; \
case 6: l2|=((unsigned long)(*(--(c))))<<16; \
case 5: l2|=((unsigned long)(*(--(c))))<<24; \
case 4: l1 =((unsigned long)(*(--(c)))) ; \
case 3: l1|=((unsigned long)(*(--(c))))<< 8; \
case 2: l1|=((unsigned long)(*(--(c))))<<16; \
case 1: l1|=((unsigned long)(*(--(c))))<<24; \
} \
}
/* NOTE - c is not incremented as per l2n */
#define l2nn(l1,l2,c,n) { \
c+=n; \
switch (n) { \
case 8: *(--(c))=(unsigned char)(((l2) )&0xff); \
case 7: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \
case 6: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \
case 5: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \
case 4: *(--(c))=(unsigned char)(((l1) )&0xff); \
case 3: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \
case 2: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \
case 1: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \
} \
}
#undef n2l
#define n2l(c,l) (l =((unsigned long)(*((c)++)))<<24L, \
l|=((unsigned long)(*((c)++)))<<16L, \
l|=((unsigned long)(*((c)++)))<< 8L, \
l|=((unsigned long)(*((c)++))))
#undef l2n
#define l2n(l,c) (*((c)++)=(unsigned char)(((l)>>24L)&0xff), \
*((c)++)=(unsigned char)(((l)>>16L)&0xff), \
*((c)++)=(unsigned char)(((l)>> 8L)&0xff), \
*((c)++)=(unsigned char)(((l) )&0xff))
/* This is actually a big endian algorithm, the most significate byte
* is used to lookup array 0 */
/* use BF_PTR2 for intel boxes,
* BF_PTR for sparc and MIPS/SGI
* use nothing for Alpha and HP.
*/
#if !defined(BF_PTR) && !defined(BF_PTR2)
#undef BF_PTR
#endif
#define BF_M 0x3fc
#define BF_0 22L
#define BF_1 14L
#define BF_2 6L
#define BF_3 2L /* left shift */
#if defined(BF_PTR2)
/* This is basically a special pentium verson */
#define BF_ENC(LL,R,S,P) \
{ \
BF_LONG t,u,v; \
u=R>>BF_0; \
v=R>>BF_1; \
u&=BF_M; \
v&=BF_M; \
t= *(BF_LONG *)((unsigned char *)&(S[ 0])+u); \
u=R>>BF_2; \
t+= *(BF_LONG *)((unsigned char *)&(S[256])+v); \
v=R<<BF_3; \
u&=BF_M; \
v&=BF_M; \
t^= *(BF_LONG *)((unsigned char *)&(S[512])+u); \
LL^=P; \
t+= *(BF_LONG *)((unsigned char *)&(S[768])+v); \
LL^=t; \
}
#elif defined(BF_PTR)
/* This is normally very good */
#define BF_ENC(LL,R,S,P) \
LL^=P; \
LL^= (((*(BF_LONG *)((unsigned char *)&(S[ 0])+((R>>BF_0)&BF_M))+ \
*(BF_LONG *)((unsigned char *)&(S[256])+((R>>BF_1)&BF_M)))^ \
*(BF_LONG *)((unsigned char *)&(S[512])+((R>>BF_2)&BF_M)))+ \
*(BF_LONG *)((unsigned char *)&(S[768])+((R<<BF_3)&BF_M)));
#else
/* This will always work, even on 64 bit machines and strangly enough,
* on the Alpha it is faster than the pointer versions (both 32 and 64
* versions of BF_LONG) */
#define BF_ENC(LL,R,S,P) \
LL^=P; \
LL^=((( S[ (int)(R>>24L) ] + \
S[0x0100+((int)(R>>16L)&0xff)])^ \
S[0x0200+((int)(R>> 8L)&0xff)])+ \
S[0x0300+((int)(R )&0xff)])&0xffffffffL;
#endif

12
crypto/bn/asm/......add.c Normal file
View File

@ -0,0 +1,12 @@
#include <stdio.h>
{
unsigned long a[10],b[10],c[10];
a[0]=0xFFFFFFFF;
a[1]=0xFFFFFFFF;
b[0]=0xFFFFFFFF;
b[1]=0xFFFFFFFF;
c[2]=bn_add_words(c,a,b,2);
printf("%08X %08X %08X\n",c[2],c[1],c[0]);
}

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,272 +0,0 @@
.file "bn_mulw.c"
.version "01.01"
gcc2_compiled.:
.text
.align 4
.globl _bn_mul_add_word
_bn_mul_add_word:
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
# ax L(t)
# dx H(t)
# bx a
# cx w
# di r
# si c
# bp num
xorl %esi,%esi # c=0
movl 20(%esp),%edi # r => edi
movl 24(%esp),%ebx # a => exb
movl 32(%esp),%ecx # w => ecx
movl 28(%esp),%ebp # num => ebp
shrl $2,%ebp # num/4
je .L910
# .align 4
.L110:
# Round 1
movl %ecx,%eax # w => eax
mull (%ebx) # w * *a
addl (%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+= carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
# Round 2
movl %ecx,%eax # w => eax
mull 4(%ebx) # w * *a
addl 4(%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+= carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,4(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
# Round 3
movl %ecx,%eax # w => eax
mull 8(%ebx) # w * *a
addl 8(%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+=carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,8(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
# Round 4
movl %ecx,%eax # w => eax
mull 12(%ebx) # w * *a
addl 12(%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+=carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,12(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
addl $16,%ebx # a+=4 (4 words)
addl $16,%edi # r+=4 (4 words)
decl %ebp # --num
je .L910
jmp .L110
# .align 4
.L910:
movl 28(%esp),%ebp # num => ebp
andl $3,%ebp
je .L111
# Round 1
movl %ecx,%eax # w => eax
mull (%ebx) # w * *a
addl (%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+=carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L111
# Round 2
movl %ecx,%eax # w => eax
mull 4(%ebx) # w * *a
addl 4(%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+=carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,4(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L111
# Round 3
movl %ecx,%eax # w => eax
mull 8(%ebx) # w * *a
addl 8(%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+=carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,8(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
# .align 4
.L111:
movl %esi,%eax # return(c)
popl %ebx
popl %esi
popl %edi
popl %ebp
ret
.Lfe1:
.align 4
.globl _bn_mul_word
_bn_mul_word:
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
# ax L(t)
# dx H(t)
# bx a
# cx w
# di r
# num bp
# si c
xorl %esi,%esi # c=0
movl 20(%esp),%edi # r => edi
movl 24(%esp),%ebx # a => exb
movl 28(%esp),%ebp # num => bp
movl 32(%esp),%ecx # w => ecx
# .align 4
.L210:
movl %ecx,%eax # w => eax
mull (%ebx) # w * *a
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,(%edi) # *r=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L211
movl %ecx,%eax # w => eax
mull 4(%ebx) # w * *a
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,4(%edi) # *r=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L211
movl %ecx,%eax # w => eax
mull 8(%ebx) # w * *a
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,8(%edi) # *r=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L211
movl %ecx,%eax # w => eax
mull 12(%ebx) # w * *a
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,12(%edi) # *r=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L211
addl $16,%ebx # a+=4 (4 words)
addl $16,%edi # r+=4 (4 words)
jmp .L210
# .align 4
.L211:
movl %esi,%eax # return(c)
popl %ebx
popl %esi
popl %edi
popl %ebp
ret
.Lfe2:
.align 4
.globl _bn_sqr_words
_bn_sqr_words:
pushl %edi
pushl %esi
pushl %ebx
movl 16(%esp),%esi # r
movl 20(%esp),%edi # a
movl 24(%esp),%ebx # n
# .align 4
shrl $2,%ebx
jz .L99
.L28:
movl (%edi),%eax # get a
mull %eax # a*a
movl %eax,(%esi) # put low into return addr
movl %edx,4(%esi) # put high into return addr
movl 4(%edi),%eax # get a
mull %eax # a*a
movl %eax,8(%esi) # put low into return addr
movl %edx,12(%esi) # put high into return addr
movl 8(%edi),%eax # get a
mull %eax # a*a
movl %eax,16(%esi) # put low into return addr
movl %edx,20(%esi) # put high into return addr
movl 12(%edi),%eax # get a
mull %eax # a*a
movl %eax,24(%esi) # put low into return addr
movl %edx,28(%esi) # put high into return addr
addl $16,%edi
addl $32,%esi
decl %ebx # n-=4;
jz .L99
jmp .L28
# .align 4
.L99:
movl 24(%esp),%ebx # n
andl $3,%ebx
jz .L29
movl (%edi),%eax # get a
mull %eax # a*a
movl %eax,(%esi) # put low into return addr
movl %edx,4(%esi) # put high into return addr
decl %ebx # n--;
jz .L29
movl 4(%edi),%eax # get a
mull %eax # a*a
movl %eax,8(%esi) # put low into return addr
movl %edx,12(%esi) # put high into return addr
decl %ebx # n--;
jz .L29
movl 8(%edi),%eax # get a
mull %eax # a*a
movl %eax,16(%esi) # put low into return addr
movl %edx,20(%esi) # put high into return addr
.L29:
popl %ebx
popl %esi
popl %edi
ret
.Lfe3:
.align 4
.globl _bn_div64
_bn_div64:
movl 4(%esp),%edx # a
movl 8(%esp),%eax # b
divl 12(%esp) # ab/c
ret
.Lfe4:
.ident "GCC: (GNU) 2.6.3"

View File

@ -1,282 +0,0 @@
.file "bn_mulw.c"
.version "01.01"
gcc2_compiled.:
.text
.align 16
.globl bn_mul_add_word
.type bn_mul_add_word,@function
bn_mul_add_word:
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
# ax L(t)
# dx H(t)
# bx a
# cx w
# di r
# si c
# bp num
xorl %esi,%esi # c=0
movl 20(%esp),%edi # r => edi
movl 24(%esp),%ebx # a => exb
movl 32(%esp),%ecx # w => ecx
movl 28(%esp),%ebp # num => ebp
shrl $2,%ebp # num/4
je .L910
.align 4
.L110:
# Round 1
movl %ecx,%eax # w => eax
mull (%ebx) # w * *a
addl (%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+= carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
# Round 2
movl %ecx,%eax # w => eax
mull 4(%ebx) # w * *a
addl 4(%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+= carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,4(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
# Round 3
movl %ecx,%eax # w => eax
mull 8(%ebx) # w * *a
addl 8(%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+=carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,8(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
# Round 4
movl %ecx,%eax # w => eax
mull 12(%ebx) # w * *a
addl 12(%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+=carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,12(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
addl $16,%ebx # a+=4 (4 words)
addl $16,%edi # r+=4 (4 words)
decl %ebp # --num
je .L910
jmp .L110
.align 4
.L910:
movl 28(%esp),%ebp # num => ebp
andl $3,%ebp
je .L111
# Round 1
movl %ecx,%eax # w => eax
mull (%ebx) # w * *a
addl (%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+=carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L111
# Round 2
movl %ecx,%eax # w => eax
mull 4(%ebx) # w * *a
addl 4(%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+=carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,4(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L111
# Round 3
movl %ecx,%eax # w => eax
mull 8(%ebx) # w * *a
addl 8(%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+=carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,8(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
.align 4
.L111:
movl %esi,%eax # return(c)
popl %ebx
popl %esi
popl %edi
popl %ebp
ret
.Lfe1:
.size bn_mul_add_word,.Lfe1-bn_mul_add_word
.align 16
.globl bn_mul_word
.type bn_mul_word,@function
bn_mul_word:
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
# ax L(t)
# dx H(t)
# bx a
# cx w
# di r
# num bp
# si c
xorl %esi,%esi # c=0
movl 20(%esp),%edi # r => edi
movl 24(%esp),%ebx # a => exb
movl 28(%esp),%ebp # num => bp
movl 32(%esp),%ecx # w => ecx
.align 4
.L210:
movl %ecx,%eax # w => eax
mull (%ebx) # w * *a
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,(%edi) # *r=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L211
movl %ecx,%eax # w => eax
mull 4(%ebx) # w * *a
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,4(%edi) # *r=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L211
movl %ecx,%eax # w => eax
mull 8(%ebx) # w * *a
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,8(%edi) # *r=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L211
movl %ecx,%eax # w => eax
mull 12(%ebx) # w * *a
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,12(%edi) # *r=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L211
addl $16,%ebx # a+=4 (4 words)
addl $16,%edi # r+=4 (4 words)
jmp .L210
.align 16
.L211:
movl %esi,%eax # return(c)
popl %ebx
popl %esi
popl %edi
popl %ebp
ret
.Lfe2:
.size bn_mul_word,.Lfe2-bn_mul_word
.align 16
.globl bn_sqr_words
.type bn_sqr_words,@function
bn_sqr_words:
pushl %edi
pushl %esi
pushl %ebx
movl 16(%esp),%esi # r
movl 20(%esp),%edi # a
movl 24(%esp),%ebx # n
.align 4
shrl $2,%ebx
jz .L99
.L28:
movl (%edi),%eax # get a
mull %eax # a*a
movl %eax,(%esi) # put low into return addr
movl %edx,4(%esi) # put high into return addr
movl 4(%edi),%eax # get a
mull %eax # a*a
movl %eax,8(%esi) # put low into return addr
movl %edx,12(%esi) # put high into return addr
movl 8(%edi),%eax # get a
mull %eax # a*a
movl %eax,16(%esi) # put low into return addr
movl %edx,20(%esi) # put high into return addr
movl 12(%edi),%eax # get a
mull %eax # a*a
movl %eax,24(%esi) # put low into return addr
movl %edx,28(%esi) # put high into return addr
addl $16,%edi
addl $32,%esi
decl %ebx # n-=4;
jz .L99
jmp .L28
.align 16
.L99:
movl 24(%esp),%ebx # n
andl $3,%ebx
jz .L29
movl (%edi),%eax # get a
mull %eax # a*a
movl %eax,(%esi) # put low into return addr
movl %edx,4(%esi) # put high into return addr
decl %ebx # n--;
jz .L29
movl 4(%edi),%eax # get a
mull %eax # a*a
movl %eax,8(%esi) # put low into return addr
movl %edx,12(%esi) # put high into return addr
decl %ebx # n--;
jz .L29
movl 8(%edi),%eax # get a
mull %eax # a*a
movl %eax,16(%esi) # put low into return addr
movl %edx,20(%esi) # put high into return addr
.L29:
popl %ebx
popl %esi
popl %edi
ret
.Lfe3:
.size bn_sqr_words,.Lfe3-bn_sqr_words
.align 16
.globl bn_div64
.type bn_div64,@function
bn_div64:
movl 4(%esp),%edx # a
movl 8(%esp),%eax # b
divl 12(%esp) # ab/c
ret
.Lfe4:
.size bn_div64,.Lfe4-bn_div64
.ident "GCC: (GNU) 2.6.3"

View File

@ -1,282 +0,0 @@
.file "bn_mulw.c"
.version "01.01"
gcc2_compiled.:
.text
.align 4
.globl _bn_mul_add_word
.type _bn_mul_add_word,@function
_bn_mul_add_word:
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
# ax L(t)
# dx H(t)
# bx a
# cx w
# di r
# si c
# bp num
xorl %esi,%esi # c=0
movl 20(%esp),%edi # r => edi
movl 24(%esp),%ebx # a => exb
movl 32(%esp),%ecx # w => ecx
movl 28(%esp),%ebp # num => ebp
shrl $2,%ebp # num/4
je .L910
# .align 4
.L110:
# Round 1
movl %ecx,%eax # w => eax
mull (%ebx) # w * *a
addl (%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+= carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
# Round 2
movl %ecx,%eax # w => eax
mull 4(%ebx) # w * *a
addl 4(%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+= carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,4(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
# Round 3
movl %ecx,%eax # w => eax
mull 8(%ebx) # w * *a
addl 8(%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+=carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,8(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
# Round 4
movl %ecx,%eax # w => eax
mull 12(%ebx) # w * *a
addl 12(%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+=carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,12(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
addl $16,%ebx # a+=4 (4 words)
addl $16,%edi # r+=4 (4 words)
decl %ebp # --num
je .L910
jmp .L110
# .align 4
.L910:
movl 28(%esp),%ebp # num => ebp
andl $3,%ebp
je .L111
# Round 1
movl %ecx,%eax # w => eax
mull (%ebx) # w * *a
addl (%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+=carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L111
# Round 2
movl %ecx,%eax # w => eax
mull 4(%ebx) # w * *a
addl 4(%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+=carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,4(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L111
# Round 3
movl %ecx,%eax # w => eax
mull 8(%ebx) # w * *a
addl 8(%edi),%eax # *r+=L(t)
adcl $0,%edx # H(t)+=carry
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,8(%edi) # *r+=L(t)
movl %edx,%esi # c=H(t)
# .align 4
.L111:
movl %esi,%eax # return(c)
popl %ebx
popl %esi
popl %edi
popl %ebp
ret
.Lfe1:
.size _bn_mul_add_word,.Lfe1-_bn_mul_add_word
.align 4
.globl _bn_mul_word
.type _bn_mul_word,@function
_bn_mul_word:
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
# ax L(t)
# dx H(t)
# bx a
# cx w
# di r
# num bp
# si c
xorl %esi,%esi # c=0
movl 20(%esp),%edi # r => edi
movl 24(%esp),%ebx # a => exb
movl 28(%esp),%ebp # num => bp
movl 32(%esp),%ecx # w => ecx
# .align 4
.L210:
movl %ecx,%eax # w => eax
mull (%ebx) # w * *a
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,(%edi) # *r=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L211
movl %ecx,%eax # w => eax
mull 4(%ebx) # w * *a
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,4(%edi) # *r=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L211
movl %ecx,%eax # w => eax
mull 8(%ebx) # w * *a
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,8(%edi) # *r=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L211
movl %ecx,%eax # w => eax
mull 12(%ebx) # w * *a
addl %esi,%eax # L(t)+=c
adcl $0,%edx # H(t)+=carry
movl %eax,12(%edi) # *r=L(t)
movl %edx,%esi # c=H(t)
decl %ebp # --num
je .L211
addl $16,%ebx # a+=4 (4 words)
addl $16,%edi # r+=4 (4 words)
jmp .L210
# .align 4
.L211:
movl %esi,%eax # return(c)
popl %ebx
popl %esi
popl %edi
popl %ebp
ret
.Lfe2:
.size _bn_mul_word,.Lfe2-_bn_mul_word
.align 4
.globl _bn_sqr_words
.type _bn_sqr_words,@function
_bn_sqr_words:
pushl %edi
pushl %esi
pushl %ebx
movl 16(%esp),%esi # r
movl 20(%esp),%edi # a
movl 24(%esp),%ebx # n
# .align 4
shrl $2,%ebx
jz .L99
.L28:
movl (%edi),%eax # get a
mull %eax # a*a
movl %eax,(%esi) # put low into return addr
movl %edx,4(%esi) # put high into return addr
movl 4(%edi),%eax # get a
mull %eax # a*a
movl %eax,8(%esi) # put low into return addr
movl %edx,12(%esi) # put high into return addr
movl 8(%edi),%eax # get a
mull %eax # a*a
movl %eax,16(%esi) # put low into return addr
movl %edx,20(%esi) # put high into return addr
movl 12(%edi),%eax # get a
mull %eax # a*a
movl %eax,24(%esi) # put low into return addr
movl %edx,28(%esi) # put high into return addr
addl $16,%edi
addl $32,%esi
decl %ebx # n-=4;
jz .L99
jmp .L28
# .align 4
.L99:
movl 24(%esp),%ebx # n
andl $3,%ebx
jz .L29
movl (%edi),%eax # get a
mull %eax # a*a
movl %eax,(%esi) # put low into return addr
movl %edx,4(%esi) # put high into return addr
decl %ebx # n--;
jz .L29
movl 4(%edi),%eax # get a
mull %eax # a*a
movl %eax,8(%esi) # put low into return addr
movl %edx,12(%esi) # put high into return addr
decl %ebx # n--;
jz .L29
movl 8(%edi),%eax # get a
mull %eax # a*a
movl %eax,16(%esi) # put low into return addr
movl %edx,20(%esi) # put high into return addr
.L29:
popl %ebx
popl %esi
popl %edi
ret
.Lfe3:
.size _bn_sqr_words,.Lfe3-_bn_sqr_words
.align 4
.globl _bn_div64
.type _bn_div64,@function
_bn_div64:
movl 4(%esp),%edx # a
movl 8(%esp),%eax # b
divl 12(%esp) # ab/c
ret
.Lfe4:
.size _bn_div64,.Lfe4-_bn_div64
.ident "GCC: (GNU) 2.6.3"

View File

@ -1,224 +0,0 @@
.file "bn_mulw.c"
.version "01.01"
gcc2_compiled.:
.text
.align 16
.globl bn_mul_add_word
.type bn_mul_add_word,@function
bn_mul_add_word:
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
/ ax L(t)
/ dx H(t)
/ bx a
/ cx w
/ di r
/ si c
/ bp num
xorl %esi,%esi / c=0
movl 20(%esp),%edi / r => edi
movl 24(%esp),%ebx / a => exb
movl 28(%esp),%ebp / num => ebp
movl 32(%esp),%ecx / w => ecx
.align 4
.L110:
movl %ecx,%eax / w => eax
mull (%ebx) / w * *a
addl (%edi),%eax / L(t)+= *r
adcl $0,%edx / H(t)+= carry
addl %esi,%eax / L(t)+=c
adcl $0,%edx / H(t)+=carry
movl %eax,(%edi) / *r=L(t)
movl %edx,%esi / c=H(t)
decl %ebp / --num
je .L111
movl %ecx,%eax / w => eax
mull 4(%ebx) / w * *a
addl 4(%edi),%eax / L(t)+= *r
adcl $0,%edx / H(t)+= carry
addl %esi,%eax / L(t)+=c
adcl $0,%edx / H(t)+=carry
movl %eax,4(%edi) / *r=L(t)
movl %edx,%esi / c=H(t)
decl %ebp / --num
je .L111
movl %ecx,%eax / w => eax
mull 8(%ebx) / w * *a
addl 8(%edi),%eax / L(t)+= *r
adcl $0,%edx / H(t)+= carry
addl %esi,%eax / L(t)+=c
adcl $0,%edx / H(t)+=carry
movl %eax,8(%edi) / *r=L(t)
movl %edx,%esi / c=H(t)
decl %ebp / --num
je .L111
movl %ecx,%eax / w => eax
mull 12(%ebx) / w * *a
addl 12(%edi),%eax / L(t)+= *r
adcl $0,%edx / H(t)+= carry
addl %esi,%eax / L(t)+=c
adcl $0,%edx / H(t)+=carry
movl %eax,12(%edi) / *r=L(t)
movl %edx,%esi / c=H(t)
decl %ebp / --num
je .L111
addl $16,%ebx / a+=4 (4 words)
addl $16,%edi / r+=4 (4 words)
jmp .L110
.align 16
.L111:
movl %esi,%eax / return(c)
popl %ebx
popl %esi
popl %edi
popl %ebp
ret
.Lfe1:
.size bn_mul_add_word,.Lfe1-bn_mul_add_word
.align 16
.globl bn_mul_word
.type bn_mul_word,@function
bn_mul_word:
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
/ ax L(t)
/ dx H(t)
/ bx a
/ cx w
/ di r
/ num bp
/ si c
xorl %esi,%esi / c=0
movl 20(%esp),%edi / r => edi
movl 24(%esp),%ebx / a => exb
movl 28(%esp),%ebp / num => ebp
movl 32(%esp),%ecx / w => ecx
.align 4
.L210:
movl %ecx,%eax / w => eax
mull (%ebx) / w * *a
addl %esi,%eax / L(t)+=c
adcl $0,%edx / H(t)+=carry
movl %eax,(%edi) / *r=L(t)
movl %edx,%esi / c=H(t)
decl %ebp / --num
je .L211
movl %ecx,%eax / w => eax
mull 4(%ebx) / w * *a
addl %esi,%eax / L(t)+=c
adcl $0,%edx / H(t)+=carry
movl %eax,4(%edi) / *r=L(t)
movl %edx,%esi / c=H(t)
decl %ebp / --num
je .L211
movl %ecx,%eax / w => eax
mull 8(%ebx) / w * *a
addl %esi,%eax / L(t)+=c
adcl $0,%edx / H(t)+=carry
movl %eax,8(%edi) / *r=L(t)
movl %edx,%esi / c=H(t)
decl %ebp / --num
je .L211
movl %ecx,%eax / w => eax
mull 12(%ebx) / w * *a
addl %esi,%eax / L(t)+=c
adcl $0,%edx / H(t)+=carry
movl %eax,12(%edi) / *r=L(t)
movl %edx,%esi / c=H(t)
decl %ebp / --num
je .L211
addl $16,%ebx / a+=4 (4 words)
addl $16,%edi / r+=4 (4 words)
jmp .L210
.align 16
.L211:
movl %esi,%eax / return(c)
popl %ebx
popl %esi
popl %edi
popl %ebp
ret
.Lfe2:
.size bn_mul_word,.Lfe2-bn_mul_word
.align 16
.globl bn_sqr_words
.type bn_sqr_words,@function
bn_sqr_words:
pushl %edi
pushl %esi
pushl %ebx
movl 16(%esp),%esi / r
movl 20(%esp),%edi / a
movl 24(%esp),%ebx / n
.align 4
.L28:
movl (%edi),%eax / get a
mull %eax / a*a
movl %eax,(%esi) / put low into return addr
movl %edx,4(%esi) / put high into return addr
decl %ebx / n--;
je .L29
movl 4(%edi),%eax / get a
mull %eax / a*a
movl %eax,8(%esi) / put low into return addr
movl %edx,12(%esi) / put high into return addr
decl %ebx / n--;
je .L29
movl 8(%edi),%eax / get a
mull %eax / a*a
movl %eax,16(%esi) / put low into return addr
movl %edx,20(%esi) / put high into return addr
decl %ebx / n--;
je .L29
movl 12(%edi),%eax / get a
mull %eax / a*a
movl %eax,24(%esi) / put low into return addr
movl %edx,28(%esi) / put high into return addr
decl %ebx / n--;
je .L29
addl $16,%edi
addl $32,%esi
jmp .L28
.align 16
.L29:
popl %ebx
popl %esi
popl %edi
ret
.Lfe3:
.size bn_sqr_words,.Lfe3-bn_sqr_words
.align 16
.globl bn_div64
.type bn_div64,@function
bn_div64:
movl 4(%esp),%edx / a
movl 8(%esp),%eax / b
divl 12(%esp) / ab/c
ret
.Lfe4:
.size bn_div64,.Lfe4-bn_div64
.ident "GCC: (GNU) 2.6.3"

View File

@ -1,288 +0,0 @@
TITLE bn_mulw.c
.386P
.model FLAT
PUBLIC _bn_mul_add_word
_TEXT SEGMENT
; File bn_mulw.c
_bn_mul_add_word PROC NEAR
push ebp
push ebx
push esi
push edi
mov edi,DWORD PTR 20[esp] ; r
mov ebx,DWORD PTR 24[esp] ; a
mov ecx,DWORD PTR 32[esp] ; w
xor esi,esi ; c=0
mov ebp,DWORD PTR 28[esp] ; num
shr ebp,2 ; num/4
jz $L666
$L546:
; Round one
mov eax,DWORD PTR [ebx] ; edx:eax = *a * w
mul ecx
add eax,DWORD PTR [edi] ; *r+=ax
adc edx,0
add eax,esi ; edx:eax += c
adc edx,0
mov DWORD PTR [edi],eax ; *r+=ax
mov esi,edx ; c = overflow
; Round two
mov eax,DWORD PTR 4[ebx] ; edx:eax = *a * w
mul ecx
add eax,DWORD PTR 4[edi] ; *r+=ax
adc edx,0
add eax,esi ; edx:eax += c
adc edx,0
mov DWORD PTR 4[edi],eax ; *r+=ax
mov esi,edx ; c = overflow
; Round three
mov eax,DWORD PTR 8[ebx] ; edx:eax = *a * w
mul ecx
add eax,DWORD PTR 8[edi] ; *r+=ax
adc edx,0
add eax,esi ; edx:eax += c
adc edx,0
mov DWORD PTR 8[edi],eax ; *r+=ax
mov esi,edx ; c = overflow
; Round four
mov eax,DWORD PTR 12[ebx] ; edx:eax = *a * w
mul ecx
add eax,DWORD PTR 12[edi] ; *r+=ax
adc edx,0
add eax,esi ; edx:eax += c
adc edx,0
mov DWORD PTR 12[edi],eax ; *r+=ax
mov esi,edx ; c = overflow
add ebx,16
add edi,16
dec ebp
jz $L666
jmp $L546
$L666:
mov ebp,DWORD PTR 28[esp] ; num
and ebp,3 ; num%4
jz $L547
; Round one
mov eax,DWORD PTR [ebx] ; edx:eax = *a * w
mul ecx
add eax,DWORD PTR [edi] ; *r+=ax
adc edx,0
add eax,esi ; edx:eax += c
adc edx,0
mov DWORD PTR [edi],eax ; *r+=ax
mov esi,edx ; c = overflow
dec ebp
jz $L547
; Round two
mov eax,DWORD PTR 4[ebx] ; edx:eax = *a * w
mul ecx
add eax,DWORD PTR 4[edi] ; *r+=ax
adc edx,0
add eax,esi ; edx:eax += c
adc edx,0
mov DWORD PTR 4[edi],eax ; *r+=ax
mov esi,edx ; c = overflow
dec ebp
jz $L547
; Round three
mov eax,DWORD PTR 8[ebx] ; edx:eax = *a * w
mul ecx
add eax,DWORD PTR 8[edi] ; *r+=ax
adc edx,0
add eax,esi ; edx:eax += c
adc edx,0
mov DWORD PTR 8[edi],eax ; *r+=ax
mov esi,edx ; c = overflow
$L547:
mov eax,esi
pop edi
pop esi
pop ebx
pop ebp
ret
_bn_mul_add_word ENDP
_TEXT ENDS
PUBLIC _bn_mul_word
_TEXT SEGMENT
_bn_mul_word PROC NEAR
push ebp
push ebx
push esi
push edi
mov edi,DWORD PTR 20[esp] ; r
mov ebx,DWORD PTR 24[esp] ; a
mov ebp,DWORD PTR 28[esp] ; num
mov ecx,DWORD PTR 32[esp] ; w
xor esi,esi ; c=0
shr ebp,2 ; num/4
jz $L266
$L593:
; Round one
mov eax,DWORD PTR [ebx] ; edx:eax= w * *a
mul ecx
add eax,esi ; edx:eax+=c
adc edx,0
mov DWORD PTR [edi],eax ; *r=eax
mov esi,edx ; c=edx
; Round two
mov eax,DWORD PTR 4[ebx] ; edx:eax= w * *a
mul ecx
add eax,esi ; edx:eax+=c
adc edx,0
mov DWORD PTR 4[edi],eax ; *r=eax
mov esi,edx ; c=edx
; Round three
mov eax,DWORD PTR 8[ebx] ; edx:eax= w * *a
mul ecx
add eax,esi ; edx:eax+=c
adc edx,0
mov DWORD PTR 8[edi],eax ; *r=eax
mov esi,edx ; c=edx
; Round four
mov eax,DWORD PTR 12[ebx] ; edx:eax= w * *a
mul ecx
add eax,esi ; edx:eax+=c
adc edx,0
mov DWORD PTR 12[edi],eax ; *r=eax
mov esi,edx ; c=edx
add ebx,16
add edi,16
dec ebp
jz $L266
jmp $L593
$L266:
mov ebp,DWORD PTR 28[esp] ; num
and ebp,3
jz $L601
; Round one
mov eax,DWORD PTR [ebx] ; edx:eax= w * *a
mul ecx
add eax,esi ; edx:eax+=c
adc edx,0
mov DWORD PTR [edi],eax ; *r=eax
mov esi,edx ; c=edx
dec ebp
jz $L601
; Round two
mov eax,DWORD PTR 4[ebx] ; edx:eax= w * *a
mul ecx
add eax,esi ; edx:eax+=c
adc edx,0
mov DWORD PTR 4[edi],eax ; *r=eax
mov esi,edx ; c=edx
dec ebp
jz $L601
; Round three
mov eax,DWORD PTR 8[ebx] ; edx:eax= w * *a
mul ecx
add eax,esi ; edx:eax+=c
adc edx,0
mov DWORD PTR 8[edi],eax ; *r=eax
mov esi,edx ; c=edx
$L601:
mov eax,esi
pop edi
pop esi
pop ebx
pop ebp
ret
_bn_mul_word ENDP
_TEXT ENDS
PUBLIC _bn_sqr_words
_TEXT SEGMENT
_bn_sqr_words PROC NEAR
push ebx
push esi
push edi
mov esi,DWORD PTR 16[esp] ; r
mov edi,DWORD PTR 20[esp] ; a
mov ebx,DWORD PTR 24[esp] ; num
shr ebx,2 ; num/4
jz $L111
$L640:
; Round 1
mov eax, DWORD PTR [edi]
mul eax ; *a * *a
mov DWORD PTR [esi],eax
mov DWORD PTR 4[esi],edx
; Round 2
mov eax, DWORD PTR 4[edi]
mul eax ; *a * *a
mov DWORD PTR 8[esi],eax
mov DWORD PTR 12[esi],edx
; Round 3
mov eax, DWORD PTR 8[edi]
mul eax ; *a * *a
mov DWORD PTR 16[esi],eax
mov DWORD PTR 20[esi],edx
; Round 4
mov eax, DWORD PTR 12[edi]
mul eax ; *a * *a
mov DWORD PTR 24[esi],eax
mov DWORD PTR 28[esi],edx
add edi,16
add esi,32
dec ebx
jz $L111
jmp $L640
$L111:
mov ebx,DWORD PTR 24[esp] ; num
and ebx,3 ; num%3
jz $L645
; Round 1
mov eax, DWORD PTR [edi]
mul eax ; *a * *a
mov DWORD PTR [esi],eax
mov DWORD PTR 4[esi],edx
dec ebx
jz $L645
; Round 2
mov eax, DWORD PTR 4[edi]
mul eax ; *a * *a
mov DWORD PTR 8[esi],eax
mov DWORD PTR 12[esi],edx
dec ebx
jz $L645
; Round 3
mov eax, DWORD PTR 8[edi]
mul eax ; *a * *a
mov DWORD PTR 16[esi],eax
mov DWORD PTR 20[esi],edx
$L645:
pop edi
pop esi
pop ebx
ret
_bn_sqr_words ENDP
_TEXT ENDS
PUBLIC _bn_div64
_TEXT SEGMENT
_bn_div64 PROC NEAR
mov edx, DWORD PTR 4[esp]
mov eax, DWORD PTR 8[esp]
div DWORD PTR 12[esp]
ret
_bn_div64 ENDP
_TEXT ENDS
END

View File

@ -1,22 +0,0 @@
begin 640 x86nt32.obj
M3`$"`/H&DC-6`@``"P`````````N=&5X=```````````````\@$``&0`````
M```````````````@`#!@+F1A=&$```#R`0````````````!6`@``````````
M````````0``PP%535E>+?"04BUPD&(M,)"`S]HML)!S![0)T7(L#]^$#!X/2
M``/&@](`B0>+\HM#!/?A`T<$@](``\:#T@")1P2+\HM#"/?A`T<(@](``\:#
MT@")1PB+\HM##/?A`T<,@](``\:#T@")1PR+\H/#$(/'$$UT`NNDBVPD'(/E
M`W1"BP/WX0,'@](``\:#T@")!XOR370MBT,$]^$#1P2#T@`#QH/2`(E'!(OR
M3705BT,(]^$#1PB#T@`#QH/2`(E'"(ORB\9?7EM=PU535E>+?"04BUPD&(ML
M)!R+3"0@,_;![0)T18L#]^$#QH/2`(D'B_*+0P3WX0/&@](`B4<$B_*+0PCW
MX0/&@](`B4<(B_*+0PSWX0/&@](`B4<,B_*#PQ"#QQ!-=`+KNXML)!R#Y0-T
M,8L#]^$#QH/2`(D'B_)-="&+0P3WX0/&@](`B4<$B_)-=`^+0PCWX0/&@](`
MB4<(B_*+QE]>6UW#4U97BW0D$(M\)!2+7"08P>L"=#6+!_?@B0:)5@2+1P3W
MX(E&"(E6#(M'"/?@B480B584BT<,]^")1AB)5AR#QQ"#QB!+=`+KRXM<)!B#
MXP-T)8L']^")!HE6!$MT&8M'!/?@B48(B58,2W0+BT<(]^")1A")5A1?7EO#
MBU0D!(M$)`CW="0,PRYF:6QE`````````/[_``!G`BY<8W)Y<'1O7&)N7&%S
M;5QX.#9N=#,R+F%S;0```````````"YT97AT``````````$````#`?(!````
M`````````````````"YD871A``````````(````#`0``````````````````
M```````````$``````````$`(``"```````5````R0````$`(``"```````B
M````:@$```$`(``"```````P````Y0$```$`(``"`#H```!?8FY?;75L7V%D
L9%]W;W)D`%]B;E]M=6Q?=V]R9`!?8FY?<W%R7W=O<F1S`%]B;E]D:78V-```
`
end

View File

@ -1,20 +0,0 @@
begin 640 x86w16.obj
M@!P`&BY<8W)Y<'1O7&)N7&%S;5QX.#9W,38N87-MQY8U```$7T)34P5?1$%4
M009$1U)/55`&1E]415A4!4-/3E-4`T)34P5#3TY35`1$051!!$-/1$5EF`<`
M2/`!!0H!&)@'`$@```,)`0R8!P!(```&"`$*F`<`2````@<!#YH(``3_`O\#
M_P14D$4```$-7V)N7W-Q<E]W;W)D<U4!``E?8FY?9&EV-C3B`0`07V)N7VUU
M;%]A9&1?=V]R9`````Q?8FY?;75L7W=O<F3<``#`B`0``*(!T:#T`0$``%53
M5E<>!HOL,_:+?A".7A*+7A2.1A:+3AJ+;AC1[='M=&"+P2;W)P,%@](`$\:#
MT@")!8ORB\$F]V<"`T4"@](`$\:#T@")10*+\HO!)O=G!`-%!(/2`!/&@](`
MB44$B_*+P2;W9P8#10:#T@`3QH/2`(E%!HOR@\,(@\<(370"ZZ"+[(MN&(/E
M`TUX18O!)O<G`P6#T@`3QH/2`(D%B_)->"^+P2;W9P(#10*#T@`3QH/2`(E%
M`HOR37@6B\$F]V<$`T4$@](`$\:#T@")102+\HO&!Q]?7EM=RY!54U97'@8S
M]HOLBWX0CEX2BUX4CD86BTX:BVX8B\$F]R<#QH/2`(D%B_)-=$*+P2;W9P(#
MQH/2`(E%`HOR370OB\$F]V<$`\:#T@")102+\DUT'(O!)O=G!@/&@](`B44&
MB_)-=`F#PPB#QPCKKI"+Q@<?7UY;7<N055-65QX&B^R+=A".7A*+?A2.1A:+
M7AB+Z]'KT>MT.2:+!??@B02)5`(FBT4"]^")1`2)5`8FBT4$]^")1`B)5`HF
MBT4&]^")1`R)5`Z#QPB#QA!+=`+KQX/E`TUX*":+!??@B02)5`)->!LFBT4"
M]^")1`2)5`9->`PFBT4$]^")1`B)5`H''U]>6UW+58OLBU8&BT8(]W8*7<NZ
%B@(``'0`
`
end

View File

@ -1,23 +0,0 @@
begin 640 x86w32.obj
M@!P`&BY<8W)Y<'1O7&)N7&%S;5QX.#9W,S(N87-MR98U```$7T)34P5?1$%4
M009$1U)/55`&1E]415A4!4-/3E-4`T)34P5#3TY35`1$051!!$-/1$5EF`<`
M2(`"!0H!AY@'`$@```,)`0R8!P!(```&"`$*F`<`2````@<!#YH(``3_`O\#
M_P14D$4```$-7V)N7W-Q<E]W;W)D<[\!``E?8FY?9&EV-C1H`@`07V)N7VUU
M;%]A9&1?=V]R9`````Q?8FY?;75L7W=O<F0B`0"(B`0``*(!T:"$`@$``%53
M9E97'@:+[&8S]HM^$HY>%(M>%HY&&&:+3AR+;AK1[='M#X2``&:+P68F]R=F
M`P5F@](`9A/&9H/2`&:)!6:+\F:+P68F]V<$9@-%!&:#T@!F$\9F@](`9HE%
M!&:+\F:+P68F]V<(9@-%"&:#T@!F$\9F@](`9HE%"&:+\F:+P68F]V<,9@-%
M#&:#T@!F$\9F@](`9HE%#&:+\H/#$(/'$$UT`NN`B^R+;AJ#Y0-->%UFB\%F
M)O<G9@,%9H/2`&83QF:#T@!FB05FB_)->#]FB\%F)O=G!&8#101F@](`9A/&
M9H/2`&:)101FB_)->!YFB\%F)O=G"&8#10AF@](`9A/&9H/2`&:)10AFB_)F
MB\9FB]9FP>H0!Q]?9EY;7<N055-F5E<>!F8S]HOLBWX2CEX4BUX6CD889HM.
M'(MN&F:+P68F]R=F`\9F@](`9HD%9HOR37149HO!9B;W9P1F`\9F@](`9HE%
M!&:+\DUT.V:+P68F]V<(9@/&9H/2`&:)10AFB_)-=")FB\%F)O=G#&8#QF:#
MT@!FB44,9HOR370)@\,0@\<0ZY:09HO&9HO69L'J$`<?7V9>6UW+D%535E<>
M!HOLBW80CEX2BWX4CD86BUX8B^O1Z]'K=$EF)HL%9O?@9HD$9HE4!&8FBT4$
M9O?@9HE$"&:)5`QF)HM%"&;WX&:)1!!FB5049B:+10QF]^!FB4089HE4'(/'
M$(/&($MT`NNW@^4#37@T9B:+!6;WX&:)!&:)5`1->"-F)HM%!&;WX&:)1`AF
MB50,37@09B:+10AF]^!FB4009HE4%`<?7UY;7<M5B^QFBU8&9HM&"F;W=@YF
.B]!FP>H07<O`B@(``'0`
`
end

View File

@ -1,144 +0,0 @@
/* crypto/bn/bn_bld.c */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include "cryptlib.h"
#include "bn_lcl.h"
BN_BL_CTX *BN_BL_CTX_new()
{
BN_BL_CTX *ret;
if ((ret=(BN_BL_CTX *)Malloc(sizeof(BN_BL_CTX))) == NULL)
{
BNerr(BN_F_BN_BL_CTX_NEW,ERR_R_MALLOC_FAILURE);
return(NULL);
}
if ((ret->num=BN_new()) == NULL) goto err;
if ((ret->mod=BN_new()) == NULL) goto err;
ret->inum=NULL;
ret->count=16;
ret->count=1;
return(ret);
}
int BN_BL_CTX_Init(a,mod)
BN_BL_CTX *a;
BIGNUM *mod;
{
int i;
BN_CTX *ctx;
if ((ctx=BN_CTX_new()) == NULL) goto m_err;
if (BN_copy(a->mod,mod) == NULL) goto err;
i=BN_num_bits(mod);
if (!BN_rand(a->num,i,1,0)) goto err;
if (a->inum != NULL) BN_clear_free(a->inum);
a->inum=BN_mod_inverse(a->num,a->mod,ctx)
ret->count=16;
return(1);
m_err:
BNerr(BN_F_BN_BL_CTX_INIT,ERR_R_MALLOC_FAILURE);
err:
return(0);
}
BN_BL_CTX *BN_BL_CTX_Update(a)
BN_BL_CTX *a;
{
BN_CTX *ctx;
BN_BL_CTX *new;
if (--a->count > 0)
return(1);
new=BN_BL_CTX_new();
/* set/get lock */
if ((ctx=BN_CTX_new()) == NULL)
return(NULL);
new->inum=BN_new();
BN_mod_mul(new->num,a->num,a->num,a->mod,ctx);
BN_mod_mul(new->inum,a->inum,a->inum,a->mod,ctx);
BN_copy(new->mod,a->mod);
BN_BL_CTX_free(a);
return(new);
}
void BN_BL_CTX_free(a)
BN_BL_CTX *a;
{
int i;
if (a == NULL) return;
i=CRYPTO_add(&a->references,-1,CRYPTO_LOCK_RSA);
if (i > 0) return;
#ifdef REF_CHECK
if (i < 0)
{
fprintf(stderr,"BN_BL_CTX_free, bad reference count\n");
abort();
}
#endif
if (a->num == NULL) BN_clear_free(a->num);
if (a->inum == NULL) BN_clear_free(a->inum);
if (a->mod == NULL) BN_clear_free(a->mod);
}

View File

@ -1,169 +0,0 @@
/* crypto/bn/bn_m.c */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include "cryptlib.h"
#include "bn_lcl.h"
#include "stack.h"
int limit=16;
typedef struct bn_pool_st
{
int used;
int tos;
STACK *sk;
} BN_POOL;
BIGNUM *BN_POOL_push(bp)
BN_POOL *bp;
{
BIGNUM *ret;
if (bp->used >= bp->tos)
{
ret=BN_new();
sk_push(bp->sk,(char *)ret);
bp->tos++;
bp->used++;
}
else
{
ret=(BIGNUM *)sk_value(bp->sk,bp->used);
bp->used++;
}
return(ret);
}
void BN_POOL_pop(bp,num)
BN_POOL *bp;
int num;
{
bp->used-=num;
}
int BN_m(r,a,b)
BIGNUM *r,*a,*b;
{
static BN_POOL bp;
static init=1;
if (init)
{
bp.used=0;
bp.tos=0;
bp.sk=sk_new_null();
init=0;
}
return(BN_mm(r,a,b,&bp));
}
/* r must be different to a and b */
int BN_mm(m, A, B, bp)
BIGNUM *m,*A,*B;
BN_POOL *bp;
{
int i,num;
int an,bn;
BIGNUM *a,*b,*c,*d,*ac,*bd;
an=A->top;
bn=B->top;
if ((an <= limit) || (bn <= limit))
{
return(BN_mul(m,A,B));
}
a=BN_POOL_push(bp);
b=BN_POOL_push(bp);
c=BN_POOL_push(bp);
d=BN_POOL_push(bp);
ac=BN_POOL_push(bp);
bd=BN_POOL_push(bp);
num=(an <= bn)?an:bn;
num=1<<(BN_num_bits_word(num-1)-1);
/* Are going to now chop things into 'num' word chunks. */
num*=BN_BITS2;
BN_copy(a,A);
BN_mask_bits(a,num);
BN_rshift(b,A,num);
BN_copy(c,B);
BN_mask_bits(c,num);
BN_rshift(d,B,num);
BN_sub(ac ,b,a);
BN_sub(bd,c,d);
BN_mm(m,ac,bd,bp);
BN_mm(ac,a,c,bp);
BN_mm(bd,b,d,bp);
BN_add(m,m,ac);
BN_add(m,m,bd);
BN_lshift(m,m,num);
BN_lshift(bd,bd,num*2);
BN_add(m,m,ac);
BN_add(m,m,bd);
BN_POOL_pop(bp,6);
return(1);
}

View File

@ -1,97 +0,0 @@
/* crypto/bn/bn_mod.c */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include "cryptlib.h"
#include "bn_lcl.h"
/* rem != m */
int BN_mod(rem, m, d,ctx)
BIGNUM *rem;
BIGNUM *m;
BIGNUM *d;
BN_CTX *ctx;
{
#if 0 /* The old slow way */
int i,nm,nd;
BIGNUM *dv;
if (BN_ucmp(m,d) < 0)
return((BN_copy(rem,m) == NULL)?0:1);
dv=ctx->bn[ctx->tos];
if (!BN_copy(rem,m)) return(0);
nm=BN_num_bits(rem);
nd=BN_num_bits(d);
if (!BN_lshift(dv,d,nm-nd)) return(0);
for (i=nm-nd; i>=0; i--)
{
if (BN_cmp(rem,dv) >= 0)
{
if (!BN_sub(rem,rem,dv)) return(0);
}
if (!BN_rshift1(dv,dv)) return(0);
}
return(1);
#else
return(BN_div(NULL,rem,m,d,ctx));
#endif
}

View File

@ -1,366 +0,0 @@
/* crypto/bn/bn_mulw.c */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include "cryptlib.h"
#include "bn_lcl.h"
#ifdef BN_LLONG
BN_ULONG bn_mul_add_words(rp,ap,num,w)
BN_ULONG *rp,*ap;
int num;
BN_ULONG w;
{
BN_ULONG c1=0;
for (;;)
{
mul_add(rp[0],ap[0],w,c1);
if (--num == 0) break;
mul_add(rp[1],ap[1],w,c1);
if (--num == 0) break;
mul_add(rp[2],ap[2],w,c1);
if (--num == 0) break;
mul_add(rp[3],ap[3],w,c1);
if (--num == 0) break;
ap+=4;
rp+=4;
}
return(c1);
}
BN_ULONG bn_mul_words(rp,ap,num,w)
BN_ULONG *rp,*ap;
int num;
BN_ULONG w;
{
BN_ULONG c1=0;
for (;;)
{
mul(rp[0],ap[0],w,c1);
if (--num == 0) break;
mul(rp[1],ap[1],w,c1);
if (--num == 0) break;
mul(rp[2],ap[2],w,c1);
if (--num == 0) break;
mul(rp[3],ap[3],w,c1);
if (--num == 0) break;
ap+=4;
rp+=4;
}
return(c1);
}
void bn_sqr_words(r,a,n)
BN_ULONG *r,*a;
int n;
{
for (;;)
{
BN_ULLONG t;
t=(BN_ULLONG)(a[0])*(a[0]);
r[0]=Lw(t); r[1]=Hw(t);
if (--n == 0) break;
t=(BN_ULLONG)(a[1])*(a[1]);
r[2]=Lw(t); r[3]=Hw(t);
if (--n == 0) break;
t=(BN_ULLONG)(a[2])*(a[2]);
r[4]=Lw(t); r[5]=Hw(t);
if (--n == 0) break;
t=(BN_ULLONG)(a[3])*(a[3]);
r[6]=Lw(t); r[7]=Hw(t);
if (--n == 0) break;
a+=4;
r+=8;
}
}
BN_ULONG bn_add_words(r,a,b,n)
BN_ULONG *r,*a,*b;
int n;
{
BN_ULLONG ll;
ll=0;
for (;;)
{
ll+= (BN_ULLONG)a[0]+b[0];
r[0]=(BN_ULONG)ll&BN_MASK2;
ll>>=BN_BITS2;
if (--n <= 0) break;
ll+= (BN_ULLONG)a[1]+b[1];
r[1]=(BN_ULONG)ll&BN_MASK2;
ll>>=BN_BITS2;
if (--n <= 0) break;
ll+= (BN_ULLONG)a[2]+b[2];
r[2]=(BN_ULONG)ll&BN_MASK2;
ll>>=BN_BITS2;
if (--n <= 0) break;
ll+= (BN_ULLONG)a[3]+b[3];
r[3]=(BN_ULONG)ll&BN_MASK2;
ll>>=BN_BITS2;
if (--n <= 0) break;
a+=4;
b+=4;
r+=4;
}
return(ll&BN_MASK2);
}
#else
BN_ULONG bn_mul_add_words(rp,ap,num,w)
BN_ULONG *rp,*ap;
int num;
BN_ULONG w;
{
BN_ULONG c=0;
BN_ULONG bl,bh;
bl=LBITS(w);
bh=HBITS(w);
for (;;)
{
mul_add(rp[0],ap[0],bl,bh,c);
if (--num == 0) break;
mul_add(rp[1],ap[1],bl,bh,c);
if (--num == 0) break;
mul_add(rp[2],ap[2],bl,bh,c);
if (--num == 0) break;
mul_add(rp[3],ap[3],bl,bh,c);
if (--num == 0) break;
ap+=4;
rp+=4;
}
return(c);
}
BN_ULONG bn_mul_words(rp,ap,num,w)
BN_ULONG *rp,*ap;
int num;
BN_ULONG w;
{
BN_ULONG carry=0;
BN_ULONG bl,bh;
bl=LBITS(w);
bh=HBITS(w);
for (;;)
{
mul(rp[0],ap[0],bl,bh,carry);
if (--num == 0) break;
mul(rp[1],ap[1],bl,bh,carry);
if (--num == 0) break;
mul(rp[2],ap[2],bl,bh,carry);
if (--num == 0) break;
mul(rp[3],ap[3],bl,bh,carry);
if (--num == 0) break;
ap+=4;
rp+=4;
}
return(carry);
}
void bn_sqr_words(r,a,n)
BN_ULONG *r,*a;
int n;
{
for (;;)
{
sqr64(r[0],r[1],a[0]);
if (--n == 0) break;
sqr64(r[2],r[3],a[1]);
if (--n == 0) break;
sqr64(r[4],r[5],a[2]);
if (--n == 0) break;
sqr64(r[6],r[7],a[3]);
if (--n == 0) break;
a+=4;
r+=8;
}
}
BN_ULONG bn_add_words(r,a,b,n)
BN_ULONG *r,*a,*b;
int n;
{
BN_ULONG t1,t2;
int carry,i;
carry=0;
for (i=0; i<n; i++)
{
t1= *(a++);
t2= *(b++);
if (carry)
{
carry=(t2 >= ((~t1)&BN_MASK2));
t2=(t1+t2+1)&BN_MASK2;
}
else
{
t2=(t1+t2)&BN_MASK2;
carry=(t2<t1);
}
*(r++)=t2;
}
return(carry);
}
#endif
#if defined(BN_LLONG) && defined(BN_DIV2W)
BN_ULONG bn_div64(h,l,d)
BN_ULONG h,l,d;
{
return((BN_ULONG)(((((BN_ULLONG)h)<<BN_BITS2)|l)/(BN_ULLONG)d));
}
#else
/* Divide h-l by d and return the result. */
/* I need to test this some more :-( */
BN_ULONG bn_div64(h,l,d)
BN_ULONG h,l,d;
{
BN_ULONG dh,dl,q,ret=0,th,tl,t;
int i,count=2;
if (d == 0) return(BN_MASK2);
i=BN_num_bits_word(d);
if ((i != BN_BITS2) && (h > (BN_ULONG)1<<i))
{
#if !defined(NO_STDIO) && !defined(WIN16)
fprintf(stderr,"Division would overflow (%d)\n",i);
#endif
abort();
}
i=BN_BITS2-i;
if (h >= d) h-=d;
if (i)
{
d<<=i;
h=(h<<i)|(l>>(BN_BITS2-i));
l<<=i;
}
dh=(d&BN_MASK2h)>>BN_BITS4;
dl=(d&BN_MASK2l);
for (;;)
{
if ((h>>BN_BITS4) == dh)
q=BN_MASK2l;
else
q=h/dh;
for (;;)
{
t=(h-q*dh);
if ((t&BN_MASK2h) ||
((dl*q) <= (
(t<<BN_BITS4)+
((l&BN_MASK2h)>>BN_BITS4))))
break;
q--;
}
th=q*dh;
tl=q*dl;
t=(tl>>BN_BITS4);
tl=(tl<<BN_BITS4)&BN_MASK2h;
th+=t;
if (l < tl) th++;
l-=tl;
if (h < th)
{
h+=d;
q--;
}
h-=th;
if (--count == 0) break;
ret=q<<BN_BITS4;
h=((h<<BN_BITS4)|(l>>BN_BITS4))&BN_MASK2;
l=(l&BN_MASK2l)<<BN_BITS4;
}
ret|=q;
return(ret);
}
#endif

View File

@ -1,180 +0,0 @@
/* crypto/bn/bn_sub.c */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include "cryptlib.h"
#include "bn_lcl.h"
/* unsigned subtraction of b from a, a must be larger than b. */
void bn_qsub(r, a, b)
BIGNUM *r;
BIGNUM *a;
BIGNUM *b;
{
int max,min;
register BN_ULONG t1,t2,*ap,*bp,*rp;
int i,carry;
#if defined(IRIX_CC_BUG) && !defined(LINT)
int dummy;
#endif
max=a->top;
min=b->top;
ap=a->d;
bp=b->d;
rp=r->d;
carry=0;
for (i=0; i<min; i++)
{
t1= *(ap++);
t2= *(bp++);
if (carry)
{
carry=(t1 <= t2);
t1=(t1-t2-1)&BN_MASK2;
}
else
{
carry=(t1 < t2);
t1=(t1-t2)&BN_MASK2;
}
#if defined(IRIX_CC_BUG) && !defined(LINT)
dummy=t1;
#endif
*(rp++)=t1&BN_MASK2;
}
if (carry) /* subtracted */
{
while (i < max)
{
i++;
t1= *(ap++);
t2=(t1-1)&BN_MASK2;
*(rp++)=t2;
if (t1 > t2) break;
}
}
#if 0
memcpy(rp,ap,sizeof(*rp)*(max-i));
#else
for (; i<max; i++)
*(rp++)= *(ap++);
#endif
r->top=max;
bn_fix_top(r);
}
int BN_sub(r, a, b)
BIGNUM *r;
BIGNUM *a;
BIGNUM *b;
{
int max,i;
int add=0,neg=0;
BIGNUM *tmp;
/* a - b a-b
* a - -b a+b
* -a - b -(a+b)
* -a - -b b-a
*/
if (a->neg)
{
if (b->neg)
{ tmp=a; a=b; b=tmp; }
else
{ add=1; neg=1; }
}
else
{
if (b->neg) { add=1; neg=0; }
}
if (add)
{
/* As a fast max size, do a a->top | b->top */
i=(a->top | b->top)+1;
if (bn_wexpand(r,i) == NULL)
return(0);
if (i)
bn_qadd(r,a,b);
else
bn_qadd(r,b,a);
r->neg=neg;
return(1);
}
/* We are actually doing a - b :-) */
max=(a->top > b->top)?a->top:b->top;
if (bn_wexpand(r,max) == NULL) return(0);
if (BN_ucmp(a,b) < 0)
{
bn_qsub(r,b,a);
r->neg=1;
}
else
{
bn_qsub(r,a,b);
r->neg=0;
}
return(1);
}

View File

@ -1,378 +0,0 @@
/* crypto/bn/bn_knuth.c */
#include <stdio.h>
#include "cryptlib.h"
#include "bn.h"
/* This is just a test implementation, it has not been modified for
* speed and it still has memory leaks. */
int BN_mask_bits(BIGNUM *a,int n);
#undef DEBUG
#define MAIN
/* r must be different to a and b
* Toom-Cook multiplication algorithm, taken from
* The Art Of Computer Programming, Volume 2, Donald Knuth
*/
#define CODE1 ((BIGNUM *)0x01)
#define CODE2 ((BIGNUM *)0x02)
#define CODE3 ((BIGNUM *)0x03)
#define MAXK (30+1)
#define C3 3
#define C4 4
#define C5 5
#define C6 6
#define C7 7
#define C8 8
#define C9 9
#define C10 10
#define DONE 11
int new_total=0;
int Free_total=0;
int max=0,max_total=0;
BIGNUM *LBN_new(void );
BIGNUM *LBN_dup(BIGNUM *a);
void LBN_free(BIGNUM *a);
int BN_mul_knuth(w, a, b)
BIGNUM *w;
BIGNUM *a;
BIGNUM *b;
{
int ret=1;
int i,j,n,an,bn,y,z;
BIGNUM *U[MAXK],*V[MAXK],*T[MAXK];
BIGNUM *C[(MAXK*2*3)];
BIGNUM *W[(MAXK*2)],*t1,*t2,*t3,*t4;
int Utos,Vtos,Ctos,Wtos,Ttos;
unsigned int k,Q,R;
unsigned int q[MAXK];
unsigned int r[MAXK];
int state;
/* C1 */
Utos=Vtos=Ctos=Wtos=Ttos=0;
k=1;
q[0]=q[1]=64;
r[0]=r[1]=4;
Q=6;
R=2;
if (!bn_expand(w,BN_BITS2*2)) goto err;
an=BN_num_bits(a);
bn=BN_num_bits(b);
n=(an > bn)?an:bn;
while ((q[k-1]+q[k]) < n)
{
k++;
Q+=R;
i=R+1;
if ((i*i) <= Q) R=i;
q[k]=(1<<Q);
r[k]=(1<<R);
}
#ifdef DEBUG
printf("k =");
for (i=0; i<=k; i++) printf("%7d",i);
printf("\nq[k]=");
for (i=0; i<=k; i++) printf("%7d",q[i]);
printf("\nr[k]=");
for (i=0; i<=k; i++) printf("%7d",r[i]);
printf("\n");
#endif
/* C2 */
C[Ctos++]=CODE1;
if ((t1=LBN_dup(a)) == NULL) goto err;
C[Ctos++]=t1;
if ((t1=LBN_dup(b)) == NULL) goto err;
C[Ctos++]=t1;
state=C3;
for (;;)
{
#ifdef DEBUG
printf("state=C%d, Ctos=%d Wtos=%d\n",state,Ctos,Wtos);
#endif
switch (state)
{
int lr,lq,lp;
case C3:
k--;
if (k == 0)
{
t1=C[--Ctos];
t2=C[--Ctos];
#ifdef DEBUG
printf("Ctos=%d poped %d\n",Ctos,2);
#endif
if ((t2->top == 0) || (t1->top == 0))
w->top=0;
else
BN_mul(w,t1,t2);
LBN_free(t1); /* FREE */
LBN_free(t2); /* FREE */
state=C10;
}
else
{
lr=r[k];
lq=q[k];
lp=q[k-1]+q[k];
state=C4;
}
break;
case C4:
for (z=0; z<2; z++) /* do for u and v */
{
/* break the item at C[Ctos-1]
* into lr+1 parts of lq bits each
* for j=0; j<=2r; j++
*/
t1=C[--Ctos]; /* pop off u */
#ifdef DEBUG
printf("Ctos=%d poped %d\n",Ctos,1);
#endif
if ((t2=LBN_dup(t1)) == NULL) goto err;
BN_mask_bits(t2,lq);
T[Ttos++]=t2;
#ifdef DEBUG
printf("C4 r=0 bits=%d\n",BN_num_bits(t2));
#endif
for (i=1; i<=lr; i++)
{
if (!BN_rshift(t1,t1,lq)) goto err;
if ((t2=LBN_dup(t1)) == NULL) goto err;
BN_mask_bits(t2,lq);
T[Ttos++]=t2;
#ifdef DEBUG
printf("C4 r=%d bits=%d\n",i,
BN_num_bits(t2));
#endif
}
LBN_free(t1);
if ((t2=LBN_new()) == NULL) goto err;
if ((t3=LBN_new()) == NULL) goto err;
for (j=0; j<=2*lr; j++)
{
if ((t1=LBN_new()) == NULL) goto err;
if (!BN_set_word(t3,j)) goto err;
for (i=lr; i>=0; i--)
{
if (!BN_mul(t2,t1,t3)) goto err;
if (!BN_add(t1,t2,T[i])) goto err;
}
/* t1 is U(j) */
if (z == 0)
U[Utos++]=t1;
else
V[Vtos++]=t1;
}
LBN_free(t2);
LBN_free(t3);
while (Ttos) LBN_free(T[--Ttos]);
}
#ifdef DEBUG
for (i=0; i<Utos; i++)
printf("U[%2d]=%4d bits\n",i,BN_num_bits(U[i]));
for (i=0; i<Vtos; i++)
printf("V[%2d]=%4d bits\n",i,BN_num_bits(V[i]));
#endif
/* C5 */
#ifdef DEBUG
printf("PUSH CODE2 and %d CODE3 onto stack\n",2*lr);
#endif
C[Ctos++]=CODE2;
for (i=2*lr; i>0; i--)
{
C[Ctos++]=V[i];
C[Ctos++]=U[i];
C[Ctos++]=CODE3;
}
C[Ctos++]=V[0];
C[Ctos++]=U[0];
#ifdef DEBUG
printf("Ctos=%d pushed %d\n",Ctos,2*lr*3+3);
#endif
Vtos=Utos=0;
state=C3;
break;
case C6:
if ((t1=LBN_dup(w)) == NULL) goto err;
W[Wtos++]=t1;
#ifdef DEBUG
printf("put %d bit number onto w\n",BN_num_bits(t1));
#endif
state=C3;
break;
case C7:
lr=r[k];
lq=q[k];
lp=q[k]+q[k-1];
z=Wtos-2*lr-1;
for (j=1; j<=2*lr; j++)
{
for (i=2*lr; i>=j; i--)
{
if (!BN_sub(W[z+i],W[z+i],W[z+i-1])) goto err;
BN_div_word(W[z+i],j);
}
}
state=C8;
break;
case C8:
y=2*lr-1;
if ((t1=LBN_new()) == NULL) goto err;
if ((t3=LBN_new()) == NULL) goto err;
for (j=y; j>0; j--)
{
if (!BN_set_word(t3,j)) goto err;
for (i=j; i<=y; i++)
{
if (!BN_mul(t1,W[z+i+1],t3)) goto err;
if (!BN_sub(W[z+i],W[z+i],t1)) goto err;
}
}
LBN_free(t1);
LBN_free(t3);
state=C9;
break;
case C9:
BN_zero(w);
#ifdef DEBUG
printf("lq=%d\n",lq);
#endif
for (i=lr*2; i>=0; i--)
{
BN_lshift(w,w,lq);
BN_add(w,w,W[z+i]);
}
for (i=0; i<=lr*2; i++)
LBN_free(W[--Wtos]);
state=C10;
break;
case C10:
k++;
t1=C[--Ctos];
#ifdef DEBUG
printf("Ctos=%d poped %d\n",Ctos,1);
printf("code= CODE%d\n",t1);
#endif
if (t1 == CODE3)
state=C6;
else if (t1 == CODE2)
{
if ((t2=LBN_dup(w)) == NULL) goto err;
W[Wtos++]=t2;
state=C7;
}
else if (t1 == CODE1)
{
state=DONE;
}
else
{
printf("BAD ERROR\n");
goto err;
}
break;
default:
printf("bad state\n");
goto err;
break;
}
if (state == DONE) break;
}
ret=1;
err:
if (ret == 0) printf("ERROR\n");
return(ret);
}
#ifdef MAIN
main()
{
BIGNUM *a,*b,*r;
int i;
if ((a=LBN_new()) == NULL) goto err;
if ((b=LBN_new()) == NULL) goto err;
if ((r=LBN_new()) == NULL) goto err;
if (!BN_rand(a,1024*2,0,0)) goto err;
if (!BN_rand(b,1024*2,0,0)) goto err;
for (i=0; i<10; i++)
{
if (!BN_mul_knuth(r,a,b)) goto err; /**/
/*if (!BN_mul(r,a,b)) goto err; /**/
}
BN_print(stdout,a); printf(" * ");
BN_print(stdout,b); printf(" =\n");
BN_print(stdout,r); printf("\n");
printf("BN_new() =%d\nBN_free()=%d max=%d\n",new_total,Free_total,max);
exit(0);
err:
ERR_load_crypto_strings();
ERR_print_errors(stderr);
exit(1);
}
#endif
int BN_mask_bits(a,n)
BIGNUM *a;
int n;
{
int b,w;
w=n/BN_BITS2;
b=n%BN_BITS2;
if (w >= a->top) return(0);
if (b == 0)
a->top=w;
else
{
a->top=w+1;
a->d[w]&= ~(BN_MASK2<<b);
}
return(1);
}
BIGNUM *LBN_dup(a)
BIGNUM *a;
{
new_total++;
max_total++;
if (max_total > max) max=max_total;
return(BN_dup(a));
}
BIGNUM *LBN_new()
{
new_total++;
max_total++;
if (max_total > max) max=max_total;
return(BN_new());
}
void LBN_free(a)
BIGNUM *a;
{
max_total--;
if (max_total > max) max=max_total;
Free_total++;
BN_free(a);
}

View File

@ -1,340 +0,0 @@
/* crypto/bn/div.c */
#include <stdio.h>
#include "cryptlib.h"
#include "bn.h"
BN_ULONG bn_div_2word();
int BN_div2(dv, rm, num, div,ctx)
BIGNUM *dv;
BIGNUM *rm;
BIGNUM *num;
BIGNUM *div;
BN_CTX *ctx;
{
int norm_shift,i,j,nm,nd,loop;
BIGNUM *tmp,wnum,*snum,*sdiv,*res;
BN_ULONG *resp,*wnump;
BN_ULONG d0,d1;
int num_n,div_n;
#ifdef DEBUG
BN_print(stdout,num); printf(" number\n");
BN_print(stdout,div); printf(" divisor\n");
#endif
if (BN_is_zero(num))
{
BNerr(BN_F_BN_DIV,BN_R_DIV_BY_ZERO);
return(0);
}
if (BN_cmp(num,div) < 0)
{
if (rm != NULL)
{ if (BN_copy(rm,num) == NULL) return(0); }
if (dv != NULL) BN_zero(dv);
return(1);
}
tmp=ctx->bn[ctx->tos];
snum=ctx->bn[ctx->tos+1];
sdiv=ctx->bn[ctx->tos+2];
if (dv == NULL)
res=ctx->bn[ctx->tos+3];
else res=dv;
/* First we normalise the numbers */
norm_shift=BN_BITS2-((BN_num_bits(div))%BN_BITS2);
BN_lshift(sdiv,div,norm_shift);
norm_shift+=BN_BITS2;
BN_lshift(snum,num,norm_shift);
div_n=sdiv->top;
num_n=snum->top;
loop=num_n-div_n;
#ifdef DEBUG
BN_print(stdout,snum); printf(" shifted num, forget last word\n");
BN_print(stdout,sdiv); printf(" shifted div\n");
#endif
/* Lets setup a 'win'dow into snum
* This is the part that corresponds to the current
* 'area' being divided */
wnum.d= &(snum->d[loop]);
wnum.top= div_n;
wnum.max= snum->max; /* a bit of a lie */
wnum.neg= 0;
/* Get the top 2 words of sdiv */
i=sdiv->top;
d0=sdiv->d[div_n-1];
d1=sdiv->d[div_n-2];
/* pointer to the 'top' of snum */
wnump= &(snum->d[num_n-1]);
/* Setup to 'res' */
res->neg=0;
res->top=loop;
resp= &(res->d[loop-1]);
bn_expand(res,(loop+1)*BN_BITS2);
/* space for temp */
bn_expand(tmp,(div_n+1)*BN_BITS2);
#ifdef DEBUG
printf("wnum="); BN_print(stdout,&wnum); printf(" initial sub check\n");
printf("div ="); BN_print(stdout,sdiv); printf(" loop=%d\n",loop);
#endif
if (BN_cmp(&wnum,sdiv) >= 0)
{
BN_sub(&wnum,&wnum,sdiv);
*resp=1;
res->d[res->top-1]=1;
}
else
res->top--;
resp--;
#ifdef DEBUG
BN_print(stdout,res); printf(" initial result\n");
BN_print(stdout,&wnum); printf(" wnum\n");
#endif
for (i=0; i<loop-1; i++)
{
BN_ULONG q,n0;
BN_ULLONG t1,t2,t3;
BN_ULONG l0;
wnum.d--;
wnum.top++;
#ifdef DEBUG
BN_print(stderr,&wnum); printf(" to divide\n");
#endif
q=0;
n0=wnump[0];
t1=((BN_ULLONG)n0<<BN_BITS2)|wnump[-1];
if (n0 == d0)
q=BN_MASK2;
else
{
t2=(t1/d0);
q=(t2&BN_MASK2);
#ifdef DEBUG
printf("t1=%08X / d0=%08X = %X (%X)\n",t1,d0,q,t2);
#endif
}
for (;;)
{
t2=(BN_ULLONG)d1*q;
t3=t1-(BN_ULLONG)q*d0;
#ifdef DEBUG
printf("d1*q= %X n01-q*d0 = %X\n",t2,t3);
#endif
if ((t3>>BN_BITS2) ||
(t2 <= ((t3<<BN_BITS2)+wnump[-2])))
break;
#ifdef DEBUG
printf("reduce q\n");
#endif
q--;
}
l0=bn_mul_word(tmp->d,sdiv->d,div_n,q);
if (l0)
tmp->d[div_n]=l0;
else
tmp->d[div_n]=0;
for (j=div_n+1; j>0; j--)
if (tmp->d[j-1]) break;
tmp->top=j;
#ifdef DEBUG
printf("q=%08X\n",q);
BN_print(stdout,&wnum); printf(" number\n");
BN_print(stdout,tmp); printf(" subtract\n");
BN_print(stdout,snum); printf(" shifted number before\n");
BN_print(stdout,&wnum); printf(" wnum before\n");
#endif
j=wnum.top;
BN_sub(&wnum,&wnum,tmp);
snum->top=snum->top+wnum.top-j;
#ifdef DEBUG
BN_print(stdout,&wnum); printf(" wnum after\n");
BN_print(stdout,snum); printf(" shifted number after\n");
#endif
if (wnum.neg)
{
q--;
j=wnum.top;
BN_add(&wnum,&wnum,sdiv);
snum->top+=wnum.top-j;
fprintf(stderr,"addback\n");
#ifdef DEBUG
BN_print(stdout,snum); printf("after addback************************:\n");
#endif
}
*(resp--)=q;
#ifdef DEBUG
BN_print(stdout,res); printf(" result\n");
#endif
wnump--;
}
if (rm != NULL)
BN_rshift(rm,snum,norm_shift);
return(1);
}
main()
{
BIGNUM *a,*b,*c,*d;
BIGNUM *cc,*dd;
BN_CTX *ctx;
int i,x;
a=BN_new();
b=BN_new();
c=BN_new();
d=BN_new();
cc=BN_new();
dd=BN_new();
ctx=BN_CTX_new();
for (i=0; i<10240; i++)
{
BN_rand(a,80,0,0);
BN_rand(b,60,0,0);
BN_div2(d,c,a,b,ctx);
BN_div(dd,cc,a,b,ctx);
if ((BN_cmp(d,dd) != 0) || (BN_cmp(c,cc) != 0))
{
BN_print(stderr,a); fprintf(stderr," / ");
BN_print(stderr,b); fprintf(stderr," d=");
BN_print(stderr,d); fprintf(stderr," r= ");
BN_print(stderr,c); fprintf(stderr,"\nd=");
BN_print(stderr,dd); fprintf(stderr," r= ");
BN_print(stderr,cc); fprintf(stderr,"\n");
}
}
#ifdef undef
/*
BN_rand(a,600,0,0);
BN_rand(b,400,0,0);
for (i=0; i<2000000; i++)
{
BN_div2(d,c,a,b,ctx);
}
*/
/* for (i=0;;) */
/* for (i=0; i<0xffffffff; i++)
{
BN_ULONG rr,r,a,b,c;
BN_ULLONG l;
a=rand()&BN_MASK2;
b=rand()&BN_MASK2;
for (;;)
{
c=rand()&BN_MASK2;
if (c) break;
}
/* for (x=1; x<256*256; x++) */
{
c=x;
a=i>>8;
b=i&0xff;
a&= ~(0xFFFFFF<<(BN_num_bits_word(c)));
r=bn_div_2word(a,b,c);
rr=(BN_ULONG)((((BN_ULLONG)a<<BN_BITS2)|b)/c);
if ((i & 0xfffff) == 0) fprintf(stderr,"%d\n",i,r,rr);
/*if (x == 255)
fprintf(stderr,"%6d/%3d = %4d %4d\n",(a<<8)|b,c,r,rr); */
if (rr != r)
{
fprintf(stderr,"%8d %02X%02X / %02X = %02X %02X\n",
i,a,b,c,rr,r);
abort();
}
}
}
#endif
}
/* Divide h-l by d and return the result. */
BN_ULONG bn_div_2word(l,h,d)
BN_ULONG l,h,d;
{
BN_ULONG dh,dl,q,ret=0,th,tl,t,top;
int i,count=2;
if (d == 0) return(-1);
i=BN_num_bits_word(d);
if ((i != BN_BITS2) && (h > 1<<i))
{
fprintf(stderr,"Division would overflow\n");
abort();
}
i=BN_BITS2-i;
if (h >= d) h-=d;
if (i)
{
d<<=i;
h=(h<<i)|(l>>(BN_BITS2-i));
l<<=i;
}
dh=(d&BN_MASK2h)>>BN_BITS4;
dl=(d&BN_MASK2l);
for (;;)
{
if ((h>>BN_BITS4) == dh)
q=BN_MASK2l;
else
q=h/dh;
for (;;)
{
t=(h-q*dh);
if ((t&BN_MASK2h) ||
((dl*q) <= (
(t<<BN_BITS4)+
((l&BN_MASK2h)>>BN_BITS4))))
break;
q--;
}
th=q*dh;
tl=q*dl;
t=(tl>>BN_BITS4);
tl=(tl<<BN_BITS4)&BN_MASK2h;
th+=t;
if (l < tl) th++;
l-=tl;
if (h < th)
{
fprintf(stderr,"add back\n");
h+=d;
q--;
}
h-=th;
if (--count == 0) break;
ret=q<<BN_BITS4;
h=((h<<BN_BITS4)|(l>>BN_BITS4))&BN_MASK2;
l=(l&BN_MASK2l)<<BN_BITS4;
}
ret|=q;
return(ret);
}

View File

@ -1,17 +0,0 @@
All numbers (a) are stored aR mod N (except abRR)
RR = REDC(R*R) /* RR mod N */
convert a -> aR
convert b -> bR
{
abRR = aR * bR
abR = REDC(abRR); /* mod N */
}
ab = REDC(abR); /* mod N */
REDC strips off a multiplicaion by R mod N

View File

@ -1,410 +0,0 @@
/* crypto/bn/wei_mulw.c */
#include <stdio.h>
#include "cryptlib.h"
#include "bn.h"
#include "bn_lcl.h"
BN_ULONG bn_add_word(BN_ULONG *a,BN_ULONG c,int num);
BN_ULONG bn_add_words(BN_ULONG *ret,BN_ULONG *a,BN_ULONG *b,int num);
BN_ULONG bn_sub_words(BN_ULONG *ret,BN_ULONG *a,BN_ULONG *b,int num);
void BN_mul_4words(BN_ULONG *ret,BN_ULONG a0,BN_ULONG a1,
BN_ULONG b0,BN_ULONG b1);
void pr(a,n,s)
BN_ULONG *a;
int n;
{
while (n--)
fprintf(stdout,"%02X",a[n]);
fprintf(stdout,"%s",s);
}
BN_ULONG bn_add_word(a,w,num)
BN_ULONG *a;
BN_ULONG w;
int num;
{
BN_ULONG t;
#ifdef DEBUG
{ BN_ULONG *aa=a; int i; for (i=num; i>0; i--) fprintf(stdout,"%02X",aa[i-1]);
fprintf(stdout," + %X - ",w); i=num;
#endif
loop:
t= *a;
t=(t+w)&BN_MASK2;
*(a++)=t;
w=(t < w);
if (w && --num) goto loop;
#ifdef DEBUG
for (; i>0; i--) fprintf(stdout,"%02X",aa[i-1]);
fprintf(stdout,"\n");
}
#endif
return(w);
}
BN_ULONG bn_add_words(r,a,b,num)
BN_ULONG *r;
BN_ULONG *a;
BN_ULONG *b;
int num;
{
#if defined(BN_LLONG)
BN_ULLONG t;
BN_ULONG c=0;
int i;
if (num&1) abort();
for (i=0; i<num; i+=2)
{
t=(BN_ULLONG)a[i]+b[i]+c;
r[i+0]=L(t);
t=(BN_ULLONG) H(t)+a[i+1]+b[i+1];
r[i+1]=L(t);
c=H(t);
}
return(c);
#else
BN_ULONG c=0,t1,t2;
for ( ; num; num--)
{
t1= *(a++);
t2= *(b++);
if (c)
{
c=(t2 >= ((~t1)&BN_MASK2));
(*r++)=(t1+t2+1)&BN_MASK2;
}
else
{
t2=(t1+t2)&BN_MASK2;
c=(t2 < t1);
(*r++)=t2;
}
}
return(c);
#endif
}
BN_ULONG bn_sub_words(r,a,b,num)
BN_ULONG *r;
BN_ULONG *a;
BN_ULONG *b;
int num;
{
#if defined(BN_LLONG)
BN_ULLONG t;
BN_ULONG c=0;
int i;
if (num&1) abort();
for (i=0; i<num; i+=2)
{
t=(BN_ULLONG)a[i]-b[i]-c;
r[i+0]=L(t);
t=(BN_ULLONG)a[i+1]-b[i+1]-(0-H(t))&BN_MASK2;
r[i+1]=L(t);
c=H(t);
}
return(c);
#else
BN_ULONG c=0,t1,t2;
for ( ; num; num--)
{
t1= *(a++);
t2= *(b++);
if (c)
{
c=(t1 <= t2);
t1=(t1-t2-1);
}
else
{
c=(t1 < t2);
t1=(t1-t2);
}
(*r++)=t1&BN_MASK2;
}
return(c);
#endif
}
/* ret[3,2,1,0] = a1,a0 * b1,b0 */
void BN_mul_4words(ret,a0,a1,b0,b1)
BN_ULONG *ret;
BN_ULONG a0,a1,b0,b1;
{
BN_ULONG s,u;
BN_ULLONG fix,a0b0,a1b1,tmp;
if (a1 >= a0)
{
s=(a1-a0);
u=(b0-b1);
fix=(BN_ULLONG)s*u;
if (b0 >= b1) s=0;
}
else
{
BN_ULONG u;
if (b0 > b1)
{
s=(b0-b1);
u=(a1-a0);
fix=(BN_ULLONG)s*u;
}
else
{
u=(a0-a1);
s=(b1-b0);
fix=(BN_ULLONG)s*u;
s=0;
}
}
a0b0=(BN_ULLONG)a0*b0;
ret[0]=L(a0b0);
a1b1=(BN_ULLONG)a1*b1;
tmp=(BN_ULLONG) H(a0b0) + L(a0b0) + L(fix) + L(a1b1);
ret[1]=L(tmp);
tmp=(BN_ULLONG) a1b1 + H(tmp) + H(a0b0) + H(fix) + H(a1b1) - s;
ret[2]=L(tmp);
ret[3]=H(tmp);
}
/* ret[3,2,1,0] += a1,a0 * b1,b0 */
BN_ULONG BN_mul_add_4words(ret,a0,a1,b0,b1)
BN_ULONG *ret;
BN_ULONG a0,a1,b0,b1;
{
BN_ULONG s,u;
BN_ULLONG fix,a0b0,a1b1,tmp;
#ifdef DEBUG
fprintf(stdout,"%02X%02X%02X%02X",ret[3],ret[2],ret[1],ret[0]);
fprintf(stdout," + ( %02X%02X * %02X%02X ) - ",a1,a0,b1,b0);
#endif
if (a1 >= a0)
{
s=(a1-a0);
u=(b0-b1);
fix=(BN_ULLONG)s*u;
if (b0 >= b1) s=0;
}
else
{
if (b0 > b1)
{
s=(b0-b1);
u=(a1-a0);
fix=(BN_ULLONG)s*u;
}
else
{
u=(a0-a1);
s=(b1-b0);
fix=(BN_ULLONG)s*u;
s=0;
}
}
a0b0=(BN_ULLONG)a0*b0;
tmp=a0b0+ret[0];
ret[0]=L(tmp);
a1b1=(BN_ULLONG)a1*b1;
tmp=(BN_ULLONG) H(tmp) + L(a0b0) + L(fix) + L(a1b1) + ret[1];
ret[1]=L(tmp);
tmp=(BN_ULLONG) H(tmp) + L(a1b1) + H(a0b0) +
H(fix) + H(a1b1) -s + ret[2];
ret[2]=L(tmp);
tmp=(BN_ULLONG) H(tmp) + H(a1b1) + ret[3];
ret[3]=L(tmp);
#ifdef DEBUG
fprintf(stdout,"%02X%02X%02X%02X%02X\n",H(tmp),ret[3],ret[2],ret[1],ret[0]);
#endif
return(H(tmp));
}
/* ret[3,2,1,0] += a1,a0 * a1,a0 */
void BN_sqr_4words(ret,a0,a1)
BN_ULONG *ret;
BN_ULONG a0,a1;
{
BN_ULONG s,u;
BN_ULLONG tmp,tmp2;
tmp=(BN_ULLONG)a0*a0;
ret[0]=L(tmp);
tmp2=(BN_ULLONG)a0*a1;
tmp=(BN_ULLONG)H(tmp)+L(tmp2)*2;
ret[1]=L(tmp);
tmp=(BN_ULLONG)a1*a1+H(tmp)+H(tmp2)*2;
ret[2]=L(tmp);
ret[3]=L(tmp);
}
#define N0 (0)
#define N1 (half)
#define N2 (num)
#define N3 (num+half)
#define word_cmp(r,a,b,num) \
{ \
int n=num; \
\
(r)=0; \
while (n--) \
{ \
if ((a)[(n)] > (b)[(n)]) \
{ (r)=1; break; } \
else if ((a)[(n)] < (b)[(n)]) \
{ (r)= -1; break; } \
} \
}
/* (a->top == b->top) && (a->top >= 2) && !(a->top & 1) */
void bn_recursize_mul(r,t,a,b,num)
BN_ULONG *r,*t,*a,*b;
int num;
{
if ((num < 2) || (num&1))
abort();
/* fprintf(stderr,"num=%d half=%d\n",num,num/2);*/
if (num == 2)
BN_mul_4words(r,a[0],a[1],b[0],b[1]);
else if (num == 4)
{
BN_ULONG c,tmp;
BN_mul_4words(&(r[0]),a[0],a[1],b[0],b[1]);
BN_mul_4words(&(r[4]),a[2],a[3],b[2],b[3]);
c =BN_mul_add_4words(&(r[2]),a[0],a[1],b[2],b[3]);
c+=BN_mul_add_4words(&(r[2]),a[2],a[3],b[0],b[1]);
bn_add_word(&(r[6]),c,2);
}
else
{
int half=num/2;
int carry,cmp_a,cmp_b;
word_cmp(cmp_a,&(a[0]),&(a[half]),half);
word_cmp(cmp_b,&(b[0]),&(b[half]),half);
switch (cmp_a*2+cmp_a+cmp_b)
{
case -4:
bn_sub_words(&(t[N0]),&(a[N1]),&(a[N0]),half);
bn_sub_words(&(t[N1]),&(b[N0]),&(b[N1]),half);
bn_recursize_mul(&(r[N1]),&(t[N2]),
&(t[N0]),&(t[N1]),half);
bn_sub_words(&(r[N2]),&(r[N2]),&(t[N0]),half);
carry= -1;
break;
case -2:
bn_sub_words(&(t[N0]),&(a[N1]),&(a[N0]),half);
bn_sub_words(&(t[N1]),&(b[N0]),&(b[N1]),half);
bn_recursize_mul(&(r[N1]),&(t[N2]),
&(t[N0]),&(t[N1]),half);
carry=0;
break;
case 2:
bn_sub_words(&(t[N0]),&(a[N0]),&(a[N1]),half);
bn_sub_words(&(t[N1]),&(b[N1]),&(b[N0]),half);
bn_recursize_mul(&(r[N1]),&(t[N2]),
&(t[N0]),&(t[N1]),half);
carry=0;
break;
case 4:
bn_sub_words(&(t[N0]),&(a[N1]),&(a[N0]),half);
bn_sub_words(&(t[N1]),&(b[N0]),&(b[N1]),half);
bn_recursize_mul(&(r[N1]),&(t[N2]),
&(t[N0]),&(t[N1]),half);
bn_sub_words(&(r[N2]),&(r[N2]),&(t[N1]),half);
carry= -1;
break;
default:
memset(&(r[N1]),0,sizeof(BN_ULONG)*num);
break;
}
bn_recursize_mul(&(t[N0]),&(t[N2]),&(a[N0]),&(b[N0]),half);
#ifdef DEBUG
pr(a,half," * ");
pr(b,half," - ");
pr(t,num," - 0\n");
#endif
memcpy(&(r[N0]),&(t[N0]),half*sizeof(BN_ULONG));
if (bn_add_words(&(r[N1]),&(r[N1]),&(t[N1]),half))
{ bn_add_word(&(t[N1]),1,half); }
carry+=bn_add_words(&(r[N1]),&(r[N1]),&(t[N0]),num);
bn_recursize_mul(&(t[N0]),&(t[N2]),&(a[N1]),&(b[N1]),half);
carry+=bn_add_words(&(r[N1]),&(r[N1]),&(t[N0]),num);
carry+=bn_add_words(&(r[N2]),&(r[N2]),&(t[N0]),half);
memcpy(&(r[N3]),&(t[N1]),half*sizeof(BN_ULONG));
bn_add_word(&(r[N3]),carry,half);
}
}
main()
{
BIGNUM *a,*b,*r,*t;
int i,j;
a=BN_new();
b=BN_new();
r=BN_new();
t=BN_new();
#define BITS 1024
bn_expand(r,BITS*2);
bn_expand(t,BITS*2);
fprintf(stdout,"obase=16\n");
fprintf(stdout,"ibase=16\n");
for (i=0; i<10; i++)
{
BN_rand(a,BITS,0,0);
BN_rand(b,BITS,0,0);
r->top=(BITS*2)/BN_BITS2;
memset(r->d,0,sizeof(r->top)*sizeof(BN_ULONG));
memset(t->d,0,sizeof(r->top)*sizeof(BN_ULONG));
for (j=0; j<1000; j++)
{
/* BN_mul(r,a,b); /**/
bn_recursize_mul(r->d,t->d,a->d,b->d,a->top); /**/
}
BN_print(stdout,a); fprintf(stdout," * ");
BN_print(stdout,b); fprintf(stdout," - ");
BN_print(stdout,r); fprintf(stdout,"\n");
}
}

View File

@ -1,929 +0,0 @@
; Don't even think of reading this code
; It was automatically generated by crypt.pl
; Which is a perl program used to generate the x86 assember for
; any of elf, a.out, Win32, or Solaris
; It can be found in SSLeay 0.6.5+ or in libdes 3.26+
; eric <eay@cryptsoft.com>
; The inner loop instruction sequence and the IP/FP modifications
; are from Svend Olaf Mikkelsen <svolaf@inet.uni-c.dk>
;
TITLE dx86xxxx.asm
.386
.model FLAT
_TEXT SEGMENT
PUBLIC _fcrypt_body
EXTRN _des_SPtrans:DWORD
_fcrypt_body PROC NEAR
push ebp
push ebx
push esi
push edi
;
; Load the 2 words
xor edi, edi
xor esi, esi
mov ebp, DWORD PTR 24[esp]
mov DWORD PTR 36[esp],25
L000start:
;
; Round 0
mov eax, DWORD PTR 28[esp]
mov edx, esi
shr edx, 16
mov ecx, DWORD PTR 32[esp]
xor edx, esi
and eax, edx
and edx, ecx
mov ebx, eax
shl ebx, 16
mov ecx, edx
shl ecx, 16
xor eax, ebx
xor edx, ecx
mov ebx, DWORD PTR [ebp]
xor eax, ebx
mov ecx, DWORD PTR 4[ebp]
xor eax, esi
xor edx, esi
xor edx, ecx
and eax, 0fcfcfcfch
xor ebx, ebx
and edx, 0cfcfcfcfh
xor ecx, ecx
mov bl, al
mov cl, ah
ror edx, 4
mov ebp, DWORD PTR _des_SPtrans[ebx]
mov bl, dl
xor edi, ebp
mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
xor edi, ebp
mov cl, dh
shr eax, 16
mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
xor edi, ebp
mov bl, ah
shr edx, 16
mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
xor edi, ebp
mov ebp, DWORD PTR 24[esp]
mov cl, dh
and eax, 0ffh
and edx, 0ffh
mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
xor edi, ebx
;
; Round 1
mov eax, DWORD PTR 28[esp]
mov edx, edi
shr edx, 16
mov ecx, DWORD PTR 32[esp]
xor edx, edi
and eax, edx
and edx, ecx
mov ebx, eax
shl ebx, 16
mov ecx, edx
shl ecx, 16
xor eax, ebx
xor edx, ecx
mov ebx, DWORD PTR 8[ebp]
xor eax, ebx
mov ecx, DWORD PTR 12[ebp]
xor eax, edi
xor edx, edi
xor edx, ecx
and eax, 0fcfcfcfch
xor ebx, ebx
and edx, 0cfcfcfcfh
xor ecx, ecx
mov bl, al
mov cl, ah
ror edx, 4
mov ebp, DWORD PTR _des_SPtrans[ebx]
mov bl, dl
xor esi, ebp
mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
xor esi, ebp
mov cl, dh
shr eax, 16
mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
xor esi, ebp
mov bl, ah
shr edx, 16
mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
xor esi, ebp
mov ebp, DWORD PTR 24[esp]
mov cl, dh
and eax, 0ffh
and edx, 0ffh
mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
xor esi, ebx
;
; Round 2
mov eax, DWORD PTR 28[esp]
mov edx, esi
shr edx, 16
mov ecx, DWORD PTR 32[esp]
xor edx, esi
and eax, edx
and edx, ecx
mov ebx, eax
shl ebx, 16
mov ecx, edx
shl ecx, 16
xor eax, ebx
xor edx, ecx
mov ebx, DWORD PTR 16[ebp]
xor eax, ebx
mov ecx, DWORD PTR 20[ebp]
xor eax, esi
xor edx, esi
xor edx, ecx
and eax, 0fcfcfcfch
xor ebx, ebx
and edx, 0cfcfcfcfh
xor ecx, ecx
mov bl, al
mov cl, ah
ror edx, 4
mov ebp, DWORD PTR _des_SPtrans[ebx]
mov bl, dl
xor edi, ebp
mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
xor edi, ebp
mov cl, dh
shr eax, 16
mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
xor edi, ebp
mov bl, ah
shr edx, 16
mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
xor edi, ebp
mov ebp, DWORD PTR 24[esp]
mov cl, dh
and eax, 0ffh
and edx, 0ffh
mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
xor edi, ebx
;
; Round 3
mov eax, DWORD PTR 28[esp]
mov edx, edi
shr edx, 16
mov ecx, DWORD PTR 32[esp]
xor edx, edi
and eax, edx
and edx, ecx
mov ebx, eax
shl ebx, 16
mov ecx, edx
shl ecx, 16
xor eax, ebx
xor edx, ecx
mov ebx, DWORD PTR 24[ebp]
xor eax, ebx
mov ecx, DWORD PTR 28[ebp]
xor eax, edi
xor edx, edi
xor edx, ecx
and eax, 0fcfcfcfch
xor ebx, ebx
and edx, 0cfcfcfcfh
xor ecx, ecx
mov bl, al
mov cl, ah
ror edx, 4
mov ebp, DWORD PTR _des_SPtrans[ebx]
mov bl, dl
xor esi, ebp
mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
xor esi, ebp
mov cl, dh
shr eax, 16
mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
xor esi, ebp
mov bl, ah
shr edx, 16
mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
xor esi, ebp
mov ebp, DWORD PTR 24[esp]
mov cl, dh
and eax, 0ffh
and edx, 0ffh
mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
xor esi, ebx
;
; Round 4
mov eax, DWORD PTR 28[esp]
mov edx, esi
shr edx, 16
mov ecx, DWORD PTR 32[esp]
xor edx, esi
and eax, edx
and edx, ecx
mov ebx, eax
shl ebx, 16
mov ecx, edx
shl ecx, 16
xor eax, ebx
xor edx, ecx
mov ebx, DWORD PTR 32[ebp]
xor eax, ebx
mov ecx, DWORD PTR 36[ebp]
xor eax, esi
xor edx, esi
xor edx, ecx
and eax, 0fcfcfcfch
xor ebx, ebx
and edx, 0cfcfcfcfh
xor ecx, ecx
mov bl, al
mov cl, ah
ror edx, 4
mov ebp, DWORD PTR _des_SPtrans[ebx]
mov bl, dl
xor edi, ebp
mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
xor edi, ebp
mov cl, dh
shr eax, 16
mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
xor edi, ebp
mov bl, ah
shr edx, 16
mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
xor edi, ebp
mov ebp, DWORD PTR 24[esp]
mov cl, dh
and eax, 0ffh
and edx, 0ffh
mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
xor edi, ebx
;
; Round 5
mov eax, DWORD PTR 28[esp]
mov edx, edi
shr edx, 16
mov ecx, DWORD PTR 32[esp]
xor edx, edi
and eax, edx
and edx, ecx
mov ebx, eax
shl ebx, 16
mov ecx, edx
shl ecx, 16
xor eax, ebx
xor edx, ecx
mov ebx, DWORD PTR 40[ebp]
xor eax, ebx
mov ecx, DWORD PTR 44[ebp]
xor eax, edi
xor edx, edi
xor edx, ecx
and eax, 0fcfcfcfch
xor ebx, ebx
and edx, 0cfcfcfcfh
xor ecx, ecx
mov bl, al
mov cl, ah
ror edx, 4
mov ebp, DWORD PTR _des_SPtrans[ebx]
mov bl, dl
xor esi, ebp
mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
xor esi, ebp
mov cl, dh
shr eax, 16
mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
xor esi, ebp
mov bl, ah
shr edx, 16
mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
xor esi, ebp
mov ebp, DWORD PTR 24[esp]
mov cl, dh
and eax, 0ffh
and edx, 0ffh
mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
xor esi, ebx
;
; Round 6
mov eax, DWORD PTR 28[esp]
mov edx, esi
shr edx, 16
mov ecx, DWORD PTR 32[esp]
xor edx, esi
and eax, edx
and edx, ecx
mov ebx, eax
shl ebx, 16
mov ecx, edx
shl ecx, 16
xor eax, ebx
xor edx, ecx
mov ebx, DWORD PTR 48[ebp]
xor eax, ebx
mov ecx, DWORD PTR 52[ebp]
xor eax, esi
xor edx, esi
xor edx, ecx
and eax, 0fcfcfcfch
xor ebx, ebx
and edx, 0cfcfcfcfh
xor ecx, ecx
mov bl, al
mov cl, ah
ror edx, 4
mov ebp, DWORD PTR _des_SPtrans[ebx]
mov bl, dl
xor edi, ebp
mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
xor edi, ebp
mov cl, dh
shr eax, 16
mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
xor edi, ebp
mov bl, ah
shr edx, 16
mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
xor edi, ebp
mov ebp, DWORD PTR 24[esp]
mov cl, dh
and eax, 0ffh
and edx, 0ffh
mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
xor edi, ebx
;
; Round 7
mov eax, DWORD PTR 28[esp]
mov edx, edi
shr edx, 16
mov ecx, DWORD PTR 32[esp]
xor edx, edi
and eax, edx
and edx, ecx
mov ebx, eax
shl ebx, 16
mov ecx, edx
shl ecx, 16
xor eax, ebx
xor edx, ecx
mov ebx, DWORD PTR 56[ebp]
xor eax, ebx
mov ecx, DWORD PTR 60[ebp]
xor eax, edi
xor edx, edi
xor edx, ecx
and eax, 0fcfcfcfch
xor ebx, ebx
and edx, 0cfcfcfcfh
xor ecx, ecx
mov bl, al
mov cl, ah
ror edx, 4
mov ebp, DWORD PTR _des_SPtrans[ebx]
mov bl, dl
xor esi, ebp
mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
xor esi, ebp
mov cl, dh
shr eax, 16
mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
xor esi, ebp
mov bl, ah
shr edx, 16
mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
xor esi, ebp
mov ebp, DWORD PTR 24[esp]
mov cl, dh
and eax, 0ffh
and edx, 0ffh
mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
xor esi, ebx
;
; Round 8
mov eax, DWORD PTR 28[esp]
mov edx, esi
shr edx, 16
mov ecx, DWORD PTR 32[esp]
xor edx, esi
and eax, edx
and edx, ecx
mov ebx, eax
shl ebx, 16
mov ecx, edx
shl ecx, 16
xor eax, ebx
xor edx, ecx
mov ebx, DWORD PTR 64[ebp]
xor eax, ebx
mov ecx, DWORD PTR 68[ebp]
xor eax, esi
xor edx, esi
xor edx, ecx
and eax, 0fcfcfcfch
xor ebx, ebx
and edx, 0cfcfcfcfh
xor ecx, ecx
mov bl, al
mov cl, ah
ror edx, 4
mov ebp, DWORD PTR _des_SPtrans[ebx]
mov bl, dl
xor edi, ebp
mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
xor edi, ebp
mov cl, dh
shr eax, 16
mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
xor edi, ebp
mov bl, ah
shr edx, 16
mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
xor edi, ebp
mov ebp, DWORD PTR 24[esp]
mov cl, dh
and eax, 0ffh
and edx, 0ffh
mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
xor edi, ebx
;
; Round 9
mov eax, DWORD PTR 28[esp]
mov edx, edi
shr edx, 16
mov ecx, DWORD PTR 32[esp]
xor edx, edi
and eax, edx
and edx, ecx
mov ebx, eax
shl ebx, 16
mov ecx, edx
shl ecx, 16
xor eax, ebx
xor edx, ecx
mov ebx, DWORD PTR 72[ebp]
xor eax, ebx
mov ecx, DWORD PTR 76[ebp]
xor eax, edi
xor edx, edi
xor edx, ecx
and eax, 0fcfcfcfch
xor ebx, ebx
and edx, 0cfcfcfcfh
xor ecx, ecx
mov bl, al
mov cl, ah
ror edx, 4
mov ebp, DWORD PTR _des_SPtrans[ebx]
mov bl, dl
xor esi, ebp
mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
xor esi, ebp
mov cl, dh
shr eax, 16
mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
xor esi, ebp
mov bl, ah
shr edx, 16
mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
xor esi, ebp
mov ebp, DWORD PTR 24[esp]
mov cl, dh
and eax, 0ffh
and edx, 0ffh
mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
xor esi, ebx
;
; Round 10
mov eax, DWORD PTR 28[esp]
mov edx, esi
shr edx, 16
mov ecx, DWORD PTR 32[esp]
xor edx, esi
and eax, edx
and edx, ecx
mov ebx, eax
shl ebx, 16
mov ecx, edx
shl ecx, 16
xor eax, ebx
xor edx, ecx
mov ebx, DWORD PTR 80[ebp]
xor eax, ebx
mov ecx, DWORD PTR 84[ebp]
xor eax, esi
xor edx, esi
xor edx, ecx
and eax, 0fcfcfcfch
xor ebx, ebx
and edx, 0cfcfcfcfh
xor ecx, ecx
mov bl, al
mov cl, ah
ror edx, 4
mov ebp, DWORD PTR _des_SPtrans[ebx]
mov bl, dl
xor edi, ebp
mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
xor edi, ebp
mov cl, dh
shr eax, 16
mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
xor edi, ebp
mov bl, ah
shr edx, 16
mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
xor edi, ebp
mov ebp, DWORD PTR 24[esp]
mov cl, dh
and eax, 0ffh
and edx, 0ffh
mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
xor edi, ebx
;
; Round 11
mov eax, DWORD PTR 28[esp]
mov edx, edi
shr edx, 16
mov ecx, DWORD PTR 32[esp]
xor edx, edi
and eax, edx
and edx, ecx
mov ebx, eax
shl ebx, 16
mov ecx, edx
shl ecx, 16
xor eax, ebx
xor edx, ecx
mov ebx, DWORD PTR 88[ebp]
xor eax, ebx
mov ecx, DWORD PTR 92[ebp]
xor eax, edi
xor edx, edi
xor edx, ecx
and eax, 0fcfcfcfch
xor ebx, ebx
and edx, 0cfcfcfcfh
xor ecx, ecx
mov bl, al
mov cl, ah
ror edx, 4
mov ebp, DWORD PTR _des_SPtrans[ebx]
mov bl, dl
xor esi, ebp
mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
xor esi, ebp
mov cl, dh
shr eax, 16
mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
xor esi, ebp
mov bl, ah
shr edx, 16
mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
xor esi, ebp
mov ebp, DWORD PTR 24[esp]
mov cl, dh
and eax, 0ffh
and edx, 0ffh
mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
xor esi, ebx
;
; Round 12
mov eax, DWORD PTR 28[esp]
mov edx, esi
shr edx, 16
mov ecx, DWORD PTR 32[esp]
xor edx, esi
and eax, edx
and edx, ecx
mov ebx, eax
shl ebx, 16
mov ecx, edx
shl ecx, 16
xor eax, ebx
xor edx, ecx
mov ebx, DWORD PTR 96[ebp]
xor eax, ebx
mov ecx, DWORD PTR 100[ebp]
xor eax, esi
xor edx, esi
xor edx, ecx
and eax, 0fcfcfcfch
xor ebx, ebx
and edx, 0cfcfcfcfh
xor ecx, ecx
mov bl, al
mov cl, ah
ror edx, 4
mov ebp, DWORD PTR _des_SPtrans[ebx]
mov bl, dl
xor edi, ebp
mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
xor edi, ebp
mov cl, dh
shr eax, 16
mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
xor edi, ebp
mov bl, ah
shr edx, 16
mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
xor edi, ebp
mov ebp, DWORD PTR 24[esp]
mov cl, dh
and eax, 0ffh
and edx, 0ffh
mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
xor edi, ebx
;
; Round 13
mov eax, DWORD PTR 28[esp]
mov edx, edi
shr edx, 16
mov ecx, DWORD PTR 32[esp]
xor edx, edi
and eax, edx
and edx, ecx
mov ebx, eax
shl ebx, 16
mov ecx, edx
shl ecx, 16
xor eax, ebx
xor edx, ecx
mov ebx, DWORD PTR 104[ebp]
xor eax, ebx
mov ecx, DWORD PTR 108[ebp]
xor eax, edi
xor edx, edi
xor edx, ecx
and eax, 0fcfcfcfch
xor ebx, ebx
and edx, 0cfcfcfcfh
xor ecx, ecx
mov bl, al
mov cl, ah
ror edx, 4
mov ebp, DWORD PTR _des_SPtrans[ebx]
mov bl, dl
xor esi, ebp
mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
xor esi, ebp
mov cl, dh
shr eax, 16
mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
xor esi, ebp
mov bl, ah
shr edx, 16
mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
xor esi, ebp
mov ebp, DWORD PTR 24[esp]
mov cl, dh
and eax, 0ffh
and edx, 0ffh
mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
xor esi, ebx
;
; Round 14
mov eax, DWORD PTR 28[esp]
mov edx, esi
shr edx, 16
mov ecx, DWORD PTR 32[esp]
xor edx, esi
and eax, edx
and edx, ecx
mov ebx, eax
shl ebx, 16
mov ecx, edx
shl ecx, 16
xor eax, ebx
xor edx, ecx
mov ebx, DWORD PTR 112[ebp]
xor eax, ebx
mov ecx, DWORD PTR 116[ebp]
xor eax, esi
xor edx, esi
xor edx, ecx
and eax, 0fcfcfcfch
xor ebx, ebx
and edx, 0cfcfcfcfh
xor ecx, ecx
mov bl, al
mov cl, ah
ror edx, 4
mov ebp, DWORD PTR _des_SPtrans[ebx]
mov bl, dl
xor edi, ebp
mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
xor edi, ebp
mov cl, dh
shr eax, 16
mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
xor edi, ebp
mov bl, ah
shr edx, 16
mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
xor edi, ebp
mov ebp, DWORD PTR 24[esp]
mov cl, dh
and eax, 0ffh
and edx, 0ffh
mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
xor edi, ebx
mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
xor edi, ebx
;
; Round 15
mov eax, DWORD PTR 28[esp]
mov edx, edi
shr edx, 16
mov ecx, DWORD PTR 32[esp]
xor edx, edi
and eax, edx
and edx, ecx
mov ebx, eax
shl ebx, 16
mov ecx, edx
shl ecx, 16
xor eax, ebx
xor edx, ecx
mov ebx, DWORD PTR 120[ebp]
xor eax, ebx
mov ecx, DWORD PTR 124[ebp]
xor eax, edi
xor edx, edi
xor edx, ecx
and eax, 0fcfcfcfch
xor ebx, ebx
and edx, 0cfcfcfcfh
xor ecx, ecx
mov bl, al
mov cl, ah
ror edx, 4
mov ebp, DWORD PTR _des_SPtrans[ebx]
mov bl, dl
xor esi, ebp
mov ebp, DWORD PTR _des_SPtrans[0200h+ecx]
xor esi, ebp
mov cl, dh
shr eax, 16
mov ebp, DWORD PTR _des_SPtrans[0100h+ebx]
xor esi, ebp
mov bl, ah
shr edx, 16
mov ebp, DWORD PTR _des_SPtrans[0300h+ecx]
xor esi, ebp
mov ebp, DWORD PTR 24[esp]
mov cl, dh
and eax, 0ffh
and edx, 0ffh
mov ebx, DWORD PTR _des_SPtrans[0600h+ebx]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0700h+ecx]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0400h+eax]
xor esi, ebx
mov ebx, DWORD PTR _des_SPtrans[0500h+edx]
xor esi, ebx
mov eax, edi
dec DWORD PTR 36[esp]
mov edi, esi
mov esi, eax
jnz L000start
;
; FP
mov edx, DWORD PTR 20[esp]
ror edi, 1
mov eax, esi
xor esi, edi
and esi, 0aaaaaaaah
xor eax, esi
xor edi, esi
;
rol eax, 23
mov esi, eax
xor eax, edi
and eax, 003fc03fch
xor esi, eax
xor edi, eax
;
rol esi, 10
mov eax, esi
xor esi, edi
and esi, 033333333h
xor eax, esi
xor edi, esi
;
rol edi, 18
mov esi, edi
xor edi, eax
and edi, 0fff0000fh
xor esi, edi
xor eax, edi
;
rol esi, 12
mov edi, esi
xor esi, eax
and esi, 0f0f0f0f0h
xor edi, esi
xor eax, esi
;
ror eax, 4
mov DWORD PTR [edx],eax
mov DWORD PTR 4[edx],edi
pop edi
pop esi
pop ebx
pop ebp
ret
_fcrypt_body ENDP
_TEXT ENDS
END

View File

@ -1,99 +0,0 @@
begin 640 c-win32.obj
M3`$"`/4&DC,,$```"0`````````N=&5X=```````````````J`H``&0````,
M"P```````(`````@`#!@+F1A=&$```"H"@`````````````,$```````````
M````````0``PP%535E<S_S/VBVPD&,=$)"09````BT0D'(O6P>H0BTPD(#/6
M(\(CT8O8P>,0B\K!X1`SPS/1BUT`,\.+300SQC/6,]$E_/S\_#/;@>+/S\_/
M,\F*V(K,P<H$BZL`````BMHS_8NI``(``#/]BL[!Z!"+JP`!```S_8K<P>H0
MBZD``P``,_V+;"08BLXE_P```('B_P```(N;``8``#/[BYD`!P``,_N+F``$
M```S^XN:``4``#/[BT0D'(O7P>H0BTPD(#/7(\(CT8O8P>,0B\K!X1`SPS/1
MBUT(,\.+30PSQS/7,]$E_/S\_#/;@>+/S\_/,\F*V(K,P<H$BZL`````BMHS
M]8NI``(``#/UBL[!Z!"+JP`!```S]8K<P>H0BZD``P``,_6+;"08BLXE_P``
M`('B_P```(N;``8``#/SBYD`!P``,_.+F``$```S\XN:``4``#/SBT0D'(O6
MP>H0BTPD(#/6(\(CT8O8P>,0B\K!X1`SPS/1BUT0,\.+310SQC/6,]$E_/S\
M_#/;@>+/S\_/,\F*V(K,P<H$BZL`````BMHS_8NI``(``#/]BL[!Z!"+JP`!
M```S_8K<P>H0BZD``P``,_V+;"08BLXE_P```('B_P```(N;``8``#/[BYD`
M!P``,_N+F``$```S^XN:``4``#/[BT0D'(O7P>H0BTPD(#/7(\(CT8O8P>,0
MB\K!X1`SPS/1BUT8,\.+31PSQS/7,]$E_/S\_#/;@>+/S\_/,\F*V(K,P<H$
MBZL`````BMHS]8NI``(``#/UBL[!Z!"+JP`!```S]8K<P>H0BZD``P``,_6+
M;"08BLXE_P```('B_P```(N;``8``#/SBYD`!P``,_.+F``$```S\XN:``4`
M`#/SBT0D'(O6P>H0BTPD(#/6(\(CT8O8P>,0B\K!X1`SPS/1BUT@,\.+320S
MQC/6,]$E_/S\_#/;@>+/S\_/,\F*V(K,P<H$BZL`````BMHS_8NI``(``#/]
MBL[!Z!"+JP`!```S_8K<P>H0BZD``P``,_V+;"08BLXE_P```('B_P```(N;
M``8``#/[BYD`!P``,_N+F``$```S^XN:``4``#/[BT0D'(O7P>H0BTPD(#/7
M(\(CT8O8P>,0B\K!X1`SPS/1BUTH,\.+32PSQS/7,]$E_/S\_#/;@>+/S\_/
M,\F*V(K,P<H$BZL`````BMHS]8NI``(``#/UBL[!Z!"+JP`!```S]8K<P>H0
MBZD``P``,_6+;"08BLXE_P```('B_P```(N;``8``#/SBYD`!P``,_.+F``$
M```S\XN:``4``#/SBT0D'(O6P>H0BTPD(#/6(\(CT8O8P>,0B\K!X1`SPS/1
MBUTP,\.+330SQC/6,]$E_/S\_#/;@>+/S\_/,\F*V(K,P<H$BZL`````BMHS
M_8NI``(``#/]BL[!Z!"+JP`!```S_8K<P>H0BZD``P``,_V+;"08BLXE_P``
M`('B_P```(N;``8``#/[BYD`!P``,_N+F``$```S^XN:``4``#/[BT0D'(O7
MP>H0BTPD(#/7(\(CT8O8P>,0B\K!X1`SPS/1BUTX,\.+33PSQS/7,]$E_/S\
M_#/;@>+/S\_/,\F*V(K,P<H$BZL`````BMHS]8NI``(``#/UBL[!Z!"+JP`!
M```S]8K<P>H0BZD``P``,_6+;"08BLXE_P```('B_P```(N;``8``#/SBYD`
M!P``,_.+F``$```S\XN:``4``#/SBT0D'(O6P>H0BTPD(#/6(\(CT8O8P>,0
MB\K!X1`SPS/1BUU`,\.+340SQC/6,]$E_/S\_#/;@>+/S\_/,\F*V(K,P<H$
MBZL`````BMHS_8NI``(``#/]BL[!Z!"+JP`!```S_8K<P>H0BZD``P``,_V+
M;"08BLXE_P```('B_P```(N;``8``#/[BYD`!P``,_N+F``$```S^XN:``4`
M`#/[BT0D'(O7P>H0BTPD(#/7(\(CT8O8P>,0B\K!X1`SPS/1BUU(,\.+34PS
MQS/7,]$E_/S\_#/;@>+/S\_/,\F*V(K,P<H$BZL`````BMHS]8NI``(``#/U
MBL[!Z!"+JP`!```S]8K<P>H0BZD``P``,_6+;"08BLXE_P```('B_P```(N;
M``8``#/SBYD`!P``,_.+F``$```S\XN:``4``#/SBT0D'(O6P>H0BTPD(#/6
M(\(CT8O8P>,0B\K!X1`SPS/1BUU0,\.+350SQC/6,]$E_/S\_#/;@>+/S\_/
M,\F*V(K,P<H$BZL`````BMHS_8NI``(``#/]BL[!Z!"+JP`!```S_8K<P>H0
MBZD``P``,_V+;"08BLXE_P```('B_P```(N;``8``#/[BYD`!P``,_N+F``$
M```S^XN:``4``#/[BT0D'(O7P>H0BTPD(#/7(\(CT8O8P>,0B\K!X1`SPS/1
MBUU8,\.+35PSQS/7,]$E_/S\_#/;@>+/S\_/,\F*V(K,P<H$BZL`````BMHS
M]8NI``(``#/UBL[!Z!"+JP`!```S]8K<P>H0BZD``P``,_6+;"08BLXE_P``
M`('B_P```(N;``8``#/SBYD`!P``,_.+F``$```S\XN:``4``#/SBT0D'(O6
MP>H0BTPD(#/6(\(CT8O8P>,0B\K!X1`SPS/1BUU@,\.+360SQC/6,]$E_/S\
M_#/;@>+/S\_/,\F*V(K,P<H$BZL`````BMHS_8NI``(``#/]BL[!Z!"+JP`!
M```S_8K<P>H0BZD``P``,_V+;"08BLXE_P```('B_P```(N;``8``#/[BYD`
M!P``,_N+F``$```S^XN:``4``#/[BT0D'(O7P>H0BTPD(#/7(\(CT8O8P>,0
MB\K!X1`SPS/1BUUH,\.+36PSQS/7,]$E_/S\_#/;@>+/S\_/,\F*V(K,P<H$
MBZL`````BMHS]8NI``(``#/UBL[!Z!"+JP`!```S]8K<P>H0BZD``P``,_6+
M;"08BLXE_P```('B_P```(N;``8``#/SBYD`!P``,_.+F``$```S\XN:``4`
M`#/SBT0D'(O6P>H0BTPD(#/6(\(CT8O8P>,0B\K!X1`SPS/1BUUP,\.+370S
MQC/6,]$E_/S\_#/;@>+/S\_/,\F*V(K,P<H$BZL`````BMHS_8NI``(``#/]
MBL[!Z!"+JP`!```S_8K<P>H0BZD``P``,_V+;"08BLXE_P```('B_P```(N;
M``8``#/[BYD`!P``,_N+F``$```S^XN:``4``#/[BT0D'(O7P>H0BTPD(#/7
M(\(CT8O8P>,0B\K!X1`SPS/1BUUX,\.+37PSQS/7,]$E_/S\_#/;@>+/S\_/
M,\F*V(K,P<H$BZL`````BMHS]8NI``(``#/UBL[!Z!"+JP`!```S]8K<P>H0
MBZD``P``,_6+;"08BLXE_P```('B_P```(N;``8``#/SBYD`!P``,_.+F``$
M```S\XN:``4``#/SB\?_3"0DB_Z+\`^%T/7__XM4)!31SXO&,_>!YJJJJJHS
MQC/^P<`7B_`SQR7\`_P#,_`S^,'&"HO&,_>!YC,S,S,SQC/^P<<2B_<S^('G
M#P#P_S/W,\?!Q@R+_C/P@>;P\/#P,_XSQL'(!(D"B7H$7UY;7<-;````!P``
M``8`90````<````&`'(````'````!@!_````!P````8`F`````<````&`*``
M```'````!@"H````!P````8`L`````<````&`/T````'````!@`'`0``!P``
M``8`%`$```<````&`"$!```'````!@`Z`0``!P````8`0@$```<````&`$H!
M```'````!@!2`0``!P````8`GP$```<````&`*D!```'````!@"V`0``!P``
M``8`PP$```<````&`-P!```'````!@#D`0``!P````8`[`$```<````&`/0!
M```'````!@!!`@``!P````8`2P(```<````&`%@"```'````!@!E`@``!P``
M``8`?@(```<````&`(8"```'````!@".`@``!P````8`E@(```<````&`.,"
M```'````!@#M`@``!P````8`^@(```<````&``<#```'````!@`@`P``!P``
M``8`*`,```<````&`#`#```'````!@`X`P``!P````8`A0,```<````&`(\#
M```'````!@"<`P``!P````8`J0,```<````&`,(#```'````!@#*`P``!P``
M``8`T@,```<````&`-H#```'````!@`G!```!P````8`,00```<````&`#X$
M```'````!@!+!```!P````8`9`0```<````&`&P$```'````!@!T!```!P``
M``8`?`0```<````&`,D$```'````!@#3!```!P````8`X`0```<````&`.T$
M```'````!@`&!0``!P````8`#@4```<````&`!8%```'````!@`>!0``!P``
M``8`:P4```<````&`'4%```'````!@""!0``!P````8`CP4```<````&`*@%
M```'````!@"P!0``!P````8`N`4```<````&`,`%```'````!@`-!@``!P``
M``8`%P8```<````&`"0&```'````!@`Q!@``!P````8`2@8```<````&`%(&
M```'````!@!:!@``!P````8`8@8```<````&`*\&```'````!@"Y!@``!P``
M``8`Q@8```<````&`-,&```'````!@#L!@``!P````8`]`8```<````&`/P&
M```'````!@`$!P``!P````8`40<```<````&`%L'```'````!@!H!P``!P``
M``8`=0<```<````&`(X'```'````!@"6!P``!P````8`G@<```<````&`*8'
M```'````!@#S!P``!P````8`_0<```<````&``H(```'````!@`7"```!P``
M``8`,`@```<````&`#@(```'````!@!`"```!P````8`2`@```<````&`)4(
M```'````!@"?"```!P````8`K`@```<````&`+D(```'````!@#2"```!P``
M``8`V@@```<````&`.((```'````!@#J"```!P````8`-PD```<````&`$$)
M```'````!@!."0``!P````8`6PD```<````&`'0)```'````!@!\"0``!P``
M``8`A`D```<````&`(P)```'````!@#9"0``!P````8`XPD```<````&`/`)
M```'````!@#]"0``!P````8`%@H```<````&`!X*```'````!@`F"@``!P``
M``8`+@H```<````&`"YF:6QE`````````/[_``!G`BY<8W)Y<'1O7&1E<UQA
M<VU<8RUW:6XS,BYA<VT``````````"YT97AT``````````$````#`:@*``"`
M`````````````````"YD871A``````````(````#`0``````````````````
M```````````$```````````````"```````1``````````$`(``"`!X```!?
99&5S7U-0=')A;G,`7V9C<GEP=%]B;V1Y````
`
end

View File

@ -1,240 +0,0 @@
#!/usr/local/bin/perl
#
# The inner loop instruction sequence and the IP/FP modifications are from
# Svend Olaf Mikkelsen <svolaf@inet.uni-c.dk>
# I've added the stuff needed for crypt() but I've not worried about making
# things perfect.
#
$prog="crypt.pl";
# base code is in microsft
# op dest, source
# format.
#
require "desboth.pl";
if ( ($ARGV[0] eq "elf"))
{ require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "a.out"))
{ $aout=1; require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "sol"))
{ $sol=1; require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "cpp"))
{ $cpp=1; require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "win32"))
{ require "x86ms.pl"; }
else
{
print STDERR <<"EOF";
Pick one target type from
elf - linux, FreeBSD etc
a.out - old linux
sol - x86 solaris
cpp - format so x86unix.cpp can be used
win32 - Windows 95/Windows NT
EOF
exit(1);
}
&comment("Don't even think of reading this code");
&comment("It was automatically generated by $prog");
&comment("Which is a perl program used to generate the x86 assember for");
&comment("any of elf, a.out, Win32, or Solaris");
&comment("It can be found in SSLeay 0.6.5+ or in libdes 3.26+");
&comment("eric <eay\@cryptsoft.com>");
&comment("The inner loop instruction sequence and the IP/FP modifications");
&comment("are from Svend Olaf Mikkelsen <svolaf\@inet.uni-c.dk>");
&comment("");
&file("dx86xxxx");
$L="edi";
$R="esi";
&fcrypt_body("fcrypt_body");
&file_end();
sub fcrypt_body
{
local($name,$do_ip)=@_;
&function_begin($name,3,"EXTRN _des_SPtrans:DWORD");
&comment("");
&comment("Load the 2 words");
$ks="ebp";
&xor( $L, $L);
&xor( $R, $R);
&mov($ks,&wparam(1));
&mov(&wtmp(1), 25);
&set_label("start");
for ($i=0; $i<16; $i+=2)
{
&comment("");
&comment("Round $i");
&D_ENCRYPT($i,$L,$R,$i*2,$ks,"des_SPtrans","eax","ebx","ecx","edx");
&comment("");
&comment("Round ".sprintf("%d",$i+1));
&D_ENCRYPT($i+1,$R,$L,($i+1)*2,$ks,"des_SPtrans","eax","ebx","ecx","edx");
}
&mov("eax", $L);
&dec(&wtmp(1));
&mov($L, $R);
&mov($R, "eax");
&jnz(&label("start"));
&comment("");
&comment("FP");
&mov("edx",&wparam(0));
&FP_new($R,$L,"eax",3);
&mov(&DWP(0,"edx","",0),"eax");
&mov(&DWP(4,"edx","",0),$L);
&function_end($name);
}
sub D_ENCRYPT
{
local($r,$L,$R,$S,$ks,$desSP,$u,$tmp1,$tmp2,$t)=@_;
&mov( $u, &wparam(2)); # 2
&mov( $t, $R);
&shr( $t, 16); # 1
&mov( $tmp2, &wparam(3)); # 2
&xor( $t, $R); # 1
&and( $u, $t); # 2
&and( $t, $tmp2); # 2
&mov( $tmp1, $u);
&shl( $tmp1, 16); # 1
&mov( $tmp2, $t);
&shl( $tmp2, 16); # 1
&xor( $u, $tmp1); # 2
&xor( $t, $tmp2); # 2
&mov( $tmp1, &DWP(&n2a($S*4),$ks,"",0)); # 2
&xor( $u, $tmp1);
&mov( $tmp2, &DWP(&n2a(($S+1)*4),$ks,"",0)); # 2
&xor( $u, $R);
&xor( $t, $R);
&xor( $t, $tmp2);
&and( $u, "0xfcfcfcfc" ); # 2
&xor( $tmp1, $tmp1); # 1
&and( $t, "0xcfcfcfcf" ); # 2
&xor( $tmp2, $tmp2);
&movb( &LB($tmp1), &LB($u) );
&movb( &LB($tmp2), &HB($u) );
&rotr( $t, 4 );
&mov( $ks, &DWP(" $desSP",$tmp1,"",0));
&movb( &LB($tmp1), &LB($t) );
&xor( $L, $ks);
&mov( $ks, &DWP("0x200+$desSP",$tmp2,"",0));
&xor( $L, $ks);
&movb( &LB($tmp2), &HB($t) );
&shr( $u, 16);
&mov( $ks, &DWP("0x100+$desSP",$tmp1,"",0));
&xor( $L, $ks);
&movb( &LB($tmp1), &HB($u) );
&shr( $t, 16);
&mov( $ks, &DWP("0x300+$desSP",$tmp2,"",0));
&xor( $L, $ks);
&mov( $ks, &DWP(24,"esp","",0));
&movb( &LB($tmp2), &HB($t) );
&and( $u, "0xff" );
&and( $t, "0xff" );
&mov( $tmp1, &DWP("0x600+$desSP",$tmp1,"",0));
&xor( $L, $tmp1);
&mov( $tmp1, &DWP("0x700+$desSP",$tmp2,"",0));
&xor( $L, $tmp1);
&mov( $tmp1, &DWP("0x400+$desSP",$u,"",0));
&xor( $L, $tmp1);
&mov( $tmp1, &DWP("0x500+$desSP",$t,"",0));
&xor( $L, $tmp1);
}
sub n2a
{
sprintf("%d",$_[0]);
}
# now has a side affect of rotating $a by $shift
sub R_PERM_OP
{
local($a,$b,$tt,$shift,$mask,$last)=@_;
&rotl( $a, $shift ) if ($shift != 0);
&mov( $tt, $a );
&xor( $a, $b );
&and( $a, $mask );
if ($notlast eq $b)
{
&xor( $b, $a );
&xor( $tt, $a );
}
else
{
&xor( $tt, $a );
&xor( $b, $a );
}
&comment("");
}
sub IP_new
{
local($l,$r,$tt,$lr)=@_;
&R_PERM_OP($l,$r,$tt, 4,"0xf0f0f0f0",$l);
&R_PERM_OP($r,$tt,$l,20,"0xfff0000f",$l);
&R_PERM_OP($l,$tt,$r,14,"0x33333333",$r);
&R_PERM_OP($tt,$r,$l,22,"0x03fc03fc",$r);
&R_PERM_OP($l,$r,$tt, 9,"0xaaaaaaaa",$r);
if ($lr != 3)
{
if (($lr-3) < 0)
{ &rotr($tt, 3-$lr); }
else { &rotl($tt, $lr-3); }
}
if ($lr != 2)
{
if (($lr-2) < 0)
{ &rotr($r, 2-$lr); }
else { &rotl($r, $lr-2); }
}
}
sub FP_new
{
local($l,$r,$tt,$lr)=@_;
if ($lr != 2)
{
if (($lr-2) < 0)
{ &rotl($r, 2-$lr); }
else { &rotr($r, $lr-2); }
}
if ($lr != 3)
{
if (($lr-3) < 0)
{ &rotl($l, 3-$lr); }
else { &rotr($l, $lr-3); }
}
&R_PERM_OP($l,$r,$tt, 0,"0xaaaaaaaa",$r);
&R_PERM_OP($tt,$r,$l,23,"0x03fc03fc",$r);
&R_PERM_OP($l,$r,$tt,10,"0x33333333",$l);
&R_PERM_OP($r,$tt,$l,18,"0xfff0000f",$l);
&R_PERM_OP($l,$tt,$r,12,"0xf0f0f0f0",$r);
&rotr($tt , 4);
}

View File

@ -1,932 +0,0 @@
/* Don't even think of reading this code */
/* It was automatically generated by crypt.pl */
/* Which is a perl program used to generate the x86 assember for */
/* any of elf, a.out, Win32, or Solaris */
/* It can be found in SSLeay 0.6.5+ or in libdes 3.26+ */
/* eric <eay@cryptsoft.com> */
/* The inner loop instruction sequence and the IP/FP modifications */
/* are from Svend Olaf Mikkelsen <svolaf@inet.uni-c.dk> */
.file "dx86xxxx.s"
.version "01.01"
gcc2_compiled.:
.text
.align ALIGN
.globl fcrypt_body
TYPE(fcrypt_body,@function)
fcrypt_body:
pushl %ebp
pushl %ebx
pushl %esi
pushl %edi
/* Load the 2 words */
xorl %edi, %edi
xorl %esi, %esi
movl 24(%esp), %ebp
movl $25, -8(%esp)
.align ALIGN
.L000start:
/* Round 0 */
movl 28(%esp), %eax
movl %esi, %edx
shrl $16, %edx
movl 32(%esp), %ecx
xorl %esi, %edx
andl %edx, %eax
andl %ecx, %edx
movl %eax, %ebx
sall $16, %ebx
movl %edx, %ecx
sall $16, %ecx
xorl %ebx, %eax
xorl %ecx, %edx
movl (%ebp), %ebx
xorl %ebx, %eax
movl 4(%ebp), %ecx
xorl %esi, %eax
xorl %esi, %edx
xorl %ecx, %edx
andl $0xfcfcfcfc, %eax
xorl %ebx, %ebx
andl $0xcfcfcfcf, %edx
xorl %ecx, %ecx
movb %al, %bl
movb %ah, %cl
rorl $4, %edx
movl des_SPtrans(%ebx),%ebp
movb %dl, %bl
xorl %ebp, %edi
movl 0x200+des_SPtrans(%ecx),%ebp
xorl %ebp, %edi
movb %dh, %cl
shrl $16, %eax
movl 0x100+des_SPtrans(%ebx),%ebp
xorl %ebp, %edi
movb %ah, %bl
shrl $16, %edx
movl 0x300+des_SPtrans(%ecx),%ebp
xorl %ebp, %edi
movl 24(%esp), %ebp
movb %dh, %cl
andl $0xff, %eax
andl $0xff, %edx
movl 0x600+des_SPtrans(%ebx),%ebx
xorl %ebx, %edi
movl 0x700+des_SPtrans(%ecx),%ebx
xorl %ebx, %edi
movl 0x400+des_SPtrans(%eax),%ebx
xorl %ebx, %edi
movl 0x500+des_SPtrans(%edx),%ebx
xorl %ebx, %edi
/* Round 1 */
movl 28(%esp), %eax
movl %edi, %edx
shrl $16, %edx
movl 32(%esp), %ecx
xorl %edi, %edx
andl %edx, %eax
andl %ecx, %edx
movl %eax, %ebx
sall $16, %ebx
movl %edx, %ecx
sall $16, %ecx
xorl %ebx, %eax
xorl %ecx, %edx
movl 8(%ebp), %ebx
xorl %ebx, %eax
movl 12(%ebp), %ecx
xorl %edi, %eax
xorl %edi, %edx
xorl %ecx, %edx
andl $0xfcfcfcfc, %eax
xorl %ebx, %ebx
andl $0xcfcfcfcf, %edx
xorl %ecx, %ecx
movb %al, %bl
movb %ah, %cl
rorl $4, %edx
movl des_SPtrans(%ebx),%ebp
movb %dl, %bl
xorl %ebp, %esi
movl 0x200+des_SPtrans(%ecx),%ebp
xorl %ebp, %esi
movb %dh, %cl
shrl $16, %eax
movl 0x100+des_SPtrans(%ebx),%ebp
xorl %ebp, %esi
movb %ah, %bl
shrl $16, %edx
movl 0x300+des_SPtrans(%ecx),%ebp
xorl %ebp, %esi
movl 24(%esp), %ebp
movb %dh, %cl
andl $0xff, %eax
andl $0xff, %edx
movl 0x600+des_SPtrans(%ebx),%ebx
xorl %ebx, %esi
movl 0x700+des_SPtrans(%ecx),%ebx
xorl %ebx, %esi
movl 0x400+des_SPtrans(%eax),%ebx
xorl %ebx, %esi
movl 0x500+des_SPtrans(%edx),%ebx
xorl %ebx, %esi
/* Round 2 */
movl 28(%esp), %eax
movl %esi, %edx
shrl $16, %edx
movl 32(%esp), %ecx
xorl %esi, %edx
andl %edx, %eax
andl %ecx, %edx
movl %eax, %ebx
sall $16, %ebx
movl %edx, %ecx
sall $16, %ecx
xorl %ebx, %eax
xorl %ecx, %edx
movl 16(%ebp), %ebx
xorl %ebx, %eax
movl 20(%ebp), %ecx
xorl %esi, %eax
xorl %esi, %edx
xorl %ecx, %edx
andl $0xfcfcfcfc, %eax
xorl %ebx, %ebx
andl $0xcfcfcfcf, %edx
xorl %ecx, %ecx
movb %al, %bl
movb %ah, %cl
rorl $4, %edx
movl des_SPtrans(%ebx),%ebp
movb %dl, %bl
xorl %ebp, %edi
movl 0x200+des_SPtrans(%ecx),%ebp
xorl %ebp, %edi
movb %dh, %cl
shrl $16, %eax
movl 0x100+des_SPtrans(%ebx),%ebp
xorl %ebp, %edi
movb %ah, %bl
shrl $16, %edx
movl 0x300+des_SPtrans(%ecx),%ebp
xorl %ebp, %edi
movl 24(%esp), %ebp
movb %dh, %cl
andl $0xff, %eax
andl $0xff, %edx
movl 0x600+des_SPtrans(%ebx),%ebx
xorl %ebx, %edi
movl 0x700+des_SPtrans(%ecx),%ebx
xorl %ebx, %edi
movl 0x400+des_SPtrans(%eax),%ebx
xorl %ebx, %edi
movl 0x500+des_SPtrans(%edx),%ebx
xorl %ebx, %edi
/* Round 3 */
movl 28(%esp), %eax
movl %edi, %edx
shrl $16, %edx
movl 32(%esp), %ecx
xorl %edi, %edx
andl %edx, %eax
andl %ecx, %edx
movl %eax, %ebx
sall $16, %ebx
movl %edx, %ecx
sall $16, %ecx
xorl %ebx, %eax
xorl %ecx, %edx
movl 24(%ebp), %ebx
xorl %ebx, %eax
movl 28(%ebp), %ecx
xorl %edi, %eax
xorl %edi, %edx
xorl %ecx, %edx
andl $0xfcfcfcfc, %eax
xorl %ebx, %ebx
andl $0xcfcfcfcf, %edx
xorl %ecx, %ecx
movb %al, %bl
movb %ah, %cl
rorl $4, %edx
movl des_SPtrans(%ebx),%ebp
movb %dl, %bl
xorl %ebp, %esi
movl 0x200+des_SPtrans(%ecx),%ebp
xorl %ebp, %esi
movb %dh, %cl
shrl $16, %eax
movl 0x100+des_SPtrans(%ebx),%ebp
xorl %ebp, %esi
movb %ah, %bl
shrl $16, %edx
movl 0x300+des_SPtrans(%ecx),%ebp
xorl %ebp, %esi
movl 24(%esp), %ebp
movb %dh, %cl
andl $0xff, %eax
andl $0xff, %edx
movl 0x600+des_SPtrans(%ebx),%ebx
xorl %ebx, %esi
movl 0x700+des_SPtrans(%ecx),%ebx
xorl %ebx, %esi
movl 0x400+des_SPtrans(%eax),%ebx
xorl %ebx, %esi
movl 0x500+des_SPtrans(%edx),%ebx
xorl %ebx, %esi
/* Round 4 */
movl 28(%esp), %eax
movl %esi, %edx
shrl $16, %edx
movl 32(%esp), %ecx
xorl %esi, %edx
andl %edx, %eax
andl %ecx, %edx
movl %eax, %ebx
sall $16, %ebx
movl %edx, %ecx
sall $16, %ecx
xorl %ebx, %eax
xorl %ecx, %edx
movl 32(%ebp), %ebx
xorl %ebx, %eax
movl 36(%ebp), %ecx
xorl %esi, %eax
xorl %esi, %edx
xorl %ecx, %edx
andl $0xfcfcfcfc, %eax
xorl %ebx, %ebx
andl $0xcfcfcfcf, %edx
xorl %ecx, %ecx
movb %al, %bl
movb %ah, %cl
rorl $4, %edx
movl des_SPtrans(%ebx),%ebp
movb %dl, %bl
xorl %ebp, %edi
movl 0x200+des_SPtrans(%ecx),%ebp
xorl %ebp, %edi
movb %dh, %cl
shrl $16, %eax
movl 0x100+des_SPtrans(%ebx),%ebp
xorl %ebp, %edi
movb %ah, %bl
shrl $16, %edx
movl 0x300+des_SPtrans(%ecx),%ebp
xorl %ebp, %edi
movl 24(%esp), %ebp
movb %dh, %cl
andl $0xff, %eax
andl $0xff, %edx
movl 0x600+des_SPtrans(%ebx),%ebx
xorl %ebx, %edi
movl 0x700+des_SPtrans(%ecx),%ebx
xorl %ebx, %edi
movl 0x400+des_SPtrans(%eax),%ebx
xorl %ebx, %edi
movl 0x500+des_SPtrans(%edx),%ebx
xorl %ebx, %edi
/* Round 5 */
movl 28(%esp), %eax
movl %edi, %edx
shrl $16, %edx
movl 32(%esp), %ecx
xorl %edi, %edx
andl %edx, %eax
andl %ecx, %edx
movl %eax, %ebx
sall $16, %ebx
movl %edx, %ecx
sall $16, %ecx
xorl %ebx, %eax
xorl %ecx, %edx
movl 40(%ebp), %ebx
xorl %ebx, %eax
movl 44(%ebp), %ecx
xorl %edi, %eax
xorl %edi, %edx
xorl %ecx, %edx
andl $0xfcfcfcfc, %eax
xorl %ebx, %ebx
andl $0xcfcfcfcf, %edx
xorl %ecx, %ecx
movb %al, %bl
movb %ah, %cl
rorl $4, %edx
movl des_SPtrans(%ebx),%ebp
movb %dl, %bl
xorl %ebp, %esi
movl 0x200+des_SPtrans(%ecx),%ebp
xorl %ebp, %esi
movb %dh, %cl
shrl $16, %eax
movl 0x100+des_SPtrans(%ebx),%ebp
xorl %ebp, %esi
movb %ah, %bl
shrl $16, %edx
movl 0x300+des_SPtrans(%ecx),%ebp
xorl %ebp, %esi
movl 24(%esp), %ebp
movb %dh, %cl
andl $0xff, %eax
andl $0xff, %edx
movl 0x600+des_SPtrans(%ebx),%ebx
xorl %ebx, %esi
movl 0x700+des_SPtrans(%ecx),%ebx
xorl %ebx, %esi
movl 0x400+des_SPtrans(%eax),%ebx
xorl %ebx, %esi
movl 0x500+des_SPtrans(%edx),%ebx
xorl %ebx, %esi
/* Round 6 */
movl 28(%esp), %eax
movl %esi, %edx
shrl $16, %edx
movl 32(%esp), %ecx
xorl %esi, %edx
andl %edx, %eax
andl %ecx, %edx
movl %eax, %ebx
sall $16, %ebx
movl %edx, %ecx
sall $16, %ecx
xorl %ebx, %eax
xorl %ecx, %edx
movl 48(%ebp), %ebx
xorl %ebx, %eax
movl 52(%ebp), %ecx
xorl %esi, %eax
xorl %esi, %edx
xorl %ecx, %edx
andl $0xfcfcfcfc, %eax
xorl %ebx, %ebx
andl $0xcfcfcfcf, %edx
xorl %ecx, %ecx
movb %al, %bl
movb %ah, %cl
rorl $4, %edx
movl des_SPtrans(%ebx),%ebp
movb %dl, %bl
xorl %ebp, %edi
movl 0x200+des_SPtrans(%ecx),%ebp
xorl %ebp, %edi
movb %dh, %cl
shrl $16, %eax
movl 0x100+des_SPtrans(%ebx),%ebp
xorl %ebp, %edi
movb %ah, %bl
shrl $16, %edx
movl 0x300+des_SPtrans(%ecx),%ebp
xorl %ebp, %edi
movl 24(%esp), %ebp
movb %dh, %cl
andl $0xff, %eax
andl $0xff, %edx
movl 0x600+des_SPtrans(%ebx),%ebx
xorl %ebx, %edi
movl 0x700+des_SPtrans(%ecx),%ebx
xorl %ebx, %edi
movl 0x400+des_SPtrans(%eax),%ebx
xorl %ebx, %edi
movl 0x500+des_SPtrans(%edx),%ebx
xorl %ebx, %edi
/* Round 7 */
movl 28(%esp), %eax
movl %edi, %edx
shrl $16, %edx
movl 32(%esp), %ecx
xorl %edi, %edx
andl %edx, %eax
andl %ecx, %edx
movl %eax, %ebx
sall $16, %ebx
movl %edx, %ecx
sall $16, %ecx
xorl %ebx, %eax
xorl %ecx, %edx
movl 56(%ebp), %ebx
xorl %ebx, %eax
movl 60(%ebp), %ecx
xorl %edi, %eax
xorl %edi, %edx
xorl %ecx, %edx
andl $0xfcfcfcfc, %eax
xorl %ebx, %ebx
andl $0xcfcfcfcf, %edx
xorl %ecx, %ecx
movb %al, %bl
movb %ah, %cl
rorl $4, %edx
movl des_SPtrans(%ebx),%ebp
movb %dl, %bl
xorl %ebp, %esi
movl 0x200+des_SPtrans(%ecx),%ebp
xorl %ebp, %esi
movb %dh, %cl
shrl $16, %eax
movl 0x100+des_SPtrans(%ebx),%ebp
xorl %ebp, %esi
movb %ah, %bl
shrl $16, %edx
movl 0x300+des_SPtrans(%ecx),%ebp
xorl %ebp, %esi
movl 24(%esp), %ebp
movb %dh, %cl
andl $0xff, %eax
andl $0xff, %edx
movl 0x600+des_SPtrans(%ebx),%ebx
xorl %ebx, %esi
movl 0x700+des_SPtrans(%ecx),%ebx
xorl %ebx, %esi
movl 0x400+des_SPtrans(%eax),%ebx
xorl %ebx, %esi
movl 0x500+des_SPtrans(%edx),%ebx
xorl %ebx, %esi
/* Round 8 */
movl 28(%esp), %eax
movl %esi, %edx
shrl $16, %edx
movl 32(%esp), %ecx
xorl %esi, %edx
andl %edx, %eax
andl %ecx, %edx
movl %eax, %ebx
sall $16, %ebx
movl %edx, %ecx
sall $16, %ecx
xorl %ebx, %eax
xorl %ecx, %edx
movl 64(%ebp), %ebx
xorl %ebx, %eax
movl 68(%ebp), %ecx
xorl %esi, %eax
xorl %esi, %edx
xorl %ecx, %edx
andl $0xfcfcfcfc, %eax
xorl %ebx, %ebx
andl $0xcfcfcfcf, %edx
xorl %ecx, %ecx
movb %al, %bl
movb %ah, %cl
rorl $4, %edx
movl des_SPtrans(%ebx),%ebp
movb %dl, %bl
xorl %ebp, %edi
movl 0x200+des_SPtrans(%ecx),%ebp
xorl %ebp, %edi
movb %dh, %cl
shrl $16, %eax
movl 0x100+des_SPtrans(%ebx),%ebp
xorl %ebp, %edi
movb %ah, %bl
shrl $16, %edx
movl 0x300+des_SPtrans(%ecx),%ebp
xorl %ebp, %edi
movl 24(%esp), %ebp
movb %dh, %cl
andl $0xff, %eax
andl $0xff, %edx
movl 0x600+des_SPtrans(%ebx),%ebx
xorl %ebx, %edi
movl 0x700+des_SPtrans(%ecx),%ebx
xorl %ebx, %edi
movl 0x400+des_SPtrans(%eax),%ebx
xorl %ebx, %edi
movl 0x500+des_SPtrans(%edx),%ebx
xorl %ebx, %edi
/* Round 9 */
movl 28(%esp), %eax
movl %edi, %edx
shrl $16, %edx
movl 32(%esp), %ecx
xorl %edi, %edx
andl %edx, %eax
andl %ecx, %edx
movl %eax, %ebx
sall $16, %ebx
movl %edx, %ecx
sall $16, %ecx
xorl %ebx, %eax
xorl %ecx, %edx
movl 72(%ebp), %ebx
xorl %ebx, %eax
movl 76(%ebp), %ecx
xorl %edi, %eax
xorl %edi, %edx
xorl %ecx, %edx
andl $0xfcfcfcfc, %eax
xorl %ebx, %ebx
andl $0xcfcfcfcf, %edx
xorl %ecx, %ecx
movb %al, %bl
movb %ah, %cl
rorl $4, %edx
movl des_SPtrans(%ebx),%ebp
movb %dl, %bl
xorl %ebp, %esi
movl 0x200+des_SPtrans(%ecx),%ebp
xorl %ebp, %esi
movb %dh, %cl
shrl $16, %eax
movl 0x100+des_SPtrans(%ebx),%ebp
xorl %ebp, %esi
movb %ah, %bl
shrl $16, %edx
movl 0x300+des_SPtrans(%ecx),%ebp
xorl %ebp, %esi
movl 24(%esp), %ebp
movb %dh, %cl
andl $0xff, %eax
andl $0xff, %edx
movl 0x600+des_SPtrans(%ebx),%ebx
xorl %ebx, %esi
movl 0x700+des_SPtrans(%ecx),%ebx
xorl %ebx, %esi
movl 0x400+des_SPtrans(%eax),%ebx
xorl %ebx, %esi
movl 0x500+des_SPtrans(%edx),%ebx
xorl %ebx, %esi
/* Round 10 */
movl 28(%esp), %eax
movl %esi, %edx
shrl $16, %edx
movl 32(%esp), %ecx
xorl %esi, %edx
andl %edx, %eax
andl %ecx, %edx
movl %eax, %ebx
sall $16, %ebx
movl %edx, %ecx
sall $16, %ecx
xorl %ebx, %eax
xorl %ecx, %edx
movl 80(%ebp), %ebx
xorl %ebx, %eax
movl 84(%ebp), %ecx
xorl %esi, %eax
xorl %esi, %edx
xorl %ecx, %edx
andl $0xfcfcfcfc, %eax
xorl %ebx, %ebx
andl $0xcfcfcfcf, %edx
xorl %ecx, %ecx
movb %al, %bl
movb %ah, %cl
rorl $4, %edx
movl des_SPtrans(%ebx),%ebp
movb %dl, %bl
xorl %ebp, %edi
movl 0x200+des_SPtrans(%ecx),%ebp
xorl %ebp, %edi
movb %dh, %cl
shrl $16, %eax
movl 0x100+des_SPtrans(%ebx),%ebp
xorl %ebp, %edi
movb %ah, %bl
shrl $16, %edx
movl 0x300+des_SPtrans(%ecx),%ebp
xorl %ebp, %edi
movl 24(%esp), %ebp
movb %dh, %cl
andl $0xff, %eax
andl $0xff, %edx
movl 0x600+des_SPtrans(%ebx),%ebx
xorl %ebx, %edi
movl 0x700+des_SPtrans(%ecx),%ebx
xorl %ebx, %edi
movl 0x400+des_SPtrans(%eax),%ebx
xorl %ebx, %edi
movl 0x500+des_SPtrans(%edx),%ebx
xorl %ebx, %edi
/* Round 11 */
movl 28(%esp), %eax
movl %edi, %edx
shrl $16, %edx
movl 32(%esp), %ecx
xorl %edi, %edx
andl %edx, %eax
andl %ecx, %edx
movl %eax, %ebx
sall $16, %ebx
movl %edx, %ecx
sall $16, %ecx
xorl %ebx, %eax
xorl %ecx, %edx
movl 88(%ebp), %ebx
xorl %ebx, %eax
movl 92(%ebp), %ecx
xorl %edi, %eax
xorl %edi, %edx
xorl %ecx, %edx
andl $0xfcfcfcfc, %eax
xorl %ebx, %ebx
andl $0xcfcfcfcf, %edx
xorl %ecx, %ecx
movb %al, %bl
movb %ah, %cl
rorl $4, %edx
movl des_SPtrans(%ebx),%ebp
movb %dl, %bl
xorl %ebp, %esi
movl 0x200+des_SPtrans(%ecx),%ebp
xorl %ebp, %esi
movb %dh, %cl
shrl $16, %eax
movl 0x100+des_SPtrans(%ebx),%ebp
xorl %ebp, %esi
movb %ah, %bl
shrl $16, %edx
movl 0x300+des_SPtrans(%ecx),%ebp
xorl %ebp, %esi
movl 24(%esp), %ebp
movb %dh, %cl
andl $0xff, %eax
andl $0xff, %edx
movl 0x600+des_SPtrans(%ebx),%ebx
xorl %ebx, %esi
movl 0x700+des_SPtrans(%ecx),%ebx
xorl %ebx, %esi
movl 0x400+des_SPtrans(%eax),%ebx
xorl %ebx, %esi
movl 0x500+des_SPtrans(%edx),%ebx
xorl %ebx, %esi
/* Round 12 */
movl 28(%esp), %eax
movl %esi, %edx
shrl $16, %edx
movl 32(%esp), %ecx
xorl %esi, %edx
andl %edx, %eax
andl %ecx, %edx
movl %eax, %ebx
sall $16, %ebx
movl %edx, %ecx
sall $16, %ecx
xorl %ebx, %eax
xorl %ecx, %edx
movl 96(%ebp), %ebx
xorl %ebx, %eax
movl 100(%ebp), %ecx
xorl %esi, %eax
xorl %esi, %edx
xorl %ecx, %edx
andl $0xfcfcfcfc, %eax
xorl %ebx, %ebx
andl $0xcfcfcfcf, %edx
xorl %ecx, %ecx
movb %al, %bl
movb %ah, %cl
rorl $4, %edx
movl des_SPtrans(%ebx),%ebp
movb %dl, %bl
xorl %ebp, %edi
movl 0x200+des_SPtrans(%ecx),%ebp
xorl %ebp, %edi
movb %dh, %cl
shrl $16, %eax
movl 0x100+des_SPtrans(%ebx),%ebp
xorl %ebp, %edi
movb %ah, %bl
shrl $16, %edx
movl 0x300+des_SPtrans(%ecx),%ebp
xorl %ebp, %edi
movl 24(%esp), %ebp
movb %dh, %cl
andl $0xff, %eax
andl $0xff, %edx
movl 0x600+des_SPtrans(%ebx),%ebx
xorl %ebx, %edi
movl 0x700+des_SPtrans(%ecx),%ebx
xorl %ebx, %edi
movl 0x400+des_SPtrans(%eax),%ebx
xorl %ebx, %edi
movl 0x500+des_SPtrans(%edx),%ebx
xorl %ebx, %edi
/* Round 13 */
movl 28(%esp), %eax
movl %edi, %edx
shrl $16, %edx
movl 32(%esp), %ecx
xorl %edi, %edx
andl %edx, %eax
andl %ecx, %edx
movl %eax, %ebx
sall $16, %ebx
movl %edx, %ecx
sall $16, %ecx
xorl %ebx, %eax
xorl %ecx, %edx
movl 104(%ebp), %ebx
xorl %ebx, %eax
movl 108(%ebp), %ecx
xorl %edi, %eax
xorl %edi, %edx
xorl %ecx, %edx
andl $0xfcfcfcfc, %eax
xorl %ebx, %ebx
andl $0xcfcfcfcf, %edx
xorl %ecx, %ecx
movb %al, %bl
movb %ah, %cl
rorl $4, %edx
movl des_SPtrans(%ebx),%ebp
movb %dl, %bl
xorl %ebp, %esi
movl 0x200+des_SPtrans(%ecx),%ebp
xorl %ebp, %esi
movb %dh, %cl
shrl $16, %eax
movl 0x100+des_SPtrans(%ebx),%ebp
xorl %ebp, %esi
movb %ah, %bl
shrl $16, %edx
movl 0x300+des_SPtrans(%ecx),%ebp
xorl %ebp, %esi
movl 24(%esp), %ebp
movb %dh, %cl
andl $0xff, %eax
andl $0xff, %edx
movl 0x600+des_SPtrans(%ebx),%ebx
xorl %ebx, %esi
movl 0x700+des_SPtrans(%ecx),%ebx
xorl %ebx, %esi
movl 0x400+des_SPtrans(%eax),%ebx
xorl %ebx, %esi
movl 0x500+des_SPtrans(%edx),%ebx
xorl %ebx, %esi
/* Round 14 */
movl 28(%esp), %eax
movl %esi, %edx
shrl $16, %edx
movl 32(%esp), %ecx
xorl %esi, %edx
andl %edx, %eax
andl %ecx, %edx
movl %eax, %ebx
sall $16, %ebx
movl %edx, %ecx
sall $16, %ecx
xorl %ebx, %eax
xorl %ecx, %edx
movl 112(%ebp), %ebx
xorl %ebx, %eax
movl 116(%ebp), %ecx
xorl %esi, %eax
xorl %esi, %edx
xorl %ecx, %edx
andl $0xfcfcfcfc, %eax
xorl %ebx, %ebx
andl $0xcfcfcfcf, %edx
xorl %ecx, %ecx
movb %al, %bl
movb %ah, %cl
rorl $4, %edx
movl des_SPtrans(%ebx),%ebp
movb %dl, %bl
xorl %ebp, %edi
movl 0x200+des_SPtrans(%ecx),%ebp
xorl %ebp, %edi
movb %dh, %cl
shrl $16, %eax
movl 0x100+des_SPtrans(%ebx),%ebp
xorl %ebp, %edi
movb %ah, %bl
shrl $16, %edx
movl 0x300+des_SPtrans(%ecx),%ebp
xorl %ebp, %edi
movl 24(%esp), %ebp
movb %dh, %cl
andl $0xff, %eax
andl $0xff, %edx
movl 0x600+des_SPtrans(%ebx),%ebx
xorl %ebx, %edi
movl 0x700+des_SPtrans(%ecx),%ebx
xorl %ebx, %edi
movl 0x400+des_SPtrans(%eax),%ebx
xorl %ebx, %edi
movl 0x500+des_SPtrans(%edx),%ebx
xorl %ebx, %edi
/* Round 15 */
movl 28(%esp), %eax
movl %edi, %edx
shrl $16, %edx
movl 32(%esp), %ecx
xorl %edi, %edx
andl %edx, %eax
andl %ecx, %edx
movl %eax, %ebx
sall $16, %ebx
movl %edx, %ecx
sall $16, %ecx
xorl %ebx, %eax
xorl %ecx, %edx
movl 120(%ebp), %ebx
xorl %ebx, %eax
movl 124(%ebp), %ecx
xorl %edi, %eax
xorl %edi, %edx
xorl %ecx, %edx
andl $0xfcfcfcfc, %eax
xorl %ebx, %ebx
andl $0xcfcfcfcf, %edx
xorl %ecx, %ecx
movb %al, %bl
movb %ah, %cl
rorl $4, %edx
movl des_SPtrans(%ebx),%ebp
movb %dl, %bl
xorl %ebp, %esi
movl 0x200+des_SPtrans(%ecx),%ebp
xorl %ebp, %esi
movb %dh, %cl
shrl $16, %eax
movl 0x100+des_SPtrans(%ebx),%ebp
xorl %ebp, %esi
movb %ah, %bl
shrl $16, %edx
movl 0x300+des_SPtrans(%ecx),%ebp
xorl %ebp, %esi
movl 24(%esp), %ebp
movb %dh, %cl
andl $0xff, %eax
andl $0xff, %edx
movl 0x600+des_SPtrans(%ebx),%ebx
xorl %ebx, %esi
movl 0x700+des_SPtrans(%ecx),%ebx
xorl %ebx, %esi
movl 0x400+des_SPtrans(%eax),%ebx
xorl %ebx, %esi
movl 0x500+des_SPtrans(%edx),%ebx
xorl %ebx, %esi
movl %edi, %eax
decl -8(%esp)
movl %esi, %edi
movl %eax, %esi
jnz .L000start
/* FP */
movl 20(%esp), %edx
rorl $1, %edi
movl %esi, %eax
xorl %edi, %esi
andl $0xaaaaaaaa, %esi
xorl %esi, %eax
xorl %esi, %edi
roll $23, %eax
movl %eax, %esi
xorl %edi, %eax
andl $0x03fc03fc, %eax
xorl %eax, %esi
xorl %eax, %edi
roll $10, %esi
movl %esi, %eax
xorl %edi, %esi
andl $0x33333333, %esi
xorl %esi, %eax
xorl %esi, %edi
roll $18, %edi
movl %edi, %esi
xorl %eax, %edi
andl $0xfff0000f, %edi
xorl %edi, %esi
xorl %edi, %eax
roll $12, %esi
movl %esi, %edi
xorl %eax, %esi
andl $0xf0f0f0f0, %esi
xorl %esi, %edi
xorl %esi, %eax
rorl $4, %eax
movl %eax, (%edx)
movl %edi, 4(%edx)
popl %edi
popl %esi
popl %ebx
popl %ebp
ret
.fcrypt_body_end:
SIZE(fcrypt_body,.fcrypt_body_end-fcrypt_body)
.ident "desasm.pl"

View File

@ -1,35 +0,0 @@
#define TYPE(a,b) .type a,b
#define SIZE(a,b) .size a,b
#ifdef OUT
#define OK 1
#define des_SPtrans _des_SPtrans
#define fcrypt_body _fcrypt_body
#define ALIGN 4
#endif
#ifdef BSDI
#define OK 1
#define des_SPtrans _des_SPtrans
#define fcrypt_body _fcrypt_body
#define ALIGN 4
#undef SIZE
#undef TYPE
#endif
#if defined(ELF) || defined(SOL)
#define OK 1
#define ALIGN 16
#endif
#ifndef OK
You need to define one of
ELF - elf systems - linux-elf, NetBSD and DG-UX
OUT - a.out systems - linux-a.out and FreeBSD
SOL - solaris systems, which are elf with strange comment lines
BSDI - a.out with a very primative version of as.
#endif
#include "cx86-cpp.s"

View File

@ -1,319 +0,0 @@
begin 640 d-win32.obj
M3`$"`/4&DC-`-@``#``````````N=&5X=```````````````W"$``&0```!`
M(@`````````"```@`#!@+F1A=&$```#<(0````````````!`-@``````````
M````````0``PP%535E>+="04,\F+!HM<)!R+?@3!P`2+\#/')?#P\/`S\#/X
MP<<4B\<S_H'G#P#P_S/',_?!P`Z+^#/&)3,S,S,S^#/PP<86B\8S]X'F_`/\
M`S/&,_[!P`F+\#/'):JJJJHS\#/XT<>#^P"+;"08#X2U!P``BT4`,]N+500S
MQC/6)?S\_/R!XL_/S\^*V(K,P<H$BZL`````BMHS_8NI``(``#/]BL[!Z!"+
MJP`!```S_8K<P>H0BZD``P``,_V+;"08BLXE_P```('B_P```(N;``8``#/[
MBYD`!P``,_N+F``$```S^XN:``4``#/[BT4(,]N+50PSQS/7)?S\_/R!XL_/
MS\^*V(K,P<H$BZL`````BMHS]8NI``(``#/UBL[!Z!"+JP`!```S]8K<P>H0
MBZD``P``,_6+;"08BLXE_P```('B_P```(N;``8``#/SBYD`!P``,_.+F``$
M```S\XN:``4``#/SBT40,]N+510SQC/6)?S\_/R!XL_/S\^*V(K,P<H$BZL`
M````BMHS_8NI``(``#/]BL[!Z!"+JP`!```S_8K<P>H0BZD``P``,_V+;"08
MBLXE_P```('B_P```(N;``8``#/[BYD`!P``,_N+F``$```S^XN:``4``#/[
MBT48,]N+51PSQS/7)?S\_/R!XL_/S\^*V(K,P<H$BZL`````BMHS]8NI``(`
M`#/UBL[!Z!"+JP`!```S]8K<P>H0BZD``P``,_6+;"08BLXE_P```('B_P``
M`(N;``8``#/SBYD`!P``,_.+F``$```S\XN:``4``#/SBT4@,]N+520SQC/6
M)?S\_/R!XL_/S\^*V(K,P<H$BZL`````BMHS_8NI``(``#/]BL[!Z!"+JP`!
M```S_8K<P>H0BZD``P``,_V+;"08BLXE_P```('B_P```(N;``8``#/[BYD`
M!P``,_N+F``$```S^XN:``4``#/[BT4H,]N+52PSQS/7)?S\_/R!XL_/S\^*
MV(K,P<H$BZL`````BMHS]8NI``(``#/UBL[!Z!"+JP`!```S]8K<P>H0BZD`
M`P``,_6+;"08BLXE_P```('B_P```(N;``8``#/SBYD`!P``,_.+F``$```S
M\XN:``4``#/SBT4P,]N+530SQC/6)?S\_/R!XL_/S\^*V(K,P<H$BZL`````
MBMHS_8NI``(``#/]BL[!Z!"+JP`!```S_8K<P>H0BZD``P``,_V+;"08BLXE
M_P```('B_P```(N;``8``#/[BYD`!P``,_N+F``$```S^XN:``4``#/[BT4X
M,]N+53PSQS/7)?S\_/R!XL_/S\^*V(K,P<H$BZL`````BMHS]8NI``(``#/U
MBL[!Z!"+JP`!```S]8K<P>H0BZD``P``,_6+;"08BLXE_P```('B_P```(N;
M``8``#/SBYD`!P``,_.+F``$```S\XN:``4``#/SBT5`,]N+540SQC/6)?S\
M_/R!XL_/S\^*V(K,P<H$BZL`````BMHS_8NI``(``#/]BL[!Z!"+JP`!```S
M_8K<P>H0BZD``P``,_V+;"08BLXE_P```('B_P```(N;``8``#/[BYD`!P``
M,_N+F``$```S^XN:``4``#/[BT5(,]N+54PSQS/7)?S\_/R!XL_/S\^*V(K,
MP<H$BZL`````BMHS]8NI``(``#/UBL[!Z!"+JP`!```S]8K<P>H0BZD``P``
M,_6+;"08BLXE_P```('B_P```(N;``8``#/SBYD`!P``,_.+F``$```S\XN:
M``4``#/SBT50,]N+550SQC/6)?S\_/R!XL_/S\^*V(K,P<H$BZL`````BMHS
M_8NI``(``#/]BL[!Z!"+JP`!```S_8K<P>H0BZD``P``,_V+;"08BLXE_P``
M`('B_P```(N;``8``#/[BYD`!P``,_N+F``$```S^XN:``4``#/[BT58,]N+
M55PSQS/7)?S\_/R!XL_/S\^*V(K,P<H$BZL`````BMHS]8NI``(``#/UBL[!
MZ!"+JP`!```S]8K<P>H0BZD``P``,_6+;"08BLXE_P```('B_P```(N;``8`
M`#/SBYD`!P``,_.+F``$```S\XN:``4``#/SBT5@,]N+560SQC/6)?S\_/R!
MXL_/S\^*V(K,P<H$BZL`````BMHS_8NI``(``#/]BL[!Z!"+JP`!```S_8K<
MP>H0BZD``P``,_V+;"08BLXE_P```('B_P```(N;``8``#/[BYD`!P``,_N+
MF``$```S^XN:``4``#/[BT5H,]N+56PSQS/7)?S\_/R!XL_/S\^*V(K,P<H$
MBZL`````BMHS]8NI``(``#/UBL[!Z!"+JP`!```S]8K<P>H0BZD``P``,_6+
M;"08BLXE_P```('B_P```(N;``8``#/SBYD`!P``,_.+F``$```S\XN:``4`
M`#/SBT5P,]N+570SQC/6)?S\_/R!XL_/S\^*V(K,P<H$BZL`````BMHS_8NI
M``(``#/]BL[!Z!"+JP`!```S_8K<P>H0BZD``P``,_V+;"08BLXE_P```('B
M_P```(N;``8``#/[BYD`!P``,_N+F``$```S^XN:``4``#/[BT5X,]N+57PS
MQS/7)?S\_/R!XL_/S\^*V(K,P<H$BZL`````BMHS]8NI``(``#/UBL[!Z!"+
MJP`!```S]8K<P>H0BZD``P``,_6+;"08BLXE_P```('B_P```(N;``8``#/S
MBYD`!P``,_.+F``$```S\XN:``4``#/SZ;`'``"+17@SVXM5?#/&,]8E_/S\
M_('BS\_/SXK8BLS!R@2+JP````"*VC/]BZD``@``,_V*SL'H$(NK``$``#/]
MBMS!ZA"+J0`#```S_8ML)!B*SB7_````@>+_````BYL`!@``,_N+F0`'```S
M^XN8``0``#/[BYH`!0``,_N+17`SVXM5=#/',]<E_/S\_('BS\_/SXK8BLS!
MR@2+JP````"*VC/UBZD``@``,_6*SL'H$(NK``$``#/UBMS!ZA"+J0`#```S
M]8ML)!B*SB7_````@>+_````BYL`!@``,_.+F0`'```S\XN8``0``#/SBYH`
M!0``,_.+16@SVXM5;#/&,]8E_/S\_('BS\_/SXK8BLS!R@2+JP````"*VC/]
MBZD``@``,_V*SL'H$(NK``$``#/]BMS!ZA"+J0`#```S_8ML)!B*SB7_````
M@>+_````BYL`!@``,_N+F0`'```S^XN8``0``#/[BYH`!0``,_N+16`SVXM5
M9#/',]<E_/S\_('BS\_/SXK8BLS!R@2+JP````"*VC/UBZD``@``,_6*SL'H
M$(NK``$``#/UBMS!ZA"+J0`#```S]8ML)!B*SB7_````@>+_````BYL`!@``
M,_.+F0`'```S\XN8``0``#/SBYH`!0``,_.+15@SVXM57#/&,]8E_/S\_('B
MS\_/SXK8BLS!R@2+JP````"*VC/]BZD``@``,_V*SL'H$(NK``$``#/]BMS!
MZA"+J0`#```S_8ML)!B*SB7_````@>+_````BYL`!@``,_N+F0`'```S^XN8
M``0``#/[BYH`!0``,_N+15`SVXM55#/',]<E_/S\_('BS\_/SXK8BLS!R@2+
MJP````"*VC/UBZD``@``,_6*SL'H$(NK``$``#/UBMS!ZA"+J0`#```S]8ML
M)!B*SB7_````@>+_````BYL`!@``,_.+F0`'```S\XN8``0``#/SBYH`!0``
M,_.+14@SVXM53#/&,]8E_/S\_('BS\_/SXK8BLS!R@2+JP````"*VC/]BZD`
M`@``,_V*SL'H$(NK``$``#/]BMS!ZA"+J0`#```S_8ML)!B*SB7_````@>+_
M````BYL`!@``,_N+F0`'```S^XN8``0``#/[BYH`!0``,_N+14`SVXM51#/'
M,]<E_/S\_('BS\_/SXK8BLS!R@2+JP````"*VC/UBZD``@``,_6*SL'H$(NK
M``$``#/UBMS!ZA"+J0`#```S]8ML)!B*SB7_````@>+_````BYL`!@``,_.+
MF0`'```S\XN8``0``#/SBYH`!0``,_.+13@SVXM5/#/&,]8E_/S\_('BS\_/
MSXK8BLS!R@2+JP````"*VC/]BZD``@``,_V*SL'H$(NK``$``#/]BMS!ZA"+
MJ0`#```S_8ML)!B*SB7_````@>+_````BYL`!@``,_N+F0`'```S^XN8``0`
M`#/[BYH`!0``,_N+13`SVXM5-#/',]<E_/S\_('BS\_/SXK8BLS!R@2+JP``
M``"*VC/UBZD``@``,_6*SL'H$(NK``$``#/UBMS!ZA"+J0`#```S]8ML)!B*
MSB7_````@>+_````BYL`!@``,_.+F0`'```S\XN8``0``#/SBYH`!0``,_.+
M12@SVXM5+#/&,]8E_/S\_('BS\_/SXK8BLS!R@2+JP````"*VC/]BZD``@``
M,_V*SL'H$(NK``$``#/]BMS!ZA"+J0`#```S_8ML)!B*SB7_````@>+_````
MBYL`!@``,_N+F0`'```S^XN8``0``#/[BYH`!0``,_N+12`SVXM5)#/',]<E
M_/S\_('BS\_/SXK8BLS!R@2+JP````"*VC/UBZD``@``,_6*SL'H$(NK``$`
M`#/UBMS!ZA"+J0`#```S]8ML)!B*SB7_````@>+_````BYL`!@``,_.+F0`'
M```S\XN8``0``#/SBYH`!0``,_.+11@SVXM5'#/&,]8E_/S\_('BS\_/SXK8
MBLS!R@2+JP````"*VC/]BZD``@``,_V*SL'H$(NK``$``#/]BMS!ZA"+J0`#
M```S_8ML)!B*SB7_````@>+_````BYL`!@``,_N+F0`'```S^XN8``0``#/[
MBYH`!0``,_N+11`SVXM5%#/',]<E_/S\_('BS\_/SXK8BLS!R@2+JP````"*
MVC/UBZD``@``,_6*SL'H$(NK``$``#/UBMS!ZA"+J0`#```S]8ML)!B*SB7_
M````@>+_````BYL`!@``,_.+F0`'```S\XN8``0``#/SBYH`!0``,_.+10@S
MVXM5##/&,]8E_/S\_('BS\_/SXK8BLS!R@2+JP````"*VC/]BZD``@``,_V*
MSL'H$(NK``$``#/]BMS!ZA"+J0`#```S_8ML)!B*SB7_````@>+_````BYL`
M!@``,_N+F0`'```S^XN8``0``#/[BYH`!0``,_N+10`SVXM5!#/',]<E_/S\
M_('BS\_/SXK8BLS!R@2+JP````"*VC/UBZD``@``,_6*SL'H$(NK``$``#/U
MBMS!ZA"+J0`#```S]8ML)!B*SB7_````@>+_````BYL`!@``,_.+F0`'```S
M\XN8``0``#/SBYH`!0``,_.+5"04T<Z+QS/^@>>JJJJJ,\<S]\'`%XOX,\8E
M_`/\`S/X,_#!QPJ+QS/^@><S,S,S,\<S]\'&$HO^,_"!Y@\`\/\S_C/&P<<,
MB_<S^('G\/#P\#/W,\?!R`2)`HER!%]>6UW#55-65XM$)!0SR8LPBUPD','&
M`XMX!,''`X/[`(ML)!@/A+4'``"+10`SVXM5!#/&,]8E_/S\_('BS\_/SXK8
MBLS!R@2+JP````"*VC/]BZD``@``,_V*SL'H$(NK``$``#/]BMS!ZA"+J0`#
M```S_8ML)!B*SB7_````@>+_````BYL`!@``,_N+F0`'```S^XN8``0``#/[
MBYH`!0``,_N+10@SVXM5##/',]<E_/S\_('BS\_/SXK8BLS!R@2+JP````"*
MVC/UBZD``@``,_6*SL'H$(NK``$``#/UBMS!ZA"+J0`#```S]8ML)!B*SB7_
M````@>+_````BYL`!@``,_.+F0`'```S\XN8``0``#/SBYH`!0``,_.+11`S
MVXM5%#/&,]8E_/S\_('BS\_/SXK8BLS!R@2+JP````"*VC/]BZD``@``,_V*
MSL'H$(NK``$``#/]BMS!ZA"+J0`#```S_8ML)!B*SB7_````@>+_````BYL`
M!@``,_N+F0`'```S^XN8``0``#/[BYH`!0``,_N+11@SVXM5'#/',]<E_/S\
M_('BS\_/SXK8BLS!R@2+JP````"*VC/UBZD``@``,_6*SL'H$(NK``$``#/U
MBMS!ZA"+J0`#```S]8ML)!B*SB7_````@>+_````BYL`!@``,_.+F0`'```S
M\XN8``0``#/SBYH`!0``,_.+12`SVXM5)#/&,]8E_/S\_('BS\_/SXK8BLS!
MR@2+JP````"*VC/]BZD``@``,_V*SL'H$(NK``$``#/]BMS!ZA"+J0`#```S
M_8ML)!B*SB7_````@>+_````BYL`!@``,_N+F0`'```S^XN8``0``#/[BYH`
M!0``,_N+12@SVXM5+#/',]<E_/S\_('BS\_/SXK8BLS!R@2+JP````"*VC/U
MBZD``@``,_6*SL'H$(NK``$``#/UBMS!ZA"+J0`#```S]8ML)!B*SB7_````
M@>+_````BYL`!@``,_.+F0`'```S\XN8``0``#/SBYH`!0``,_.+13`SVXM5
M-#/&,]8E_/S\_('BS\_/SXK8BLS!R@2+JP````"*VC/]BZD``@``,_V*SL'H
M$(NK``$``#/]BMS!ZA"+J0`#```S_8ML)!B*SB7_````@>+_````BYL`!@``
M,_N+F0`'```S^XN8``0``#/[BYH`!0``,_N+13@SVXM5/#/',]<E_/S\_('B
MS\_/SXK8BLS!R@2+JP````"*VC/UBZD``@``,_6*SL'H$(NK``$``#/UBMS!
MZA"+J0`#```S]8ML)!B*SB7_````@>+_````BYL`!@``,_.+F0`'```S\XN8
M``0``#/SBYH`!0``,_.+14`SVXM51#/&,]8E_/S\_('BS\_/SXK8BLS!R@2+
MJP````"*VC/]BZD``@``,_V*SL'H$(NK``$``#/]BMS!ZA"+J0`#```S_8ML
M)!B*SB7_````@>+_````BYL`!@``,_N+F0`'```S^XN8``0``#/[BYH`!0``
M,_N+14@SVXM53#/',]<E_/S\_('BS\_/SXK8BLS!R@2+JP````"*VC/UBZD`
M`@``,_6*SL'H$(NK``$``#/UBMS!ZA"+J0`#```S]8ML)!B*SB7_````@>+_
M````BYL`!@``,_.+F0`'```S\XN8``0``#/SBYH`!0``,_.+15`SVXM55#/&
M,]8E_/S\_('BS\_/SXK8BLS!R@2+JP````"*VC/]BZD``@``,_V*SL'H$(NK
M``$``#/]BMS!ZA"+J0`#```S_8ML)!B*SB7_````@>+_````BYL`!@``,_N+
MF0`'```S^XN8``0``#/[BYH`!0``,_N+15@SVXM57#/',]<E_/S\_('BS\_/
MSXK8BLS!R@2+JP````"*VC/UBZD``@``,_6*SL'H$(NK``$``#/UBMS!ZA"+
MJ0`#```S]8ML)!B*SB7_````@>+_````BYL`!@``,_.+F0`'```S\XN8``0`
M`#/SBYH`!0``,_.+16`SVXM59#/&,]8E_/S\_('BS\_/SXK8BLS!R@2+JP``
M``"*VC/]BZD``@``,_V*SL'H$(NK``$``#/]BMS!ZA"+J0`#```S_8ML)!B*
MSB7_````@>+_````BYL`!@``,_N+F0`'```S^XN8``0``#/[BYH`!0``,_N+
M16@SVXM5;#/',]<E_/S\_('BS\_/SXK8BLS!R@2+JP````"*VC/UBZD``@``
M,_6*SL'H$(NK``$``#/UBMS!ZA"+J0`#```S]8ML)!B*SB7_````@>+_````
MBYL`!@``,_.+F0`'```S\XN8``0``#/SBYH`!0``,_.+17`SVXM5=#/&,]8E
M_/S\_('BS\_/SXK8BLS!R@2+JP````"*VC/]BZD``@``,_V*SL'H$(NK``$`
M`#/]BMS!ZA"+J0`#```S_8ML)!B*SB7_````@>+_````BYL`!@``,_N+F0`'
M```S^XN8``0``#/[BYH`!0``,_N+17@SVXM5?#/',]<E_/S\_('BS\_/SXK8
MBLS!R@2+JP````"*VC/UBZD``@``,_6*SL'H$(NK``$``#/UBMS!ZA"+J0`#
M```S]8ML)!B*SB7_````@>+_````BYL`!@``,_.+F0`'```S\XN8``0``#/S
MBYH`!0``,_/IL`<``(M%>#/;BU5\,\8SUB7\_/S\@>+/S\_/BMB*S,'*!(NK
M`````(K:,_V+J0`"```S_8K.P>@0BZL``0``,_V*W,'J$(NI``,``#/]BVPD
M&(K.)?\```"!XO\```"+FP`&```S^XN9``<``#/[BY@`!```,_N+F@`%```S
M^XM%<#/;BU5T,\<SUR7\_/S\@>+/S\_/BMB*S,'*!(NK`````(K:,_6+J0`"
M```S]8K.P>@0BZL``0``,_6*W,'J$(NI``,``#/UBVPD&(K.)?\```"!XO\`
M``"+FP`&```S\XN9``<``#/SBY@`!```,_.+F@`%```S\XM%:#/;BU5L,\8S
MUB7\_/S\@>+/S\_/BMB*S,'*!(NK`````(K:,_V+J0`"```S_8K.P>@0BZL`
M`0``,_V*W,'J$(NI``,``#/]BVPD&(K.)?\```"!XO\```"+FP`&```S^XN9
M``<``#/[BY@`!```,_N+F@`%```S^XM%8#/;BU5D,\<SUR7\_/S\@>+/S\_/
MBMB*S,'*!(NK`````(K:,_6+J0`"```S]8K.P>@0BZL``0``,_6*W,'J$(NI
M``,``#/UBVPD&(K.)?\```"!XO\```"+FP`&```S\XN9``<``#/SBY@`!```
M,_.+F@`%```S\XM%6#/;BU5<,\8SUB7\_/S\@>+/S\_/BMB*S,'*!(NK````
M`(K:,_V+J0`"```S_8K.P>@0BZL``0``,_V*W,'J$(NI``,``#/]BVPD&(K.
M)?\```"!XO\```"+FP`&```S^XN9``<``#/[BY@`!```,_N+F@`%```S^XM%
M4#/;BU54,\<SUR7\_/S\@>+/S\_/BMB*S,'*!(NK`````(K:,_6+J0`"```S
M]8K.P>@0BZL``0``,_6*W,'J$(NI``,``#/UBVPD&(K.)?\```"!XO\```"+
MFP`&```S\XN9``<``#/SBY@`!```,_.+F@`%```S\XM%2#/;BU5,,\8SUB7\
M_/S\@>+/S\_/BMB*S,'*!(NK`````(K:,_V+J0`"```S_8K.P>@0BZL``0``
M,_V*W,'J$(NI``,``#/]BVPD&(K.)?\```"!XO\```"+FP`&```S^XN9``<`
M`#/[BY@`!```,_N+F@`%```S^XM%0#/;BU5$,\<SUR7\_/S\@>+/S\_/BMB*
MS,'*!(NK`````(K:,_6+J0`"```S]8K.P>@0BZL``0``,_6*W,'J$(NI``,`
M`#/UBVPD&(K.)?\```"!XO\```"+FP`&```S\XN9``<``#/SBY@`!```,_.+
MF@`%```S\XM%.#/;BU4\,\8SUB7\_/S\@>+/S\_/BMB*S,'*!(NK`````(K:
M,_V+J0`"```S_8K.P>@0BZL``0``,_V*W,'J$(NI``,``#/]BVPD&(K.)?\`
M``"!XO\```"+FP`&```S^XN9``<``#/[BY@`!```,_N+F@`%```S^XM%,#/;
MBU4T,\<SUR7\_/S\@>+/S\_/BMB*S,'*!(NK`````(K:,_6+J0`"```S]8K.
MP>@0BZL``0``,_6*W,'J$(NI``,``#/UBVPD&(K.)?\```"!XO\```"+FP`&
M```S\XN9``<``#/SBY@`!```,_.+F@`%```S\XM%*#/;BU4L,\8SUB7\_/S\
M@>+/S\_/BMB*S,'*!(NK`````(K:,_V+J0`"```S_8K.P>@0BZL``0``,_V*
MW,'J$(NI``,``#/]BVPD&(K.)?\```"!XO\```"+FP`&```S^XN9``<``#/[
MBY@`!```,_N+F@`%```S^XM%(#/;BU4D,\<SUR7\_/S\@>+/S\_/BMB*S,'*
M!(NK`````(K:,_6+J0`"```S]8K.P>@0BZL``0``,_6*W,'J$(NI``,``#/U
MBVPD&(K.)?\```"!XO\```"+FP`&```S\XN9``<``#/SBY@`!```,_.+F@`%
M```S\XM%&#/;BU4<,\8SUB7\_/S\@>+/S\_/BMB*S,'*!(NK`````(K:,_V+
MJ0`"```S_8K.P>@0BZL``0``,_V*W,'J$(NI``,``#/]BVPD&(K.)?\```"!
MXO\```"+FP`&```S^XN9``<``#/[BY@`!```,_N+F@`%```S^XM%$#/;BU44
M,\<SUR7\_/S\@>+/S\_/BMB*S,'*!(NK`````(K:,_6+J0`"```S]8K.P>@0
MBZL``0``,_6*W,'J$(NI``,``#/UBVPD&(K.)?\```"!XO\```"+FP`&```S
M\XN9``<``#/SBY@`!```,_.+F@`%```S\XM%"#/;BU4,,\8SUB7\_/S\@>+/
MS\_/BMB*S,'*!(NK`````(K:,_V+J0`"```S_8K.P>@0BZL``0``,_V*W,'J
M$(NI``,``#/]BVPD&(K.)?\```"!XO\```"+FP`&```S^XN9``<``#/[BY@`
M!```,_N+F@`%```S^XM%`#/;BU4$,\<SUR7\_/S\@>+/S\_/BMB*S,'*!(NK
M`````(K:,_6+J0`"```S]8K.P>@0BZL``0``,_6*W,'J$(NI``,``#/UBVPD
M&(K.)?\```"!XO\```"+FP`&```S\XN9``<``#/SBY@`!```,_.+F@`%```S
M\\'/`XM$)!3!S@.).(EP!%]>6UW#55-65XM<)!2+.XMS!,''!(O7,_Z!Y_#P
M\/`SUS/WP<84B_XS\H'F#P#P_S/^,];!QPZ+]S/Z@><S,S,S,_<SU\'"%HOZ
M,]:!XOP#_`,S^C/RP<<)B]<S_H'GJJJJJC/7,_?!R@/!S@*)<P2+1"08B1.+
M?"0<BW0D(&H!4%/HW^___VH`5U/HUN___VH!5E/HS>___XL[@\0DBW,$P<8"
MP<<#B\<S_H'GJJJJJC/',_?!P!>+^#/&)?P#_`,S^#/PP<<*B\<S_H'G,S,S
M,S/',_?!QA*+_C/P@>8/`/#_,_XSQL''#(OW,_B!Y_#P\/`S]S/'P<@$B0.)
M<P1?7EM=PU535E>+7"04BSN+<P3!QP2+US/^@>?P\/#P,]<S]\'&%(O^,_*!
MY@\`\/\S_C/6P<<.B_<S^H'G,S,S,S/W,]?!PA:+^C/6@>+\`_P#,_HS\L''
M"8O7,_Z!YZJJJJHSUS/WP<H#P<X"B7,$BW0D&(D3BWPD'(M$)"!J`%!3Z-_N
M__]J`5=3Z-;N__]J`%93Z,WN__^+.X/$)(MS!,'&`L''`XO',_Z!YZJJJJHS
MQS/WP<`7B_@SQB7\`_P#,_@S\,''"HO',_Z!YS,S,S,SQS/WP<82B_XS\('F
M#P#P_S/^,\;!QPR+]S/X@>?P\/#P,_<SQ\'(!(D#B7,$7UY;7<.4````!P``
M``8`G@````<````&`*L````'````!@"X````!P````8`T0````<````&`-D`
M```'````!@#A````!P````8`Z0````<````&``\!```'````!@`9`0``!P``
M``8`)@$```<````&`#,!```'````!@!,`0``!P````8`5`$```<````&`%P!
M```'````!@!D`0``!P````8`B@$```<````&`)0!```'````!@"A`0``!P``
M``8`K@$```<````&`,<!```'````!@#/`0``!P````8`UP$```<````&`-\!
M```'````!@`%`@``!P````8`#P(```<````&`!P"```'````!@`I`@``!P``
M``8`0@(```<````&`$H"```'````!@!2`@``!P````8`6@(```<````&`(`"
M```'````!@"*`@``!P````8`EP(```<````&`*0"```'````!@"]`@``!P``
M``8`Q0(```<````&`,T"```'````!@#5`@``!P````8`^P(```<````&``4#
M```'````!@`2`P``!P````8`'P,```<````&`#@#```'````!@!``P``!P``
M``8`2`,```<````&`%`#```'````!@!V`P``!P````8`@`,```<````&`(T#
M```'````!@":`P``!P````8`LP,```<````&`+L#```'````!@##`P``!P``
M``8`RP,```<````&`/$#```'````!@#[`P``!P````8`"`0```<````&`!4$
M```'````!@`N!```!P````8`-@0```<````&`#X$```'````!@!&!```!P``
M``8`;`0```<````&`'8$```'````!@"#!```!P````8`D`0```<````&`*D$
M```'````!@"Q!```!P````8`N00```<````&`,$$```'````!@#G!```!P``
M``8`\00```<````&`/X$```'````!@`+!0``!P````8`)`4```<````&`"P%
M```'````!@`T!0``!P````8`/`4```<````&`&(%```'````!@!L!0``!P``
M``8`>04```<````&`(8%```'````!@"?!0``!P````8`IP4```<````&`*\%
M```'````!@"W!0``!P````8`W04```<````&`.<%```'````!@#T!0``!P``
M``8``08```<````&`!H&```'````!@`B!@``!P````8`*@8```<````&`#(&
M```'````!@!8!@``!P````8`8@8```<````&`&\&```'````!@!\!@``!P``
M``8`E08```<````&`)T&```'````!@"E!@``!P````8`K08```<````&`-,&
M```'````!@#=!@``!P````8`Z@8```<````&`/<&```'````!@`0!P``!P``
M``8`&`<```<````&`"`'```'````!@`H!P``!P````8`3@<```<````&`%@'
M```'````!@!E!P``!P````8`<@<```<````&`(L'```'````!@"3!P``!P``
M``8`FP<```<````&`*,'```'````!@#)!P``!P````8`TP<```<````&`.`'
M```'````!@#M!P``!P````8`!@@```<````&``X(```'````!@`6"```!P``
M``8`'@@```<````&`$D(```'````!@!3"```!P````8`8`@```<````&`&T(
M```'````!@"&"```!P````8`C@@```<````&`)8(```'````!@">"```!P``
M``8`Q`@```<````&`,X(```'````!@#;"```!P````8`Z`@```<````&``$)
M```'````!@`)"0``!P````8`$0D```<````&`!D)```'````!@`_"0``!P``
M``8`20D```<````&`%8)```'````!@!C"0``!P````8`?`D```<````&`(0)
M```'````!@","0``!P````8`E`D```<````&`+H)```'````!@#$"0``!P``
M``8`T0D```<````&`-X)```'````!@#W"0``!P````8`_PD```<````&``<*
M```'````!@`/"@``!P````8`-0H```<````&`#\*```'````!@!,"@``!P``
M``8`60H```<````&`'(*```'````!@!Z"@``!P````8`@@H```<````&`(H*
M```'````!@"P"@``!P````8`N@H```<````&`,<*```'````!@#4"@``!P``
M``8`[0H```<````&`/4*```'````!@#]"@``!P````8`!0L```<````&`"L+
M```'````!@`U"P``!P````8`0@L```<````&`$\+```'````!@!H"P``!P``
M``8`<`L```<````&`'@+```'````!@"`"P``!P````8`I@L```<````&`+`+
M```'````!@"]"P``!P````8`R@L```<````&`.,+```'````!@#K"P``!P``
M``8`\PL```<````&`/L+```'````!@`A#```!P````8`*PP```<````&`#@,
M```'````!@!%#```!P````8`7@P```<````&`&8,```'````!@!N#```!P``
M``8`=@P```<````&`)P,```'````!@"F#```!P````8`LPP```<````&`,`,
M```'````!@#9#```!P````8`X0P```<````&`.D,```'````!@#Q#```!P``
M``8`%PT```<````&`"$-```'````!@`N#0``!P````8`.PT```<````&`%0-
M```'````!@!<#0``!P````8`9`T```<````&`&P-```'````!@"2#0``!P``
M``8`G`T```<````&`*D-```'````!@"V#0``!P````8`SPT```<````&`-<-
M```'````!@#?#0``!P````8`YPT```<````&``T.```'````!@`7#@``!P``
M``8`)`X```<````&`#$.```'````!@!*#@``!P````8`4@X```<````&`%H.
M```'````!@!B#@``!P````8`B`X```<````&`)(.```'````!@"?#@``!P``
M``8`K`X```<````&`,4.```'````!@#-#@``!P````8`U0X```<````&`-T.
M```'````!@`##P``!P````8`#0\```<````&`!H/```'````!@`G#P``!P``
M``8`0`\```<````&`$@/```'````!@!0#P``!P````8`6`\```<````&`'X/
M```'````!@"(#P``!P````8`E0\```<````&`*(/```'````!@"[#P``!P``
M``8`PP\```<````&`,L/```'````!@#3#P``!P````8`@Q````<````&`(T0
M```'````!@":$```!P````8`IQ````<````&`,`0```'````!@#($```!P``
M``8`T!````<````&`-@0```'````!@#^$```!P````8`"!$```<````&`!41
M```'````!@`B$0``!P````8`.Q$```<````&`$,1```'````!@!+$0``!P``
M``8`4Q$```<````&`'D1```'````!@"#$0``!P````8`D!$```<````&`)T1
M```'````!@"V$0``!P````8`OA$```<````&`,81```'````!@#.$0``!P``
M``8`]!$```<````&`/X1```'````!@`+$@``!P````8`&!(```<````&`#$2
M```'````!@`Y$@``!P````8`01(```<````&`$D2```'````!@!O$@``!P``
M``8`>1(```<````&`(82```'````!@"3$@``!P````8`K!(```<````&`+02
M```'````!@"\$@``!P````8`Q!(```<````&`.H2```'````!@#T$@``!P``
M``8``1,```<````&``X3```'````!@`G$P``!P````8`+Q,```<````&`#<3
M```'````!@`_$P``!P````8`91,```<````&`&\3```'````!@!\$P``!P``
M``8`B1,```<````&`*(3```'````!@"J$P``!P````8`LA,```<````&`+H3
M```'````!@#@$P``!P````8`ZA,```<````&`/<3```'````!@`$%```!P``
M``8`'10```<````&`"44```'````!@`M%```!P````8`-10```<````&`%L4
M```'````!@!E%```!P````8`<A0```<````&`'\4```'````!@"8%```!P``
M``8`H!0```<````&`*@4```'````!@"P%```!P````8`UA0```<````&`.`4
M```'````!@#M%```!P````8`^A0```<````&`!,5```'````!@`;%0``!P``
M``8`(Q4```<````&`"L5```'````!@!1%0``!P````8`6Q4```<````&`&@5
M```'````!@!U%0``!P````8`CA4```<````&`)85```'````!@">%0``!P``
M``8`IA4```<````&`,P5```'````!@#6%0``!P````8`XQ4```<````&`/`5
M```'````!@`)%@``!P````8`$18```<````&`!D6```'````!@`A%@``!P``
M``8`1Q8```<````&`%$6```'````!@!>%@``!P````8`:Q8```<````&`(06
M```'````!@",%@``!P````8`E!8```<````&`)P6```'````!@#"%@``!P``
M``8`S!8```<````&`-D6```'````!@#F%@``!P````8`_Q8```<````&``<7
M```'````!@`/%P``!P````8`%Q<```<````&`#T7```'````!@!'%P``!P``
M``8`5!<```<````&`&$7```'````!@!Z%P``!P````8`@A<```<````&`(H7
M```'````!@"2%P``!P````8`N!<```<````&`,(7```'````!@#/%P``!P``
M``8`W!<```<````&`/47```'````!@#]%P``!P````8`!1@```<````&``T8
M```'````!@`X&```!P````8`0A@```<````&`$\8```'````!@!<&```!P``
M``8`=1@```<````&`'T8```'````!@"%&```!P````8`C1@```<````&`+,8
M```'````!@"]&```!P````8`RA@```<````&`-<8```'````!@#P&```!P``
M``8`^!@```<````&```9```'````!@`(&0``!P````8`+AD```<````&`#@9
M```'````!@!%&0``!P````8`4AD```<````&`&L9```'````!@!S&0``!P``
M``8`>QD```<````&`(,9```'````!@"I&0``!P````8`LQD```<````&`,`9
M```'````!@#-&0``!P````8`YAD```<````&`.X9```'````!@#V&0``!P``
M``8`_AD```<````&`"0:```'````!@`N&@``!P````8`.QH```<````&`$@:
M```'````!@!A&@``!P````8`:1H```<````&`'$:```'````!@!Y&@``!P``
M``8`GQH```<````&`*D:```'````!@"V&@``!P````8`PQH```<````&`-P:
M```'````!@#D&@``!P````8`[!H```<````&`/0:```'````!@`:&P``!P``
M``8`)!L```<````&`#$;```'````!@`^&P``!P````8`5QL```<````&`%\;
M```'````!@!G&P``!P````8`;QL```<````&`)4;```'````!@"?&P``!P``
M``8`K!L```<````&`+D;```'````!@#2&P``!P````8`VAL```<````&`.(;
M```'````!@#J&P``!P````8`$!P```<````&`!H<```'````!@`G'```!P``
M``8`-!P```<````&`$T<```'````!@!5'```!P````8`71P```<````&`&4<
M```'````!@"+'```!P````8`E1P```<````&`*(<```'````!@"O'```!P``
M``8`R!P```<````&`-`<```'````!@#8'```!P````8`X!P```<````&``8=
M```'````!@`0'0``!P````8`'1T```<````&`"H=```'````!@!#'0``!P``
M``8`2QT```<````&`%,=```'````!@!;'0``!P````8`@1T```<````&`(L=
M```'````!@"8'0``!P````8`I1T```<````&`+X=```'````!@#&'0``!P``
M``8`SAT```<````&`-8=```'````!@#\'0``!P````8`!AX```<````&`!,>
M```'````!@`@'@``!P````8`.1X```<````&`$$>```'````!@!)'@``!P``
M``8`41X```<````&`'<>```'````!@"!'@``!P````8`CAX```<````&`)L>
M```'````!@"T'@``!P````8`O!X```<````&`,0>```'````!@#,'@``!P``
M``8`\AX```<````&`/P>```'````!@`)'P``!P````8`%A\```<````&`"\?
M```'````!@`W'P``!P````8`/Q\```<````&`$<?```'````!@!M'P``!P``
M``8`=Q\```<````&`(0?```'````!@"1'P``!P````8`JA\```<````&`+(?
M```'````!@"Z'P``!P````8`PA\```<````&`"YF:6QE`````````/[_``!G
M`BY<8W)Y<'1O7&1E<UQA<VU<9"UW:6XS,BYA<VT``````````"YT97AT````
M``````$````#`=PA`````@```````````````"YD871A``````````(````#
M`0`````````````````````````````$```````````````"```````1````
M``````$`(``"```````>````/1````$`(``"```````L````W!\```$`(``"
M```````Z````W"````$`(``"`$@```!?9&5S7U-0=')A;G,`7V1E<U]E;F-R
M>7!T`%]D97-?96YC<GEP=#(`7V1E<U]E;F-R>7!T,P!?9&5S7V1E8W)Y<'0S
!````
`
end

View File

@ -1,308 +0,0 @@
#!/usr/local/bin/perl
#
# The inner loop instruction sequence and the IP/FP modifications are from
# Svend Olaf Mikkelsen <svolaf@inet.uni-c.dk>
#
$prog="des-som2.pl";
# base code is in microsft
# op dest, source
# format.
#
require "desboth.pl";
if ( ($ARGV[0] eq "elf"))
{ require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "a.out"))
{ $aout=1; require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "sol"))
{ $sol=1; require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "cpp"))
{ $cpp=1; require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "win32"))
{ require "x86ms.pl"; }
else
{
print STDERR <<"EOF";
Pick one target type from
elf - linux, FreeBSD etc
a.out - old linux
sol - x86 solaris
cpp - format so x86unix.cpp can be used
win32 - Windows 95/Windows NT
EOF
exit(1);
}
&comment("Don't even think of reading this code");
&comment("It was automatically generated by $prog");
&comment("Which is a perl program used to generate the x86 assember for");
&comment("any of elf, a.out, Win32, or Solaris");
&comment("It can be found in SSLeay 0.6.5+ or in libdes 3.26+");
&comment("eric <eay\@cryptsoft.com>");
&comment("The inner loop instruction sequence and the IP/FP modifications");
&comment("are from Svend Olaf Mikkelsen <svolaf\@inet.uni-c.dk>");
&comment("");
&file("dx86xxxx");
$L="edi";
$R="esi";
&des_encrypt("des_encrypt",1);
&des_encrypt("des_encrypt2",0);
&des_encrypt3("des_encrypt3",1);
&des_encrypt3("des_decrypt3",0);
&file_end();
sub des_encrypt
{
local($name,$do_ip)=@_;
&function_begin($name,3,"EXTRN _des_SPtrans:DWORD");
&comment("");
&comment("Load the 2 words");
&mov("eax",&wparam(0));
&mov($R,&DWP(0,"eax","",0));
&mov($L,&DWP(4,"eax","",0));
if ($do_ip)
{
&comment("");
&comment("IP");
&IP_new($R,$L,"eax",3);
# &comment("");
# &comment("fixup rotate");
# &rotl($R,3);
# &rotl($L,3);
}
else
{
&comment("");
&comment("fixup rotate");
&rotl($R,3);
&rotl($L,3);
}
&comment("");
&comment("load counter, key_schedule and enc flag");
# encrypting part
$ks="ebp";
# &xor( "ebx", "ebx" );
&mov("eax",&wparam(2)); # get encrypt flag
&xor( "ecx", "ecx" );
&cmp("eax","0");
&mov( $ks, &wparam(1) );
&je(&label("start_decrypt"));
for ($i=0; $i<16; $i+=2)
{
&comment("");
&comment("Round $i");
&D_ENCRYPT($i,$L,$R,$i*2,$ks,"des_SPtrans","eax","ebx","ecx","edx");
&comment("");
&comment("Round ".sprintf("%d",$i+1));
&D_ENCRYPT($i+1,$R,$L,($i+1)*2,$ks,"des_SPtrans","eax","ebx","ecx","edx");
}
&jmp(&label("end"));
&set_label("start_decrypt");
for ($i=15; $i>0; $i-=2)
{
&comment("");
&comment("Round $i");
&D_ENCRYPT(15-$i,$L,$R,$i*2,$ks,"des_SPtrans","eax","ebx","ecx","edx");
&comment("");
&comment("Round ".sprintf("%d",$i-1));
&D_ENCRYPT(15-$i+1,$R,$L,($i-1)*2,$ks,"des_SPtrans","eax","ebx","ecx","edx");
}
&set_label("end");
if ($do_ip)
{
# &comment("");
# &comment("Fixup");
# &rotr($L,3); # r
# &rotr($R,3); # l
&comment("");
&comment("FP");
&FP_new($R,$L,"eax",3);
}
else
{
&comment("");
&comment("Fixup");
&rotr($L,3); # r
&rotr($R,3); # l
}
&mov("eax",&wparam(0));
&mov(&DWP(0,"eax","",0),$L);
&mov(&DWP(4,"eax","",0),$R);
&function_end($name);
}
sub D_ENCRYPT
{
local($r,$L,$R,$S,$ks,$desSP,$u,$tmp1,$tmp2,$t)=@_;
&mov( $u, &DWP(&n2a($S*4),$ks,"",0));
&xor( $tmp1, $tmp1);
&mov( $t, &DWP(&n2a(($S+1)*4),$ks,"",0));
&xor( $u, $R);
&xor( $t, $R);
&and( $u, "0xfcfcfcfc" );
&and( $t, "0xcfcfcfcf" );
&movb( &LB($tmp1), &LB($u) );
&movb( &LB($tmp2), &HB($u) );
&rotr( $t, 4 );
&mov( $ks, &DWP(" $desSP",$tmp1,"",0));
&movb( &LB($tmp1), &LB($t) );
&xor( $L, $ks);
&mov( $ks, &DWP("0x200+$desSP",$tmp2,"",0));
&xor( $L, $ks); ######
&movb( &LB($tmp2), &HB($t) );
&shr( $u, 16);
&mov( $ks, &DWP("0x100+$desSP",$tmp1,"",0));
&xor( $L, $ks); ######
&movb( &LB($tmp1), &HB($u) );
&shr( $t, 16);
&mov( $ks, &DWP("0x300+$desSP",$tmp2,"",0));
&xor( $L, $ks);
&mov( $ks, &DWP(24,"esp","",0)); ####
&movb( &LB($tmp2), &HB($t) );
&and( $u, "0xff" );
&and( $t, "0xff" );
&mov( $tmp1, &DWP("0x600+$desSP",$tmp1,"",0));
&xor( $L, $tmp1);
&mov( $tmp1, &DWP("0x700+$desSP",$tmp2,"",0));
&xor( $L, $tmp1);
&mov( $tmp1, &DWP("0x400+$desSP",$u,"",0));
&xor( $L, $tmp1);
&mov( $tmp1, &DWP("0x500+$desSP",$t,"",0));
&xor( $L, $tmp1);
}
sub PERM_OP
{
local($a,$b,$tt,$shift,$mask)=@_;
&mov( $tt, $a );
&shr( $tt, $shift );
&xor( $tt, $b );
&and( $tt, $mask );
&xor( $b, $tt );
&shl( $tt, $shift );
&xor( $a, $tt );
}
sub IP
{
local($l,$r,$tt)=@_;
&PERM_OP($r,$l,$tt, 4,"0x0f0f0f0f");
&PERM_OP($l,$r,$tt,16,"0x0000ffff");
&PERM_OP($r,$l,$tt, 2,"0x33333333");
&PERM_OP($l,$r,$tt, 8,"0x00ff00ff");
&PERM_OP($r,$l,$tt, 1,"0x55555555");
}
sub FP
{
local($l,$r,$tt)=@_;
&PERM_OP($l,$r,$tt, 1,"0x55555555");
&PERM_OP($r,$l,$tt, 8,"0x00ff00ff");
&PERM_OP($l,$r,$tt, 2,"0x33333333");
&PERM_OP($r,$l,$tt,16,"0x0000ffff");
&PERM_OP($l,$r,$tt, 4,"0x0f0f0f0f");
}
sub n2a
{
sprintf("%d",$_[0]);
}
# now has a side affect of rotating $a by $shift
sub R_PERM_OP
{
local($a,$b,$tt,$shift,$mask,$last)=@_;
&rotl( $a, $shift ) if ($shift != 0);
&mov( $tt, $b );
&xor( $tt, $a );
&and( $tt, $mask );
if ($last eq $b)
{
&xor( $a, $tt );
&xor( $b, $tt );
}
else
{
&xor( $b, $tt );
&xor( $a, $tt );
}
&comment("");
}
sub IP_new
{
local($l,$r,$tt,$lr)=@_;
&R_PERM_OP($l,$r,$tt, 4,"0xf0f0f0f0",$l);
&R_PERM_OP($r,$l,$tt,20,"0xfff0000f",$l);
&R_PERM_OP($r,$l,$tt,14,"0x33333333",$r);
&R_PERM_OP($l,$r,$tt,22,"0x03fc03fc",$r);
&R_PERM_OP($l,$r,$tt, 9,"0xaaaaaaaa",$r);
if ($lr != 3)
{
if (($lr-3) < 0)
{ &rotr($l, 3-$lr); }
else { &rotl($l, $lr-3); }
}
if ($lr != 2)
{
if (($lr-2) < 0)
{ &rotr($r, 2-$lr); }
else { &rotl($r, $lr-2); }
}
}
sub FP_new
{
local($r,$l,$tt,$lr)=@_;
if ($lr != 2)
{
if (($lr-2) < 0)
{ &rotl($r, 2-$lr); }
else { &rotr($r, $lr-2); }
}
if ($lr != 3)
{
if (($lr-3) < 0)
{ &rotl($l, 3-$lr); }
else { &rotr($l, $lr-3); }
}
&R_PERM_OP($l,$r,$tt, 0,"0xaaaaaaaa",$r);
&R_PERM_OP($l,$r,$tt,23,"0x03fc03fc",$r);
&R_PERM_OP($l,$r,$tt,10,"0x33333333",$l);
&R_PERM_OP($r,$l,$tt,18,"0xfff0000f",$l);
&R_PERM_OP($r,$l,$tt,12,"0xf0f0f0f0",$r);
&rotr($l , 4);
}

View File

@ -1,266 +0,0 @@
#!/usr/local/bin/perl
#
# The inner loop instruction sequence and the IP/FP modifications are from
# Svend Olaf Mikkelsen <svolaf@inet.uni-c.dk>
#
$prog="des-som3.pl";
# base code is in microsft
# op dest, source
# format.
#
require "desboth.pl";
if ( ($ARGV[0] eq "elf"))
{ require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "a.out"))
{ $aout=1; require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "sol"))
{ $sol=1; require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "cpp"))
{ $cpp=1; require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "win32"))
{ require "x86ms.pl"; }
else
{
print STDERR <<"EOF";
Pick one target type from
elf - linux, FreeBSD etc
a.out - old linux
sol - x86 solaris
cpp - format so x86unix.cpp can be used
win32 - Windows 95/Windows NT
EOF
exit(1);
}
&comment("Don't even think of reading this code");
&comment("It was automatically generated by $prog");
&comment("Which is a perl program used to generate the x86 assember for");
&comment("any of elf, a.out, Win32, or Solaris");
&comment("It can be found in SSLeay 0.6.5+ or in libdes 3.26+");
&comment("eric <eay\@cryptsoft.com>");
&comment("The inner loop instruction sequence and the IP/FP modifications");
&comment("are from Svend Olaf Mikkelsen <svolaf\@inet.uni-c.dk>");
&comment("");
&file("dx86xxxx");
$L="edi";
$R="esi";
&des_encrypt("des_encrypt",1);
&des_encrypt("des_encrypt2",0);
&des_encrypt3("des_encrypt3",1);
&des_encrypt3("des_decrypt3",0);
&file_end();
sub des_encrypt
{
local($name,$do_ip)=@_;
&function_begin($name,3,EXTRN _des_SPtrans:DWORD");
&comment("");
&comment("Load the 2 words");
$ks="ebp";
if ($do_ip)
{
&mov($R,&wparam(0));
&xor( "ecx", "ecx" );
&mov("eax",&DWP(0,$R,"",0));
&mov("ebx",&wparam(2)); # get encrypt flag
&mov($L,&DWP(4,$R,"",0));
&comment("");
&comment("IP");
&IP_new("eax",$L,$R,3);
}
else
{
&mov("eax",&wparam(0));
&xor( "ecx", "ecx" );
&mov($R,&DWP(0,"eax","",0));
&mov("ebx",&wparam(2)); # get encrypt flag
&rotl($R,3);
&mov($L,&DWP(4,"eax","",0));
&rotl($L,3);
}
&cmp("ebx","0");
&mov( $ks, &wparam(1) );
&je(&label("start_decrypt"));
for ($i=0; $i<16; $i+=2)
{
&comment("");
&comment("Round $i");
&D_ENCRYPT($i,$L,$R,$i*2,$ks,"des_SPtrans","eax","ebx","ecx","edx");
&comment("");
&comment("Round ".sprintf("%d",$i+1));
&D_ENCRYPT($i+1,$R,$L,($i+1)*2,$ks,"des_SPtrans","eax","ebx","ecx","edx");
}
&jmp(&label("end"));
&set_label("start_decrypt");
for ($i=15; $i>0; $i-=2)
{
&comment("");
&comment("Round $i");
&D_ENCRYPT(15-$i,$L,$R,$i*2,$ks,"des_SPtrans","eax","ebx","ecx","edx");
&comment("");
&comment("Round ".sprintf("%d",$i-1));
&D_ENCRYPT(15-$i+1,$R,$L,($i-1)*2,$ks,"des_SPtrans","eax","ebx","ecx","edx");
}
&set_label("end");
if ($do_ip)
{
&comment("");
&comment("FP");
&mov("edx",&wparam(0));
&FP_new($L,$R,"eax",3);
&mov(&DWP(0,"edx","",0),"eax");
&mov(&DWP(4,"edx","",0),$R);
}
else
{
&comment("");
&comment("Fixup");
&rotr($L,3); # r
&mov("eax",&wparam(0));
&rotr($R,3); # l
&mov(&DWP(0,"eax","",0),$L);
&mov(&DWP(4,"eax","",0),$R);
}
&function_end($name);
}
sub D_ENCRYPT
{
local($r,$L,$R,$S,$ks,$desSP,$u,$tmp1,$tmp2,$t)=@_;
&mov( $u, &DWP(&n2a($S*4),$ks,"",0));
&xor( $tmp1, $tmp1);
&mov( $t, &DWP(&n2a(($S+1)*4),$ks,"",0));
&xor( $u, $R);
&xor( $t, $R);
&and( $u, "0xfcfcfcfc" );
&and( $t, "0xcfcfcfcf" );
&movb( &LB($tmp1), &LB($u) );
&movb( &LB($tmp2), &HB($u) );
&rotr( $t, 4 );
&mov( $ks, &DWP(" $desSP",$tmp1,"",0));
&movb( &LB($tmp1), &LB($t) );
&xor( $L, $ks);
&mov( $ks, &DWP("0x200+$desSP",$tmp2,"",0));
&xor( $L, $ks); ######
&movb( &LB($tmp2), &HB($t) );
&shr( $u, 16);
&mov( $ks, &DWP("0x100+$desSP",$tmp1,"",0));
&xor( $L, $ks); ######
&movb( &LB($tmp1), &HB($u) );
&shr( $t, 16);
&mov( $ks, &DWP("0x300+$desSP",$tmp2,"",0));
&xor( $L, $ks);
&mov( $ks, &DWP(24,"esp","",0)); ####
&movb( &LB($tmp2), &HB($t) );
&and( $u, "0xff" );
&and( $t, "0xff" );
&mov( $tmp1, &DWP("0x600+$desSP",$tmp1,"",0));
&xor( $L, $tmp1);
&mov( $tmp1, &DWP("0x700+$desSP",$tmp2,"",0));
&xor( $L, $tmp1);
&mov( $tmp1, &DWP("0x400+$desSP",$u,"",0));
&xor( $L, $tmp1);
&mov( $tmp1, &DWP("0x500+$desSP",$t,"",0));
&xor( $L, $tmp1);
}
sub n2a
{
sprintf("%d",$_[0]);
}
# now has a side affect of rotating $a by $shift
sub R_PERM_OP
{
local($a,$b,$tt,$shift,$mask,$last)=@_;
&rotl( $a, $shift ) if ($shift != 0);
&mov( $tt, $a );
&xor( $a, $b );
&and( $a, $mask );
if ($notlast eq $b)
{
&xor( $b, $a );
&xor( $tt, $a );
}
else
{
&xor( $tt, $a );
&xor( $b, $a );
}
&comment("");
}
sub IP_new
{
local($l,$r,$tt,$lr)=@_;
&R_PERM_OP($l,$r,$tt, 4,"0xf0f0f0f0",$l);
&R_PERM_OP($r,$tt,$l,20,"0xfff0000f",$l);
&R_PERM_OP($l,$tt,$r,14,"0x33333333",$r);
&R_PERM_OP($tt,$r,$l,22,"0x03fc03fc",$r);
&R_PERM_OP($l,$r,$tt, 9,"0xaaaaaaaa",$r);
if ($lr != 3)
{
if (($lr-3) < 0)
{ &rotr($tt, 3-$lr); }
else { &rotl($tt, $lr-3); }
}
if ($lr != 2)
{
if (($lr-2) < 0)
{ &rotr($r, 2-$lr); }
else { &rotl($r, $lr-2); }
}
}
sub FP_new
{
local($l,$r,$tt,$lr)=@_;
if ($lr != 2)
{
if (($lr-2) < 0)
{ &rotl($r, 2-$lr); }
else { &rotr($r, $lr-2); }
}
if ($lr != 3)
{
if (($lr-3) < 0)
{ &rotl($l, 3-$lr); }
else { &rotr($l, $lr-3); }
}
&R_PERM_OP($l,$r,$tt, 0,"0xaaaaaaaa",$r);
&R_PERM_OP($tt,$r,$l,23,"0x03fc03fc",$r);
&R_PERM_OP($l,$r,$tt,10,"0x33333333",$l);
&R_PERM_OP($r,$tt,$l,18,"0xfff0000f",$l);
&R_PERM_OP($l,$tt,$r,12,"0xf0f0f0f0",$r);
&rotr($tt , 4);
}

View File

@ -1,210 +0,0 @@
#!/usr/local/bin/perl
$prog="des586.pl";
# base code is in microsft
# op dest, source
# format.
#
# WILL NOT WORK ANYMORE WITH desboth.pl
require "desboth.pl";
if ( ($ARGV[0] eq "elf"))
{ require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "a.out"))
{ $aout=1; require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "sol"))
{ $sol=1; require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "cpp"))
{ $cpp=1; require "x86unix.pl"; }
elsif ( ($ARGV[0] eq "win32"))
{ require "x86ms.pl"; }
else
{
print STDERR <<"EOF";
Pick one target type from
elf - linux, FreeBSD etc
a.out - old linux
sol - x86 solaris
cpp - format so x86unix.cpp can be used
win32 - Windows 95/Windows NT
EOF
exit(1);
}
&comment("Don't even think of reading this code");
&comment("It was automatically generated by $prog");
&comment("Which is a perl program used to generate the x86 assember for");
&comment("any of elf, a.out, Win32, or Solaris");
&comment("It can be found in SSLeay 0.6.5+ or in libdes 3.26+");
&comment("eric <eay\@cryptsoft.com>");
&comment("");
&file("dx86xxxx");
$L="edi";
$R="esi";
&des_encrypt("des_encrypt",1);
&des_encrypt("des_encrypt2",0);
&des_encrypt3("des_encrypt3",1);
&des_encrypt3("des_decrypt3",0);
&file_end();
sub des_encrypt
{
local($name,$do_ip)=@_;
&function_begin($name,3,"EXTRN _des_SPtrans:DWORD");
&comment("");
&comment("Load the 2 words");
&mov("eax",&wparam(0));
&mov($R,&DWP(0,"eax","",0));
&mov($L,&DWP(4,"eax","",0));
if ($do_ip)
{
&comment("");
&comment("IP");
&IP($R,$L,"eax");
}
&comment("");
&comment("fixup rotate");
&rotl($R,3);
&rotl($L,3);
&comment("");
&comment("load counter, key_schedule and enc flag");
# encrypting part
$ks="ebp";
&xor( "ebx", "ebx" );
&mov("eax",&wparam(2)); # get encrypt flag
&xor( "ecx", "ecx" );
&cmp("eax","0");
&mov( $ks, &wparam(1) );
&je(&label("start_decrypt"));
for ($i=0; $i<16; $i+=2)
{
&comment("");
&comment("Round $i");
&D_ENCRYPT($i,$L,$R,$i*2,$ks,"des_SPtrans","eax","ebx","ecx","edx");
&comment("");
&comment("Round ".sprintf("%d",$i+1));
&D_ENCRYPT($i+1,$R,$L,($i+1)*2,$ks,"des_SPtrans","eax","ebx","ecx","edx");
}
&jmp(&label("end"));
&set_label("start_decrypt");
for ($i=15; $i>0; $i-=2)
{
&comment("");
&comment("Round $i");
&D_ENCRYPT(15-$i,$L,$R,$i*2,$ks,"des_SPtrans","eax","ebx","ecx","edx");
&comment("");
&comment("Round ".sprintf("%d",$i-1));
&D_ENCRYPT(15-$i+1,$R,$L,($i-1)*2,$ks,"des_SPtrans","eax","ebx","ecx","edx");
}
&set_label("end");
&comment("");
&comment("Fixup");
&rotr($L,3); # r
&rotr($R,3); # l
if ($do_ip)
{
&comment("");
&comment("FP");
&FP($R,$L,"eax");
}
&mov("eax",&wparam(0));
&mov(&DWP(0,"eax","",0),$L);
&mov(&DWP(4,"eax","",0),$R);
&function_end($name);
}
sub D_ENCRYPT
{
local($r,$L,$R,$S,$ks,$desSP,$u,$tmp1,$tmp2,$t)=@_;
&mov( $t, &DWP(&n2a(($S+1)*4),$ks,"",0));
&mov( $u, &DWP(&n2a($S*4),$ks,"",0));
&xor( $t, $R);
&xor( $u, $R);
&rotr( $t, 4 );
&and( $u, "0xfcfcfcfc" );
&and( $t, "0xfcfcfcfc" );
&movb( &LB($tmp1), &LB($u) );
&movb( &LB($tmp2), &HB($u) );
&xor( $L, &DWP(" $desSP",$tmp1,"",0));
&shr( $u, 16);
&xor( $L, &DWP("0x200+$desSP",$tmp2,"",0));
&movb( &LB($tmp1), &LB($u) );
&movb( &LB($tmp2), &HB($u) );
&xor( $L, &DWP("0x400+$desSP",$tmp1,"",0));
&mov( $u, &DWP("0x600+$desSP",$tmp2,"",0));
&movb( &LB($tmp1), &LB($t) );
&movb( &LB($tmp2), &HB($t) );
&xor( $L, &DWP("0x100+$desSP",$tmp1,"",0));
&shr( $t, 16);
&xor( $u, &DWP("0x300+$desSP",$tmp2,"",0));
&movb( &LB($tmp1), &LB($t) );
&movb( &LB($tmp2), &HB($t) );
&xor( $L, &DWP("0x500+$desSP",$tmp1,"",0));
&xor( $u, &DWP("0x700+$desSP",$tmp2,"",0));
&xor( $L, $u);
}
sub PERM_OP
{
local($a,$b,$tt,$shift,$mask)=@_;
&mov( $tt, $a );
&shr( $tt, $shift );
&xor( $tt, $b );
&and( $tt, $mask );
&xor( $b, $tt );
&shl( $tt, $shift );
&xor( $a, $tt );
}
sub IP
{
local($l,$r,$tt)=@_;
&PERM_OP($r,$l,$tt, 4,"0x0f0f0f0f");
&PERM_OP($l,$r,$tt,16,"0x0000ffff");
&PERM_OP($r,$l,$tt, 2,"0x33333333");
&PERM_OP($l,$r,$tt, 8,"0x00ff00ff");
&PERM_OP($r,$l,$tt, 1,"0x55555555");
}
sub FP
{
local($l,$r,$tt)=@_;
&PERM_OP($l,$r,$tt, 1,"0x55555555");
&PERM_OP($r,$l,$tt, 8,"0x00ff00ff");
&PERM_OP($l,$r,$tt, 2,"0x33333333");
&PERM_OP($r,$l,$tt,16,"0x0000ffff");
&PERM_OP($l,$r,$tt, 4,"0x0f0f0f0f");
}
sub n2a
{
sprintf("%d",$_[0]);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,305 +0,0 @@
/* crypto/des/des.h */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@mincom.oz.au).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@mincom.oz.au).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@mincom.oz.au)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@mincom.oz.au)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
/* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
*
* Always modify des.org since des.h is automatically generated from
* it during SSLeay configuration.
*
* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
*/
#ifndef HEADER_DES_H
#define HEADER_DES_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a
* %20 speed up (longs are 8 bytes, int's are 4). */
#ifndef DES_LONG
#define DES_LONG unsigned long
#endif
typedef unsigned char des_cblock[8];
typedef struct des_ks_struct
{
union {
des_cblock _;
/* make sure things are correct size on machines with
* 8 byte longs */
DES_LONG pad[2];
} ks;
#undef _
#define _ ks._
} des_key_schedule[16];
#define DES_KEY_SZ (sizeof(des_cblock))
#define DES_SCHEDULE_SZ (sizeof(des_key_schedule))
#define DES_ENCRYPT 1
#define DES_DECRYPT 0
#define DES_CBC_MODE 0
#define DES_PCBC_MODE 1
#define des_ecb2_encrypt(i,o,k1,k2,e) \
des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e))
#define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \
des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e))
#define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \
des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e))
#define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \
des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n))
#define C_Block des_cblock
#define Key_schedule des_key_schedule
#ifdef KERBEROS
#define ENCRYPT DES_ENCRYPT
#define DECRYPT DES_DECRYPT
#endif
#define KEY_SZ DES_KEY_SZ
#define string_to_key des_string_to_key
#define read_pw_string des_read_pw_string
#define random_key des_random_key
#define pcbc_encrypt des_pcbc_encrypt
#define set_key des_set_key
#define key_sched des_key_sched
#define ecb_encrypt des_ecb_encrypt
#define cbc_encrypt des_cbc_encrypt
#define ncbc_encrypt des_ncbc_encrypt
#define xcbc_encrypt des_xcbc_encrypt
#define cbc_cksum des_cbc_cksum
#define quad_cksum des_quad_cksum
/* For compatibility with the MIT lib - eay 20/05/92 */
typedef des_key_schedule bit_64;
#define des_fixup_key_parity des_set_odd_parity
#define des_check_key_parity check_parity
extern int des_check_key; /* defaults to false */
extern int des_rw_mode; /* defaults to DES_PCBC_MODE */
/* The next line is used to disable full ANSI prototypes, if your
* compiler has problems with the prototypes, make sure this line always
* evaluates to true :-) */
#if defined(MSDOS) || defined(__STDC__)
#undef NOPROTO
#endif
#ifndef NOPROTO
char *des_options(void);
void des_ecb3_encrypt(des_cblock *input,des_cblock *output,
des_key_schedule ks1,des_key_schedule ks2,
des_key_schedule ks3, int enc);
DES_LONG des_cbc_cksum(des_cblock *input,des_cblock *output,
long length,des_key_schedule schedule,des_cblock *ivec);
void des_cbc_encrypt(des_cblock *input,des_cblock *output,long length,
des_key_schedule schedule,des_cblock *ivec,int enc);
void des_ncbc_encrypt(des_cblock *input,des_cblock *output,long length,
des_key_schedule schedule,des_cblock *ivec,int enc);
void des_xcbc_encrypt(des_cblock *input,des_cblock *output,long length,
des_key_schedule schedule,des_cblock *ivec,
des_cblock *inw,des_cblock *outw,int enc);
void des_3cbc_encrypt(des_cblock *input,des_cblock *output,long length,
des_key_schedule sk1,des_key_schedule sk2,
des_cblock *ivec1,des_cblock *ivec2,int enc);
void des_cfb_encrypt(unsigned char *in,unsigned char *out,int numbits,
long length,des_key_schedule schedule,des_cblock *ivec,int enc);
void des_ecb_encrypt(des_cblock *input,des_cblock *output,
des_key_schedule ks,int enc);
void des_encrypt(DES_LONG *data,des_key_schedule ks, int enc);
void des_encrypt2(DES_LONG *data,des_key_schedule ks, int enc);
void des_encrypt3(DES_LONG *data, des_key_schedule ks1,
des_key_schedule ks2, des_key_schedule ks3);
void des_decrypt3(DES_LONG *data, des_key_schedule ks1,
des_key_schedule ks2, des_key_schedule ks3);
void des_ede3_cbc_encrypt(des_cblock *input, des_cblock *output,
long length, des_key_schedule ks1, des_key_schedule ks2,
des_key_schedule ks3, des_cblock *ivec, int enc);
void des_ede3_cfb64_encrypt(unsigned char *in, unsigned char *out,
long length, des_key_schedule ks1, des_key_schedule ks2,
des_key_schedule ks3, des_cblock *ivec, int *num, int enc);
void des_ede3_ofb64_encrypt(unsigned char *in, unsigned char *out,
long length, des_key_schedule ks1, des_key_schedule ks2,
des_key_schedule ks3, des_cblock *ivec, int *num);
void des_xwhite_in2out(des_cblock (*des_key), des_cblock (*in_white),
des_cblock (*out_white));
int des_enc_read(int fd,char *buf,int len,des_key_schedule sched,
des_cblock *iv);
int des_enc_write(int fd,char *buf,int len,des_key_schedule sched,
des_cblock *iv);
char *des_fcrypt(const char *buf,const char *salt, char *ret);
#ifdef PERL5
char *des_crypt(const char *buf,const char *salt);
#else
/* some stupid compilers complain because I have declared char instead
* of const char */
#ifdef HEADER_DES_LOCL_H
char *crypt(const char *buf,const char *salt);
#else
char *crypt();
#endif
#endif
void des_ofb_encrypt(unsigned char *in,unsigned char *out,
int numbits,long length,des_key_schedule schedule,des_cblock *ivec);
void des_pcbc_encrypt(des_cblock *input,des_cblock *output,long length,
des_key_schedule schedule,des_cblock *ivec,int enc);
DES_LONG des_quad_cksum(des_cblock *input,des_cblock *output,
long length,int out_count,des_cblock *seed);
void des_random_seed(des_cblock key);
void des_random_key(des_cblock ret);
int des_read_password(des_cblock *key,char *prompt,int verify);
int des_read_2passwords(des_cblock *key1,des_cblock *key2,
char *prompt,int verify);
int des_read_pw_string(char *buf,int length,char *prompt,int verify);
void des_set_odd_parity(des_cblock *key);
int des_is_weak_key(des_cblock *key);
int des_set_key(des_cblock *key,des_key_schedule schedule);
int des_key_sched(des_cblock *key,des_key_schedule schedule);
void des_string_to_key(char *str,des_cblock *key);
void des_string_to_2keys(char *str,des_cblock *key1,des_cblock *key2);
void des_cfb64_encrypt(unsigned char *in, unsigned char *out, long length,
des_key_schedule schedule, des_cblock *ivec, int *num, int enc);
void des_ofb64_encrypt(unsigned char *in, unsigned char *out, long length,
des_key_schedule schedule, des_cblock *ivec, int *num);
int des_read_pw(char *buf, char *buff, int size, char *prompt, int verify);
/* Extra functions from Mark Murray <mark@grondar.za> */
void des_cblock_print_file(des_cblock *cb, FILE *fp);
/* The following functions are not in the normal unix build or the
* SSLeay build. When using the SSLeay build, use RAND_seed()
* and RAND_bytes() instead. */
int des_new_random_key(des_cblock *key);
void des_init_random_number_generator(des_cblock *key);
void des_set_random_generator_seed(des_cblock *key);
void des_set_sequence_number(des_cblock new_sequence_number);
void des_generate_random_block(des_cblock *block);
#else
char *des_options();
void des_ecb3_encrypt();
DES_LONG des_cbc_cksum();
void des_cbc_encrypt();
void des_ncbc_encrypt();
void des_xcbc_encrypt();
void des_3cbc_encrypt();
void des_cfb_encrypt();
void des_ede3_cfb64_encrypt();
void des_ede3_ofb64_encrypt();
void des_ecb_encrypt();
void des_encrypt();
void des_encrypt2();
void des_encrypt3();
void des_decrypt3();
void des_ede3_cbc_encrypt();
int des_enc_read();
int des_enc_write();
char *des_fcrypt();
#ifdef PERL5
char *des_crypt();
#else
char *crypt();
#endif
void des_ofb_encrypt();
void des_pcbc_encrypt();
DES_LONG des_quad_cksum();
void des_random_seed();
void des_random_key();
int des_read_password();
int des_read_2passwords();
int des_read_pw_string();
void des_set_odd_parity();
int des_is_weak_key();
int des_set_key();
int des_key_sched();
void des_string_to_key();
void des_string_to_2keys();
void des_cfb64_encrypt();
void des_ofb64_encrypt();
int des_read_pw();
void des_xwhite_in2out();
/* Extra functions from Mark Murray <mark@grondar.za> */
void des_cblock_print_file();
/* The following functions are not in the normal unix build or the
* SSLeay build. When using the SSLeay build, use RAND_seed()
* and RAND_bytes() instead. */
#ifdef FreeBSD
int des_new_random_key();
void des_init_random_number_generator();
void des_set_random_generator_seed();
void des_set_sequence_number();
void des_generate_random_block();
#endif
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,80 +0,0 @@
#
# SSLeay/crypto/md/Makefile
#
DIR= md
TOP= ../..
CC= cc
INCLUDES=
CFLAG=-g
INSTALLTOP=/usr/local/ssl
MAKE= make -f Makefile.ssl
MAKEDEPEND= makedepend -f Makefile.ssl
MAKEFILE= Makefile.ssl
AR= ar r
CFLAGS= $(INCLUDES) $(CFLAG)
GENERAL=Makefile
TEST=md2test.c md5test.c
APPS=
LIB=$(TOP)/libcrypto.a
LIBSRC=md2_dgst.c md5_dgst.c md2_one.c md5_one.c
LIBOBJ=md2_dgst.o md5_dgst.o md2_one.o md5_one.o
SRC= $(LIBSRC)
EXHEADER= md2.h md5.h
HEADER= md5_locl.h $(EXHEADER)
ALL= $(GENERAL) $(SRC) $(HEADER)
top:
(cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all)
all: lib
lib: $(LIBOBJ)
$(AR) $(LIB) $(LIBOBJ)
sh $(TOP)/util/ranlib.sh $(LIB)
@touch lib
files:
perl $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
links:
/bin/rm -f Makefile
$(TOP)/util/point.sh Makefile.ssl Makefile ;
$(TOP)/util/mklink.sh ../../include $(EXHEADER)
$(TOP)/util/mklink.sh ../../test $(TEST)
$(TOP)/util/mklink.sh ../../apps $(APPS)
install:
@for i in $(EXHEADER) ; \
do \
(cp $$i $(INSTALLTOP)/include/$$i; \
chmod 644 $(INSTALLTOP)/include/$$i ); \
done;
tags:
ctags $(SRC)
tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
depend:
$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
dclean:
perl -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
mv -f Makefile.new $(MAKEFILE)
clean:
/bin/rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
errors:
# DO NOT DELETE THIS LINE -- make depend depends on it.

View File

@ -1,137 +0,0 @@
/* crypto/md/md2.c */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include "md2.h"
#define BUFSIZE 1024*16
#ifndef NOPROTO
void do_fp(FILE *f);
void pt(unsigned char *md);
int read(int, void *, unsigned int);
void exit(int);
void perror(const char *);
#else
void do_fp();
void pt();
int read();
void exit();
void perror();
#endif
int main(argc, argv)
int argc;
char *argv[];
{
int i,err=0;
FILE *IN;
if (argc == 1)
{
do_fp(stdin);
}
else
{
for (i=1; i<argc; i++)
{
IN=fopen(argv[i],"r");
if (IN == NULL)
{
perror(argv[i]);
err++;
continue;
}
printf("MD2(%s)= ",argv[i]);
do_fp(IN);
fclose(IN);
}
}
exit(err);
return(err);
}
void do_fp(f)
FILE *f;
{
MD2_CTX c;
unsigned char md[MD2_DIGEST_LENGTH];
int fd,i;
static unsigned char buf[BUFSIZE];
fd=fileno(f);
MD2_Init(&c);
for (;;)
{
i=read(fd,buf,BUFSIZE);
if (i <= 0) break;
MD2_Update(&c,buf,(unsigned long)i);
}
MD2_Final(&(md[0]),&c);
pt(md);
}
void pt(md)
unsigned char *md;
{
int i;
for (i=0; i<MD2_DIGEST_LENGTH; i++)
printf("%02x",md[i]);
printf("\n");
}

View File

@ -1,106 +0,0 @@
/* crypto/md/md2.org */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
/* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
*
* Always modify md2.org since md2.h is automatically generated from
* it during SSLeay configuration.
*
* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
*/
#ifndef HEADER_MD2_H
#define HEADER_MD2_H
#ifdef __cplusplus
extern "C" {
#endif
#define MD2_DIGEST_LENGTH 16
#define MD2_BLOCK 16
#define MD2_INT unsigned int
typedef struct MD2state_st
{
int num;
unsigned char data[MD2_BLOCK];
MD2_INT cksm[MD2_BLOCK];
MD2_INT state[MD2_BLOCK];
} MD2_CTX;
#ifndef NOPROTO
char *MD2_options(void);
void MD2_Init(MD2_CTX *c);
void MD2_Update(MD2_CTX *c, register unsigned char *data, unsigned long len);
void MD2_Final(unsigned char *md, MD2_CTX *c);
unsigned char *MD2(unsigned char *d, unsigned long n,unsigned char *md);
#else
char *MD2_options();
void MD2_Init();
void MD2_Update();
void MD2_Final();
unsigned char *MD2();
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,106 +0,0 @@
/* crypto/md/md2.org */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
/* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
*
* Always modify md2.org since md2.h is automatically generated from
* it during SSLeay configuration.
*
* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
*/
#ifndef HEADER_MD2_H
#define HEADER_MD2_H
#ifdef __cplusplus
extern "C" {
#endif
#define MD2_DIGEST_LENGTH 16
#define MD2_BLOCK 16
#define MD2_INT unsigned int
typedef struct MD2state_st
{
int num;
unsigned char data[MD2_BLOCK];
MD2_INT cksm[MD2_BLOCK];
MD2_INT state[MD2_BLOCK];
} MD2_CTX;
#ifndef NOPROTO
char *MD2_options(void);
void MD2_Init(MD2_CTX *c);
void MD2_Update(MD2_CTX *c, register unsigned char *data, unsigned long len);
void MD2_Final(unsigned char *md, MD2_CTX *c);
unsigned char *MD2(unsigned char *d, unsigned long n,unsigned char *md);
#else
char *MD2_options();
void MD2_Init();
void MD2_Update();
void MD2_Final();
unsigned char *MD2();
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,235 +0,0 @@
/* crypto/md/md2_dgst.c */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "md2.h"
char *MD2_version="MD2 part of SSLeay 0.8.1b 29-Jun-1998";
/* Implemented from RFC1319 The MD2 Message-Digest Algorithm
*/
#define UCHAR unsigned char
#ifndef NOPROTO
static void md2_block(MD2_CTX *c, unsigned char *d);
#else
static void md2_block();
#endif
/* The magic S table - I have converted it to hex since it is
* basicaly just a random byte string. */
static MD2_INT S[256]={
0x29, 0x2E, 0x43, 0xC9, 0xA2, 0xD8, 0x7C, 0x01,
0x3D, 0x36, 0x54, 0xA1, 0xEC, 0xF0, 0x06, 0x13,
0x62, 0xA7, 0x05, 0xF3, 0xC0, 0xC7, 0x73, 0x8C,
0x98, 0x93, 0x2B, 0xD9, 0xBC, 0x4C, 0x82, 0xCA,
0x1E, 0x9B, 0x57, 0x3C, 0xFD, 0xD4, 0xE0, 0x16,
0x67, 0x42, 0x6F, 0x18, 0x8A, 0x17, 0xE5, 0x12,
0xBE, 0x4E, 0xC4, 0xD6, 0xDA, 0x9E, 0xDE, 0x49,
0xA0, 0xFB, 0xF5, 0x8E, 0xBB, 0x2F, 0xEE, 0x7A,
0xA9, 0x68, 0x79, 0x91, 0x15, 0xB2, 0x07, 0x3F,
0x94, 0xC2, 0x10, 0x89, 0x0B, 0x22, 0x5F, 0x21,
0x80, 0x7F, 0x5D, 0x9A, 0x5A, 0x90, 0x32, 0x27,
0x35, 0x3E, 0xCC, 0xE7, 0xBF, 0xF7, 0x97, 0x03,
0xFF, 0x19, 0x30, 0xB3, 0x48, 0xA5, 0xB5, 0xD1,
0xD7, 0x5E, 0x92, 0x2A, 0xAC, 0x56, 0xAA, 0xC6,
0x4F, 0xB8, 0x38, 0xD2, 0x96, 0xA4, 0x7D, 0xB6,
0x76, 0xFC, 0x6B, 0xE2, 0x9C, 0x74, 0x04, 0xF1,
0x45, 0x9D, 0x70, 0x59, 0x64, 0x71, 0x87, 0x20,
0x86, 0x5B, 0xCF, 0x65, 0xE6, 0x2D, 0xA8, 0x02,
0x1B, 0x60, 0x25, 0xAD, 0xAE, 0xB0, 0xB9, 0xF6,
0x1C, 0x46, 0x61, 0x69, 0x34, 0x40, 0x7E, 0x0F,
0x55, 0x47, 0xA3, 0x23, 0xDD, 0x51, 0xAF, 0x3A,
0xC3, 0x5C, 0xF9, 0xCE, 0xBA, 0xC5, 0xEA, 0x26,
0x2C, 0x53, 0x0D, 0x6E, 0x85, 0x28, 0x84, 0x09,
0xD3, 0xDF, 0xCD, 0xF4, 0x41, 0x81, 0x4D, 0x52,
0x6A, 0xDC, 0x37, 0xC8, 0x6C, 0xC1, 0xAB, 0xFA,
0x24, 0xE1, 0x7B, 0x08, 0x0C, 0xBD, 0xB1, 0x4A,
0x78, 0x88, 0x95, 0x8B, 0xE3, 0x63, 0xE8, 0x6D,
0xE9, 0xCB, 0xD5, 0xFE, 0x3B, 0x00, 0x1D, 0x39,
0xF2, 0xEF, 0xB7, 0x0E, 0x66, 0x58, 0xD0, 0xE4,
0xA6, 0x77, 0x72, 0xF8, 0xEB, 0x75, 0x4B, 0x0A,
0x31, 0x44, 0x50, 0xB4, 0x8F, 0xED, 0x1F, 0x1A,
0xDB, 0x99, 0x8D, 0x33, 0x9F, 0x11, 0x83, 0x14,
};
char *MD2_options()
{
if (sizeof(MD2_INT) == 1)
return("md2(char)");
else
return("md2(int)");
}
void MD2_Init(c)
MD2_CTX *c;
{
c->num=0;
memset(c->state,0,MD2_BLOCK*sizeof(MD2_INT));
memset(c->cksm,0,MD2_BLOCK*sizeof(MD2_INT));
memset(c->data,0,MD2_BLOCK);
}
void MD2_Update(c, data, len)
MD2_CTX *c;
register unsigned char *data;
unsigned long len;
{
register UCHAR *p;
if (len == 0) return;
p=c->data;
if (c->num != 0)
{
if ((c->num+len) >= MD2_BLOCK)
{
memcpy(&(p[c->num]),data,MD2_BLOCK-c->num);
md2_block(c,c->data);
data+=(MD2_BLOCK - c->num);
len-=(MD2_BLOCK - c->num);
c->num=0;
/* drop through and do the rest */
}
else
{
memcpy(&(p[c->num]),data,(int)len);
/* data+=len; */
c->num+=(int)len;
return;
}
}
/* we now can process the input data in blocks of MD2_BLOCK
* chars and save the leftovers to c->data. */
while (len >= MD2_BLOCK)
{
md2_block(c,data);
data+=MD2_BLOCK;
len-=MD2_BLOCK;
}
memcpy(p,data,(int)len);
c->num=(int)len;
}
static void md2_block(c, d)
MD2_CTX *c;
unsigned char *d;
{
register MD2_INT t,*sp1,*sp2;
register int i,j;
MD2_INT state[48];
sp1=c->state;
sp2=c->cksm;
j=sp2[MD2_BLOCK-1];
for (i=0; i<16; i++)
{
state[i]=sp1[i];
state[i+16]=t=d[i];
state[i+32]=(t^sp1[i]);
j=sp2[i]^=S[t^j];
}
t=0;
for (i=0; i<18; i++)
{
for (j=0; j<48; j+=8)
{
t= state[j+ 0]^=S[t];
t= state[j+ 1]^=S[t];
t= state[j+ 2]^=S[t];
t= state[j+ 3]^=S[t];
t= state[j+ 4]^=S[t];
t= state[j+ 5]^=S[t];
t= state[j+ 6]^=S[t];
t= state[j+ 7]^=S[t];
}
t=(t+i)&0xff;
}
memcpy(sp1,state,16*sizeof(MD2_INT));
memset(state,0,48*sizeof(MD2_INT));
}
void MD2_Final(md, c)
unsigned char *md;
MD2_CTX *c;
{
int i,v;
register UCHAR *cp;
register MD2_INT *p1,*p2;
cp=c->data;
p1=c->state;
p2=c->cksm;
v=MD2_BLOCK-c->num;
for (i=c->num; i<MD2_BLOCK; i++)
cp[i]=(UCHAR)v;
md2_block(c,cp);
for (i=0; i<MD2_BLOCK; i++)
cp[i]=(UCHAR)p2[i];
md2_block(c,cp);
for (i=0; i<16; i++)
md[i]=(UCHAR)(p1[i]&0xff);
memset((char *)&c,0,sizeof(c));
}

View File

@ -1,80 +0,0 @@
/* crypto/md/md2_one.c */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include "cryptlib.h"
#include "md2.h"
/* This is a separate file so that #defines in cryptlib.h can
* map my MD functions to different names */
unsigned char *MD2(d, n, md)
unsigned char *d;
unsigned long n;
unsigned char *md;
{
MD2_CTX c;
static unsigned char m[MD2_DIGEST_LENGTH];
if (md == NULL) md=m;
MD2_Init(&c);
MD2_Update(&c,d,n);
MD2_Final(md,&c);
memset(&c,0,sizeof(c)); /* Security consideration */
return(md);
}

View File

@ -1,130 +0,0 @@
/* crypto/md/md2test.c */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "md2.h"
char *test[]={
"",
"a",
"abc",
"message digest",
"abcdefghijklmnopqrstuvwxyz",
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
"12345678901234567890123456789012345678901234567890123456789012345678901234567890",
NULL,
};
char *ret[]={
"8350e5a3e24c153df2275c9f80692773",
"32ec01ec4a6dac72c0ab96fb34c0b5d1",
"da853b0d3f88d99b30283a69e6ded6bb",
"ab4f496bfb2a530b219ff33031fe06b0",
"4e8ddff3650292ab5a4108c3aa47940b",
"da33def2a42df13975352846c30338cd",
"d5976f79d83d3a0dc9806c3c66f3efd8",
};
#ifndef NOPROTO
static char *pt(unsigned char *md);
#else
static char *pt();
#endif
int main(argc,argv)
int argc;
char *argv[];
{
int i,err=0;
char **P,**R;
char *p;
P=test;
R=ret;
i=1;
while (*P != NULL)
{
p=pt(MD2((unsigned char *)*P,(unsigned long)strlen(*P),NULL));
if (strcmp(p,*R) != 0)
{
printf("error calculating MD2 on '%s'\n",*P);
printf("got %s instead of %s\n",p,*R);
err++;
}
else
printf("test %d ok\n",i);
i++;
R++;
P++;
}
exit(err);
return(0);
}
static char *pt(md)
unsigned char *md;
{
int i;
static char buf[80];
for (i=0; i<MD2_DIGEST_LENGTH; i++)
sprintf(&(buf[i*2]),"%02x",md[i]);
return(buf);
}

View File

@ -1,135 +0,0 @@
/* crypto/md/md5.c */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include <stdlib.h>
#include "md5.h"
#define BUFSIZE 1024*16
#ifndef NOPROTO
void do_fp(FILE *f);
void pt(unsigned char *md);
int read(int, void *, unsigned int);
#else
void do_fp();
void pt();
int read();
#endif
int main(argc, argv)
int argc;
char **argv;
{
int i,err=0;
FILE *IN;
if (argc == 1)
{
do_fp(stdin);
}
else
{
for (i=1; i<argc; i++)
{
IN=fopen(argv[i],"r");
if (IN == NULL)
{
perror(argv[i]);
err++;
continue;
}
printf("MD5(%s)= ",argv[i]);
do_fp(IN);
fclose(IN);
}
}
exit(err);
}
void do_fp(f)
FILE *f;
{
MD5_CTX c;
unsigned char md[MD5_DIGEST_LENGTH];
int fd;
int i;
static unsigned char buf[BUFSIZE];
fd=fileno(f);
MD5_Init(&c);
for (;;)
{
i=read(fd,buf,BUFSIZE);
if (i <= 0) break;
MD5_Update(&c,buf,(unsigned long)i);
}
MD5_Final(&(md[0]),&c);
pt(md);
}
void pt(md)
unsigned char *md;
{
int i;
for (i=0; i<MD5_DIGEST_LENGTH; i++)
printf("%02x",md[i]);
printf("\n");
}

View File

@ -1,97 +0,0 @@
/* crypto/md/md5.h */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#ifndef HEADER_MD5_H
#define HEADER_MD5_H
#ifdef __cplusplus
extern "C" {
#endif
#define MD5_CBLOCK 64
#define MD5_LBLOCK 16
#define MD5_BLOCK 16
#define MD5_LAST_BLOCK 56
#define MD5_LENGTH_BLOCK 8
#define MD5_DIGEST_LENGTH 16
typedef struct MD5state_st
{
unsigned long A,B,C,D;
unsigned long Nl,Nh;
unsigned long data[MD5_LBLOCK];
int num;
} MD5_CTX;
#ifndef NOPROTO
void MD5_Init(MD5_CTX *c);
void MD5_Update(MD5_CTX *c, unsigned char *data, unsigned long len);
void MD5_Final(unsigned char *md, MD5_CTX *c);
unsigned char *MD5(unsigned char *d, unsigned long n, unsigned char *md);
#else
void MD5_Init();
void MD5_Update();
void MD5_Final();
unsigned char *MD5();
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,366 +0,0 @@
/* crypto/md/md5_dgst.c */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include "md5_locl.h"
char *MD5_version="MD5 part of SSLeay 0.8.1b 29-Jun-1998";
/* Implemented from RFC1321 The MD5 Message-Digest Algorithm
*/
#define INIT_DATA_A (unsigned long)0x67452301L
#define INIT_DATA_B (unsigned long)0xefcdab89L
#define INIT_DATA_C (unsigned long)0x98badcfeL
#define INIT_DATA_D (unsigned long)0x10325476L
#ifndef NOPROTO
static void md5_block(MD5_CTX *c, unsigned long *p);
#else
static void md5_block();
#endif
void MD5_Init(c)
MD5_CTX *c;
{
c->A=INIT_DATA_A;
c->B=INIT_DATA_B;
c->C=INIT_DATA_C;
c->D=INIT_DATA_D;
c->Nl=0;
c->Nh=0;
c->num=0;
}
void MD5_Update(c, data, len)
MD5_CTX *c;
register unsigned char *data;
unsigned long len;
{
register ULONG *p;
int sw,sc;
ULONG l;
if (len == 0) return;
l=(c->Nl+(len<<3))&0xffffffffL;
/* 95-05-24 eay Fixed a bug with the overflow handling, thanks to
* Wei Dai <weidai@eskimo.com> for pointing it out. */
if (l < c->Nl) /* overflow */
c->Nh++;
c->Nh+=(len>>29);
c->Nl=l;
if (c->num != 0)
{
p=c->data;
sw=c->num>>2;
sc=c->num&0x03;
if ((c->num+len) >= MD5_CBLOCK)
{
l= p[sw];
p_c2l(data,l,sc);
p[sw++]=l;
for (; sw<MD5_LBLOCK; sw++)
{
c2l(data,l);
p[sw]=l;
}
len-=(MD5_CBLOCK-c->num);
md5_block(c,p);
c->num=0;
/* drop through and do the rest */
}
else
{
int ew,ec;
c->num+=(int)len;
if ((sc+len) < 4) /* ugly, add char's to a word */
{
l= p[sw];
p_c2l_p(data,l,sc,len);
p[sw]=l;
}
else
{
ew=(c->num>>2);
ec=(c->num&0x03);
l= p[sw];
p_c2l(data,l,sc);
p[sw++]=l;
for (; sw < ew; sw++)
{ c2l(data,l); p[sw]=l; }
if (ec)
{
c2l_p(data,l,ec);
p[sw]=l;
}
}
return;
}
}
/* we now can process the input data in blocks of MD5_CBLOCK
* chars and save the leftovers to c->data. */
p=c->data;
while (len >= MD5_CBLOCK)
{
#if defined(L_ENDIAN) || defined(B_ENDIAN)
memcpy(p,data,MD5_CBLOCK);
data+=MD5_CBLOCK;
#ifdef B_ENDIAN
for (sw=(MD5_LBLOCK/4); sw; sw--)
{
Endian_Reverse32(p[0]);
Endian_Reverse32(p[1]);
Endian_Reverse32(p[2]);
Endian_Reverse32(p[3]);
p+=4;
}
#endif
#else
for (sw=(MD5_LBLOCK/4); sw; sw--)
{
c2l(data,l); *(p++)=l;
c2l(data,l); *(p++)=l;
c2l(data,l); *(p++)=l;
c2l(data,l); *(p++)=l;
}
#endif
p=c->data;
md5_block(c,p);
len-=MD5_CBLOCK;
}
sc=(int)len;
c->num=sc;
if (sc)
{
sw=sc>>2; /* words to copy */
#ifdef L_ENDIAN
p[sw]=0;
memcpy(p,data,sc);
#else
sc&=0x03;
for ( ; sw; sw--)
{ c2l(data,l); *(p++)=l; }
c2l_p(data,l,sc);
*p=l;
#endif
}
}
static void md5_block(c, X)
MD5_CTX *c;
register ULONG *X;
{
register ULONG A,B,C,D;
A=c->A;
B=c->B;
C=c->C;
D=c->D;
/* Round 0 */
R0(A,B,C,D,X[ 0], 7,0xd76aa478L);
R0(D,A,B,C,X[ 1],12,0xe8c7b756L);
R0(C,D,A,B,X[ 2],17,0x242070dbL);
R0(B,C,D,A,X[ 3],22,0xc1bdceeeL);
R0(A,B,C,D,X[ 4], 7,0xf57c0fafL);
R0(D,A,B,C,X[ 5],12,0x4787c62aL);
R0(C,D,A,B,X[ 6],17,0xa8304613L);
R0(B,C,D,A,X[ 7],22,0xfd469501L);
R0(A,B,C,D,X[ 8], 7,0x698098d8L);
R0(D,A,B,C,X[ 9],12,0x8b44f7afL);
R0(C,D,A,B,X[10],17,0xffff5bb1L);
R0(B,C,D,A,X[11],22,0x895cd7beL);
R0(A,B,C,D,X[12], 7,0x6b901122L);
R0(D,A,B,C,X[13],12,0xfd987193L);
R0(C,D,A,B,X[14],17,0xa679438eL);
R0(B,C,D,A,X[15],22,0x49b40821L);
/* Round 1 */
R1(A,B,C,D,X[ 1], 5,0xf61e2562L);
R1(D,A,B,C,X[ 6], 9,0xc040b340L);
R1(C,D,A,B,X[11],14,0x265e5a51L);
R1(B,C,D,A,X[ 0],20,0xe9b6c7aaL);
R1(A,B,C,D,X[ 5], 5,0xd62f105dL);
R1(D,A,B,C,X[10], 9,0x02441453L);
R1(C,D,A,B,X[15],14,0xd8a1e681L);
R1(B,C,D,A,X[ 4],20,0xe7d3fbc8L);
R1(A,B,C,D,X[ 9], 5,0x21e1cde6L);
R1(D,A,B,C,X[14], 9,0xc33707d6L);
R1(C,D,A,B,X[ 3],14,0xf4d50d87L);
R1(B,C,D,A,X[ 8],20,0x455a14edL);
R1(A,B,C,D,X[13], 5,0xa9e3e905L);
R1(D,A,B,C,X[ 2], 9,0xfcefa3f8L);
R1(C,D,A,B,X[ 7],14,0x676f02d9L);
R1(B,C,D,A,X[12],20,0x8d2a4c8aL);
/* Round 2 */
R2(A,B,C,D,X[ 5], 4,0xfffa3942L);
R2(D,A,B,C,X[ 8],11,0x8771f681L);
R2(C,D,A,B,X[11],16,0x6d9d6122L);
R2(B,C,D,A,X[14],23,0xfde5380cL);
R2(A,B,C,D,X[ 1], 4,0xa4beea44L);
R2(D,A,B,C,X[ 4],11,0x4bdecfa9L);
R2(C,D,A,B,X[ 7],16,0xf6bb4b60L);
R2(B,C,D,A,X[10],23,0xbebfbc70L);
R2(A,B,C,D,X[13], 4,0x289b7ec6L);
R2(D,A,B,C,X[ 0],11,0xeaa127faL);
R2(C,D,A,B,X[ 3],16,0xd4ef3085L);
R2(B,C,D,A,X[ 6],23,0x04881d05L);
R2(A,B,C,D,X[ 9], 4,0xd9d4d039L);
R2(D,A,B,C,X[12],11,0xe6db99e5L);
R2(C,D,A,B,X[15],16,0x1fa27cf8L);
R2(B,C,D,A,X[ 2],23,0xc4ac5665L);
/* Round 3 */
R3(A,B,C,D,X[ 0], 6,0xf4292244L);
R3(D,A,B,C,X[ 7],10,0x432aff97L);
R3(C,D,A,B,X[14],15,0xab9423a7L);
R3(B,C,D,A,X[ 5],21,0xfc93a039L);
R3(A,B,C,D,X[12], 6,0x655b59c3L);
R3(D,A,B,C,X[ 3],10,0x8f0ccc92L);
R3(C,D,A,B,X[10],15,0xffeff47dL);
R3(B,C,D,A,X[ 1],21,0x85845dd1L);
R3(A,B,C,D,X[ 8], 6,0x6fa87e4fL);
R3(D,A,B,C,X[15],10,0xfe2ce6e0L);
R3(C,D,A,B,X[ 6],15,0xa3014314L);
R3(B,C,D,A,X[13],21,0x4e0811a1L);
R3(A,B,C,D,X[ 4], 6,0xf7537e82L);
R3(D,A,B,C,X[11],10,0xbd3af235L);
R3(C,D,A,B,X[ 2],15,0x2ad7d2bbL);
R3(B,C,D,A,X[ 9],21,0xeb86d391L);
c->A+=A&0xffffffffL;
c->B+=B&0xffffffffL;
c->C+=C&0xffffffffL;
c->D+=D&0xffffffffL;
}
void MD5_Final(md, c)
unsigned char *md;
MD5_CTX *c;
{
register int i,j;
register ULONG l;
register ULONG *p;
static unsigned char end[4]={0x80,0x00,0x00,0x00};
unsigned char *cp=end;
/* c->num should definitly have room for at least one more byte. */
p=c->data;
j=c->num;
i=j>>2;
/* purify often complains about the following line as an
* Uninitialized Memory Read. While this can be true, the
* following p_c2l macro will reset l when that case is true.
* This is because j&0x03 contains the number of 'valid' bytes
* already in p[i]. If and only if j&0x03 == 0, the UMR will
* occur but this is also the only time p_c2l will do
* l= *(cp++) instead of l|= *(cp++)
* Many thanks to Alex Tang <altitude@cic.net> for pickup this
* 'potential bug' */
#ifdef PURIFY
if ((j&0x03) == 0) p[i]=0;
#endif
l=p[i];
p_c2l(cp,l,j&0x03);
p[i]=l;
i++;
/* i is the next 'undefined word' */
if (c->num >= MD5_LAST_BLOCK)
{
for (; i<MD5_LBLOCK; i++)
p[i]=0;
md5_block(c,p);
i=0;
}
for (; i<(MD5_LBLOCK-2); i++)
p[i]=0;
p[MD5_LBLOCK-2]=c->Nl;
p[MD5_LBLOCK-1]=c->Nh;
md5_block(c,p);
cp=md;
l=c->A; l2c(l,cp);
l=c->B; l2c(l,cp);
l=c->C; l2c(l,cp);
l=c->D; l2c(l,cp);
/* clear stuff, md5_block may be leaving some stuff on the stack
* but I'm not worried :-) */
c->num=0;
/* memset((char *)&c,0,sizeof(c));*/
}
#ifdef undef
int printit(l)
unsigned long *l;
{
int i,ii;
for (i=0; i<2; i++)
{
for (ii=0; ii<8; ii++)
{
fprintf(stderr,"%08lx ",l[i*8+ii]);
}
fprintf(stderr,"\n");
}
}
#endif

View File

@ -1,190 +0,0 @@
/* crypto/md/md5_locl.h */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdlib.h>
#include <string.h>
#include "md5.h"
#define ULONG unsigned long
#define UCHAR unsigned char
#define UINT unsigned int
#if defined(NOCONST)
#define const
#endif
#undef c2l
#define c2l(c,l) (l = ((unsigned long)(*((c)++))) , \
l|=(((unsigned long)(*((c)++)))<< 8), \
l|=(((unsigned long)(*((c)++)))<<16), \
l|=(((unsigned long)(*((c)++)))<<24))
#undef p_c2l
#define p_c2l(c,l,n) { \
switch (n) { \
case 0: l =((unsigned long)(*((c)++))); \
case 1: l|=((unsigned long)(*((c)++)))<< 8; \
case 2: l|=((unsigned long)(*((c)++)))<<16; \
case 3: l|=((unsigned long)(*((c)++)))<<24; \
} \
}
/* NOTE the pointer is not incremented at the end of this */
#undef c2l_p
#define c2l_p(c,l,n) { \
l=0; \
(c)+=n; \
switch (n) { \
case 3: l =((unsigned long)(*(--(c))))<<16; \
case 2: l|=((unsigned long)(*(--(c))))<< 8; \
case 1: l|=((unsigned long)(*(--(c)))) ; \
} \
}
#undef p_c2l_p
#define p_c2l_p(c,l,sc,len) { \
switch (sc) \
{ \
case 0: l =((unsigned long)(*((c)++))); \
if (--len == 0) break; \
case 1: l|=((unsigned long)(*((c)++)))<< 8; \
if (--len == 0) break; \
case 2: l|=((unsigned long)(*((c)++)))<<16; \
} \
}
#undef l2c
#define l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \
*((c)++)=(unsigned char)(((l)>> 8)&0xff), \
*((c)++)=(unsigned char)(((l)>>16)&0xff), \
*((c)++)=(unsigned char)(((l)>>24)&0xff))
/* NOTE - c is not incremented as per l2c */
#undef l2cn
#define l2cn(l1,l2,c,n) { \
c+=n; \
switch (n) { \
case 8: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \
case 7: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \
case 6: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \
case 5: *(--(c))=(unsigned char)(((l2) )&0xff); \
case 4: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \
case 3: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \
case 2: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \
case 1: *(--(c))=(unsigned char)(((l1) )&0xff); \
} \
}
/* A nice byte order reversal from Wei Dai <weidai@eskimo.com> */
#if defined(WIN32)
/* 5 instructions with rotate instruction, else 9 */
#define Endian_Reverse32(a) \
{ \
unsigned long l=(a); \
(a)=((ROTATE(l,8)&0x00FF00FF)|(ROTATE(l,24)&0xFF00FF00)); \
}
#else
/* 6 instructions with rotate instruction, else 8 */
#define Endian_Reverse32(a) \
{ \
unsigned long l=(a); \
l=(((l&0xFF00FF00)>>8L)|((l&0x00FF00FF)<<8L)); \
(a)=ROTATE(l,16L); \
}
#endif
/*
#define F(x,y,z) (((x) & (y)) | ((~(x)) & (z)))
#define G(x,y,z) (((x) & (z)) | ((y) & (~(z))))
*/
/* As pointed out by Wei Dai <weidai@eskimo.com>, the above can be
* simplified to the code below. Wei attributes these optimisations
* to Peter Gutmann's SHS code, and he attributes it to Rich Schroeppel.
*/
#define F(x,y,z) ((((y) ^ (z)) & (x)) ^ (z))
#define G(x,y,z) ((((x) ^ (y)) & (z)) ^ (y))
#define H(x,y,z) ((x) ^ (y) ^ (z))
#define I(x,y,z) (((x) | (~(z))) ^ (y))
#undef ROTATE
#if defined(WIN32)
#define ROTATE(a,n) _lrotl(a,n)
#else
#define ROTATE(a,n) (((a)<<(n))|(((a)&0xffffffff)>>(32-(n))))
#endif
#define R0(a,b,c,d,k,s,t) { \
a+=((k)+(t)+F((b),(c),(d))); \
a=ROTATE(a,s); \
a+=b; };\
#define R1(a,b,c,d,k,s,t) { \
a+=((k)+(t)+G((b),(c),(d))); \
a=ROTATE(a,s); \
a+=b; };
#define R2(a,b,c,d,k,s,t) { \
a+=((k)+(t)+H((b),(c),(d))); \
a=ROTATE(a,s); \
a+=b; };
#define R3(a,b,c,d,k,s,t) { \
a+=((k)+(t)+I((b),(c),(d))); \
a=ROTATE(a,s); \
a+=b; };

View File

@ -1,78 +0,0 @@
/* crypto/md/md5_one.c */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include "cryptlib.h"
#include "md5_locl.h"
unsigned char *MD5(d, n, md)
unsigned char *d;
unsigned long n;
unsigned char *md;
{
MD5_CTX c;
static unsigned char m[MD5_DIGEST_LENGTH];
if (md == NULL) md=m;
MD5_Init(&c);
MD5_Update(&c,d,n);
MD5_Final(md,&c);
memset(&c,0,sizeof(c)); /* security consideration */
return(md);
}

View File

@ -1,130 +0,0 @@
/* crypto/md/md5test.c */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "md5.h"
char *test[]={
"",
"a",
"abc",
"message digest",
"abcdefghijklmnopqrstuvwxyz",
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
"12345678901234567890123456789012345678901234567890123456789012345678901234567890",
NULL,
};
char *ret[]={
"d41d8cd98f00b204e9800998ecf8427e",
"0cc175b9c0f1b6a831c399e269772661",
"900150983cd24fb0d6963f7d28e17f72",
"f96b697d7cb7938d525a2f31aaf161d0",
"c3fcd3d76192e4007dfb496cca67e13b",
"d174ab98d277d9f5a5611c2c9f419d9f",
"57edf4a22be3c955ac49da2e2107b67a",
};
#ifndef NOPROTO
static char *pt(unsigned char *md);
#else
static char *pt();
#endif
int main(argc,argv)
int argc;
char *argv[];
{
int i,err=0;
unsigned char **P,**R;
char *p;
P=(unsigned char **)test;
R=(unsigned char **)ret;
i=1;
while (*P != NULL)
{
p=pt(MD5(*P,(unsigned long)strlen((char *)*P),NULL));
if (strcmp(p,(char *)*R) != 0)
{
printf("error calculating MD5 on '%s'\n",*P);
printf("got %s instead of %s\n",p,*R);
err++;
}
else
printf("test %d ok\n",i);
i++;
R++;
P++;
}
exit(err);
return(0);
}
static char *pt(md)
unsigned char *md;
{
int i;
static char buf[80];
for (i=0; i<MD5_DIGEST_LENGTH; i++)
sprintf(&(buf[i*2]),"%02x",md[i]);
return(buf);
}

View File

@ -1,18 +0,0 @@
-----BEGIN PKCS7-----
MIAGCSqGSIb3DQEHAqCAMIIC2QIBATEMMAoGCCqGSIb3DQIFMIAGCSqGSIb3DQEH
AQAAoIIB7TCCAekwggFSAgEAMA0GCSqGSIb3DQEBBAUAMFsxCzAJBgNVBAYTAkFV
MRMwEQYDVQQIEwpRdWVlbnNsYW5kMRowGAYDVQQKExFDcnlwdFNvZnQgUHR5IEx0
ZDEbMBkGA1UEAxMSVGVzdCBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTc0NloX
DTk4MDYwOTEzNTc0NlowYzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xh
bmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMSMwIQYDVQQDExpTZXJ2ZXIg
dGVzdCBjZXJ0ICg1MTIgYml0KTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQCfs8OE
J5X/EjFSDxXvRhHErYDmNlsP3YDXYY3g/HJFCTT+VWZFQ0xol2r+qKCl3194/+7X
ZLg/BMtv/yr+/rntAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAeEzEdgr2nChPcALL
vY8gl/GIlpoAjPmKD+pLeGZI9s+SEX5u1q8nCrJ6ZzkfrRnqgI5Anmev9+qPZfdU
bz5zdVSf4sUL9nX9ChXjK9NCJA3UzQHSFqhZErGUwGNkAHYHp2+zAdY6Ho6rmMzt
g0CDu/sKR4qzm6REsQGS8kgpjz4xgcUwgcICAQEwYDBbMQswCQYDVQQGEwJBVTET
MBEGA1UECBMKUXVlZW5zbGFuZDEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQx
GzAZBgNVBAMTElRlc3QgQ0EgKDEwMjQgYml0KQIBADAKBggqhkiG9w0CBTANBgkq
hkiG9w0BAQQFAARALnrxJiOX9XZf2D+3vL8SKMQmMq55LltomwOLGUru/q1uVXzi
ARg7FSCegOpA1nunsTURMUGgrPXKK4XmL4IseQAAAAA=
-----END PKCS7-----

View File

@ -1,33 +0,0 @@
-----BEGIN PKCS7-----
MIAGCSqGSIb3DQEHAqCAMIIFsQIBATELMAkGBSsOAwIaBQAwgAYJKoZIhvcNAQcB
AACgggQdMIICJTCCAc+gAwIBAgIBIjANBgkqhkiG9w0BAQQFADCBgjELMAkGA1UE
BhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxETAPBgNVBAcTCEJyaXNiYW5lMRow
GAYDVQQKExFDcnlwdFNvZnQgUHR5IEx0ZDEUMBIGA1UECxMLZGV2ZWxvcG1lbnQx
GTAXBgNVBAMTEENyeXB0U29mdCBEZXYgQ0EwHhcNOTcwNjEzMTgxMDE3WhcNOTgw
NjEzMTgxMDE3WjCBiDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQx
ETAPBgNVBAcTCEJyaXNiYW5lMRowGAYDVQQKExFDcnlwdFNvZnQgUHR5IEx0ZDEU
MBIGA1UECxMLSUlTIHRlc3RpbmcxDjAMBgNVBAMTBXRlc3QxMQ8wDQYJKoZIhvcN
AQkBFgAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAxtWiv59VH42+rotrmFAyDxTc
J2osFt5uy/zEllx3vvjtwewqQxGUOwf6cjqFOTrnpEdVvwywpEhIQ5364bJqIwID
AQABoygwJjAkBglghkgBhvhCAQ0EFxYVR2VuZXJhdGVkIHdpdGggU1NMZWF5MA0G
CSqGSIb3DQEBBAUAA0EAMnYkNV2AdpeHPy/qlcdZx6MDGIJgrLhklhcn6Or6KiAP
t9+nv9XdOGHyMyQr9ufsweuQfAgJ9yjKPZR2/adTjTCCAfAwggGaAgEAMA0GCSqG
SIb3DQEBBAUAMIGCMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDER
MA8GA1UEBxMIQnJpc2JhbmUxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRQw
EgYDVQQLEwtkZXZlbG9wbWVudDEZMBcGA1UEAxMQQ3J5cHRTb2Z0IERldiBDQTAe
Fw05NzAzMjIxMzM0MDRaFw05ODAzMjIxMzM0MDRaMIGCMQswCQYDVQQGEwJBVTET
MBEGA1UECBMKUXVlZW5zbGFuZDERMA8GA1UEBxMIQnJpc2JhbmUxGjAYBgNVBAoT
EUNyeXB0U29mdCBQdHkgTHRkMRQwEgYDVQQLEwtkZXZlbG9wbWVudDEZMBcGA1UE
AxMQQ3J5cHRTb2Z0IERldiBDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDgDgKq
IBuUMAJi4c8juAqEZ8f8FcuDWT+HcScvNztRJy9K8DnbGpiSrzzix4El6N4A7vbl
crwn/0CZmQJguZpfAgMBAAEwDQYJKoZIhvcNAQEEBQADQQA0UUvxlXXe6wKkVukn
ZoCyXbjlNsqt2rwbvfZEam6fQP3S7uq+o1Pnj+KDgE33WxWbQAA9h8fY1LWN7X3a
yTm/MYIBbTCCAWkCAQEwgYgwgYIxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVl
bnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0
eSBMdGQxFDASBgNVBAsTC2RldmVsb3BtZW50MRkwFwYDVQQDExBDcnlwdFNvZnQg
RGV2IENBAgEiMAkGBSsOAwIaBQCgfTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcB
MCMGCSqGSIb3DQEJBDEWBBSUVhbGkNE+KGqpOK13+FkfOkaoizAcBgkqhkiG9w0B
CQUxDxcNOTcwNzAxMDE0MzM0WjAeBgkqhkiG9w0BCQ8xETAPMA0GCCqGSIb3DQMC
AgEoMA0GCSqGSIb3DQEBAQUABECa9Jpo4w/fZOc3Vy78wZFAVF8kvpn7il99Ldsr
AQ4JiBmcfiSwEBBY6WuKT+/SYtFwZl1oXkTwB5AVCFIC/IFNAAAAAA==
-----END PKCS7-----

View File

@ -1,23 +0,0 @@
#!/bin/sh
cwd=`pwd`
cd /tmp
if [ -s /bin/ranlib ] ; then
RL=/bin/ranlib
else if [ -s /usr/bin/ranlib ] ; then
RL=/usr/bin/ranlib
fi
fi
if [ "x$RL" != "x" ]
then
case "$1" in
/*)
$RL "$1"
;;
*)
$RL "$cwd/$1"
;;
esac
fi

View File

@ -1,195 +0,0 @@
/* crypto/rc4/rc4_enc.org */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
/* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
*
* Always modify rc4_enc.org since rc4_enc.c is automatically generated from
* it during SSLeay configuration.
* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
*/
#include "rc4.h"
/* if this is defined data[i] is used instead of *data, this is a %20
* speedup on x86 */
#define RC4_INDEX
char *RC4_version="RC4 part of SSLeay 0.8.1b 29-Jun-1998";
char *RC4_options()
{
#ifdef RC4_INDEX
if (sizeof(RC4_INT) == 1)
return("rc4(idx,char)");
else
return("rc4(idx,int)");
#else
if (sizeof(RC4_INT) == 1)
return("rc4(ptr,char)");
else
return("rc4(ptr,int)");
#endif
}
/* RC4 as implemented from a posting from
* Newsgroups: sci.crypt
* From: sterndark@netcom.com (David Sterndark)
* Subject: RC4 Algorithm revealed.
* Message-ID: <sternCvKL4B.Hyy@netcom.com>
* Date: Wed, 14 Sep 1994 06:35:31 GMT
*/
void RC4_set_key(key, len, data)
RC4_KEY *key;
int len;
register unsigned char *data;
{
register RC4_INT tmp;
register int id1,id2;
register RC4_INT *d;
unsigned int i;
d= &(key->data[0]);
for (i=0; i<256; i++)
d[i]=i;
key->x = 0;
key->y = 0;
id1=id2=0;
#define SK_LOOP(n) { \
tmp=d[(n)]; \
id2 = (data[id1] + tmp + id2) & 0xff; \
if (++id1 == len) id1=0; \
d[(n)]=d[id2]; \
d[id2]=tmp; }
for (i=0; i < 256; i+=4)
{
SK_LOOP(i+0);
SK_LOOP(i+1);
SK_LOOP(i+2);
SK_LOOP(i+3);
}
}
void RC4(key, len, indata, outdata)
RC4_KEY *key;
unsigned long len;
unsigned char *indata;
unsigned char *outdata;
{
register RC4_INT *d;
register RC4_INT x,y,tx,ty;
int i;
x=key->x;
y=key->y;
d=key->data;
#define LOOP(in,out) \
x=((x+1)&0xff); \
tx=d[x]; \
y=(tx+y)&0xff; \
d[x]=ty=d[y]; \
d[y]=tx; \
(out) = d[(tx+ty)&0xff]^ (in);
#ifndef RC4_INDEX
#define RC4_LOOP(a,b,i) LOOP(*((a)++),*((b)++))
#else
#define RC4_LOOP(a,b,i) LOOP(a[i],b[i])
#endif
i= -(int)len;
i=(int)(len>>3L);
if (i)
{
for (;;)
{
RC4_LOOP(indata,outdata,0);
RC4_LOOP(indata,outdata,1);
RC4_LOOP(indata,outdata,2);
RC4_LOOP(indata,outdata,3);
RC4_LOOP(indata,outdata,4);
RC4_LOOP(indata,outdata,5);
RC4_LOOP(indata,outdata,6);
RC4_LOOP(indata,outdata,7);
#ifdef RC4_INDEX
indata+=8;
outdata+=8;
#endif
if (--i == 0) break;
}
}
i=(int)len&0x07;
if (i)
{
for (;;)
{
RC4_LOOP(indata,outdata,0); if (--i == 0) break;
RC4_LOOP(indata,outdata,1); if (--i == 0) break;
RC4_LOOP(indata,outdata,2); if (--i == 0) break;
RC4_LOOP(indata,outdata,3); if (--i == 0) break;
RC4_LOOP(indata,outdata,4); if (--i == 0) break;
RC4_LOOP(indata,outdata,5); if (--i == 0) break;
RC4_LOOP(indata,outdata,6); if (--i == 0) break;
}
}
key->x=x;
key->y=y;
}

View File

@ -1,538 +0,0 @@
/* crypto/rsa/rsa_enc.c */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include "cryptlib.h"
#include "bn.h"
#include "rsa.h"
#include "rand.h"
#ifndef NOPROTO
static int RSA_eay_public_encrypt(int flen, unsigned char *from,
unsigned char *to, RSA *rsa,int padding);
static int RSA_eay_private_encrypt(int flen, unsigned char *from,
unsigned char *to, RSA *rsa,int padding);
static int RSA_eay_public_decrypt(int flen, unsigned char *from,
unsigned char *to, RSA *rsa,int padding);
static int RSA_eay_private_decrypt(int flen, unsigned char *from,
unsigned char *to, RSA *rsa,int padding);
static int RSA_eay_mod_exp(BIGNUM *r0, BIGNUM *i, RSA *rsa);
#else
static int RSA_eay_public_encrypt();
static int RSA_eay_private_encrypt();
static int RSA_eay_public_decrypt();
static int RSA_eay_private_decrypt();
static int RSA_eay_mod_exp();
#endif
static RSA_METHOD rsa_pkcs1_eay_meth={
"Eric Young's PKCS#1 RSA",
RSA_eay_public_encrypt,
RSA_eay_public_decrypt,
RSA_eay_private_encrypt,
RSA_eay_private_decrypt,
RSA_eay_mod_exp,
BN_mod_exp,
NULL,
NULL,
};
RSA_METHOD *RSA_PKCS1_SSLeay()
{
return(&rsa_pkcs1_eay_meth);
}
static int RSA_eay_public_encrypt(flen, from, to, rsa, padding)
int flen;
unsigned char *from;
unsigned char *to;
RSA *rsa;
int padding;
{
BIGNUM *f=NULL,*ret=NULL;
int i,j,k,num=0,r= -1;
unsigned char *p;
unsigned char *buf=NULL;
BN_CTX *ctx=NULL;
if ( (padding != RSA_PKCS1_PADDING) &&
(padding != RSA_SSLV23_PADDING))
{
RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT,RSA_R_UNKNOWN_PADDING_TYPE);
goto err;
}
ctx=BN_CTX_new();
if (ctx == NULL) goto err;
num=BN_num_bytes(rsa->n);
if (flen > (num-11))
{
RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT,RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE);
goto err;
}
buf=(unsigned char *)Malloc(num);
if (buf == NULL)
{
RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT,ERR_R_MALLOC_FAILURE);
goto err;
}
p=(unsigned char *)buf;
*(p++)=0;
*(p++)=2; /* Public Key BT (Block Type) */
/* pad out with non-zero random data */
j=num-3-flen;
RAND_bytes(p,j);
for (i=0; i<j; i++)
{
if (*p == '\0')
do {
RAND_bytes(p,1);
} while (*p == '\0');
p++;
}
if (padding == RSA_SSLV23_PADDING)
memset(&(p[-8]),3,8);
*(p++)='\0';
memcpy(p,from,(unsigned int)flen);
f=BN_new();
ret=BN_new();
if ((f == NULL) || (ret == NULL)) goto err;
if (BN_bin2bn(buf,num,f) == NULL) goto err;
if (!rsa->meth->bn_mod_exp(ret,f,rsa->e,rsa->n,ctx)) goto err;
/* put in leading 0 bytes if the number is less than the
* length of the modulus */
j=BN_num_bytes(ret);
i=BN_bn2bin(ret,&(to[num-j]));
for (k=0; k<(num-i); k++)
to[k]=0;
r=num;
err:
if (ctx != NULL) BN_CTX_free(ctx);
if (f != NULL) BN_free(f);
if (ret != NULL) BN_free(ret);
if (buf != NULL)
{
memset(buf,0,num);
Free(buf);
}
return(r);
}
static int RSA_eay_private_encrypt(flen, from, to, rsa, padding)
int flen;
unsigned char *from;
unsigned char *to;
RSA *rsa;
int padding;
{
BIGNUM *f=NULL,*ret=NULL;
int i,j,k,num=0,r= -1;
unsigned char *p;
unsigned char *buf=NULL;
BN_CTX *ctx=NULL;
if (padding != RSA_PKCS1_PADDING)
{
RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,RSA_R_UNKNOWN_PADDING_TYPE);
goto err;
}
ctx=BN_CTX_new();
if (ctx == NULL) goto err;
num=BN_num_bytes(rsa->n);
if (flen > (num-11))
{
RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE);
goto err;
}
buf=(unsigned char *)Malloc(num);
if (buf == NULL)
{
RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,ERR_R_MALLOC_FAILURE);
goto err;
}
p=buf;
*(p++)=0;
*(p++)=1; /* Private Key BT (Block Type) */
/* padd out with 0xff data */
j=num-3-flen;
for (i=0; i<j; i++)
*(p++)=0xff;
*(p++)='\0';
memcpy(p,from,(unsigned int)flen);
ret=BN_new();
f=BN_new();
if ((ret == NULL) || (f == NULL)) goto err;
if (BN_bin2bn(buf,num,f) == NULL) goto err;
if ( (rsa->p != NULL) &&
(rsa->q != NULL) &&
(rsa->dmp1 != NULL) &&
(rsa->dmq1 != NULL) &&
(rsa->iqmp != NULL))
{ if (!rsa->meth->rsa_mod_exp(ret,f,rsa)) goto err; }
else
{ if (!rsa->meth->bn_mod_exp(ret,f,rsa->d,rsa->n,ctx)) goto err; }
p=buf;
BN_bn2bin(ret,p);
/* put in leading 0 bytes if the number is less than the
* length of the modulus */
j=BN_num_bytes(ret);
i=BN_bn2bin(ret,&(to[num-j]));
for (k=0; k<(num-i); k++)
to[k]=0;
r=num;
err:
if (ctx != NULL) BN_CTX_free(ctx);
if (ret != NULL) BN_free(ret);
if (f != NULL) BN_free(f);
if (buf != NULL)
{
memset(buf,0,num);
Free(buf);
}
return(r);
}
static int RSA_eay_private_decrypt(flen, from, to, rsa,padding)
int flen;
unsigned char *from;
unsigned char *to;
RSA *rsa;
int padding;
{
BIGNUM *f=NULL,*ret=NULL;
int i,j,num=0,r= -1;
unsigned char *p;
unsigned char *buf=NULL;
BN_CTX *ctx=NULL;
if ((padding != RSA_PKCS1_PADDING) && (padding != RSA_SSLV23_PADDING))
{
RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,RSA_R_UNKNOWN_PADDING_TYPE);
goto err;
}
ctx=BN_CTX_new();
if (ctx == NULL) goto err;
num=BN_num_bytes(rsa->n);
buf=(unsigned char *)Malloc(num);
if (buf == NULL)
{
RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,ERR_R_MALLOC_FAILURE);
goto err;
}
/* This check was for equallity but PGP does evil things
* and chops off the top '0' bytes */
if (flen > num)
{
RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,RSA_R_DATA_GREATER_THAN_MOD_LEN);
goto err;
}
/* make data into a big number */
ret=BN_new();
f=BN_new();
if ((ret == NULL) || (f == NULL)) goto err;
if (BN_bin2bn(from,(int)flen,f) == NULL) goto err;
/* do the decrypt */
if ( (rsa->p != NULL) &&
(rsa->q != NULL) &&
(rsa->dmp1 != NULL) &&
(rsa->dmq1 != NULL) &&
(rsa->iqmp != NULL))
{ if (!rsa->meth->rsa_mod_exp(ret,f,rsa)) goto err; }
else
{ if (!rsa->meth->bn_mod_exp(ret,f,rsa->d,rsa->n,ctx)) goto err; }
p=buf;
BN_bn2bin(ret,p);
/* BT must be 02 */
if (*(p++) != 02)
{
RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,RSA_R_BLOCK_TYPE_IS_NOT_02);
goto err;
}
/* scan over padding data */
j=num-2; /* one for type and one for the prepended 0. */
for (i=0; i<j; i++)
if (*(p++) == 0) break;
if (i == j)
{
RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,RSA_R_NULL_BEFORE_BLOCK_MISSING);
goto err;
}
if (i < 8)
{
RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,RSA_R_BAD_PAD_BYTE_COUNT);
goto err;
}
#undef RSA_DEBUG
#ifdef RSA_DEBUG
{
int z;
unsigned char *q;
q= &(p[-9]);
fprintf(stderr,"\n");
for (z=0; z<8; z++) fprintf(stderr,"%02X",q[z]);
fprintf(stderr,"\n");
}
#endif
if (padding == RSA_SSLV23_PADDING)
{
int z;
unsigned char *q;
/* -9 because we have jumped the '\0' */
q= &(p[-9]);
for (z=0; z<8; z++)
{
if (*(q++) != 0x03)
break;
}
if (z == 8)
{
RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,RSA_R_SSLV3_ROLLBACK_ATTACK);
goto err;
}
}
/* skip over the '\0' */
i++;
j-=i;
/* output data */
memcpy(to,p,(unsigned int)j);
r=j;
err:
if (ctx != NULL) BN_CTX_free(ctx);
if (f != NULL) BN_free(f);
if (ret != NULL) BN_free(ret);
if (buf != NULL)
{
memset(buf,0,num);
Free(buf);
}
return(r);
}
static int RSA_eay_public_decrypt(flen, from, to, rsa, padding)
int flen;
unsigned char *from;
unsigned char *to;
RSA *rsa;
int padding;
{
BIGNUM *f=NULL,*ret=NULL;
int i,j,num=0,r= -1;
unsigned char *p;
unsigned char *buf=NULL;
BN_CTX *ctx=NULL;
if (padding != RSA_PKCS1_PADDING)
{
RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,RSA_R_UNKNOWN_PADDING_TYPE);
goto err;
}
ctx=BN_CTX_new();
if (ctx == NULL) goto err;
num=BN_num_bytes(rsa->n);
buf=(unsigned char *)Malloc(num);
if (buf == NULL)
{
RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,ERR_R_MALLOC_FAILURE);
goto err;
}
/* This check was for equallity but PGP does evil things
* and chops off the top '0' bytes */
if (flen > num)
{
RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,RSA_R_DATA_GREATER_THAN_MOD_LEN);
goto err;
}
/* make data into a big number */
f=BN_new();
ret=BN_new();
if ((f == NULL) || (ret == NULL)) goto err;
if (BN_bin2bn(from,flen,f) == NULL) goto err;
/* do the decrypt */
if (!rsa->meth->bn_mod_exp(ret,f,rsa->e,rsa->n,ctx)) goto err;
p=buf;
i=BN_bn2bin(ret,p);
/* BT must be 01 */
if (*(p++) != 01)
{
RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,RSA_R_BLOCK_TYPE_IS_NOT_01);
goto err;
}
/* scan over padding data */
j=num-2; /* one for type and one for the prepended 0. */
for (i=0; i<j; i++)
{
if (*p != 0xff) /* should decrypt to 0xff */
{
if (*p == 0)
{ p++; break; }
else {
RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,RSA_R_BAD_FIXED_HEADER_DECRYPT);
goto err;
}
}
p++;
}
if (i == j)
{
RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,RSA_R_NULL_BEFORE_BLOCK_MISSING);
goto err;
}
if (i < 8)
{
RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,RSA_R_BAD_PAD_BYTE_COUNT);
goto err;
}
/* skip over the '\0' */
i++;
j-=i;
/* output data */
memcpy(to,p,(unsigned int)j);
r=j;
err:
if (ctx != NULL) BN_CTX_free(ctx);
if (f != NULL) BN_free(f);
if (ret != NULL) BN_free(ret);
if (buf != NULL)
{
memset(buf,0,num);
Free(buf);
}
return(r);
}
static int RSA_eay_mod_exp(r0, I, rsa)
BIGNUM *r0;
BIGNUM *I;
RSA *rsa;
{
BIGNUM *r1=NULL,*m1=NULL;
int ret=0;
BN_CTX *ctx;
if ((ctx=BN_CTX_new()) == NULL) goto err;
m1=BN_new();
r1=BN_new();
if ((m1 == NULL) || (r1 == NULL)) goto err;
if (!BN_mod(r1,I,rsa->q,ctx)) goto err;
if (!rsa->meth->bn_mod_exp(m1,r1,rsa->dmq1,rsa->q,ctx)) goto err;
if (!BN_mod(r1,I,rsa->p,ctx)) goto err;
if (!rsa->meth->bn_mod_exp(r0,r1,rsa->dmp1,rsa->p,ctx)) goto err;
if (!BN_add(r1,r0,rsa->p)) goto err;
if (!BN_sub(r0,r1,m1)) goto err;
if (!BN_mul(r1,r0,rsa->iqmp)) goto err;
if (!BN_mod(r0,r1,rsa->p,ctx)) goto err;
if (!BN_mul(r1,r0,rsa->q)) goto err;
if (!BN_add(r0,r1,m1)) goto err;
ret=1;
err:
if (m1 != NULL) BN_free(m1);
if (r1 != NULL) BN_free(r1);
BN_CTX_free(ctx);
return(ret);
}

View File

@ -1,465 +0,0 @@
*** x509name.c Wed Jul 2 09:35:35 1997
--- /home/eay/play/x Sat Jul 5 01:39:56 1997
***************
*** 1,202 ****
! /* crypto/x509/x509name.c */
! /* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
! * All rights reserved.
! *
! * This package is an SSL implementation written
! * by Eric Young (eay@cryptsoft.com).
! * The implementation was written so as to conform with Netscapes SSL.
! *
! * This library is free for commercial and non-commercial use as long as
! * the following conditions are aheared to. The following conditions
! * apply to all code found in this distribution, be it the RC4, RSA,
! * lhash, DES, etc., code; not just the SSL code. The SSL documentation
! * included with this distribution is covered by the same copyright terms
! * except that the holder is Tim Hudson (tjh@cryptsoft.com).
! *
! * Copyright remains Eric Young's, and as such any Copyright notices in
! * the code are not to be removed.
! * If this package is used in a product, Eric Young should be given attribution
! * as the author of the parts of the library used.
! * This can be in the form of a textual message at program startup or
! * in documentation (online or textual) provided with the package.
! *
! * 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 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 acknowledgement:
! * "This product includes cryptographic software written by
! * Eric Young (eay@cryptsoft.com)"
! * The word 'cryptographic' can be left out if the rouines from the library
! * being used are not cryptographic related :-).
! * 4. If you include any Windows specific code (or a derivative thereof) from
! * the apps directory (application code) you must include an acknowledgement:
! * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
! *
! * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
! *
! * The licence and distribution terms for any publically available version or
! * derivative of this code cannot be changed. i.e. this code cannot simply be
! * copied and put under another distribution licence
! * [including the GNU Public Licence.]
! */
!
! #include <stdio.h>
! #include "stack.h"
! #include "cryptlib.h"
! #include "asn1.h"
! #include "objects.h"
! #include "evp.h"
! #include "x509.h"
!
! int X509_NAME_get_text_by_NID(name,nid,buf,len)
! X509_NAME *name;
! int nid;
! char *buf;
! int len;
{
ASN1_OBJECT *obj;
obj=OBJ_nid2obj(nid);
! if (obj == NULL) return(-1);
! return(X509_NAME_get_text_by_OBJ(name,obj,buf,len));
}
- int X509_NAME_get_text_by_OBJ(name,obj,buf,len)
- X509_NAME *name;
- ASN1_OBJECT *obj;
- char *buf;
- int len;
- {
- int i;
- ASN1_STRING *data;
! i=X509_NAME_get_index_by_OBJ(name,obj,0);
! if (i < 0) return(-1);
! data=X509_NAME_ENTRY_get_data(X509_NAME_get_entry(name,i));
! i=(data->length > (len-1))?(len-1):data->length;
! if (buf == NULL) return(data->length);
! memcpy(buf,data->data,i);
! buf[i]='\0';
! return(i);
! }
! int X509_NAME_entry_count(name)
! X509_NAME *name;
{
! if (name == NULL) return(0);
! return(sk_num(name->entries));
}
! int X509_NAME_get_index_by_NID(name,nid,oldpos)
! X509_NAME *name;
! int nid;
! int oldpos;
! {
! ASN1_OBJECT *obj;
! obj=OBJ_nid2obj(nid);
! if (obj == NULL) return(-2);
! return(X509_NAME_get_index_by_OBJ(name,obj,oldpos));
}
- int X509_NAME_get_index_by_OBJ(name,obj,oldpos)
- X509_NAME *name;
- ASN1_OBJECT *obj;
- int oldpos;
- {
- int n;
- X509_NAME_ENTRY *ne;
- STACK *sk;
! if (name == NULL) return(-1);
! if (oldpos < 0)
! oldpos= -1;
! sk=name->entries;
! n=sk_num(sk);
! for (oldpos++; oldpos < n; oldpos++)
{
! ne=(X509_NAME_ENTRY *)sk_value(sk,oldpos);
! if (OBJ_cmp(ne->object,obj) == 0)
! return(oldpos);
}
! return(-1);
}
- X509_NAME_ENTRY *X509_NAME_get_entry(name,loc)
- X509_NAME *name;
- int loc;
- {
- if ( (name == NULL) || (sk_num(name->entries) <= loc) || (loc < 0))
- return(NULL);
- else
- return((X509_NAME_ENTRY *)sk_value(name->entries,loc));
- }
! X509_NAME_ENTRY *X509_NAME_delete_entry(name,loc)
! X509_NAME *name;
! int loc;
{
! X509_NAME_ENTRY *ret;
! int i,j,n,set_prev,set_next;
! STACK *sk;
!
! if ((name == NULL) || (sk_num(name->entries) <= loc) || (loc < 0))
! return(NULL);
! sk=name->entries;
! ret=(X509_NAME_ENTRY *)sk_delete(sk,loc);
! n=sk_num(sk);
! name->modified=1;
! if (loc == n) return(ret);
!
! /* else we need to fixup the set field */
! if (loc != 0)
! set_prev=((X509_NAME_ENTRY *)sk_value(sk,loc-1))->set;
! else
! set_prev=ret->set-1;
! set_next=((X509_NAME_ENTRY *)sk_value(sk,loc))->set;
! /* set_prev is the previous set
! * set is the current set
! * set_next is the following
! * prev 1 1 1 1 1 1 1 1
! * set 1 1 2 2
! * next 1 1 2 2 2 2 3 2
! * so basically only if prev and next differ by 2, then
! * re-number down by 1 */
! if (set_prev+1 < set_next)
! {
! j=set_next-set_prev-1;
! for (i=loc; i<n; i++)
! ((X509_NAME_ENTRY *)sk_value(sk,loc-1))->set-=j;
! }
! return(ret);
}
/* if set is -1, append to previous set, 0 'a new one', and 1,
* prepend to the guy we are about to stomp on. */
! int X509_NAME_add_entry(name,ne,loc,set)
! X509_NAME *name;
! X509_NAME_ENTRY *ne;
! int loc;
! int set;
{
! X509_NAME_ENTRY *new_name=NULL;
int n,i,inc;
STACK *sk;
--- 1,77 ----
! X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
! int type,unsigned char *bytes, int len)
{
ASN1_OBJECT *obj;
obj=OBJ_nid2obj(nid);
! if (obj == NULL)
! {
! X509err(X509_F_X509_NAME_ENTRY_CREATE_BY_NID,X509_R_UNKNOWN_NID);
! return(NULL);
! }
! return(X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len));
}
! X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
! ASN1_OBJECT *obj, int type,unsigned char *bytes,
! int len)
! {
! X509_NAME_ENTRY *ret;
! if ((ne == NULL) || (*ne == NULL))
{
! if ((ret=X509_NAME_ENTRY_new()) == NULL)
! return(NULL);
}
+ else
+ ret= *ne;
! if (!X509_NAME_ENTRY_set_object(ret,obj))
! goto err;
! if (!X509_NAME_ENTRY_set_data(ret,type,bytes,len))
! goto err;
! if ((ne != NULL) && (*ne == NULL)) *ne=ret;
! return(ret);
! err:
! if ((ne == NULL) || (ret != *ne))
! X509_NAME_ENTRY_free(ret);
! return(NULL);
}
! int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, ASN1_OBJECT *obj)
! {
! if ((ne == NULL) || (obj == NULL))
{
! X509err(X509_F_X509_NAME_ENTRY_SET_OBJECT,ERR_R_PASSED_NULL_PARAMETER);
! return(0);
}
! ASN1_OBJECT_free(ne->object);
! ne->object=OBJ_dup(obj);
! return((ne->object == NULL)?0:1);
}
! int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne,int type,unsigned char *bytes,int len)
{
! int i;
! if ((ne == NULL) || ((bytes == NULL) && (len != 0))) return(0);
! if (len < 0) len=strlen((char *)bytes);
! i=ASN1_STRING_set(ne->value,bytes,len);
! if (!i) return(0);
! ne->value->type=ASN1_PRINTABLE_type(bytes,len);
! return(1);
}
/* if set is -1, append to previous set, 0 'a new one', and 1,
* prepend to the guy we are about to stomp on. */
! int X509_NAME_add_entry(X509_NAME *name,X509_NAME_ENTRY *ne,int loc,int set)
{
! /* ERIC: renamed new to nenew for C++ users --tjh */
! X509_NAME_ENTRY *nenew;
int n,i,inc;
STACK *sk;
***************
*** 206,213 ****
if (loc > n) loc=n;
else if (loc < 0) loc=n;
- name->modified=1;
-
if (set == -1)
{
if (loc == 0)
--- 81,86 ----
***************
*** 223,245 ****
}
else /* if (set >= 0) */
{
- inc=(set == 0)?1:0;
if (loc >= n)
{
if (loc != 0)
set=((X509_NAME_ENTRY *)
! sk_value(sk,n-1))->set+1;
else
set=0;
}
else
set=((X509_NAME_ENTRY *)sk_value(sk,loc))->set;
}
! if ((new_name=X509_NAME_ENTRY_dup(ne)) == NULL)
goto err;
! new_name->set=set;
! if (!sk_insert(sk,(char *)new_name,loc))
{
X509err(X509_F_X509_NAME_ADD_ENTRY,ERR_R_MALLOC_FAILURE);
goto err;
--- 96,122 ----
}
else /* if (set >= 0) */
{
if (loc >= n)
{
if (loc != 0)
set=((X509_NAME_ENTRY *)
! sk_value(sk,loc-1))->set+1;
else
set=0;
}
else
set=((X509_NAME_ENTRY *)sk_value(sk,loc))->set;
+ inc=(set == 0)?1:0;
}
! if ((nenew=X509_NAME_ENTRY_dup(ne)) == NULL)
goto err;
! /* eric forgot to put this in when he cut the nice
! * interface so that I don't have to do the icky things
! * that req.c does --tjh :-)
! */
! nenew->set=set;
! if (!sk_insert(sk,(char *)nenew,loc))
{
X509err(X509_F_X509_NAME_ADD_ENTRY,ERR_R_MALLOC_FAILURE);
goto err;
***************
*** 252,357 ****
}
return(1);
err:
! if (new_name != NULL)
X509_NAME_ENTRY_free(ne);
return(0);
- }
-
- X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(ne,nid,type,bytes,len)
- X509_NAME_ENTRY **ne;
- int nid;
- int type;
- unsigned char *bytes;
- int len;
- {
- ASN1_OBJECT *obj;
-
- obj=OBJ_nid2obj(nid);
- if (obj == NULL)
- {
- X509err(X509_F_X509_NAME_ENTRY_CREATE_BY_NID,X509_R_UNKNOWN_NID);
- return(NULL);
- }
- return(X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len));
- }
-
- X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len)
- X509_NAME_ENTRY **ne;
- ASN1_OBJECT *obj;
- int type;
- unsigned char *bytes;
- int len;
- {
- X509_NAME_ENTRY *ret;
-
- if ((ne == NULL) || (*ne == NULL))
- {
- if ((ret=X509_NAME_ENTRY_new()) == NULL)
- return(NULL);
- }
- else
- ret= *ne;
-
- if (!X509_NAME_ENTRY_set_object(ret,obj))
- goto err;
- if (!X509_NAME_ENTRY_set_data(ret,type,bytes,len))
- goto err;
-
- if ((ne != NULL) && (*ne == NULL)) *ne=ret;
- return(ret);
- err:
- if ((ne == NULL) || (ret != *ne))
- X509_NAME_ENTRY_free(ret);
- return(NULL);
- }
-
- int X509_NAME_ENTRY_set_object(ne,obj)
- X509_NAME_ENTRY *ne;
- ASN1_OBJECT *obj;
- {
- if ((ne == NULL) || (obj == NULL))
- {
- X509err(X509_F_X509_NAME_ENTRY_SET_OBJECT,ERR_R_PASSED_NULL_PARAMETER);
- return(0);
- }
- ASN1_OBJECT_free(ne->object);
- ne->object=OBJ_dup(obj);
- return((ne->object == NULL)?0:1);
- }
-
- int X509_NAME_ENTRY_set_data(ne,type,bytes,len)
- X509_NAME_ENTRY *ne;
- int type;
- unsigned char *bytes;
- int len;
- {
- int i;
-
- if ((ne == NULL) || ((bytes == NULL) && (len != 0))) return(0);
- if (len < 0) len=strlen((char *)bytes);
- i=ASN1_STRING_set(ne->value,bytes,len);
- if (!i) return(0);
- if (type != V_ASN1_UNDEF)
- {
- if (type == V_ASN1_APP_CHOOSE)
- ne->value->type=ASN1_PRINTABLE_type(bytes,len);
- else
- ne->value->type=type;
- }
- return(1);
- }
-
- ASN1_OBJECT *X509_NAME_ENTRY_get_object(ne)
- X509_NAME_ENTRY *ne;
- {
- if (ne == NULL) return(NULL);
- return(ne->object);
- }
-
- ASN1_STRING *X509_NAME_ENTRY_get_data(ne)
- X509_NAME_ENTRY *ne;
- {
- if (ne == NULL) return(NULL);
- return(ne->value);
}
--- 129,136 ----
}
return(1);
err:
! if (nenew != NULL)
X509_NAME_ENTRY_free(ne);
return(0);
}

View File

@ -1,8 +0,0 @@
If you specify a SSLv2 cipher, and the mode is SSLv23 and the server
can talk SSLv3, it will claim there is no cipher since you should be
using SSLv3.
When tracing debug stuff, remember BIO_s_socket() is different to
BIO_s_connect().
BSD/OS assember is not working

BIN
ms/.rnd Normal file

Binary file not shown.

View File

@ -1,93 +0,0 @@
echo=off
echo start testenc
path=..\ms;%path%
set ssleay=%1%
set input=..\ms\testenc.bat
set tmp1=..\ms\cipher.out
set out1=..\ms\clear.out
set cmp=perl ..\ms\cmp.pl
call tenc.bat enc
if errorlevel 1 goto err
call tenc.bat rc4
if errorlevel 1 goto err
call tenc.bat des-cfb
if errorlevel 1 goto err
call tenc.bat des-ede-cfb
if errorlevel 1 goto err
call tenc.bat des-ede3-cfb
if errorlevel 1 goto err
call tenc.bat des-ofb
if errorlevel 1 goto err
call tenc.bat des-ede-ofb
if errorlevel 1 goto err
call tenc.bat des-ede3-ofb
if errorlevel 1 goto err
call tenc.bat des-ecb
if errorlevel 1 goto err
call tenc.bat des-ede
if errorlevel 1 goto err
call tenc.bat des-ede3
if errorlevel 1 goto err
call tenc.bat des-cbc
if errorlevel 1 goto err
call tenc.bat des-ede-cbc
if errorlevel 1 goto err
call tenc.bat des-ede3-cbc
if errorlevel 1 goto err
call tenc.bat idea-ecb
if errorlevel 1 goto err
call tenc.bat idea-cfb
if errorlevel 1 goto err
call tenc.bat idea-ofb
if errorlevel 1 goto err
call tenc.bat idea-cbc
if errorlevel 1 goto err
call tenc.bat rc2-ecb
if errorlevel 1 goto err
call tenc.bat rc2-cfb
if errorlevel 1 goto err
call tenc.bat rc2-ofb
if errorlevel 1 goto err
call tenc.bat rc2-cbc
if errorlevel 1 goto err
call tenc.bat bf-ecb
if errorlevel 1 goto err
call tenc.bat bf-cfb
if errorlevel 1 goto err
call tenc.bat bf-ofb
if errorlevel 1 goto err
call tenc.bat bf-cbc
if errorlevel 1 goto err
echo OK
del %out1%
del %tmp1%
:err

View File

@ -1,93 +0,0 @@
echo=off
echo start testenc
path=..\ms;%path%
set ssleay=%1%
set input=..\ms\testenc.bat
set tmp1=..\ms\cipher.out
set out1=..\ms\clear.out
set cmp=perl ..\ms\cmp.pl
call tenc.bat enc
if errorlevel 1 goto err
call tenc.bat rc4
if errorlevel 1 goto err
call tenc.bat des-cfb
if errorlevel 1 goto err
call tenc.bat des-ede-cfb
if errorlevel 1 goto err
call tenc.bat des-ede3-cfb
if errorlevel 1 goto err
call tenc.bat des-ofb
if errorlevel 1 goto err
call tenc.bat des-ede-ofb
if errorlevel 1 goto err
call tenc.bat des-ede3-ofb
if errorlevel 1 goto err
call tenc.bat des-ecb
if errorlevel 1 goto err
call tenc.bat des-ede
if errorlevel 1 goto err
call tenc.bat des-ede3
if errorlevel 1 goto err
call tenc.bat des-cbc
if errorlevel 1 goto err
call tenc.bat des-ede-cbc
if errorlevel 1 goto err
call tenc.bat des-ede3-cbc
if errorlevel 1 goto err
call tenc.bat idea-ecb
if errorlevel 1 goto err
call tenc.bat idea-cfb
if errorlevel 1 goto err
call tenc.bat idea-ofb
if errorlevel 1 goto err
call tenc.bat idea-cbc
if errorlevel 1 goto err
call tenc.bat rc2-ecb
if errorlevel 1 goto err
call tenc.bat rc2-cfb
if errorlevel 1 goto err
call tenc.bat rc2-ofb
if errorlevel 1 goto err
call tenc.bat rc2-cbc
if errorlevel 1 goto err
call tenc.bat bf-ecb
if errorlevel 1 goto err
call tenc.bat bf-cfb
if errorlevel 1 goto err
call tenc.bat bf-ofb
if errorlevel 1 goto err
call tenc.bat bf-cbc
if errorlevel 1 goto err
echo OK
del %out1%
del %tmp1%
:err

View File

View File

View File

@ -1,440 +0,0 @@
/* ssl/bio_ssl.c */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include "bio.h"
#include "err.h"
#include "ssl.h"
#ifndef NOPROTO
static int ssl_write(BIO *h,char *buf,int num);
static int ssl_read(BIO *h,char *buf,int size);
static int ssl_puts(BIO *h,char *str);
static long ssl_ctrl(BIO *h,int cmd,long arg1,char *arg2);
static int ssl_new(BIO *h);
static int ssl_free(BIO *data);
#else
static int ssl_write();
static int ssl_read();
static int ssl_puts();
static long ssl_ctrl();
static int ssl_new();
static int ssl_free();
#endif
static BIO_METHOD methods_sslp=
{
BIO_TYPE_SSL,"ssl",
ssl_write,
ssl_read,
ssl_puts,
NULL, /* ssl_gets, */
ssl_ctrl,
ssl_new,
ssl_free,
};
BIO_METHOD *BIO_f_ssl()
{
return(&methods_sslp);
}
static int ssl_new(bi)
BIO *bi;
{
bi->init=0;
bi->ptr=NULL; /* The SSL structure */
bi->flags=0;
return(1);
}
static int ssl_free(a)
BIO *a;
{
if (a == NULL) return(0);
if (a->ptr != NULL) SSL_shutdown((SSL *)a->ptr);
if (a->shutdown)
{
if (a->init) SSL_free((SSL *)a->ptr);
a->init=0;
a->flags=0;
a->ptr=NULL;
}
return(1);
}
static int ssl_read(b,out,outl)
BIO *b;
char *out;
int outl;
{
int ret=1,dr,dw;
int inflags,outflags;
SSL *ssl;
int retry_reason=0;
if (out == NULL) return(0);
ssl=(SSL *)b->ptr;
inflags=outflags=b->flags;
dr=inflags&BIO_FLAGS_PROTOCOL_DELAYED_READ;
dw=inflags&BIO_FLAGS_PROTOCOL_DELAYED_WRITE;
outflags&= ~(BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY|
BIO_FLAGS_PROTOCOL_DELAYED_WRITE|
BIO_FLAGS_PROTOCOL_DELAYED_READ);
if (!SSL_is_init_finished(ssl))
{
ret=SSL_do_handshake(ssl);
#if 0
if (ret > 0)
{
outflags=(BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY|
BIO_FLAGS_PROTOCOL_DELAYED_READ|dw);
ret= -1;
goto end;
}
#endif
}
if (ret > 0)
ret=SSL_read(ssl,out,outl);
switch (SSL_get_error(ssl,ret))
{
case SSL_ERROR_NONE:
if (ret <= 0) break;
if (dw)
outflags|=(BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY);
break;
case SSL_ERROR_WANT_READ:
outflags=(BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY|
BIO_FLAGS_PROTOCOL_DELAYED_READ|dw);
break;
case SSL_ERROR_WANT_WRITE:
outflags=(BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY|
BIO_FLAGS_PROTOCOL_DELAYED_READ|dw);
break;
case SSL_ERROR_WANT_X509_LOOKUP:
outflags=(BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY|
BIO_FLAGS_PROTOCOL_DELAYED_READ|dw);
retry_reason=BIO_RR_SSL_X509_LOOKUP;
break;
case SSL_ERROR_WANT_CONNECT:
outflags=(BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY|
BIO_FLAGS_PROTOCOL_DELAYED_READ|dw);
retry_reason=BIO_RR_CONNECT;
break;
case SSL_ERROR_SYSCALL:
case SSL_ERROR_SSL:
case SSL_ERROR_ZERO_RETURN:
default:
break;
}
b->retry_reason=retry_reason;
b->flags=outflags;
return(ret);
}
static int ssl_write(b,out,outl)
BIO *b;
char *out;
int outl;
{
int ret,dr,dw;
int inflags,outflags,retry_reason=0;
SSL *ssl;
if (out == NULL) return(0);
ssl=(SSL *)b->ptr;
inflags=outflags=b->flags;
dr=inflags&BIO_FLAGS_PROTOCOL_DELAYED_READ;
dw=inflags&BIO_FLAGS_PROTOCOL_DELAYED_WRITE;
outflags&= ~(BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY|
BIO_FLAGS_PROTOCOL_DELAYED_WRITE|
BIO_FLAGS_PROTOCOL_DELAYED_READ);
ret=SSL_do_handshake(ssl);
if (ret > 0)
ret=SSL_write(ssl,out,outl);
switch (SSL_get_error(ssl,ret))
{
case SSL_ERROR_NONE:
if (ret <= 0) break;
if (dr)
outflags|=(BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY);
break;
case SSL_ERROR_WANT_WRITE:
outflags=(BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY|
BIO_FLAGS_PROTOCOL_DELAYED_WRITE|dr);
break;
case SSL_ERROR_WANT_READ:
outflags=(BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY|
BIO_FLAGS_PROTOCOL_DELAYED_WRITE|dr);
break;
case SSL_ERROR_WANT_X509_LOOKUP:
outflags=(BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY|
BIO_FLAGS_PROTOCOL_DELAYED_WRITE|dr);
retry_reason=BIO_RR_SSL_X509_LOOKUP;
break;
case SSL_ERROR_WANT_CONNECT:
outflags=(BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY|
BIO_FLAGS_PROTOCOL_DELAYED_READ|dw);
retry_reason=BIO_RR_CONNECT;
case SSL_ERROR_SYSCALL:
case SSL_ERROR_SSL:
default:
break;
}
b->retry_reason=retry_reason;
b->flags=outflags;
return(ret);
}
static long ssl_ctrl(b,cmd,num,ptr)
BIO *b;
int cmd;
long num;
char *ptr;
{
SSL **sslp,*ssl;
BIO *dbio,*bio;
long ret=1;
ssl=(SSL *)b->ptr;
switch (cmd)
{
case BIO_CTRL_RESET:
SSL_shutdown(ssl);
if (ssl->handshake_func == ssl->method->ssl_connect)
SSL_set_connect_state(ssl);
else if (ssl->handshake_func == ssl->method->ssl_accept)
SSL_set_accept_state(ssl);
SSL_clear(ssl);
if (b->next_bio != NULL)
ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
else if (ssl->rbio != NULL)
ret=BIO_ctrl(ssl->rbio,cmd,num,ptr);
else
ret=1;
break;
case BIO_CTRL_EOF:
case BIO_CTRL_INFO:
ret=0;
break;
case BIO_C_SSL_MODE:
if (num) /* client mode */
SSL_set_connect_state(ssl);
else
SSL_set_accept_state(ssl);
break;
case BIO_C_SET_SSL:
ssl_free(b);
b->shutdown=(int)num;
b->ptr=ptr;
ssl=(SSL *)ptr;
bio=SSL_get_rbio(ssl);
if (bio != NULL)
{
if (b->next_bio != NULL)
BIO_push(bio,b->next_bio);
b->next_bio=bio;
}
b->init=1;
break;
case BIO_C_GET_SSL:
if (ptr != NULL)
{
sslp=(SSL **)ptr;
*sslp=ssl;
}
break;
case BIO_CTRL_GET_CLOSE:
ret=b->shutdown;
break;
case BIO_CTRL_SET_CLOSE:
b->shutdown=(int)num;
break;
case BIO_CTRL_WPENDING:
ret=BIO_ctrl(ssl->wbio,cmd,num,ptr);
break;
case BIO_CTRL_PENDING:
ret=SSL_pending(ssl);
if (ret == 0)
ret=BIO_pending(ssl->rbio);
break;
case BIO_CTRL_FLUSH:
BIO_clear_retry_flags(b);
ret=BIO_ctrl(ssl->wbio,cmd,num,ptr);
BIO_copy_next_retry(b);
break;
case BIO_CTRL_PUSH:
if (b->next_bio != NULL)
{
SSL_set_bio(ssl,b->next_bio,b->next_bio);
b->next_bio->references++;
}
break;
case BIO_CTRL_POP:
/* ugly bit of a hack */
if (ssl->rbio != ssl->wbio) /* we are in trouble :-( */
{
BIO_free_all(ssl->wbio);
}
ssl->wbio=NULL;
ssl->rbio=NULL;
break;
case BIO_C_DO_STATE_MACHINE:
BIO_clear_retry_flags(b);
b->retry_reason=0;
ret=(int)SSL_do_handshake(ssl);
switch (SSL_get_error(ssl,ret))
{
case SSL_ERROR_WANT_READ:
BIO_set_flags(b,
BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY);
break;
case SSL_ERROR_WANT_WRITE:
BIO_set_flags(b,
BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY);
break;
case SSL_ERROR_WANT_CONNECT:
BIO_set_flags(b,
BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY);
b->retry_reason=b->next_bio->retry_reason;
break;
default:
break;
}
break;
case BIO_CTRL_DUP:
dbio=(BIO *)ptr;
if (dbio->ptr != NULL)
SSL_free((SSL *)dbio->ptr);
dbio->ptr=(char *)SSL_dup(ssl);
ret=(dbio->ptr != NULL);
break;
default:
return(0);
break;
}
return(ret);
}
static int ssl_puts(bp,str)
BIO *bp;
char *str;
{
int n,ret;
n=strlen(str);
ret=BIO_write(bp,str,n);
return(ret);
}
BIO *BIO_new_ssl(ctx,client)
SSL_CTX *ctx;
int client;
{
BIO *ret;
SSL *ssl;
if ((ret=BIO_new(BIO_f_ssl())) == NULL)
return(NULL);
if ((ssl=SSL_new(ctx)) == NULL)
{
BIO_free(ret);
return(NULL);
}
if (client)
SSL_set_connect_state(ssl);
else
SSL_set_accept_state(ssl);
BIO_set_ssl(ret,ssl,BIO_CLOSE);
return(ret);
}
int BIO_ssl_copy_session_id(t,f)
BIO *t,*f;
{
t=BIO_find_type(t,BIO_TYPE_SSL);
f=BIO_find_type(f,BIO_TYPE_SSL);
if ((t == NULL) || (f == NULL))
return(0);
if ((t->ptr == NULL) || (f->ptr == NULL))
return(0);
SSL_copy_session_id((SSL *)t->ptr,(SSL *)f->ptr);
return(1);
}

View File

@ -1,6 +0,0 @@
#!/bin/sh
for i in BUILD_SSLV23 BUILD_SSLV2 BUILD_SSLV3 BUILD_SSL_COMMON BUILD_SSL_BIO BUILD_SSL_OPTIONAL
do
time gcc -D$i -o $i.o -c -I. -I../include -O3 -fomit-frame-pointer ssl.c
done

View File

@ -1,10 +0,0 @@
Must do a
SSL_init_eay_ciphers();
before calls to SSL_CTX_new()
SSL_CTX *SSL_CTX_new(void ) -> SSL_CTX *SSL_CTX_new(SSL_METHOD *meth);
SSL_CTX_set_cert_verify_cb -> the callback is now
int callback(char *arg,SSL *s,X509 *xs,STACK *cert_chain);
where the 'cert_chain' has been added.

402
ssl/zz
View File

@ -1,402 +0,0 @@
/* ssl/s23_srvr.c */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* 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 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 acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR OR 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.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include "buffer.h"
#include "rand.h"
#include "objects.h"
#include "evp.h"
#include "ssl_locl.h"
#define BREAK break
#ifndef NOPROTO
int ssl23_get_client_hello(SSL *s);
#else
int ssl23_get_client_hello();
#endif
static SSL_METHOD *ssl23_get_server_method(ver)
int ver;
{
if (ver == 2)
return(SSLv2_server_method());
else if (ver == 3)
return(SSLv3_server_method());
else
return(NULL);
}
SSL_METHOD *SSLv23_server_method()
{
static int init=1;
static SSL_METHOD SSLv23_server_data;
if (init)
{
init=0;
memcpy((char *)&SSLv23_server_data,
(char *)sslv23_base_method(),sizeof(SSL_METHOD));
SSLv23_server_data.ssl_accept=ssl23_accept;
SSLv23_server_data.get_ssl_method=ssl23_get_server_method;
}
return(&SSLv23_server_data);
}
int ssl23_accept(s)
SSL *s;
{
BUF_MEM *buf;
unsigned long Time=time(NULL);
void (*cb)()=NULL;
int ret= -1;
int new_state,state;
RAND_seed((unsigned char *)&Time,sizeof(Time));
ERR_clear_error();
errno=0;
if (s->info_callback != NULL)
cb=s->info_callback;
else if (s->ctx->info_callback != NULL)
cb=s->ctx->info_callback;
if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s);
s->in_handshake++;
for (;;)
{
state=s->state;
switch(s->state)
{
case SSL_ST_BEFORE:
case SSL_ST_ACCEPT:
case SSL_ST_BEFORE|SSL_ST_ACCEPT:
case SSL_ST_OK|SSL_ST_ACCEPT:
if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);
s->version=3;
s->type=SSL_ST_ACCEPT;
if (s->init_buf == NULL)
{
if ((buf=BUF_MEM_new()) == NULL)
{
ret= -1;
goto end;
}
if (!BUF_MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))
{
ret= -1;
goto end;
}
s->init_buf=buf;
}
ssl3_init_finished_mac(s);
s->state=SSL23_ST_SR_CLNT_HELLO_A;
s->ctx->sess_accept++;
s->init_num=0;
break;
case SSL23_ST_SR_CLNT_HELLO_A:
case SSL23_ST_SR_CLNT_HELLO_B:
s->shutdown=0;
ret=ssl23_get_client_hello(s);
if (ret >= 0) cb=NULL;
goto end;
break;
default:
SSLerr(SSL_F_SSL23_ACCEPT,SSL_R_UNKNOWN_STATE);
ret= -1;
goto end;
/* break; */
}
if ((cb != NULL) && (s->state != state))
{
new_state=s->state;
s->state=state;
cb(s,SSL_CB_ACCEPT_LOOP,1);
s->state=new_state;
}
}
end:
if (cb != NULL)
cb(s,SSL_CB_ACCEPT_EXIT,ret);
s->in_handshake--;
return(ret);
}
int ssl23_get_client_hello(s)
SSL *s;
{
char buf[8];
unsigned char *p,*d,*dd;
unsigned int i;
unsigned int csl,sil,cl;
int n=0,j;
BIO *bbio;
int type=0;
/* read the initial header */
if (s->state == SSL23_ST_SR_CLNT_HELLO_A)
{
if (!ssl3_setup_buffers(s)) goto err;
n=ssl23_read_bytes(s,7);
if (n != 7) return(n);
p=s->packet;
memcpy(buf,p,n);
if ((p[0] & 0x80) && (p[2] == SSL2_MT_CLIENT_HELLO))
{
/* SSLv2 header */
if ((p[3] == 0x00) && (p[4] == 0x02))
{
/* SSLv2 */
type=1;
}
else if ((p[3] == SSL3_VERSION_MAJOR) &&
(p[4] == SSL3_VERSION_MINOR))
{
/* SSLv3 */
s->state=SSL23_ST_SR_CLNT_HELLO_B;
}
}
else if ((p[0] == SSL3_RT_HANDSHAKE) &&
(p[1] == SSL3_VERSION_MAJOR) &&
(p[2] == SSL3_VERSION_MINOR) &&
(p[5] == SSL3_MT_CLIENT_HELLO))
{
/* true SSLv3 */
type=3;
}
}
if (s->state == SSL23_ST_SR_CLNT_HELLO_B)
{
/* we have a SSLv3 in a SSLv2 header */
type=2;
p=s->packet;
n=((p[0]&0x7f)<<8)|p[1];
if (n > (1024*4))
{
SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO,SSL_R_RECORD_TOO_LARGE);
goto err;
}
j=ssl23_read_bytes(s,n+2);
if (j <= 0) return(j);
ssl3_finish_mac(s,&(s->packet[2]),s->packet_length-2);
p=s->packet;
p+=5;
n2s(p,csl);
n2s(p,sil);
n2s(p,cl);
d=(unsigned char *)s->init_buf->data;
if ((csl+sil+cl+11) != s->packet_length)
{
SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO,SSL_R_RECORD_LENGTH_MISMATCH);
goto err;
}
*(d++)=SSL3_VERSION_MAJOR;
*(d++)=SSL3_VERSION_MINOR;
/* lets populate the random area */
/* get the chalenge_length */
i=(cl > SSL3_RANDOM_SIZE)?SSL3_RANDOM_SIZE:cl;
memset(d,0,SSL3_RANDOM_SIZE);
memcpy(&(d[SSL3_RANDOM_SIZE-i]),&(p[csl+sil]),i);
d+=SSL3_RANDOM_SIZE;
/* no session-id reuse */
*(d++)=0;
/* ciphers */
j=0;
dd=d;
d+=2;
for (i=0; i<csl; i+=3)
{
if (p[i] != 0) continue;
*(d++)=p[i+1];
*(d++)=p[i+2];
j+=2;
}
s2n(j,dd);
/* compression */
*(d++)=1;
*(d++)=0;
i=(d-(unsigned char *)s->init_buf->data);
/* get the data reused from the init_buf */
s->s3->tmp.reuse_message=1;
s->s3->tmp.message_type=SSL3_MT_CLIENT_HELLO;
s->s3->tmp.message_size=i;
}
if (type == 1)
{
/* we are talking sslv2 */
/* we need to clean up the SSLv3 setup and put in the
* sslv2 stuff. */
if (s->s2 == NULL)
{
if (!ssl2_new(s))
goto err;
}
else
ssl2_clear(s);
if (s->s3 != NULL) ssl3_free(s);
if (!BUF_MEM_grow(s->init_buf,
SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER))
{
goto err;
}
s->state=SSL2_ST_GET_CLIENT_HELLO_A;
if (s->ctx->options & SSL_OP_MSIE_SSLV2_RSA_PADDING)
s->s2->ssl2_rollback=0;
else
s->s2->ssl2_rollback=1;
/* setup the 5 bytes we have read so we get them from
* the sslv2 buffer */
s->rstate=SSL_ST_READ_HEADER;
s->packet_length=n;
s->packet= &(s->s2->rbuf[0]);
memcpy(s->packet,buf,n);
s->s2->rbuf_left=n;
s->s2->rbuf_offs=0;
s->method=SSLv2_server_method();
s->handshake_func=s->method->ssl_accept;
}
if ((type == 2) || (type == 3))
{
/* we have sslv3 */
if (s->bbio == NULL)
{
bbio=BIO_new(BIO_f_buffer());
if (bbio == NULL)
goto err;
s->bbio=bbio;
}
else
bbio=s->bbio;
BIO_reset(bbio);
if (!BIO_set_write_buffer_size(bbio,16*1024))
goto err;
s->wbio=BIO_push(bbio,s->wbio);
/* we are in this state */
s->state=SSL3_ST_SR_CLNT_HELLO_A;
if (type == 3)
{
/* put the 'n' bytes we have read into the input buffer
* for SSLv3 */
s->rstate=SSL_ST_READ_HEADER;
s->packet_length=n;
s->packet= &(s->s3->rbuf.buf[0]);
memcpy(s->packet,buf,n);
s->s3->rbuf.left=n;
s->s3->rbuf.offset=0;
}
else
{
s->packet_length=0;
s->s3->rbuf.left=0;
s->s3->rbuf.offset=0;
}
s->method=SSLv3_server_method();
s->handshake_func=s->method->ssl_accept;
}
if ((type < 1) || (type > 3))
{
/* bad, very bad */
SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO,SSL_R_UNKNOWN_PROTOCOL);
goto err;
}
s->init_num=0;
return(SSL_accept(s));
err:
return(-1);
}

BIN
test/.rnd Normal file

Binary file not shown.

Binary file not shown.

View File