Compare commits

..

97 Commits

Author SHA1 Message Date
cvs2svn
2b61c27287 This commit was manufactured by cvs2svn to create tag 'OpenSSL_0_9_7-beta5'. 2002-12-06 00:37:21 +00:00
Richard Levitte
aaf7b47abe The news were not updated in time... 2002-12-06 00:37:20 +00:00
Richard Levitte
af0b30e77c Tagging has been done, time to move the branch to 0.9.7-beta6
development.
2002-12-05 23:10:01 +00:00
Richard Levitte
9494e3cc40 Time to release 0.9.7-beta5.
The tag will be OpenSSL_0_9_7-beta5.
2002-12-05 22:51:19 +00:00
Richard Levitte
a272f7eb08 Merge in relevant changes from the OpenSSL 0.9.6h release. 2002-12-05 21:51:57 +00:00
Richard Levitte
b3dd9f3bb5 SSL_CERT_FILE should be used in place of the system default file, not as
a first alternative to try
2002-12-05 21:07:35 +00:00
Richard Levitte
bb9104f0ee Corrected DJGPP patch 2002-12-05 20:50:52 +00:00
Richard Levitte
ae0b7667a9 Make sure to implement the cryptodev engine only when /dev/crypto exists.
PR: 385
2002-12-05 10:17:08 +00:00
Richard Levitte
fabf7d3a67 make update 2002-12-05 01:55:24 +00:00
Richard Levitte
54307ce955 Allow users to modify /MD to /MT.
PR: 380
2002-12-05 01:35:09 +00:00
Richard Levitte
2589b74fd8 Make sure using SSL_CERT_FILE actually works, and has priority over system defaults.
PR: 376
2002-12-05 01:20:59 +00:00
Richard Levitte
d9090acdfb If an application supports static locks, it MUST support dynamic locks as
well to be able to use the CHIL engine.
PR: 281
2002-12-05 00:57:20 +00:00
Richard Levitte
72951df799 Only check for a result buffer if the allocated string is a prompt string.
PR: 381
2002-12-05 00:04:40 +00:00
Richard Levitte
a9b41af71c Do not implement RC4 stuff if RC4 is disabled. Concequently, apply the same
rule for SHA stuff.
PR: 381
2002-12-04 22:54:13 +00:00
Richard Levitte
a0ed612fef gethostname() is more a BSD feature than an XOPEN one.
PR: 379
2002-12-04 22:48:10 +00:00
Richard Levitte
afdec73ca5 Correct a few typos that I introduced after applying DJGPP patches. 2002-12-04 19:13:49 +00:00
Lutz Jänicke
2e70cb6506 Missing "("
Submitted by: Christian Hohnstaedt <chohnstaedt@innominate.com>
Reviewed by:
PR:
2002-12-04 13:29:14 +00:00
Richard Levitte
1794904a4a DJGPP patches.
PR: 347
2002-12-04 09:54:31 +00:00
Richard Levitte
fd28279a62 Add support for x86_64.
PR: 348
2002-12-04 09:17:54 +00:00
Richard Levitte
6b27ae1d94 A gcc 3.0 bug is triggered by our code. Add a section about it in PROBLEMS.
PR: 375
2002-12-04 08:24:28 +00:00
Dr. Stephen Henson
a6ee8fe26a Make ASN1_TYPE_get() work for V_ASN1_NULL type. 2002-12-04 00:50:20 +00:00
Dr. Stephen Henson
e758ce69a3 Typo in X509v3_get_ext_by_critical 2002-12-04 00:14:00 +00:00
Dr. Stephen Henson
38b085902f In asn1_d2i_read_bio, don't assume BIO_read will
return the requested number of bytes when reading
content.
2002-12-03 23:49:12 +00:00
Richard Levitte
27498a3330 EXIT() may mean return(). That's confusing, so let's have it really mean
exit() in whatever way works for the intended platform, and define
OPENSSL_EXIT() to have the old meaning (the name is of course because
it's only used in the openssl program)
2002-12-03 16:34:28 +00:00
Richard Levitte
49cd4b7316 Make CRYPTO_cleanse() independent of endianness. 2002-12-03 16:07:03 +00:00
Richard Levitte
a067cba35b Windows CE updates, contributed by Steven Reddie <smr@essemer.com.au> 2002-12-03 14:21:32 +00:00
Richard Levitte
2905015c6e Merge from HEAD 2002-12-02 22:56:43 +00:00
Richard Levitte
610abd4c52 define USE_SOCKETS so sys/param.h gets included (and thusly, MAXHOSTNAMELEN
gets defined).
PR: 371
2002-12-02 22:49:12 +00:00
Richard Levitte
ddc6ea162f Merge from HEAD 2002-12-02 02:40:42 +00:00
Richard Levitte
b8804bf15d Small bugfix: even when r == d, we need to adjust r and q.
PR: 366
2002-12-01 02:17:30 +00:00
Richard Levitte
d03ad453a5 EXIT() needs to be in a function that returns int. 2002-12-01 01:23:39 +00:00
Richard Levitte
3f71579dfc Redo the VAX assembler version of bn_div_words().
PR: 366
2002-12-01 00:49:45 +00:00
Richard Levitte
f217439ee2 Remove incorrect assert.
PR: 360
2002-11-29 15:18:28 +00:00
Richard Levitte
9d8f3cfb7f Make it so all names mentioned in the NAME section of each manpage becomes a
symlink to said manpage.
PR: 242
2002-11-29 15:01:12 +00:00
cvs2svn
d5c79928ef This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_7-stable'.
2002-11-29 15:01:01 +00:00
Richard Levitte
db3758923b Make it so all names mentioned in the NAME section of each manpage becomes a
symlink to said manpage.
PR: 242
2002-11-29 15:00:58 +00:00
Richard Levitte
37529750e2 Correct some names. 2002-11-29 14:22:05 +00:00
Richard Levitte
5e4a75e79f Correct some names. 2002-11-29 14:21:54 +00:00
Richard Levitte
c9ea7400b4 A few more memset()s converted to OPENSSL_cleanse().
I *think* I got them all covered by now, bu please, if you find any more,
tell me and I'll correct it.
PR: 343
2002-11-29 11:31:51 +00:00
Richard Levitte
43d601641f A few more memset()s converted to OPENSSL_cleanse().
I *think* I got them all covered by now, bu please, if you find any more,
tell me and I'll correct it.
PR: 343
2002-11-29 11:30:45 +00:00
Richard Levitte
9fa15b6ff8 Have all tests use EXIT() to exit rather than exit(), since the latter doesn't
always give the expected result on some platforms.
2002-11-28 18:57:30 +00:00
Richard Levitte
55f78baf32 Have all tests use EXIT() to exit rather than exit(), since the latter doesn't
always give the expected result on some platforms.
2002-11-28 18:54:30 +00:00
Richard Levitte
9c44ebc1e2 Make sure EXIT() can always be used as one statement. 2002-11-28 18:52:24 +00:00
Richard Levitte
6c359479d7 Make sure EXIT() can always be used as one statement. 2002-11-28 18:52:14 +00:00
Richard Levitte
75e3026a14 Cleanse memory using the new OPENSSL_cleanse() function.
I've covered all the memset()s I felt safe modifying, but may have missed some.
2002-11-28 08:09:03 +00:00
Richard Levitte
4579924b7e Cleanse memory using the new OPENSSL_cleanse() function.
I've covered all the memset()s I felt safe modifying, but may have missed some.
2002-11-28 08:04:36 +00:00
Richard Levitte
2047bda6fb Unused variable removed. 2002-11-27 13:40:41 +00:00
Richard Levitte
406c6f6962 Extra ; removed. 2002-11-27 13:40:11 +00:00
Richard Levitte
0a3af9a403 Add OPENSSL_cleanse() to help cleanse memory and avoid certain compiler
and linker optimizations.
PR: 343
2002-11-27 12:25:52 +00:00
cvs2svn
3a08cf3bfb This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_7-stable'.
2002-11-27 12:24:10 +00:00
Richard Levitte
df29cc8f77 Add OPENSSL_cleanse() to help cleanse memory and avoid certain compiler
and linker optimizations.
PR: 343
2002-11-27 12:24:05 +00:00
Richard Levitte
ec7164133d I forgot that @ in strings must be escaped in Perl 2002-11-26 15:27:05 +00:00
Richard Levitte
8826087a97 I forgot that @ in strings must be escaped in Perl 2002-11-26 15:26:55 +00:00
Richard Levitte
8aa09a245c The logic in the main signing and verifying functions to check lengths was
incorrect.  Fortunately, there is a second check that's correct, when adding
the pads.
PR: 355
2002-11-26 11:14:45 +00:00
Richard Levitte
ba8ad07490 The logic in the main signing and verifying functions to check lengths was
incorrect.  Fortunately, there is a second check that's correct, when adding
the pads.
PR: 355
2002-11-26 11:14:32 +00:00
Richard Levitte
17582ccf21 Heimdal isn't really supported right now. Say so, and offer a possibility
to force the use of Heimdal, and warn if that's used.
PR: 346
2002-11-26 10:11:58 +00:00
Richard Levitte
a5fd84de41 Heimdal isn't really supported right now. Say so, and offer a possibility
to force the use of Heimdal, and warn if that's used.
PR: 346
2002-11-26 10:11:25 +00:00
Richard Levitte
31be2daa06 Small bugfixes to the KSSL implementation.
PR: 349
2002-11-26 10:09:36 +00:00
Richard Levitte
dc199cfaa2 Small bugfixes to the KSSL implementation.
PR: 349
2002-11-26 10:09:28 +00:00
Richard Levitte
de868e0b94 Heimdal isn't really supported right now. Say so, and offer a possibility
to force the use of Heimdal, and warn if that's used.
PR: 346
2002-11-26 09:19:17 +00:00
Richard Levitte
b81ef84227 Heimdal isn't really supported right now. Say so, and offer a possibility
to force the use of Heimdal, and warn if that's used.
PR: 346
2002-11-26 09:19:06 +00:00
Bodo Möller
15994b034a rename some functions to improve consistency
Submitted by: Sheueling Chang
2002-11-23 18:16:09 +00:00
Bodo Möller
922fa76e26 add a comment 2002-11-22 09:25:35 +00:00
Richard Levitte
19aa370573 Disable this module if OPENSSL_NO_SOCK is defined. 2002-11-22 08:45:20 +00:00
Richard Levitte
d020e701bb Typo. OPENSSL_NO_ECDH, not NO_OPENSSL_ECDH 2002-11-22 08:40:34 +00:00
Richard Levitte
91203a9482 Mention a current showstopper 2002-11-21 22:39:25 +00:00
Richard Levitte
364ff369d1 Mention a current showstopper 2002-11-21 22:39:08 +00:00
Bodo Möller
134fea9d0f avoid uninitialized memory read
Submitted by: Nils Larsch
2002-11-20 14:14:45 +00:00
Bodo Möller
8a09b3866a avoid uninitialized memory read
Submitted by: Nils Larsch
2002-11-20 10:55:27 +00:00
Bodo Möller
137445140b Make ec_GFp_simple_point_get_affine_coordinates() faster
for Montgomery representations.

Submitted by: Sheueling Chang, Bodo Moeller
2002-11-20 10:53:33 +00:00
Lutz Jänicke
6a8afe2201 Fix bug introduced by the attempt to fix client side external session
caching (#288): now internal caching failed (#351):
Make sure, that cipher_id is set before comparing.
Submitted by:
Reviewed by:
PR: 288 (and 351)
2002-11-20 10:48:58 +00:00
Lutz Jänicke
a153c46d7f Fix bug introduced by the attempt to fix client side external session
caching (#288): now internal caching failed (#351):
Make sure, that cipher_id is set before comparing.
Submitted by:
Reviewed by:
PR: 288 (and 351)
2002-11-20 10:46:35 +00:00
Bodo Möller
1e3a9b650f allocate bio_err before memory debugging is enabled to avoid memory leaks
(we can't release it before the CRYPTO_mem_leaks() call!)

Submitted by: Nils Larsch
2002-11-19 11:56:05 +00:00
Bodo Möller
8faad520ae allocate bio_err before memory debugging is enabled to avoid memory leaks
(we can't release it before the CRYPTO_mem_leaks() call!)

Submitted by: Nils Larsch
2002-11-19 11:55:47 +00:00
Richard Levitte
229dc0ee31 It works on my laptop :-). 2002-11-19 11:52:24 +00:00
Richard Levitte
fcc764639d make update 2002-11-19 11:40:14 +00:00
Richard Levitte
8f89ae928b We now work with the development of 0.9.7 beta 5. 2002-11-19 11:37:03 +00:00
Richard Levitte
821385ad00 Fix an unsigned/signed mismatch. 2002-11-19 11:28:28 +00:00
Richard Levitte
25ff76d565 Update STATUS 2002-11-19 09:34:34 +00:00
Richard Levitte
9801fb61d0 Add news items for 0.9.6h and expand on the 0.9.7 news as well. 2002-11-18 23:58:24 +00:00
Richard Levitte
20199ca809 Document the addition of certificate pairs. 2002-11-18 23:56:15 +00:00
Richard Levitte
711f1a3c26 Add the ASN.1 structures and functions for CertificatePair, which is
defined as follows (according to X.509_4thEditionDraftV6.pdf):

CertificatePair ::= SEQUENCE {
	forward		[0]	Certificate OPTIONAL,
	reverse		[1]	Certificate OPTIONAL,
	-- at least one of the pair shall be present -- }

The only thing I'm not sure about is if it's implicit or explicit tags
that I should count on.  For now, I'm thinking explicit, but will
gladly stand corrected.

Also implement the PEM functions to read and write certificate pairs,
and defined the PEM tag as "CERTIFICATE PAIR".

This needed to be defined, mostly for the sake of the LDAP attribute
crossCertificatePair, but may prove useful elsewhere as well.
2002-11-18 23:54:27 +00:00
Richard Levitte
a1d85309ee Determine HZ exactly as in apps/speed.c. 2002-11-18 23:06:36 +00:00
Richard Levitte
450cee5c3a Make sure sysconf exists (it doesn't in the VMS C RTL lesser than version 7). 2002-11-18 23:05:39 +00:00
Bodo Möller
a2dbcf3644 remove redundant functions 2002-11-18 14:37:35 +00:00
Bodo Möller
4663355496 use consistent order of function definitions 2002-11-18 14:33:39 +00:00
Bodo Möller
9dc610495c fix memory leak in memory debuggin code ...
Submitted by: Nils Larsch
2002-11-18 14:00:42 +00:00
Bodo Möller
055076cd4f allocate bio_err before memory debugging is enabled to avoid memory leaks
(we can't release it before the CRYPTO_mem_leaks() call!)

Submitted by: Nils Larsch
2002-11-18 13:37:40 +00:00
Richard Levitte
527497a722 A variable of type time_t is supposed to be a time measurement starting at
Epoch.  offset isn't such a measurement, so let's stop pretend it is.
2002-11-18 13:04:08 +00:00
Lutz Jänicke
32d21c1ef6 Better workaround to the "=head1 NAME OPTIONS" pod2latex problem:
NAME OPTIONS are a subset of OPTIONS, so just make it =head2!
Submitted by:
Reviewed by:
PR: 333
2002-11-18 08:15:45 +00:00
Richard Levitte
629b58b7fb Make it possible to build for more than one CPU.
Clarify what the CE tests do.
2002-11-17 19:48:19 +00:00
Richard Levitte
7fa2a81d34 Ignore openssl.pc. This way, there's no risk that I'll add it again :-). 2002-11-17 08:07:08 +00:00
Richard Levitte
7f66ab4783 Adding openssl.pc to the repository was a mistake,
since it's generated.
2002-11-17 08:05:38 +00:00
Richard Levitte
95189389b0 Add the file openssl.pc that I forgot a while ago. 2002-11-17 08:03:24 +00:00
Richard Levitte
b4b82ab465 I forgot this is compiled in test/, not crypto/ec/... 2002-11-16 10:10:39 +00:00
Richard Levitte
89618e7a0d We don't want TARGETCPU expanded here. 2002-11-16 09:42:04 +00:00
Richard Levitte
b87e2576b5 Mention ActiveState Perl much earlier in INSTALL.WCE. 2002-11-15 22:54:13 +00:00
169 changed files with 864 additions and 482 deletions

27
CHANGES
View File

@@ -4,6 +4,16 @@
Changes between 0.9.6h and 0.9.7 [XX xxx 2002]
*) In asn1_d2i_read_bio() repeatedly call BIO_read() until all content
octets have been read, EOF or an error occurs. Without this change
some truncated ASN1 structures will not produce an error.
[Steve Henson]
*) Disable Heimdal support, since it hasn't been fully implemented.
Still give the possibility to force the use of Heimdal, but with
warnings and a request that patches get sent to openssl-dev.
[Richard Levitte]
*) Add the VC-CE target, introduce the WINCE sysname, and add
INSTALL.WCE and appropriate conditionals to make it build.
[Steven Reddie <smr@essemer.com.au> via Richard Levitte]
@@ -1778,7 +1788,22 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k
*) Clean old EAY MD5 hack from e_os.h.
[Richard Levitte]
Changes between 0.9.6g and 0.9.6h [xx XXX xxxx]
Changes between 0.9.6g and 0.9.6h [5 Dec 2002]
*) New function OPENSSL_cleanse(), which is used to cleanse a section of
memory from it's contents. This is done with a counter that will
place alternating values in each byte. This can be used to solve
two issues: 1) the removal of calls to memset() by highly optimizing
compilers, and 2) cleansing with other values than 0, since those can
be read through on certain media, for example a swap space on disk.
[Geoff Thorpe]
*) Bugfix: client side session caching did not work with external caching,
because the session->cipher setting was not restored when reloading
from the external cache. This problem was masked, when
SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG (part of SSL_OP_ALL) was set.
(Found by Steve Haslam <steve@araqnid.ddts.net>.)
[Lutz Jaenicke]
*) Fix client_certificate (ssl/s2_clnt.c): The permissible total
length of the REQUEST-CERTIFICATE message is 18 .. 34, not 17 .. 33.

View File

@@ -392,6 +392,7 @@ my %table=(
"linux-s390", "gcc:-DB_ENDIAN -DTERMIO -DNO_ASM -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"linux-s390x", "gcc:-DB_ENDIAN -DTERMIO -DNO_ASM -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"linux-ia64", "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR:asm/ia64.o:::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"linux-x86_64", "gcc:-DL_ENDIAN -DNO_ASM ::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"NetBSD-sparc", "gcc:-DTERMIOS -O3 -fomit-frame-pointer -mv8 -Wall -DB_ENDIAN::(unknown):::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"NetBSD-m68", "gcc:-DTERMIOS -O3 -fomit-frame-pointer -Wall -DB_ENDIAN::(unknown):::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"NetBSD-x86", "gcc:-DTERMIOS -O3 -fomit-frame-pointer -m486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
@@ -973,6 +974,17 @@ else
my ($lresolv, $lpath, $lext);
if ($withargs{"krb5-flavor"} =~ /^[Hh]eimdal$/)
{
die "Sorry, Heimdal is currently not supported\n";
}
##### HACK to force use of Heimdal.
##### WARNING: Since we don't really have adequate support for Heimdal,
##### using this will break the build. You'll have to make
##### changes to the source, and if you do, please send
##### patches to openssl-dev@openssl.org
if ($withargs{"krb5-flavor"} =~ /^force-[Hh]eimdal$/)
{
warn "Heimdal isn't really supported. Your build WILL break\n";
warn "If you fix the problems, please send a patch to openssl-dev\@openssl.org\n";
$withargs{"krb5-dir"} = "/usr/heimdal"
if $withargs{"krb5-dir"} eq "";
$withargs{"krb5-lib"} = "-L".$withargs{"krb5-dir"}.

2
FAQ
View File

@@ -66,7 +66,7 @@ OpenSSL - Frequently Asked Questions
* Which is the current version of OpenSSL?
The current version is available from <URL: http://www.openssl.org>.
OpenSSL 0.9.6g was released on August 9, 2002.
OpenSSL 0.9.6h was released on December 5, 2002.
In addition to the current stable release, you can also access daily
snapshots of the OpenSSL development version at <URL:

View File

@@ -12,12 +12,14 @@
latest versions of DJGPP, GCC, BINUTILS, BASH, etc. This package
requires that PERL and BC also be installed.
All of these can be obtained from the usual DJGPP mirror sites, such as
"ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp". You also need to have
the WATT-32 networking package installed before you try to compile
openssl. This can be obtained from "http://www.bgnett.no/~giva/". The
Makefile assumes that the WATT-32 code is in directory "watt32" under
/dev/env/DJDIR.
All of these can be obtained from the usual DJGPP mirror sites, such
as "ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp". You also need to
have the WATT-32 networking package installed before you try to compile
openssl. This can be obtained from "http://www.bgnett.no/~giva/".
The Makefile assumes that the WATT-32 code is in the directory
specified by the environment variable WATT_ROOT. If you have watt-32
in directory "watt32" under your main DJGPP directory, specify
WATT_ROOT="/dev/env/DJDIR/watt32".
To compile openssl, start your BASH shell. Then configure for DOS by
running "./Configure" with appropriate arguments. The basic syntax for

View File

@@ -11,6 +11,9 @@
You also need Perl for Win32. You will need ActiveState Perl, available
from http://www.activestate.com/ActivePerl.
Windows CE support in OpenSSL relies on wcecompat. All Windows CE specific
issues should be directed to www.essemer.com.au.
The C Runtime Library implementation for Windows CE that is included with
Microsoft eMbedded Visual C++ 3.0 is incomplete and in some places
incorrect. wcecompat plugs the holes and tries to bring the Windows CE

View File

@@ -597,7 +597,8 @@ rehash.time: certs
@(OPENSSL="`pwd`/apps/openssl"; OPENSSL_DEBUG_MEMORY=on; \
export OPENSSL OPENSSL_DEBUG_MEMORY; \
LD_LIBRARY_PATH="`pwd`"; DYLD_LIBRARY_PATH="`pwd`"; SHLIB_PATH="`pwd`"; LIBPATH="`pwd`"; \
if [ "$(PLATFORM)" != "Cygwin" ]; then PATH="`pwd`:$$PATH"; fi; \
if [ "$(PLATFORM)" == "DJGPP" ]; then PATH="`pwd`\;$$PATH"; \
elif [ "$(PLATFORM)" != "Cygwin" ]; then PATH="`pwd`:$$PATH"; fi; \
export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH LIBPATH PATH; \
$(PERL) tools/c_rehash certs)
touch rehash.time
@@ -608,7 +609,8 @@ tests: rehash
@(cd test && echo "testing..." && \
$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' TESTS='${TESTS}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on tests );
@LD_LIBRARY_PATH="`pwd`"; DYLD_LIBRARY_PATH="`pwd`"; SHLIB_PATH="`pwd`"; LIBPATH="`pwd`"; \
if [ "$(PLATFORM)" != "Cygwin" ]; then PATH="`pwd`:$$PATH"; fi; \
if [ "$(PLATFORM)" == "DJGPP" ]; then PATH="`pwd`\;$$PATH"; \
elif [ "$(PLATFORM)" != "Cygwin" ]; then PATH="`pwd`:$$PATH"; fi; \
export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH LIBPATH PATH; \
apps/openssl version -a
@@ -770,22 +772,30 @@ install_docs:
for i in doc/apps/*.pod; do \
fn=`basename $$i .pod`; \
if [ "$$fn" = "config" ]; then sec=5; else sec=1; fi; \
echo "installing man$$sec/`basename $$i .pod`.$$sec"; \
echo "installing man$$sec/$$fn.$$sec"; \
(cd `$(PERL) util/dirname.pl $$i`; \
sh -c "$$pod2man \
--section=$$sec --center=OpenSSL \
--release=$(VERSION) `basename $$i`") \
> $(INSTALL_PREFIX)$(MANDIR)/man$$sec/`basename $$i .pod`.$$sec; \
> $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$$sec; \
$(PERL) util/extract-names.pl < $$i | grep -v "^$$fn" | \
while read n; do \
util/point.sh $$fn.$$sec $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$n.$$sec; \
done; \
done; \
for i in doc/crypto/*.pod doc/ssl/*.pod; do \
fn=`basename $$i .pod`; \
if [ "$$fn" = "des_modes" ]; then sec=7; else sec=3; fi; \
echo "installing man$$sec/`basename $$i .pod`.$$sec"; \
echo "installing man$$sec/$$fn.$$sec"; \
(cd `$(PERL) util/dirname.pl $$i`; \
sh -c "$$pod2man \
--section=$$sec --center=OpenSSL \
--release=$(VERSION) `basename $$i`") \
> $(INSTALL_PREFIX)$(MANDIR)/man$$sec/`basename $$i .pod`.$$sec; \
> $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$$sec; \
$(PERL) util/extract-names.pl < $$i | grep -v "^$$fn" | \
while read n; do \
util/point.sh $$fn.$$sec $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$n.$$sec; \
done; \
done
# DO NOT DELETE THIS LINE -- make depend depends on it.

4
NEWS
View File

@@ -17,7 +17,8 @@
a separate distribution.
o New elliptic curve library section.
o New AES (Rijndael) library section.
o Support for new platforms: Windows CE, Tandem OSS, A/UX, AIX 64-bit
o Support for new platforms: Windows CE, Tandem OSS, A/UX, AIX 64-bit,
Linux x86_64
o Extended support for some platforms: VxWorks
o Enhanced support for shared libraries.
o Support for pkg-config.
@@ -42,6 +43,7 @@
o SSL/TLS: allow optional cipher choice according to server's preference.
o SSL/TLS: allow server to explicitly set new session ids.
o SSL/TLS: support Kerberos cipher suites (RFC2712).
Only supports MIT Kerberos for now.
o SSL/TLS: allow more precise control of renegotiations and sessions.
o SSL/TLS: add callback to retrieve SSL/TLS messages.
o SSL/TLS: support AES cipher suites (RFC3268).

View File

@@ -46,3 +46,19 @@ scripts use the same name for output and input files, which means different
will interfere with each other and lead to test failure.
The solution is simple for now: don't run parallell make when testing.
* Bugs in gcc 3.0 triggered
According to a problem report, there are bugs in gcc 3.0 that are
triggered by some of the code in OpenSSL, more specifically in
PEM_get_EVP_CIPHER_INFO(). The triggering code is the following:
header+=11;
if (*header != '4') return(0); header++;
if (*header != ',') return(0); header++;
What happens is that gcc might optimize a little too agressively, and
you end up with an extra incrementation when *header != '4'.
We recommend that you upgrade gcc to as high a 3.x version as you can.

2
README
View File

@@ -1,5 +1,5 @@
OpenSSL 0.9.7-beta4 19 Nov 2002
OpenSSL 0.9.7-beta5 5 Dec 2002
Copyright (c) 1998-2002 The OpenSSL Project
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson

22
STATUS
View File

@@ -1,14 +1,16 @@
OpenSSL STATUS Last modified at
______________ $Date: 2002/11/19 09:34:38 $
______________ $Date: 2002/12/05 22:51:17 $
DEVELOPMENT STATE
o OpenSSL 0.9.8: Under development...
o OpenSSL 0.9.7-beta5: Released on December 5th, 2002
o OpenSSL 0.9.7-beta4: Released on November 19th, 2002
o OpenSSL 0.9.7-beta3: Released on July 30th, 2002
o OpenSSL 0.9.7-beta2: Released on June 16th, 2002
o OpenSSL 0.9.7-beta1: Released on June 1st, 2002
o OpenSSL 0.9.7-beta3: Released on July 30th, 2002
o OpenSSL 0.9.7-beta2: Released on June 16th, 2002
o OpenSSL 0.9.7-beta1: Released on June 1st, 2002
o OpenSSL 0.9.6h: Released on December 5th, 2002
o OpenSSL 0.9.6g: Released on August 9th, 2002
o OpenSSL 0.9.6f: Released on August 8th, 2002
o OpenSSL 0.9.6e: Released on July 30th, 2002
@@ -32,6 +34,18 @@
o BN_mod_mul verification fails for mips3-sgi-irix
unless configured with no-asm
o [2002-11-21]
PR 343 mentions that scrubbing memory with 'memset(ptr, 0, n)' may
be optimized away in modern compilers. This is definitely not good
and needs to be fixed immediately. The formula to use is presented
in:
http://online.securityfocus.com/archive/82/297918/2002-10-27/2002-11-02/0
The problem report that mentions this is:
https://www.aet.TU-Cottbus.DE/rt2/Ticket/Display.html?id=343
AVAILABLE PATCHES
o

25
TABLE
View File

@@ -3375,6 +3375,31 @@ $shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
$ranlib =
$arflags =
*** linux-x86_64
$cc = gcc
$cflags = -DL_ENDIAN -DNO_ASM
$unistd =
$thread_cflag = -D_REENTRANT
$sys_id =
$lflags = -ldl
$bn_ops = SIXTY_FOUR_BIT_LONG
$bn_obj =
$des_obj =
$bf_obj =
$md5_obj =
$sha1_obj =
$cast_obj =
$rc4_obj =
$rmd160_obj =
$rc5_obj =
$dso_scheme = dlfcn
$shared_target= linux-shared
$shared_cflag = -fPIC
$shared_ldflag =
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
$ranlib =
$arflags =
*** ncr-scde
$cc = cc
$cflags = -O6 -Xa -Hoff=BEHAVED -686 -Hwide -Hiw

View File

@@ -148,7 +148,8 @@ $(PROGRAM): progs.h $(E_OBJ) $(PROGRAM).o $(DLIBCRYPTO) $(DLIBSSL)
fi
-(cd ..; OPENSSL="`pwd`/apps/openssl"; export OPENSSL; \
LIBPATH="`pwd`"; LD_LIBRARY_PATH="`pwd`"; DYLD_LIBRARY_PATH="`pwd`"; SHLIB_PATH="`pwd`"; \
if [ "$(PLATFORM)" != "Cygwin" ]; then PATH="`pwd`:$$PATH"; fi; \
if [ "$(PLATFORM)" == "DJGPP" ]; then PATH="`pwd`\;$$PATH"; \
elif [ "$(PLATFORM)" != "Cygwin" ]; then PATH="`pwd`:$$PATH"; fi; \
export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH LIBPATH PATH; \
$(PERL) tools/c_rehash certs)

View File

@@ -615,7 +615,7 @@ int password_callback(char *buf, int bufsiz, int verify,
if (buff)
{
memset(buff,0,(unsigned int)bufsiz);
OPENSSL_cleanse(buff,(unsigned int)bufsiz);
OPENSSL_free(buff);
}
@@ -625,13 +625,13 @@ int password_callback(char *buf, int bufsiz, int verify,
{
BIO_printf(bio_err, "User interface error\n");
ERR_print_errors(bio_err);
memset(buf,0,(unsigned int)bufsiz);
OPENSSL_cleanse(buf,(unsigned int)bufsiz);
res = 0;
}
if (ok == -2)
{
BIO_printf(bio_err,"aborted!\n");
memset(buf,0,(unsigned int)bufsiz);
OPENSSL_cleanse(buf,(unsigned int)bufsiz);
res = 0;
}
UI_free(ui);

View File

@@ -332,6 +332,6 @@ end:
if (osk != NULL) sk_free(osk);
OBJ_cleanup();
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}

View File

@@ -706,7 +706,7 @@ bad:
}
pkey = load_key(bio_err, keyfile, keyform, 0, key, e,
"CA private key");
if (key) memset(key,0,strlen(key));
if (key) OPENSSL_cleanse(key,strlen(key));
if (pkey == NULL)
{
/* load_key() has already printed an appropriate message */
@@ -1647,7 +1647,7 @@ err:
NCONF_free(conf);
OBJ_cleanup();
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
static void lookup_fail(char *name, char *tag)

View File

@@ -203,6 +203,6 @@ end:
if (ssl != NULL) SSL_free(ssl);
if (STDout != NULL) BIO_free_all(STDout);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}

View File

@@ -377,7 +377,7 @@ end:
X509_STORE_free(store);
}
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
static X509_CRL *load_crl(char *infile, int format)

View File

@@ -280,7 +280,7 @@ end:
if (crl != NULL) X509_CRL_free(crl);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
/*

View File

@@ -356,7 +356,7 @@ int MAIN(int argc, char **argv)
end:
if (buf != NULL)
{
memset(buf,0,BUFSIZE);
OPENSSL_cleanse(buf,BUFSIZE);
OPENSSL_free(buf);
}
if (in != NULL) BIO_free(in);
@@ -365,7 +365,7 @@ end:
if(sigbuf) OPENSSL_free(sigbuf);
if (bmd != NULL) BIO_free(bmd);
apps_shutdown();
EXIT(err);
OPENSSL_EXIT(err);
}
int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,

View File

@@ -333,6 +333,6 @@ end:
if (out != NULL) BIO_free_all(out);
if (dh != NULL) DH_free(dh);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
#endif

View File

@@ -519,7 +519,7 @@ end:
if (out != NULL) BIO_free_all(out);
if (dh != NULL) DH_free(dh);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
/* dh_cb is identical to dsa_cb in apps/dsaparam.c */

View File

@@ -314,6 +314,6 @@ end:
if(passin) OPENSSL_free(passin);
if(passout) OPENSSL_free(passout);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
#endif

View File

@@ -372,7 +372,7 @@ end:
if (out != NULL) BIO_free_all(out);
if (dsa != NULL) DSA_free(dsa);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
static void MS_CALLBACK dsa_cb(int p, int n, void *arg)

View File

@@ -481,9 +481,9 @@ bad:
* bug picked up by
* Larry J. Hughes Jr. <hughes@indiana.edu> */
if (str == strbuf)
memset(str,0,SIZE);
OPENSSL_cleanse(str,SIZE);
else
memset(str,0,strlen(str));
OPENSSL_cleanse(str,strlen(str));
}
if ((hiv != NULL) && !set_hex(hiv,iv,sizeof iv))
{
@@ -586,7 +586,7 @@ end:
if (b64 != NULL) BIO_free(b64);
if(pass) OPENSSL_free(pass);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
int set_hex(char *in, unsigned char *out, int size)

View File

@@ -516,5 +516,5 @@ end:
sk_pop_free(post_cmds, identity);
if (bio_out != NULL) BIO_free_all(bio_out);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}

View File

@@ -122,5 +122,5 @@ int MAIN(int argc, char **argv)
}
}
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}

View File

@@ -198,7 +198,7 @@ end:
if (out != NULL) BIO_free_all(out);
if (dh != NULL) DH_free(dh);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
static void MS_CALLBACK dh_cb(int p, int n, void *arg)

View File

@@ -246,6 +246,6 @@ end:
if (dsa != NULL) DSA_free(dsa);
if(passout) OPENSSL_free(passout);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
#endif

View File

@@ -258,7 +258,7 @@ err:
if (ret != 0)
ERR_print_errors(bio_err);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
static void MS_CALLBACK genrsa_cb(int p, int n, void *arg)

View File

@@ -102,7 +102,7 @@ int MAIN(int argc, char **argv)
BIO_printf (bio_err, "-in file input file\n");
BIO_printf (bio_err, "-out file output file\n");
BIO_printf (bio_err, "-toseq output NS Sequence file\n");
EXIT(1);
OPENSSL_EXIT(1);
}
if (infile) {
@@ -162,6 +162,6 @@ end:
BIO_free_all(out);
NETSCAPE_CERT_SEQUENCE_free(seq);
EXIT(ret);
OPENSSL_EXIT(ret);
}

View File

@@ -899,7 +899,7 @@ end:
SSL_CTX_free(ctx);
}
EXIT(ret);
OPENSSL_EXIT(ret);
}
static int add_ocsp_cert(OCSP_REQUEST **req, X509 *cert, X509 *issuer,

View File

@@ -358,7 +358,7 @@ end:
BIO_free(bio_err);
bio_err=NULL;
}
EXIT(ret);
OPENSSL_EXIT(ret);
}
#define LIST_STANDARD_COMMANDS "list-standard-commands"

View File

@@ -292,7 +292,7 @@ err:
if (out)
BIO_free_all(out);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
@@ -505,6 +505,6 @@ err:
int MAIN(int argc, char **argv)
{
fputs("Program not available.\n", stderr)
EXIT(1);
OPENSSL_EXIT(1);
}
#endif

View File

@@ -696,7 +696,7 @@ int MAIN(int argc, char **argv)
if(passin) OPENSSL_free(passin);
if(passout) OPENSSL_free(passout);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
int dump_certs_keys_p12 (BIO *out, PKCS12 *p12, char *pass,

View File

@@ -301,5 +301,5 @@ end:
if (in != NULL) BIO_free(in);
if (out != NULL) BIO_free_all(out);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}

View File

@@ -213,5 +213,5 @@ err:
if (out)
BIO_free_all(out);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}

View File

@@ -1075,7 +1075,7 @@ end:
if (dsa_params != NULL) DSA_free(dsa_params);
#endif
apps_shutdown();
EXIT(ex);
OPENSSL_EXIT(ex);
}
static int make_REQ(X509_REQ *req, EVP_PKEY *pkey, char *subj, int attribs,

View File

@@ -369,7 +369,7 @@ end:
if(passin) OPENSSL_free(passin);
if(passout) OPENSSL_free(passout);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
#else /* !OPENSSL_NO_RSA */

View File

@@ -908,16 +908,16 @@ end:
if (con != NULL) SSL_free(con);
if (con2 != NULL) SSL_free(con2);
if (ctx != NULL) SSL_CTX_free(ctx);
if (cbuf != NULL) { memset(cbuf,0,BUFSIZZ); OPENSSL_free(cbuf); }
if (sbuf != NULL) { memset(sbuf,0,BUFSIZZ); OPENSSL_free(sbuf); }
if (mbuf != NULL) { memset(mbuf,0,BUFSIZZ); OPENSSL_free(mbuf); }
if (cbuf != NULL) { OPENSSL_cleanse(cbuf,BUFSIZZ); OPENSSL_free(cbuf); }
if (sbuf != NULL) { OPENSSL_cleanse(sbuf,BUFSIZZ); OPENSSL_free(sbuf); }
if (mbuf != NULL) { OPENSSL_cleanse(mbuf,BUFSIZZ); OPENSSL_free(mbuf); }
if (bio_c_out != NULL)
{
BIO_free(bio_c_out);
bio_c_out=NULL;
}
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}

View File

@@ -868,7 +868,7 @@ end:
bio_s_out=NULL;
}
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
static void print_stats(BIO *bio, SSL_CTX *ssl_ctx)
@@ -1184,7 +1184,7 @@ err:
BIO_printf(bio_s_out,"CONNECTION CLOSED\n");
if (buf != NULL)
{
memset(buf,0,bufsize);
OPENSSL_cleanse(buf,bufsize);
OPENSSL_free(buf);
}
if (ret >= 0)

View File

@@ -642,7 +642,7 @@ end:
tm_ctx=NULL;
}
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
/***********************************************************************

View File

@@ -273,7 +273,7 @@ end:
if (out != NULL) BIO_free_all(out);
if (x != NULL) SSL_SESSION_free(x);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
static SSL_SESSION *load_sess_id(char *infile, int format)

View File

@@ -1729,7 +1729,7 @@ end:
DSA_free(dsa_key[i]);
#endif
apps_shutdown();
EXIT(mret);
OPENSSL_EXIT(mret);
}
static void print_message(const char *s, long num, int length)

View File

@@ -295,5 +295,5 @@ end:
EVP_PKEY_free(pkey);
if(passin) OPENSSL_free(passin);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}

View File

@@ -232,7 +232,7 @@ end:
sk_X509_pop_free(untrusted, X509_free);
sk_X509_pop_free(trusted, X509_free);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
static int check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain, STACK_OF(X509) *tchain, int purpose, ENGINE *e)

View File

@@ -200,5 +200,5 @@ int MAIN(int argc, char **argv)
if (dir) printf("%s\n",SSLeay_version(SSLEAY_DIR));
end:
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}

View File

@@ -1017,7 +1017,7 @@ end:
sk_ASN1_OBJECT_pop_free(reject, ASN1_OBJECT_free);
if (passin) OPENSSL_free(passin);
apps_shutdown();
EXIT(ret);
OPENSSL_EXIT(ret);
}
static ASN1_INTEGER *load_serial(char *CAfile, char *serialfile, int create)

1
config
View File

@@ -585,6 +585,7 @@ EOF
arm*-*-linux2) OUT="linux-elf-arm" ;;
s390-*-linux2) OUT="linux-s390" ;;
s390x-*-linux?) OUT="linux-s390x" ;;
x86_64-*-linux?) OUT="linux-x86_64" ;;
*-*-linux2) OUT="linux-elf"
if [ "$GCCVER" -gt 28 ]; then
if grep '^model.*Pentium' /proc/cpuinfo >/dev/null ; then

View File

@@ -36,8 +36,8 @@ GENERAL=Makefile README crypto-lib.com install.com
LIB= $(TOP)/libcrypto.a
SHARED_LIB= libcrypto$(SHLIB_EXT)
LIBSRC= cryptlib.c mem.c mem_dbg.c cversion.c ex_data.c tmdiff.c cpt_err.c ebcdic.c uid.c o_time.c
LIBOBJ= cryptlib.o mem.o mem_dbg.o cversion.o ex_data.o tmdiff.o cpt_err.o ebcdic.o uid.o o_time.o
LIBSRC= cryptlib.c mem.c mem_clr.c mem_dbg.c cversion.c ex_data.c tmdiff.c cpt_err.c ebcdic.c uid.c o_time.c
LIBOBJ= cryptlib.o mem.o mem_clr.o mem_dbg.o cversion.o ex_data.o tmdiff.o cpt_err.o ebcdic.o uid.o o_time.o
SRC= $(LIBSRC)
@@ -193,6 +193,10 @@ mem.o: ../include/openssl/err.h ../include/openssl/lhash.h
mem.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
mem.o: ../include/openssl/safestack.h ../include/openssl/stack.h
mem.o: ../include/openssl/symhacks.h cryptlib.h mem.c
mem_clr.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
mem_clr.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
mem_clr.o: ../include/openssl/safestack.h ../include/openssl/stack.h
mem_clr.o: ../include/openssl/symhacks.h mem_clr.c
mem_dbg.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
mem_dbg.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
mem_dbg.o: ../include/openssl/err.h ../include/openssl/lhash.h

View File

@@ -226,13 +226,18 @@ static int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb)
ASN1err(ASN1_F_ASN1_D2I_BIO,ERR_R_MALLOC_FAILURE);
goto err;
}
i=BIO_read(in,&(b->data[len]),want);
if (i <= 0)
while (want > 0)
{
ASN1err(ASN1_F_ASN1_D2I_BIO,ASN1_R_NOT_ENOUGH_DATA);
goto err;
i=BIO_read(in,&(b->data[len]),want);
if (i <= 0)
{
ASN1err(ASN1_F_ASN1_D2I_BIO,
ASN1_R_NOT_ENOUGH_DATA);
goto err;
}
len+=i;
want -= i;
}
len+=i;
}
off+=(int)c.slen;
if (eos <= 0)

View File

@@ -204,9 +204,9 @@ int ASN1_sign(int (*i2d)(), X509_ALGOR *algor1, X509_ALGOR *algor2,
err:
EVP_MD_CTX_cleanup(&ctx);
if (buf_in != NULL)
{ memset((char *)buf_in,0,(unsigned int)inl); OPENSSL_free(buf_in); }
{ OPENSSL_cleanse((char *)buf_in,(unsigned int)inl); OPENSSL_free(buf_in); }
if (buf_out != NULL)
{ memset((char *)buf_out,0,outll); OPENSSL_free(buf_out); }
{ OPENSSL_cleanse((char *)buf_out,outll); OPENSSL_free(buf_out); }
return(outl);
}
@@ -287,8 +287,8 @@ int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2,
err:
EVP_MD_CTX_cleanup(&ctx);
if (buf_in != NULL)
{ memset((char *)buf_in,0,(unsigned int)inl); OPENSSL_free(buf_in); }
{ OPENSSL_cleanse((char *)buf_in,(unsigned int)inl); OPENSSL_free(buf_in); }
if (buf_out != NULL)
{ memset((char *)buf_out,0,outll); OPENSSL_free(buf_out); }
{ OPENSSL_cleanse((char *)buf_out,outll); OPENSSL_free(buf_out); }
return(outl);
}

View File

@@ -62,7 +62,7 @@
int ASN1_TYPE_get(ASN1_TYPE *a)
{
if (a->value.ptr != NULL)
if ((a->value.ptr != NULL) || (a->type == V_ASN1_NULL))
return(a->type);
else
return(0);

View File

@@ -103,7 +103,7 @@ int ASN1_verify(int (*i2d)(), X509_ALGOR *a, ASN1_BIT_STRING *signature,
EVP_VerifyInit_ex(&ctx,type, NULL);
EVP_VerifyUpdate(&ctx,(unsigned char *)buf_in,inl);
memset(buf_in,0,(unsigned int)inl);
OPENSSL_cleanse(buf_in,(unsigned int)inl);
OPENSSL_free(buf_in);
if (EVP_VerifyFinal(&ctx,(unsigned char *)signature->data,
@@ -153,7 +153,7 @@ int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a, ASN1_BIT_STRING *signat
EVP_VerifyInit_ex(&ctx,type, NULL);
EVP_VerifyUpdate(&ctx,(unsigned char *)buf_in,inl);
memset(buf_in,0,(unsigned int)inl);
OPENSSL_cleanse(buf_in,(unsigned int)inl);
OPENSSL_free(buf_in);
if (EVP_VerifyFinal(&ctx,(unsigned char *)signature->data,

View File

@@ -187,7 +187,7 @@ int i2d_RSA_NET(const RSA *a, unsigned char **pp, int (*cb)(), int sgckey)
i2d_NETSCAPE_PKEY(pkey,&zz);
/* Wipe the private key encoding */
memset(pkey->private_key->data, 0, rsalen);
OPENSSL_cleanse(pkey->private_key->data, rsalen);
if (cb == NULL)
cb=EVP_read_pw_string;
@@ -206,7 +206,7 @@ int i2d_RSA_NET(const RSA *a, unsigned char **pp, int (*cb)(), int sgckey)
}
EVP_BytesToKey(EVP_rc4(),EVP_md5(),NULL,buf,i,1,key,NULL);
memset(buf,0,256);
OPENSSL_cleanse(buf,256);
/* Encrypt private key in place */
zz = enckey->enckey->digest->data;
@@ -294,7 +294,7 @@ static RSA *d2i_RSA_NET_2(RSA **a, ASN1_OCTET_STRING *os,
}
EVP_BytesToKey(EVP_rc4(),EVP_md5(),NULL,buf,i,1,key,NULL);
memset(buf,0,256);
OPENSSL_cleanse(buf,256);
EVP_CIPHER_CTX_init(&ctx);
EVP_DecryptInit_ex(&ctx,EVP_rc4(),NULL, key,NULL);

View File

@@ -68,8 +68,8 @@ static int pkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it)
if(operation == ASN1_OP_FREE_PRE) {
PKCS8_PRIV_KEY_INFO *key = (PKCS8_PRIV_KEY_INFO *)*pval;
if (key->pkey->value.octet_string)
memset(key->pkey->value.octet_string->data,
0, key->pkey->value.octet_string->length);
OPENSSL_cleanse(key->pkey->value.octet_string->data,
key->pkey->value.octet_string->length);
}
return 1;
}

View File

@@ -63,6 +63,8 @@
#include <string.h>
#include <stdlib.h>
#include "../e_os.h"
#ifdef OPENSSL_NO_BF
int main(int argc, char *argv[])
{
@@ -275,7 +277,7 @@ int main(int argc, char *argv[])
else
ret=test();
exit(ret);
EXIT(ret);
return(0);
}

View File

@@ -1,4 +1,4 @@
.title vax_bn_mul_add_word unsigned multiply & add, 32*32+32+32=>64
.title vax_bn_mul_add_words unsigned multiply & add, 32*32+32+32=>64
;
; w.j.m. 15-jan-1999
;
@@ -59,7 +59,7 @@ w=16 ;(AP) w by value (input)
movl r6,r0 ; return c
ret
.title vax_bn_mul_word unsigned multiply & add, 32*32+32=>64
.title vax_bn_mul_words unsigned multiply & add, 32*32+32=>64
;
; w.j.m. 15-jan-1999
;
@@ -172,146 +172,148 @@ n=12 ;(AP) n by value (input)
; }
;
; Using EDIV would be very easy, if it didn't do signed calculations.
; Therefore, som extra things have to happen around it. The way to
; handle that is to shift all operands right one step (basically dividing
; them by 2) and handle the different cases depending on what the lowest
; bit of each operand was.
; Any time, any of the input numbers are signed, there are problems,
; usually with integer overflow, at which point it returns useless
; data (the quotient gets the value of l, and the remainder becomes 0).
;
; To start with, let's define the following:
; If it was just for the dividend, it would be very easy, just divide
; it by 2 (unsigned), do the division, multiply the resulting quotient
; and remainder by 2, add the bit that was dropped when dividing by 2
; to the remainder, and do some adjustment so the remainder doesn't
; end up larger than the divisor. This method works as long as the
; divisor is positive, so we'll keep that (with a small adjustment)
; as the main method.
; For some cases when the divisor is negative (from EDIV's point of
; view, i.e. when the highest bit is set), dividing the dividend by
; 2 isn't enough, it needs to be divided by 4. Furthermore, the
; divisor needs to be divided by 2 (unsigned) as well, to avoid more
; problems with the sign. In this case, a little extra fiddling with
; the remainder is required.
;
; a' = l & 1
; a2 = <h,l> >> 1 # UNSIGNED shift!
; b' = d & 1
; b2 = d >> 1 # UNSIGNED shift!
; So, the simplest way to handle this is always to divide the dividend
; by 4, and to divide the divisor by 2 if it's highest bit is set.
; After EDIV has been used, the quotient gets multiplied by 4 if the
; original divisor was positive, otherwise 2. The remainder, oddly
; enough, is *always* multiplied by 4.
;
; Now, use EDIV to calculate a quotient and a remainder:
; The routine ends with comparing the resulting remainder with the
; original divisor and if the remainder is larger, subtract the
; original divisor from it, and increase the quotient by 1. This is
; done until the remainder is smaller than the divisor.
;
; q'' = a2/b2
; r'' = a2 - q''*b2
; The complete algorithm looks like this:
;
; If b' is 0, the quotient is already correct, we just need to adjust the
; remainder:
; d' = d
; l' = l & 3
; [h,l] = [h,l] >> 2
; [q,r] = floor([h,l] / d) # This is the EDIV operation
; if (q < 0) q = -q # I doubt this is necessary any more
;
; if (b' == 0)
; r' = r >> 30
; if (d' >= 0) q = q << 1
; q = q << 1
; r = (r << 2) + l'
;
; if (d' < 0)
; {
; r = 2*r'' + a'
; q = q''
; }
;
; If b' is 1, we need to do other adjustements. The first thought is the
; following (note that r' will not always have the right value, but an
; adjustement follows further down):
;
; if (b' == 1)
; {
; q' = q''
; r' = a - q'*b
;
; However, one can note the folowing relationship:
;
; r'' = a2 - q''*b2
; => 2*r'' = 2*a2 - 2*q''*b2
; = { a = 2*a2 + a', b = 2*b2 + b' = 2*b2 + 1,
; q' = q'' }
; = a - a' - q'*(b - 1)
; = a - q'*b - a' + q'
; = r' - a' + q'
; => r' = 2*r'' - q' + a'
;
; This enables us to use r'' instead of discarding and calculating another
; modulo:
;
; if (b' == 1)
; {
; q' = q''
; r' = (r'' << 1) - q' + a'
;
; Now, all we have to do is adjust r', because it might be < 0:
;
; while (r' < 0)
; [r',r] = [r',r] - q
; while ([r',r] < 0)
; {
; r' = r' + b
; q' = q' - 1
; [r',r] = [r',r] + d
; q = q - 1
; }
; }
;
; return q'
; while ([r',r] >= d)
; {
; [r',r] = [r',r] - d
; q = q + 1
; }
;
; return q
h=4 ;(AP) h by value (input)
l=8 ;(AP) l by value (input)
d=12 ;(AP) d by value (input)
;aprim=r5
;a2=r6
;a20=r6
;a21=r7
;bprim=r8
;b2=r9
;qprim=r10 ; initially used as q''
;rprim=r11 ; initially used as r''
;lprim=r5
;rprim=r6
;dprim=r7
.psect code,nowrt
.entry bn_div_words,^m<r2,r3,r4,r5,r6,r7,r8,r9,r10,r11>
.entry bn_div_words,^m<r2,r3,r4,r5,r6,r7>
movl l(ap),r2
movl h(ap),r3
movl d(ap),r4
movl #0,r5
movl #0,r8
movl #0,r0
; movl #0,r1
bicl3 #^XFFFFFFFC,r2,r5 ; l' = l & 3
bicl3 #^X00000003,r2,r2
rotl #-1,r2,r6 ; a20 = l >> 1 (almost)
rotl #-1,r3,r7 ; a21 = h >> 1 (almost)
rotl #-1,r4,r9 ; b2 = d >> 1 (almost)
bicl3 #^XFFFFFFFC,r3,r6
bicl3 #^X00000003,r3,r3
addl r6,r2
rotl #-2,r2,r2 ; l = l >> 2
rotl #-2,r3,r3 ; h = h >> 2
movl #0,r6
movl r4,r7 ; d' = d
tstl r6
bgeq 1$
xorl2 #^X80000000,r6 ; fixup a20 so highest bit is 0
incl r5 ; a' = 1
1$:
tstl r7
bgeq 2$
xorl2 #^X80000000,r6 ; fixup a20 so highest bit is 1,
; since that's what was lowest in a21
xorl2 #^X80000000,r7 ; fixup a21 so highest bit is 1
2$:
tstl r9
tstl r4
beql 666$ ; Uh-oh, the divisor is 0...
bgtr 3$
xorl2 #^X80000000,r9 ; fixup b2 so highest bit is 0
incl r8 ; b' = 1
3$:
tstl r9
bneq 4$ ; if b2 is 0, we know that b' is 1
tstl r3
bneq 666$ ; if higher half isn't 0, we overflow
movl r2,r10 ; otherwise, we have our result
brb 42$ ; This is a success, really.
4$:
ediv r9,r6,r10,r11
bgtr 1$
rotl #-1,r4,r4 ; If d is negative, shift it right.
bicl2 #^X80000000,r4 ; Since d is then a large number, the
; lowest bit is insignificant
; (contradict that, and I'll fix the problem!)
1$:
ediv r4,r2,r2,r3 ; Do the actual division
tstl r2
bgeq 3$
mnegl r2,r2 ; if q < 0, negate it
3$:
tstl r7
blss 4$
ashl #1,r2,r2 ; q = q << 1
4$:
ashl #1,r2,r2 ; q = q << 1
rotl #2,r3,r3 ; r = r << 2
bicl3 #^XFFFFFFFC,r3,r6 ; r' gets the high bits from r
bicl3 #^X00000003,r3,r3
addl r5,r3 ; r = r + l'
tstl r7
bgeq 5$
bitl #1,r7
beql 5$ ; if d < 0 && d & 1
subl r2,r3 ; [r',r] = [r',r] - q
sbwc #0,r6
45$:
bgeq 5$ ; while r < 0
decl r2 ; q = q - 1
addl r7,r3 ; [r',r] = [r',r] + d
adwc #0,r6
brb 45$
tstl r8
bneq 5$ ; If b' != 0, go to the other part
; addl3 r11,r11,r1
; addl2 r5,r1
brb 42$
5$:
ashl #1,r11,r11
subl2 r10,r11
addl2 r5,r11
bgeq 7$
tstl r6
bneq 6$
cmpl r3,r7
blssu 42$ ; while [r',r] >= d'
6$:
decl r10
addl2 r4,r11
blss 6$
7$:
; movl r11,r1
subl r7,r3 ; [r',r] = [r',r] - d
sbwc #0,r6
incl r2 ; q = q + 1
brb 5$
42$:
movl r10,r0
; movl r3,r1
movl r2,r0
ret
666$:
movl #^XFFFFFFFF,r0
ret
.title vax_bn_add_words unsigned add of two arrays

View File

@@ -263,12 +263,12 @@ void BN_clear_free(BIGNUM *a)
if (a == NULL) return;
if (a->d != NULL)
{
memset(a->d,0,a->dmax*sizeof(a->d[0]));
OPENSSL_cleanse(a->d,a->dmax*sizeof(a->d[0]));
if (!(BN_get_flags(a,BN_FLG_STATIC_DATA)))
OPENSSL_free(a->d);
}
i=BN_get_flags(a,BN_FLG_MALLOCED);
memset(a,0,sizeof(BIGNUM));
OPENSSL_cleanse(a,sizeof(BIGNUM));
if (i)
OPENSSL_free(a);
}

View File

@@ -201,7 +201,7 @@ static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom)
err:
if (buf != NULL)
{
memset(buf,0,bytes);
OPENSSL_cleanse(buf,bytes);
OPENSSL_free(buf);
}
return(ret);

View File

@@ -141,10 +141,10 @@ int main(int argc, char *argv[])
ctx=BN_CTX_new();
if (ctx == NULL) exit(1);
if (ctx == NULL) EXIT(1);
out=BIO_new(BIO_s_file());
if (out == NULL) exit(1);
if (out == NULL) EXIT(1);
if (outfile == NULL)
{
BIO_set_fp(out,stdout,BIO_NOCLOSE);
@@ -154,7 +154,7 @@ int main(int argc, char *argv[])
if (!BIO_write_filename(out,outfile))
{
perror(outfile);
exit(1);
EXIT(1);
}
}
@@ -238,14 +238,14 @@ int main(int argc, char *argv[])
BIO_free(out);
/**/
exit(0);
EXIT(0);
err:
BIO_puts(out,"1\n"); /* make sure the Perl script fed by bc notices
* the failure, see test_bn in test/Makefile.ssl*/
BIO_flush(out);
ERR_load_crypto_strings();
ERR_print_errors_fp(stderr);
exit(1);
EXIT(1);
return(1);
}
@@ -488,7 +488,7 @@ int test_mul(BIO *bp)
BN_CTX *ctx;
ctx = BN_CTX_new();
if (ctx == NULL) exit(1);
if (ctx == NULL) EXIT(1);
BN_init(&a);
BN_init(&b);
@@ -726,7 +726,7 @@ int test_mod_mul(BIO *bp, BN_CTX *ctx)
while ((l=ERR_get_error()))
fprintf(stderr,"ERROR:%s\n",
ERR_error_string(l,NULL));
exit(1);
EXIT(1);
}
if (bp != NULL)
{

View File

@@ -59,6 +59,9 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../e_os.h"
#include <openssl/bio.h>
#include <openssl/bn.h>
#include <openssl/rand.h>
@@ -86,7 +89,7 @@ int main(int argc, char *argv[])
ERR_load_BN_strings();
ctx=BN_CTX_new();
if (ctx == NULL) exit(1);
if (ctx == NULL) EXIT(1);
r_mont=BN_new();
r_recp=BN_new();
r_simple=BN_new();
@@ -99,7 +102,7 @@ int main(int argc, char *argv[])
out=BIO_new(BIO_s_file());
if (out == NULL) exit(1);
if (out == NULL) EXIT(1);
BIO_set_fp(out,stdout,BIO_NOCLOSE);
for (i=0; i<200; i++)
@@ -124,7 +127,7 @@ int main(int argc, char *argv[])
{
printf("BN_mod_exp_mont() problems\n");
ERR_print_errors(out);
exit(1);
EXIT(1);
}
ret=BN_mod_exp_recp(r_recp,a,b,m,ctx);
@@ -132,7 +135,7 @@ int main(int argc, char *argv[])
{
printf("BN_mod_exp_recp() problems\n");
ERR_print_errors(out);
exit(1);
EXIT(1);
}
ret=BN_mod_exp_simple(r_simple,a,b,m,ctx);
@@ -140,7 +143,7 @@ int main(int argc, char *argv[])
{
printf("BN_mod_exp_simple() problems\n");
ERR_print_errors(out);
exit(1);
EXIT(1);
}
if (BN_cmp(r_simple, r_mont) == 0
@@ -163,7 +166,7 @@ int main(int argc, char *argv[])
printf("\nrecp ="); BN_print(out,r_recp);
printf("\nmont ="); BN_print(out,r_mont);
printf("\n");
exit(1);
EXIT(1);
}
}
BN_free(r_mont);
@@ -177,11 +180,11 @@ int main(int argc, char *argv[])
CRYPTO_mem_leaks(out);
BIO_free(out);
printf(" done\n");
exit(0);
EXIT(0);
err:
ERR_load_crypto_strings();
ERR_print_errors(out);
exit(1);
EXIT(1);
return(1);
}

View File

@@ -60,6 +60,8 @@
#include <string.h>
#include <stdlib.h>
#include "../e_os.h"
#ifdef OPENSSL_NO_CAST
int main(int argc, char *argv[])
{
@@ -224,7 +226,7 @@ int main(int argc, char *argv[])
}
#endif
exit(err);
EXIT(err);
return(err);
}
#endif

View File

@@ -158,7 +158,7 @@ $!
$ APPS_DES = "DES/DES,CBC3_ENC"
$ APPS_PKCS7 = "ENC/ENC;DEC/DEC;SIGN/SIGN;VERIFY/VERIFY,EXAMPLE"
$
$ LIB_ = "cryptlib,mem,mem_dbg,cversion,ex_data,tmdiff,cpt_err,ebcdic,uid,o_time"
$ LIB_ = "cryptlib,mem,mem_clr,mem_dbg,cversion,ex_data,tmdiff,cpt_err,ebcdic,uid,o_time"
$ LIB_MD2 = "md2_dgst,md2_one"
$ LIB_MD4 = "md4_dgst,md4_one"
$ LIB_MD5 = "md5_dgst,md5_one"

View File

@@ -63,9 +63,6 @@
#ifndef OPENSSL_NO_FP_API
#include <stdio.h>
#ifdef OPENSSL_SYS_WINCE
#include <stdio_extras.h>
#endif
#endif
#include <openssl/stack.h>
@@ -390,6 +387,8 @@ void *CRYPTO_realloc_clean(void *addr,int old_num,int num,const char *file,
int line);
void *CRYPTO_remalloc(void *addr,int num, const char *file, int line);
void OPENSSL_cleanse(void *ptr, size_t len);
void CRYPTO_set_mem_debug_options(long bits);
long CRYPTO_get_mem_debug_options(void);

View File

@@ -427,7 +427,7 @@ void doencryption(void)
k2[i-8]=k;
}
DES_set_key_unchecked(&k2,&ks2);
memset(k2,0,sizeof(k2));
OPENSSL_cleanse(k2,sizeof(k2));
}
else if (longk || flag3)
{
@@ -435,7 +435,7 @@ void doencryption(void)
{
DES_string_to_2keys(key,&kk,&k2);
DES_set_key_unchecked(&k2,&ks2);
memset(k2,0,sizeof(k2));
OPENSSL_cleanse(k2,sizeof(k2));
}
else
DES_string_to_key(key,&kk);
@@ -457,8 +457,8 @@ void doencryption(void)
}
DES_set_key_unchecked(&kk,&ks);
memset(key,0,sizeof(key));
memset(kk,0,sizeof(kk));
OPENSSL_cleanse(key,sizeof(key));
OPENSSL_cleanse(kk,sizeof(kk));
/* woops - A bug that does not showup under unix :-( */
memset(iv,0,sizeof(iv));
memset(iv2,0,sizeof(iv2));
@@ -666,18 +666,18 @@ void doencryption(void)
if (l) fclose(CKSUM_OUT);
}
problems:
memset(buf,0,sizeof(buf));
memset(obuf,0,sizeof(obuf));
memset(&ks,0,sizeof(ks));
memset(&ks2,0,sizeof(ks2));
memset(iv,0,sizeof(iv));
memset(iv2,0,sizeof(iv2));
memset(kk,0,sizeof(kk));
memset(k2,0,sizeof(k2));
memset(uubuf,0,sizeof(uubuf));
memset(b,0,sizeof(b));
memset(bb,0,sizeof(bb));
memset(cksum,0,sizeof(cksum));
OPENSSL_cleanse(buf,sizeof(buf));
OPENSSL_cleanse(obuf,sizeof(obuf));
OPENSSL_cleanse(&ks,sizeof(ks));
OPENSSL_cleanse(&ks2,sizeof(ks2));
OPENSSL_cleanse(iv,sizeof(iv));
OPENSSL_cleanse(iv2,sizeof(iv2));
OPENSSL_cleanse(kk,sizeof(kk));
OPENSSL_cleanse(k2,sizeof(k2));
OPENSSL_cleanse(uubuf,sizeof(uubuf));
OPENSSL_cleanse(b,sizeof(b));
OPENSSL_cleanse(bb,sizeof(bb));
OPENSSL_cleanse(cksum,sizeof(cksum));
if (Exit) EXIT(Exit);
}

View File

@@ -112,9 +112,6 @@
#include <string.h>
#include <openssl/des.h>
#include <openssl/ui.h>
#ifdef OPENSSL_SYS_WINCE
#include <stdio_extras.h> /* BUFSIZ */
#endif
int DES_read_password(DES_cblock *key, const char *prompt, int verify)
{
@@ -123,8 +120,8 @@ int DES_read_password(DES_cblock *key, const char *prompt, int verify)
if ((ok=UI_UTIL_read_pw(buf,buff,BUFSIZ,prompt,verify)) == 0)
DES_string_to_key(buf,key);
memset(buf,0,BUFSIZ);
memset(buff,0,BUFSIZ);
OPENSSL_cleanse(buf,BUFSIZ);
OPENSSL_cleanse(buff,BUFSIZ);
return(ok);
}
@@ -136,7 +133,7 @@ int DES_read_2passwords(DES_cblock *key1, DES_cblock *key2, const char *prompt,
if ((ok=UI_UTIL_read_pw(buf,buff,BUFSIZ,prompt,verify)) == 0)
DES_string_to_2keys(buf,key1,key2);
memset(buf,0,BUFSIZ);
memset(buff,0,BUFSIZ);
OPENSSL_cleanse(buf,BUFSIZ);
OPENSSL_cleanse(buff,BUFSIZ);
return(ok);
}

View File

@@ -220,7 +220,7 @@ int des_read_pw_string(char *buf, int length, const char *prompt,
int ret;
ret=des_read_pw(buf,buff,(length>BUFSIZ)?BUFSIZ:length,prompt,verify);
memset(buff,0,BUFSIZ);
OPENSSL_cleanse(buff,BUFSIZ);
return(ret);
}

View File

@@ -94,7 +94,7 @@ void DES_string_to_key(const char *str, DES_cblock *key)
DES_set_key_unchecked(key,&ks);
#endif
DES_cbc_cksum((const unsigned char*)str,key,length,&ks,key);
memset(&ks,0,sizeof(ks));
OPENSSL_cleanse(&ks,sizeof(ks));
DES_set_odd_parity(key);
}
@@ -167,7 +167,7 @@ void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2)
DES_set_key_unchecked(key2,&ks);
#endif
DES_cbc_cksum((const unsigned char*)str,key2,length,&ks,key2);
memset(&ks,0,sizeof(ks));
OPENSSL_cleanse(&ks,sizeof(ks));
DES_set_odd_parity(key1);
DES_set_odd_parity(key2);
}

View File

@@ -59,6 +59,9 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../e_os.h"
#ifdef OPENSSL_SYS_WINDOWS
#include "../bio/bss_file.c"
#endif
@@ -111,7 +114,7 @@ int main(int argc, char *argv[])
RAND_seed(rnd_seed, sizeof rnd_seed);
out=BIO_new(BIO_s_file());
if (out == NULL) exit(1);
if (out == NULL) EXIT(1);
BIO_set_fp(out,stdout,BIO_NOCLOSE);
a=DH_generate_parameters(64,DH_GENERATOR_5,cb,out);
@@ -195,7 +198,7 @@ err:
CRYPTO_cleanup_all_ex_data();
ERR_remove_state(0);
CRYPTO_mem_leaks_fp(stderr);
exit(ret);
EXIT(ret);
return(ret);
}

View File

@@ -224,11 +224,13 @@ int DSA_size(const DSA *r)
{
int ret,i;
ASN1_INTEGER bs;
unsigned char buf[4];
unsigned char buf[4]; /* 4 bytes looks really small.
However, i2d_ASN1_INTEGER() will not look
beyond the first byte, as long as the second
parameter is NULL. */
i=BN_num_bits(r->q);
bs.length=(i+7)/8;
OPENSSL_assert(bs.length <= sizeof buf);
bs.data=buf;
bs.type=V_ASN1_INTEGER;
/* If the top bit is set the asn1 encoding is 1 larger. */

View File

@@ -61,6 +61,9 @@
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "../e_os.h"
#include <openssl/crypto.h>
#include <openssl/rand.h>
#include <openssl/bio.h>
@@ -212,10 +215,15 @@ end:
BIO_free(bio_err);
bio_err = NULL;
}
exit(!ret);
EXIT(!ret);
return(0);
}
static int cb_exit(int ec)
{
EXIT(ec);
}
static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
{
char c='*';
@@ -231,7 +239,7 @@ static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
if (!ok && (p == 0) && (num > 1))
{
BIO_printf((BIO *)arg,"error in dsatest\n");
exit(1);
cb_exit(1);
}
}
#endif

View File

@@ -128,7 +128,7 @@ void EC_GROUP_clear_free(EC_GROUP *group)
EC_GROUP_clear_free_extra_data(group);
memset(group, 0, sizeof *group);
OPENSSL_cleanse(group, sizeof *group);
OPENSSL_free(group);
}
@@ -357,7 +357,7 @@ void EC_POINT_clear_free(EC_POINT *point)
point->meth->point_clear_finish(point);
else if (point->meth != NULL && point->meth->point_finish != 0)
point->meth->point_finish(point);
memset(point, 0, sizeof *point);
OPENSSL_cleanse(point, sizeof *point);
OPENSSL_free(point);
}

View File

@@ -77,7 +77,7 @@ int main(int argc, char * argv[]) { puts("Elliptic curves are disabled."); retur
fflush(stdout); \
fprintf(stderr, "%s:%d: ABORT\n", __FILE__, __LINE__); \
ERR_print_errors_fp(stderr); \
exit(1); \
EXIT(1); \
} while (0)
#if 0

View File

@@ -79,6 +79,21 @@
/* #define TEST_ENG_OPENSSL_SHA_P_UPDATE */
/* #define TEST_ENG_OPENSSL_SHA_P_FINAL */
/* Now check what of those algorithms are actually enabled */
#ifdef OPENSSL_NO_RC4
#undef TEST_ENG_OPENSSL_RC4
#undef TEST_ENG_OPENSSL_RC4_OTHERS
#undef TEST_ENG_OPENSSL_RC4_P_INIT
#undef TEST_ENG_OPENSSL_RC4_P_CIPHER
#endif
#if defined(OPENSSL_NO_SHA) || defined(OPENSSL_NO_SHA0) || defined(OPENSSL_NO_SHA1)
#undef TEST_ENG_OPENSSL_SHA
#undef TEST_ENG_OPENSSL_SHA_OTHERS
#undef TEST_ENG_OPENSSL_SHA_P_INIT
#undef TEST_ENG_OPENSSL_SHA_P_UPDATE
#undef TEST_ENG_OPENSSL_SHA_P_FINAL
#endif
#ifdef TEST_ENG_OPENSSL_RC4
static int openssl_ciphers(ENGINE *e, const EVP_CIPHER **cipher,
const int **nids, int nid);

View File

@@ -58,9 +58,6 @@
#include <openssl/e_os2.h>
#include <stdio.h>
#ifdef OPENSSL_SYS_WINCE
#include <stdlib_extras.h>
#endif
#include <string.h>
#include <openssl/buffer.h>
#include <openssl/crypto.h>

View File

@@ -717,7 +717,7 @@ static int cca_rsa_verify(int type, const unsigned char *m, unsigned int m_len,
if (type == NID_sha1 || type == NID_md5)
{
memset(hashBuffer, 0, keyLength+1);
OPENSSL_cleanse(hashBuffer, keyLength+1);
OPENSSL_free(hashBuffer);
}
@@ -840,7 +840,7 @@ static int cca_rsa_sign(int type, const unsigned char *m, unsigned int m_len,
if (type == NID_sha1 || type == NID_md5)
{
memset(hashBuffer, 0, keyLength+1);
OPENSSL_cleanse(hashBuffer, keyLength+1);
OPENSSL_free(hashBuffer);
}

View File

@@ -46,6 +46,18 @@ ENGINE_load_cryptodev(void)
#include <sys/types.h>
#include <sys/param.h>
#if OpenBSD < 200112
void
ENGINE_load_cryptodev(void)
{
/* This is a NOP unless we have release 3.0 (released december 2001) */
return;
}
#else /* OpenBSD 3.0 or above */
#include <crypto/cryptodev.h>
#include <sys/ioctl.h>
#include <errno.h>
@@ -1114,4 +1126,5 @@ ENGINE_load_cryptodev(void)
ERR_clear_error();
}
#endif /* OpenBSD 3.0 or above */
#endif /* __OpenBSD__ */

View File

@@ -560,15 +560,23 @@ static int hwcrhk_init(ENGINE *e)
/* Check if the application decided to support dynamic locks,
and if it does, use them. */
if (disable_mutex_callbacks == 0 &&
CRYPTO_get_dynlock_create_callback() != NULL &&
CRYPTO_get_dynlock_lock_callback() != NULL &&
CRYPTO_get_dynlock_destroy_callback() != NULL)
if (disable_mutex_callbacks == 0)
{
hwcrhk_globals.mutex_init = hwcrhk_mutex_init;
hwcrhk_globals.mutex_acquire = hwcrhk_mutex_lock;
hwcrhk_globals.mutex_release = hwcrhk_mutex_unlock;
hwcrhk_globals.mutex_destroy = hwcrhk_mutex_destroy;
if (CRYPTO_get_dynlock_create_callback() != NULL &&
CRYPTO_get_dynlock_lock_callback() != NULL &&
CRYPTO_get_dynlock_destroy_callback() != NULL)
{
hwcrhk_globals.mutex_init = hwcrhk_mutex_init;
hwcrhk_globals.mutex_acquire = hwcrhk_mutex_lock;
hwcrhk_globals.mutex_release = hwcrhk_mutex_unlock;
hwcrhk_globals.mutex_destroy = hwcrhk_mutex_destroy;
}
else if (CRYPTO_get_locking_callback() != NULL)
{
HWCRHKerr(HWCRHK_F_HWCRHK_INIT,HWCRHK_R_LOCKING_MISSING);
ERR_add_error_data(1,"You HAVE to add dynamic locking callbacks via CRYPTO_set_dynlock_{create,lock,destroy}_callback()");
goto err;
}
}
/* Try and get a context - if not, we may have a DSO but no
@@ -1022,7 +1030,7 @@ static int hwcrhk_rsa_mod_exp(BIGNUM *r, const BIGNUM *I, RSA *rsa)
/* Perform the operation */
ret = p_hwcrhk_ModExpCRT(hwcrhk_context, m_a, m_p, m_q,
m_dmp1, m_dmq1, m_iqmp, &m_r, NULL);
m_dmp1, m_dmq1, m_iqmp, &m_r, &rmsg);
/* Convert the response */
r->top = m_r.size / sizeof(BN_ULONG);
@@ -1320,7 +1328,7 @@ static void hwcrhk_log_message(void *logstr, const char *message)
lstream=*(BIO **)logstr;
if (lstream)
{
BIO_write(lstream, message, strlen(message));
BIO_printf(lstream, "%s\n", message);
}
CRYPTO_w_unlock(CRYPTO_LOCK_BIO);
}

View File

@@ -1,6 +1,6 @@
/* hw_ncipher_err.c */
/* ====================================================================
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
* Copyright (c) 1999-2002 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -86,6 +86,7 @@ static ERR_STRING_DATA HWCRHK_str_reasons[]=
{HWCRHK_R_CHIL_ERROR ,"chil error"},
{HWCRHK_R_CTRL_COMMAND_NOT_IMPLEMENTED ,"ctrl command not implemented"},
{HWCRHK_R_DSO_FAILURE ,"dso failure"},
{HWCRHK_R_LOCKING_MISSING ,"locking missing"},
{HWCRHK_R_MISSING_KEY_COMPONENTS ,"missing key components"},
{HWCRHK_R_NOT_INITIALISED ,"not initialised"},
{HWCRHK_R_NOT_LOADED ,"not loaded"},

View File

@@ -84,6 +84,7 @@ static void ERR_HWCRHK_error(int function, int reason, char *file, int line);
#define HWCRHK_R_CHIL_ERROR 102
#define HWCRHK_R_CTRL_COMMAND_NOT_IMPLEMENTED 103
#define HWCRHK_R_DSO_FAILURE 104
#define HWCRHK_R_LOCKING_MISSING 114
#define HWCRHK_R_MISSING_KEY_COMPONENTS 105
#define HWCRHK_R_NOT_INITIALISED 106
#define HWCRHK_R_NOT_LOADED 107

View File

@@ -907,7 +907,7 @@ static int surewarehk_rsa_priv_dec(int flen,const unsigned char *from,unsigned c
err:
if (buf)
{
memset(buf,0,tlen);
OPENSSL_cleanse(buf,tlen);
OPENSSL_free(buf);
}
return ret;

View File

@@ -132,7 +132,7 @@ static int enc_free(BIO *a)
if (a == NULL) return(0);
b=(BIO_ENC_CTX *)a->ptr;
EVP_CIPHER_CTX_cleanup(&(b->cipher));
memset(a->ptr,0,sizeof(BIO_ENC_CTX));
OPENSSL_cleanse(a->ptr,sizeof(BIO_ENC_CTX));
OPENSSL_free(a->ptr);
a->ptr=NULL;
a->init=0;

View File

@@ -211,7 +211,7 @@ static int ok_free(BIO *a)
{
if (a == NULL) return(0);
EVP_MD_CTX_cleanup(&((BIO_OK_CTX *)a->ptr)->md);
memset(a->ptr,0,sizeof(BIO_OK_CTX));
OPENSSL_cleanse(a->ptr,sizeof(BIO_OK_CTX));
OPENSSL_free(a->ptr);
a->ptr=NULL;
a->init=0;

View File

@@ -301,7 +301,7 @@ int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx)
ctx->digest->cleanup(ctx);
if (ctx->digest && ctx->digest->ctx_size && ctx->md_data)
{
memset(ctx->md_data,0,ctx->digest->ctx_size);
OPENSSL_cleanse(ctx->md_data,ctx->digest->ctx_size);
OPENSSL_free(ctx->md_data);
}
if(ctx->engine)

View File

@@ -52,7 +52,6 @@
#include <openssl/evp.h>
#include <openssl/err.h>
#include <string.h>
#include <assert.h>
#include <openssl/aes.h>
#include "evp_locl.h"

View File

@@ -109,7 +109,7 @@ static int idea_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
idea_set_encrypt_key(key,&tmp);
idea_set_decrypt_key(&tmp,ctx->cipher_data);
memset((unsigned char *)&tmp,0,
OPENSSL_cleanse((unsigned char *)&tmp,
sizeof(IDEA_KEY_SCHEDULE));
}
return 1;

View File

@@ -454,9 +454,9 @@ int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *c)
{
if(c->cipher->cleanup && !c->cipher->cleanup(c))
return 0;
/* Zero cipher context data */
/* Cleanse cipher context data */
if (c->cipher_data)
memset(c->cipher_data, 0, c->cipher->ctx_size);
OPENSSL_cleanse(c->cipher_data, c->cipher->ctx_size);
}
if (c->cipher_data)
OPENSSL_free(c->cipher_data);

View File

@@ -103,7 +103,7 @@ int EVP_read_pw_string(char *buf, int len, const char *prompt, int verify)
buff,0,(len>=BUFSIZ)?BUFSIZ-1:len,buf);
ret = UI_process(ui);
UI_free(ui);
memset(buff,0,BUFSIZ);
OPENSSL_cleanse(buff,BUFSIZ);
return ret;
}
@@ -168,7 +168,7 @@ int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md,
if ((nkey == 0) && (niv == 0)) break;
}
EVP_MD_CTX_cleanup(&c);
memset(&(md_buf[0]),0,EVP_MAX_MD_SIZE);
OPENSSL_cleanse(&(md_buf[0]),EVP_MAX_MD_SIZE);
return(type->key_len);
}

View File

@@ -49,6 +49,9 @@
#include <stdio.h>
#include <string.h>
#include "../e_os.h"
#include <openssl/evp.h>
#include <openssl/engine.h>
#include <openssl/conf.h>
@@ -78,7 +81,7 @@ static int convert(unsigned char *s)
if(!s[1])
{
fprintf(stderr,"Odd number of hex digits!");
exit(4);
EXIT(4);
}
sscanf((char *)s,"%2x",&n);
*d=(unsigned char)n;
@@ -120,6 +123,11 @@ static char *sstrsep(char **string, const char *delim)
static unsigned char *ustrsep(char **p,const char *sep)
{ return (unsigned char *)sstrsep(p,sep); }
static int test1_exit(int ec)
{
EXIT(ec);
}
static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
const unsigned char *iv,int in,
const unsigned char *plaintext,int pn,
@@ -142,7 +150,7 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
{
fprintf(stderr,"Key length doesn't match, got %d expected %d\n",kn,
c->key_len);
exit(5);
test1_exit(5);
}
EVP_CIPHER_CTX_init(&ctx);
if (encdec != 0)
@@ -150,26 +158,26 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
if(!EVP_EncryptInit_ex(&ctx,c,NULL,key,iv))
{
fprintf(stderr,"EncryptInit failed\n");
exit(10);
test1_exit(10);
}
EVP_CIPHER_CTX_set_padding(&ctx,0);
if(!EVP_EncryptUpdate(&ctx,out,&outl,plaintext,pn))
{
fprintf(stderr,"Encrypt failed\n");
exit(6);
test1_exit(6);
}
if(!EVP_EncryptFinal_ex(&ctx,out+outl,&outl2))
{
fprintf(stderr,"EncryptFinal failed\n");
exit(7);
test1_exit(7);
}
if(outl+outl2 != cn)
{
fprintf(stderr,"Ciphertext length mismatch got %d expected %d\n",
outl+outl2,cn);
exit(8);
test1_exit(8);
}
if(memcmp(out,ciphertext,cn))
@@ -177,7 +185,7 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
fprintf(stderr,"Ciphertext mismatch\n");
hexdump(stderr,"Got",out,cn);
hexdump(stderr,"Expected",ciphertext,cn);
exit(9);
test1_exit(9);
}
}
@@ -186,26 +194,26 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
if(!EVP_DecryptInit_ex(&ctx,c,NULL,key,iv))
{
fprintf(stderr,"DecryptInit failed\n");
exit(11);
test1_exit(11);
}
EVP_CIPHER_CTX_set_padding(&ctx,0);
if(!EVP_DecryptUpdate(&ctx,out,&outl,ciphertext,cn))
{
fprintf(stderr,"Decrypt failed\n");
exit(6);
test1_exit(6);
}
if(!EVP_DecryptFinal_ex(&ctx,out+outl,&outl2))
{
fprintf(stderr,"DecryptFinal failed\n");
exit(7);
test1_exit(7);
}
if(outl+outl2 != cn)
{
fprintf(stderr,"Plaintext length mismatch got %d expected %d\n",
outl+outl2,cn);
exit(8);
test1_exit(8);
}
if(memcmp(out,plaintext,cn))
@@ -213,7 +221,7 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
fprintf(stderr,"Plaintext mismatch\n");
hexdump(stderr,"Got",out,cn);
hexdump(stderr,"Expected",plaintext,cn);
exit(9);
test1_exit(9);
}
}
@@ -260,24 +268,24 @@ static int test_digest(const char *digest,
if(!EVP_DigestInit_ex(&ctx,d, NULL))
{
fprintf(stderr,"DigestInit failed\n");
exit(100);
EXIT(100);
}
if(!EVP_DigestUpdate(&ctx,plaintext,pn))
{
fprintf(stderr,"DigestUpdate failed\n");
exit(101);
EXIT(101);
}
if(!EVP_DigestFinal_ex(&ctx,md,&mdn))
{
fprintf(stderr,"DigestFinal failed\n");
exit(101);
EXIT(101);
}
EVP_MD_CTX_cleanup(&ctx);
if(mdn != cn)
{
fprintf(stderr,"Digest length mismatch, got %d expected %d\n",mdn,cn);
exit(102);
EXIT(102);
}
if(memcmp(md,ciphertext,cn))
@@ -285,7 +293,7 @@ static int test_digest(const char *digest,
fprintf(stderr,"Digest mismatch\n");
hexdump(stderr,"Got",md,cn);
hexdump(stderr,"Expected",ciphertext,cn);
exit(103);
EXIT(103);
}
printf("\n");
@@ -303,7 +311,7 @@ int main(int argc,char **argv)
if(argc != 2)
{
fprintf(stderr,"%s <test file>\n",argv[0]);
exit(1);
EXIT(1);
}
CRYPTO_malloc_debug_init();
CRYPTO_set_mem_debug_options(V_CRYPTO_MDEBUG_ALL);
@@ -315,7 +323,7 @@ int main(int argc,char **argv)
if(!f)
{
perror(szTestFile);
exit(2);
EXIT(2);
}
/* Load up the software EVP_CIPHER and EVP_MD definitions */
@@ -371,7 +379,7 @@ int main(int argc,char **argv)
&& !test_digest(cipher,plaintext,pn,ciphertext,cn))
{
fprintf(stderr,"Can't find %s\n",cipher);
exit(3);
EXIT(3);
}
}

View File

@@ -146,8 +146,8 @@ int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen,
memcpy(iv, md_tmp + (16 - EVP_CIPHER_iv_length(cipher)),
EVP_CIPHER_iv_length(cipher));
EVP_CipherInit_ex(cctx, cipher, NULL, key, iv, en_de);
memset(md_tmp, 0, EVP_MAX_MD_SIZE);
memset(key, 0, EVP_MAX_KEY_LENGTH);
memset(iv, 0, EVP_MAX_IV_LENGTH);
OPENSSL_cleanse(md_tmp, EVP_MAX_MD_SIZE);
OPENSSL_cleanse(key, EVP_MAX_KEY_LENGTH);
OPENSSL_cleanse(iv, EVP_MAX_IV_LENGTH);
return 1;
}

View File

@@ -231,7 +231,7 @@ int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
iter = ASN1_INTEGER_get(kdf->iter);
PKCS5_PBKDF2_HMAC_SHA1(pass, passlen, salt, saltlen, iter, keylen, key);
EVP_CipherInit_ex(ctx, NULL, NULL, key, NULL, en_de);
memset(key, 0, keylen);
OPENSSL_cleanse(key, keylen);
PBKDF2PARAM_free(kdf);
return 1;

View File

@@ -101,7 +101,7 @@ int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char *ek,
ret=1;
err:
if (key != NULL) memset(key,0,size);
if (key != NULL) OPENSSL_cleanse(key,size);
OPENSSL_free(key);
return(ret);
}

View File

@@ -60,6 +60,8 @@
#include <string.h>
#include <stdlib.h>
#include "../e_os.h"
#ifdef OPENSSL_NO_HMAC
int main(int argc, char *argv[])
{
@@ -68,12 +70,15 @@ int main(int argc, char *argv[])
}
#else
#include <openssl/hmac.h>
#ifndef OPENSSL_NO_MD5
#include <openssl/md5.h>
#endif
#ifdef CHARSET_EBCDIC
#include <openssl/ebcdic.h>
#endif
#ifndef OPENSSL_NO_MD5
static struct test_st
{
unsigned char key[16];
@@ -113,13 +118,20 @@ static struct test_st
(unsigned char *)"56be34521d144c88dbb8c733f0e8b3f6",
},
};
#endif
static char *pt(unsigned char *md);
int main(int argc, char *argv[])
{
int i,err=0;
#ifndef OPENSSL_NO_MD5
int i;
char *p;
#endif
int err=0;
#ifdef OPENSSL_NO_MD5
printf("test skipped: MD5 disabled\n");
#else
#ifdef CHARSET_EBCDIC
ebcdic2ascii(test[0].data, test[0].data, test[0].data_len);
@@ -144,10 +156,12 @@ int main(int argc, char *argv[])
else
printf("test %d ok\n",i);
}
exit(err);
#endif /* OPENSSL_NO_MD5 */
EXIT(err);
return(0);
}
#ifndef OPENSSL_NO_MD5
static char *pt(unsigned char *md)
{
int i;
@@ -158,3 +172,4 @@ static char *pt(unsigned char *md)
return(buf);
}
#endif
#endif

View File

@@ -60,6 +60,8 @@
#include <string.h>
#include <stdlib.h>
#include "../e_os.h"
#ifdef OPENSSL_NO_IDEA
int main(int argc, char *argv[])
{
@@ -167,7 +169,7 @@ int main(int argc, char *argv[])
else
printf("ok\n");
exit(err);
EXIT(err);
return(err);
}

View File

@@ -79,8 +79,11 @@ clean:
# DO NOT DELETE THIS LINE -- make depend depends on it.
md2_dgst.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
md2_dgst.o: ../../include/openssl/md2.h ../../include/openssl/opensslconf.h
md2_dgst.o: ../../include/openssl/opensslv.h md2_dgst.c
md2_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
md2_dgst.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
md2_dgst.o: md2_dgst.c
md2_one.o: ../../e_os.h ../../include/openssl/bio.h
md2_one.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
md2_one.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h

View File

@@ -61,6 +61,7 @@
#include <string.h>
#include <openssl/md2.h>
#include <openssl/opensslv.h>
#include <openssl/crypto.h>
const char *MD2_version="MD2" OPENSSL_VERSION_PTEXT;
@@ -196,7 +197,7 @@ static void md2_block(MD2_CTX *c, const unsigned char *d)
t=(t+i)&0xff;
}
memcpy(sp1,state,16*sizeof(MD2_INT));
memset(state,0,48*sizeof(MD2_INT));
OPENSSL_cleanse(state,48*sizeof(MD2_INT));
}
int MD2_Final(unsigned char *md, MD2_CTX *c)

View File

@@ -88,6 +88,6 @@ unsigned char *MD2(const unsigned char *d, unsigned long n, unsigned char *md)
}
#endif
MD2_Final(md,&c);
memset(&c,0,sizeof(c)); /* Security consideration */
OPENSSL_cleanse(&c,sizeof(c)); /* Security consideration */
return(md);
}

View File

@@ -61,6 +61,8 @@
#include <string.h>
#include <openssl/md2.h>
#include "../e_os.h"
#ifdef OPENSSL_NO_MD2
int main(int argc, char *argv[])
{
@@ -122,7 +124,7 @@ int main(int argc, char *argv[])
R++;
P++;
}
exit(err);
EXIT(err);
return(0);
}

View File

@@ -1,6 +1,6 @@
/* crypto/md32_common.h */
/* ====================================================================
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
* Copyright (c) 1999-2002 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -456,7 +456,10 @@ int HASH_UPDATE (HASH_CTX *c, const void *data_, unsigned long len)
{
ew=(c->num>>2);
ec=(c->num&0x03);
l=p[sw]; HOST_p_c2l(data,l,sc); p[sw++]=l;
if (sc)
l=p[sw];
HOST_p_c2l(data,l,sc);
p[sw++]=l;
for (; sw < ew; sw++)
{
HOST_c2l(data,l); p[sw]=l;
@@ -603,7 +606,7 @@ int HASH_FINAL (unsigned char *md, HASH_CTX *c)
c->num=0;
/* clear stuff, HASH_BLOCK may be leaving some stuff on the stack
* but I'm not worried :-)
memset((void *)c,0,sizeof(HASH_CTX));
OPENSSL_cleanse((void *)c,sizeof(HASH_CTX));
*/
return 1;
}

View File

@@ -84,5 +84,8 @@ md4_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/md4.h
md4_dgst.o: ../../include/openssl/opensslconf.h
md4_dgst.o: ../../include/openssl/opensslv.h ../md32_common.h md4_dgst.c
md4_dgst.o: md4_locl.h
md4_one.o: ../../include/openssl/e_os2.h ../../include/openssl/md4.h
md4_one.o: ../../include/openssl/opensslconf.h md4_one.c
md4_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
md4_one.o: ../../include/openssl/md4.h ../../include/openssl/opensslconf.h
md4_one.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
md4_one.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
md4_one.o: md4_one.c

Some files were not shown because too many files have changed in this diff Show More