Compare commits

..

845 Commits

Author SHA1 Message Date
Richard Levitte
631cdb9f69 Small fault corrected 2002-12-05 22:44:12 +00:00
Richard Levitte
e98b0d6883 make update 2002-12-05 21:51:02 +00:00
Richard Levitte
f94e1dd2d0 Time to release OpenSSL 0.9.6h.
The tag will be OpenSSL_0_9_6h.
2002-12-05 21:40:48 +00:00
Richard Levitte
3124dd9c13 Make sure using SSL_CERT_FILE actually works, and has priority over system defaults.
PR: 376
2002-12-05 01:20:53 +00:00
Richard Levitte
e5040378df Fixes for VxWorks. Are these needed for 0.9.7 and up as well?
PR: 374
2002-12-04 23:13:07 +00:00
Dr. Stephen Henson
0b7497310d Include crypto.h to pull in definition of OPENSSL_cleanse in various
places.
2002-12-04 23:08:08 +00:00
Lutz Jänicke
98c3eccc83 Missing ")"
Submitted by: Christian Hohnstaedt <chohnstaedt@innominate.com>
Reviewed by:
PR:
2002-12-04 13:30:16 +00:00
Richard Levitte
7000fd8418 A gcc 3.0 bug is triggered by our code. Add a section about it in PROBLEMS.
PR: 375
2002-12-04 08:24:23 +00:00
Richard Levitte
811cd997ae 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:51:51 +00:00
Richard Levitte
29a0f955b8 Make CRYPTO_cleanse() independent of endianness. 2002-12-03 16:06:52 +00:00
Richard Levitte
5a6a8963ad EXIT() needs to be in a function that returns int. 2002-12-01 01:23:13 +00:00
Richard Levitte
b760880094 Correct some names. 2002-11-29 14:21:58 +00:00
Richard Levitte
6bad9d0522 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:18 +00:00
Richard Levitte
dd54633339 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:56:18 +00:00
Richard Levitte
6a99f54418 Make sure EXIT() can always be used as one statement. 2002-11-28 18:52:18 +00:00
Richard Levitte
920b700d4a 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:06:36 +00:00
Richard Levitte
615ee04098 make update 2002-11-27 13:45:38 +00:00
Richard Levitte
9a7a36db08 Add OPENSSL_cleanse() to help cleanse memory and avoid certain compiler
and linker optimizations.
PR: 343
2002-11-27 12:24:54 +00:00
cvs2svn
60b5a28877 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2002-11-27 12:24:09 +00:00
Richard Levitte
1c4d82a776 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:38 +00:00
Richard Levitte
54f70a1ce0 Mention a current showstopper 2002-11-21 22:39:16 +00:00
Lutz Jänicke
e824df317a 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:05 +00:00
Bodo Möller
3d2fd99573 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 12:10:08 +00:00
Richard Levitte
adee13d244 Add news items for 0.9.6h 2002-11-18 23:57:31 +00:00
Bodo Möller
9e69a30716 fix memory leak in memory debuggin code ...
Submitted by: Nils Larsch
2002-11-18 14:02:20 +00:00
Richard Levitte
0f277581ef 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:54 +00:00
Lutz Jänicke
9989dd6171 Fix buggy #! magic and update ssleay->openssl
Submitted by:
Reviewed by:
PR: 305
2002-11-15 21:25:16 +00:00
Richard Levitte
7149d5c140 Document the change to remove the 'done' flag variable in the
OpenSSL_add_all_*() routines
2002-11-15 13:58:58 +00:00
Richard Levitte
4ad0d4da1b make update 2002-11-15 11:21:33 +00:00
Richard Levitte
f6b70eac0c A few more Microsoft OIDs added 2002-11-15 11:18:05 +00:00
Lutz Jänicke
8e71d1b561 The pointer to the cipher object is not yet set, when session was reloaded
from external cache (using d2i_SSL_SESSION). Perform comparison based on
the cipher's id instead.
Submitted by: Steve Haslam <araqnid@innocent.com>
Reviewed by:
PR: 288
2002-11-15 10:52:53 +00:00
Richard Levitte
8b5cd8a965 The architecture name is i486, not just 486 2002-11-15 10:28:38 +00:00
Richard Levitte
0e3ee398f6 -Wid-clash-n isn't support in gcc 3, and I get better result from continuously
rebuilding on a VMS box.
2002-11-15 10:19:35 +00:00
Richard Levitte
f9d12d1a50 Spell prototypes correctly :-) 2002-11-15 09:56:59 +00:00
Richard Levitte
7c5305bc54 Add -Wstrict-prototype and -Wmissing-prototype to my debugging targets 2002-11-15 09:53:53 +00:00
Richard Levitte
3aefe06f0f We need to read one more byte of the REQUEST-CERTIFICATE message.
PR: 300
2002-11-15 09:16:56 +00:00
Richard Levitte
fa015977de make update 2002-11-14 23:56:29 +00:00
Richard Levitte
cc68d20f8e Add A/UX target.
PR: 271
2002-11-14 23:38:59 +00:00
Richard Levitte
5a6250fb06 Close the implicitely opened registry key.
PR: 264
2002-11-14 23:33:48 +00:00
Richard Levitte
dd40b2002b Remove the flag variable in OpenSSL_add_all_ciphers() and
OpenSSL_add_all_digests(), as it doesn't really serve any
sensible purpose.
PR: 261
2002-11-14 23:24:39 +00:00
Lutz Jänicke
74766c6e5d No such reference to link to (found running pod2latex).
Submitted by:
Reviewed by:
PR:
2002-11-14 21:42:50 +00:00
Richard Levitte
367916e11f Add Tandem OSS target.
PR: 192
2002-11-14 16:30:29 +00:00
Richard Levitte
1dfdd763a3 It seems like gcc 2.9aix5.1 doesn't do will with optimization level 3.
PR: 115
2002-11-14 14:07:59 +00:00
Richard Levitte
a0fd85aa25 Add a FAQ on how to check the authenticity of the openSSL distribution.
PR: 292
2002-11-14 13:01:12 +00:00
Richard Levitte
38ab79ce75 Cygwin fixes (the dummytest method to make all tests work was copied
from 0.9.7-stable)
2002-11-14 12:40:52 +00:00
Richard Levitte
06a40694d4 Make the Windows test scripts consistent in their echoing 2002-11-14 08:09:00 +00:00
Richard Levitte
8df1de4e89 Handle last lines that aren't properly terminated.
PR: 308
2002-11-14 06:49:45 +00:00
Richard Levitte
ff749aea44 Constification needed.
PR: 241
2002-11-13 23:47:41 +00:00
Richard Levitte
a5c8ac1498 Reorder inclusion, or NO_SYS_TYPES_H will not be detected.
PR: 241
2002-11-13 23:45:41 +00:00
Richard Levitte
2fb453829b Some part of the Windows random seed code could hang on NT4.0 (SP6).
The same was recently reported for ODBC applications.  Therefore,
merge in this change from 0.9.7-stable.
PR: 230
2002-11-13 23:21:12 +00:00
Richard Levitte
d671684561 I think I'd like to be able to debug shared stuff as well... 2002-11-13 13:46:37 +00:00
Dr. Stephen Henson
97ff54177c include ctype.h 2002-11-13 00:44:47 +00:00
Richard Levitte
3baca7eedd Variables on the stack must be initialized or we can't depend on any
initial value.  For errline/errorline, we did depend on that, erroneously
2002-11-11 21:34:37 +00:00
Lutz Jänicke
1dc179b4f4 Make sure permissions are friendly when building release tar file.
Submitted by:
Reviewed by:
PR: 171
2002-11-11 08:55:43 +00:00
Lutz Jänicke
fa45971484 More information to the important issue of seeding the PRNG
Submitted by:
Reviewed by:
PR: 285
2002-11-11 08:33:47 +00:00
Richard Levitte
82833c523b X509_NAME_cmp() now compares PrintableString and emailAddress with a value of type
ia5String correctly.
PR: 244
2002-11-09 21:53:48 +00:00
Dr. Stephen Henson
3bfac1c21b Typo 2002-11-09 18:09:38 +00:00
Richard Levitte
cba9cbaf31 -CAserial does take a filename argument.
PR: 332
2002-11-08 21:54:07 +00:00
Richard Levitte
6cd58c0c35 -CAcreateserial doesn't take a filename argument.
PR: 332
2002-11-08 21:51:20 +00:00
Lutz Jänicke
93aed90c6a Allow building noninteractively.
Submitted by: Petter Reinholdtsen <pere@hungry.com>
Reviewed by:
PR: 315
2002-11-08 20:20:11 +00:00
Lutz Jänicke
71fbcb67b3 Next version will be 0.9.6h
Submitted by: Tapani Tarvainen <tt@it.jyu.fi>
Reviewed by:
PR: 281
2002-11-08 19:51:04 +00:00
Richard Levitte
b26728b350 Keep on using ${CC}, since gcc may act in disguise.
PR: 329
2002-11-06 23:47:25 +00:00
Richard Levitte
8c237ffb7c some people just can't read the instructions 2002-11-06 06:02:17 +00:00
Bodo Möller
33c3f72792 avoid Purify warnings
Submitted by: Nils Larsch
2002-11-05 12:24:41 +00:00
Richard Levitte
f2d8dddd46 Off-by-one-error corrected.
PR: 235
2002-11-04 11:30:30 +00:00
Richard Levitte
7dde4eb91e nasm can compile for Borland C 2002-11-04 06:25:38 +00:00
Geoff Thorpe
69c8c5611c The recent session caching modifications (including docs, and CHANGES) were
applied to the "engine" 0.9.6 branch rather than the non-engine one. This
merges all the changes back across so they are in-sync w.r.t. these
changes.
2002-10-29 18:36:51 +00:00
Bodo Möller
96eef150d6 increase permissible message length so that we can handle
CertificateVerify for 4096 bit RSA signatures
2002-10-28 15:40:47 +00:00
Richard Levitte
3dae1904a0 Signal an error if the entered output password didn't match itself.
PR: 314
2002-10-23 15:07:13 +00:00
Bodo Möller
be8b7fe38c I don't like c-tab-always-indent ... 2002-10-23 13:09:50 +00:00
Dr. Stephen Henson
473048587d Typo. 2002-10-21 00:12:43 +00:00
Bodo Möller
e76dd4cba8 change Emacs indentation style to make it easier to insert
tabs manually

Submitted by: Pierre Bacquet <pbacquet@delta.fr>
2002-10-17 09:15:46 +00:00
Richard Levitte
495ac8e429 When BN_add_word() reaches top, it shouldn't try to add the the corresponding
word, since that word may not be zero.
2002-10-14 11:27:11 +00:00
Richard Levitte
0bde80f932 Merge string protection from main trunk 2002-10-11 20:35:37 +00:00
Bodo Möller
c30ab16396 fix some entries for 0.9.6d and 0.9.6e (should look as in the
0.9.7-stable branch)
2002-10-11 17:51:25 +00:00
Richard Levitte
ad1b6d0df3 There may be more than one single quote to fix.
PR: 256
2002-10-11 11:34:24 +00:00
Richard Levitte
6a0168e842 Make sure $fname will not give us any surprises with any funny characters.
PR: 256
2002-10-11 11:07:32 +00:00
Richard Levitte
cd9a79eae1 BN_bn2hex() returns "0" instead of "00" for zero. This disrputs the
requirement that the serial number always be an even amount of characters.
PR: 248
2002-10-11 09:39:06 +00:00
Richard Levitte
b61cd4fff2 Make sure that the 'config' variable is correctly defined and declared
for monolithic as well as non-monolithic biuld.
More work is probably needed in this area.
PR: 144
2002-10-09 15:36:35 +00:00
Richard Levitte
dd2b7b5c12 Remove redundancy and use the main makefile better 2002-10-09 15:13:14 +00:00
Richard Levitte
7eead40213 Don't fuss with the demo binaries 2002-10-09 13:58:11 +00:00
cvs2svn
50ef42424b This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2002-10-09 13:57:57 +00:00
Richard Levitte
9952cfcf62 Use double dashes so makedepend doesn't misunderstand the flags we
give it.
For 0.9.7 and up, that means util/domd needs to remove those double
dashes from the argument list when gcc is used to find the
dependencies.
2002-10-09 13:16:31 +00:00
Richard Levitte
7821c0c40b Add missing LF 2002-10-09 06:35:58 +00:00
Richard Levitte
cc9e060ad5 Installed libraries should not be overwritten, especially shared ones.
Use mv to make sure the old copy is unlinked instead of overwritten.
PR: 273, and probably others...
2002-10-04 13:43:51 +00:00
Richard Levitte
08d9c08012 Add a small note saying the 'debug' option should come before the platform in
the arguments to mk1mf.pl.
PR: 298
2002-10-04 12:32:33 +00:00
Richard Levitte
8177986361 Document should match reality :-).
PR: 255
2002-10-04 00:03:29 +00:00
Bodo Möller
b49d33defd fix more race conditions
Submitted by: "Patrick McCormick" <patrick@tellme.com>
PR: 262
2002-09-26 15:55:46 +00:00
Lutz Jänicke
db7749b8ac Add missing brackets.
Submitted by: "Chris Brook" <cbrook@v-one.com>
Submitted by:
Reviewed by:
PR:
2002-09-25 20:20:55 +00:00
Bodo Möller
af4396e589 really fix race conditions
Submitted by: "Patrick McCormick" <patrick@tellme.com>

PR: 262
PR: 291
2002-09-25 15:36:21 +00:00
Richard Levitte
9c4d0c68bd It makes more sense to refer to specific function manuals than the concept
manual when the specific function is refered to in the current manual text.
This correction was originally introduced in OpenBSD's tracking of OpenSSL.
2002-09-25 13:33:58 +00:00
Richard Levitte
d836e3679a It makes more sense to refer to specific function manuals than the concept
manual when the specific function is refered to in the current manual text.
This correction was originally introduced in OpenBSD's tracking of OpenSSL.
2002-09-25 13:11:20 +00:00
Richard Levitte
927e75f60a -elapsed is also useful when using gettimeofday 2002-09-25 12:42:12 +00:00
Bodo Möller
8a7480eaa3 I meant CRYPTO_LOCK_SSL_METHOD to be the same as CRYPTO_LOCK_SSL_CTX
in 0.9.6-stable (that one is a close relative anyway)
2002-09-23 14:35:16 +00:00
Bodo Möller
924b6006d7 really fix race condition
PR: 262
2002-09-23 14:30:59 +00:00
Ulf Möller
85789cd2a0 don't compile egd support on MSDOS 2002-09-22 08:52:43 +00:00
Ulf Möller
cc843e3f9f as in head 2002-09-22 08:44:47 +00:00
cvs2svn
085ec0da60 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2002-09-22 08:44:05 +00:00
Bodo Möller
caf97dbad0 there is no minimum length for session IDs
PR: 274
[previous commit did not include all the changes]
2002-09-20 08:27:44 +00:00
Bodo Möller
5fef7d56ce there is no minimum length for session IDs
PR: 274
2002-09-19 11:43:13 +00:00
Bodo Möller
30c37c52c5 fix race condition
PR: 262
2002-09-19 11:27:37 +00:00
Lutz Jänicke
170d47b1ba Consequently use term URI instead of URL
Submitted by: TJ Saunders <tj@castaglia.org>
Reviewed by:
PR: 268
2002-09-05 07:52:45 +00:00
Dr. Stephen Henson
e474aacd58 Fix ASN1_STRING_to_UTF8: remove non sensical !*out test. 2002-08-30 17:16:56 +00:00
Bodo Möller
145a2794da don't memset(data,0,...) if data is NULL
Submitted by: anonymous
PR: 254
2002-08-29 11:33:43 +00:00
Dr. Stephen Henson
9370c84361 Fix crahses and leaks in pkcs12 utility -chain option 2002-08-22 21:53:49 +00:00
Richard Levitte
846b8fddc4 Typo, I assigned the variable ld instead of my_ld... 2002-08-18 21:32:39 +00:00
Richard Levitte
9b0defd1bb So, I discovered that if you have your $PATH set so a ld different from
GNU ld comes first, checking the usage of collect2 gives that instead of
GNU ld, even if GNU ld would be the one that would get used if we link using
gcc.  It's much better, apparently, to ask gcc directly what the path to
GNU ld is (provided it's there at all and gcc knows about it), and ask
the result if it's a GNU or not.  The bonus is that our GNU ld detection
mechanism got shorter and easier to understand...
2002-08-17 13:46:46 +00:00
Lutz Jänicke
06076d9d31 Reorder cleanup sequence in SSL_CTX_free() to leave ex_data for remove_cb().
Submitted by:
Reviewed by:
PR: 212
2002-08-16 17:09:31 +00:00
Richard Levitte
f0a4a3bc0e If gmtime() returned NULL (and we couldn't fix it à la VMS), let's
return NULL.
PR: 228
2002-08-16 11:55:54 +00:00
Richard Levitte
317521eebd isalist was less trustable than I thought (or rather, one can trust it to
come up with all kinds of names we don't have in our targets).
Besides, our sparcv9 targets currently generate sparcv8 code, I'm told.
2002-08-16 09:41:23 +00:00
Bodo Möller
b411e2724f use correct function code in error message 2002-08-15 16:16:36 +00:00
Richard Levitte
fa68d294fc It seems like sun4u doesn't always have a sparcv9 inside. Trust isalist.
PR: 220
2002-08-15 15:20:55 +00:00
Bodo Möller
bf6a0c5631 fix warnings (CHARSET_EBCDIC)
Submitted by: Lorinczy Zsigmond <lzsiga@mail.ahiv.hu>
2002-08-15 14:54:16 +00:00
Bodo Möller
8d9450deb0 fix manpage
Submitted by: thomas poindessous <poinde_t@epita.fr>
2002-08-15 14:22:27 +00:00
Richard Levitte
0a2a5fc988 Add a FAQ entry for yet another bc failure.
PR: 199
2002-08-15 10:50:36 +00:00
Richard Levitte
ffcbf991b1 Sometimes, the value of the variable containing the compiler call can
become rather large.  This becomes a problem when the default 1024
character large buffer that WRITE uses isn't enough.  WRITE/SYMBOL
uses a 2048 byte large buffer instead.
2002-08-15 08:29:58 +00:00
Bodo Möller
1a87374ed2 change how pod2man is handled: explicitly invoke '$PERL' only when
needed, call 'pod2man' directly if this works

PR: 217
2002-08-14 14:10:25 +00:00
Richard Levitte
425d06d178 Instead of returning errors when certain flags are unusable, just ignore them.
That will make the test go through even if DH (or in some cases ECDH) aren't
built into OpenSSL.
PR: 216, part 2
2002-08-14 12:18:29 +00:00
Richard Levitte
7ee5c0a0a2 Do not use the word 'modulus', which is a class template name in VC++ 6.0/SP5.
PR: 216, point 3
2002-08-14 12:08:44 +00:00
Richard Levitte
bf6635038f Small syntax error corrected. Fortunately, this one only issues a
warning, and is thereby ignored by the rest of the command procedure.
The only problem would be if SSL_TASK.C failed to compile, which
hasn't happened in ages...
2002-08-14 11:27:25 +00:00
Richard Levitte
d3b59c8dcf Make sure that the test input file comes in the same record format as the
typical output from a program in C.
PR: 222
2002-08-14 11:08:52 +00:00
Dr. Stephen Henson
1318510f8c Fix typo in OBJ_txt2obj which incorrectly passed the content
length, instead of the encoding length to d2i_ASN1_OBJECT.

This wasn't visible before becuse ASN1_get_object() used
to read past the length of the supplied buffer.
2002-08-14 00:36:44 +00:00
Richard Levitte
532441a93a Time to go on... 2002-08-09 12:08:23 +00:00
Richard Levitte
4c68b3239b Time to release 0.9.6g.
The tag will be OpenSSL_0_9_6g.
2002-08-09 11:37:15 +00:00
Richard Levitte
b91734063f When we want to give a -f argument to $(MAKE), we'd better make sure the
variable doesn't already contain a -f argument.
PR: 203, part 4
2002-08-09 08:49:53 +00:00
Bodo Möller
ca2b12feec entry for change in 'engine' branch 2002-08-09 08:13:13 +00:00
Richard Levitte
67df1b6139 Since we moved the pod2man check to be outside the loop, the path to it is different.
PR: 203, part 3
2002-08-09 07:39:57 +00:00
Richard Levitte
d4e122b36c Remove an extra @, since that line is now a continuation of the previous one.
PR: 203, part 2
2002-08-09 07:37:28 +00:00
Richard Levitte
262e9b70d7 Parse version numbers prefixed with text (egcs does that, even with
-dumpversion).
PR: 203, part 1
2002-08-09 07:32:38 +00:00
Richard Levitte
18794c6a83 Tagging has been done, update to next development version. 2002-08-08 21:23:51 +00:00
Richard Levitte
df75a709c9 Time to release version 0.9.6f.
The tag will be OpenSSL_0_9_6f.
2002-08-08 20:51:52 +00:00
Richard Levitte
27b115938b make update 2002-08-08 20:41:20 +00:00
Dr. Stephen Henson
20515fe7df Fix typo 2002-08-02 19:00:21 +00:00
Dr. Stephen Henson
24f55d7675 Fix the ASN1 sanity check: correct header length
calculation and check overflow against LONG_MAX.
2002-08-02 18:41:08 +00:00
Richard Levitte
3e34aaafad Certain flag macros were tested with #if instead if #ifdef... 2002-08-02 11:14:06 +00:00
Bodo Möller
517a0e7fa0 get rid of OpenSSLDie 2002-08-02 10:51:59 +00:00
Richard Levitte
0e0ddc43cf We don't need to find out which pod2man to use more than once 2002-08-01 21:53:24 +00:00
Richard Levitte
c2b365cbcc Don't try testing with parallell make, that will just fail.
PR: 175
2002-08-01 21:34:56 +00:00
Richard Levitte
21925f8435 Linux on s390 really knows about loading dynamically.
PR: 183
2002-08-01 13:50:41 +00:00
Richard Levitte
a946c18d8f Make sure it's possible to check GCCVER even if it wasn't set.
PR: 179
2002-08-01 10:17:05 +00:00
Richard Levitte
6de41cf0d9 If CRYPTO_realloc() is called with a NULL pointer, have it call
OPENSSL_malloc().
PR: 187
2002-08-01 10:08:53 +00:00
Richard Levitte
f8acaa92ec Make sure to use $(MAKE) everywhere instead of make.
Part of PR 181
2002-07-31 13:49:22 +00:00
Richard Levitte
d5f71f40a5 ln -f -s doesn't always work, so do a rm -f followed by a ln -s.
Part of PR 181
2002-07-31 13:38:50 +00:00
Lutz Jänicke
2c3bd4778e Next version of 0.9.6 would be 0.9.6f.
Submitted by:
Reviewed by:
PR:
2002-07-30 10:52:36 +00:00
Lutz Jänicke
05ebb1e7cf Release 0.9.6e.
Submitted by:
Reviewed by:
PR:
2002-07-30 10:34:35 +00:00
Lutz Jänicke
bb41724483 OpenSSL Security Advisory [30 July 2002]
Changes marked "(CHATS)" were sponsored by the Defense Advanced
Research Projects Agency (DARPA) and Air Force Research Laboratory,
Air Force Materiel Command, USAF, under agreement number
F30602-01-2-0537.
Submitted by:
Reviewed by:
PR:
2002-07-30 10:19:01 +00:00
Lutz Jänicke
d12eb7b024 "make update"
Submitted by:
Reviewed by:
PR:
2002-07-30 09:32:45 +00:00
Bodo Möller
693dc88fc6 mention SSL_do_handshake() 2002-07-29 12:34:47 +00:00
Bodo Möller
c3fa44cb17 typo etc. 2002-07-25 11:17:01 +00:00
Bodo Möller
fc288e5740 more detailed instructions for export from US 2002-07-25 11:16:05 +00:00
Bodo Möller
e6db99a4ab BIS URL really spells 'Notify' as 'Nofify' 2002-07-25 11:01:22 +00:00
Bodo Möller
99078a3e6f bxa => bis 2002-07-25 11:00:19 +00:00
Richard Levitte
8792704cf2 Don't clobber loop variable.
PR: 159
2002-07-24 14:42:05 +00:00
Lutz Jänicke
5787727f5d HP-UX shared libraries must be +x and should be -w. It doesn't hurt on
other platforms.
Submitted by:
Reviewed by:
PR: 134
2002-07-19 16:33:26 +00:00
Bodo Möller
b5b19ae0bd 'SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION' does not belong here,
it's 0.9.7 only
2002-07-19 12:37:30 +00:00
Bodo Möller
1802b96a42 update 2002-07-19 12:33:41 +00:00
Lutz Jänicke
165d5907c8 The behaviour is undefined when calling SSL_write() with num=0.
Submitted by:
Reviewed by:
PR: 141
2002-07-19 11:54:37 +00:00
Lutz Jänicke
61bed53665 Manual page for SSL_do_handshake().
Submitted by: Martin Sjögren <martin@strakt.com>
PR: 137
2002-07-19 11:07:53 +00:00
cvs2svn
124da0e580 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2002-07-19 11:05:52 +00:00
Geoff Thorpe
abcce97a97 this is a non-ENGINE version of the clarifications made to the other CVS
branches.

PR: 86
2002-07-18 22:24:25 +00:00
Richard Levitte
0ff3250f05 Allow subjects with more than 255 characters to be properly printed.
PR: 147
2002-07-18 17:59:27 +00:00
Bodo Möller
f0a3f16691 typo 2002-07-18 11:15:52 +00:00
Richard Levitte
c34a865f98 Reverse the change with the following log, it needs further investigation:
Make S/MIME output conform with the mail and MIME standards.
PR: 151
2002-07-18 10:39:34 +00:00
Richard Levitte
4f27f6be73 Make S/MIME output conform with the mail and MIME standards.
PR: 151
2002-07-18 08:47:47 +00:00
Richard Levitte
4d088fcede Make mkdir failsafe in case the directories are already present 2002-07-17 13:33:06 +00:00
Richard Levitte
5fe5996867 Add a few FAQ entries for the various ways building OpenSSL on MacOS X
can fail, and point at the text in the PROBLEMS file
2002-07-17 11:29:26 +00:00
Richard Levitte
8f56fcdfb0 On MacOS X, you're not allowed to have common objects in shared libraries 2002-07-17 08:20:40 +00:00
Richard Levitte
4d4d588fa1 Add the usually recommended solution to the linking problem entry for MacOS X 2002-07-17 07:48:44 +00:00
Richard Levitte
156e746981 The default C compiler on MacOS X doesn't like empty object files 2002-07-16 10:46:04 +00:00
Richard Levitte
79587521ae Add the new PROBLEMS section from HEAD 2002-07-16 10:39:37 +00:00
cvs2svn
aa131804c5 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2002-07-16 10:20:07 +00:00
Lutz Jänicke
9a55e8263c Rewording: some algorithms are also patented in Europe, so choose more
defensive phrases...
2002-07-12 15:27:35 +00:00
Lutz Jänicke
dfa098012f Discussion about Redhat's specialties for the FAQ.
Submitted by: John.Airey@rnib.org.uk
Reviewed by:
PR: 128
2002-07-10 19:49:47 +00:00
Lutz Jänicke
b3994e15d6 Typos in links between manual pages
Submitted by: Richard.Koenning@fujitsu-siemens.com
Reviewed by:
PR: 129
2002-07-10 19:37:08 +00:00
Lutz Jänicke
3406fae673 Sun's official statement with respect to /dev/random support.
Submitted by: Garrett Anderson garrett@dirsec.com
Reviewed by:
PR: 120
2002-07-10 17:53:04 +00:00
Lutz Jänicke
e0299ff63b Minor typos
Submitted by: jufi@nerdnet.de
Reviewed by:
PR: 138
2002-07-10 17:35:18 +00:00
Lutz Jänicke
d2cbe66ee1 Ciphers with NULL encryption were not properly handled because they were
not covered by the strength bit mask.
Submitted by:
Reviewed by:
PR: 130
2002-07-10 06:41:29 +00:00
Bodo Möller
7d0e1c1188 fix synopsis
Submitted by: Nils Larsch
2002-07-09 10:51:57 +00:00
Bodo Möller
0ac51fcf0b emtpy fragments are not necessary for SSL_eNULL
(but noone uses it anyway)
2002-07-09 08:48:03 +00:00
Lutz Jänicke
01a9310b75 README and INSTALL should contain information about the request tracker
(noted by Jonathan Louie <jlouie@recourse.com>).
2002-06-30 19:39:41 +00:00
Richard Levitte
e17af60f15 Try to avoid double declaration of ERR_load_PEM_strings().
PR 71
2002-06-27 17:06:52 +00:00
Richard Levitte
b2d4cea305 Apply the Borland Builder 5 changes that I forgot... 2002-06-27 15:55:44 +00:00
Richard Levitte
9b25ef8b2e The new stuff is for Borland Bulider 5, so document it appropriately 2002-06-27 15:11:32 +00:00
Richard Levitte
e2c07bce12 Use 32-bit sections instead of the default, 16-bit ones.
Part of PR 123
2002-06-27 14:54:48 +00:00
Richard Levitte
c678763f7d have 'openssl pkcs7' exit with code 1 on error instead of 0.
PR: 119
2002-06-27 10:27:11 +00:00
Richard Levitte
5a52e7ecad gcc requires -m64 to link 64-bit shared libraries on Solaris.
PR: 117
2002-06-27 10:20:39 +00:00
Richard Levitte
d466e8eb5a Use bg instead of bag as argument to macros, to avoid clashes with
structure field names.
PR: 112
2002-06-27 09:54:23 +00:00
Bodo Möller
2edfbc53d8 Make sure buffers are large enough even for weird parameters
Submitted by: Nils Larsch
2002-06-26 14:29:45 +00:00
Richard Levitte
ef42bf2a7e For some reason, we need to return the full path to perl 2002-06-25 11:42:05 +00:00
Lutz Jänicke
c6c12d6301 HP-UX: shared libraries MUST be +x and SHOULD be -w. 2002-06-20 19:54:13 +00:00
Lutz Jänicke
180a8f8e2c Fix path to find util/pod2man.pl from the execution directory.
Make sure to use the predefined PERL.
Submitted by: Bernhard Simon <bs@bsws.zid.tuwien.ac.at>
Reviewed by:
PR:
2002-06-20 19:51:40 +00:00
Lutz Jänicke
06d4c6b176 Use -dumpversion to obtain gcc's version.
Submitted by: ross.alexander@uk.neceur.com, allenh@eecs.berkeley.edu
Reviewed by:
PR: 96
2002-06-16 10:32:14 +00:00
Lutz Jänicke
132702460b Initial support for hpux64-parisc-gcc
Submitted by: ross.alexander@uk.neceur.com
Reviewed by:
PR: 96
2002-06-14 20:28:17 +00:00
Bodo Möller
32a76f2c75 New option SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS for disabling CBC
vulnerability workaround (included in SSL_OP_ALL).

PR: #90
2002-06-14 12:19:34 +00:00
Richard Levitte
578c1cdefa make update 2002-06-13 21:57:57 +00:00
Richard Levitte
c3347d0561 Add support for UWIN, a Unix-like environment on top of Windows.
PR: 62
2002-06-13 21:41:46 +00:00
Richard Levitte
1f5a2a4dde Make sure that any dash in the prefix before the version number is removed.
PR: 96
2002-06-13 21:12:20 +00:00
Lutz Jänicke
2994181b1b Correct wrong usage information.
PR: 95
2002-06-12 20:16:17 +00:00
Lutz Jänicke
d993f3af33 Support building the distribution .tar file on platforms with limited
argument list length. This requires Gnu-tar. As we use the non-standard
"tardy" software anyway, it doesn't hurt too much to require Gnu-tar.
"make dist" will probably only be used by team-members anyway.
2002-06-12 12:28:06 +00:00
Bodo Möller
1ffa78ec6c fix for 'make update' 2002-06-10 11:42:04 +00:00
Lutz Jänicke
64e3974013 Make sure that flags are passed to "make" subprocesses. 2002-06-10 08:12:12 +00:00
Lutz Jänicke
c6f0c60427 Make sure that settings are passed back and forth when walking around
in the tree during build.
Reinstall default PERL settings in Makefiles, as the real reason for the
failure was that the settings were not passed.
2002-06-06 11:14:40 +00:00
Richard Levitte
d23a74f71c Make perl replacement for dirname, for system that lack the latter.
PR: 81
2002-06-05 14:09:53 +00:00
Richard Levitte
12c853701e It's not good to have a pointer point at something in an inner block.
PR: 66
2002-06-05 13:47:06 +00:00
Richard Levitte
d5353b5ffb Unneeded cast removed 2002-06-05 13:12:55 +00:00
Richard Levitte
549ce02729 Check errors when parsing a PKCS8INF PEM FILE, or there will be a core dump on error.
PR: 77
2002-06-05 11:58:16 +00:00
Richard Levitte
ea2a6251b9 signedness warning corrected 2002-06-05 11:23:19 +00:00
Richard Levitte
89cac82066 Documentation bug corrected.
PR: 70
2002-06-05 09:29:33 +00:00
Lutz Jänicke
fa7688a5b1 On some systems the default "perl" may still be perl4, use the correct
version determined by "config" instead.
2002-06-05 07:25:49 +00:00
Lutz Jänicke
094ed2dd19 The correct PERL interpreter is passed via commandline. 2002-06-05 07:07:50 +00:00
Richard Levitte
d0f07ceeee Addapt loadkeys.c to API changes
PR: 64
2002-06-05 05:21:19 +00:00
Richard Levitte
68927d3670 Update the recognision of GCC version numbers to handle the prefix text
that GCC 3.1 adds to the --version output
2002-06-05 05:00:30 +00:00
Richard Levitte
ba6c905c93 make update 2002-06-04 22:33:28 +00:00
Lutz Jänicke
fa54157a11 Typo. 2002-06-04 20:44:58 +00:00
Richard Levitte
ea4df8ad62 Reformat the CFLAG string so it can be made part of a C string.
Incidently, this works pretty well on the command line as well.
PR: 52
2002-05-30 18:07:30 +00:00
Richard Levitte
dbf50f36c4 Support the newly release gcc 3.1 on 64-bit Solaris. Not automatic.
PR: 57
2002-05-30 17:28:34 +00:00
Richard Levitte
d49ceb3328 Support shared libraries properly on linux-sparcv[89].
PR: 60
2002-05-30 17:08:47 +00:00
Richard Levitte
d66c022a1f Check the return values where memory allocation failures may happen.
PR: 49
2002-05-30 16:49:00 +00:00
Richard Levitte
04c8e99b39 CAformat should not be used for CA key format. 2002-05-30 16:24:33 +00:00
Richard Levitte
09402efb93 pod2man.pl would only remove the first LF from the name. 2002-05-30 15:30:27 +00:00
Richard Levitte
2619064e09 Apparently, there are still chances we have to deal with buggy pod2man versions.
Deal with that by testing any available pod2man and using it if appropriate,
and falling back to util/pod2man.pl if none was found.
2002-05-30 15:18:19 +00:00
Richard Levitte
3cda197ee3 Avoid freeing certain things twice.
PR: 43
2002-05-30 12:51:16 +00:00
Richard Levitte
c019099cb6 Correct darwin shared library support.
PR: 39
2002-05-30 12:17:03 +00:00
Richard Levitte
043e8ec568 Some shlib extensions were in the wrong field 2002-05-30 10:47:36 +00:00
Richard Levitte
e57a8c732b Our copy of pod2man.pl is old and comparatively broken, so lets remove it.
PR: 30
2002-05-30 10:18:32 +00:00
Richard Levitte
da0bab4c0c Remove the duplicate description of -out.
PR: 28
2002-05-30 06:24:41 +00:00
Dr. Stephen Henson
9b652e84a8 Make i2c_ASN1_BIT_STRING return the correct length. 2002-05-29 23:13:16 +00:00
Richard Levitte
b91c29147b Set DLOPEN_FLAG the same way on NetBSD as on OpenBSD.
PR: 58, submitted by andrew@cis.uoguelph.ca
2002-05-29 20:55:25 +00:00
Richard Levitte
1af4d83565 There is a chance that the input string is larger than size, and on VMS,
this wasn't checked and could possibly be exploitable (slim chance, but still)
2002-05-29 08:31:30 +00:00
Lutz Jänicke
c1febe86d1 Remove item listed twice <kromJx@crosswinds.net>. 2002-05-28 17:47:17 +00:00
Richard Levitte
6c53759a50 Recover from errors 2002-05-23 23:33:22 +00:00
Richard Levitte
8c20ab7994 Avoid loops when linking doesn't work 2002-05-23 15:27:29 +00:00
Bodo Möller
a9950dfb67 fix EVP_dsa_sha macro
Submitted by: Nils Larsch
2002-05-16 12:55:56 +00:00
Bodo Möller
a385a1aef0 make b_print.c consistent with the rest of OpenSSL:
disable assert() except for debug builds
2002-05-14 19:04:54 +00:00
Lutz Jänicke
1126740ddd Fix targets sco5 and svr5 (shared). Boyd Gerber <gerberb@zenez.com>. 2002-05-12 20:36:19 +00:00
Lutz Jänicke
fa9647d62f Recognize PPC64 target.
Submitted by:
Reviewed by:
PR: 26
2002-05-12 19:45:02 +00:00
Richard Levitte
5981eee041 Updating status for 0.9.6d 2002-05-09 23:53:01 +00:00
Richard Levitte
be730546c8 Add space for changes in 0.9.6e. 2002-05-09 23:02:13 +00:00
Richard Levitte
daab6e86f4 Now that tagging has been done, let the version go on to 0.9.6e-dev. 2002-05-09 22:59:00 +00:00
Richard Levitte
5317543ada About to release 0.9.6d, so set all versoin numbers right.
The tag will be OpenSSL_0_9_6d.
2002-05-09 22:40:31 +00:00
Richard Levitte
38d3544867 make update 2002-05-09 21:16:19 +00:00
Richard Levitte
9811a7406c Make the huge buffer smaller, so the size becomes reasonable for small-stack environments.
Notified by Verdon Walker <VWalker@novell.com>
2002-05-09 20:14:17 +00:00
Richard Levitte
2d4ce88b11 Move an assert() to avoid core dumps when a static buffer hasn't been given.
Notified by Verdon Walker <VWalker@novell.com>
2002-05-09 18:19:35 +00:00
Richard Levitte
2cbe7e26c0 Backport the semicolon fix from the 0.9.7 and 0.9.8-dev branches 2002-05-08 15:50:48 +00:00
Richard Levitte
a6c4ee6d79 Small documentation fix for EVP_CipherFinal or EVP_CipherFinal_ex.
Notified by Stella Power <snpower@maths.tcd.ie>.
PR: 24
2002-05-08 15:20:12 +00:00
Richard Levitte
3f8c72ce77 Generate an error if rewinding wasn't possible.
Notified by Ken Hirsch <kenhirsch@myself.com>.
PR: 23
2002-05-08 15:13:35 +00:00
Bodo Möller
35fbadb322 fix warning 2002-05-06 10:42:56 +00:00
Bodo Möller
42e453201d update 2002-05-05 23:48:29 +00:00
Bodo Möller
ea9e248cde fix casts 2002-05-05 23:01:42 +00:00
Richard Levitte
3d24c18200 Make sure that date is run under the C locale, so dates are given in the
default format.
PR: 16
2002-05-02 08:06:03 +00:00
Dr. Stephen Henson
64f1ae3868 Win32 VC++ warning fixes. 2002-05-02 01:52:18 +00:00
Richard Levitte
9cf94f9ed3 Fix unsigned vs. signed clash 2002-04-29 10:30:05 +00:00
Bodo Möller
c15bf8f609 Fix crypto/asn1/a_sign.c so that 'parameters' is omitted (not
encoded as NULL) with id-dsa-with-sha1.

Submitted by: Nils Larsch
2002-04-26 08:30:31 +00:00
Richard Levitte
6b42cad215 Potential memory leak removed. Notified by <threaded@totalise.co.uk> 2002-04-25 10:10:51 +00:00
Bodo Möller
4a34577ec8 oops 2002-04-25 07:46:45 +00:00
Bodo Möller
6e7af77268 AlgorithmIdentifier bugs 2002-04-25 06:29:38 +00:00
Bodo Möller
5c5a2cd273 fix usage (no 'key') 2002-04-23 13:54:54 +00:00
Richard Levitte
1c4dc1517d Uhmmm, if we use && after having tested for the presence of the certificate,
we just *might* stand a certain chance of actually getting it written
to file...
2002-04-23 13:15:22 +00:00
Lutz Jänicke
07a0226c28 Add cygwin build script (Corinna Vinschen <vinschen@redhat.com>). 2002-04-21 17:55:55 +00:00
cvs2svn
2ced9dc822 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2002-04-21 17:54:05 +00:00
Lutz Jänicke
9a12193611 Leave out problematic assembler part for sco5-gcc-shared target
(Tim Rice <tim@multitalents.net>).
2002-04-21 17:42:02 +00:00
Richard Levitte
ea599390c6 Make sure the opened directory is closed on exit.
Notified by Lorinczy Zsigmond <lzsiga@mail.ahiv.hu>
2002-04-18 16:20:32 +00:00
Lutz Jänicke
0a0102b0fd Optimize: better shortcut evaluation ("Howard Chu" <hyc@highlandsun.com>). 2002-04-18 11:52:28 +00:00
Bodo Möller
1532a839fc synchronize with engine branch (some changes were done only
there for no particular reason)
2002-04-18 09:27:14 +00:00
Lutz Jänicke
d77ee3b75c Handle headings uniformly to allow automatic processing. 2002-04-18 08:18:41 +00:00
Richard Levitte
c387a61fdd 0.9.6d-beta1 is about to be built. Change version numbers and strings
accordingly.
2002-04-17 12:28:37 +00:00
Bodo Möller
5d2175eddb check return values
Submitted by: Nils Larsch
2002-04-17 09:29:54 +00:00
Lutz Jänicke
7680669c33 Fix CRLF problem in BASE64 decode. 2002-04-15 09:51:10 +00:00
Bodo Möller
a6ec2d58ba improve binary compatibility 2002-04-14 08:25:41 +00:00
Bodo Möller
82c77c1b32 Implement known-IV countermeasure.
Fix length checks in ssl3_get_client_hello().

Use s->s3->in_read_app_data differently to fix ssl3_read_internal().
2002-04-13 22:49:28 +00:00
Ulf Möller
ea72ff2df7 error reported by Karsten Braaten 2002-04-13 10:00:01 +00:00
Bodo Möller
4e5b835c6a synchronize with OpenSSL-engine-0_9_6-stable 2002-04-12 13:44:04 +00:00
Richard Levitte
1171f28f97 Check error code from a2d_ASN1_OBJECT(). 2002-04-11 22:14:51 +00:00
Lutz Jänicke
5c04e56285 Synchronize with 0.9.7-stable 2002-04-11 18:45:15 +00:00
Lutz Jänicke
9bac8d91d9 Keep my own specially optimized HP-UX shared library building up to date. 2002-04-10 12:37:59 +00:00
Bodo Möller
875e8fca2d harmonize capitalization 2002-04-09 12:43:18 +00:00
Ulf Möller
39ee29b02c error reported by Karsten Braaten 2002-04-07 13:33:26 +00:00
Richard Levitte
847b76dd0e Allow longer program names (VMS allows up to 39 characters).
Submitted by Compaq.
2002-04-06 20:22:32 +00:00
Richard Levitte
c901a0538b make update 2002-04-06 19:08:51 +00:00
Richard Levitte
a5ee2b5232 Allow longer program names (VMS allows up to 39 characters).
Submitted by Compaq.
2002-04-06 18:59:43 +00:00
Richard Levitte
f520a2a8c2 Recognise DEC C++ as equivalent to DEC C for the definitions of OPENSSL_EXTERN and OPENSSL_GLOBAL.
Submitted by Compaq.
2002-04-06 11:37:07 +00:00
Richard Levitte
78e7617324 Use recv() and send() for socket communication on VMS instead of read()
and write().  The reason is that read() and write() make additional record
level locking which causes hangs of Compaq Secure Web Server (Apache) with
SSL.
Submitted by Compaq.
2002-04-06 11:35:40 +00:00
Richard Levitte
56d490cd40 Don't define RSA-specifici variables when RSA isn't used. 2002-04-06 09:57:52 +00:00
Richard Levitte
9bd313b83d Make shared libraries resolve global symbols within themselves first.
Currently only on GNUish linkers...
Submitted by Steven Bade <sbade@austin.ibm.com>
2002-04-06 09:42:31 +00:00
Lutz Jänicke
50e4d01fa0 Fix buggy object definitions (Svenning Sorensen <sss@sss.dnsalias.net>). 2002-04-04 17:56:57 +00:00
Richard Levitte
4a579233b4 Fix of mixup bwtween SOMAXCONN and SO_MAXCONN.
Furthermore, make SO_MAXCONN the first choice, since that's the standard
(as far as I know).
2002-03-29 23:48:29 +00:00
Lutz Jänicke
ca3bba36c4 Fix typo (Craig Davison <cd@securityfocus.com>). 2002-03-25 17:10:20 +00:00
Ben Laurie
a37d05fa56 Fix warning. 2002-03-25 12:53:25 +00:00
Lutz Jänicke
b111c5b8ce Fix buggy if-condition (thomas poindessous <poinde_t@epita.fr>). 2002-03-21 19:14:56 +00:00
Lutz Jänicke
7228bfb439 Remove superflous (and buggy) statement <justin.fletcher@ntlworld.com>. 2002-03-21 19:11:19 +00:00
Bodo Möller
687f9d2b94 fix DH_generate_parameters for general 'generator' 2002-03-20 16:01:29 +00:00
Lutz Jänicke
6bcba344b5 Map new X509 verification errors to alert codes (Tom Wu <tom@arcot.com>). 2002-03-19 16:47:09 +00:00
Bodo Möller
6cebd2dd00 in INCLUDES, use '-I../..' so that we find "e_os.h" 2002-03-18 10:54:56 +00:00
Bodo Möller
b82a94ee26 use '-I../..' so that we find "e_os.h" 2002-03-18 10:53:01 +00:00
Bodo Möller
ba5541e1ad Rename 'cray-t90-cc' into 'cray-j90'.
Add to 'config'.
2002-03-15 16:47:23 +00:00
Bodo Möller
84b45fda86 oops -- undo previous commit, I'm still waiting for confirmation
from Weny Palm
2002-03-15 11:09:31 +00:00
Bodo Möller
7aacd4c458 fix ssl3_pending 2002-03-15 10:53:34 +00:00
Lutz Jänicke
e18ed57afd Add missing strength entries. 2002-03-14 18:56:59 +00:00
Bodo Möller
ff9722c7f1 use BIO_nwrite() more properly to demonstrate the general idea of
BIO_nwrite0/BIO_nwrite (the previous code was OK for BIO pairs but not
in general)
2002-03-14 09:49:10 +00:00
Bodo Möller
08f38d887e we need e_os.h 2002-03-14 09:45:37 +00:00
Bodo Möller
5798378a22 add a paragraph from 0.9.7-dev/0.9.8-dev 2002-03-12 12:22:08 +00:00
Richard Levitte
e1fefe8124 Typo. 2002-03-06 06:13:44 +00:00
Bodo Möller
b8b09625dc Rephrase statement on the security of two-key 3DES.
[Chosen plaintext attack: R. Merkle, M. Hellman: "On the Security of
  Multiple Encryption", CACM 24 (1981) pp. 465-467, p. 776.

  Known plaintext angriff: P.C. van Oorschot, M. Wiener: "A
  known-plaintext attack on two-key triple encryption", EUROCRYPT '90.]
2002-03-05 15:30:41 +00:00
Richard Levitte
54d78c4778 Make it so one can select tests from within the test directory 2002-03-04 15:58:49 +00:00
Bodo Möller
354d263e44 _INT_MAX should read INT_MAX (this is correct in the 0.9.7-dev and
main branches)
2002-03-01 14:05:30 +00:00
Bodo Möller
f85b14c4ba add missing '#endif'
Submitted by:  Oscar Jacobsson <oscar@jacobsson.org>
2002-03-01 14:01:27 +00:00
Lutz Jänicke
ec20856622 Fix the fix (Yoram Zahavi)... 2002-02-27 11:26:20 +00:00
Lutz Jänicke
e463138be9 SSL_clear != SSL_free/SSL_new 2002-02-27 08:11:18 +00:00
Lutz Jänicke
ce1e801013 Make sure to remove bad sessions in SSL_clear() (found by Yoram Zahavi). 2002-02-26 21:50:28 +00:00
Richard Levitte
03a6dcdf31 make update 2002-02-26 14:18:23 +00:00
Richard Levitte
bfb863b8b5 As in 0.9.7 and on, let's remove the use of MS_FAR, and thereby the
need for e_os.h.
2002-02-21 16:38:09 +00:00
Bodo Möller
f261295d9c disable '#ifdef DEBUG' sections 2002-02-21 14:07:55 +00:00
Bodo Möller
f4702b467e disable '#ifdef DEBUG' sections 2002-02-21 12:56:50 +00:00
Richard Levitte
2aa5dac48f Stop assuming the IV is 8 bytes long, use the real size instead.
This is especially important for AES that has a 16 bytes IV.
2002-02-20 17:55:34 +00:00
Richard Levitte
fae0ff419a Including openssl/e_os.h in the OpenSSL 0.9.6 branch is legal, since
it's exported.  Changing that is a BIG step, which has been done in
0.9.7-dev.
2002-02-20 17:39:25 +00:00
Richard Levitte
74e6916996 Merge in Cygwin-related changes from main trunk. 2002-02-16 22:45:06 +00:00
Richard Levitte
99738e6393 Give the linux-sparv9 target shared capability.
Submitted by Ian Marsh <mushypea@dominion.net.uk>
2002-02-15 16:22:58 +00:00
Lutz Jänicke
0df2a19b10 Even though it is not really practical people should know about it. 2002-02-15 09:36:08 +00:00
cvs2svn
1c8f840653 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2002-02-15 07:41:45 +00:00
Bodo Möller
e2d39e421d fix indentation 2002-02-14 16:06:19 +00:00
Richard Levitte
2ff622cf9d Add the configuration target VxWorks. 2002-02-14 15:36:50 +00:00
Richard Levitte
b92fb90de5 make update 2002-02-14 13:37:29 +00:00
Richard Levitte
8481a0905b The Cygwin shared extension was shifted. 2002-02-14 13:36:38 +00:00
Richard Levitte
44bbfcddaf At Corinna Vinschen's request, change CygWin32 to Cygwin 2002-02-14 12:29:02 +00:00
Richard Levitte
6b7b277900 Correct sh, please 2002-02-14 02:20:41 +00:00
Bodo Möller
5e99ec6c7c it's year 2002 now 2002-02-13 18:22:18 +00:00
Richard Levitte
52f3038667 Update the configuration of CygWin32 to use the new capabilities of
CygWin 1.3.x, which includes thread and shared library support.

Submitted by Corinna Vinschen <vinschen@redhat.com> and modified a
little bit.
2002-02-13 14:45:19 +00:00
Richard Levitte
1827be43ab Merge in the slightly more efficient variant of link-shared from the
main trunk.
2002-02-13 10:32:07 +00:00
Ulf Möller
8935c03618 add casts as in head (required for VC++) 2002-02-11 17:44:30 +00:00
Lutz Jänicke
76dca45720 Backport from 0.9.7:
Make removal from internal session cache more robust and do not store
into internal session cache when it won't be looked up anyway.
2002-02-10 12:52:57 +00:00
Richard Levitte
a5f158fa0b ASN1_BIT_STRING_set_bit() didn't clear previously set bits 2002-02-03 21:27:04 +00:00
Richard Levitte
1a11273bc3 Merge in the sanity checker from 0.9.7-dev. 2002-01-27 17:05:39 +00:00
Richard Levitte
babc4d0e7a Make sure libssl.sl will depend on the local libcrypto.sl, not on
another (that possibly doesn't even exist!).
2002-01-26 16:50:40 +00:00
Richard Levitte
c9c111468c Update SCO5 targets. 2002-01-26 05:21:08 +00:00
Richard Levitte
73feb5418d Apply a small patch from Dan Lanz <lanz@zolera.com> to get shared
libraries with debug-linux-elf.
2002-01-26 05:07:56 +00:00
Richard Levitte
b3467218f8 According to the main trunk, Darwin should get USE_TOD defined. 2002-01-26 05:02:45 +00:00
Richard Levitte
f760c5d80b From reports I've seen, it looks like TIMES is wrong for Darwin. 2002-01-26 04:44:39 +00:00
Richard Levitte
4fd350e8f5 Apply Neale Ferguson's patch to add a configuration target for linux-s390x 2002-01-25 22:13:26 +00:00
Lutz Jänicke
bc52146aee Typos (jsyn <jsyn@openbsd.org>). 2002-01-21 18:02:27 +00:00
Lutz Jänicke
348c9e5985 Fix incorrect BIO_*_ctrl() macros (Shay Harding <sharding@ccbill.com>). 2002-01-21 17:58:53 +00:00
Ulf Möller
06e6478d6f *** empty log message *** 2002-01-16 19:22:36 +00:00
Bodo Möller
19fa8cfe5a Bugfix: In ssl3_accept, don't use a local variable 'got_new_session'
to indicate that a real handshake is taking place (the value will be
lost during multiple invocations). Set s->new_session to 2 instead.
2002-01-14 23:42:47 +00:00
Bodo Möller
5f18fe493e Return -1 from ssl3_get_server_done (ssl3/s3_clnt.c) if
the SSL_R_LENGTH_MISMATCH error is detected.
2002-01-14 12:42:38 +00:00
Richard Levitte
d16e3759a8 Patches to make OpenSSL compilable on MacOS/X.
Submitted by Pier Fumagalli <pier@betaversion.org>
2002-01-08 09:19:55 +00:00
Bodo Möller
31961f7308 use some descriptions from Lutz' redundant manual page
instead of the previous ones
2002-01-04 15:21:26 +00:00
Lutz Jänicke
2e1b411f23 Tsss, SSLeay_version() was already documented, it just was not linked in. 2002-01-04 15:08:34 +00:00
Bodo Möller
4d77825557 add symbols reserved in 'engine' tree (tagged as NOEXIST) 2002-01-04 15:02:40 +00:00
Lutz Jänicke
439c7ba540 Add information as provided by Richard Levitte on openssl-users :-) 2002-01-04 14:57:31 +00:00
cvs2svn
edbbf22a0e This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2002-01-04 14:55:39 +00:00
Bodo Möller
1cb8923507 fix 'Configure TABLE' output 2002-01-04 13:29:20 +00:00
Bodo Möller
83f1147664 Changes that break something should be included in CHANGES
to make it easier to fix things.
2002-01-04 13:28:04 +00:00
Bodo Möller
4d4744ef48 fix EVP_CIPHER_mode macro
Submitted by: "Dan S. Camper" <dan@bti.net>
2002-01-04 13:04:15 +00:00
Richard Levitte
0242564c17 Better clarification on perl 2002-01-03 18:53:55 +00:00
Richard Levitte
e8d2e6cac2 Use the variable $(PERL) to invoke perl.
Noted by Joe Orton <jorton@redhat.com>
2002-01-03 14:08:02 +00:00
Richard Levitte
651fa63e2b Allow verification of other types than DATA.
Submitted by Leonard Janke <leonard@votehere.net>
2002-01-02 11:54:32 +00:00
Richard Levitte
6a40c26308 Say that recent CygWin perl versions work as well.
Submitted by Eric Hanchrow <erich@votehere.net>
2002-01-02 11:25:11 +00:00
Richard Levitte
b7342e116b Allow 8-bit characters. This is not really complete, it only marks
characters with the highest bit set as HIGHBIT.  We need to expand
this to support the UTF-8 character set properly.  However, this
solves the problem that the character 0x80 (which is common in UTF-8)
gets masked to 0x00.
Patch submitted by "Huang Yuzhen" <huangyuzhen@bj.tom.com>
2002-01-02 11:06:17 +00:00
Richard Levitte
9d7bb313e3 On Solaris64, cc needs the flag -xarch=v9 when linking shared
libraries.  Make a general change to support shared library
linking flags in general.
Noted by Nick Briggs <briggs@parc.xerox.com>
2002-01-02 10:30:40 +00:00
Richard Levitte
00b6ab09fc Add support for Linux on HP/PA.
Submitted by "Bryan W. Headley" <bheadley@interaccess.com>
2002-01-02 10:00:52 +00:00
Ulf Möller
c99b94be3e ssl3_read_bytes bug fix
Submitted by: D P Chang <dpc@qualys.com>
Reviewed by: Bodo
2001-12-28 17:13:10 +00:00
Bodo Möller
b9bb1c5f77 This should be in 0.9.6c, but somehow escaped from the commit ...
But note that 0.9.6c has correct versions of the files autogenerated
from objects.txt (obj_mac.h, obj_dat.h), so libraries built from
the source distribution will not be buggy.
2001-12-21 12:23:05 +00:00
Bodo Möller
87af0e5e19 Fix FAQ, although in case there is another release from this tree,
it won't be correct anymore anyway: current version is 0.9.6c.
not 0.9.6b.
(The engine version does not have this typo.)
2001-12-21 12:15:36 +00:00
Richard Levitte
76b5524d3d Status update 2001-12-21 03:23:20 +00:00
Richard Levitte
0b421d35fb The release has been tagged, so let's move on to 0.9.6d, which we hope will never be released. 2001-12-21 02:26:39 +00:00
Richard Levitte
b2f570ecbb Time to release 0.9.6c. The tag will be OpenSSL_0_9_6c 2001-12-21 01:21:23 +00:00
Richard Levitte
988988807f And just for the sake of completeness, let's add some standard macros... 2001-12-21 01:12:43 +00:00
Richard Levitte
b1b62e7976 Better use the same number in all branches, to avoid confusion 2001-12-21 01:09:07 +00:00
Dr. Stephen Henson
069eb94607 Add missing ERR_LIB_COMP #define 2001-12-21 00:48:45 +00:00
Richard Levitte
5dfaf1c437 make update 2001-12-20 22:25:41 +00:00
Richard Levitte
c6c5cf1754 Do not forget to compile comp_err.c 2001-12-20 22:15:42 +00:00
Ulf Möller
3d7b414c55 remove some useless information (change log is in CHANGES) 2001-12-20 12:36:39 +00:00
Richard Levitte
863b1279f7 Summarize the news. 2001-12-20 11:04:46 +00:00
Bodo Möller
24ceef033a make sure mklink.pl looks at ERR_load_... 2001-12-19 19:48:51 +00:00
Ulf Möller
fe165e465b Cygwin patch. Submitted by Michael Kobar <mkobar@lymeware.com> 2001-12-19 19:37:41 +00:00
Bodo Möller
3ece3605ac remove redundant ERR_load_... declarations 2001-12-17 19:24:39 +00:00
Bodo Möller
b35ef576f4 correction: certain changes have been done *after* 0.9.6b was released 2001-12-17 19:08:39 +00:00
Bodo Möller
865ce8abcb fix BN_rand_range 2001-12-14 10:09:01 +00:00
Ulf Möller
a69b3e94f3 name confusion with HP library function prototype (?) 2001-12-10 18:52:42 +00:00
Dr. Stephen Henson
7f0f3f17b3 Don't overwrite signing time. 2001-12-07 00:40:53 +00:00
Lutz Jänicke
0bc2e28295 HPUX 9.X on m68k with gcc
("Anton J. Gamel" <gamel@anna.anatomie.uni-freiburg.de>)
2001-12-06 13:11:42 +00:00
Richard Levitte
4b16376d51 "UID" is an incorrect lable for the attribute type uniqueIdentifier.
Furthermore, it create conflicts with LDAP and some RFCs that define
"UID" as a lable for the attribute type userId (which we haven't even
defined here).

The next question is if we should update objects.txt with the added
stuff from the main trunk.
2001-12-04 11:10:54 +00:00
Richard Levitte
fe094cdfe3 I was recently informed that some people wrongly use ssleay.txt as
main documentation, so let's warn them a little more, so the word
"OBSOLETE" really gets understood.
2001-12-04 07:50:52 +00:00
Bodo Möller
276753772e crypto/objects stuff 2001-12-03 13:54:58 +00:00
Bodo Möller
16712ec35e Fix: 2.5.29 is "id-ce", not "ld-ce" (sort of a typo in objects.h).
Fix: Some ip-pda OIDs were incorrect (cf. RFC 3039).

Also change Perl scripts to put auto-generation warning in the
first lines of the file.
2001-12-03 13:44:24 +00:00
Lutz Jänicke
4e6c537141 Support for QNX 6 (wrat@jump.net (the wharf rat)). 2001-11-30 09:36:15 +00:00
Bodo Möller
1b0613e313 discuss -name and default_ca more correctly (I hope) 2001-11-26 12:14:22 +00:00
Bodo Möller
75140e8bc9 update with info on engine branch 2001-11-23 21:11:46 +00:00
Bodo Möller
f717e5460f fix submitted by Andy Schneider <andy.schneider@bjss.co.uk> 2001-11-23 20:57:59 +00:00
Bodo Möller
65129e1d57 OS/390 support
Submitted by: Richard Shapiro <rshapiro@abinitio.com>
2001-11-22 11:26:54 +00:00
Bodo Möller
2a6db68797 OS/390 support
Submitted by: Richard Shapiro <rshapiro@abinitio.com>
2001-11-22 11:15:00 +00:00
cvs2svn
2b98d1ccb7 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-11-22 11:09:43 +00:00
Richard Levitte
ce8ac3dc00 Extentions of the explanations to the linking problem on Win32. Provided by Andrew Gray <agray@iconsinc.com> 2001-11-19 20:46:47 +00:00
Lutz Jänicke
c156d5c9bd Clarify reference count handling/removal of session
(shinagawa@star.zko.dec.com).
2001-11-19 11:12:30 +00:00
Richard Levitte
54b293ec3c On VMS, the norm is still that symbols are uppercased, so for now it's better
to trust that norm.  I might implement a control for this later on
2001-11-16 13:13:09 +00:00
Richard Levitte
5a8e7c5bec Restore extern "C" balance. 2001-11-15 14:33:49 +00:00
Richard Levitte
75df0bb231 perl util/mkerr.pl -recurse -write -rebuild 2001-11-15 12:44:57 +00:00
Richard Levitte
22b540f5c2 make update
perl util/mkdef.pl crypto update rewrite
2001-11-15 12:41:39 +00:00
Richard Levitte
479275ef18 make update
perl util/mkdef.pl crypto update rewrite
2001-11-15 12:36:30 +00:00
Richard Levitte
6f3fa4b71d Apply the following changes from the main trunk:
2001-03-08 13:14  bodo

	* util/mkerr.pl (1.14): Change mkerr.pl so that it puts the
	ERR_load_..._strings() prototype in header files that it writes.

2001-05-10 02:07  steve

	* util/mkerr.pl (1.15): Fix to allow multiple NONE libraries in
	mkerr.pl .
2001-11-15 12:18:01 +00:00
Geoff Thorpe
2f4dca7052 The change in the HEAD to not cache gethostbyname() values made two
functions redundant - which were later commented out. This does the same
for the merge of the gethostbyname() change to 0.9.6-stable.
2001-11-15 01:56:10 +00:00
Bodo Möller
7b78aa0e8d remove obsolete entry 2001-11-14 21:21:04 +00:00
Bodo Möller
c37e7bf580 fix warning 2001-11-14 21:19:47 +00:00
Bodo Möller
926606deab consistency between main branch and stable branch 2001-11-14 21:18:30 +00:00
Richard Levitte
f98c9972a7 Remove temporary files 2001-11-14 10:59:35 +00:00
Richard Levitte
df7cae352d Apply the following changes from the main trunk:
2001-10-10 16:46  levitte

	* Configure (1.294), Makefile.org (1.142): For systems where gcc is
	used and where we don't know if GNU ld is used or not, let's ask
	collect2 which ld it uses and choose to use the target
	do-gnu_shared if GNU ld is used.

	This solves the reported problems on Solaris systems where GNU cc
	is used but GNU ld isn't, and probably on other systems with
	similar setups.
2001-11-14 10:44:13 +00:00
Richard Levitte
eda75c31e3 Apply the following changes from the main trunk:
2001-06-05 06:41  levitte

	* Makefile.org (1.137): Small detail about AIX forgotten...
2001-11-14 10:08:55 +00:00
Richard Levitte
2e689f6040 Apply the following changes from the main trunk:
2001-02-13 14:08  levitte

	* Configure (1.251): Update of linux-ppc.  Contributed by MATSUURA
	Takanori <t-matsuu@protein.osaka-u.ac.jp>
2001-11-14 09:45:30 +00:00
Richard Levitte
ea494f7b88 Apply the following changes from the main trunk:
2001-04-27 23:33  levitte

	* Makefile.org (1.135): A method to create shared libraries on AIX,
	and according to "Howard Chu" <hyc@highlandsun.com>, it may be
	general enough to work on any Unixly system.
2001-11-14 09:44:37 +00:00
Richard Levitte
8250f6f1fc Apply the following changes from the main trunk:
2001-04-26 22:17  levitte

	* Makefile.org (1.134): Linux shared libraries can be linked with
	debug symbols.	Tru64 shared libraries can be linked with static
	libraries.
2001-11-14 09:38:55 +00:00
Richard Levitte
eb0c85dec3 Apply the following changes from the main trunk:
2001-01-10 17:43  bodo

	* Makefile.org (1.118): Pass ${PERL} down to the Makefile in
	sub-directory "test" in "make tests"

2001-01-10 17:40  bodo

	* Makefile.org (1.117): Use $(PERL) in place of hard-coded perl
2001-11-14 08:26:55 +00:00
Richard Levitte
9332b8c1c4 Apply the following change from the main trunk:
2000-12-01 02:11  levitte

	* Configure (1.243), config (1.71): Recognise Darwin as well.  For
	now, have it do exactly the same thing as for Rhapsody
2001-11-14 08:18:07 +00:00
Richard Levitte
7be09992c6 Apply the following change from the main trunk:
2000-11-14 12:05  jaenicke

	* Makefile.org (1.115): Some platforms (namely HP-UX) require the
	'x' bit set for shared libraries.  For performance reasons, it is
	also recommended to make the (mmap'ed) shared library 'read-only'.
	-> New permissions for installed shared libraries = 555

	This doesn't hurt anybody, provided the installation is performed
	with 'cp -f' :-)
2001-11-14 08:08:04 +00:00
Richard Levitte
ceea4c85b4 Apply the following change from the main trunk:
2000-11-01 01:05  levitte

	* Configure (1.236), Makefile.org (1.110), CHANGES (1.640): Add
	support for shared libraries under Irix.  Submitted by Albert
	Chin-A-Young <china@thewrittenword.com>
2001-11-14 08:06:42 +00:00
Richard Levitte
d1ec197e49 Apply the following change from the main trunk:
2000-11-01 01:05  levitte

	* Configure (1.236), Makefile.org (1.110), CHANGES (1.640): Add
	support for shared libraries under Irix.  Submitted by Albert
	Chin-A-Young <china@thewrittenword.com>
2001-11-14 07:52:33 +00:00
Richard Levitte
f4d9cdc531 Make default attributes consistent in all sub-packages (and thereby
closer to the main trunk).
2001-11-14 07:42:39 +00:00
Richard Levitte
e3f47ba87f Correct the order of the changes. 2001-11-14 07:23:45 +00:00
Richard Levitte
ab665f4a7e Apply the following change from the main trunk:
2000-11-01 00:14  levitte

	* Configure (1.234), config (1.68), CHANGES (1.638): Add
	configuration option to build on Linux on both big-endian and
	little-endian MIPS.  Submitted by Ralf Baechle
	<ralf@uni-koblenz.de>
2001-11-14 07:18:47 +00:00
Richard Levitte
35ff595e19 Apply the following change from the main trunk:
2000-10-22 23:37  levitte

	* Makefile.org (1.106): When building shared libraries on HP-UX
	10.20 and HP-UX 11.00 (32bit), ld warns that -Fl "may not be
	supported in future releases".	We know that, and are doing things
	in HP-UX 11 (64bit), so turn off that warning with
	+vnocompatwarnings.
2001-11-14 07:08:10 +00:00
Richard Levitte
be2c37ef73 Apply the following change from the main trunk:
2000-10-22 00:05  levitte

	* Configure (1.232): FreeBSD-elf can do threads.  However, there
	seems to be confusion if you should defined _THREAD_SAFE (I found
	that in an include file, and that's what everybody tells me) or
	_THREADSAFE (that's what the gcc manual says in the
	FreeBSD-specific section), so I defined both, just to be safe.
2001-11-14 07:01:34 +00:00
Richard Levitte
888b8f32d7 Apply the following change from the main trunk:
2000-10-21 23:24  levitte

	* CHANGES (1.631), Configure (1.231), Makefile.org (1.104):
	Add what's needed to get shared libraries on HP-UX.
2001-11-14 06:59:15 +00:00
Richard Levitte
962c53c0cd That was incorrect. Revert. 2001-11-13 11:21:23 +00:00
Richard Levitte
ce6f656e1b Apply change from revision 1.101 (2000-10-09 02:50 levitte):
Make sure ranlib is only used on .a libraries.
2001-11-13 11:10:29 +00:00
Bodo Möller
9cb12c9d76 update FAQ from main branch 2001-11-13 08:57:58 +00:00
Bodo Möller
f089efdfab synchronise with HEAD branch,
remove redundant name OpenUNIX for OpenUNIX-8 configuration
2001-11-12 23:29:23 +00:00
Bodo Möller
a236373435 information on 0.9.6c-engine 2001-11-12 22:13:28 +00:00
Bodo Möller
7d555c8615 order entries as in main branch 2001-11-12 15:25:17 +00:00
Bodo Möller
d63b1678b5 'make update' 2001-11-12 15:15:46 +00:00
Mark J. Cox
beaa89def7 Sync ia64.S in 0.9.6c-dev with ia64.S in 0.9.7 (some fixes had been
applied since the initial patch was created)

Submitted by:
Reviewed by:
PR:
2001-11-12 14:08:49 +00:00
Mark J. Cox
b4bf34ce39 Add an entry for gcc on UnixWare
Submitted by: Gary Benson
Reviewed by: Mark Cox
PR:
2001-11-12 13:22:14 +00:00
Mark J. Cox
f99ac98efb Add assembler implementation for IA-64
Submitted by: Andy Polyakov
Reviewed by: Mark Cox
PR:
2001-11-12 12:49:25 +00:00
Bodo Möller
c615cdd7cb the PRNG race conditions were mostly a theoretical issue, remove from NEWS 2001-11-12 11:33:07 +00:00
Bodo Möller
e7d339b678 add changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c 2001-11-12 11:27:34 +00:00
Bodo Möller
3f64d0bf3b synchronize with HEAD branch 2001-11-12 11:22:45 +00:00
Bodo Möller
fab972b914 order chronologically: move entry for recent s2_clnt.c/s2_srvr.c fixes to the top 2001-11-10 15:09:47 +00:00
Bodo Möller
a10b85d9e6 make code a little more similar to what it looked like before the fixes 2001-11-10 10:43:51 +00:00
Bodo Möller
44cc9715ec remove incorrect 'callback' prototype 2001-11-10 02:14:43 +00:00
Bodo Möller
a807f6460e important SSL 2.0 bugfixes 2001-11-10 01:15:29 +00:00
Bodo Möller
19c3f1c40d typo 2001-11-09 13:10:47 +00:00
Bodo Möller
b30504c61c fix warning 2001-11-09 13:03:12 +00:00
Bodo Möller
cbb5f1f025 cast to 'unsigned long' before using ~ if we need an unsigned long result
Submitted by: "Stefan Marxen" <stefan.marxen@gmx.net>
2001-11-09 12:59:15 +00:00
Bodo Möller
b8556ab14b clarify 2001-11-08 14:52:40 +00:00
Bodo Möller
48c269ad7f Don't define _REENTRANT here in e_os.h. On systems where we need
_REENTRANT if threads support is enabled, the ./Configure entry must
define it so that it ends up in CFLAG.
2001-11-08 14:36:49 +00:00
Richard Levitte
d6945e10b5 Addapt VMS scripts to the newer disk layout system ODS-5, which allows more than one period and mixed size characters in file names 2001-10-29 13:06:29 +00:00
Bodo Möller
70bed0ca2d typo 2001-10-26 14:03:51 +00:00
Bodo Möller
e20788700c disable caching in BIO_gethostbyname 2001-10-26 13:03:28 +00:00
Bodo Möller
b60806a097 'make update' 2001-10-25 08:36:22 +00:00
Bodo Möller
0b9925be4f Consistency with s2_... and s23_... variants (no real functional
change)
2001-10-25 08:18:56 +00:00
Bodo Möller
3e9ae0c462 Oops 2001-10-25 08:18:36 +00:00
Bodo Möller
96ec4ce0d2 Assume TLS 1.0 if ClientHello fragment is too short. 2001-10-25 06:06:50 +00:00
Bodo Möller
38b3e9edde Fix SSL handshake functions and SSL_clear() such that SSL_clear()
never resets s->method to s->ctx->method when called from within one
of the SSL handshake functions.
2001-10-24 19:05:26 +00:00
Bodo Möller
9ccadf1c6f In ssl3_get_client_hello (ssl/s3_srvr.c), generate a fatal alert if
client_version is smaller than the protocol version in use.
Also change ssl23_get_client_hello (ssl/s23_srvr.c) to select TLS 1.0
if the client demanded SSL 3.0 but only TLS 1.0 is enabled; then the
client will at least see that alert.
2001-10-20 17:52:40 +00:00
Dr. Stephen Henson
1e55e768c3 Typo. 2001-10-20 16:23:18 +00:00
Lutz Jänicke
b914a547e1 Flush buffers to prevent mixed output (Adam Back <adam@cypherspace.org>). 2001-10-16 14:25:27 +00:00
Bodo Möller
03b148f4a9 make sure .rnd exists 2001-10-15 17:57:27 +00:00
Bodo Möller
2dbdcd9734 Fix ssl3_get_message to handle message fragmentation correctly. 2001-10-15 17:42:43 +00:00
Bodo Möller
1147fa5a5f the previous commit accidentily removed 'ret = 1' from the SSL_ST_OK
case of ssl3_accept
2001-10-15 17:40:22 +00:00
Ulf Möller
a9eba3f3f5 openbsd-x86 macros
Submitted by: Toomas Kiisk <vix@cyber.ee>
2001-10-14 00:58:32 +00:00
Lutz Jänicke
aa8a33c230 Update information as a partial response to the post
From: "Chris D. Peterson" <cpeterson@aventail.com>
  Subject: Implementation Issues with OpenSSL
  To: openssl-users@openssl.org
  Date: Wed, 22 Aug 2001 16:13:17 -0700
The patch included in the original post may improve the internal session
list handling (and is therefore worth a seperate investigation).
No change to the list handling will however solve the problems of incorrect
SSL_SESSION_free() calls. The session list is only one possible point of
failure, dangling pointers would also occur for SSL object currently
using the session. The correct solution is to only use SSL_SESSION_free()
when applicable!
2001-10-12 12:29:57 +00:00
Richard Levitte
46ff8e0d0a In certain cases, no encoding has been set up for the b64 filter. In
such cases, a flush should *not* attempt to finalise the encoding, as
the EVP_ENCODE_CTX structure will only be filled with garbage.  For
the same reason, do the same check when a wpending is performed.
2001-10-11 19:43:45 +00:00
Richard Levitte
3f9077278a Make sure the macro PEDANTIC is defined when we compile with
-pedantic, or some parts of the source will raise complaints from the
compiler.
2001-10-11 07:59:25 +00:00
Richard Levitte
accb6063f3 'make update' 2001-10-10 21:52:27 +00:00
Richard Levitte
744301ccd8 Add support for md4WithRSAEncryption. 2001-10-10 21:51:00 +00:00
Richard Levitte
a295ca8cf9 A few more OIDs, contributed by Peter Sylvester <Peter.Sylvester@EdelWeb.fr> 2001-10-10 06:15:42 +00:00
Lutz Jänicke
293c4d747c Small documentation fixes (Howard Lum <howard@pumpkin.canada.sun.com>) 2001-10-08 08:38:12 +00:00
Lutz Jänicke
09389cbef5 Typos (Chris Pepper <pepper@mail.reppep.com>) 2001-10-01 14:39:23 +00:00
Richard Levitte
594a3e5bd5 In case of memory problems, the va_start() wasn't cleaned with a va_end().
Noticed by Thomas Klausner <wiz@danbala.ifoer.tuwien.ac.at>.
2001-09-24 15:06:44 +00:00
Bodo Möller
ae9010abd5 comment 2001-09-24 07:57:20 +00:00
Bodo Möller
ae3a6640b7 crypto/idea was missing in the list of directories that may have been deleted 2001-09-22 01:37:36 +00:00
Bodo Möller
029dfa64d4 bugfix: handle HelloRequest received during handshake correctly 2001-09-21 11:19:26 +00:00
Bodo Möller
f8845509b6 Disable session related stuff in SSL_ST_OK case of ssl3_accept if we
just sent a HelloRequest.
2001-09-21 07:01:04 +00:00
Bodo Möller
3f98e1dd11 Bugfix: correct cleanup after sending a HelloRequest 2001-09-21 00:03:00 +00:00
Bodo Möller
e53afa9e9b fix ssl3_accept: don't call ssl_init_wbio_buffer() in HelloRequest case 2001-09-20 21:36:39 +00:00
Bodo Möller
e41c5bd730 Fix ssl/s3_enc.c, ssl/t1_enc.c and ssl/s3_pkt.c so that we don't
reveal whether illegal block cipher padding was found or a MAC
verification error occured.

In ssl/s2_pkt.c, verify that the purported number of padding bytes is in
the legal range.
2001-09-20 18:34:36 +00:00
Bodo Möller
10981a5c84 add comment 2001-09-14 13:48:37 +00:00
Bodo Möller
9cf8888149 Increase permissible ClientKeyExchange message length as in main
branch (revision 1.50, 2000-11-17)
2001-09-14 13:32:03 +00:00
Lutz Jänicke
491d390ec9 Synchronize typo corrections with 0.9.7-dev 2001-09-13 15:19:39 +00:00
Lutz Jänicke
87301baec9 One more manual page. 2001-09-13 15:07:21 +00:00
cvs2svn
0cf4df488b This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-09-13 15:05:43 +00:00
Bodo Möller
fde9626cff update from main branch 2001-09-11 12:26:35 +00:00
Bodo Möller
fb9520c12d comments 2001-09-10 15:03:08 +00:00
Bodo Möller
62b0502750 copyright 2001-09-10 14:51:45 +00:00
Lutz Jänicke
c77c4c9f1c Fix typo. 2001-09-09 07:43:12 +00:00
Dr. Stephen Henson
c5220abc6a Replace old (and invalid) copyright notice. 2001-09-08 12:16:24 +00:00
Lutz Jänicke
b90f36d240 Support for OpenUNIX-8 (Boyd Lynn Gerber <gerberb@zenez.com>) 2001-09-07 13:22:41 +00:00
Lutz Jänicke
2712fe80be Recognize OpenUNIX 2001-09-07 12:16:52 +00:00
Ulf Möller
13aab9cca4 make update 2001-09-07 04:32:11 +00:00
Lutz Jänicke
33c0e6f547 Build shared libraries on Unixware-7 and OpenUNIX-8 in old (pre-0.9.7)
style (Boyd Lynn Gerber <gerberb@zenez.com>.
2001-09-06 12:30:17 +00:00
cvs2svn
d84f543ea6 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-09-06 12:28:06 +00:00
Bodo Möller
a7113d645f improve OAEP check 2001-09-06 10:43:42 +00:00
Ulf Möller
3f345dc653 bn_sqr bug fix as in main 2001-09-05 04:45:45 +00:00
Ulf Möller
0dd892848e WTF? 2001-09-04 22:21:36 +00:00
Bodo Möller
f4681b0864 Use uniformly chosen witnesses for Miller-Rabin test
(by using new BN_pseudo_rand_range function)
2001-09-03 13:01:28 +00:00
Lutz Jänicke
a04baf9b5c Allow client certificate lists > 16kB ("Douglas E. Engert" <deengert@anl.gov>.) 2001-08-25 11:48:35 +00:00
Lutz Jänicke
029fb8aa26 Needed for build on SunOS 4.1.x with gcc (Jeffrey Hutzelman <jhutz@cmu.edu>). 2001-08-25 11:34:53 +00:00
Lutz Jänicke
2cb95a153e More docs. 2001-08-24 14:31:36 +00:00
cvs2svn
20d57547e6 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-08-24 14:29:49 +00:00
Lutz Jänicke
ea5b10a177 More manual pages, no constification. 2001-08-23 18:50:16 +00:00
cvs2svn
dca598b911 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-08-23 17:22:44 +00:00
Lutz Jänicke
187ebb98ad As discussed recently on openssl-users. 2001-08-23 15:01:36 +00:00
cvs2svn
84712f4f9d This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-08-23 15:00:12 +00:00
Lutz Jänicke
44366c3713 Make clear, that using the compression layer is currently not recommended. 2001-08-23 09:42:56 +00:00
Lutz Jänicke
feef7d2dc6 Missed the page... 2001-08-21 14:57:25 +00:00
Lutz Jänicke
7ac19add8f One more manual page... 2001-08-21 14:55:58 +00:00
cvs2svn
e1c82386d1 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-08-21 14:54:55 +00:00
Lutz Jänicke
d9164abe69 Documentation on how to handle compression methods.
Hopefully it is clear enough, that it is currently not recommended.
2001-08-21 13:04:26 +00:00
cvs2svn
9347774449 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-08-21 13:02:59 +00:00
Lutz Jänicke
51db1db082 Checked in from the wrong !@#$%^&*() copy... 2001-08-21 07:27:47 +00:00
Lutz Jänicke
3d11230259 More interdependencies with respect to shutdown behaviour. 2001-08-20 14:35:17 +00:00
Lutz Jänicke
653cc07b51 Alert description strings for TLSv1 and documentation. 2001-08-19 16:23:57 +00:00
cvs2svn
7a5b2bea86 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-08-19 16:20:43 +00:00
Lutz Jänicke
3eba9b0ebc More details about session timeout settings. 2001-08-17 16:38:06 +00:00
cvs2svn
544346a6c8 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-08-17 16:36:52 +00:00
Lutz Jänicke
5f18f1b4c5 One more function documented. 2001-08-17 15:56:30 +00:00
cvs2svn
1b061845d7 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-08-17 15:54:51 +00:00
Lutz Jänicke
3ad82e4707 SSL_shutdown() has even more properties... 2001-08-17 15:10:47 +00:00
cvs2svn
71cbb0f128 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-08-17 15:09:32 +00:00
Lutz Jänicke
b82030e90a One more step on the way for complete documentation... 2001-08-17 14:34:44 +00:00
cvs2svn
ce59bb8bd0 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-08-17 14:32:39 +00:00
Lutz Jänicke
deecc4bede Unidirectional shutdown is allowed according to the RFC. 2001-08-17 09:09:17 +00:00
Lutz Jänicke
86cd2530db Bugfixes provided by "Stephen Hinton" <shinton@netopia.com>. 2001-08-16 15:30:37 +00:00
Lutz Jänicke
3d85776a09 Better description of the behaviour of SSL_shutdown() as it is now, broken
or not.
2001-08-16 14:29:50 +00:00
Richard Levitte
ec578380c9 Apply the Tru64 patch from Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>
His comments are:

1) Changes all references for `True64' to be `Tru64', which is the correct
spelling for the OS name.

2) Makes `alpha-cc' be the same as `alpha164-cc', and adds an `alphaold-cc'
entry that is the same as the previous `alpha-cc'.  The reason is that most
people these days are using the newer compiler, so it should be the default.

3) Adds a bit of commentary to Configure, regarding the name changes of
the OS over the years, so it's not so confusing to people that haven't been
with the OS for a while.

4) Adds an `alpha-cc-rpath' target (which is *not* selected automatically
by Configure under any circumstance) that builds an RPATH into the
shared libraries.  This is explained in the comment in Configure.  It's
very very useful for people that want it, and people that don't want it
just shouldn't choose that target.

5) Adds the `-pthread' flag as the best way to get POSIX thread support
from the newer compiler.

6) Updates the Makefile targets, so that when the `alpha164-cc', `alpha-cc',
or `alpha-cc-rpath' target is what Configure is set to use, it uses a Makefile
target that includes the `-msym' option when building the shared library.
This is a performance enhancement.

7) Updates `config' so that if it detects you're running version 4 or 5
of the OS, it automatically selects `alpha-cc', but uses `alphaold-cc'
for versions 1-3 of the OS.

8) Updates the comment in opensslv.h, fixing both the OS name typo and
adding a reference to IRIX 6.x, since the shared library semantics are
virtually identical there.
2001-08-10 15:25:50 +00:00
Bodo Möller
8dccbdfc5b add missing link 2001-08-08 15:08:54 +00:00
Bodo Möller
904de6e4f5 Bugfix: larger message size in ssl3_get_key_exchange() because
ServerKeyExchange message may be skipped.

Submitted by:  Petr Lampa <lampa@fee.vutbr.cz>
2001-08-07 09:31:03 +00:00
Lutz Jänicke
65ce21da9a Fix typos (shinagawa@star.zko.dec.com). 2001-08-07 07:53:53 +00:00
Lutz Jänicke
7ea0acc3ef Reworked manual pages with a lot of input from Bodo Moeller. 2001-07-31 15:06:43 +00:00
Lutz Jänicke
dd186f600d Only set the verify callback if there's one to set! 2001-07-31 10:20:53 +00:00
Lutz Jänicke
01fc70323f Don't miss files... 2001-07-30 11:51:06 +00:00
Lutz Jänicke
03a70bad4f Fix inconsistent behaviour with respect to verify_callback handling. 2001-07-30 11:48:20 +00:00
Lutz Jänicke
7146221bbe Forgot to mention second fix. 2001-07-30 11:44:14 +00:00
Bodo Möller
80a8d1406b length of secret exponent is needed only when we create one 2001-07-27 22:45:19 +00:00
Bodo Möller
1a76a85c93 Undo DH_generate_key() change: s3_srvr.c was using it correctly 2001-07-27 22:34:00 +00:00
Lutz Jänicke
cf1b34ad34 Another uninitialized static that may lead to problems on Solaris under some
circumstances.
2001-07-27 12:36:16 +00:00
Lutz Jänicke
44d4b684f9 Fix problem occuring when used from OpenSSH on Solaris 8. 2001-07-26 09:03:42 +00:00
Bodo Möller
746142d672 DH key generation should not use a do ... while loop,
or bogus DH parameters can be used for launching DOS attacks
2001-07-25 17:48:40 +00:00
Bodo Möller
475e21bc7b Don't preserve existing keys in DH_generate_key. 2001-07-25 17:20:16 +00:00
Bodo Möller
5204726bfe md_rand.c thread safety 2001-07-25 17:18:02 +00:00
Bodo Möller
27f3a1bd9c always reject data >= n 2001-07-25 17:03:22 +00:00
Lutz Jänicke
b1a810571c Fix wrong information about SSL_set_connect_state(). 2001-07-25 12:13:46 +00:00
Bodo Möller
c6719ffb77 Avoid race condition.
Submitted by: Travis Vitek <vitek@roguewave.com>
2001-07-24 12:33:41 +00:00
Lutz Jänicke
16fdf5b904 Additional inline reference 2001-07-23 12:56:37 +00:00
Lutz Jänicke
d2cfefc892 Add missing reference. 2001-07-23 12:52:51 +00:00
Lutz Jänicke
71ff177754 Documentation about ephemeral key exchange 2001-07-21 11:04:35 +00:00
cvs2svn
5b6051067a This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-07-21 11:02:18 +00:00
Lutz Jänicke
c0bee3c8d6 Updated explanation. 2001-07-20 19:24:26 +00:00
Lutz Jänicke
79e29dca65 Some more documentation bits. 2001-07-20 18:58:25 +00:00
cvs2svn
04bdca29d7 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-07-20 18:57:16 +00:00
Richard Levitte
7ca6deef3f SSL_get_rfc were documented but not implemented. 2001-07-16 10:50:49 +00:00
Richard Levitte
026dad0f3b SSL_get_[rw]fd were documented but not implemented. 2001-07-15 20:12:45 +00:00
Lutz Jänicke
6b99c692d0 Clarify actual state. 2001-07-12 08:54:17 +00:00
Lutz Jänicke
04d9784d17 What is an '-engine' version? 2001-07-11 15:51:13 +00:00
Lutz Jänicke
bcfca923d4 Clarify! (based on recent mailing-list discussions) 2001-07-11 15:11:26 +00:00
Richard Levitte
0410b6c50b Tagging has been done, move on to 0.9.6c-dev. 2001-07-09 15:10:56 +00:00
Richard Levitte
483c4e0682 Add security patch and create release.
Tags will be OpenSSL_0_9_6b and OpenSSL-engine-0_9_6b
2001-07-09 14:36:30 +00:00
Richard Levitte
de61328615 make update 2001-07-05 12:28:13 +00:00
Bodo Möller
731e14031c Andy's mips3.s fix (as in main branch). 2001-07-04 20:17:52 +00:00
Lutz Jänicke
93074b2509 When only the key is given to "enc", the IV is undefined
(found by Andy Brown <logic@warthog.com>).
2001-07-03 10:32:30 +00:00
Dr. Stephen Henson
1498ad74bb Another empty X509_NAME fix. 2001-06-26 12:38:33 +00:00
Dr. Stephen Henson
e319a89f84 Handle empty X509_NAME in printing routines. 2001-06-26 12:04:12 +00:00
Bodo Möller
9fa5786340 DSA verification should insist that r and s are in the allowed range. 2001-06-26 09:48:56 +00:00
Dr. Stephen Henson
1b822decb8 Don't set *pointer if add_lock_callback used. 2001-06-19 00:09:20 +00:00
Bodo Möller
dab4c2824f pay attention to blocksize before attempting decryption 2001-06-15 18:06:06 +00:00
Ulf Möller
19352b794d as in head 2001-06-08 14:17:12 +00:00
Lutz Jänicke
8746ee311e ERR_peek_error() returns "unsigned long". 2001-06-07 17:22:01 +00:00
Richard Levitte
e90323844f Use memmove() instead of memcpy() on areas that may overlap.
Spotted by Nalin Dahyabhai <nalin@redhat.com>
2001-06-07 04:45:55 +00:00
Bodo Möller
630c1aedd2 OAEP fix 2001-06-06 21:44:48 +00:00
Bodo Möller
a650df440b when checking OAEP, signal just a single kind of 'decoding error' 2001-06-06 18:48:57 +00:00
Ulf Möller
afd7b5affe as in head 2001-06-06 17:24:03 +00:00
Ulf Möller
38c3436577 make sure we don't write to seed[-1] 2001-06-06 17:15:47 +00:00
Richard Levitte
7e9547e126 Accept digits in symbol names. Spotted by Brian Havard <brianh@kheldar.apana.org.au> 2001-06-04 16:34:39 +00:00
Bodo Möller
83583e9479 Fix Bleichenbacher PKCS #1 1.5 countermeasure.
(The attack against SSL 3.1 and TLS 1.0 is impractical anyway,
otherwise this would be a security relevant patch.)
2001-06-01 09:43:23 +00:00
Bodo Möller
41d208db79 increase DEFAULT_BUFFER_SIZE (4K instead of just 1K) 2001-06-01 08:39:02 +00:00
Richard Levitte
9a1c40049e From revision 1.25, 2001/05/31 22:25:30 by levitte
Don't decrement the reference counter twice when destroying dynamic
links.
2001-06-01 05:36:44 +00:00
Dr. Stephen Henson
39bed15e53 Add missing variable length cipher flag for Blowfish.
Only use trust settings if either trust or reject settings
are present, otherwise use compatibility mode. This stops
root CAs being rejected if they have alias of keyid set.
2001-05-24 23:00:46 +00:00
Dr. Stephen Henson
4b04466f14 Fix for missing DSA parameters. 2001-05-24 22:33:16 +00:00
Richard Levitte
2474b596ad VMS doesn't support more than on period in a file name 2001-05-22 12:48:14 +00:00
Richard Levitte
a890c4e9bb Add development tools to the requirements 2001-05-17 05:03:47 +00:00
Lutz Jänicke
c62ddfbb6e Add missing item SSL_ERROR_WANT_CONNECT. 2001-05-16 09:46:47 +00:00
Lutz Jänicke
8b9351cf61 Typos. 2001-05-14 09:57:03 +00:00
Lutz Jänicke
b23f1df65f One more point to clarify, pointed out by "Greg Stark" <ghstark@pobox.com> 2001-05-14 09:03:35 +00:00
Lutz Jänicke
f05735c8c9 Clarify behaviour with respect to SSL/TLS records. 2001-05-12 09:49:46 +00:00
Lutz Jänicke
42f310f596 Clarify behaviour of SSL_write() by mentioning SSL_MODE_ENABLE_PARTIAL_WRITE
flag as discussed on the mailing list.
2001-05-11 09:54:20 +00:00
Bodo Möller
77c6edc1d1 fix an old entry 2001-05-08 12:46:33 +00:00
Bodo Möller
99bd4baa54 .rnd issues 2001-05-03 09:28:19 +00:00
Bodo Möller
c8913d8e8a bctest changes for Ultrix (don't return 1 from bctest, otherwise make aborts) 2001-05-03 08:50:32 +00:00
Richard Levitte
3c836ff0f8 Some platforms (most notably Windows) do not have a $HOME by default.
For those, unless the environment variables RANDFILE or HOME are
defined (the default case!), RAND_file_name() will return NULL.
This change adds a default HOME for those platforms.

To add a default HOME for any platform, just define DEFAULT_HOME in
the proper place, wrapped in appropriate #ifdef..#endif, in e_os.h.
2001-05-03 07:50:39 +00:00
Richard Levitte
a956392145 Add support for Sun C on Solaris x86. Contributed by Ben <mouring@etoh.eviladmin.org> 2001-05-03 06:15:05 +00:00
Richard Levitte
4760dc31c9 Merge in the following changes (from the main trunk log):
>----------------------------
>revision 1.24
>date: 2001/04/29 16:30:59;  author: steve;  state: Exp;  lines: +5 -1
>Win32 fixes:
>
>define LLONG properly for VC++.
>
>stop compiler complaining about signed/unsigned mismatch in apps/engine.c
>----------------------------
>revision 1.22
>date: 2001/02/27 23:59:18;  author: ulf;  state: Exp;  lines: +1 -1
>%f conversion bug fix
>Submitted by: Henrik Eriksson <henrik.eriksson@axis.com>
>----------------------------
>revision 1.21
>date: 2000/10/22 12:44:12;  author: levitte;  state: Exp;  lines: +3 -3
>On some operating systems, MAX is defined.  Call ours OSSL_MAX instead
2001-05-02 07:10:42 +00:00
Lutz Jänicke
5fde80cd56 Typo (Petr Lancaric <Petr.Lancaric@ips-ag.cz>). 2001-04-25 15:25:39 +00:00
Bodo Möller
ecacb136c5 typo 2001-04-18 15:12:26 +00:00
Bodo Möller
db17ecdae3 fix md_rand.c locking bugs 2001-04-18 15:08:19 +00:00
Lutz Jänicke
ee718b2c22 Clarify request of client certificates. This is a FAQ. 2001-04-17 13:20:05 +00:00
Lutz Jänicke
514481f686 -1 cannot work on platforms with unsigned char
(Jun-ichiro itojun Hagino <itojun@iijlab.net>).
2001-04-15 10:30:01 +00:00
Lutz Jänicke
b089e64654 Don't make half work when constifying... 2001-04-14 14:48:44 +00:00
Lutz Jänicke
3c1f0ccbf4 Constify "salt" (Jason Molenda <jason@molenda.com>) 2001-04-14 14:42:28 +00:00
Lutz Jänicke
c5e00a3ee2 Missing link ("Greg Stark" <gstark@ethentica.com>) 2001-04-12 21:12:30 +00:00
Lutz Jänicke
26c329cd84 Fix wrong information with respect to CAs listed to the client
(follows from technical discussion with Amit Chopra <amitc@pspl.co.in>).
2001-04-12 16:03:28 +00:00
Bodo Möller
d349c5f8fd some updates from 0.9.7-dev 2001-04-12 12:09:07 +00:00
Lutz Jänicke
3a11466381 Typo (Jun-ichiro itojun Hagino <itojun@iijlab.net>) 2001-04-12 11:46:23 +00:00
Richard Levitte
5c4c4c2b90 The changes that I just commited on this file is a mistake. Go back. This never happened :-) 2001-04-11 10:12:13 +00:00
Richard Levitte
ec11fa2159 NetBSD and OpenBSD use TOD as well 2001-04-11 10:06:44 +00:00
Lutz Jänicke
c4365acc48 Typo (was already fixed in 0.9.7-dev). 2001-04-09 15:00:31 +00:00
Lutz Jänicke
c29dbb9562 Add forgotten "-passin" option to smime.c usage help. 2001-04-08 10:53:27 +00:00
Richard Levitte
cb1c1555fa A small change that only went to the engine-0.9.6 branch...
This change will be part of 0.9.6a.
2001-04-05 21:08:33 +00:00
Richard Levitte
fa528639e3 Tagging has been done, move on to development of 0.9.6b.
(Hopefully, it will never be needed)
2001-04-05 17:59:14 +00:00
Richard Levitte
092ab05aef Forgot to update the STATUS file. This will be part of 0.9.6a 2001-04-05 17:42:00 +00:00
Richard Levitte
4f647957c5 Release OpenSSL 0.9.6a.
The tag will be OpenSSL_0_9_6a
2001-04-05 16:43:07 +00:00
Richard Levitte
4424a12c43 make update 2001-04-05 16:36:00 +00:00
Dr. Stephen Henson
592f5c5797 Fix couple of memory leaks in PKCS7_dataDecode(). 2001-04-04 22:30:26 +00:00
Ulf Möller
14ba311676 Unixware config.
Submitted by: Tim Rice <tim@multitalents.net>
2001-04-04 19:20:33 +00:00
Bodo Möller
b9a96c0134 don't use shell functions 2001-04-04 16:27:44 +00:00
Richard Levitte
75c3c831db Incorporate some changes that make OpenSSL compilable in CygWin. 2001-04-04 15:51:36 +00:00
Richard Levitte
385af2e9ec We're still just developping beta4 (or final release) 2001-04-04 04:30:39 +00:00
Richard Levitte
3c43aa1b82 Make do_bsd-gcc-shared depend on do_gnu-shared instead of the non-existent linux-shared 2001-04-04 04:24:35 +00:00
Bodo Möller
dea0f7dd0d As in the main branch, ignore the bctest exit value.
(I thought I had done this change before ...)
2001-04-03 15:20:22 +00:00
Bodo Möller
9a22ce66c9 This change should be suitable as a workaround for the Solaris x86
compiler bug reported in <01032110293775.22278@weba3.iname.net>
(the '++seq[i]' condition is evaluated as 256 rather than 0
when the previous value is 255).
2001-04-03 13:46:36 +00:00
Richard Levitte
72cd659df6 Plug a memory leak. Spotted by "Shijin" <shijin@comex.com> 2001-04-03 09:42:49 +00:00
Richard Levitte
58eef36b4d libfisdef.h and LIB do not exist on older VMS versions 2001-04-03 08:31:45 +00:00
Richard Levitte
79311176b2 Remove a typo in dgux-R4-gcc. 2001-04-03 08:27:53 +00:00
Richard Levitte
88f59f6152 Compaq C on OpenVMS is a little picky around producing empty object
files...
2001-04-02 09:10:59 +00:00
Bodo Möller
e32578847c avoid buffer overflow 2001-03-31 07:47:32 +00:00
Ulf Möller
323fd27435 Note that alpha.s is no longer used. 2001-03-31 01:19:42 +00:00
Richard Levitte
fcc88e4915 Tagging has been done, move on to develop beta 4 (hopefully not :-)). 2001-03-30 16:22:44 +00:00
Richard Levitte
86cb01870c make update 2001-03-30 15:59:57 +00:00
Bodo Möller
19086ef67b this time *really* fix the /../ check ... 2001-03-30 14:55:19 +00:00
Dr. Stephen Henson
ce3fc3956d Fix asn1_GetSequence() for indefinite length sequences. 2001-03-30 13:42:32 +00:00
Richard Levitte
787f25ab42 Release beta 3 of OpenSSL 0.9.6a.
The tag will be OpenSSL_0_9_6a-beta3.
2001-03-30 12:21:28 +00:00
Bodo Möller
85794e5556 Remove unused variable 'prev_slash' that I accidentily added. 2001-03-30 10:50:27 +00:00
Bodo Möller
7f950bd8a2 For -WWW, fix test for ".." directory references (and avoid warning for
index -1).
2001-03-30 10:47:56 +00:00
Bodo Möller
bf7b0d2d2b News for 0.9.6a. 2001-03-30 10:46:49 +00:00
Bodo Möller
83c4e75be9 Use enhanced bctest (as in main trunk), and add a workaround that
should solve the problems with FreeBSD's /bin/sh.
2001-03-30 09:23:14 +00:00
Richard Levitte
e5f3be2bbb Additionally, rename des_encrypt to des_encrypt1 in files that are
seldom used or read, but may still be...
2001-03-30 07:26:04 +00:00
Dr. Stephen Henson
fbca4281c8 Change des_encrypt to des_encrypt1 in assembly language perl
scripts and des_opts #defines.
2001-03-30 02:14:29 +00:00
Dr. Stephen Henson
a858b8036c Fix a bug caused by the 'fix' for empty X509_NAME encoding. 2001-03-30 00:58:49 +00:00
Richard Levitte
d2be2fb241 Merge in the latest news 2001-03-29 20:58:18 +00:00
Richard Levitte
4855eb75a7 One des_encrypt to des_encrypt1 I forgot to commit... 2001-03-29 20:37:32 +00:00
Richard Levitte
b1f88ec4e2 I forgot to rename des_encrypt to des_encrypt1 in libeay.num. 2001-03-29 10:49:01 +00:00
Richard Levitte
44924fb2b4 Since there has been reports of clashes between OpenSSL's
des_encrypt() and des_encrypt() defined on some systems (Solaris and
Unixware and maybe others), we rename des_encrypt() to des_encrypt1().
This should have very little impact on external software unless
someone has written a mode of DES, since that's all des_encrypt() is
meant for.
2001-03-29 07:45:01 +00:00
Richard Levitte
0e810cf6b0 Add news section for OpenSSL 0.9.6a. Please add what's missing 2001-03-28 13:35:48 +00:00
Ulf Möller
1777e3fd5e check the CRT result. 2001-03-28 04:49:39 +00:00
Ulf Möller
509ca689b0 Note the MIPS assembler bug fix. 2001-03-28 02:39:22 +00:00
Richard Levitte
3a1dbce19d Merge in the IRIX fix from the main development line. 2001-03-27 23:48:35 +00:00
Richard Levitte
10f2bf6d81 Reports seem to show that asm/mips3.s has faults. To be investigated, but let's avoid using it in the mean time 2001-03-27 09:12:51 +00:00
Richard Levitte
1714c07164 For mips3 and alpha, put the assembler file directives in separate
variables and disable the Alpha assembler for now, since it has been
shown to fail.

The Alpha failure can be shown by adding the following numbers:

FFFFFFFFFFFFFF0000FF2E00000000EBFFFFFF0000D1
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46FFE0FFFF0000

The result is:

1FFFFFFFFFFFEFF0000FF2E0000000032FFE0FEFF00D1

The result should really be:

1FFFFFFFFFFFFFF0000FF2E0000000032FFE0FEFF00D1
2001-03-26 16:26:41 +00:00
Richard Levitte
4cc3d1728f make update 2001-03-24 12:45:11 +00:00
Richard Levitte
3ae82255a9 Bring in the following changes:
ln on Solaris expects -f to come before -s.
The linux-shared method is actually gcc-specific, so call it
gnu-shared as well.

When using the native tools on Solaris, make damn sure the native ld
is used, even if the user has GNU ld earlier in his $PATH.
2001-03-24 12:37:32 +00:00
Richard Levitte
9bcab53f49 Bring in the following change:
gcc uses collect2, not ld, to link things.  Therefore, when using gcc
there's no need fooling ourselves, it's the gnu-shared method that we
should use.  Do it for Solaris to begin with.
2001-03-24 12:35:41 +00:00
Richard Levitte
ae17135ab5 Bring in the rest of the corrections for shared libraries from the
main trunk.
2001-03-24 12:26:03 +00:00
Richard Levitte
1f6b757ae9 For AIX 4.3 or above, allow the use of dlfcn. 2001-03-22 22:06:27 +00:00
Richard Levitte
a496f45f22 We really have no need for PEX_LIBS, so empty it. 2001-03-22 21:21:09 +00:00
Dr. Stephen Henson
3485cdb98e Oops... fix PKCS#7 bug properly this time. 2001-03-22 18:03:22 +00:00
Lutz Jänicke
3e3f04d4b7 Fix error caused by typo (len->strlen) and warning caused by long<->int
for HP-UX shl_* (32bit dynamic loading) interface.
2001-03-22 15:52:26 +00:00
Bodo Möller
879d230da3 solaris64-sparcv9-cc still works 2001-03-22 15:15:58 +00:00
Bodo Möller
2006dd12d6 Add missing '#ifndef NO_DSA'.
Submitted by: "Hellan,Kim KHE" <KHE@kmd.dk>
2001-03-22 15:13:43 +00:00
Bodo Möller
744b9066e2 Add missing '#ifndef NO_DSA'.
Submitted by: "Hellan,Kim KHE" <KHE@kmd.dk>
2001-03-22 15:05:23 +00:00
Bodo Möller
1e01dbfbb2 backport the comment (here it's NO_DH, not OPENSSL_NO_DH ...) 2001-03-22 15:00:45 +00:00
Bodo Möller
6ebcd441d6 Avoid compiler warning for NO_DH as in the main trunk. 2001-03-22 14:59:18 +00:00
Bodo Möller
ea09a504ef Add another "[This change does not apply to 0.9.7.]" line so
that we can combine the CHANGES files later on.
2001-03-22 14:56:55 +00:00
Richard Levitte
2e3b3c7be5 Got one positive report. 2001-03-22 14:56:04 +00:00
Richard Levitte
93389c86ca Remove redundant operations and update version info. 2001-03-22 14:42:24 +00:00
Dr. Stephen Henson
8d82218269 Fix bug in PKCS#7 decode routines when indefinite length
encoding is used inside definite length encoding.
2001-03-22 13:49:15 +00:00
Bodo Möller
a8e738f9ad Harmonize CHANGES and STATUS files between the 0.9.6a branch and
the trunk to keep diffs small.
2001-03-22 10:59:18 +00:00
Bodo Möller
bdcb9321ca The latest beta release is "2", not another "1" ... 2001-03-22 09:02:38 +00:00
Bodo Möller
d239b734e1 Avoid warning 2001-03-22 08:39:03 +00:00
Richard Levitte
d91722f8e0 Update the status. 2001-03-21 23:14:03 +00:00
Richard Levitte
b6282a2004 Tagging has been done (OpenSSL_0_9_6a-beta2), time to move on. 2001-03-21 20:54:52 +00:00
Richard Levitte
f14aa30118 Release OpenSSL 0.9.6a beta2. 2001-03-21 20:37:47 +00:00
Richard Levitte
a4c1a7e317 make update 2001-03-21 19:30:39 +00:00
Richard Levitte
b222cf0624 Since site_t is used, there's no more need to cast to int. 2001-03-21 18:39:43 +00:00
Bodo Möller
68b08abb14 Make sure the size_t declaration is available. 2001-03-21 15:30:28 +00:00
Bodo Möller
cee3fffab5 Turn 'num' argument to RAND_file_name into a size_t (rather than an int). 2001-03-21 15:26:47 +00:00
Richard Levitte
d1d8608464 Change from main development line, 2001-03-20 16:36 levitte
avoid linking problems when OpenSSL is built with no-dsa.
Spotted by Hellan,Kim KHE <khe@kmd.dk>
2001-03-21 14:18:06 +00:00
Richard Levitte
19d2a20a7f Change from main development line, 2001-03-18 15:24 levitte
New cofiguration for Unixwre and SCO,with slightly better granularity.
Contributed by Tim Rice <tim@multitalents.net>
2001-03-21 14:10:50 +00:00
Dr. Stephen Henson
0bf5d40787 Fix PKCS#12 key generation bug. 2001-03-18 02:10:25 +00:00
Richard Levitte
757d479536 make update 2001-03-16 12:26:29 +00:00
Richard Levitte
74c9ace6f0 From revision 1.54, 2001-03-16 10:30 levitte:
Correct a typo which might have lead to a dump.
Noted by Martin Kraemer <Martin.Kraemer@Fujitsu-Siemens.com>
2001-03-16 10:39:38 +00:00
Richard Levitte
cfb8afc558 From revision 1.6, 2001-03-08 13:27 bodo:
Throw out *all* absolute pathnames, not matter what they look like.
The filenames we are interested in for Makefile dependencies are
always relative.
2001-03-16 09:46:09 +00:00
Richard Levitte
e8acf5c6f8 Success with Mingw32. 2001-03-15 22:11:54 +00:00
Richard Levitte
d5864a1dcb Minimise the amount of -L. when linking the shared libraries. It
seems like some Unixen (SCO) have opinions about too many -L.
2001-03-15 22:11:03 +00:00
Richard Levitte
9f56705f96 The change on handling shared libraries was never applied in
0.9.6a-dev...
2001-03-15 21:44:17 +00:00
Richard Levitte
7b5b22af5a Add status on a few fixes. 2001-03-15 20:53:03 +00:00
Richard Levitte
00ecca84a8 BSDI ELF knows dlfcn. 2001-03-15 20:36:19 +00:00
Lutz Jänicke
38c3b405c8 Forgot cvs commands, so only the surrounding changes made it... sigh. 2001-03-15 12:42:56 +00:00
cvs2svn
e486ec5e0e This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-03-15 12:42:06 +00:00
Bodo Möller
9f06ce19dd Error codes are longs, not ints 2001-03-15 11:33:16 +00:00
Bodo Möller
ba61b14f1d More err_data memory leaks 2001-03-15 11:33:00 +00:00
Richard Levitte
5114966e00 It is a good thing to prepare the .def files. 2001-03-15 06:51:49 +00:00
Richard Levitte
eed7dd8d75 A number of things have now been corrected.
HP MPE/iX passes.
2001-03-15 06:15:26 +00:00
Bodo Möller
70bddeda24 0.9.6a-beta1 works for solaris64-sparcv9-cc. 2001-03-14 13:44:59 +00:00
Richard Levitte
f66efab8f7 The VMS build script was missing a couple of modules.
Reported by Mark Daniel <Mark.Daniel@wasd.vsm.com.au>
2001-03-14 13:39:30 +00:00
Richard Levitte
0caa1c11f8 Include openssl/rand.h so RAND_status() gets properly declared.
Reported by Rob Neff <neff.ra@home.com>
2001-03-14 13:36:50 +00:00
Richard Levitte
c68f050647 Signed vs. unsigned problem fix.
Reported by Rob Neff <neff.ra@home.com>
2001-03-14 13:32:16 +00:00
Richard Levitte
d58eb72f25 On HP-UX 10, shareable libraries end with '.sl', not '.so'.
In part reported by Lynn Gazis <lgazis@IVEA.com>.  The rest of the
report is about SHLIB_PATH being ignored.  It was decided that using
it would break security.
2001-03-14 13:30:07 +00:00
Richard Levitte
11bfaf6cff Irix fails. 2001-03-14 07:00:57 +00:00
Richard Levitte
68a54ab591 A few more reports. 2001-03-14 06:57:16 +00:00
Bodo Möller
9693045170 Fix: return 0 if no error occured. 2001-03-13 22:17:45 +00:00
Richard Levitte
311e4e9253 Update beta 1 status. 2001-03-13 21:39:34 +00:00
Richard Levitte
1874366208 We need to build MINFO. 2001-03-13 21:28:44 +00:00
Richard Levitte
18c497dffb Tagging has now been done, switch over to development of beta 2.
The tag for beta 1 is OpenSSL_0_9_6a-beta1.
2001-03-13 16:29:03 +00:00
Richard Levitte
15922ccdf6 Release Beta 1 of 0.9.6a. 2001-03-13 16:08:32 +00:00
Richard Levitte
5098bc92f8 A correction from the main trunk that was forgotten. 2001-03-13 14:39:51 +00:00
Richard Levitte
a411eaa858 make update
Since there was some functions added in libeay.num, it means things
are going to move in libeay.num in the OpenSSL-engine-0_9_6-stable
branch and in the main trunk.
2001-03-13 12:12:05 +00:00
Ulf Möller
42b848bcf1 that was useless - still fails with GCC 2001-03-13 07:12:02 +00:00
Bodo Möller
b670b1e3da Use err_clear_data macro 2001-03-13 07:03:39 +00:00
Ulf Möller
a1c769a5f6 Alpha workaround. This is a lot slower! 2001-03-13 06:31:36 +00:00
Bodo Möller
2c89d56a1d fix memory leak in err.c 2001-03-12 18:39:47 +00:00
Ulf Möller
142e22641e doh 2001-03-10 04:29:05 +00:00
Bodo Möller
b9cc6148f4 Workaround for solaris64 linking problem (explicit "ar rs" is needed
to create a symbol table).

Sun patches such as 109147-06 probably fix this problem,
but we can easily avoid it.
2001-03-09 13:00:52 +00:00
Bodo Möller
c6a15854ee Consistently use 'void *' for SSL read, peek and write functions. 2001-03-09 10:08:06 +00:00
Bodo Möller
ba41d8a556 ssl23_peek 2001-03-08 21:56:34 +00:00
Bodo Möller
f46a878e3f add ssl23_peek 2001-03-08 21:53:29 +00:00
Bodo Möller
fac683684b Avoid problems with multi-line NAME sections. 2001-03-08 21:53:01 +00:00
Lutz Jänicke
f51fee66ad Add newly learned knowledge from yesterday's discussion. 2001-03-08 17:25:49 +00:00
Ulf Möller
5fb0aa6487 Note the rand_win.c change 2001-03-08 16:58:07 +00:00
Ulf Möller
9c3cbe5d7f replace rdtsc as in HEAD 2001-03-08 16:49:03 +00:00
Richard Levitte
3e0d891828 SSLv2 session reuse bugfix from main development branch. 2001-03-05 14:52:30 +00:00
Lutz Jänicke
1c85e93c7c Typo, spotted by "Greg Stark" <gstark@ethentica.com>. 2001-03-01 16:48:12 +00:00
Dr. Stephen Henson
95d334f2db Fix bug in copy_email() which would not
find emailAddress at start of subject name.
2001-03-01 13:33:53 +00:00
Ulf Möller
98486a9310 improved bignum test as in 0.9.7.
We need this to find out if the bignum failures on Irix and Alpha are
caused by new 0.9.7 code or just aren't triggered in the 0.9.6 test suite.
2001-02-27 23:00:42 +00:00
Geoff Thorpe
4910cbf6db Backfit a bugfix from 0.9.7-dev to 0.9.6-stable. init() and finish()
handlers were previously getting called before (and after, respectively)
the "ex_data" structures - this meant init() had very little that it
could initialise, and finish() had very little it could cleanup.
2001-02-24 17:32:34 +00:00
Dr. Stephen Henson
75090e0365 Stop PKCS7_verify() core dumping with unknown public
key algorithms and leaking if the signature verify
fails.
2001-02-24 01:46:46 +00:00
Lutz Jänicke
6676457bba SSL_get_version() was an easy one :-) 2001-02-23 21:07:53 +00:00
cvs2svn
ad45ed9f5c This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-02-23 21:05:58 +00:00
Bodo Möller
32828e6ffd include e_os.h as "openssl/e_os.h" (as elsewhere) 2001-02-22 14:59:11 +00:00
Ulf Möller
a39ded513a BN_rand_range() as in main branch. 2001-02-21 15:54:31 +00:00
Bodo Möller
0069dbc4a5 honour -no_tmp_rsa 2001-02-20 12:58:57 +00:00
Bodo Möller
ac90362581 update 2001-02-20 11:31:20 +00:00
Bodo Möller
6d82a20624 Fix BN_[pseudo_]rand: 'mask' must be used even if top=-1.
Mention BN_[pseudo_]rand with top=-1 in CHANGES.
2001-02-20 08:22:25 +00:00
Ulf Möller
6c66fcba5f as in main branch 2001-02-20 00:38:02 +00:00
Ulf Möller
faa624f9f9 BN_rand_range() needs a BN_rand() variant that doesn't set the MSB. 2001-02-20 00:17:46 +00:00
Ulf Möller
15ed15d3e4 OPENSSL_issetugid() as in the main branch. 2001-02-19 23:57:18 +00:00
cvs2svn
54f7c8571f This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-02-19 22:04:03 +00:00
Bodo Möller
b6fefec364 Memory leak checking bugfixes for multi-threading. 2001-02-19 10:30:13 +00:00
Ulf Möller
2bf1c86d05 ispell 2001-02-16 02:11:12 +00:00
Ulf Möller
2147cd3540 pod format error 2001-02-16 01:46:47 +00:00
Lutz Jänicke
6a0fb6083c Move entry to match chronologic ordering. 2001-02-15 14:19:43 +00:00
Lutz Jänicke
0dbfc1da4a Add '-rand' option to s_server and s_client. 2001-02-15 10:35:29 +00:00
Ulf Möller
f945040633 IRIX bugfix 2001-02-14 00:23:27 +00:00
Lutz Jänicke
8b8e03dc66 Finish first round of session cache documentation. 2001-02-13 14:02:59 +00:00
cvs2svn
56ec43a0dd This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-02-13 14:00:10 +00:00
Lutz Jänicke
74ac7455c5 New manual page: SSL_CTX_set_mode. 2001-02-13 11:46:42 +00:00
cvs2svn
166850e315 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-02-13 11:43:12 +00:00
Dr. Stephen Henson
e15abbc69f Make X509_NAME produce correct encoding when empty. 2001-02-12 03:16:13 +00:00
Dr. Stephen Henson
c6b523d3dd Workaround for libsafe "error". 2001-02-12 03:04:59 +00:00
Lutz Jänicke
1e376e41a2 More about session caching. 2001-02-11 17:03:50 +00:00
cvs2svn
dc931b1fca This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-02-11 17:01:37 +00:00
Lutz Jänicke
7fcb1de839 Manual page for SSL_CTX_set_options(). Unfortunately for some of the
options someone much longer working with OpenSSL/SSLeay is needed.
2001-02-10 16:20:41 +00:00
cvs2svn
49b02a2d77 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-02-10 16:18:36 +00:00
Bodo Möller
418a0d151e Simplify BN_rand_range 2001-02-10 00:34:20 +00:00
Lutz Jänicke
7b0cb7f08d Fix "wierd" typo as submitted by Jeroen Ruigrok/Asmodai <asmodai@wxs.nl>. 2001-02-09 19:05:11 +00:00
Bodo Möller
1c08c320c5 add linux-s390 configuration (based on information submitted by
Denis Beauchemin <Denis.Beauchemin@Courrier.USherb.ca>)
2001-02-09 08:35:03 +00:00
Ulf Möller
452b34a770 add comment and RAND_load_file() change as in main branch. 2001-02-08 17:50:55 +00:00
Ulf Möller
6bdb723259 cleanup 2001-02-08 17:14:47 +00:00
Bodo Möller
31a74acfd3 Another comment change. (Previous comment does not apply
for range = 11000000... or range = 100000...)
2001-02-08 12:33:55 +00:00
Bodo Möller
d82242169b Change comments. (The expected number of iterations in BN_rand_range
never exceeds 1.333...).
2001-02-08 12:27:00 +00:00
Bodo Möller
a0707e6170 oops -- remove observation code 2001-02-08 12:25:03 +00:00
Bodo Möller
07fc72fea1 Integrate my implementation of a countermeasure against
Bleichenbacher's DSA attack.  With this implementation, the expected
number of iterations never exceeds 2.

New semantics for BN_rand_range():
BN_rand_range(r, min, range) now generates r such that
     min <= r < min+range.
(Previously, BN_rand_range(r, min, max) generated r such that
     min <= r < max.
It is more convenient to have the range; also the previous
prototype was misleading because max was larger than
the actual maximum.)
2001-02-08 12:20:25 +00:00
Lutz Jänicke
813c7c415b Update documentation to match the state of OpenSSL 0.9.6. 2001-02-08 10:36:37 +00:00
Ulf Möller
38b3a46ffa DSA fix from main branch. 2001-02-07 22:35:11 +00:00
Ulf Möller
60b3b2c9d0 EBCDIC bug fix from main branch. 2001-02-07 22:13:10 +00:00
Bodo Möller
c7410f2693 Avoid coredumps for CONF_get_...(NULL, ...) 2001-02-06 10:14:57 +00:00
Bodo Möller
43a5e1409e don't dump core 2001-02-06 09:47:25 +00:00
Richard Levitte
cd4fad5488 Merge in memory leak correction from main trunk. 2001-02-05 13:33:28 +00:00
Richard Levitte
28b1bceb2f 0.9.6a will not be release in Y2K. :-) 2001-02-05 13:32:33 +00:00
Lutz Jänicke
d4d76b9e83 Documenting session caching, 2nd step. 2001-02-04 18:10:54 +00:00
cvs2svn
e1fee47759 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-02-04 18:05:28 +00:00
Lutz Jänicke
88e9984da5 Clarify why SSL_CTX_use_certificate_chain_file() should be preferred. 2001-02-03 15:15:44 +00:00
Lutz Jänicke
dac1169e82 Typo: on my screen it nicely wrapped around at 80 :-) 2001-02-03 11:02:35 +00:00
Lutz Jänicke
53ab745f7a If the source has already been succesfully queried, do not try to open it
again as file.
2001-02-03 10:59:16 +00:00
Lutz Jänicke
2bbe747045 Backport... 2001-02-02 14:44:02 +00:00
cvs2svn
55cd47ffb4 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-02-02 14:40:53 +00:00
Dr. Stephen Henson
2e1d669cba Tolerate some "variations" used in some
certificates.

One is a valid CA which has no basicConstraints
but does have certSign keyUsage.

Other is S/MIME signer with nonRepudiation but
no digitalSignature.
2001-02-01 02:03:58 +00:00
Lutz Jänicke
819d5cef08 Backport extended documentation. 2001-01-31 14:18:43 +00:00
cvs2svn
e9cba65a99 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-01-31 14:14:21 +00:00
Richard Levitte
3b1f393ae7 Transport from development branch. 2001-01-30 13:54:44 +00:00
Lutz Jänicke
61433519af Backported manual pages from 0.9.7. 2001-01-28 18:35:10 +00:00
Lutz Jänicke
c032563a0a Backport documentation added for 0.9.7. 2001-01-28 18:31:35 +00:00
Dr. Stephen Henson
943f8a46a4 For CRLs.
Shouldn't use the "encode empty" macros with the
revoked field since that is initialised.

Extensions should now be set to NULL so they
encode as absent if none are added.
2001-01-28 14:48:13 +00:00
Dr. Stephen Henson
7a60df7dd3 New ASN1 macros which will encode an empty SEQUENCE OF.
Fix CRL encoders to encode empty SEQUENCE OF.

The old code was breaking CRL signatures.

Note: it is best to add new macros because changing the
old ones could break other code which expects that behaviour.
None of this is needed with the new ASN1 code anyway...
2001-01-28 14:18:20 +00:00
Dr. Stephen Henson
de0b3ab7fb Zero the premaster secret after deriving the master secret in DH
ciphersuites.
2001-01-25 13:20:39 +00:00
cvs2svn
2b8d087ba1 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2001-01-25 02:26:59 +00:00
Richard Levitte
eec6e53851 Eh, this branch is not version 0.9.6, it's the development of 0.9.6a. 2001-01-24 16:21:21 +00:00
Ulf Möller
9cd9ae3e3e new year 2001-01-24 02:56:13 +00:00
Bodo Möller
c4fd88f519 EVP_add_digest_alias additions to SSL_library_init 2001-01-23 16:38:15 +00:00
Ulf Möller
0a0a261d64 Irix fix as in main branch 2001-01-23 16:29:06 +00:00
Bodo Möller
6610d4f3b9 For improved compatibility with 'strange' certificates, add some
digest aliases (as found in OpenSSL_add_all_digests).
2001-01-23 13:55:01 +00:00
Ulf Möller
70f74dd946 remove newline 2001-01-21 18:51:01 +00:00
Ulf Möller
92fdeb37a0 config bug fixes from the main branch. 2001-01-21 18:48:11 +00:00
Bodo Möller
ffac355834 Fix openssl passwd -1 2001-01-19 07:38:55 +00:00
Bodo Möller
2e72fde15f As in the main branch, there's no longer a need to guess the bc
version at compile time.
2001-01-18 12:41:25 +00:00
Bodo Möller
aa9be09088 Use 'bctest' script to test if bc works (as in the main branch). 2001-01-17 10:26:25 +00:00
Dr. Stephen Henson
8bcceacf34 Fix PKCS#12 PBE routines to cope with passwords
from PEM callbacks which are not null terminated.
2001-01-14 14:14:45 +00:00
Bodo Möller
a5a4b34a5a When we are waiting for user action, we should say this explicitly. 2001-01-12 10:35:32 +00:00
Bodo Möller
f99267cffc Fix C code generate by 'openssl dsaparam -C'. 2001-01-10 14:27:04 +00:00
Dr. Stephen Henson
5860ecb8ec Fix uni2asc() so it can properly convert zero length
unicode strings. Certain PKCS#12 files contain these
in BMPStrings and it used to crash on them.
2001-01-10 01:14:23 +00:00
Bodo Möller
799751bcff Get rid of unused error code. 2000-12-27 23:41:50 +00:00
Bodo Möller
beaea31a96 Finish SSL_peek/SSL_pending fixes. 2000-12-26 12:06:48 +00:00
Bodo Möller
a9c3dc60b9 Fix SSL_peek and SSL_pending. 2000-12-25 18:41:37 +00:00
Bodo Möller
2fb0c899c6 Include CRYPTO_mem_leaks deadlock fix. 2000-12-20 10:07:31 +00:00
Bodo Möller
73bc0cfd93 fix indentation 2000-12-19 12:39:12 +00:00
Bodo Möller
cbfa030de7 Don't hold CRYPTO_LOCK_RSA during time-consuming operations. 2000-12-19 12:19:16 +00:00
Bodo Möller
bb617a9646 Obtain lock CRYPTO_LOCK_RSA before creating BN_MONT_CTX
structures and setting rsa->_method_mod_{n,p,q}.

Submitted by: "Reddie, Steven" <Steven.Reddie@ca.com>
2000-12-18 16:36:07 +00:00
Bodo Möller
7947f98b9b Fix another buffer overrun bug (which is not really a bug because
s->s2->escape is never set when sending data because the escape
bit is just reserved for future use in SSL 2.0)
2000-12-18 11:32:09 +00:00
Bodo Möller
fc4868cb47 Increase wbuf by one byte to fix the bug reported by
Eric Day <eday@concentric.net> to openssl-dev@openssl.org,
Message-ID: <20001218013437.A5526@concentric.net>
2000-12-18 11:23:23 +00:00
Bodo Möller
555a8493cd typo 2000-12-14 17:45:36 +00:00
Bodo Möller
2452e013aa The first step towards a SSL_peek fix.
The main thing to verify about these changes is that nothing at all
has changed, as far as behaviour is concerned (except that some
SSLerr() invocations now have a different function code): SSL_read
(ssl2_read, ssl3_read) behaves exactly as before, and SSL_peek refuses
to do any work exactly as before.  But now the functions actually
doing the work have a 'peek' flag, so it should be easy to change them
to behave accordingly.
2000-12-14 17:34:42 +00:00
cvs2svn
a29b1a3f0f This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2000-12-11 17:28:08 +00:00
Bodo Möller
79370621ea Change error message to "bignum too long" 2000-12-04 09:32:26 +00:00
Bodo Möller
4c4f1ee4de include <limits.h> 2000-12-03 09:55:01 +00:00
Bodo Möller
fe772376ec Don't allow BIGNUMs to become so large that computations with dmax
might overflow.
2000-12-03 09:37:15 +00:00
Ulf Möller
99cf5acd5c fix for Borland C 2000-12-01 03:06:55 +00:00
Bodo Möller
d2c38b1c73 Fix BN_rshift. 2000-11-30 22:35:52 +00:00
Lutz Jänicke
673d7ac121 Store verify_result with sessions to avoid potential security hole.
For the server side this was already done one year ago :-(
2000-11-29 18:12:32 +00:00
Bodo Möller
666d437538 Disable SSL_peek. 2000-11-28 11:14:39 +00:00
Bodo Möller
ddf72ed59f SSL_CTX-related fixes. 2000-11-08 10:09:10 +00:00
Dr. Stephen Henson
6502735b9c Fix from main trunk, 2000-10-04 03:16:34 steve:
Fix for bug in DirectoryString mask setting.

Fix from main trunk, 2000-10-20 01:16:49 steve:

Move expired CA certificate.

Fix from main trunk, 2000-10-20 02:36:47 steve:

Stop MASM debug warning.
2000-10-27 23:52:35 +00:00
Richard Levitte
31a266cb93 make update 2000-10-27 21:49:59 +00:00
Richard Levitte
b703bce788 Corrected missing colons. This was part of a larger change in the
main development line.
2000-10-27 21:49:40 +00:00
Richard Levitte
0188a53d19 Fix from main trunk, 2000-10-22 14:47 levitte:
Pointer error corrected
2000-10-27 20:29:10 +00:00
Richard Levitte
e7ce15846d Fix from main trunk, 2000-10-17 00:56 steve:
Update test server certificate in apps/server.pem (it was expired).
2000-10-27 20:23:21 +00:00
Richard Levitte
1433ae4790 Fix from main trunk, 2000-10-13 10:30 levitte:
Make the new conf implementatoin bug-compatible with the old one.
Actually, it's a feature that it goes looking at environment
variables.  It's just a pity that it's at the cost of the error
checking...  I'll see if I can come up with a better interface for
this.

Fix from main trunk, 2000-10-16 15:08  ben:

Always return a value.
2000-10-27 20:18:00 +00:00
Richard Levitte
a506153219 Fix from main trunk, 2000-10-16 08:01 levitte:
CRYPTO_get_ex_new_index would never return an error.
2000-10-27 20:12:05 +00:00
Richard Levitte
bee4756251 Fix from main trunk, 2000-10-15 01:51 steve:
Fix for typo in certificate directory lookup code.
2000-10-27 20:09:13 +00:00
Bodo Möller
b3f4fb1f72 rsautl.c requires RSA. 2000-10-26 12:05:22 +00:00
cvs2svn
38654b070d This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2000-10-19 23:16:49 +00:00
Richard Levitte
82c31e1496 Fix from main trunk, 2000-10-04 00:02 levitte:
More SSL functions documented.
Submitted by Lutz Jaenicke <Lutz.Jaenicke@aet.TU-Cottbus.DE>

Fix from main trunk, 2000-10-10 11:15  levitte:

A few small corrections to the SSL documentation.
Submitted by Lutz Jaenicke <Lutz.Jaenicke@aet.TU-Cottbus.DE>
2000-10-11 12:12:06 +00:00
Richard Levitte
4c3853abea Fix from main trunk, 2000-10-09 18:40 bodo:
BIO_sock_init() returns 1 for success and -1 for failure, not 0; thus
the condition '!BIO_sock_init()' doesn't make sense.
2000-10-11 10:24:06 +00:00
Richard Levitte
5b88fe121d Fix from main trunk, 2000-10-09 02:50 levitte:
Make sure ranlib is only used on .a libraries.
2000-10-11 10:11:22 +00:00
Richard Levitte
a46db6ecce Fix from main trunk, 2000-10-08 21:38 levitte:
Linux on Alpha has the configuration name linux-alpha-gcc, not
linux-alpha.
2000-10-11 10:05:37 +00:00
Richard Levitte
f4d52a896e Fix from main trunk, 2000-10-08 21:40 levitte:
Linux on Alpha with gcc knows about shared libraries.

Fix from main trunk, 2000-10-09 02:48  levitte:

Make sure that shareable libraries are turned off if we don't know how
to make them...
2000-10-11 10:04:16 +00:00
Richard Levitte
57b6a64eed Fix from main trunk, 2000-09-26 14:15 bodo:
Add BUGS section.
2000-10-11 09:53:10 +00:00
Richard Levitte
c0a86cd5dd Fix from main trunk, 2000-09-27 23:45 ulf:
The des_modes manpage is in section 7.
2000-10-11 09:47:44 +00:00
Richard Levitte
43cbb1e3dd Fix from main trunk, 2000-09-27 15:54 levitte:
A compiler warning removed.  Thanks to the folks at HP!
2000-10-11 09:46:34 +00:00
Richard Levitte
2cb3c3b2bf Fix from main trunk, 2000-09-29 22:14 levitte:
Include arpa/inet.h, since that's where htons() and friends are
supposed to be defined according to XPG4.2.  Found by Evan
<n2xjk@ulster.net> for the MVS platform.
2000-10-11 09:45:30 +00:00
Richard Levitte
24802a6d91 Fix from main trunk, 2000-09-26 13:39 bodo:
Note read_ahead-flag related fixes.
2000-10-11 09:16:47 +00:00
Richard Levitte
c125ea2767 Fix from main trunk, 2000-09-26 13:30 bodo:
Don't modify s->read_ahead in SSL_clear, which is called from
accept/connect functions; those should not change the read_ahead
setting of the SSL structure.

Fix from main trunk, 2000-09-26 13:38  bodo:

Set s->read_ahead in SSL_new because SSL_clear no longer modifies it.
2000-10-11 09:15:53 +00:00
Richard Levitte
df4fd356df Fix from main trunk, 2000-09-26 13:25 bodo:
Fix SSL_CTX_set_read_ahead macro.

Submitted by: Anders Gertz <gertz@epact.se>
2000-10-11 09:14:17 +00:00
Richard Levitte
1f1f23a882 Fix from main trunk, 2000-09-25 13:12 levitte:
Document the change.
2000-10-11 02:28:39 +00:00
Richard Levitte
ee4462d2b1 Fix from main trunk, 2000-09-25 12:22 levitte:
Update
2000-10-11 02:27:07 +00:00
Richard Levitte
41faea737a Fix from main trunk, 2000-09-25 12:21 levitte:
When creating a .def file, be a bit more selective so disabled
algorithms do not get in...
2000-10-11 02:24:38 +00:00
Richard Levitte
7c69ce8bc0 Fix from main trunk, 2000-09-25 11:30 levitte:
echo=off works on NT, but not on W2K.
2000-10-11 02:22:59 +00:00
Richard Levitte
eb3633164e Fix from main trunk, 2000-09-25 10:52 levitte:
'ranlib' doesn't always run on some systems.  That's actually
acceptable, since all that happens if it fails is a library with an
index, which makes linking slower, but still working correctly.
2000-10-11 02:04:16 +00:00
Richard Levitte
a08d14fef4 Fix from main trunk, 2000-09-25 10:49 levitte:
Make the algorithm implementations depend on the corresponding
selection macros.
2000-10-11 01:57:07 +00:00
Richard Levitte
b73ff18078 Fix from main trunk, 2000-09-25 07:55 ulf:
typo
2000-10-11 01:56:00 +00:00
cvs2svn
9beaae61ec This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_6-stable'.
2000-10-10 09:15:48 +00:00
1649 changed files with 62157 additions and 242692 deletions

View File

@@ -1,4 +1,4 @@
openssl.pc Makefile.ssl
MINFO MINFO
makefile.one makefile.one
tmp tmp
@@ -13,6 +13,3 @@ cctest.c
cctest.a cctest.a
libcrypto.so.* libcrypto.so.*
libssl.so.* libssl.so.*
*.flc
semantic.cache
Makefile

3841
CHANGES

File diff suppressed because it is too large Load Diff

View File

@@ -1,163 +0,0 @@
This file, together with ChangeLog.0_9_7-stable_not-in-head_FIPS,
provides a collection of those CVS change log entries for the
0.9.7 branch (OpenSSL_0_9_7-stable) that do not appear similarly in
0.9.8-dev (CVS head).
ChangeLog.0_9_7-stable_not-in-head_FIPS - "FIPS" related changes
ChangeLog.0_9_7-stable_not-in-head - everything else
Some obvious false positives have been eliminated: e.g., we do not
care about a simple "make update"; and we don't care about changes
identified to the 0.9.7 branch that were explicitly identified as
backports from head.
Eliminating all other entries (and finally this file and its
compantion), either as false positives or as things that should go
into 0.9.8, remains to be done. Any additional changes to 0.9.7 that
are not immediately put into 0.9.8, but belong there as well, should
be added to the end of this file.
2002-11-04 17:33 levitte
Changed:
Configure (1.314.2.38), "Exp", lines: +4 -2
Return my normal debug targets to something not so extreme, and
make the extreme ones special (or 'extreme', if you will :-)).
2002-12-16 19:17 appro
Changed:
crypto/bn/bn_lcl.h (1.23.2.3), "Exp", lines: +3 -0
crypto/bn/bn_mul.c (1.28.2.4), "Exp", lines: +84 -445
This is rollback to 0.9.6h bn_mul.c to address problem reported in
RT#272.
2003-07-27 15:46 ben
Changed:
crypto/aes/aes.h (1.1.2.5), "Exp", lines: +3 -0
crypto/aes/aes_cfb.c (1.1.2.4), "Exp", lines: +57 -0
Add untested CFB-r mode. Will be tested soon.
2003-07-28 17:07 ben
Changed:
Makefile.org (1.154.2.69), "Exp", lines: +5 -1
crypto/aes/aes.h (1.1.2.6), "Exp", lines: +3 -0
crypto/aes/aes_cfb.c (1.1.2.5), "Exp", lines: +19 -0
crypto/dsa/Makefile.ssl (1.49.2.6), "Exp", lines: +3 -2
crypto/err/Makefile.ssl (1.48.2.4), "Exp", lines: +17 -16
crypto/evp/e_aes.c (1.6.2.5), "Exp", lines: +8 -0
crypto/evp/e_des.c (1.5.2.2), "Exp", lines: +1 -1
crypto/evp/e_des3.c (1.8.2.3), "Exp", lines: +2 -2
crypto/evp/evp.h (1.86.2.11), "Exp", lines: +28 -11
crypto/evp/evp_locl.h (1.7.2.3), "Exp", lines: +2 -2
crypto/objects/obj_dat.h (1.49.2.13), "Exp", lines: +10 -5
crypto/objects/obj_mac.h (1.19.2.13), "Exp", lines: +5 -0
crypto/objects/obj_mac.num (1.15.2.9), "Exp", lines: +1 -0
crypto/objects/objects.txt (1.20.2.14), "Exp", lines: +4 -0
fips/Makefile.ssl (1.1.2.3), "Exp", lines: +7 -0
fips/aes/Makefile.ssl (1.1.2.2), "Exp", lines: +23 -1
fips/aes/fips_aesavs.c (1.1.2.3), "Exp", lines: +9 -1
test/Makefile.ssl (1.84.2.30), "Exp", lines: +101 -43
Add support for partial CFB modes, make tests work, update
dependencies.
2003-07-29 12:56 ben
Changed:
crypto/aes/aes_cfb.c (1.1.2.6), "Exp", lines: +9 -6
crypto/evp/c_allc.c (1.8.2.3), "Exp", lines: +1 -0
crypto/evp/evp_test.c (1.14.2.11), "Exp", lines: +17 -8
crypto/evp/evptests.txt (1.9.2.2), "Exp", lines: +48 -1
Working CFB1 and test vectors.
2003-07-29 15:24 ben
Changed:
crypto/evp/e_aes.c (1.6.2.6), "Exp", lines: +14 -0
crypto/objects/obj_dat.h (1.49.2.14), "Exp", lines: +15 -5
crypto/objects/obj_mac.h (1.19.2.14), "Exp", lines: +10 -0
crypto/objects/obj_mac.num (1.15.2.10), "Exp", lines: +2 -0
crypto/objects/objects.txt (1.20.2.15), "Exp", lines: +2 -0
fips/aes/Makefile.ssl (1.1.2.3), "Exp", lines: +1 -1
fips/aes/fips_aesavs.c (1.1.2.4), "Exp", lines: +34 -19
The rest of the keysizes for CFB1, working AES AVS test for CFB1.
2003-07-29 19:05 ben
Changed:
crypto/aes/aes.h (1.1.2.7), "Exp", lines: +3 -0
crypto/aes/aes_cfb.c (1.1.2.7), "Exp", lines: +14 -0
crypto/evp/c_allc.c (1.8.2.4), "Exp", lines: +1 -0
crypto/evp/e_aes.c (1.6.2.7), "Exp", lines: +4 -9
crypto/evp/evptests.txt (1.9.2.3), "Exp", lines: +48 -0
crypto/objects/obj_dat.h (1.49.2.15), "Exp", lines: +20 -5
crypto/objects/obj_mac.h (1.19.2.15), "Exp", lines: +15 -0
crypto/objects/obj_mac.num (1.15.2.11), "Exp", lines: +3 -0
crypto/objects/objects.txt (1.20.2.16), "Exp", lines: +3 -0
fips/aes/fips_aesavs.c (1.1.2.7), "Exp", lines: +11 -0
AES CFB8.
2003-07-30 20:30 ben
Changed:
Makefile.org (1.154.2.70), "Exp", lines: +16 -5
crypto/des/cfb_enc.c (1.7.2.1), "Exp", lines: +2 -1
crypto/des/des_enc.c (1.11.2.2), "Exp", lines: +4 -0
crypto/evp/e_aes.c (1.6.2.8), "Exp", lines: +7 -14
crypto/evp/e_des.c (1.5.2.3), "Exp", lines: +37 -1
crypto/evp/evp.h (1.86.2.12), "Exp", lines: +6 -0
crypto/evp/evp_locl.h (1.7.2.4), "Exp", lines: +9 -0
crypto/objects/obj_dat.h (1.49.2.16), "Exp", lines: +48 -23
crypto/objects/obj_mac.h (1.19.2.16), "Exp", lines: +31 -6
crypto/objects/obj_mac.num (1.15.2.12), "Exp", lines: +5 -0
crypto/objects/objects.txt (1.20.2.17), "Exp", lines: +12 -6
fips/Makefile.ssl (1.1.2.4), "Exp", lines: +8 -1
fips/fips_make_sha1 (1.1.2.3), "Exp", lines: +3 -0
fips/aes/Makefile.ssl (1.1.2.4), "Exp", lines: +1 -1
fips/des/.cvsignore (1.1.2.1), "Exp", lines: +3 -0
fips/des/Makefile.ssl (1.1.2.1), "Exp", lines: +96 -0
fips/des/fingerprint.sha1 (1.1.2.1), "Exp", lines: +2 -0
fips/des/fips_des_enc.c (1.1.2.1), "Exp", lines: +288 -0
fips/des/fips_des_locl.h (1.1.2.1), "Exp", lines: +428 -0
fips/des/fips_desmovs.c (1.1.2.1), "Exp", lines: +659 -0
Whoops, forgot FIPS DES, also add EVPs for DES CFB1 and 8.
2003-08-01 12:25 ben
Changed:
crypto/des/cfb_enc.c (1.7.2.2), "Exp", lines: +45 -36
crypto/evp/c_allc.c (1.8.2.5), "Exp", lines: +2 -0
crypto/evp/e_des.c (1.5.2.4), "Exp", lines: +8 -3
crypto/evp/evptests.txt (1.9.2.4), "Exp", lines: +6 -0
Fix DES CFB-r.
2003-08-01 12:31 ben
Changed:
crypto/evp/evptests.txt (1.9.2.5), "Exp", lines: +4 -0
DES CFB8 test.
2005-04-19 16:21 appro
Changed:
Configure (1.314.2.117), "Exp", lines: +24 -21
Makefile.org (1.154.2.100), "Exp", lines: +1 -11
TABLE (1.99.2.52), "Exp", lines: +20 -20
apps/Makefile (1.1.4.15), "Exp", lines: +1 -1
test/Makefile (1.1.4.12), "Exp", lines: +1 -1
Enable shared link on HP-UX.

File diff suppressed because it is too large Load Diff

1364
Configure

File diff suppressed because it is too large Load Diff

301
FAQ
View File

@@ -30,8 +30,6 @@ OpenSSL - Frequently Asked Questions
* Why can't I use OpenSSL certificates with SSL client authentication? * Why can't I use OpenSSL certificates with SSL client authentication?
* Why does my browser give a warning about a mismatched hostname? * Why does my browser give a warning about a mismatched hostname?
* How do I install a CA certificate into a browser? * How do I install a CA certificate into a browser?
* Why is OpenSSL x509 DN output not conformant to RFC2253?
* What is a "128 bit certificate"? Can I create one with OpenSSL?
[BUILD] Questions about building and testing OpenSSL [BUILD] Questions about building and testing OpenSSL
@@ -43,20 +41,13 @@ OpenSSL - Frequently Asked Questions
* Why does the OpenSSL compilation fail with "ar: command not found"? * Why does the OpenSSL compilation fail with "ar: command not found"?
* Why does the OpenSSL compilation fail on Win32 with VC++? * Why does the OpenSSL compilation fail on Win32 with VC++?
* What is special about OpenSSL on Redhat? * What is special about OpenSSL on Redhat?
* Why does the OpenSSL compilation fail on MacOS X?
* Why does the OpenSSL test suite fail on MacOS X? * Why does the OpenSSL test suite fail on MacOS X?
* Why does the OpenSSL test suite fail in BN_sqr test [on a 64-bit platform]?
* Why does OpenBSD-i386 build fail on des-586.s with "Unimplemented segment type"?
* Why does the OpenSSL test suite fail in sha512t on x86 CPU?
* Why does compiler fail to compile sha512.c?
* Test suite still fails, what to do?
[PROG] Questions about programming with OpenSSL [PROG] Questions about programming with OpenSSL
* Is OpenSSL thread-safe? * Is OpenSSL thread-safe?
* I've compiled a program under Windows and it crashes: why? * I've compiled a program under Windows and it crashes: why?
* How do I read or write a DER encoded buffer using the ASN1 functions? * How do I read or write a DER encoded buffer using the ASN1 functions?
* OpenSSL uses DER but I need BER format: does OpenSSL support BER?
* I've tried using <M_some_evil_pkcs12_macro> and I get errors why? * I've tried using <M_some_evil_pkcs12_macro> and I get errors why?
* I've called <some function> and it fails, why? * I've called <some function> and it fails, why?
* I just get a load of numbers for the error output, what do they mean? * I just get a load of numbers for the error output, what do they mean?
@@ -64,8 +55,6 @@ OpenSSL - Frequently Asked Questions
* Why can't the OpenSSH configure script detect OpenSSL? * Why can't the OpenSSH configure script detect OpenSSL?
* Can I use OpenSSL's SSL library with non-blocking I/O? * Can I use OpenSSL's SSL library with non-blocking I/O?
* Why doesn't my server application receive a client certificate? * Why doesn't my server application receive a client certificate?
* Why does compilation fail due to an undefined symbol NID_uniqueIdentifier?
* I think I've detected a memory leak, is this a bug?
=============================================================================== ===============================================================================
@@ -74,7 +63,7 @@ OpenSSL - Frequently Asked Questions
* Which is the current version of OpenSSL? * Which is the current version of OpenSSL?
The current version is available from <URL: http://www.openssl.org>. The current version is available from <URL: http://www.openssl.org>.
OpenSSL 0.9.8e was released on February 23rd, 2007. OpenSSL 0.9.6h was released on 5 December 2002.
In addition to the current stable release, you can also access daily In addition to the current stable release, you can also access daily
snapshots of the OpenSSL development version at <URL: snapshots of the OpenSSL development version at <URL:
@@ -122,14 +111,11 @@ OpenSSL. Information on the OpenSSL mailing lists is available from
* Where can I get a compiled version of OpenSSL? * Where can I get a compiled version of OpenSSL?
You can finder pointers to binary distributions in
http://www.openssl.org/related/binaries.html .
Some applications that use OpenSSL are distributed in binary form. Some applications that use OpenSSL are distributed in binary form.
When using such an application, you don't need to install OpenSSL When using such an application, you don't need to install OpenSSL
yourself; the application will include the required parts (e.g. DLLs). yourself; the application will include the required parts (e.g. DLLs).
If you want to build OpenSSL on a Windows system and you don't have If you want to install OpenSSL on a Windows system and you don't have
a C compiler, read the "Mingw32" section of INSTALL.W32 for information a C compiler, read the "Mingw32" section of INSTALL.W32 for information
on how to obtain and install the free GNU C compiler. on how to obtain and install the free GNU C compiler.
@@ -145,8 +131,8 @@ less Unix-centric, it might have been used much earlier.
With version 0.9.6 OpenSSL was extended to interface to external crypto With version 0.9.6 OpenSSL was extended to interface to external crypto
hardware. This was realized in a special release '0.9.6-engine'. With hardware. This was realized in a special release '0.9.6-engine'. With
version 0.9.7 the changes were merged into the main development line, version 0.9.7 (not yet released) the changes were merged into the main
so that the special release is no longer necessary. development line, so that the special release is no longer necessary.
* How do I check the authenticity of the OpenSSL distribution? * How do I check the authenticity of the OpenSSL distribution?
@@ -156,8 +142,7 @@ Use MD5 to check that a tarball from a mirror site is identical:
md5sum TARBALL | awk '{print $1;}' | cmp - TARBALL.md5 md5sum TARBALL | awk '{print $1;}' | cmp - TARBALL.md5
You can check authenticity using pgp or gpg. You need the OpenSSL team You can check authenticity using pgp or gpg. You need the OpenSSL team
member public key used to sign it (download it from a key server, see a member public key used to sign it (download it from a key server). Then
list of keys at <URL: http://www.openssl.org/about/>). Then
just do: just do:
pgp TARBALL.asc pgp TARBALL.asc
@@ -171,8 +156,8 @@ you if you want to use OpenSSL. For information on intellectual
property rights, please consult a lawyer. The OpenSSL team does not property rights, please consult a lawyer. The OpenSSL team does not
offer legal advice. offer legal advice.
You can configure OpenSSL so as not to use IDEA, MDC2 and RC5 by using You can configure OpenSSL so as not to use RC5 and IDEA by using
./config no-idea no-mdc2 no-rc5 ./config no-rc5 no-idea
* Can I use OpenSSL with GPL software? * Can I use OpenSSL with GPL software?
@@ -199,30 +184,18 @@ for permission to use their software with OpenSSL.
Cryptographic software needs a source of unpredictable data to work Cryptographic software needs a source of unpredictable data to work
correctly. Many open source operating systems provide a "randomness correctly. Many open source operating systems provide a "randomness
device" (/dev/urandom or /dev/random) that serves this purpose. device" that serves this purpose. On other systems, applications have
All OpenSSL versions try to use /dev/urandom by default; starting with to call the RAND_add() or RAND_seed() function with appropriate data
version 0.9.7, OpenSSL also tries /dev/random if /dev/urandom is not before generating keys or performing public key encryption.
available. (These functions initialize the pseudo-random number generator, PRNG.)
On other systems, applications have to call the RAND_add() or Some broken applications do not do this. As of version 0.9.5, the
RAND_seed() function with appropriate data before generating keys or OpenSSL functions that need randomness report an error if the random
performing public key encryption. (These functions initialize the number generator has not been seeded with at least 128 bits of
pseudo-random number generator, PRNG.) Some broken applications do randomness. If this error occurs, please contact the author of the
not do this. As of version 0.9.5, the OpenSSL functions that need application you are using. It is likely that it never worked
randomness report an error if the random number generator has not been correctly. OpenSSL 0.9.5 and later make the error visible by refusing
seeded with at least 128 bits of randomness. If this error occurs and to perform potentially insecure encryption.
is not discussed in the documentation of the application you are
using, please contact the author of that application; it is likely
that it never worked correctly. OpenSSL 0.9.5 and later make the
error visible by refusing to perform potentially insecure encryption.
If you are using Solaris 8, you can add /dev/urandom and /dev/random
devices by installing patch 112438 (Sparc) or 112439 (x86), which are
available via the Patchfinder at <URL: http://sunsolve.sun.com>
(Solaris 9 includes these devices by default). For /dev/random support
for earlier Solaris versions, see Sun's statement at
<URL: http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsrdb/27606&zone_32=SUNWski>
(the SUNWski package is available in patch 105710).
On systems without /dev/urandom and /dev/random, it is a good idea to On systems without /dev/urandom and /dev/random, it is a good idea to
use the Entropy Gathering Demon (EGD); see the RAND_egd() manpage for use the Entropy Gathering Demon (EGD); see the RAND_egd() manpage for
@@ -255,6 +228,18 @@ OpenSSL command line tools. Applications using the OpenSSL library
provide their own configuration options to specify the entropy source, provide their own configuration options to specify the entropy source,
please check out the documentation coming the with application. please check out the documentation coming the with application.
For Solaris 2.6, Tim Nibbe <tnibbe@sprint.net> and others have suggested
installing the SUNski package from Sun patch 105710-01 (Sparc) which
adds a /dev/random device and make sure it gets used, usually through
$RANDFILE. There are probably similar patches for the other Solaris
versions. An official statement from Sun with respect to /dev/random
support can be found at
http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsrdb/27606&zone_32=SUNWski
However, be warned that /dev/random is usually a blocking device, which
may have some effects on OpenSSL.
A third party /dev/random solution for Solaris is available at
http://www.cosy.sbg.ac.at/~andi/
* Why do I get an "unable to write 'random state'" error message? * Why do I get an "unable to write 'random state'" error message?
@@ -380,50 +365,6 @@ DO NOT DO THIS! This command will give away your CAs private key and
reduces its security to zero: allowing anyone to forge certificates in reduces its security to zero: allowing anyone to forge certificates in
whatever name they choose. whatever name they choose.
* Why is OpenSSL x509 DN output not conformant to RFC2253?
The ways to print out the oneline format of the DN (Distinguished Name) have
been extended in version 0.9.7 of OpenSSL. Using the new X509_NAME_print_ex()
interface, the "-nameopt" option could be introduded. See the manual
page of the "openssl x509" commandline tool for details. The old behaviour
has however been left as default for the sake of compatibility.
* What is a "128 bit certificate"? Can I create one with OpenSSL?
The term "128 bit certificate" is a highly misleading marketing term. It does
*not* refer to the size of the public key in the certificate! A certificate
containing a 128 bit RSA key would have negligible security.
There were various other names such as "magic certificates", "SGC
certificates", "step up certificates" etc.
You can't generally create such a certificate using OpenSSL but there is no
need to any more. Nowadays web browsers using unrestricted strong encryption
are generally available.
When there were tight export restrictions on the export of strong encryption
software from the US only weak encryption algorithms could be freely exported
(initially 40 bit and then 56 bit). It was widely recognised that this was
inadequate. A relaxation the rules allowed the use of strong encryption but
only to an authorised server.
Two slighly different techniques were developed to support this, one used by
Netscape was called "step up", the other used by MSIE was called "Server Gated
Cryptography" (SGC). When a browser initially connected to a server it would
check to see if the certificate contained certain extensions and was issued by
an authorised authority. If these test succeeded it would reconnect using
strong encryption.
Only certain (initially one) certificate authorities could issue the
certificates and they generally cost more than ordinary certificates.
Although OpenSSL can create certificates containing the appropriate extensions
the certificate would not come from a permitted authority and so would not
be recognized.
The export laws were later changed to allow almost unrestricted use of strong
encryption so these certificates are now obsolete.
[BUILD] ======================================================================= [BUILD] =======================================================================
@@ -514,10 +455,6 @@ This will only compile sha_dgst.c with -O0, the rest with the optimization
level chosen by the configuration process. When the above is done, do the level chosen by the configuration process. When the above is done, do the
test and installation and you're set. test and installation and you're set.
3. Reconfigure the toolkit with no-sha0 option to leave out SHA0. It
should not be used and is not used in SSL/TLS nor any other recognized
protocol in either case.
* Why does the OpenSSL compilation fail with "ar: command not found"? * Why does the OpenSSL compilation fail with "ar: command not found"?
@@ -541,13 +478,10 @@ and then redo the compilation. What you should really do is make sure
Sometimes, you may get reports from VC++ command line (cl) that it Sometimes, you may get reports from VC++ command line (cl) that it
can't find standard include files like stdio.h and other weirdnesses. can't find standard include files like stdio.h and other weirdnesses.
One possible cause is that the environment isn't correctly set up. One possible cause is that the environment isn't correctly set up.
To solve that problem for VC++ versions up to 6, one should run To solve that problem, one should run VCVARS32.BAT which is found in
VCVARS32.BAT which is found in the 'bin' subdirectory of the VC++ the 'bin' subdirectory of the VC++ installation directory (somewhere
installation directory (somewhere under 'Program Files'). For VC++ under 'Program Files'). This needs to be done prior to running NMAKE,
version 7 (and up?), which is also called VS.NET, the file is called and the changes are only valid for the current DOS session.
VSVARS32.BAT instead.
This needs to be done prior to running NMAKE, and the changes are only
valid for the current DOS session.
* What is special about OpenSSL on Redhat? * What is special about OpenSSL on Redhat?
@@ -583,18 +517,6 @@ IDEA: 5,214,703 25/05/2010
RC5: 5,724,428 03/03/2015 RC5: 5,724,428 03/03/2015
* Why does the OpenSSL compilation fail on MacOS X?
If the failure happens when trying to build the "openssl" binary, with
a large number of undefined symbols, it's very probable that you have
OpenSSL 0.9.6b delivered with the operating system (you can find out by
running '/usr/bin/openssl version') and that you were trying to build
OpenSSL 0.9.7 or newer. The problem is that the loader ('ld') in
MacOS X has a misfeature that's quite difficult to go around.
Look in the file PROBLEMS for a more detailed explanation and for possible
solutions.
* Why does the OpenSSL test suite fail on MacOS X? * Why does the OpenSSL test suite fail on MacOS X?
If the failure happens when running 'make test' and the RC4 test fails, If the failure happens when running 'make test' and the RC4 test fails,
@@ -608,66 +530,6 @@ libraries you just built.
Look in the file PROBLEMS for a more detailed explanation and for possible Look in the file PROBLEMS for a more detailed explanation and for possible
solutions. solutions.
* Why does the OpenSSL test suite fail in BN_sqr test [on a 64-bit platform]?
Failure in BN_sqr test is most likely caused by a failure to configure the
toolkit for current platform or lack of support for the platform in question.
Run './config -t' and './apps/openssl version -p'. Do these platform
identifiers match? If they don't, then you most likely failed to run
./config and you're hereby advised to do so before filing a bug report.
If ./config itself fails to run, then it's most likely problem with your
local environment and you should turn to your system administrator (or
similar). If identifiers match (and/or no alternative identifier is
suggested by ./config script), then the platform is unsupported. There might
or might not be a workaround. Most notably on SPARC64 platforms with GNU
C compiler you should be able to produce a working build by running
'./config -m32'. I understand that -m32 might not be what you want/need,
but the build should be operational. For further details turn to
<openssl-dev@openssl.org>.
* Why does OpenBSD-i386 build fail on des-586.s with "Unimplemented segment type"?
As of 0.9.7 assembler routines were overhauled for position independence
of the machine code, which is essential for shared library support. For
some reason OpenBSD is equipped with an out-of-date GNU assembler which
finds the new code offensive. To work around the problem, configure with
no-asm (and sacrifice a great deal of performance) or patch your assembler
according to <URL: http://www.openssl.org/~appro/gas-1.92.3.OpenBSD.patch>.
For your convenience a pre-compiled replacement binary is provided at
<URL: http://www.openssl.org/~appro/gas-1.92.3.static.aout.bin>.
Reportedly elder *BSD a.out platforms also suffer from this problem and
remedy should be same. Provided binary is statically linked and should be
working across wider range of *BSD branches, not just OpenBSD.
* Why does the OpenSSL test suite fail in sha512t on x86 CPU?
If the test program in question fails withs SIGILL, Illegal Instruction
exception, then you more than likely to run SSE2-capable CPU, such as
Intel P4, under control of kernel which does not support SSE2
instruction extentions. See accompanying INSTALL file and
OPENSSL_ia32cap(3) documentation page for further information.
* Why does compiler fail to compile sha512.c?
OpenSSL SHA-512 implementation depends on compiler support for 64-bit
integer type. Few elder compilers [ULTRIX cc, SCO compiler to mention a
couple] lack support for this and therefore are incapable of compiling
the module in question. The recommendation is to disable SHA-512 by
adding no-sha512 to ./config [or ./Configure] command line. Another
possible alternative might be to switch to GCC.
* Test suite still fails, what to do?
Another common reason for failure to complete some particular test is
simply bad code generated by a buggy component in toolchain or deficiency
in run-time environment. There are few cases documented in PROBLEMS file,
consult it for possible workaround before you beat the drum. Even if you
don't find solution or even mention there, do reserve for possibility of
a compiler bug. Compiler bugs might appear in rather bizarre ways, they
never make sense, and tend to emerge when you least expect them. In order
to identify one, drop optimization level, e.g. by editing CFLAG line in
top-level Makefile, recompile and re-run the test.
[PROG] ======================================================================== [PROG] ========================================================================
* Is OpenSSL thread-safe? * Is OpenSSL thread-safe?
@@ -679,9 +541,8 @@ libraries. If your platform is not one of these, consult the INSTALL
file. file.
Multi-threaded applications must provide two callback functions to Multi-threaded applications must provide two callback functions to
OpenSSL by calling CRYPTO_set_locking_callback() and OpenSSL. This is described in the threads(3) manpage.
CRYPTO_set_id_callback(). This is described in the threads(3)
manpage.
* I've compiled a program under Windows and it crashes: why? * I've compiled a program under Windows and it crashes: why?
@@ -701,10 +562,10 @@ your application must link against the same by which OpenSSL was
built. If you are using MS Visual C++ (Studio) this can be changed built. If you are using MS Visual C++ (Studio) this can be changed
by: by:
1. Select Settings... from the Project Menu. 1. Select Settings... from the Project Menu.
2. Select the C/C++ Tab. 2. Select the C/C++ Tab.
3. Select "Code Generation from the "Category" drop down list box 3. Select "Code Generation from the "Category" drop down list box
4. Select the Appropriate library (see table below) from the "Use 4. Select the Appropriate library (see table below) from the "Use
run-time library" drop down list box. Perform this step for both run-time library" drop down list box. Perform this step for both
your debug and release versions of your application (look at the your debug and release versions of your application (look at the
top left of the settings panel to change between the two) top left of the settings panel to change between the two)
@@ -723,44 +584,30 @@ by:
Note that debug and release libraries are NOT interchangeable. If you Note that debug and release libraries are NOT interchangeable. If you
built OpenSSL with /MD your application must use /MD and cannot use /MDd. built OpenSSL with /MD your application must use /MD and cannot use /MDd.
As per 0.9.8 the above limitation is eliminated for .DLLs. OpenSSL
.DLLs compiled with some specific run-time option [we insist on the
default /MD] can be deployed with application compiled with different
option or even different compiler. But there is a catch! Instead of
re-compiling OpenSSL toolkit, as you would have to with prior versions,
you have to compile small C snippet with compiler and/or options of
your choice. The snippet gets installed as
<install-root>/include/openssl/applink.c and should be either added to
your application project or simply #include-d in one [and only one]
of your application source files. Failure to link this shim module
into your application manifests itself as fatal "no OPENSSL_Applink"
run-time error. An explicit reminder is due that in this situation
[mixing compiler options] it is as important to add CRYPTO_malloc_init
prior first call to OpenSSL.
* How do I read or write a DER encoded buffer using the ASN1 functions? * How do I read or write a DER encoded buffer using the ASN1 functions?
You have two options. You can either use a memory BIO in conjunction You have two options. You can either use a memory BIO in conjunction
with the i2d_*_bio() or d2i_*_bio() functions or you can use the with the i2d_XXX_bio() or d2i_XXX_bio() functions or you can use the
i2d_*(), d2i_*() functions directly. Since these are often the i2d_XXX(), d2i_XXX() functions directly. Since these are often the
cause of grief here are some code fragments using PKCS7 as an example: cause of grief here are some code fragments using PKCS7 as an example:
unsigned char *buf, *p; unsigned char *buf, *p;
int len; int len;
len = i2d_PKCS7(p7, NULL); len = i2d_PKCS7(p7, NULL);
buf = OPENSSL_malloc(len); /* or Malloc, error checking omitted */ buf = OPENSSL_malloc(len); /* or Malloc, error checking omitted */
p = buf; p = buf;
i2d_PKCS7(p7, &p); i2d_PKCS7(p7, &p);
At this point buf contains the len bytes of the DER encoding of At this point buf contains the len bytes of the DER encoding of
p7. p7.
The opposite assumes we already have len bytes in buf: The opposite assumes we already have len bytes in buf:
unsigned char *p; unsigned char *p;
p = buf; p = buf;
p7 = d2i_PKCS7(NULL, &p, len); p7 = d2i_PKCS7(NULL, &p, len);
At this point p7 contains a valid PKCS7 structure of NULL if an error At this point p7 contains a valid PKCS7 structure of NULL if an error
occurred. If an error occurred ERR_print_errors(bio) should give more occurred. If an error occurred ERR_print_errors(bio) should give more
@@ -775,20 +622,6 @@ and attempts to free the buffer will have unpredictable results
because it no longer points to the same address. because it no longer points to the same address.
* OpenSSL uses DER but I need BER format: does OpenSSL support BER?
The short answer is yes, because DER is a special case of BER and OpenSSL
ASN1 decoders can process BER.
The longer answer is that ASN1 structures can be encoded in a number of
different ways. One set of ways is the Basic Encoding Rules (BER) with various
permissible encodings. A restriction of BER is the Distinguished Encoding
Rules (DER): these uniquely specify how a given structure is encoded.
Therefore, because DER is a special case of BER, DER is an acceptable encoding
for BER.
* I've tried using <M_some_evil_pkcs12_macro> and I get errors why? * I've tried using <M_some_evil_pkcs12_macro> and I get errors why?
This usually happens when you try compiling something using the PKCS#12 This usually happens when you try compiling something using the PKCS#12
@@ -841,7 +674,6 @@ The general answer is to check the config.log file generated when running
the OpenSSH configure script. It should contain the detailed information the OpenSSH configure script. It should contain the detailed information
on why the OpenSSL library was not detected or considered incompatible. on why the OpenSSL library was not detected or considered incompatible.
* Can I use OpenSSL's SSL library with non-blocking I/O? * Can I use OpenSSL's SSL library with non-blocking I/O?
Yes; make sure to read the SSL_get_error(3) manual page! Yes; make sure to read the SSL_get_error(3) manual page!
@@ -863,36 +695,5 @@ if explicitly asked by the server. Use the SSL_VERIFY_PEER flag of the
SSL_CTX_set_verify() function to enable the use of client certificates. SSL_CTX_set_verify() function to enable the use of client certificates.
* Why does compilation fail due to an undefined symbol NID_uniqueIdentifier?
For OpenSSL 0.9.7 the OID table was extended and corrected. In earlier
versions, uniqueIdentifier was incorrectly used for X.509 certificates.
The correct name according to RFC2256 (LDAP) is x500UniqueIdentifier.
Change your code to use the new name when compiling against OpenSSL 0.9.7.
* I think I've detected a memory leak, is this a bug?
In most cases the cause of an apparent memory leak is an OpenSSL internal table
that is allocated when an application starts up. Since such tables do not grow
in size over time they are harmless.
These internal tables can be freed up when an application closes using various
functions. Currently these include following:
Thread-local cleanup functions:
ERR_remove_state()
Application-global cleanup functions that are aware of usage (and therefore
thread-safe):
ENGINE_cleanup() and CONF_modules_unload()
"Brutal" (thread-unsafe) Application-global cleanup functions:
ERR_free_strings(), EVP_cleanup() and CRYPTO_cleanup_all_ex_data().
=============================================================================== ===============================================================================

75
INSTALL
View File

@@ -2,12 +2,8 @@
INSTALLATION ON THE UNIX PLATFORM INSTALLATION ON THE UNIX PLATFORM
--------------------------------- ---------------------------------
[Installation on DOS (with djgpp), Windows, OpenVMS, MacOS (before MacOS X) [Installation on Windows, OpenVMS and MacOS (before MacOS X) is described
and NetWare is described in INSTALL.DJGPP, INSTALL.W32, INSTALL.VMS, in INSTALL.W32, INSTALL.VMS and INSTALL.MacOS.]
INSTALL.MacOS and INSTALL.NW.
This document describes installation on operating systems in the Unix
family.]
To install OpenSSL, you will need: To install OpenSSL, you will need:
@@ -57,15 +53,6 @@
This will usually require additional system-dependent options! This will usually require additional system-dependent options!
See "Note on multi-threading" below. See "Note on multi-threading" below.
no-zlib Don't try to build with support for zlib compression and
decompression.
zlib Build with support for zlib compression/decompression.
zlib-dynamic Like "zlib", but has OpenSSL load the zlib library dynamically
when needed. This is only supported on systems where loading
of shared libraries is supported. This is the default choice.
no-shared Don't try to create shared libraries. no-shared Don't try to create shared libraries.
shared In addition to the usual static libraries, create shared shared In addition to the usual static libraries, create shared
@@ -75,30 +62,14 @@
no-asm Do not use assembler code. no-asm Do not use assembler code.
386 Use the 80386 instruction set only (the default x86 code is 386 Use the 80386 instruction set only (the default x86 code is
more efficient, but requires at least a 486). Note: Use more efficient, but requires at least a 486).
compiler flags for any other CPU specific configuration,
e.g. "-m32" to build x86 code on an x64 system.
no-sse2 Exclude SSE2 code pathes. Normally SSE2 extention is
detected at run-time, but the decision whether or not the
machine code will be executed is taken solely on CPU
capability vector. This means that if you happen to run OS
kernel which does not support SSE2 extension on Intel P4
processor, then your application might be exposed to
"illegal instruction" exception. There might be a way
to enable support in kernel, e.g. FreeBSD kernel can be
compiled with CPU_ENABLE_SSE, and there is a way to
disengage SSE2 code pathes upon application start-up,
but if you aim for wider "audience" running such kernel,
consider no-sse2. Both 386 and no-asm options above imply
no-sse2.
no-<cipher> Build without the specified cipher (bf, cast, des, dh, dsa, no-<cipher> Build without the specified cipher (bf, cast, des, dh, dsa,
hmac, md2, md5, mdc2, rc2, rc4, rc5, rsa, sha). hmac, md2, md5, mdc2, rc2, rc4, rc5, rsa, sha).
The crypto/<cipher> directory can be removed after running The crypto/<cipher> directory can be removed after running
"make depend". "make depend".
-Dxxx, -lxxx, -Lxxx, -fxxx, -mxxx, -Kxxx These system specific options will -Dxxx, -lxxx, -Lxxx, -fxxx, -Kxxx These system specific options will
be passed through to the compiler to allow you to be passed through to the compiler to allow you to
define preprocessor symbols, specify additional libraries, define preprocessor symbols, specify additional libraries,
library directories or other compiler options. library directories or other compiler options.
@@ -158,8 +129,8 @@
standard headers). If it is a problem with OpenSSL itself, please standard headers). If it is a problem with OpenSSL itself, please
report the problem to <openssl-bugs@openssl.org> (note that your report the problem to <openssl-bugs@openssl.org> (note that your
message will be recorded in the request tracker publicly readable message will be recorded in the request tracker publicly readable
via http://www.openssl.org/support/rt2.html and will be forwarded to a via http://www.openssl.org/rt2.html and will be forwarded to a public
public mailing list). Include the output of "make report" in your message. mailing list). Include the output of "make report" in your message.
Please check out the request tracker. Maybe the bug was already Please check out the request tracker. Maybe the bug was already
reported or has already been fixed. reported or has already been fixed.
@@ -176,11 +147,11 @@
If a test fails, look at the output. There may be reasons for If a test fails, look at the output. There may be reasons for
the failure that isn't a problem in OpenSSL itself (like a missing the failure that isn't a problem in OpenSSL itself (like a missing
or malfunctioning bc). If it is a problem with OpenSSL itself, or malfunctioning bc). If it is a problem with OpenSSL itself,
try removing any compiler optimization flags from the CFLAG line try removing any compiler optimization flags from the CFLAGS line
in Makefile.ssl and run "make clean; make". Please send a bug in Makefile.ssl and run "make clean; make". Please send a bug
report to <openssl-bugs@openssl.org>, including the output of report to <openssl-bugs@openssl.org>, including the output of
"make report" in order to be added to the request tracker at "make report" in order to be added to the request tracker at
http://www.openssl.org/support/rt2.html. http://www.openssl.org/rt2.html.
4. If everything tests ok, install OpenSSL with 4. If everything tests ok, install OpenSSL with
@@ -302,10 +273,10 @@
Note on shared libraries Note on shared libraries
------------------------ ------------------------
Shared libraries have certain caveats. Binary backward compatibility Shared library is currently an experimental feature. The only reason to
can't be guaranteed before OpenSSL version 1.0. The only reason to have them would be to conserve memory on systems where several program
use them would be to conserve memory on systems where several programs are using OpenSSL. Binary backward compatibility can't be guaranteed
are using OpenSSL. before OpenSSL version 1.0.
For some systems, the OpenSSL Configure script knows what is needed to For some systems, the OpenSSL Configure script knows what is needed to
build shared libraries for libcrypto and libssl. On these systems, build shared libraries for libcrypto and libssl. On these systems,
@@ -326,25 +297,3 @@
to install additional support software to obtain random seed. to install additional support software to obtain random seed.
Please check out the manual pages for RAND_add(), RAND_bytes(), RAND_egd(), Please check out the manual pages for RAND_add(), RAND_bytes(), RAND_egd(),
and the FAQ for more information. and the FAQ for more information.
Note on support for multiple builds
-----------------------------------
OpenSSL is usually built in its source tree. Unfortunately, this doesn't
support building for multiple platforms from the same source tree very well.
It is however possible to build in a separate tree through the use of lots
of symbolic links, which should be prepared like this:
mkdir -p objtree/"`uname -s`-`uname -r`-`uname -m`"
cd objtree/"`uname -s`-`uname -r`-`uname -m`"
(cd $OPENSSL_SOURCE; find . -type f) | while read F; do
mkdir -p `dirname $F`
rm -f $F; ln -s $OPENSSL_SOURCE/$F $F
echo $F '->' $OPENSSL_SOURCE/$F
done
make -f Makefile.org clean
OPENSSL_SOURCE is an environment variable that contains the absolute (this
is important!) path to the OpenSSL source tree.
Also, operations like 'make update' should still be made in the source tree.

View File

@@ -1,47 +0,0 @@
INSTALLATION ON THE DOS PLATFORM WITH DJGPP
-------------------------------------------
OpenSSL has been ported to DJGPP, a Unix look-alike 32-bit run-time
environment for 16-bit DOS, but only with long filename support.
If you wish to compile on native DOS with 8+3 filenames, you will
have to tweak the installation yourself, including renaming files
with illegal or duplicate names.
You should have a full DJGPP environment installed, including the
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 or
directly at "http://www.delorie.com/pub/djgpp". For help on which
files to download, see the DJGPP "ZIP PICKER" page at
"http://www.delorie.com/djgpp/zip-picker.html". 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 DJGPP by
running "./Configure" with appropriate arguments:
./Configure no-threads --prefix=/dev/env/DJDIR DJGPP
And finally fire up "make". You may run out of DPMI selectors when
running in a DOS box under Windows. If so, just close the BASH
shell, go back to Windows, and restart BASH. Then run "make" again.
RUN-TIME CAVEAT LECTOR
--------------
Quoting FAQ:
"Cryptographic software needs a source of unpredictable data to work
correctly. Many open source operating systems provide a "randomness
device" (/dev/urandom or /dev/random) that serves this purpose."
As of version 0.9.7f DJGPP port checks upon /dev/urandom$ for a 3rd
party "randomness" DOS driver. One such driver, NOISE.SYS, can be
obtained from "http://www.rahul.net/dkaufman/index.html".

View File

@@ -32,17 +32,17 @@ Installation procedure:
to 42, change appropriately. to 42, change appropriately.
(**) If you use SUNtar, then it might have already unbinhexed the files (**) If you use SUNtar, then it might have already unbinhexed the files
in question. in question.
(***) The project file was saved with CW Pro 5.3. If you have an earlier (***) The project file was saved with CW Pro 5.3. If you have earlier
version and it refuses to open it, then download version and it refuses to open it, then download
http://www.openssl.org/~appro/OpenSSL.mcp.xml and import it http://www.openssl.org/~appro/OpenSSL.mcp.xml and import it
overwriting the original OpenSSL.mcp. overwriting the original OpenSSL.mcp.
(****) Other targets are works in progress. If you feel like giving 'em a (****) Other targets are work in progress. If you feel like giving 'em a
shot, then you should know that OpenSSL* and Lib* targets are shot, then you should know that OpenSSL* and Lib* targets are
supposed to be built with the GUSI, MacOS library which mimics supposed to be built with the GUSI, MacOS library which mimics
BSD sockets and some other POSIX APIs. The GUSI distribution is BSD sockets and some other POSIX APIs. The GUSI distribution is
expected to be found in the same directory as the openssl source tree, expected to be found in the same directory as openssl source tree,
i.e., in the parent directory to the one where this very file, i.e. in the parent directory to the one where this very file,
namely INSTALL.MacOS, resides. For more information about GUSI, see namely INSTALL.MacOS. For more information about GUSI, see
http://www.iis.ee.ethz.ch/~neeri/macintosh/gusi-qa.html http://www.iis.ee.ethz.ch/~neeri/macintosh/gusi-qa.html
Finally some essential comments from our generous contributor:-) Finally some essential comments from our generous contributor:-)

View File

@@ -1,444 +0,0 @@
INSTALLATION ON THE NETWARE PLATFORM
------------------------------------
Notes about building OpenSSL for NetWare.
BUILD PLATFORM:
---------------
The build scripts (batch files, perl scripts, etc) have been developed and
tested on W2K. The scripts should run fine on other Windows
platforms (NT, Win9x, WinXP) but they haven't been tested. They may require
some modifications.
Supported NetWare Platforms - NetWare 5.x, NetWare 6.x:
------------------------------------------
OpenSSL uses the WinSock interfaces introduced in NetWare 5. Therefore,
previous versions of NetWare, 4.x and 3.x, are not supported.
On NetWare there are two c-runtime libraries. There is the legacy CLIB
interfaces and the newer LibC interfaces. Being ANSI-C libraries, the
functionality in CLIB and LibC is similar but the LibC interfaces are built
using Novell Kernal Services (NKS) which is designed to leverage
multi-processor environments.
The NetWare port of OpenSSL can configured to build using CLIB or LibC. The
CLIB build was developed and tested using NetWare 5.0 sp6.0a. The LibC
build was developed and tested using the NetWare 6.0 FCS.
The necessary LibC functionality ships with NetWare 6. However, earlier
NetWare 5.x versions will require updates in order to run the OpenSSL LibC
build.
As of June 2005, the LibC build can be configured to use BSD sockets instead
of WinSock sockets. Call Configure (usually through netware\build.bat) using
a target of "netware-libc-bsdsock" instead of "netware-libc".
REQUIRED TOOLS:
---------------
Based upon the configuration and build options used, some or all of the
following tools may be required:
* Perl for Win32 - required (http://www.activestate.com/ActivePerl)
Used to run the various perl scripts on the build platform.
* Perl 5.8.0 for NetWare v3.20 (or later) - required
(http://developer.novell.com) Used to run the test script on NetWare
after building.
* Metrowerks CodeWarrior PDK 2.1 (or later) for NetWare - required:
Provides command line tools used for building.
Tools:
mwccnlm.exe - C/C++ Compiler for NetWare
mwldnlm.exe - Linker for NetWare
mwasmnlm.exe - x86 assembler for NetWare (if using assembly option)
* Assemblers - optional:
If you intend to build using the assembly options you will need an
assembler. Work has been completed to support two assemblers, Metrowerks
and NASM. However, during development, a bug was found in the Metrowerks
assembler which generates incorrect code. Until this problem is fixed,
the Metrowerks assembler cannot be used.
mwasmnlm.exe - Metrowerks x86 assembler - part of CodeWarrior tools.
(version 2.2 Built Aug 23, 1999 - not useable due to code
generation bug)
nasmw.exe - Netwide Assembler NASM
version 0.98 was used in development and testing
* Make Tool - required:
In order to build you will need a make tool. Two make tools are
supported, GNU make (gmake.exe) or Microsoft nmake.exe.
gmake.exe - GNU make for Windows (version 3.75 used for development)
http://www.gnu.org/software/make/make.html
nmake.exe - Microsoft make (Version 6.00.8168.0 used for development)
* Novell Developer Kit (NDK) - required: (http://developer.novell.com)
CLIB - BUILDS:
WinSock2 Developer Components for NetWare:
For initial development, the October 27, 2000 version was used.
However, future versions should also work.
NOTE: The WinSock2 components include headers & import files for
NetWare, but you will also need the winsock2.h and supporting
headers (pshpack4.h, poppack.h, qos.h) delivered in the
Microsoft SDK. Note: The winsock2.h support headers may change
with various versions of winsock2.h. Check the dependencies
section on the NDK WinSock2 download page for the latest
information on dependencies. These components are unsupported by
Novell. They are provided as a courtesy, but it is strongly
suggested that all development be done using LIBC, not CLIB.
As of June 2005, the WinSock2 components are available at:
http://forgeftp.novell.com//ws2comp/
NLM and NetWare libraries for C (including CLIB and XPlat):
If you are going to build a CLIB version of OpenSSL, you will
need the CLIB headers and imports. The March, 2001 NDK release or
later is recommended.
Earlier versions should work but haven't been tested. In recent
versions the import files have been consolidated and function
names moved. This means you may run into link problems
(undefined symbols) when using earlier versions. The functions
are available in earlier versions, but you will have to modifiy
the make files to include additional import files (see
openssl\util\pl\netware.pl).
LIBC - BUILDS:
Libraries for C (LibC) - LibC headers and import files
If you are going to build a LibC version of OpenSSL, you will
need the LibC headers and imports. The March 14, 2002 NDK release or
later is required.
NOTE: The LibC SDK includes the necessary WinSock2 support. It
It is not necessary to download the WinSock2 Developer when building
for LibC. The LibC SDK also includes the appropriate BSD socket support
if configuring to use BSD sockets.
BUILDING:
---------
Before building, you will need to set a few environment variables. You can
set them manually or you can modify the "netware\set_env.bat" file.
The set_env.bat file is a template you can use to set up the path
and environment variables you will need to build. Modify the
various lines to point to YOUR tools and run set_env.bat.
netware\set_env.bat [target]
target - "netware-clib" - CLib NetWare build
- "netware-libc" - LibC NetWare build
If you don't use set_env.bat, you will need to set up the following
environment variables:
path - Set path to point to the tools you will use.
MWCIncludes - The location of the NDK include files.
CLIB ex: set MWCIncludes=c:\ndk\nwsdk\include\nlm
LibC ex: set MWCIncludes=c:\ndk\libc\include
PRELUDE - The absolute path of the prelude object to link with. For
a CLIB build it is recommended you use the "clibpre.o" files shipped
with the Metrowerks PDK for NetWare. For a LibC build you should
use the "libcpre.o" file delivered with the LibC NDK components.
CLIB ex: set PRELUDE=c:\ndk\nwsdk\imports\clibpre.o
LibC ex: set PRELUDE=c:\ndk\libc\imports\libcpre.o
IMPORTS - The locaton of the NDK import files.
CLIB ex: set IMPORTS=c:\ndk\nwsdk\imports
LibC ex: set IMPORTS=c:\ndk\libc\imports
In order to build, you need to run the Perl scripts to configure the build
process and generate a make file. There is a batch file,
"netware\build.bat", to automate the process.
Build.bat runs the build configuration scripts and generates a make file.
If an assembly option is specified, it also runs the scripts to generate
the assembly code. Always run build.bat from the "openssl" directory.
netware\build [target] [debug opts] [assembly opts] [configure opts]
target - "netware-clib" - CLib NetWare build (WinSock Sockets)
- "netware-libc" - LibC NetWare build (WinSock Sockets)
- "netware-libc-bsdsock" - LibC NetWare build (BSD Sockets)
debug opts - "debug" - build debug
assembly opts - "nw-mwasm" - use Metrowerks assembler
"nw-nasm" - use NASM assembler
"no-asm" - don't use assembly
configure opts- all unrecognized arguments are passed to the
perl configure script
examples:
CLIB build, debug, without assembly:
netware\build.bat netware-clib debug no-asm
LibC build, non-debug, using NASM assembly:
netware\build.bat netware-libc nw-nasm
LibC build, BSD sockets, non-debug, without assembly:
netware\build.bat netware-libc-bsdsock no-asm
Running build.bat generates a make file to be processed by your make
tool (gmake or nmake):
CLIB ex: gmake -f netware\nlm_clib_dbg.mak
LibC ex: gmake -f netware\nlm_libc.mak
LibC ex: gmake -f netware\nlm_libc_bsdsock.mak
You can also run the build scripts manually if you do not want to use the
build.bat file. Run the following scripts in the "\openssl"
subdirectory (in the order listed below):
perl configure no-asm [other config opts] [netware-clib|netware-libc|netware-libc-bsdsock]
configures no assembly build for specified netware environment
(CLIB or LibC).
perl util\mkfiles.pl >MINFO
generates a listing of source files (used by mk1mf)
perl util\mk1mf.pl no-asm [other config opts] [netware-clib|netware-libc|netware-libc-bsdsock >netware\nlm.mak
generates the makefile for NetWare
gmake -f netware\nlm.mak
build with the make tool (nmake.exe also works)
NOTE: If you are building using the assembly option, you must also run the
various Perl scripts to generate the assembly files. See build.bat
for an example of running the various assembly scripts. You must use the
"no-asm" option to build without assembly. The configure and mk1mf scripts
also have various other options. See the scripts for more information.
The output from the build is placed in the following directories:
CLIB Debug build:
out_nw_clib.dbg - static libs & test nlm(s)
tmp_nw_clib.dbg - temporary build files
outinc_nw_clib - necessary include files
CLIB Non-debug build:
out_nw_clib - static libs & test nlm(s)
tmp_nw_clib - temporary build files
outinc_nw_clib - necesary include files
LibC Debug build:
out_nw_libc.dbg - static libs & test nlm(s)
tmp_nw_libc.dbg - temporary build files
outinc_nw_libc - necessary include files
LibC Non-debug build:
out_nw_libc - static libs & test nlm(s)
tmp_nw_libc - temporary build files
outinc_nw_libc - necesary include files
TESTING:
--------
The build process creates the OpenSSL static libs ( crypto.lib, ssl.lib,
rsaglue.lib ) and several test programs. You should copy the test programs
to your NetWare server and run the tests.
The batch file "netware\cpy_tests.bat" will copy all the necessary files
to your server for testing. In order to run the batch file, you need a
drive mapped to your target server. It will create an "OpenSSL" directory
on the drive and copy the test files to it. CAUTION: If a directory with the
name of "OpenSSL" already exists, it will be deleted.
To run cpy_tests.bat:
netware\cpy_tests [output directory] [NetWare drive]
output directory - "out_nw_clib.dbg", "out_nw_libc", etc.
NetWare drive - drive letter of mapped drive
CLIB ex: netware\cpy_tests out_nw_clib m:
LibC ex: netware\cpy_tests out_nw_libc m:
The Perl script, "do_tests.pl", in the "OpenSSL" directory on the server
should be used to execute the tests. Before running the script, make sure
your SEARCH PATH includes the "OpenSSL" directory. For example, if you
copied the files to the "sys:" volume you use the command:
SEARCH ADD SYS:\OPENSSL
To run do_tests.pl type (at the console prompt):
perl \openssl\do_tests.pl [options]
options:
-p - pause after executing each test
The do_tests.pl script generates a log file "\openssl\test_out\tests.log"
which should be reviewed for errors. Any errors will be denoted by the word
"ERROR" in the log.
DEVELOPING WITH THE OPENSSL SDK:
--------------------------------
Now that everything is built and tested, you are ready to use the OpenSSL
libraries in your development.
There is no real installation procedure, just copy the static libs and
headers to your build location. The libs (crypto.lib & ssl.lib) are
located in the appropriate "out_nw_XXXX" directory
(out_nw_clib, out_nw_libc, etc).
The headers are located in the appropriate "outinc_nw_XXX" directory
(outinc_nw_clib, outinc_nw_libc).
One suggestion is to create the following directory
structure for the OpenSSL SDK:
\openssl
|- bin
| |- openssl.nlm
| |- (other tests you want)
|
|- lib
| | - crypto.lib
| | - ssl.lib
|
|- include
| | - openssl
| | | - (all the headers in "outinc_nw\openssl")
The program "openssl.nlm" can be very useful. It has dozens of
options and you may want to keep it handy for debugging, testing, etc.
When building your apps using OpenSSL, define "NETWARE". It is needed by
some of the OpenSSL headers. One way to do this is with a compile option,
for example "-DNETWARE".
NOTES:
------
Resource leaks in Tests
------------------------
Some OpenSSL tests do not clean up resources and NetWare reports
the resource leaks when the tests unload. If this really bugs you,
you can stop the messages by setting the developer option off at the console
prompt (set developer option = off). Or better yet, fix the tests to
clean up the resources!
Multi-threaded Development
---------------------------
The NetWare version of OpenSSL is thread-safe however, multi-threaded
applications must provide the necessary locking function callbacks. This
is described in doc\threads.doc. The file "openssl\crypto\threads\mttest.c"
is a multi-threaded test program and demonstrates the locking functions.
What is openssl2.nlm?
---------------------
The openssl program has numerous options and can be used for many different
things. Many of the options operate in an interactive mode requiring the
user to enter data. Because of this, a default screen is created for the
program. However, when running the test script it is not desirable to
have a seperate screen. Therefore, the build also creates openssl2.nlm.
Openssl2.nlm is functionally identical but uses the console screen.
Openssl2 can be used when a non-interactive mode is desired.
NOTE: There are may other possibilities (command line options, etc)
which could have been used to address the screen issue. The openssl2.nlm
option was chosen because it impacted only the build not the code.
Why only static libraries?
--------------------------
Globals, globals, and more globals. The OpenSSL code uses many global
variables that are allocated and initialized when used for the first time.
On NetWare, most applications (at least historically) run in the kernel.
When running in the kernel, there is one instance of global variables.
For regular application type NLM(s) this isn't a problem because they are
the only ones using the globals. However, for a library NLM (an NLM which
exposes functions and has no threads of execution), the globals cause
problems. Applications could inadvertently step on each other if they
change some globals. Even worse, the first application that triggers a
global to be allocated and initialized has the allocated memory charged to
itself. Now when that application unloads, NetWare will clean up all the
applicaton's memory. The global pointer variables inside OpenSSL now
point to freed memory. An abend waiting to happen!
To work correctly in the kernel, library NLM(s) that use globals need to
provide a set of globals (instance data) for each application. Another
option is to require the library only be loaded in a protected address
space along with the application using it.
Modifying the OpenSSL code to provide a set of globals (instance data) for
each application isn't technically difficult, but due to the large number
globals it would require substantial code changes and it wasn't done. Hence,
the build currently only builds static libraries which are then linked
into each application.
NOTE: If you are building a library NLM that uses the OpenSSL static
libraries, you will still have to deal with the global variable issue.
This is because when you link in the OpenSSL code you bring in all the
globals. One possible solution for the global pointer variables is to
register memory functions with OpenSSL which allocate memory and charge it
to your library NLM (see the function CRYPTO_set_mem_functions). However,
be aware that now all memory allocated by OpenSSL is charged to your NLM.
CodeWarrior Tools and W2K
---------------------------
There have been problems reported with the CodeWarrior Linker
(mwldnlm.exe) in the PDK 2.1 for NetWare when running on Windows 2000. The
problems cause the link step to fail. The only work around is to obtain an
updated linker from Metrowerks. It is expected Metrowerks will release
PDK 3.0 (in beta testing at this time - May, 2001) in the near future which
will fix these problems.
Makefile "vclean"
------------------
The generated makefile has a "vclean" target which cleans up the build
directories. If you have been building successfully and suddenly
experience problems, use "vclean" (gmake -f netware\nlm.mak vclean) and retry.
"Undefined Symbol" Linker errors
--------------------------------
There have been linker errors reported when doing a CLIB build. The problems
occur because some versions of the CLIB SDK import files inadvertently
left out some symbols. One symbol in particular is "_lrotl". The missing
functions are actually delivered in the binaries, but they were left out of
the import files. The issues should be fixed in the September 2001 release
of the NDK. If you experience the problems you can temporarily
work around it by manually adding the missing symbols to your version of
"clib.imp".

View File

@@ -1,31 +0,0 @@
Installation on OS/2
--------------------
You need to have the following tools installed:
* EMX GCC
* PERL
* GNU make
To build the makefile, run
> os2\os2-emx
This will configure OpenSSL and create OS2-EMX.mak which you then use to
build the OpenSSL libraries & programs by running
> make -f os2-emx.mak
If that finishes successfully you will find the libraries and programs in the
"out" directory.
Alternatively, you can make a dynamic build that puts the library code into
crypto.dll and ssl.dll by running
> make -f os2-emx-dll.mak
This will build the above mentioned dlls and a matching pair of import
libraries in the "out_dll" directory along with the set of test programs
and the openssl application.

View File

@@ -33,11 +33,11 @@ Checking the distribution:
========================== ==========================
There have been reports of places where the distribution didn't quite get There have been reports of places where the distribution didn't quite get
through, for example if you've copied the tree from a NFS-mounted Unix through, for example if you've copied the tree from a NFS-mounted unix
mount point. mount point.
The easiest way to check if everything got through as it should is to check The easiest way to check if everything got through as it should is to check
for one of the following files: for oen of the following files:
[.CRYPTO]OPENSSLCONF.H_IN [.CRYPTO]OPENSSLCONF.H_IN
[.CRYPTO]OPENSSLCONF_H.IN [.CRYPTO]OPENSSLCONF_H.IN
@@ -69,7 +69,7 @@ for a command procedure name xxx-LIB.COM (in the library directories)
or MAKExxx.COM (in the program directories) and read the comments at or MAKExxx.COM (in the program directories) and read the comments at
the top to understand how to use them. However, if you want to the top to understand how to use them. However, if you want to
compile all you can get, the simplest is to use MAKEVMS.COM in the top compile all you can get, the simplest is to use MAKEVMS.COM in the top
directory. The syntax is the following: directory. The syntax is trhe following:
@MAKEVMS <option> <rsaref-p> <debug-p> [<compiler>] @MAKEVMS <option> <rsaref-p> <debug-p> [<compiler>]
@@ -79,7 +79,7 @@ directory. The syntax is the following:
CONFIG Just build the "[.CRYPTO]OPENSSLCONF.H" file. CONFIG Just build the "[.CRYPTO]OPENSSLCONF.H" file.
BUILDINF Just build the "[.INCLUDE]BUILDINF.H" file. BUILDINF Just build the "[.INCLUDE]BUILDINF.H" file.
SOFTLINKS Just copies some files, to simulate Unix soft links. SOFTLINKS Just copies some files, to simulate Unix soft links.
BUILDALL Same as ALL, except CONFIG, BUILDINF and SOFTLINKS aren't done. BUILDALL Same as ALL, except CONFIG, BUILDINF and SOFTILNKS aren't done.
RSAREF Just build the "[.xxx.EXE.RSAREF]LIBRSAGLUE.OLB" library. RSAREF Just build the "[.xxx.EXE.RSAREF]LIBRSAGLUE.OLB" library.
CRYPTO Just build the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library. CRYPTO Just build the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library.
SSL Just build the "[.xxx.EXE.SSL]LIBSSL.OLB" library. SSL Just build the "[.xxx.EXE.SSL]LIBSSL.OLB" library.
@@ -92,7 +92,7 @@ directory. The syntax is the following:
RSAREF compile using the RSAREF Library RSAREF compile using the RSAREF Library
NORSAREF compile without using RSAREF NORSAREF compile without using RSAREF
Note 0: The RSAREF library IS NO LONGER NEEDED. The RSA patent Note 0: The RASREF library IS NO LONGER NEEDED. The RSA patent
expires September 20, 2000, and RSA Security chose to make expires September 20, 2000, and RSA Security chose to make
the algorithm public domain two weeks before that. the algorithm public domain two weeks before that.
@@ -264,7 +264,7 @@ following before you start compiling:
The USER_CCDISABLEWARNINGS is there because otherwise, DEC C will complain The USER_CCDISABLEWARNINGS is there because otherwise, DEC C will complain
that those macros have been changed. that those macros have been changed.
Note: Currently, this is only useful for library compilation. The Note: Currently, this is only usefull for library compilation. The
programs will still be linked with the current version of the programs will still be linked with the current version of the
C library shareable image, and will thus complain if they are C library shareable image, and will thus complain if they are
faced with an older version of the same C library shareable image. faced with an older version of the same C library shareable image.

View File

@@ -2,29 +2,19 @@
INSTALLATION ON THE WIN32 PLATFORM INSTALLATION ON THE WIN32 PLATFORM
---------------------------------- ----------------------------------
[Instructions for building for Windows CE can be found in INSTALL.WCE]
[Instructions for building for Win64 can be found in INSTALL.W64]
Heres a few comments about building OpenSSL in Windows environments. Most Heres a few comments about building OpenSSL in Windows environments. Most
of this is tested on Win32 but it may also work in Win 3.1 with some of this is tested on Win32 but it may also work in Win 3.1 with some
modification. modification.
You need Perl for Win32. Unless you will build on Cygwin, you will need You need Perl for Win32. Unless you will build on Cygwin, you will need
ActiveState Perl, available from http://www.activestate.com/ActivePerl. ActiveState Perl, available from http://www.activestate.com/ActivePerl.
For Cygwin users, there's more info in the Cygwin section.
and one of the following C compilers: and one of the following C compilers:
* Visual C++ * Visual C++
* Borland C * Borland C
* GNU C (Cygwin or MinGW) * GNU C (Mingw32 or Cygwin)
If you are compiling from a tarball or a CVS snapshot then the Win32 files
may well be not up to date. This may mean that some "tweaking" is required to
get it all to work. See the trouble shooting section later on for if (when?)
it goes wrong.
Visual C++
----------
If you want to compile in the assembly language routines with Visual C++ then If you want to compile in the assembly language routines with Visual C++ then
you will need an assembler. This is worth doing because it will result in you will need an assembler. This is worth doing because it will result in
@@ -34,24 +24,29 @@
* Microsoft MASM (aka "ml") * Microsoft MASM (aka "ml")
* Free Netwide Assembler NASM. * Free Netwide Assembler NASM.
MASM is distributed with most versions of VC++. For the versions where it is MASM was at one point distributed with VC++. It is now distributed with some
not included in VC++, it is also distributed with some Microsoft DDKs, for Microsoft DDKs, for example the Windows NT 4.0 DDK and the Windows 98 DDK. If
example the Windows NT 4.0 DDK and the Windows 98 DDK. If you do not have you do not have either of these DDKs then you can just download the binaries
either of these DDKs then you can just download the binaries for the Windows for the Windows 98 DDK and extract and rename the two files XXXXXml.exe and
98 DDK and extract and rename the two files XXXXXml.exe and XXXXXml.err, to XXXXXml.err, to ml.exe and ml.err and install somewhere on your PATH. Both
ml.exe and ml.err and install somewhere on your PATH. Both DDKs can be DDKs can be downloaded from the Microsoft developers site www.msdn.com.
downloaded from the Microsoft developers site www.msdn.com.
NASM is freely available. Version 0.98 was used during testing: other versions NASM is freely available. Version 0.98 was used during testing: other versions
may also work. It is available from many places, see for example: may also work. It is available from many places, see for example:
http://www.kernel.org/pub/software/devel/nasm/binaries/win32/ http://www.kernel.org/pub/software/devel/nasm/binaries/win32/
The NASM binary nasmw.exe needs to be installed anywhere on your PATH. The NASM binary nasmw.exe needs to be installed anywhere on your PATH.
If you are compiling from a tarball or a CVS snapshot then the Win32 files
may well be not up to date. This may mean that some "tweaking" is required to
get it all to work. See the trouble shooting section later on for if (when?)
it goes wrong.
Visual C++
----------
Firstly you should run Configure: Firstly you should run Configure:
> perl Configure VC-WIN32 --prefix=c:/some/openssl/dir > perl Configure VC-WIN32
Where the prefix argument specifies where OpenSSL will be installed to.
Next you need to build the Makefiles and optionally the assembly language Next you need to build the Makefiles and optionally the assembly language
files: files:
@@ -79,12 +74,8 @@ Where the prefix argument specifies where OpenSSL will be installed to.
If all is well it should compile and you will have some DLLs and executables If all is well it should compile and you will have some DLLs and executables
in out32dll. If you want to try the tests then do: in out32dll. If you want to try the tests then do:
> nmake -f ms\ntdll.mak test > cd out32dll
> ..\ms\test
To install OpenSSL to the specified location do:
> nmake -f ms\ntdll.mak install
Tweaks: Tweaks:
@@ -94,12 +85,6 @@ To install OpenSSL to the specified location do:
compiled in. Note that mk1mf.pl expects the platform to be the last argument compiled in. Note that mk1mf.pl expects the platform to be the last argument
on the command line, so 'debug' must appear before that, as all other options. on the command line, so 'debug' must appear before that, as all other options.
By default in 0.9.8 OpenSSL will compile builtin ENGINES into the libeay32.dll
shared library. If you specify the "no-static-engine" option on the command
line to Configure the shared library build (ms\ntdll.mak) will compile the
engines as separate DLLs.
The default Win32 environment is to leave out any Windows NT specific The default Win32 environment is to leave out any Windows NT specific
features. features.
@@ -110,8 +95,6 @@ To install OpenSSL to the specified location do:
You can also build a static version of the library using the Makefile You can also build a static version of the library using the Makefile
ms\nt.mak ms\nt.mak
Borland C++ builder 5 Borland C++ builder 5
--------------------- ---------------------
@@ -134,72 +117,18 @@ To install OpenSSL to the specified location do:
* Run make: * Run make:
> make -f bcb.mak > make -f bcb.mak
GNU C (Cygwin) GNU C (Mingw32)
-------------- ---------------
Cygwin provides a bash shell and GNU tools environment running To build OpenSSL, you need the Mingw32 package and GNU make.
on NT 4.0, Windows 9x, Windows ME, Windows 2000, and Windows XP.
Consequently, a make of OpenSSL with Cygwin is closer to a GNU
bash environment such as Linux than to other the other Win32
makes.
Cygwin implements a Posix/Unix runtime system (cygwin1.dll).
It is also possible to create Win32 binaries that only use the
Microsoft C runtime system (msvcrt.dll or crtdll.dll) using
MinGW. MinGW can be used in the Cygwin development environment
or in a standalone setup as described in the following section.
To build OpenSSL using Cygwin:
* Install Cygwin (see http://cygwin.com/)
* Install Perl and ensure it is in the path. Both Cygwin perl
(5.6.1-2 or newer) and ActivePerl work.
* Run the Cygwin bash shell
* $ tar zxvf openssl-x.x.x.tar.gz
$ cd openssl-x.x.x
To build the Cygwin version of OpenSSL:
$ ./config
[...]
$ make
[...]
$ make test
$ make install
This will create a default install in /usr/local/ssl.
To build the MinGW version (native Windows) in Cygwin:
$ ./Configure mingw
[...]
$ make
[...]
$ make test
$ make install
Cygwin Notes:
"make test" and normal file operations may fail in directories
mounted as text (i.e. mount -t c:\somewhere /home) due to Cygwin
stripping of carriage returns. To avoid this ensure that a binary
mount is used, e.g. mount -b c:\somewhere /home.
"bc" is not provided in older Cygwin distribution. This causes a
non-fatal error in "make test" but is otherwise harmless. If
desired and needed, GNU bc can be built with Cygwin without change.
GNU C (MinGW)
-------------
* Compiler installation: * Compiler installation:
MinGW is available from http://www.mingw.org. Run the installer and Mingw32 is available from <ftp://ftp.xraylith.wisc.edu/pub/khan/
set the MinGW bin directory to the PATH in "System Properties" or gnu-win32/mingw32/gcc-2.95.2/gcc-2.95.2-msvcrt.exe>. GNU make is at
autoexec.bat. <ftp://agnes.dida.physik.uni-essen.de/home/janjaap/mingw32/binaries/
make-3.76.1.zip>. Install both of them in C:\egcs-1.1.2 and run
C:\egcs-1.1.2\mingw32.bat to set the PATH.
* Compile OpenSSL: * Compile OpenSSL:
@@ -221,6 +150,53 @@ To install OpenSSL to the specified location do:
> cd out > cd out
> ..\ms\test > ..\ms\test
GNU C (Cygwin)
--------------
Cygwin provides a bash shell and GNU tools environment running on
NT 4.0, Windows 9x and Windows 2000. Consequently, a make of OpenSSL
with Cygwin is closer to a GNU bash environment such as Linux rather
than other W32 makes that are based on a single makefile approach.
Cygwin implements Posix/Unix calls through cygwin1.dll, and is
contrasted to Mingw32 which links dynamically to msvcrt.dll or
crtdll.dll.
To build OpenSSL using Cygwin:
* Install Cygwin (see http://sourceware.cygnus.com/cygwin)
* Install Perl and ensure it is in the path (recent Cygwin perl
(version 5.6.1-2 of the latter has been reported to work) or
ActivePerl)
* Run the Cygwin bash shell
* $ tar zxvf openssl-x.x.x.tar.gz
$ cd openssl-x.x.x
$ ./config
[...]
$ make
[...]
$ make test
$ make install
This will create a default install in /usr/local/ssl.
Cygwin Notes:
"make test" and normal file operations may fail in directories
mounted as text (i.e. mount -t c:\somewhere /home) due to Cygwin
stripping of carriage returns. To avoid this ensure that a binary
mount is used, e.g. mount -b c:\somewhere /home.
As of version 1.1.1 Cygwin is relatively unstable in its handling
of cr/lf issues. These make procedures succeeded with versions 1.1 and
the snapshot 20000524 (Slow!).
"bc" is not provided in the Cygwin distribution. This causes a
non-fatal error in "make test" but is otherwise harmless. If
desired, GNU bc can be built with Cygwin without change.
Installation Installation
------------ ------------
@@ -240,7 +216,7 @@ To install OpenSSL to the specified location do:
$ md c:\openssl\lib $ md c:\openssl\lib
$ md c:\openssl\include $ md c:\openssl\include
$ md c:\openssl\include\openssl $ md c:\openssl\include\openssl
$ copy /b inc32\openssl\* c:\openssl\include\openssl $ copy /b inc32\* c:\openssl\include\openssl
$ copy /b out32dll\ssleay32.lib c:\openssl\lib $ copy /b out32dll\ssleay32.lib c:\openssl\lib
$ copy /b out32dll\libeay32.lib c:\openssl\lib $ copy /b out32dll\libeay32.lib c:\openssl\lib
$ copy /b out32dll\ssleay32.dll c:\openssl\bin $ copy /b out32dll\ssleay32.dll c:\openssl\bin
@@ -299,23 +275,5 @@ To install OpenSSL to the specified location do:
malloc(), free() and realloc() as the application. However there are many malloc(), free() and realloc() as the application. However there are many
standard library functions used by OpenSSL that call malloc() internally standard library functions used by OpenSSL that call malloc() internally
(e.g. fopen()), and OpenSSL cannot change these; so in general you cannot (e.g. fopen()), and OpenSSL cannot change these; so in general you cannot
rely on CRYPTO_malloc_init() solving your problem, and you should rely on CYRPTO_malloc_init() solving your problem, and you should
consistently use the multithreaded library. consistently use the multithreaded library.
Linking your application
------------------------
If you link with static OpenSSL libraries [those built with ms/nt.mak],
then you're expected to additionally link your application with
WSOCK32.LIB, ADVAPI32.LIB, GDI32.LIB and USER32.LIB. Those developing
non-interactive service applications might feel concerned about linking
with latter two, as they are justly associated with interactive desktop,
which is not available to service processes. The toolkit is designed
to detect in which context it's currently executed, GUI, console app
or service, and act accordingly, namely whether or not to actually make
GUI calls.
If you link with OpenSSL .DLLs, then you're expected to include into
your application code small "shim" snippet, which provides glue between
OpenSSL BIO layer and your compiler run-time. Look up OPENSSL_Applink
reference page for further details.

View File

@@ -1,66 +0,0 @@
INSTALLATION ON THE WIN64 PLATFORM
----------------------------------
Caveat lector
-------------
As of moment of this writing Win64 support is classified "initial"
for the following reasons.
- No assembler modules are engaged upon initial 0.9.8 release.
- API might change within 0.9.8 life-span, *but* in a manner which
doesn't break backward binary compatibility. Or in other words,
application programs compiled with initial 0.9.8 headers will
be expected to work with future minor release .DLL without need
to re-compile, even if future minor release features modified API.
- Above mentioned API modifications have everything to do with
elimination of a number of limitations, which are normally
considered inherent to 32-bit platforms. Which in turn is why they
are treated as limitations on 64-bit platform such as Win64:-)
The current list comprises [but not necessarily limited to]:
- null-terminated strings may not be longer than 2G-1 bytes,
longer strings are treated as zero-length;
- dynamically and *internally* allocated chunks can't be larger
than 2G-1 bytes;
- inability to encrypt/decrypt chunks of data larger than 4GB
[it's possibly to *hash* chunks of arbitrary size through];
Neither of these is actually big deal and hardly encountered
in real-life applications.
Compiling procedure
-------------------
You will need Perl. You can run under Cygwin or you can download
ActiveState Perl from http://www.activestate.com/ActivePerl.
You will need Microsoft Platform SDK, available for download at
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/. As per
April 2005 Platform SDK is equipped with Win64 compilers, as well
as assemblers, but it might change in the future.
To build for Win64/x64:
> perl Configure VC-WIN64A
> ms\do_win64a
> nmake -f ms\ntdll.mak
> cd out32dll
> ..\ms\test
To build for Win64/IA64:
> perl Configure VC-WIN64I
> ms\do_win64i
> nmake -f ms\ntdll.mak
> cd out32dll
> ..\ms\test
Naturally test-suite itself has to be executed on the target platform.
Installation
------------
TBD, for now see INSTALL.W32.

View File

@@ -1,74 +0,0 @@
INSTALLATION FOR THE WINDOWS CE PLATFORM
----------------------------------------
Building OpenSSL for Windows CE requires the following external tools:
* Microsoft eMbedded Visual C++ 3.0
* wcecompat compatibility library (www.essemer.com.au)
* Optionally ceutils for running automated tests (www.essemer.com.au)
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 and therefore it's
appropriate to check http://www.essemer.com.au/windowsce/ for updates in
case of compilation problems. As for the moment of this writing version
1.1 is available and actually required for WCE 4.2 and newer platforms.
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
CRT to a level that is more compatible with ANSI C. wcecompat goes further
and provides low-level IO and stream IO support for stdin/stdout/stderr
(which Windows CE does not provide). This IO functionality is not needed
by the OpenSSL library itself but is used for the tests and openssl.exe.
More information is available at www.essemer.com.au.
Building
--------
Setup the eMbedded Visual C++ environment. There are batch files for doing
this installed with eVC++. For an ARM processor, for example, execute:
> "C:\Program Files\Microsoft eMbedded Tools\EVC\WCE300\BIN\WCEARM.BAT"
Next indicate where wcecompat is located:
> set WCECOMPAT=C:\wcecompat
Next you should run Configure:
> perl Configure VC-CE
Next you need to build the Makefiles:
> ms\do_ms
If you get errors about things not having numbers assigned then check the
troubleshooting section in INSTALL.W32: you probably won't be able to compile
it as it stands.
Then from the VC++ environment at a prompt do:
- to build static libraries:
> nmake -f ms\ce.mak
- or to build DLLs:
> nmake -f ms\cedll.mak
If all is well it should compile and you will have some static libraries and
executables in out32, or some DLLs and executables in out32dll. If you want
to try the tests then make sure the ceutils are in the path and do:
> cd out32
> ..\ms\testce
This will copy each of the test programs to the Windows CE device and execute
them, displaying the output of the tests on this computer. The output should
look similar to the output produced by running the tests for a regular Windows
build.

View File

@@ -12,7 +12,7 @@
--------------- ---------------
/* ==================================================================== /* ====================================================================
* Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions

View File

@@ -2750,4 +2750,4 @@ void SkipWhiteSpace(char **ioSrcCharPtr,const Boolean inStopAtEOL)
} }
} }
} }
} }

View File

@@ -167,4 +167,4 @@ void ThrowErrorMessageException(void)
ThrowDescriptiveException(gErrorMessage); ThrowDescriptiveException(gErrorMessage);
} }
#endif #endif

View File

@@ -167,7 +167,7 @@ void main(void)
tempString[bytesRead] = '\0'; tempString[bytesRead] = '\0';
printf("%s", tempString); printf(tempString);
} }
printf("\n\n\n"); printf("\n\n\n");
@@ -201,7 +201,7 @@ EXITPOINT:
{ {
printf("An error occurred:\n"); printf("An error occurred:\n");
printf("%s",GetErrorMessage()); printf(GetErrorMessage());
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,609 +0,0 @@
#
# Helper makefile to link shared libraries in a portable way.
# This is much simpler than libtool, and hopefully not too error-prone.
#
# The following variables need to be set on the command line to build
# properly
# CC contains the current compiler. This one MUST be defined
CC=cc
CFLAGS=$(CFLAG)
# LDFLAGS contains flags to be used when temporary object files (when building
# shared libraries) are created, or when an application is linked.
# SHARED_LDFLAGS contains flags to be used when the shared library is created.
LDFLAGS=
SHARED_LDFLAGS=
# LIBNAME contains just the name of the library, without prefix ("lib"
# on Unix, "cyg" for certain forms under Cygwin...) or suffix (.a, .so,
# .dll, ...). This one MUST have a value when using this makefile to
# build shared libraries.
# For example, to build libfoo.so, you need to do the following:
#LIBNAME=foo
LIBNAME=
# APPNAME contains just the name of the application, without suffix (""
# on Unix, ".exe" on Windows, ...). This one MUST have a value when using
# this makefile to build applications.
# For example, to build foo, you need to do the following:
#APPNAME=foo
APPNAME=
# OBJECTS contains all the object files to link together into the application.
# This must contain at least one object file.
#OBJECTS=foo.o
OBJECTS=
# LIBEXTRAS contains extra modules to link together with the library.
# For example, if a second library, say libbar.a needs to be linked into
# libfoo.so, you need to do the following:
#LIBEXTRAS=libbar.a
# Note that this MUST be used when using the link_o targets, to hold the
# names of all object files that go into the target library.
LIBEXTRAS=
# LIBVERSION contains the current version of the library.
# For example, to build libfoo.so.1.2, you need to do the following:
#LIBVERSION=1.2
LIBVERSION=
# LIBCOMPATVERSIONS contains the compatibility versions (a list) of
# the library. They MUST be in decreasing order.
# For example, if libfoo.so.1.2.1 is backward compatible with libfoo.so.1.2
# and libfoo.so.1, you need to do the following:
#LIBCOMPATVERSIONS=1.2 1
# Note that on systems that use sonames, the last number will appear as
# part of it.
# It's also possible, for systems that support it (Tru64, for example),
# to add extra compatibility info with more precision, by adding a second
# list of versions, separated from the first with a semicolon, like this:
#LIBCOMPATVERSIONS=1.2 1;1.2.0 1.1.2 1.1.1 1.1.0 1.0.0
LIBCOMPATVERSIONS=
# LIBDEPS contains all the flags necessary to cover all necessary
# dependencies to other libraries.
LIBDEPS=
#------------------------------------------------------------------------------
# The rest is private to this makefile.
SET_X=:
#SET_X=set -x
top:
echo "Trying to use this makefile interactively? Don't."
CALC_VERSIONS= \
SHLIB_COMPAT=; SHLIB_SOVER=; \
if [ -n "$(LIBVERSION)$(LIBCOMPATVERSIONS)" ]; then \
prev=""; \
for v in `echo "$(LIBVERSION) $(LIBCOMPATVERSIONS)" | cut -d';' -f1`; do \
SHLIB_SOVER_NODOT=$$v; \
SHLIB_SOVER=.$$v; \
if [ -n "$$prev" ]; then \
SHLIB_COMPAT="$$SHLIB_COMPAT .$$prev"; \
fi; \
prev=$$v; \
done; \
fi
LINK_APP= \
( $(SET_X); \
LIBDEPS="$${LIBDEPS:-$(LIBDEPS)}"; \
LDCMD="$${LDCMD:-$(CC)}"; LDFLAGS="$${LDFLAGS:-$(CFLAGS)}"; \
LIBPATH=`for x in $$LIBDEPS; do if echo $$x | grep '^ *-L' > /dev/null 2>&1; then echo $$x | sed -e 's/^ *-L//'; fi; done | uniq`; \
LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
$${LDCMD} $${LDFLAGS} -o $${APPNAME:=$(APPNAME)} $(OBJECTS) $${LIBDEPS} )
LINK_SO= \
( $(SET_X); \
LIBDEPS="$${LIBDEPS:-$(LIBDEPS)}"; \
SHAREDCMD="$${SHAREDCMD:-$(CC)}"; \
SHAREDFLAGS="$${SHAREDFLAGS:-$(CFLAGS) $(SHARED_LDFLAGS)}"; \
LIBPATH=`for x in $$LIBDEPS; do if echo $$x | grep '^ *-L' > /dev/null 2>&1; then echo $$x | sed -e 's/^ *-L//'; fi; done | uniq`; \
LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
$${SHAREDCMD} $${SHAREDFLAGS} \
-o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \
$$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS \
) && $(SYMLINK_SO)
SYMLINK_SO= \
if [ -n "$$INHIBIT_SYMLINKS" ]; then :; else \
prev=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \
if [ -n "$$SHLIB_COMPAT" ]; then \
for x in $$SHLIB_COMPAT; do \
( $(SET_X); rm -f $$SHLIB$$x$$SHLIB_SUFFIX; \
ln -s $$prev $$SHLIB$$x$$SHLIB_SUFFIX ); \
prev=$$SHLIB$$x$$SHLIB_SUFFIX; \
done; \
fi; \
if [ -n "$$SHLIB_SOVER" ]; then \
( $(SET_X); rm -f $$SHLIB$$SHLIB_SUFFIX; \
ln -s $$prev $$SHLIB$$SHLIB_SUFFIX ); \
fi; \
fi
LINK_SO_A= SHOBJECTS="lib$(LIBNAME).a $(LIBEXTRAS)"; $(LINK_SO)
LINK_SO_O= SHOBJECTS="$(LIBEXTRAS)"; $(LINK_SO)
LINK_SO_A_VIA_O= \
SHOBJECTS=lib$(LIBNAME).o; \
ALL=$$ALLSYMSFLAGS; ALLSYMSFLAGS=; NOALLSYMSFLAGS=; \
( $(SET_X); \
ld $(LDFLAGS) -r -o lib$(LIBNAME).o $$ALL lib$(LIBNAME).a $(LIBEXTRAS) ); \
$(LINK_SO) && rm -f $(LIBNAME).o
LINK_SO_A_UNPACKED= \
UNPACKDIR=link_tmp.$$$$; rm -rf $$UNPACKDIR; mkdir $$UNPACKDIR; \
(cd $$UNPACKDIR; ar x ../lib$(LIBNAME).a) && \
([ -z "$(LIBEXTRAS)" ] || cp $(LIBEXTRAS) $$UNPACKDIR) && \
SHOBJECTS=$$UNPACKDIR/*.o; \
$(LINK_SO) && rm -rf $$UNPACKDIR
DETECT_GNU_LD=(${CC} -Wl,-V /dev/null 2>&1 | grep '^GNU ld' )>/dev/null
DO_GNU_SO=$(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
ALLSYMSFLAGS='-Wl,--whole-archive'; \
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-Bsymbolic -Wl,-soname=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"
DO_GNU_APP=LDFLAGS="$(CFLAGS) -Wl,-rpath,$(LIBRPATH)"
#This is rather special. It's a special target with which one can link
#applications without bothering with any features that have anything to
#do with shared libraries, for example when linking against static
#libraries. It's mostly here to avoid a lot of conditionals everywhere
#else...
link_app.:
$(LINK_APP)
link_o.gnu:
@ $(DO_GNU_SO); $(LINK_SO_O)
link_a.gnu:
@ $(DO_GNU_SO); $(LINK_SO_A)
link_app.gnu:
@ $(DO_GNU_APP); $(LINK_APP)
link_o.bsd:
@if ${DETECT_GNU_LD}; then $(DO_GNU_SO); else \
$(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
LIBDEPS=" "; \
ALLSYMSFLAGS="-Wl,-Bforcearchive"; \
NOALLSYMSFLAGS=; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -nostdlib"; \
fi; $(LINK_SO_O)
link_a.bsd:
@if ${DETECT_GNU_LD}; then $(DO_GNU_SO); else \
$(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
LIBDEPS=" "; \
ALLSYMSFLAGS="-Wl,-Bforcearchive"; \
NOALLSYMSFLAGS=; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -nostdlib"; \
fi; $(LINK_SO_A)
link_app.bsd:
@if ${DETECT_GNU_LD}; then $(DO_GNU_APP); else \
LDFLAGS="$(CFLAGS) -Wl,-rpath,$(LIBPATH)"; \
fi; $(LINK_APP)
# For Darwin AKA Mac OS/X (dyld)
# link_o.darwin produces .so, because we let it use dso_dlfcn module,
# which has .so extension hard-coded. One can argue that one should
# develop special dso module for MacOS X. At least manual encourages
# to use native NSModule(3) API and refers to dlfcn as termporary hack.
link_o.darwin:
@ $(CALC_VERSIONS); \
SHLIB=`expr "$$THIS" : '.*/\([^/\.]*\)\.'`; \
SHLIB=$${SHLIB:-lib$(LIBNAME)}; \
SHLIB_SUFFIX=`expr "$$THIS" : '.*\(\.[^\.]*\)$$'`; \
SHLIB_SUFFIX=$${SHLIB_SUFFIX:-.so}; \
ALLSYMSFLAGS='-all_load'; \
NOALLSYMSFLAGS=''; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS)"; \
if [ -n "$(LIBVERSION)" ]; then \
SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \
fi; \
if [ -n "$$SHLIB_SOVER_NODOT" ]; then \
SHAREDFLAGS="$$SHAREDFLAGS -compatibility_version $$SHLIB_SOVER_NODOT"; \
fi; \
$(LINK_SO_O)
link_a.darwin:
@ $(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME); \
SHLIB_SUFFIX=.dylib; \
ALLSYMSFLAGS='-all_load'; \
NOALLSYMSFLAGS=''; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS)"; \
if [ -n "$(LIBVERSION)" ]; then \
SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \
fi; \
if [ -n "$$SHLIB_SOVER_NODOT" ]; then \
SHAREDFLAGS="$$SHAREDFLAGS -compatibility_version $$SHLIB_SOVER_NODOT"; \
fi; \
SHAREDFLAGS="$$SHAREDFLAGS -install_name ${INSTALLTOP}/lib/$$SHLIB${SHLIB_EXT}"; \
$(LINK_SO_A)
link_app.darwin: # is there run-path on darwin?
$(LINK_APP)
link_o.cygwin:
@ $(CALC_VERSIONS); \
INHIBIT_SYMLINKS=yes; \
SHLIB=cyg$(LIBNAME); \
base=-Wl,--enable-auto-image-base; \
if expr $(PLATFORM) : 'mingw' > /dev/null; then \
SHLIB=$(LIBNAME)eay32; base=; \
fi; \
SHLIB_SUFFIX=.dll; \
LIBVERSION="$(LIBVERSION)"; \
SHLIB_SOVER=${LIBVERSION:+"-$(LIBVERSION)"}; \
ALLSYMSFLAGS='-Wl,--whole-archive'; \
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
$(LINK_SO_O)
link_a.cygwin:
@ $(CALC_VERSIONS); \
INHIBIT_SYMLINKS=yes; \
SHLIB=cyg$(LIBNAME); \
base=-Wl,--enable-auto-image-base; \
if expr $(PLATFORM) : 'mingw' > /dev/null; then \
SHLIB=$(LIBNAME)eay32; \
base=; [ $(LIBNAME) = "crypto" ] && base=-Wl,--image-base,0x63000000; \
fi; \
SHLIB_SUFFIX=.dll; \
SHLIB_SOVER=-$(LIBVERSION); \
ALLSYMSFLAGS='-Wl,--whole-archive'; \
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
[ -f apps/$$SHLIB$$SHLIB_SUFFIX ] && rm apps/$$SHLIB$$SHLIB_SUFFIX; \
[ -f test/$$SHLIB$$SHLIB_SUFFIX ] && rm test/$$SHLIB$$SHLIB_SUFFIX; \
$(LINK_SO_A) || exit 1; \
cp -p $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX apps/; \
cp -p $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX test/
link_app.cygwin:
$(LINK_APP)
link_o.alpha-osf1:
@ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \
else \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
if [ -n "$$SHLIB_HIST" ]; then \
SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
else \
SHLIB_HIST="$(LIBVERSION)"; \
fi; \
SHLIB_SOVER=; \
ALLSYMSFLAGS='-all'; \
NOALLSYMSFLAGS='-none'; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-B,symbolic"; \
if [ -n "$$SHLIB_HIST" ]; then \
SHAREDFLAGS="$$SHAREDFLAGS -set_version $$SHLIB_HIST"; \
fi; \
fi; \
$(LINK_SO_O)
link_a.alpha-osf1:
@ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \
else \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
if [ -n "$$SHLIB_HIST" ]; then \
SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
else \
SHLIB_HIST="$(LIBVERSION)"; \
fi; \
SHLIB_SOVER=; \
ALLSYMSFLAGS='-all'; \
NOALLSYMSFLAGS='-none'; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-B,symbolic"; \
if [ -n "$$SHLIB_HIST" ]; then \
SHAREDFLAGS="$$SHAREDFLAGS -set_version $$SHLIB_HIST"; \
fi; \
fi; \
$(LINK_SO_A)
link_app.alpha-osf1:
@if ${DETECT_GNU_LD}; then \
$(DO_GNU_APP); \
else \
LDFLAGS="$(CFLAGS) -rpath $(LIBRPATH)"; \
fi; \
$(LINK_APP)
link_o.solaris:
@ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \
else \
$(CALC_VERSIONS); \
MINUSZ='-z '; \
($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSZ='-Wl,-z,'; \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
ALLSYMSFLAGS="$${MINUSZ}allextract"; \
NOALLSYMSFLAGS="$${MINUSZ}defaultextract"; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -Wl,-Bsymbolic"; \
fi; \
$(LINK_SO_O)
link_a.solaris:
@ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \
else \
$(CALC_VERSIONS); \
MINUSZ='-z '; \
(${CC} -v 2>&1 | grep gcc) > /dev/null && MINUSZ='-Wl,-z,'; \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=;\
ALLSYMSFLAGS="$${MINUSZ}allextract"; \
NOALLSYMSFLAGS="$${MINUSZ}defaultextract"; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -Wl,-Bsymbolic"; \
fi; \
$(LINK_SO_A)
link_app.solaris:
@ if ${DETECT_GNU_LD}; then \
$(DO_GNU_APP); \
else \
LDFLAGS="$(CFLAGS) -R $(LIBRPATH)"; \
fi; \
$(LINK_APP)
# OpenServer 5 native compilers used
link_o.svr3:
@ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \
else \
$(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
ALLSYMSFLAGS=''; \
NOALLSYMSFLAGS=''; \
SHAREDFLAGS="$(CFLAGS) -G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
fi; \
$(LINK_SO_O)
link_a.svr3:
@ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \
else \
$(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
ALLSYMSFLAGS=''; \
NOALLSYMSFLAGS=''; \
SHAREDFLAGS="$(CFLAGS) -G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
fi; \
$(LINK_SO_A_UNPACKED)
link_app.svr3:
@${DETECT_GNU_LD} && $(DO_GNU_APP); \
$(LINK_APP)
# UnixWare 7 and OpenUNIX 8 native compilers used
link_o.svr5:
@ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \
else \
$(CALC_VERSIONS); \
SHARE_FLAG='-G'; \
($(CC) -v 2>&1 | grep gcc) > /dev/null && SHARE_FLAG='-shared'; \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
ALLSYMSFLAGS=''; \
NOALLSYMSFLAGS=''; \
SHAREDFLAGS="$(CFLAGS) $${SHARE_FLAG} -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
fi; \
$(LINK_SO_O)
link_a.svr5:
@ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \
else \
$(CALC_VERSIONS); \
SHARE_FLAG='-G'; \
(${CC} -v 2>&1 | grep gcc) > /dev/null && SHARE_FLAG='-shared'; \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
ALLSYMSFLAGS=''; \
NOALLSYMSFLAGS=''; \
SHAREDFLAGS="$(CFLAGS) $${SHARE_FLAG} -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
fi; \
$(LINK_SO_A_UNPACKED)
link_app.svr5:
@${DETECT_GNU_LD} && $(DO_GNU_APP); \
$(LINK_APP)
link_o.irix:
@ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \
else \
$(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
MINUSWL=""; \
($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSWL="-Wl,"; \
ALLSYMSFLAGS="$${MINUSWL}-all"; \
NOALLSYMSFLAGS="$${MINUSWL}-none"; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,-B,symbolic"; \
fi; \
$(LINK_SO_O)
link_a.irix:
@ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \
else \
$(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
MINUSWL=""; \
($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSWL="-Wl,"; \
ALLSYMSFLAGS="$${MINUSWL}-all"; \
NOALLSYMSFLAGS="$${MINUSWL}-none"; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,-B,symbolic"; \
fi; \
$(LINK_SO_A)
link_app.irix:
@LDFLAGS="$(CFLAGS) -Wl,-rpath,$(LIBRPATH)"; \
$(LINK_APP)
# 32-bit PA-RISC HP-UX embeds the -L pathname of libs we link with, so
# we compensate for it with +cdp ../: and +cdp ./:. Yes, these rewrite
# rules imply that we can only link one level down in catalog structure,
# but that's what takes place for the moment of this writing. +cdp option
# was introduced in HP-UX 11.x and applies in 32-bit PA-RISC link
# editor context only [it's simply ignored in other cases, which are all
# ELFs by the way].
#
link_o.hpux:
@if ${DETECT_GNU_LD}; then $(DO_GNU_SO); else \
$(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).sl; \
expr "$(CFLAGS)" : '.*DSO_DLFCN' > /dev/null && SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
ALLSYMSFLAGS='-Wl,-Fl'; \
NOALLSYMSFLAGS=''; \
expr $(PLATFORM) : 'hpux64' > /dev/null && ALLSYMSFLAGS='-Wl,+forceload'; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+h,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,+cdp,../:,+cdp,./:"; \
fi; \
rm -f $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX || :; \
$(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
link_a.hpux:
@if ${DETECT_GNU_LD}; then $(DO_GNU_SO); else \
$(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).sl; \
expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
ALLSYMSFLAGS='-Wl,-Fl'; \
NOALLSYMSFLAGS=''; \
expr $(PLATFORM) : 'hpux64' > /dev/null && ALLSYMSFLAGS='-Wl,+forceload'; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+h,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,+cdp,../:,+cdp,./:"; \
fi; \
rm -f $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX || :; \
$(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
link_app.hpux:
@if ${DETECT_GNU_LD}; then $(DO_GNU_APP); else \
LDFLAGS="$(CFLAGS) -Wl,+s,+cdp,../:,+cdp,./:,+b,$(LIBRPATH)"; \
fi; \
$(LINK_APP)
link_o.aix:
@ $(CALC_VERSIONS); \
OBJECT_MODE=`expr x$(SHARED_LDFLAGS) : 'x\-[a-z]*\(64\)'` || :; \
OBJECT_MODE=$${OBJECT_MODE:-32}; export OBJECT_MODE; \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
ALLSYMSFLAGS=''; \
NOALLSYMSFLAGS=''; \
SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-G,-bexpall,-bnolibpath,-bM:SRE'; \
$(LINK_SO_O);
link_a.aix:
@ $(CALC_VERSIONS); \
OBJECT_MODE=`expr x$(SHARED_LDFLAGS) : 'x\-[a-z]*\(64\)'` || : ; \
OBJECT_MODE=$${OBJECT_MODE:-32}; export OBJECT_MODE; \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
ALLSYMSFLAGS='-bnogc'; \
NOALLSYMSFLAGS=''; \
SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-G,-bexpall,-bnolibpath,-bM:SRE'; \
$(LINK_SO_A_VIA_O)
link_app.aix:
LDFLAGS="$(CFLAGS) -Wl,-brtl,-blibpath:$(LIBRPATH):$${LIBPATH:-/usr/lib:/lib}"; \
$(LINK_APP)
link_o.reliantunix:
@ $(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
ALLSYMSFLAGS=; \
NOALLSYMSFLAGS=''; \
SHAREDFLAGS='$(CFLAGS) -G'; \
$(LINK_SO_O)
link_a.reliantunix:
@ $(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \
ALLSYMSFLAGS=; \
NOALLSYMSFLAGS=''; \
SHAREDFLAGS='$(CFLAGS) -G'; \
$(LINK_SO_A_UNPACKED)
link_app.reliantunix:
$(LINK_APP)
# Targets to build symbolic links when needed
symlink.gnu symlink.solaris symlink.svr3 symlink.svr5 symlink.irix \
symlink.aix symlink.reliantunix:
@ $(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).so; \
$(SYMLINK_SO)
symlink.darwin:
@ $(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME); \
SHLIB_SUFFIX=.dylib; \
$(SYMLINK_SO)
symlink.hpux:
@ $(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).sl; \
expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \
$(SYMLINK_SO)
# The following lines means those specific architectures do no symlinks
symlink.cygwin symlink.alpha-osf1 symlink.tru64 symlink.tru64-rpath:
# Compatibility targets
link_o.bsd-gcc-shared link_o.linux-shared link_o.gnu-shared: link_o.gnu
link_a.bsd-gcc-shared link_a.linux-shared link_a.gnu-shared: link_a.gnu
link_app.bsd-gcc-shared link_app.linux-shared link_app.gnu-shared: link_app.gnu
symlink.bsd-gcc-shared symlink.bsd-shared symlink.linux-shared symlink.gnu-shared: symlink.gnu
link_o.bsd-shared: link_o.bsd
link_a.bsd-shared: link_a.bsd
link_app.bsd-shared: link_app.bsd
link_o.darwin-shared: link_o.darwin
link_a.darwin-shared: link_a.darwin
link_app.darwin-shared: link_app.darwin
symlink.darwin-shared: symlink.darwin
link_o.cygwin-shared: link_o.cygwin
link_a.cygwin-shared: link_a.cygwin
link_app.cygwin-shared: link_app.cygwin
symlink.cygwin-shared: symlink.cygwin
link_o.alpha-osf1-shared: link_o.alpha-osf1
link_a.alpha-osf1-shared: link_a.alpha-osf1
link_app.alpha-osf1-shared: link_app.alpha-osf1
symlink.alpha-osf1-shared: symlink.alpha-osf1
link_o.tru64-shared: link_o.tru64
link_a.tru64-shared: link_a.tru64
link_app.tru64-shared: link_app.tru64
symlink.tru64-shared: symlink.tru64
link_o.tru64-shared-rpath: link_o.tru64-rpath
link_a.tru64-shared-rpath: link_a.tru64-rpath
link_app.tru64-shared-rpath: link_app.tru64-rpath
symlink.tru64-shared-rpath: symlink.tru64-rpath
link_o.solaris-shared: link_o.solaris
link_a.solaris-shared: link_a.solaris
link_app.solaris-shared: link_app.solaris
symlink.solaris-shared: symlink.solaris
link_o.svr3-shared: link_o.svr3
link_a.svr3-shared: link_a.svr3
link_app.svr3-shared: link_app.svr3
symlink.svr3-shared: symlink.svr3
link_o.svr5-shared: link_o.svr5
link_a.svr5-shared: link_a.svr5
link_app.svr5-shared: link_app.svr5
symlink.svr5-shared: symlink.svr5
link_o.irix-shared: link_o.irix
link_a.irix-shared: link_a.irix
link_app.irix-shared: link_app.irix
symlink.irix-shared: symlink.irix
link_o.hpux-shared: link_o.hpux
link_a.hpux-shared: link_a.hpux
link_app.hpux-shared: link_app.hpux
symlink.hpux-shared: symlink.hpux
link_o.aix-shared: link_o.aix
link_a.aix-shared: link_a.aix
link_app.aix-shared: link_app.aix
symlink.aix-shared: symlink.aix
link_o.reliantunix-shared: link_o.reliantunix
link_a.reliantunix-shared: link_a.reliantunix
link_app.reliantunix-shared: link_app.reliantunix
symlink.reliantunix-shared: symlink.reliantunix

250
NEWS
View File

@@ -5,256 +5,6 @@
This file gives a brief overview of the major changes between each OpenSSL This file gives a brief overview of the major changes between each OpenSSL
release. For more details please read the CHANGES file. release. For more details please read the CHANGES file.
Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e:
o Various ciphersuite selection fixes.
o RFC3779 support.
Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d:
o Introduce limits to prevent malicious key DoS (CVE-2006-2940)
o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
o Changes to ciphersuite selection algorithm
Major changes between OpenSSL 0.9.8b and OpenSSL 0.9.8c:
o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339
o New cipher Camellia
Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b:
o Cipher string fixes.
o Fixes for VC++ 2005.
o Updated ECC cipher suite support.
o New functions EVP_CIPHER_CTX_new() and EVP_CIPHER_CTX_free().
o Zlib compression usage fixes.
o Built in dynamic engine compilation support on Win32.
o Fixes auto dynamic engine loading in Win32.
Major changes between OpenSSL 0.9.8 and OpenSSL 0.9.8a:
o Fix potential SSL 2.0 rollback, CVE-2005-2969
o Extended Windows CE support
Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.8:
o Major work on the BIGNUM library for higher efficiency and to
make operations more streamlined and less contradictory. This
is the result of a major audit of the BIGNUM library.
o Addition of BIGNUM functions for fields GF(2^m) and NIST
curves, to support the Elliptic Crypto functions.
o Major work on Elliptic Crypto; ECDH and ECDSA added, including
the use through EVP, X509 and ENGINE.
o New ASN.1 mini-compiler that's usable through the OpenSSL
configuration file.
o Added support for ASN.1 indefinite length constructed encoding.
o New PKCS#12 'medium level' API to manipulate PKCS#12 files.
o Complete rework of shared library construction and linking
programs with shared or static libraries, through a separate
Makefile.shared.
o Rework of the passing of parameters from one Makefile to another.
o Changed ENGINE framework to load dynamic engine modules
automatically from specifically given directories.
o New structure and ASN.1 functions for CertificatePair.
o Changed the ZLIB compression method to be stateful.
o Changed the key-generation and primality testing "progress"
mechanism to take a structure that contains the ticker
function and an argument.
o New engine module: GMP (performs private key exponentiation).
o New engine module: VIA PadLOck ACE extension in VIA C3
Nehemiah processors.
o Added support for IPv6 addresses in certificate extensions.
See RFC 1884, section 2.2.
o Added support for certificate policy mappings, policy
constraints and name constraints.
o Added support for multi-valued AVAs in the OpenSSL
configuration file.
o Added support for multiple certificates with the same subject
in the 'openssl ca' index file.
o Make it possible to create self-signed certificates using
'openssl ca -selfsign'.
o Make it possible to generate a serial number file with
'openssl ca -create_serial'.
o New binary search functions with extended functionality.
o New BUF functions.
o New STORE structure and library to provide an interface to all
sorts of data repositories. Supports storage of public and
private keys, certificates, CRLs, numbers and arbitrary blobs.
This library is unfortunately unfinished and unused withing
OpenSSL.
o New control functions for the error stack.
o Changed the PKCS#7 library to support one-pass S/MIME
processing.
o Added the possibility to compile without old deprecated
functionality with the OPENSSL_NO_DEPRECATED macro or the
'no-deprecated' argument to the config and Configure scripts.
o Constification of all ASN.1 conversion functions, and other
affected functions.
o Improved platform support for PowerPC.
o New FIPS 180-2 algorithms (SHA-224, -256, -384 and -512).
o New X509_VERIFY_PARAM structure to support parametrisation
of X.509 path validation.
o Major overhaul of RC4 performance on Intel P4, IA-64 and
AMD64.
o Changed the Configure script to have some algorithms disabled
by default. Those can be explicitely enabled with the new
argument form 'enable-xxx'.
o Change the default digest in 'openssl' commands from MD5 to
SHA-1.
o Added support for DTLS.
o New BIGNUM blinding.
o Added support for the RSA-PSS encryption scheme
o Added support for the RSA X.931 padding.
o Added support for BSD sockets on NetWare.
o Added support for files larger than 2GB.
o Added initial support for Win64.
o Added alternate pkg-config files.
Major changes between OpenSSL 0.9.7k and OpenSSL 0.9.7l:
o Introduce limits to prevent malicious key DoS (CVE-2006-2940)
o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
Major changes between OpenSSL 0.9.7j and OpenSSL 0.9.7k:
o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339
Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j:
o Visual C++ 2005 fixes.
o Update Windows build system for FIPS.
Major changes between OpenSSL 0.9.7h and OpenSSL 0.9.7i:
o Give EVP_MAX_MD_SIZE it's old value, except for a FIPS build.
Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.7h:
o Fix SSL 2.0 Rollback, CVE-2005-2969
o Allow use of fixed-length exponent on DSA signing
o Default fixed-window RSA, DSA, DH private-key operations
Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g:
o More compilation issues fixed.
o Adaptation to more modern Kerberos API.
o Enhanced or corrected configuration for Solaris64, Mingw and Cygwin.
o Enhanced x86_64 assembler BIGNUM module.
o More constification.
o Added processing of proxy certificates (RFC 3820).
Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f:
o Several compilation issues fixed.
o Many memory allocation failure checks added.
o Improved comparison of X509 Name type.
o Mandatory basic checks on certificates.
o Performance improvements.
Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e:
o Fix race condition in CRL checking code.
o Fixes to PKCS#7 (S/MIME) code.
Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d:
o Security: Fix Kerberos ciphersuite SSL/TLS handshaking bug
o Security: Fix null-pointer assignment in do_change_cipher_spec()
o Allow multiple active certificates with same subject in CA index
o Multiple X509 verification fixes
o Speed up HMAC and other operations
Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c:
o Security: fix various ASN1 parsing bugs.
o New -ignore_err option to OCSP utility.
o Various interop and bug fixes in S/MIME code.
o SSL/TLS protocol fix for unrequested client certificates.
Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b:
o Security: counter the Klima-Pokorny-Rosa extension of
Bleichbacher's attack
o Security: make RSA blinding default.
o Configuration: Irix fixes, AIX fixes, better mingw support.
o Support for new platforms: linux-ia64-ecc.
o Build: shared library support fixes.
o ASN.1: treat domainComponent correctly.
o Documentation: fixes and additions.
Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a:
o Security: Important security related bugfixes.
o Enhanced compatibility with MIT Kerberos.
o Can be built without the ENGINE framework.
o IA32 assembler enhancements.
o Support for new platforms: FreeBSD/IA64 and FreeBSD/Sparc64.
o Configuration: the no-err option now works properly.
o SSL/TLS: now handles manual certificate chain building.
o SSL/TLS: certain session ID malfunctions corrected.
Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7:
o New library section OCSP.
o Complete rewrite of ASN1 code.
o CRL checking in verify code and openssl utility.
o Extension copying in 'ca' utility.
o Flexible display options in 'ca' utility.
o Provisional support for international characters with UTF8.
o Support for external crypto devices ('engine') is no longer
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,
Linux x86_64, Linux 64-bit on Sparc v9
o Extended support for some platforms: VxWorks
o Enhanced support for shared libraries.
o Now only builds PIC code when shared library support is requested.
o Support for pkg-config.
o Lots of new manuals.
o Makes symbolic links to or copies of manuals to cover all described
functions.
o Change DES API to clean up the namespace (some applications link also
against libdes providing similar functions having the same name).
Provide macros for backward compatibility (will be removed in the
future).
o Unify handling of cryptographic algorithms (software and engine)
to be available via EVP routines for asymmetric and symmetric ciphers.
o NCONF: new configuration handling routines.
o Change API to use more 'const' modifiers to improve error checking
and help optimizers.
o Finally remove references to RSAref.
o Reworked parts of the BIGNUM code.
o Support for new engines: Broadcom ubsec, Accelerated Encryption
Processing, IBM 4758.
o A few new engines added in the demos area.
o Extended and corrected OID (object identifier) table.
o PRNG: query at more locations for a random device, automatic query for
EGD style random sources at several locations.
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).
Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k:
o Security: fix various ASN1 parsing bugs.
o SSL/TLS protocol fix for unrequested client certificates.
Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j:
o Security: counter the Klima-Pokorny-Rosa extension of
Bleichbacher's attack
o Security: make RSA blinding default.
o Build: shared library support fixes.
Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i:
o Important security related bugfixes.
Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h: Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h:
o New configuration targets for Tandem OSS and A/UX. o New configuration targets for Tandem OSS and A/UX.

View File

@@ -1,209 +0,0 @@
@echo off
rem ========================================================================
rem Batch file to automate building OpenSSL for NetWare.
rem
rem usage:
rem build [target] [debug opts] [assembly opts] [configure opts]
rem
rem target - "netware-clib" - CLib NetWare build (WinSock Sockets)
rem - "netware-libc" - LibC NKS NetWare build (WinSock Sockets)
rem - "netware-libc-bsdsock" - LibC NKS NetWare build (BSD Sockets)
rem
rem debug opts - "debug" - build debug
rem
rem assembly opts - "nw-mwasm" - use Metrowerks assembler
rem - "nw-nasm" - use NASM assembler
rem - "no-asm" - don't use assembly
rem
rem configure opts- all unrecognized arguments are passed to the
rem perl configure script
rem
rem If no arguments are specified the default is to build non-debug with
rem no assembly. NOTE: there is no default BLD_TARGET.
rem
rem No assembly is the default - Uncomment section below to change
rem the assembler default
set ASM_MODE=
set ASSEMBLER=
set NO_ASM=no-asm
rem Uncomment to default to the Metrowerks assembler
rem set ASM_MODE=nw-mwasm
rem set ASSEMBLER=Metrowerks
rem set NO_ASM=
rem Uncomment to default to the NASM assembler
rem set ASM_MODE=nw-nasm
rem set ASSEMBLER=NASM
rem set NO_ASM=
rem No default Bld target
set BLD_TARGET=no_target
rem set BLD_TARGET=netware-clib
rem set BLD_TARGET=netware-libc
rem Default to build non-debug
set DEBUG=
rem Uncomment to default to debug build
rem set DEBUG=debug
set CONFIG_OPTS=
set ARG_PROCESSED=NO
rem Process command line args
:opts
if "a%1" == "a" goto endopt
if "%1" == "no-asm" set NO_ASM=no-asm
if "%1" == "no-asm" set ARG_PROCESSED=YES
if "%1" == "debug" set DEBUG=debug
if "%1" == "debug" set ARG_PROCESSED=YES
if "%1" == "nw-nasm" set ASM_MODE=nw-nasm
if "%1" == "nw-nasm" set ASSEMBLER=NASM
if "%1" == "nw-nasm" set NO_ASM=
if "%1" == "nw-nasm" set ARG_PROCESSED=YES
if "%1" == "nw-mwasm" set ASM_MODE=nw-mwasm
if "%1" == "nw-mwasm" set ASSEMBLER=Metrowerks
if "%1" == "nw-mwasm" set NO_ASM=
if "%1" == "nw-mwasm" set ARG_PROCESSED=YES
if "%1" == "netware-clib" set BLD_TARGET=netware-clib
if "%1" == "netware-clib" set ARG_PROCESSED=YES
if "%1" == "netware-libc" set BLD_TARGET=netware-libc
if "%1" == "netware-libc" set ARG_PROCESSED=YES
if "%1" == "netware-libc-bsdsock" set BLD_TARGET=netware-libc-bsdsock
if "%1" == "netware-libc-bsdsock" set ARG_PROCESSED=YES
rem If we didn't recognize the argument, consider it an option for config
if "%ARG_PROCESSED%" == "NO" set CONFIG_OPTS=%CONFIG_OPTS% %1
if "%ARG_PROCESSED%" == "YES" set ARG_PROCESSED=NO
shift
goto opts
:endopt
rem make sure a valid BLD_TARGET was specified
if "%BLD_TARGET%" == "no_target" goto no_target
rem build the nlm make file name which includes target and debug info
set NLM_MAKE=
if "%BLD_TARGET%" == "netware-clib" set NLM_MAKE=netware\nlm_clib
if "%BLD_TARGET%" == "netware-libc" set NLM_MAKE=netware\nlm_libc
if "%BLD_TARGET%" == "netware-libc-bsdsock" set NLM_MAKE=netware\nlm_libc_bsdsock
if "%DEBUG%" == "" set NLM_MAKE=%NLM_MAKE%.mak
if "%DEBUG%" == "debug" set NLM_MAKE=%NLM_MAKE%_dbg.mak
if "%NO_ASM%" == "no-asm" set ASM_MODE=
if "%NO_ASM%" == "no-asm" set ASSEMBLER=
if "%NO_ASM%" == "no-asm" set CONFIG_OPTS=%CONFIG_OPTS% no-asm
if "%NO_ASM%" == "no-asm" goto do_config
rem ==================================================
echo Generating x86 for %ASSEMBLER% assembler
echo Bignum
cd crypto\bn\asm
perl x86.pl %ASM_MODE% > bn-nw.asm
cd ..\..\..
echo DES
cd crypto\des\asm
perl des-586.pl %ASM_MODE% > d-nw.asm
cd ..\..\..
echo "crypt(3)"
cd crypto\des\asm
perl crypt586.pl %ASM_MODE% > y-nw.asm
cd ..\..\..
echo Blowfish
cd crypto\bf\asm
perl bf-586.pl %ASM_MODE% > b-nw.asm
cd ..\..\..
echo CAST5
cd crypto\cast\asm
perl cast-586.pl %ASM_MODE% > c-nw.asm
cd ..\..\..
echo RC4
cd crypto\rc4\asm
perl rc4-586.pl %ASM_MODE% > r4-nw.asm
cd ..\..\..
echo MD5
cd crypto\md5\asm
perl md5-586.pl %ASM_MODE% > m5-nw.asm
cd ..\..\..
echo SHA1
cd crypto\sha\asm
perl sha1-586.pl %ASM_MODE% > s1-nw.asm
cd ..\..\..
echo RIPEMD160
cd crypto\ripemd\asm
perl rmd-586.pl %ASM_MODE% > rm-nw.asm
cd ..\..\..
echo RC5\32
cd crypto\rc5\asm
perl rc5-586.pl %ASM_MODE% > r5-nw.asm
cd ..\..\..
rem ===============================================================
rem
:do_config
echo .
echo configure options: %CONFIG_OPTS% %BLD_TARGET%
echo .
perl configure %CONFIG_OPTS% %BLD_TARGET%
perl util\mkfiles.pl >MINFO
echo .
echo mk1mf.pl options: %DEBUG% %ASM_MODE% %CONFIG_OPTS% %BLD_TARGET%
echo .
perl util\mk1mf.pl %DEBUG% %ASM_MODE% %CONFIG_OPTS% %BLD_TARGET% >%NLM_MAKE%
echo The makefile "%NLM_MAKE%" has been created use your maketool to
echo build (ex: gmake -f %NLM_MAKE%)
goto end
rem ===============================================================
rem
:no_target
echo .
echo . No build target specified!!!
echo .
echo . usage: build [target] [debug opts] [assembly opts] [configure opts]
echo .
echo . target - "netware-clib" - CLib NetWare build (WinSock Sockets)
echo . - "netware-libc" - LibC NKS NetWare build (WinSock Sockets)
echo . - "netware-libc-bsdsock" - LibC NKS NetWare build (BSD Sockets)
echo .
echo . debug opts - "debug" - build debug
echo .
echo . assembly opts - "nw-mwasm" - use Metrowerks assembler
echo . "nw-nasm" - use NASM assembler
echo . "no-asm" - don't use assembly
echo .
echo . configure opts- all unrecognized arguments are passed to the
echo . perl configure script
echo .
echo . If no debug or assembly opts are specified the default is to build
echo . non-debug without assembly
echo .
:end

View File

@@ -1,112 +0,0 @@
@echo off
rem Batch file to copy OpenSSL stuff to a NetWare server for testing
rem This batch file will create an "opensssl" directory at the root of the
rem specified NetWare drive and copy the required files to run the tests.
rem It should be run from inside the "openssl\netware" subdirectory.
rem Usage:
rem cpy_tests.bat <test subdirectory> <NetWare drive>
rem <test subdirectory> - out_nw.dbg | out_nw
rem <NetWare drive> - any mapped drive letter
rem
rem example ( copy from debug build to m: dirve ):
rem cpy_tests.bat out_nw.dbg m:
rem
rem CAUTION: If a directory named OpenSSL exists on the target drive
rem it will be deleted first.
if "%1" == "" goto usage
if "%2" == "" goto usage
rem Assume running in \openssl directory unless cpy_tests.bat exists then
rem it must be the \openssl\netware directory
set loc=.
if exist cpy_tests.bat set loc=..
rem make sure the local build subdirectory specified is valid
if not exist %loc%\%1\NUL goto invalid_dir
rem make sure target drive is valid
if not exist %2\NUL goto invalid_drive
rem If an OpenSSL directory exists on the target drive, remove it
if exist %2\openssl\NUL goto remove_openssl
goto do_copy
:remove_openssl
echo .
echo OpenSSL directory exists on %2 - it will be removed!
pause
rmdir %2\openssl /s /q
:do_copy
rem make an "openssl" directory and others at the root of the NetWare drive
mkdir %2\openssl
mkdir %2\openssl\test_out
mkdir %2\openssl\apps
mkdir %2\openssl\certs
mkdir %2\openssl\test
rem copy the test nlms
copy %loc%\%1\*.nlm %2\openssl\
rem copy the test perl script
copy %loc%\netware\do_tests.pl %2\openssl\
rem copy the certs directory stuff
xcopy %loc%\certs\*.* %2\openssl\certs\ /s
rem copy the test directory stuff
copy %loc%\test\CAss.cnf %2\openssl\test\
copy %loc%\test\Uss.cnf %2\openssl\test\
copy %loc%\test\pkcs7.pem %2\openssl\test\
copy %loc%\test\pkcs7-1.pem %2\openssl\test\
copy %loc%\test\testcrl.pem %2\openssl\test\
copy %loc%\test\testp7.pem %2\openssl\test\
copy %loc%\test\testreq2.pem %2\openssl\test\
copy %loc%\test\testrsa.pem %2\openssl\test\
copy %loc%\test\testsid.pem %2\openssl\test\
copy %loc%\test\testx509.pem %2\openssl\test\
copy %loc%\test\v3-cert1.pem %2\openssl\test\
copy %loc%\test\v3-cert2.pem %2\openssl\test\
rem copy the apps directory stuff
copy %loc%\apps\client.pem %2\openssl\apps\
copy %loc%\apps\server.pem %2\openssl\apps\
copy %loc%\apps\openssl.cnf %2\openssl\apps\
echo .
echo Tests copied
echo Run the test script at the console by typing:
echo "Perl \openssl\do_tests.pl"
echo .
echo Make sure the Search path includes the OpenSSL subdirectory
goto end
:invalid_dir
echo.
echo Invalid build directory specified: %1
echo.
goto usage
:invalid_drive
echo.
echo Invalid drive: %2
echo.
goto usage
:usage
echo.
echo usage: cpy_tests.bat [test subdirectory] [NetWare drive]
echo [test subdirectory] - out_nw_clib.dbg, out_nw_libc.dbg, etc.
echo [NetWare drive] - any mapped drive letter
echo.
echo example: cpy_test out_nw_clib.dbg M:
echo (copy from clib debug build area to M: drive)
:end

View File

@@ -1,594 +0,0 @@
# perl script to run OpenSSL tests
my $base_path = "\\openssl";
my $output_path = "$base_path\\test_out";
my $cert_path = "$base_path\\certs";
my $test_path = "$base_path\\test";
my $app_path = "$base_path\\apps";
my $tmp_cert = "$output_path\\cert.tmp";
my $OpenSSL_config = "$app_path\\openssl.cnf";
my $log_file = "$output_path\\tests.log";
my $pause = 0;
# process the command line args to see if they wanted us to pause
# between executing each command
foreach $i (@ARGV)
{
if ($i =~ /^-p$/)
{ $pause=1; }
}
main();
############################################################################
sub main()
{
# delete all the output files in the output directory
unlink <$output_path\\*.*>;
# open the main log file
open(OUT, ">$log_file") || die "unable to open $log_file\n";
algorithm_tests();
encryption_tests();
pem_tests();
verify_tests();
ca_tests();
ssl_tests();
close(OUT);
print("\nCompleted running tests.\n\n");
print("Check log file for errors: $log_file\n");
}
############################################################################
sub algorithm_tests
{
my $i;
my $outFile;
my @tests = ( rsa_test, destest, ideatest, bftest, shatest, sha1test,
md5test, dsatest, md2test, mdc2test, rc2test, rc4test, randtest,
dhtest, exptest );
print( "\nRUNNING CRYPTO ALGORITHM TESTS:\n\n");
print( OUT "\n========================================================\n");
print( OUT "CRYPTO ALGORITHM TESTS:\n\n");
foreach $i (@tests)
{
if (-e "$base_path\\$i.nlm")
{
$outFile = "$output_path\\$i.out";
system("$i > $outFile");
log_desc("Test: $i\.nlm:");
log_output("", $outFile );
}
else
{
log_desc("Test: $i\.nlm: file not found");
}
}
}
############################################################################
sub encryption_tests
{
my $i;
my $outFile;
my @enc_tests = ( "enc", "rc4", "des-cfb", "des-ede-cfb", "des-ede3-cfb",
"des-ofb", "des-ede-ofb", "des-ede3-ofb",
"des-ecb", "des-ede", "des-ede3", "des-cbc",
"des-ede-cbc", "des-ede3-cbc", "idea-ecb", "idea-cfb",
"idea-ofb", "idea-cbc", "rc2-ecb", "rc2-cfb",
"rc2-ofb", "rc2-cbc", "bf-ecb", "bf-cfb",
"bf-ofb", "bf-cbc" );
my $input = "$base_path\\do_tests.pl";
my $cipher = "$output_path\\cipher.out";
my $clear = "$output_path\\clear.out";
print( "\nRUNNING ENCRYPTION & DECRYPTION TESTS:\n\n");
print( OUT "\n========================================================\n");
print( OUT "FILE ENCRYPTION & DECRYPTION TESTS:\n\n");
foreach $i (@enc_tests)
{
log_desc("Testing: $i");
# do encryption
$outFile = "$output_path\\enc.out";
system("openssl2 $i -e -bufsize 113 -k test -in $input -out $cipher > $outFile" );
log_output("Encrypting: $input --> $cipher", $outFile);
# do decryption
$outFile = "$output_path\\dec.out";
system("openssl2 $i -d -bufsize 157 -k test -in $cipher -out $clear > $outFile");
log_output("Decrypting: $cipher --> $clear", $outFile);
# compare files
$x = compare_files( $input, $clear, 1);
if ( $x == 0 )
{
print( "SUCCESS - files match: $input, $clear\n");
print( OUT "SUCCESS - files match: $input, $clear\n");
}
else
{
print( "ERROR: files don't match\n");
print( OUT "ERROR: files don't match\n");
}
do_wait();
# Now do the same encryption but use Base64
# do encryption B64
$outFile = "$output_path\\B64enc.out";
system("openssl2 $i -a -e -bufsize 113 -k test -in $input -out $cipher > $outFile");
log_output("Encrypting(B64): $cipher --> $clear", $outFile);
# do decryption B64
$outFile = "$output_path\\B64dec.out";
system("openssl2 $i -a -d -bufsize 157 -k test -in $cipher -out $clear > $outFile");
log_output("Decrypting(B64): $cipher --> $clear", $outFile);
# compare files
$x = compare_files( $input, $clear, 1);
if ( $x == 0 )
{
print( "SUCCESS - files match: $input, $clear\n");
print( OUT "SUCCESS - files match: $input, $clear\n");
}
else
{
print( "ERROR: files don't match\n");
print( OUT "ERROR: files don't match\n");
}
do_wait();
} # end foreach
# delete the temporary files
unlink($cipher);
unlink($clear);
}
############################################################################
sub pem_tests
{
my $i;
my $tmp_out;
my $outFile = "$output_path\\pem.out";
my %pem_tests = (
"crl" => "testcrl.pem",
"pkcs7" => "testp7.pem",
"req" => "testreq2.pem",
"rsa" => "testrsa.pem",
"x509" => "testx509.pem",
"x509" => "v3-cert1.pem",
"sess_id" => "testsid.pem" );
print( "\nRUNNING PEM TESTS:\n\n");
print( OUT "\n========================================================\n");
print( OUT "PEM TESTS:\n\n");
foreach $i (keys(%pem_tests))
{
log_desc( "Testing: $i");
my $input = "$test_path\\$pem_tests{$i}";
$tmp_out = "$output_path\\$pem_tests{$i}";
if ($i ne "req" )
{
system("openssl2 $i -in $input -out $tmp_out > $outFile");
log_output( "openssl2 $i -in $input -out $tmp_out", $outFile);
}
else
{
system("openssl2 $i -in $input -out $tmp_out -config $OpenSSL_config > $outFile");
log_output( "openssl2 $i -in $input -out $tmp_out -config $OpenSSL_config", $outFile );
}
$x = compare_files( $input, $tmp_out);
if ( $x == 0 )
{
print( "SUCCESS - files match: $input, $tmp_out\n");
print( OUT "SUCCESS - files match: $input, $tmp_out\n");
}
else
{
print( "ERROR: files don't match\n");
print( OUT "ERROR: files don't match\n");
}
do_wait();
} # end foreach
}
############################################################################
sub verify_tests
{
my $i;
my $outFile = "$output_path\\verify.out";
my @cert_files = <$cert_path\\*.pem>;
print( "\nRUNNING VERIFY TESTS:\n\n");
print( OUT "\n========================================================\n");
print( OUT "VERIFY TESTS:\n\n");
make_tmp_cert_file();
foreach $i (@cert_files)
{
system("openssl2 verify -CAfile $tmp_cert $i >$outFile");
log_desc("Verifying cert: $i");
log_output("openssl2 verify -CAfile $tmp_cert $i", $outFile);
}
}
############################################################################
sub ssl_tests
{
my $outFile = "$output_path\\ssl_tst.out";
my($CAcert) = "$output_path\\certCA.ss";
my($Ukey) = "$output_path\\keyU.ss";
my($Ucert) = "$output_path\\certU.ss";
my($ssltest)= "ssltest -key $Ukey -cert $Ucert -c_key $Ukey -c_cert $Ucert -CAfile $CAcert";
print( "\nRUNNING SSL TESTS:\n\n");
print( OUT "\n========================================================\n");
print( OUT "SSL TESTS:\n\n");
system("ssltest -ssl2 >$outFile");
log_desc("Testing sslv2:");
log_output("ssltest -ssl2", $outFile);
system("$ssltest -ssl2 -server_auth >$outFile");
log_desc("Testing sslv2 with server authentication:");
log_output("$ssltest -ssl2 -server_auth", $outFile);
system("$ssltest -ssl2 -client_auth >$outFile");
log_desc("Testing sslv2 with client authentication:");
log_output("$ssltest -ssl2 -client_auth", $outFile);
system("$ssltest -ssl2 -server_auth -client_auth >$outFile");
log_desc("Testing sslv2 with both client and server authentication:");
log_output("$ssltest -ssl2 -server_auth -client_auth", $outFile);
system("ssltest -ssl3 >$outFile");
log_desc("Testing sslv3:");
log_output("ssltest -ssl3", $outFile);
system("$ssltest -ssl3 -server_auth >$outFile");
log_desc("Testing sslv3 with server authentication:");
log_output("$ssltest -ssl3 -server_auth", $outFile);
system("$ssltest -ssl3 -client_auth >$outFile");
log_desc("Testing sslv3 with client authentication:");
log_output("$ssltest -ssl3 -client_auth", $outFile);
system("$ssltest -ssl3 -server_auth -client_auth >$outFile");
log_desc("Testing sslv3 with both client and server authentication:");
log_output("$ssltest -ssl3 -server_auth -client_auth", $outFile);
system("ssltest >$outFile");
log_desc("Testing sslv2/sslv3:");
log_output("ssltest", $outFile);
system("$ssltest -server_auth >$outFile");
log_desc("Testing sslv2/sslv3 with server authentication:");
log_output("$ssltest -server_auth", $outFile);
system("$ssltest -client_auth >$outFile");
log_desc("Testing sslv2/sslv3 with client authentication:");
log_output("$ssltest -client_auth ", $outFile);
system("$ssltest -server_auth -client_auth >$outFile");
log_desc("Testing sslv2/sslv3 with both client and server authentication:");
log_output("$ssltest -server_auth -client_auth", $outFile);
system("ssltest -bio_pair -ssl2 >$outFile");
log_desc("Testing sslv2 via BIO pair:");
log_output("ssltest -bio_pair -ssl2", $outFile);
system("ssltest -bio_pair -dhe1024dsa -v >$outFile");
log_desc("Testing sslv2/sslv3 with 1024 bit DHE via BIO pair:");
log_output("ssltest -bio_pair -dhe1024dsa -v", $outFile);
system("$ssltest -bio_pair -ssl2 -server_auth >$outFile");
log_desc("Testing sslv2 with server authentication via BIO pair:");
log_output("$ssltest -bio_pair -ssl2 -server_auth", $outFile);
system("$ssltest -bio_pair -ssl2 -client_auth >$outFile");
log_desc("Testing sslv2 with client authentication via BIO pair:");
log_output("$ssltest -bio_pair -ssl2 -client_auth", $outFile);
system("$ssltest -bio_pair -ssl2 -server_auth -client_auth >$outFile");
log_desc("Testing sslv2 with both client and server authentication via BIO pair:");
log_output("$ssltest -bio_pair -ssl2 -server_auth -client_auth", $outFile);
system("ssltest -bio_pair -ssl3 >$outFile");
log_desc("Testing sslv3 via BIO pair:");
log_output("ssltest -bio_pair -ssl3", $outFile);
system("$ssltest -bio_pair -ssl3 -server_auth >$outFile");
log_desc("Testing sslv3 with server authentication via BIO pair:");
log_output("$ssltest -bio_pair -ssl3 -server_auth", $outFile);
system("$ssltest -bio_pair -ssl3 -client_auth >$outFile");
log_desc("Testing sslv3 with client authentication via BIO pair:");
log_output("$ssltest -bio_pair -ssl3 -client_auth", $outFile);
system("$ssltest -bio_pair -ssl3 -server_auth -client_auth >$outFile");
log_desc("Testing sslv3 with both client and server authentication via BIO pair:");
log_output("$ssltest -bio_pair -ssl3 -server_auth -client_auth", $outFile);
system("ssltest -bio_pair >$outFile");
log_desc("Testing sslv2/sslv3 via BIO pair:");
log_output("ssltest -bio_pair", $outFile);
system("$ssltest -bio_pair -server_auth >$outFile");
log_desc("Testing sslv2/sslv3 with server authentication via BIO pair:");
log_output("$ssltest -bio_pair -server_auth", $outFile);
system("$ssltest -bio_pair -client_auth >$outFile");
log_desc("Testing sslv2/sslv3 with client authentication via BIO pair:");
log_output("$ssltest -bio_pair -client_auth", $outFile);
system("$ssltest -bio_pair -server_auth -client_auth >$outFile");
log_desc("Testing sslv2/sslv3 with both client and server authentication via BIO pair:");
log_output("$ssltest -bio_pair -server_auth -client_auth", $outFile);
}
############################################################################
sub ca_tests
{
my $outFile = "$output_path\\ca_tst.out";
my($CAkey) = "$output_path\\keyCA.ss";
my($CAcert) = "$output_path\\certCA.ss";
my($CAserial) = "$output_path\\certCA.srl";
my($CAreq) = "$output_path\\reqCA.ss";
my($CAreq2) = "$output_path\\req2CA.ss";
my($CAconf) = "$test_path\\CAss.cnf";
my($Uconf) = "$test_path\\Uss.cnf";
my($Ukey) = "$output_path\\keyU.ss";
my($Ureq) = "$output_path\\reqU.ss";
my($Ucert) = "$output_path\\certU.ss";
print( "\nRUNNING CA TESTS:\n\n");
print( OUT "\n========================================================\n");
print( OUT "CA TESTS:\n");
system("openssl2 req -config $CAconf -out $CAreq -keyout $CAkey -new >$outFile");
log_desc("Make a certificate request using req:");
log_output("openssl2 req -config $CAconf -out $CAreq -keyout $CAkey -new", $outFile);
system("openssl2 x509 -CAcreateserial -in $CAreq -days 30 -req -out $CAcert -signkey $CAkey >$outFile");
log_desc("Convert the certificate request into a self signed certificate using x509:");
log_output("openssl2 x509 -CAcreateserial -in $CAreq -days 30 -req -out $CAcert -signkey $CAkey", $outFile);
system("openssl2 x509 -in $CAcert -x509toreq -signkey $CAkey -out $CAreq2 >$outFile");
log_desc("Convert a certificate into a certificate request using 'x509':");
log_output("openssl2 x509 -in $CAcert -x509toreq -signkey $CAkey -out $CAreq2", $outFile);
system("openssl2 req -config $OpenSSL_config -verify -in $CAreq -noout >$outFile");
log_output("openssl2 req -config $OpenSSL_config -verify -in $CAreq -noout", $outFile);
system("openssl2 req -config $OpenSSL_config -verify -in $CAreq2 -noout >$outFile");
log_output( "openssl2 req -config $OpenSSL_config -verify -in $CAreq2 -noout", $outFile);
system("openssl2 verify -CAfile $CAcert $CAcert >$outFile");
log_output("openssl2 verify -CAfile $CAcert $CAcert", $outFile);
system("openssl2 req -config $Uconf -out $Ureq -keyout $Ukey -new >$outFile");
log_desc("Make another certificate request using req:");
log_output("openssl2 req -config $Uconf -out $Ureq -keyout $Ukey -new", $outFile);
system("openssl2 x509 -CAcreateserial -in $Ureq -days 30 -req -out $Ucert -CA $CAcert -CAkey $CAkey -CAserial $CAserial >$outFile");
log_desc("Sign certificate request with the just created CA via x509:");
log_output("openssl2 x509 -CAcreateserial -in $Ureq -days 30 -req -out $Ucert -CA $CAcert -CAkey $CAkey -CAserial $CAserial", $outFile);
system("openssl2 verify -CAfile $CAcert $Ucert >$outFile");
log_output("openssl2 verify -CAfile $CAcert $Ucert", $outFile);
system("openssl2 x509 -subject -issuer -startdate -enddate -noout -in $Ucert >$outFile");
log_desc("Certificate details");
log_output("openssl2 x509 -subject -issuer -startdate -enddate -noout -in $Ucert", $outFile);
print(OUT "-- \n");
print(OUT "The generated CA certificate is $CAcert\n");
print(OUT "The generated CA private key is $CAkey\n");
print(OUT "The current CA signing serial number is in $CAserial\n");
print(OUT "The generated user certificate is $Ucert\n");
print(OUT "The generated user private key is $Ukey\n");
print(OUT "--\n");
}
############################################################################
sub log_output( $ $ )
{
my( $desc, $file ) = @_;
my($error) = 0;
my($key);
my($msg);
if ($desc)
{
print("$desc\n");
print(OUT "$desc\n");
}
# loop waiting for test program to complete
while ( stat($file) == 0)
{ print(". "); sleep(1); }
# copy test output to log file
open(IN, "<$file");
while (<IN>)
{
print(OUT $_);
if ( $_ =~ /ERROR/ )
{
$error = 1;
}
}
# close and delete the temporary test output file
close(IN);
unlink($file);
if ( $error == 0 )
{
$msg = "Test Succeeded";
}
else
{
$msg = "Test Failed";
}
print(OUT "$msg\n");
if ($pause)
{
print("$msg - press ENTER to continue...");
$key = getc;
print("\n");
}
# Several of the testing scripts run a loop loading the
# same NLM with different options.
# On slow NetWare machines there appears to be some delay in the
# OS actually unloading the test nlms and the OS complains about.
# the NLM already being loaded. This additional pause is to
# to help provide a little more time for unloading before trying to
# load again.
sleep(1);
}
############################################################################
sub log_desc( $ )
{
my( $desc ) = @_;
print("\n");
print("$desc\n");
print(OUT "\n");
print(OUT "$desc\n");
print(OUT "======================================\n");
}
############################################################################
sub compare_files( $ $ $ )
{
my( $file1, $file2, $binary ) = @_;
my( $n1, $n2, $b1, $b2 );
my($ret) = 1;
open(IN0, $file1) || die "\nunable to open $file1\n";
open(IN1, $file2) || die "\nunable to open $file2\n";
if ($binary)
{
binmode IN0;
binmode IN1;
}
for (;;)
{
$n1 = read(IN0, $b1, 512);
$n2 = read(IN1, $b2, 512);
if ($n1 != $n2) {last;}
if ($b1 != $b2) {last;}
if ($n1 == 0)
{
$ret = 0;
last;
}
}
close(IN0);
close(IN1);
return($ret);
}
############################################################################
sub do_wait()
{
my($key);
if ($pause)
{
print("Press ENTER to continue...");
$key = getc;
print("\n");
}
}
############################################################################
sub make_tmp_cert_file()
{
my @cert_files = <$cert_path\\*.pem>;
# delete the file if it already exists
unlink($tmp_cert);
open( TMP_CERT, ">$tmp_cert") || die "\nunable to open $tmp_cert\n";
print("building temporary cert file\n");
# create a temporary cert file that contains all the certs
foreach $i (@cert_files)
{
open( IN_CERT, $i ) || die "\nunable to open $i\n";
for(;;)
{
$n = sysread(IN_CERT, $data, 1024);
if ($n == 0)
{
close(IN_CERT);
last;
};
syswrite(TMP_CERT, $data, $n);
}
}
close( TMP_CERT );
}

View File

@@ -1,254 +0,0 @@
An initial review of the OpenSSL code was done to determine how many
global variables where present. The idea was to determine the amount of
work required to pull the globals into an instance data structure in
order to build a Library NLM for NetWare. This file contains the results
of the review. Each file is listed along with the globals in the file.
The initial review was done very quickly so this list is probably
not a comprehensive list.
cryptlib.c
===========================================
static STACK *app_locks=NULL;
static STACK_OF(CRYPTO_dynlock) *dyn_locks=NULL;
static void (MS_FAR *locking_callback)(int mode,int type,
const char *file,int line)=NULL;
static int (MS_FAR *add_lock_callback)(int *pointer,int amount,
int type,const char *file,int line)=NULL;
static unsigned long (MS_FAR *id_callback)(void)=NULL;
static struct CRYPTO_dynlock_value *(MS_FAR *dynlock_create_callback)
(const char *file,int line)=NULL;
static void (MS_FAR *dynlock_lock_callback)(int mode,
struct CRYPTO_dynlock_value *l, const char *file,int line)=NULL;
static void (MS_FAR *dynlock_destroy_callback)(struct CRYPTO_dynlock_value *l,
const char *file,int line)=NULL;
mem.c
===========================================
static int allow_customize = 1; /* we provide flexible functions for */
static int allow_customize_debug = 1;/* exchanging memory-related functions at
/* may be changed as long as `allow_customize' is set */
static void *(*malloc_locked_func)(size_t) = malloc;
static void (*free_locked_func)(void *) = free;
static void *(*malloc_func)(size_t) = malloc;
static void *(*realloc_func)(void *, size_t)= realloc;
static void (*free_func)(void *) = free;
/* use default functions from mem_dbg.c */
static void (*malloc_debug_func)(void *,int,const char *,int,int)
= CRYPTO_dbg_malloc;
static void (*realloc_debug_func)(void *,void *,int,const char *,int,int)
= CRYPTO_dbg_realloc;
static void (*free_debug_func)(void *,int) = CRYPTO_dbg_free;
static void (*set_debug_options_func)(long) = CRYPTO_dbg_set_options;
static long (*get_debug_options_func)(void) = CRYPTO_dbg_get_options;
mem_dbg.c
===========================================
static int mh_mode=CRYPTO_MEM_CHECK_OFF;
static unsigned long order = 0; /* number of memory requests */
static LHASH *mh=NULL; /* hash-table of memory requests (address as key) */
static LHASH *amih=NULL; /* hash-table with those app_mem_info_st's */
static long options = /* extra information to be recorded */
static unsigned long disabling_thread = 0;
err.c
===========================================
static LHASH *error_hash=NULL;
static LHASH *thread_hash=NULL;
several files have routines with static "init" to track if error strings
have been loaded ( may not want seperate error strings for each process )
The "init" variable can't be left "global" because the error has is a ptr
that is malloc'ed. The malloc'ed error has is dependant on the "init"
vars.
files:
pem_err.c
cpt_err.c
pk12err.c
asn1_err.c
bio_err.c
bn_err.c
buf_err.c
comp_err.c
conf_err.c
cpt_err.c
dh_err.c
dsa_err.c
dso_err.c
evp_err.c
obj_err.c
pkcs7err.c
rand_err.c
rsa_err.c
rsar_err.c
ssl_err.c
x509_err.c
v3err.c
err.c
These file have similar "init" globals but they are for other stuff not
error strings:
bn_lib.c
ecc_enc.c
s23_clnt.c
s23_meth.c
s23_srvr.c
s2_clnt.c
s2_lib.c
s2_meth.c
s2_srvr.c
s3_clnt.c
s3_lib.c
s3_srvr.c
t1_clnt.c
t1_meth.c
t1_srvr.c
rand_lib.c
===========================================
static RAND_METHOD *rand_meth= &rand_ssleay_meth;
md_rand.c
===========================================
static int state_num=0,state_index=0;
static unsigned char state[STATE_SIZE+MD_DIGEST_LENGTH];
static unsigned char md[MD_DIGEST_LENGTH];
static long md_count[2]={0,0};
static double entropy=0;
static int initialized=0;
/* This should be set to 1 only when ssleay_rand_add() is called inside
an already locked state, so it doesn't try to lock and thereby cause
a hang. And it should always be reset back to 0 before unlocking. */
static int add_do_not_lock=0;
obj_dat.c
============================================
static int new_nid=NUM_NID;
static LHASH *added=NULL;
b_sock.c
===========================================
static unsigned long BIO_ghbn_hits=0L;
static unsigned long BIO_ghbn_miss=0L;
static struct ghbn_cache_st
{
char name[129];
struct hostent *ent;
unsigned long order;
} ghbn_cache[GHBN_NUM];
static int wsa_init_done=0;
bio_lib.c
===========================================
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *bio_meth=NULL;
static int bio_meth_num=0;
bn_lib.c
========================================
static int bn_limit_bits=0;
static int bn_limit_num=8; /* (1<<bn_limit_bits) */
static int bn_limit_bits_low=0;
static int bn_limit_num_low=8; /* (1<<bn_limit_bits_low) */
static int bn_limit_bits_high=0;
static int bn_limit_num_high=8; /* (1<<bn_limit_bits_high) */
static int bn_limit_bits_mont=0;
static int bn_limit_num_mont=8; /* (1<<bn_limit_bits_mont) */
conf_lib.c
========================================
static CONF_METHOD *default_CONF_method=NULL;
dh_lib.c
========================================
static DH_METHOD *default_DH_method;
static int dh_meth_num = 0;
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dh_meth = NULL;
dsa_lib.c
========================================
static DSA_METHOD *default_DSA_method;
static int dsa_meth_num = 0;
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dsa_meth = NULL;
dso_lib.c
========================================
static DSO_METHOD *default_DSO_meth = NULL;
rsa_lib.c
========================================
static RSA_METHOD *default_RSA_meth=NULL;
static int rsa_meth_num=0;
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *rsa_meth=NULL;
x509_trs.c
=======================================
static int (*default_trust)(int id, X509 *x, int flags) = obj_trust;
static STACK_OF(X509_TRUST) *trtable = NULL;
x509_req.c
=======================================
static int *ext_nids = ext_nid_list;
o_names.c
======================================
static LHASH *names_lh=NULL;
static STACK_OF(NAME_FUNCS) *name_funcs_stack;
static int free_type;
static int names_type_num=OBJ_NAME_TYPE_NUM;
th-lock.c - NEED to add support for locking for NetWare
==============================================
static long *lock_count;
(other platform specific globals)
x_x509.c
==============================================
static int x509_meth_num = 0;
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *x509_meth = NULL;
evp_pbe.c
============================================
static STACK *pbe_algs;
evp_key.c
============================================
static char prompt_string[80];
ssl_ciph.c
============================================
static STACK_OF(SSL_COMP) *ssl_comp_methods=NULL;
ssl_lib.c
=============================================
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *ssl_meth=NULL;
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *ssl_ctx_meth=NULL;
static int ssl_meth_num=0;
static int ssl_ctx_meth_num=0;
ssl_sess.c
=============================================
static int ssl_session_num=0;
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *ssl_session_meth=NULL;
x509_vfy.c
============================================
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *x509_store_ctx_method=NULL;
static int x509_store_ctx_num=0;

View File

@@ -1,19 +0,0 @@
Contents of the openssl\netware directory
==========================================
Regular files:
readme.txt - this file
do_tests.pl - perl script used to run the OpenSSL tests on NetWare
cpy_tests.bat - batch to to copy test stuff to NetWare server
build.bat - batch file to help with builds
set_env.bat - batch file to help setup build environments
globals.txt - results of initial code review to identify OpenSSL global variables
The following files are generated by the various scripts. They are
recreated each time and it is okay to delete them.
*.def - command files used by Metrowerks linker
*.mak - make files generated by mk1mf.pl

View File

@@ -1,90 +0,0 @@
@echo off
rem ========================================================================
rem Batch file to assist in setting up the necessary enviroment for
rem building OpenSSL for NetWare.
rem
rem usage:
rem set_env [target]
rem
rem target - "netware-clib" - Clib build
rem - "netware-libc" - LibC build
rem
rem
if "a%1" == "a" goto usage
set LIBC_BUILD=
set CLIB_BUILD=
if "%1" == "netware-clib" set CLIB_BUILD=Y
if "%1" == "netware-clib" set LIBC_BUILD=
if "%1" == "netware-libc" set LIBC_BUILD=Y
if "%1" == "netware-libc" set CLIB_BUILD=
rem Location of tools (compiler, linker, etc)
set TOOLS=d:\i_drive\tools
rem If Perl for Win32 is not already in your path, add it here
set PERL_PATH=
rem Define path to the Metrowerks command line tools
rem ( compiler, assembler, linker)
set METROWERKS_PATH=%TOOLS%\codewar\pdk_21\tools\command line tools
rem set METROWERKS_PATH=%TOOLS%\codewar\PDK_40\Other Metrowerks Tools\Command Line Tools
rem If using gnu make define path to utility
set GNU_MAKE_PATH=%TOOLS%\gnu
rem If using ms nmake define path to nmake
set MS_NMAKE_PATH=%TOOLS%\msvc\600\bin
rem If using NASM assembler define path
set NASM_PATH=%TOOLS%\nasm
rem Update path to include tool paths
set path=%path%;%METROWERKS_PATH%
if not "%GNU_MAKE_PATH%" == "" set path=%path%;%GNU_MAKE_PATH%
if not "%MS_NMAKE_PATH%" == "" set path=%path%;%MS_NMAKE_PATH%
if not "%NASM_PATH%" == "" set path=%path%;%NASM_PATH%
if not "%PERL_PATH%" == "" set path=%path%;%PERL_PATH%
rem Set MWCIncludes to location of Novell NDK includes
if "%LIBC_BUILD%" == "Y" set MWCIncludes=%TOOLS%\ndk\libc\include;%TOOLS%\ndk\libc\include\winsock;.\engines
if "%CLIB_BUILD%" == "Y" set MWCIncludes=%TOOLS%\ndk\nwsdk\include\nlm;.\engines
set include=
rem Set Imports to location of Novell NDK import files
if "%LIBC_BUILD%" == "Y" set IMPORTS=%TOOLS%\ndk\libc\imports
if "%CLIB_BUILD%" == "Y" set IMPORTS=%TOOLS%\ndk\nwsdk\imports
rem Set PRELUDE to the absolute path of the prelude object to link with in
rem the Metrowerks NetWare PDK - NOTE: for Clib builds "clibpre.o" is
rem recommended, for LibC NKS builds libcpre.o must be used
if "%LIBC_BUILD%" == "Y" set PRELUDE=%IMPORTS%\libcpre.o
if "%CLIB_BUILD%" == "Y" set PRELUDE=%IMPORTS%\clibpre.o
if "%LIBC_BUILD%" == "Y" echo Enviroment configured for LibC build
if "%LIBC_BUILD%" == "Y" echo use "netware\build.bat netware-libc ..."
if "%CLIB_BUILD%" == "Y" echo Enviroment configured for CLib build
if "%CLIB_BUILD%" == "Y" echo use "netware\build.bat netware-clib ..."
goto end
:usage
rem ===============================================================
echo .
echo . No target build specified!
echo .
echo . usage: set_env [target]
echo .
echo . target - "netware-clib" - Clib build
echo . - "netware-libc" - LibC build
echo .
:end

159
PROBLEMS
View File

@@ -1,19 +1,13 @@
* System libcrypto.dylib and libssl.dylib are used by system ld on MacOS X. * System libcrypto.dylib and libssl.dylib are used by system ld on MacOS X.
[NOTE: This is currently undergoing tests, and may be removed soon]
NOTE: The problem described here only applies when OpenSSL isn't built
with shared library support (i.e. without the "shared" configuration
option). If you build with shared library support, you will have no
problems as long as you set up DYLD_LIBRARY_PATH properly at all times.
This is really a misfeature in ld, which seems to look for .dylib libraries This is really a misfeature in ld, which seems to look for .dylib libraries
along the whole library path before it bothers looking for .a libraries. This along the whole library path before it bothers looking for .a libraries. This
means that -L switches won't matter unless OpenSSL is built with shared means that -L switches won't matter unless OpenSSL is built with shared
library support. library support.
The workaround may be to change the following lines in apps/Makefile and The workaround may be to change the following lines in apps/Makefile.ssl and
test/Makefile: test/Makefile.ssl:
LIBCRYPTO=-L.. -lcrypto LIBCRYPTO=-L.. -lcrypto
LIBSSL=-L.. -lssl LIBSSL=-L.. -lssl
@@ -48,150 +42,17 @@ will interfere with each other and lead to test failure.
The solution is simple for now: don't run parallell make when testing. The solution is simple for now: don't run parallell make when testing.
* Bugs in gcc triggered * Bugs in gcc 3.0 triggered
- According to a problem report, there are bugs in gcc 3.0 that are 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 triggered by some of the code in OpenSSL, more specifically in
PEM_get_EVP_CIPHER_INFO(). The triggering code is the following: PEM_get_EVP_CIPHER_INFO(). The triggering code is the following:
header+=11; header+=11;
if (*header != '4') return(0); header++; if (*header != '4') return(0); header++;
if (*header != ',') return(0); header++; if (*header != ',') return(0); header++;
What happens is that gcc might optimize a little too agressively, and What happens is that gcc might optimize a little too agressively, and
you end up with an extra incrementation when *header != '4'. 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. We recommend that you upgrade gcc to as high a 3.x version as you can.
- According to multiple problem reports, some of our message digest
implementations trigger bug[s] in code optimizer in gcc 3.3 for sparc64
and gcc 2.96 for ppc. Former fails to complete RIPEMD160 test, while
latter - SHA one.
The recomendation is to upgrade your compiler. This naturally applies to
other similar cases.
- There is a subtle Solaris x86-specific gcc run-time environment bug, which
"falls between" OpenSSL [0.9.8 and later], Solaris ld and GCC. The bug
manifests itself as Segmentation Fault upon early application start-up.
The problem can be worked around by patching the environment according to
http://www.openssl.org/~appro/values.c.
* solaris64-sparcv9-cc SHA-1 performance with WorkShop 6 compiler.
As subject suggests SHA-1 might perform poorly (4 times slower)
if compiled with WorkShop 6 compiler and -xarch=v9. The cause for
this seems to be the fact that compiler emits multiplication to
perform shift operations:-( To work the problem around configure
with './Configure solaris64-sparcv9-cc -DMD32_REG_T=int'.
* Problems with hp-parisc2-cc target when used with "no-asm" flag
When using the hp-parisc2-cc target, wrong bignum code is generated.
This is due to the SIXTY_FOUR_BIT build being compiled with the +O3
aggressive optimization.
The problem manifests itself by the BN_kronecker test hanging in an
endless loop. Reason: the BN_kronecker test calls BN_generate_prime()
which itself hangs. The reason could be tracked down to the bn_mul_comba8()
function in bn_asm.c. At some occasions the higher 32bit value of r[7]
is off by 1 (meaning: calculated=shouldbe+1). Further analysis failed,
as no debugger support possible at +O3 and additional fprintf()'s
introduced fixed the bug, therefore it is most likely a bug in the
optimizer.
The bug was found in the BN_kronecker test but may also lead to
failures in other parts of the code.
(See Ticket #426.)
Workaround: modify the target to +O2 when building with no-asm.
* Problems building shared libraries on SCO OpenServer Release 5.0.6
with gcc 2.95.3
The symptoms appear when running the test suite, more specifically
test/ectest, with the following result:
OSSL_LIBPATH="`cd ..; pwd`"; LD_LIBRARY_PATH="$OSSL_LIBPATH:$LD_LIBRARY_PATH"; DYLD_LIBRARY_PATH="$OSSL_LIBPATH:$DYLD_LIBRARY_PATH"; SHLIB_PATH="$OSSL_LIBPATH:$SHLIB_PATH"; LIBPATH="$OSSL_LIBPATH:$LIBPATH"; if [ "debug-sco5-gcc" = "Cygwin" ]; then PATH="${LIBPATH}:$PATH"; fi; export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH LIBPATH PATH; ./ectest
ectest.c:186: ABORT
The cause of the problem seems to be that isxdigit(), called from
BN_hex2bn(), returns 0 on a perfectly legitimate hex digit. Further
investigation shows that any of the isxxx() macros return 0 on any
input. A direct look in the information array that the isxxx() use,
called __ctype, shows that it contains all zeroes...
Taking a look at the newly created libcrypto.so with nm, one can see
that the variable __ctype is defined in libcrypto's .bss (which
explains why it is filled with zeroes):
$ nm -Pg libcrypto.so | grep __ctype
__ctype B 0011659c
__ctype2 U
Curiously, __ctype2 is undefined, in spite of being declared in
/usr/include/ctype.h in exactly the same way as __ctype.
Any information helping to solve this issue would be deeply
appreciated.
NOTE: building non-shared doesn't come with this problem.
* ULTRIX build fails with shell errors, such as "bad substitution"
and "test: argument expected"
The problem is caused by ULTRIX /bin/sh supporting only original
Bourne shell syntax/semantics, and the trouble is that the vast
majority is so accustomed to more modern syntax, that very few
people [if any] would recognize the ancient syntax even as valid.
This inevitably results in non-trivial scripts breaking on ULTRIX,
and OpenSSL isn't an exclusion. Fortunately there is workaround,
hire /bin/ksh to do the job /bin/sh fails to do.
1. Trick make(1) to use /bin/ksh by setting up following environ-
ment variables *prior* you execute ./Configure and make:
PROG_ENV=POSIX
MAKESHELL=/bin/ksh
export PROG_ENV MAKESHELL
or if your shell is csh-compatible:
setenv PROG_ENV POSIX
setenv MAKESHELL /bin/ksh
2. Trick /bin/sh to use alternative expression evaluator. Create
following 'test' script for example in /tmp:
#!/bin/ksh
${0##*/} "$@"
Then 'chmod a+x /tmp/test; ln /tmp/test /tmp/[' and *prepend*
your $PATH with chosen location, e.g. PATH=/tmp:$PATH. Alter-
natively just replace system /bin/test and /bin/[ with the
above script.
* hpux64-ia64-cc fails blowfish test.
Compiler bug, presumably at particular patch level. It should be noted
that same compiler generates correct 32-bit code, a.k.a. hpux-ia64-cc
target. Drop optimization level to +O2 when compiling 64-bit bf_skey.o.
* no-engines generates errors.
Unfortunately, the 'no-engines' configuration option currently doesn't
work properly. Use 'no-hw' and you'll will at least get no hardware
support. We'll see how we fix that on OpenSSL versions past 0.9.8.
* 'make test' fails in BN_sqr [commonly with "error 139" denoting SIGSEGV]
if elder GNU binutils were deployed to link shared libcrypto.so.
As subject suggests the failure is caused by a bug in elder binutils,
either as or ld, and was observed on FreeBSD and Linux. There are two
options. First is naturally to upgrade binutils, the second one - to
reconfigure with additional no-sse2 [or 386] option passed to ./config.
* If configured with ./config no-dso, toolkit still gets linked with -ldl,
which most notably poses a problem when linking with dietlibc.
We don't have framework to associate -ldl with no-dso, therefore the only
way is to edit Makefile right after ./config no-dso and remove -ldl from
EX_LIBS line.

68
README
View File

@@ -1,16 +1,10 @@
OpenSSL 0.9.8f-fips-dev test version OpenSSL 0.9.6h 5 Dec 2002
Copyright (c) 1998-2007 The OpenSSL Project Copyright (c) 1998-2002 The OpenSSL Project
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
All rights reserved. All rights reserved.
WARNING
-------
This version of OpenSSL is an initial port of the FIPS 140-2 code to OpenSSL
0.9.8. See the file README.FIPS for brief usage details.
DESCRIPTION DESCRIPTION
----------- -----------
@@ -20,13 +14,13 @@
protocols as well as a full-strength general purpose cryptography library. protocols as well as a full-strength general purpose cryptography library.
The project is managed by a worldwide community of volunteers that use the The project is managed by a worldwide community of volunteers that use the
Internet to communicate, plan, and develop the OpenSSL toolkit and its Internet to communicate, plan, and develop the OpenSSL toolkit and its
related documentation. related documentation.
OpenSSL is based on the excellent SSLeay library developed from Eric A. Young OpenSSL is based on the excellent SSLeay library developed from Eric A. Young
and Tim J. Hudson. The OpenSSL toolkit is licensed under a dual-license (the and Tim J. Hudson. The OpenSSL toolkit is licensed under a dual-license (the
OpenSSL license plus the SSLeay license) situation, which basically means OpenSSL license plus the SSLeay license) situation, which basically means
that you are free to get and use it for commercial and non-commercial that you are free to get and use it for commercial and non-commercial
purposes as long as you fulfill the conditions of both licenses. purposes as long as you fulfill the conditions of both licenses.
OVERVIEW OVERVIEW
-------- --------
@@ -42,13 +36,12 @@
actually logically part of it. It includes routines for the following: actually logically part of it. It includes routines for the following:
Ciphers Ciphers
libdes - EAY's libdes DES encryption package which was floating libdes - EAY's libdes DES encryption package which has been floating
around the net for a few years, and was then relicensed by around the net for a few years. It includes 15
him as part of SSLeay. It includes 15 'modes/variations' 'modes/variations' of DES (1, 2 and 3 key versions of ecb,
of DES (1, 2 and 3 key versions of ecb, cbc, cfb and ofb; cbc, cfb and ofb; pcbc and a more general form of cfb and
pcbc and a more general form of cfb and ofb) including desx ofb) including desx in cbc mode, a fast crypt(3), and
in cbc mode, a fast crypt(3), and routines to read routines to read passwords from the keyboard.
passwords from the keyboard.
RC4 encryption, RC4 encryption,
RC2 encryption - 4 different modes, ecb, cbc, cfb and ofb. RC2 encryption - 4 different modes, ecb, cbc, cfb and ofb.
Blowfish encryption - 4 different modes, ecb, cbc, cfb and ofb. Blowfish encryption - 4 different modes, ecb, cbc, cfb and ofb.
@@ -60,11 +53,11 @@
MDC2 message digest. A DES based hash that is popular on smart cards. MDC2 message digest. A DES based hash that is popular on smart cards.
Public Key Public Key
RSA encryption/decryption/generation. RSA encryption/decryption/generation.
There is no limit on the number of bits. There is no limit on the number of bits.
DSA encryption/decryption/generation. DSA encryption/decryption/generation.
There is no limit on the number of bits. There is no limit on the number of bits.
Diffie-Hellman key-exchange/key generation. Diffie-Hellman key-exchange/key generation.
There is no limit on the number of bits. There is no limit on the number of bits.
X.509v3 certificates X.509v3 certificates
@@ -87,16 +80,16 @@
A simple stack. A simple stack.
A Configuration loader that uses a format similar to MS .ini files. A Configuration loader that uses a format similar to MS .ini files.
openssl: openssl:
A command line tool that can be used for: A command line tool that can be used for:
Creation of RSA, DH and DSA key parameters Creation of RSA, DH and DSA key parameters
Creation of X.509 certificates, CSRs and CRLs Creation of X.509 certificates, CSRs and CRLs
Calculation of Message Digests Calculation of Message Digests
Encryption and Decryption with Ciphers Encryption and Decryption with Ciphers
SSL/TLS Client and Server Tests SSL/TLS Client and Server Tests
Handling of S/MIME signed or encrypted mail Handling of S/MIME signed or encrypted mail
PATENTS PATENTS
------- -------
@@ -111,19 +104,13 @@
licensing conditions. Their web page is http://www.rsasecurity.com/. licensing conditions. Their web page is http://www.rsasecurity.com/.
RC4 is a trademark of RSA Security, so use of this label should perhaps RC4 is a trademark of RSA Security, so use of this label should perhaps
only be used with RSA Security's permission. only be used with RSA Security's permission.
The IDEA algorithm is patented by Ascom in Austria, France, Germany, Italy, The IDEA algorithm is patented by Ascom in Austria, France, Germany, Italy,
Japan, the Netherlands, Spain, Sweden, Switzerland, UK and the USA. They Japan, the Netherlands, Spain, Sweden, Switzerland, UK and the USA. They
should be contacted if that algorithm is to be used; their web page is should be contacted if that algorithm is to be used; their web page is
http://www.ascom.ch/. http://www.ascom.ch/.
The MDC2 algorithm is patented by IBM.
NTT and Mitsubishi have patents and pending patents on the Camellia
algorithm, but allow use at no charge without requiring an explicit
licensing agreement: http://info.isl.ntt.co.jp/crypt/eng/info/chiteki.html
INSTALLATION INSTALLATION
------------ ------------
@@ -142,7 +129,7 @@
or application author. We try to collect those in doc/PROBLEMS, with current or application author. We try to collect those in doc/PROBLEMS, with current
thoughts on how they should be solved in a future of OpenSSL. thoughts on how they should be solved in a future of OpenSSL.
SUPPORT SUPPORT
------- -------
If you have any problems with OpenSSL then please take the following steps If you have any problems with OpenSSL then please take the following steps
@@ -151,7 +138,7 @@
- Download the current snapshot from ftp://ftp.openssl.org/snapshot/ - Download the current snapshot from ftp://ftp.openssl.org/snapshot/
to see if the problem has already been addressed to see if the problem has already been addressed
- Remove ASM versions of libraries - Remove ASM versions of libraries
- Remove compiler optimisation flags - Remove compiler optimisation flags
If you wish to report a bug then please include the following information in If you wish to report a bug then please include the following information in
any bug report: any bug report:
@@ -167,7 +154,7 @@
- Stack Traceback (if the application dumps core) - Stack Traceback (if the application dumps core)
Report the bug to the OpenSSL project via the Request Tracker Report the bug to the OpenSSL project via the Request Tracker
(http://www.openssl.org/support/rt2.html) by mail to: (http://www.openssl.org/rt2.html) by mail to:
openssl-bugs@openssl.org openssl-bugs@openssl.org
@@ -186,17 +173,11 @@
textual explanation of what your patch does. textual explanation of what your patch does.
Note: For legal reasons, contributions from the US can be accepted only Note: For legal reasons, contributions from the US can be accepted only
if a TSU notification and a copy of the patch are sent to crypt@bis.doc.gov if a TSA notification and a copy of the patch is sent to crypt@bis.doc.gov;
(formerly BXA) with a copy to the ENC Encryption Request Coordinator; see http://www.bis.doc.gov/Encryption/PubAvailEncSourceCodeNofify.html [sic]
please take some time to look at and http://w3.access.gpo.gov/bis/ear/pdf/740.pdf (EAR Section 740.13(e)).
http://www.bis.doc.gov/Encryption/PubAvailEncSourceCodeNofify.html [sic]
and
http://w3.access.gpo.gov/bis/ear/pdf/740.pdf (EAR Section 740.13(e))
for the details. If "your encryption source code is too large to serve as
an email attachment", they are glad to receive it by fax instead; hope you
have a cheap long-distance plan.
Our preferred format for changes is "diff -u" output. You might The preferred format for changes is "diff -u" output. You might
generate it like this: generate it like this:
# cd openssl-work # cd openssl-work
@@ -204,4 +185,3 @@
# ./Configure dist; make clean # ./Configure dist; make clean
# cd .. # cd ..
# diff -ur openssl-orig openssl-work > mydiffs.patch # diff -ur openssl-orig openssl-work > mydiffs.patch

View File

@@ -1,187 +0,0 @@
OpenSSL ASN1 Revision
=====================
This document describes some of the issues relating to the new ASN1 code.
Previous OpenSSL ASN1 problems
=============================
OK why did the OpenSSL ASN1 code need revising in the first place? Well
there are lots of reasons some of which are included below...
1. The code is difficult to read and write. For every single ASN1 structure
(e.g. SEQUENCE) four functions need to be written for new, free, encode and
decode operations. This is a very painful and error prone operation. Very few
people have ever written any OpenSSL ASN1 and those that have usually wish
they hadn't.
2. Partly because of 1. the code is bloated and takes up a disproportionate
amount of space. The SEQUENCE encoder is particularly bad: it essentially
contains two copies of the same operation, one to compute the SEQUENCE length
and the other to encode it.
3. The code is memory based: that is it expects to be able to read the whole
structure from memory. This is fine for small structures but if you have a
(say) 1Gb PKCS#7 signedData structure it isn't such a good idea...
4. The code for the ASN1 IMPLICIT tag is evil. It is handled by temporarily
changing the tag to the expected one, attempting to read it, then changing it
back again. This means that decode buffers have to be writable even though they
are ultimately unchanged. This gets in the way of constification.
5. The handling of EXPLICIT isn't much better. It adds a chunk of code into
the decoder and encoder for every EXPLICIT tag.
6. APPLICATION and PRIVATE tags aren't even supported at all.
7. Even IMPLICIT isn't complete: there is no support for implicitly tagged
types that are not OPTIONAL.
8. Much of the code assumes that a tag will fit in a single octet. This is
only true if the tag is 30 or less (mercifully tags over 30 are rare).
9. The ASN1 CHOICE type has to be largely handled manually, there aren't any
macros that properly support it.
10. Encoders have no concept of OPTIONAL and have no error checking. If the
passed structure contains a NULL in a mandatory field it will not be encoded,
resulting in an invalid structure.
11. It is tricky to add ASN1 encoders and decoders to external applications.
Template model
==============
One of the major problems with revision is the sheer volume of the ASN1 code.
Attempts to change (for example) the IMPLICIT behaviour would result in a
modification of *every* single decode function.
I decided to adopt a template based approach. I'm using the term 'template'
in a manner similar to SNACC templates: it has nothing to do with C++
templates.
A template is a description of an ASN1 module as several constant C structures.
It describes in a machine readable way exactly how the ASN1 structure should
behave. If this template contains enough detail then it is possible to write
versions of new, free, encode, decode (and possibly others operations) that
operate on templates.
Instead of having to write code to handle each operation only a single
template needs to be written. If new operations are needed (such as a 'print'
operation) only a single new template based function needs to be written
which will then automatically handle all existing templates.
Plans for revision
==================
The revision will consist of the following steps. Other than the first two
these can be handled in any order.
o Design and write template new, free, encode and decode operations, initially
memory based. *DONE*
o Convert existing ASN1 code to template form. *IN PROGRESS*
o Convert an existing ASN1 compiler (probably SNACC) to output templates
in OpenSSL form.
o Add support for BIO based ASN1 encoders and decoders to handle large
structures, initially blocking I/O.
o Add support for non blocking I/O: this is quite a bit harder than blocking
I/O.
o Add new ASN1 structures, such as OCSP, CRMF, S/MIME v3 (CMS), attribute
certificates etc etc.
Description of major changes
============================
The BOOLEAN type now takes three values. 0xff is TRUE, 0 is FALSE and -1 is
absent. The meaning of absent depends on the context. If for example the
boolean type is DEFAULT FALSE (as in the case of the critical flag for
certificate extensions) then -1 is FALSE, if DEFAULT TRUE then -1 is TRUE.
Usually the value will only ever be read via an API which will hide this from
an application.
There is an evil bug in the old ASN1 code that mishandles OPTIONAL with
SEQUENCE OF or SET OF. These are both implemented as a STACK structure. The
old code would omit the structure if the STACK was NULL (which is fine) or if
it had zero elements (which is NOT OK). This causes problems because an empty
SEQUENCE OF or SET OF will result in an empty STACK when it is decoded but when
it is encoded it will be omitted resulting in different encodings. The new code
only omits the encoding if the STACK is NULL, if it contains zero elements it
is encoded and empty. There is an additional problem though: because an empty
STACK was omitted, sometimes the corresponding *_new() function would
initialize the STACK to empty so an application could immediately use it, if
this is done with the new code (i.e. a NULL) it wont work. Therefore a new
STACK should be allocated first. One instance of this is the X509_CRL list of
revoked certificates: a helper function X509_CRL_add0_revoked() has been added
for this purpose.
The X509_ATTRIBUTE structure used to have an element called 'set' which took
the value 1 if the attribute value was a SET OF or 0 if it was a single. Due
to the behaviour of CHOICE in the new code this has been changed to a field
called 'single' which is 0 for a SET OF and 1 for single. The old field has
been deleted to deliberately break source compatibility. Since this structure
is normally accessed via higher level functions this shouldn't break too much.
The X509_REQ_INFO certificate request info structure no longer has a field
called 'req_kludge'. This used to be set to 1 if the attributes field was
(incorrectly) omitted. You can check to see if the field is omitted now by
checking if the attributes field is NULL. Similarly if you need to omit
the field then free attributes and set it to NULL.
The top level 'detached' field in the PKCS7 structure is no longer set when
a PKCS#7 structure is read in. PKCS7_is_detached() should be called instead.
The behaviour of PKCS7_get_detached() is unaffected.
The values of 'type' in the GENERAL_NAME structure have changed. This is
because the old code use the ASN1 initial octet as the selector. The new
code uses the index in the ASN1_CHOICE template.
The DIST_POINT_NAME structure has changed to be a true CHOICE type.
typedef struct DIST_POINT_NAME_st {
int type;
union {
STACK_OF(GENERAL_NAME) *fullname;
STACK_OF(X509_NAME_ENTRY) *relativename;
} name;
} DIST_POINT_NAME;
This means that name.fullname or name.relativename should be set
and type reflects the option. That is if name.fullname is set then
type is 0 and if name.relativename is set type is 1.
With the old code using the i2d functions would typically involve:
unsigned char *buf, *p;
int len;
/* Find length of encoding */
len = i2d_SOMETHING(x, NULL);
/* Allocate buffer */
buf = OPENSSL_malloc(len);
if(buf == NULL) {
/* Malloc error */
}
/* Use temp variable because &p gets updated to point to end of
* encoding.
*/
p = buf;
i2d_SOMETHING(x, &p);
Using the new i2d you can also do:
unsigned char *buf = NULL;
int len;
len = i2d_SOMETHING(x, &buf);
if(len < 0) {
/* Malloc error */
}
and it will automatically allocate and populate a buffer with the
encoding. After this call 'buf' will point to the start of the
encoding which is len bytes long.

View File

@@ -1,289 +1,63 @@
ENGINE ENGINE
====== ======
With OpenSSL 0.9.6, a new component was added to support alternative With OpenSSL 0.9.6, a new component has been added to support external
cryptography implementations, most commonly for interfacing with external crypto devices, for example accelerator cards. The component is called
crypto devices (eg. accelerator cards). This component is called ENGINE, ENGINE, and has still a pretty experimental status and almost no
and its presence in OpenSSL 0.9.6 (and subsequent bug-fix releases) documentation. It's designed to be fairly easily extensible by the
caused a little confusion as 0.9.6** releases were rolled in two calling programs.
versions, a "standard" and an "engine" version. In development for 0.9.7,
the ENGINE code has been merged into the main branch and will be present
in the standard releases from 0.9.7 forwards.
There are currently built-in ENGINE implementations for the following There's currently built-in support for the following crypto devices:
crypto devices:
o CryptoSwift o CryptoSwift
o Compaq Atalla o Compaq Atalla
o nCipher CHIL o nCipher CHIL
o Nuron
o Broadcom uBSec
In addition, dynamic binding to external ENGINE implementations is now A number of things are still needed and are being worked on:
provided by a special ENGINE called "dynamic". See the "DYNAMIC ENGINE"
section below for details.
At this stage, a number of things are still needed and are being worked on: o An openssl utility command to handle or at least check available
engines.
1 Integration of EVP support. o A better way of handling the methods that are handled by the
2 Configuration support. engines.
3 Documentation! o Documentation!
1 With respect to EVP, this relates to support for ciphers and digests in
the ENGINE model so that alternative implementations of existing
algorithms/modes (or previously unimplemented ones) can be provided by
ENGINE implementations.
2 Configuration support currently exists in the ENGINE API itself, in the
form of "control commands". These allow an application to expose to the
user/admin the set of commands and parameter types a given ENGINE
implementation supports, and for an application to directly feed string
based input to those ENGINEs, in the form of name-value pairs. This is an
extensible way for ENGINEs to define their own "configuration" mechanisms
that are specific to a given ENGINE (eg. for a particular hardware
device) but that should be consistent across *all* OpenSSL-based
applications when they use that ENGINE. Work is in progress (or at least
in planning) for supporting these control commands from the CONF (or
NCONF) code so that applications using OpenSSL's existing configuration
file format can have ENGINE settings specified in much the same way.
Presently however, applications must use the ENGINE API itself to provide
such functionality. To see first hand the types of commands available
with the various compiled-in ENGINEs (see further down for dynamic
ENGINEs), use the "engine" openssl utility with full verbosity, ie;
openssl engine -vvvv
3 Documentation? Volunteers welcome! The source code is reasonably well
self-documenting, but some summaries and usage instructions are needed -
moreover, they are needed in the same POD format the existing OpenSSL
documentation is provided in. Any complete or incomplete contributions
would help make this happen.
STABILITY & BUG-REPORTS
=======================
What already exists is fairly stable as far as it has been tested, but What already exists is fairly stable as far as it has been tested, but
the test base has been a bit small most of the time. For the most part, the test base has been a bit small most of the time.
the vendors of the devices these ENGINEs support have contributed to the
development and/or testing of the implementations, and *usually* (with no
guarantees) have experience in using the ENGINE support to drive their
devices from common OpenSSL-based applications. Bugs and/or inexplicable
behaviour in using a specific ENGINE implementation should be sent to the
author of that implementation (if it is mentioned in the corresponding C
file), and in the case of implementations for commercial hardware
devices, also through whatever vendor support channels are available. If
none of this is possible, or the problem seems to be something about the
ENGINE API itself (ie. not necessarily specific to a particular ENGINE
implementation) then you should mail complete details to the relevant
OpenSSL mailing list. For a definition of "complete details", refer to
the OpenSSL "README" file. As for which list to send it to;
openssl-users: if you are *using* the ENGINE abstraction, either in an Because of this experimental status and what's lacking, the ENGINE
pre-compiled application or in your own application code. component is not yet part of the default OpenSSL distribution. However,
we have made a separate kit for those who want to try this out, to be
found in the same places as the default OpenSSL distribution, but with
"-engine-" being part of the kit file name. For example, version 0.9.6
is distributed in the following two files:
openssl-dev: if you are discussing problems with OpenSSL source code. openssl-0.9.6.tar.gz
openssl-engine-0.9.6.tar.gz
USAGE NOTES
===== =====
The default "openssl" ENGINE is always chosen when performing crypto openssl-engine-0.9.6.tar.gz does not depend on openssl-0.9.6.tar, you do
operations unless you specify otherwise. You must actively tell the not need to download both.
openssl utility commands to use anything else through a new command line
switch called "-engine". Also, if you want to use the ENGINE support in
your own code to do something similar, you must likewise explicitly
select the ENGINE implementation you want.
Depending on the type of hardware, system, and configuration, "settings" openssl-engine-0.9.6.tar.gz is usable even if you don't have an external
may need to be applied to an ENGINE for it to function as expected/hoped. crypto device. The internal OpenSSL functions are contained in the
The recommended way of doing this is for the application to support engine "openssl", and will be used by default.
ENGINE "control commands" so that each ENGINE implementation can provide
whatever configuration primitives it might require and the application
can allow the user/admin (and thus the hardware vendor's support desk
also) to provide any such input directly to the ENGINE implementation.
This way, applications do not need to know anything specific to any
device, they only need to provide the means to carry such user/admin
input through to the ENGINE in question. Ie. this connects *you* (and
your helpdesk) to the specific ENGINE implementation (and device), and
allows application authors to not get buried in hassle supporting
arbitrary devices they know (and care) nothing about.
A new "openssl" utility, "openssl engine", has been added in that allows No external crypto device is chosen unless you say so. You have actively
for testing and examination of ENGINE implementations. Basic usage tell the openssl utility commands to use it through a new command line
instructions are available by specifying the "-?" command line switch. switch called "-engine". And if you want to use the ENGINE library to
do something similar, you must also explicitly choose an external crypto
device, or the built-in crypto routines will be used, just as in the
default OpenSSL distribution.
DYNAMIC ENGINES
===============
The new "dynamic" ENGINE provides a low-overhead way to support ENGINE
implementations that aren't pre-compiled and linked into OpenSSL-based
applications. This could be because existing compiled-in implementations
have known problems and you wish to use a newer version with an existing
application. It could equally be because the application (or OpenSSL
library) you are using simply doesn't have support for the ENGINE you
wish to use, and the ENGINE provider (eg. hardware vendor) is providing
you with a self-contained implementation in the form of a shared-library.
The other use-case for "dynamic" is with applications that wish to
maintain the smallest foot-print possible and so do not link in various
ENGINE implementations from OpenSSL, but instead leaves you to provide
them, if you want them, in the form of "dynamic"-loadable
shared-libraries. It should be possible for hardware vendors to provide
their own shared-libraries to support arbitrary hardware to work with
applications based on OpenSSL 0.9.7 or later. If you're using an
application based on 0.9.7 (or later) and the support you desire is only
announced for versions later than the one you need, ask the vendor to
backport their ENGINE to the version you need.
How does "dynamic" work?
------------------------
The dynamic ENGINE has a special flag in its implementation such that
every time application code asks for the 'dynamic' ENGINE, it in fact
gets its own copy of it. As such, multi-threaded code (or code that
multiplexes multiple uses of 'dynamic' in a single application in any
way at all) does not get confused by 'dynamic' being used to do many
independent things. Other ENGINEs typically don't do this so there is
only ever 1 ENGINE structure of its type (and reference counts are used
to keep order). The dynamic ENGINE itself provides absolutely no
cryptographic functionality, and any attempt to "initialise" the ENGINE
automatically fails. All it does provide are a few "control commands"
that can be used to control how it will load an external ENGINE
implementation from a shared-library. To see these control commands,
use the command-line;
openssl engine -vvvv dynamic
The "SO_PATH" control command should be used to identify the
shared-library that contains the ENGINE implementation, and "NO_VCHECK"
might possibly be useful if there is a minor version conflict and you
(or a vendor helpdesk) is convinced you can safely ignore it.
"ID" is probably only needed if a shared-library implements
multiple ENGINEs, but if you know the engine id you expect to be using,
it doesn't hurt to specify it (and this provides a sanity check if
nothing else). "LIST_ADD" is only required if you actually wish the
loaded ENGINE to be discoverable by application code later on using the
ENGINE's "id". For most applications, this isn't necessary - but some
application authors may have nifty reasons for using it. The "LOAD"
command is the only one that takes no parameters and is the command
that uses the settings from any previous commands to actually *load*
the shared-library ENGINE implementation. If this command succeeds, the
(copy of the) 'dynamic' ENGINE will magically morph into the ENGINE
that has been loaded from the shared-library. As such, any control
commands supported by the loaded ENGINE could then be executed as per
normal. Eg. if ENGINE "foo" is implemented in the shared-library
"libfoo.so" and it supports some special control command "CMD_FOO", the
following code would load and use it (NB: obviously this code has no
error checking);
ENGINE *e = ENGINE_by_id("dynamic");
ENGINE_ctrl_cmd_string(e, "SO_PATH", "/lib/libfoo.so", 0);
ENGINE_ctrl_cmd_string(e, "ID", "foo", 0);
ENGINE_ctrl_cmd_string(e, "LOAD", NULL, 0);
ENGINE_ctrl_cmd_string(e, "CMD_FOO", "some input data", 0);
For testing, the "openssl engine" utility can be useful for this sort
of thing. For example the above code excerpt would achieve much the
same result as;
openssl engine dynamic \
-pre SO_PATH:/lib/libfoo.so \
-pre ID:foo \
-pre LOAD \
-pre "CMD_FOO:some input data"
Or to simply see the list of commands supported by the "foo" ENGINE;
openssl engine -vvvv dynamic \
-pre SO_PATH:/lib/libfoo.so \
-pre ID:foo \
-pre LOAD
Applications that support the ENGINE API and more specifically, the
"control commands" mechanism, will provide some way for you to pass
such commands through to ENGINEs. As such, you would select "dynamic"
as the ENGINE to use, and the parameters/commands you pass would
control the *actual* ENGINE used. Each command is actually a name-value
pair and the value can sometimes be omitted (eg. the "LOAD" command).
Whilst the syntax demonstrated in "openssl engine" uses a colon to
separate the command name from the value, applications may provide
their own syntax for making that separation (eg. a win32 registry
key-value pair may be used by some applications). The reason for the
"-pre" syntax in the "openssl engine" utility is that some commands
might be issued to an ENGINE *after* it has been initialised for use.
Eg. if an ENGINE implementation requires a smart-card to be inserted
during initialisation (or a PIN to be typed, or whatever), there may be
a control command you can issue afterwards to "forget" the smart-card
so that additional initialisation is no longer possible. In
applications such as web-servers, where potentially volatile code may
run on the same host system, this may provide some arguable security
value. In such a case, the command would be passed to the ENGINE after
it has been initialised for use, and so the "-post" switch would be
used instead. Applications may provide a different syntax for
supporting this distinction, and some may simply not provide it at all
("-pre" is almost always what you're after, in reality).
How do I build a "dynamic" ENGINE?
----------------------------------
This question is trickier - currently OpenSSL bundles various ENGINE
implementations that are statically built in, and any application that
calls the "ENGINE_load_builtin_engines()" function will automatically
have all such ENGINEs available (and occupying memory). Applications
that don't call that function have no ENGINEs available like that and
would have to use "dynamic" to load any such ENGINE - but on the other
hand such applications would only have the memory footprint of any
ENGINEs explicitly loaded using user/admin provided control commands.
The main advantage of not statically linking ENGINEs and only using
"dynamic" for hardware support is that any installation using no
"external" ENGINE suffers no unnecessary memory footprint from unused
ENGINEs. Likewise, installations that do require an ENGINE incur the
overheads from only *that* ENGINE once it has been loaded.
Sounds good? Maybe, but currently building an ENGINE implementation as
a shared-library that can be loaded by "dynamic" isn't automated in
OpenSSL's build process. It can be done manually quite easily however.
Such a shared-library can either be built with any OpenSSL code it
needs statically linked in, or it can link dynamically against OpenSSL
if OpenSSL itself is built as a shared library. The instructions are
the same in each case, but in the former (statically linked any
dependencies on OpenSSL) you must ensure OpenSSL is built with
position-independent code ("PIC"). The default OpenSSL compilation may
already specify the relevant flags to do this, but you should consult
with your compiler documentation if you are in any doubt.
This example will show building the "atalla" ENGINE in the
crypto/engine/ directory as a shared-library for use via the "dynamic"
ENGINE.
1) "cd" to the crypto/engine/ directory of a pre-compiled OpenSSL
source tree.
2) Recompile at least one source file so you can see all the compiler
flags (and syntax) being used to build normally. Eg;
touch hw_atalla.c ; make
will rebuild "hw_atalla.o" using all such flags.
3) Manually enter the same compilation line to compile the
"hw_atalla.c" file but with the following two changes;
(a) add "-DENGINE_DYNAMIC_SUPPORT" to the command line switches,
(b) change the output file from "hw_atalla.o" to something new,
eg. "tmp_atalla.o"
4) Link "tmp_atalla.o" into a shared-library using the top-level
OpenSSL libraries to resolve any dependencies. The syntax for doing
this depends heavily on your system/compiler and is a nightmare
known well to anyone who has worked with shared-library portability
before. 'gcc' on Linux, for example, would use the following syntax;
gcc -shared -o dyn_atalla.so tmp_atalla.o -L../.. -lcrypto
5) Test your shared library using "openssl engine" as explained in the
previous section. Eg. from the top-level directory, you might try;
apps/openssl engine -vvvv dynamic \
-pre SO_PATH:./crypto/engine/dyn_atalla.so -pre LOAD
If the shared-library loads successfully, you will see both "-pre"
commands marked as "SUCCESS" and the list of control commands
displayed (because of "-vvvv") will be the control commands for the
*atalla* ENGINE (ie. *not* the 'dynamic' ENGINE). You can also add
the "-t" switch to the utility if you want it to try and initialise
the atalla ENGINE for use to test any possible hardware/driver
issues.
PROBLEMS PROBLEMS
======== ========
It seems like the ENGINE part doesn't work too well with CryptoSwift on Win32. It seems like the ENGINE part doesn't work too well with CryptoSwift on
A quick test done right before the release showed that trying "openssl speed Win32. A quick test done right before the release showed that trying
-engine cswift" generated errors. If the DSO gets enabled, an attempt is made "openssl speed -engine cswift" generated errors. If the DSO gets enabled,
to write at memory address 0x00000002. an attempt is made to write at memory address 0x00000002.

View File

@@ -1,35 +0,0 @@
Brief instructions on using OpenSSL 0.9.8 FIPS test branch.
To avoid any confusion that this might generate a validate library just
supplying "fips" on the command line wont work. Additional options are
needed...
To build fipscanister and produce a usable distribution the configuration
option "fipscanisterbuild" is used to either the config or Configure scripts.
For example:
./config fipscanisterbuild
This builds static libraries in a way similar to the FIPS 1.1.1 distro.
To build the shared library fipscanister version use the configuration
options "fipsdso".
Note that the fipscanister.o file is totally incompatible with the version
produced by the FIPS 1.1.1 distribution and cannot be made to work with
it.
Both options should also work under Windows and VC++. With this version the
use of MinGW is unnecessary and the normal VC++ build procedure can be
followed *except* the GNU linker "ld.exe" (for example from MinGW) must be
accessible somewhere on the PATH. For example:
perl Configure VC-WIN32 fipsdso
ms\do_masm
nmake -f ms\ntdll.mak
Note that any warnings from a Windows version of "tar" about being unable to
create symbolic links can be ignored.

72
STATUS
View File

@@ -1,35 +1,10 @@
OpenSSL STATUS Last modified at OpenSSL STATUS Last modified at
______________ $Date: 2007/02/23 12:12:27 $ ______________ $Date: 2002/12/05 21:40:43 $
DEVELOPMENT STATE DEVELOPMENT STATE
o OpenSSL 0.9.9: Under development... o OpenSSL 0.9.7: Under development...
o OpenSSL 0.9.8e: Released on February 23rd, 2007
o OpenSSL 0.9.8d: Released on September 28th, 2006
o OpenSSL 0.9.8c: Released on September 5th, 2006
o OpenSSL 0.9.8b: Released on May 4th, 2006
o OpenSSL 0.9.8a: Released on October 11th, 2005
o OpenSSL 0.9.8: Released on July 5th, 2005
o OpenSSL 0.9.7m: Released on February 23rd, 2007
o OpenSSL 0.9.7l: Released on September 28th, 2006
o OpenSSL 0.9.7k: Released on September 5th, 2006
o OpenSSL 0.9.7j: Released on May 4th, 2006
o OpenSSL 0.9.7i: Released on October 14th, 2005
o OpenSSL 0.9.7h: Released on October 11th, 2005
o OpenSSL 0.9.7g: Released on April 11th, 2005
o OpenSSL 0.9.7f: Released on March 22nd, 2005
o OpenSSL 0.9.7e: Released on October 25th, 2004
o OpenSSL 0.9.7d: Released on March 17th, 2004
o OpenSSL 0.9.7c: Released on September 30th, 2003
o OpenSSL 0.9.7b: Released on April 10th, 2003
o OpenSSL 0.9.7a: Released on February 19th, 2003
o OpenSSL 0.9.7: Released on December 31st, 2002
o OpenSSL 0.9.6m: Released on March 17th, 2004
o OpenSSL 0.9.6l: Released on November 4th, 2003
o OpenSSL 0.9.6k: Released on September 30th, 2003
o OpenSSL 0.9.6j: Released on April 10th, 2003
o OpenSSL 0.9.6i: Released on February 19th, 2003
o OpenSSL 0.9.6h: Released on December 5th, 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.6g: Released on August 9th, 2002
o OpenSSL 0.9.6f: Released on August 8th, 2002 o OpenSSL 0.9.6f: Released on August 8th, 2002
@@ -47,12 +22,9 @@
o OpenSSL 0.9.2b: Released on March 22th, 1999 o OpenSSL 0.9.2b: Released on March 22th, 1999
o OpenSSL 0.9.1c: Released on December 23th, 1998 o OpenSSL 0.9.1c: Released on December 23th, 1998
[See also http://www.openssl.org/support/rt2.html]
RELEASE SHOWSTOPPERS RELEASE SHOWSTOPPERS
o The Makefiles fail with some SysV makes. o none
o
AVAILABLE PATCHES AVAILABLE PATCHES
@@ -68,20 +40,24 @@
Private key, certificate and CRL API and implementation. Private key, certificate and CRL API and implementation.
Developing and bugfixing PKCS#7 (S/MIME code). Developing and bugfixing PKCS#7 (S/MIME code).
Various X509 issues: character sets, certificate request extensions. Various X509 issues: character sets, certificate request extensions.
o Geoff and Richard are currently working on:
ENGINE (the new code that gives hardware support among others).
o Richard is currently working on: o Richard is currently working on:
UI (User Interface)
UTIL (a new set of library functions to support some higher level
functionality that is currently missing).
Shared library support for VMS.
Kerberos 5 authentication
Constification Constification
Attribute Certificate support OCSP
Certificate Pair support
Storage Engines (primarly an LDAP storage engine)
Certificate chain validation with full RFC 3280 compatibility
NEEDS PATCH NEEDS PATCH
o 0.9.8-dev: COMPLEMENTOFALL and COMPLEMENTOFDEFAULT do not
handle ECCdraft cipher suites correctly.
o apps/ca.c: "Sign the certificate?" - "n" creates empty certificate file o apps/ca.c: "Sign the certificate?" - "n" creates empty certificate file
o Whenever strncpy is used, make sure the resulting string is NULL-terminated
or an error is reported
o "OpenSSL STATUS" is never up-to-date. o "OpenSSL STATUS" is never up-to-date.
OPEN ISSUES OPEN ISSUES
@@ -110,11 +86,23 @@
which apparently is not flexible enough to generate which apparently is not flexible enough to generate
libcrypto) libcrypto)
WISHES
o Add variants of DH_generate_parameters() and BN_generate_prime() [etc?] o The perl/ stuff needs a major overhaul. Currently it's
where the callback function can request that the function be aborted. totally obsolete. Either we clean it up and enhance it to be up-to-date
[Gregory Stark <ghstark@pobox.com>, <rayyang2000@yahoo.com>] with the C code or we also could replace it with the really nice
Net::SSLeay package we can find under
http://www.neuronio.pt/SSLeay.pm.html. Ralf uses this package for a
longer time and it works fine and is a nice Perl module. Best would be
to convince the author to work for the OpenSSL project and create a
Net::OpenSSL or Crypt::OpenSSL package out of it and maintains it for
us.
Status: Ralf thinks we should both contact the author of Net::SSLeay
and look how much effort it is to bring Eric's perl/ stuff up
to date.
Paul +1
WISHES
o SRP in TLS. o SRP in TLS.
[wished by: [wished by:

4843
TABLE

File diff suppressed because it is too large Load Diff

View File

@@ -1,34 +0,0 @@
#! /usr/bin/perl
use strict;
use warnings;
my @directory_vars = ( "dir", "certs", "crl_dir", "new_certs_dir" );
my @file_vars = ( "database", "certificate", "serial", "crlnumber",
"crl", "private_key", "RANDFILE" );
while(<STDIN>) {
chomp;
foreach my $d (@directory_vars) {
if (/^(\s*\#?\s*${d}\s*=\s*)\.\/([^\s\#]*)([\s\#].*)$/) {
$_ = "$1sys\\\$disk:\[.$2$3";
} elsif (/^(\s*\#?\s*${d}\s*=\s*)(\w[^\s\#]*)([\s\#].*)$/) {
$_ = "$1sys\\\$disk:\[.$2$3";
}
s/^(\s*\#?\s*${d}\s*=\s*\$\w+)\/([^\s\#]*)([\s\#].*)$/$1.$2\]$3/;
while(/^(\s*\#?\s*${d}\s*=\s*(\$\w+\.|sys\\\$disk:\[\.)[\w\.]+)\/([^\]]*)\](.*)$/) {
$_ = "$1.$3]$4";
}
}
foreach my $f (@file_vars) {
s/^(\s*\#?\s*${f}\s*=\s*)\.\/(.*)$/$1sys\\\$disk:\[\/$2/;
while(/^(\s*\#?\s*${f}\s*=\s*(\$\w+|sys\\\$disk:\[)[^\/]*)\/(\w+\/[^\s\#]*)([\s\#].*)$/) {
$_ = "$1.$3$4";
}
if (/^(\s*\#?\s*${f}\s*=\s*(\$\w+|sys\\\$disk:\[)[^\/]*)\/(\w+)([\s\#].*)$/) {
$_ = "$1]$3.$4";
} elsif (/^(\s*\#?\s*${f}\s*=\s*(\$\w+|sys\\\$disk:\[)[^\/]*)\/([^\s\#]*)([\s\#].*)$/) {
$_ = "$1]$3$4";
}
}
print $_,"\n";
}

View File

@@ -1,354 +0,0 @@
$! MKSHARED.COM -- script to created shareable images on VMS
$!
$! No command line parameters. This should be run at the start of the source
$! tree (the same directory where one finds INSTALL.VMS).
$!
$! Input: [.UTIL]LIBEAY.NUM,[.AXP.EXE.CRYPTO]LIBCRYPTO.OLB
$! [.UTIL]SSLEAY.NUM,[.AXP.EXE.SSL]LIBSSL.OLB
$! Output: [.AXP.EXE.CRYPTO]LIBCRYPTO.OPT,.MAP,.EXE
$! [.AXP.EXE.SSL]LIBSSL.OPT,.MAP,.EXE
$!
$! So far, tests have only been made on VMS for Alpha. VAX will come in time.
$! ===========================================================================
$
$! ----- Prepare info for processing: version number and file info
$ gosub read_version_info
$ if libver .eqs. ""
$ then
$ write sys$error "ERROR: Couldn't find any library version info..."
$ exit
$ endif
$
$ if f$getsyi("CPU") .ge. 128
$ then
$ libid = "Crypto"
$ libnum = "[.UTIL]LIBEAY.NUM"
$ libdir = "[.AXP.EXE.CRYPTO]"
$ libolb = "''libdir'LIBCRYPTO.OLB"
$ libopt = "''libdir'LIBCRYPTO.OPT"
$ libmap = "''libdir'LIBCRYPTO.MAP"
$ libgoal= "''libdir'LIBCRYPTO.EXE"
$ libref = ""
$ gosub create_axp_shr
$ libid = "SSL"
$ libnum = "[.UTIL]SSLEAY.NUM"
$ libdir = "[.AXP.EXE.SSL]"
$ libolb = "''libdir'LIBSSL.OLB"
$ libopt = "''libdir'LIBSSL.OPT"
$ libmap = "''libdir'LIBSSL.MAP"
$ libgoal= "''libdir'LIBSSL.EXE"
$ libref = "[.AXP.EXE.CRYPTO]LIBCRYPTO.EXE"
$ gosub create_axp_shr
$ else
$ libtit = "CRYPTO_TRANSFER_VECTOR"
$ libid = "Crypto"
$ libnum = "[.UTIL]LIBEAY.NUM"
$ libdir = "[.VAX.EXE.CRYPTO]"
$ libmar = "''libdir'LIBCRYPTO.MAR"
$ libolb = "''libdir'LIBCRYPTO.OLB"
$ libopt = "''libdir'LIBCRYPTO.OPT"
$ libobj = "''libdir'LIBCRYPTO.OBJ"
$ libmap = "''libdir'LIBCRYPTO.MAP"
$ libgoal= "''libdir'LIBCRYPTO.EXE"
$ libref = ""
$ libvec = "LIBCRYPTO"
$ gosub create_vax_shr
$ libtit = "SSL_TRANSFER_VECTOR"
$ libid = "SSL"
$ libnum = "[.UTIL]SSLEAY.NUM"
$ libdir = "[.VAX.EXE.SSL]"
$ libmar = "''libdir'LIBSSL.MAR"
$ libolb = "''libdir'LIBSSL.OLB"
$ libopt = "''libdir'LIBSSL.OPT"
$ libobj = "''libdir'LIBSSL.OBJ"
$ libmap = "''libdir'LIBSSL.MAP"
$ libgoal= "''libdir'LIBSSL.EXE"
$ libref = "[.VAX.EXE.CRYPTO]LIBCRYPTO.EXE"
$ libvec = "LIBSSL"
$ gosub create_vax_shr
$ endif
$ exit
$
$! ----- Soubroutines to actually build the shareable libraries
$! The way things work, there's a main shareable library creator for each
$! supported architecture, which is called from the main code above.
$! The creator will define a number of variables to tell the next levels of
$! subroutines what routines to use to write to the option files, call the
$! main processor, read_func_num, and when that is done, it will write version
$! data at the end of the .opt file, close it, and link the library.
$!
$! read_func_num reads through a .num file and calls the writer routine for
$! each line. It's also responsible for checking that order is properly kept
$! in the .num file, check that each line applies to VMS and the architecture,
$! and to fill in "holes" with dummy entries.
$!
$! The creator routines depend on the following variables:
$! libnum The name of the .num file to use as input
$! libolb The name of the object library to build from
$! libid The identification string of the shareable library
$! libopt The name of the .opt file to write
$! libtit The title of the assembler transfer vector file (VAX only)
$! libmar The name of the assembler transfer vector file (VAX only)
$! libmap The name of the map file to write
$! libgoal The name of the shareable library to write
$! libref The name of a shareable library to link in
$!
$! read_func_num depends on the following variables from the creator:
$! libwriter The name of the writer routine to call for each .num file line
$! -----
$
$! ----- Subroutines for AXP
$! -----
$! The creator routine
$ create_axp_shr:
$ open/write opt 'libopt'
$ write opt "identification=""",libid," ",libverstr,""""
$ write opt libolb,"/lib"
$ if libref .nes. "" then write opt libref,"/SHARE"
$ write opt "SYMBOL_VECTOR=(-"
$ libfirstentry := true
$ libwrch := opt
$ libwriter := write_axp_transfer_entry
$ textcount = 0
$ gosub read_func_num
$ write opt ")"
$ write opt "GSMATCH=",libvmatch,",",libver
$ close opt
$ link/map='libmap'/full/share='libgoal' 'libopt'/option
$ return
$
$! The record writer routine
$ write_axp_transfer_entry:
$ if libentry .eqs. ".dummy" then return
$ if info_kind .eqs. "VARIABLE"
$ then
$ pr:=DATA
$ else
$ pr:=PROCEDURE
$ endif
$ textcount_this = f$length(pr) + f$length(libentry) + 5
$ if textcount + textcount_this .gt. 1024
$ then
$ write opt ")"
$ write opt "SYMBOL_VECTOR=(-"
$ textcount = 16
$ libfirstentry := true
$ endif
$ if libfirstentry
$ then
$ write 'libwrch' " ",libentry,"=",pr," -"
$ else
$ write 'libwrch' " ,",libentry,"=",pr," -"
$ endif
$ libfirstentry := false
$ textcount = textcount + textcount_this
$ return
$
$! ----- Subroutines for AXP
$! -----
$! The creator routine
$ create_vax_shr:
$ open/write mar 'libmar'
$ type sys$input:/out=mar:
;
; Transfer vector for VAX shareable image
;
$ write mar " .TITLE ",libtit
$ write mar " .IDENT /",libid,"/"
$ type sys$input:/out=mar:
;
; Define macro to assist in building transfer vector entries. Each entry
; should take no more than 8 bytes.
;
.MACRO FTRANSFER_ENTRY routine
.ALIGN QUAD
.TRANSFER routine
.MASK routine
JMP routine+2
.ENDM FTRANSFER_ENTRY
;
; Place entries in own program section.
;
$ write mar " .PSECT $$",libvec,",QUAD,PIC,USR,CON,REL,LCL,SHR,EXE,RD,NOWRT"
$ write mar libvec,"_xfer:"
$ libwrch := mar
$ libwriter := write_vax_ftransfer_entry
$ gosub read_func_num
$ type sys$input:/out=mar:
;
; Allocate extra storage at end of vector to allow for expansion.
;
$ write mar " .BLKB 32768-<.-",libvec,"_xfer> ; 64 pages total."
$! libwriter := write_vax_vtransfer_entry
$! gosub read_func_num
$ write mar " .END"
$ close mar
$ open/write opt 'libopt'
$ write opt "identification=""",libid," ",libverstr,""""
$ write opt libobj
$ write opt libolb,"/lib"
$ if libref .nes. "" then write opt libref,"/SHARE"
$ type sys$input:/out=opt:
!
! Ensure transfer vector is at beginning of image
!
CLUSTER=FIRST
$ write opt "COLLECT=FIRST,$$",libvec
$ write opt "GSMATCH=",libvmatch,",",libver
$ type sys$input:/out=opt:
!
! make psects nonshareable so image can be installed.
!
PSECT_ATTR=$CHAR_STRING_CONSTANTS,NOWRT
$ libwrch := opt
$ libwriter := write_vax_psect_attr
$ gosub read_func_num
$ close opt
$ macro/obj='libobj' 'libmar'
$ link/map='libmap'/full/share='libgoal' 'libopt'/option
$ return
$
$! The record writer routine for VAX functions
$ write_vax_ftransfer_entry:
$ if info_kind .nes. "FUNCTION" then return
$ if libentry .eqs ".dummy"
$ then
$ write 'libwrch' " .BLKB 8" ! Dummy is zeroes...
$ else
$ write 'libwrch' " FTRANSFER_ENTRY ",libentry
$ endif
$ return
$! The record writer routine for VAX variables (should never happen!)
$ write_vax_psect_attr:
$ if info_kind .nes. "VARIABLE" then return
$ if libentry .eqs ".dummy" then return
$ write 'libwrch' "PSECT_ATTR=",libentry,",NOSHR"
$ return
$
$! ----- Common subroutines
$! -----
$! The .num file reader. This one has great responsability.
$ read_func_num:
$ open libnum 'libnum'
$ goto read_nums
$
$ read_nums:
$ libentrynum=0
$ liblastentry:=false
$ entrycount=0
$ loop:
$ read/end=loop_end/err=loop_end libnum line
$ entrynum=f$int(f$element(1," ",f$edit(line,"COMPRESS,TRIM")))
$ entryinfo=f$element(2," ",f$edit(line,"COMPRESS,TRIM"))
$ curentry=f$element(0," ",f$edit(line,"COMPRESS,TRIM"))
$ info_exist=f$element(0,":",entryinfo)
$ info_platforms=","+f$element(1,":",entryinfo)+","
$ info_kind=f$element(2,":",entryinfo)
$ info_algorithms=","+f$element(3,":",entryinfo)+","
$ if info_exist .eqs. "NOEXIST" then goto loop
$ truesum = 0
$ falsesum = 0
$ negatives = 1
$ plat_i = 0
$ loop1:
$ plat_entry = f$element(plat_i,",",info_platforms)
$ plat_i = plat_i + 1
$ if plat_entry .eqs. "" then goto loop1
$ if plat_entry .nes. ","
$ then
$ if f$extract(0,1,plat_entry) .nes. "!" then negatives = 0
$ if f$getsyi("CPU") .lt. 128
$ then
$ if plat_entry .eqs. "EXPORT_VAR_AS_FUNCTION" then -
$ truesum = truesum + 1
$ if plat_entry .eqs. "!EXPORT_VAR_AS_FUNCTION" then -
$ falsesum = falsesum + 1
$ endif
$ if plat_entry .eqs. "VMS" then truesum = truesum + 1
$ if plat_entry .eqs. "!VMS" then falsesum = falsesum + 1
$ goto loop1
$ endif
$ endloop1:
$!DEBUG!$ if info_platforms - "EXPORT_VAR_AS_FUNCTION" .nes. info_platforms
$!DEBUG!$ then
$!DEBUG!$ write sys$output line
$!DEBUG!$ write sys$output " truesum = ",truesum,-
$!DEBUG! ", negatives = ",negatives,", falsesum = ",falsesum
$!DEBUG!$ endif
$ if falsesum .ne. 0 then goto loop
$ if truesum+negatives .eq. 0 then goto loop
$ alg_i = 0
$ loop2:
$ alg_entry = f$element(alg_i,",",info_algorithms)
$ alg_i = alg_i + 1
$ if alg_entry .eqs. "" then goto loop2
$ if alg_entry .nes. ","
$ then
$ if alg_entry .eqs. "KRB5" then goto loop ! Special for now
$ if alg_entry .eqs. "STATIC_ENGINE" then goto loop ! Special for now
$ if f$trnlnm("OPENSSL_NO_"+alg_entry) .nes. "" then goto loop
$ goto loop2
$ endif
$ endloop2:
$ if info_platforms - "EXPORT_VAR_AS_FUNCTION" .nes. info_platforms
$ then
$!DEBUG!$ write sys$output curentry," ; ",entrynum," ; ",entryinfo
$ endif
$ redo:
$ next:=loop
$ tolibentry=curentry
$ if libentrynum .ne. entrynum
$ then
$ entrycount=entrycount+1
$ if entrycount .lt. entrynum
$ then
$!DEBUG!$ write sys$output "Info: entrycount: ''entrycount', entrynum: ''entrynum' => 0"
$ tolibentry=".dummy"
$ next:=redo
$ endif
$ if entrycount .gt. entrynum
$ then
$ write sys$error "Decreasing library entry numbers! Can't continue"
$ write sys$error """",line,""""
$ close libnum
$ return
$ endif
$ libentry=tolibentry
$!DEBUG!$ write sys$output entrycount," ",libentry," ",entryinfo
$ if libentry .nes. "" .and. libwriter .nes. "" then gosub 'libwriter'
$ else
$ write sys$error "Info: ""''curentry'"" is an alias for ""''libentry'"". Overriding..."
$ endif
$ libentrynum=entrycount
$ goto 'next'
$ loop_end:
$ close libnum
$ return
$
$! The version number reader
$ read_version_info:
$ libver = ""
$ open/read vf [.CRYPTO]OPENSSLV.H
$ loop_rvi:
$ read/err=endloop_rvi/end=endloop_rvi vf rvi_line
$ if rvi_line - "SHLIB_VERSION_NUMBER """ .eqs. rvi_line then -
goto loop_rvi
$ libverstr = f$element(1,"""",rvi_line)
$ libvmajor = f$element(0,".",libverstr)
$ libvminor = f$element(1,".",libverstr)
$ libvedit = f$element(2,".",libverstr)
$ libvpatch = f$cvui(0,8,f$extract(1,1,libvedit)+"@")-f$cvui(0,8,"@")
$ libvedit = f$extract(0,1,libvedit)
$ libver = f$string(f$int(libvmajor)*100)+","+-
f$string(f$int(libvminor)*100+f$int(libvedit)*10+f$int(libvpatch))
$ if libvmajor .eqs. "0"
$ then
$ libvmatch = "EQUAL"
$ else
$ ! Starting with the 1.0 release, backward compatibility should be
$ ! kept, so switch over to the following
$ libvmatch = "LEQUAL"
$ endif
$ endloop_rvi:
$ close vf
$ return

View File

@@ -1 +0,0 @@
sys$share:tcpip$ipc_shr.exe/share

View File

@@ -3,5 +3,3 @@ Makefile.save
der_chop der_chop
der_chop.bak der_chop.bak
CA.pl CA.pl
*.flc
semantic.cache

View File

@@ -5,7 +5,7 @@
# things easier between now and when Eric is convinced to fix it :-) # things easier between now and when Eric is convinced to fix it :-)
# #
# CA -newca ... will setup the right stuff # CA -newca ... will setup the right stuff
# CA -newreq[-nodes] ... will generate a certificate request # CA -newreq ... will generate a certificate request
# CA -sign ... will sign the generated request and output # CA -sign ... will sign the generated request and output
# #
# At the end of that grab newreq.pem and newcert.pem (one has the key # At the end of that grab newreq.pem and newcert.pem (one has the key
@@ -36,26 +36,16 @@
# default openssl.cnf file has setup as per the following # default openssl.cnf file has setup as per the following
# demoCA ... where everything is stored # demoCA ... where everything is stored
my $openssl;
if(defined $ENV{OPENSSL}) {
$openssl = $ENV{OPENSSL};
} else {
$openssl = "openssl";
$ENV{OPENSSL} = $openssl;
}
$SSLEAY_CONFIG=$ENV{"SSLEAY_CONFIG"}; $SSLEAY_CONFIG=$ENV{"SSLEAY_CONFIG"};
$DAYS="-days 365"; # 1 year $DAYS="-days 365";
$CADAYS="-days 1095"; # 3 years $REQ="openssl req $SSLEAY_CONFIG";
$REQ="$openssl req $SSLEAY_CONFIG"; $CA="openssl ca $SSLEAY_CONFIG";
$CA="$openssl ca $SSLEAY_CONFIG"; $VERIFY="openssl verify";
$VERIFY="$openssl verify"; $X509="openssl x509";
$X509="$openssl x509"; $PKCS12="openssl pkcs12";
$PKCS12="$openssl pkcs12";
$CATOP="./demoCA"; $CATOP="./demoCA";
$CAKEY="cakey.pem"; $CAKEY="cakey.pem";
$CAREQ="careq.pem";
$CACERT="cacert.pem"; $CACERT="cacert.pem";
$DIRMODE = 0777; $DIRMODE = 0777;
@@ -64,23 +54,18 @@ $RET = 0;
foreach (@ARGV) { foreach (@ARGV) {
if ( /^(-\?|-h|-help)$/ ) { if ( /^(-\?|-h|-help)$/ ) {
print STDERR "usage: CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify\n"; print STDERR "usage: CA -newcert|-newreq|-newca|-sign|-verify\n";
exit 0; exit 0;
} elsif (/^-newcert$/) { } elsif (/^-newcert$/) {
# create a certificate # create a certificate
system ("$REQ -new -x509 -keyout newkey.pem -out newcert.pem $DAYS"); system ("$REQ -new -x509 -keyout newreq.pem -out newreq.pem $DAYS");
$RET=$?; $RET=$?;
print "Certificate is in newcert.pem, private key is in newkey.pem\n" print "Certificate (and private key) is in newreq.pem\n"
} elsif (/^-newreq$/) { } elsif (/^-newreq$/) {
# create a certificate request # create a certificate request
system ("$REQ -new -keyout newkey.pem -out newreq.pem $DAYS"); system ("$REQ -new -keyout newreq.pem -out newreq.pem $DAYS");
$RET=$?; $RET=$?;
print "Request is in newreq.pem, private key is in newkey.pem\n"; print "Request (and private key) is in newreq.pem\n";
} elsif (/^-newreq-nodes$/) {
# create a certificate request
system ("$REQ -new -nodes -keyout newkey.pem -out newreq.pem $DAYS");
$RET=$?;
print "Request is in newreq.pem, private key is in newkey.pem\n";
} elsif (/^-newca$/) { } elsif (/^-newca$/) {
# if explicitly asked for or it doesn't exist then setup the # if explicitly asked for or it doesn't exist then setup the
# directory structure that Eric likes to manage things # directory structure that Eric likes to manage things
@@ -92,11 +77,11 @@ foreach (@ARGV) {
mkdir "${CATOP}/crl", $DIRMODE ; mkdir "${CATOP}/crl", $DIRMODE ;
mkdir "${CATOP}/newcerts", $DIRMODE; mkdir "${CATOP}/newcerts", $DIRMODE;
mkdir "${CATOP}/private", $DIRMODE; mkdir "${CATOP}/private", $DIRMODE;
open OUT, ">${CATOP}/index.txt"; open OUT, ">${CATOP}/serial";
close OUT;
open OUT, ">${CATOP}/crlnumber";
print OUT "01\n"; print OUT "01\n";
close OUT; close OUT;
open OUT, ">${CATOP}/index.txt";
close OUT;
} }
if ( ! -f "${CATOP}/private/$CAKEY" ) { if ( ! -f "${CATOP}/private/$CAKEY" ) {
print "CA certificate filename (or enter to create)\n"; print "CA certificate filename (or enter to create)\n";
@@ -111,24 +96,18 @@ foreach (@ARGV) {
$RET=$?; $RET=$?;
} else { } else {
print "Making CA certificate ...\n"; print "Making CA certificate ...\n";
system ("$REQ -new -keyout " . system ("$REQ -new -x509 -keyout " .
"${CATOP}/private/$CAKEY -out ${CATOP}/$CAREQ"); "${CATOP}/private/$CAKEY -out ${CATOP}/$CACERT $DAYS");
system ("$CA -create_serial " .
"-out ${CATOP}/$CACERT $CADAYS -batch " .
"-keyfile ${CATOP}/private/$CAKEY -selfsign " .
"-extensions v3_ca " .
"-infiles ${CATOP}/$CAREQ ");
$RET=$?; $RET=$?;
} }
} }
} elsif (/^-pkcs12$/) { } elsif (/^-pkcs12$/) {
my $cname = $ARGV[1]; my $cname = $ARGV[1];
$cname = "My Certificate" unless defined $cname; $cname = "My Certificate" unless defined $cname;
system ("$PKCS12 -in newcert.pem -inkey newkey.pem " . system ("$PKCS12 -in newcert.pem -inkey newreq.pem " .
"-certfile ${CATOP}/$CACERT -out newcert.p12 " . "-certfile ${CATOP}/$CACERT -out newcert.p12 " .
"-export -name \"$cname\""); "-export -name \"$cname\"");
$RET=$?; $RET=$?;
print "PKCS #12 file is in newcert.p12\n";
exit $RET; exit $RET;
} elsif (/^-xsign$/) { } elsif (/^-xsign$/) {
system ("$CA -policy policy_anything -infiles newreq.pem"); system ("$CA -policy policy_anything -infiles newreq.pem");
@@ -164,7 +143,7 @@ foreach (@ARGV) {
} }
} else { } else {
print STDERR "Unknown arg $_\n"; print STDERR "Unknown arg $_\n";
print STDERR "usage: CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify\n"; print STDERR "usage: CA -newcert|-newreq|-newca|-sign|-verify\n";
exit 1; exit 1;
} }
} }

View File

@@ -30,18 +30,14 @@
# default openssl.cnf file has setup as per the following # default openssl.cnf file has setup as per the following
# demoCA ... where everything is stored # demoCA ... where everything is stored
if [ -z "$OPENSSL" ]; then OPENSSL=openssl; fi DAYS="-days 365"
REQ="openssl req $SSLEAY_CONFIG"
DAYS="-days 365" # 1 year CA="openssl ca $SSLEAY_CONFIG"
CADAYS="-days 1095" # 3 years VERIFY="openssl verify"
REQ="$OPENSSL req $SSLEAY_CONFIG" X509="openssl x509"
CA="$OPENSSL ca $SSLEAY_CONFIG"
VERIFY="$OPENSSL verify"
X509="$OPENSSL x509"
CATOP=./demoCA CATOP=./demoCA
CAKEY=./cakey.pem CAKEY=./cakey.pem
CAREQ=./careq.pem
CACERT=./cacert.pem CACERT=./cacert.pem
for i for i
@@ -53,15 +49,15 @@ case $i in
;; ;;
-newcert) -newcert)
# create a certificate # create a certificate
$REQ -new -x509 -keyout newkey.pem -out newcert.pem $DAYS $REQ -new -x509 -keyout newreq.pem -out newreq.pem $DAYS
RET=$? RET=$?
echo "Certificate is in newcert.pem, private key is in newkey.pem" echo "Certificate (and private key) is in newreq.pem"
;; ;;
-newreq) -newreq)
# create a certificate request # create a certificate request
$REQ -new -keyout newkey.pem -out newreq.pem $DAYS $REQ -new -keyout newreq.pem -out newreq.pem $DAYS
RET=$? RET=$?
echo "Request is in newreq.pem, private key is in newkey.pem" echo "Request (and private key) is in newreq.pem"
;; ;;
-newca) -newca)
# if explicitly asked for or it doesn't exist then setup the directory # if explicitly asked for or it doesn't exist then setup the directory
@@ -74,7 +70,7 @@ case $i in
mkdir ${CATOP}/crl mkdir ${CATOP}/crl
mkdir ${CATOP}/newcerts mkdir ${CATOP}/newcerts
mkdir ${CATOP}/private mkdir ${CATOP}/private
echo "00" > ${CATOP}/serial echo "01" > ${CATOP}/serial
touch ${CATOP}/index.txt touch ${CATOP}/index.txt
fi fi
if [ ! -f ${CATOP}/private/$CAKEY ]; then if [ ! -f ${CATOP}/private/$CAKEY ]; then
@@ -87,11 +83,8 @@ case $i in
RET=$? RET=$?
else else
echo "Making CA certificate ..." echo "Making CA certificate ..."
$REQ -new -keyout ${CATOP}/private/$CAKEY \ $REQ -new -x509 -keyout ${CATOP}/private/$CAKEY \
-out ${CATOP}/$CAREQ -out ${CATOP}/$CACERT $DAYS
$CA -out ${CATOP}/$CACERT $CADAYS -batch \
-keyfile ${CATOP}/private/$CAKEY -selfsign \
-infiles ${CATOP}/$CAREQ
RET=$? RET=$?
fi fi
fi fi

View File

@@ -1,923 +0,0 @@
#
# apps/Makefile
#
DIR= apps
TOP= ..
CC= cc
INCLUDES= -I$(TOP) -I../include $(KRB5_INCLUDES)
CFLAG= -g -static
MAKEFILE= Makefile
PERL= perl
RM= rm -f
# KRB5 stuff
KRB5_INCLUDES=
LIBKRB5=
PEX_LIBS=
EX_LIBS=
EXE_EXT=
SHLIB_TARGET=
CFLAGS= -DMONOLITH $(INCLUDES) $(CFLAG)
GENERAL=Makefile makeapps.com install.com
DLIBCRYPTO=../libcrypto.a
DLIBSSL=../libssl.a
LIBCRYPTO=-L.. -lcrypto
LIBSSL=-L.. -lssl
PROGRAM= openssl
SCRIPTS=CA.sh CA.pl
EXE= $(PROGRAM)$(EXE_EXT)
E_EXE= verify asn1pars req dgst dh dhparam enc passwd gendh errstr \
ca crl rsa rsautl dsa dsaparam ec ecparam \
x509 genrsa gendsa s_server s_client speed \
s_time version pkcs7 crl2pkcs7 sess_id ciphers nseq pkcs12 \
pkcs8 spkac smime rand engine ocsp prime
PROGS= $(PROGRAM).c
A_OBJ=apps.o
A_SRC=apps.c
S_OBJ= s_cb.o s_socket.o
S_SRC= s_cb.c s_socket.c
RAND_OBJ=app_rand.o
RAND_SRC=app_rand.c
E_OBJ= verify.o asn1pars.o req.o dgst.o dh.o dhparam.o enc.o passwd.o gendh.o errstr.o \
ca.o pkcs7.o crl2p7.o crl.o \
rsa.o rsautl.o dsa.o dsaparam.o ec.o ecparam.o \
x509.o genrsa.o gendsa.o s_server.o s_client.o speed.o \
s_time.o $(A_OBJ) $(S_OBJ) $(RAND_OBJ) version.o sess_id.o \
ciphers.o nseq.o pkcs12.o pkcs8.o spkac.o smime.o rand.o engine.o \
ocsp.o prime.o
E_SRC= verify.c asn1pars.c req.c dgst.c dh.c enc.c passwd.c gendh.c errstr.c ca.c \
pkcs7.c crl2p7.c crl.c \
rsa.c rsautl.c dsa.c dsaparam.c ec.c ecparam.c \
x509.c genrsa.c gendsa.c s_server.c s_client.c speed.c \
s_time.c $(A_SRC) $(S_SRC) $(RAND_SRC) version.c sess_id.c \
ciphers.c nseq.c pkcs12.c pkcs8.c spkac.c smime.c rand.c engine.c \
ocsp.c prime.c
SRC=$(E_SRC)
EXHEADER=
HEADER= apps.h progs.h s_apps.h \
testdsa.h testrsa.h \
$(EXHEADER)
ALL= $(GENERAL) $(SRC) $(HEADER)
top:
@(cd ..; $(MAKE) DIRS=$(DIR) all)
all: exe
exe: $(EXE)
req: sreq.o $(A_OBJ) $(DLIBCRYPTO)
shlib_target=; if [ -n "$(SHARED_LIBS)" ]; then \
shlib_target="$(SHLIB_TARGET)"; \
fi; \
$(MAKE) -f $(TOP)/Makefile.shared -e \
APPNAME=req OBJECTS="sreq.o $(A_OBJ) $(RAND_OBJ)" \
LIBDEPS="$(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)" \
link_app.$${shlib_target}
sreq.o: req.c
$(CC) -c $(INCLUDES) $(CFLAG) -o sreq.o req.c
files:
$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
install:
@[ -n "$(INSTALLTOP)" ] # should be set by top Makefile...
@set -e; for i in $(EXE); \
do \
(echo installing $$i; \
cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \
chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i ); \
done;
@set -e; for i in $(SCRIPTS); \
do \
(echo installing $$i; \
cp $$i $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$i.new; \
chmod 755 $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$i.new; \
mv -f $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$i.new $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$i ); \
done
@cp openssl.cnf $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf.new; \
chmod 644 $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf.new; \
mv -f $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf.new $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf
tags:
ctags $(SRC)
tests:
links:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
depend:
@if [ -z "$(THIS)" ]; then \
$(MAKE) -f $(TOP)/Makefile reflect THIS=$@; \
else \
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(SRC); \
fi
dclean:
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
mv -f Makefile.new $(MAKEFILE)
clean:
rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff $(EXE)
rm -f req
$(DLIBSSL):
(cd ..; $(MAKE) DIRS=ssl all)
$(DLIBCRYPTO):
(cd ..; $(MAKE) DIRS=crypto all)
$(EXE): progs.h $(E_OBJ) $(PROGRAM).o $(DLIBCRYPTO) $(DLIBSSL)
$(RM) $(EXE)
shlib_target=; if [ -n "$(SHARED_LIBS)" ]; then \
shlib_target="$(SHLIB_TARGET)"; \
elif [ -n "$(FIPSCANLIB)" ]; then \
FIPSLD_CC="$(CC)"; CC=$(TOP)/fips/fipsld; export CC FIPSLD_CC; \
fi; \
LIBRARIES="$(LIBSSL) $(LIBKRB5) $(LIBCRYPTO)" ; \
[ "x$(FIPSCANLIB)" = "xlibfips" ] && LIBRARIES="$$LIBRARIES -lfips"; \
$(MAKE) -f $(TOP)/Makefile.shared -e \
CC="$${CC}" APPNAME=$(EXE) OBJECTS="$(PROGRAM).o $(E_OBJ)" \
LIBDEPS="$(PEX_LIBS) $$LIBRARIES $(EX_LIBS)" \
link_app.$${shlib_target}
progs.h: progs.pl
$(PERL) progs.pl $(E_EXE) >progs.h
$(RM) $(PROGRAM).o
# DO NOT DELETE THIS LINE -- make depend depends on it.
app_rand.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
app_rand.o: ../include/openssl/buffer.h ../include/openssl/conf.h
app_rand.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
app_rand.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
app_rand.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
app_rand.o: ../include/openssl/evp.h ../include/openssl/fips.h
app_rand.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
app_rand.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
app_rand.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
app_rand.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
app_rand.o: ../include/openssl/safestack.h ../include/openssl/sha.h
app_rand.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
app_rand.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
app_rand.o: ../include/openssl/x509_vfy.h app_rand.c apps.h
apps.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
apps.o: ../include/openssl/bn.h ../include/openssl/buffer.h
apps.o: ../include/openssl/conf.h ../include/openssl/crypto.h
apps.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
apps.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
apps.o: ../include/openssl/engine.h ../include/openssl/err.h
apps.o: ../include/openssl/evp.h ../include/openssl/fips.h
apps.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
apps.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
apps.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
apps.o: ../include/openssl/pem.h ../include/openssl/pem2.h
apps.o: ../include/openssl/pkcs12.h ../include/openssl/pkcs7.h
apps.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
apps.o: ../include/openssl/sha.h ../include/openssl/stack.h
apps.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
apps.o: ../include/openssl/ui.h ../include/openssl/x509.h
apps.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.c apps.h
asn1pars.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
asn1pars.o: ../include/openssl/buffer.h ../include/openssl/conf.h
asn1pars.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
asn1pars.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
asn1pars.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
asn1pars.o: ../include/openssl/err.h ../include/openssl/evp.h
asn1pars.o: ../include/openssl/fips.h ../include/openssl/lhash.h
asn1pars.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
asn1pars.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
asn1pars.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
asn1pars.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
asn1pars.o: ../include/openssl/safestack.h ../include/openssl/sha.h
asn1pars.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
asn1pars.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
asn1pars.o: ../include/openssl/x509_vfy.h apps.h asn1pars.c
ca.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
ca.o: ../include/openssl/bn.h ../include/openssl/buffer.h
ca.o: ../include/openssl/conf.h ../include/openssl/crypto.h
ca.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
ca.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
ca.o: ../include/openssl/engine.h ../include/openssl/err.h
ca.o: ../include/openssl/evp.h ../include/openssl/fips.h
ca.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
ca.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
ca.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
ca.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
ca.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
ca.o: ../include/openssl/safestack.h ../include/openssl/sha.h
ca.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
ca.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
ca.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h ca.c
ciphers.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
ciphers.o: ../include/openssl/bn.h ../include/openssl/buffer.h
ciphers.o: ../include/openssl/comp.h ../include/openssl/conf.h
ciphers.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h
ciphers.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
ciphers.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
ciphers.o: ../include/openssl/engine.h ../include/openssl/err.h
ciphers.o: ../include/openssl/evp.h ../include/openssl/fips.h
ciphers.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
ciphers.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
ciphers.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
ciphers.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
ciphers.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
ciphers.o: ../include/openssl/pq_compat.h ../include/openssl/pqueue.h
ciphers.o: ../include/openssl/safestack.h ../include/openssl/sha.h
ciphers.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
ciphers.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
ciphers.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
ciphers.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
ciphers.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
ciphers.o: ciphers.c
crl.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
crl.o: ../include/openssl/buffer.h ../include/openssl/conf.h
crl.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
crl.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
crl.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
crl.o: ../include/openssl/err.h ../include/openssl/evp.h
crl.o: ../include/openssl/fips.h ../include/openssl/lhash.h
crl.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
crl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
crl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
crl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
crl.o: ../include/openssl/safestack.h ../include/openssl/sha.h
crl.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
crl.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
crl.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h crl.c
crl2p7.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
crl2p7.o: ../include/openssl/buffer.h ../include/openssl/conf.h
crl2p7.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
crl2p7.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
crl2p7.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
crl2p7.o: ../include/openssl/err.h ../include/openssl/evp.h
crl2p7.o: ../include/openssl/fips.h ../include/openssl/lhash.h
crl2p7.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
crl2p7.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
crl2p7.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
crl2p7.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
crl2p7.o: ../include/openssl/safestack.h ../include/openssl/sha.h
crl2p7.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
crl2p7.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
crl2p7.o: ../include/openssl/x509_vfy.h apps.h crl2p7.c
dgst.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
dgst.o: ../include/openssl/buffer.h ../include/openssl/conf.h
dgst.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
dgst.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
dgst.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
dgst.o: ../include/openssl/err.h ../include/openssl/evp.h
dgst.o: ../include/openssl/fips.h ../include/openssl/hmac.h
dgst.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
dgst.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
dgst.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
dgst.o: ../include/openssl/pem.h ../include/openssl/pem2.h
dgst.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h
dgst.o: ../include/openssl/sha.h ../include/openssl/stack.h
dgst.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
dgst.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h dgst.c
dh.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
dh.o: ../include/openssl/bn.h ../include/openssl/buffer.h
dh.o: ../include/openssl/conf.h ../include/openssl/crypto.h
dh.o: ../include/openssl/dh.h ../include/openssl/e_os2.h
dh.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
dh.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
dh.o: ../include/openssl/err.h ../include/openssl/evp.h
dh.o: ../include/openssl/fips.h ../include/openssl/lhash.h
dh.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
dh.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
dh.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
dh.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
dh.o: ../include/openssl/safestack.h ../include/openssl/sha.h
dh.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
dh.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
dh.o: ../include/openssl/x509_vfy.h apps.h dh.c
dsa.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
dsa.o: ../include/openssl/bn.h ../include/openssl/buffer.h
dsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
dsa.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h
dsa.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
dsa.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
dsa.o: ../include/openssl/err.h ../include/openssl/evp.h
dsa.o: ../include/openssl/fips.h ../include/openssl/lhash.h
dsa.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
dsa.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
dsa.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
dsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
dsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h
dsa.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
dsa.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
dsa.o: ../include/openssl/x509_vfy.h apps.h dsa.c
dsaparam.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
dsaparam.o: ../include/openssl/bn.h ../include/openssl/buffer.h
dsaparam.o: ../include/openssl/conf.h ../include/openssl/crypto.h
dsaparam.o: ../include/openssl/dh.h ../include/openssl/dsa.h
dsaparam.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
dsaparam.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
dsaparam.o: ../include/openssl/engine.h ../include/openssl/err.h
dsaparam.o: ../include/openssl/evp.h ../include/openssl/fips.h
dsaparam.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
dsaparam.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
dsaparam.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
dsaparam.o: ../include/openssl/pem.h ../include/openssl/pem2.h
dsaparam.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
dsaparam.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
dsaparam.o: ../include/openssl/sha.h ../include/openssl/stack.h
dsaparam.o: ../include/openssl/store.h ../include/openssl/symhacks.h
dsaparam.o: ../include/openssl/txt_db.h ../include/openssl/ui.h
dsaparam.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
dsaparam.o: dsaparam.c
ec.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
ec.o: ../include/openssl/buffer.h ../include/openssl/conf.h
ec.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
ec.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
ec.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
ec.o: ../include/openssl/err.h ../include/openssl/evp.h
ec.o: ../include/openssl/fips.h ../include/openssl/lhash.h
ec.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
ec.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
ec.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
ec.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
ec.o: ../include/openssl/safestack.h ../include/openssl/sha.h
ec.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
ec.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
ec.o: ../include/openssl/x509_vfy.h apps.h ec.c
ecparam.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
ecparam.o: ../include/openssl/bn.h ../include/openssl/buffer.h
ecparam.o: ../include/openssl/conf.h ../include/openssl/crypto.h
ecparam.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
ecparam.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
ecparam.o: ../include/openssl/engine.h ../include/openssl/err.h
ecparam.o: ../include/openssl/evp.h ../include/openssl/fips.h
ecparam.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
ecparam.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
ecparam.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
ecparam.o: ../include/openssl/pem.h ../include/openssl/pem2.h
ecparam.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h
ecparam.o: ../include/openssl/sha.h ../include/openssl/stack.h
ecparam.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
ecparam.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
ecparam.o: ecparam.c
enc.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
enc.o: ../include/openssl/buffer.h ../include/openssl/conf.h
enc.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
enc.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
enc.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
enc.o: ../include/openssl/err.h ../include/openssl/evp.h
enc.o: ../include/openssl/fips.h ../include/openssl/lhash.h
enc.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
enc.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
enc.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
enc.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
enc.o: ../include/openssl/rand.h ../include/openssl/safestack.h
enc.o: ../include/openssl/sha.h ../include/openssl/stack.h
enc.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
enc.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h enc.c
engine.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
engine.o: ../include/openssl/bn.h ../include/openssl/buffer.h
engine.o: ../include/openssl/comp.h ../include/openssl/conf.h
engine.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h
engine.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
engine.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
engine.o: ../include/openssl/engine.h ../include/openssl/err.h
engine.o: ../include/openssl/evp.h ../include/openssl/fips.h
engine.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
engine.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
engine.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
engine.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
engine.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
engine.o: ../include/openssl/pq_compat.h ../include/openssl/pqueue.h
engine.o: ../include/openssl/safestack.h ../include/openssl/sha.h
engine.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
engine.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
engine.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
engine.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
engine.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
engine.o: engine.c
errstr.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
errstr.o: ../include/openssl/bn.h ../include/openssl/buffer.h
errstr.o: ../include/openssl/comp.h ../include/openssl/conf.h
errstr.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h
errstr.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
errstr.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
errstr.o: ../include/openssl/engine.h ../include/openssl/err.h
errstr.o: ../include/openssl/evp.h ../include/openssl/fips.h
errstr.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
errstr.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
errstr.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
errstr.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
errstr.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
errstr.o: ../include/openssl/pq_compat.h ../include/openssl/pqueue.h
errstr.o: ../include/openssl/safestack.h ../include/openssl/sha.h
errstr.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
errstr.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
errstr.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
errstr.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
errstr.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
errstr.o: errstr.c
gendh.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
gendh.o: ../include/openssl/bn.h ../include/openssl/buffer.h
gendh.o: ../include/openssl/conf.h ../include/openssl/crypto.h
gendh.o: ../include/openssl/dh.h ../include/openssl/dsa.h
gendh.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
gendh.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
gendh.o: ../include/openssl/engine.h ../include/openssl/err.h
gendh.o: ../include/openssl/evp.h ../include/openssl/fips.h
gendh.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
gendh.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
gendh.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
gendh.o: ../include/openssl/pem.h ../include/openssl/pem2.h
gendh.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
gendh.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
gendh.o: ../include/openssl/sha.h ../include/openssl/stack.h
gendh.o: ../include/openssl/store.h ../include/openssl/symhacks.h
gendh.o: ../include/openssl/txt_db.h ../include/openssl/ui.h
gendh.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h gendh.c
gendsa.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
gendsa.o: ../include/openssl/bn.h ../include/openssl/buffer.h
gendsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
gendsa.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h
gendsa.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
gendsa.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
gendsa.o: ../include/openssl/err.h ../include/openssl/evp.h
gendsa.o: ../include/openssl/fips.h ../include/openssl/lhash.h
gendsa.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
gendsa.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
gendsa.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
gendsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
gendsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h
gendsa.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
gendsa.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
gendsa.o: ../include/openssl/x509_vfy.h apps.h gendsa.c
genrsa.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
genrsa.o: ../include/openssl/bn.h ../include/openssl/buffer.h
genrsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
genrsa.o: ../include/openssl/dh.h ../include/openssl/dsa.h
genrsa.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
genrsa.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
genrsa.o: ../include/openssl/engine.h ../include/openssl/err.h
genrsa.o: ../include/openssl/evp.h ../include/openssl/fips.h
genrsa.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
genrsa.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
genrsa.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
genrsa.o: ../include/openssl/pem.h ../include/openssl/pem2.h
genrsa.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
genrsa.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
genrsa.o: ../include/openssl/sha.h ../include/openssl/stack.h
genrsa.o: ../include/openssl/store.h ../include/openssl/symhacks.h
genrsa.o: ../include/openssl/txt_db.h ../include/openssl/ui.h
genrsa.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
genrsa.o: genrsa.c
nseq.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
nseq.o: ../include/openssl/buffer.h ../include/openssl/conf.h
nseq.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
nseq.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
nseq.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
nseq.o: ../include/openssl/err.h ../include/openssl/evp.h
nseq.o: ../include/openssl/fips.h ../include/openssl/lhash.h
nseq.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
nseq.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
nseq.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
nseq.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
nseq.o: ../include/openssl/safestack.h ../include/openssl/sha.h
nseq.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
nseq.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
nseq.o: ../include/openssl/x509_vfy.h apps.h nseq.c
ocsp.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
ocsp.o: ../include/openssl/bn.h ../include/openssl/buffer.h
ocsp.o: ../include/openssl/comp.h ../include/openssl/conf.h
ocsp.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h
ocsp.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
ocsp.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
ocsp.o: ../include/openssl/engine.h ../include/openssl/err.h
ocsp.o: ../include/openssl/evp.h ../include/openssl/fips.h
ocsp.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
ocsp.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
ocsp.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
ocsp.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
ocsp.o: ../include/openssl/pem.h ../include/openssl/pem2.h
ocsp.o: ../include/openssl/pkcs7.h ../include/openssl/pq_compat.h
ocsp.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
ocsp.o: ../include/openssl/sha.h ../include/openssl/ssl.h
ocsp.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
ocsp.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
ocsp.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
ocsp.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
ocsp.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h ocsp.c
openssl.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
openssl.o: ../include/openssl/bn.h ../include/openssl/buffer.h
openssl.o: ../include/openssl/comp.h ../include/openssl/conf.h
openssl.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h
openssl.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
openssl.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
openssl.o: ../include/openssl/engine.h ../include/openssl/err.h
openssl.o: ../include/openssl/evp.h ../include/openssl/fips.h
openssl.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
openssl.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
openssl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
openssl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
openssl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
openssl.o: ../include/openssl/pq_compat.h ../include/openssl/pqueue.h
openssl.o: ../include/openssl/safestack.h ../include/openssl/sha.h
openssl.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
openssl.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
openssl.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
openssl.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
openssl.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
openssl.o: openssl.c progs.h s_apps.h
passwd.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
passwd.o: ../include/openssl/buffer.h ../include/openssl/conf.h
passwd.o: ../include/openssl/crypto.h ../include/openssl/des.h
passwd.o: ../include/openssl/des_old.h ../include/openssl/e_os2.h
passwd.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
passwd.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
passwd.o: ../include/openssl/err.h ../include/openssl/evp.h
passwd.o: ../include/openssl/fips.h ../include/openssl/lhash.h
passwd.o: ../include/openssl/md5.h ../include/openssl/obj_mac.h
passwd.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
passwd.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
passwd.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
passwd.o: ../include/openssl/safestack.h ../include/openssl/sha.h
passwd.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
passwd.o: ../include/openssl/txt_db.h ../include/openssl/ui.h
passwd.o: ../include/openssl/ui_compat.h ../include/openssl/x509.h
passwd.o: ../include/openssl/x509_vfy.h apps.h passwd.c
pkcs12.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
pkcs12.o: ../include/openssl/buffer.h ../include/openssl/conf.h
pkcs12.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
pkcs12.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
pkcs12.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
pkcs12.o: ../include/openssl/err.h ../include/openssl/evp.h
pkcs12.o: ../include/openssl/fips.h ../include/openssl/lhash.h
pkcs12.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
pkcs12.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
pkcs12.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
pkcs12.o: ../include/openssl/pem2.h ../include/openssl/pkcs12.h
pkcs12.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h
pkcs12.o: ../include/openssl/sha.h ../include/openssl/stack.h
pkcs12.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
pkcs12.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
pkcs12.o: pkcs12.c
pkcs7.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
pkcs7.o: ../include/openssl/buffer.h ../include/openssl/conf.h
pkcs7.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
pkcs7.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
pkcs7.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
pkcs7.o: ../include/openssl/err.h ../include/openssl/evp.h
pkcs7.o: ../include/openssl/fips.h ../include/openssl/lhash.h
pkcs7.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
pkcs7.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
pkcs7.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
pkcs7.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
pkcs7.o: ../include/openssl/safestack.h ../include/openssl/sha.h
pkcs7.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
pkcs7.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
pkcs7.o: ../include/openssl/x509_vfy.h apps.h pkcs7.c
pkcs8.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
pkcs8.o: ../include/openssl/buffer.h ../include/openssl/conf.h
pkcs8.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
pkcs8.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
pkcs8.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
pkcs8.o: ../include/openssl/err.h ../include/openssl/evp.h
pkcs8.o: ../include/openssl/fips.h ../include/openssl/lhash.h
pkcs8.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
pkcs8.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
pkcs8.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
pkcs8.o: ../include/openssl/pem2.h ../include/openssl/pkcs12.h
pkcs8.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h
pkcs8.o: ../include/openssl/sha.h ../include/openssl/stack.h
pkcs8.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
pkcs8.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h pkcs8.c
prime.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
prime.o: ../include/openssl/bn.h ../include/openssl/buffer.h
prime.o: ../include/openssl/conf.h ../include/openssl/crypto.h
prime.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
prime.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
prime.o: ../include/openssl/engine.h ../include/openssl/evp.h
prime.o: ../include/openssl/fips.h ../include/openssl/lhash.h
prime.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
prime.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
prime.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h
prime.o: ../include/openssl/safestack.h ../include/openssl/sha.h
prime.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
prime.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
prime.o: ../include/openssl/x509_vfy.h apps.h prime.c
rand.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
rand.o: ../include/openssl/buffer.h ../include/openssl/conf.h
rand.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
rand.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
rand.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
rand.o: ../include/openssl/err.h ../include/openssl/evp.h
rand.o: ../include/openssl/fips.h ../include/openssl/lhash.h
rand.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
rand.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
rand.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h
rand.o: ../include/openssl/rand.h ../include/openssl/safestack.h
rand.o: ../include/openssl/sha.h ../include/openssl/stack.h
rand.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
rand.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h rand.c
req.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
req.o: ../include/openssl/bn.h ../include/openssl/buffer.h
req.o: ../include/openssl/conf.h ../include/openssl/crypto.h
req.o: ../include/openssl/dh.h ../include/openssl/dsa.h
req.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
req.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
req.o: ../include/openssl/engine.h ../include/openssl/err.h
req.o: ../include/openssl/evp.h ../include/openssl/fips.h
req.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
req.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
req.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
req.o: ../include/openssl/pem.h ../include/openssl/pem2.h
req.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
req.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
req.o: ../include/openssl/sha.h ../include/openssl/stack.h
req.o: ../include/openssl/store.h ../include/openssl/symhacks.h
req.o: ../include/openssl/txt_db.h ../include/openssl/ui.h
req.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
req.o: ../include/openssl/x509v3.h apps.h req.c
rsa.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
rsa.o: ../include/openssl/bn.h ../include/openssl/buffer.h
rsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
rsa.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
rsa.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
rsa.o: ../include/openssl/engine.h ../include/openssl/err.h
rsa.o: ../include/openssl/evp.h ../include/openssl/fips.h
rsa.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
rsa.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
rsa.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
rsa.o: ../include/openssl/pem.h ../include/openssl/pem2.h
rsa.o: ../include/openssl/pkcs7.h ../include/openssl/rsa.h
rsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h
rsa.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
rsa.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
rsa.o: ../include/openssl/x509_vfy.h apps.h rsa.c
rsautl.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
rsautl.o: ../include/openssl/buffer.h ../include/openssl/conf.h
rsautl.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
rsautl.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
rsautl.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
rsautl.o: ../include/openssl/err.h ../include/openssl/evp.h
rsautl.o: ../include/openssl/fips.h ../include/openssl/lhash.h
rsautl.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
rsautl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
rsautl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
rsautl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
rsautl.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
rsautl.o: ../include/openssl/sha.h ../include/openssl/stack.h
rsautl.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
rsautl.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
rsautl.o: rsautl.c
s_cb.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
s_cb.o: ../include/openssl/bn.h ../include/openssl/buffer.h
s_cb.o: ../include/openssl/comp.h ../include/openssl/conf.h
s_cb.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h
s_cb.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
s_cb.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
s_cb.o: ../include/openssl/engine.h ../include/openssl/err.h
s_cb.o: ../include/openssl/evp.h ../include/openssl/fips.h
s_cb.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
s_cb.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
s_cb.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
s_cb.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
s_cb.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
s_cb.o: ../include/openssl/pq_compat.h ../include/openssl/pqueue.h
s_cb.o: ../include/openssl/safestack.h ../include/openssl/sha.h
s_cb.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
s_cb.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
s_cb.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
s_cb.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
s_cb.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h s_apps.h
s_cb.o: s_cb.c
s_client.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
s_client.o: ../include/openssl/bn.h ../include/openssl/buffer.h
s_client.o: ../include/openssl/comp.h ../include/openssl/conf.h
s_client.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h
s_client.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
s_client.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
s_client.o: ../include/openssl/engine.h ../include/openssl/err.h
s_client.o: ../include/openssl/evp.h ../include/openssl/fips.h
s_client.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
s_client.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
s_client.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
s_client.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
s_client.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
s_client.o: ../include/openssl/pq_compat.h ../include/openssl/pqueue.h
s_client.o: ../include/openssl/rand.h ../include/openssl/safestack.h
s_client.o: ../include/openssl/sha.h ../include/openssl/ssl.h
s_client.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
s_client.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
s_client.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
s_client.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
s_client.o: ../include/openssl/x509_vfy.h apps.h s_apps.h s_client.c timeouts.h
s_server.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
s_server.o: ../include/openssl/bn.h ../include/openssl/buffer.h
s_server.o: ../include/openssl/comp.h ../include/openssl/conf.h
s_server.o: ../include/openssl/crypto.h ../include/openssl/dh.h
s_server.o: ../include/openssl/dsa.h ../include/openssl/dtls1.h
s_server.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
s_server.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
s_server.o: ../include/openssl/engine.h ../include/openssl/err.h
s_server.o: ../include/openssl/evp.h ../include/openssl/fips.h
s_server.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
s_server.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
s_server.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
s_server.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
s_server.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
s_server.o: ../include/openssl/pq_compat.h ../include/openssl/pqueue.h
s_server.o: ../include/openssl/rand.h ../include/openssl/rsa.h
s_server.o: ../include/openssl/safestack.h ../include/openssl/sha.h
s_server.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
s_server.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
s_server.o: ../include/openssl/stack.h ../include/openssl/store.h
s_server.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
s_server.o: ../include/openssl/txt_db.h ../include/openssl/ui.h
s_server.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
s_server.o: s_apps.h s_server.c timeouts.h
s_socket.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
s_socket.o: ../include/openssl/bn.h ../include/openssl/buffer.h
s_socket.o: ../include/openssl/comp.h ../include/openssl/conf.h
s_socket.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h
s_socket.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
s_socket.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
s_socket.o: ../include/openssl/engine.h ../include/openssl/evp.h
s_socket.o: ../include/openssl/fips.h ../include/openssl/kssl.h
s_socket.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
s_socket.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
s_socket.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
s_socket.o: ../include/openssl/pem.h ../include/openssl/pem2.h
s_socket.o: ../include/openssl/pkcs7.h ../include/openssl/pq_compat.h
s_socket.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
s_socket.o: ../include/openssl/sha.h ../include/openssl/ssl.h
s_socket.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
s_socket.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
s_socket.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
s_socket.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
s_socket.o: ../include/openssl/x509_vfy.h apps.h s_apps.h s_socket.c
s_time.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
s_time.o: ../include/openssl/bn.h ../include/openssl/buffer.h
s_time.o: ../include/openssl/comp.h ../include/openssl/conf.h
s_time.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h
s_time.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
s_time.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
s_time.o: ../include/openssl/engine.h ../include/openssl/err.h
s_time.o: ../include/openssl/evp.h ../include/openssl/fips.h
s_time.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
s_time.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
s_time.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
s_time.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
s_time.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
s_time.o: ../include/openssl/pq_compat.h ../include/openssl/pqueue.h
s_time.o: ../include/openssl/safestack.h ../include/openssl/sha.h
s_time.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
s_time.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
s_time.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
s_time.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
s_time.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
s_time.o: s_apps.h s_time.c
sess_id.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
sess_id.o: ../include/openssl/bn.h ../include/openssl/buffer.h
sess_id.o: ../include/openssl/comp.h ../include/openssl/conf.h
sess_id.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h
sess_id.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
sess_id.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
sess_id.o: ../include/openssl/engine.h ../include/openssl/err.h
sess_id.o: ../include/openssl/evp.h ../include/openssl/fips.h
sess_id.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
sess_id.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
sess_id.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
sess_id.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
sess_id.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
sess_id.o: ../include/openssl/pq_compat.h ../include/openssl/pqueue.h
sess_id.o: ../include/openssl/safestack.h ../include/openssl/sha.h
sess_id.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
sess_id.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
sess_id.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
sess_id.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
sess_id.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
sess_id.o: sess_id.c
smime.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
smime.o: ../include/openssl/buffer.h ../include/openssl/conf.h
smime.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
smime.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
smime.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
smime.o: ../include/openssl/err.h ../include/openssl/evp.h
smime.o: ../include/openssl/fips.h ../include/openssl/lhash.h
smime.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
smime.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
smime.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
smime.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
smime.o: ../include/openssl/safestack.h ../include/openssl/sha.h
smime.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
smime.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
smime.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
smime.o: smime.c
speed.o: ../e_os.h ../include/openssl/aes.h ../include/openssl/asn1.h
speed.o: ../include/openssl/bio.h ../include/openssl/blowfish.h
speed.o: ../include/openssl/bn.h ../include/openssl/buffer.h
speed.o: ../include/openssl/cast.h ../include/openssl/conf.h
speed.o: ../include/openssl/crypto.h ../include/openssl/des.h
speed.o: ../include/openssl/des_old.h ../include/openssl/dsa.h
speed.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
speed.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
speed.o: ../include/openssl/engine.h ../include/openssl/err.h
speed.o: ../include/openssl/evp.h ../include/openssl/fips.h
speed.o: ../include/openssl/hmac.h ../include/openssl/idea.h
speed.o: ../include/openssl/lhash.h ../include/openssl/md2.h
speed.o: ../include/openssl/md4.h ../include/openssl/md5.h
speed.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
speed.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
speed.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h
speed.o: ../include/openssl/rand.h ../include/openssl/rc2.h
speed.o: ../include/openssl/rc4.h ../include/openssl/ripemd.h
speed.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
speed.o: ../include/openssl/sha.h ../include/openssl/stack.h
speed.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
speed.o: ../include/openssl/ui.h ../include/openssl/ui_compat.h
speed.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h speed.c
speed.o: testdsa.h testrsa.h
spkac.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
spkac.o: ../include/openssl/buffer.h ../include/openssl/conf.h
spkac.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
spkac.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
spkac.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
spkac.o: ../include/openssl/err.h ../include/openssl/evp.h
spkac.o: ../include/openssl/fips.h ../include/openssl/lhash.h
spkac.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
spkac.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
spkac.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
spkac.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
spkac.o: ../include/openssl/safestack.h ../include/openssl/sha.h
spkac.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
spkac.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
spkac.o: ../include/openssl/x509_vfy.h apps.h spkac.c
verify.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
verify.o: ../include/openssl/buffer.h ../include/openssl/conf.h
verify.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
verify.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
verify.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
verify.o: ../include/openssl/err.h ../include/openssl/evp.h
verify.o: ../include/openssl/fips.h ../include/openssl/lhash.h
verify.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
verify.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
verify.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
verify.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
verify.o: ../include/openssl/safestack.h ../include/openssl/sha.h
verify.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
verify.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
verify.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
verify.o: verify.c
version.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
version.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
version.o: ../include/openssl/buffer.h ../include/openssl/conf.h
version.o: ../include/openssl/crypto.h ../include/openssl/des.h
version.o: ../include/openssl/des_old.h ../include/openssl/e_os2.h
version.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
version.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
version.o: ../include/openssl/evp.h ../include/openssl/fips.h
version.o: ../include/openssl/idea.h ../include/openssl/lhash.h
version.o: ../include/openssl/md2.h ../include/openssl/obj_mac.h
version.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
version.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
version.o: ../include/openssl/pkcs7.h ../include/openssl/rc4.h
version.o: ../include/openssl/safestack.h ../include/openssl/sha.h
version.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
version.o: ../include/openssl/txt_db.h ../include/openssl/ui.h
version.o: ../include/openssl/ui_compat.h ../include/openssl/x509.h
version.o: ../include/openssl/x509_vfy.h apps.h version.c
x509.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
x509.o: ../include/openssl/bn.h ../include/openssl/buffer.h
x509.o: ../include/openssl/conf.h ../include/openssl/crypto.h
x509.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h
x509.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
x509.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
x509.o: ../include/openssl/err.h ../include/openssl/evp.h
x509.o: ../include/openssl/fips.h ../include/openssl/lhash.h
x509.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
x509.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
x509.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
x509.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
x509.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
x509.o: ../include/openssl/sha.h ../include/openssl/stack.h
x509.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
x509.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
x509.o: ../include/openssl/x509v3.h apps.h x509.c

929
apps/Makefile.ssl Normal file
View File

@@ -0,0 +1,929 @@
#
# apps/Makefile.ssl
#
DIR= apps
TOP= ..
CC= cc
INCLUDES= -I../include
CFLAG= -g -static
INSTALL_PREFIX=
INSTALLTOP= /usr/local/ssl
OPENSSLDIR= /usr/local/ssl
MAKE= make -f Makefile.ssl
MAKEDEPEND= $(TOP)/util/domd $(TOP)
MAKEFILE= Makefile.ssl
PERL= perl
RM= rm -f
PEX_LIBS=
EX_LIBS=
EXE_EXT=
CFLAGS= -DMONOLITH $(INCLUDES) $(CFLAG)
GENERAL=Makefile makeapps.com install.com
DLIBCRYPTO=../libcrypto.a
DLIBSSL=../libssl.a
LIBCRYPTO=-L.. -lcrypto
LIBSSL=-L.. -lssl
PROGRAM= openssl
SCRIPTS=CA.sh CA.pl der_chop
EXE= $(PROGRAM)$(EXE_EXT)
E_EXE= verify asn1pars req dgst dh dhparam enc passwd gendh errstr \
ca crl rsa rsautl dsa dsaparam \
x509 genrsa gendsa s_server s_client speed \
s_time version pkcs7 crl2pkcs7 sess_id ciphers nseq pkcs12 \
pkcs8 spkac smime rand
PROGS= $(PROGRAM).c
A_OBJ=apps.o
A_SRC=apps.c
S_OBJ= s_cb.o s_socket.o
S_SRC= s_cb.c s_socket.c
RAND_OBJ=app_rand.o
RAND_SRC=app_rand.c
E_OBJ= verify.o asn1pars.o req.o dgst.o dh.o dhparam.o enc.o passwd.o gendh.o errstr.o \
ca.o pkcs7.o crl2p7.o crl.o \
rsa.o rsautl.o dsa.o dsaparam.o \
x509.o genrsa.o gendsa.o s_server.o s_client.o speed.o \
s_time.o $(A_OBJ) $(S_OBJ) $(RAND_OBJ) version.o sess_id.o \
ciphers.o nseq.o pkcs12.o pkcs8.o spkac.o smime.o rand.o
E_SRC= verify.c asn1pars.c req.c dgst.c dh.c enc.c passwd.c gendh.c errstr.c ca.c \
pkcs7.c crl2p7.c crl.c \
rsa.c rsautl.c dsa.c dsaparam.c \
x509.c genrsa.c gendsa.c s_server.c s_client.c speed.c \
s_time.c $(A_SRC) $(S_SRC) $(RAND_SRC) version.c sess_id.c \
ciphers.c nseq.c pkcs12.c pkcs8.c spkac.c smime.c rand.c
SRC=$(E_SRC)
EXHEADER=
HEADER= apps.h progs.h s_apps.h \
testdsa.h testrsa.h \
$(EXHEADER)
ALL= $(GENERAL) $(SRC) $(HEADER)
top:
@(cd ..; $(MAKE) DIRS=$(DIR) all)
all: exe
exe: $(PROGRAM)
req: sreq.o $(A_OBJ) $(DLIBCRYPTO)
$(CC) -o req $(CFLAG) sreq.o $(A_OBJ) $(RAND_OBJ) $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
sreq.o: req.c
$(CC) -c $(INCLUDES) $(CFLAG) -o sreq.o req.c
files:
$(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
install:
@for i in $(EXE); \
do \
(echo installing $$i; \
cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i; \
chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i ); \
done;
@for i in $(SCRIPTS); \
do \
(echo installing $$i; \
cp $$i $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$i; \
chmod 755 $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$i ); \
done
@cp openssl.cnf $(INSTALL_PREFIX)$(OPENSSLDIR); \
chmod 644 $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf
tags:
ctags $(SRC)
tests:
links:
@$(TOP)/util/point.sh Makefile.ssl Makefile
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
depend:
$(MAKEDEPEND) -- $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(SRC)
dclean:
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
mv -f Makefile.new $(MAKEFILE)
clean:
rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff $(EXE)
rm -f req
$(DLIBSSL):
(cd ..; $(MAKE) DIRS=ssl all)
$(DLIBCRYPTO):
(cd ..; $(MAKE) DIRS=crypto all)
$(PROGRAM): progs.h $(E_OBJ) $(PROGRAM).o $(DLIBCRYPTO) $(DLIBSSL)
$(RM) $(PROGRAM)
$(CC) -o $(PROGRAM) $(CFLAGS) $(PROGRAM).o $(E_OBJ) $(PEX_LIBS) $(LIBSSL) $(LIBCRYPTO) $(EX_LIBS)
-(cd ..; OPENSSL="`pwd`/apps/openssl"; export OPENSSL; $(PERL) tools/c_rehash certs)
progs.h: progs.pl
$(PERL) progs.pl $(E_EXE) >progs.h
$(RM) $(PROGRAM).o
# DO NOT DELETE THIS LINE -- make depend depends on it.
app_rand.o: ../include/openssl/asn1.h ../include/openssl/bio.h
app_rand.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
app_rand.o: ../include/openssl/buffer.h ../include/openssl/cast.h
app_rand.o: ../include/openssl/conf.h ../include/openssl/crypto.h
app_rand.o: ../include/openssl/des.h ../include/openssl/dh.h
app_rand.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
app_rand.o: ../include/openssl/e_os2.h ../include/openssl/evp.h
app_rand.o: ../include/openssl/idea.h ../include/openssl/lhash.h
app_rand.o: ../include/openssl/md2.h ../include/openssl/md4.h
app_rand.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
app_rand.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
app_rand.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
app_rand.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
app_rand.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
app_rand.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
app_rand.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
app_rand.o: ../include/openssl/sha.h ../include/openssl/stack.h
app_rand.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
app_rand.o: ../include/openssl/x509_vfy.h apps.h
apps.o: ../include/openssl/asn1.h ../include/openssl/bio.h
apps.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
apps.o: ../include/openssl/buffer.h ../include/openssl/cast.h
apps.o: ../include/openssl/conf.h ../include/openssl/crypto.h
apps.o: ../include/openssl/des.h ../include/openssl/dh.h
apps.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
apps.o: ../include/openssl/e_os2.h ../include/openssl/err.h
apps.o: ../include/openssl/evp.h ../include/openssl/idea.h
apps.o: ../include/openssl/lhash.h ../include/openssl/md2.h
apps.o: ../include/openssl/md4.h ../include/openssl/md5.h
apps.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
apps.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
apps.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
apps.o: ../include/openssl/pem2.h ../include/openssl/pkcs12.h
apps.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
apps.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
apps.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
apps.o: ../include/openssl/safestack.h ../include/openssl/sha.h
apps.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
apps.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
asn1pars.o: ../include/openssl/asn1.h ../include/openssl/bio.h
asn1pars.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
asn1pars.o: ../include/openssl/buffer.h ../include/openssl/cast.h
asn1pars.o: ../include/openssl/conf.h ../include/openssl/crypto.h
asn1pars.o: ../include/openssl/des.h ../include/openssl/dh.h
asn1pars.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
asn1pars.o: ../include/openssl/e_os2.h ../include/openssl/err.h
asn1pars.o: ../include/openssl/evp.h ../include/openssl/idea.h
asn1pars.o: ../include/openssl/lhash.h ../include/openssl/md2.h
asn1pars.o: ../include/openssl/md4.h ../include/openssl/md5.h
asn1pars.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
asn1pars.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
asn1pars.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
asn1pars.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
asn1pars.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
asn1pars.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
asn1pars.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
asn1pars.o: ../include/openssl/sha.h ../include/openssl/stack.h
asn1pars.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
asn1pars.o: ../include/openssl/x509_vfy.h apps.h
ca.o: ../include/openssl/asn1.h ../include/openssl/bio.h
ca.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
ca.o: ../include/openssl/buffer.h ../include/openssl/cast.h
ca.o: ../include/openssl/conf.h ../include/openssl/crypto.h
ca.o: ../include/openssl/des.h ../include/openssl/dh.h ../include/openssl/dsa.h
ca.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
ca.o: ../include/openssl/err.h ../include/openssl/evp.h
ca.o: ../include/openssl/idea.h ../include/openssl/lhash.h
ca.o: ../include/openssl/md2.h ../include/openssl/md4.h
ca.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
ca.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
ca.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
ca.o: ../include/openssl/pem.h ../include/openssl/pem2.h
ca.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
ca.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
ca.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
ca.o: ../include/openssl/safestack.h ../include/openssl/sha.h
ca.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
ca.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
ca.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
ciphers.o: ../include/openssl/asn1.h ../include/openssl/bio.h
ciphers.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
ciphers.o: ../include/openssl/buffer.h ../include/openssl/cast.h
ciphers.o: ../include/openssl/comp.h ../include/openssl/conf.h
ciphers.o: ../include/openssl/crypto.h ../include/openssl/des.h
ciphers.o: ../include/openssl/dh.h ../include/openssl/dsa.h
ciphers.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
ciphers.o: ../include/openssl/err.h ../include/openssl/evp.h
ciphers.o: ../include/openssl/idea.h ../include/openssl/lhash.h
ciphers.o: ../include/openssl/md2.h ../include/openssl/md4.h
ciphers.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
ciphers.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
ciphers.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
ciphers.o: ../include/openssl/pem.h ../include/openssl/pem2.h
ciphers.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
ciphers.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
ciphers.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
ciphers.o: ../include/openssl/safestack.h ../include/openssl/sha.h
ciphers.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
ciphers.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
ciphers.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
ciphers.o: ../include/openssl/tls1.h ../include/openssl/x509.h
ciphers.o: ../include/openssl/x509_vfy.h apps.h
crl.o: ../include/openssl/asn1.h ../include/openssl/bio.h
crl.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
crl.o: ../include/openssl/buffer.h ../include/openssl/cast.h
crl.o: ../include/openssl/conf.h ../include/openssl/crypto.h
crl.o: ../include/openssl/des.h ../include/openssl/dh.h
crl.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
crl.o: ../include/openssl/e_os2.h ../include/openssl/err.h
crl.o: ../include/openssl/evp.h ../include/openssl/idea.h
crl.o: ../include/openssl/lhash.h ../include/openssl/md2.h
crl.o: ../include/openssl/md4.h ../include/openssl/md5.h
crl.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
crl.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
crl.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
crl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
crl.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
crl.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
crl.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
crl.o: ../include/openssl/sha.h ../include/openssl/stack.h
crl.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
crl.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
crl2p7.o: ../include/openssl/asn1.h ../include/openssl/bio.h
crl2p7.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
crl2p7.o: ../include/openssl/buffer.h ../include/openssl/cast.h
crl2p7.o: ../include/openssl/conf.h ../include/openssl/crypto.h
crl2p7.o: ../include/openssl/des.h ../include/openssl/dh.h
crl2p7.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
crl2p7.o: ../include/openssl/e_os2.h ../include/openssl/err.h
crl2p7.o: ../include/openssl/evp.h ../include/openssl/idea.h
crl2p7.o: ../include/openssl/lhash.h ../include/openssl/md2.h
crl2p7.o: ../include/openssl/md4.h ../include/openssl/md5.h
crl2p7.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
crl2p7.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
crl2p7.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
crl2p7.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
crl2p7.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
crl2p7.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
crl2p7.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
crl2p7.o: ../include/openssl/sha.h ../include/openssl/stack.h
crl2p7.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
crl2p7.o: ../include/openssl/x509_vfy.h apps.h
dgst.o: ../include/openssl/asn1.h ../include/openssl/bio.h
dgst.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
dgst.o: ../include/openssl/buffer.h ../include/openssl/cast.h
dgst.o: ../include/openssl/conf.h ../include/openssl/crypto.h
dgst.o: ../include/openssl/des.h ../include/openssl/dh.h
dgst.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
dgst.o: ../include/openssl/e_os2.h ../include/openssl/err.h
dgst.o: ../include/openssl/evp.h ../include/openssl/idea.h
dgst.o: ../include/openssl/lhash.h ../include/openssl/md2.h
dgst.o: ../include/openssl/md4.h ../include/openssl/md5.h
dgst.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
dgst.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
dgst.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
dgst.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
dgst.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
dgst.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
dgst.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
dgst.o: ../include/openssl/sha.h ../include/openssl/stack.h
dgst.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
dgst.o: ../include/openssl/x509_vfy.h apps.h
dh.o: ../include/openssl/asn1.h ../include/openssl/bio.h
dh.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
dh.o: ../include/openssl/buffer.h ../include/openssl/cast.h
dh.o: ../include/openssl/conf.h ../include/openssl/crypto.h
dh.o: ../include/openssl/des.h ../include/openssl/dh.h ../include/openssl/dsa.h
dh.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
dh.o: ../include/openssl/err.h ../include/openssl/evp.h
dh.o: ../include/openssl/idea.h ../include/openssl/lhash.h
dh.o: ../include/openssl/md2.h ../include/openssl/md4.h
dh.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
dh.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
dh.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
dh.o: ../include/openssl/pem.h ../include/openssl/pem2.h
dh.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
dh.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
dh.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
dh.o: ../include/openssl/safestack.h ../include/openssl/sha.h
dh.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
dh.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
dsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
dsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
dsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
dsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
dsa.o: ../include/openssl/des.h ../include/openssl/dh.h
dsa.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
dsa.o: ../include/openssl/e_os2.h ../include/openssl/err.h
dsa.o: ../include/openssl/evp.h ../include/openssl/idea.h
dsa.o: ../include/openssl/lhash.h ../include/openssl/md2.h
dsa.o: ../include/openssl/md4.h ../include/openssl/md5.h
dsa.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
dsa.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
dsa.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
dsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
dsa.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
dsa.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
dsa.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
dsa.o: ../include/openssl/sha.h ../include/openssl/stack.h
dsa.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
dsa.o: ../include/openssl/x509_vfy.h apps.h
dsaparam.o: ../include/openssl/asn1.h ../include/openssl/bio.h
dsaparam.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
dsaparam.o: ../include/openssl/buffer.h ../include/openssl/cast.h
dsaparam.o: ../include/openssl/conf.h ../include/openssl/crypto.h
dsaparam.o: ../include/openssl/des.h ../include/openssl/dh.h
dsaparam.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
dsaparam.o: ../include/openssl/e_os2.h ../include/openssl/err.h
dsaparam.o: ../include/openssl/evp.h ../include/openssl/idea.h
dsaparam.o: ../include/openssl/lhash.h ../include/openssl/md2.h
dsaparam.o: ../include/openssl/md4.h ../include/openssl/md5.h
dsaparam.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
dsaparam.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
dsaparam.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
dsaparam.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
dsaparam.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
dsaparam.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
dsaparam.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
dsaparam.o: ../include/openssl/sha.h ../include/openssl/stack.h
dsaparam.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
dsaparam.o: ../include/openssl/x509_vfy.h apps.h
enc.o: ../include/openssl/asn1.h ../include/openssl/bio.h
enc.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
enc.o: ../include/openssl/buffer.h ../include/openssl/cast.h
enc.o: ../include/openssl/conf.h ../include/openssl/crypto.h
enc.o: ../include/openssl/des.h ../include/openssl/dh.h
enc.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
enc.o: ../include/openssl/e_os2.h ../include/openssl/err.h
enc.o: ../include/openssl/evp.h ../include/openssl/idea.h
enc.o: ../include/openssl/lhash.h ../include/openssl/md2.h
enc.o: ../include/openssl/md4.h ../include/openssl/md5.h
enc.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
enc.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
enc.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
enc.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
enc.o: ../include/openssl/rand.h ../include/openssl/rc2.h
enc.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
enc.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
enc.o: ../include/openssl/safestack.h ../include/openssl/sha.h
enc.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
enc.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
errstr.o: ../include/openssl/asn1.h ../include/openssl/bio.h
errstr.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
errstr.o: ../include/openssl/buffer.h ../include/openssl/cast.h
errstr.o: ../include/openssl/comp.h ../include/openssl/conf.h
errstr.o: ../include/openssl/crypto.h ../include/openssl/des.h
errstr.o: ../include/openssl/dh.h ../include/openssl/dsa.h
errstr.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
errstr.o: ../include/openssl/err.h ../include/openssl/evp.h
errstr.o: ../include/openssl/idea.h ../include/openssl/lhash.h
errstr.o: ../include/openssl/md2.h ../include/openssl/md4.h
errstr.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
errstr.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
errstr.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
errstr.o: ../include/openssl/pem.h ../include/openssl/pem2.h
errstr.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
errstr.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
errstr.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
errstr.o: ../include/openssl/safestack.h ../include/openssl/sha.h
errstr.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
errstr.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
errstr.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
errstr.o: ../include/openssl/tls1.h ../include/openssl/x509.h
errstr.o: ../include/openssl/x509_vfy.h apps.h
gendh.o: ../include/openssl/asn1.h ../include/openssl/bio.h
gendh.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
gendh.o: ../include/openssl/buffer.h ../include/openssl/cast.h
gendh.o: ../include/openssl/conf.h ../include/openssl/crypto.h
gendh.o: ../include/openssl/des.h ../include/openssl/dh.h
gendh.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
gendh.o: ../include/openssl/e_os2.h ../include/openssl/err.h
gendh.o: ../include/openssl/evp.h ../include/openssl/idea.h
gendh.o: ../include/openssl/lhash.h ../include/openssl/md2.h
gendh.o: ../include/openssl/md4.h ../include/openssl/md5.h
gendh.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
gendh.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
gendh.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
gendh.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
gendh.o: ../include/openssl/rand.h ../include/openssl/rc2.h
gendh.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
gendh.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
gendh.o: ../include/openssl/safestack.h ../include/openssl/sha.h
gendh.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
gendh.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
gendsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
gendsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
gendsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
gendsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
gendsa.o: ../include/openssl/des.h ../include/openssl/dh.h
gendsa.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
gendsa.o: ../include/openssl/e_os2.h ../include/openssl/err.h
gendsa.o: ../include/openssl/evp.h ../include/openssl/idea.h
gendsa.o: ../include/openssl/lhash.h ../include/openssl/md2.h
gendsa.o: ../include/openssl/md4.h ../include/openssl/md5.h
gendsa.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
gendsa.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
gendsa.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
gendsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
gendsa.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
gendsa.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
gendsa.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
gendsa.o: ../include/openssl/sha.h ../include/openssl/stack.h
gendsa.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
gendsa.o: ../include/openssl/x509_vfy.h apps.h
genrsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
genrsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
genrsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
genrsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
genrsa.o: ../include/openssl/des.h ../include/openssl/dh.h
genrsa.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
genrsa.o: ../include/openssl/e_os2.h ../include/openssl/err.h
genrsa.o: ../include/openssl/evp.h ../include/openssl/idea.h
genrsa.o: ../include/openssl/lhash.h ../include/openssl/md2.h
genrsa.o: ../include/openssl/md4.h ../include/openssl/md5.h
genrsa.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
genrsa.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
genrsa.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
genrsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
genrsa.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
genrsa.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
genrsa.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
genrsa.o: ../include/openssl/sha.h ../include/openssl/stack.h
genrsa.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
genrsa.o: ../include/openssl/x509_vfy.h apps.h
nseq.o: ../include/openssl/asn1.h ../include/openssl/bio.h
nseq.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
nseq.o: ../include/openssl/buffer.h ../include/openssl/cast.h
nseq.o: ../include/openssl/conf.h ../include/openssl/crypto.h
nseq.o: ../include/openssl/des.h ../include/openssl/dh.h
nseq.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
nseq.o: ../include/openssl/e_os2.h ../include/openssl/err.h
nseq.o: ../include/openssl/evp.h ../include/openssl/idea.h
nseq.o: ../include/openssl/lhash.h ../include/openssl/md2.h
nseq.o: ../include/openssl/md4.h ../include/openssl/md5.h
nseq.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
nseq.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
nseq.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
nseq.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
nseq.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
nseq.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
nseq.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
nseq.o: ../include/openssl/sha.h ../include/openssl/stack.h
nseq.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
nseq.o: ../include/openssl/x509_vfy.h apps.h
openssl.o: ../include/openssl/asn1.h ../include/openssl/bio.h
openssl.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
openssl.o: ../include/openssl/buffer.h ../include/openssl/cast.h
openssl.o: ../include/openssl/comp.h ../include/openssl/conf.h
openssl.o: ../include/openssl/crypto.h ../include/openssl/des.h
openssl.o: ../include/openssl/dh.h ../include/openssl/dsa.h
openssl.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
openssl.o: ../include/openssl/err.h ../include/openssl/evp.h
openssl.o: ../include/openssl/idea.h ../include/openssl/lhash.h
openssl.o: ../include/openssl/md2.h ../include/openssl/md4.h
openssl.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
openssl.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
openssl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
openssl.o: ../include/openssl/pem.h ../include/openssl/pem2.h
openssl.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
openssl.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
openssl.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
openssl.o: ../include/openssl/safestack.h ../include/openssl/sha.h
openssl.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
openssl.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
openssl.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
openssl.o: ../include/openssl/tls1.h ../include/openssl/x509.h
openssl.o: ../include/openssl/x509_vfy.h apps.h progs.h s_apps.h
passwd.o: ../include/openssl/asn1.h ../include/openssl/bio.h
passwd.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
passwd.o: ../include/openssl/buffer.h ../include/openssl/cast.h
passwd.o: ../include/openssl/conf.h ../include/openssl/crypto.h
passwd.o: ../include/openssl/des.h ../include/openssl/dh.h
passwd.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
passwd.o: ../include/openssl/e_os2.h ../include/openssl/err.h
passwd.o: ../include/openssl/evp.h ../include/openssl/idea.h
passwd.o: ../include/openssl/lhash.h ../include/openssl/md2.h
passwd.o: ../include/openssl/md4.h ../include/openssl/md5.h
passwd.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
passwd.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
passwd.o: ../include/openssl/opensslv.h ../include/openssl/pkcs7.h
passwd.o: ../include/openssl/rand.h ../include/openssl/rc2.h
passwd.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
passwd.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
passwd.o: ../include/openssl/safestack.h ../include/openssl/sha.h
passwd.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
passwd.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
pkcs12.o: ../include/openssl/asn1.h ../include/openssl/bio.h
pkcs12.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
pkcs12.o: ../include/openssl/buffer.h ../include/openssl/cast.h
pkcs12.o: ../include/openssl/conf.h ../include/openssl/crypto.h
pkcs12.o: ../include/openssl/des.h ../include/openssl/dh.h
pkcs12.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
pkcs12.o: ../include/openssl/e_os2.h ../include/openssl/err.h
pkcs12.o: ../include/openssl/evp.h ../include/openssl/idea.h
pkcs12.o: ../include/openssl/lhash.h ../include/openssl/md2.h
pkcs12.o: ../include/openssl/md4.h ../include/openssl/md5.h
pkcs12.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
pkcs12.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
pkcs12.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
pkcs12.o: ../include/openssl/pem2.h ../include/openssl/pkcs12.h
pkcs12.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
pkcs12.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
pkcs12.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
pkcs12.o: ../include/openssl/safestack.h ../include/openssl/sha.h
pkcs12.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
pkcs12.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
pkcs7.o: ../include/openssl/asn1.h ../include/openssl/bio.h
pkcs7.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
pkcs7.o: ../include/openssl/buffer.h ../include/openssl/cast.h
pkcs7.o: ../include/openssl/conf.h ../include/openssl/crypto.h
pkcs7.o: ../include/openssl/des.h ../include/openssl/dh.h
pkcs7.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
pkcs7.o: ../include/openssl/e_os2.h ../include/openssl/err.h
pkcs7.o: ../include/openssl/evp.h ../include/openssl/idea.h
pkcs7.o: ../include/openssl/lhash.h ../include/openssl/md2.h
pkcs7.o: ../include/openssl/md4.h ../include/openssl/md5.h
pkcs7.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
pkcs7.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
pkcs7.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
pkcs7.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
pkcs7.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
pkcs7.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
pkcs7.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
pkcs7.o: ../include/openssl/sha.h ../include/openssl/stack.h
pkcs7.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
pkcs7.o: ../include/openssl/x509_vfy.h apps.h
pkcs8.o: ../include/openssl/asn1.h ../include/openssl/bio.h
pkcs8.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
pkcs8.o: ../include/openssl/buffer.h ../include/openssl/cast.h
pkcs8.o: ../include/openssl/conf.h ../include/openssl/crypto.h
pkcs8.o: ../include/openssl/des.h ../include/openssl/dh.h
pkcs8.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
pkcs8.o: ../include/openssl/e_os2.h ../include/openssl/err.h
pkcs8.o: ../include/openssl/evp.h ../include/openssl/idea.h
pkcs8.o: ../include/openssl/lhash.h ../include/openssl/md2.h
pkcs8.o: ../include/openssl/md4.h ../include/openssl/md5.h
pkcs8.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
pkcs8.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
pkcs8.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
pkcs8.o: ../include/openssl/pem2.h ../include/openssl/pkcs12.h
pkcs8.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
pkcs8.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
pkcs8.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
pkcs8.o: ../include/openssl/safestack.h ../include/openssl/sha.h
pkcs8.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
pkcs8.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
rand.o: ../include/openssl/asn1.h ../include/openssl/bio.h
rand.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
rand.o: ../include/openssl/buffer.h ../include/openssl/cast.h
rand.o: ../include/openssl/conf.h ../include/openssl/crypto.h
rand.o: ../include/openssl/des.h ../include/openssl/dh.h
rand.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
rand.o: ../include/openssl/e_os2.h ../include/openssl/err.h
rand.o: ../include/openssl/evp.h ../include/openssl/idea.h
rand.o: ../include/openssl/lhash.h ../include/openssl/md2.h
rand.o: ../include/openssl/md4.h ../include/openssl/md5.h
rand.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
rand.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
rand.o: ../include/openssl/opensslv.h ../include/openssl/pkcs7.h
rand.o: ../include/openssl/rand.h ../include/openssl/rc2.h
rand.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
rand.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
rand.o: ../include/openssl/safestack.h ../include/openssl/sha.h
rand.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
rand.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
req.o: ../include/openssl/asn1.h ../include/openssl/bio.h
req.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
req.o: ../include/openssl/buffer.h ../include/openssl/cast.h
req.o: ../include/openssl/conf.h ../include/openssl/crypto.h
req.o: ../include/openssl/des.h ../include/openssl/dh.h
req.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
req.o: ../include/openssl/e_os2.h ../include/openssl/err.h
req.o: ../include/openssl/evp.h ../include/openssl/idea.h
req.o: ../include/openssl/lhash.h ../include/openssl/md2.h
req.o: ../include/openssl/md4.h ../include/openssl/md5.h
req.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
req.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
req.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
req.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
req.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
req.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
req.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
req.o: ../include/openssl/sha.h ../include/openssl/stack.h
req.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
req.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
rsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
rsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
rsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
rsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
rsa.o: ../include/openssl/des.h ../include/openssl/dh.h
rsa.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
rsa.o: ../include/openssl/e_os2.h ../include/openssl/err.h
rsa.o: ../include/openssl/evp.h ../include/openssl/idea.h
rsa.o: ../include/openssl/lhash.h ../include/openssl/md2.h
rsa.o: ../include/openssl/md4.h ../include/openssl/md5.h
rsa.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
rsa.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
rsa.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
rsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
rsa.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
rsa.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
rsa.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
rsa.o: ../include/openssl/sha.h ../include/openssl/stack.h
rsa.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
rsa.o: ../include/openssl/x509_vfy.h apps.h
rsautl.o: ../include/openssl/asn1.h ../include/openssl/bio.h
rsautl.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
rsautl.o: ../include/openssl/buffer.h ../include/openssl/cast.h
rsautl.o: ../include/openssl/conf.h ../include/openssl/crypto.h
rsautl.o: ../include/openssl/des.h ../include/openssl/dh.h
rsautl.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
rsautl.o: ../include/openssl/e_os2.h ../include/openssl/err.h
rsautl.o: ../include/openssl/evp.h ../include/openssl/idea.h
rsautl.o: ../include/openssl/lhash.h ../include/openssl/md2.h
rsautl.o: ../include/openssl/md4.h ../include/openssl/md5.h
rsautl.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
rsautl.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
rsautl.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
rsautl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
rsautl.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
rsautl.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
rsautl.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
rsautl.o: ../include/openssl/sha.h ../include/openssl/stack.h
rsautl.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
rsautl.o: ../include/openssl/x509_vfy.h apps.h
s_cb.o: ../include/openssl/asn1.h ../include/openssl/bio.h
s_cb.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
s_cb.o: ../include/openssl/buffer.h ../include/openssl/cast.h
s_cb.o: ../include/openssl/comp.h ../include/openssl/conf.h
s_cb.o: ../include/openssl/crypto.h ../include/openssl/des.h
s_cb.o: ../include/openssl/dh.h ../include/openssl/dsa.h
s_cb.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
s_cb.o: ../include/openssl/err.h ../include/openssl/evp.h
s_cb.o: ../include/openssl/idea.h ../include/openssl/lhash.h
s_cb.o: ../include/openssl/md2.h ../include/openssl/md4.h
s_cb.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
s_cb.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
s_cb.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
s_cb.o: ../include/openssl/pem.h ../include/openssl/pem2.h
s_cb.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
s_cb.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
s_cb.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
s_cb.o: ../include/openssl/safestack.h ../include/openssl/sha.h
s_cb.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
s_cb.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
s_cb.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
s_cb.o: ../include/openssl/tls1.h ../include/openssl/x509.h
s_cb.o: ../include/openssl/x509_vfy.h apps.h s_apps.h
s_client.o: ../include/openssl/asn1.h ../include/openssl/bio.h
s_client.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
s_client.o: ../include/openssl/buffer.h ../include/openssl/cast.h
s_client.o: ../include/openssl/comp.h ../include/openssl/conf.h
s_client.o: ../include/openssl/crypto.h ../include/openssl/des.h
s_client.o: ../include/openssl/dh.h ../include/openssl/dsa.h
s_client.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
s_client.o: ../include/openssl/err.h ../include/openssl/evp.h
s_client.o: ../include/openssl/idea.h ../include/openssl/lhash.h
s_client.o: ../include/openssl/md2.h ../include/openssl/md4.h
s_client.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
s_client.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
s_client.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
s_client.o: ../include/openssl/pem.h ../include/openssl/pem2.h
s_client.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
s_client.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
s_client.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
s_client.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
s_client.o: ../include/openssl/sha.h ../include/openssl/ssl.h
s_client.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
s_client.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
s_client.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
s_client.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
s_client.o: s_apps.h
s_server.o: ../include/openssl/asn1.h ../include/openssl/bio.h
s_server.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
s_server.o: ../include/openssl/buffer.h ../include/openssl/cast.h
s_server.o: ../include/openssl/comp.h ../include/openssl/conf.h
s_server.o: ../include/openssl/crypto.h ../include/openssl/des.h
s_server.o: ../include/openssl/dh.h ../include/openssl/dsa.h
s_server.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
s_server.o: ../include/openssl/err.h ../include/openssl/evp.h
s_server.o: ../include/openssl/idea.h ../include/openssl/lhash.h
s_server.o: ../include/openssl/md2.h ../include/openssl/md4.h
s_server.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
s_server.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
s_server.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
s_server.o: ../include/openssl/pem.h ../include/openssl/pem2.h
s_server.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
s_server.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
s_server.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
s_server.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
s_server.o: ../include/openssl/sha.h ../include/openssl/ssl.h
s_server.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
s_server.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
s_server.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
s_server.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
s_server.o: s_apps.h
s_socket.o: ../include/openssl/asn1.h ../include/openssl/bio.h
s_socket.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
s_socket.o: ../include/openssl/buffer.h ../include/openssl/cast.h
s_socket.o: ../include/openssl/comp.h ../include/openssl/conf.h
s_socket.o: ../include/openssl/crypto.h ../include/openssl/des.h
s_socket.o: ../include/openssl/dh.h ../include/openssl/dsa.h
s_socket.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
s_socket.o: ../include/openssl/evp.h ../include/openssl/idea.h
s_socket.o: ../include/openssl/lhash.h ../include/openssl/md2.h
s_socket.o: ../include/openssl/md4.h ../include/openssl/md5.h
s_socket.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
s_socket.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
s_socket.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
s_socket.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
s_socket.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
s_socket.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
s_socket.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
s_socket.o: ../include/openssl/sha.h ../include/openssl/ssl.h
s_socket.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
s_socket.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
s_socket.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
s_socket.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
s_socket.o: s_apps.h
s_time.o: ../include/openssl/asn1.h ../include/openssl/bio.h
s_time.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
s_time.o: ../include/openssl/buffer.h ../include/openssl/cast.h
s_time.o: ../include/openssl/comp.h ../include/openssl/conf.h
s_time.o: ../include/openssl/crypto.h ../include/openssl/des.h
s_time.o: ../include/openssl/dh.h ../include/openssl/dsa.h
s_time.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
s_time.o: ../include/openssl/err.h ../include/openssl/evp.h
s_time.o: ../include/openssl/idea.h ../include/openssl/lhash.h
s_time.o: ../include/openssl/md2.h ../include/openssl/md4.h
s_time.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
s_time.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
s_time.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
s_time.o: ../include/openssl/pem.h ../include/openssl/pem2.h
s_time.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
s_time.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
s_time.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
s_time.o: ../include/openssl/safestack.h ../include/openssl/sha.h
s_time.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
s_time.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
s_time.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
s_time.o: ../include/openssl/tls1.h ../include/openssl/x509.h
s_time.o: ../include/openssl/x509_vfy.h apps.h s_apps.h
sess_id.o: ../include/openssl/asn1.h ../include/openssl/bio.h
sess_id.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
sess_id.o: ../include/openssl/buffer.h ../include/openssl/cast.h
sess_id.o: ../include/openssl/comp.h ../include/openssl/conf.h
sess_id.o: ../include/openssl/crypto.h ../include/openssl/des.h
sess_id.o: ../include/openssl/dh.h ../include/openssl/dsa.h
sess_id.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
sess_id.o: ../include/openssl/err.h ../include/openssl/evp.h
sess_id.o: ../include/openssl/idea.h ../include/openssl/lhash.h
sess_id.o: ../include/openssl/md2.h ../include/openssl/md4.h
sess_id.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
sess_id.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
sess_id.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
sess_id.o: ../include/openssl/pem.h ../include/openssl/pem2.h
sess_id.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
sess_id.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
sess_id.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
sess_id.o: ../include/openssl/safestack.h ../include/openssl/sha.h
sess_id.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
sess_id.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
sess_id.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
sess_id.o: ../include/openssl/tls1.h ../include/openssl/x509.h
sess_id.o: ../include/openssl/x509_vfy.h apps.h
smime.o: ../include/openssl/asn1.h ../include/openssl/bio.h
smime.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
smime.o: ../include/openssl/buffer.h ../include/openssl/cast.h
smime.o: ../include/openssl/conf.h ../include/openssl/crypto.h
smime.o: ../include/openssl/des.h ../include/openssl/dh.h
smime.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
smime.o: ../include/openssl/e_os2.h ../include/openssl/err.h
smime.o: ../include/openssl/evp.h ../include/openssl/idea.h
smime.o: ../include/openssl/lhash.h ../include/openssl/md2.h
smime.o: ../include/openssl/md4.h ../include/openssl/md5.h
smime.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
smime.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
smime.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
smime.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
smime.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
smime.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
smime.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
smime.o: ../include/openssl/sha.h ../include/openssl/stack.h
smime.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
smime.o: ../include/openssl/x509_vfy.h apps.h
speed.o: ../include/openssl/asn1.h ../include/openssl/bio.h
speed.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
speed.o: ../include/openssl/buffer.h ../include/openssl/cast.h
speed.o: ../include/openssl/conf.h ../include/openssl/crypto.h
speed.o: ../include/openssl/des.h ../include/openssl/dh.h
speed.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
speed.o: ../include/openssl/e_os2.h ../include/openssl/err.h
speed.o: ../include/openssl/evp.h ../include/openssl/hmac.h
speed.o: ../include/openssl/idea.h ../include/openssl/lhash.h
speed.o: ../include/openssl/md2.h ../include/openssl/md4.h
speed.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
speed.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
speed.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
speed.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
speed.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
speed.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
speed.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
speed.o: ../include/openssl/sha.h ../include/openssl/stack.h
speed.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
speed.o: ../include/openssl/x509_vfy.h ./testdsa.h ./testrsa.h apps.h
spkac.o: ../include/openssl/asn1.h ../include/openssl/bio.h
spkac.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
spkac.o: ../include/openssl/buffer.h ../include/openssl/cast.h
spkac.o: ../include/openssl/conf.h ../include/openssl/crypto.h
spkac.o: ../include/openssl/des.h ../include/openssl/dh.h
spkac.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
spkac.o: ../include/openssl/e_os2.h ../include/openssl/err.h
spkac.o: ../include/openssl/evp.h ../include/openssl/idea.h
spkac.o: ../include/openssl/lhash.h ../include/openssl/md2.h
spkac.o: ../include/openssl/md4.h ../include/openssl/md5.h
spkac.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
spkac.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
spkac.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
spkac.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
spkac.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
spkac.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
spkac.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
spkac.o: ../include/openssl/sha.h ../include/openssl/stack.h
spkac.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
spkac.o: ../include/openssl/x509_vfy.h apps.h
verify.o: ../include/openssl/asn1.h ../include/openssl/bio.h
verify.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
verify.o: ../include/openssl/buffer.h ../include/openssl/cast.h
verify.o: ../include/openssl/conf.h ../include/openssl/crypto.h
verify.o: ../include/openssl/des.h ../include/openssl/dh.h
verify.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
verify.o: ../include/openssl/e_os2.h ../include/openssl/err.h
verify.o: ../include/openssl/evp.h ../include/openssl/idea.h
verify.o: ../include/openssl/lhash.h ../include/openssl/md2.h
verify.o: ../include/openssl/md4.h ../include/openssl/md5.h
verify.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
verify.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
verify.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
verify.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
verify.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
verify.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
verify.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
verify.o: ../include/openssl/sha.h ../include/openssl/stack.h
verify.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
verify.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
version.o: ../include/openssl/asn1.h ../include/openssl/bio.h
version.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
version.o: ../include/openssl/buffer.h ../include/openssl/cast.h
version.o: ../include/openssl/conf.h ../include/openssl/crypto.h
version.o: ../include/openssl/des.h ../include/openssl/dh.h
version.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
version.o: ../include/openssl/e_os2.h ../include/openssl/evp.h
version.o: ../include/openssl/idea.h ../include/openssl/lhash.h
version.o: ../include/openssl/md2.h ../include/openssl/md4.h
version.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
version.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
version.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
version.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
version.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
version.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
version.o: ../include/openssl/safestack.h ../include/openssl/sha.h
version.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
version.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
x509.o: ../include/openssl/asn1.h ../include/openssl/bio.h
x509.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
x509.o: ../include/openssl/buffer.h ../include/openssl/cast.h
x509.o: ../include/openssl/conf.h ../include/openssl/crypto.h
x509.o: ../include/openssl/des.h ../include/openssl/dh.h
x509.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
x509.o: ../include/openssl/e_os2.h ../include/openssl/err.h
x509.o: ../include/openssl/evp.h ../include/openssl/idea.h
x509.o: ../include/openssl/lhash.h ../include/openssl/md2.h
x509.o: ../include/openssl/md4.h ../include/openssl/md5.h
x509.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
x509.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
x509.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
x509.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
x509.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
x509.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
x509.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
x509.o: ../include/openssl/sha.h ../include/openssl/stack.h
x509.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
x509.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h

View File

@@ -124,7 +124,7 @@ int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn)
int consider_randfile = (file == NULL); int consider_randfile = (file == NULL);
char buffer[200]; char buffer[200];
#ifdef OPENSSL_SYS_WINDOWS #ifdef WINDOWS
BIO_printf(bio_e,"Loading 'screen' into random state -"); BIO_printf(bio_e,"Loading 'screen' into random state -");
BIO_flush(bio_e); BIO_flush(bio_e);
RAND_screen(); RAND_screen();
@@ -142,21 +142,18 @@ int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn)
} }
if (file == NULL || !RAND_load_file(file, -1)) if (file == NULL || !RAND_load_file(file, -1))
{ {
if (RAND_status() == 0) if (RAND_status() == 0 && !dont_warn)
{ {
if (!dont_warn) BIO_printf(bio_e,"unable to load 'random state'\n");
BIO_printf(bio_e,"This means that the random number generator has not been seeded\n");
BIO_printf(bio_e,"with much random data.\n");
if (consider_randfile) /* explanation does not apply when a file is explicitly named */
{ {
BIO_printf(bio_e,"unable to load 'random state'\n"); BIO_printf(bio_e,"Consider setting the RANDFILE environment variable to point at a file that\n");
BIO_printf(bio_e,"This means that the random number generator has not been seeded\n"); BIO_printf(bio_e,"'random' data can be kept in (the file will be overwritten).\n");
BIO_printf(bio_e,"with much random data.\n");
if (consider_randfile) /* explanation does not apply when a file is explicitly named */
{
BIO_printf(bio_e,"Consider setting the RANDFILE environment variable to point at a file that\n");
BIO_printf(bio_e,"'random' data can be kept in (the file will be overwritten).\n");
}
} }
return 0;
} }
return 0;
} }
seeded = 1; seeded = 1;
return 1; return 1;

File diff suppressed because it is too large Load Diff

View File

@@ -55,74 +55,18 @@
* copied and put under another distribution licence * copied and put under another distribution licence
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
/* ====================================================================
* Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@openssl.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
#ifndef HEADER_APPS_H #ifndef HEADER_APPS_H
#define HEADER_APPS_H #define HEADER_APPS_H
#include "e_os.h" #include "openssl/e_os.h"
#include <openssl/buffer.h>
#include <openssl/bio.h> #include <openssl/bio.h>
#include <openssl/crypto.h>
#include <openssl/x509.h> #include <openssl/x509.h>
#include <openssl/lhash.h> #include <openssl/lhash.h>
#include <openssl/conf.h> #include <openssl/conf.h>
#include <openssl/txt_db.h>
#ifndef OPENSSL_NO_ENGINE
#include <openssl/engine.h>
#endif
#include <openssl/ossl_typ.h>
int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn); int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn);
int app_RAND_write_file(const char *file, BIO *bio_e); int app_RAND_write_file(const char *file, BIO *bio_e);
@@ -134,9 +78,13 @@ long app_RAND_load_files(char *file); /* `file' is a list of files to read,
* (see e_os.h). The string is * (see e_os.h). The string is
* destroyed! */ * destroyed! */
#ifdef OPENSSL_SYS_WIN32 #ifdef NO_STDIO
BIO_METHOD *BIO_s_file();
#endif
#ifdef WIN32
#define rename(from,to) WIN32_rename((from),(to)) #define rename(from,to) WIN32_rename((from),(to))
int WIN32_rename(const char *oldname,const char *newname); int WIN32_rename(char *oldname,char *newname);
#endif #endif
#ifndef MONOLITH #ifndef MONOLITH
@@ -144,28 +92,23 @@ int WIN32_rename(const char *oldname,const char *newname);
#define MAIN(a,v) main(a,v) #define MAIN(a,v) main(a,v)
#ifndef NON_MAIN #ifndef NON_MAIN
CONF *config=NULL; LHASH *config=NULL;
BIO *bio_err=NULL; BIO *bio_err=NULL;
int in_FIPS_mode=0;
#else #else
extern CONF *config; extern LHASH *config;
extern BIO *bio_err; extern BIO *bio_err;
extern int in_FIPS_mode;
#endif #endif
#else #else
#define MAIN(a,v) PROG(a,v) #define MAIN(a,v) PROG(a,v)
extern CONF *config; extern LHASH *config;
extern char *default_config_file; extern char *default_config_file;
extern BIO *bio_err; extern BIO *bio_err;
extern int in_FIPS_mode;
#endif #endif
#ifndef OPENSSL_SYS_NETWARE
#include <signal.h> #include <signal.h>
#endif
#ifdef SIGPIPE #ifdef SIGPIPE
#define do_pipe_sig() signal(SIGPIPE,SIG_IGN) #define do_pipe_sig() signal(SIGPIPE,SIG_IGN)
@@ -174,60 +117,20 @@ extern int in_FIPS_mode;
#endif #endif
#if defined(MONOLITH) && !defined(OPENSSL_C) #if defined(MONOLITH) && !defined(OPENSSL_C)
# define apps_startup() \ # define apps_startup() do_pipe_sig()
do_pipe_sig()
# define apps_shutdown()
#else #else
# ifndef OPENSSL_NO_ENGINE # if defined(MSDOS) || defined(WIN16) || defined(WIN32)
# if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WIN16) || \ # ifdef _O_BINARY
defined(OPENSSL_SYS_WIN32) # define apps_startup() \
# ifdef _O_BINARY _fmode=_O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
# define apps_startup() \ SSLeay_add_all_algorithms()
do { _fmode=_O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
ENGINE_load_builtin_engines(); setup_ui_method(); } while(0)
# else
# define apps_startup() \
do { _fmode=O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
ENGINE_load_builtin_engines(); setup_ui_method(); } while(0)
# endif
# else # else
# define apps_startup() \ # define apps_startup() \
do { do_pipe_sig(); OpenSSL_add_all_algorithms(); \ _fmode=O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
ERR_load_crypto_strings(); ENGINE_load_builtin_engines(); \ SSLeay_add_all_algorithms()
setup_ui_method(); } while(0)
# endif # endif
# define apps_shutdown() \
do { CONF_modules_unload(1); destroy_ui_method(); \
EVP_cleanup(); ENGINE_cleanup(); \
CRYPTO_cleanup_all_ex_data(); ERR_remove_state(0); \
ERR_free_strings(); } while(0)
# else # else
# if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WIN16) || \ # define apps_startup() do_pipe_sig(); SSLeay_add_all_algorithms();
defined(OPENSSL_SYS_WIN32)
# ifdef _O_BINARY
# define apps_startup() \
do { _fmode=_O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
setup_ui_method(); } while(0)
# else
# define apps_startup() \
do { _fmode=O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
setup_ui_method(); } while(0)
# endif
# else
# define apps_startup() \
do { do_pipe_sig(); OpenSSL_add_all_algorithms(); \
ERR_load_crypto_strings(); \
setup_ui_method(); } while(0)
# endif
# define apps_shutdown() \
do { CONF_modules_unload(1); destroy_ui_method(); \
EVP_cleanup(); \
CRYPTO_cleanup_all_ex_data(); ERR_remove_state(0); \
ERR_free_strings(); } while(0)
# endif # endif
#endif #endif
@@ -237,19 +140,6 @@ typedef struct args_st
int count; int count;
} ARGS; } ARGS;
#define PW_MIN_LENGTH 4
typedef struct pw_cb_data
{
const void *password;
const char *prompt_info;
} PW_CB_DATA;
int password_callback(char *buf, int bufsiz, int verify,
PW_CB_DATA *cb_data);
int setup_ui_method(void);
void destroy_ui_method(void);
int should_retry(int i); int should_retry(int i);
int args_from_file(char *file, int *argc, char **argv[]); int args_from_file(char *file, int *argc, char **argv[]);
int str2fmt(char *s); int str2fmt(char *s);
@@ -257,72 +147,15 @@ void program_name(char *in,char *out,int size);
int chopup_args(ARGS *arg,char *buf, int *argc, char **argv[]); int chopup_args(ARGS *arg,char *buf, int *argc, char **argv[]);
#ifdef HEADER_X509_H #ifdef HEADER_X509_H
int dump_cert_text(BIO *out, X509 *x); int dump_cert_text(BIO *out, X509 *x);
void print_name(BIO *out, const char *title, X509_NAME *nm, unsigned long lflags); void print_name(BIO *out, char *title, X509_NAME *nm, unsigned long lflags);
#endif #endif
int set_cert_ex(unsigned long *flags, const char *arg);
int set_name_ex(unsigned long *flags, const char *arg); int set_name_ex(unsigned long *flags, const char *arg);
int set_ext_copy(int *copy_type, const char *arg);
int copy_extensions(X509 *x, X509_REQ *req, int copy_type);
int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2); int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2);
int add_oid_section(BIO *err, CONF *conf); int add_oid_section(BIO *err, LHASH *conf);
X509 *load_cert(BIO *err, const char *file, int format, X509 *load_cert(BIO *err, char *file, int format);
const char *pass, ENGINE *e, const char *cert_descrip); EVP_PKEY *load_key(BIO *err, char *file, int format, char *pass);
EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin, EVP_PKEY *load_pubkey(BIO *err, char *file, int format);
const char *pass, ENGINE *e, const char *key_descrip); STACK_OF(X509) *load_certs(BIO *err, char *file, int format);
EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin,
const char *pass, ENGINE *e, const char *key_descrip);
STACK_OF(X509) *load_certs(BIO *err, const char *file, int format,
const char *pass, ENGINE *e, const char *cert_descrip);
X509_STORE *setup_verify(BIO *bp, char *CAfile, char *CApath);
#ifndef OPENSSL_NO_ENGINE
ENGINE *setup_engine(BIO *err, const char *engine, int debug);
#endif
int load_config(BIO *err, CONF *cnf);
char *make_config_name(void);
/* Functions defined in ca.c and also used in ocsp.c */
int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
ASN1_GENERALIZEDTIME **pinvtm, const char *str);
#define DB_type 0
#define DB_exp_date 1
#define DB_rev_date 2
#define DB_serial 3 /* index - unique */
#define DB_file 4
#define DB_name 5 /* index - unique when active and not disabled */
#define DB_NUMBER 6
#define DB_TYPE_REV 'R'
#define DB_TYPE_EXP 'E'
#define DB_TYPE_VAL 'V'
typedef struct db_attr_st
{
int unique_subject;
} DB_ATTR;
typedef struct ca_db_st
{
DB_ATTR attributes;
TXT_DB *db;
} CA_DB;
BIGNUM *load_serial(char *serialfile, int create, ASN1_INTEGER **retai);
int save_serial(char *serialfile, char *suffix, BIGNUM *serial, ASN1_INTEGER **retai);
int rotate_serial(char *serialfile, char *new_suffix, char *old_suffix);
int rand_serial(BIGNUM *b, ASN1_INTEGER *ai);
CA_DB *load_index(char *dbfile, DB_ATTR *dbattr);
int index_index(CA_DB *db);
int save_index(const char *dbfile, const char *suffix, CA_DB *db);
int rotate_index(const char *dbfile, const char *new_suffix, const char *old_suffix);
void free_index(CA_DB *db);
int index_name_cmp(const char **a, const char **b);
int parse_yesno(const char *str, int def);
X509_NAME *parse_name(char *str, long chtype, int multirdn);
int args_verify(char ***pargs, int *pargc,
int *badarg, BIO *err, X509_VERIFY_PARAM **pm);
void policies_print(BIO *out, X509_STORE_CTX *ctx);
#define FORMAT_UNDEF 0 #define FORMAT_UNDEF 0
#define FORMAT_ASN1 1 #define FORMAT_ASN1 1
@@ -331,18 +164,9 @@ void policies_print(BIO *out, X509_STORE_CTX *ctx);
#define FORMAT_NETSCAPE 4 #define FORMAT_NETSCAPE 4
#define FORMAT_PKCS12 5 #define FORMAT_PKCS12 5
#define FORMAT_SMIME 6 #define FORMAT_SMIME 6
#define FORMAT_ENGINE 7
#define FORMAT_IISSGC 8 /* XXX this stupid macro helps us to avoid
* adding yet another param to load_*key() */
#define EXT_COPY_NONE 0
#define EXT_COPY_ADD 1
#define EXT_COPY_ALL 2
#define NETSCAPE_CERT_HDR "certificate" #define NETSCAPE_CERT_HDR "certificate"
#define APP_PASS_LEN 1024 #define APP_PASS_LEN 1024
#define SERIAL_RAND_BITS 64
#endif #endif

View File

@@ -82,8 +82,6 @@
int MAIN(int, char **); int MAIN(int, char **);
static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
int i,badops=0,offset=0,ret=1,j; int i,badops=0,offset=0,ret=1,j;
@@ -92,9 +90,7 @@ int MAIN(int argc, char **argv)
BIO *in=NULL,*out=NULL,*b64=NULL, *derout = NULL; BIO *in=NULL,*out=NULL,*b64=NULL, *derout = NULL;
int informat,indent=0, noout = 0, dump = 0; int informat,indent=0, noout = 0, dump = 0;
char *infile=NULL,*str=NULL,*prog,*oidfile=NULL, *derfile=NULL; char *infile=NULL,*str=NULL,*prog,*oidfile=NULL, *derfile=NULL;
char *genstr=NULL, *genconf=NULL;
unsigned char *tmpbuf; unsigned char *tmpbuf;
const unsigned char *ctmpbuf;
BUF_MEM *buf=NULL; BUF_MEM *buf=NULL;
STACK *osk=NULL; STACK *osk=NULL;
ASN1_TYPE *at=NULL; ASN1_TYPE *at=NULL;
@@ -107,9 +103,6 @@ int MAIN(int argc, char **argv)
if ((bio_err=BIO_new(BIO_s_file())) != NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto end;
prog=argv[0]; prog=argv[0];
argc--; argc--;
argv++; argv++;
@@ -171,16 +164,6 @@ int MAIN(int argc, char **argv)
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
sk_push(osk,*(++argv)); sk_push(osk,*(++argv));
} }
else if (strcmp(*argv,"-genstr") == 0)
{
if (--argc < 1) goto bad;
genstr= *(++argv);
}
else if (strcmp(*argv,"-genconf") == 0)
{
if (--argc < 1) goto bad;
genconf= *(++argv);
}
else else
{ {
BIO_printf(bio_err,"unknown option %s\n",*argv); BIO_printf(bio_err,"unknown option %s\n",*argv);
@@ -196,7 +179,7 @@ int MAIN(int argc, char **argv)
bad: bad:
BIO_printf(bio_err,"%s [options] <infile\n",prog); BIO_printf(bio_err,"%s [options] <infile\n",prog);
BIO_printf(bio_err,"where options are\n"); BIO_printf(bio_err,"where options are\n");
BIO_printf(bio_err," -inform arg input format - one of DER PEM\n"); BIO_printf(bio_err," -inform arg input format - one of DER TXT PEM\n");
BIO_printf(bio_err," -in arg input file\n"); BIO_printf(bio_err," -in arg input file\n");
BIO_printf(bio_err," -out arg output file (output format is always DER\n"); BIO_printf(bio_err," -out arg output file (output format is always DER\n");
BIO_printf(bio_err," -noout arg don't produce any output\n"); BIO_printf(bio_err," -noout arg don't produce any output\n");
@@ -209,8 +192,6 @@ bad:
BIO_printf(bio_err," -strparse offset\n"); BIO_printf(bio_err," -strparse offset\n");
BIO_printf(bio_err," a series of these can be used to 'dig' into multiple\n"); BIO_printf(bio_err," a series of these can be used to 'dig' into multiple\n");
BIO_printf(bio_err," ASN1 blob wrappings\n"); BIO_printf(bio_err," ASN1 blob wrappings\n");
BIO_printf(bio_err," -genstr str string to generate ASN1 structure from\n");
BIO_printf(bio_err," -genconf file file to generate ASN1 structure from\n");
goto end; goto end;
} }
@@ -224,7 +205,7 @@ bad:
goto end; goto end;
} }
BIO_set_fp(out,stdout,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(out,stdout,BIO_NOCLOSE|BIO_FP_TEXT);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -264,39 +245,25 @@ bad:
if ((buf=BUF_MEM_new()) == NULL) goto end; if ((buf=BUF_MEM_new()) == NULL) goto end;
if (!BUF_MEM_grow(buf,BUFSIZ*8)) goto end; /* Pre-allocate :-) */ if (!BUF_MEM_grow(buf,BUFSIZ*8)) goto end; /* Pre-allocate :-) */
if (genstr || genconf) if (informat == FORMAT_PEM)
{ {
num = do_generate(bio_err, genstr, genconf, buf); BIO *tmp;
if (num < 0)
{ if ((b64=BIO_new(BIO_f_base64())) == NULL)
ERR_print_errors(bio_err);
goto end; goto end;
} BIO_push(b64,in);
tmp=in;
in=b64;
b64=tmp;
} }
else num=0;
for (;;)
{ {
if (!BUF_MEM_grow(buf,(int)num+BUFSIZ)) goto end;
if (informat == FORMAT_PEM) i=BIO_read(in,&(buf->data[num]),BUFSIZ);
{ if (i <= 0) break;
BIO *tmp; num+=i;
if ((b64=BIO_new(BIO_f_base64())) == NULL)
goto end;
BIO_push(b64,in);
tmp=in;
in=b64;
b64=tmp;
}
num=0;
for (;;)
{
if (!BUF_MEM_grow(buf,(int)num+BUFSIZ)) goto end;
i=BIO_read(in,&(buf->data[num]),BUFSIZ);
if (i <= 0) break;
num+=i;
}
} }
str=buf->data; str=buf->data;
@@ -309,7 +276,6 @@ bad:
for (i=0; i<sk_num(osk); i++) for (i=0; i<sk_num(osk); i++)
{ {
ASN1_TYPE *atmp; ASN1_TYPE *atmp;
int typ;
j=atoi(sk_value(osk,i)); j=atoi(sk_value(osk,i));
if (j == 0) if (j == 0)
{ {
@@ -319,8 +285,7 @@ bad:
tmpbuf+=j; tmpbuf+=j;
tmplen-=j; tmplen-=j;
atmp = at; atmp = at;
ctmpbuf = tmpbuf; at = d2i_ASN1_TYPE(NULL,&tmpbuf,tmplen);
at = d2i_ASN1_TYPE(NULL,&ctmpbuf,tmplen);
ASN1_TYPE_free(atmp); ASN1_TYPE_free(atmp);
if(!at) if(!at)
{ {
@@ -328,15 +293,6 @@ bad:
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
goto end; goto end;
} }
typ = ASN1_TYPE_get(at);
if ((typ == V_ASN1_OBJECT)
|| (typ == V_ASN1_NULL))
{
BIO_printf(bio_err, "Can't parse %s type\n",
typ == V_ASN1_NULL ? "NULL" : "OBJECT");
ERR_print_errors(bio_err);
goto end;
}
/* hmm... this is a little evil but it works */ /* hmm... this is a little evil but it works */
tmpbuf=at->value.asn1_string->data; tmpbuf=at->value.asn1_string->data;
tmplen=at->value.asn1_string->length; tmplen=at->value.asn1_string->length;
@@ -345,15 +301,7 @@ bad:
num=tmplen; num=tmplen;
} }
if (offset >= num) if (length == 0) length=(unsigned int)num;
{
BIO_printf(bio_err, "Error: offset too large\n");
goto end;
}
num -= offset;
if ((length == 0) || ((long)length > num)) length=(unsigned int)num;
if(derout) { if(derout) {
if(BIO_write(derout, str + offset, length) != (int)length) { if(BIO_write(derout, str + offset, length) != (int)length) {
BIO_printf(bio_err, "Error writing output\n"); BIO_printf(bio_err, "Error writing output\n");
@@ -380,65 +328,6 @@ end:
if (at != NULL) ASN1_TYPE_free(at); if (at != NULL) ASN1_TYPE_free(at);
if (osk != NULL) sk_free(osk); if (osk != NULL) sk_free(osk);
OBJ_cleanup(); OBJ_cleanup();
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }
static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf)
{
CONF *cnf = NULL;
int len;
long errline;
unsigned char *p;
ASN1_TYPE *atyp = NULL;
if (genconf)
{
cnf = NCONF_new(NULL);
if (!NCONF_load(cnf, genconf, &errline))
goto conferr;
if (!genstr)
genstr = NCONF_get_string(cnf, "default", "asn1");
if (!genstr)
{
BIO_printf(bio, "Can't find 'asn1' in '%s'\n", genconf);
goto err;
}
}
atyp = ASN1_generate_nconf(genstr, cnf);
NCONF_free(cnf);
if (!atyp)
return -1;
len = i2d_ASN1_TYPE(atyp, NULL);
if (len <= 0)
goto err;
if (!BUF_MEM_grow(buf,len))
goto err;
p=(unsigned char *)buf->data;
i2d_ASN1_TYPE(atyp, &p);
ASN1_TYPE_free(atyp);
return len;
conferr:
if (errline > 0)
BIO_printf(bio, "Error on line %ld of config file '%s'\n",
errline, genconf);
else
BIO_printf(bio, "Error loading config file '%s'\n", genconf);
err:
NCONF_free(cnf);
ASN1_TYPE_free(atyp);
return -1;
}

1930
apps/ca.c

File diff suppressed because it is too large Load Diff

View File

@@ -59,7 +59,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#ifdef OPENSSL_NO_STDIO #ifdef NO_STDIO
#define APPS_WIN16 #define APPS_WIN16
#endif #endif
#include "apps.h" #include "apps.h"
@@ -69,7 +69,7 @@
#undef PROG #undef PROG
#define PROG ciphers_main #define PROG ciphers_main
static const char *ciphers_usage[]={ static char *ciphers_usage[]={
"usage: ciphers args\n", "usage: ciphers args\n",
" -v - verbose mode, a textual listing of the ciphers in SSLeay\n", " -v - verbose mode, a textual listing of the ciphers in SSLeay\n",
" -ssl2 - SSL2 mode\n", " -ssl2 - SSL2 mode\n",
@@ -84,7 +84,7 @@ int MAIN(int argc, char **argv)
{ {
int ret=1,i; int ret=1,i;
int verbose=0; int verbose=0;
const char **pp; char **pp;
const char *p; const char *p;
int badops=0; int badops=0;
SSL_CTX *ctx=NULL; SSL_CTX *ctx=NULL;
@@ -95,11 +95,11 @@ int MAIN(int argc, char **argv)
char buf[512]; char buf[512];
BIO *STDout=NULL; BIO *STDout=NULL;
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3) #if !defined(NO_SSL2) && !defined(NO_SSL3)
meth=SSLv23_server_method(); meth=SSLv23_server_method();
#elif !defined(OPENSSL_NO_SSL3) #elif !defined(NO_SSL3)
meth=SSLv3_server_method(); meth=SSLv3_server_method();
#elif !defined(OPENSSL_NO_SSL2) #elif !defined(NO_SSL2)
meth=SSLv2_server_method(); meth=SSLv2_server_method();
#endif #endif
@@ -108,7 +108,7 @@ int MAIN(int argc, char **argv)
if (bio_err == NULL) if (bio_err == NULL)
bio_err=BIO_new_fp(stderr,BIO_NOCLOSE); bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
STDout=BIO_new_fp(stdout,BIO_NOCLOSE); STDout=BIO_new_fp(stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
STDout = BIO_push(tmpbio, STDout); STDout = BIO_push(tmpbio, STDout);
@@ -121,15 +121,15 @@ int MAIN(int argc, char **argv)
{ {
if (strcmp(*argv,"-v") == 0) if (strcmp(*argv,"-v") == 0)
verbose=1; verbose=1;
#ifndef OPENSSL_NO_SSL2 #ifndef NO_SSL2
else if (strcmp(*argv,"-ssl2") == 0) else if (strcmp(*argv,"-ssl2") == 0)
meth=SSLv2_client_method(); meth=SSLv2_client_method();
#endif #endif
#ifndef OPENSSL_NO_SSL3 #ifndef NO_SSL3
else if (strcmp(*argv,"-ssl3") == 0) else if (strcmp(*argv,"-ssl3") == 0)
meth=SSLv3_client_method(); meth=SSLv3_client_method();
#endif #endif
#ifndef OPENSSL_NO_TLS1 #ifndef NO_TLS1
else if (strcmp(*argv,"-tls1") == 0) else if (strcmp(*argv,"-tls1") == 0)
meth=TLSv1_client_method(); meth=TLSv1_client_method();
#endif #endif
@@ -150,7 +150,7 @@ int MAIN(int argc, char **argv)
if (badops) if (badops)
{ {
for (pp=ciphers_usage; (*pp != NULL); pp++) for (pp=ciphers_usage; (*pp != NULL); pp++)
BIO_printf(bio_err,"%s",*pp); BIO_printf(bio_err,*pp);
goto end; goto end;
} }
@@ -187,7 +187,7 @@ int MAIN(int argc, char **argv)
{ {
BIO_puts(STDout,SSL_CIPHER_description( BIO_puts(STDout,SSL_CIPHER_description(
sk_SSL_CIPHER_value(sk,i), sk_SSL_CIPHER_value(sk,i),
buf,sizeof buf)); buf,512));
} }
} }
@@ -202,7 +202,6 @@ end:
if (ctx != NULL) SSL_CTX_free(ctx); if (ctx != NULL) SSL_CTX_free(ctx);
if (ssl != NULL) SSL_free(ssl); if (ssl != NULL) SSL_free(ssl);
if (STDout != NULL) BIO_free_all(STDout); if (STDout != NULL) BIO_free_all(STDout);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }

View File

@@ -72,7 +72,7 @@
#undef POSTFIX #undef POSTFIX
#define POSTFIX ".rvk" #define POSTFIX ".rvk"
static const char *crl_usage[]={ static char *crl_usage[]={
"usage: crl args\n", "usage: crl args\n",
"\n", "\n",
" -inform arg - input format - default PEM (DER or PEM)\n", " -inform arg - input format - default PEM (DER or PEM)\n",
@@ -81,14 +81,12 @@ static const char *crl_usage[]={
" -in arg - input file - default stdin\n", " -in arg - input file - default stdin\n",
" -out arg - output file - default stdout\n", " -out arg - output file - default stdout\n",
" -hash - print hash value\n", " -hash - print hash value\n",
" -fingerprint - print the crl fingerprint\n",
" -issuer - print issuer DN\n", " -issuer - print issuer DN\n",
" -lastupdate - lastUpdate field\n", " -lastupdate - lastUpdate field\n",
" -nextupdate - nextUpdate field\n", " -nextupdate - nextUpdate field\n",
" -noout - no CRL output\n", " -noout - no CRL output\n",
" -CAfile name - verify CRL using certificates in file \"name\"\n", " -CAfile name - verify CRL using certificates in file \"name\"\n",
" -CApath dir - verify CRL using certificates in \"dir\"\n", " -CApath dir - verify CRL using certificates in \"dir\"\n",
" -nameopt arg - various certificate name options\n",
NULL NULL
}; };
@@ -99,7 +97,6 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
unsigned long nmflag = 0;
X509_CRL *x=NULL; X509_CRL *x=NULL;
char *CAfile = NULL, *CApath = NULL; char *CAfile = NULL, *CApath = NULL;
int ret=1,i,num,badops=0; int ret=1,i,num,badops=0;
@@ -108,14 +105,14 @@ int MAIN(int argc, char **argv)
char *infile=NULL,*outfile=NULL; char *infile=NULL,*outfile=NULL;
int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0; int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0;
int fingerprint = 0; int fingerprint = 0;
const char **pp; char **pp,buf[256];
X509_STORE *store = NULL; X509_STORE *store = NULL;
X509_STORE_CTX ctx; X509_STORE_CTX ctx;
X509_LOOKUP *lookup = NULL; X509_LOOKUP *lookup = NULL;
X509_OBJECT xobj; X509_OBJECT xobj;
EVP_PKEY *pkey; EVP_PKEY *pkey;
int do_ver = 0; int do_ver = 0;
const EVP_MD *md_alg,*digest=EVP_sha1(); const EVP_MD *md_alg,*digest=EVP_md5();
apps_startup(); apps_startup();
@@ -123,14 +120,11 @@ int MAIN(int argc, char **argv)
if ((bio_err=BIO_new(BIO_s_file())) != NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto end;
if (bio_out == NULL) if (bio_out == NULL)
if ((bio_out=BIO_new(BIO_s_file())) != NULL) if ((bio_out=BIO_new(BIO_s_file())) != NULL)
{ {
BIO_set_fp(bio_out,stdout,BIO_NOCLOSE); BIO_set_fp(bio_out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
bio_out = BIO_push(tmpbio, bio_out); bio_out = BIO_push(tmpbio, bio_out);
@@ -191,11 +185,6 @@ int MAIN(int argc, char **argv)
text = 1; text = 1;
else if (strcmp(*argv,"-hash") == 0) else if (strcmp(*argv,"-hash") == 0)
hash= ++num; hash= ++num;
else if (strcmp(*argv,"-nameopt") == 0)
{
if (--argc < 1) goto bad;
if (!set_name_ex(&nmflag, *(++argv))) goto bad;
}
else if (strcmp(*argv,"-issuer") == 0) else if (strcmp(*argv,"-issuer") == 0)
issuer= ++num; issuer= ++num;
else if (strcmp(*argv,"-lastupdate") == 0) else if (strcmp(*argv,"-lastupdate") == 0)
@@ -225,7 +214,7 @@ int MAIN(int argc, char **argv)
{ {
bad: bad:
for (pp=crl_usage; (*pp != NULL); pp++) for (pp=crl_usage; (*pp != NULL); pp++)
BIO_printf(bio_err,"%s",*pp); BIO_printf(bio_err,*pp);
goto end; goto end;
} }
@@ -246,11 +235,7 @@ bad:
X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT); X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
ERR_clear_error(); ERR_clear_error();
if(!X509_STORE_CTX_init(&ctx, store, NULL, NULL)) { X509_STORE_CTX_init(&ctx, store, NULL, NULL);
BIO_printf(bio_err,
"Error initialising X509 store\n");
goto end;
}
i = X509_STORE_get_by_subject(&ctx, X509_LU_X509, i = X509_STORE_get_by_subject(&ctx, X509_LU_X509,
X509_CRL_get_issuer(x), &xobj); X509_CRL_get_issuer(x), &xobj);
@@ -279,7 +264,9 @@ bad:
{ {
if (issuer == i) if (issuer == i)
{ {
print_name(bio_out, "issuer=", X509_CRL_get_issuer(x), nmflag); X509_NAME_oneline(X509_CRL_get_issuer(x),
buf,256);
BIO_printf(bio_out,"issuer= %s\n",buf);
} }
if (hash == i) if (hash == i)
@@ -337,7 +324,7 @@ bad:
if (outfile == NULL) if (outfile == NULL)
{ {
BIO_set_fp(out,stdout,BIO_NOCLOSE); BIO_set_fp(out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -355,11 +342,7 @@ bad:
if (text) X509_CRL_print(out, x); if (text) X509_CRL_print(out, x);
if (noout) if (noout) goto end;
{
ret = 0;
goto end;
}
if (outformat == FORMAT_ASN1) if (outformat == FORMAT_ASN1)
i=(int)i2d_X509_CRL_bio(out,x); i=(int)i2d_X509_CRL_bio(out,x);
@@ -381,7 +364,6 @@ end:
X509_STORE_CTX_cleanup(&ctx); X509_STORE_CTX_cleanup(&ctx);
X509_STORE_free(store); X509_STORE_free(store);
} }
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }

View File

@@ -166,8 +166,7 @@ bad:
BIO_printf(bio_err," -certfile arg certificates file of chain to a trusted CA\n"); BIO_printf(bio_err," -certfile arg certificates file of chain to a trusted CA\n");
BIO_printf(bio_err," (can be used more than once)\n"); BIO_printf(bio_err," (can be used more than once)\n");
BIO_printf(bio_err," -nocrl no crl to load, just certs from '-certfile'\n"); BIO_printf(bio_err," -nocrl no crl to load, just certs from '-certfile'\n");
ret = 1; OPENSSL_EXIT(1);
goto end;
} }
ERR_load_crypto_strings(); ERR_load_crypto_strings();
@@ -242,7 +241,7 @@ bad:
if (outfile == NULL) if (outfile == NULL)
{ {
BIO_set_fp(out,stdout,BIO_NOCLOSE); BIO_set_fp(out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -279,7 +278,6 @@ end:
if (p7 != NULL) PKCS7_free(p7); if (p7 != NULL) PKCS7_free(p7);
if (crl != NULL) X509_CRL_free(crl); if (crl != NULL) X509_CRL_free(crl);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }

305
apps/der_chop.in Normal file
View File

@@ -0,0 +1,305 @@
#!/usr/local/bin/perl
#
# der_chop ... this is one total hack that Eric is really not proud of
# so don't look at it and don't ask for support
#
# The "documentation" for this (i.e. all the comments) are my fault --tjh
#
# This program takes the "raw" output of derparse/asn1parse and
# converts it into tokens and then runs regular expression matches
# to try to figure out what to grab to get the things that are needed
# and it is possible that this will do the wrong thing as it is a *hack*
#
# SSLeay 0.5.2+ should have direct read support for x509 (via -inform NET)
# [I know ... promises promises :-)]
#
# To convert a Netscape Certificate:
# der_chop < ServerCert.der > cert.pem
# To convert a Netscape Key (and encrypt it again to protect it)
# rsa -inform NET -in ServerKey.der -des > key.pem
#
# 23-Apr-96 eay Added the extra ASN.1 string types, I still think this
# is an evil hack. If nothing else the parsing should
# be relative, not absolute.
# 19-Apr-96 tjh hacked (with eay) into 0.5.x format
#
# Tim Hudson
# tjh@cryptsoft.com
#
require 'getopts.pl';
$debug=0;
# this was the 0.4.x way of doing things ...
$cmd="derparse";
$x509_cmd="x509";
$crl_cmd="crl";
$rc4_cmd="rc4";
$md2_cmd="md2";
$md4_cmd="md4";
$rsa_cmd="rsa -des -inform der ";
# this was the 0.5.x way of doing things ...
$cmd="openssl asn1parse";
$x509_cmd="openssl x509";
$crl_cmd="openssl crl";
$rc4_cmd="openssl rc4";
$md2_cmd="openssl md2";
$md4_cmd="openssl md4";
$rsa_cmd="openssl rsa -des -inform der ";
&Getopts('vd:') || die "usage:$0 [-v] [-d num] file";
$depth=($opt_d =~ /^\d+$/)?$opt_d:0;
&init_der();
if ($#ARGV != -1)
{
foreach $file (@ARGV)
{
print STDERR "doing $file\n";
&dofile($file);
}
}
else
{
$file="/tmp/a$$.DER";
open(OUT,">$file") || die "unable to open $file:$!\n";
for (;;)
{
$i=sysread(STDIN,$b,1024*10);
last if ($i <= 0);
$i=syswrite(OUT,$b,$i);
}
&dofile($file);
unlink($file);
}
sub dofile
{
local($file)=@_;
local(@p);
$b=&load_file($file);
@p=&load_file_parse($file);
foreach $_ (@p)
{
($off,$d,$hl,$len)=&parse_line($_);
$d-=$depth;
next if ($d != 0);
next if ($len == 0);
$o=substr($b,$off,$len+$hl);
($str,@data)=&der_str($o);
print "$str\n" if ($opt_v);
if ($str =~ /^$crl/)
{
open(OUT,"|$crl_cmd -inform d -hash -issuer") ||
die "unable to run $crl_cmd:$!\n";
print OUT $o;
close(OUT);
}
elsif ($str =~ /^$x509/)
{
open(OUT,"|$x509_cmd -inform d -hash -subject -issuer")
|| die "unable to run $x509_cmd:$!\n";
print OUT $o;
close(OUT);
}
elsif ($str =~ /^$rsa/)
{
($type)=($data[3] =~ /OBJECT_IDENTIFIER :(.*)\s*$/);
next unless ($type eq "rsaEncryption");
($off,$d,$hl,$len)=&parse_line($data[5]);
$os=substr($o,$off+$hl,$len);
open(OUT,"|$rsa_cmd")
|| die "unable to run $rsa_cmd:$!\n";
print OUT $os;
close(OUT);
}
elsif ($str =~ /^0G-1D-1G/)
{
($off,$d,$hl,$len)=&parse_line($data[1]);
$os=substr($o,$off+$hl,$len);
print STDERR "<$os>\n" if $opt_v;
&do_certificate($o,@data)
if (($os eq "certificate") &&
($str =! /^0G-1D-1G-2G-3F-3E-2D/));
&do_private_key($o,@data)
if (($os eq "private-key") &&
($str =! /^0G-1D-1G-2G-3F-3E-2D/));
}
}
}
sub der_str
{
local($str)=@_;
local(*OUT,*IN,@a,$t,$d,$ret);
local($file)="/tmp/b$$.DER";
local(@ret);
open(OUT,">$file");
print OUT $str;
close(OUT);
open(IN,"$cmd -inform 'd' -in $file |") ||
die "unable to run $cmd:$!\n";
$ret="";
while (<IN>)
{
chop;
push(@ret,$_);
print STDERR "$_\n" if ($debug);
@a=split(/\s*:\s*/);
($d)=($a[1] =~ /d=\s*(\d+)/);
$a[2] =~ s/\s+$//;
$t=$DER_s2i{$a[2]};
$ret.="$d$t-";
}
close(IN);
unlink($file);
chop $ret;
$ret =~ s/(-3H(-4G-5F-5[IJKMQRS])+)+/-NAME/g;
$ret =~ s/(-3G-4B-4L)+/-RCERT/g;
return($ret,@ret);
}
sub init_der
{
$crl= "0G-1G-2G-3F-3E-2G-NAME-2L-2L-2G-RCERT-1G-2F-2E-1C";
$x509="0G-1G-2B-2G-3F-3E-2G-NAME-2G-3L-3L-2G-NAME-2G-3G-4F-4E-3C-1G-2F-2E-1C";
$rsa= "0G-1B-1G-2F-2E-1D";
%DER_i2s=(
# SSLeay 0.4.x has this list
"A","EOC",
"B","INTEGER",
"C","BIT STRING",
"D","OCTET STRING",
"E","NULL",
"F","OBJECT",
"G","SEQUENCE",
"H","SET",
"I","PRINTABLESTRING",
"J","T61STRING",
"K","IA5STRING",
"L","UTCTIME",
"M","NUMERICSTRING",
"N","VIDEOTEXSTRING",
"O","GENERALIZEDTIME",
"P","GRAPHICSTRING",
"Q","ISO64STRING",
"R","GENERALSTRING",
"S","UNIVERSALSTRING",
# SSLeay 0.5.x changed some things ... and I'm
# leaving in the old stuff but adding in these
# to handle the new as well --tjh
# - Well I've just taken them out and added the extra new
# ones :-) - eay
);
foreach (keys %DER_i2s)
{ $DER_s2i{$DER_i2s{$_}}=$_; }
}
sub parse_line
{
local($_)=@_;
return(/\s*(\d+):d=\s*(\d+)\s+hl=\s*(\d+)\s+l=\s*(\d+|inf)\s/);
}
# 0:d=0 hl=4 l=377 cons: univ: SEQUENCE
# 4:d=1 hl=2 l= 11 prim: univ: OCTET_STRING
# 17:d=1 hl=4 l=360 cons: univ: SEQUENCE
# 21:d=2 hl=2 l= 12 cons: univ: SEQUENCE
# 23:d=3 hl=2 l= 8 prim: univ: OBJECT_IDENTIFIER :rc4
# 33:d=3 hl=2 l= 0 prim: univ: NULL
# 35:d=2 hl=4 l=342 prim: univ: OCTET_STRING
sub do_private_key
{
local($data,@struct)=@_;
local($file)="/tmp/b$$.DER";
local($off,$d,$hl,$len,$_,$b,@p,$s);
($type)=($struct[4] =~ /OBJECT_IDENTIFIER :(.*)\s*$/);
if ($type eq "rc4")
{
($off,$d,$hl,$len)=&parse_line($struct[6]);
open(OUT,"|$rc4_cmd >$file") ||
die "unable to run $rc4_cmd:$!\n";
print OUT substr($data,$off+$hl,$len);
close(OUT);
$b=&load_file($file);
unlink($file);
($s,@p)=&der_str($b);
die "unknown rsa key type\n$s\n"
if ($s ne '0G-1B-1G-2F-2E-1D');
local($off,$d,$hl,$len)=&parse_line($p[5]);
$b=substr($b,$off+$hl,$len);
($s,@p)=&der_str($b);
open(OUT,"|$rsa_cmd") || die "unable to run $rsa_cmd:$!\n";
print OUT $b;
close(OUT);
}
else
{
print "'$type' is unknown\n";
exit(1);
}
}
sub do_certificate
{
local($data,@struct)=@_;
local($file)="/tmp/b$$.DER";
local($off,$d,$hl,$len,$_,$b,@p,$s);
($off,$d,$hl,$len)=&parse_line($struct[2]);
$b=substr($data,$off,$len+$hl);
open(OUT,"|$x509_cmd -inform d") || die "unable to run $x509_cmd:$!\n";
print OUT $b;
close(OUT);
}
sub load_file
{
local($file)=@_;
local(*IN,$r,$b,$i);
$r="";
open(IN,"<$file") || die "unable to open $file:$!\n";
for (;;)
{
$i=sysread(IN,$b,10240);
last if ($i <= 0);
$r.=$b;
}
close(IN);
return($r);
}
sub load_file_parse
{
local($file)=@_;
local(*IN,$r,@ret,$_,$i,$n,$b);
open(IN,"$cmd -inform d -in $file|")
|| die "unable to run der_parse\n";
while (<IN>)
{
chop;
push(@ret,$_);
}
return($r,@ret);
}

View File

@@ -66,7 +66,6 @@
#include <openssl/objects.h> #include <openssl/objects.h>
#include <openssl/x509.h> #include <openssl/x509.h>
#include <openssl/pem.h> #include <openssl/pem.h>
#include <openssl/hmac.h>
#undef BUFSIZE #undef BUFSIZE
#define BUFSIZE 1024*8 #define BUFSIZE 1024*8
@@ -74,15 +73,13 @@
#undef PROG #undef PROG
#define PROG dgst_main #define PROG dgst_main
int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
EVP_PKEY *key, unsigned char *sigin, int siglen, const char *title, EVP_PKEY *key, unsigned char *sigin, int siglen);
const char *file,BIO *bmd,const char *hmac_key, int non_fips_allow);
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
ENGINE *e = NULL;
unsigned char *buf=NULL; unsigned char *buf=NULL;
int i,err=0; int i,err=0;
const EVP_MD *md=NULL,*m; const EVP_MD *md=NULL,*m;
@@ -94,23 +91,15 @@ int MAIN(int argc, char **argv)
char pname[PROG_NAME_SIZE+1]; char pname[PROG_NAME_SIZE+1];
int separator=0; int separator=0;
int debug=0; int debug=0;
int keyform=FORMAT_PEM;
const char *outfile = NULL, *keyfile = NULL; const char *outfile = NULL, *keyfile = NULL;
const char *sigfile = NULL, *randfile = NULL; const char *sigfile = NULL, *randfile = NULL;
int out_bin = -1, want_pub = 0, do_verify = 0; int out_bin = -1, want_pub = 0, do_verify = 0;
EVP_PKEY *sigkey = NULL; EVP_PKEY *sigkey = NULL;
unsigned char *sigbuf = NULL; unsigned char *sigbuf = NULL;
int siglen = 0; int siglen = 0;
unsigned int sig_flags = 0;
char *passargin = NULL, *passin = NULL;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
char *hmac_key=NULL;
int non_fips_allow = 0;
apps_startup(); apps_startup();
ERR_load_crypto_strings();
if ((buf=(unsigned char *)OPENSSL_malloc(BUFSIZE)) == NULL) if ((buf=(unsigned char *)OPENSSL_malloc(BUFSIZE)) == NULL)
{ {
BIO_printf(bio_err,"out of memory\n"); BIO_printf(bio_err,"out of memory\n");
@@ -120,11 +109,8 @@ ERR_load_crypto_strings();
if ((bio_err=BIO_new(BIO_s_file())) != NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto end;
/* first check the program name */ /* first check the program name */
program_name(argv[0],pname,sizeof pname); program_name(argv[0],pname,PROG_NAME_SIZE);
md=EVP_get_digestbyname(pname); md=EVP_get_digestbyname(pname);
@@ -150,12 +136,6 @@ ERR_load_crypto_strings();
if (--argc < 1) break; if (--argc < 1) break;
keyfile=*(++argv); keyfile=*(++argv);
} }
else if (!strcmp(*argv,"-passin"))
{
if (--argc < 1)
break;
passargin=*++argv;
}
else if (strcmp(*argv,"-verify") == 0) else if (strcmp(*argv,"-verify") == 0)
{ {
if (--argc < 1) break; if (--argc < 1) break;
@@ -169,58 +149,17 @@ ERR_load_crypto_strings();
keyfile=*(++argv); keyfile=*(++argv);
do_verify = 1; do_verify = 1;
} }
else if (strcmp(*argv,"-x931") == 0)
sig_flags = EVP_MD_CTX_FLAG_PAD_X931;
else if (strcmp(*argv,"-pss_saltlen") == 0)
{
int saltlen;
if (--argc < 1) break;
saltlen=atoi(*(++argv));
if (saltlen == -1)
sig_flags = EVP_MD_CTX_FLAG_PSS_MREC;
else if (saltlen == -2)
sig_flags = EVP_MD_CTX_FLAG_PSS_MDLEN;
else if (saltlen < -2 || saltlen >= 0xFFFE)
{
BIO_printf(bio_err, "Invalid PSS salt length %d\n", saltlen);
goto end;
}
else
sig_flags = saltlen;
sig_flags <<= 16;
sig_flags |= EVP_MD_CTX_FLAG_PAD_PSS;
}
else if (strcmp(*argv,"-signature") == 0) else if (strcmp(*argv,"-signature") == 0)
{ {
if (--argc < 1) break; if (--argc < 1) break;
sigfile=*(++argv); sigfile=*(++argv);
} }
else if (strcmp(*argv,"-keyform") == 0)
{
if (--argc < 1) break;
keyform=str2fmt(*(++argv));
}
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) break;
engine= *(++argv);
}
#endif
else if (strcmp(*argv,"-hex") == 0) else if (strcmp(*argv,"-hex") == 0)
out_bin = 0; out_bin = 0;
else if (strcmp(*argv,"-binary") == 0) else if (strcmp(*argv,"-binary") == 0)
out_bin = 1; out_bin = 1;
else if (strcmp(*argv,"-d") == 0) else if (strcmp(*argv,"-d") == 0)
debug=1; debug=1;
else if (strcmp(*argv,"-non-fips-allow") == 0)
non_fips_allow=1;
else if (!strcmp(*argv,"-hmac"))
{
if (--argc < 1)
break;
hmac_key=*++argv;
}
else if ((m=EVP_get_digestbyname(&((*argv)[1]))) != NULL) else if ((m=EVP_get_digestbyname(&((*argv)[1]))) != NULL)
md=m; md=m;
else else
@@ -249,62 +188,34 @@ ERR_load_crypto_strings();
BIO_printf(bio_err,"-sign file sign digest using private key in file\n"); BIO_printf(bio_err,"-sign file sign digest using private key in file\n");
BIO_printf(bio_err,"-verify file verify a signature using public key in file\n"); BIO_printf(bio_err,"-verify file verify a signature using public key in file\n");
BIO_printf(bio_err,"-prverify file verify a signature using private key in file\n"); BIO_printf(bio_err,"-prverify file verify a signature using private key in file\n");
BIO_printf(bio_err,"-keyform arg key file format (PEM or ENGINE)\n");
BIO_printf(bio_err,"-signature file signature to verify\n"); BIO_printf(bio_err,"-signature file signature to verify\n");
BIO_printf(bio_err,"-binary output in binary form\n"); BIO_printf(bio_err,"-binary output in binary form\n");
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err,"-engine e use engine e, possibly a hardware device.\n");
#endif
BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm (default)\n", BIO_printf(bio_err,"-%3s to use the %s message digest algorithm (default)\n",
LN_md5,LN_md5); LN_md5,LN_md5);
BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n", BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
LN_md4,LN_md4); LN_md4,LN_md4);
BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n", BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
LN_md2,LN_md2); LN_md2,LN_md2);
#ifndef OPENSSL_NO_SHA BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
LN_sha1,LN_sha1); LN_sha1,LN_sha1);
BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n", BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
LN_sha,LN_sha); LN_sha,LN_sha);
#ifndef OPENSSL_NO_SHA256 BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
LN_sha224,LN_sha224);
BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
LN_sha256,LN_sha256);
#endif
#ifndef OPENSSL_NO_SHA512
BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
LN_sha384,LN_sha384);
BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
LN_sha512,LN_sha512);
#endif
#endif
BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
LN_mdc2,LN_mdc2); LN_mdc2,LN_mdc2);
BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n", BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
LN_ripemd160,LN_ripemd160); LN_ripemd160,LN_ripemd160);
err=1; err=1;
goto end; goto end;
} }
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
in=BIO_new(BIO_s_file()); in=BIO_new(BIO_s_file());
bmd=BIO_new(BIO_f_md()); bmd=BIO_new(BIO_f_md());
if (debug) if (debug)
{ {
BIO_set_callback(in,BIO_debug_callback); BIO_set_callback(in,BIO_debug_callback);
/* needed for windows 3.1 */ /* needed for windows 3.1 */
BIO_set_callback_arg(in,(char *)bio_err); BIO_set_callback_arg(in,bio_err);
}
if(!app_passwd(bio_err, passargin, NULL, &passin, NULL))
{
BIO_printf(bio_err, "Error getting password\n");
goto end;
} }
if ((in == NULL) || (bmd == NULL)) if ((in == NULL) || (bmd == NULL))
@@ -327,7 +238,7 @@ ERR_load_crypto_strings();
else out = BIO_new_file(outfile, "w"); else out = BIO_new_file(outfile, "w");
} else { } else {
out = BIO_new_fp(stdout, BIO_NOCLOSE); out = BIO_new_fp(stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -342,21 +253,27 @@ ERR_load_crypto_strings();
goto end; goto end;
} }
if(keyfile) if(keyfile) {
{ BIO *keybio;
if (want_pub) keybio = BIO_new_file(keyfile, "r");
sigkey = load_pubkey(bio_err, keyfile, keyform, 0, NULL, if(!keybio) {
e, "key file"); BIO_printf(bio_err, "Error opening key file %s\n",
else keyfile);
sigkey = load_key(bio_err, keyfile, keyform, 0, passin, ERR_print_errors(bio_err);
e, "key file");
if (!sigkey)
{
/* load_[pub]key() has already printed an appropriate
message */
goto end; goto end;
}
} }
if(want_pub)
sigkey = PEM_read_bio_PUBKEY(keybio, NULL, NULL, NULL);
else sigkey = PEM_read_bio_PrivateKey(keybio, NULL, NULL, NULL);
BIO_free(keybio);
if(!sigkey) {
BIO_printf(bio_err, "Error reading key file %s\n",
keyfile);
ERR_print_errors(bio_err);
goto end;
}
}
if(sigfile && sigkey) { if(sigfile && sigkey) {
BIO *sigbio; BIO *sigbio;
@@ -378,66 +295,32 @@ ERR_load_crypto_strings();
goto end; goto end;
} }
} }
if (non_fips_allow)
{
EVP_MD_CTX *md_ctx;
BIO_get_md_ctx(bmd,&md_ctx);
EVP_MD_CTX_set_flags(md_ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
}
if (sig_flags)
{
EVP_MD_CTX *md_ctx;
BIO_get_md_ctx(bmd,&md_ctx);
EVP_MD_CTX_set_flags(md_ctx, sig_flags);
}
/* we use md as a filter, reading from 'in' */ /* we use md as a filter, reading from 'in' */
if (!BIO_set_md(bmd,md)) BIO_set_md(bmd,md);
{
BIO_printf(bio_err, "Error setting digest %s\n", pname);
ERR_print_errors(bio_err);
goto end;
}
inp=BIO_push(bmd,in); inp=BIO_push(bmd,in);
if (argc == 0) if (argc == 0)
{ {
BIO_set_fp(in,stdin,BIO_NOCLOSE); BIO_set_fp(in,stdin,BIO_NOCLOSE);
err=do_fp(out, buf,inp,separator, out_bin, sigkey, sigbuf, do_fp(out, buf,inp,separator, out_bin, sigkey, sigbuf, siglen);
siglen,"","(stdin)",bmd,hmac_key,non_fips_allow);
} }
else else
{ {
name=OBJ_nid2sn(md->type); name=OBJ_nid2sn(md->type);
for (i=0; i<argc; i++) for (i=0; i<argc; i++)
{ {
char *tmp,*tofree=NULL;
int r;
if (BIO_read_filename(in,argv[i]) <= 0) if (BIO_read_filename(in,argv[i]) <= 0)
{ {
perror(argv[i]); perror(argv[i]);
err++; err++;
continue; continue;
} }
if(!out_bin) if(!out_bin) BIO_printf(out, "%s(%s)= ",name,argv[i]);
{ do_fp(out, buf,inp,separator, out_bin, sigkey,
size_t len = strlen(name)+strlen(argv[i])+(hmac_key ? 5 : 0)+5; sigbuf, siglen);
tmp=tofree=OPENSSL_malloc(len);
BIO_snprintf(tmp,len,"%s%s(%s)= ",
hmac_key ? "HMAC-" : "",name,argv[i]);
}
else
tmp="";
r=do_fp(out,buf,inp,separator,out_bin,sigkey,sigbuf,
siglen,tmp,argv[i],bmd,hmac_key,non_fips_allow);
if(r)
err=r;
if(tofree)
OPENSSL_free(tofree);
(void)BIO_reset(bmd); (void)BIO_reset(bmd);
} }
} }
@@ -448,65 +331,37 @@ end:
OPENSSL_free(buf); OPENSSL_free(buf);
} }
if (in != NULL) BIO_free(in); if (in != NULL) BIO_free(in);
if (passin)
OPENSSL_free(passin);
BIO_free_all(out); BIO_free_all(out);
EVP_PKEY_free(sigkey); EVP_PKEY_free(sigkey);
if(sigbuf) OPENSSL_free(sigbuf); if(sigbuf) OPENSSL_free(sigbuf);
if (bmd != NULL) BIO_free(bmd); if (bmd != NULL) BIO_free(bmd);
apps_shutdown();
OPENSSL_EXIT(err); OPENSSL_EXIT(err);
} }
int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
EVP_PKEY *key, unsigned char *sigin, int siglen, const char *title, EVP_PKEY *key, unsigned char *sigin, int siglen)
const char *file,BIO *bmd,const char *hmac_key,int non_fips_allow)
{ {
unsigned int len; int len;
int i; int i;
EVP_MD_CTX *md_ctx;
HMAC_CTX hmac_ctx;
if (hmac_key)
{
EVP_MD *md;
BIO_get_md(bmd,&md);
HMAC_CTX_init(&hmac_ctx);
HMAC_Init_ex(&hmac_ctx,hmac_key,strlen(hmac_key),md, NULL);
BIO_get_md_ctx(bmd,&md_ctx);
BIO_set_md_ctx(bmd,&hmac_ctx.md_ctx);
}
for (;;) for (;;)
{ {
i=BIO_read(bp,(char *)buf,BUFSIZE); i=BIO_read(bp,(char *)buf,BUFSIZE);
if(i < 0) if (i <= 0) break;
{
BIO_printf(bio_err, "Read Error in %s\n",file);
ERR_print_errors(bio_err);
return 1;
}
if (i == 0) break;
} }
if(sigin) if(sigin)
{ {
EVP_MD_CTX *ctx; EVP_MD_CTX *ctx;
BIO_get_md_ctx(bp, &ctx); BIO_get_md_ctx(bp, &ctx);
i = EVP_VerifyFinal(ctx, sigin, (unsigned int)siglen, key); i = EVP_VerifyFinal(ctx, sigin, (unsigned int)siglen, key);
if(i > 0) if(i > 0) BIO_printf(out, "Verified OK\n");
BIO_printf(out, "Verified OK\n"); else if(i == 0) BIO_printf(out, "Verification Failure\n");
else if(i == 0)
{
BIO_printf(out, "Verification Failure\n");
return 1;
}
else else
{ {
BIO_printf(bio_err, "Error Verifying Data\n"); BIO_printf(bio_err, "Error Verifying Data\n");
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
return 1;
} }
return 0; return;
} }
if(key) if(key)
{ {
@@ -516,22 +371,16 @@ int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
{ {
BIO_printf(bio_err, "Error Signing Data\n"); BIO_printf(bio_err, "Error Signing Data\n");
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
return 1; return;
} }
} }
else if(hmac_key)
{
HMAC_Final(&hmac_ctx,buf,&len);
HMAC_CTX_cleanup(&hmac_ctx);
}
else else
len=BIO_gets(bp,(char *)buf,BUFSIZE); len=BIO_gets(bp,(char *)buf,BUFSIZE);
if(binout) BIO_write(out, buf, len); if(binout) BIO_write(out, buf, len);
else else
{ {
BIO_write(out,title,strlen(title)); for (i=0; i<len; i++)
for (i=0; i<(int)len; i++)
{ {
if (sep && (i != 0)) if (sep && (i != 0))
BIO_printf(out, ":"); BIO_printf(out, ":");
@@ -539,10 +388,5 @@ int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
} }
BIO_printf(out, "\n"); BIO_printf(out, "\n");
} }
if (hmac_key)
{
BIO_set_md_ctx(bmd,md_ctx);
}
return 0;
} }

View File

@@ -57,8 +57,7 @@
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */ #ifndef NO_DH
#ifndef OPENSSL_NO_DH
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <time.h>
@@ -88,17 +87,11 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
#ifndef OPENSSL_NO_ENGINE
ENGINE *e = NULL;
#endif
DH *dh=NULL; DH *dh=NULL;
int i,badops=0,text=0; int i,badops=0,text=0;
BIO *in=NULL,*out=NULL; BIO *in=NULL,*out=NULL;
int informat,outformat,check=0,noout=0,C=0,ret=1; int informat,outformat,check=0,noout=0,C=0,ret=1;
char *infile,*outfile,*prog; char *infile,*outfile,*prog;
#ifndef OPENSSL_NO_ENGINE
char *engine;
#endif
apps_startup(); apps_startup();
@@ -106,12 +99,6 @@ int MAIN(int argc, char **argv)
if ((bio_err=BIO_new(BIO_s_file())) != NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto end;
#ifndef OPENSSL_NO_ENGINE
engine=NULL;
#endif
infile=NULL; infile=NULL;
outfile=NULL; outfile=NULL;
informat=FORMAT_PEM; informat=FORMAT_PEM;
@@ -142,13 +129,6 @@ int MAIN(int argc, char **argv)
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
outfile= *(++argv); outfile= *(++argv);
} }
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine= *(++argv);
}
#endif
else if (strcmp(*argv,"-check") == 0) else if (strcmp(*argv,"-check") == 0)
check=1; check=1;
else if (strcmp(*argv,"-text") == 0) else if (strcmp(*argv,"-text") == 0)
@@ -180,18 +160,11 @@ bad:
BIO_printf(bio_err," -text print a text form of the DH parameters\n"); BIO_printf(bio_err," -text print a text form of the DH parameters\n");
BIO_printf(bio_err," -C Output C code\n"); BIO_printf(bio_err," -C Output C code\n");
BIO_printf(bio_err," -noout no output\n"); BIO_printf(bio_err," -noout no output\n");
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
#endif
goto end; goto end;
} }
ERR_load_crypto_strings(); ERR_load_crypto_strings();
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
in=BIO_new(BIO_s_file()); in=BIO_new(BIO_s_file());
out=BIO_new(BIO_s_file()); out=BIO_new(BIO_s_file());
if ((in == NULL) || (out == NULL)) if ((in == NULL) || (out == NULL))
@@ -213,7 +186,7 @@ bad:
if (outfile == NULL) if (outfile == NULL)
{ {
BIO_set_fp(out,stdout,BIO_NOCLOSE); BIO_set_fp(out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -346,7 +319,6 @@ end:
if (in != NULL) BIO_free(in); if (in != NULL) BIO_free(in);
if (out != NULL) BIO_free_all(out); if (out != NULL) BIO_free_all(out);
if (dh != NULL) DH_free(dh); if (dh != NULL) DH_free(dh);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }
#endif #endif

View File

@@ -109,8 +109,7 @@
* *
*/ */
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */ #ifndef NO_DH
#ifndef OPENSSL_NO_DH
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <time.h>
@@ -123,7 +122,7 @@
#include <openssl/x509.h> #include <openssl/x509.h>
#include <openssl/pem.h> #include <openssl/pem.h>
#ifndef OPENSSL_NO_DSA #ifndef NO_DSA
#include <openssl/dsa.h> #include <openssl/dsa.h>
#endif #endif
@@ -143,27 +142,21 @@
* -C * -C
*/ */
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb); static void MS_CALLBACK dh_cb(int p, int n, void *arg);
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
#ifndef OPENSSL_NO_ENGINE
ENGINE *e = NULL;
#endif
DH *dh=NULL; DH *dh=NULL;
int i,badops=0,text=0; int i,badops=0,text=0;
#ifndef OPENSSL_NO_DSA #ifndef NO_DSA
int dsaparam=0; int dsaparam=0;
#endif #endif
BIO *in=NULL,*out=NULL; BIO *in=NULL,*out=NULL;
int informat,outformat,check=0,noout=0,C=0,ret=1; int informat,outformat,check=0,noout=0,C=0,ret=1;
char *infile,*outfile,*prog; char *infile,*outfile,*prog;
char *inrand=NULL; char *inrand=NULL;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
int num = 0, g = 0; int num = 0, g = 0;
apps_startup(); apps_startup();
@@ -172,9 +165,6 @@ int MAIN(int argc, char **argv)
if ((bio_err=BIO_new(BIO_s_file())) != NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto end;
infile=NULL; infile=NULL;
outfile=NULL; outfile=NULL;
informat=FORMAT_PEM; informat=FORMAT_PEM;
@@ -205,18 +195,11 @@ int MAIN(int argc, char **argv)
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
outfile= *(++argv); outfile= *(++argv);
} }
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine= *(++argv);
}
#endif
else if (strcmp(*argv,"-check") == 0) else if (strcmp(*argv,"-check") == 0)
check=1; check=1;
else if (strcmp(*argv,"-text") == 0) else if (strcmp(*argv,"-text") == 0)
text=1; text=1;
#ifndef OPENSSL_NO_DSA #ifndef NO_DSA
else if (strcmp(*argv,"-dsaparam") == 0) else if (strcmp(*argv,"-dsaparam") == 0)
dsaparam=1; dsaparam=1;
#endif #endif
@@ -248,7 +231,7 @@ bad:
BIO_printf(bio_err," -outform arg output format - one of DER PEM\n"); BIO_printf(bio_err," -outform arg output format - one of DER PEM\n");
BIO_printf(bio_err," -in arg input file\n"); BIO_printf(bio_err," -in arg input file\n");
BIO_printf(bio_err," -out arg output file\n"); BIO_printf(bio_err," -out arg output file\n");
#ifndef OPENSSL_NO_DSA #ifndef NO_DSA
BIO_printf(bio_err," -dsaparam read or generate DSA parameters, convert to DH\n"); BIO_printf(bio_err," -dsaparam read or generate DSA parameters, convert to DH\n");
#endif #endif
BIO_printf(bio_err," -check check the DH parameters\n"); BIO_printf(bio_err," -check check the DH parameters\n");
@@ -257,9 +240,6 @@ bad:
BIO_printf(bio_err," -2 generate parameters using 2 as the generator value\n"); BIO_printf(bio_err," -2 generate parameters using 2 as the generator value\n");
BIO_printf(bio_err," -5 generate parameters using 5 as the generator value\n"); BIO_printf(bio_err," -5 generate parameters using 5 as the generator value\n");
BIO_printf(bio_err," numbits number of bits in to generate (default 512)\n"); BIO_printf(bio_err," numbits number of bits in to generate (default 512)\n");
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
#endif
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
BIO_printf(bio_err," - load the file (or the files in the directory) into\n"); BIO_printf(bio_err," - load the file (or the files in the directory) into\n");
BIO_printf(bio_err," the random number generator\n"); BIO_printf(bio_err," the random number generator\n");
@@ -269,14 +249,10 @@ bad:
ERR_load_crypto_strings(); ERR_load_crypto_strings();
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
if (g && !num) if (g && !num)
num = DEFBITS; num = DEFBITS;
#ifndef OPENSSL_NO_DSA #ifndef NO_DSA
if (dsaparam) if (dsaparam)
{ {
if (g) if (g)
@@ -295,8 +271,6 @@ bad:
if(num) { if(num) {
BN_GENCB cb;
BN_GENCB_set(&cb, dh_cb, bio_err);
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL)
{ {
BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n"); BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
@@ -305,16 +279,15 @@ bad:
BIO_printf(bio_err,"%ld semi-random bytes loaded\n", BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
app_RAND_load_files(inrand)); app_RAND_load_files(inrand));
#ifndef OPENSSL_NO_DSA #ifndef NO_DSA
if (dsaparam) if (dsaparam)
{ {
DSA *dsa = DSA_new(); DSA *dsa;
BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num); BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
if(!dsa || !DSA_generate_parameters_ex(dsa, num, dsa = DSA_generate_parameters(num, NULL, 0, NULL, NULL, dh_cb, bio_err);
NULL, 0, NULL, NULL, &cb)) if (dsa == NULL)
{ {
if(dsa) DSA_free(dsa);
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
goto end; goto end;
} }
@@ -330,12 +303,12 @@ bad:
else else
#endif #endif
{ {
dh = DH_new();
BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g); BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g);
BIO_printf(bio_err,"This is going to take a long time\n"); BIO_printf(bio_err,"This is going to take a long time\n");
if(!dh || !DH_generate_parameters_ex(dh, num, g, &cb)) dh=DH_generate_parameters(num,g,dh_cb,bio_err);
if (dh == NULL)
{ {
if(dh) DH_free(dh);
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
goto end; goto end;
} }
@@ -367,7 +340,7 @@ bad:
goto end; goto end;
} }
#ifndef OPENSSL_NO_DSA #ifndef NO_DSA
if (dsaparam) if (dsaparam)
{ {
DSA *dsa; DSA *dsa;
@@ -420,7 +393,7 @@ bad:
if (outfile == NULL) if (outfile == NULL)
{ {
BIO_set_fp(out,stdout,BIO_NOCLOSE); BIO_set_fp(out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -505,7 +478,7 @@ bad:
printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n"); printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
printf("\t\t{ DH_free(dh); return(NULL); }\n"); printf("\t\t{ DH_free(dh); return(NULL); }\n");
if (dh->length) if (dh->length)
printf("\tdh->length = %ld;\n", dh->length); printf("\tdh->length = %d;\n", dh->length);
printf("\treturn(dh);\n\t}\n"); printf("\treturn(dh);\n\t}\n");
OPENSSL_free(data); OPENSSL_free(data);
} }
@@ -533,12 +506,11 @@ end:
if (in != NULL) BIO_free(in); if (in != NULL) BIO_free(in);
if (out != NULL) BIO_free_all(out); if (out != NULL) BIO_free_all(out);
if (dh != NULL) DH_free(dh); if (dh != NULL) DH_free(dh);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }
/* dh_cb is identical to dsa_cb in apps/dsaparam.c */ /* dh_cb is identical to dsa_cb in apps/dsaparam.c */
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb) static void MS_CALLBACK dh_cb(int p, int n, void *arg)
{ {
char c='*'; char c='*';
@@ -546,12 +518,11 @@ static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
if (p == 1) c='+'; if (p == 1) c='+';
if (p == 2) c='*'; if (p == 2) c='*';
if (p == 3) c='\n'; if (p == 3) c='\n';
BIO_write(cb->arg,&c,1); BIO_write((BIO *)arg,&c,1);
(void)BIO_flush(cb->arg); (void)BIO_flush((BIO *)arg);
#ifdef LINT #ifdef LINT
p=n; p=n;
#endif #endif
return 1;
} }
#endif #endif

View File

@@ -56,8 +56,7 @@
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */ #ifndef NO_DSA
#ifndef OPENSSL_NO_DSA
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@@ -69,7 +68,6 @@
#include <openssl/evp.h> #include <openssl/evp.h>
#include <openssl/x509.h> #include <openssl/x509.h>
#include <openssl/pem.h> #include <openssl/pem.h>
#include <openssl/bn.h>
#undef PROG #undef PROG
#define PROG dsa_main #define PROG dsa_main
@@ -81,13 +79,6 @@
* -des - encrypt output if PEM format with DES in cbc mode * -des - encrypt output if PEM format with DES in cbc mode
* -des3 - encrypt output if PEM format * -des3 - encrypt output if PEM format
* -idea - encrypt output if PEM format * -idea - encrypt output if PEM format
* -aes128 - encrypt output if PEM format
* -aes192 - encrypt output if PEM format
* -aes256 - encrypt output if PEM format
* -camellia128 - encrypt output if PEM format
* -camellia192 - encrypt output if PEM format
* -camellia256 - encrypt output if PEM format
* -seed - encrypt output if PEM format
* -text - print a text version * -text - print a text version
* -modulus - print the DSA public key * -modulus - print the DSA public key
*/ */
@@ -96,9 +87,6 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
#ifndef OPENSSL_NO_ENGINE
ENGINE *e = NULL;
#endif
int ret=1; int ret=1;
DSA *dsa=NULL; DSA *dsa=NULL;
int i,badops=0; int i,badops=0;
@@ -107,9 +95,6 @@ int MAIN(int argc, char **argv)
int informat,outformat,text=0,noout=0; int informat,outformat,text=0,noout=0;
int pubin = 0, pubout = 0; int pubin = 0, pubout = 0;
char *infile,*outfile,*prog; char *infile,*outfile,*prog;
#ifndef OPENSSL_NO_ENGINE
char *engine;
#endif
char *passargin = NULL, *passargout = NULL; char *passargin = NULL, *passargout = NULL;
char *passin = NULL, *passout = NULL; char *passin = NULL, *passout = NULL;
int modulus=0; int modulus=0;
@@ -120,12 +105,6 @@ int MAIN(int argc, char **argv)
if ((bio_err=BIO_new(BIO_s_file())) != NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto end;
#ifndef OPENSSL_NO_ENGINE
engine=NULL;
#endif
infile=NULL; infile=NULL;
outfile=NULL; outfile=NULL;
informat=FORMAT_PEM; informat=FORMAT_PEM;
@@ -166,13 +145,6 @@ int MAIN(int argc, char **argv)
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
passargout= *(++argv); passargout= *(++argv);
} }
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine= *(++argv);
}
#endif
else if (strcmp(*argv,"-noout") == 0) else if (strcmp(*argv,"-noout") == 0)
noout=1; noout=1;
else if (strcmp(*argv,"-text") == 0) else if (strcmp(*argv,"-text") == 0)
@@ -204,24 +176,10 @@ bad:
BIO_printf(bio_err," -passin arg input file pass phrase source\n"); BIO_printf(bio_err," -passin arg input file pass phrase source\n");
BIO_printf(bio_err," -out arg output file\n"); BIO_printf(bio_err," -out arg output file\n");
BIO_printf(bio_err," -passout arg output file pass phrase source\n"); BIO_printf(bio_err," -passout arg output file pass phrase source\n");
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
#endif
BIO_printf(bio_err," -des encrypt PEM output with cbc des\n"); BIO_printf(bio_err," -des encrypt PEM output with cbc des\n");
BIO_printf(bio_err," -des3 encrypt PEM output with ede cbc des using 168 bit key\n"); BIO_printf(bio_err," -des3 encrypt PEM output with ede cbc des using 168 bit key\n");
#ifndef OPENSSL_NO_IDEA #ifndef NO_IDEA
BIO_printf(bio_err," -idea encrypt PEM output with cbc idea\n"); BIO_printf(bio_err," -idea encrypt PEM output with cbc idea\n");
#endif
#ifndef OPENSSL_NO_AES
BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
BIO_printf(bio_err," encrypt PEM output with cbc aes\n");
#endif
#ifndef OPENSSL_NO_CAMELLIA
BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
BIO_printf(bio_err," encrypt PEM output with cbc camellia\n");
#endif
#ifndef OPENSSL_NO_SEED
BIO_printf(bio_err," -seed encrypt PEM output with cbc seed\n");
#endif #endif
BIO_printf(bio_err," -text print the key in text\n"); BIO_printf(bio_err," -text print the key in text\n");
BIO_printf(bio_err," -noout don't print key out\n"); BIO_printf(bio_err," -noout don't print key out\n");
@@ -231,10 +189,6 @@ bad:
ERR_load_crypto_strings(); ERR_load_crypto_strings();
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
BIO_printf(bio_err, "Error getting passwords\n"); BIO_printf(bio_err, "Error getting passwords\n");
goto end; goto end;
@@ -281,7 +235,7 @@ bad:
if (outfile == NULL) if (outfile == NULL)
{ {
BIO_set_fp(out,stdout,BIO_NOCLOSE); BIO_set_fp(out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -339,7 +293,6 @@ end:
if(dsa != NULL) DSA_free(dsa); if(dsa != NULL) DSA_free(dsa);
if(passin) OPENSSL_free(passin); if(passin) OPENSSL_free(passin);
if(passout) OPENSSL_free(passout); if(passout) OPENSSL_free(passout);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }
#endif #endif

View File

@@ -56,14 +56,7 @@
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */ #ifndef NO_DSA
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
* deprecated functions for openssl-internal code */
#ifdef OPENSSL_NO_DEPRECATED
#undef OPENSSL_NO_DEPRECATED
#endif
#ifndef OPENSSL_NO_DSA
#include <assert.h> #include <assert.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@@ -89,31 +82,14 @@
* -C * -C
* -noout * -noout
* -genkey * -genkey
* #ifdef GENCB_TEST
* -timebomb n - interrupt keygen after <n> seconds
* #endif
*/ */
#ifdef GENCB_TEST static void MS_CALLBACK dsa_cb(int p, int n, void *arg);
static int stop_keygen_flag = 0;
static void timebomb_sigalarm(int foo)
{
stop_keygen_flag = 1;
}
#endif
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb);
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
#ifndef OPENSSL_NO_ENGINE
ENGINE *e = NULL;
#endif
DSA *dsa=NULL; DSA *dsa=NULL;
int i,badops=0,text=0; int i,badops=0,text=0;
BIO *in=NULL,*out=NULL; BIO *in=NULL,*out=NULL;
@@ -121,12 +97,6 @@ int MAIN(int argc, char **argv)
char *infile,*outfile,*prog,*inrand=NULL; char *infile,*outfile,*prog,*inrand=NULL;
int numbits= -1,num,genkey=0; int numbits= -1,num,genkey=0;
int need_rand=0; int need_rand=0;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
#ifdef GENCB_TEST
int timebomb=0;
#endif
apps_startup(); apps_startup();
@@ -134,9 +104,6 @@ int MAIN(int argc, char **argv)
if ((bio_err=BIO_new(BIO_s_file())) != NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto end;
infile=NULL; infile=NULL;
outfile=NULL; outfile=NULL;
informat=FORMAT_PEM; informat=FORMAT_PEM;
@@ -167,20 +134,6 @@ int MAIN(int argc, char **argv)
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
outfile= *(++argv); outfile= *(++argv);
} }
#ifndef OPENSSL_NO_ENGINE
else if(strcmp(*argv, "-engine") == 0)
{
if (--argc < 1) goto bad;
engine = *(++argv);
}
#endif
#ifdef GENCB_TEST
else if(strcmp(*argv, "-timebomb") == 0)
{
if (--argc < 1) goto bad;
timebomb = atoi(*(++argv));
}
#endif
else if (strcmp(*argv,"-text") == 0) else if (strcmp(*argv,"-text") == 0)
text=1; text=1;
else if (strcmp(*argv,"-C") == 0) else if (strcmp(*argv,"-C") == 0)
@@ -226,14 +179,7 @@ bad:
BIO_printf(bio_err," -text print as text\n"); BIO_printf(bio_err," -text print as text\n");
BIO_printf(bio_err," -C Output C code\n"); BIO_printf(bio_err," -C Output C code\n");
BIO_printf(bio_err," -noout no output\n"); BIO_printf(bio_err," -noout no output\n");
BIO_printf(bio_err," -genkey generate a DSA key\n");
BIO_printf(bio_err," -rand files to use for random number input\n"); BIO_printf(bio_err," -rand files to use for random number input\n");
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
#endif
#ifdef GENCB_TEST
BIO_printf(bio_err," -timebomb n interrupt keygen after <n> seconds\n");
#endif
BIO_printf(bio_err," number number of bits to use for generating private key\n"); BIO_printf(bio_err," number number of bits to use for generating private key\n");
goto end; goto end;
} }
@@ -261,7 +207,7 @@ bad:
if (outfile == NULL) if (outfile == NULL)
{ {
BIO_set_fp(out,stdout,BIO_NOCLOSE); BIO_set_fp(out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -277,10 +223,6 @@ bad:
} }
} }
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
if (need_rand) if (need_rand)
{ {
app_RAND_load_file(NULL, bio_err, (inrand != NULL)); app_RAND_load_file(NULL, bio_err, (inrand != NULL));
@@ -291,47 +233,10 @@ bad:
if (numbits > 0) if (numbits > 0)
{ {
BN_GENCB cb;
BN_GENCB_set(&cb, dsa_cb, bio_err);
assert(need_rand); assert(need_rand);
dsa = DSA_new();
if(!dsa)
{
BIO_printf(bio_err,"Error allocating DSA object\n");
goto end;
}
BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num); BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
BIO_printf(bio_err,"This could take some time\n"); BIO_printf(bio_err,"This could take some time\n");
#ifdef GENCB_TEST dsa=DSA_generate_parameters(num,NULL,0,NULL,NULL, dsa_cb,bio_err);
if(timebomb > 0)
{
struct sigaction act;
act.sa_handler = timebomb_sigalarm;
act.sa_flags = 0;
BIO_printf(bio_err,"(though I'll stop it if not done within %d secs)\n",
timebomb);
if(sigaction(SIGALRM, &act, NULL) != 0)
{
BIO_printf(bio_err,"Error, couldn't set SIGALRM handler\n");
goto end;
}
alarm(timebomb);
}
#endif
if(!DSA_generate_parameters_ex(dsa,num,NULL,0,NULL,NULL, &cb))
{
#ifdef GENCB_TEST
if(stop_keygen_flag)
{
BIO_printf(bio_err,"DSA key generation time-stopped\n");
/* This is an asked-for behaviour! */
ret = 0;
goto end;
}
#endif
BIO_printf(bio_err,"Error, DSA key generation failed\n");
goto end;
}
} }
else if (informat == FORMAT_ASN1) else if (informat == FORMAT_ASN1)
dsa=d2i_DSAparams_bio(in,NULL); dsa=d2i_DSAparams_bio(in,NULL);
@@ -452,11 +357,10 @@ end:
if (in != NULL) BIO_free(in); if (in != NULL) BIO_free(in);
if (out != NULL) BIO_free_all(out); if (out != NULL) BIO_free_all(out);
if (dsa != NULL) DSA_free(dsa); if (dsa != NULL) DSA_free(dsa);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb) static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
{ {
char c='*'; char c='*';
@@ -464,15 +368,10 @@ static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb)
if (p == 1) c='+'; if (p == 1) c='+';
if (p == 2) c='*'; if (p == 2) c='*';
if (p == 3) c='\n'; if (p == 3) c='\n';
BIO_write(cb->arg,&c,1); BIO_write(arg,&c,1);
(void)BIO_flush(cb->arg); (void)BIO_flush(arg);
#ifdef LINT #ifdef LINT
p=n; p=n;
#endif #endif
#ifdef GENCB_TEST
if(stop_keygen_flag)
return 0;
#endif
return 1;
} }
#endif #endif

403
apps/ec.c
View File

@@ -1,403 +0,0 @@
/* apps/ec.c */
/*
* Written by Nils Larsch for the OpenSSL project.
*/
/* ====================================================================
* Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@openssl.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
#include <openssl/opensslconf.h>
#ifndef OPENSSL_NO_EC
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "apps.h"
#include <openssl/bio.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#include <openssl/pem.h>
#undef PROG
#define PROG ec_main
/* -inform arg - input format - default PEM (one of DER, NET or PEM)
* -outform arg - output format - default PEM
* -in arg - input file - default stdin
* -out arg - output file - default stdout
* -des - encrypt output if PEM format with DES in cbc mode
* -text - print a text version
* -param_out - print the elliptic curve parameters
* -conv_form arg - specifies the point encoding form
* -param_enc arg - specifies the parameter encoding
*/
int MAIN(int, char **);
int MAIN(int argc, char **argv)
{
#ifndef OPENSSL_NO_ENGINE
ENGINE *e = NULL;
#endif
int ret = 1;
EC_KEY *eckey = NULL;
const EC_GROUP *group;
int i, badops = 0;
const EVP_CIPHER *enc = NULL;
BIO *in = NULL, *out = NULL;
int informat, outformat, text=0, noout=0;
int pubin = 0, pubout = 0, param_out = 0;
char *infile, *outfile, *prog, *engine;
char *passargin = NULL, *passargout = NULL;
char *passin = NULL, *passout = NULL;
point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
int new_form = 0;
int asn1_flag = OPENSSL_EC_NAMED_CURVE;
int new_asn1_flag = 0;
apps_startup();
if (bio_err == NULL)
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto end;
engine = NULL;
infile = NULL;
outfile = NULL;
informat = FORMAT_PEM;
outformat = FORMAT_PEM;
prog = argv[0];
argc--;
argv++;
while (argc >= 1)
{
if (strcmp(*argv,"-inform") == 0)
{
if (--argc < 1) goto bad;
informat=str2fmt(*(++argv));
}
else if (strcmp(*argv,"-outform") == 0)
{
if (--argc < 1) goto bad;
outformat=str2fmt(*(++argv));
}
else if (strcmp(*argv,"-in") == 0)
{
if (--argc < 1) goto bad;
infile= *(++argv);
}
else if (strcmp(*argv,"-out") == 0)
{
if (--argc < 1) goto bad;
outfile= *(++argv);
}
else if (strcmp(*argv,"-passin") == 0)
{
if (--argc < 1) goto bad;
passargin= *(++argv);
}
else if (strcmp(*argv,"-passout") == 0)
{
if (--argc < 1) goto bad;
passargout= *(++argv);
}
else if (strcmp(*argv, "-engine") == 0)
{
if (--argc < 1) goto bad;
engine= *(++argv);
}
else if (strcmp(*argv, "-noout") == 0)
noout = 1;
else if (strcmp(*argv, "-text") == 0)
text = 1;
else if (strcmp(*argv, "-conv_form") == 0)
{
if (--argc < 1)
goto bad;
++argv;
new_form = 1;
if (strcmp(*argv, "compressed") == 0)
form = POINT_CONVERSION_COMPRESSED;
else if (strcmp(*argv, "uncompressed") == 0)
form = POINT_CONVERSION_UNCOMPRESSED;
else if (strcmp(*argv, "hybrid") == 0)
form = POINT_CONVERSION_HYBRID;
else
goto bad;
}
else if (strcmp(*argv, "-param_enc") == 0)
{
if (--argc < 1)
goto bad;
++argv;
new_asn1_flag = 1;
if (strcmp(*argv, "named_curve") == 0)
asn1_flag = OPENSSL_EC_NAMED_CURVE;
else if (strcmp(*argv, "explicit") == 0)
asn1_flag = 0;
else
goto bad;
}
else if (strcmp(*argv, "-param_out") == 0)
param_out = 1;
else if (strcmp(*argv, "-pubin") == 0)
pubin=1;
else if (strcmp(*argv, "-pubout") == 0)
pubout=1;
else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
{
BIO_printf(bio_err, "unknown option %s\n", *argv);
badops=1;
break;
}
argc--;
argv++;
}
if (badops)
{
bad:
BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
BIO_printf(bio_err, "where options are\n");
BIO_printf(bio_err, " -inform arg input format - "
"DER or PEM\n");
BIO_printf(bio_err, " -outform arg output format - "
"DER or PEM\n");
BIO_printf(bio_err, " -in arg input file\n");
BIO_printf(bio_err, " -passin arg input file pass "
"phrase source\n");
BIO_printf(bio_err, " -out arg output file\n");
BIO_printf(bio_err, " -passout arg output file pass "
"phrase source\n");
BIO_printf(bio_err, " -engine e use engine e, "
"possibly a hardware device.\n");
BIO_printf(bio_err, " -des encrypt PEM output, "
"instead of 'des' every other \n"
" cipher "
"supported by OpenSSL can be used\n");
BIO_printf(bio_err, " -text print the key\n");
BIO_printf(bio_err, " -noout don't print key out\n");
BIO_printf(bio_err, " -param_out print the elliptic "
"curve parameters\n");
BIO_printf(bio_err, " -conv_form arg specifies the "
"point conversion form \n");
BIO_printf(bio_err, " possible values:"
" compressed\n");
BIO_printf(bio_err, " "
" uncompressed (default)\n");
BIO_printf(bio_err, " "
" hybrid\n");
BIO_printf(bio_err, " -param_enc arg specifies the way"
" the ec parameters are encoded\n");
BIO_printf(bio_err, " in the asn1 der "
"encoding\n");
BIO_printf(bio_err, " possilbe values:"
" named_curve (default)\n");
BIO_printf(bio_err," "
"explicit\n");
goto end;
}
ERR_load_crypto_strings();
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
if(!app_passwd(bio_err, passargin, passargout, &passin, &passout))
{
BIO_printf(bio_err, "Error getting passwords\n");
goto end;
}
in = BIO_new(BIO_s_file());
out = BIO_new(BIO_s_file());
if ((in == NULL) || (out == NULL))
{
ERR_print_errors(bio_err);
goto end;
}
if (infile == NULL)
BIO_set_fp(in, stdin, BIO_NOCLOSE);
else
{
if (BIO_read_filename(in, infile) <= 0)
{
perror(infile);
goto end;
}
}
BIO_printf(bio_err, "read EC key\n");
if (informat == FORMAT_ASN1)
{
if (pubin)
eckey = d2i_EC_PUBKEY_bio(in, NULL);
else
eckey = d2i_ECPrivateKey_bio(in, NULL);
}
else if (informat == FORMAT_PEM)
{
if (pubin)
eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL,
NULL);
else
eckey = PEM_read_bio_ECPrivateKey(in, NULL, NULL,
passin);
}
else
{
BIO_printf(bio_err, "bad input format specified for key\n");
goto end;
}
if (eckey == NULL)
{
BIO_printf(bio_err,"unable to load Key\n");
ERR_print_errors(bio_err);
goto end;
}
if (outfile == NULL)
{
BIO_set_fp(out, stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS
{
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out);
}
#endif
}
else
{
if (BIO_write_filename(out, outfile) <= 0)
{
perror(outfile);
goto end;
}
}
group = EC_KEY_get0_group(eckey);
if (new_form)
EC_KEY_set_conv_form(eckey, form);
if (new_asn1_flag)
EC_KEY_set_asn1_flag(eckey, asn1_flag);
if (text)
if (!EC_KEY_print(out, eckey, 0))
{
perror(outfile);
ERR_print_errors(bio_err);
goto end;
}
if (noout)
{
ret = 0;
goto end;
}
BIO_printf(bio_err, "writing EC key\n");
if (outformat == FORMAT_ASN1)
{
if (param_out)
i = i2d_ECPKParameters_bio(out, group);
else if (pubin || pubout)
i = i2d_EC_PUBKEY_bio(out, eckey);
else
i = i2d_ECPrivateKey_bio(out, eckey);
}
else if (outformat == FORMAT_PEM)
{
if (param_out)
i = PEM_write_bio_ECPKParameters(out, group);
else if (pubin || pubout)
i = PEM_write_bio_EC_PUBKEY(out, eckey);
else
i = PEM_write_bio_ECPrivateKey(out, eckey, enc,
NULL, 0, NULL, passout);
}
else
{
BIO_printf(bio_err, "bad output format specified for "
"outfile\n");
goto end;
}
if (!i)
{
BIO_printf(bio_err, "unable to write private key\n");
ERR_print_errors(bio_err);
}
else
ret=0;
end:
if (in)
BIO_free(in);
if (out)
BIO_free_all(out);
if (eckey)
EC_KEY_free(eckey);
if (passin)
OPENSSL_free(passin);
if (passout)
OPENSSL_free(passout);
apps_shutdown();
OPENSSL_EXIT(ret);
}
#endif

View File

@@ -1,728 +0,0 @@
/* apps/ecparam.c */
/*
* Written by Nils Larsch for the OpenSSL project.
*/
/* ====================================================================
* Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@openssl.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
/* ====================================================================
* Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
*
* Portions of the attached software ("Contribution") are developed by
* SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
*
* The Contribution is licensed pursuant to the OpenSSL open source
* license provided above.
*
* The elliptic curve binary polynomial software is originally written by
* Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories.
*
*/
#include <openssl/opensslconf.h>
#ifndef OPENSSL_NO_EC
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include "apps.h"
#include <openssl/bio.h>
#include <openssl/err.h>
#include <openssl/bn.h>
#include <openssl/ec.h>
#include <openssl/x509.h>
#include <openssl/pem.h>
#undef PROG
#define PROG ecparam_main
/* -inform arg - input format - default PEM (DER or PEM)
* -outform arg - output format - default PEM
* -in arg - input file - default stdin
* -out arg - output file - default stdout
* -noout - do not print the ec parameter
* -text - print the ec parameters in text form
* -check - validate the ec parameters
* -C - print a 'C' function creating the parameters
* -name arg - use the ec parameters with 'short name' name
* -list_curves - prints a list of all currently available curve 'short names'
* -conv_form arg - specifies the point conversion form
* - possible values: compressed
* uncompressed (default)
* hybrid
* -param_enc arg - specifies the way the ec parameters are encoded
* in the asn1 der encoding
* possible values: named_curve (default)
* explicit
* -no_seed - if 'explicit' parameters are choosen do not use the seed
* -genkey - generate ec key
* -rand file - files to use for random number input
* -engine e - use engine e, possibly a hardware device
*/
static int ecparam_print_var(BIO *,BIGNUM *,const char *,int,unsigned char *);
int MAIN(int, char **);
int MAIN(int argc, char **argv)
{
EC_GROUP *group = NULL;
point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
int new_form = 0;
int asn1_flag = OPENSSL_EC_NAMED_CURVE;
int new_asn1_flag = 0;
char *curve_name = NULL, *inrand = NULL;
int list_curves = 0, no_seed = 0, check = 0,
badops = 0, text = 0, i, need_rand = 0, genkey = 0;
char *infile = NULL, *outfile = NULL, *prog;
BIO *in = NULL, *out = NULL;
int informat, outformat, noout = 0, C = 0, ret = 1;
#ifndef OPENSSL_NO_ENGINE
ENGINE *e = NULL;
#endif
char *engine = NULL;
BIGNUM *ec_p = NULL, *ec_a = NULL, *ec_b = NULL,
*ec_gen = NULL, *ec_order = NULL, *ec_cofactor = NULL;
unsigned char *buffer = NULL;
apps_startup();
if (bio_err == NULL)
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto end;
informat=FORMAT_PEM;
outformat=FORMAT_PEM;
prog=argv[0];
argc--;
argv++;
while (argc >= 1)
{
if (strcmp(*argv,"-inform") == 0)
{
if (--argc < 1) goto bad;
informat=str2fmt(*(++argv));
}
else if (strcmp(*argv,"-outform") == 0)
{
if (--argc < 1) goto bad;
outformat=str2fmt(*(++argv));
}
else if (strcmp(*argv,"-in") == 0)
{
if (--argc < 1) goto bad;
infile= *(++argv);
}
else if (strcmp(*argv,"-out") == 0)
{
if (--argc < 1) goto bad;
outfile= *(++argv);
}
else if (strcmp(*argv,"-text") == 0)
text = 1;
else if (strcmp(*argv,"-C") == 0)
C = 1;
else if (strcmp(*argv,"-check") == 0)
check = 1;
else if (strcmp (*argv, "-name") == 0)
{
if (--argc < 1)
goto bad;
curve_name = *(++argv);
}
else if (strcmp(*argv, "-list_curves") == 0)
list_curves = 1;
else if (strcmp(*argv, "-conv_form") == 0)
{
if (--argc < 1)
goto bad;
++argv;
new_form = 1;
if (strcmp(*argv, "compressed") == 0)
form = POINT_CONVERSION_COMPRESSED;
else if (strcmp(*argv, "uncompressed") == 0)
form = POINT_CONVERSION_UNCOMPRESSED;
else if (strcmp(*argv, "hybrid") == 0)
form = POINT_CONVERSION_HYBRID;
else
goto bad;
}
else if (strcmp(*argv, "-param_enc") == 0)
{
if (--argc < 1)
goto bad;
++argv;
new_asn1_flag = 1;
if (strcmp(*argv, "named_curve") == 0)
asn1_flag = OPENSSL_EC_NAMED_CURVE;
else if (strcmp(*argv, "explicit") == 0)
asn1_flag = 0;
else
goto bad;
}
else if (strcmp(*argv, "-no_seed") == 0)
no_seed = 1;
else if (strcmp(*argv, "-noout") == 0)
noout=1;
else if (strcmp(*argv,"-genkey") == 0)
{
genkey=1;
need_rand=1;
}
else if (strcmp(*argv, "-rand") == 0)
{
if (--argc < 1) goto bad;
inrand= *(++argv);
need_rand=1;
}
else if(strcmp(*argv, "-engine") == 0)
{
if (--argc < 1) goto bad;
engine = *(++argv);
}
else
{
BIO_printf(bio_err,"unknown option %s\n",*argv);
badops=1;
break;
}
argc--;
argv++;
}
if (badops)
{
bad:
BIO_printf(bio_err, "%s [options] <infile >outfile\n",prog);
BIO_printf(bio_err, "where options are\n");
BIO_printf(bio_err, " -inform arg input format - "
"default PEM (DER or PEM)\n");
BIO_printf(bio_err, " -outform arg output format - "
"default PEM\n");
BIO_printf(bio_err, " -in arg input file - "
"default stdin\n");
BIO_printf(bio_err, " -out arg output file - "
"default stdout\n");
BIO_printf(bio_err, " -noout do not print the "
"ec parameter\n");
BIO_printf(bio_err, " -text print the ec "
"parameters in text form\n");
BIO_printf(bio_err, " -check validate the ec "
"parameters\n");
BIO_printf(bio_err, " -C print a 'C' "
"function creating the parameters\n");
BIO_printf(bio_err, " -name arg use the "
"ec parameters with 'short name' name\n");
BIO_printf(bio_err, " -list_curves prints a list of "
"all currently available curve 'short names'\n");
BIO_printf(bio_err, " -conv_form arg specifies the "
"point conversion form \n");
BIO_printf(bio_err, " possible values:"
" compressed\n");
BIO_printf(bio_err, " "
" uncompressed (default)\n");
BIO_printf(bio_err, " "
" hybrid\n");
BIO_printf(bio_err, " -param_enc arg specifies the way"
" the ec parameters are encoded\n");
BIO_printf(bio_err, " in the asn1 der "
"encoding\n");
BIO_printf(bio_err, " possible values:"
" named_curve (default)\n");
BIO_printf(bio_err, " "
" explicit\n");
BIO_printf(bio_err, " -no_seed if 'explicit'"
" parameters are choosen do not"
" use the seed\n");
BIO_printf(bio_err, " -genkey generate ec"
" key\n");
BIO_printf(bio_err, " -rand file files to use for"
" random number input\n");
BIO_printf(bio_err, " -engine e use engine e, "
"possibly a hardware device\n");
goto end;
}
ERR_load_crypto_strings();
in=BIO_new(BIO_s_file());
out=BIO_new(BIO_s_file());
if ((in == NULL) || (out == NULL))
{
ERR_print_errors(bio_err);
goto end;
}
if (infile == NULL)
BIO_set_fp(in,stdin,BIO_NOCLOSE);
else
{
if (BIO_read_filename(in,infile) <= 0)
{
perror(infile);
goto end;
}
}
if (outfile == NULL)
{
BIO_set_fp(out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS
{
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out);
}
#endif
}
else
{
if (BIO_write_filename(out,outfile) <= 0)
{
perror(outfile);
goto end;
}
}
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
if (list_curves)
{
EC_builtin_curve *curves = NULL;
size_t crv_len = 0;
size_t n = 0;
crv_len = EC_get_builtin_curves(NULL, 0);
curves = OPENSSL_malloc((int)(sizeof(EC_builtin_curve) * crv_len));
if (curves == NULL)
goto end;
if (!EC_get_builtin_curves(curves, crv_len))
{
OPENSSL_free(curves);
goto end;
}
for (n = 0; n < crv_len; n++)
{
const char *comment;
const char *sname;
comment = curves[n].comment;
sname = OBJ_nid2sn(curves[n].nid);
if (comment == NULL)
comment = "CURVE DESCRIPTION NOT AVAILABLE";
if (sname == NULL)
sname = "";
BIO_printf(out, " %-10s: ", sname);
BIO_printf(out, "%s\n", comment);
}
OPENSSL_free(curves);
ret = 0;
goto end;
}
if (curve_name != NULL)
{
int nid;
/* workaround for the SECG curve names secp192r1
* and secp256r1 (which are the same as the curves
* prime192v1 and prime256v1 defined in X9.62)
*/
if (!strcmp(curve_name, "secp192r1"))
{
BIO_printf(bio_err, "using curve name prime192v1 "
"instead of secp192r1\n");
nid = NID_X9_62_prime192v1;
}
else if (!strcmp(curve_name, "secp256r1"))
{
BIO_printf(bio_err, "using curve name prime256v1 "
"instead of secp256r1\n");
nid = NID_X9_62_prime256v1;
}
else
nid = OBJ_sn2nid(curve_name);
if (nid == 0)
{
BIO_printf(bio_err, "unknown curve name (%s)\n",
curve_name);
goto end;
}
group = EC_GROUP_new_by_curve_name(nid);
if (group == NULL)
{
BIO_printf(bio_err, "unable to create curve (%s)\n",
curve_name);
goto end;
}
EC_GROUP_set_asn1_flag(group, asn1_flag);
EC_GROUP_set_point_conversion_form(group, form);
}
else if (informat == FORMAT_ASN1)
{
group = d2i_ECPKParameters_bio(in, NULL);
}
else if (informat == FORMAT_PEM)
{
group = PEM_read_bio_ECPKParameters(in,NULL,NULL,NULL);
}
else
{
BIO_printf(bio_err, "bad input format specified\n");
goto end;
}
if (group == NULL)
{
BIO_printf(bio_err,
"unable to load elliptic curve parameters\n");
ERR_print_errors(bio_err);
goto end;
}
if (new_form)
EC_GROUP_set_point_conversion_form(group, form);
if (new_asn1_flag)
EC_GROUP_set_asn1_flag(group, asn1_flag);
if (no_seed)
{
EC_GROUP_set_seed(group, NULL, 0);
}
if (text)
{
if (!ECPKParameters_print(out, group, 0))
goto end;
}
if (check)
{
if (group == NULL)
BIO_printf(bio_err, "no elliptic curve parameters\n");
BIO_printf(bio_err, "checking elliptic curve parameters: ");
if (!EC_GROUP_check(group, NULL))
{
BIO_printf(bio_err, "failed\n");
ERR_print_errors(bio_err);
}
else
BIO_printf(bio_err, "ok\n");
}
if (C)
{
size_t buf_len = 0, tmp_len = 0;
const EC_POINT *point;
int is_prime, len = 0;
const EC_METHOD *meth = EC_GROUP_method_of(group);
if ((ec_p = BN_new()) == NULL || (ec_a = BN_new()) == NULL ||
(ec_b = BN_new()) == NULL || (ec_gen = BN_new()) == NULL ||
(ec_order = BN_new()) == NULL ||
(ec_cofactor = BN_new()) == NULL )
{
perror("OPENSSL_malloc");
goto end;
}
is_prime = (EC_METHOD_get_field_type(meth) ==
NID_X9_62_prime_field);
if (is_prime)
{
if (!EC_GROUP_get_curve_GFp(group, ec_p, ec_a,
ec_b, NULL))
goto end;
}
else
{
/* TODO */
goto end;
}
if ((point = EC_GROUP_get0_generator(group)) == NULL)
goto end;
if (!EC_POINT_point2bn(group, point,
EC_GROUP_get_point_conversion_form(group), ec_gen,
NULL))
goto end;
if (!EC_GROUP_get_order(group, ec_order, NULL))
goto end;
if (!EC_GROUP_get_cofactor(group, ec_cofactor, NULL))
goto end;
if (!ec_p || !ec_a || !ec_b || !ec_gen ||
!ec_order || !ec_cofactor)
goto end;
len = BN_num_bits(ec_order);
if ((tmp_len = (size_t)BN_num_bytes(ec_p)) > buf_len)
buf_len = tmp_len;
if ((tmp_len = (size_t)BN_num_bytes(ec_a)) > buf_len)
buf_len = tmp_len;
if ((tmp_len = (size_t)BN_num_bytes(ec_b)) > buf_len)
buf_len = tmp_len;
if ((tmp_len = (size_t)BN_num_bytes(ec_gen)) > buf_len)
buf_len = tmp_len;
if ((tmp_len = (size_t)BN_num_bytes(ec_order)) > buf_len)
buf_len = tmp_len;
if ((tmp_len = (size_t)BN_num_bytes(ec_cofactor)) > buf_len)
buf_len = tmp_len;
buffer = (unsigned char *)OPENSSL_malloc(buf_len);
if (buffer == NULL)
{
perror("OPENSSL_malloc");
goto end;
}
ecparam_print_var(out, ec_p, "ec_p", len, buffer);
ecparam_print_var(out, ec_a, "ec_a", len, buffer);
ecparam_print_var(out, ec_b, "ec_b", len, buffer);
ecparam_print_var(out, ec_gen, "ec_gen", len, buffer);
ecparam_print_var(out, ec_order, "ec_order", len, buffer);
ecparam_print_var(out, ec_cofactor, "ec_cofactor", len,
buffer);
BIO_printf(out, "\n\n");
BIO_printf(out, "EC_GROUP *get_ec_group_%d(void)\n\t{\n", len);
BIO_printf(out, "\tint ok=0;\n");
BIO_printf(out, "\tEC_GROUP *group = NULL;\n");
BIO_printf(out, "\tEC_POINT *point = NULL;\n");
BIO_printf(out, "\tBIGNUM *tmp_1 = NULL, *tmp_2 = NULL, "
"*tmp_3 = NULL;\n\n");
BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_p_%d, "
"sizeof(ec_p_%d), NULL)) == NULL)\n\t\t"
"goto err;\n", len, len);
BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_a_%d, "
"sizeof(ec_a_%d), NULL)) == NULL)\n\t\t"
"goto err;\n", len, len);
BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_b_%d, "
"sizeof(ec_b_%d), NULL)) == NULL)\n\t\t"
"goto err;\n", len, len);
if (is_prime)
{
BIO_printf(out, "\tif ((group = EC_GROUP_new_curve_"
"GFp(tmp_1, tmp_2, tmp_3, NULL)) == NULL)"
"\n\t\tgoto err;\n\n");
}
else
{
/* TODO */
goto end;
}
BIO_printf(out, "\t/* build generator */\n");
BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_gen_%d, "
"sizeof(ec_gen_%d), tmp_1)) == NULL)"
"\n\t\tgoto err;\n", len, len);
BIO_printf(out, "\tpoint = EC_POINT_bn2point(group, tmp_1, "
"NULL, NULL);\n");
BIO_printf(out, "\tif (point == NULL)\n\t\tgoto err;\n");
BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_order_%d, "
"sizeof(ec_order_%d), tmp_2)) == NULL)"
"\n\t\tgoto err;\n", len, len);
BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_cofactor_%d, "
"sizeof(ec_cofactor_%d), tmp_3)) == NULL)"
"\n\t\tgoto err;\n", len, len);
BIO_printf(out, "\tif (!EC_GROUP_set_generator(group, point,"
" tmp_2, tmp_3))\n\t\tgoto err;\n");
BIO_printf(out, "\n\tok=1;\n");
BIO_printf(out, "err:\n");
BIO_printf(out, "\tif (tmp_1)\n\t\tBN_free(tmp_1);\n");
BIO_printf(out, "\tif (tmp_2)\n\t\tBN_free(tmp_2);\n");
BIO_printf(out, "\tif (tmp_3)\n\t\tBN_free(tmp_3);\n");
BIO_printf(out, "\tif (point)\n\t\tEC_POINT_free(point);\n");
BIO_printf(out, "\tif (!ok)\n");
BIO_printf(out, "\t\t{\n");
BIO_printf(out, "\t\tEC_GROUP_free(group);\n");
BIO_printf(out, "\t\tgroup = NULL;\n");
BIO_printf(out, "\t\t}\n");
BIO_printf(out, "\treturn(group);\n\t}\n");
}
if (!noout)
{
if (outformat == FORMAT_ASN1)
i = i2d_ECPKParameters_bio(out, group);
else if (outformat == FORMAT_PEM)
i = PEM_write_bio_ECPKParameters(out, group);
else
{
BIO_printf(bio_err,"bad output format specified for"
" outfile\n");
goto end;
}
if (!i)
{
BIO_printf(bio_err, "unable to write elliptic "
"curve parameters\n");
ERR_print_errors(bio_err);
goto end;
}
}
if (need_rand)
{
app_RAND_load_file(NULL, bio_err, (inrand != NULL));
if (inrand != NULL)
BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
app_RAND_load_files(inrand));
}
if (genkey)
{
EC_KEY *eckey = EC_KEY_new();
if (eckey == NULL)
goto end;
assert(need_rand);
if (EC_KEY_set_group(eckey, group) == 0)
goto end;
if (!EC_KEY_generate_key(eckey))
{
EC_KEY_free(eckey);
goto end;
}
if (outformat == FORMAT_ASN1)
i = i2d_ECPrivateKey_bio(out, eckey);
else if (outformat == FORMAT_PEM)
i = PEM_write_bio_ECPrivateKey(out, eckey, NULL,
NULL, 0, NULL, NULL);
else
{
BIO_printf(bio_err, "bad output format specified "
"for outfile\n");
EC_KEY_free(eckey);
goto end;
}
EC_KEY_free(eckey);
}
if (need_rand)
app_RAND_write_file(NULL, bio_err);
ret=0;
end:
if (ec_p)
BN_free(ec_p);
if (ec_a)
BN_free(ec_a);
if (ec_b)
BN_free(ec_b);
if (ec_gen)
BN_free(ec_gen);
if (ec_order)
BN_free(ec_order);
if (ec_cofactor)
BN_free(ec_cofactor);
if (buffer)
OPENSSL_free(buffer);
if (in != NULL)
BIO_free(in);
if (out != NULL)
BIO_free_all(out);
if (group != NULL)
EC_GROUP_free(group);
apps_shutdown();
OPENSSL_EXIT(ret);
}
static int ecparam_print_var(BIO *out, BIGNUM *in, const char *var,
int len, unsigned char *buffer)
{
BIO_printf(out, "static unsigned char %s_%d[] = {", var, len);
if (BN_is_zero(in))
BIO_printf(out, "\n\t0x00");
else
{
int i, l;
l = BN_bn2bin(in, buffer);
for (i=0; i<l-1; i++)
{
if ((i%12) == 0)
BIO_printf(out, "\n\t");
BIO_printf(out, "0x%02X,", buffer[i]);
}
if ((i%12) == 0)
BIO_printf(out, "\n\t");
BIO_printf(out, "0x%02X", buffer[i]);
}
BIO_printf(out, "\n\t};\n\n");
return 1;
}
#endif

View File

@@ -66,8 +66,10 @@
#include <openssl/objects.h> #include <openssl/objects.h>
#include <openssl/x509.h> #include <openssl/x509.h>
#include <openssl/rand.h> #include <openssl/rand.h>
#ifndef NO_MD5
#include <openssl/md5.h>
#endif
#include <openssl/pem.h> #include <openssl/pem.h>
#include <ctype.h>
int set_hex(char *in,unsigned char *out,int size); int set_hex(char *in,unsigned char *out,int size);
#undef SIZE #undef SIZE
@@ -78,56 +80,27 @@ int set_hex(char *in,unsigned char *out,int size);
#define BSIZE (8*1024) #define BSIZE (8*1024)
#define PROG enc_main #define PROG enc_main
static void show_ciphers(const OBJ_NAME *name,void *bio_)
{
BIO *bio=bio_;
static int n;
if(!islower((unsigned char)*name->name))
return;
BIO_printf(bio,"-%-25s",name->name);
if(++n == 3)
{
BIO_printf(bio,"\n");
n=0;
}
else
BIO_printf(bio," ");
}
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
#ifndef OPENSSL_NO_ENGINE
ENGINE *e = NULL;
#endif
static const char magic[]="Salted__"; static const char magic[]="Salted__";
char mbuf[sizeof magic-1]; char mbuf[8]; /* should be 1 smaller than magic */
char *strbuf=NULL; char *strbuf=NULL;
unsigned char *buff=NULL,*bufsize=NULL; unsigned char *buff=NULL,*bufsize=NULL;
int bsize=BSIZE,verbose=0; int bsize=BSIZE,verbose=0;
int ret=1,inl; int ret=1,inl;
int nopad = 0; unsigned char key[24],iv[MD5_DIGEST_LENGTH];
unsigned char key[EVP_MAX_KEY_LENGTH],iv[EVP_MAX_IV_LENGTH];
unsigned char salt[PKCS5_SALT_LEN]; unsigned char salt[PKCS5_SALT_LEN];
char *str=NULL, *passarg = NULL, *pass = NULL; char *str=NULL, *passarg = NULL, *pass = NULL;
char *hkey=NULL,*hiv=NULL,*hsalt = NULL; char *hkey=NULL,*hiv=NULL,*hsalt = NULL;
char *md=NULL;
int enc=1,printkey=0,i,base64=0; int enc=1,printkey=0,i,base64=0;
int debug=0,olb64=0,nosalt=0; int debug=0,olb64=0,nosalt=0;
const EVP_CIPHER *cipher=NULL,*c; const EVP_CIPHER *cipher=NULL,*c;
EVP_CIPHER_CTX *ctx = NULL;
char *inf=NULL,*outf=NULL; char *inf=NULL,*outf=NULL;
BIO *in=NULL,*out=NULL,*b64=NULL,*benc=NULL,*rbio=NULL,*wbio=NULL; BIO *in=NULL,*out=NULL,*b64=NULL,*benc=NULL,*rbio=NULL,*wbio=NULL;
#define PROG_NAME_SIZE 39 #define PROG_NAME_SIZE 39
char pname[PROG_NAME_SIZE+1]; char pname[PROG_NAME_SIZE+1];
#ifndef OPENSSL_NO_ENGINE
char *engine = NULL;
#endif
const EVP_MD *dgst=NULL;
int non_fips_allow = 0;
apps_startup(); apps_startup();
@@ -135,11 +108,8 @@ int MAIN(int argc, char **argv)
if ((bio_err=BIO_new(BIO_s_file())) != NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto end;
/* first check the program name */ /* first check the program name */
program_name(argv[0],pname,sizeof pname); program_name(argv[0],pname,PROG_NAME_SIZE);
if (strcmp(pname,"base64") == 0) if (strcmp(pname,"base64") == 0)
base64=1; base64=1;
@@ -171,21 +141,12 @@ int MAIN(int argc, char **argv)
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
passarg= *(++argv); passarg= *(++argv);
} }
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine= *(++argv);
}
#endif
else if (strcmp(*argv,"-d") == 0) else if (strcmp(*argv,"-d") == 0)
enc=0; enc=0;
else if (strcmp(*argv,"-p") == 0) else if (strcmp(*argv,"-p") == 0)
printkey=1; printkey=1;
else if (strcmp(*argv,"-v") == 0) else if (strcmp(*argv,"-v") == 0)
verbose=1; verbose=1;
else if (strcmp(*argv,"-nopad") == 0)
nopad=1;
else if (strcmp(*argv,"-salt") == 0) else if (strcmp(*argv,"-salt") == 0)
nosalt=0; nosalt=0;
else if (strcmp(*argv,"-nosalt") == 0) else if (strcmp(*argv,"-nosalt") == 0)
@@ -226,7 +187,7 @@ int MAIN(int argc, char **argv)
goto bad; goto bad;
} }
buf[0]='\0'; buf[0]='\0';
fgets(buf,sizeof buf,infile); fgets(buf,128,infile);
fclose(infile); fclose(infile);
i=strlen(buf); i=strlen(buf);
if ((i > 0) && if ((i > 0) &&
@@ -257,13 +218,6 @@ int MAIN(int argc, char **argv)
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
hiv= *(++argv); hiv= *(++argv);
} }
else if (strcmp(*argv,"-md") == 0)
{
if (--argc < 1) goto bad;
md= *(++argv);
}
else if (strcmp(*argv,"-non-fips-allow") == 0)
non_fips_allow = 1;
else if ((argv[0][0] == '-') && else if ((argv[0][0] == '-') &&
((c=EVP_get_cipherbyname(&(argv[0][1]))) != NULL)) ((c=EVP_get_cipherbyname(&(argv[0][1]))) != NULL))
{ {
@@ -282,47 +236,84 @@ bad:
BIO_printf(bio_err,"%-14s encrypt\n","-e"); BIO_printf(bio_err,"%-14s encrypt\n","-e");
BIO_printf(bio_err,"%-14s decrypt\n","-d"); BIO_printf(bio_err,"%-14s decrypt\n","-d");
BIO_printf(bio_err,"%-14s base64 encode/decode, depending on encryption flag\n","-a/-base64"); BIO_printf(bio_err,"%-14s base64 encode/decode, depending on encryption flag\n","-a/-base64");
BIO_printf(bio_err,"%-14s passphrase is the next argument\n","-k"); BIO_printf(bio_err,"%-14s key is the next argument\n","-k");
BIO_printf(bio_err,"%-14s passphrase is the first line of the file argument\n","-kfile"); BIO_printf(bio_err,"%-14s key is the first line of the file argument\n","-kfile");
BIO_printf(bio_err,"%-14s the next argument is the md to use to create a key\n","-md");
BIO_printf(bio_err,"%-14s from a passphrase. One of md2, md5, sha or sha1\n","");
BIO_printf(bio_err,"%-14s key/iv in hex is the next argument\n","-K/-iv"); BIO_printf(bio_err,"%-14s key/iv in hex is the next argument\n","-K/-iv");
BIO_printf(bio_err,"%-14s print the iv/key (then exit if -P)\n","-[pP]"); BIO_printf(bio_err,"%-14s print the iv/key (then exit if -P)\n","-[pP]");
BIO_printf(bio_err,"%-14s buffer size\n","-bufsize <n>"); BIO_printf(bio_err,"%-14s buffer size\n","-bufsize <n>");
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err,"%-14s use engine e, possibly a hardware device.\n","-engine e");
#endif
BIO_printf(bio_err,"Cipher Types\n"); BIO_printf(bio_err,"Cipher Types\n");
OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH, BIO_printf(bio_err,"des : 56 bit key DES encryption\n");
show_ciphers, BIO_printf(bio_err,"des_ede :112 bit key ede DES encryption\n");
bio_err); BIO_printf(bio_err,"des_ede3:168 bit key ede DES encryption\n");
BIO_printf(bio_err,"\n"); #ifndef NO_IDEA
BIO_printf(bio_err,"idea :128 bit key IDEA encryption\n");
#endif
#ifndef NO_RC4
BIO_printf(bio_err,"rc2 :128 bit key RC2 encryption\n");
#endif
#ifndef NO_BF
BIO_printf(bio_err,"bf :128 bit key Blowfish encryption\n");
#endif
#ifndef NO_RC4
BIO_printf(bio_err," -%-5s :128 bit key RC4 encryption\n",
LN_rc4);
#endif
BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
LN_des_ecb,LN_des_cbc,
LN_des_cfb64,LN_des_ofb64);
BIO_printf(bio_err," -%-4s (%s)\n",
"des", LN_des_cbc);
BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
LN_des_ede,LN_des_ede_cbc,
LN_des_ede_cfb64,LN_des_ede_ofb64);
BIO_printf(bio_err," -desx -none\n");
BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
LN_des_ede3,LN_des_ede3_cbc,
LN_des_ede3_cfb64,LN_des_ede3_ofb64);
BIO_printf(bio_err," -%-4s (%s)\n",
"des3", LN_des_ede3_cbc);
#ifndef NO_IDEA
BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
LN_idea_ecb, LN_idea_cbc,
LN_idea_cfb64, LN_idea_ofb64);
BIO_printf(bio_err," -%-4s (%s)\n","idea",LN_idea_cbc);
#endif
#ifndef NO_RC2
BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
LN_rc2_ecb, LN_rc2_cbc,
LN_rc2_cfb64, LN_rc2_ofb64);
BIO_printf(bio_err," -%-4s (%s)\n","rc2", LN_rc2_cbc);
#endif
#ifndef NO_BF
BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
LN_bf_ecb, LN_bf_cbc,
LN_bf_cfb64, LN_bf_ofb64);
BIO_printf(bio_err," -%-4s (%s)\n","bf", LN_bf_cbc);
#endif
#ifndef NO_CAST
BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
LN_cast5_ecb, LN_cast5_cbc,
LN_cast5_cfb64, LN_cast5_ofb64);
BIO_printf(bio_err," -%-4s (%s)\n","cast", LN_cast5_cbc);
#endif
#ifndef NO_RC5
BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
LN_rc5_ecb, LN_rc5_cbc,
LN_rc5_cfb64, LN_rc5_ofb64);
BIO_printf(bio_err," -%-4s (%s)\n","rc5", LN_rc5_cbc);
#endif
goto end; goto end;
} }
argc--; argc--;
argv++; argv++;
} }
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
if (md && (dgst=EVP_get_digestbyname(md)) == NULL)
{
BIO_printf(bio_err,"%s is an unsupported message digest type\n",md);
goto end;
}
if (dgst == NULL)
{
if (in_FIPS_mode)
dgst = EVP_sha1();
else
dgst = EVP_md5();
}
if (bufsize != NULL) if (bufsize != NULL)
{ {
unsigned long n; unsigned long n;
@@ -346,7 +337,7 @@ bad:
} }
/* It must be large enough for a base64 encoded line */ /* It must be large enough for a base64 encoded line */
if (base64 && n < 80) n=80; if (n < 80) n=80;
bsize=(int)n; bsize=(int)n;
if (verbose) BIO_printf(bio_err,"bufsize=%d\n",bsize); if (verbose) BIO_printf(bio_err,"bufsize=%d\n",bsize);
@@ -371,16 +362,12 @@ bad:
{ {
BIO_set_callback(in,BIO_debug_callback); BIO_set_callback(in,BIO_debug_callback);
BIO_set_callback(out,BIO_debug_callback); BIO_set_callback(out,BIO_debug_callback);
BIO_set_callback_arg(in,(char *)bio_err); BIO_set_callback_arg(in,bio_err);
BIO_set_callback_arg(out,(char *)bio_err); BIO_set_callback_arg(out,bio_err);
} }
if (inf == NULL) if (inf == NULL)
{
if (bufsize != NULL)
setvbuf(stdin, (char *)NULL, _IONBF, 0);
BIO_set_fp(in,stdin,BIO_NOCLOSE); BIO_set_fp(in,stdin,BIO_NOCLOSE);
}
else else
{ {
if (BIO_read_filename(in,inf) <= 0) if (BIO_read_filename(in,inf) <= 0)
@@ -404,9 +391,9 @@ bad:
{ {
char buf[200]; char buf[200];
BIO_snprintf(buf,sizeof buf,"enter %s %s password:", sprintf(buf,"enter %s %s password:",
OBJ_nid2ln(EVP_CIPHER_nid(cipher)), OBJ_nid2ln(EVP_CIPHER_nid(cipher)),
(enc)?"encryption":"decryption"); (enc)?"encryption":"decryption");
strbuf[0]='\0'; strbuf[0]='\0';
i=EVP_read_pw_string((char *)strbuf,SIZE,buf,enc); i=EVP_read_pw_string((char *)strbuf,SIZE,buf,enc);
if (i == 0) if (i == 0)
@@ -431,9 +418,7 @@ bad:
if (outf == NULL) if (outf == NULL)
{ {
BIO_set_fp(out,stdout,BIO_NOCLOSE); BIO_set_fp(out,stdout,BIO_NOCLOSE);
if (bufsize != NULL) #ifdef VMS
setvbuf(stdout, (char *)NULL, _IONBF, 0);
#ifdef OPENSSL_SYS_VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -459,7 +444,7 @@ bad:
if (debug) if (debug)
{ {
BIO_set_callback(b64,BIO_debug_callback); BIO_set_callback(b64,BIO_debug_callback);
BIO_set_callback_arg(b64,(char *)bio_err); BIO_set_callback_arg(b64,bio_err);
} }
if (olb64) if (olb64)
BIO_set_flags(b64,BIO_FLAGS_BASE64_NO_NL); BIO_set_flags(b64,BIO_FLAGS_BASE64_NO_NL);
@@ -471,9 +456,6 @@ bad:
if (cipher != NULL) if (cipher != NULL)
{ {
/* Note that str is NULL if a key was passed on the command
* line, so we get no salt in that case. Is this a bug?
*/
if (str != NULL) if (str != NULL)
{ {
/* Salt handling: if encrypting generate a salt and /* Salt handling: if encrypting generate a salt and
@@ -485,12 +467,12 @@ bad:
else { else {
if(enc) { if(enc) {
if(hsalt) { if(hsalt) {
if(!set_hex(hsalt,salt,sizeof salt)) { if(!set_hex(hsalt,salt,PKCS5_SALT_LEN)) {
BIO_printf(bio_err, BIO_printf(bio_err,
"invalid hex salt value\n"); "invalid hex salt value\n");
goto end; goto end;
} }
} else if (RAND_pseudo_bytes(salt, sizeof salt) < 0) } else if (RAND_pseudo_bytes(salt, PKCS5_SALT_LEN) < 0)
goto end; goto end;
/* If -P option then don't bother writing */ /* If -P option then don't bother writing */
if((printkey != 2) if((printkey != 2)
@@ -498,14 +480,14 @@ bad:
sizeof magic-1) != sizeof magic-1 sizeof magic-1) != sizeof magic-1
|| BIO_write(wbio, || BIO_write(wbio,
(char *)salt, (char *)salt,
sizeof salt) != sizeof salt)) { PKCS5_SALT_LEN) != PKCS5_SALT_LEN)) {
BIO_printf(bio_err,"error writing output file\n"); BIO_printf(bio_err,"error writing output file\n");
goto end; goto end;
} }
} else if(BIO_read(rbio,mbuf,sizeof mbuf) != sizeof mbuf } else if(BIO_read(rbio,mbuf,sizeof mbuf) != sizeof mbuf
|| BIO_read(rbio, || BIO_read(rbio,
(unsigned char *)salt, (unsigned char *)salt,
sizeof salt) != sizeof salt) { PKCS5_SALT_LEN) != PKCS5_SALT_LEN) {
BIO_printf(bio_err,"error reading input file\n"); BIO_printf(bio_err,"error reading input file\n");
goto end; goto end;
} else if(memcmp(mbuf,magic,sizeof magic-1)) { } else if(memcmp(mbuf,magic,sizeof magic-1)) {
@@ -516,7 +498,7 @@ bad:
sptr = salt; sptr = salt;
} }
EVP_BytesToKey(cipher,dgst,sptr, EVP_BytesToKey(cipher,EVP_md5(),sptr,
(unsigned char *)str, (unsigned char *)str,
strlen(str),1,key,iv); strlen(str),1,key,iv);
/* zero the complete buffer or the string /* zero the complete buffer or the string
@@ -528,7 +510,7 @@ bad:
else else
OPENSSL_cleanse(str,strlen(str)); OPENSSL_cleanse(str,strlen(str));
} }
if ((hiv != NULL) && !set_hex(hiv,iv,sizeof iv)) if ((hiv != NULL) && !set_hex(hiv,iv,8))
{ {
BIO_printf(bio_err,"invalid hex iv value\n"); BIO_printf(bio_err,"invalid hex iv value\n");
goto end; goto end;
@@ -541,7 +523,7 @@ bad:
BIO_printf(bio_err, "iv undefined\n"); BIO_printf(bio_err, "iv undefined\n");
goto end; goto end;
} }
if ((hkey != NULL) && !set_hex(hkey,key,sizeof key)) if ((hkey != NULL) && !set_hex(hkey,key,24))
{ {
BIO_printf(bio_err,"invalid hex key value\n"); BIO_printf(bio_err,"invalid hex key value\n");
goto end; goto end;
@@ -549,40 +531,11 @@ bad:
if ((benc=BIO_new(BIO_f_cipher())) == NULL) if ((benc=BIO_new(BIO_f_cipher())) == NULL)
goto end; goto end;
BIO_set_cipher(benc,cipher,key,iv,enc);
/* Since we may be changing parameters work on the encryption
* context rather than calling BIO_set_cipher().
*/
BIO_get_cipher_ctx(benc, &ctx);
if (non_fips_allow)
EVP_CIPHER_CTX_set_flags(ctx,
EVP_CIPH_FLAG_NON_FIPS_ALLOW);
if (!EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, enc))
{
BIO_printf(bio_err, "Error setting cipher %s\n",
EVP_CIPHER_name(cipher));
ERR_print_errors(bio_err);
goto end;
}
if (nopad)
EVP_CIPHER_CTX_set_padding(ctx, 0);
if (!EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, enc))
{
BIO_printf(bio_err, "Error setting cipher %s\n",
EVP_CIPHER_name(cipher));
ERR_print_errors(bio_err);
goto end;
}
if (debug) if (debug)
{ {
BIO_set_callback(benc,BIO_debug_callback); BIO_set_callback(benc,BIO_debug_callback);
BIO_set_callback_arg(benc,(char *)bio_err); BIO_set_callback_arg(benc,bio_err);
} }
if (printkey) if (printkey)
@@ -590,7 +543,7 @@ bad:
if (!nosalt) if (!nosalt)
{ {
printf("salt="); printf("salt=");
for (i=0; i<(int)sizeof(salt); i++) for (i=0; i<PKCS5_SALT_LEN; i++)
printf("%02X",salt[i]); printf("%02X",salt[i]);
printf("\n"); printf("\n");
} }
@@ -651,7 +604,6 @@ end:
if (benc != NULL) BIO_free(benc); if (benc != NULL) BIO_free(benc);
if (b64 != NULL) BIO_free(b64); if (b64 != NULL) BIO_free(b64);
if(pass) OPENSSL_free(pass); if(pass) OPENSSL_free(pass);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }

View File

@@ -1,542 +0,0 @@
/* apps/engine.c -*- mode: C; c-file-style: "eay" -*- */
/* Written by Richard Levitte <richard@levitte.org> for the OpenSSL
* project 2000.
*/
/* ====================================================================
* Copyright (c) 2000 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* licensing@OpenSSL.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
#ifndef OPENSSL_NO_ENGINE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef OPENSSL_NO_STDIO
#define APPS_WIN16
#endif
#include "apps.h"
#include <openssl/err.h>
#include <openssl/engine.h>
#include <openssl/ssl.h>
#undef PROG
#define PROG engine_main
static const char *engine_usage[]={
"usage: engine opts [engine ...]\n",
" -v[v[v[v]]] - verbose mode, for each engine, list its 'control commands'\n",
" -vv will additionally display each command's description\n",
" -vvv will also add the input flags for each command\n",
" -vvvv will also show internal input flags\n",
" -c - for each engine, also list the capabilities\n",
" -t[t] - for each engine, check that they are really available\n",
" -tt will display error trace for unavailable engines\n",
" -pre <cmd> - runs command 'cmd' against the ENGINE before any attempts\n",
" to load it (if -t is used)\n",
" -post <cmd> - runs command 'cmd' against the ENGINE after loading it\n",
" (only used if -t is also provided)\n",
" NB: -pre and -post will be applied to all ENGINEs supplied on the command\n",
" line, or all supported ENGINEs if none are specified.\n",
" Eg. '-pre \"SO_PATH:/lib/libdriver.so\"' calls command \"SO_PATH\" with\n",
" argument \"/lib/libdriver.so\".\n",
NULL
};
static void identity(void *ptr)
{
return;
}
static int append_buf(char **buf, const char *s, int *size, int step)
{
int l = strlen(s);
if (*buf == NULL)
{
*size = step;
*buf = OPENSSL_malloc(*size);
if (*buf == NULL)
return 0;
**buf = '\0';
}
if (**buf != '\0')
l += 2; /* ", " */
if (strlen(*buf) + strlen(s) >= (unsigned int)*size)
{
*size += step;
*buf = OPENSSL_realloc(*buf, *size);
}
if (*buf == NULL)
return 0;
if (**buf != '\0')
BUF_strlcat(*buf, ", ", *size);
BUF_strlcat(*buf, s, *size);
return 1;
}
static int util_flags(BIO *bio_out, unsigned int flags, const char *indent)
{
int started = 0, err = 0;
/* Indent before displaying input flags */
BIO_printf(bio_out, "%s%s(input flags): ", indent, indent);
if(flags == 0)
{
BIO_printf(bio_out, "<no flags>\n");
return 1;
}
/* If the object is internal, mark it in a way that shows instead of
* having it part of all the other flags, even if it really is. */
if(flags & ENGINE_CMD_FLAG_INTERNAL)
{
BIO_printf(bio_out, "[Internal] ");
}
if(flags & ENGINE_CMD_FLAG_NUMERIC)
{
if(started)
{
BIO_printf(bio_out, "|");
err = 1;
}
BIO_printf(bio_out, "NUMERIC");
started = 1;
}
/* Now we check that no combinations of the mutually exclusive NUMERIC,
* STRING, and NO_INPUT flags have been used. Future flags that can be
* OR'd together with these would need to added after these to preserve
* the testing logic. */
if(flags & ENGINE_CMD_FLAG_STRING)
{
if(started)
{
BIO_printf(bio_out, "|");
err = 1;
}
BIO_printf(bio_out, "STRING");
started = 1;
}
if(flags & ENGINE_CMD_FLAG_NO_INPUT)
{
if(started)
{
BIO_printf(bio_out, "|");
err = 1;
}
BIO_printf(bio_out, "NO_INPUT");
started = 1;
}
/* Check for unknown flags */
flags = flags & ~ENGINE_CMD_FLAG_NUMERIC &
~ENGINE_CMD_FLAG_STRING &
~ENGINE_CMD_FLAG_NO_INPUT &
~ENGINE_CMD_FLAG_INTERNAL;
if(flags)
{
if(started) BIO_printf(bio_out, "|");
BIO_printf(bio_out, "<0x%04X>", flags);
}
if(err)
BIO_printf(bio_out, " <illegal flags!>");
BIO_printf(bio_out, "\n");
return 1;
}
static int util_verbose(ENGINE *e, int verbose, BIO *bio_out, const char *indent)
{
static const int line_wrap = 78;
int num;
int ret = 0;
char *name = NULL;
char *desc = NULL;
int flags;
int xpos = 0;
STACK *cmds = NULL;
if(!ENGINE_ctrl(e, ENGINE_CTRL_HAS_CTRL_FUNCTION, 0, NULL, NULL) ||
((num = ENGINE_ctrl(e, ENGINE_CTRL_GET_FIRST_CMD_TYPE,
0, NULL, NULL)) <= 0))
{
#if 0
BIO_printf(bio_out, "%s<no control commands>\n", indent);
#endif
return 1;
}
cmds = sk_new_null();
if(!cmds)
goto err;
do {
int len;
/* Get the command input flags */
if((flags = ENGINE_ctrl(e, ENGINE_CTRL_GET_CMD_FLAGS, num,
NULL, NULL)) < 0)
goto err;
if (!(flags & ENGINE_CMD_FLAG_INTERNAL) || verbose >= 4)
{
/* Get the command name */
if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_LEN_FROM_CMD, num,
NULL, NULL)) <= 0)
goto err;
if((name = OPENSSL_malloc(len + 1)) == NULL)
goto err;
if(ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_FROM_CMD, num, name,
NULL) <= 0)
goto err;
/* Get the command description */
if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_LEN_FROM_CMD, num,
NULL, NULL)) < 0)
goto err;
if(len > 0)
{
if((desc = OPENSSL_malloc(len + 1)) == NULL)
goto err;
if(ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_FROM_CMD, num, desc,
NULL) <= 0)
goto err;
}
/* Now decide on the output */
if(xpos == 0)
/* Do an indent */
xpos = BIO_printf(bio_out, indent);
else
/* Otherwise prepend a ", " */
xpos += BIO_printf(bio_out, ", ");
if(verbose == 1)
{
/* We're just listing names, comma-delimited */
if((xpos > (int)strlen(indent)) &&
(xpos + (int)strlen(name) > line_wrap))
{
BIO_printf(bio_out, "\n");
xpos = BIO_printf(bio_out, indent);
}
xpos += BIO_printf(bio_out, "%s", name);
}
else
{
/* We're listing names plus descriptions */
BIO_printf(bio_out, "%s: %s\n", name,
(desc == NULL) ? "<no description>" : desc);
/* ... and sometimes input flags */
if((verbose >= 3) && !util_flags(bio_out, flags,
indent))
goto err;
xpos = 0;
}
}
OPENSSL_free(name); name = NULL;
if(desc) { OPENSSL_free(desc); desc = NULL; }
/* Move to the next command */
num = ENGINE_ctrl(e, ENGINE_CTRL_GET_NEXT_CMD_TYPE,
num, NULL, NULL);
} while(num > 0);
if(xpos > 0)
BIO_printf(bio_out, "\n");
ret = 1;
err:
if(cmds) sk_pop_free(cmds, identity);
if(name) OPENSSL_free(name);
if(desc) OPENSSL_free(desc);
return ret;
}
static void util_do_cmds(ENGINE *e, STACK *cmds, BIO *bio_out, const char *indent)
{
int loop, res, num = sk_num(cmds);
if(num < 0)
{
BIO_printf(bio_out, "[Error]: internal stack error\n");
return;
}
for(loop = 0; loop < num; loop++)
{
char buf[256];
const char *cmd, *arg;
cmd = sk_value(cmds, loop);
res = 1; /* assume success */
/* Check if this command has no ":arg" */
if((arg = strstr(cmd, ":")) == NULL)
{
if(!ENGINE_ctrl_cmd_string(e, cmd, NULL, 0))
res = 0;
}
else
{
if((int)(arg - cmd) > 254)
{
BIO_printf(bio_out,"[Error]: command name too long\n");
return;
}
memcpy(buf, cmd, (int)(arg - cmd));
buf[arg-cmd] = '\0';
arg++; /* Move past the ":" */
/* Call the command with the argument */
if(!ENGINE_ctrl_cmd_string(e, buf, arg, 0))
res = 0;
}
if(res)
BIO_printf(bio_out, "[Success]: %s\n", cmd);
else
{
BIO_printf(bio_out, "[Failure]: %s\n", cmd);
ERR_print_errors(bio_out);
}
}
}
int MAIN(int, char **);
int MAIN(int argc, char **argv)
{
int ret=1,i;
const char **pp;
int verbose=0, list_cap=0, test_avail=0, test_avail_noise = 0;
ENGINE *e;
STACK *engines = sk_new_null();
STACK *pre_cmds = sk_new_null();
STACK *post_cmds = sk_new_null();
int badops=1;
BIO *bio_out=NULL;
const char *indent = " ";
apps_startup();
SSL_load_error_strings();
if (bio_err == NULL)
bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
if (!load_config(bio_err, NULL))
goto end;
bio_out=BIO_new_fp(stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS
{
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
bio_out = BIO_push(tmpbio, bio_out);
}
#endif
argc--;
argv++;
while (argc >= 1)
{
if (strncmp(*argv,"-v",2) == 0)
{
if(strspn(*argv + 1, "v") < strlen(*argv + 1))
goto skip_arg_loop;
if((verbose=strlen(*argv + 1)) > 4)
goto skip_arg_loop;
}
else if (strcmp(*argv,"-c") == 0)
list_cap=1;
else if (strncmp(*argv,"-t",2) == 0)
{
test_avail=1;
if(strspn(*argv + 1, "t") < strlen(*argv + 1))
goto skip_arg_loop;
if((test_avail_noise = strlen(*argv + 1) - 1) > 1)
goto skip_arg_loop;
}
else if (strcmp(*argv,"-pre") == 0)
{
argc--; argv++;
if (argc == 0)
goto skip_arg_loop;
sk_push(pre_cmds,*argv);
}
else if (strcmp(*argv,"-post") == 0)
{
argc--; argv++;
if (argc == 0)
goto skip_arg_loop;
sk_push(post_cmds,*argv);
}
else if ((strncmp(*argv,"-h",2) == 0) ||
(strcmp(*argv,"-?") == 0))
goto skip_arg_loop;
else
sk_push(engines,*argv);
argc--;
argv++;
}
/* Looks like everything went OK */
badops = 0;
skip_arg_loop:
if (badops)
{
for (pp=engine_usage; (*pp != NULL); pp++)
BIO_printf(bio_err,"%s",*pp);
goto end;
}
if (sk_num(engines) == 0)
{
for(e = ENGINE_get_first(); e != NULL; e = ENGINE_get_next(e))
{
sk_push(engines,(char *)ENGINE_get_id(e));
}
}
for (i=0; i<sk_num(engines); i++)
{
const char *id = sk_value(engines,i);
if ((e = ENGINE_by_id(id)) != NULL)
{
const char *name = ENGINE_get_name(e);
/* Do "id" first, then "name". Easier to auto-parse. */
BIO_printf(bio_out, "(%s) %s\n", id, name);
util_do_cmds(e, pre_cmds, bio_out, indent);
if (strcmp(ENGINE_get_id(e), id) != 0)
{
BIO_printf(bio_out, "Loaded: (%s) %s\n",
ENGINE_get_id(e), ENGINE_get_name(e));
}
if (list_cap)
{
int cap_size = 256;
char *cap_buf = NULL;
int k,n;
const int *nids;
ENGINE_CIPHERS_PTR fn_c;
ENGINE_DIGESTS_PTR fn_d;
if (ENGINE_get_RSA(e) != NULL
&& !append_buf(&cap_buf, "RSA",
&cap_size, 256))
goto end;
if (ENGINE_get_DSA(e) != NULL
&& !append_buf(&cap_buf, "DSA",
&cap_size, 256))
goto end;
if (ENGINE_get_DH(e) != NULL
&& !append_buf(&cap_buf, "DH",
&cap_size, 256))
goto end;
if (ENGINE_get_RAND(e) != NULL
&& !append_buf(&cap_buf, "RAND",
&cap_size, 256))
goto end;
fn_c = ENGINE_get_ciphers(e);
if(!fn_c) goto skip_ciphers;
n = fn_c(e, NULL, &nids, 0);
for(k=0 ; k < n ; ++k)
if(!append_buf(&cap_buf,
OBJ_nid2sn(nids[k]),
&cap_size, 256))
goto end;
skip_ciphers:
fn_d = ENGINE_get_digests(e);
if(!fn_d) goto skip_digests;
n = fn_d(e, NULL, &nids, 0);
for(k=0 ; k < n ; ++k)
if(!append_buf(&cap_buf,
OBJ_nid2sn(nids[k]),
&cap_size, 256))
goto end;
skip_digests:
if (cap_buf && (*cap_buf != '\0'))
BIO_printf(bio_out, " [%s]\n", cap_buf);
OPENSSL_free(cap_buf);
}
if(test_avail)
{
BIO_printf(bio_out, "%s", indent);
if (ENGINE_init(e))
{
BIO_printf(bio_out, "[ available ]\n");
util_do_cmds(e, post_cmds, bio_out, indent);
ENGINE_finish(e);
}
else
{
BIO_printf(bio_out, "[ unavailable ]\n");
if(test_avail_noise)
ERR_print_errors_fp(stdout);
ERR_clear_error();
}
}
if((verbose > 0) && !util_verbose(e, verbose, bio_out, indent))
goto end;
ENGINE_free(e);
}
else
ERR_print_errors(bio_err);
}
ret=0;
end:
ERR_print_errors(bio_err);
sk_pop_free(engines, identity);
sk_pop_free(pre_cmds, identity);
sk_pop_free(post_cmds, identity);
if (bio_out != NULL) BIO_free_all(bio_out);
apps_shutdown();
OPENSSL_EXIT(ret);
}
#else
# if PEDANTIC
static void *dummy=&dummy;
# endif
#endif

View File

@@ -91,7 +91,7 @@ int MAIN(int argc, char **argv)
out=BIO_new(BIO_s_file()); out=BIO_new(BIO_s_file());
if ((out != NULL) && BIO_set_fp(out,stdout,BIO_NOCLOSE)) if ((out != NULL) && BIO_set_fp(out,stdout,BIO_NOCLOSE))
{ {
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -121,6 +121,5 @@ int MAIN(int argc, char **argv)
ret++; ret++;
} }
} }
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }

View File

@@ -57,14 +57,7 @@
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
#include <openssl/opensslconf.h> #ifndef NO_DH
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
* deprecated functions for openssl-internal code */
#ifdef OPENSSL_NO_DEPRECATED
#undef OPENSSL_NO_DEPRECATED
#endif
#ifndef OPENSSL_NO_DH
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <sys/types.h> #include <sys/types.h>
@@ -82,36 +75,25 @@
#undef PROG #undef PROG
#define PROG gendh_main #define PROG gendh_main
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb); static void MS_CALLBACK dh_cb(int p, int n, void *arg);
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
BN_GENCB cb;
#ifndef OPENSSL_NO_ENGINE
ENGINE *e = NULL;
#endif
DH *dh=NULL; DH *dh=NULL;
int ret=1,num=DEFBITS; int ret=1,num=DEFBITS;
int g=2; int g=2;
char *outfile=NULL; char *outfile=NULL;
char *inrand=NULL; char *inrand=NULL;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
BIO *out=NULL; BIO *out=NULL;
apps_startup(); apps_startup();
BN_GENCB_set(&cb, dh_cb, bio_err);
if (bio_err == NULL) if (bio_err == NULL)
if ((bio_err=BIO_new(BIO_s_file())) != NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto end;
argv++; argv++;
argc--; argc--;
for (;;) for (;;)
@@ -128,13 +110,6 @@ int MAIN(int argc, char **argv)
g=3; */ g=3; */
else if (strcmp(*argv,"-5") == 0) else if (strcmp(*argv,"-5") == 0)
g=5; g=5;
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine= *(++argv);
}
#endif
else if (strcmp(*argv,"-rand") == 0) else if (strcmp(*argv,"-rand") == 0)
{ {
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
@@ -150,22 +125,15 @@ int MAIN(int argc, char **argv)
bad: bad:
BIO_printf(bio_err,"usage: gendh [args] [numbits]\n"); BIO_printf(bio_err,"usage: gendh [args] [numbits]\n");
BIO_printf(bio_err," -out file - output the key to 'file\n"); BIO_printf(bio_err," -out file - output the key to 'file\n");
BIO_printf(bio_err," -2 - use 2 as the generator value\n"); BIO_printf(bio_err," -2 use 2 as the generator value\n");
/* BIO_printf(bio_err," -3 - use 3 as the generator value\n"); */ /* BIO_printf(bio_err," -3 use 3 as the generator value\n"); */
BIO_printf(bio_err," -5 - use 5 as the generator value\n"); BIO_printf(bio_err," -5 use 5 as the generator value\n");
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n");
#endif
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
BIO_printf(bio_err," - load the file (or the files in the directory) into\n"); BIO_printf(bio_err," - load the file (or the files in the directory) into\n");
BIO_printf(bio_err," the random number generator\n"); BIO_printf(bio_err," the random number generator\n");
goto end; goto end;
} }
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
out=BIO_new(BIO_s_file()); out=BIO_new(BIO_s_file());
if (out == NULL) if (out == NULL)
{ {
@@ -176,7 +144,7 @@ bad:
if (outfile == NULL) if (outfile == NULL)
{ {
BIO_set_fp(out,stdout,BIO_NOCLOSE); BIO_set_fp(out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -202,10 +170,10 @@ bad:
BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g); BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g);
BIO_printf(bio_err,"This is going to take a long time\n"); BIO_printf(bio_err,"This is going to take a long time\n");
dh=DH_generate_parameters(num,g,dh_cb,bio_err);
if(((dh = DH_new()) == NULL) || !DH_generate_parameters_ex(dh, num, g, &cb))
goto end;
if (dh == NULL) goto end;
app_RAND_write_file(NULL, bio_err); app_RAND_write_file(NULL, bio_err);
if (!PEM_write_bio_DHparams(out,dh)) if (!PEM_write_bio_DHparams(out,dh))
@@ -216,11 +184,10 @@ end:
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
if (out != NULL) BIO_free_all(out); if (out != NULL) BIO_free_all(out);
if (dh != NULL) DH_free(dh); if (dh != NULL) DH_free(dh);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb) static void MS_CALLBACK dh_cb(int p, int n, void *arg)
{ {
char c='*'; char c='*';
@@ -228,11 +195,10 @@ static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
if (p == 1) c='+'; if (p == 1) c='+';
if (p == 2) c='*'; if (p == 2) c='*';
if (p == 3) c='\n'; if (p == 3) c='\n';
BIO_write(cb->arg,&c,1); BIO_write((BIO *)arg,&c,1);
(void)BIO_flush(cb->arg); (void)BIO_flush((BIO *)arg);
#ifdef LINT #ifdef LINT
p=n; p=n;
#endif #endif
return 1;
} }
#endif #endif

View File

@@ -56,8 +56,7 @@
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */ #ifndef NO_DSA
#ifndef OPENSSL_NO_DSA
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <sys/types.h> #include <sys/types.h>
@@ -78,19 +77,13 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
#ifndef OPENSSL_NO_ENGINE
ENGINE *e = NULL;
#endif
DSA *dsa=NULL; DSA *dsa=NULL;
int ret=1; int ret=1;
char *outfile=NULL; char *outfile=NULL;
char *inrand=NULL,*dsaparams=NULL; char *inrand=NULL,*dsaparams=NULL;
char *passargout = NULL, *passout = NULL; char *passargout = NULL, *passout = NULL;
BIO *out=NULL,*in=NULL; BIO *out=NULL,*in=NULL;
const EVP_CIPHER *enc=NULL; EVP_CIPHER *enc=NULL;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
apps_startup(); apps_startup();
@@ -98,9 +91,6 @@ int MAIN(int argc, char **argv)
if ((bio_err=BIO_new(BIO_s_file())) != NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto end;
argv++; argv++;
argc--; argc--;
for (;;) for (;;)
@@ -116,13 +106,6 @@ int MAIN(int argc, char **argv)
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
passargout= *(++argv); passargout= *(++argv);
} }
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine= *(++argv);
}
#endif
else if (strcmp(*argv,"-rand") == 0) else if (strcmp(*argv,"-rand") == 0)
{ {
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
@@ -130,35 +113,15 @@ int MAIN(int argc, char **argv)
} }
else if (strcmp(*argv,"-") == 0) else if (strcmp(*argv,"-") == 0)
goto bad; goto bad;
#ifndef OPENSSL_NO_DES #ifndef NO_DES
else if (strcmp(*argv,"-des") == 0) else if (strcmp(*argv,"-des") == 0)
enc=EVP_des_cbc(); enc=EVP_des_cbc();
else if (strcmp(*argv,"-des3") == 0) else if (strcmp(*argv,"-des3") == 0)
enc=EVP_des_ede3_cbc(); enc=EVP_des_ede3_cbc();
#endif #endif
#ifndef OPENSSL_NO_IDEA #ifndef NO_IDEA
else if (strcmp(*argv,"-idea") == 0) else if (strcmp(*argv,"-idea") == 0)
enc=EVP_idea_cbc(); enc=EVP_idea_cbc();
#endif
#ifndef OPENSSL_NO_SEED
else if (strcmp(*argv,"-seed") == 0)
enc=EVP_seed_cbc();
#endif
#ifndef OPENSSL_NO_AES
else if (strcmp(*argv,"-aes128") == 0)
enc=EVP_aes_128_cbc();
else if (strcmp(*argv,"-aes192") == 0)
enc=EVP_aes_192_cbc();
else if (strcmp(*argv,"-aes256") == 0)
enc=EVP_aes_256_cbc();
#endif
#ifndef OPENSSL_NO_CAMELLIA
else if (strcmp(*argv,"-camellia128") == 0)
enc=EVP_camellia_128_cbc();
else if (strcmp(*argv,"-camellia192") == 0)
enc=EVP_camellia_192_cbc();
else if (strcmp(*argv,"-camellia256") == 0)
enc=EVP_camellia_256_cbc();
#endif #endif
else if (**argv != '-' && dsaparams == NULL) else if (**argv != '-' && dsaparams == NULL)
{ {
@@ -175,27 +138,12 @@ int MAIN(int argc, char **argv)
bad: bad:
BIO_printf(bio_err,"usage: gendsa [args] dsaparam-file\n"); BIO_printf(bio_err,"usage: gendsa [args] dsaparam-file\n");
BIO_printf(bio_err," -out file - output the key to 'file'\n"); BIO_printf(bio_err," -out file - output the key to 'file'\n");
#ifndef OPENSSL_NO_DES #ifndef NO_DES
BIO_printf(bio_err," -des - encrypt the generated key with DES in cbc mode\n"); BIO_printf(bio_err," -des - encrypt the generated key with DES in cbc mode\n");
BIO_printf(bio_err," -des3 - encrypt the generated key with DES in ede cbc mode (168 bit key)\n"); BIO_printf(bio_err," -des3 - encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
#endif #endif
#ifndef OPENSSL_NO_IDEA #ifndef NO_IDEA
BIO_printf(bio_err," -idea - encrypt the generated key with IDEA in cbc mode\n"); BIO_printf(bio_err," -idea - encrypt the generated key with IDEA in cbc mode\n");
#endif
#ifndef OPENSSL_NO_SEED
BIO_printf(bio_err," -seed\n");
BIO_printf(bio_err," encrypt PEM output with cbc seed\n");
#endif
#ifndef OPENSSL_NO_AES
BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
BIO_printf(bio_err," encrypt PEM output with cbc aes\n");
#endif
#ifndef OPENSSL_NO_CAMELLIA
BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
BIO_printf(bio_err," encrypt PEM output with cbc camellia\n");
#endif
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n");
#endif #endif
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
BIO_printf(bio_err," - load the file (or the files in the directory) into\n"); BIO_printf(bio_err," - load the file (or the files in the directory) into\n");
@@ -205,10 +153,6 @@ bad:
goto end; goto end;
} }
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) { if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
BIO_printf(bio_err, "Error getting password\n"); BIO_printf(bio_err, "Error getting password\n");
goto end; goto end;
@@ -236,7 +180,7 @@ bad:
if (outfile == NULL) if (outfile == NULL)
{ {
BIO_set_fp(out,stdout,BIO_NOCLOSE); BIO_set_fp(out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -276,7 +220,6 @@ end:
if (out != NULL) BIO_free_all(out); if (out != NULL) BIO_free_all(out);
if (dsa != NULL) DSA_free(dsa); if (dsa != NULL) DSA_free(dsa);
if(passout) OPENSSL_free(passout); if(passout) OPENSSL_free(passout);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }
#endif #endif

View File

@@ -56,14 +56,7 @@
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
#include <openssl/opensslconf.h> #ifndef NO_RSA
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
* deprecated functions for openssl-internal code */
#ifdef OPENSSL_NO_DEPRECATED
#undef OPENSSL_NO_DEPRECATED
#endif
#ifndef OPENSSL_NO_RSA
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <sys/types.h> #include <sys/types.h>
@@ -76,49 +69,33 @@
#include <openssl/evp.h> #include <openssl/evp.h>
#include <openssl/x509.h> #include <openssl/x509.h>
#include <openssl/pem.h> #include <openssl/pem.h>
#include <openssl/rand.h>
#define DEFBITS 512 #define DEFBITS 512
#undef PROG #undef PROG
#define PROG genrsa_main #define PROG genrsa_main
static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb); static void MS_CALLBACK genrsa_cb(int p, int n, void *arg);
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
BN_GENCB cb;
#ifndef OPENSSL_NO_ENGINE
ENGINE *e = NULL;
#endif
int ret=1; int ret=1;
RSA *rsa=NULL;
int i,num=DEFBITS; int i,num=DEFBITS;
long l; long l;
int use_x931 = 0; EVP_CIPHER *enc=NULL;
const EVP_CIPHER *enc=NULL;
unsigned long f4=RSA_F4; unsigned long f4=RSA_F4;
char *outfile=NULL; char *outfile=NULL;
char *passargout = NULL, *passout = NULL; char *passargout = NULL, *passout = NULL;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
char *inrand=NULL; char *inrand=NULL;
BIO *out=NULL; BIO *out=NULL;
BIGNUM *bn = BN_new();
RSA *rsa = RSA_new();
if(!bn || !rsa) goto err;
apps_startup(); apps_startup();
BN_GENCB_set(&cb, genrsa_cb, bio_err);
if (bio_err == NULL) if (bio_err == NULL)
if ((bio_err=BIO_new(BIO_s_file())) != NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto err;
if ((out=BIO_new(BIO_s_file())) == NULL) if ((out=BIO_new(BIO_s_file())) == NULL)
{ {
BIO_printf(bio_err,"unable to create BIO for output\n"); BIO_printf(bio_err,"unable to create BIO for output\n");
@@ -139,49 +116,20 @@ int MAIN(int argc, char **argv)
f4=3; f4=3;
else if (strcmp(*argv,"-F4") == 0 || strcmp(*argv,"-f4") == 0) else if (strcmp(*argv,"-F4") == 0 || strcmp(*argv,"-f4") == 0)
f4=RSA_F4; f4=RSA_F4;
else if (strcmp(*argv,"-x931") == 0)
use_x931 = 1;
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine= *(++argv);
}
#endif
else if (strcmp(*argv,"-rand") == 0) else if (strcmp(*argv,"-rand") == 0)
{ {
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
inrand= *(++argv); inrand= *(++argv);
} }
#ifndef OPENSSL_NO_DES #ifndef NO_DES
else if (strcmp(*argv,"-des") == 0) else if (strcmp(*argv,"-des") == 0)
enc=EVP_des_cbc(); enc=EVP_des_cbc();
else if (strcmp(*argv,"-des3") == 0) else if (strcmp(*argv,"-des3") == 0)
enc=EVP_des_ede3_cbc(); enc=EVP_des_ede3_cbc();
#endif #endif
#ifndef OPENSSL_NO_IDEA #ifndef NO_IDEA
else if (strcmp(*argv,"-idea") == 0) else if (strcmp(*argv,"-idea") == 0)
enc=EVP_idea_cbc(); enc=EVP_idea_cbc();
#endif
#ifndef OPENSSL_NO_SEED
else if (strcmp(*argv,"-seed") == 0)
enc=EVP_seed_cbc();
#endif
#ifndef OPENSSL_NO_AES
else if (strcmp(*argv,"-aes128") == 0)
enc=EVP_aes_128_cbc();
else if (strcmp(*argv,"-aes192") == 0)
enc=EVP_aes_192_cbc();
else if (strcmp(*argv,"-aes256") == 0)
enc=EVP_aes_256_cbc();
#endif
#ifndef OPENSSL_NO_CAMELLIA
else if (strcmp(*argv,"-camellia128") == 0)
enc=EVP_camellia_128_cbc();
else if (strcmp(*argv,"-camellia192") == 0)
enc=EVP_camellia_192_cbc();
else if (strcmp(*argv,"-camellia256") == 0)
enc=EVP_camellia_256_cbc();
#endif #endif
else if (strcmp(*argv,"-passout") == 0) else if (strcmp(*argv,"-passout") == 0)
{ {
@@ -199,28 +147,13 @@ bad:
BIO_printf(bio_err,"usage: genrsa [args] [numbits]\n"); BIO_printf(bio_err,"usage: genrsa [args] [numbits]\n");
BIO_printf(bio_err," -des encrypt the generated key with DES in cbc mode\n"); BIO_printf(bio_err," -des encrypt the generated key with DES in cbc mode\n");
BIO_printf(bio_err," -des3 encrypt the generated key with DES in ede cbc mode (168 bit key)\n"); BIO_printf(bio_err," -des3 encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
#ifndef OPENSSL_NO_IDEA #ifndef NO_IDEA
BIO_printf(bio_err," -idea encrypt the generated key with IDEA in cbc mode\n"); BIO_printf(bio_err," -idea encrypt the generated key with IDEA in cbc mode\n");
#endif
#ifndef OPENSSL_NO_SEED
BIO_printf(bio_err," -seed\n");
BIO_printf(bio_err," encrypt PEM output with cbc seed\n");
#endif
#ifndef OPENSSL_NO_AES
BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
BIO_printf(bio_err," encrypt PEM output with cbc aes\n");
#endif
#ifndef OPENSSL_NO_CAMELLIA
BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
BIO_printf(bio_err," encrypt PEM output with cbc camellia\n");
#endif #endif
BIO_printf(bio_err," -out file output the key to 'file\n"); BIO_printf(bio_err," -out file output the key to 'file\n");
BIO_printf(bio_err," -passout arg output file pass phrase source\n"); BIO_printf(bio_err," -passout arg output file pass phrase source\n");
BIO_printf(bio_err," -f4 use F4 (0x10001) for the E value\n"); BIO_printf(bio_err," -f4 use F4 (0x10001) for the E value\n");
BIO_printf(bio_err," -3 use 3 for the E value\n"); BIO_printf(bio_err," -3 use 3 for the E value\n");
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
#endif
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
BIO_printf(bio_err," load the file (or the files in the directory) into\n"); BIO_printf(bio_err," load the file (or the files in the directory) into\n");
BIO_printf(bio_err," the random number generator\n"); BIO_printf(bio_err," the random number generator\n");
@@ -234,14 +167,10 @@ bad:
goto err; goto err;
} }
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
if (outfile == NULL) if (outfile == NULL)
{ {
BIO_set_fp(out,stdout,BIO_NOCLOSE); BIO_set_fp(out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -257,8 +186,7 @@ bad:
} }
} }
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL)
&& !RAND_status())
{ {
BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n"); BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
} }
@@ -268,22 +196,12 @@ bad:
BIO_printf(bio_err,"Generating RSA private key, %d bit long modulus\n", BIO_printf(bio_err,"Generating RSA private key, %d bit long modulus\n",
num); num);
rsa=RSA_generate_key(num,f4,genrsa_cb,bio_err);
if (use_x931)
{
BIGNUM *pubexp;
pubexp = BN_new();
if (!BN_set_word(pubexp, f4))
goto err;
if (!RSA_X931_generate_key_ex(rsa, num, pubexp, &cb))
goto err;
BN_free(pubexp);
}
else if(!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, &cb))
goto err;
app_RAND_write_file(NULL, bio_err); app_RAND_write_file(NULL, bio_err);
if (rsa == NULL) goto err;
/* We need to do the following for when the base number size is < /* We need to do the following for when the base number size is <
* long, esp windows 3.1 :-(. */ * long, esp windows 3.1 :-(. */
l=0L; l=0L;
@@ -296,28 +214,20 @@ bad:
l+=rsa->e->d[i]; l+=rsa->e->d[i];
} }
BIO_printf(bio_err,"e is %ld (0x%lX)\n",l,l); BIO_printf(bio_err,"e is %ld (0x%lX)\n",l,l);
{ if (!PEM_write_bio_RSAPrivateKey(out,rsa,enc,NULL,0,NULL, passout))
PW_CB_DATA cb_data;
cb_data.password = passout;
cb_data.prompt_info = outfile;
if (!PEM_write_bio_RSAPrivateKey(out,rsa,enc,NULL,0,
(pem_password_cb *)password_callback,&cb_data))
goto err; goto err;
}
ret=0; ret=0;
err: err:
if (bn) BN_free(bn); if (rsa != NULL) RSA_free(rsa);
if (rsa) RSA_free(rsa); if (out != NULL) BIO_free_all(out);
if (out) BIO_free_all(out);
if(passout) OPENSSL_free(passout); if(passout) OPENSSL_free(passout);
if (ret != 0) if (ret != 0)
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }
static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb) static void MS_CALLBACK genrsa_cb(int p, int n, void *arg)
{ {
char c='*'; char c='*';
@@ -325,14 +235,13 @@ static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb)
if (p == 1) c='+'; if (p == 1) c='+';
if (p == 2) c='*'; if (p == 2) c='*';
if (p == 3) c='\n'; if (p == 3) c='\n';
BIO_write(cb->arg,&c,1); BIO_write((BIO *)arg,&c,1);
(void)BIO_flush(cb->arg); (void)BIO_flush((BIO *)arg);
#ifdef LINT #ifdef LINT
p=n; p=n;
#endif #endif
return 1;
} }
#else /* !OPENSSL_NO_RSA */ #else /* !NO_RSA */
# if PEDANTIC # if PEDANTIC
static void *dummy=&dummy; static void *dummy=&dummy;

View File

@@ -15,10 +15,22 @@ $!
$! It was written so it would try to determine what "C" compiler to $! It was written so it would try to determine what "C" compiler to
$! use or you can specify which "C" compiler to use. $! use or you can specify which "C" compiler to use.
$! $!
$! Specify DEBUG or NODEBUG as P1 to compile with or without debugger $! Specify RSAREF as P1 to compile with the RSAREF library instead of
$! the regular one. If you specify NORSAREF it will compile with the
$! regular RSAREF routines. (Note: If you are in the United States
$! you MUST compile with RSAREF unless you have a license from RSA).
$!
$! Note: The RSAREF libraries are NOT INCLUDED and you have to
$! download it from "ftp://ftp.rsa.com/rsaref". You have to
$! get the ".tar-Z" file as the ".zip" file dosen't have the
$! directory structure stored. You have to extract the file
$! into the [.RSAREF] directory under the root directory as that
$! is where the scripts will look for the files.
$!
$! Specify DEBUG or NODEBUG as P2 to compile with or without debugger
$! information. $! information.
$! $!
$! Specify which compiler at P2 to try to compile under. $! Specify which compiler at P3 to try to compile under.
$! $!
$! VAXC For VAX C. $! VAXC For VAX C.
$! DECC For DEC C. $! DECC For DEC C.
@@ -27,16 +39,15 @@ $!
$! If you don't speficy a compiler, it will try to determine which $! If you don't speficy a compiler, it will try to determine which
$! "C" compiler to use. $! "C" compiler to use.
$! $!
$! P3, if defined, sets a TCP/IP library to use, through one of the following $! P4, if defined, sets a TCP/IP library to use, through one of the following
$! keywords: $! keywords:
$! $!
$! UCX for UCX $! UCX for UCX
$! SOCKETSHR for SOCKETSHR+NETLIB $! SOCKETSHR for SOCKETSHR+NETLIB
$! TCPIP for TCPIP (post UCX)
$! $!
$! P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up) $! P5, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
$! $!
$! P5, if defined, sets a choice of programs to compile. $! P6, if defined, sets a choice of programs to compile.
$! $!
$! $!
$! Define A TCP/IP Library That We Will Need To Link To. $! Define A TCP/IP Library That We Will Need To Link To.
@@ -89,6 +100,10 @@ $! Define The CRYPTO Library.
$! $!
$ CRYPTO_LIB := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]LIBCRYPTO.OLB $ CRYPTO_LIB := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]LIBCRYPTO.OLB
$! $!
$! Define The RSAREF Library.
$!
$ RSAREF_LIB := SYS$DISK:[-.'ARCH'.EXE.RSAREF]LIBRSAGLUE.OLB
$!
$! Define The SSL Library. $! Define The SSL Library.
$! $!
$ SSL_LIB := SYS$DISK:[-.'ARCH'.EXE.SSL]LIBSSL.OLB $ SSL_LIB := SYS$DISK:[-.'ARCH'.EXE.SSL]LIBSSL.OLB
@@ -139,17 +154,34 @@ $! Define The Application Files.
$! $!
$ LIB_FILES = "VERIFY;ASN1PARS;REQ;DGST;DH;DHPARAM;ENC;PASSWD;GENDH;ERRSTR;"+- $ LIB_FILES = "VERIFY;ASN1PARS;REQ;DGST;DH;DHPARAM;ENC;PASSWD;GENDH;ERRSTR;"+-
"CA;PKCS7;CRL2P7;CRL;"+- "CA;PKCS7;CRL2P7;CRL;"+-
"RSA;RSAUTL;DSA;DSAPARAM;EC;ECPARAM;"+- "RSA;RSAUTL;DSA;DSAPARAM;"+-
"X509;GENRSA;GENDSA;S_SERVER;S_CLIENT;SPEED;"+- "X509;GENRSA;GENDSA;S_SERVER;S_CLIENT;SPEED;"+-
"S_TIME;APPS;S_CB;S_SOCKET;APP_RAND;VERSION;SESS_ID;"+- "S_TIME;APPS;S_CB;S_SOCKET;APP_RAND;VERSION;SESS_ID;"+-
"CIPHERS;NSEQ;PKCS12;PKCS8;SPKAC;SMIME;RAND;ENGINE;OCSP;PRIME" "CIPHERS;NSEQ;PKCS12;PKCS8;SPKAC;SMIME;RAND"
$ APP_FILES := OPENSSL,'OBJ_DIR'VERIFY.OBJ,ASN1PARS.OBJ,REQ.OBJ,DGST.OBJ,DH.OBJ,DHPARAM.OBJ,ENC.OBJ,PASSWD.OBJ,GENDH.OBJ,ERRSTR.OBJ,-
CA.OBJ,PKCS7.OBJ,CRL2P7.OBJ,CRL.OBJ,-
RSA.OBJ,RSAUTL.OBJ,DSA.OBJ,DSAPARAM.OBJ,-
X509.OBJ,GENRSA.OBJ,GENDSA.OBJ,S_SERVER.OBJ,S_CLIENT.OBJ,SPEED.OBJ,-
S_TIME.OBJ,APPS.OBJ,S_CB.OBJ,S_SOCKET.OBJ,APP_RAND.OBJ,VERSION.OBJ,SESS_ID.OBJ,-
CIPHERS.OBJ,NSEQ.OBJ,PKCS12.OBJ,PKCS8.OBJ,SPKAC.OBJ,SMIME.OBJ,RAND.OBJ
$ TCPIP_PROGRAMS = ",," $ TCPIP_PROGRAMS = ",,"
$ IF COMPILER .EQS. "VAXC" THEN - $ IF COMPILER .EQS. "VAXC" THEN -
TCPIP_PROGRAMS = ",OPENSSL," TCPIP_PROGRAMS = ",OPENSSL,"
$!$ APP_FILES := VERIFY;ASN1PARS;REQ;DGST;DH;ENC;GENDH;ERRSTR;CA;-
$! PKCS7;CRL2P7;CRL;-
$! RSA;DSA;DSAPARAM;-
$! X509;GENRSA;GENDSA;-
$! S_SERVER,'OBJ_DIR'S_SOCKET.OBJ,'OBJ_DIR'S_CB.OBJ;-
$! S_CLIENT,'OBJ_DIR'S_SOCKET.OBJ,'OBJ_DIR'S_CB.OBJ;-
$! SPEED;-
$! S_TIME,'OBJ_DIR'S_CB.OBJ;VERSION;SESS_ID;CIPHERS;NSEQ
$!$ TCPIP_PROGRAMS = ",,"
$!$ IF COMPILER .EQS. "VAXC" THEN -
$! TCPIP_PROGRAMS = ",S_SERVER,S_CLIENT,SESS_ID,CIPHERS,S_TIME,"
$! $!
$! Setup exceptional compilations $! Setup exceptional compilations
$! $!
$ COMPILEWITH_CC2 = ",S_SERVER,S_CLIENT," $ COMPILEWITH_CC2 = ",S_SOCKET,S_SERVER,S_CLIENT,"
$! $!
$ PHASE := LIB $ PHASE := LIB
$! $!
@@ -260,31 +292,73 @@ $ WRITE SYS$OUTPUT FILE_NAME," needs a TCP/IP library. Can't link. Skipping.
$ GOTO NEXT_FILE $ GOTO NEXT_FILE
$ ENDIF $ ENDIF
$! $!
$! Link The Program. $! Link The Program, Check To See If We Need To Link With RSAREF Or Not.
$! Check To See If We Are To Link With A Specific TCP/IP Library.
$! $!
$ IF (TCPIP_LIB.NES."") $ IF (RSAREF.EQS."TRUE")
$ THEN $ THEN
$! $!
$! Don't Link With The RSAREF Routines And TCP/IP Library. $! Check To See If We Are To Link With A Specific TCP/IP Library.
$! $!
$ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' - $ IF (TCPIP_LIB.NES."")
'OBJECT_FILE''EXTRA_OBJ', - $ THEN
'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, - $!
'TCPIP_LIB','OPT_FILE'/OPTION $! Link With The RSAREF Library And A Specific TCP/IP Library.
$!
$ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
'OBJECT_FILE''EXTRA_OBJ', -
'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY,'RSAREF_LIB'/LIBRARY, -
'TCPIP_LIB','OPT_FILE'/OPTION
$!
$! Else...
$!
$ ELSE
$!
$! Link With The RSAREF Library And NO TCP/IP Library.
$!
$ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
'OBJECT_FILE''EXTRA_OBJ', -
'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY,'RSAREF_LIB'/LIBRARY, -
'OPT_FILE'/OPTION
$!
$! End The TCP/IP Library Check.
$!
$ ENDIF
$! $!
$! Else... $! Else...
$! $!
$ ELSE $ ELSE
$! $!
$! Don't Link With The RSAREF Routines And Link With A TCP/IP Library. $! Don't Link With The RSAREF Routines.
$! $!
$ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
'OBJECT_FILE''EXTRA_OBJ', -
'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
'OPT_FILE'/OPTION
$! $!
$! End The TCP/IP Library Check. $! Check To See If We Are To Link With A Specific TCP/IP Library.
$!
$ IF (TCPIP_LIB.NES."")
$ THEN
$!
$! Don't Link With The RSAREF Routines And TCP/IP Library.
$!
$ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
'OBJECT_FILE''EXTRA_OBJ', -
'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
'TCPIP_LIB','OPT_FILE'/OPTION
$!
$! Else...
$!
$ ELSE
$!
$! Don't Link With The RSAREF Routines And Link With A TCP/IP Library.
$!
$ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
'OBJECT_FILE''EXTRA_OBJ', -
'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
'OPT_FILE'/OPTION
$!
$! End The TCP/IP Library Check.
$!
$ ENDIF
$!
$! End The RSAREF Link Check.
$! $!
$ ENDIF $ ENDIF
$! $!
@@ -451,6 +525,32 @@ $! End The Crypto Library Check.
$! $!
$ ENDIF $ ENDIF
$! $!
$! See If We Need The RSAREF Library.
$!
$ IF (RSAREF.EQS."TRUE")
$ THEN
$!
$! Look For The Library LIBRSAGLUE.OLB.
$!
$ IF (F$SEARCH(RSAREF_LIB).EQS."")
$ THEN
$!
$! Tell The User We Can't Find The LIBRSAGLUE.OLB Library.
$!
$ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT "Can't Find The Library ",RSAREF_LIB,"."
$ WRITE SYS$OUTPUT "We Can't Link Without It."
$ WRITE SYS$OUTPUT ""
$!
$! Since We Can't Link Without It, Exit.
$!
$ EXIT
$ ENDIF
$!
$! End The RSAREF Library Check.
$!
$ ENDIF
$!
$! Look For The Library LIBSSL.OLB. $! Look For The Library LIBSSL.OLB.
$! $!
$ IF (F$SEARCH(SSL_LIB).EQS."") $ IF (F$SEARCH(SSL_LIB).EQS."")
@@ -481,10 +581,86 @@ $ CHECK_OPTIONS:
$! $!
$! Check To See If P1 Is Blank. $! Check To See If P1 Is Blank.
$! $!
$ IF (P1.EQS."NODEBUG") $ IF (P1.EQS."NORSAREF")
$ THEN $ THEN
$! $!
$! P1 Is NODEBUG, So Compile Without Debugger Information. $! P1 Is NORSAREF, So Compile With The Regular RSA Libraries.
$!
$ RSAREF = "FALSE"
$!
$! Else...
$!
$ ELSE
$!
$! Check To See If We Are To Use The RSAREF Library.
$!
$ IF (P1.EQS."RSAREF")
$ THEN
$!
$! Check To Make Sure We Have The RSAREF Source Code Directory.
$!
$ IF (F$SEARCH("SYS$DISK:[-.RSAREF]SOURCE.DIR").EQS."")
$ THEN
$!
$! We Don't Have The RSAREF Souce Code Directory, So Tell The
$! User This.
$!
$ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT "It appears that you don't have the RSAREF Souce Code."
$ WRITE SYS$OUTPUT "You need to go to 'ftp://ftp.rsa.com/rsaref'. You have to"
$ WRITE SYS$OUTPUT "get the '.tar-Z' file as the '.zip' file dosen't have the"
$ WRITE SYS$OUTPUT "directory structure stored. You have to extract the file"
$ WRITE SYS$OUTPUT "into the [.RSAREF] directory under the root directory"
$ WRITE SYS$OUTPUT "as that is where the scripts will look for the files."
$ WRITE SYS$OUTPUT ""
$!
$! Time To Exit.
$!
$ EXIT
$!
$! Else...
$!
$ ELSE
$!
$! Compile Using The RSAREF Library.
$!
$ RSAREF = "TRUE"
$!
$! End The RSAREF Soure Directory Check.
$!
$ ENDIF
$!
$! Else...
$!
$ ELSE
$!
$! They Entered An Invalid Option..
$!
$ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:"
$ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT " RSAREF : Compile With The RSAREF Library."
$ WRITE SYS$OUTPUT " NORSAREF : Compile With The Regular RSA Library."
$ WRITE SYS$OUTPUT ""
$!
$! Time To EXIT.
$!
$ EXIT
$!
$! End The Valid Arguement Check.
$!
$ ENDIF
$!
$! End P1 Check.
$!
$ ENDIF
$!
$! Check To See If P2 Is Blank.
$!
$ IF (P2.EQS."NODEBUG")
$ THEN
$!
$! P2 Is NODEBUG, So Compile Without Debugger Information.
$! $!
$ DEBUGGER = "NODEBUG" $ DEBUGGER = "NODEBUG"
$ TRACEBACK = "NOTRACEBACK" $ TRACEBACK = "NOTRACEBACK"
@@ -499,7 +675,7 @@ $ ELSE
$! $!
$! Check To See If We Are To Compile With Debugger Information. $! Check To See If We Are To Compile With Debugger Information.
$! $!
$ IF (P1.EQS."DEBUG") $ IF (P2.EQS."DEBUG")
$ THEN $ THEN
$! $!
$! Compile With Debugger Information. $! Compile With Debugger Information.
@@ -515,7 +691,7 @@ $!
$! Tell The User Entered An Invalid Option.. $! Tell The User Entered An Invalid Option..
$! $!
$ WRITE SYS$OUTPUT "" $ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:" $ WRITE SYS$OUTPUT "The Option ",P2," Is Invalid. The Valid Options Are:"
$ WRITE SYS$OUTPUT "" $ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information." $ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information."
$ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information." $ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information."
@@ -529,13 +705,13 @@ $! End The Valid Arguement Check.
$! $!
$ ENDIF $ ENDIF
$! $!
$! End The P1 Check. $! End The P2 Check.
$! $!
$ ENDIF $ ENDIF
$! $!
$! Check To See If P2 Is Blank. $! Check To See If P3 Is Blank.
$! $!
$ IF (P2.EQS."") $ IF (P3.EQS."")
$ THEN $ THEN
$! $!
$! O.K., The User Didn't Specify A Compiler, Let's Try To $! O.K., The User Didn't Specify A Compiler, Let's Try To
@@ -548,7 +724,7 @@ $ THEN
$! $!
$! Looks Like GNUC, Set To Use GNUC. $! Looks Like GNUC, Set To Use GNUC.
$! $!
$ P2 = "GNUC" $ P3 = "GNUC"
$! $!
$! Else... $! Else...
$! $!
@@ -561,7 +737,7 @@ $ THEN
$! $!
$! Looks Like DECC, Set To Use DECC. $! Looks Like DECC, Set To Use DECC.
$! $!
$ P2 = "DECC" $ P3 = "DECC"
$! $!
$! Else... $! Else...
$! $!
@@ -569,7 +745,7 @@ $ ELSE
$! $!
$! Looks Like VAXC, Set To Use VAXC. $! Looks Like VAXC, Set To Use VAXC.
$! $!
$ P2 = "VAXC" $ P3 = "VAXC"
$! $!
$! End The VAXC Compiler Check. $! End The VAXC Compiler Check.
$! $!
@@ -583,9 +759,9 @@ $! End The Compiler Check.
$! $!
$ ENDIF $ ENDIF
$! $!
$! Check To See If We Have A Option For P3. $! Check To See If We Have A Option For P4.
$! $!
$ IF (P3.EQS."") $ IF (P4.EQS."")
$ THEN $ THEN
$! $!
$! Find out what socket library we have available $! Find out what socket library we have available
@@ -595,7 +771,7 @@ $ THEN
$! $!
$! We have SOCKETSHR, and it is my opinion that it's the best to use. $! We have SOCKETSHR, and it is my opinion that it's the best to use.
$! $!
$ P3 = "SOCKETSHR" $ P4 = "SOCKETSHR"
$! $!
$! Tell the user $! Tell the user
$! $!
@@ -615,7 +791,7 @@ $ THEN
$! $!
$! Last resort: a UCX or UCX-compatible library $! Last resort: a UCX or UCX-compatible library
$! $!
$ P3 = "UCX" $ P4 = "UCX"
$! $!
$! Tell the user $! Tell the user
$! $!
@@ -629,22 +805,46 @@ $ ENDIF
$! $!
$! Set Up Initial CC Definitions, Possibly With User Ones $! Set Up Initial CC Definitions, Possibly With User Ones
$! $!
$ CCDEFS = "MONOLITH" $ CCDEFS = "VMS=1,MONOLITH"
$ IF F$TRNLNM("OPENSSL_NO_ASM") THEN CCDEFS = CCDEFS + ",NO_ASM"
$ IF F$TRNLNM("OPENSSL_NO_RSA") THEN CCDEFS = CCDEFS + ",NO_RSA"
$ IF F$TRNLNM("OPENSSL_NO_DSA") THEN CCDEFS = CCDEFS + ",NO_DSA"
$ IF F$TRNLNM("OPENSSL_NO_DH") THEN CCDEFS = CCDEFS + ",NO_DH"
$ IF F$TRNLNM("OPENSSL_NO_MD2") THEN CCDEFS = CCDEFS + ",NO_MD2"
$ IF F$TRNLNM("OPENSSL_NO_MD5") THEN CCDEFS = CCDEFS + ",NO_MD5"
$ IF F$TRNLNM("OPENSSL_NO_RIPEMD") THEN CCDEFS = CCDEFS + ",NO_RIPEMD"
$ IF F$TRNLNM("OPENSSL_NO_SHA") THEN CCDEFS = CCDEFS + ",NO_SHA"
$ IF F$TRNLNM("OPENSSL_NO_SHA0") THEN CCDEFS = CCDEFS + ",NO_SHA0"
$ IF F$TRNLNM("OPENSSL_NO_SHA1") THEN CCDEFS = CCDEFS + ",NO_SHA1"
$ IF F$TRNLNM("OPENSSL_NO_DES")
$ THEN
$ CCDEFS = CCDEFS + ",NO_DES,NO_MDC2"
$ ELSE
$ IF F$TRNLNM("OPENSSL_NO_MDC2") THEN CCDEFS = CCDEFS + ",NO_MDC2"
$ ENDIF
$ IF F$TRNLNM("OPENSSL_NO_RC2") THEN CCDEFS = CCDEFS + ",NO_RC2"
$ IF F$TRNLNM("OPENSSL_NO_RC4") THEN CCDEFS = CCDEFS + ",NO_RC4"
$ IF F$TRNLNM("OPENSSL_NO_RC5") THEN CCDEFS = CCDEFS + ",NO_RC5"
$ IF F$TRNLNM("OPENSSL_NO_IDEA") THEN CCDEFS = CCDEFS + ",NO_IDEA"
$ IF F$TRNLNM("OPENSSL_NO_BF") THEN CCDEFS = CCDEFS + ",NO_BF"
$ IF F$TRNLNM("OPENSSL_NO_CAST") THEN CCDEFS = CCDEFS + ",NO_CAST"
$ IF F$TRNLNM("OPENSSL_NO_HMAC") THEN CCDEFS = CCDEFS + ",NO_HMAC"
$ IF F$TRNLNM("OPENSSL_NO_SSL2") THEN CCDEFS = CCDEFS + ",NO_SSL2"
$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS $ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
$ CCEXTRAFLAGS = "" $ CCEXTRAFLAGS = ""
$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS $ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
$ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR" $ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX"
$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN - $ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
$! $!
$! Check To See If The User Entered A Valid Paramter. $! Check To See If The User Entered A Valid Paramter.
$! $!
$ IF (P2.EQS."VAXC").OR.(P2.EQS."DECC").OR.(P2.EQS."GNUC") $ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC")
$ THEN $ THEN
$! $!
$! Check To See If The User Wanted DECC. $! Check To See If The User Wanted DECC.
$! $!
$ IF (P2.EQS."DECC") $ IF (P3.EQS."DECC")
$ THEN $ THEN
$! $!
$! Looks Like DECC, Set To Use DECC. $! Looks Like DECC, Set To Use DECC.
@@ -661,8 +861,7 @@ $ CC = "CC"
$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" - $ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
THEN CC = "CC/DECC" THEN CC = "CC/DECC"
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + - $ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
"/NOLIST/PREFIX=ALL" + - "/NOLIST/PREFIX=ALL" + CCEXTRAFLAGS
"/INCLUDE=(SYS$DISK:[-],SYS$DISK:[-.CRYPTO])" + CCEXTRAFLAGS
$! $!
$! Define The Linker Options File Name. $! Define The Linker Options File Name.
$! $!
@@ -674,7 +873,7 @@ $ ENDIF
$! $!
$! Check To See If We Are To Use VAXC. $! Check To See If We Are To Use VAXC.
$! $!
$ IF (P2.EQS."VAXC") $ IF (P3.EQS."VAXC")
$ THEN $ THEN
$! $!
$! Looks Like VAXC, Set To Use VAXC. $! Looks Like VAXC, Set To Use VAXC.
@@ -693,8 +892,7 @@ $ WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
$ EXIT $ EXIT
$ ENDIF $ ENDIF
$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC" $ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + - $ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + CCEXTRAFLAGS
"/INCLUDE=(SYS$DISK:[-],SYS$DISK:[-.CRYPTO])" + CCEXTRAFLAGS
$ CCDEFS = CCDEFS + ",""VAXC""" $ CCDEFS = CCDEFS + ",""VAXC"""
$! $!
$! Define <sys> As SYS$COMMON:[SYSLIB] $! Define <sys> As SYS$COMMON:[SYSLIB]
@@ -711,7 +909,7 @@ $ ENDIF
$! $!
$! Check To See If We Are To Use GNU C. $! Check To See If We Are To Use GNU C.
$! $!
$ IF (P2.EQS."GNUC") $ IF (P3.EQS."GNUC")
$ THEN $ THEN
$! $!
$! Looks Like GNUC, Set To Use GNUC. $! Looks Like GNUC, Set To Use GNUC.
@@ -725,8 +923,7 @@ $!
$! Use GNU C... $! Use GNU C...
$! $!
$ IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC $ IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC
$ CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + - $ CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + CCEXTRAFLAGS
"/INCLUDE=(SYS$DISK:[-],SYS$DISK:[-.CRYPTO])" + CCEXTRAFLAGS
$! $!
$! Define The Linker Options File Name. $! Define The Linker Options File Name.
$! $!
@@ -740,6 +937,31 @@ $! Set up default defines
$! $!
$ CCDEFS = """FLAT_INC=1""," + CCDEFS $ CCDEFS = """FLAT_INC=1""," + CCDEFS
$! $!
$! Check To See If We Are To Compile With RSAREF Routines.
$!
$ IF (RSAREF.EQS."TRUE")
$ THEN
$!
$! Compile With RSAREF.
$!
$ CCDEFS = CCDEFS + ",""RSAref=1"""
$!
$! Tell The User This.
$!
$ WRITE SYS$OUTPUT "Compiling With RSAREF Routines."
$!
$! Else, We Don't Care. Compile Without The RSAREF Library.
$!
$ ELSE
$!
$! Tell The User We Are Compile Without The RSAREF Routines.
$!
$ WRITE SYS$OUTPUT "Compiling Without The RSAREF Routines.
$!
$! End The RSAREF Check.
$!
$ ENDIF
$!
$! Else The User Entered An Invalid Arguement. $! Else The User Entered An Invalid Arguement.
$! $!
$ ELSE $ ELSE
@@ -747,7 +969,7 @@ $!
$! Tell The User We Don't Know What They Want. $! Tell The User We Don't Know What They Want.
$! $!
$ WRITE SYS$OUTPUT "" $ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT "The Option ",P2," Is Invalid. The Valid Options Are:" $ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:"
$ WRITE SYS$OUTPUT "" $ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C." $ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C."
$ WRITE SYS$OUTPUT " DECC : To Compile With DEC C." $ WRITE SYS$OUTPUT " DECC : To Compile With DEC C."
@@ -761,18 +983,17 @@ $ ENDIF
$! $!
$! Time to check the contents, and to make sure we get the correct library. $! Time to check the contents, and to make sure we get the correct library.
$! $!
$ IF P3.EQS."SOCKETSHR" .OR. P3.EQS."MULTINET" .OR. P3.EQS."UCX" - $ IF P4.EQS."SOCKETSHR" .OR. P4.EQS."MULTINET" .OR. P4.EQS."UCX"
.OR. P3.EQS."TCPIP" .OR. P3.EQS."NONE"
$ THEN $ THEN
$! $!
$! Check to see if SOCKETSHR was chosen $! Check to see if SOCKETSHR was chosen
$! $!
$ IF P3.EQS."SOCKETSHR" $ IF P4.EQS."SOCKETSHR"
$ THEN $ THEN
$! $!
$! Set the library to use SOCKETSHR $! Set the library to use SOCKETSHR
$! $!
$ TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT" $ TCPIP_LIB = "[-.VMS]SOCKETSHR_SHR.OPT/OPT"
$! $!
$! Done with SOCKETSHR $! Done with SOCKETSHR
$! $!
@@ -780,12 +1001,12 @@ $ ENDIF
$! $!
$! Check to see if MULTINET was chosen $! Check to see if MULTINET was chosen
$! $!
$ IF P3.EQS."MULTINET" $ IF P4.EQS."MULTINET"
$ THEN $ THEN
$! $!
$! Set the library to use UCX emulation. $! Set the library to use UCX emulation.
$! $!
$ P3 = "UCX" $ P4 = "UCX"
$! $!
$! Done with MULTINET $! Done with MULTINET
$! $!
@@ -793,53 +1014,27 @@ $ ENDIF
$! $!
$! Check to see if UCX was chosen $! Check to see if UCX was chosen
$! $!
$ IF P3.EQS."UCX" $ IF P4.EQS."UCX"
$ THEN $ THEN
$! $!
$! Set the library to use UCX. $! Set the library to use UCX.
$! $!
$ TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT/OPT" $ TCPIP_LIB = "[-.VMS]UCX_SHR_DECC.OPT/OPT"
$ IF F$TRNLNM("UCX$IPC_SHR") .NES. "" $ IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
$ THEN $ THEN
$ TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT" $ TCPIP_LIB = "[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT"
$ ELSE $ ELSE
$ IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN - $ IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT/OPT" TCPIP_LIB = "[-.VMS]UCX_SHR_VAXC.OPT/OPT"
$ ENDIF $ ENDIF
$! $!
$! Done with UCX $! Done with UCX
$! $!
$ ENDIF $ ENDIF
$! $!
$! Check to see if TCPIP (post UCX) was chosen
$!
$ IF P3.EQS."TCPIP"
$ THEN
$!
$! Set the library to use TCPIP.
$!
$ TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT"
$!
$! Done with TCPIP
$!
$ ENDIF
$!
$! Check to see if NONE was chosen
$!
$ IF P3.EQS."NONE"
$ THEN
$!
$! Do not use TCPIP.
$!
$ TCPIP_LIB = ""
$!
$! Done with TCPIP
$!
$ ENDIF
$!
$! Add TCP/IP type to CC definitions. $! Add TCP/IP type to CC definitions.
$! $!
$ CCDEFS = CCDEFS + ",TCPIP_TYPE_''P3'" $ CCDEFS = CCDEFS + ",TCPIP_TYPE_''P4'"
$! $!
$! Print info $! Print info
$! $!
@@ -852,11 +1047,10 @@ $!
$! Tell The User We Don't Know What They Want. $! Tell The User We Don't Know What They Want.
$! $!
$ WRITE SYS$OUTPUT "" $ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:" $ WRITE SYS$OUTPUT "The Option ",P4," Is Invalid. The Valid Options Are:"
$ WRITE SYS$OUTPUT "" $ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT " SOCKETSHR : To link with SOCKETSHR TCP/IP library." $ WRITE SYS$OUTPUT " SOCKETSHR : To link with SOCKETSHR TCP/IP library."
$ WRITE SYS$OUTPUT " UCX : To link with UCX TCP/IP library." $ WRITE SYS$OUTPUT " UCX : To link with UCX TCP/IP library."
$ WRITE SYS$OUTPUT " TCPIP : To link with TCPIP (post UCX) TCP/IP library."
$ WRITE SYS$OUTPUT "" $ WRITE SYS$OUTPUT ""
$! $!
$! Time To EXIT. $! Time To EXIT.
@@ -891,9 +1085,9 @@ $! Written By: Richard Levitte
$! richard@levitte.org $! richard@levitte.org
$! $!
$! $!
$! Check To See If We Have A Option For P4. $! Check To See If We Have A Option For P5.
$! $!
$ IF (P4.EQS."") $ IF (P5.EQS."")
$ THEN $ THEN
$! $!
$! Get The Version Of VMS We Are Using. $! Get The Version Of VMS We Are Using.
@@ -915,15 +1109,15 @@ $! End The VMS Version Check.
$! $!
$ ENDIF $ ENDIF
$! $!
$! End The P4 Check. $! End The P5 Check.
$! $!
$ ENDIF $ ENDIF
$! $!
$! Check if the user wanted to compile just a subset of all the programs. $! Check if the user wanted to compile just a subset of all the programs.
$! $!
$ IF P5 .NES. "" $ IF P6 .NES. ""
$ THEN $ THEN
$ PROGRAMS = P5 $ PROGRAMS = P6
$ ENDIF $ ENDIF
$! $!
$! Time To RETURN... $! Time To RETURN...

View File

@@ -58,9 +58,9 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include "apps.h"
#include <openssl/pem.h> #include <openssl/pem.h>
#include <openssl/err.h> #include <openssl/err.h>
#include "apps.h"
#undef PROG #undef PROG
#define PROG nseq_main #define PROG nseq_main
@@ -121,7 +121,7 @@ int MAIN(int argc, char **argv)
} }
} else { } else {
out = BIO_new_fp(stdout, BIO_NOCLOSE); out = BIO_new_fp(stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);

File diff suppressed because it is too large Load Diff

View File

@@ -3,13 +3,9 @@
# This is mostly being used for generation of certificate requests. # This is mostly being used for generation of certificate requests.
# #
# This definition stops the following lines choking if HOME isn't
# defined.
HOME = .
RANDFILE = $ENV::HOME/.rnd RANDFILE = $ENV::HOME/.rnd
oid_file = $ENV::HOME/.oid
# Uncomment out to enable OpenSSL configuration see config(3) oid_section = new_oids
# openssl_conf = openssl_init
# To use this configuration file with the "-extfile" option of the # To use this configuration file with the "-extfile" option of the
# "openssl x509" utility, name here the section containing the # "openssl x509" utility, name here the section containing the
@@ -18,22 +14,13 @@ RANDFILE = $ENV::HOME/.rnd
# (Alternatively, use a configuration file that has only # (Alternatively, use a configuration file that has only
# X.509v3 extensions in its main [= default] section.) # X.509v3 extensions in its main [= default] section.)
[openssl_init]
# Extra OBJECT IDENTIFIER info:
oid_section = new_oids
alg_section = algs
[ new_oids ] [ new_oids ]
# We can add new OIDs in here for use by any config aware application # We can add new OIDs in here for use by 'ca' and 'req'.
# Add a simple OID like this: # Add a simple OID like this:
# shortname=Long Object Identifier Name, 1.2.3.4 # testoid1=1.2.3.4
# Or use config file substitution like this: # Or use config file substitution like this:
# testoid2=OID2 LONG NAME, ${testoid1}.5.6, OTHER OID # testoid2=${testoid1}.5.6
[ algs ]
# Algorithm configuration options. Currently just fips_mode
fips_mode = no
#################################################################### ####################################################################
[ ca ] [ ca ]
@@ -42,40 +29,27 @@ default_ca = CA_default # The default ca section
#################################################################### ####################################################################
[ CA_default ] [ CA_default ]
dir = sys\$disk:[.demoCA # Where everything is kept dir = sys\$disk:[.demoCA # Where everything is kept
certs = $dir.certs] # Where the issued certs are kept certs = $dir.certs] # Where the issued certs are kept
crl_dir = $dir.crl] # Where the issued crl are kept crl_dir = $dir.crl] # Where the issued crl are kept
database = $dir]index.txt # database index file. database = $dir]index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of new_certs_dir = $dir.newcerts] # default place for new certs.
# several ctificates with same subject.
new_certs_dir = $dir.newcerts] # default place for new certs.
certificate = $dir]cacert.pem # The CA certificate certificate = $dir]cacert.pem # The CA certificate
serial = $dir]serial. # The current serial number serial = $dir]serial. # The current serial number
crlnumber = $dir]crlnumber. # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir]crl.pem # The current CRL crl = $dir]crl.pem # The current CRL
private_key = $dir.private]cakey.pem# The private key private_key = $dir.private]cakey.pem# The private key
RANDFILE = $dir.private].rand # private random number file RANDFILE = $dir.private].rand # private random number file
x509_extensions = usr_cert # The extentions to add to the cert x509_extensions = usr_cert # The extentions to add to the cert
# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options
# Extension copying option: use with caution.
# copy_extensions = copy
# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL. # so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions = crl_ext # crl_extensions = crl_ext
default_days = 365 # how long to certify for default_days = 365 # how long to certify for
default_crl_days= 30 # how long before next CRL default_crl_days= 30 # how long before next CRL
default_md = sha1 # which md to use. default_md = md5 # which md to use.
preserve = no # keep passed DN ordering preserve = no # keep passed DN ordering
# A few difference way of specifying how similar the request should look # A few difference way of specifying how similar the request should look
@@ -112,19 +86,16 @@ distinguished_name = req_distinguished_name
attributes = req_attributes attributes = req_attributes
x509_extensions = v3_ca # The extentions to add to the self signed cert x509_extensions = v3_ca # The extentions to add to the self signed cert
# Passwords for private keys if not present they will be prompted for # This sets the permitted types in a DirectoryString. There are several
# input_password = secret # options.
# output_password = secret
# This sets a mask for permitted string types. There are several options.
# default: PrintableString, T61String, BMPString. # default: PrintableString, T61String, BMPString.
# pkix : PrintableString, BMPString. # pkix : PrintableString, BMPString.
# utf8only: only UTF8Strings. # utf8only: only UTF8Strings.
# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). # nobmp : PrintableString, T61String (no BMPStrings).
# MASK:XXXX a literal mask value. # MASK:XXXX a literal mask value.
# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings # WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings
# so use this option with caution! # so use this option with caution!
string_mask = nombstr dirstring_type = nobmp
# req_extensions = v3_req # The extensions to add to a certificate request # req_extensions = v3_req # The extensions to add to a certificate request
@@ -153,7 +124,7 @@ commonName = Common Name (eg, YOUR name)
commonName_max = 64 commonName_max = 64
emailAddress = Email Address emailAddress = Email Address
emailAddress_max = 64 emailAddress_max = 40
# SET-ex3 = SET extension number 3 # SET-ex3 = SET extension number 3
@@ -196,14 +167,11 @@ nsComment = "OpenSSL Generated Certificate"
# PKIX recommendations harmless if included in all certificates. # PKIX recommendations harmless if included in all certificates.
subjectKeyIdentifier=hash subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer authorityKeyIdentifier=keyid,issuer:always
# This stuff is for subjectAltName and issuerAltname. # This stuff is for subjectAltName and issuerAltname.
# Import the email address. # Import the email address.
# subjectAltName=email:copy # subjectAltName=email:copy
# An alternative to produce certificates that aren't
# deprecated according to PKIX.
# subjectAltName=email:move
# Copy subject details # Copy subject details
# issuerAltName=issuer:copy # issuerAltName=issuer:copy
@@ -266,56 +234,3 @@ basicConstraints = CA:true
# issuerAltName=issuer:copy # issuerAltName=issuer:copy
authorityKeyIdentifier=keyid:always,issuer:always authorityKeyIdentifier=keyid:always,issuer:always
[ proxy_cert_ext ]
# These extensions should be added when creating a proxy certificate
# This goes against PKIX guidelines but some CAs do it and some software
# requires this to avoid interpreting an end user certificate as a CA.
basicConstraints=CA:FALSE
# Here are some examples of the usage of nsCertType. If it is omitted
# the certificate can be used for anything *except* object signing.
# This is OK for an SSL server.
# nsCertType = server
# For an object signing certificate this would be used.
# nsCertType = objsign
# For normal client use this is typical
# nsCertType = client, email
# and for everything including object signing:
# nsCertType = client, email, objsign
# This is typical in keyUsage for a client certificate.
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
# This will be displayed in Netscape's comment listbox.
nsComment = "OpenSSL Generated Certificate"
# PKIX recommendations harmless if included in all certificates.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
# This stuff is for subjectAltName and issuerAltname.
# Import the email address.
# subjectAltName=email:copy
# An alternative to produce certificates that aren't
# deprecated according to PKIX.
# subjectAltName=email:move
# Copy subject details
# issuerAltName=issuer:copy
#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem
#nsBaseUrl
#nsRevocationUrl
#nsRenewalUrl
#nsCaPolicyUrl
#nsSslServerName
# This really needs to be in place for it to be a proxy certificate.
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo

View File

@@ -55,66 +55,11 @@
* copied and put under another distribution licence * copied and put under another distribution licence
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
/* ====================================================================
* Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@openssl.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#define OPENSSL_C /* tells apps.h to use complete apps_startup() */ #define OPENSSL_C /* tells apps.h to use complete apps_startup() */
#include "apps.h"
#include <openssl/bio.h> #include <openssl/bio.h>
#include <openssl/crypto.h> #include <openssl/crypto.h>
#include <openssl/lhash.h> #include <openssl/lhash.h>
@@ -122,108 +67,31 @@
#include <openssl/x509.h> #include <openssl/x509.h>
#include <openssl/pem.h> #include <openssl/pem.h>
#include <openssl/ssl.h> #include <openssl/ssl.h>
#ifndef OPENSSL_NO_ENGINE
#include <openssl/engine.h>
#endif
#define USE_SOCKETS /* needed for the _O_BINARY defs in the MS world */ #define USE_SOCKETS /* needed for the _O_BINARY defs in the MS world */
#include "apps.h"
#include "progs.h" #include "progs.h"
#include "s_apps.h" #include "s_apps.h"
#include <openssl/err.h> #include <openssl/err.h>
/* The LHASH callbacks ("hash" & "cmp") have been replaced by functions with the static unsigned long MS_CALLBACK hash(FUNCTION *a);
* base prototypes (we cast each variable inside the function to the required static int MS_CALLBACK cmp(FUNCTION *a,FUNCTION *b);
* type of "FUNCTION*"). This removes the necessity for macro-generated wrapper
* functions. */
/* static unsigned long MS_CALLBACK hash(FUNCTION *a); */
static unsigned long MS_CALLBACK hash(const void *a_void);
/* static int MS_CALLBACK cmp(FUNCTION *a,FUNCTION *b); */
static int MS_CALLBACK cmp(const void *a_void,const void *b_void);
static LHASH *prog_init(void ); static LHASH *prog_init(void );
static int do_cmd(LHASH *prog,int argc,char *argv[]); static int do_cmd(LHASH *prog,int argc,char *argv[]);
char *default_config_file=NULL; char *default_config_file=NULL;
/* Make sure there is only one when MONOLITH is defined */ /* Make sure there is only one when MONOLITH is defined */
#ifdef MONOLITH #ifdef MONOLITH
CONF *config=NULL; LHASH *config=NULL;
BIO *bio_err=NULL; BIO *bio_err=NULL;
int in_FIPS_mode=0;
#endif #endif
static void lock_dbg_cb(int mode, int type, const char *file, int line)
{
static int modes[CRYPTO_NUM_LOCKS]; /* = {0, 0, ... } */
const char *errstr = NULL;
int rw;
rw = mode & (CRYPTO_READ|CRYPTO_WRITE);
if (!((rw == CRYPTO_READ) || (rw == CRYPTO_WRITE)))
{
errstr = "invalid mode";
goto err;
}
if (type < 0 || type >= CRYPTO_NUM_LOCKS)
{
errstr = "type out of bounds";
goto err;
}
if (mode & CRYPTO_LOCK)
{
if (modes[type])
{
errstr = "already locked";
/* must not happen in a single-threaded program
* (would deadlock) */
goto err;
}
modes[type] = rw;
}
else if (mode & CRYPTO_UNLOCK)
{
if (!modes[type])
{
errstr = "not locked";
goto err;
}
if (modes[type] != rw)
{
errstr = (rw == CRYPTO_READ) ?
"CRYPTO_r_unlock on write lock" :
"CRYPTO_w_unlock on read lock";
}
modes[type] = 0;
}
else
{
errstr = "invalid mode";
goto err;
}
err:
if (errstr)
{
/* we cannot use bio_err here */
fprintf(stderr, "openssl (lock_dbg_cb): %s (mode=%d, type=%d) at %s:%d\n",
errstr, mode, type, file, line);
}
}
int main(int Argc, char *Argv[]) int main(int Argc, char *Argv[])
{ {
ARGS arg; ARGS arg;
#define PROG_NAME_SIZE 39 #define PROG_NAME_SIZE 39
char pname[PROG_NAME_SIZE+1]; char pname[PROG_NAME_SIZE+1];
FUNCTION f,*fp; FUNCTION f,*fp;
MS_STATIC const char *prompt; MS_STATIC char *prompt,buf[1024],config_name[256];
MS_STATIC char buf[1024];
char *to_free=NULL;
int n,i,ret=0; int n,i,ret=0;
int argc; int argc;
char **argv,*p; char **argv,*p;
@@ -233,69 +101,41 @@ int main(int Argc, char *Argv[])
arg.data=NULL; arg.data=NULL;
arg.count=0; arg.count=0;
in_FIPS_mode = 0; if (getenv("OPENSSL_DEBUG_MEMORY") != NULL)
CRYPTO_malloc_debug_init();
CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
#ifdef OPENSSL_FIPS apps_startup();
if(getenv("OPENSSL_FIPS")) {
if (!FIPS_mode_set(1)) {
ERR_load_crypto_strings();
ERR_print_errors(BIO_new_fp(stderr,BIO_NOCLOSE));
EXIT(1);
}
in_FIPS_mode = 1;
}
#endif
if (bio_err == NULL) if (bio_err == NULL)
if ((bio_err=BIO_new(BIO_s_file())) != NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (getenv("OPENSSL_DEBUG_MEMORY") != NULL) /* if not defined, use compiled-in library defaults */ ERR_load_crypto_strings();
{
if (!(0 == strcmp(getenv("OPENSSL_DEBUG_MEMORY"), "off")))
{
CRYPTO_malloc_debug_init();
CRYPTO_set_mem_debug_options(V_CRYPTO_MDEBUG_ALL);
}
else
{
/* OPENSSL_DEBUG_MEMORY=off */
CRYPTO_set_mem_debug_functions(0, 0, 0, 0, 0);
}
}
CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
#if 0
if (getenv("OPENSSL_DEBUG_LOCKING") != NULL)
#endif
{
CRYPTO_set_locking_callback(lock_dbg_cb);
}
apps_startup();
/* Lets load up our environment a little */ /* Lets load up our environment a little */
p=getenv("OPENSSL_CONF"); p=getenv("OPENSSL_CONF");
if (p == NULL) if (p == NULL)
p=getenv("SSLEAY_CONF"); p=getenv("SSLEAY_CONF");
if (p == NULL) if (p == NULL)
p=to_free=make_config_name(); {
strcpy(config_name,X509_get_default_cert_area());
#ifndef VMS
strcat(config_name,"/");
#endif
strcat(config_name,OPENSSL_CONF);
p=config_name;
}
default_config_file=p; default_config_file=p;
config=NCONF_new(NULL); config=CONF_load(config,p,&errline);
i=NCONF_load(config,p,&errline); if (config == NULL) ERR_clear_error();
if (i == 0)
{
NCONF_free(config);
config = NULL;
ERR_clear_error();
}
prog=prog_init(); prog=prog_init();
/* first check the program name */ /* first check the program name */
program_name(Argv[0],pname,sizeof pname); program_name(Argv[0],pname,PROG_NAME_SIZE);
f.name=pname; f.name=pname;
fp=(FUNCTION *)lh_retrieve(prog,&f); fp=(FUNCTION *)lh_retrieve(prog,&f);
@@ -323,7 +163,7 @@ int main(int Argc, char *Argv[])
{ {
ret=0; ret=0;
p=buf; p=buf;
n=sizeof buf; n=1024;
i=0; i=0;
for (;;) for (;;)
{ {
@@ -357,18 +197,18 @@ int main(int Argc, char *Argv[])
BIO_printf(bio_err,"bad exit\n"); BIO_printf(bio_err,"bad exit\n");
ret=1; ret=1;
end: end:
if (to_free)
OPENSSL_free(to_free);
if (config != NULL) if (config != NULL)
{ {
NCONF_free(config); CONF_free(config);
config=NULL; config=NULL;
} }
if (prog != NULL) lh_free(prog); if (prog != NULL) lh_free(prog);
if (arg.data != NULL) OPENSSL_free(arg.data); if (arg.data != NULL) OPENSSL_free(arg.data);
ERR_remove_state(0);
apps_shutdown(); EVP_cleanup();
ERR_free_strings();
CRYPTO_mem_leaks(bio_err); CRYPTO_mem_leaks(bio_err);
if (bio_err != NULL) if (bio_err != NULL)
{ {
@@ -398,7 +238,7 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
else if ((strncmp(argv[0],"no-",3)) == 0) else if ((strncmp(argv[0],"no-",3)) == 0)
{ {
BIO *bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE); BIO *bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
bio_stdout = BIO_push(tmpbio, bio_stdout); bio_stdout = BIO_push(tmpbio, bio_stdout);
@@ -435,7 +275,7 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */ else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */
list_type = FUNC_TYPE_CIPHER; list_type = FUNC_TYPE_CIPHER;
bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE); bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
bio_stdout = BIO_push(tmpbio, bio_stdout); bio_stdout = BIO_push(tmpbio, bio_stdout);
@@ -459,11 +299,7 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
for (fp=functions; fp->name != NULL; fp++) for (fp=functions; fp->name != NULL; fp++)
{ {
nl=0; nl=0;
#ifdef OPENSSL_NO_CAMELLIA
if (((i++) % 5) == 0) if (((i++) % 5) == 0)
#else
if (((i++) % 4) == 0)
#endif
{ {
BIO_printf(bio_err,"\n"); BIO_printf(bio_err,"\n");
nl=1; nl=1;
@@ -484,11 +320,7 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
BIO_printf(bio_err,"\nCipher commands (see the `enc' command for more details)\n"); BIO_printf(bio_err,"\nCipher commands (see the `enc' command for more details)\n");
} }
} }
#ifdef OPENSSL_NO_CAMELLIA
BIO_printf(bio_err,"%-15s",fp->name); BIO_printf(bio_err,"%-15s",fp->name);
#else
BIO_printf(bio_err,"%-18s",fp->name);
#endif
} }
BIO_printf(bio_err,"\n\n"); BIO_printf(bio_err,"\n\n");
ret=0; ret=0;
@@ -511,30 +343,26 @@ static LHASH *prog_init(void)
{ {
LHASH *ret; LHASH *ret;
FUNCTION *f; FUNCTION *f;
size_t i; int i;
/* Purely so it looks nice when the user hits ? */ /* Purely so it looks nice when the user hits ? */
for(i=0,f=functions ; f->name != NULL ; ++f,++i) for(i=0,f=functions ; f->name != NULL ; ++f,++i)
; ;
qsort(functions,i,sizeof *functions,SortFnByName); qsort(functions,i,sizeof *functions,SortFnByName);
if ((ret=lh_new(hash, cmp)) == NULL) if ((ret=lh_new(hash,cmp)) == NULL) return(NULL);
return(NULL);
for (f=functions; f->name != NULL; f++) for (f=functions; f->name != NULL; f++)
lh_insert(ret,f); lh_insert(ret,f);
return(ret); return(ret);
} }
/* static int MS_CALLBACK cmp(FUNCTION *a, FUNCTION *b) */ static int MS_CALLBACK cmp(FUNCTION *a, FUNCTION *b)
static int MS_CALLBACK cmp(const void *a_void, const void *b_void)
{ {
return(strncmp(((const FUNCTION *)a_void)->name, return(strncmp(a->name,b->name,8));
((const FUNCTION *)b_void)->name,8));
} }
/* static unsigned long MS_CALLBACK hash(FUNCTION *a) */ static unsigned long MS_CALLBACK hash(FUNCTION *a)
static unsigned long MS_CALLBACK hash(const void *a_void)
{ {
return(lh_strhash(((const FUNCTION *)a_void)->name)); return(lh_strhash(a->name));
} }

View File

@@ -8,8 +8,9 @@
HOME = . HOME = .
RANDFILE = $ENV::HOME/.rnd RANDFILE = $ENV::HOME/.rnd
# Uncomment out to enable OpenSSL configuration see config(3) # Extra OBJECT IDENTIFIER info:
# openssl_conf = openssl_init #oid_file = $ENV::HOME/.oid
oid_section = new_oids
# To use this configuration file with the "-extfile" option of the # To use this configuration file with the "-extfile" option of the
# "openssl x509" utility, name here the section containing the # "openssl x509" utility, name here the section containing the
@@ -18,22 +19,13 @@ RANDFILE = $ENV::HOME/.rnd
# (Alternatively, use a configuration file that has only # (Alternatively, use a configuration file that has only
# X.509v3 extensions in its main [= default] section.) # X.509v3 extensions in its main [= default] section.)
[openssl_init]
# Extra OBJECT IDENTIFIER info:
oid_section = new_oids
alg_section = algs
[ new_oids ] [ new_oids ]
# We can add new OIDs in here for use by any config aware application # We can add new OIDs in here for use by 'ca' and 'req'.
# Add a simple OID like this: # Add a simple OID like this:
# shortname=Long Object Identifier Name, 1.2.3.4 # testoid1=1.2.3.4
# Or use config file substitution like this: # Or use config file substitution like this:
# testoid2=OID2 LONG NAME, ${testoid1}.5.6, OTHER OID # testoid2=${testoid1}.5.6
[ algs ]
# Algorithm configuration options. Currently just fips_mode
fips_mode = no
#################################################################### ####################################################################
[ ca ] [ ca ]
@@ -46,36 +38,23 @@ dir = ./demoCA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file. database = $dir/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts # default place for new certs. new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/cacert.pem # The CA certificate certificate = $dir/cacert.pem # The CA certificate
serial = $dir/serial # The current serial number serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem# The private key private_key = $dir/private/cakey.pem# The private key
RANDFILE = $dir/private/.rand # private random number file RANDFILE = $dir/private/.rand # private random number file
x509_extensions = usr_cert # The extentions to add to the cert x509_extensions = usr_cert # The extentions to add to the cert
# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options
# Extension copying option: use with caution.
# copy_extensions = copy
# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL. # so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions = crl_ext # crl_extensions = crl_ext
default_days = 365 # how long to certify for default_days = 365 # how long to certify for
default_crl_days= 30 # how long before next CRL default_crl_days= 30 # how long before next CRL
default_md = sha1 # which md to use. default_md = md5 # which md to use.
preserve = no # keep passed DN ordering preserve = no # keep passed DN ordering
# A few difference way of specifying how similar the request should look # A few difference way of specifying how similar the request should look
@@ -153,7 +132,7 @@ commonName = Common Name (eg, YOUR name)
commonName_max = 64 commonName_max = 64
emailAddress = Email Address emailAddress = Email Address
emailAddress_max = 64 emailAddress_max = 40
# SET-ex3 = SET extension number 3 # SET-ex3 = SET extension number 3
@@ -196,14 +175,11 @@ nsComment = "OpenSSL Generated Certificate"
# PKIX recommendations harmless if included in all certificates. # PKIX recommendations harmless if included in all certificates.
subjectKeyIdentifier=hash subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer authorityKeyIdentifier=keyid,issuer:always
# This stuff is for subjectAltName and issuerAltname. # This stuff is for subjectAltName and issuerAltname.
# Import the email address. # Import the email address.
# subjectAltName=email:copy # subjectAltName=email:copy
# An alternative to produce certificates that aren't
# deprecated according to PKIX.
# subjectAltName=email:move
# Copy subject details # Copy subject details
# issuerAltName=issuer:copy # issuerAltName=issuer:copy
@@ -266,56 +242,3 @@ basicConstraints = CA:true
# issuerAltName=issuer:copy # issuerAltName=issuer:copy
authorityKeyIdentifier=keyid:always,issuer:always authorityKeyIdentifier=keyid:always,issuer:always
[ proxy_cert_ext ]
# These extensions should be added when creating a proxy certificate
# This goes against PKIX guidelines but some CAs do it and some software
# requires this to avoid interpreting an end user certificate as a CA.
basicConstraints=CA:FALSE
# Here are some examples of the usage of nsCertType. If it is omitted
# the certificate can be used for anything *except* object signing.
# This is OK for an SSL server.
# nsCertType = server
# For an object signing certificate this would be used.
# nsCertType = objsign
# For normal client use this is typical
# nsCertType = client, email
# and for everything including object signing:
# nsCertType = client, email, objsign
# This is typical in keyUsage for a client certificate.
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
# This will be displayed in Netscape's comment listbox.
nsComment = "OpenSSL Generated Certificate"
# PKIX recommendations harmless if included in all certificates.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
# This stuff is for subjectAltName and issuerAltname.
# Import the email address.
# subjectAltName=email:copy
# An alternative to produce certificates that aren't
# deprecated according to PKIX.
# subjectAltName=email:move
# Copy subject details
# issuerAltName=issuer:copy
#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem
#nsBaseUrl
#nsRevocationUrl
#nsRenewalUrl
#nsCaPolicyUrl
#nsSslServerName
# This really needs to be in place for it to be a proxy certificate.
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo

View File

@@ -1,10 +1,10 @@
/* apps/passwd.c */ /* apps/passwd.c */
#if defined OPENSSL_NO_MD5 || defined CHARSET_EBCDIC #if defined NO_MD5 || defined CHARSET_EBCDIC
# define NO_MD5CRYPT_1 # define NO_MD5CRYPT_1
#endif #endif
#if !defined(OPENSSL_NO_DES) || !defined(NO_MD5CRYPT_1) #if !defined(NO_DES) || !defined(NO_MD5CRYPT_1)
#include <assert.h> #include <assert.h>
#include <string.h> #include <string.h>
@@ -15,7 +15,8 @@
#include <openssl/err.h> #include <openssl/err.h>
#include <openssl/evp.h> #include <openssl/evp.h>
#include <openssl/rand.h> #include <openssl/rand.h>
#ifndef OPENSSL_NO_DES
#ifndef NO_DES
# include <openssl/des.h> # include <openssl/des.h>
#endif #endif
#ifndef NO_MD5CRYPT_1 #ifndef NO_MD5CRYPT_1
@@ -49,7 +50,6 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
* -salt string - salt * -salt string - salt
* -in file - read passwords from file * -in file - read passwords from file
* -stdin - read passwords from stdin * -stdin - read passwords from stdin
* -noverify - never verify when reading password from terminal
* -quiet - no warnings * -quiet - no warnings
* -table - format output as table * -table - format output as table
* -reverse - switch table columns * -reverse - switch table columns
@@ -62,7 +62,6 @@ int MAIN(int argc, char **argv)
int ret = 1; int ret = 1;
char *infile = NULL; char *infile = NULL;
int in_stdin = 0; int in_stdin = 0;
int in_noverify = 0;
char *salt = NULL, *passwd = NULL, **passwds = NULL; char *salt = NULL, *passwd = NULL, **passwds = NULL;
char *salt_malloc = NULL, *passwd_malloc = NULL; char *salt_malloc = NULL, *passwd_malloc = NULL;
size_t passwd_malloc_size = 0; size_t passwd_malloc_size = 0;
@@ -78,14 +77,11 @@ int MAIN(int argc, char **argv)
if (bio_err == NULL) if (bio_err == NULL)
if ((bio_err=BIO_new(BIO_s_file())) != NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto err;
out = BIO_new(BIO_s_file()); out = BIO_new(BIO_s_file());
if (out == NULL) if (out == NULL)
goto err; goto err;
BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -132,8 +128,6 @@ int MAIN(int argc, char **argv)
else else
badopt = 1; badopt = 1;
} }
else if (strcmp(argv[i], "-noverify") == 0)
in_noverify = 1;
else if (strcmp(argv[i], "-quiet") == 0) else if (strcmp(argv[i], "-quiet") == 0)
quiet = 1; quiet = 1;
else if (strcmp(argv[i], "-table") == 0) else if (strcmp(argv[i], "-table") == 0)
@@ -159,7 +153,7 @@ int MAIN(int argc, char **argv)
badopt = 1; badopt = 1;
/* reject unsupported algorithms */ /* reject unsupported algorithms */
#ifdef OPENSSL_NO_DES #ifdef NO_DES
if (usecrypt) badopt = 1; if (usecrypt) badopt = 1;
#endif #endif
#ifdef NO_MD5CRYPT_1 #ifdef NO_MD5CRYPT_1
@@ -170,7 +164,7 @@ int MAIN(int argc, char **argv)
{ {
BIO_printf(bio_err, "Usage: passwd [options] [passwords]\n"); BIO_printf(bio_err, "Usage: passwd [options] [passwords]\n");
BIO_printf(bio_err, "where options are\n"); BIO_printf(bio_err, "where options are\n");
#ifndef OPENSSL_NO_DES #ifndef NO_DES
BIO_printf(bio_err, "-crypt standard Unix password algorithm (default)\n"); BIO_printf(bio_err, "-crypt standard Unix password algorithm (default)\n");
#endif #endif
#ifndef NO_MD5CRYPT_1 #ifndef NO_MD5CRYPT_1
@@ -180,7 +174,6 @@ int MAIN(int argc, char **argv)
BIO_printf(bio_err, "-salt string use provided salt\n"); BIO_printf(bio_err, "-salt string use provided salt\n");
BIO_printf(bio_err, "-in file read passwords from file\n"); BIO_printf(bio_err, "-in file read passwords from file\n");
BIO_printf(bio_err, "-stdin read passwords from stdin\n"); BIO_printf(bio_err, "-stdin read passwords from stdin\n");
BIO_printf(bio_err, "-noverify never verify when reading password from terminal\n");
BIO_printf(bio_err, "-quiet no warnings\n"); BIO_printf(bio_err, "-quiet no warnings\n");
BIO_printf(bio_err, "-table format output as table\n"); BIO_printf(bio_err, "-table format output as table\n");
BIO_printf(bio_err, "-reverse switch table columns\n"); BIO_printf(bio_err, "-reverse switch table columns\n");
@@ -229,7 +222,7 @@ int MAIN(int argc, char **argv)
passwds = passwds_static; passwds = passwds_static;
if (in == NULL) if (in == NULL)
if (EVP_read_pw_string(passwd_malloc, passwd_malloc_size, "Password: ", !(passed_salt || in_noverify)) != 0) if (EVP_read_pw_string(passwd_malloc, passwd_malloc_size, "Password: ", 0) != 0)
goto err; goto err;
passwds[0] = passwd_malloc; passwds[0] = passwd_malloc;
} }
@@ -291,7 +284,6 @@ err:
BIO_free(in); BIO_free(in);
if (out) if (out)
BIO_free_all(out); BIO_free_all(out);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }
@@ -312,9 +304,8 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt)
static char out_buf[6 + 9 + 24 + 2]; /* "$apr1$..salt..$.......md5hash..........\0" */ static char out_buf[6 + 9 + 24 + 2]; /* "$apr1$..salt..$.......md5hash..........\0" */
unsigned char buf[MD5_DIGEST_LENGTH]; unsigned char buf[MD5_DIGEST_LENGTH];
char *salt_out; char *salt_out;
int n; int n, i;
unsigned int i; MD5_CTX md;
EVP_MD_CTX md,md2;
size_t passwd_len, salt_len; size_t passwd_len, salt_len;
passwd_len = strlen(passwd); passwd_len = strlen(passwd);
@@ -329,47 +320,49 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt)
salt_len = strlen(salt_out); salt_len = strlen(salt_out);
assert(salt_len <= 8); assert(salt_len <= 8);
EVP_MD_CTX_init(&md); MD5_Init(&md);
EVP_DigestInit_ex(&md,EVP_md5(), NULL); MD5_Update(&md, passwd, passwd_len);
EVP_DigestUpdate(&md, passwd, passwd_len); MD5_Update(&md, "$", 1);
EVP_DigestUpdate(&md, "$", 1); MD5_Update(&md, magic, strlen(magic));
EVP_DigestUpdate(&md, magic, strlen(magic)); MD5_Update(&md, "$", 1);
EVP_DigestUpdate(&md, "$", 1); MD5_Update(&md, salt_out, salt_len);
EVP_DigestUpdate(&md, salt_out, salt_len);
EVP_MD_CTX_init(&md2); {
EVP_DigestInit_ex(&md2,EVP_md5(), NULL); MD5_CTX md2;
EVP_DigestUpdate(&md2, passwd, passwd_len);
EVP_DigestUpdate(&md2, salt_out, salt_len);
EVP_DigestUpdate(&md2, passwd, passwd_len);
EVP_DigestFinal_ex(&md2, buf, NULL);
MD5_Init(&md2);
MD5_Update(&md2, passwd, passwd_len);
MD5_Update(&md2, salt_out, salt_len);
MD5_Update(&md2, passwd, passwd_len);
MD5_Final(buf, &md2);
}
for (i = passwd_len; i > sizeof buf; i -= sizeof buf) for (i = passwd_len; i > sizeof buf; i -= sizeof buf)
EVP_DigestUpdate(&md, buf, sizeof buf); MD5_Update(&md, buf, sizeof buf);
EVP_DigestUpdate(&md, buf, i); MD5_Update(&md, buf, i);
n = passwd_len; n = passwd_len;
while (n) while (n)
{ {
EVP_DigestUpdate(&md, (n & 1) ? "\0" : passwd, 1); MD5_Update(&md, (n & 1) ? "\0" : passwd, 1);
n >>= 1; n >>= 1;
} }
EVP_DigestFinal_ex(&md, buf, NULL); MD5_Final(buf, &md);
for (i = 0; i < 1000; i++) for (i = 0; i < 1000; i++)
{ {
EVP_DigestInit_ex(&md2,EVP_md5(), NULL); MD5_CTX md2;
EVP_DigestUpdate(&md2, (i & 1) ? (unsigned const char *) passwd : buf,
(i & 1) ? passwd_len : sizeof buf); MD5_Init(&md2);
MD5_Update(&md2, (i & 1) ? (unsigned char *) passwd : buf,
(i & 1) ? passwd_len : sizeof buf);
if (i % 3) if (i % 3)
EVP_DigestUpdate(&md2, salt_out, salt_len); MD5_Update(&md2, salt_out, salt_len);
if (i % 7) if (i % 7)
EVP_DigestUpdate(&md2, passwd, passwd_len); MD5_Update(&md2, passwd, passwd_len);
EVP_DigestUpdate(&md2, (i & 1) ? buf : (unsigned const char *) passwd, MD5_Update(&md2, (i & 1) ? buf : (unsigned char *) passwd,
(i & 1) ? sizeof buf : passwd_len); (i & 1) ? sizeof buf : passwd_len);
EVP_DigestFinal_ex(&md2, buf, NULL); MD5_Final(buf, &md2);
} }
EVP_MD_CTX_cleanup(&md2);
{ {
/* transform buf into output string */ /* transform buf into output string */
@@ -407,7 +400,6 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt)
*output = 0; *output = 0;
assert(strlen(out_buf) < sizeof(out_buf)); assert(strlen(out_buf) < sizeof(out_buf));
} }
EVP_MD_CTX_cleanup(&md);
return out_buf; return out_buf;
} }
@@ -426,7 +418,7 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
/* first make sure we have a salt */ /* first make sure we have a salt */
if (!passed_salt) if (!passed_salt)
{ {
#ifndef OPENSSL_NO_DES #ifndef NO_DES
if (usecrypt) if (usecrypt)
{ {
if (*salt_malloc_p == NULL) if (*salt_malloc_p == NULL)
@@ -445,7 +437,7 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
* back to ASCII */ * back to ASCII */
#endif #endif
} }
#endif /* !OPENSSL_NO_DES */ #endif /* !NO_DES */
#ifndef NO_MD5CRYPT_1 #ifndef NO_MD5CRYPT_1
if (use1 || useapr1) if (use1 || useapr1)
@@ -474,16 +466,15 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
if ((strlen(passwd) > pw_maxlen)) if ((strlen(passwd) > pw_maxlen))
{ {
if (!quiet) if (!quiet)
/* XXX: really we should know how to print a size_t, not cast it */ BIO_printf(bio_err, "Warning: truncating password to %u characters\n", pw_maxlen);
BIO_printf(bio_err, "Warning: truncating password to %u characters\n", (unsigned)pw_maxlen);
passwd[pw_maxlen] = 0; passwd[pw_maxlen] = 0;
} }
assert(strlen(passwd) <= pw_maxlen); assert(strlen(passwd) <= pw_maxlen);
/* now compute password hash */ /* now compute password hash */
#ifndef OPENSSL_NO_DES #ifndef NO_DES
if (usecrypt) if (usecrypt)
hash = DES_crypt(passwd, *salt_p); hash = des_crypt(passwd, *salt_p);
#endif #endif
#ifndef NO_MD5CRYPT_1 #ifndef NO_MD5CRYPT_1
if (use1 || useapr1) if (use1 || useapr1)

View File

@@ -1,9 +1,11 @@
/* pkcs12.c */ /* pkcs12.c */
#if !defined(NO_DES) && !defined(NO_SHA1)
/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
* project. * project 1999.
*/ */
/* ==================================================================== /* ====================================================================
* Copyright (c) 1999-2006 The OpenSSL Project. All rights reserved. * Copyright (c) 1999 The OpenSSL Project. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
@@ -56,9 +58,6 @@
* *
*/ */
#include <openssl/opensslconf.h>
#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1)
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@@ -70,7 +69,7 @@
#define PROG pkcs12_main #define PROG pkcs12_main
const EVP_CIPHER *enc; EVP_CIPHER *enc;
#define NOKEYS 0x1 #define NOKEYS 0x1
@@ -84,7 +83,7 @@ int dump_certs_keys_p12(BIO *out, PKCS12 *p12, char *pass, int passlen, int opti
int dump_certs_pkeys_bags(BIO *out, STACK_OF(PKCS12_SAFEBAG) *bags, char *pass, int dump_certs_pkeys_bags(BIO *out, STACK_OF(PKCS12_SAFEBAG) *bags, char *pass,
int passlen, int options, char *pempass); int passlen, int options, char *pempass);
int dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bags, char *pass, int passlen, int options, char *pempass); int dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bags, char *pass, int passlen, int options, char *pempass);
int print_attribs(BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst,const char *name); int print_attribs(BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst, char *name);
void hex_prin(BIO *out, unsigned char *buf, int len); void hex_prin(BIO *out, unsigned char *buf, int len);
int alg_print(BIO *x, X509_ALGOR *alg); int alg_print(BIO *x, X509_ALGOR *alg);
int cert_load(BIO *in, STACK_OF(X509) *sk); int cert_load(BIO *in, STACK_OF(X509) *sk);
@@ -93,13 +92,11 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
ENGINE *e = NULL;
char *infile=NULL, *outfile=NULL, *keyname = NULL; char *infile=NULL, *outfile=NULL, *keyname = NULL;
char *certfile=NULL; char *certfile=NULL;
BIO *in=NULL, *out = NULL; BIO *in=NULL, *out = NULL, *inkey = NULL, *certsin = NULL;
char **args; char **args;
char *name = NULL; char *name = NULL;
char *csp_name = NULL;
PKCS12 *p12 = NULL; PKCS12 *p12 = NULL;
char pass[50], macpass[50]; char pass[50], macpass[50];
int export_cert = 0; int export_cert = 0;
@@ -110,7 +107,7 @@ int MAIN(int argc, char **argv)
int maciter = PKCS12_DEFAULT_ITER; int maciter = PKCS12_DEFAULT_ITER;
int twopass = 0; int twopass = 0;
int keytype = 0; int keytype = 0;
int cert_pbe; int cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC;
int key_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; int key_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
int ret = 1; int ret = 1;
int macver = 1; int macver = 1;
@@ -121,25 +118,12 @@ int MAIN(int argc, char **argv)
char *passin = NULL, *passout = NULL; char *passin = NULL, *passout = NULL;
char *inrand = NULL; char *inrand = NULL;
char *CApath = NULL, *CAfile = NULL; char *CApath = NULL, *CAfile = NULL;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
apps_startup(); apps_startup();
#ifdef OPENSSL_FIPS
if (FIPS_mode())
cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
else
#endif
cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC;
enc = EVP_des_ede3_cbc(); enc = EVP_des_ede3_cbc();
if (bio_err == NULL ) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE); if (bio_err == NULL ) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
if (!load_config(bio_err, NULL))
goto end;
args = argv + 1; args = argv + 1;
@@ -160,38 +144,20 @@ int MAIN(int argc, char **argv)
cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
else if (!strcmp (*args, "-export")) export_cert = 1; else if (!strcmp (*args, "-export")) export_cert = 1;
else if (!strcmp (*args, "-des")) enc=EVP_des_cbc(); else if (!strcmp (*args, "-des")) enc=EVP_des_cbc();
else if (!strcmp (*args, "-des3")) enc = EVP_des_ede3_cbc(); #ifndef NO_IDEA
#ifndef OPENSSL_NO_IDEA
else if (!strcmp (*args, "-idea")) enc=EVP_idea_cbc(); else if (!strcmp (*args, "-idea")) enc=EVP_idea_cbc();
#endif #endif
#ifndef OPENSSL_NO_SEED else if (!strcmp (*args, "-des3")) enc = EVP_des_ede3_cbc();
else if (!strcmp(*args, "-seed")) enc=EVP_seed_cbc();
#endif
#ifndef OPENSSL_NO_AES
else if (!strcmp(*args,"-aes128")) enc=EVP_aes_128_cbc();
else if (!strcmp(*args,"-aes192")) enc=EVP_aes_192_cbc();
else if (!strcmp(*args,"-aes256")) enc=EVP_aes_256_cbc();
#endif
#ifndef OPENSSL_NO_CAMELLIA
else if (!strcmp(*args,"-camellia128")) enc=EVP_camellia_128_cbc();
else if (!strcmp(*args,"-camellia192")) enc=EVP_camellia_192_cbc();
else if (!strcmp(*args,"-camellia256")) enc=EVP_camellia_256_cbc();
#endif
else if (!strcmp (*args, "-noiter")) iter = 1; else if (!strcmp (*args, "-noiter")) iter = 1;
else if (!strcmp (*args, "-maciter")) else if (!strcmp (*args, "-maciter"))
maciter = PKCS12_DEFAULT_ITER; maciter = PKCS12_DEFAULT_ITER;
else if (!strcmp (*args, "-nomaciter")) else if (!strcmp (*args, "-nomaciter"))
maciter = 1; maciter = 1;
else if (!strcmp (*args, "-nomac"))
maciter = -1;
else if (!strcmp (*args, "-nodes")) enc=NULL; else if (!strcmp (*args, "-nodes")) enc=NULL;
else if (!strcmp (*args, "-certpbe")) { else if (!strcmp (*args, "-certpbe")) {
if (args[1]) { if (args[1]) {
args++; args++;
if (!strcmp(*args, "NONE")) cert_pbe=OBJ_txt2nid(*args);
cert_pbe = -1;
else
cert_pbe=OBJ_txt2nid(*args);
if(cert_pbe == NID_undef) { if(cert_pbe == NID_undef) {
BIO_printf(bio_err, BIO_printf(bio_err,
"Unknown PBE algorithm %s\n", *args); "Unknown PBE algorithm %s\n", *args);
@@ -201,10 +167,7 @@ int MAIN(int argc, char **argv)
} else if (!strcmp (*args, "-keypbe")) { } else if (!strcmp (*args, "-keypbe")) {
if (args[1]) { if (args[1]) {
args++; args++;
if (!strcmp(*args, "NONE")) key_pbe=OBJ_txt2nid(*args);
key_pbe = -1;
else
key_pbe=OBJ_txt2nid(*args);
if(key_pbe == NID_undef) { if(key_pbe == NID_undef) {
BIO_printf(bio_err, BIO_printf(bio_err,
"Unknown PBE algorithm %s\n", *args); "Unknown PBE algorithm %s\n", *args);
@@ -231,11 +194,6 @@ int MAIN(int argc, char **argv)
args++; args++;
name = *args; name = *args;
} else badarg = 1; } else badarg = 1;
} else if (!strcmp (*args, "-CSP")) {
if (args[1]) {
args++;
csp_name = *args;
} else badarg = 1;
} else if (!strcmp (*args, "-caname")) { } else if (!strcmp (*args, "-caname")) {
if (args[1]) { if (args[1]) {
args++; args++;
@@ -278,13 +236,6 @@ int MAIN(int argc, char **argv)
args++; args++;
CAfile = *args; CAfile = *args;
} else badarg = 1; } else badarg = 1;
#ifndef OPENSSL_NO_ENGINE
} else if (!strcmp(*args,"-engine")) {
if (args[1]) {
args++;
engine = *args;
} else badarg = 1;
#endif
} else badarg = 1; } else badarg = 1;
} else badarg = 1; } else badarg = 1;
@@ -313,19 +264,8 @@ int MAIN(int argc, char **argv)
BIO_printf (bio_err, "-info give info about PKCS#12 structure.\n"); BIO_printf (bio_err, "-info give info about PKCS#12 structure.\n");
BIO_printf (bio_err, "-des encrypt private keys with DES\n"); BIO_printf (bio_err, "-des encrypt private keys with DES\n");
BIO_printf (bio_err, "-des3 encrypt private keys with triple DES (default)\n"); BIO_printf (bio_err, "-des3 encrypt private keys with triple DES (default)\n");
#ifndef OPENSSL_NO_IDEA #ifndef NO_IDEA
BIO_printf (bio_err, "-idea encrypt private keys with idea\n"); BIO_printf (bio_err, "-idea encrypt private keys with idea\n");
#endif
#ifndef OPENSSL_NO_SEED
BIO_printf (bio_err, "-seed encrypt private keys with seed\n");
#endif
#ifndef OPENSSL_NO_AES
BIO_printf (bio_err, "-aes128, -aes192, -aes256\n");
BIO_printf (bio_err, " encrypt PEM output with cbc aes\n");
#endif
#ifndef OPENSSL_NO_CAMELLIA
BIO_printf (bio_err, "-camellia128, -camellia192, -camellia256\n");
BIO_printf (bio_err, " encrypt PEM output with cbc camellia\n");
#endif #endif
BIO_printf (bio_err, "-nodes don't encrypt private keys\n"); BIO_printf (bio_err, "-nodes don't encrypt private keys\n");
BIO_printf (bio_err, "-noiter don't use encryption iteration\n"); BIO_printf (bio_err, "-noiter don't use encryption iteration\n");
@@ -339,19 +279,12 @@ int MAIN(int argc, char **argv)
BIO_printf (bio_err, "-password p set import/export password source\n"); BIO_printf (bio_err, "-password p set import/export password source\n");
BIO_printf (bio_err, "-passin p input file pass phrase source\n"); BIO_printf (bio_err, "-passin p input file pass phrase source\n");
BIO_printf (bio_err, "-passout p output file pass phrase source\n"); BIO_printf (bio_err, "-passout p output file pass phrase source\n");
#ifndef OPENSSL_NO_ENGINE
BIO_printf (bio_err, "-engine e use engine e, possibly a hardware device.\n");
#endif
BIO_printf(bio_err, "-rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); BIO_printf(bio_err, "-rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
BIO_printf(bio_err, " load the file (or the files in the directory) into\n"); BIO_printf(bio_err, " load the file (or the files in the directory) into\n");
BIO_printf(bio_err, " the random number generator\n"); BIO_printf(bio_err, " the random number generator\n");
goto end; goto end;
} }
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
if(passarg) { if(passarg) {
if(export_cert) passargout = passarg; if(export_cert) passargout = passarg;
else passargin = passarg; else passargin = passarg;
@@ -396,6 +329,22 @@ int MAIN(int argc, char **argv)
goto end; goto end;
} }
if (certfile) {
if(!(certsin = BIO_new_file(certfile, "r"))) {
BIO_printf(bio_err, "Can't open certificate file %s\n", certfile);
perror (certfile);
goto end;
}
}
if (keyname) {
if(!(inkey = BIO_new_file(keyname, "r"))) {
BIO_printf(bio_err, "Can't key certificate file %s\n", keyname);
perror (keyname);
goto end;
}
}
#ifdef CRYPTO_MDEBUG #ifdef CRYPTO_MDEBUG
CRYPTO_pop_info(); CRYPTO_pop_info();
CRYPTO_push_info("write files"); CRYPTO_push_info("write files");
@@ -403,7 +352,7 @@ int MAIN(int argc, char **argv)
if (!outfile) { if (!outfile) {
out = BIO_new_fp(stdout, BIO_NOCLOSE); out = BIO_new_fp(stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -420,7 +369,7 @@ int MAIN(int argc, char **argv)
#ifdef CRYPTO_MDEBUG #ifdef CRYPTO_MDEBUG
CRYPTO_push_info("read MAC password"); CRYPTO_push_info("read MAC password");
#endif #endif
if(EVP_read_pw_string (macpass, sizeof macpass, "Enter MAC Password:", export_cert)) if(EVP_read_pw_string (macpass, 50, "Enter MAC Password:", export_cert))
{ {
BIO_printf (bio_err, "Can't read Password\n"); BIO_printf (bio_err, "Can't read Password\n");
goto end; goto end;
@@ -432,94 +381,80 @@ int MAIN(int argc, char **argv)
if (export_cert) { if (export_cert) {
EVP_PKEY *key = NULL; EVP_PKEY *key = NULL;
X509 *ucert = NULL, *x = NULL; STACK_OF(PKCS12_SAFEBAG) *bags = NULL;
STACK_OF(PKCS7) *safes = NULL;
PKCS12_SAFEBAG *bag = NULL;
PKCS8_PRIV_KEY_INFO *p8 = NULL;
PKCS7 *authsafe = NULL;
X509 *ucert = NULL;
STACK_OF(X509) *certs=NULL; STACK_OF(X509) *certs=NULL;
unsigned char *catmp = NULL; char *catmp = NULL;
int i; int i;
unsigned char keyid[EVP_MAX_MD_SIZE];
if ((options & (NOCERTS|NOKEYS)) == (NOCERTS|NOKEYS)) unsigned int keyidlen = 0;
{
BIO_printf(bio_err, "Nothing to do!\n");
goto export_end;
}
if (options & NOCERTS)
chain = 0;
#ifdef CRYPTO_MDEBUG #ifdef CRYPTO_MDEBUG
CRYPTO_push_info("process -export_cert"); CRYPTO_push_info("process -export_cert");
CRYPTO_push_info("reading private key"); CRYPTO_push_info("reading private key");
#endif #endif
if (!(options & NOKEYS)) key = PEM_read_bio_PrivateKey(inkey ? inkey : in, NULL, NULL, passin);
{ if (!inkey) (void) BIO_reset(in);
key = load_key(bio_err, keyname ? keyname : infile, else BIO_free(inkey);
FORMAT_PEM, 1, passin, e, "private key"); if (!key) {
if (!key) BIO_printf (bio_err, "Error loading private key\n");
goto export_end; ERR_print_errors(bio_err);
} goto export_end;
}
#ifdef CRYPTO_MDEBUG #ifdef CRYPTO_MDEBUG
CRYPTO_pop_info(); CRYPTO_pop_info();
CRYPTO_push_info("reading certs from input"); CRYPTO_push_info("reading certs from input");
#endif #endif
certs = sk_X509_new_null();
/* Load in all certs in input file */ /* Load in all certs in input file */
if(!(options & NOCERTS)) if(!cert_load(in, certs)) {
{ BIO_printf(bio_err, "Error loading certificates from input\n");
certs = load_certs(bio_err, infile, FORMAT_PEM, NULL, e, ERR_print_errors(bio_err);
"certificates"); goto export_end;
if (!certs) }
goto export_end;
if (key)
{
/* Look for matching private key */
for(i = 0; i < sk_X509_num(certs); i++)
{
x = sk_X509_value(certs, i);
if(X509_check_private_key(x, key))
{
ucert = x;
/* Zero keyid and alias */
X509_keyid_set1(ucert, NULL, 0);
X509_alias_set1(ucert, NULL, 0);
/* Remove from list */
sk_X509_delete(certs, i);
break;
}
}
if (!ucert)
{
BIO_printf(bio_err, "No certificate matches private key\n");
goto export_end;
}
}
}
#ifdef CRYPTO_MDEBUG #ifdef CRYPTO_MDEBUG
CRYPTO_pop_info(); CRYPTO_pop_info();
CRYPTO_push_info("reading certs from input 2"); CRYPTO_push_info("reading certs from input 2");
#endif #endif
/* Add any more certificates asked for */ for(i = 0; i < sk_X509_num(certs); i++) {
if(certfile) ucert = sk_X509_value(certs, i);
{ if(X509_check_private_key(ucert, key)) {
STACK_OF(X509) *morecerts=NULL; X509_digest(ucert, EVP_sha1(), keyid, &keyidlen);
if(!(morecerts = load_certs(bio_err, certfile, FORMAT_PEM, break;
NULL, e, }
"certificates from certfile"))) }
goto export_end; if(!keyidlen) {
while(sk_X509_num(morecerts) > 0) ucert = NULL;
sk_X509_push(certs, sk_X509_shift(morecerts)); BIO_printf(bio_err, "No certificate matches private key\n");
sk_X509_free(morecerts); goto export_end;
} }
#ifdef CRYPTO_MDEBUG #ifdef CRYPTO_MDEBUG
CRYPTO_pop_info(); CRYPTO_pop_info();
CRYPTO_push_info("reading certs from certfile"); CRYPTO_push_info("reading certs from certfile");
#endif #endif
bags = sk_PKCS12_SAFEBAG_new_null ();
/* Add any more certificates asked for */
if (certsin) {
if(!cert_load(certsin, certs)) {
BIO_printf(bio_err, "Error loading certificates from certfile\n");
ERR_print_errors(bio_err);
goto export_end;
}
BIO_free(certsin);
}
#ifdef CRYPTO_MDEBUG #ifdef CRYPTO_MDEBUG
CRYPTO_pop_info(); CRYPTO_pop_info();
CRYPTO_push_info("building chain"); CRYPTO_push_info("building chain");
@@ -549,64 +484,105 @@ int MAIN(int argc, char **argv)
X509_free(sk_X509_value(chain2, 0)); X509_free(sk_X509_value(chain2, 0));
sk_X509_free(chain2); sk_X509_free(chain2);
} else { } else {
if (vret >= 0) BIO_printf (bio_err, "Error %s getting chain.\n",
BIO_printf (bio_err, "Error %s getting chain.\n",
X509_verify_cert_error_string(vret)); X509_verify_cert_error_string(vret));
else
ERR_print_errors(bio_err);
goto export_end; goto export_end;
} }
} }
/* Add any CA names */ #ifdef CRYPTO_MDEBUG
CRYPTO_pop_info();
CRYPTO_push_info("building bags");
#endif
for (i = 0; i < sk_num(canames); i++) /* We now have loads of certificates: include them all */
{ for(i = 0; i < sk_X509_num(certs); i++) {
catmp = (unsigned char *)sk_value(canames, i); X509 *cert = NULL;
X509_alias_set1(sk_X509_value(certs, i), catmp, -1); cert = sk_X509_value(certs, i);
} bag = M_PKCS12_x5092certbag(cert);
/* If it matches private key set id */
if (csp_name && key) if(cert == ucert) {
EVP_PKEY_add1_attr_by_NID(key, NID_ms_csp_name, if(name) PKCS12_add_friendlyname(bag, name, -1);
MBSTRING_ASC, (unsigned char *)csp_name, -1); PKCS12_add_localkeyid(bag, keyid, keyidlen);
} else if((catmp = sk_shift(canames)))
PKCS12_add_friendlyname(bag, catmp, -1);
sk_PKCS12_SAFEBAG_push(bags, bag);
}
sk_X509_pop_free(certs, X509_free);
certs = NULL;
#ifdef CRYPTO_MDEBUG #ifdef CRYPTO_MDEBUG
CRYPTO_pop_info(); CRYPTO_pop_info();
CRYPTO_push_info("reading password"); CRYPTO_push_info("encrypting bags");
#endif #endif
if(!noprompt && if(!noprompt &&
EVP_read_pw_string(pass, sizeof pass, "Enter Export Password:", 1)) EVP_read_pw_string(pass, 50, "Enter Export Password:", 1)) {
{ BIO_printf (bio_err, "Can't read Password\n");
BIO_printf (bio_err, "Can't read Password\n"); goto export_end;
goto export_end; }
} if (!twopass) strcpy(macpass, pass);
if (!twopass) BUF_strlcpy(macpass, pass, sizeof macpass); /* Turn certbags into encrypted authsafe */
authsafe = PKCS12_pack_p7encdata(cert_pbe, cpass, -1, NULL, 0,
iter, bags);
sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free);
bags = NULL;
if (!authsafe) {
ERR_print_errors (bio_err);
goto export_end;
}
safes = sk_PKCS7_new_null ();
sk_PKCS7_push (safes, authsafe);
#ifdef CRYPTO_MDEBUG #ifdef CRYPTO_MDEBUG
CRYPTO_pop_info(); CRYPTO_pop_info();
CRYPTO_push_info("creating PKCS#12 structure"); CRYPTO_push_info("building shrouded key bag");
#endif #endif
p12 = PKCS12_create(cpass, name, key, ucert, certs, /* Make a shrouded key bag */
key_pbe, cert_pbe, iter, -1, keytype); p8 = EVP_PKEY2PKCS8 (key);
if(keytype) PKCS8_add_keyusage(p8, keytype);
bag = PKCS12_MAKE_SHKEYBAG(key_pbe, cpass, -1, NULL, 0, iter, p8);
PKCS8_PRIV_KEY_INFO_free(p8);
p8 = NULL;
if (name) PKCS12_add_friendlyname (bag, name, -1);
PKCS12_add_localkeyid (bag, keyid, keyidlen);
bags = sk_PKCS12_SAFEBAG_new_null();
sk_PKCS12_SAFEBAG_push (bags, bag);
if (!p12) #ifdef CRYPTO_MDEBUG
{ CRYPTO_pop_info();
ERR_print_errors (bio_err); CRYPTO_push_info("encrypting shrouded key bag");
goto export_end; #endif
}
if (maciter != -1) /* Turn it into unencrypted safe bag */
PKCS12_set_mac(p12, mpass, -1, NULL, 0, maciter, NULL); authsafe = PKCS12_pack_p7data (bags);
sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free);
bags = NULL;
sk_PKCS7_push (safes, authsafe);
#ifdef CRYPTO_MDEBUG
CRYPTO_pop_info();
CRYPTO_push_info("building pkcs12");
#endif
p12 = PKCS12_init (NID_pkcs7_data);
M_PKCS12_pack_authsafes (p12, safes);
sk_PKCS7_pop_free(safes, PKCS7_free);
safes = NULL;
PKCS12_set_mac (p12, mpass, -1, NULL, 0, maciter, NULL);
#ifdef CRYPTO_MDEBUG #ifdef CRYPTO_MDEBUG
CRYPTO_pop_info(); CRYPTO_pop_info();
CRYPTO_push_info("writing pkcs12"); CRYPTO_push_info("writing pkcs12");
#endif #endif
i2d_PKCS12_bio(out, p12); i2d_PKCS12_bio (out, p12);
ret = 0; ret = 0;
@@ -619,7 +595,8 @@ int MAIN(int argc, char **argv)
if (key) EVP_PKEY_free(key); if (key) EVP_PKEY_free(key);
if (certs) sk_X509_pop_free(certs, X509_free); if (certs) sk_X509_pop_free(certs, X509_free);
if (ucert) X509_free(ucert); if (safes) sk_PKCS7_pop_free(safes, PKCS7_free);
if (bags) sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free);
#ifdef CRYPTO_MDEBUG #ifdef CRYPTO_MDEBUG
CRYPTO_pop_info(); CRYPTO_pop_info();
@@ -636,7 +613,7 @@ int MAIN(int argc, char **argv)
#ifdef CRYPTO_MDEBUG #ifdef CRYPTO_MDEBUG
CRYPTO_push_info("read import password"); CRYPTO_push_info("read import password");
#endif #endif
if(!noprompt && EVP_read_pw_string(pass, sizeof pass, "Enter Import Password:", 0)) { if(!noprompt && EVP_read_pw_string(pass, 50, "Enter Import Password:", 0)) {
BIO_printf (bio_err, "Can't read Password\n"); BIO_printf (bio_err, "Can't read Password\n");
goto end; goto end;
} }
@@ -644,7 +621,7 @@ int MAIN(int argc, char **argv)
CRYPTO_pop_info(); CRYPTO_pop_info();
#endif #endif
if (!twopass) BUF_strlcpy(macpass, pass, sizeof macpass); if (!twopass) strcpy(macpass, pass);
if (options & INFO) BIO_printf (bio_err, "MAC Iteration %ld\n", p12->mac->iter ? ASN1_INTEGER_get (p12->mac->iter) : 1); if (options & INFO) BIO_printf (bio_err, "MAC Iteration %ld\n", p12->mac->iter ? ASN1_INTEGER_get (p12->mac->iter) : 1);
if(macver) { if(macver) {
@@ -652,7 +629,7 @@ int MAIN(int argc, char **argv)
CRYPTO_push_info("verify MAC"); CRYPTO_push_info("verify MAC");
#endif #endif
/* If we enter empty password try no password first */ /* If we enter empty password try no password first */
if(!mpass[0] && PKCS12_verify_mac(p12, NULL, 0)) { if(!macpass[0] && PKCS12_verify_mac(p12, NULL, 0)) {
/* If mac and crypto pass the same set it to NULL too */ /* If mac and crypto pass the same set it to NULL too */
if(!twopass) cpass = NULL; if(!twopass) cpass = NULL;
} else if (!PKCS12_verify_mac(p12, mpass, -1)) { } else if (!PKCS12_verify_mac(p12, mpass, -1)) {
@@ -689,50 +666,42 @@ int MAIN(int argc, char **argv)
if (canames) sk_free(canames); if (canames) sk_free(canames);
if(passin) OPENSSL_free(passin); if(passin) OPENSSL_free(passin);
if(passout) OPENSSL_free(passout); if(passout) OPENSSL_free(passout);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }
int dump_certs_keys_p12 (BIO *out, PKCS12 *p12, char *pass, int dump_certs_keys_p12 (BIO *out, PKCS12 *p12, char *pass,
int passlen, int options, char *pempass) int passlen, int options, char *pempass)
{ {
STACK_OF(PKCS7) *asafes = NULL; STACK_OF(PKCS7) *asafes;
STACK_OF(PKCS12_SAFEBAG) *bags; STACK_OF(PKCS12_SAFEBAG) *bags;
int i, bagnid; int i, bagnid;
int ret = 0;
PKCS7 *p7; PKCS7 *p7;
if (!( asafes = PKCS12_unpack_authsafes(p12))) return 0; if (!( asafes = M_PKCS12_unpack_authsafes (p12))) return 0;
for (i = 0; i < sk_PKCS7_num (asafes); i++) { for (i = 0; i < sk_PKCS7_num (asafes); i++) {
p7 = sk_PKCS7_value (asafes, i); p7 = sk_PKCS7_value (asafes, i);
bagnid = OBJ_obj2nid (p7->type); bagnid = OBJ_obj2nid (p7->type);
if (bagnid == NID_pkcs7_data) { if (bagnid == NID_pkcs7_data) {
bags = PKCS12_unpack_p7data(p7); bags = M_PKCS12_unpack_p7data (p7);
if (options & INFO) BIO_printf (bio_err, "PKCS7 Data\n"); if (options & INFO) BIO_printf (bio_err, "PKCS7 Data\n");
} else if (bagnid == NID_pkcs7_encrypted) { } else if (bagnid == NID_pkcs7_encrypted) {
if (options & INFO) { if (options & INFO) {
BIO_printf(bio_err, "PKCS7 Encrypted data: "); BIO_printf (bio_err, "PKCS7 Encrypted data: ");
alg_print(bio_err, alg_print (bio_err,
p7->d.encrypted->enc_data->algorithm); p7->d.encrypted->enc_data->algorithm);
} }
bags = PKCS12_unpack_p7encdata(p7, pass, passlen); bags = M_PKCS12_unpack_p7encdata (p7, pass, passlen);
} else continue; } else continue;
if (!bags) goto err; if (!bags) return 0;
if (!dump_certs_pkeys_bags (out, bags, pass, passlen, if (!dump_certs_pkeys_bags (out, bags, pass, passlen,
options, pempass)) { options, pempass)) {
sk_PKCS12_SAFEBAG_pop_free (bags, PKCS12_SAFEBAG_free); sk_PKCS12_SAFEBAG_pop_free (bags, PKCS12_SAFEBAG_free);
goto err; return 0;
} }
sk_PKCS12_SAFEBAG_pop_free (bags, PKCS12_SAFEBAG_free); sk_PKCS12_SAFEBAG_pop_free (bags, PKCS12_SAFEBAG_free);
bags = NULL;
} }
ret = 1; sk_PKCS7_pop_free (asafes, PKCS7_free);
return 1;
err:
if (asafes)
sk_PKCS7_pop_free (asafes, PKCS7_free);
return ret;
} }
int dump_certs_pkeys_bags (BIO *out, STACK_OF(PKCS12_SAFEBAG) *bags, int dump_certs_pkeys_bags (BIO *out, STACK_OF(PKCS12_SAFEBAG) *bags,
@@ -776,7 +745,7 @@ int dump_certs_pkeys_bag (BIO *out, PKCS12_SAFEBAG *bag, char *pass,
} }
if (options & NOKEYS) return 1; if (options & NOKEYS) return 1;
print_attribs (out, bag->attrib, "Bag Attributes"); print_attribs (out, bag->attrib, "Bag Attributes");
if (!(p8 = PKCS12_decrypt_skey(bag, pass, passlen))) if (!(p8 = M_PKCS12_decrypt_skey (bag, pass, passlen)))
return 0; return 0;
if (!(pkey = EVP_PKCS82PKEY (p8))) { if (!(pkey = EVP_PKCS82PKEY (p8))) {
PKCS8_PRIV_KEY_INFO_free(p8); PKCS8_PRIV_KEY_INFO_free(p8);
@@ -797,7 +766,7 @@ int dump_certs_pkeys_bag (BIO *out, PKCS12_SAFEBAG *bag, char *pass,
print_attribs (out, bag->attrib, "Bag Attributes"); print_attribs (out, bag->attrib, "Bag Attributes");
if (M_PKCS12_cert_bag_type(bag) != NID_x509Certificate ) if (M_PKCS12_cert_bag_type(bag) != NID_x509Certificate )
return 1; return 1;
if (!(x509 = PKCS12_certbag2x509(bag))) return 0; if (!(x509 = M_PKCS12_certbag2x509(bag))) return 0;
dump_cert_text (out, x509); dump_cert_text (out, x509);
PEM_write_bio_X509 (out, x509); PEM_write_bio_X509 (out, x509);
X509_free(x509); X509_free(x509);
@@ -827,25 +796,18 @@ int get_cert_chain (X509 *cert, X509_STORE *store, STACK_OF(X509) **chain)
{ {
X509_STORE_CTX store_ctx; X509_STORE_CTX store_ctx;
STACK_OF(X509) *chn; STACK_OF(X509) *chn;
int i = 0; int i;
/* FIXME: Should really check the return status of X509_STORE_CTX_init
* for an error, but how that fits into the return value of this
* function is less obvious. */
X509_STORE_CTX_init(&store_ctx, store, cert, NULL); X509_STORE_CTX_init(&store_ctx, store, cert, NULL);
if (X509_verify_cert(&store_ctx) <= 0) { if (X509_verify_cert(&store_ctx) <= 0) {
i = X509_STORE_CTX_get_error (&store_ctx); i = X509_STORE_CTX_get_error (&store_ctx);
if (i == 0)
/* avoid returning 0 if X509_verify_cert() did not
* set an appropriate error value in the context */
i = -1;
chn = NULL;
goto err; goto err;
} else }
chn = X509_STORE_CTX_get1_chain(&store_ctx); chn = X509_STORE_CTX_get1_chain(&store_ctx);
i = 0;
*chain = chn;
err: err:
X509_STORE_CTX_cleanup(&store_ctx); X509_STORE_CTX_cleanup(&store_ctx);
*chain = chn;
return i; return i;
} }
@@ -853,16 +815,13 @@ err:
int alg_print (BIO *x, X509_ALGOR *alg) int alg_print (BIO *x, X509_ALGOR *alg)
{ {
PBEPARAM *pbe; PBEPARAM *pbe;
const unsigned char *p; unsigned char *p;
p = alg->parameter->value.sequence->data; p = alg->parameter->value.sequence->data;
pbe = d2i_PBEPARAM(NULL, &p, alg->parameter->value.sequence->length); pbe = d2i_PBEPARAM (NULL, &p, alg->parameter->value.sequence->length);
if (!pbe) BIO_printf (bio_err, "%s, Iteration %d\n",
return 1; OBJ_nid2ln(OBJ_obj2nid(alg->algorithm)), ASN1_INTEGER_get(pbe->iter));
BIO_printf (bio_err, "%s, Iteration %ld\n",
OBJ_nid2ln(OBJ_obj2nid(alg->algorithm)),
ASN1_INTEGER_get(pbe->iter));
PBEPARAM_free (pbe); PBEPARAM_free (pbe);
return 1; return 0;
} }
/* Load all certificates from a given file */ /* Load all certificates from a given file */
@@ -894,7 +853,7 @@ int cert_load(BIO *in, STACK_OF(X509) *sk)
/* Generalised attribute print: handle PKCS#8 and bag attributes */ /* Generalised attribute print: handle PKCS#8 and bag attributes */
int print_attribs (BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst,const char *name) int print_attribs (BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst, char *name)
{ {
X509_ATTRIBUTE *attr; X509_ATTRIBUTE *attr;
ASN1_TYPE *av; ASN1_TYPE *av;

View File

@@ -82,9 +82,6 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
#ifndef OPENSSL_NO_ENGINE
ENGINE *e = NULL;
#endif
PKCS7 *p7=NULL; PKCS7 *p7=NULL;
int i,badops=0; int i,badops=0;
BIO *in=NULL,*out=NULL; BIO *in=NULL,*out=NULL;
@@ -92,9 +89,6 @@ int MAIN(int argc, char **argv)
char *infile,*outfile,*prog; char *infile,*outfile,*prog;
int print_certs=0,text=0,noout=0; int print_certs=0,text=0,noout=0;
int ret=1; int ret=1;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
apps_startup(); apps_startup();
@@ -102,9 +96,6 @@ int MAIN(int argc, char **argv)
if ((bio_err=BIO_new(BIO_s_file())) != NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto end;
infile=NULL; infile=NULL;
outfile=NULL; outfile=NULL;
informat=FORMAT_PEM; informat=FORMAT_PEM;
@@ -141,13 +132,6 @@ int MAIN(int argc, char **argv)
text=1; text=1;
else if (strcmp(*argv,"-print_certs") == 0) else if (strcmp(*argv,"-print_certs") == 0)
print_certs=1; print_certs=1;
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine= *(++argv);
}
#endif
else else
{ {
BIO_printf(bio_err,"unknown option %s\n",*argv); BIO_printf(bio_err,"unknown option %s\n",*argv);
@@ -170,19 +154,11 @@ bad:
BIO_printf(bio_err," -print_certs print any certs or crl in the input\n"); BIO_printf(bio_err," -print_certs print any certs or crl in the input\n");
BIO_printf(bio_err," -text print full details of certificates\n"); BIO_printf(bio_err," -text print full details of certificates\n");
BIO_printf(bio_err," -noout don't output encoded data\n"); BIO_printf(bio_err," -noout don't output encoded data\n");
#ifndef OPENSSL_NO_ENGINE OPENSSL_EXIT(1);
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
#endif
ret = 1;
goto end;
} }
ERR_load_crypto_strings(); ERR_load_crypto_strings();
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
in=BIO_new(BIO_s_file()); in=BIO_new(BIO_s_file());
out=BIO_new(BIO_s_file()); out=BIO_new(BIO_s_file());
if ((in == NULL) || (out == NULL)) if ((in == NULL) || (out == NULL))
@@ -222,7 +198,7 @@ bad:
if (outfile == NULL) if (outfile == NULL)
{ {
BIO_set_fp(out,stdout,BIO_NOCLOSE); BIO_set_fp(out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -313,6 +289,5 @@ end:
if (p7 != NULL) PKCS7_free(p7); if (p7 != NULL) PKCS7_free(p7);
if (in != NULL) BIO_free(in); if (in != NULL) BIO_free(in);
if (out != NULL) BIO_free_all(out); if (out != NULL) BIO_free_all(out);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }

View File

@@ -1,6 +1,6 @@
/* pkcs8.c */ /* pkcs8.c */
/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
* project 1999-2004. * project 1999.
*/ */
/* ==================================================================== /* ====================================================================
* Copyright (c) 1999 The OpenSSL Project. All rights reserved. * Copyright (c) 1999 The OpenSSL Project. All rights reserved.
@@ -63,13 +63,13 @@
#include <openssl/evp.h> #include <openssl/evp.h>
#include <openssl/pkcs12.h> #include <openssl/pkcs12.h>
#include "apps.h"
#define PROG pkcs8_main #define PROG pkcs8_main
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
ENGINE *e = NULL;
char **args, *infile = NULL, *outfile = NULL; char **args, *infile = NULL, *outfile = NULL;
char *passargin = NULL, *passargout = NULL; char *passargin = NULL, *passargout = NULL;
BIO *in = NULL, *out = NULL; BIO *in = NULL, *out = NULL;
@@ -82,88 +82,52 @@ int MAIN(int argc, char **argv)
int nocrypt = 0; int nocrypt = 0;
X509_SIG *p8; X509_SIG *p8;
PKCS8_PRIV_KEY_INFO *p8inf; PKCS8_PRIV_KEY_INFO *p8inf;
EVP_PKEY *pkey=NULL; EVP_PKEY *pkey;
char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL; char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL;
int badarg = 0; int badarg = 0;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
if (bio_err == NULL) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE); if (bio_err == NULL) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
if (!load_config(bio_err, NULL))
goto end;
informat=FORMAT_PEM; informat=FORMAT_PEM;
outformat=FORMAT_PEM; outformat=FORMAT_PEM;
ERR_load_crypto_strings(); ERR_load_crypto_strings();
OpenSSL_add_all_algorithms(); OpenSSL_add_all_algorithms();
args = argv + 1; args = argv + 1;
while (!badarg && *args && *args[0] == '-') while (!badarg && *args && *args[0] == '-') {
{ if (!strcmp(*args,"-v2")) {
if (!strcmp(*args,"-v2")) if (args[1]) {
{
if (args[1])
{
args++; args++;
cipher=EVP_get_cipherbyname(*args); cipher=EVP_get_cipherbyname(*args);
if (!cipher) if(!cipher) {
{
BIO_printf(bio_err, BIO_printf(bio_err,
"Unknown cipher %s\n", *args); "Unknown cipher %s\n", *args);
badarg = 1; badarg = 1;
}
} }
else } else badarg = 1;
badarg = 1; } else if (!strcmp(*args,"-v1")) {
} if (args[1]) {
else if (!strcmp(*args,"-v1"))
{
if (args[1])
{
args++; args++;
pbe_nid=OBJ_txt2nid(*args); pbe_nid=OBJ_txt2nid(*args);
if (pbe_nid == NID_undef) if(pbe_nid == NID_undef) {
{
BIO_printf(bio_err, BIO_printf(bio_err,
"Unknown PBE algorithm %s\n", *args); "Unknown PBE algorithm %s\n", *args);
badarg = 1; badarg = 1;
}
} }
else } else badarg = 1;
badarg = 1; } else if (!strcmp(*args,"-inform")) {
} if (args[1]) {
else if (!strcmp(*args,"-inform"))
{
if (args[1])
{
args++; args++;
informat=str2fmt(*args); informat=str2fmt(*args);
} } else badarg = 1;
else badarg = 1; } else if (!strcmp(*args,"-outform")) {
} if (args[1]) {
else if (!strcmp(*args,"-outform"))
{
if (args[1])
{
args++; args++;
outformat=str2fmt(*args); outformat=str2fmt(*args);
} } else badarg = 1;
else badarg = 1; } else if (!strcmp (*args, "-topk8")) topk8 = 1;
} else if (!strcmp (*args, "-noiter")) iter = 1;
else if (!strcmp (*args, "-topk8")) else if (!strcmp (*args, "-nocrypt")) nocrypt = 1;
topk8 = 1; else if (!strcmp (*args, "-nooct")) p8_broken = PKCS8_NO_OCTET;
else if (!strcmp (*args, "-noiter")) else if (!strcmp (*args, "-nsdb")) p8_broken = PKCS8_NS_DB;
iter = 1; else if (!strcmp (*args, "-embed")) p8_broken = PKCS8_EMBEDDED_PARAM;
else if (!strcmp (*args, "-nocrypt"))
nocrypt = 1;
else if (!strcmp (*args, "-nooct"))
p8_broken = PKCS8_NO_OCTET;
else if (!strcmp (*args, "-nsdb"))
p8_broken = PKCS8_NS_DB;
else if (!strcmp (*args, "-embed"))
p8_broken = PKCS8_EMBEDDED_PARAM;
else if (!strcmp(*args,"-passin")) else if (!strcmp(*args,"-passin"))
{ {
if (!args[1]) goto bad; if (!args[1]) goto bad;
@@ -174,37 +138,21 @@ int MAIN(int argc, char **argv)
if (!args[1]) goto bad; if (!args[1]) goto bad;
passargout= *(++args); passargout= *(++args);
} }
#ifndef OPENSSL_NO_ENGINE else if (!strcmp (*args, "-in")) {
else if (strcmp(*args,"-engine") == 0) if (args[1]) {
{
if (!args[1]) goto bad;
engine= *(++args);
}
#endif
else if (!strcmp (*args, "-in"))
{
if (args[1])
{
args++; args++;
infile = *args; infile = *args;
} } else badarg = 1;
else badarg = 1; } else if (!strcmp (*args, "-out")) {
} if (args[1]) {
else if (!strcmp (*args, "-out"))
{
if (args[1])
{
args++; args++;
outfile = *args; outfile = *args;
} } else badarg = 1;
else badarg = 1; } else badarg = 1;
}
else badarg = 1;
args++; args++;
} }
if (badarg) if (badarg) {
{
bad: bad:
BIO_printf(bio_err, "Usage pkcs8 [options]\n"); BIO_printf(bio_err, "Usage pkcs8 [options]\n");
BIO_printf(bio_err, "where options are\n"); BIO_printf(bio_err, "where options are\n");
@@ -222,202 +170,151 @@ int MAIN(int argc, char **argv)
BIO_printf(bio_err, "-nocrypt use or expect unencrypted private key\n"); BIO_printf(bio_err, "-nocrypt use or expect unencrypted private key\n");
BIO_printf(bio_err, "-v2 alg use PKCS#5 v2.0 and cipher \"alg\"\n"); BIO_printf(bio_err, "-v2 alg use PKCS#5 v2.0 and cipher \"alg\"\n");
BIO_printf(bio_err, "-v1 obj use PKCS#5 v1.5 and cipher \"alg\"\n"); BIO_printf(bio_err, "-v1 obj use PKCS#5 v1.5 and cipher \"alg\"\n");
#ifndef OPENSSL_NO_ENGINE return (1);
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n"); }
#endif
return 1;
}
#ifndef OPENSSL_NO_ENGINE if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
e = setup_engine(bio_err, engine, 0);
#endif
if (!app_passwd(bio_err, passargin, passargout, &passin, &passout))
{
BIO_printf(bio_err, "Error getting passwords\n"); BIO_printf(bio_err, "Error getting passwords\n");
return 1; return (1);
} }
if ((pbe_nid == -1) && !cipher) if ((pbe_nid == -1) && !cipher) pbe_nid = NID_pbeWithMD5AndDES_CBC;
pbe_nid = NID_pbeWithMD5AndDES_CBC;
if (infile) if (infile) {
{ if (!(in = BIO_new_file(infile, "rb"))) {
if (!(in = BIO_new_file(infile, "rb")))
{
BIO_printf(bio_err, BIO_printf(bio_err,
"Can't open input file %s\n", infile); "Can't open input file %s\n", infile);
return (1); return (1);
}
} }
else } else in = BIO_new_fp (stdin, BIO_NOCLOSE);
in = BIO_new_fp (stdin, BIO_NOCLOSE);
if (outfile) if (outfile) {
{ if (!(out = BIO_new_file (outfile, "wb"))) {
if (!(out = BIO_new_file (outfile, "wb")))
{
BIO_printf(bio_err, BIO_printf(bio_err,
"Can't open output file %s\n", outfile); "Can't open output file %s\n", outfile);
return (1); return (1);
}
} }
else } else {
{
out = BIO_new_fp (stdout, BIO_NOCLOSE); out = BIO_new_fp (stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
}
#endif
} }
if (topk8) #endif
{ }
BIO_free(in); /* Not needed in this section */ if (topk8) {
pkey = load_key(bio_err, infile, informat, 1, if(informat == FORMAT_PEM)
passin, e, "key"); pkey = PEM_read_bio_PrivateKey(in, NULL, NULL, passin);
if (!pkey) else if(informat == FORMAT_ASN1)
{ pkey = d2i_PrivateKey_bio(in, NULL);
BIO_free_all(out); else {
return 1; BIO_printf(bio_err, "Bad format specified for key\n");
} return (1);
if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken))) }
{ if (!pkey) {
BIO_printf(bio_err, "Error converting key\n"); BIO_printf(bio_err, "Error reading key\n", outfile);
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
EVP_PKEY_free(pkey); return (1);
BIO_free_all(out); }
return 1; BIO_free(in);
} if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken))) {
if (nocrypt) BIO_printf(bio_err, "Error converting key\n", outfile);
{ ERR_print_errors(bio_err);
if (outformat == FORMAT_PEM) return (1);
}
if(nocrypt) {
if(outformat == FORMAT_PEM)
PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf); PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf);
else if (outformat == FORMAT_ASN1) else if(outformat == FORMAT_ASN1)
i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf); i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf);
else else {
{
BIO_printf(bio_err, "Bad format specified for key\n"); BIO_printf(bio_err, "Bad format specified for key\n");
PKCS8_PRIV_KEY_INFO_free(p8inf);
EVP_PKEY_free(pkey);
BIO_free_all(out);
return (1); return (1);
}
} }
else } else {
{ if(passout) p8pass = passout;
if (passout) else {
p8pass = passout;
else
{
p8pass = pass; p8pass = pass;
if (EVP_read_pw_string(pass, sizeof pass, "Enter Encryption Password:", 1)) if (EVP_read_pw_string(pass, 50, "Enter Encryption Password:", 1))
{
PKCS8_PRIV_KEY_INFO_free(p8inf);
EVP_PKEY_free(pkey);
BIO_free_all(out);
return (1); return (1);
} }
}
app_RAND_load_file(NULL, bio_err, 0); app_RAND_load_file(NULL, bio_err, 0);
if (!(p8 = PKCS8_encrypt(pbe_nid, cipher, if (!(p8 = PKCS8_encrypt(pbe_nid, cipher,
p8pass, strlen(p8pass), p8pass, strlen(p8pass),
NULL, 0, iter, p8inf))) NULL, 0, iter, p8inf))) {
{ BIO_printf(bio_err, "Error encrypting key\n",
BIO_printf(bio_err, "Error encrypting key\n"); outfile);
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
PKCS8_PRIV_KEY_INFO_free(p8inf);
EVP_PKEY_free(pkey);
BIO_free_all(out);
return (1); return (1);
}
app_RAND_write_file(NULL, bio_err);
if (outformat == FORMAT_PEM)
PEM_write_bio_PKCS8(out, p8);
else if (outformat == FORMAT_ASN1)
i2d_PKCS8_bio(out, p8);
else
{
BIO_printf(bio_err, "Bad format specified for key\n");
PKCS8_PRIV_KEY_INFO_free(p8inf);
EVP_PKEY_free(pkey);
BIO_free_all(out);
return (1);
}
X509_SIG_free(p8);
} }
app_RAND_write_file(NULL, bio_err);
if(outformat == FORMAT_PEM)
PEM_write_bio_PKCS8(out, p8);
else if(outformat == FORMAT_ASN1)
i2d_PKCS8_bio(out, p8);
else {
BIO_printf(bio_err, "Bad format specified for key\n");
return (1);
}
X509_SIG_free(p8);
}
PKCS8_PRIV_KEY_INFO_free (p8inf); PKCS8_PRIV_KEY_INFO_free (p8inf);
EVP_PKEY_free(pkey); EVP_PKEY_free(pkey);
BIO_free_all(out); BIO_free_all(out);
if (passin) if(passin) OPENSSL_free(passin);
OPENSSL_free(passin); if(passout) OPENSSL_free(passout);
if (passout)
OPENSSL_free(passout);
return (0); return (0);
} }
if (nocrypt) if(nocrypt) {
{ if(informat == FORMAT_PEM)
if (informat == FORMAT_PEM)
p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in,NULL,NULL, NULL); p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in,NULL,NULL, NULL);
else if (informat == FORMAT_ASN1) else if(informat == FORMAT_ASN1)
p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL); p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL);
else else {
{
BIO_printf(bio_err, "Bad format specified for key\n"); BIO_printf(bio_err, "Bad format specified for key\n");
return (1); return (1);
}
} }
else } else {
{ if(informat == FORMAT_PEM)
if (informat == FORMAT_PEM)
p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL); p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL);
else if (informat == FORMAT_ASN1) else if(informat == FORMAT_ASN1)
p8 = d2i_PKCS8_bio(in, NULL); p8 = d2i_PKCS8_bio(in, NULL);
else else {
{
BIO_printf(bio_err, "Bad format specified for key\n"); BIO_printf(bio_err, "Bad format specified for key\n");
return (1); return (1);
} }
if (!p8) if (!p8) {
{ BIO_printf (bio_err, "Error reading key\n", outfile);
BIO_printf (bio_err, "Error reading key\n");
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
return (1); return (1);
} }
if (passin) if(passin) p8pass = passin;
p8pass = passin; else {
else
{
p8pass = pass; p8pass = pass;
EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0); EVP_read_pw_string(pass, 50, "Enter Password:", 0);
} }
p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass)); p8inf = M_PKCS8_decrypt(p8, p8pass, strlen(p8pass));
X509_SIG_free(p8); X509_SIG_free(p8);
} }
if (!p8inf) if (!p8inf) {
{ BIO_printf(bio_err, "Error decrypting key\n", outfile);
BIO_printf(bio_err, "Error decrypting key\n");
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
return (1); return (1);
} }
if (!(pkey = EVP_PKCS82PKEY(p8inf))) if (!(pkey = EVP_PKCS82PKEY(p8inf))) {
{ BIO_printf(bio_err, "Error converting key\n", outfile);
BIO_printf(bio_err, "Error converting key\n");
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
return (1); return (1);
} }
if (p8inf->broken) if (p8inf->broken) {
{
BIO_printf(bio_err, "Warning: broken key encoding: "); BIO_printf(bio_err, "Warning: broken key encoding: ");
switch (p8inf->broken) switch (p8inf->broken) {
{
case PKCS8_NO_OCTET: case PKCS8_NO_OCTET:
BIO_printf(bio_err, "No Octet String in PrivateKey\n"); BIO_printf(bio_err, "No Octet String in PrivateKey\n");
break; break;
@@ -437,24 +334,20 @@ int MAIN(int argc, char **argv)
} }
PKCS8_PRIV_KEY_INFO_free(p8inf); PKCS8_PRIV_KEY_INFO_free(p8inf);
if (outformat == FORMAT_PEM) if(outformat == FORMAT_PEM)
PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout); PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout);
else if (outformat == FORMAT_ASN1) else if(outformat == FORMAT_ASN1)
i2d_PrivateKey_bio(out, pkey); i2d_PrivateKey_bio(out, pkey);
else else {
{
BIO_printf(bio_err, "Bad format specified for key\n"); BIO_printf(bio_err, "Bad format specified for key\n");
return (1); return (1);
} }
end:
EVP_PKEY_free(pkey); EVP_PKEY_free(pkey);
BIO_free_all(out); BIO_free_all(out);
BIO_free(in); BIO_free(in);
if (passin) if(passin) OPENSSL_free(passin);
OPENSSL_free(passin); if(passout) OPENSSL_free(passout);
if (passout)
OPENSSL_free(passout);
return (0); return (0);
} }

View File

@@ -1,130 +0,0 @@
/* ====================================================================
* Copyright (c) 2004 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@openssl.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#include <string.h>
#include "apps.h"
#include <openssl/bn.h>
#undef PROG
#define PROG prime_main
int MAIN(int, char **);
int MAIN(int argc, char **argv)
{
int hex=0;
int checks=20;
BIGNUM *bn=NULL;
BIO *bio_out;
apps_startup();
if (bio_err == NULL)
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
--argc;
++argv;
while (argc >= 1 && **argv == '-')
{
if(!strcmp(*argv,"-hex"))
hex=1;
else if(!strcmp(*argv,"-checks"))
if(--argc < 1)
goto bad;
else
checks=atoi(*++argv);
else
{
BIO_printf(bio_err,"Unknown option '%s'\n",*argv);
goto bad;
}
--argc;
++argv;
}
if (argv[0] == NULL)
{
BIO_printf(bio_err,"No prime specified\n");
goto bad;
}
if ((bio_out=BIO_new(BIO_s_file())) != NULL)
{
BIO_set_fp(bio_out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS
{
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
bio_out = BIO_push(tmpbio, bio_out);
}
#endif
}
if(hex)
BN_hex2bn(&bn,argv[0]);
else
BN_dec2bn(&bn,argv[0]);
BN_print(bio_out,bn);
BIO_printf(bio_out," is %sprime\n",
BN_is_prime_ex(bn,checks,NULL,NULL) ? "" : "not ");
BN_free(bn);
BIO_free_all(bio_out);
return 0;
bad:
BIO_printf(bio_err,"options are\n");
BIO_printf(bio_err,"%-14s hex\n","-hex");
BIO_printf(bio_err,"%-14s number of checks\n","-checks <n>");
return 1;
}

View File

@@ -17,8 +17,6 @@ extern int rsa_main(int argc,char *argv[]);
extern int rsautl_main(int argc,char *argv[]); extern int rsautl_main(int argc,char *argv[]);
extern int dsa_main(int argc,char *argv[]); extern int dsa_main(int argc,char *argv[]);
extern int dsaparam_main(int argc,char *argv[]); extern int dsaparam_main(int argc,char *argv[]);
extern int ec_main(int argc,char *argv[]);
extern int ecparam_main(int argc,char *argv[]);
extern int x509_main(int argc,char *argv[]); extern int x509_main(int argc,char *argv[]);
extern int genrsa_main(int argc,char *argv[]); extern int genrsa_main(int argc,char *argv[]);
extern int gendsa_main(int argc,char *argv[]); extern int gendsa_main(int argc,char *argv[]);
@@ -37,9 +35,6 @@ extern int pkcs8_main(int argc,char *argv[]);
extern int spkac_main(int argc,char *argv[]); extern int spkac_main(int argc,char *argv[]);
extern int smime_main(int argc,char *argv[]); extern int smime_main(int argc,char *argv[]);
extern int rand_main(int argc,char *argv[]); extern int rand_main(int argc,char *argv[]);
extern int engine_main(int argc,char *argv[]);
extern int ocsp_main(int argc,char *argv[]);
extern int prime_main(int argc,char *argv[]);
#define FUNC_TYPE_GENERAL 1 #define FUNC_TYPE_GENERAL 1
#define FUNC_TYPE_MD 2 #define FUNC_TYPE_MD 2
@@ -47,8 +42,8 @@ extern int prime_main(int argc,char *argv[]);
typedef struct { typedef struct {
int type; int type;
const char *name; char *name;
int (*func)(int argc,char *argv[]); int (*func)();
} FUNCTION; } FUNCTION;
FUNCTION functions[] = { FUNCTION functions[] = {
@@ -56,283 +51,205 @@ FUNCTION functions[] = {
{FUNC_TYPE_GENERAL,"asn1parse",asn1parse_main}, {FUNC_TYPE_GENERAL,"asn1parse",asn1parse_main},
{FUNC_TYPE_GENERAL,"req",req_main}, {FUNC_TYPE_GENERAL,"req",req_main},
{FUNC_TYPE_GENERAL,"dgst",dgst_main}, {FUNC_TYPE_GENERAL,"dgst",dgst_main},
#ifndef OPENSSL_NO_DH #ifndef NO_DH
{FUNC_TYPE_GENERAL,"dh",dh_main}, {FUNC_TYPE_GENERAL,"dh",dh_main},
#endif #endif
#ifndef OPENSSL_NO_DH #ifndef NO_DH
{FUNC_TYPE_GENERAL,"dhparam",dhparam_main}, {FUNC_TYPE_GENERAL,"dhparam",dhparam_main},
#endif #endif
{FUNC_TYPE_GENERAL,"enc",enc_main}, {FUNC_TYPE_GENERAL,"enc",enc_main},
{FUNC_TYPE_GENERAL,"passwd",passwd_main}, {FUNC_TYPE_GENERAL,"passwd",passwd_main},
#ifndef OPENSSL_NO_DH #ifndef NO_DH
{FUNC_TYPE_GENERAL,"gendh",gendh_main}, {FUNC_TYPE_GENERAL,"gendh",gendh_main},
#endif #endif
{FUNC_TYPE_GENERAL,"errstr",errstr_main}, {FUNC_TYPE_GENERAL,"errstr",errstr_main},
{FUNC_TYPE_GENERAL,"ca",ca_main}, {FUNC_TYPE_GENERAL,"ca",ca_main},
{FUNC_TYPE_GENERAL,"crl",crl_main}, {FUNC_TYPE_GENERAL,"crl",crl_main},
#ifndef OPENSSL_NO_RSA #ifndef NO_RSA
{FUNC_TYPE_GENERAL,"rsa",rsa_main}, {FUNC_TYPE_GENERAL,"rsa",rsa_main},
#endif #endif
#ifndef OPENSSL_NO_RSA #ifndef NO_RSA
{FUNC_TYPE_GENERAL,"rsautl",rsautl_main}, {FUNC_TYPE_GENERAL,"rsautl",rsautl_main},
#endif #endif
#ifndef OPENSSL_NO_DSA #ifndef NO_DSA
{FUNC_TYPE_GENERAL,"dsa",dsa_main}, {FUNC_TYPE_GENERAL,"dsa",dsa_main},
#endif #endif
#ifndef OPENSSL_NO_DSA #ifndef NO_DSA
{FUNC_TYPE_GENERAL,"dsaparam",dsaparam_main}, {FUNC_TYPE_GENERAL,"dsaparam",dsaparam_main},
#endif
#ifndef OPENSSL_NO_EC
{FUNC_TYPE_GENERAL,"ec",ec_main},
#endif
#ifndef OPENSSL_NO_EC
{FUNC_TYPE_GENERAL,"ecparam",ecparam_main},
#endif #endif
{FUNC_TYPE_GENERAL,"x509",x509_main}, {FUNC_TYPE_GENERAL,"x509",x509_main},
#ifndef OPENSSL_NO_RSA #ifndef NO_RSA
{FUNC_TYPE_GENERAL,"genrsa",genrsa_main}, {FUNC_TYPE_GENERAL,"genrsa",genrsa_main},
#endif #endif
#ifndef OPENSSL_NO_DSA #ifndef NO_DSA
{FUNC_TYPE_GENERAL,"gendsa",gendsa_main}, {FUNC_TYPE_GENERAL,"gendsa",gendsa_main},
#endif #endif
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3)) #if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(NO_SSL3))
{FUNC_TYPE_GENERAL,"s_server",s_server_main}, {FUNC_TYPE_GENERAL,"s_server",s_server_main},
#endif #endif
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3)) #if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(NO_SSL3))
{FUNC_TYPE_GENERAL,"s_client",s_client_main}, {FUNC_TYPE_GENERAL,"s_client",s_client_main},
#endif #endif
#ifndef OPENSSL_NO_SPEED
{FUNC_TYPE_GENERAL,"speed",speed_main}, {FUNC_TYPE_GENERAL,"speed",speed_main},
#endif #if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(NO_SSL3))
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
{FUNC_TYPE_GENERAL,"s_time",s_time_main}, {FUNC_TYPE_GENERAL,"s_time",s_time_main},
#endif #endif
{FUNC_TYPE_GENERAL,"version",version_main}, {FUNC_TYPE_GENERAL,"version",version_main},
{FUNC_TYPE_GENERAL,"pkcs7",pkcs7_main}, {FUNC_TYPE_GENERAL,"pkcs7",pkcs7_main},
{FUNC_TYPE_GENERAL,"crl2pkcs7",crl2pkcs7_main}, {FUNC_TYPE_GENERAL,"crl2pkcs7",crl2pkcs7_main},
{FUNC_TYPE_GENERAL,"sess_id",sess_id_main}, {FUNC_TYPE_GENERAL,"sess_id",sess_id_main},
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3)) #if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(NO_SSL3))
{FUNC_TYPE_GENERAL,"ciphers",ciphers_main}, {FUNC_TYPE_GENERAL,"ciphers",ciphers_main},
#endif #endif
{FUNC_TYPE_GENERAL,"nseq",nseq_main}, {FUNC_TYPE_GENERAL,"nseq",nseq_main},
#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1) #if !defined(NO_DES) && !defined(NO_SHA1)
{FUNC_TYPE_GENERAL,"pkcs12",pkcs12_main}, {FUNC_TYPE_GENERAL,"pkcs12",pkcs12_main},
#endif #endif
{FUNC_TYPE_GENERAL,"pkcs8",pkcs8_main}, {FUNC_TYPE_GENERAL,"pkcs8",pkcs8_main},
{FUNC_TYPE_GENERAL,"spkac",spkac_main}, {FUNC_TYPE_GENERAL,"spkac",spkac_main},
{FUNC_TYPE_GENERAL,"smime",smime_main}, {FUNC_TYPE_GENERAL,"smime",smime_main},
{FUNC_TYPE_GENERAL,"rand",rand_main}, {FUNC_TYPE_GENERAL,"rand",rand_main},
#ifndef OPENSSL_NO_ENGINE
{FUNC_TYPE_GENERAL,"engine",engine_main},
#endif
{FUNC_TYPE_GENERAL,"ocsp",ocsp_main},
{FUNC_TYPE_GENERAL,"prime",prime_main},
#ifndef OPENSSL_NO_MD2
{FUNC_TYPE_MD,"md2",dgst_main}, {FUNC_TYPE_MD,"md2",dgst_main},
#endif
#ifndef OPENSSL_NO_MD4
{FUNC_TYPE_MD,"md4",dgst_main}, {FUNC_TYPE_MD,"md4",dgst_main},
#endif
#ifndef OPENSSL_NO_MD5
{FUNC_TYPE_MD,"md5",dgst_main}, {FUNC_TYPE_MD,"md5",dgst_main},
#endif
#ifndef OPENSSL_NO_SHA
{FUNC_TYPE_MD,"sha",dgst_main}, {FUNC_TYPE_MD,"sha",dgst_main},
#endif
#ifndef OPENSSL_NO_SHA1
{FUNC_TYPE_MD,"sha1",dgst_main}, {FUNC_TYPE_MD,"sha1",dgst_main},
#endif
#ifndef OPENSSL_NO_MDC2
{FUNC_TYPE_MD,"mdc2",dgst_main}, {FUNC_TYPE_MD,"mdc2",dgst_main},
#endif
#ifndef OPENSSL_NO_RMD160
{FUNC_TYPE_MD,"rmd160",dgst_main}, {FUNC_TYPE_MD,"rmd160",dgst_main},
#endif
#ifndef OPENSSL_NO_AES
{FUNC_TYPE_CIPHER,"aes-128-cbc",enc_main},
#endif
#ifndef OPENSSL_NO_AES
{FUNC_TYPE_CIPHER,"aes-128-ecb",enc_main},
#endif
#ifndef OPENSSL_NO_AES
{FUNC_TYPE_CIPHER,"aes-192-cbc",enc_main},
#endif
#ifndef OPENSSL_NO_AES
{FUNC_TYPE_CIPHER,"aes-192-ecb",enc_main},
#endif
#ifndef OPENSSL_NO_AES
{FUNC_TYPE_CIPHER,"aes-256-cbc",enc_main},
#endif
#ifndef OPENSSL_NO_AES
{FUNC_TYPE_CIPHER,"aes-256-ecb",enc_main},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FUNC_TYPE_CIPHER,"camellia-128-cbc",enc_main},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FUNC_TYPE_CIPHER,"camellia-128-ecb",enc_main},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FUNC_TYPE_CIPHER,"camellia-192-cbc",enc_main},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FUNC_TYPE_CIPHER,"camellia-192-ecb",enc_main},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FUNC_TYPE_CIPHER,"camellia-256-cbc",enc_main},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FUNC_TYPE_CIPHER,"camellia-256-ecb",enc_main},
#endif
{FUNC_TYPE_CIPHER,"base64",enc_main}, {FUNC_TYPE_CIPHER,"base64",enc_main},
#ifndef OPENSSL_NO_DES #ifndef NO_DES
{FUNC_TYPE_CIPHER,"des",enc_main}, {FUNC_TYPE_CIPHER,"des",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef NO_DES
{FUNC_TYPE_CIPHER,"des3",enc_main}, {FUNC_TYPE_CIPHER,"des3",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef NO_DES
{FUNC_TYPE_CIPHER,"desx",enc_main}, {FUNC_TYPE_CIPHER,"desx",enc_main},
#endif #endif
#ifndef OPENSSL_NO_IDEA #ifndef NO_IDEA
{FUNC_TYPE_CIPHER,"idea",enc_main}, {FUNC_TYPE_CIPHER,"idea",enc_main},
#endif #endif
#ifndef OPENSSL_NO_SEED #ifndef NO_RC4
{FUNC_TYPE_CIPHER,"seed",enc_main},
#endif
#ifndef OPENSSL_NO_RC4
{FUNC_TYPE_CIPHER,"rc4",enc_main}, {FUNC_TYPE_CIPHER,"rc4",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC4 #ifndef NO_RC4
{FUNC_TYPE_CIPHER,"rc4-40",enc_main}, {FUNC_TYPE_CIPHER,"rc4-40",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC2 #ifndef NO_RC2
{FUNC_TYPE_CIPHER,"rc2",enc_main}, {FUNC_TYPE_CIPHER,"rc2",enc_main},
#endif #endif
#ifndef OPENSSL_NO_BF #ifndef NO_BF
{FUNC_TYPE_CIPHER,"bf",enc_main}, {FUNC_TYPE_CIPHER,"bf",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAST #ifndef NO_CAST
{FUNC_TYPE_CIPHER,"cast",enc_main}, {FUNC_TYPE_CIPHER,"cast",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC5 #ifndef NO_RC5
{FUNC_TYPE_CIPHER,"rc5",enc_main}, {FUNC_TYPE_CIPHER,"rc5",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef NO_DES
{FUNC_TYPE_CIPHER,"des-ecb",enc_main}, {FUNC_TYPE_CIPHER,"des-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef NO_DES
{FUNC_TYPE_CIPHER,"des-ede",enc_main}, {FUNC_TYPE_CIPHER,"des-ede",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef NO_DES
{FUNC_TYPE_CIPHER,"des-ede3",enc_main}, {FUNC_TYPE_CIPHER,"des-ede3",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef NO_DES
{FUNC_TYPE_CIPHER,"des-cbc",enc_main}, {FUNC_TYPE_CIPHER,"des-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef NO_DES
{FUNC_TYPE_CIPHER,"des-ede-cbc",enc_main}, {FUNC_TYPE_CIPHER,"des-ede-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef NO_DES
{FUNC_TYPE_CIPHER,"des-ede3-cbc",enc_main}, {FUNC_TYPE_CIPHER,"des-ede3-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef NO_DES
{FUNC_TYPE_CIPHER,"des-cfb",enc_main}, {FUNC_TYPE_CIPHER,"des-cfb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef NO_DES
{FUNC_TYPE_CIPHER,"des-ede-cfb",enc_main}, {FUNC_TYPE_CIPHER,"des-ede-cfb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef NO_DES
{FUNC_TYPE_CIPHER,"des-ede3-cfb",enc_main}, {FUNC_TYPE_CIPHER,"des-ede3-cfb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef NO_DES
{FUNC_TYPE_CIPHER,"des-ofb",enc_main}, {FUNC_TYPE_CIPHER,"des-ofb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef NO_DES
{FUNC_TYPE_CIPHER,"des-ede-ofb",enc_main}, {FUNC_TYPE_CIPHER,"des-ede-ofb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef NO_DES
{FUNC_TYPE_CIPHER,"des-ede3-ofb",enc_main}, {FUNC_TYPE_CIPHER,"des-ede3-ofb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_IDEA #ifndef NO_IDEA
{FUNC_TYPE_CIPHER,"idea-cbc",enc_main}, {FUNC_TYPE_CIPHER,"idea-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_IDEA #ifndef NO_IDEA
{FUNC_TYPE_CIPHER,"idea-ecb",enc_main}, {FUNC_TYPE_CIPHER,"idea-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_IDEA #ifndef NO_IDEA
{FUNC_TYPE_CIPHER,"idea-cfb",enc_main}, {FUNC_TYPE_CIPHER,"idea-cfb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_IDEA #ifndef NO_IDEA
{FUNC_TYPE_CIPHER,"idea-ofb",enc_main}, {FUNC_TYPE_CIPHER,"idea-ofb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_SEED #ifndef NO_RC2
{FUNC_TYPE_CIPHER,"seed-cbc",enc_main},
#endif
#ifndef OPENSSL_NO_SEED
{FUNC_TYPE_CIPHER,"seed-ecb",enc_main},
#endif
#ifndef OPENSSL_NO_SEED
{FUNC_TYPE_CIPHER,"seed-cfb",enc_main},
#endif
#ifndef OPENSSL_NO_SEED
{FUNC_TYPE_CIPHER,"seed-ofb",enc_main},
#endif
#ifndef OPENSSL_NO_RC2
{FUNC_TYPE_CIPHER,"rc2-cbc",enc_main}, {FUNC_TYPE_CIPHER,"rc2-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC2 #ifndef NO_RC2
{FUNC_TYPE_CIPHER,"rc2-ecb",enc_main}, {FUNC_TYPE_CIPHER,"rc2-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC2 #ifndef NO_RC2
{FUNC_TYPE_CIPHER,"rc2-cfb",enc_main}, {FUNC_TYPE_CIPHER,"rc2-cfb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC2 #ifndef NO_RC2
{FUNC_TYPE_CIPHER,"rc2-ofb",enc_main}, {FUNC_TYPE_CIPHER,"rc2-ofb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC2 #ifndef NO_RC2
{FUNC_TYPE_CIPHER,"rc2-64-cbc",enc_main}, {FUNC_TYPE_CIPHER,"rc2-64-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC2 #ifndef NO_RC2
{FUNC_TYPE_CIPHER,"rc2-40-cbc",enc_main}, {FUNC_TYPE_CIPHER,"rc2-40-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_BF #ifndef NO_BF
{FUNC_TYPE_CIPHER,"bf-cbc",enc_main}, {FUNC_TYPE_CIPHER,"bf-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_BF #ifndef NO_BF
{FUNC_TYPE_CIPHER,"bf-ecb",enc_main}, {FUNC_TYPE_CIPHER,"bf-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_BF #ifndef NO_BF
{FUNC_TYPE_CIPHER,"bf-cfb",enc_main}, {FUNC_TYPE_CIPHER,"bf-cfb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_BF #ifndef NO_BF
{FUNC_TYPE_CIPHER,"bf-ofb",enc_main}, {FUNC_TYPE_CIPHER,"bf-ofb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAST #ifndef NO_CAST
{FUNC_TYPE_CIPHER,"cast5-cbc",enc_main}, {FUNC_TYPE_CIPHER,"cast5-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAST #ifndef NO_CAST
{FUNC_TYPE_CIPHER,"cast5-ecb",enc_main}, {FUNC_TYPE_CIPHER,"cast5-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAST #ifndef NO_CAST
{FUNC_TYPE_CIPHER,"cast5-cfb",enc_main}, {FUNC_TYPE_CIPHER,"cast5-cfb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAST #ifndef NO_CAST
{FUNC_TYPE_CIPHER,"cast5-ofb",enc_main}, {FUNC_TYPE_CIPHER,"cast5-ofb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAST #ifndef NO_CAST
{FUNC_TYPE_CIPHER,"cast-cbc",enc_main}, {FUNC_TYPE_CIPHER,"cast-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC5 #ifndef NO_RC5
{FUNC_TYPE_CIPHER,"rc5-cbc",enc_main}, {FUNC_TYPE_CIPHER,"rc5-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC5 #ifndef NO_RC5
{FUNC_TYPE_CIPHER,"rc5-ecb",enc_main}, {FUNC_TYPE_CIPHER,"rc5-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC5 #ifndef NO_RC5
{FUNC_TYPE_CIPHER,"rc5-cfb",enc_main}, {FUNC_TYPE_CIPHER,"rc5-cfb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC5 #ifndef NO_RC5
{FUNC_TYPE_CIPHER,"rc5-ofb",enc_main}, {FUNC_TYPE_CIPHER,"rc5-ofb",enc_main},
#endif #endif
{0,NULL,NULL} {0,NULL,NULL}

View File

@@ -16,8 +16,8 @@ print <<'EOF';
typedef struct { typedef struct {
int type; int type;
const char *name; char *name;
int (*func)(int argc,char *argv[]); int (*func)();
} FUNCTION; } FUNCTION;
FUNCTION functions[] = { FUNCTION functions[] = {
@@ -28,21 +28,15 @@ foreach (@ARGV)
push(@files,$_); push(@files,$_);
$str="\t{FUNC_TYPE_GENERAL,\"$_\",${_}_main},\n"; $str="\t{FUNC_TYPE_GENERAL,\"$_\",${_}_main},\n";
if (($_ =~ /^s_/) || ($_ =~ /^ciphers$/)) if (($_ =~ /^s_/) || ($_ =~ /^ciphers$/))
{ print "#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))\n${str}#endif\n"; } { print "#if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(NO_SSL3))\n${str}#endif\n"; }
elsif ( ($_ =~ /^speed$/))
{ print "#ifndef OPENSSL_NO_SPEED\n${str}#endif\n"; }
elsif ( ($_ =~ /^engine$/))
{ print "#ifndef OPENSSL_NO_ENGINE\n${str}#endif\n"; }
elsif ( ($_ =~ /^rsa$/) || ($_ =~ /^genrsa$/) || ($_ =~ /^rsautl$/)) elsif ( ($_ =~ /^rsa$/) || ($_ =~ /^genrsa$/) || ($_ =~ /^rsautl$/))
{ print "#ifndef OPENSSL_NO_RSA\n${str}#endif\n"; } { print "#ifndef NO_RSA\n${str}#endif\n"; }
elsif ( ($_ =~ /^dsa$/) || ($_ =~ /^gendsa$/) || ($_ =~ /^dsaparam$/)) elsif ( ($_ =~ /^dsa$/) || ($_ =~ /^gendsa$/) || ($_ =~ /^dsaparam$/))
{ print "#ifndef OPENSSL_NO_DSA\n${str}#endif\n"; } { print "#ifndef NO_DSA\n${str}#endif\n"; }
elsif ( ($_ =~ /^ec$/) || ($_ =~ /^ecparam$/))
{ print "#ifndef OPENSSL_NO_EC\n${str}#endif\n";}
elsif ( ($_ =~ /^dh$/) || ($_ =~ /^gendh$/) || ($_ =~ /^dhparam$/)) elsif ( ($_ =~ /^dh$/) || ($_ =~ /^gendh$/) || ($_ =~ /^dhparam$/))
{ print "#ifndef OPENSSL_NO_DH\n${str}#endif\n"; } { print "#ifndef NO_DH\n${str}#endif\n"; }
elsif ( ($_ =~ /^pkcs12$/)) elsif ( ($_ =~ /^pkcs12$/))
{ print "#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1)\n${str}#endif\n"; } { print "#if !defined(NO_DES) && !defined(NO_SHA1)\n${str}#endif\n"; }
else else
{ print $str; } { print $str; }
} }
@@ -50,25 +44,18 @@ foreach (@ARGV)
foreach ("md2","md4","md5","sha","sha1","mdc2","rmd160") foreach ("md2","md4","md5","sha","sha1","mdc2","rmd160")
{ {
push(@files,$_); push(@files,$_);
printf "#ifndef OPENSSL_NO_".uc($_)."\n\t{FUNC_TYPE_MD,\"".$_."\",dgst_main},\n#endif\n"; printf "\t{FUNC_TYPE_MD,\"%s\",dgst_main},\n",$_;
} }
foreach ( foreach (
"aes-128-cbc", "aes-128-ecb",
"aes-192-cbc", "aes-192-ecb",
"aes-256-cbc", "aes-256-ecb",
"camellia-128-cbc", "camellia-128-ecb",
"camellia-192-cbc", "camellia-192-ecb",
"camellia-256-cbc", "camellia-256-ecb",
"base64", "base64",
"des", "des3", "desx", "idea", "seed", "rc4", "rc4-40", "des", "des3", "desx", "idea", "rc4", "rc4-40",
"rc2", "bf", "cast", "rc5", "rc2", "bf", "cast", "rc5",
"des-ecb", "des-ede", "des-ede3", "des-ecb", "des-ede", "des-ede3",
"des-cbc", "des-ede-cbc","des-ede3-cbc", "des-cbc", "des-ede-cbc","des-ede3-cbc",
"des-cfb", "des-ede-cfb","des-ede3-cfb", "des-cfb", "des-ede-cfb","des-ede3-cfb",
"des-ofb", "des-ede-ofb","des-ede3-ofb", "des-ofb", "des-ede-ofb","des-ede3-ofb",
"idea-cbc","idea-ecb", "idea-cfb", "idea-ofb", "idea-cbc","idea-ecb", "idea-cfb", "idea-ofb",
"seed-cbc","seed-ecb", "seed-cfb", "seed-ofb",
"rc2-cbc", "rc2-ecb", "rc2-cfb","rc2-ofb", "rc2-64-cbc", "rc2-40-cbc", "rc2-cbc", "rc2-ecb", "rc2-cfb","rc2-ofb", "rc2-64-cbc", "rc2-40-cbc",
"bf-cbc", "bf-ecb", "bf-cfb", "bf-ofb", "bf-cbc", "bf-ecb", "bf-cfb", "bf-ofb",
"cast5-cbc","cast5-ecb", "cast5-cfb","cast5-ofb", "cast5-cbc","cast5-ecb", "cast5-cfb","cast5-ofb",
@@ -77,16 +64,13 @@ foreach (
push(@files,$_); push(@files,$_);
$t=sprintf("\t{FUNC_TYPE_CIPHER,\"%s\",enc_main},\n",$_); $t=sprintf("\t{FUNC_TYPE_CIPHER,\"%s\",enc_main},\n",$_);
if ($_ =~ /des/) { $t="#ifndef OPENSSL_NO_DES\n${t}#endif\n"; } if ($_ =~ /des/) { $t="#ifndef NO_DES\n${t}#endif\n"; }
elsif ($_ =~ /aes/) { $t="#ifndef OPENSSL_NO_AES\n${t}#endif\n"; } elsif ($_ =~ /idea/) { $t="#ifndef NO_IDEA\n${t}#endif\n"; }
elsif ($_ =~ /camellia/) { $t="#ifndef OPENSSL_NO_CAMELLIA\n${t}#endif\n"; } elsif ($_ =~ /rc4/) { $t="#ifndef NO_RC4\n${t}#endif\n"; }
elsif ($_ =~ /idea/) { $t="#ifndef OPENSSL_NO_IDEA\n${t}#endif\n"; } elsif ($_ =~ /rc2/) { $t="#ifndef NO_RC2\n${t}#endif\n"; }
elsif ($_ =~ /seed/) { $t="#ifndef OPENSSL_NO_SEED\n${t}#endif\n"; } elsif ($_ =~ /bf/) { $t="#ifndef NO_BF\n${t}#endif\n"; }
elsif ($_ =~ /rc4/) { $t="#ifndef OPENSSL_NO_RC4\n${t}#endif\n"; } elsif ($_ =~ /cast/) { $t="#ifndef NO_CAST\n${t}#endif\n"; }
elsif ($_ =~ /rc2/) { $t="#ifndef OPENSSL_NO_RC2\n${t}#endif\n"; } elsif ($_ =~ /rc5/) { $t="#ifndef NO_RC5\n${t}#endif\n"; }
elsif ($_ =~ /bf/) { $t="#ifndef OPENSSL_NO_BF\n${t}#endif\n"; }
elsif ($_ =~ /cast/) { $t="#ifndef OPENSSL_NO_CAST\n${t}#endif\n"; }
elsif ($_ =~ /rc5/) { $t="#ifndef OPENSSL_NO_RC5\n${t}#endif\n"; }
print $t; print $t;
} }

View File

@@ -1,57 +1,4 @@
/* apps/rand.c */ /* apps/rand.c */
/* ====================================================================
* Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@openssl.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
#include "apps.h" #include "apps.h"
@@ -76,9 +23,6 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
#ifndef OPENSSL_NO_ENGINE
ENGINE *e = NULL;
#endif
int i, r, ret = 1; int i, r, ret = 1;
int badopt; int badopt;
char *outfile = NULL; char *outfile = NULL;
@@ -86,9 +30,6 @@ int MAIN(int argc, char **argv)
int base64 = 0; int base64 = 0;
BIO *out = NULL; BIO *out = NULL;
int num = -1; int num = -1;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
apps_startup(); apps_startup();
@@ -96,9 +37,6 @@ int MAIN(int argc, char **argv)
if ((bio_err = BIO_new(BIO_s_file())) != NULL) if ((bio_err = BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto err;
badopt = 0; badopt = 0;
i = 0; i = 0;
while (!badopt && argv[++i] != NULL) while (!badopt && argv[++i] != NULL)
@@ -110,15 +48,6 @@ int MAIN(int argc, char **argv)
else else
badopt = 1; badopt = 1;
} }
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(argv[i], "-engine") == 0)
{
if ((argv[i+1] != NULL) && (engine == NULL))
engine = argv[++i];
else
badopt = 1;
}
#endif
else if (strcmp(argv[i], "-rand") == 0) else if (strcmp(argv[i], "-rand") == 0)
{ {
if ((argv[i+1] != NULL) && (inrand == NULL)) if ((argv[i+1] != NULL) && (inrand == NULL))
@@ -155,19 +84,12 @@ int MAIN(int argc, char **argv)
{ {
BIO_printf(bio_err, "Usage: rand [options] num\n"); BIO_printf(bio_err, "Usage: rand [options] num\n");
BIO_printf(bio_err, "where options are\n"); BIO_printf(bio_err, "where options are\n");
BIO_printf(bio_err, "-out file - write to file\n"); BIO_printf(bio_err, "-out file - write to file\n");
#ifndef OPENSSL_NO_ENGINE BIO_printf(bio_err, "-rand file%cfile%c... - seed PRNG from files\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
BIO_printf(bio_err, "-engine e - use engine e, possibly a hardware device.\n"); BIO_printf(bio_err, "-base64 - encode output\n");
#endif
BIO_printf(bio_err, "-rand file%cfile%c... - seed PRNG from files\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
BIO_printf(bio_err, "-base64 - encode output\n");
goto err; goto err;
} }
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
app_RAND_load_file(NULL, bio_err, (inrand != NULL)); app_RAND_load_file(NULL, bio_err, (inrand != NULL));
if (inrand != NULL) if (inrand != NULL)
BIO_printf(bio_err,"%ld semi-random bytes loaded\n", BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
@@ -181,7 +103,7 @@ int MAIN(int argc, char **argv)
else else
{ {
r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -205,7 +127,7 @@ int MAIN(int argc, char **argv)
int chunk; int chunk;
chunk = num; chunk = num;
if (chunk > (int)sizeof(buf)) if (chunk > sizeof buf)
chunk = sizeof buf; chunk = sizeof buf;
r = RAND_bytes(buf, chunk); r = RAND_bytes(buf, chunk);
if (r <= 0) if (r <= 0)
@@ -213,7 +135,7 @@ int MAIN(int argc, char **argv)
BIO_write(out, buf, chunk); BIO_write(out, buf, chunk);
num -= chunk; num -= chunk;
} }
(void)BIO_flush(out); BIO_flush(out);
app_RAND_write_file(NULL, bio_err); app_RAND_write_file(NULL, bio_err);
ret = 0; ret = 0;
@@ -222,6 +144,5 @@ err:
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
if (out) if (out)
BIO_free_all(out); BIO_free_all(out);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }

File diff suppressed because it is too large Load Diff

View File

@@ -56,8 +56,7 @@
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
#include <openssl/opensslconf.h> #ifndef NO_RSA
#ifndef OPENSSL_NO_RSA
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@@ -69,7 +68,6 @@
#include <openssl/evp.h> #include <openssl/evp.h>
#include <openssl/x509.h> #include <openssl/x509.h>
#include <openssl/pem.h> #include <openssl/pem.h>
#include <openssl/bn.h>
#undef PROG #undef PROG
#define PROG rsa_main #define PROG rsa_main
@@ -81,13 +79,6 @@
* -des - encrypt output if PEM format with DES in cbc mode * -des - encrypt output if PEM format with DES in cbc mode
* -des3 - encrypt output if PEM format * -des3 - encrypt output if PEM format
* -idea - encrypt output if PEM format * -idea - encrypt output if PEM format
* -seed - encrypt output if PEM format
* -aes128 - encrypt output if PEM format
* -aes192 - encrypt output if PEM format
* -aes256 - encrypt output if PEM format
* -camellia128 - encrypt output if PEM format
* -camellia192 - encrypt output if PEM format
* -camellia256 - encrypt output if PEM format
* -text - print a text version * -text - print a text version
* -modulus - print the RSA key modulus * -modulus - print the RSA key modulus
* -check - verify key consistency * -check - verify key consistency
@@ -99,20 +90,16 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
ENGINE *e = NULL;
int ret=1; int ret=1;
RSA *rsa=NULL; RSA *rsa=NULL;
int i,badops=0, sgckey=0; int i,badops=0, sgckey=0;
const EVP_CIPHER *enc=NULL; const EVP_CIPHER *enc=NULL;
BIO *out=NULL; BIO *in=NULL,*out=NULL;
int informat,outformat,text=0,check=0,noout=0; int informat,outformat,text=0,check=0,noout=0;
int pubin = 0, pubout = 0; int pubin = 0, pubout = 0;
char *infile,*outfile,*prog; char *infile,*outfile,*prog;
char *passargin = NULL, *passargout = NULL; char *passargin = NULL, *passargout = NULL;
char *passin = NULL, *passout = NULL; char *passin = NULL, *passout = NULL;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
int modulus=0; int modulus=0;
apps_startup(); apps_startup();
@@ -121,9 +108,6 @@ int MAIN(int argc, char **argv)
if ((bio_err=BIO_new(BIO_s_file())) != NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto end;
infile=NULL; infile=NULL;
outfile=NULL; outfile=NULL;
informat=FORMAT_PEM; informat=FORMAT_PEM;
@@ -164,13 +148,6 @@ int MAIN(int argc, char **argv)
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
passargout= *(++argv); passargout= *(++argv);
} }
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine= *(++argv);
}
#endif
else if (strcmp(*argv,"-sgckey") == 0) else if (strcmp(*argv,"-sgckey") == 0)
sgckey=1; sgckey=1;
else if (strcmp(*argv,"-pubin") == 0) else if (strcmp(*argv,"-pubin") == 0)
@@ -209,19 +186,8 @@ bad:
BIO_printf(bio_err," -passout arg output file pass phrase source\n"); BIO_printf(bio_err," -passout arg output file pass phrase source\n");
BIO_printf(bio_err," -des encrypt PEM output with cbc des\n"); BIO_printf(bio_err," -des encrypt PEM output with cbc des\n");
BIO_printf(bio_err," -des3 encrypt PEM output with ede cbc des using 168 bit key\n"); BIO_printf(bio_err," -des3 encrypt PEM output with ede cbc des using 168 bit key\n");
#ifndef OPENSSL_NO_IDEA #ifndef NO_IDEA
BIO_printf(bio_err," -idea encrypt PEM output with cbc idea\n"); BIO_printf(bio_err," -idea encrypt PEM output with cbc idea\n");
#endif
#ifndef OPENSSL_NO_SEED
BIO_printf(bio_err," -seed encrypt PEM output with cbc seed\n");
#endif
#ifndef OPENSSL_NO_AES
BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
BIO_printf(bio_err," encrypt PEM output with cbc aes\n");
#endif
#ifndef OPENSSL_NO_CAMELLIA
BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
BIO_printf(bio_err," encrypt PEM output with cbc camellia\n");
#endif #endif
BIO_printf(bio_err," -text print the key in text\n"); BIO_printf(bio_err," -text print the key in text\n");
BIO_printf(bio_err," -noout don't print key out\n"); BIO_printf(bio_err," -noout don't print key out\n");
@@ -229,18 +195,11 @@ bad:
BIO_printf(bio_err," -check verify key consistency\n"); BIO_printf(bio_err," -check verify key consistency\n");
BIO_printf(bio_err," -pubin expect a public key in input file\n"); BIO_printf(bio_err," -pubin expect a public key in input file\n");
BIO_printf(bio_err," -pubout output a public key\n"); BIO_printf(bio_err," -pubout output a public key\n");
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
#endif
goto end; goto end;
} }
ERR_load_crypto_strings(); ERR_load_crypto_strings();
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
BIO_printf(bio_err, "Error getting passwords\n"); BIO_printf(bio_err, "Error getting passwords\n");
goto end; goto end;
@@ -251,29 +210,69 @@ bad:
goto end; goto end;
} }
in=BIO_new(BIO_s_file());
out=BIO_new(BIO_s_file()); out=BIO_new(BIO_s_file());
if ((in == NULL) || (out == NULL))
{
ERR_print_errors(bio_err);
goto end;
}
{ if (infile == NULL)
EVP_PKEY *pkey; BIO_set_fp(in,stdin,BIO_NOCLOSE);
else
{
if (BIO_read_filename(in,infile) <= 0)
{
perror(infile);
goto end;
}
}
if (pubin) BIO_printf(bio_err,"read RSA key\n");
pkey = load_pubkey(bio_err, infile, if (informat == FORMAT_ASN1) {
(informat == FORMAT_NETSCAPE && sgckey ? if (pubin) rsa=d2i_RSA_PUBKEY_bio(in,NULL);
FORMAT_IISSGC : informat), 1, else rsa=d2i_RSAPrivateKey_bio(in,NULL);
passin, e, "Public Key");
else
pkey = load_key(bio_err, infile,
(informat == FORMAT_NETSCAPE && sgckey ?
FORMAT_IISSGC : informat), 1,
passin, e, "Private Key");
if (pkey != NULL)
rsa = pkey == NULL ? NULL : EVP_PKEY_get1_RSA(pkey);
EVP_PKEY_free(pkey);
} }
#ifndef NO_RC4
else if (informat == FORMAT_NETSCAPE)
{
BUF_MEM *buf=NULL;
unsigned char *p;
int size=0;
buf=BUF_MEM_new();
for (;;)
{
if ((buf == NULL) || (!BUF_MEM_grow(buf,size+1024*10)))
goto end;
i=BIO_read(in,&(buf->data[size]),1024*10);
size+=i;
if (i == 0) break;
if (i < 0)
{
perror("reading private key");
BUF_MEM_free(buf);
goto end;
}
}
p=(unsigned char *)buf->data;
rsa=d2i_RSA_NET(NULL,&p,(long)size,NULL, sgckey);
BUF_MEM_free(buf);
}
#endif
else if (informat == FORMAT_PEM) {
if(pubin) rsa=PEM_read_bio_RSA_PUBKEY(in,NULL,NULL,NULL);
else rsa=PEM_read_bio_RSAPrivateKey(in,NULL, NULL,passin);
}
else
{
BIO_printf(bio_err,"bad input format specified for key\n");
goto end;
}
if (rsa == NULL) if (rsa == NULL)
{ {
BIO_printf(bio_err,"unable to load key\n");
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
goto end; goto end;
} }
@@ -281,7 +280,7 @@ bad:
if (outfile == NULL) if (outfile == NULL)
{ {
BIO_set_fp(out,stdout,BIO_NOCLOSE); BIO_set_fp(out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -320,14 +319,14 @@ bad:
BIO_printf(out,"RSA key ok\n"); BIO_printf(out,"RSA key ok\n");
else if (r == 0) else if (r == 0)
{ {
unsigned long err; long e;
while ((err = ERR_peek_error()) != 0 && while ((e = ERR_peek_error()) != 0 &&
ERR_GET_LIB(err) == ERR_LIB_RSA && ERR_GET_LIB(e) == ERR_LIB_RSA &&
ERR_GET_FUNC(err) == RSA_F_RSA_CHECK_KEY && ERR_GET_FUNC(e) == RSA_F_RSA_CHECK_KEY &&
ERR_GET_REASON(err) != ERR_R_MALLOC_FAILURE) ERR_GET_REASON(e) != ERR_R_MALLOC_FAILURE)
{ {
BIO_printf(out, "RSA key error: %s\n", ERR_reason_error_string(err)); BIO_printf(out, "RSA key error: %s\n", ERR_reason_error_string(e));
ERR_get_error(); /* remove e from error stack */ ERR_get_error(); /* remove e from error stack */
} }
} }
@@ -349,7 +348,7 @@ bad:
if(pubout || pubin) i=i2d_RSA_PUBKEY_bio(out,rsa); if(pubout || pubin) i=i2d_RSA_PUBKEY_bio(out,rsa);
else i=i2d_RSAPrivateKey_bio(out,rsa); else i=i2d_RSAPrivateKey_bio(out,rsa);
} }
#ifndef OPENSSL_NO_RC4 #ifndef NO_RC4
else if (outformat == FORMAT_NETSCAPE) else if (outformat == FORMAT_NETSCAPE)
{ {
unsigned char *p,*pp; unsigned char *p,*pp;
@@ -385,14 +384,14 @@ bad:
else else
ret=0; ret=0;
end: end:
if(in != NULL) BIO_free(in);
if(out != NULL) BIO_free_all(out); if(out != NULL) BIO_free_all(out);
if(rsa != NULL) RSA_free(rsa); if(rsa != NULL) RSA_free(rsa);
if(passin) OPENSSL_free(passin); if(passin) OPENSSL_free(passin);
if(passout) OPENSSL_free(passout); if(passout) OPENSSL_free(passout);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }
#else /* !OPENSSL_NO_RSA */ #else /* !NO_RSA */
# if PEDANTIC # if PEDANTIC
static void *dummy=&dummy; static void *dummy=&dummy;

View File

@@ -56,14 +56,12 @@
* *
*/ */
#include <openssl/opensslconf.h> #ifndef NO_RSA
#ifndef OPENSSL_NO_RSA
#include "apps.h" #include "apps.h"
#include <string.h> #include <string.h>
#include <openssl/err.h> #include <openssl/err.h>
#include <openssl/pem.h> #include <openssl/pem.h>
#include <openssl/rsa.h>
#define RSA_SIGN 1 #define RSA_SIGN 1
#define RSA_VERIFY 2 #define RSA_VERIFY 2
@@ -84,12 +82,8 @@ int MAIN(int argc, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
ENGINE *e = NULL;
BIO *in = NULL, *out = NULL; BIO *in = NULL, *out = NULL;
char *infile = NULL, *outfile = NULL; char *infile = NULL, *outfile = NULL;
#ifndef OPENSSL_NO_ENGINE
char *engine = NULL;
#endif
char *keyfile = NULL; char *keyfile = NULL;
char rsa_mode = RSA_VERIFY, key_type = KEY_PRIVKEY; char rsa_mode = RSA_VERIFY, key_type = KEY_PRIVKEY;
int keyform = FORMAT_PEM; int keyform = FORMAT_PEM;
@@ -99,7 +93,6 @@ int MAIN(int argc, char **argv)
EVP_PKEY *pkey = NULL; EVP_PKEY *pkey = NULL;
RSA *rsa = NULL; RSA *rsa = NULL;
unsigned char *rsa_in = NULL, *rsa_out = NULL, pad; unsigned char *rsa_in = NULL, *rsa_out = NULL, pad;
char *passargin = NULL, *passin = NULL;
int rsa_inlen, rsa_outlen = 0; int rsa_inlen, rsa_outlen = 0;
int keysize; int keysize;
@@ -109,9 +102,6 @@ int MAIN(int argc, char **argv)
argv++; argv++;
if(!bio_err) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); if(!bio_err) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
if (!load_config(bio_err, NULL))
goto end;
ERR_load_crypto_strings(); ERR_load_crypto_strings();
OpenSSL_add_all_algorithms(); OpenSSL_add_all_algorithms();
pad = RSA_PKCS1_PADDING; pad = RSA_PKCS1_PADDING;
@@ -127,17 +117,6 @@ int MAIN(int argc, char **argv)
} else if(!strcmp(*argv, "-inkey")) { } else if(!strcmp(*argv, "-inkey")) {
if (--argc < 1) badarg = 1; if (--argc < 1) badarg = 1;
keyfile = *(++argv); keyfile = *(++argv);
} else if (!strcmp(*argv,"-passin")) {
if (--argc < 1) badarg = 1;
passargin= *(++argv);
} else if (strcmp(*argv,"-keyform") == 0) {
if (--argc < 1) badarg = 1;
keyform=str2fmt(*(++argv));
#ifndef OPENSSL_NO_ENGINE
} else if(!strcmp(*argv, "-engine")) {
if (--argc < 1) badarg = 1;
engine = *(++argv);
#endif
} else if(!strcmp(*argv, "-pubin")) { } else if(!strcmp(*argv, "-pubin")) {
key_type = KEY_PUBKEY; key_type = KEY_PUBKEY;
} else if(!strcmp(*argv, "-certin")) { } else if(!strcmp(*argv, "-certin")) {
@@ -149,7 +128,6 @@ int MAIN(int argc, char **argv)
else if(!strcmp(*argv, "-oaep")) pad = RSA_PKCS1_OAEP_PADDING; else if(!strcmp(*argv, "-oaep")) pad = RSA_PKCS1_OAEP_PADDING;
else if(!strcmp(*argv, "-ssl")) pad = RSA_SSLV23_PADDING; else if(!strcmp(*argv, "-ssl")) pad = RSA_SSLV23_PADDING;
else if(!strcmp(*argv, "-pkcs")) pad = RSA_PKCS1_PADDING; else if(!strcmp(*argv, "-pkcs")) pad = RSA_PKCS1_PADDING;
else if(!strcmp(*argv, "-x931")) pad = RSA_X931_PADDING;
else if(!strcmp(*argv, "-sign")) { else if(!strcmp(*argv, "-sign")) {
rsa_mode = RSA_SIGN; rsa_mode = RSA_SIGN;
need_priv = 1; need_priv = 1;
@@ -173,31 +151,20 @@ int MAIN(int argc, char **argv)
goto end; goto end;
} }
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
BIO_printf(bio_err, "Error getting password\n");
goto end;
}
/* FIXME: seed PRNG only if needed */ /* FIXME: seed PRNG only if needed */
app_RAND_load_file(NULL, bio_err, 0); app_RAND_load_file(NULL, bio_err, 0);
switch(key_type) { switch(key_type) {
case KEY_PRIVKEY: case KEY_PRIVKEY:
pkey = load_key(bio_err, keyfile, keyform, 0, pkey = load_key(bio_err, keyfile, keyform, NULL);
passin, e, "Private Key");
break; break;
case KEY_PUBKEY: case KEY_PUBKEY:
pkey = load_pubkey(bio_err, keyfile, keyform, 0, pkey = load_pubkey(bio_err, keyfile, keyform);
NULL, e, "Public Key");
break; break;
case KEY_CERT: case KEY_CERT:
x = load_cert(bio_err, keyfile, keyform, x = load_cert(bio_err, keyfile, keyform);
NULL, e, "Certificate");
if(x) { if(x) {
pkey = X509_get_pubkey(x); pkey = X509_get_pubkey(x);
X509_free(x); X509_free(x);
@@ -206,6 +173,7 @@ int MAIN(int argc, char **argv)
} }
if(!pkey) { if(!pkey) {
BIO_printf(bio_err, "Error loading key\n");
return 1; return 1;
} }
@@ -235,7 +203,7 @@ int MAIN(int argc, char **argv)
} }
} else { } else {
out = BIO_new_fp(stdout, BIO_NOCLOSE); out = BIO_new_fp(stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -301,7 +269,6 @@ int MAIN(int argc, char **argv)
BIO_free_all(out); BIO_free_all(out);
if(rsa_in) OPENSSL_free(rsa_in); if(rsa_in) OPENSSL_free(rsa_in);
if(rsa_out) OPENSSL_free(rsa_out); if(rsa_out) OPENSSL_free(rsa_out);
if(passin) OPENSSL_free(passin);
return ret; return ret;
} }
@@ -311,7 +278,6 @@ static void usage()
BIO_printf(bio_err, "-in file input file\n"); BIO_printf(bio_err, "-in file input file\n");
BIO_printf(bio_err, "-out file output file\n"); BIO_printf(bio_err, "-out file output file\n");
BIO_printf(bio_err, "-inkey file input key\n"); BIO_printf(bio_err, "-inkey file input key\n");
BIO_printf(bio_err, "-keyform arg private key format - default PEM\n");
BIO_printf(bio_err, "-pubin input is an RSA public\n"); BIO_printf(bio_err, "-pubin input is an RSA public\n");
BIO_printf(bio_err, "-certin input is a certificate carrying an RSA public key\n"); BIO_printf(bio_err, "-certin input is a certificate carrying an RSA public key\n");
BIO_printf(bio_err, "-ssl use SSL v2 padding\n"); BIO_printf(bio_err, "-ssl use SSL v2 padding\n");
@@ -323,11 +289,6 @@ static void usage()
BIO_printf(bio_err, "-encrypt encrypt with public key\n"); BIO_printf(bio_err, "-encrypt encrypt with public key\n");
BIO_printf(bio_err, "-decrypt decrypt with private key\n"); BIO_printf(bio_err, "-decrypt decrypt with private key\n");
BIO_printf(bio_err, "-hexdump hex dump output\n"); BIO_printf(bio_err, "-hexdump hex dump output\n");
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n");
BIO_printf (bio_err, "-passin arg pass phrase source\n");
#endif
} }
#endif #endif

View File

@@ -55,73 +55,9 @@
* copied and put under another distribution licence * copied and put under another distribution licence
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
/* ====================================================================
* Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@openssl.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
#if !defined(OPENSSL_SYS_NETWARE) /* conflicts with winsock2 stuff on netware */
#include <sys/types.h> #include <sys/types.h>
#endif #if (defined(VMS) || defined(__VMS)) && !defined(FD_SET)
#include <openssl/opensslconf.h>
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
#include <conio.h>
#endif
#ifdef OPENSSL_SYS_MSDOS
#define _kbhit kbhit
#endif
#if defined(OPENSSL_SYS_VMS) && !defined(FD_SET)
/* VAX C does not defined fd_set and friends, but it's actually quite simple */ /* VAX C does not defined fd_set and friends, but it's actually quite simple */
/* These definitions are borrowed from SOCKETSHR. /Richard Levitte */ /* These definitions are borrowed from SOCKETSHR. /Richard Levitte */
#define MAX_NOFILE 32 #define MAX_NOFILE 32
@@ -148,23 +84,28 @@ typedef fd_mask fd_set;
#define PORT_STR "4433" #define PORT_STR "4433"
#define PROTOCOL "tcp" #define PROTOCOL "tcp"
int do_server(int port, int type, int *ret, int (*cb) (char *hostname, int s, unsigned char *context), unsigned char *context); int do_server(int port, int *ret, int (*cb) (), char *context);
#ifdef HEADER_X509_H #ifdef HEADER_X509_H
int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx); int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx);
#else
int MS_CALLBACK verify_callback(int ok, char *ctx);
#endif #endif
#ifdef HEADER_SSL_H #ifdef HEADER_SSL_H
int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file); int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file);
int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key); #else
int set_cert_stuff(char *ctx, char *cert_file, char *key_file);
#endif #endif
int init_client(int *sock, char *server, int port, int type); int init_client(int *sock, char *server, int port);
int should_retry(int i); int should_retry(int i);
int extract_port(char *str, short *port_ptr); int extract_port(char *str, short *port_ptr);
int extract_host_port(char *str,char **host_ptr,unsigned char *ip,short *p); int extract_host_port(char *str,char **host_ptr,unsigned char *ip,short *p);
long MS_CALLBACK bio_dump_callback(BIO *bio, int cmd, const char *argp, long MS_CALLBACK bio_dump_cb(BIO *bio, int cmd, const char *argp,
int argi, long argl, long ret); int argi, long argl, long ret);
#ifdef HEADER_SSL_H #ifdef HEADER_SSL_H
void MS_CALLBACK apps_ssl_info_callback(const SSL *s, int where, int ret); void MS_CALLBACK apps_ssl_info_callback(SSL *s, int where, int ret);
void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg); #else
void MS_CALLBACK apps_ssl_info_callback(char *s, int where, int ret);
#endif #endif

View File

@@ -55,59 +55,6 @@
* copied and put under another distribution licence * copied and put under another distribution licence
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
/* ====================================================================
* Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@openssl.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@@ -134,7 +81,7 @@ int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
err= X509_STORE_CTX_get_error(ctx); err= X509_STORE_CTX_get_error(ctx);
depth= X509_STORE_CTX_get_error_depth(ctx); depth= X509_STORE_CTX_get_error_depth(ctx);
X509_NAME_oneline(X509_get_subject_name(err_cert),buf,sizeof buf); X509_NAME_oneline(X509_get_subject_name(err_cert),buf,256);
BIO_printf(bio_err,"depth=%d %s\n",depth,buf); BIO_printf(bio_err,"depth=%d %s\n",depth,buf);
if (!ok) if (!ok)
{ {
@@ -154,7 +101,7 @@ int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
switch (ctx->error) switch (ctx->error)
{ {
case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert),buf,sizeof buf); X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert),buf,256);
BIO_printf(bio_err,"issuer= %s\n",buf); BIO_printf(bio_err,"issuer= %s\n",buf);
break; break;
case X509_V_ERR_CERT_NOT_YET_VALID: case X509_V_ERR_CERT_NOT_YET_VALID:
@@ -229,36 +176,8 @@ int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file)
return(1); return(1);
} }
int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key) long MS_CALLBACK bio_dump_cb(BIO *bio, int cmd, const char *argp, int argi,
{ long argl, long ret)
if (cert == NULL)
return 1;
if (SSL_CTX_use_certificate(ctx,cert) <= 0)
{
BIO_printf(bio_err,"error setting certificate\n");
ERR_print_errors(bio_err);
return 0;
}
if (SSL_CTX_use_PrivateKey(ctx,key) <= 0)
{
BIO_printf(bio_err,"error setting private key\n");
ERR_print_errors(bio_err);
return 0;
}
/* Now we know that a key and cert have been set against
* the SSL context */
if (!SSL_CTX_check_private_key(ctx))
{
BIO_printf(bio_err,"Private key does not match the certificate public key\n");
return 0;
}
return 1;
}
long MS_CALLBACK bio_dump_callback(BIO *bio, int cmd, const char *argp,
int argi, long argl, long ret)
{ {
BIO *out; BIO *out;
@@ -267,23 +186,23 @@ long MS_CALLBACK bio_dump_callback(BIO *bio, int cmd, const char *argp,
if (cmd == (BIO_CB_READ|BIO_CB_RETURN)) if (cmd == (BIO_CB_READ|BIO_CB_RETURN))
{ {
BIO_printf(out,"read from %p [%p] (%d bytes => %ld (0x%lX))\n", BIO_printf(out,"read from %08X [%08lX] (%d bytes => %ld (0x%X))\n",
(void *)bio,argp,argi,ret,ret); bio,argp,argi,ret,ret);
BIO_dump(out,argp,(int)ret); BIO_dump(out,argp,(int)ret);
return(ret); return(ret);
} }
else if (cmd == (BIO_CB_WRITE|BIO_CB_RETURN)) else if (cmd == (BIO_CB_WRITE|BIO_CB_RETURN))
{ {
BIO_printf(out,"write to %p [%p] (%d bytes => %ld (0x%lX))\n", BIO_printf(out,"write to %08X [%08lX] (%d bytes => %ld (0x%X))\n",
(void *)bio,argp,argi,ret,ret); bio,argp,argi,ret,ret);
BIO_dump(out,argp,(int)ret); BIO_dump(out,argp,(int)ret);
} }
return(ret); return(ret);
} }
void MS_CALLBACK apps_ssl_info_callback(const SSL *s, int where, int ret) void MS_CALLBACK apps_ssl_info_callback(SSL *s, int where, int ret)
{ {
const char *str; char *str;
int w; int w;
w=where& ~SSL_ST_MASK; w=where& ~SSL_ST_MASK;
@@ -317,261 +236,3 @@ void MS_CALLBACK apps_ssl_info_callback(const SSL *s, int where, int ret)
} }
} }
void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)
{
BIO *bio = arg;
const char *str_write_p, *str_version, *str_content_type = "", *str_details1 = "", *str_details2= "";
str_write_p = write_p ? ">>>" : "<<<";
switch (version)
{
case SSL2_VERSION:
str_version = "SSL 2.0";
break;
case SSL3_VERSION:
str_version = "SSL 3.0 ";
break;
case TLS1_VERSION:
str_version = "TLS 1.0 ";
break;
default:
str_version = "???";
}
if (version == SSL2_VERSION)
{
str_details1 = "???";
if (len > 0)
{
switch (((const unsigned char*)buf)[0])
{
case 0:
str_details1 = ", ERROR:";
str_details2 = " ???";
if (len >= 3)
{
unsigned err = (((const unsigned char*)buf)[1]<<8) + ((const unsigned char*)buf)[2];
switch (err)
{
case 0x0001:
str_details2 = " NO-CIPHER-ERROR";
break;
case 0x0002:
str_details2 = " NO-CERTIFICATE-ERROR";
break;
case 0x0004:
str_details2 = " BAD-CERTIFICATE-ERROR";
break;
case 0x0006:
str_details2 = " UNSUPPORTED-CERTIFICATE-TYPE-ERROR";
break;
}
}
break;
case 1:
str_details1 = ", CLIENT-HELLO";
break;
case 2:
str_details1 = ", CLIENT-MASTER-KEY";
break;
case 3:
str_details1 = ", CLIENT-FINISHED";
break;
case 4:
str_details1 = ", SERVER-HELLO";
break;
case 5:
str_details1 = ", SERVER-VERIFY";
break;
case 6:
str_details1 = ", SERVER-FINISHED";
break;
case 7:
str_details1 = ", REQUEST-CERTIFICATE";
break;
case 8:
str_details1 = ", CLIENT-CERTIFICATE";
break;
}
}
}
if (version == SSL3_VERSION || version == TLS1_VERSION)
{
switch (content_type)
{
case 20:
str_content_type = "ChangeCipherSpec";
break;
case 21:
str_content_type = "Alert";
break;
case 22:
str_content_type = "Handshake";
break;
}
if (content_type == 21) /* Alert */
{
str_details1 = ", ???";
if (len == 2)
{
switch (((const unsigned char*)buf)[0])
{
case 1:
str_details1 = ", warning";
break;
case 2:
str_details1 = ", fatal";
break;
}
str_details2 = " ???";
switch (((const unsigned char*)buf)[1])
{
case 0:
str_details2 = " close_notify";
break;
case 10:
str_details2 = " unexpected_message";
break;
case 20:
str_details2 = " bad_record_mac";
break;
case 21:
str_details2 = " decryption_failed";
break;
case 22:
str_details2 = " record_overflow";
break;
case 30:
str_details2 = " decompression_failure";
break;
case 40:
str_details2 = " handshake_failure";
break;
case 42:
str_details2 = " bad_certificate";
break;
case 43:
str_details2 = " unsupported_certificate";
break;
case 44:
str_details2 = " certificate_revoked";
break;
case 45:
str_details2 = " certificate_expired";
break;
case 46:
str_details2 = " certificate_unknown";
break;
case 47:
str_details2 = " illegal_parameter";
break;
case 48:
str_details2 = " unknown_ca";
break;
case 49:
str_details2 = " access_denied";
break;
case 50:
str_details2 = " decode_error";
break;
case 51:
str_details2 = " decrypt_error";
break;
case 60:
str_details2 = " export_restriction";
break;
case 70:
str_details2 = " protocol_version";
break;
case 71:
str_details2 = " insufficient_security";
break;
case 80:
str_details2 = " internal_error";
break;
case 90:
str_details2 = " user_canceled";
break;
case 100:
str_details2 = " no_renegotiation";
break;
}
}
}
if (content_type == 22) /* Handshake */
{
str_details1 = "???";
if (len > 0)
{
switch (((const unsigned char*)buf)[0])
{
case 0:
str_details1 = ", HelloRequest";
break;
case 1:
str_details1 = ", ClientHello";
break;
case 2:
str_details1 = ", ServerHello";
break;
case 11:
str_details1 = ", Certificate";
break;
case 12:
str_details1 = ", ServerKeyExchange";
break;
case 13:
str_details1 = ", CertificateRequest";
break;
case 14:
str_details1 = ", ServerHelloDone";
break;
case 15:
str_details1 = ", CertificateVerify";
break;
case 16:
str_details1 = ", ClientKeyExchange";
break;
case 20:
str_details1 = ", Finished";
break;
}
}
}
}
BIO_printf(bio, "%s %s%s [length %04lx]%s%s\n", str_write_p, str_version, str_content_type, (unsigned long)len, str_details1, str_details2);
if (len > 0)
{
size_t num, i;
BIO_printf(bio, " ");
num = len;
#if 0
if (num > 16)
num = 16;
#endif
for (i = 0; i < num; i++)
{
if (i % 16 == 0 && i > 0)
BIO_printf(bio, "\n ");
BIO_printf(bio, " %02x", ((const unsigned char*)buf)[i]);
}
if (i < len)
BIO_printf(bio, " ...");
BIO_printf(bio, "\n");
}
(void)BIO_flush(bio);
}

View File

@@ -55,66 +55,12 @@
* copied and put under another distribution licence * copied and put under another distribution licence
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
/* ====================================================================
* Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@openssl.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
#include <assert.h> #include <assert.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <openssl/e_os2.h> #ifdef NO_STDIO
#ifdef OPENSSL_NO_STDIO
#define APPS_WIN16 #define APPS_WIN16
#endif #endif
@@ -122,7 +68,7 @@
recursive header file inclusion, resulting in the compiler complaining recursive header file inclusion, resulting in the compiler complaining
that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which
is needed to have fileno() declared correctly... So let's define u_int */ is needed to have fileno() declared correctly... So let's define u_int */
#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__U_INT) #if defined(VMS) && defined(__DECC) && !defined(__U_INT)
#define __U_INT #define __U_INT
typedef unsigned int u_int; typedef unsigned int u_int;
#endif #endif
@@ -135,18 +81,13 @@ typedef unsigned int u_int;
#include <openssl/pem.h> #include <openssl/pem.h>
#include <openssl/rand.h> #include <openssl/rand.h>
#include "s_apps.h" #include "s_apps.h"
#include "timeouts.h"
#ifdef OPENSSL_SYS_WINCE #ifdef WINDOWS
/* Windows CE incorrectly defines fileno as returning void*, so to avoid problems below... */ #include <conio.h>
#ifdef fileno
#undef fileno
#endif
#define fileno(a) (int)_fileno(a)
#endif #endif
#if (defined(OPENSSL_SYS_VMS) && __VMS_VER < 70000000) #if (defined(VMS) && __VMS_VER < 70000000)
/* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */ /* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */
#undef FIONBIO #undef FIONBIO
#endif #endif
@@ -171,7 +112,6 @@ static int c_nbio=0;
#endif #endif
static int c_Pause=0; static int c_Pause=0;
static int c_debug=0; static int c_debug=0;
static int c_msg=0;
static int c_showcerts=0; static int c_showcerts=0;
static void sc_usage(void); static void sc_usage(void);
@@ -188,23 +128,16 @@ static void sc_usage(void)
BIO_printf(bio_err," -port port - use -connect instead\n"); BIO_printf(bio_err," -port port - use -connect instead\n");
BIO_printf(bio_err," -connect host:port - who to connect to (default is %s:%s)\n",SSL_HOST_NAME,PORT_STR); BIO_printf(bio_err," -connect host:port - who to connect to (default is %s:%s)\n",SSL_HOST_NAME,PORT_STR);
BIO_printf(bio_err," -verify depth - turn on peer certificate verification\n"); BIO_printf(bio_err," -verify arg - turn on peer certificate verification\n");
BIO_printf(bio_err," -cert arg - certificate file to use, PEM format assumed\n"); BIO_printf(bio_err," -cert arg - certificate file to use, PEM format assumed\n");
BIO_printf(bio_err," -certform arg - certificate format (PEM or DER) PEM default\n"); BIO_printf(bio_err," -key arg - Private key file to use, PEM format assumed, in cert file if\n");
BIO_printf(bio_err," -key arg - Private key file to use, in cert file if\n");
BIO_printf(bio_err," not specified but cert file is.\n"); BIO_printf(bio_err," not specified but cert file is.\n");
BIO_printf(bio_err," -keyform arg - key format (PEM or DER) PEM default\n");
BIO_printf(bio_err," -pass arg - private key file pass phrase source\n");
BIO_printf(bio_err," -CApath arg - PEM format directory of CA's\n"); BIO_printf(bio_err," -CApath arg - PEM format directory of CA's\n");
BIO_printf(bio_err," -CAfile arg - PEM format file of CA's\n"); BIO_printf(bio_err," -CAfile arg - PEM format file of CA's\n");
BIO_printf(bio_err," -reconnect - Drop and re-make the connection with the same Session-ID\n"); BIO_printf(bio_err," -reconnect - Drop and re-make the connection with the same Session-ID\n");
BIO_printf(bio_err," -pause - sleep(1) after each read(2) and write(2) system call\n"); BIO_printf(bio_err," -pause - sleep(1) after each read(2) and write(2) system call\n");
BIO_printf(bio_err," -showcerts - show all certificates in the chain\n"); BIO_printf(bio_err," -showcerts - show all certificates in the chain\n");
BIO_printf(bio_err," -debug - extra output\n"); BIO_printf(bio_err," -debug - extra output\n");
#ifdef WATT32
BIO_printf(bio_err," -wdebug - WATT-32 tcp debugging\n");
#endif
BIO_printf(bio_err," -msg - Show protocol messages\n");
BIO_printf(bio_err," -nbio_test - more ssl protocol testing\n"); BIO_printf(bio_err," -nbio_test - more ssl protocol testing\n");
BIO_printf(bio_err," -state - print the 'ssl' states\n"); BIO_printf(bio_err," -state - print the 'ssl' states\n");
#ifdef FIONBIO #ifdef FIONBIO
@@ -216,42 +149,22 @@ static void sc_usage(void)
BIO_printf(bio_err," -ssl2 - just use SSLv2\n"); BIO_printf(bio_err," -ssl2 - just use SSLv2\n");
BIO_printf(bio_err," -ssl3 - just use SSLv3\n"); BIO_printf(bio_err," -ssl3 - just use SSLv3\n");
BIO_printf(bio_err," -tls1 - just use TLSv1\n"); BIO_printf(bio_err," -tls1 - just use TLSv1\n");
BIO_printf(bio_err," -dtls1 - just use DTLSv1\n");
BIO_printf(bio_err," -mtu - set the MTU\n");
BIO_printf(bio_err," -no_tls1/-no_ssl3/-no_ssl2 - turn off that protocol\n"); BIO_printf(bio_err," -no_tls1/-no_ssl3/-no_ssl2 - turn off that protocol\n");
BIO_printf(bio_err," -bugs - Switch on all SSL implementation bug workarounds\n"); BIO_printf(bio_err," -bugs - Switch on all SSL implementation bug workarounds\n");
BIO_printf(bio_err," -serverpref - Use server's cipher preferences (only SSLv2)\n");
BIO_printf(bio_err," -cipher - preferred cipher to use, use the 'openssl ciphers'\n"); BIO_printf(bio_err," -cipher - preferred cipher to use, use the 'openssl ciphers'\n");
BIO_printf(bio_err," command to see what is available\n"); BIO_printf(bio_err," command to see what is available\n");
BIO_printf(bio_err," -starttls prot - use the STARTTLS command before starting TLS\n");
BIO_printf(bio_err," for those protocols that support it, where\n");
BIO_printf(bio_err," 'prot' defines which one to assume. Currently,\n");
BIO_printf(bio_err," only \"smtp\", \"pop3\", \"imap\", and \"ftp\" are supported.\n");
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err," -engine id - Initialise and use the specified engine\n");
#endif
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
} }
enum
{
PROTO_OFF = 0,
PROTO_SMTP,
PROTO_POP3,
PROTO_IMAP,
PROTO_FTP
};
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
int off=0; int off=0;
SSL *con=NULL,*con2=NULL; SSL *con=NULL,*con2=NULL;
X509_STORE *store = NULL;
int s,k,width,state=0; int s,k,width,state=0;
char *cbuf=NULL,*sbuf=NULL,*mbuf=NULL; char *cbuf=NULL,*sbuf=NULL;
int cbuf_len,cbuf_off; int cbuf_len,cbuf_off;
int sbuf_len,sbuf_off; int sbuf_len,sbuf_off;
fd_set readfds,writefds; fd_set readfds,writefds;
@@ -259,44 +172,25 @@ int MAIN(int argc, char **argv)
int full_log=1; int full_log=1;
char *host=SSL_HOST_NAME; char *host=SSL_HOST_NAME;
char *cert_file=NULL,*key_file=NULL; char *cert_file=NULL,*key_file=NULL;
int cert_format = FORMAT_PEM, key_format = FORMAT_PEM;
char *passarg = NULL, *pass = NULL;
X509 *cert = NULL;
EVP_PKEY *key = NULL;
char *CApath=NULL,*CAfile=NULL,*cipher=NULL; char *CApath=NULL,*CAfile=NULL,*cipher=NULL;
int reconnect=0,badop=0,verify=SSL_VERIFY_NONE,bugs=0; int reconnect=0,badop=0,verify=SSL_VERIFY_NONE,bugs=0;
int crlf=0; int crlf=0;
int write_tty,read_tty,write_ssl,read_ssl,tty_on,ssl_pending; int write_tty,read_tty,write_ssl,read_ssl,tty_on,ssl_pending;
SSL_CTX *ctx=NULL; SSL_CTX *ctx=NULL;
int ret=1,in_init=1,i,nbio_test=0; int ret=1,in_init=1,i,nbio_test=0;
int starttls_proto = PROTO_OFF; int prexit = 0;
int prexit = 0, vflags = 0;
SSL_METHOD *meth=NULL; SSL_METHOD *meth=NULL;
#ifdef sock_type
#undef sock_type
#endif
int sock_type=SOCK_STREAM;
BIO *sbio; BIO *sbio;
char *inrand=NULL; char *inrand=NULL;
int mbuf_len=0; #ifdef WINDOWS
#ifndef OPENSSL_NO_ENGINE
char *engine_id=NULL;
ENGINE *e=NULL;
#endif
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_NETWARE)
struct timeval tv; struct timeval tv;
#endif #endif
struct sockaddr peer; #if !defined(NO_SSL2) && !defined(NO_SSL3)
int peerlen = sizeof(peer);
int enable_timeouts = 0 ;
long mtu = 0;
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
meth=SSLv23_client_method(); meth=SSLv23_client_method();
#elif !defined(OPENSSL_NO_SSL3) #elif !defined(NO_SSL3)
meth=SSLv3_client_method(); meth=SSLv3_client_method();
#elif !defined(OPENSSL_NO_SSL2) #elif !defined(NO_SSL2)
meth=SSLv2_client_method(); meth=SSLv2_client_method();
#endif #endif
@@ -305,18 +199,13 @@ int MAIN(int argc, char **argv)
c_quiet=0; c_quiet=0;
c_ign_eof=0; c_ign_eof=0;
c_debug=0; c_debug=0;
c_msg=0;
c_showcerts=0; c_showcerts=0;
if (bio_err == NULL) if (bio_err == NULL)
bio_err=BIO_new_fp(stderr,BIO_NOCLOSE); bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
if (!load_config(bio_err, NULL))
goto end;
if ( ((cbuf=OPENSSL_malloc(BUFSIZZ)) == NULL) || if ( ((cbuf=OPENSSL_malloc(BUFSIZZ)) == NULL) ||
((sbuf=OPENSSL_malloc(BUFSIZZ)) == NULL) || ((sbuf=OPENSSL_malloc(BUFSIZZ)) == NULL))
((mbuf=OPENSSL_malloc(BUFSIZZ)) == NULL))
{ {
BIO_printf(bio_err,"out of memory\n"); BIO_printf(bio_err,"out of memory\n");
goto end; goto end;
@@ -361,15 +250,6 @@ int MAIN(int argc, char **argv)
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
cert_file= *(++argv); cert_file= *(++argv);
} }
else if (strcmp(*argv,"-certform") == 0)
{
if (--argc < 1) goto bad;
cert_format = str2fmt(*(++argv));
}
else if (strcmp(*argv,"-crl_check") == 0)
vflags |= X509_V_FLAG_CRL_CHECK;
else if (strcmp(*argv,"-crl_check_all") == 0)
vflags |= X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL;
else if (strcmp(*argv,"-prexit") == 0) else if (strcmp(*argv,"-prexit") == 0)
prexit=1; prexit=1;
else if (strcmp(*argv,"-crlf") == 0) else if (strcmp(*argv,"-crlf") == 0)
@@ -385,56 +265,26 @@ int MAIN(int argc, char **argv)
c_Pause=1; c_Pause=1;
else if (strcmp(*argv,"-debug") == 0) else if (strcmp(*argv,"-debug") == 0)
c_debug=1; c_debug=1;
#ifdef WATT32
else if (strcmp(*argv,"-wdebug") == 0)
dbug_init();
#endif
else if (strcmp(*argv,"-msg") == 0)
c_msg=1;
else if (strcmp(*argv,"-showcerts") == 0) else if (strcmp(*argv,"-showcerts") == 0)
c_showcerts=1; c_showcerts=1;
else if (strcmp(*argv,"-nbio_test") == 0) else if (strcmp(*argv,"-nbio_test") == 0)
nbio_test=1; nbio_test=1;
else if (strcmp(*argv,"-state") == 0) else if (strcmp(*argv,"-state") == 0)
state=1; state=1;
#ifndef OPENSSL_NO_SSL2 #ifndef NO_SSL2
else if (strcmp(*argv,"-ssl2") == 0) else if (strcmp(*argv,"-ssl2") == 0)
meth=SSLv2_client_method(); meth=SSLv2_client_method();
#endif #endif
#ifndef OPENSSL_NO_SSL3 #ifndef NO_SSL3
else if (strcmp(*argv,"-ssl3") == 0) else if (strcmp(*argv,"-ssl3") == 0)
meth=SSLv3_client_method(); meth=SSLv3_client_method();
#endif #endif
#ifndef OPENSSL_NO_TLS1 #ifndef NO_TLS1
else if (strcmp(*argv,"-tls1") == 0) else if (strcmp(*argv,"-tls1") == 0)
meth=TLSv1_client_method(); meth=TLSv1_client_method();
#endif
#ifndef OPENSSL_NO_DTLS1
else if (strcmp(*argv,"-dtls1") == 0)
{
meth=DTLSv1_client_method();
sock_type=SOCK_DGRAM;
}
else if (strcmp(*argv,"-timeout") == 0)
enable_timeouts=1;
else if (strcmp(*argv,"-mtu") == 0)
{
if (--argc < 1) goto bad;
mtu = atol(*(++argv));
}
#endif #endif
else if (strcmp(*argv,"-bugs") == 0) else if (strcmp(*argv,"-bugs") == 0)
bugs=1; bugs=1;
else if (strcmp(*argv,"-keyform") == 0)
{
if (--argc < 1) goto bad;
key_format = str2fmt(*(++argv));
}
else if (strcmp(*argv,"-pass") == 0)
{
if (--argc < 1) goto bad;
passarg = *(++argv);
}
else if (strcmp(*argv,"-key") == 0) else if (strcmp(*argv,"-key") == 0)
{ {
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
@@ -460,8 +310,6 @@ int MAIN(int argc, char **argv)
off|=SSL_OP_NO_SSLv3; off|=SSL_OP_NO_SSLv3;
else if (strcmp(*argv,"-no_ssl2") == 0) else if (strcmp(*argv,"-no_ssl2") == 0)
off|=SSL_OP_NO_SSLv2; off|=SSL_OP_NO_SSLv2;
else if (strcmp(*argv,"-serverpref") == 0)
off|=SSL_OP_CIPHER_SERVER_PREFERENCE;
else if (strcmp(*argv,"-cipher") == 0) else if (strcmp(*argv,"-cipher") == 0)
{ {
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
@@ -470,28 +318,6 @@ int MAIN(int argc, char **argv)
#ifdef FIONBIO #ifdef FIONBIO
else if (strcmp(*argv,"-nbio") == 0) else if (strcmp(*argv,"-nbio") == 0)
{ c_nbio=1; } { c_nbio=1; }
#endif
else if (strcmp(*argv,"-starttls") == 0)
{
if (--argc < 1) goto bad;
++argv;
if (strcmp(*argv,"smtp") == 0)
starttls_proto = PROTO_SMTP;
else if (strcmp(*argv,"pop3") == 0)
starttls_proto = PROTO_POP3;
else if (strcmp(*argv,"imap") == 0)
starttls_proto = PROTO_IMAP;
else if (strcmp(*argv,"ftp") == 0)
starttls_proto = PROTO_FTP;
else
goto bad;
}
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine_id = *(++argv);
}
#endif #endif
else if (strcmp(*argv,"-rand") == 0) else if (strcmp(*argv,"-rand") == 0)
{ {
@@ -514,49 +340,6 @@ bad:
goto end; goto end;
} }
OpenSSL_add_ssl_algorithms();
SSL_load_error_strings();
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine_id, 1);
#endif
if (!app_passwd(bio_err, passarg, NULL, &pass, NULL))
{
BIO_printf(bio_err, "Error getting password\n");
goto end;
}
if (key_file == NULL)
key_file = cert_file;
if (key_file)
{
key = load_key(bio_err, key_file, key_format, 0, pass, e,
"client certificate private key file");
if (!key)
{
ERR_print_errors(bio_err);
goto end;
}
}
if (cert_file)
{
cert = load_cert(bio_err,cert_file,cert_format,
NULL, e, "client certificate file");
if (!cert)
{
ERR_print_errors(bio_err);
goto end;
}
}
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
&& !RAND_status()) && !RAND_status())
{ {
@@ -568,7 +351,7 @@ bad:
if (bio_c_out == NULL) if (bio_c_out == NULL)
{ {
if (c_quiet && !c_debug && !c_msg) if (c_quiet)
{ {
bio_c_out=BIO_new(BIO_s_null()); bio_c_out=BIO_new(BIO_s_null());
} }
@@ -579,6 +362,8 @@ bad:
} }
} }
OpenSSL_add_ssl_algorithms();
SSL_load_error_strings();
ctx=SSL_CTX_new(meth); ctx=SSL_CTX_new(meth);
if (ctx == NULL) if (ctx == NULL)
{ {
@@ -590,10 +375,6 @@ bad:
SSL_CTX_set_options(ctx,SSL_OP_ALL|off); SSL_CTX_set_options(ctx,SSL_OP_ALL|off);
else else
SSL_CTX_set_options(ctx,off); SSL_CTX_set_options(ctx,off);
/* DTLS: partial reads end up discarding unread UDP bytes :-(
* Setting read ahead solves this problem.
*/
if (sock_type == SOCK_DGRAM) SSL_CTX_set_read_ahead(ctx, 1);
if (state) SSL_CTX_set_info_callback(ctx,apps_ssl_info_callback); if (state) SSL_CTX_set_info_callback(ctx,apps_ssl_info_callback);
if (cipher != NULL) if (cipher != NULL)
@@ -608,7 +389,7 @@ bad:
#endif #endif
SSL_CTX_set_verify(ctx,verify,verify_callback); SSL_CTX_set_verify(ctx,verify,verify_callback);
if (!set_cert_key_stuff(ctx,cert,key)) if (!set_cert_stuff(ctx,cert_file,key_file))
goto end; goto end;
if ((!SSL_CTX_load_verify_locations(ctx,CAfile,CApath)) || if ((!SSL_CTX_load_verify_locations(ctx,CAfile,CApath)) ||
@@ -619,21 +400,13 @@ bad:
/* goto end; */ /* goto end; */
} }
store = SSL_CTX_get_cert_store(ctx);
X509_STORE_set_flags(store, vflags);
con=SSL_new(ctx); con=SSL_new(ctx);
#ifndef OPENSSL_NO_KRB5
if (con && (con->kssl_ctx = kssl_ctx_new()) != NULL)
{
kssl_ctx_setstring(con->kssl_ctx, KSSL_SERVER, host);
}
#endif /* OPENSSL_NO_KRB5 */
/* SSL_set_cipher_list(con,"RC4-MD5"); */ /* SSL_set_cipher_list(con,"RC4-MD5"); */
re_start: re_start:
if (init_client(&s,host,port,sock_type) == 0) if (init_client(&s,host,port) == 0)
{ {
BIO_printf(bio_err,"connect:errno=%d\n",get_last_socket_error()); BIO_printf(bio_err,"connect:errno=%d\n",get_last_socket_error());
SHUTDOWN(s); SHUTDOWN(s);
@@ -654,46 +427,7 @@ re_start:
} }
#endif #endif
if (c_Pause & 0x01) con->debug=1; if (c_Pause & 0x01) con->debug=1;
sbio=BIO_new_socket(s,BIO_NOCLOSE);
if ( SSL_version(con) == DTLS1_VERSION)
{
struct timeval timeout;
sbio=BIO_new_dgram(s,BIO_NOCLOSE);
if (getsockname(s, &peer, (void *)&peerlen) < 0)
{
BIO_printf(bio_err, "getsockname:errno=%d\n",
get_last_socket_error());
SHUTDOWN(s);
goto end;
}
(void)BIO_ctrl_set_connected(sbio, 1, &peer);
if ( enable_timeouts)
{
timeout.tv_sec = 0;
timeout.tv_usec = DGRAM_RCV_TIMEOUT;
BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_RECV_TIMEOUT, 0, &timeout);
timeout.tv_sec = 0;
timeout.tv_usec = DGRAM_SND_TIMEOUT;
BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, &timeout);
}
if ( mtu > 0)
{
SSL_set_options(con, SSL_OP_NO_QUERY_MTU);
SSL_set_mtu(con, mtu);
}
else
/* want to do MTU discovery */
BIO_ctrl(sbio, BIO_CTRL_DGRAM_MTU_DISCOVER, 0, NULL);
}
else
sbio=BIO_new_socket(s,BIO_NOCLOSE);
if (nbio_test) if (nbio_test)
{ {
@@ -706,13 +440,8 @@ re_start:
if (c_debug) if (c_debug)
{ {
con->debug=1; con->debug=1;
BIO_set_callback(sbio,bio_dump_callback); BIO_set_callback(sbio,bio_dump_cb);
BIO_set_callback_arg(sbio,(char *)bio_c_out); BIO_set_callback_arg(sbio,bio_c_out);
}
if (c_msg)
{
SSL_set_msg_callback(con, msg_cb);
SSL_set_msg_callback_arg(con, bio_c_out);
} }
SSL_set_bio(con,sbio,sbio); SSL_set_bio(con,sbio,sbio);
@@ -732,95 +461,6 @@ re_start:
sbuf_len=0; sbuf_len=0;
sbuf_off=0; sbuf_off=0;
/* This is an ugly hack that does a lot of assumptions */
/* We do have to handle multi-line responses which may come
in a single packet or not. We therefore have to use
BIO_gets() which does need a buffering BIO. So during
the initial chitchat we do push a buffering BIO into the
chain that is removed again later on to not disturb the
rest of the s_client operation. */
if (starttls_proto == PROTO_SMTP)
{
int foundit=0;
BIO *fbio = BIO_new(BIO_f_buffer());
BIO_push(fbio, sbio);
/* wait for multi-line response to end from SMTP */
do
{
mbuf_len = BIO_gets(fbio,mbuf,BUFSIZZ);
}
while (mbuf_len>3 && mbuf[3]=='-');
/* STARTTLS command requires EHLO... */
BIO_printf(fbio,"EHLO openssl.client.net\r\n");
(void)BIO_flush(fbio);
/* wait for multi-line response to end EHLO SMTP response */
do
{
mbuf_len = BIO_gets(fbio,mbuf,BUFSIZZ);
if (strstr(mbuf,"STARTTLS"))
foundit=1;
}
while (mbuf_len>3 && mbuf[3]=='-');
(void)BIO_flush(fbio);
BIO_pop(fbio);
BIO_free(fbio);
if (!foundit)
BIO_printf(bio_err,
"didn't found starttls in server response,"
" try anyway...\n");
BIO_printf(sbio,"STARTTLS\r\n");
BIO_read(sbio,sbuf,BUFSIZZ);
}
else if (starttls_proto == PROTO_POP3)
{
BIO_read(sbio,mbuf,BUFSIZZ);
BIO_printf(sbio,"STLS\r\n");
BIO_read(sbio,sbuf,BUFSIZZ);
}
else if (starttls_proto == PROTO_IMAP)
{
int foundit=0;
BIO *fbio = BIO_new(BIO_f_buffer());
BIO_push(fbio, sbio);
BIO_gets(fbio,mbuf,BUFSIZZ);
/* STARTTLS command requires CAPABILITY... */
BIO_printf(fbio,". CAPABILITY\r\n");
(void)BIO_flush(fbio);
/* wait for multi-line CAPABILITY response */
do
{
mbuf_len = BIO_gets(fbio,mbuf,BUFSIZZ);
if (strstr(mbuf,"STARTTLS"))
foundit=1;
}
while (mbuf_len>3 && mbuf[0]!='.');
(void)BIO_flush(fbio);
BIO_pop(fbio);
BIO_free(fbio);
if (!foundit)
BIO_printf(bio_err,
"didn't found STARTTLS in server response,"
" try anyway...\n");
BIO_printf(sbio,". STARTTLS\r\n");
BIO_read(sbio,sbuf,BUFSIZZ);
}
else if (starttls_proto == PROTO_FTP)
{
BIO *fbio = BIO_new(BIO_f_buffer());
BIO_push(fbio, sbio);
/* wait for multi-line response to end from FTP */
do
{
mbuf_len = BIO_gets(fbio,mbuf,BUFSIZZ);
}
while (mbuf_len>3 && mbuf[3]=='-');
(void)BIO_flush(fbio);
BIO_pop(fbio);
BIO_free(fbio);
BIO_printf(sbio,"AUTH TLS\r\n");
BIO_read(sbio,sbuf,BUFSIZZ);
}
for (;;) for (;;)
{ {
FD_ZERO(&readfds); FD_ZERO(&readfds);
@@ -840,13 +480,6 @@ re_start:
print_stuff(bio_c_out,con,full_log); print_stuff(bio_c_out,con,full_log);
if (full_log > 0) full_log--; if (full_log > 0) full_log--;
if (starttls_proto)
{
BIO_printf(bio_err,"%s",mbuf);
/* We don't need to know any more */
starttls_proto = PROTO_OFF;
}
if (reconnect) if (reconnect)
{ {
reconnect--; reconnect--;
@@ -863,7 +496,7 @@ re_start:
if (!ssl_pending) if (!ssl_pending)
{ {
#if !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_NETWARE) #ifndef WINDOWS
if (tty_on) if (tty_on)
{ {
if (read_tty) FD_SET(fileno(stdin),&readfds); if (read_tty) FD_SET(fileno(stdin),&readfds);
@@ -890,8 +523,8 @@ re_start:
* will choke the compiler: if you do have a cast then * will choke the compiler: if you do have a cast then
* you can either go for (int *) or (void *). * you can either go for (int *) or (void *).
*/ */
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) #ifdef WINDOWS
/* Under Windows/DOS we make the assumption that we can /* Under Windows we make the assumption that we can
* always write to the tty: therefore if we need to * always write to the tty: therefore if we need to
* write to the tty we just fall through. Otherwise * write to the tty we just fall through. Otherwise
* we timeout the select every second and see if there * we timeout the select every second and see if there
@@ -905,24 +538,10 @@ re_start:
tv.tv_usec = 0; tv.tv_usec = 0;
i=select(width,(void *)&readfds,(void *)&writefds, i=select(width,(void *)&readfds,(void *)&writefds,
NULL,&tv); NULL,&tv);
#if defined(OPENSSL_SYS_WINCE) || defined(OPENSSL_SYS_MSDOS)
if(!i && (!_kbhit() || !read_tty) ) continue;
#else
if(!i && (!((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0))) || !read_tty) ) continue; if(!i && (!((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0))) || !read_tty) ) continue;
#endif
} else i=select(width,(void *)&readfds,(void *)&writefds, } else i=select(width,(void *)&readfds,(void *)&writefds,
NULL,NULL); NULL,NULL);
} }
#elif defined(OPENSSL_SYS_NETWARE)
if(!write_tty) {
if(read_tty) {
tv.tv_sec = 1;
tv.tv_usec = 0;
i=select(width,(void *)&readfds,(void *)&writefds,
NULL,&tv);
} else i=select(width,(void *)&readfds,(void *)&writefds,
NULL,NULL);
}
#else #else
i=select(width,(void *)&readfds,(void *)&writefds, i=select(width,(void *)&readfds,(void *)&writefds,
NULL,NULL); NULL,NULL);
@@ -1003,8 +622,8 @@ re_start:
goto shut; goto shut;
} }
} }
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_NETWARE) #ifdef WINDOWS
/* Assume Windows/DOS can always write */ /* Assume Windows can always write */
else if (!ssl_pending && write_tty) else if (!ssl_pending && write_tty)
#else #else
else if (!ssl_pending && FD_ISSET(fileno(stdout),&writefds)) else if (!ssl_pending && FD_ISSET(fileno(stdout),&writefds))
@@ -1084,14 +703,8 @@ printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240
} }
} }
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) #ifdef WINDOWS
#if defined(OPENSSL_SYS_WINCE) || defined(OPENSSL_SYS_MSDOS)
else if (_kbhit())
#else
else if ((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0))) else if ((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0)))
#endif
#elif defined (OPENSSL_SYS_NETWARE)
else if (_kbhit())
#else #else
else if (FD_ISSET(fileno(stdin),&readfds)) else if (FD_ISSET(fileno(stdin),&readfds))
#endif #endif
@@ -1155,21 +768,13 @@ end:
if (con != NULL) SSL_free(con); if (con != NULL) SSL_free(con);
if (con2 != NULL) SSL_free(con2); if (con2 != NULL) SSL_free(con2);
if (ctx != NULL) SSL_CTX_free(ctx); if (ctx != NULL) SSL_CTX_free(ctx);
if (cert)
X509_free(cert);
if (key)
EVP_PKEY_free(key);
if (pass)
OPENSSL_free(pass);
if (cbuf != NULL) { OPENSSL_cleanse(cbuf,BUFSIZZ); OPENSSL_free(cbuf); } if (cbuf != NULL) { OPENSSL_cleanse(cbuf,BUFSIZZ); OPENSSL_free(cbuf); }
if (sbuf != NULL) { OPENSSL_cleanse(sbuf,BUFSIZZ); OPENSSL_free(sbuf); } 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) if (bio_c_out != NULL)
{ {
BIO_free(bio_c_out); BIO_free(bio_c_out);
bio_c_out=NULL; bio_c_out=NULL;
} }
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }
@@ -1178,16 +783,13 @@ static void print_stuff(BIO *bio, SSL *s, int full)
{ {
X509 *peer=NULL; X509 *peer=NULL;
char *p; char *p;
static const char *space=" "; static char *space=" ";
char buf[BUFSIZ]; char buf[BUFSIZ];
STACK_OF(X509) *sk; STACK_OF(X509) *sk;
STACK_OF(X509_NAME) *sk2; STACK_OF(X509_NAME) *sk2;
SSL_CIPHER *c; SSL_CIPHER *c;
X509_NAME *xn; X509_NAME *xn;
int j,i; int j,i;
#ifndef OPENSSL_NO_COMP
const COMP_METHOD *comp, *expansion;
#endif
if (full) if (full)
{ {
@@ -1202,10 +804,10 @@ static void print_stuff(BIO *bio, SSL *s, int full)
for (i=0; i<sk_X509_num(sk); i++) for (i=0; i<sk_X509_num(sk); i++)
{ {
X509_NAME_oneline(X509_get_subject_name( X509_NAME_oneline(X509_get_subject_name(
sk_X509_value(sk,i)),buf,sizeof buf); sk_X509_value(sk,i)),buf,BUFSIZ);
BIO_printf(bio,"%2d s:%s\n",i,buf); BIO_printf(bio,"%2d s:%s\n",i,buf);
X509_NAME_oneline(X509_get_issuer_name( X509_NAME_oneline(X509_get_issuer_name(
sk_X509_value(sk,i)),buf,sizeof buf); sk_X509_value(sk,i)),buf,BUFSIZ);
BIO_printf(bio," i:%s\n",buf); BIO_printf(bio," i:%s\n",buf);
if (c_showcerts) if (c_showcerts)
PEM_write_bio_X509(bio,sk_X509_value(sk,i)); PEM_write_bio_X509(bio,sk_X509_value(sk,i));
@@ -1220,10 +822,10 @@ static void print_stuff(BIO *bio, SSL *s, int full)
if (!(c_showcerts && got_a_chain)) /* Redundant if we showed the whole chain */ if (!(c_showcerts && got_a_chain)) /* Redundant if we showed the whole chain */
PEM_write_bio_X509(bio,peer); PEM_write_bio_X509(bio,peer);
X509_NAME_oneline(X509_get_subject_name(peer), X509_NAME_oneline(X509_get_subject_name(peer),
buf,sizeof buf); buf,BUFSIZ);
BIO_printf(bio,"subject=%s\n",buf); BIO_printf(bio,"subject=%s\n",buf);
X509_NAME_oneline(X509_get_issuer_name(peer), X509_NAME_oneline(X509_get_issuer_name(peer),
buf,sizeof buf); buf,BUFSIZ);
BIO_printf(bio,"issuer=%s\n",buf); BIO_printf(bio,"issuer=%s\n",buf);
} }
else else
@@ -1245,7 +847,7 @@ static void print_stuff(BIO *bio, SSL *s, int full)
{ {
BIO_printf(bio,"---\nNo client certificate CA names sent\n"); BIO_printf(bio,"---\nNo client certificate CA names sent\n");
} }
p=SSL_get_shared_ciphers(s,buf,sizeof buf); p=SSL_get_shared_ciphers(s,buf,BUFSIZ);
if (p != NULL) if (p != NULL)
{ {
/* This works only for SSL 2. In later protocol /* This works only for SSL 2. In later protocol
@@ -1290,19 +892,11 @@ static void print_stuff(BIO *bio, SSL *s, int full)
EVP_PKEY_bits(pktmp)); EVP_PKEY_bits(pktmp));
EVP_PKEY_free(pktmp); EVP_PKEY_free(pktmp);
} }
#ifndef OPENSSL_NO_COMP
comp=SSL_get_current_compression(s);
expansion=SSL_get_current_expansion(s);
BIO_printf(bio,"Compression: %s\n",
comp ? SSL_COMP_get_name(comp) : "NONE");
BIO_printf(bio,"Expansion: %s\n",
expansion ? SSL_COMP_get_name(expansion) : "NONE");
#endif
SSL_SESSION_print(bio,SSL_get_session(s)); SSL_SESSION_print(bio,SSL_get_session(s));
BIO_printf(bio,"---\n"); BIO_printf(bio,"---\n");
if (peer != NULL) if (peer != NULL)
X509_free(peer); X509_free(peer);
/* flush, or debugging output gets mixed with http response */ /* flush, or debugging output gets mixed with http response */
(void)BIO_flush(bio); BIO_flush(bio);
} }

File diff suppressed because it is too large Load Diff

View File

@@ -66,7 +66,7 @@
recursive header file inclusion, resulting in the compiler complaining recursive header file inclusion, resulting in the compiler complaining
that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which
is needed to have fileno() declared correctly... So let's define u_int */ is needed to have fileno() declared correctly... So let's define u_int */
#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__U_INT) #if defined(VMS) && defined(__DECC) && !defined(__U_INT)
#define __U_INT #define __U_INT
typedef unsigned int u_int; typedef unsigned int u_int;
#endif #endif
@@ -79,44 +79,28 @@ typedef unsigned int u_int;
#include "s_apps.h" #include "s_apps.h"
#include <openssl/ssl.h> #include <openssl/ssl.h>
#ifdef FLAT_INC
#include "e_os.h"
#else
#include "../e_os.h"
#endif
#ifndef OPENSSL_NO_SOCK
#if defined(OPENSSL_SYS_NETWARE) && defined(NETWARE_BSDSOCK)
#include "netdb.h"
#endif
static struct hostent *GetHostByName(char *name); static struct hostent *GetHostByName(char *name);
#if defined(OPENSSL_SYS_WINDOWS) || (defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK)) #ifdef WINDOWS
static void ssl_sock_cleanup(void); static void sock_cleanup(void);
#endif #endif
static int ssl_sock_init(void); static int sock_init(void);
static int init_client_ip(int *sock,unsigned char ip[4], int port, int type); static int init_client_ip(int *sock,unsigned char ip[4], int port);
static int init_server(int *sock, int port, int type); static int init_server(int *sock, int port);
static int init_server_long(int *sock, int port,char *ip, int type); static int init_server_long(int *sock, int port,char *ip);
static int do_accept(int acc_sock, int *sock, char **host); static int do_accept(int acc_sock, int *sock, char **host);
static int host_ip(char *str, unsigned char ip[4]); static int host_ip(char *str, unsigned char ip[4]);
#ifdef OPENSSL_SYS_WIN16 #ifdef WIN16
#define SOCKET_PROTOCOL 0 /* more microsoft stupidity */ #define SOCKET_PROTOCOL 0 /* more microsoft stupidity */
#else #else
#define SOCKET_PROTOCOL IPPROTO_TCP #define SOCKET_PROTOCOL IPPROTO_TCP
#endif #endif
#if defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK) #ifdef WINDOWS
static int wsa_init_done=0;
#endif
#ifdef OPENSSL_SYS_WINDOWS
static struct WSAData wsa_state; static struct WSAData wsa_state;
static int wsa_init_done=0; static int wsa_init_done=0;
#ifdef OPENSSL_SYS_WIN16 #ifdef WIN16
static HWND topWnd=0; static HWND topWnd=0;
static FARPROC lpTopWndProc=NULL; static FARPROC lpTopWndProc=NULL;
static FARPROC lpTopHookProc=NULL; static FARPROC lpTopHookProc=NULL;
@@ -132,7 +116,7 @@ static LONG FAR PASCAL topHookProc(HWND hwnd, UINT message, WPARAM wParam,
case WM_DESTROY: case WM_DESTROY:
case WM_CLOSE: case WM_CLOSE:
SetWindowLong(topWnd,GWL_WNDPROC,(LONG)lpTopWndProc); SetWindowLong(topWnd,GWL_WNDPROC,(LONG)lpTopWndProc);
ssl_sock_cleanup(); sock_cleanup();
break; break;
} }
} }
@@ -145,46 +129,30 @@ static BOOL CALLBACK enumproc(HWND hwnd,LPARAM lParam)
return(FALSE); return(FALSE);
} }
#endif /* OPENSSL_SYS_WIN32 */ #endif /* WIN32 */
#endif /* OPENSSL_SYS_WINDOWS */ #endif /* WINDOWS */
#ifdef OPENSSL_SYS_WINDOWS #ifdef WINDOWS
static void ssl_sock_cleanup(void) static void sock_cleanup(void)
{ {
if (wsa_init_done) if (wsa_init_done)
{ {
wsa_init_done=0; wsa_init_done=0;
#ifndef OPENSSL_SYS_WINCE
WSACancelBlockingCall(); WSACancelBlockingCall();
#endif
WSACleanup();
}
}
#elif defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK)
static void sock_cleanup(void)
{
if (wsa_init_done)
{
wsa_init_done=0;
WSACleanup(); WSACleanup();
} }
} }
#endif #endif
static int ssl_sock_init(void) static int sock_init(void)
{ {
#ifdef WATT32 #ifdef WINDOWS
extern int _watt_do_exit;
_watt_do_exit = 0;
if (sock_init())
return (0);
#elif defined(OPENSSL_SYS_WINDOWS)
if (!wsa_init_done) if (!wsa_init_done)
{ {
int err; int err;
#ifdef SIGINT #ifdef SIGINT
signal(SIGINT,(void (*)(int))ssl_sock_cleanup); signal(SIGINT,(void (*)(int))sock_cleanup);
#endif #endif
wsa_init_done=1; wsa_init_done=1;
memset(&wsa_state,0,sizeof(wsa_state)); memset(&wsa_state,0,sizeof(wsa_state));
@@ -195,40 +163,19 @@ static int ssl_sock_init(void)
return(0); return(0);
} }
#ifdef OPENSSL_SYS_WIN16 #ifdef WIN16
EnumTaskWindows(GetCurrentTask(),enumproc,0L); EnumTaskWindows(GetCurrentTask(),enumproc,0L);
lpTopWndProc=(FARPROC)GetWindowLong(topWnd,GWL_WNDPROC); lpTopWndProc=(FARPROC)GetWindowLong(topWnd,GWL_WNDPROC);
lpTopHookProc=MakeProcInstance((FARPROC)topHookProc,_hInstance); lpTopHookProc=MakeProcInstance((FARPROC)topHookProc,_hInstance);
SetWindowLong(topWnd,GWL_WNDPROC,(LONG)lpTopHookProc); SetWindowLong(topWnd,GWL_WNDPROC,(LONG)lpTopHookProc);
#endif /* OPENSSL_SYS_WIN16 */ #endif /* WIN16 */
} }
#elif defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK) #endif /* WINDOWS */
WORD wVerReq;
WSADATA wsaData;
int err;
if (!wsa_init_done)
{
# ifdef SIGINT
signal(SIGINT,(void (*)(int))sock_cleanup);
# endif
wsa_init_done=1;
wVerReq = MAKEWORD( 2, 0 );
err = WSAStartup(wVerReq,&wsaData);
if (err != 0)
{
BIO_printf(bio_err,"unable to start WINSOCK2, error code=%d\n",err);
return(0);
}
}
#endif /* OPENSSL_SYS_WINDOWS */
return(1); return(1);
} }
int init_client(int *sock, char *host, int port, int type) int init_client(int *sock, char *host, int port)
{ {
unsigned char ip[4]; unsigned char ip[4];
short p=0; short p=0;
@@ -238,16 +185,16 @@ int init_client(int *sock, char *host, int port, int type)
return(0); return(0);
} }
if (p != 0) port=p; if (p != 0) port=p;
return(init_client_ip(sock,ip,port,type)); return(init_client_ip(sock,ip,port));
} }
static int init_client_ip(int *sock, unsigned char ip[4], int port, int type) static int init_client_ip(int *sock, unsigned char ip[4], int port)
{ {
unsigned long addr; unsigned long addr;
struct sockaddr_in them; struct sockaddr_in them;
int s,i; int s,i;
if (!ssl_sock_init()) return(0); if (!sock_init()) return(0);
memset((char *)&them,0,sizeof(them)); memset((char *)&them,0,sizeof(them));
them.sin_family=AF_INET; them.sin_family=AF_INET;
@@ -259,20 +206,13 @@ static int init_client_ip(int *sock, unsigned char ip[4], int port, int type)
((unsigned long)ip[3]); ((unsigned long)ip[3]);
them.sin_addr.s_addr=htonl(addr); them.sin_addr.s_addr=htonl(addr);
if (type == SOCK_STREAM) s=socket(AF_INET,SOCK_STREAM,SOCKET_PROTOCOL);
s=socket(AF_INET,SOCK_STREAM,SOCKET_PROTOCOL);
else /* ( type == SOCK_DGRAM) */
s=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if (s == INVALID_SOCKET) { perror("socket"); return(0); } if (s == INVALID_SOCKET) { perror("socket"); return(0); }
#ifndef OPENSSL_SYS_MPE #ifndef MPE
if (type == SOCK_STREAM) i=0;
{ i=setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(char *)&i,sizeof(i));
i=0; if (i < 0) { perror("keepalive"); return(0); }
i=setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(char *)&i,sizeof(i));
if (i < 0) { perror("keepalive"); return(0); }
}
#endif #endif
if (connect(s,(struct sockaddr *)&them,sizeof(them)) == -1) if (connect(s,(struct sockaddr *)&them,sizeof(them)) == -1)
@@ -281,36 +221,30 @@ static int init_client_ip(int *sock, unsigned char ip[4], int port, int type)
return(1); return(1);
} }
int do_server(int port, int type, int *ret, int (*cb)(char *hostname, int s, unsigned char *context), unsigned char *context) int do_server(int port, int *ret, int (*cb)(), char *context)
{ {
int sock; int sock;
char *name = NULL; char *name;
int accept_socket; int accept_socket;
int i; int i;
if (!init_server(&accept_socket,port,type)) return(0); if (!init_server(&accept_socket,port)) return(0);
if (ret != NULL) if (ret != NULL)
{ {
*ret=accept_socket; *ret=accept_socket;
/* return(1);*/ /* return(1);*/
} }
for (;;) for (;;)
{ {
if (type==SOCK_STREAM) if (do_accept(accept_socket,&sock,&name) == 0)
{ {
if (do_accept(accept_socket,&sock,&name) == 0) SHUTDOWN(accept_socket);
{ return(0);
SHUTDOWN(accept_socket);
return(0);
}
} }
else
sock = accept_socket;
i=(*cb)(name,sock, context); i=(*cb)(name,sock, context);
if (name != NULL) OPENSSL_free(name); if (name != NULL) OPENSSL_free(name);
if (type==SOCK_STREAM) SHUTDOWN2(sock);
SHUTDOWN2(sock);
if (i < 0) if (i < 0)
{ {
SHUTDOWN2(accept_socket); SHUTDOWN2(accept_socket);
@@ -319,13 +253,13 @@ int do_server(int port, int type, int *ret, int (*cb)(char *hostname, int s, uns
} }
} }
static int init_server_long(int *sock, int port, char *ip, int type) static int init_server_long(int *sock, int port, char *ip)
{ {
int ret=0; int ret=0;
struct sockaddr_in server; struct sockaddr_in server;
int s= -1,i; int s= -1,i;
if (!ssl_sock_init()) return(0); if (!sock_init()) return(0);
memset((char *)&server,0,sizeof(server)); memset((char *)&server,0,sizeof(server));
server.sin_family=AF_INET; server.sin_family=AF_INET;
@@ -339,11 +273,7 @@ static int init_server_long(int *sock, int port, char *ip, int type)
#else #else
memcpy(&server.sin_addr,ip,4); memcpy(&server.sin_addr,ip,4);
#endif #endif
s=socket(AF_INET,SOCK_STREAM,SOCKET_PROTOCOL);
if (type == SOCK_STREAM)
s=socket(AF_INET,SOCK_STREAM,SOCKET_PROTOCOL);
else /* type == SOCK_DGRAM */
s=socket(AF_INET, SOCK_DGRAM,IPPROTO_UDP);
if (s == INVALID_SOCKET) goto err; if (s == INVALID_SOCKET) goto err;
#if defined SOL_SOCKET && defined SO_REUSEADDR #if defined SOL_SOCKET && defined SO_REUSEADDR
@@ -355,13 +285,13 @@ static int init_server_long(int *sock, int port, char *ip, int type)
#endif #endif
if (bind(s,(struct sockaddr *)&server,sizeof(server)) == -1) if (bind(s,(struct sockaddr *)&server,sizeof(server)) == -1)
{ {
#ifndef OPENSSL_SYS_WINDOWS #ifndef WINDOWS
perror("bind"); perror("bind");
#endif #endif
goto err; goto err;
} }
/* Make it 128 for linux */ /* Make it 128 for linux */
if (type==SOCK_STREAM && listen(s,128) == -1) goto err; if (listen(s,128) == -1) goto err;
i=0; i=0;
*sock=s; *sock=s;
ret=1; ret=1;
@@ -373,9 +303,9 @@ err:
return(ret); return(ret);
} }
static int init_server(int *sock, int port, int type) static int init_server(int *sock, int port)
{ {
return(init_server_long(sock, port, NULL, type)); return(init_server_long(sock, port, NULL));
} }
static int do_accept(int acc_sock, int *sock, char **host) static int do_accept(int acc_sock, int *sock, char **host)
@@ -386,9 +316,9 @@ static int do_accept(int acc_sock, int *sock, char **host)
int len; int len;
/* struct linger ling; */ /* struct linger ling; */
if (!ssl_sock_init()) return(0); if (!sock_init()) return(0);
#ifndef OPENSSL_SYS_WINDOWS #ifndef WINDOWS
redoit: redoit:
#endif #endif
@@ -402,7 +332,7 @@ redoit:
ret=accept(acc_sock,(struct sockaddr *)&from,(void *)&len); ret=accept(acc_sock,(struct sockaddr *)&from,(void *)&len);
if (ret == INVALID_SOCKET) if (ret == INVALID_SOCKET)
{ {
#if defined(OPENSSL_SYS_WINDOWS) || (defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK)) #ifdef WINDOWS
i=WSAGetLastError(); i=WSAGetLastError();
BIO_printf(bio_err,"accept error %d\n",i); BIO_printf(bio_err,"accept error %d\n",i);
#else #else
@@ -449,7 +379,7 @@ redoit:
perror("OPENSSL_malloc"); perror("OPENSSL_malloc");
return(0); return(0);
} }
BUF_strlcpy(*host,h1->h_name,strlen(h1->h_name)+1); strcpy(*host,h1->h_name);
h2=GetHostByName(*host); h2=GetHostByName(*host);
if (h2 == NULL) if (h2 == NULL)
@@ -516,7 +446,7 @@ static int host_ip(char *str, unsigned char ip[4])
{ /* do a gethostbyname */ { /* do a gethostbyname */
struct hostent *he; struct hostent *he;
if (!ssl_sock_init()) return(0); if (!sock_init()) return(0);
he=GetHostByName(str); he=GetHostByName(str);
if (he == NULL) if (he == NULL)
@@ -597,12 +527,9 @@ static struct hostent *GetHostByName(char *name)
ret=gethostbyname(name); ret=gethostbyname(name);
if (ret == NULL) return(NULL); if (ret == NULL) return(NULL);
/* else add to cache */ /* else add to cache */
if(strlen(name) < sizeof ghbn_cache[0].name) strncpy(ghbn_cache[lowi].name,name,128);
{ memcpy((char *)&(ghbn_cache[lowi].ent),ret,sizeof(struct hostent));
strcpy(ghbn_cache[lowi].name,name); ghbn_cache[lowi].order=ghbn_miss+ghbn_hits;
memcpy((char *)&(ghbn_cache[lowi].ent),ret,sizeof(struct hostent));
ghbn_cache[lowi].order=ghbn_miss+ghbn_hits;
}
return(ret); return(ret);
} }
else else
@@ -613,5 +540,3 @@ static struct hostent *GetHostByName(char *name)
return(ret); return(ret);
} }
} }
#endif

View File

@@ -67,25 +67,22 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#define USE_SOCKETS #ifdef NO_STDIO
#include "apps.h"
#ifdef OPENSSL_NO_STDIO
#define APPS_WIN16 #define APPS_WIN16
#endif #endif
#define USE_SOCKETS
#include <openssl/x509.h> #include <openssl/x509.h>
#include <openssl/ssl.h> #include <openssl/ssl.h>
#include <openssl/pem.h> #include <openssl/pem.h>
#include "apps.h"
#include "s_apps.h" #include "s_apps.h"
#include <openssl/err.h> #include <openssl/err.h>
#ifdef WIN32_STUFF #ifdef WIN32_STUFF
#include "winmain.h" #include "winmain.h"
#include "wintext.h" #include "wintext.h"
#endif #endif
#if !defined(OPENSSL_SYS_MSDOS)
#include OPENSSL_UNISTD
#endif
#if !defined(OPENSSL_SYS_NETWARE) && !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VXWORKS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC)) #if !defined(MSDOS) && !defined(VXWORKS) && (!defined(VMS) || defined(__DECC)) || defined (_DARWIN)
#define TIMES #define TIMES
#endif #endif
@@ -101,36 +98,37 @@
The __TMS macro will show if it was. If it wasn't defined, we should The __TMS macro will show if it was. If it wasn't defined, we should
undefine TIMES, since that tells the rest of the program how things undefine TIMES, since that tells the rest of the program how things
should be handled. -- Richard Levitte */ should be handled. -- Richard Levitte */
#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__TMS) #if defined(VMS) && defined(__DECC) && !defined(__TMS)
#undef TIMES #undef TIMES
#endif #endif
#if !defined(TIMES) && !defined(OPENSSL_SYS_VXWORKS) && !defined(OPENSSL_SYS_NETWARE) #if !defined(TIMES) && !defined(VXWORKS)
#include <sys/timeb.h> #include <sys/timeb.h>
#endif #endif
#ifdef _AIX
#include <sys/select.h>
#endif
#if defined(sun) || defined(__ultrix) #if defined(sun) || defined(__ultrix)
#define _POSIX_SOURCE #define _POSIX_SOURCE
#include <limits.h> #include <limits.h>
#include <sys/param.h> #include <sys/param.h>
#endif #endif
#ifdef VXWORKS
#include <tickLib.h>
#undef SIGALRM
#endif
/* The following if from times(3) man page. It may need to be changed /* The following if from times(3) man page. It may need to be changed
*/ */
#ifndef HZ #ifndef HZ
# ifdef _SC_CLK_TCK #ifndef CLK_TCK
# define HZ ((double)sysconf(_SC_CLK_TCK)) #define HZ 100.0
# else #else /* CLK_TCK */
# ifndef CLK_TCK #define HZ ((double)CLK_TCK)
# ifndef _BSD_CLK_TCK_ /* FreeBSD hack */ #endif
# define HZ 100.0
# else /* _BSD_CLK_TCK_ */
# define HZ ((double)_BSD_CLK_TCK_)
# endif
# else /* CLK_TCK */
# define HZ ((double)CLK_TCK)
# endif
# endif
#endif #endif
#undef PROG #undef PROG
@@ -146,8 +144,6 @@
#undef BUFSIZZ #undef BUFSIZZ
#define BUFSIZZ 1024*10 #define BUFSIZZ 1024*10
#define MYBUFSIZ 1024*8
#undef min #undef min
#undef max #undef max
#define min(a,b) (((a) < (b)) ? (a) : (b)) #define min(a,b) (((a) < (b)) ? (a) : (b))
@@ -185,7 +181,7 @@ static int perform=0;
#ifdef FIONBIO #ifdef FIONBIO
static int t_nbio=0; static int t_nbio=0;
#endif #endif
#ifdef OPENSSL_SYS_WIN32 #ifdef WIN32
static int exitNow = 0; /* Set when it's time to exit main */ static int exitNow = 0; /* Set when it's time to exit main */
#endif #endif
@@ -209,7 +205,7 @@ static void s_time_init(void)
#ifdef FIONBIO #ifdef FIONBIO
t_nbio=0; t_nbio=0;
#endif #endif
#ifdef OPENSSL_SYS_WIN32 #ifdef WIN32
exitNow = 0; /* Set when it's time to exit main */ exitNow = 0; /* Set when it's time to exit main */
#endif #endif
} }
@@ -322,19 +318,14 @@ static int parseArgs(int argc, char **argv)
{ {
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
s_www_path= *(++argv); s_www_path= *(++argv);
if(strlen(s_www_path) > MYBUFSIZ-100)
{
BIO_printf(bio_err,"-www option too long\n");
badop=1;
}
} }
else if(strcmp(*argv,"-bugs") == 0) else if(strcmp(*argv,"-bugs") == 0)
st_bugs=1; st_bugs=1;
#ifndef OPENSSL_NO_SSL2 #ifndef NO_SSL2
else if(strcmp(*argv,"-ssl2") == 0) else if(strcmp(*argv,"-ssl2") == 0)
s_time_meth=SSLv2_client_method(); s_time_meth=SSLv2_client_method();
#endif #endif
#ifndef OPENSSL_NO_SSL3 #ifndef NO_SSL3
else if(strcmp(*argv,"-ssl3") == 0) else if(strcmp(*argv,"-ssl3") == 0)
s_time_meth=SSLv3_client_method(); s_time_meth=SSLv3_client_method();
#endif #endif
@@ -384,21 +375,7 @@ static double tm_Time_F(int s)
ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ; ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
return((ret == 0.0)?1e-6:ret); return((ret == 0.0)?1e-6:ret);
} }
#elif defined(OPENSSL_SYS_NETWARE) #elif defined(VXWORKS)
static clock_t tstart,tend;
if (s == START)
{
tstart=clock();
return(0);
}
else
{
tend=clock();
ret=(double)((double)(tend)-(double)(tstart));
return((ret < 0.001)?0.001:ret);
}
#elif defined(OPENSSL_SYS_VXWORKS)
{ {
static unsigned long tick_start, tick_end; static unsigned long tick_start, tick_end;
@@ -452,11 +429,11 @@ int MAIN(int argc, char **argv)
if (bio_err == NULL) if (bio_err == NULL)
bio_err=BIO_new_fp(stderr,BIO_NOCLOSE); bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3) #if !defined(NO_SSL2) && !defined(NO_SSL3)
s_time_meth=SSLv23_client_method(); s_time_meth=SSLv23_client_method();
#elif !defined(OPENSSL_NO_SSL3) #elif !defined(NO_SSL3)
s_time_meth=SSLv3_client_method(); s_time_meth=SSLv3_client_method();
#elif !defined(OPENSSL_NO_SSL2) #elif !defined(NO_SSL2)
s_time_meth=SSLv2_client_method(); s_time_meth=SSLv2_client_method();
#endif #endif
@@ -489,6 +466,7 @@ int MAIN(int argc, char **argv)
if (tm_cipher == NULL ) { if (tm_cipher == NULL ) {
fprintf( stderr, "No CIPHER specified\n" ); fprintf( stderr, "No CIPHER specified\n" );
/* OPENSSL_EXIT(1); */
} }
if (!(perform & 1)) goto next; if (!(perform & 1)) goto next;
@@ -501,7 +479,7 @@ int MAIN(int argc, char **argv)
tm_Time_F(START); tm_Time_F(START);
for (;;) for (;;)
{ {
if (finishtime < (long)time(NULL)) break; if (finishtime < time(NULL)) break;
#ifdef WIN32_STUFF #ifdef WIN32_STUFF
if( flushWinMsgs(0) == -1 ) if( flushWinMsgs(0) == -1 )
@@ -516,7 +494,7 @@ int MAIN(int argc, char **argv)
if (s_www_path != NULL) if (s_www_path != NULL)
{ {
BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path); sprintf(buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
SSL_write(scon,buf,strlen(buf)); SSL_write(scon,buf,strlen(buf));
while ((i=SSL_read(scon,buf,sizeof(buf))) > 0) while ((i=SSL_read(scon,buf,sizeof(buf))) > 0)
bytes_read+=i; bytes_read+=i;
@@ -552,9 +530,9 @@ int MAIN(int argc, char **argv)
} }
totalTime += tm_Time_F(STOP); /* Add the time for this iteration */ totalTime += tm_Time_F(STOP); /* Add the time for this iteration */
i=(int)((long)time(NULL)-finishtime+maxTime); i=(int)(time(NULL)-finishtime+maxTime);
printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read); printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read);
printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn); printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,time(NULL)-finishtime+maxTime,bytes_read/nConn);
/* Now loop and time connections using the same session id over and over */ /* Now loop and time connections using the same session id over and over */
@@ -571,7 +549,7 @@ next:
if (s_www_path != NULL) if (s_www_path != NULL)
{ {
BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path); sprintf(buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
SSL_write(scon,buf,strlen(buf)); SSL_write(scon,buf,strlen(buf));
while (SSL_read(scon,buf,sizeof(buf)) > 0) while (SSL_read(scon,buf,sizeof(buf)) > 0)
; ;
@@ -586,7 +564,7 @@ next:
nConn = 0; nConn = 0;
totalTime = 0.0; totalTime = 0.0;
finishtime=(long)time(NULL)+maxTime; finishtime=time(NULL)+maxTime;
printf( "starting\n" ); printf( "starting\n" );
bytes_read=0; bytes_read=0;
@@ -594,7 +572,7 @@ next:
for (;;) for (;;)
{ {
if (finishtime < (long)time(NULL)) break; if (finishtime < time(NULL)) break;
#ifdef WIN32_STUFF #ifdef WIN32_STUFF
if( flushWinMsgs(0) == -1 ) if( flushWinMsgs(0) == -1 )
@@ -609,7 +587,7 @@ next:
if (s_www_path) if (s_www_path)
{ {
BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path); sprintf(buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
SSL_write(scon,buf,strlen(buf)); SSL_write(scon,buf,strlen(buf));
while ((i=SSL_read(scon,buf,sizeof(buf))) > 0) while ((i=SSL_read(scon,buf,sizeof(buf))) > 0)
bytes_read+=i; bytes_read+=i;
@@ -644,7 +622,7 @@ next:
printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read); printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read);
printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn); printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,time(NULL)-finishtime+maxTime,bytes_read/nConn);
ret=0; ret=0;
end: end:
@@ -655,7 +633,6 @@ end:
SSL_CTX_free(tm_ctx); SSL_CTX_free(tm_ctx);
tm_ctx=NULL; tm_ctx=NULL;
} }
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }

View File

@@ -69,7 +69,7 @@
#undef PROG #undef PROG
#define PROG sess_id_main #define PROG sess_id_main
static const char *sess_id_usage[]={ static char *sess_id_usage[]={
"usage: sess_id args\n", "usage: sess_id args\n",
"\n", "\n",
" -inform arg - input format - default PEM (DER or PEM)\n", " -inform arg - input format - default PEM (DER or PEM)\n",
@@ -95,7 +95,7 @@ int MAIN(int argc, char **argv)
int informat,outformat; int informat,outformat;
char *infile=NULL,*outfile=NULL,*context=NULL; char *infile=NULL,*outfile=NULL,*context=NULL;
int cert=0,noout=0,text=0; int cert=0,noout=0,text=0;
const char **pp; char **pp;
apps_startup(); apps_startup();
@@ -156,7 +156,7 @@ int MAIN(int argc, char **argv)
{ {
bad: bad:
for (pp=sess_id_usage; (*pp != NULL); pp++) for (pp=sess_id_usage; (*pp != NULL); pp++)
BIO_printf(bio_err,"%s",*pp); BIO_printf(bio_err,*pp);
goto end; goto end;
} }
@@ -208,7 +208,7 @@ bad:
if (outfile == NULL) if (outfile == NULL)
{ {
BIO_set_fp(out,stdout,BIO_NOCLOSE); BIO_set_fp(out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -241,7 +241,7 @@ bad:
if (!noout && !cert) if (!noout && !cert)
{ {
if (outformat == FORMAT_ASN1) if (outformat == FORMAT_ASN1)
i=i2d_SSL_SESSION_bio(out,x); i=(int)i2d_SSL_SESSION_bio(out,x);
else if (outformat == FORMAT_PEM) else if (outformat == FORMAT_PEM)
i=PEM_write_bio_SSL_SESSION(out,x); i=PEM_write_bio_SSL_SESSION(out,x);
else { else {
@@ -272,7 +272,6 @@ bad:
end: end:
if (out != NULL) BIO_free_all(out); if (out != NULL) BIO_free_all(out);
if (x != NULL) SSL_SESSION_free(x); if (x != NULL) SSL_SESSION_free(x);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }

View File

@@ -1,9 +1,9 @@
/* smime.c */ /* smime.c */
/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
* project. * project 1999.
*/ */
/* ==================================================================== /* ====================================================================
* Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. * Copyright (c) 1999 The OpenSSL Project. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
@@ -64,13 +64,11 @@
#include <openssl/crypto.h> #include <openssl/crypto.h>
#include <openssl/pem.h> #include <openssl/pem.h>
#include <openssl/err.h> #include <openssl/err.h>
#include <openssl/x509_vfy.h>
#include <openssl/x509v3.h>
#undef PROG #undef PROG
#define PROG smime_main #define PROG smime_main
static X509_STORE *setup_verify(char *CAfile, char *CApath);
static int save_certs(char *signerfile, STACK_OF(X509) *signers); static int save_certs(char *signerfile, STACK_OF(X509) *signers);
static int smime_cb(int ok, X509_STORE_CTX *ctx);
#define SMIME_OP 0x10 #define SMIME_OP 0x10
#define SMIME_ENCRYPT (1 | SMIME_OP) #define SMIME_ENCRYPT (1 | SMIME_OP)
@@ -82,16 +80,15 @@ static int smime_cb(int ok, X509_STORE_CTX *ctx);
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
ENGINE *e = NULL;
int operation = 0; int operation = 0;
int ret = 0; int ret = 0;
char **args; char **args;
const char *inmode = "r", *outmode = "w"; char *inmode = "r", *outmode = "w";
char *infile = NULL, *outfile = NULL; char *infile = NULL, *outfile = NULL;
char *signerfile = NULL, *recipfile = NULL; char *signerfile = NULL, *recipfile = NULL;
char *certfile = NULL, *keyfile = NULL, *contfile=NULL; char *certfile = NULL, *keyfile = NULL, *contfile=NULL;
const EVP_CIPHER *cipher = NULL; EVP_CIPHER *cipher = NULL;
PKCS7 *p7 = NULL; PKCS7 *p7 = NULL;
X509_STORE *store = NULL; X509_STORE *store = NULL;
X509 *cert = NULL, *recip = NULL, *signer = NULL; X509 *cert = NULL, *recip = NULL, *signer = NULL;
@@ -106,72 +103,29 @@ int MAIN(int argc, char **argv)
char *inrand = NULL; char *inrand = NULL;
int need_rand = 0; int need_rand = 0;
int informat = FORMAT_SMIME, outformat = FORMAT_SMIME; int informat = FORMAT_SMIME, outformat = FORMAT_SMIME;
int keyform = FORMAT_PEM;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
X509_VERIFY_PARAM *vpm = NULL;
args = argv + 1; args = argv + 1;
ret = 1; ret = 1;
apps_startup(); while (!badarg && *args && *args[0] == '-') {
if (!strcmp (*args, "-encrypt")) operation = SMIME_ENCRYPT;
if (bio_err == NULL) else if (!strcmp (*args, "-decrypt")) operation = SMIME_DECRYPT;
{ else if (!strcmp (*args, "-sign")) operation = SMIME_SIGN;
if ((bio_err = BIO_new(BIO_s_file())) != NULL) else if (!strcmp (*args, "-verify")) operation = SMIME_VERIFY;
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); else if (!strcmp (*args, "-pk7out")) operation = SMIME_PK7OUT;
} #ifndef NO_DES
if (!load_config(bio_err, NULL))
goto end;
while (!badarg && *args && *args[0] == '-')
{
if (!strcmp (*args, "-encrypt"))
operation = SMIME_ENCRYPT;
else if (!strcmp (*args, "-decrypt"))
operation = SMIME_DECRYPT;
else if (!strcmp (*args, "-sign"))
operation = SMIME_SIGN;
else if (!strcmp (*args, "-verify"))
operation = SMIME_VERIFY;
else if (!strcmp (*args, "-pk7out"))
operation = SMIME_PK7OUT;
#ifndef OPENSSL_NO_DES
else if (!strcmp (*args, "-des3")) else if (!strcmp (*args, "-des3"))
cipher = EVP_des_ede3_cbc(); cipher = EVP_des_ede3_cbc();
else if (!strcmp (*args, "-des")) else if (!strcmp (*args, "-des"))
cipher = EVP_des_cbc(); cipher = EVP_des_cbc();
#endif #endif
#ifndef OPENSSL_NO_SEED #ifndef NO_RC2
else if (!strcmp (*args, "-seed"))
cipher = EVP_seed_cbc();
#endif
#ifndef OPENSSL_NO_RC2
else if (!strcmp (*args, "-rc2-40")) else if (!strcmp (*args, "-rc2-40"))
cipher = EVP_rc2_40_cbc(); cipher = EVP_rc2_40_cbc();
else if (!strcmp (*args, "-rc2-128")) else if (!strcmp (*args, "-rc2-128"))
cipher = EVP_rc2_cbc(); cipher = EVP_rc2_cbc();
else if (!strcmp (*args, "-rc2-64")) else if (!strcmp (*args, "-rc2-64"))
cipher = EVP_rc2_64_cbc(); cipher = EVP_rc2_64_cbc();
#endif
#ifndef OPENSSL_NO_AES
else if (!strcmp(*args,"-aes128"))
cipher = EVP_aes_128_cbc();
else if (!strcmp(*args,"-aes192"))
cipher = EVP_aes_192_cbc();
else if (!strcmp(*args,"-aes256"))
cipher = EVP_aes_256_cbc();
#endif
#ifndef OPENSSL_NO_CAMELLIA
else if (!strcmp(*args,"-camellia128"))
cipher = EVP_camellia_128_cbc();
else if (!strcmp(*args,"-camellia192"))
cipher = EVP_camellia_192_cbc();
else if (!strcmp(*args,"-camellia256"))
cipher = EVP_camellia_256_cbc();
#endif #endif
else if (!strcmp (*args, "-text")) else if (!strcmp (*args, "-text"))
flags |= PKCS7_TEXT; flags |= PKCS7_TEXT;
@@ -193,229 +147,111 @@ int MAIN(int argc, char **argv)
flags |= PKCS7_BINARY; flags |= PKCS7_BINARY;
else if (!strcmp (*args, "-nosigs")) else if (!strcmp (*args, "-nosigs"))
flags |= PKCS7_NOSIGS; flags |= PKCS7_NOSIGS;
else if (!strcmp (*args, "-nooldmime")) else if (!strcmp(*args,"-rand")) {
flags |= PKCS7_NOOLDMIMETYPE; if (args[1]) {
else if (!strcmp (*args, "-crlfeol"))
flags |= PKCS7_CRLFEOL;
else if (!strcmp(*args,"-rand"))
{
if (args[1])
{
args++; args++;
inrand = *args; inrand = *args;
} } else badarg = 1;
else
badarg = 1;
need_rand = 1; need_rand = 1;
} } else if (!strcmp(*args,"-passin")) {
#ifndef OPENSSL_NO_ENGINE if (args[1]) {
else if (!strcmp(*args,"-engine"))
{
if (args[1])
{
args++;
engine = *args;
}
else badarg = 1;
}
#endif
else if (!strcmp(*args,"-passin"))
{
if (args[1])
{
args++; args++;
passargin = *args; passargin = *args;
} } else badarg = 1;
else } else if (!strcmp (*args, "-to")) {
badarg = 1; if (args[1]) {
}
else if (!strcmp (*args, "-to"))
{
if (args[1])
{
args++; args++;
to = *args; to = *args;
} } else badarg = 1;
else } else if (!strcmp (*args, "-from")) {
badarg = 1; if (args[1]) {
}
else if (!strcmp (*args, "-from"))
{
if (args[1])
{
args++; args++;
from = *args; from = *args;
} } else badarg = 1;
else badarg = 1; } else if (!strcmp (*args, "-subject")) {
} if (args[1]) {
else if (!strcmp (*args, "-subject"))
{
if (args[1])
{
args++; args++;
subject = *args; subject = *args;
} } else badarg = 1;
else } else if (!strcmp (*args, "-signer")) {
badarg = 1; if (args[1]) {
}
else if (!strcmp (*args, "-signer"))
{
if (args[1])
{
args++; args++;
signerfile = *args; signerfile = *args;
} } else badarg = 1;
else } else if (!strcmp (*args, "-recip")) {
badarg = 1; if (args[1]) {
}
else if (!strcmp (*args, "-recip"))
{
if (args[1])
{
args++; args++;
recipfile = *args; recipfile = *args;
} } else badarg = 1;
else badarg = 1; } else if (!strcmp (*args, "-inkey")) {
} if (args[1]) {
else if (!strcmp (*args, "-inkey"))
{
if (args[1])
{
args++; args++;
keyfile = *args; keyfile = *args;
} } else badarg = 1;
else } else if (!strcmp (*args, "-certfile")) {
badarg = 1; if (args[1]) {
}
else if (!strcmp (*args, "-keyform"))
{
if (args[1])
{
args++;
keyform = str2fmt(*args);
}
else
badarg = 1;
}
else if (!strcmp (*args, "-certfile"))
{
if (args[1])
{
args++; args++;
certfile = *args; certfile = *args;
} } else badarg = 1;
else } else if (!strcmp (*args, "-CAfile")) {
badarg = 1; if (args[1]) {
}
else if (!strcmp (*args, "-CAfile"))
{
if (args[1])
{
args++; args++;
CAfile = *args; CAfile = *args;
} } else badarg = 1;
else } else if (!strcmp (*args, "-CApath")) {
badarg = 1; if (args[1]) {
}
else if (!strcmp (*args, "-CApath"))
{
if (args[1])
{
args++; args++;
CApath = *args; CApath = *args;
} } else badarg = 1;
else } else if (!strcmp (*args, "-in")) {
badarg = 1; if (args[1]) {
}
else if (!strcmp (*args, "-in"))
{
if (args[1])
{
args++; args++;
infile = *args; infile = *args;
} } else badarg = 1;
else } else if (!strcmp (*args, "-inform")) {
badarg = 1; if (args[1]) {
}
else if (!strcmp (*args, "-inform"))
{
if (args[1])
{
args++; args++;
informat = str2fmt(*args); informat = str2fmt(*args);
} } else badarg = 1;
else } else if (!strcmp (*args, "-outform")) {
badarg = 1; if (args[1]) {
}
else if (!strcmp (*args, "-outform"))
{
if (args[1])
{
args++; args++;
outformat = str2fmt(*args); outformat = str2fmt(*args);
} } else badarg = 1;
else } else if (!strcmp (*args, "-out")) {
badarg = 1; if (args[1]) {
}
else if (!strcmp (*args, "-out"))
{
if (args[1])
{
args++; args++;
outfile = *args; outfile = *args;
} } else badarg = 1;
else } else if (!strcmp (*args, "-content")) {
badarg = 1; if (args[1]) {
}
else if (!strcmp (*args, "-content"))
{
if (args[1])
{
args++; args++;
contfile = *args; contfile = *args;
} } else badarg = 1;
else } else badarg = 1;
badarg = 1;
}
else if (args_verify(&args, NULL, &badarg, bio_err, &vpm))
continue;
else
badarg = 1;
args++; args++;
} }
if(operation == SMIME_SIGN) {
if (operation == SMIME_SIGN) if(!signerfile) {
{
if (!signerfile)
{
BIO_printf(bio_err, "No signer certificate specified\n"); BIO_printf(bio_err, "No signer certificate specified\n");
badarg = 1; badarg = 1;
} }
need_rand = 1; need_rand = 1;
} } else if(operation == SMIME_DECRYPT) {
else if (operation == SMIME_DECRYPT) if(!recipfile) {
{ BIO_printf(bio_err, "No recipient certificate and key specified\n");
if (!recipfile && !keyfile)
{
BIO_printf(bio_err, "No recipient certificate or key specified\n");
badarg = 1; badarg = 1;
}
} }
else if (operation == SMIME_ENCRYPT) } else if(operation == SMIME_ENCRYPT) {
{ if(!*args) {
if (!*args)
{
BIO_printf(bio_err, "No recipient(s) certificate(s) specified\n"); BIO_printf(bio_err, "No recipient(s) certificate(s) specified\n");
badarg = 1; badarg = 1;
}
need_rand = 1;
} }
else if (!operation) need_rand = 1;
badarg = 1; } else if(!operation) badarg = 1;
if (badarg) if (badarg) {
{
BIO_printf (bio_err, "Usage smime [options] cert.pem ...\n"); BIO_printf (bio_err, "Usage smime [options] cert.pem ...\n");
BIO_printf (bio_err, "where options are\n"); BIO_printf (bio_err, "where options are\n");
BIO_printf (bio_err, "-encrypt encrypt message\n"); BIO_printf (bio_err, "-encrypt encrypt message\n");
@@ -423,25 +259,14 @@ int MAIN(int argc, char **argv)
BIO_printf (bio_err, "-sign sign message\n"); BIO_printf (bio_err, "-sign sign message\n");
BIO_printf (bio_err, "-verify verify signed message\n"); BIO_printf (bio_err, "-verify verify signed message\n");
BIO_printf (bio_err, "-pk7out output PKCS#7 structure\n"); BIO_printf (bio_err, "-pk7out output PKCS#7 structure\n");
#ifndef OPENSSL_NO_DES #ifndef NO_DES
BIO_printf (bio_err, "-des3 encrypt with triple DES\n"); BIO_printf (bio_err, "-des3 encrypt with triple DES\n");
BIO_printf (bio_err, "-des encrypt with DES\n"); BIO_printf (bio_err, "-des encrypt with DES\n");
#endif #endif
#ifndef OPENSSL_NO_SEED #ifndef NO_RC2
BIO_printf (bio_err, "-seed encrypt with SEED\n");
#endif
#ifndef OPENSSL_NO_RC2
BIO_printf (bio_err, "-rc2-40 encrypt with RC2-40 (default)\n"); BIO_printf (bio_err, "-rc2-40 encrypt with RC2-40 (default)\n");
BIO_printf (bio_err, "-rc2-64 encrypt with RC2-64\n"); BIO_printf (bio_err, "-rc2-64 encrypt with RC2-64\n");
BIO_printf (bio_err, "-rc2-128 encrypt with RC2-128\n"); BIO_printf (bio_err, "-rc2-128 encrypt with RC2-128\n");
#endif
#ifndef OPENSSL_NO_AES
BIO_printf (bio_err, "-aes128, -aes192, -aes256\n");
BIO_printf (bio_err, " encrypt PEM output with cbc aes\n");
#endif
#ifndef OPENSSL_NO_CAMELLIA
BIO_printf (bio_err, "-camellia128, -camellia192, -camellia256\n");
BIO_printf (bio_err, " encrypt PEM output with cbc camellia\n");
#endif #endif
BIO_printf (bio_err, "-nointern don't search certificates in message for signer\n"); BIO_printf (bio_err, "-nointern don't search certificates in message for signer\n");
BIO_printf (bio_err, "-nosigs don't verify message signature\n"); BIO_printf (bio_err, "-nosigs don't verify message signature\n");
@@ -456,7 +281,6 @@ int MAIN(int argc, char **argv)
BIO_printf (bio_err, "-in file input file\n"); BIO_printf (bio_err, "-in file input file\n");
BIO_printf (bio_err, "-inform arg input format SMIME (default), PEM or DER\n"); BIO_printf (bio_err, "-inform arg input format SMIME (default), PEM or DER\n");
BIO_printf (bio_err, "-inkey file input private key (if not signer or recipient)\n"); BIO_printf (bio_err, "-inkey file input private key (if not signer or recipient)\n");
BIO_printf (bio_err, "-keyform arg input private key format (PEM or ENGINE)\n");
BIO_printf (bio_err, "-out file output file\n"); BIO_printf (bio_err, "-out file output file\n");
BIO_printf (bio_err, "-outform arg output format SMIME (default), PEM or DER\n"); BIO_printf (bio_err, "-outform arg output format SMIME (default), PEM or DER\n");
BIO_printf (bio_err, "-content file supply or override content for detached signature\n"); BIO_printf (bio_err, "-content file supply or override content for detached signature\n");
@@ -466,294 +290,210 @@ int MAIN(int argc, char **argv)
BIO_printf (bio_err, "-text include or delete text MIME headers\n"); BIO_printf (bio_err, "-text include or delete text MIME headers\n");
BIO_printf (bio_err, "-CApath dir trusted certificates directory\n"); BIO_printf (bio_err, "-CApath dir trusted certificates directory\n");
BIO_printf (bio_err, "-CAfile file trusted certificates file\n"); BIO_printf (bio_err, "-CAfile file trusted certificates file\n");
BIO_printf (bio_err, "-crl_check check revocation status of signer's certificate using CRLs\n");
BIO_printf (bio_err, "-crl_check_all check revocation status of signer's certificate chain using CRLs\n");
#ifndef OPENSSL_NO_ENGINE
BIO_printf (bio_err, "-engine e use engine e, possibly a hardware device.\n");
#endif
BIO_printf (bio_err, "-passin arg input file pass phrase source\n"); BIO_printf (bio_err, "-passin arg input file pass phrase source\n");
BIO_printf(bio_err, "-rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); BIO_printf(bio_err, "-rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
BIO_printf(bio_err, " load the file (or the files in the directory) into\n"); BIO_printf(bio_err, " load the file (or the files in the directory) into\n");
BIO_printf(bio_err, " the random number generator\n"); BIO_printf(bio_err, " the random number generator\n");
BIO_printf (bio_err, "cert.pem recipient certificate(s) for encryption\n"); BIO_printf (bio_err, "cert.pem recipient certificate(s) for encryption\n");
goto end; goto end;
} }
#ifndef OPENSSL_NO_ENGINE if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
e = setup_engine(bio_err, engine, 0);
#endif
if (!app_passwd(bio_err, passargin, NULL, &passin, NULL))
{
BIO_printf(bio_err, "Error getting password\n"); BIO_printf(bio_err, "Error getting password\n");
goto end; goto end;
} }
if (need_rand) if (need_rand) {
{
app_RAND_load_file(NULL, bio_err, (inrand != NULL)); app_RAND_load_file(NULL, bio_err, (inrand != NULL));
if (inrand != NULL) if (inrand != NULL)
BIO_printf(bio_err,"%ld semi-random bytes loaded\n", BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
app_RAND_load_files(inrand)); app_RAND_load_files(inrand));
} }
ret = 2; ret = 2;
if (operation != SMIME_SIGN) if(operation != SMIME_SIGN) flags &= ~PKCS7_DETACHED;
flags &= ~PKCS7_DETACHED;
if (operation & SMIME_OP) if(operation & SMIME_OP) {
{ if(flags & PKCS7_BINARY) inmode = "rb";
if (flags & PKCS7_BINARY) if(outformat == FORMAT_ASN1) outmode = "wb";
inmode = "rb"; } else {
if (outformat == FORMAT_ASN1) if(flags & PKCS7_BINARY) outmode = "wb";
outmode = "wb"; if(informat == FORMAT_ASN1) inmode = "rb";
} }
else
{
if (flags & PKCS7_BINARY)
outmode = "wb";
if (informat == FORMAT_ASN1)
inmode = "rb";
}
if (operation == SMIME_ENCRYPT) if(operation == SMIME_ENCRYPT) {
{ if (!cipher) {
if (!cipher) #ifndef NO_RC2
{
#ifndef OPENSSL_NO_RC2
cipher = EVP_rc2_40_cbc(); cipher = EVP_rc2_40_cbc();
#else #else
BIO_printf(bio_err, "No cipher selected\n"); BIO_printf(bio_err, "No cipher selected\n");
goto end; goto end;
#endif #endif
} }
encerts = sk_X509_new_null(); encerts = sk_X509_new_null();
while (*args) while (*args) {
{ if(!(cert = load_cert(bio_err,*args,FORMAT_PEM))) {
if (!(cert = load_cert(bio_err,*args,FORMAT_PEM,
NULL, e, "recipient certificate file")))
{
#if 0 /* An appropriate message is already printed */
BIO_printf(bio_err, "Can't read recipient certificate file %s\n", *args); BIO_printf(bio_err, "Can't read recipient certificate file %s\n", *args);
#endif
goto end; goto end;
} }
sk_X509_push(encerts, cert); sk_X509_push(encerts, cert);
cert = NULL; cert = NULL;
args++; args++;
}
} }
}
if (signerfile && (operation == SMIME_SIGN)) if(signerfile && (operation == SMIME_SIGN)) {
{ if(!(signer = load_cert(bio_err,signerfile,FORMAT_PEM))) {
if (!(signer = load_cert(bio_err,signerfile,FORMAT_PEM, NULL,
e, "signer certificate")))
{
#if 0 /* An appropri message has already been printed */
BIO_printf(bio_err, "Can't read signer certificate file %s\n", signerfile); BIO_printf(bio_err, "Can't read signer certificate file %s\n", signerfile);
#endif
goto end; goto end;
}
} }
}
if (certfile) if(certfile) {
{ if(!(other = load_certs(bio_err,certfile,FORMAT_PEM))) {
if (!(other = load_certs(bio_err,certfile,FORMAT_PEM, NULL,
e, "certificate file")))
{
#if 0 /* An appropriate message has already been printed */
BIO_printf(bio_err, "Can't read certificate file %s\n", certfile); BIO_printf(bio_err, "Can't read certificate file %s\n", certfile);
#endif
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
goto end; goto end;
}
} }
}
if (recipfile && (operation == SMIME_DECRYPT)) if(recipfile && (operation == SMIME_DECRYPT)) {
{ if(!(recip = load_cert(bio_err,recipfile,FORMAT_PEM))) {
if (!(recip = load_cert(bio_err,recipfile,FORMAT_PEM,NULL,
e, "recipient certificate file")))
{
#if 0 /* An appropriate message has alrady been printed */
BIO_printf(bio_err, "Can't read recipient certificate file %s\n", recipfile); BIO_printf(bio_err, "Can't read recipient certificate file %s\n", recipfile);
#endif
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
goto end; goto end;
}
} }
}
if (operation == SMIME_DECRYPT) if(operation == SMIME_DECRYPT) {
{ if(!keyfile) keyfile = recipfile;
if (!keyfile) } else if(operation == SMIME_SIGN) {
keyfile = recipfile; if(!keyfile) keyfile = signerfile;
} } else keyfile = NULL;
else if (operation == SMIME_SIGN)
{
if (!keyfile)
keyfile = signerfile;
}
else keyfile = NULL;
if (keyfile) if(keyfile) {
{ if(!(key = load_key(bio_err,keyfile, FORMAT_PEM, passin))) {
key = load_key(bio_err, keyfile, keyform, 0, passin, e, BIO_printf(bio_err, "Can't read recipient certificate file %s\n", keyfile);
"signing key file"); ERR_print_errors(bio_err);
if (!key)
goto end; goto end;
} }
}
if (infile) if (infile) {
{ if (!(in = BIO_new_file(infile, inmode))) {
if (!(in = BIO_new_file(infile, inmode)))
{
BIO_printf (bio_err, BIO_printf (bio_err,
"Can't open input file %s\n", infile); "Can't open input file %s\n", infile);
goto end; goto end;
}
} }
else } else in = BIO_new_fp(stdin, BIO_NOCLOSE);
in = BIO_new_fp(stdin, BIO_NOCLOSE);
if (outfile) if (outfile) {
{ if (!(out = BIO_new_file(outfile, outmode))) {
if (!(out = BIO_new_file(outfile, outmode)))
{
BIO_printf (bio_err, BIO_printf (bio_err,
"Can't open output file %s\n", outfile); "Can't open output file %s\n", outfile);
goto end; goto end;
}
} }
else } else {
{
out = BIO_new_fp(stdout, BIO_NOCLOSE); out = BIO_new_fp(stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
} }
#endif #endif
} }
if (operation == SMIME_VERIFY)
{
if (!(store = setup_verify(bio_err, CAfile, CApath)))
goto end;
X509_STORE_set_verify_cb_func(store, smime_cb);
if (vpm)
X509_STORE_set1_param(store, vpm);
}
if(operation == SMIME_VERIFY) {
if(!(store = setup_verify(CAfile, CApath))) goto end;
}
ret = 3; ret = 3;
if (operation == SMIME_ENCRYPT) if(operation == SMIME_ENCRYPT) {
p7 = PKCS7_encrypt(encerts, in, cipher, flags); p7 = PKCS7_encrypt(encerts, in, cipher, flags);
else if (operation == SMIME_SIGN) } else if(operation == SMIME_SIGN) {
{
/* If detached data and SMIME output enable partial
* signing.
*/
if ((flags & PKCS7_DETACHED) && (outformat == FORMAT_SMIME))
flags |= PKCS7_STREAM;
p7 = PKCS7_sign(signer, key, other, in, flags); p7 = PKCS7_sign(signer, key, other, in, flags);
if (BIO_reset(in) != 0 && (flags & PKCS7_DETACHED)) {
BIO_printf(bio_err, "Can't rewind input file\n");
goto end;
} }
else } else {
{ if(informat == FORMAT_SMIME)
if (informat == FORMAT_SMIME)
p7 = SMIME_read_PKCS7(in, &indata); p7 = SMIME_read_PKCS7(in, &indata);
else if (informat == FORMAT_PEM) else if(informat == FORMAT_PEM)
p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL); p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL);
else if (informat == FORMAT_ASN1) else if(informat == FORMAT_ASN1)
p7 = d2i_PKCS7_bio(in, NULL); p7 = d2i_PKCS7_bio(in, NULL);
else else {
{
BIO_printf(bio_err, "Bad input format for PKCS#7 file\n"); BIO_printf(bio_err, "Bad input format for PKCS#7 file\n");
goto end; goto end;
} }
if (!p7) if(!p7) {
{
BIO_printf(bio_err, "Error reading S/MIME message\n"); BIO_printf(bio_err, "Error reading S/MIME message\n");
goto end; goto end;
} }
if (contfile) if(contfile) {
{
BIO_free(indata); BIO_free(indata);
if (!(indata = BIO_new_file(contfile, "rb"))) if(!(indata = BIO_new_file(contfile, "rb"))) {
{
BIO_printf(bio_err, "Can't read content file %s\n", contfile); BIO_printf(bio_err, "Can't read content file %s\n", contfile);
goto end; goto end;
}
} }
} }
}
if (!p7) if(!p7) {
{
BIO_printf(bio_err, "Error creating PKCS#7 structure\n"); BIO_printf(bio_err, "Error creating PKCS#7 structure\n");
goto end; goto end;
} }
ret = 4; ret = 4;
if (operation == SMIME_DECRYPT) if(operation == SMIME_DECRYPT) {
{ if(!PKCS7_decrypt(p7, key, recip, out, flags)) {
if (!PKCS7_decrypt(p7, key, recip, out, flags))
{
BIO_printf(bio_err, "Error decrypting PKCS#7 structure\n"); BIO_printf(bio_err, "Error decrypting PKCS#7 structure\n");
goto end; goto end;
}
} }
else if (operation == SMIME_VERIFY) } else if(operation == SMIME_VERIFY) {
{
STACK_OF(X509) *signers; STACK_OF(X509) *signers;
if (PKCS7_verify(p7, other, store, indata, out, flags)) if(PKCS7_verify(p7, other, store, indata, out, flags)) {
BIO_printf(bio_err, "Verification successful\n"); BIO_printf(bio_err, "Verification successful\n");
else } else {
{
BIO_printf(bio_err, "Verification failure\n"); BIO_printf(bio_err, "Verification failure\n");
goto end; goto end;
} }
signers = PKCS7_get0_signers(p7, other, flags); signers = PKCS7_get0_signers(p7, other, flags);
if (!save_certs(signerfile, signers)) if(!save_certs(signerfile, signers)) {
{
BIO_printf(bio_err, "Error writing signers to %s\n", BIO_printf(bio_err, "Error writing signers to %s\n",
signerfile); signerfile);
ret = 5; ret = 5;
goto end; goto end;
}
sk_X509_free(signers);
} }
else if (operation == SMIME_PK7OUT) sk_X509_free(signers);
} else if(operation == SMIME_PK7OUT) {
PEM_write_bio_PKCS7(out, p7); PEM_write_bio_PKCS7(out, p7);
else } else {
{ if(to) BIO_printf(out, "To: %s\n", to);
if (to) if(from) BIO_printf(out, "From: %s\n", from);
BIO_printf(out, "To: %s\n", to); if(subject) BIO_printf(out, "Subject: %s\n", subject);
if (from) if(outformat == FORMAT_SMIME)
BIO_printf(out, "From: %s\n", from);
if (subject)
BIO_printf(out, "Subject: %s\n", subject);
if (outformat == FORMAT_SMIME)
SMIME_write_PKCS7(out, p7, in, flags); SMIME_write_PKCS7(out, p7, in, flags);
else if (outformat == FORMAT_PEM) else if(outformat == FORMAT_PEM)
PEM_write_bio_PKCS7(out,p7); PEM_write_bio_PKCS7(out,p7);
else if (outformat == FORMAT_ASN1) else if(outformat == FORMAT_ASN1)
i2d_PKCS7_bio(out,p7); i2d_PKCS7_bio(out,p7);
else else {
{
BIO_printf(bio_err, "Bad output format for PKCS#7 file\n"); BIO_printf(bio_err, "Bad output format for PKCS#7 file\n");
goto end; goto end;
}
} }
}
ret = 0; ret = 0;
end: end:
if (need_rand) if (need_rand)
app_RAND_write_file(NULL, bio_err); app_RAND_write_file(NULL, bio_err);
if (ret) ERR_print_errors(bio_err); if(ret) ERR_print_errors(bio_err);
sk_X509_pop_free(encerts, X509_free); sk_X509_pop_free(encerts, X509_free);
sk_X509_pop_free(other, X509_free); sk_X509_pop_free(other, X509_free);
if (vpm)
X509_VERIFY_PARAM_free(vpm);
X509_STORE_free(store); X509_STORE_free(store);
X509_free(cert); X509_free(cert);
X509_free(recip); X509_free(recip);
@@ -763,39 +503,50 @@ end:
BIO_free(in); BIO_free(in);
BIO_free(indata); BIO_free(indata);
BIO_free_all(out); BIO_free_all(out);
if (passin) OPENSSL_free(passin); if(passin) OPENSSL_free(passin);
return (ret); return (ret);
} }
static X509_STORE *setup_verify(char *CAfile, char *CApath)
{
X509_STORE *store;
X509_LOOKUP *lookup;
if(!(store = X509_STORE_new())) goto end;
lookup=X509_STORE_add_lookup(store,X509_LOOKUP_file());
if (lookup == NULL) goto end;
if (CAfile) {
if(!X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM)) {
BIO_printf(bio_err, "Error loading file %s\n", CAfile);
goto end;
}
} else X509_LOOKUP_load_file(lookup,NULL,X509_FILETYPE_DEFAULT);
lookup=X509_STORE_add_lookup(store,X509_LOOKUP_hash_dir());
if (lookup == NULL) goto end;
if (CApath) {
if(!X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM)) {
BIO_printf(bio_err, "Error loading directory %s\n", CApath);
goto end;
}
} else X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
ERR_clear_error();
return store;
end:
X509_STORE_free(store);
return NULL;
}
static int save_certs(char *signerfile, STACK_OF(X509) *signers) static int save_certs(char *signerfile, STACK_OF(X509) *signers)
{ {
int i; int i;
BIO *tmp; BIO *tmp;
if (!signerfile) if(!signerfile) return 1;
return 1;
tmp = BIO_new_file(signerfile, "w"); tmp = BIO_new_file(signerfile, "w");
if (!tmp) return 0; if(!tmp) return 0;
for(i = 0; i < sk_X509_num(signers); i++) for(i = 0; i < sk_X509_num(signers); i++)
PEM_write_bio_X509(tmp, sk_X509_value(signers, i)); PEM_write_bio_X509(tmp, sk_X509_value(signers, i));
BIO_free(tmp); BIO_free(tmp);
return 1; return 1;
} }
/* Minimal callback just to output policy info (if any) */
static int smime_cb(int ok, X509_STORE_CTX *ctx)
{
int error;
error = X509_STORE_CTX_get_error(ctx);
if ((error != X509_V_ERR_NO_EXPLICIT_POLICY)
&& ((error != X509_V_OK) || (ok != 2)))
return ok;
policies_print(NULL, ctx);
return ok;
}

File diff suppressed because it is too large Load Diff

View File

@@ -81,29 +81,21 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
ENGINE *e = NULL;
int i,badops=0, ret = 1; int i,badops=0, ret = 1;
BIO *in = NULL,*out = NULL; BIO *in = NULL,*out = NULL, *key = NULL;
int verify=0,noout=0,pubkey=0; int verify=0,noout=0,pubkey=0;
char *infile = NULL,*outfile = NULL,*prog; char *infile = NULL,*outfile = NULL,*prog;
char *passargin = NULL, *passin = NULL; char *passargin = NULL, *passin = NULL;
const char *spkac = "SPKAC", *spksect = "default"; char *spkac = "SPKAC", *spksect = "default", *spkstr = NULL;
char *spkstr = NULL;
char *challenge = NULL, *keyfile = NULL; char *challenge = NULL, *keyfile = NULL;
CONF *conf = NULL; LHASH *conf = NULL;
NETSCAPE_SPKI *spki = NULL; NETSCAPE_SPKI *spki = NULL;
EVP_PKEY *pkey = NULL; EVP_PKEY *pkey = NULL;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
apps_startup(); apps_startup();
if (!bio_err) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); if (!bio_err) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
if (!load_config(bio_err, NULL))
goto end;
prog=argv[0]; prog=argv[0];
argc--; argc--;
argv++; argv++;
@@ -144,13 +136,6 @@ int MAIN(int argc, char **argv)
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
spksect= *(++argv); spksect= *(++argv);
} }
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine= *(++argv);
}
#endif
else if (strcmp(*argv,"-noout") == 0) else if (strcmp(*argv,"-noout") == 0)
noout=1; noout=1;
else if (strcmp(*argv,"-pubkey") == 0) else if (strcmp(*argv,"-pubkey") == 0)
@@ -176,9 +161,6 @@ bad:
BIO_printf(bio_err," -noout don't print SPKAC\n"); BIO_printf(bio_err," -noout don't print SPKAC\n");
BIO_printf(bio_err," -pubkey output public key\n"); BIO_printf(bio_err," -pubkey output public key\n");
BIO_printf(bio_err," -verify verify SPKAC signature\n"); BIO_printf(bio_err," -verify verify SPKAC signature\n");
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
#endif
goto end; goto end;
} }
@@ -188,20 +170,23 @@ bad:
goto end; goto end;
} }
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
if(keyfile) { if(keyfile) {
pkey = load_key(bio_err, if(strcmp(keyfile, "-")) key = BIO_new_file(keyfile, "r");
strcmp(keyfile, "-") ? keyfile : NULL, else key = BIO_new_fp(stdin, BIO_NOCLOSE);
FORMAT_PEM, 1, passin, e, "private key"); if(!key) {
BIO_printf(bio_err, "Error opening key file\n");
ERR_print_errors(bio_err);
goto end;
}
pkey = PEM_read_bio_PrivateKey(key, NULL, NULL, passin);
if(!pkey) { if(!pkey) {
BIO_printf(bio_err, "Error reading private key\n");
ERR_print_errors(bio_err);
goto end; goto end;
} }
spki = NETSCAPE_SPKI_new(); spki = NETSCAPE_SPKI_new();
if(challenge) ASN1_STRING_set(spki->spkac->challenge, if(challenge) ASN1_STRING_set(spki->spkac->challenge,
challenge, (int)strlen(challenge)); challenge, strlen(challenge));
NETSCAPE_SPKI_set_pubkey(spki, pkey); NETSCAPE_SPKI_set_pubkey(spki, pkey);
NETSCAPE_SPKI_sign(spki, pkey, EVP_md5()); NETSCAPE_SPKI_sign(spki, pkey, EVP_md5());
spkstr = NETSCAPE_SPKI_b64_encode(spki); spkstr = NETSCAPE_SPKI_b64_encode(spki);
@@ -209,7 +194,7 @@ bad:
if (outfile) out = BIO_new_file(outfile, "w"); if (outfile) out = BIO_new_file(outfile, "w");
else { else {
out = BIO_new_fp(stdout, BIO_NOCLOSE); out = BIO_new_fp(stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -239,16 +224,15 @@ bad:
goto end; goto end;
} }
conf = NCONF_new(NULL); conf = CONF_load_bio(NULL, in, NULL);
i = NCONF_load_bio(conf, in, NULL);
if(!i) { if(!conf) {
BIO_printf(bio_err, "Error parsing config file\n"); BIO_printf(bio_err, "Error parsing config file\n");
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
goto end; goto end;
} }
spkstr = NCONF_get_string(conf, spksect, spkac); spkstr = CONF_get_string(conf, spksect, spkac);
if(!spkstr) { if(!spkstr) {
BIO_printf(bio_err, "Can't find SPKAC called \"%s\"\n", spkac); BIO_printf(bio_err, "Can't find SPKAC called \"%s\"\n", spkac);
@@ -267,7 +251,7 @@ bad:
if (outfile) out = BIO_new_file(outfile, "w"); if (outfile) out = BIO_new_file(outfile, "w");
else { else {
out = BIO_new_fp(stdout, BIO_NOCLOSE); out = BIO_new_fp(stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -297,12 +281,12 @@ bad:
ret = 0; ret = 0;
end: end:
NCONF_free(conf); CONF_free(conf);
NETSCAPE_SPKI_free(spki); NETSCAPE_SPKI_free(spki);
BIO_free(in); BIO_free(in);
BIO_free_all(out); BIO_free_all(out);
BIO_free(key);
EVP_PKEY_free(pkey); EVP_PKEY_free(pkey);
if(passin) OPENSSL_free(passin); if(passin) OPENSSL_free(passin);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }

View File

@@ -3,18 +3,6 @@
DSA *get_dsa512(void ); DSA *get_dsa512(void );
DSA *get_dsa1024(void ); DSA *get_dsa1024(void );
DSA *get_dsa2048(void ); DSA *get_dsa2048(void );
static unsigned char dsa512_priv[] = {
0x65,0xe5,0xc7,0x38,0x60,0x24,0xb5,0x89,0xd4,0x9c,0xeb,0x4c,
0x9c,0x1d,0x7a,0x22,0xbd,0xd1,0xc2,0xd2,
};
static unsigned char dsa512_pub[] = {
0x00,0x95,0xa7,0x0d,0xec,0x93,0x68,0xba,0x5f,0xf7,0x5f,0x07,
0xf2,0x3b,0xad,0x6b,0x01,0xdc,0xbe,0xec,0xde,0x04,0x7a,0x3a,
0x27,0xb3,0xec,0x49,0xfd,0x08,0x43,0x3d,0x7e,0xa8,0x2c,0x5e,
0x7b,0xbb,0xfc,0xf4,0x6e,0xeb,0x6c,0xb0,0x6e,0xf8,0x02,0x12,
0x8c,0x38,0x5d,0x83,0x56,0x7d,0xee,0x53,0x05,0x3e,0x24,0x84,
0xbe,0xba,0x0a,0x6b,0xc8,
};
static unsigned char dsa512_p[]={ static unsigned char dsa512_p[]={
0x9D,0x1B,0x69,0x8E,0x26,0xDB,0xF2,0x2B,0x11,0x70,0x19,0x86, 0x9D,0x1B,0x69,0x8E,0x26,0xDB,0xF2,0x2B,0x11,0x70,0x19,0x86,
0xF6,0x19,0xC8,0xF8,0x19,0xF2,0x18,0x53,0x94,0x46,0x06,0xD0, 0xF6,0x19,0xC8,0xF8,0x19,0xF2,0x18,0x53,0x94,0x46,0x06,0xD0,
@@ -41,34 +29,14 @@ DSA *get_dsa512()
DSA *dsa; DSA *dsa;
if ((dsa=DSA_new()) == NULL) return(NULL); if ((dsa=DSA_new()) == NULL) return(NULL);
dsa->priv_key=BN_bin2bn(dsa512_priv,sizeof(dsa512_priv),NULL);
dsa->pub_key=BN_bin2bn(dsa512_pub,sizeof(dsa512_pub),NULL);
dsa->p=BN_bin2bn(dsa512_p,sizeof(dsa512_p),NULL); dsa->p=BN_bin2bn(dsa512_p,sizeof(dsa512_p),NULL);
dsa->q=BN_bin2bn(dsa512_q,sizeof(dsa512_q),NULL); dsa->q=BN_bin2bn(dsa512_q,sizeof(dsa512_q),NULL);
dsa->g=BN_bin2bn(dsa512_g,sizeof(dsa512_g),NULL); dsa->g=BN_bin2bn(dsa512_g,sizeof(dsa512_g),NULL);
if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL) || if ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))
(dsa->q == NULL) || (dsa->g == NULL))
return(NULL); return(NULL);
return(dsa); return(dsa);
} }
static unsigned char dsa1024_priv[]={
0x7d,0x21,0xda,0xbb,0x62,0x15,0x47,0x36,0x07,0x67,0x12,0xe8,
0x8c,0xaa,0x1c,0xcd,0x38,0x12,0x61,0x18,
};
static unsigned char dsa1024_pub[]={
0x3c,0x4e,0x9c,0x2a,0x7f,0x16,0xc1,0x25,0xeb,0xac,0x78,0x63,
0x90,0x14,0x8c,0x8b,0xf4,0x68,0x43,0x3c,0x2d,0xee,0x65,0x50,
0x7d,0x9c,0x8f,0x8c,0x8a,0x51,0xd6,0x11,0x2b,0x99,0xaf,0x1e,
0x90,0x97,0xb5,0xd3,0xa6,0x20,0x25,0xd6,0xfe,0x43,0x02,0xd5,
0x91,0x7d,0xa7,0x8c,0xdb,0xc9,0x85,0xa3,0x36,0x48,0xf7,0x68,
0xaa,0x60,0xb1,0xf7,0x05,0x68,0x3a,0xa3,0x3f,0xd3,0x19,0x82,
0xd8,0x82,0x7a,0x77,0xfb,0xef,0xf4,0x15,0x0a,0xeb,0x06,0x04,
0x7f,0x53,0x07,0x0c,0xbc,0xcb,0x2d,0x83,0xdb,0x3e,0xd1,0x28,
0xa5,0xa1,0x31,0xe0,0x67,0xfa,0x50,0xde,0x9b,0x07,0x83,0x7e,
0x2c,0x0b,0xc3,0x13,0x50,0x61,0xe5,0xad,0xbd,0x36,0xb8,0x97,
0x4e,0x40,0x7d,0xe8,0x83,0x0d,0xbc,0x4b
};
static unsigned char dsa1024_p[]={ static unsigned char dsa1024_p[]={
0xA7,0x3F,0x6E,0x85,0xBF,0x41,0x6A,0x29,0x7D,0xF0,0x9F,0x47, 0xA7,0x3F,0x6E,0x85,0xBF,0x41,0x6A,0x29,0x7D,0xF0,0x9F,0x47,
0x19,0x30,0x90,0x9A,0x09,0x1D,0xDA,0x6A,0x33,0x1E,0xC5,0x3D, 0x19,0x30,0x90,0x9A,0x09,0x1D,0xDA,0x6A,0x33,0x1E,0xC5,0x3D,
@@ -105,45 +73,14 @@ DSA *get_dsa1024()
DSA *dsa; DSA *dsa;
if ((dsa=DSA_new()) == NULL) return(NULL); if ((dsa=DSA_new()) == NULL) return(NULL);
dsa->priv_key=BN_bin2bn(dsa1024_priv,sizeof(dsa1024_priv),NULL);
dsa->pub_key=BN_bin2bn(dsa1024_pub,sizeof(dsa1024_pub),NULL);
dsa->p=BN_bin2bn(dsa1024_p,sizeof(dsa1024_p),NULL); dsa->p=BN_bin2bn(dsa1024_p,sizeof(dsa1024_p),NULL);
dsa->q=BN_bin2bn(dsa1024_q,sizeof(dsa1024_q),NULL); dsa->q=BN_bin2bn(dsa1024_q,sizeof(dsa1024_q),NULL);
dsa->g=BN_bin2bn(dsa1024_g,sizeof(dsa1024_g),NULL); dsa->g=BN_bin2bn(dsa1024_g,sizeof(dsa1024_g),NULL);
if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL) || if ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))
(dsa->q == NULL) || (dsa->g == NULL))
return(NULL); return(NULL);
return(dsa); return(dsa);
} }
static unsigned char dsa2048_priv[]={
0x32,0x67,0x92,0xf6,0xc4,0xe2,0xe2,0xe8,0xa0,0x8b,0x6b,0x45,
0x0c,0x8a,0x76,0xb0,0xee,0xcf,0x91,0xa7,
};
static unsigned char dsa2048_pub[]={
0x17,0x8f,0xa8,0x11,0x84,0x92,0xec,0x83,0x47,0xc7,0x6a,0xb0,
0x92,0xaf,0x5a,0x20,0x37,0xa3,0x64,0x79,0xd2,0xd0,0x3d,0xcd,
0xe0,0x61,0x88,0x88,0x21,0xcc,0x74,0x5d,0xce,0x4c,0x51,0x47,
0xf0,0xc5,0x5c,0x4c,0x82,0x7a,0xaf,0x72,0xad,0xb9,0xe0,0x53,
0xf2,0x78,0xb7,0xf0,0xb5,0x48,0x7f,0x8a,0x3a,0x18,0xd1,0x9f,
0x8b,0x7d,0xa5,0x47,0xb7,0x95,0xab,0x98,0xf8,0x7b,0x74,0x50,
0x56,0x8e,0x57,0xf0,0xee,0xf5,0xb7,0xba,0xab,0x85,0x86,0xf9,
0x2b,0xef,0x41,0x56,0xa0,0xa4,0x9f,0xb7,0x38,0x00,0x46,0x0a,
0xa6,0xf1,0xfc,0x1f,0xd8,0x4e,0x85,0x44,0x92,0x43,0x21,0x5d,
0x6e,0xcc,0xc2,0xcb,0x26,0x31,0x0d,0x21,0xc4,0xbd,0x8d,0x24,
0xbc,0xd9,0x18,0x19,0xd7,0xdc,0xf1,0xe7,0x93,0x50,0x48,0x03,
0x2c,0xae,0x2e,0xe7,0x49,0x88,0x5f,0x93,0x57,0x27,0x99,0x36,
0xb4,0x20,0xab,0xfc,0xa7,0x2b,0xf2,0xd9,0x98,0xd7,0xd4,0x34,
0x9d,0x96,0x50,0x58,0x9a,0xea,0x54,0xf3,0xee,0xf5,0x63,0x14,
0xee,0x85,0x83,0x74,0x76,0xe1,0x52,0x95,0xc3,0xf7,0xeb,0x04,
0x04,0x7b,0xa7,0x28,0x1b,0xcc,0xea,0x4a,0x4e,0x84,0xda,0xd8,
0x9c,0x79,0xd8,0x9b,0x66,0x89,0x2f,0xcf,0xac,0xd7,0x79,0xf9,
0xa9,0xd8,0x45,0x13,0x78,0xb9,0x00,0x14,0xc9,0x7e,0x22,0x51,
0x86,0x67,0xb0,0x9f,0x26,0x11,0x23,0xc8,0x38,0xd7,0x70,0x1d,
0x15,0x8e,0x4d,0x4f,0x95,0x97,0x40,0xa1,0xc2,0x7e,0x01,0x18,
0x72,0xf4,0x10,0xe6,0x8d,0x52,0x16,0x7f,0xf2,0xc9,0xf8,0x33,
0x8b,0x33,0xb7,0xce,
};
static unsigned char dsa2048_p[]={ static unsigned char dsa2048_p[]={
0xA0,0x25,0xFA,0xAD,0xF4,0x8E,0xB9,0xE5,0x99,0xF3,0x5D,0x6F, 0xA0,0x25,0xFA,0xAD,0xF4,0x8E,0xB9,0xE5,0x99,0xF3,0x5D,0x6F,
0x4F,0x83,0x34,0xE2,0x7E,0xCF,0x6F,0xBF,0x30,0xAF,0x6F,0x81, 0x4F,0x83,0x34,0xE2,0x7E,0xCF,0x6F,0xBF,0x30,0xAF,0x6F,0x81,
@@ -202,13 +139,10 @@ DSA *get_dsa2048()
DSA *dsa; DSA *dsa;
if ((dsa=DSA_new()) == NULL) return(NULL); if ((dsa=DSA_new()) == NULL) return(NULL);
dsa->priv_key=BN_bin2bn(dsa2048_priv,sizeof(dsa2048_priv),NULL);
dsa->pub_key=BN_bin2bn(dsa2048_pub,sizeof(dsa2048_pub),NULL);
dsa->p=BN_bin2bn(dsa2048_p,sizeof(dsa2048_p),NULL); dsa->p=BN_bin2bn(dsa2048_p,sizeof(dsa2048_p),NULL);
dsa->q=BN_bin2bn(dsa2048_q,sizeof(dsa2048_q),NULL); dsa->q=BN_bin2bn(dsa2048_q,sizeof(dsa2048_q),NULL);
dsa->g=BN_bin2bn(dsa2048_g,sizeof(dsa2048_g),NULL); dsa->g=BN_bin2bn(dsa2048_g,sizeof(dsa2048_g),NULL);
if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL) || if ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))
(dsa->q == NULL) || (dsa->g == NULL))
return(NULL); return(NULL);
return(dsa); return(dsa);
} }

View File

@@ -1,67 +0,0 @@
/* apps/timeouts.h */
/*
* DTLS implementation written by Nagendra Modadugu
* (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
*/
/* ====================================================================
* Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@OpenSSL.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
#ifndef INCLUDED_TIMEOUTS_H
#define INCLUDED_TIMEOUTS_H
/* numbers in us */
#define DGRAM_RCV_TIMEOUT 250000
#define DGRAM_SND_TIMEOUT 250000
#endif /* ! INCLUDED_TIMEOUTS_H */

View File

@@ -70,26 +70,21 @@
#define PROG verify_main #define PROG verify_main
static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx); static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx);
static int check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain, STACK_OF(X509) *tchain, int purpose, ENGINE *e); static int check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain, STACK_OF(X509) *tchain, int purpose);
static STACK_OF(X509) *load_untrusted(char *file); static STACK_OF(X509) *load_untrusted(char *file);
static int v_verbose=0, vflags = 0; static int v_verbose=0, issuer_checks = 0;
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
ENGINE *e = NULL; int i,ret=1;
int i,ret=1, badarg = 0;
int purpose = -1; int purpose = -1;
char *CApath=NULL,*CAfile=NULL; char *CApath=NULL,*CAfile=NULL;
char *untfile = NULL, *trustfile = NULL; char *untfile = NULL, *trustfile = NULL;
STACK_OF(X509) *untrusted = NULL, *trusted = NULL; STACK_OF(X509) *untrusted = NULL, *trusted = NULL;
X509_STORE *cert_ctx=NULL; X509_STORE *cert_ctx=NULL;
X509_LOOKUP *lookup=NULL; X509_LOOKUP *lookup=NULL;
X509_VERIFY_PARAM *vpm = NULL;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
cert_ctx=X509_STORE_new(); cert_ctx=X509_STORE_new();
if (cert_ctx == NULL) goto end; if (cert_ctx == NULL) goto end;
@@ -103,9 +98,6 @@ int MAIN(int argc, char **argv)
if ((bio_err=BIO_new(BIO_s_file())) != NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto end;
argc--; argc--;
argv++; argv++;
for (;;) for (;;)
@@ -122,12 +114,18 @@ int MAIN(int argc, char **argv)
if (argc-- < 1) goto end; if (argc-- < 1) goto end;
CAfile= *(++argv); CAfile= *(++argv);
} }
else if (args_verify(&argv, &argc, &badarg, bio_err, else if (strcmp(*argv,"-purpose") == 0)
&vpm))
{ {
if (badarg) X509_PURPOSE *xptmp;
if (argc-- < 1) goto end;
i = X509_PURPOSE_get_by_sname(*(++argv));
if(i < 0)
{
BIO_printf(bio_err, "unrecognized purpose\n");
goto end; goto end;
continue; }
xptmp = X509_PURPOSE_get0(i);
purpose = X509_PURPOSE_get_id(xptmp);
} }
else if (strcmp(*argv,"-untrusted") == 0) else if (strcmp(*argv,"-untrusted") == 0)
{ {
@@ -139,15 +137,10 @@ int MAIN(int argc, char **argv)
if (argc-- < 1) goto end; if (argc-- < 1) goto end;
trustfile= *(++argv); trustfile= *(++argv);
} }
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto end;
engine= *(++argv);
}
#endif
else if (strcmp(*argv,"-help") == 0) else if (strcmp(*argv,"-help") == 0)
goto end; goto end;
else if (strcmp(*argv,"-issuer_checks") == 0)
issuer_checks=1;
else if (strcmp(*argv,"-verbose") == 0) else if (strcmp(*argv,"-verbose") == 0)
v_verbose=1; v_verbose=1;
else if (argv[0][0] == '-') else if (argv[0][0] == '-')
@@ -161,13 +154,6 @@ int MAIN(int argc, char **argv)
break; break;
} }
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
if (vpm)
X509_STORE_set1_param(cert_ctx, vpm);
lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_file()); lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_file());
if (lookup == NULL) abort(); if (lookup == NULL) abort();
if (CAfile) { if (CAfile) {
@@ -208,18 +194,14 @@ int MAIN(int argc, char **argv)
} }
} }
if (argc < 1) check(cert_ctx, NULL, untrusted, trusted, purpose, e); if (argc < 1) check(cert_ctx, NULL, untrusted, trusted, purpose);
else else
for (i=0; i<argc; i++) for (i=0; i<argc; i++)
check(cert_ctx,argv[i], untrusted, trusted, purpose, e); check(cert_ctx,argv[i], untrusted, trusted, purpose);
ret=0; ret=0;
end: end:
if (ret == 1) { if (ret == 1) {
BIO_printf(bio_err,"usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check]"); BIO_printf(bio_err,"usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] cert1 cert2 ...\n");
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err," [-engine e]");
#endif
BIO_printf(bio_err," cert1 cert2 ...\n");
BIO_printf(bio_err,"recognized usages:\n"); BIO_printf(bio_err,"recognized usages:\n");
for(i = 0; i < X509_PURPOSE_get_count(); i++) { for(i = 0; i < X509_PURPOSE_get_count(); i++) {
X509_PURPOSE *ptmp; X509_PURPOSE *ptmp;
@@ -228,23 +210,45 @@ end:
X509_PURPOSE_get0_name(ptmp)); X509_PURPOSE_get0_name(ptmp));
} }
} }
if (vpm) X509_VERIFY_PARAM_free(vpm);
if (cert_ctx != NULL) X509_STORE_free(cert_ctx); if (cert_ctx != NULL) X509_STORE_free(cert_ctx);
sk_X509_pop_free(untrusted, X509_free); sk_X509_pop_free(untrusted, X509_free);
sk_X509_pop_free(trusted, X509_free); sk_X509_pop_free(trusted, X509_free);
apps_shutdown();
OPENSSL_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) static int check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain, STACK_OF(X509) *tchain, int purpose)
{ {
X509 *x=NULL; X509 *x=NULL;
BIO *in=NULL;
int i=0,ret=0; int i=0,ret=0;
X509_STORE_CTX *csc; X509_STORE_CTX *csc;
x = load_cert(bio_err, file, FORMAT_PEM, NULL, e, "certificate file"); in=BIO_new(BIO_s_file());
if (x == NULL) if (in == NULL)
{
ERR_print_errors(bio_err);
goto end; goto end;
}
if (file == NULL)
BIO_set_fp(in,stdin,BIO_NOCLOSE);
else
{
if (BIO_read_filename(in,file) <= 0)
{
perror(file);
goto end;
}
}
x=PEM_read_bio_X509(in,NULL,NULL,NULL);
if (x == NULL)
{
fprintf(stdout,"%s: unable to load certificate file\n",
(file == NULL)?"stdin":file);
ERR_print_errors(bio_err);
goto end;
}
fprintf(stdout,"%s: ",(file == NULL)?"stdin":file); fprintf(stdout,"%s: ",(file == NULL)?"stdin":file);
csc = X509_STORE_CTX_new(); csc = X509_STORE_CTX_new();
@@ -253,14 +257,11 @@ static int check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain, STACK_OF(X
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
goto end; goto end;
} }
X509_STORE_set_flags(ctx, vflags); X509_STORE_CTX_init(csc,ctx,x,uchain);
if(!X509_STORE_CTX_init(csc,ctx,x,uchain))
{
ERR_print_errors(bio_err);
goto end;
}
if(tchain) X509_STORE_CTX_trusted_stack(csc, tchain); if(tchain) X509_STORE_CTX_trusted_stack(csc, tchain);
if(purpose >= 0) X509_STORE_CTX_set_purpose(csc, purpose); if(purpose >= 0) X509_STORE_CTX_set_purpose(csc, purpose);
if(issuer_checks)
X509_STORE_CTX_set_flags(csc, X509_V_FLAG_CB_ISSUER_CHECK);
i=X509_verify_cert(csc); i=X509_verify_cert(csc);
X509_STORE_CTX_free(csc); X509_STORE_CTX_free(csc);
@@ -274,6 +275,7 @@ end:
else else
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
if (x != NULL) X509_free(x); if (x != NULL) X509_free(x);
if (in != NULL) BIO_free(in);
return(ret); return(ret);
} }
@@ -330,13 +332,9 @@ static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx)
if (!ok) if (!ok)
{ {
if (ctx->current_cert) X509_NAME_oneline(
{ X509_get_subject_name(ctx->current_cert),buf,256);
X509_NAME_oneline( printf("%s\n",buf);
X509_get_subject_name(ctx->current_cert),buf,
sizeof buf);
printf("%s\n",buf);
}
printf("error %d at %d depth lookup:%s\n",ctx->error, printf("error %d at %d depth lookup:%s\n",ctx->error,
ctx->error_depth, ctx->error_depth,
X509_verify_cert_error_string(ctx->error)); X509_verify_cert_error_string(ctx->error));
@@ -348,21 +346,10 @@ static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx)
if (ctx->error == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) ok=1; if (ctx->error == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) ok=1;
/* Continue after extension errors too */ /* Continue after extension errors too */
if (ctx->error == X509_V_ERR_INVALID_CA) ok=1; if (ctx->error == X509_V_ERR_INVALID_CA) ok=1;
if (ctx->error == X509_V_ERR_INVALID_NON_CA) ok=1;
if (ctx->error == X509_V_ERR_PATH_LENGTH_EXCEEDED) ok=1; if (ctx->error == X509_V_ERR_PATH_LENGTH_EXCEEDED) ok=1;
if (ctx->error == X509_V_ERR_INVALID_PURPOSE) ok=1; if (ctx->error == X509_V_ERR_INVALID_PURPOSE) ok=1;
if (ctx->error == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) ok=1; if (ctx->error == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) ok=1;
if (ctx->error == X509_V_ERR_CRL_HAS_EXPIRED) ok=1;
if (ctx->error == X509_V_ERR_CRL_NOT_YET_VALID) ok=1;
if (ctx->error == X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION) ok=1;
if (ctx->error == X509_V_ERR_NO_EXPLICIT_POLICY)
policies_print(NULL, ctx);
return ok;
} }
if ((ctx->error == X509_V_OK) && (ok == 2))
policies_print(NULL, ctx);
if (!v_verbose) if (!v_verbose)
ERR_clear_error(); ERR_clear_error();
return(ok); return(ok);

View File

@@ -55,59 +55,6 @@
* copied and put under another distribution licence * copied and put under another distribution licence
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
/* ====================================================================
* Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@openssl.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@@ -115,22 +62,6 @@
#include "apps.h" #include "apps.h"
#include <openssl/evp.h> #include <openssl/evp.h>
#include <openssl/crypto.h> #include <openssl/crypto.h>
#include <openssl/bn.h>
#ifndef OPENSSL_NO_MD2
# include <openssl/md2.h>
#endif
#ifndef OPENSSL_NO_RC4
# include <openssl/rc4.h>
#endif
#ifndef OPENSSL_NO_DES
# include <openssl/des.h>
#endif
#ifndef OPENSSL_NO_IDEA
# include <openssl/idea.h>
#endif
#ifndef OPENSSL_NO_BF
# include <openssl/blowfish.h>
#endif
#undef PROG #undef PROG
#define PROG version_main #define PROG version_main
@@ -140,7 +71,7 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
int i,ret=0; int i,ret=0;
int cflags=0,version=0,date=0,options=0,platform=0,dir=0; int cflags=0,version=0,date=0,options=0,platform=0;
apps_startup(); apps_startup();
@@ -161,10 +92,8 @@ int MAIN(int argc, char **argv)
options=1; options=1;
else if (strcmp(argv[i],"-p") == 0) else if (strcmp(argv[i],"-p") == 0)
platform=1; platform=1;
else if (strcmp(argv[i],"-d") == 0)
dir=1;
else if (strcmp(argv[i],"-a") == 0) else if (strcmp(argv[i],"-a") == 0)
date=version=cflags=options=platform=dir=1; date=version=cflags=options=platform=1;
else else
{ {
BIO_printf(bio_err,"usage:version -[avbofp]\n"); BIO_printf(bio_err,"usage:version -[avbofp]\n");
@@ -173,45 +102,31 @@ int MAIN(int argc, char **argv)
} }
} }
if (version) if (version) printf("%s\n",SSLeay_version(SSLEAY_VERSION));
{
if (SSLeay() == SSLEAY_VERSION_NUMBER)
{
printf("%s\n",SSLeay_version(SSLEAY_VERSION));
}
else
{
printf("%s (Library: %s)\n",
OPENSSL_VERSION_TEXT,
SSLeay_version(SSLEAY_VERSION));
}
}
if (date) printf("%s\n",SSLeay_version(SSLEAY_BUILT_ON)); if (date) printf("%s\n",SSLeay_version(SSLEAY_BUILT_ON));
if (platform) printf("%s\n",SSLeay_version(SSLEAY_PLATFORM)); if (platform) printf("%s\n",SSLeay_version(SSLEAY_PLATFORM));
if (options) if (options)
{ {
printf("options: "); printf("options: ");
printf("%s ",BN_options()); printf("%s ",BN_options());
#ifndef OPENSSL_NO_MD2 #ifndef NO_MD2
printf("%s ",MD2_options()); printf("%s ",MD2_options());
#endif #endif
#ifndef OPENSSL_NO_RC4 #ifndef NO_RC4
printf("%s ",RC4_options()); printf("%s ",RC4_options());
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef NO_DES
printf("%s ",DES_options()); printf("%s ",des_options());
#endif #endif
#ifndef OPENSSL_NO_IDEA #ifndef NO_IDEA
printf("%s ",idea_options()); printf("%s ",idea_options());
#endif #endif
#ifndef OPENSSL_NO_BF #ifndef NO_BF
printf("%s ",BF_options()); printf("%s ",BF_options());
#endif #endif
printf("\n"); printf("\n");
} }
if (cflags) printf("%s\n",SSLeay_version(SSLEAY_CFLAGS)); if (cflags) printf("%s\n",SSLeay_version(SSLEAY_CFLAGS));
if (dir) printf("%s\n",SSLeay_version(SSLEAY_DIR));
end: end:
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }

View File

@@ -118,6 +118,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
HDC hdc; HDC hdc;
PAINTSTRUCT ps; PAINTSTRUCT ps;
RECT rect; RECT rect;
char buffer[200];
static int seeded = 0; static int seeded = 0;
switch (iMsg) switch (iMsg)

View File

@@ -60,7 +60,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#ifdef OPENSSL_NO_STDIO #ifdef NO_STDIO
#define APPS_WIN16 #define APPS_WIN16
#endif #endif
#include "apps.h" #include "apps.h"
@@ -73,12 +73,6 @@
#include <openssl/x509v3.h> #include <openssl/x509v3.h>
#include <openssl/objects.h> #include <openssl/objects.h>
#include <openssl/pem.h> #include <openssl/pem.h>
#ifndef OPENSSL_NO_RSA
#include <openssl/rsa.h>
#endif
#ifndef OPENSSL_NO_DSA
#include <openssl/dsa.h>
#endif
#undef PROG #undef PROG
#define PROG x509_main #define PROG x509_main
@@ -87,7 +81,7 @@
#define POSTFIX ".srl" #define POSTFIX ".srl"
#define DEF_DAYS 30 #define DEF_DAYS 30
static const char *x509_usage[]={ static char *x509_usage[]={
"usage: x509 args\n", "usage: x509 args\n",
" -inform arg - input format - default PEM (one of DER, NET or PEM)\n", " -inform arg - input format - default PEM (one of DER, NET or PEM)\n",
" -outform arg - output format - default PEM (one of DER, NET or PEM)\n", " -outform arg - output format - default PEM (one of DER, NET or PEM)\n",
@@ -98,9 +92,7 @@ static const char *x509_usage[]={
" -out arg - output file - default stdout\n", " -out arg - output file - default stdout\n",
" -passin arg - private key password source\n", " -passin arg - private key password source\n",
" -serial - print serial number value\n", " -serial - print serial number value\n",
" -subject_hash - print subject hash value\n", " -hash - print hash value\n",
" -issuer_hash - print issuer hash value\n",
" -hash - synonym for -subject_hash\n",
" -subject - print subject DN\n", " -subject - print subject DN\n",
" -issuer - print issuer DN\n", " -issuer - print issuer DN\n",
" -email - print email address(es)\n", " -email - print email address(es)\n",
@@ -113,7 +105,6 @@ static const char *x509_usage[]={
" -fingerprint - print the certificate fingerprint\n", " -fingerprint - print the certificate fingerprint\n",
" -alias - output certificate alias\n", " -alias - output certificate alias\n",
" -noout - no certificate output\n", " -noout - no certificate output\n",
" -ocspid - print OCSP hash values for the subject name and public key\n",
" -trustout - output a \"trusted\" certificate\n", " -trustout - output a \"trusted\" certificate\n",
" -clrtrust - clear all trusted purposes\n", " -clrtrust - clear all trusted purposes\n",
" -clrreject - clear all rejected purposes\n", " -clrreject - clear all rejected purposes\n",
@@ -131,7 +122,6 @@ static const char *x509_usage[]={
" missing, it is assumed to be in the CA file.\n", " missing, it is assumed to be in the CA file.\n",
" -CAcreateserial - create serial number file if it does not exist\n", " -CAcreateserial - create serial number file if it does not exist\n",
" -CAserial arg - serial file\n", " -CAserial arg - serial file\n",
" -set_serial - serial number to use\n",
" -text - print the certificate in text form\n", " -text - print the certificate in text form\n",
" -C - print out C code forms\n", " -C - print out C code forms\n",
" -md2/-md5/-sha1/-mdc2 - digest to use\n", " -md2/-md5/-sha1/-mdc2 - digest to use\n",
@@ -139,20 +129,15 @@ static const char *x509_usage[]={
" -extensions - section from config file with X509V3 extensions to add\n", " -extensions - section from config file with X509V3 extensions to add\n",
" -clrext - delete extensions before signing and input certificate\n", " -clrext - delete extensions before signing and input certificate\n",
" -nameopt arg - various certificate name options\n", " -nameopt arg - various certificate name options\n",
#ifndef OPENSSL_NO_ENGINE
" -engine e - use engine e, possibly a hardware device.\n",
#endif
" -certopt arg - various certificate text options\n",
NULL NULL
}; };
static int MS_CALLBACK callb(int ok, X509_STORE_CTX *ctx); static int MS_CALLBACK callb(int ok, X509_STORE_CTX *ctx);
static int sign (X509 *x, EVP_PKEY *pkey,int days,int clrext, const EVP_MD *digest, static int sign (X509 *x, EVP_PKEY *pkey,int days,int clrext, const EVP_MD *digest,
CONF *conf, char *section); LHASH *conf, char *section);
static int x509_certify (X509_STORE *ctx,char *CAfile,const EVP_MD *digest, static int x509_certify (X509_STORE *ctx,char *CAfile,const EVP_MD *digest,
X509 *x,X509 *xca,EVP_PKEY *pkey,char *serial, X509 *x,X509 *xca,EVP_PKEY *pkey,char *serial,
int create,int days, int clrext, CONF *conf, char *section, int create,int days, int clrext, LHASH *conf, char *section);
ASN1_INTEGER *sno);
static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt); static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt);
static int reqfile=0; static int reqfile=0;
@@ -160,13 +145,11 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
ENGINE *e = NULL;
int ret=1; int ret=1;
X509_REQ *req=NULL; X509_REQ *req=NULL;
X509 *x=NULL,*xca=NULL; X509 *x=NULL,*xca=NULL;
ASN1_OBJECT *objtmp; ASN1_OBJECT *objtmp;
EVP_PKEY *Upkey=NULL,*CApkey=NULL; EVP_PKEY *Upkey=NULL,*CApkey=NULL;
ASN1_INTEGER *sno = NULL;
int i,num,badops=0; int i,num,badops=0;
BIO *out=NULL; BIO *out=NULL;
BIO *STDout=NULL; BIO *STDout=NULL;
@@ -175,28 +158,23 @@ int MAIN(int argc, char **argv)
char *infile=NULL,*outfile=NULL,*keyfile=NULL,*CAfile=NULL; char *infile=NULL,*outfile=NULL,*keyfile=NULL,*CAfile=NULL;
char *CAkeyfile=NULL,*CAserial=NULL; char *CAkeyfile=NULL,*CAserial=NULL;
char *alias=NULL; char *alias=NULL;
int text=0,serial=0,subject=0,issuer=0,startdate=0,enddate=0; int text=0,serial=0,hash=0,subject=0,issuer=0,startdate=0,enddate=0;
int next_serial=0;
int subject_hash=0,issuer_hash=0,ocspid=0;
int noout=0,sign_flag=0,CA_flag=0,CA_createserial=0,email=0; int noout=0,sign_flag=0,CA_flag=0,CA_createserial=0,email=0;
int trustout=0,clrtrust=0,clrreject=0,aliasout=0,clrext=0; int trustout=0,clrtrust=0,clrreject=0,aliasout=0,clrext=0;
int C=0; int C=0;
int x509req=0,days=DEF_DAYS,modulus=0,pubkey=0; int x509req=0,days=DEF_DAYS,modulus=0,pubkey=0;
int pprint = 0; int pprint = 0;
const char **pp; char **pp;
X509_STORE *ctx=NULL; X509_STORE *ctx=NULL;
X509_REQ *rq=NULL; X509_REQ *rq=NULL;
int fingerprint=0; int fingerprint=0;
char buf[256]; char buf[256];
const EVP_MD *md_alg,*digest=EVP_sha1(); const EVP_MD *md_alg,*digest=EVP_md5();
CONF *extconf = NULL; LHASH *extconf = NULL;
char *extsect = NULL, *extfile = NULL, *passin = NULL, *passargin = NULL; char *extsect = NULL, *extfile = NULL, *passin = NULL, *passargin = NULL;
int need_rand = 0; int need_rand = 0;
int checkend=0,checkoffset=0; int checkend=0,checkoffset=0;
unsigned long nmflag = 0, certflag = 0; unsigned long nmflag = 0;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
reqfile=0; reqfile=0;
@@ -204,11 +182,8 @@ int MAIN(int argc, char **argv)
if (bio_err == NULL) if (bio_err == NULL)
bio_err=BIO_new_fp(stderr,BIO_NOCLOSE); bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
if (!load_config(bio_err, NULL))
goto end;
STDout=BIO_new_fp(stdout,BIO_NOCLOSE); STDout=BIO_new_fp(stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
STDout = BIO_push(tmpbio, STDout); STDout = BIO_push(tmpbio, STDout);
@@ -319,12 +294,6 @@ int MAIN(int argc, char **argv)
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
CAserial= *(++argv); CAserial= *(++argv);
} }
else if (strcmp(*argv,"-set_serial") == 0)
{
if (--argc < 1) goto bad;
if (!(sno = s2i_ASN1_INTEGER(NULL, *(++argv))))
goto bad;
}
else if (strcmp(*argv,"-addtrust") == 0) else if (strcmp(*argv,"-addtrust") == 0)
{ {
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
@@ -357,31 +326,23 @@ int MAIN(int argc, char **argv)
alias= *(++argv); alias= *(++argv);
trustout = 1; trustout = 1;
} }
else if (strcmp(*argv,"-certopt") == 0)
{
if (--argc < 1) goto bad;
if (!set_cert_ex(&certflag, *(++argv))) goto bad;
}
else if (strcmp(*argv,"-nameopt") == 0) else if (strcmp(*argv,"-nameopt") == 0)
{ {
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
if (!set_name_ex(&nmflag, *(++argv))) goto bad; if (!set_name_ex(&nmflag, *(++argv))) goto bad;
} }
#ifndef OPENSSL_NO_ENGINE else if (strcmp(*argv,"-setalias") == 0)
else if (strcmp(*argv,"-engine") == 0)
{ {
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
engine= *(++argv); alias= *(++argv);
trustout = 1;
} }
#endif
else if (strcmp(*argv,"-C") == 0) else if (strcmp(*argv,"-C") == 0)
C= ++num; C= ++num;
else if (strcmp(*argv,"-email") == 0) else if (strcmp(*argv,"-email") == 0)
email= ++num; email= ++num;
else if (strcmp(*argv,"-serial") == 0) else if (strcmp(*argv,"-serial") == 0)
serial= ++num; serial= ++num;
else if (strcmp(*argv,"-next_serial") == 0)
next_serial= ++num;
else if (strcmp(*argv,"-modulus") == 0) else if (strcmp(*argv,"-modulus") == 0)
modulus= ++num; modulus= ++num;
else if (strcmp(*argv,"-pubkey") == 0) else if (strcmp(*argv,"-pubkey") == 0)
@@ -390,11 +351,8 @@ int MAIN(int argc, char **argv)
x509req= ++num; x509req= ++num;
else if (strcmp(*argv,"-text") == 0) else if (strcmp(*argv,"-text") == 0)
text= ++num; text= ++num;
else if (strcmp(*argv,"-hash") == 0 else if (strcmp(*argv,"-hash") == 0)
|| strcmp(*argv,"-subject_hash") == 0) hash= ++num;
subject_hash= ++num;
else if (strcmp(*argv,"-issuer_hash") == 0)
issuer_hash= ++num;
else if (strcmp(*argv,"-subject") == 0) else if (strcmp(*argv,"-subject") == 0)
subject= ++num; subject= ++num;
else if (strcmp(*argv,"-issuer") == 0) else if (strcmp(*argv,"-issuer") == 0)
@@ -439,8 +397,6 @@ int MAIN(int argc, char **argv)
clrext = 1; clrext = 1;
} }
#endif #endif
else if (strcmp(*argv,"-ocspid") == 0)
ocspid= ++num;
else if ((md_alg=EVP_get_digestbyname(*argv + 1))) else if ((md_alg=EVP_get_digestbyname(*argv + 1)))
{ {
/* ok */ /* ok */
@@ -460,14 +416,10 @@ int MAIN(int argc, char **argv)
{ {
bad: bad:
for (pp=x509_usage; (*pp != NULL); pp++) for (pp=x509_usage; (*pp != NULL); pp++)
BIO_printf(bio_err,"%s",*pp); BIO_printf(bio_err,*pp);
goto end; goto end;
} }
#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
if (need_rand) if (need_rand)
app_RAND_load_file(NULL, bio_err, 0); app_RAND_load_file(NULL, bio_err, 0);
@@ -497,8 +449,7 @@ bad:
{ {
long errorline = -1; long errorline = -1;
X509V3_CTX ctx2; X509V3_CTX ctx2;
extconf = NCONF_new(NULL); if (!(extconf=CONF_load(NULL,extfile,&errorline)))
if (!NCONF_load(extconf, extfile,&errorline))
{ {
if (errorline <= 0) if (errorline <= 0)
BIO_printf(bio_err, BIO_printf(bio_err,
@@ -510,18 +461,11 @@ bad:
,errorline,extfile); ,errorline,extfile);
goto end; goto end;
} }
if (!extsect) if (!extsect && !(extsect = CONF_get_string(extconf, "default",
{ "extensions"))) extsect = "default";
extsect = NCONF_get_string(extconf, "default", "extensions");
if (!extsect)
{
ERR_clear_error();
extsect = "default";
}
}
X509V3_set_ctx_test(&ctx2); X509V3_set_ctx_test(&ctx2);
X509V3_set_nconf(&ctx2, extconf); X509V3_set_conf_lhash(&ctx2, extconf);
if (!X509V3_EXT_add_nconf(extconf, &ctx2, extsect, NULL)) if (!X509V3_EXT_add_conf(extconf, &ctx2, extsect, NULL))
{ {
BIO_printf(bio_err, BIO_printf(bio_err,
"Error Loading extension section %s\n", "Error Loading extension section %s\n",
@@ -605,19 +549,7 @@ bad:
if ((x=X509_new()) == NULL) goto end; if ((x=X509_new()) == NULL) goto end;
ci=x->cert_info; ci=x->cert_info;
if (sno == NULL) if (!ASN1_INTEGER_set(X509_get_serialNumber(x),0)) goto end;
{
sno = ASN1_INTEGER_new();
if (!sno || !rand_serial(NULL, sno))
goto end;
if (!X509_set_serialNumber(x, sno))
goto end;
ASN1_INTEGER_free(sno);
sno = NULL;
}
else if (!X509_set_serialNumber(x, sno))
goto end;
if (!X509_set_issuer_name(x,req->req_info->subject)) goto end; if (!X509_set_issuer_name(x,req->req_info->subject)) goto end;
if (!X509_set_subject_name(x,req->req_info->subject)) goto end; if (!X509_set_subject_name(x,req->req_info->subject)) goto end;
@@ -629,16 +561,16 @@ bad:
EVP_PKEY_free(pkey); EVP_PKEY_free(pkey);
} }
else else
x=load_cert(bio_err,infile,informat,NULL,e,"Certificate"); x=load_cert(bio_err,infile,informat);
if (x == NULL) goto end; if (x == NULL) goto end;
if (CA_flag) if (CA_flag)
{ {
xca=load_cert(bio_err,CAfile,CAformat,NULL,e,"CA Certificate"); xca=load_cert(bio_err,CAfile,CAformat);
if (xca == NULL) goto end; if (xca == NULL) goto end;
} }
if (!noout || text || next_serial) if (!noout || text)
{ {
OBJ_create("2.99999.3", OBJ_create("2.99999.3",
"SET.ex3","SET x509v3 extension 3"); "SET.ex3","SET x509v3 extension 3");
@@ -652,7 +584,7 @@ bad:
if (outfile == NULL) if (outfile == NULL)
{ {
BIO_set_fp(out,stdout,BIO_NOCLOSE); BIO_set_fp(out,stdout,BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef VMS
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out); out = BIO_push(tmpbio, out);
@@ -709,28 +641,9 @@ bad:
else if (serial == i) else if (serial == i)
{ {
BIO_printf(STDout,"serial="); BIO_printf(STDout,"serial=");
i2a_ASN1_INTEGER(STDout, i2a_ASN1_INTEGER(STDout,x->cert_info->serialNumber);
X509_get_serialNumber(x));
BIO_printf(STDout,"\n"); BIO_printf(STDout,"\n");
} }
else if (next_serial == i)
{
BIGNUM *bnser;
ASN1_INTEGER *ser;
ser = X509_get_serialNumber(x);
bnser = ASN1_INTEGER_to_BN(ser, NULL);
if (!bnser)
goto end;
if (!BN_add_word(bnser, 1))
goto end;
ser = BN_to_ASN1_INTEGER(bnser, NULL);
if (!ser)
goto end;
BN_free(bnser);
i2a_ASN1_INTEGER(out, ser);
ASN1_INTEGER_free(ser);
BIO_puts(out, "\n");
}
else if (email == i) else if (email == i)
{ {
int j; int j;
@@ -747,14 +660,10 @@ bad:
if (alstr) BIO_printf(STDout,"%s\n", alstr); if (alstr) BIO_printf(STDout,"%s\n", alstr);
else BIO_puts(STDout,"<No Alias>\n"); else BIO_puts(STDout,"<No Alias>\n");
} }
else if (subject_hash == i) else if (hash == i)
{ {
BIO_printf(STDout,"%08lx\n",X509_subject_name_hash(x)); BIO_printf(STDout,"%08lx\n",X509_subject_name_hash(x));
} }
else if (issuer_hash == i)
{
BIO_printf(STDout,"%08lx\n",X509_issuer_name_hash(x));
}
else if (pprint == i) else if (pprint == i)
{ {
X509_PURPOSE *ptmp; X509_PURPOSE *ptmp;
@@ -779,12 +688,12 @@ bad:
goto end; goto end;
} }
BIO_printf(STDout,"Modulus="); BIO_printf(STDout,"Modulus=");
#ifndef OPENSSL_NO_RSA #ifndef NO_RSA
if (pkey->type == EVP_PKEY_RSA) if (pkey->type == EVP_PKEY_RSA)
BN_print(STDout,pkey->pkey.rsa->n); BN_print(STDout,pkey->pkey.rsa->n);
else else
#endif #endif
#ifndef OPENSSL_NO_DSA #ifndef NO_DSA
if (pkey->type == EVP_PKEY_DSA) if (pkey->type == EVP_PKEY_DSA)
BN_print(STDout,pkey->pkey.dsa->pub_key); BN_print(STDout,pkey->pkey.dsa->pub_key);
else else
@@ -816,11 +725,10 @@ bad:
int y,z; int y,z;
X509_NAME_oneline(X509_get_subject_name(x), X509_NAME_oneline(X509_get_subject_name(x),
buf,sizeof buf); buf,256);
BIO_printf(STDout,"/* subject:%s */\n",buf); BIO_printf(STDout,"/* subject:%s */\n",buf);
m=X509_NAME_oneline( m=X509_NAME_oneline(
X509_get_issuer_name(x),buf, X509_get_issuer_name(x),buf,256);
sizeof buf);
BIO_printf(STDout,"/* issuer :%s */\n",buf); BIO_printf(STDout,"/* issuer :%s */\n",buf);
z=i2d_X509(x,NULL); z=i2d_X509(x,NULL);
@@ -866,7 +774,7 @@ bad:
} }
else if (text == i) else if (text == i)
{ {
X509_print_ex(out,x,nmflag, certflag); X509_print(out,x);
} }
else if (startdate == i) else if (startdate == i)
{ {
@@ -908,18 +816,13 @@ bad:
if (Upkey == NULL) if (Upkey == NULL)
{ {
Upkey=load_key(bio_err, Upkey=load_key(bio_err,
keyfile, keyformat, 0, keyfile,keyformat, passin);
passin, e, "Private key");
if (Upkey == NULL) goto end; if (Upkey == NULL) goto end;
} }
#ifndef OPENSSL_NO_DSA #ifndef NO_DSA
if (Upkey->type == EVP_PKEY_DSA) if (Upkey->type == EVP_PKEY_DSA)
digest=EVP_dss1(); digest=EVP_dss1();
#endif #endif
#ifndef OPENSSL_NO_ECDSA
if (Upkey->type == EVP_PKEY_EC)
digest=EVP_ecdsa();
#endif
assert(need_rand); assert(need_rand);
if (!sign(x,Upkey,days,clrext,digest, if (!sign(x,Upkey,days,clrext,digest,
@@ -931,24 +834,18 @@ bad:
if (CAkeyfile != NULL) if (CAkeyfile != NULL)
{ {
CApkey=load_key(bio_err, CApkey=load_key(bio_err,
CAkeyfile, CAkeyformat, CAkeyfile,CAkeyformat, passin);
0, passin, e,
"CA Private Key");
if (CApkey == NULL) goto end; if (CApkey == NULL) goto end;
} }
#ifndef OPENSSL_NO_DSA #ifndef NO_DSA
if (CApkey->type == EVP_PKEY_DSA) if (CApkey->type == EVP_PKEY_DSA)
digest=EVP_dss1(); digest=EVP_dss1();
#endif #endif
#ifndef OPENSSL_NO_ECDSA
if (CApkey->type == EVP_PKEY_EC)
digest = EVP_ecdsa();
#endif
assert(need_rand); assert(need_rand);
if (!x509_certify(ctx,CAfile,digest,x,xca, if (!x509_certify(ctx,CAfile,digest,x,xca,
CApkey, CAserial,CA_createserial,days, clrext, CApkey, CAserial,CA_createserial,days, clrext,
extconf, extsect, sno)) extconf, extsect))
goto end; goto end;
} }
else if (x509req == i) else if (x509req == i)
@@ -964,21 +861,16 @@ bad:
else else
{ {
pk=load_key(bio_err, pk=load_key(bio_err,
keyfile, FORMAT_PEM, 0, keyfile,FORMAT_PEM, passin);
passin, e, "request key");
if (pk == NULL) goto end; if (pk == NULL) goto end;
} }
BIO_printf(bio_err,"Generating certificate request\n"); BIO_printf(bio_err,"Generating certificate request\n");
#ifndef OPENSSL_NO_DSA #ifndef NO_DSA
if (pk->type == EVP_PKEY_DSA) if (pk->type == EVP_PKEY_DSA)
digest=EVP_dss1(); digest=EVP_dss1();
#endif #endif
#ifndef OPENSSL_NO_ECDSA
if (pk->type == EVP_PKEY_EC)
digest=EVP_ecdsa();
#endif
rq=X509_to_X509_REQ(x,pk,digest); rq=X509_to_X509_REQ(x,pk,digest);
EVP_PKEY_free(pk); EVP_PKEY_free(pk);
@@ -994,18 +886,14 @@ bad:
} }
noout=1; noout=1;
} }
else if (ocspid == i)
{
X509_ocspid_print(out, x);
}
} }
} }
if (checkend) if (checkend)
{ {
time_t tcheck=time(NULL) + checkoffset; time_t tnow=time(NULL);
if (X509_cmp_time(X509_get_notAfter(x), &tcheck) < 0) if (ASN1_UTCTIME_cmp_time_t(X509_get_notAfter(x), tnow+checkoffset) == -1)
{ {
BIO_printf(out,"Certificate will expire\n"); BIO_printf(out,"Certificate will expire\n");
ret=1; ret=1;
@@ -1042,7 +930,8 @@ bad:
ah.data=(char *)x; ah.data=(char *)x;
ah.meth=X509_asn1_meth(); ah.meth=X509_asn1_meth();
i=ASN1_i2d_bio_of(ASN1_HEADER,i2d_ASN1_HEADER,out,&ah); /* no macro for this one yet */
i=ASN1_i2d_bio(i2d_ASN1_HEADER,out,(unsigned char *)&ah);
} }
else { else {
BIO_printf(bio_err,"bad output format specified for outfile\n"); BIO_printf(bio_err,"bad output format specified for outfile\n");
@@ -1059,7 +948,7 @@ end:
if (need_rand) if (need_rand)
app_RAND_write_file(NULL, bio_err); app_RAND_write_file(NULL, bio_err);
OBJ_cleanup(); OBJ_cleanup();
NCONF_free(extconf); CONF_free(extconf);
BIO_free_all(out); BIO_free_all(out);
BIO_free_all(STDout); BIO_free_all(STDout);
X509_STORE_free(ctx); X509_STORE_free(ctx);
@@ -1069,60 +958,22 @@ end:
EVP_PKEY_free(Upkey); EVP_PKEY_free(Upkey);
EVP_PKEY_free(CApkey); EVP_PKEY_free(CApkey);
X509_REQ_free(rq); X509_REQ_free(rq);
ASN1_INTEGER_free(sno);
sk_ASN1_OBJECT_pop_free(trust, ASN1_OBJECT_free); sk_ASN1_OBJECT_pop_free(trust, ASN1_OBJECT_free);
sk_ASN1_OBJECT_pop_free(reject, ASN1_OBJECT_free); sk_ASN1_OBJECT_pop_free(reject, ASN1_OBJECT_free);
if (passin) OPENSSL_free(passin); if (passin) OPENSSL_free(passin);
apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }
static ASN1_INTEGER *x509_load_serial(char *CAfile, char *serialfile, int create)
{
char *buf = NULL, *p;
ASN1_INTEGER *bs = NULL;
BIGNUM *serial = NULL;
size_t len;
len = ((serialfile == NULL)
?(strlen(CAfile)+strlen(POSTFIX)+1)
:(strlen(serialfile)))+1;
buf=OPENSSL_malloc(len);
if (buf == NULL) { BIO_printf(bio_err,"out of mem\n"); goto end; }
if (serialfile == NULL)
{
BUF_strlcpy(buf,CAfile,len);
for (p=buf; *p; p++)
if (*p == '.')
{
*p='\0';
break;
}
BUF_strlcat(buf,POSTFIX,len);
}
else
BUF_strlcpy(buf,serialfile,len);
serial = load_serial(buf, create, NULL);
if (serial == NULL) goto end;
if (!BN_add_word(serial,1))
{ BIO_printf(bio_err,"add_word failure\n"); goto end; }
if (!save_serial(buf, NULL, serial, &bs)) goto end;
end:
if (buf) OPENSSL_free(buf);
BN_free(serial);
return bs;
}
static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest, static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
X509 *x, X509 *xca, EVP_PKEY *pkey, char *serialfile, int create, X509 *x, X509 *xca, EVP_PKEY *pkey, char *serialfile, int create,
int days, int clrext, CONF *conf, char *section, ASN1_INTEGER *sno) int days, int clrext, LHASH *conf, char *section)
{ {
int ret=0; int ret=0;
ASN1_INTEGER *bs=NULL; BIO *io=NULL;
MS_STATIC char buf2[1024];
char *buf=NULL,*p;
BIGNUM *serial=NULL;
ASN1_INTEGER *bs=NULL,bs2;
X509_STORE_CTX xsc; X509_STORE_CTX xsc;
EVP_PKEY *upkey; EVP_PKEY *upkey;
@@ -1130,16 +981,89 @@ static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
EVP_PKEY_copy_parameters(upkey,pkey); EVP_PKEY_copy_parameters(upkey,pkey);
EVP_PKEY_free(upkey); EVP_PKEY_free(upkey);
if(!X509_STORE_CTX_init(&xsc,ctx,x,NULL)) X509_STORE_CTX_init(&xsc,ctx,x,NULL);
buf=OPENSSL_malloc(EVP_PKEY_size(pkey)*2+
((serialfile == NULL)
?(strlen(CAfile)+strlen(POSTFIX)+1)
:(strlen(serialfile)))+1);
if (buf == NULL) { BIO_printf(bio_err,"out of mem\n"); goto end; }
if (serialfile == NULL)
{ {
BIO_printf(bio_err,"Error initialising X509 store\n"); strcpy(buf,CAfile);
for (p=buf; *p; p++)
if (*p == '.')
{
*p='\0';
break;
}
strcat(buf,POSTFIX);
}
else
strcpy(buf,serialfile);
serial=BN_new();
bs=ASN1_INTEGER_new();
if ((serial == NULL) || (bs == NULL))
{
ERR_print_errors(bio_err);
goto end; goto end;
} }
if (sno) bs = sno;
else if (!(bs = x509_load_serial(CAfile, serialfile, create)))
goto end;
/* if (!X509_STORE_add_cert(ctx,x)) goto end;*/ io=BIO_new(BIO_s_file());
if (io == NULL)
{
ERR_print_errors(bio_err);
goto end;
}
if (BIO_read_filename(io,buf) <= 0)
{
if (!create)
{
perror(buf);
goto end;
}
else
{
ASN1_INTEGER_set(bs,1);
BN_one(serial);
}
}
else
{
if (!a2i_ASN1_INTEGER(io,bs,buf2,1024))
{
BIO_printf(bio_err,"unable to load serial number from %s\n",buf);
ERR_print_errors(bio_err);
goto end;
}
else
{
serial=BN_bin2bn(bs->data,bs->length,serial);
if (serial == NULL)
{
BIO_printf(bio_err,"error converting bin 2 bn");
goto end;
}
}
}
if (!BN_add_word(serial,1))
{ BIO_printf(bio_err,"add_word failure\n"); goto end; }
bs2.data=(unsigned char *)buf2;
bs2.length=BN_bn2bin(serial,bs2.data);
if (BIO_write_filename(io,buf) <= 0)
{
BIO_printf(bio_err,"error attempting to write serial number file\n");
perror(buf);
goto end;
}
i2a_ASN1_INTEGER(io,&bs2);
BIO_puts(io,"\n");
BIO_free(io);
io=NULL;
if (!X509_STORE_add_cert(ctx,x)) goto end;
/* NOTE: this certificate can/should be self signed, unless it was /* NOTE: this certificate can/should be self signed, unless it was
* a certificate request in which case it is not. */ * a certificate request in which case it is not. */
@@ -1173,8 +1097,8 @@ static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
X509V3_CTX ctx2; X509V3_CTX ctx2;
X509_set_version(x,2); /* version 3 certificate */ X509_set_version(x,2); /* version 3 certificate */
X509V3_set_ctx(&ctx2, xca, x, NULL, NULL, 0); X509V3_set_ctx(&ctx2, xca, x, NULL, NULL, 0);
X509V3_set_nconf(&ctx2, conf); X509V3_set_conf_lhash(&ctx2, conf);
if (!X509V3_EXT_add_nconf(conf, &ctx2, section, x)) goto end; if (!X509V3_EXT_add_conf(conf, &ctx2, section, x)) goto end;
} }
if (!X509_sign(x,pkey,digest)) goto end; if (!X509_sign(x,pkey,digest)) goto end;
@@ -1183,7 +1107,10 @@ end:
X509_STORE_CTX_cleanup(&xsc); X509_STORE_CTX_cleanup(&xsc);
if (!ret) if (!ret)
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
if (!sno) ASN1_INTEGER_free(bs); if (buf != NULL) OPENSSL_free(buf);
if (bs != NULL) ASN1_INTEGER_free(bs);
if (io != NULL) BIO_free(io);
if (serial != NULL) BN_free(serial);
return ret; return ret;
} }
@@ -1220,7 +1147,7 @@ static int MS_CALLBACK callb(int ok, X509_STORE_CTX *ctx)
/* self sign */ /* self sign */
static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext, const EVP_MD *digest, static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext, const EVP_MD *digest,
CONF *conf, char *section) LHASH *conf, char *section)
{ {
EVP_PKEY *pktmp; EVP_PKEY *pktmp;
@@ -1250,8 +1177,8 @@ static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext, const EVP_MD *dig
X509V3_CTX ctx; X509V3_CTX ctx;
X509_set_version(x,2); /* version 3 certificate */ X509_set_version(x,2); /* version 3 certificate */
X509V3_set_ctx(&ctx, x, x, NULL, NULL, 0); X509V3_set_ctx(&ctx, x, x, NULL, NULL, 0);
X509V3_set_nconf(&ctx, conf); X509V3_set_conf_lhash(&ctx, conf);
if (!X509V3_EXT_add_nconf(conf, &ctx, section, x)) goto err; if (!X509V3_EXT_add_conf(conf, &ctx, section, x)) goto err;
} }
if (!X509_sign(x,pkey,digest)) goto err; if (!X509_sign(x,pkey,digest)) goto err;
return 1; return 1;
@@ -1276,3 +1203,6 @@ static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt)
} }
return 1; return 1;
} }

View File

@@ -29,7 +29,7 @@ RC4-MD5, but a re-connect tries to use DES-CBC-SHA. So netscape, when
doing a re-connect, always takes the first cipher in the cipher list. doing a re-connect, always takes the first cipher in the cipher list.
If we accept a netscape connection, demand a client cert, have a If we accept a netscape connection, demand a client cert, have a
non-self-signed CA which does not have it's CA in netscape, and the non-self-sighed CA which does not have it's CA in netscape, and the
browser has a cert, it will crash/hang. Works for 3.x and 4.xbeta browser has a cert, it will crash/hang. Works for 3.x and 4.xbeta
Netscape browsers do not really notice the server sending a Netscape browsers do not really notice the server sending a

18
bugs/VC16.bug Normal file
View File

@@ -0,0 +1,18 @@
Microsoft (R) C/C++ Optimizing Compiler Version 8.00c
Compile with /O2 chokes the compiler on these files
crypto\md\md5_dgst.c warning '@(#)reg86.c:1.26', line 1110
crypto\des\ofb64ede.c warning '@(#)grammar.c:1.147', line 168
crypto\des\ofb64enc.c warning '@(#)grammar.c:1.147', line 168
crypto\des\qud_cksm.c warning '@(#)grammar.c:1.147', line 168
crypto\rc2\rc2ofb64.c warning '@(#)grammar.c:1.147', line 168
crypto\objects\obj_dat.c warning '@(#)grammar.c:1.147', line 168
fatal '@(#)grammar.c:1.147', line 168
crypto\objects\obj_lib.c warning '@(#)grammar.c:1.147', line 168
fatal '@(#)grammar.c:1.147', line 168
ssl\ssl_auth.c warning '@(#)grammar.c:1.147', line 168
fatal '@(#)grammar.c:1.147', line 168
Turning on /G3 with build flags that worked fine for /G2 came up with
divide by zero errors in 'normal' code in speed.c :-(

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