Compare commits

..

980 Commits

Author SHA1 Message Date
Andy Polyakov
6f93fd5685 fips/Makefile: $(CC) -dumpversion can't be used to identify gcc, HP C
doesn't return error code in reply to -dumpversion.
2009-05-12 20:57:11 +00:00
Andy Polyakov
45b364ddab Sync aes/asm with stable branch. 2008-12-27 13:37:45 +00:00
Andy Polyakov
8887e81bd7 aes-x86_64.pl: revert commit #17700 and apply proper fix from stable.
PR: 1801
2008-12-17 14:23:53 +00:00
Andy Polyakov
9008856f7a aes-x86_64.pl update from HEAD.
PR: 1801
2008-12-17 14:16:09 +00:00
Andy Polyakov
1c4273ae0d Fix crash in BN_rshift [from HEAD].
PR: 1663
2008-10-28 13:48:33 +00:00
Andy Polyakov
1ba833a427 Fix EC_KEY_check_key [from HEAD]. 2008-09-23 17:34:21 +00:00
Dr. Stephen Henson
7e994953c9 Changes from stable branch. 2008-09-15 22:45:13 +00:00
Dr. Stephen Henson
f97b8f3114 Update from stable branch. 2008-09-15 22:03:18 +00:00
Dr. Stephen Henson
c9a0ab4907 Update from stable branch. 2008-09-15 21:27:23 +00:00
Dr. Stephen Henson
cdabf88810 Sync safestack between FIPS and 0.9.8-stable. 2008-09-15 19:58:24 +00:00
Dr. Stephen Henson
e756ea4722 Updates from stable branch. 2008-09-15 16:53:20 +00:00
Dr. Stephen Henson
9fce443775 Updates from stable branch. 2008-09-14 19:35:53 +00:00
Dr. Stephen Henson
e70e417baf Update from stable branch. 2008-09-14 16:45:56 +00:00
Dr. Stephen Henson
f64f44358d Add missing .cvsignore. 2008-09-14 16:27:40 +00:00
Dr. Stephen Henson
c848cd1c35 Delete other certs, add missing error file. 2008-09-14 16:20:44 +00:00
Dr. Stephen Henson
ef7c1a9490 Updates from stable branch. 2008-09-14 16:13:59 +00:00
Dr. Stephen Henson
9b4e99ebd1 Remove root certs. 2008-09-14 16:09:06 +00:00
Dr. Stephen Henson
351b731d00 Updates from stable branch... fixup CHANGES. 2008-09-14 14:57:50 +00:00
Dr. Stephen Henson
3d3fd6beb2 More updatdes from stable branch. 2008-09-13 22:09:48 +00:00
Dr. Stephen Henson
7486fb6550 Updates from stable branch. 2008-09-13 22:02:49 +00:00
Dr. Stephen Henson
5786b6c92f Update from stable branch. 2008-09-13 21:57:12 +00:00
Dr. Stephen Henson
ae2865a771 Update from stable branch... sync OIDs, add LMK support. 2008-09-13 11:45:24 +00:00
Dr. Stephen Henson
a302eb21b7 Make FIPS RC4 algorithm blocking work when RC4_set_key is implemented
in assembly language.
2008-09-12 17:44:27 +00:00
Dr. Stephen Henson
409e30479a Update from stable branch. 2008-09-06 11:11:10 +00:00
Andy Polyakov
b664536914 sha1-586.pl: update from HEAD
PR: 1681
2008-07-17 09:53:14 +00:00
Dr. Stephen Henson
6fffeb46ad Add capi extra libs from stable branch. Don't touch fips directory if
not compiling in fips mode.
2008-06-15 15:40:03 +00:00
Dr. Stephen Henson
48331e3f64 Sync ordinals with stable branch and update. 2008-06-15 15:36:02 +00:00
Dr. Stephen Henson
edd529ad16 Typo. 2008-06-15 15:22:56 +00:00
Dr. Stephen Henson
5be243dc20 Add CAPI engine error files. 2008-06-14 19:59:00 +00:00
Dr. Stephen Henson
e9d247d2b0 Merge from stable branch. 2008-06-14 19:53:04 +00:00
Andy Polyakov
18ab306e63 Compensate inline assembler in sha512.c for gcc 2.7.2 compiler bug [from HEAD].
PR: 1667
2008-04-24 10:02:01 +00:00
Andy Polyakov
03c4a3a474 bn_nist.c update from HEAD.
PR: 1593
2008-04-18 15:54:50 +00:00
Andy Polyakov
e4bc9d9ef6 Fix fast reduction on NIST curves [from HEAD].
PR: 1593
2008-04-01 08:42:08 +00:00
Dr. Stephen Henson
9620067392 Use correct EC string when writing private keys in FIPS mode. 2008-03-13 14:26:04 +00:00
Dr. Stephen Henson
814dfe70bc Update year. 2008-03-12 13:05:42 +00:00
Dr. Stephen Henson
c79cb4a07b Fix from HEAD. 2008-03-12 00:38:44 +00:00
Andy Polyakov
9ac269f78c Make x86_64-mont.pl work with debug Win64 build [from HEAD]. 2008-02-27 20:16:50 +00:00
Dr. Stephen Henson
6fa2c4cadc Update from HEAD. 2008-02-25 18:13:40 +00:00
Andy Polyakov
1980bc91fe Allow 32-bit perl to generate x86_64 assembler [from -stable]. 2008-02-13 20:03:01 +00:00
Andy Polyakov
8b7745571f Source readability fix, which incidentally works around XLC compiler bug
[from HEAD].
PR: 1272
2008-02-11 13:20:11 +00:00
Andy Polyakov
0d2b761dae Make aes-x86_64 work with debug Win64 build [from HEAD]. 2008-02-11 13:14:11 +00:00
Andy Polyakov
85a752e838 x86_64-xlate.pl update from HEAD. 2008-02-11 13:08:41 +00:00
Dr. Stephen Henson
34d67fd5f6 Update from stable branch. 2008-01-26 23:43:57 +00:00
Dr. Stephen Henson
7c01fd975c Update from HEAD. 2008-01-14 18:44:59 +00:00
Dr. Stephen Henson
8da1de4a5a Update from HEAD. 2008-01-03 16:37:51 +00:00
Dr. Stephen Henson
7bff8fd23d Typo. 2008-01-03 14:04:17 +00:00
Dr. Stephen Henson
7292151850 Add v1.1.X algorithm test definitions. 2008-01-03 13:39:34 +00:00
Dr. Stephen Henson
1b4a2cf20b Sort algorithm tests into groups which can be selectively enabled or disabled. 2008-01-03 01:23:56 +00:00
Dr. Stephen Henson
0c19f2c725 In fipsalgtest.pl redefine tests in an array to retain test order and permit
selective addition/deletion of tests later....
2008-01-02 13:45:02 +00:00
Dr. Stephen Henson
d48c5e8c45 Typo. 2007-12-31 13:36:16 +00:00
Dr. Stephen Henson
f645290f31 Fix warnings. Only use fipscanister.o if fips enabled. 2007-12-31 12:56:42 +00:00
Dr. Stephen Henson
9b95537a01 Fixes to make CFB1 Monte Carlo test work. 2007-12-26 19:04:58 +00:00
Dr. Stephen Henson
a383b2546e Fix Makefile to fipscanisterbuild works again. 2007-12-26 18:58:10 +00:00
Dr. Stephen Henson
ff81ee92cb Tidy up fipsalgtest.pl and add initial support for generation. 2007-12-24 17:45:08 +00:00
Dr. Stephen Henson
87863a0cd4 Update algorithm sanity checks to support KeyPair test. 2007-12-23 20:32:06 +00:00
Dr. Stephen Henson
012d1c8dd9 Add more tree sanity checks. Make sure verifies must produce at least one
successful output. Fix typos.
2007-12-23 14:20:50 +00:00
Dr. Stephen Henson
86fbdae6e8 Fix camellia to use extra argument in IMPLEMENT_CFBR. 2007-12-23 13:50:22 +00:00
Dr. Stephen Henson
e0c5f4e438 Update from stable branch. 2007-12-23 13:48:39 +00:00
Dr. Stephen Henson
d946944dbd Initial Win32 support in fipsalgtest.pl 2007-12-23 00:53:55 +00:00
Dr. Stephen Henson
ddc3e0dd03 Fix fips_dssvs usage message.
Preliminary fipsalgtest.pl script. This will ultimately automatically run
algorithm tests against a known good test set or alternatively generate output
for an algorithm test.

Partly works only on Linux at present.
2007-12-22 19:31:06 +00:00
Dr. Stephen Henson
fbe1fcccdc Avoid warning. 2007-12-21 01:35:14 +00:00
Dr. Stephen Henson
4578122b60 Update docs. 2007-12-16 23:32:10 +00:00
Dr. Stephen Henson
e361b2ff2e Update README. 2007-12-16 18:47:08 +00:00
Dr. Stephen Henson
57362da5ab Typo. 2007-12-16 18:36:12 +00:00
Dr. Stephen Henson
002104370a Update FIPS build instructions. 2007-12-16 18:02:17 +00:00
Dr. Stephen Henson
fda62b13d4 Updates from 0.9.8-stable. 2007-12-16 17:10:11 +00:00
Dr. Stephen Henson
a7fdb764c5 Make ordinals consistent with 0.9.8-stable 2007-12-16 13:22:39 +00:00
Dr. Stephen Henson
3b2e785e50 Make test utilities build in non-FIPS compiles. 2007-12-15 01:40:47 +00:00
Dr. Stephen Henson
280bc44730 Fix shadow warning from 0.9.8-stable. 2007-12-14 19:45:28 +00:00
Dr. Stephen Henson
9e1468e482 Avoid warnings. 2007-12-14 18:11:11 +00:00
Dr. Stephen Henson
b3307eae6d Update default flags. 2007-12-14 18:10:54 +00:00
Dr. Stephen Henson
19cf9463e7 When fipscanister is external ensure it is included in libcrypto.a 2007-12-14 13:53:32 +00:00
Dr. Stephen Henson
2dd4c4b430 Update README.FIPS to reflect changes. 2007-12-14 01:43:41 +00:00
Dr. Stephen Henson
86160f3c41 Use 1.2 module FIPS install location by default. 2007-12-14 01:35:15 +00:00
Dr. Stephen Henson
0633bca11c Updates from 0.9.8-stable 2007-12-14 01:16:16 +00:00
Dr. Stephen Henson
97c9cf71aa Uses correct value for $fipslibdir 2007-11-09 12:11:25 +00:00
Dr. Stephen Henson
a0dc48e7db Use fips/ not fips-1.0/ for fips directory. 2007-11-09 01:41:24 +00:00
Dr. Stephen Henson
22f6a2b271 Make salt detection more robust. 2007-11-09 01:16:14 +00:00
Dr. Stephen Henson
a3a426cfb5 Update mkfipsscr.pl to perform some sanity checks on testvector tree. 2007-11-08 18:01:06 +00:00
Andy Polyakov
93d4d2b900 Commit #16325 fixed one thing but broke DH with certain moduli [from HEAD]. 2007-11-03 20:10:10 +00:00
Dr. Stephen Henson
2f9048b8a1 Disable CFB1 tests. 2007-10-05 17:35:26 +00:00
Dr. Stephen Henson
d73ed541db Fix bug in DSA parameter generation code which stopped it copying a
generated random seed to the supplied seed parameter.
2007-10-05 13:14:55 +00:00
Dr. Stephen Henson
e6e5592a50 Make mkfipsscr.pl options consistent across platforms. 2007-09-22 12:43:13 +00:00
Dr. Stephen Henson
663bbb6367 Change rsp filename to WIN32 format if needed. 2007-09-21 18:05:25 +00:00
Dr. Stephen Henson
98ced05c56 New --rspdir option to mkfipsscr.pl to specify alternate output directory.
Modify fips_aesavs and fips_desmovs to support an optional output filename
with -f option.
2007-09-21 18:00:24 +00:00
Dr. Stephen Henson
5b75e1cff4 Update TABLE 2007-09-19 00:10:03 +00:00
Dr. Stephen Henson
f36a8c2060 Include some fixes from 0.9.8-stable branch. 2007-09-19 00:02:49 +00:00
Andy Polyakov
90ac9ec264 BSD run-time linkers apparently demand RPATH on .so objects [from HEAD].
PR: 1381
2007-09-16 18:44:35 +00:00
Dr. Stephen Henson
fe5c4c885b Exit dsa test program if key gen error. 2007-09-12 21:35:39 +00:00
Dr. Stephen Henson
1950e8acea Add more failure testing FIPS functions, for continuous RNG, pairwise RSA/DSA.
Update fips_test_suite to use them and convert AES, DES3 and SHAx to use EVP.
2007-09-12 17:46:08 +00:00
Dr. Stephen Henson
437bafa5cc Update mkfipsscr.pl to handle CFB1 mode. 2007-09-07 11:24:25 +00:00
Andy Polyakov
7c78f06301 Remove [BL]_ENDIAN from no-asm builds. 2007-08-29 18:51:14 +00:00
Andy Polyakov
b27278d0cf Last change inadvertently disabled x86[_64] assembler in Windows build. 2007-08-27 20:02:23 +00:00
Andy Polyakov
24a69a8196 Disable non-x86[_64] assembler modules. 2007-08-27 16:26:37 +00:00
Andy Polyakov
b3049d696b shlib_wrap update [from HEAD]. 2007-08-27 08:57:59 +00:00
Andy Polyakov
77b265f48c Framework update. 2007-08-26 14:57:42 +00:00
Andy Polyakov
735b9eeed5 IRIX and Tru64 platform updates [from HEAD]. 2007-08-26 14:57:10 +00:00
Andy Polyakov
67c31c4b61 Short circuit ranlib in trap handler. 2007-08-26 08:51:23 +00:00
Andy Polyakov
0406ce2646 Engage x86_64 assembler in Win64 build. 2007-08-23 12:13:55 +00:00
Andy Polyakov
76108ba7eb Updates from HEAD. 2007-08-23 12:04:42 +00:00
Andy Polyakov
4d27e3d339 Make tesfipsssl pass. 2007-08-21 15:26:51 +00:00
Andy Polyakov
7d59e441ca Avoid BN_CTX_free(uninitialized pointer). 2007-08-21 14:44:13 +00:00
Dr. Stephen Henson
3e3c47d5d5 Update fips_dsatest to use 1024 bit key. 2007-08-21 12:57:06 +00:00
Dr. Stephen Henson
03b7b4690c Cleaner check of self test status. 2007-08-19 12:49:07 +00:00
Dr. Stephen Henson
0fd9322af1 Block DH key gen for small key sizes too. 2007-08-18 02:46:11 +00:00
Dr. Stephen Henson
7016b1952e Don't generate DSA keys with key size too small. 2007-08-18 02:36:23 +00:00
Dr. Stephen Henson
ff3e014820 Remove single DES self test vectors. 2007-08-15 16:22:34 +00:00
Dr. Stephen Henson
50cd0f0eb3 Delete old files. 2007-08-15 15:29:43 +00:00
Dr. Stephen Henson
32098b7565 Move fips-1.0/ files to fips/ 2007-08-15 13:35:51 +00:00
Dr. Stephen Henson
bf4131fbf9 Update to include fips_locl.h so WIN32 build can pick it up. 2007-08-15 12:37:34 +00:00
Dr. Stephen Henson
2ac869590f Indicate failure if any selftest fails.
Increase keysizes in fips_test_suite
2007-08-15 00:36:05 +00:00
Dr. Stephen Henson
4742bc0f6f Fix remaining error code discrepancies. 2007-08-14 16:00:52 +00:00
Dr. Stephen Henson
02e483d236 Fix more error codes. 2007-08-14 13:33:33 +00:00
Dr. Stephen Henson
1a58139aaa More function code correction. 2007-08-14 13:20:42 +00:00
Dr. Stephen Henson
a32f4770e9 Ensure seed does not match key and fixup error codes. 2007-08-14 13:17:28 +00:00
Dr. Stephen Henson
086d475ffb Make FIPS cipher alias work again. 2007-08-13 18:35:04 +00:00
Dr. Stephen Henson
7f1288da93 Enforce minimum key sizes in FIPS mode. 2007-08-13 18:02:52 +00:00
Dr. Stephen Henson
0a6e92a88f Include modulus sanity checks. 2007-08-13 13:28:31 +00:00
Dr. Stephen Henson
36eaa70621 Update DSA selftest with data from NIST test vectors. 2007-08-13 13:21:08 +00:00
Andy Polyakov
d7dc9a7ce3 Platform check in FIPS_mode_set. 2007-08-02 20:42:33 +00:00
Andy Polyakov
319e19db9c Remove options in ./config. 2007-08-02 20:41:13 +00:00
Andy Polyakov
ef85b85b12 Erroneously omitted code from "jumbo framework update." 2007-08-01 14:22:36 +00:00
Andy Polyakov
4d4d27a2a0 Typo in fipsld. 2007-08-01 11:49:16 +00:00
Andy Polyakov
8f0d89092e Jumbo framework update. 2007-08-01 11:33:17 +00:00
Andy Polyakov
c4a2cab0bb Typos in ./config [from HEAD].
PR: 1563
2007-08-01 11:22:23 +00:00
Andy Polyakov
6d73d35f4f aes-x86_64 update [from HEAD]. 2007-07-30 16:44:12 +00:00
Andy Polyakov
f53e66af67 Respect ISO aliasing rules.
PR: 1296
2007-07-27 20:36:09 +00:00
Andy Polyakov
5cbe626d26 AES for IA64 update [from HEAD]. 2007-07-27 18:22:40 +00:00
Andy Polyakov
fe93a60b00 Allow for extrnal DllMain. 2007-07-26 16:46:54 +00:00
Dr. Stephen Henson
5e10ca5618 Extend do_fips to detect processor from %PROCESSOR_ARCHITECTURE% environment
variable and support no-asm command line option for WIN32.
2007-07-25 23:38:11 +00:00
Andy Polyakov
4e8da09800 x86 perlasm updates [from HEAD]. 2007-07-25 12:38:35 +00:00
Dr. Stephen Henson
203ae57fe0 Generate and use assembly language files in WIN32 build. 2007-07-24 18:27:35 +00:00
Andy Polyakov
529c33f1e8 Throw in bn_mul_mont for x86_64. 2007-07-24 15:42:13 +00:00
Andy Polyakov
af18a34478 Throw in bn_mul_mont for x86. 2007-07-24 15:29:21 +00:00
Andy Polyakov
da5c0127ac Allow for bn_mul_mont assembler. 2007-07-24 15:07:51 +00:00
Andy Polyakov
ce0e12d29a Configure update from 098. 2007-07-24 14:41:03 +00:00
Andy Polyakov
87339c6290 s390x assembler pack. 2007-07-23 20:42:50 +00:00
Andy Polyakov
0a22e7446b Typo in EXCL_OBJ list 2007-07-23 16:35:30 +00:00
Andy Polyakov
b56cb7c6ea x86*cpuid update [from HEAD]. 2007-07-23 16:18:36 +00:00
Andy Polyakov
cd5ab329f2 Optimized OPENSSL_cleanse [from HEAD]. 2007-07-23 16:10:06 +00:00
Andy Polyakov
80106dc5fb aes-586.pl from HEAD. 2007-07-23 15:13:51 +00:00
Andy Polyakov
0fa79cbe17 Synchronize x86 perlasm with HEAD. 2007-07-23 15:12:20 +00:00
Andy Polyakov
be22102d82 Add AES x86_64 assembler module. 2007-07-23 14:56:01 +00:00
Andy Polyakov
1ad95f8217 Add SHA x86_64 assembler. 2007-07-23 14:42:12 +00:00
Andy Polyakov
5f1211834f x86_64-xlate.pl from HEAD. 2007-07-23 14:21:42 +00:00
Andy Polyakov
28feb1f8da md32_common.h update from HEAD. 2007-07-23 14:15:36 +00:00
Andy Polyakov
9596d1e63b Decommission md5-sparcv9 module. 2007-07-23 14:13:14 +00:00
Dr. Stephen Henson
626bebeede Delete obsolete files. 2007-07-23 11:54:47 +00:00
Andy Polyakov
dfe42a131f Framework updates. 2007-07-22 20:53:17 +00:00
Dr. Stephen Henson
1970bc2703 For Unix fips builds...
1. Make shared library build default.
2. Fix libcrypto build to work with shared builds.
3. Link fips utilities to fipscanister.o except for fipsdso builds.
2007-07-21 20:18:47 +00:00
Dr. Stephen Henson
08debe11f8 Install fipscanister.o and friends. Disable warning halt in VC++ build. 2007-07-21 12:07:09 +00:00
Dr. Stephen Henson
9c7e058216 Don't install docs by default. 2007-07-21 00:15:15 +00:00
Dr. Stephen Henson
b01e8b2063 Change fips build default install location so it doesn't overwrite any
existing OpenSSL installation.
2007-07-21 00:14:02 +00:00
Dr. Stephen Henson
100868d1cf Link fips utils against fipscanister.lib only except for dso builds.
Add --with-fipslibdir option to Configure.
2007-07-20 22:23:11 +00:00
Dr. Stephen Henson
0712210f03 Typo. 2007-07-19 21:44:25 +00:00
Dr. Stephen Henson
8431a6aaf5 Add error checking to script. 2007-07-19 16:45:31 +00:00
Dr. Stephen Henson
2b4a783f66 Initial fips WIN32 compilation batch file. 2007-07-19 16:11:21 +00:00
Dr. Stephen Henson
25df4a81cc Use X9.31 keygen for signature test. 2007-07-19 12:24:01 +00:00
Dr. Stephen Henson
23830280e4 Add SSE2 support to VC++ build. Update MASM script. 2007-07-19 12:17:56 +00:00
Andy Polyakov
bfdfc67b01 shlib_wrap.sh update [from HEAD]. 2007-07-16 14:02:52 +00:00
Andy Polyakov
4764a0543d Bourne shell portability fix. 2007-07-16 12:23:55 +00:00
Andy Polyakov
d92b0efbb8 Framework updates. 2007-07-16 10:00:36 +00:00
Dr. Stephen Henson
b329cc2410 Check return code properly in fputs (< 0 is error). 2007-07-16 00:09:44 +00:00
Dr. Stephen Henson
ed31fe68ff Update test script generator for Win32. 2007-07-15 21:27:34 +00:00
Dr. Stephen Henson
8fa41c6696 include openssl/fips.h in sha1dgst.c 2007-07-15 16:50:34 +00:00
Dr. Stephen Henson
707a028c8b Update .cvsignore 2007-07-15 16:12:29 +00:00
Dr. Stephen Henson
9593bc46bf Tolerate DigestInfo with absent parameters in FIPS mode. 2007-07-15 16:10:46 +00:00
Dr. Stephen Henson
5c65d38219 Add selftest check to SHA1 routine. 2007-07-15 12:06:23 +00:00
Dr. Stephen Henson
1b8b2d9300 Enhance mkfipsscr.pl to handle different testvector paths and perform
sanity checks.

Make AES/TDES algorithm test programs quiet if VERBOSE is zero.
2007-07-15 12:01:54 +00:00
Dr. Stephen Henson
4e1778b0d8 Update Windows build system to use AES assembler and standard assembly
language routines in FIPS mode compiles.
2007-07-12 08:20:21 +00:00
Dr. Stephen Henson
982c67fbaa Updates to WIN32 build system to make FIPS build work again. 2007-07-11 11:53:20 +00:00
Dr. Stephen Henson
2ef2463643 Typo. 2007-07-11 00:11:09 +00:00
Dr. Stephen Henson
585eb117d4 Delete old duplicate files. 2007-07-10 22:02:02 +00:00
Dr. Stephen Henson
7c27ac1030 Update dependencies. 2007-07-10 21:37:24 +00:00
Dr. Stephen Henson
475631c31a Use common source files for FIPS mode and utilize same optimizations. 2007-07-10 21:24:32 +00:00
Andy Polyakov
218ba8cb9d Shut up memory debuggers complaining about AES x86 assembler module
[from stable].
PR: 1508,1320
2007-07-08 19:41:38 +00:00
Andy Polyakov
e881c00515 EVP_*_cfb1 was broken [from HEAD].
PR: 1318
2007-07-08 19:20:48 +00:00
Andy Polyakov
6c3fca2b10 bn_mul_recursive doesn't handle all cases correctly, which results in
BN_mul failures at certain key-length mixes [from HEAD].
PR: 1427
2007-07-08 18:55:51 +00:00
Andy Polyakov
0225c7a41e Typo in str_lib.c [from HEAD].
PR: 1177
2007-07-07 20:12:12 +00:00
Dr. Stephen Henson
a334b0436d Update ordinals. 2007-07-02 12:10:06 +00:00
Dr. Stephen Henson
af13a3949d Check selftest in rand too. 2007-07-02 11:27:52 +00:00
Dr. Stephen Henson
ffc35e73b4 Check selftest status in all crypto operations and abort with
a fatal error on failure.
2007-07-02 11:22:50 +00:00
Dr. Stephen Henson
a197212e0f Modify AES and 3DES selftests to use EVP. 2007-07-01 23:19:15 +00:00
Dr. Stephen Henson
8944220221 Move 3DES EVP inside FIPS module and modify algorithm tests to use it. 2007-07-01 17:58:15 +00:00
Dr. Stephen Henson
5fd76ba57a Changes to make AES algorithm test work via EVP. 2007-07-01 12:53:10 +00:00
Dr. Stephen Henson
df50ec372e Add enc_min.c file. 2007-07-01 00:08:42 +00:00
Dr. Stephen Henson
49fa74385d Move minimal EVP_CIPHER implementation into FIPS library. Not used by
any FIPS applications yet.
2007-07-01 00:07:25 +00:00
Andy Polyakov
899f528c1a bn_mont.c fix [from HEAD]. 2007-06-29 13:15:33 +00:00
Dr. Stephen Henson
5faa5a9476 Make fips test suite script halt on errors. 2007-06-23 00:02:25 +00:00
Dr. Stephen Henson
ddb0cb5bfd Avoid warnings. Fix fips_dssvs program. 2007-06-22 12:17:52 +00:00
Dr. Stephen Henson
b2d65cbac7 Fix warnings. 2007-06-20 17:49:42 +00:00
Dr. Stephen Henson
6be8288928 Remove deleted function from headers. 2007-06-19 16:10:19 +00:00
Dr. Stephen Henson
9fe07b7cf0 Fix from stable branch. 2007-06-19 15:44:44 +00:00
Andy Polyakov
0c86c87c60 Updates from stable branch: BN_*_no_branch privatization and elimination of
conditional final subtraction in Montgomery multiplication.
2007-06-11 16:43:29 +00:00
Dr. Stephen Henson
e20d6ef3d6 Increment counter after use. 2007-06-05 17:28:00 +00:00
Dr. Stephen Henson
27f50994ff Disable DES in FIPS mode. 2007-05-21 12:45:10 +00:00
Dr. Stephen Henson
53c381105a Update from stable branch. 2007-05-21 12:40:07 +00:00
Andy Polyakov
33d0ef8fde Padlock engine fails to compile with -O0 -fPIC [from HEAD]. 2007-05-20 07:14:30 +00:00
Andy Polyakov
b2acf7a572 Type cast fixes in aes-586.pl [from 098-stable]. 2007-05-19 20:12:46 +00:00
Andy Polyakov
e8d2d9478d cygwin shared rules update [from HEAD].
PR: 1517
2007-05-19 19:41:28 +00:00
Andy Polyakov
23b3b61921 Typo in x509_txt.c [from HEAD]. 2007-05-19 18:05:33 +00:00
Andy Polyakov
d265676989 Detect UltraSPARC T1 in ./config [from HEAD]. 2007-05-04 13:08:00 +00:00
Andy Polyakov
69fc3dff96 Fix s390x detection in ./config [from 098]. 2007-04-30 12:06:30 +00:00
Dr. Stephen Henson
667731b635 Make ordinals consistent across branches. 2007-04-25 13:24:56 +00:00
Dr. Stephen Henson
a416ca47ac Merge from 0.9.8-stable. 2007-04-25 13:15:51 +00:00
Dr. Stephen Henson
2714e2ac89 Merge from stable branch. 2007-04-24 11:34:19 +00:00
Dr. Stephen Henson
1139eeecbc Merge from 0.9.8 stable branch. 2007-04-24 11:30:51 +00:00
Dr. Stephen Henson
1b936a5e37 Fix from HEAD. 2007-04-09 23:51:50 +00:00
Dr. Stephen Henson
0cca0fe0c2 Update ordinals. Use gap for EVP_add_alg_module to keep values consistent
across versions.
2007-04-09 12:15:31 +00:00
Dr. Stephen Henson
56474376dc If config file tries to enter FIPS mode in a non FIPS capable library
return an error.
2007-04-09 12:06:26 +00:00
Dr. Stephen Henson
3e511f167e Update from HEAD. 2007-04-09 11:47:59 +00:00
Dr. Stephen Henson
282af42404 Add algorithm configuration module. 2007-04-08 17:51:02 +00:00
Dr. Stephen Henson
a81f337331 Block low level public key signature operations in FIPS mode.
Update self tests for all modes and use EVP.

Update pairwise consistency checks.
2007-04-06 00:30:24 +00:00
Dr. Stephen Henson
1729dca9a8 Fix Win32 warning. Update ordinals. 2007-04-04 00:33:23 +00:00
Dr. Stephen Henson
9719193222 New EVP sign and verify functionality. 2007-04-03 21:01:29 +00:00
Dr. Stephen Henson
e6fa7c1276 Don't process any of kssl.c if krb5 option not set. 2007-04-03 18:24:22 +00:00
Dr. Stephen Henson
cf7053430d Add new file. 2007-04-03 02:13:20 +00:00
Dr. Stephen Henson
ff03c6bc97 Add tiny ASN1 code for DSA signatures.
Make DSA tests, selftests and algorithm tests use EVP.
2007-04-02 23:59:47 +00:00
Dr. Stephen Henson
82c8b6b74d Make ordinals consistent with 0.9.8-stable. 2007-03-28 22:09:56 +00:00
Dr. Stephen Henson
cb6fdc3a49 Update from stable branch. 2007-03-28 22:00:48 +00:00
Dr. Stephen Henson
8c3b5d5f27 Update from 0.9.8-stable with patches also applied to equivalent FIPS
sources.
2007-03-28 12:38:55 +00:00
Dr. Stephen Henson
dc83f2e312 Perl script to rename sections in MS COFF binaries.
Submitted by: Andy Polyakov
2007-03-27 00:04:55 +00:00
Dr. Stephen Henson
6693e26927 Use perl script instead of editbin to rename object file sections. 2007-03-27 00:03:42 +00:00
Dr. Stephen Henson
793364457b Modify VC++ build sytem to use fipscanister.lib instead of fipscanister.o
and avoid the need for ld.exe.
2007-03-26 12:06:44 +00:00
Andy Polyakov
6b05350495 Oops! Revert to previous version and [re-]apply diff. 2007-03-25 15:42:13 +00:00
Andy Polyakov
daec9a56a0 aix updates from HEAD. 2007-03-25 15:37:26 +00:00
Andy Polyakov
5c77786a55 Typos in Makefiles. 2007-03-25 14:40:33 +00:00
Dr. Stephen Henson
42bc3582a9 Make sure fipscanister.o is built and installed for static WIN32 builds. 2007-03-24 18:47:54 +00:00
Dr. Stephen Henson
2050f6514f Add some version info and comments to WIN32 FIPS DLL. 2007-03-22 19:24:34 +00:00
Dr. Stephen Henson
5068d7dda4 Add version info to FIPS DLL. 2007-03-22 19:07:31 +00:00
Dr. Stephen Henson
55768cf773 Forward FIPS DLL implementations from libcrypto DLL under Win32. 2007-03-22 18:31:35 +00:00
Dr. Stephen Henson
6c69dcd9f5 Add missing #ifdef 2007-03-22 13:42:05 +00:00
Dr. Stephen Henson
ad4297dd9c Update from stable branch. 2007-03-22 13:19:46 +00:00
Dr. Stephen Henson
aeb9ccfaad And so it begins... 2007-03-22 00:39:24 +00:00
cvs2svn
79b335a4b5 This commit was manufactured by cvs2svn to create branch 'OpenSSL-fips-
0_9_8-stable'.
2007-03-21 14:33:02 +00:00
Bodo Möller
6fd3f3260d stricter session ID context matching 2007-03-21 14:33:01 +00:00
Bodo Möller
d9e262443c oops -- this should have been in 0.9.8e 2007-03-21 14:18:27 +00:00
Bodo Möller
51c3bb3b98 clarification regarding libdes files 2007-03-21 10:58:32 +00:00
Andy Polyakov
7d608f9e32 PowerPC config updates from HEAD. 2007-03-20 09:06:52 +00:00
Dr. Stephen Henson
295de18c8a Fix kerberos ciphersuite bugs introduced with PR:1336. 2007-03-09 14:06:34 +00:00
Ben Laurie
3370b694b9 Make local function static. 2007-03-08 15:52:04 +00:00
Dr. Stephen Henson
3380c52f15 Stop memory leak. 2007-03-05 00:06:47 +00:00
Lutz Jänicke
1364e6f1ac Initialize "buf" to 0 to make valgrind happy :-)
Note: the RAND_bytes() manual page says:
 RAND_bytes() puts num cryptographically strong pseudo-random bytes into buf.
It does not talk about using the previous contents of buf so we are working
as documented.
2007-03-02 17:54:31 +00:00
Lutz Jänicke
c5ac2aa62c Do not use uninitialized memory to seed the PRNG as it may confuse
code checking tools.
PR: 1499
2007-03-02 17:44:55 +00:00
Dr. Stephen Henson
392a0345de EVP_CIPHER_CTX_key_length() should return the set key length in the
EVP_CIPHER_CTX structure which may not be the same as the underlying
cipher key length for variable length ciphers.
2007-02-27 18:42:52 +00:00
Lutz Jänicke
5c2fc73e7b Merge from HEAD 2007-02-27 08:26:51 +00:00
Bodo Möller
402b951804 include complete 0.9.7 history 2007-02-26 10:48:56 +00:00
Bodo Möller
5848d13fed use 2007 copyright for generated files 2007-02-26 10:47:49 +00:00
Dr. Stephen Henson
5dd24ead57 Prepare for next version. 2007-02-23 12:50:54 +00:00
Dr. Stephen Henson
d2cb94952a Add L to version number 2007-02-23 12:38:11 +00:00
Dr. Stephen Henson
0615396d2d Prepare for release. 2007-02-23 12:12:28 +00:00
Dr. Stephen Henson
82877ea449 Make update. 2007-02-23 01:01:08 +00:00
Lutz Jänicke
81fae49db9 Fix problem with multi line responses in -starttls by using a buffering
BIO and BIO_gets().
2007-02-22 17:39:50 +00:00
Dr. Stephen Henson
74ff8dc975 Don't use deprecated -mcpu option. 2007-02-22 02:00:39 +00:00
Dr. Stephen Henson
ac319217d0 Update NEWS file. 2007-02-22 01:35:24 +00:00
Lutz Jänicke
cdb13ae8d0 Extend SMTP and IMAP protocol handling to perform the required
EHLO or CAPABILITY handshake before sending STARTTLS

Submitted by: Goetz Babin-Ebell <goetz@shomitefo.de>
2007-02-21 18:20:33 +00:00
Lutz Jänicke
ab700807d9 Add automatic detection for Linux on SuperH
PR: 1152
Submitted by: Mike Frysinger <vapier@gentoo.org>
2007-02-21 18:10:19 +00:00
Lutz Jänicke
744b91bb9f Add support for m68 linux
PR: 1277
Submitted by: Mike Frysinger <vapier@gentoo.org>
2007-02-21 17:58:51 +00:00
Lutz Jänicke
d69f85bf15 Fix incorrect handling of special characters
PR: 1459
Submitted by: tnitschke@innominate.com
Reviewed by: steve@openssl.org
2007-02-21 17:44:51 +00:00
Dr. Stephen Henson
52ee969e29 Update from 0.9.7-stable. 2007-02-21 13:48:49 +00:00
Bodo Möller
55f0501201 Include "!eNULL" in SSL_DEFAULT_CIPHER_LIST to make sure that a
ciphersuite string such as "DEFAULT:RSA" cannot enable
authentication-only ciphersuites.
2007-02-19 18:38:11 +00:00
Bodo Möller
b2710ee19a remove inconsistency between builds with and without Camellia enabled 2007-02-19 17:55:07 +00:00
Bodo Möller
bbfcc4724d fix incorrect strength bit values for certain Kerberos ciphersuites
Submitted by: Victor Duchovni
2007-02-19 14:47:21 +00:00
Dr. Stephen Henson
c31cc72d79 Avoid warning. 2007-02-18 18:18:31 +00:00
Dr. Stephen Henson
d1049ad93e Fix Win32 warnings. 2007-02-18 17:23:20 +00:00
Bodo Möller
5f4cc234fb Some fixes for ciphersuite string processing:
- add a workaround provided by Victor Duchovni so that 128- and
  256-bit variants of otherwise identical ciphersuites are treated
  correctly;

- also, correctly skip invalid parts of ciphersuite description strings.

Submitted by: Victor Duchovni, Bodo Moeller
2007-02-17 06:52:42 +00:00
Nils Larsch
d31a13953c ensure that the EVP_CIPHER_CTX object is initialized
PR: 1490
2007-02-16 20:40:07 +00:00
Richard Levitte
28f5873179 Add STARTTLS support for IMAP and FTP.
Submitted by Kees Cook <kees@outflux.net>
2007-02-16 18:12:20 +00:00
Nils Larsch
8f813338f1 - use OPENSSL_malloc() etc. in zlib
- move zlib_stateful_ex_idx initialization to COMP_zlib()

PR: 1468
2007-02-14 21:50:26 +00:00
Nils Larsch
6555dfa486 use user-supplied malloc functions for persistent kssl objects
PR: 1467
Submitted by: Andrei Pelinescu-Onciul <andrei@iptel.org>
2007-02-10 10:40:24 +00:00
Nils Larsch
5eee0253e5 remove unreachable code 2007-02-10 09:48:42 +00:00
Dr. Stephen Henson
594c723f98 Add hmac option to dgst from 0.9.7-stable. 2007-02-08 19:08:21 +00:00
Nils Larsch
f418265865 ensure that a ec key is used
PR: 1476
2007-02-07 20:36:40 +00:00
Richard Levitte
53707e2eec After objects have been freed, NULLify the pointers so there will be no double
free of those objects
2007-02-07 01:42:51 +00:00
Nils Larsch
fde794e898 fix typo 2007-02-06 19:48:36 +00:00
Nils Larsch
082f19b42d add note about 56 bit ciphers
PR: 1461
2007-02-06 19:40:45 +00:00
Dr. Stephen Henson
e31c620686 Update from fips2 branch. 2007-02-03 17:32:14 +00:00
Dr. Stephen Henson
dcc309548e file err_str.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:08 +0000 2007-02-03 17:19:42 +00:00
Dr. Stephen Henson
570253315f file err_str.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 11:26:29 +0000 2007-02-03 17:19:41 +00:00
Dr. Stephen Henson
8eae0ff0f7 file fips_err.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:37:45 +0000 2007-02-03 17:19:40 +00:00
Dr. Stephen Henson
5dcdac6e4e file fips_err.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 22:48:18 +0000 2007-02-03 17:19:39 +00:00
Dr. Stephen Henson
5c4a07551e file fips_err.h was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:37:46 +0000 2007-02-03 17:19:38 +00:00
Dr. Stephen Henson
eea3fce854 file fips_err.h was added on branch OpenSSL_0_9_8-stable on 2008-09-16 22:48:18 +0000 2007-02-03 17:19:37 +00:00
Nils Larsch
215c49d032 fix documentation
PR: 1466
2007-02-03 10:27:31 +00:00
Nils Larsch
923df53e25 fix potential memory leaks
PR: 1462
Submitted by: Charles Hardin <chardin@2wire.com>
2007-02-03 09:51:59 +00:00
Dr. Stephen Henson
b443a0ea5d file mksdef.pl was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:22 +0000 2007-01-27 13:19:44 +00:00
Dr. Stephen Henson
1a684d0020 file mksdef.pl was added on branch OpenSSL_0_9_8-stable on 2008-09-18 11:20:08 +0000 2007-01-27 13:19:43 +00:00
Dr. Stephen Henson
1f4a5a3339 file fips_rsa_sign.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:05 +0000 2007-01-24 13:00:16 +00:00
Dr. Stephen Henson
dc3b721fa0 Update from 0.9.7-stable. 2007-01-23 17:54:22 +00:00
Dr. Stephen Henson
4479ce9c1c Update from HEAD. 2007-01-21 16:07:25 +00:00
Dr. Stephen Henson
4a0d3530e0 Update from HEAD. 2007-01-21 13:16:49 +00:00
Dr. Stephen Henson
9907d2992d Update from HEAD. 2007-01-18 21:25:24 +00:00
Dr. Stephen Henson
20fb51b1a7 file fips_premain.c.sha1 was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:45 +0000 2007-01-16 14:06:34 +00:00
Dr. Stephen Henson
551bfa60e0 file mkfipsscr.pl was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:46 +0000 2007-01-15 00:25:58 +00:00
Lutz Jänicke
9d9224f184 Update do new home page 2007-01-12 18:47:28 +00:00
Andy Polyakov
78d4d87e39 Initialize padlock in shared build. 2007-01-04 22:55:25 +00:00
Andy Polyakov
6211633273 #include <stddef.h> in digest headers [from HEAD]. 2006-12-29 14:55:43 +00:00
Nils Larsch
3a4cf918bf fix return value of get_cert_chain()
PR: 1441
2006-12-27 09:39:51 +00:00
Richard Levitte
e25eb309ec From HEAD 2006-12-26 21:23:38 +00:00
Richard Levitte
ffa2b2aa7d Synchronise with Unixly build 2006-12-25 10:57:20 +00:00
Andy Polyakov
a77a95584d Make sha.h more "portable" [from HEAD]. 2006-12-22 16:04:56 +00:00
Nils Larsch
68bb98159f fix typos
PR: 1354, 1355, 1398
2006-12-21 21:11:44 +00:00
Nils Larsch
8e6905d238 remove trailing '\'
PR: 1438
2006-12-19 19:47:39 +00:00
Bodo Möller
1a8521ff24 Fix the BIT STRING encoding of EC points or parameter seeds
(need to prevent the removal of trailing zero bits).
2006-12-19 15:10:46 +00:00
Nils Larsch
9d5460d72d properly initialize SSL context, check return value 2006-12-13 22:08:20 +00:00
Dr. Stephen Henson
35e59297fc Update from 0.9.7-stable branch 2006-12-07 13:28:07 +00:00
Dr. Stephen Henson
9b945233b1 Update from HEAD. 2006-12-06 13:38:59 +00:00
Nils Larsch
b065dc2eee fix documentation
PR: 1343
2006-12-06 09:12:28 +00:00
Nils Larsch
66c4bb1a70 avoid duplicate entries in add_cert_dir()
PR: 1407
Submitted by: Tomas Mraz <tmraz@redhat.com>
2006-12-05 21:21:10 +00:00
Nils Larsch
36abe6fe61 return 0 if 'noout' is used and no has occurred
PR: 1435
Submitted by: "Haridharan" <haridharan@gmail.com>
2006-12-05 20:08:03 +00:00
Nils Larsch
3c786aa6c8 allocate a new attributes entry in X509_REQ_add_extensions()
if it's NULL (in case of a malformed pkcs10 request)

PR: 1347
Submitted by: Remo Inverardi <invi@your.toilet.ch>
2006-12-04 19:10:58 +00:00
Nils Larsch
e5cce6d356 add "Certificate Issuer", "Issuing Distribution Point" and
"Subject Directory Attributes" OIDs

PR: 1433
2006-12-04 18:48:16 +00:00
Andy Polyakov
723b7d81e4 Camellia fixes and improvements from HEAD. 2006-12-02 12:00:27 +00:00
Andy Polyakov
a3ddd7358b Camellia portability fixes.
Submitted by: Masashi Fujita, NTT
2006-12-02 11:57:40 +00:00
Dr. Stephen Henson
45c027f31f Update dependencies. 2006-11-30 14:03:58 +00:00
Dr. Stephen Henson
3b62e9eb0d Fix default depflags. 2006-11-30 14:01:38 +00:00
Dr. Stephen Henson
34a8c7ec87 Win32 fixes.
Use OPENSSL_NO_RFC3779 instead of OPENSSL_RFC3779: this makes the Win32 scripts
work and is consistent with other options.

Fix Win32 scripts and Configure to process OPENSSL_NO_RFC3779 properly.

Update ordinals.

Change some prototypes for LSB because VC++ 6 doesn't like the */ sequence and thinks it is an invalid end of comment.
2006-11-30 13:04:43 +00:00
Nils Larsch
d4a6240005 replace macros with functions
Submitted by: Tracy Camp <tracyx.e.camp@intel.com>
2006-11-29 20:47:15 +00:00
Bodo Möller
5c6f76da0a fix support for receiving fragmented handshake messages 2006-11-29 14:45:14 +00:00
Ben Laurie
4636341b05 Add RFC 3779 support, contributed by ARIN. 2006-11-27 13:36:55 +00:00
Nils Larsch
be3b770d8f register the engine as default engine in ENGINE_set_default()
PR: 1431
2006-11-24 18:44:26 +00:00
Ulf Möller
af32387b3f wording, as in head 2006-11-21 20:51:47 +00:00
Dr. Stephen Henson
115fc340cb Rebuild error file C source files. 2006-11-21 20:14:46 +00:00
Dr. Stephen Henson
900f7a8776 Update from 0.9.7-stable.
Improve mkerr.pl header file function name parsing.
2006-11-21 20:14:05 +00:00
Dr. Stephen Henson
4877e30504 Fix from HEAD. 2006-11-13 13:23:05 +00:00
Nils Larsch
4656ec3852 update md docs 2006-10-27 21:59:48 +00:00
Andy Polyakov
e336441197 Gcc over-optimizes PadLock AES CFB codepath, tell it not to [from HEAD]. 2006-10-19 20:56:31 +00:00
Dr. Stephen Henson
20d6182f33 Typo. 2006-10-05 21:59:09 +00:00
Nils Larsch
aa145866f9 return an error if the supplied precomputed values lead to an invalid signature 2006-10-04 19:55:03 +00:00
Mark J. Cox
fdff41e166 Initialise ctx to NULL to avoid uninitialized free, noticed by
Steve Kiernan
2006-09-29 08:21:07 +00:00
Richard Levitte
07b4bc3979 APP_FILES is no longer used, remove it everywhere. 2006-09-29 06:54:39 +00:00
Bodo Möller
0c66d3ae37 fix typo 2006-09-28 13:30:28 +00:00
Bodo Möller
bd869183d5 for completeness, include 0.9.7l information 2006-09-28 13:29:08 +00:00
Richard Levitte
7e2bf83100 Fixes for the following claims:
1) Certificate Message with no certs

  OpenSSL implementation sends the Certificate message during SSL
  handshake, however as per the specification, these have been omitted.

  -- RFC 2712 --
     CertificateRequest, and the ServerKeyExchange shown in Figure 1
     will be omitted since authentication and the establishment of a
     master secret will be done using the client's Kerberos credentials
     for the TLS server.  The client's certificate will be omitted for
     the same reason.
  -- RFC 2712 --

  3) Pre-master secret Protocol version

  The pre-master secret generated by OpenSSL does not have the correct
  client version.

  RFC 2712 says, if the Kerberos option is selected, the pre-master
  secret structure is the same as that used in the RSA case.

  TLS specification defines pre-master secret as:
         struct {
             ProtocolVersion client_version;
             opaque random[46];
         } PreMasterSecret;

  where client_version is the latest protocol version supported by the
  client

  The pre-master secret generated by OpenSSL does not have the correct
  client version. The implementation does not update the first 2 bytes
  of random secret for Kerberos Cipher suites. At the server-end, the
  client version from the pre-master secret is not validated.

PR: 1336
2006-09-28 12:23:15 +00:00
Mark J. Cox
25e52a78fb After tagging, bump ready for 0.9.8e development 2006-09-28 11:39:33 +00:00
Mark J. Cox
47c4bb2ddf Prepare for 0.9.8d release 2006-09-28 11:32:42 +00:00
Mark J. Cox
951dfbb13a Introduce limits to prevent malicious keys being able to
cause a denial of service.  (CVE-2006-2940)
[Steve Henson, Bodo Moeller]

Fix ASN.1 parsing of certain invalid structures that can result
in a denial of service.  (CVE-2006-2937)  [Steve Henson]

Fix buffer overflow in SSL_get_shared_ciphers() function.
(CVE-2006-3738) [Tavis Ormandy and Will Drewry, Google Security Team]

Fix SSL client code which could crash if connecting to a
malicious SSLv2 server.  (CVE-2006-4343)
[Tavis Ormandy and Will Drewry, Google Security Team]
2006-09-28 11:29:03 +00:00
Dr. Stephen Henson
81780a3b62 Update from HEAD. 2006-09-23 17:30:25 +00:00
Dr. Stephen Henson
c574d0cdf2 Fix from HEAD. 2006-09-22 17:14:44 +00:00
Dr. Stephen Henson
c987c3f999 Fix from HEAD. 2006-09-22 17:07:40 +00:00
Dr. Stephen Henson
1a5e414863 Fix but in apps/pkcs12.c
PR: 1377
2006-09-22 00:28:37 +00:00
Andy Polyakov
ec3639385e Build error on non-unix [from HEAD].
PR: 1390
2006-09-18 19:51:45 +00:00
Andy Polyakov
f01cfca6a4 Race condition in ms/uplink.c [from HEAD].
PR: 1382
2006-09-18 19:44:23 +00:00
Bodo Möller
7d5af5e0fa Ensure that the addition mods[i]+delta cannot overflow in probable_prime().
[Problem pointed out by Adam Young <adamy (at) acm.org>]
2006-09-18 14:01:39 +00:00
Bodo Möller
8fdb296cbd Update 2006-09-12 14:42:09 +00:00
Bodo Möller
879b30aaa3 ensure that ciphersuite strings such as "RC4-MD5" match the SSL 2.0
ciphersuite as well
2006-09-11 09:48:46 +00:00
Bodo Möller
40ddcb717a Remove non-functional part of recent patch, after discussion with
Colin Percival (this would have caused more problems than solved,
and isn't really necessary anyway)
2006-09-06 06:43:26 +00:00
Mark J. Cox
da1841a075 After tagging, prep for next release 2006-09-05 08:51:30 +00:00
Mark J. Cox
0a0a10d127 Ready for 0.9.8c release 2006-09-05 08:45:37 +00:00
Mark J. Cox
df20b6e79b Avoid PKCS #1 v1.5 signature attack discovered by Daniel Bleichenbacher
(CVE-2006-4339)

Submitted by:  Ben Laurie, Google Security Team
Reviewed by: bmoeller, mjc, shenson
2006-09-05 08:25:42 +00:00
Dr. Stephen Henson
f4f1dc39e0 Fix from HEAD. 2006-08-31 21:01:41 +00:00
Dr. Stephen Henson
340b4dd7df Fix from HEAD. 2006-08-31 20:11:09 +00:00
Ben Laurie
4b9dcd821f Add IGE and biIGE modes. 2006-08-28 11:00:32 +00:00
Andy Polyakov
669c5c9380 Engage assembler in solaris64-x86_64-cc [backport from HEAD]. 2006-08-01 16:13:47 +00:00
Bodo Möller
7f9aa6c59b Camellia IPR information 2006-07-31 11:50:02 +00:00
Bodo Möller
d9c06b56ca New Camellia implementation (replacing previous version)
Submitted by: NTT
2006-07-19 13:38:27 +00:00
Bodo Möller
d045e1d77e Camellia information 2006-07-19 13:37:10 +00:00
Dr. Stephen Henson
6d14cc7ec1 Fix from HEAD. 2006-07-13 20:35:33 +00:00
Dr. Stephen Henson
eb499b2854 Oops... 2006-07-09 12:07:22 +00:00
Dr. Stephen Henson
65a82ef6d7 Fix from HEAD. 2006-07-09 12:03:02 +00:00
Ben Laurie
616f581650 Fix warning. 2006-07-02 14:43:21 +00:00
Bodo Möller
57e802656f documentation for "HIGH" vs. "MEDIUM" was not up-to-date 2006-06-30 22:03:48 +00:00
Bodo Möller
5d7f15daf8 use <poll.h> as by Single Unix Specification 2006-06-30 08:14:50 +00:00
Bodo Möller
ec67e3b7e4 always read in RAND_poll() if we can't use select because of a too
large FD: it's non-blocking mode anyway
2006-06-28 14:50:00 +00:00
Andy Polyakov
0d3ff3c073 aes-586.pl sync from HEAD. 2006-06-28 09:01:40 +00:00
Andy Polyakov
325e48867c Mitigate the hazard of cache-collision timing attack on last round
[from HEAD].
2006-06-28 08:58:15 +00:00
Richard Levitte
8de95bc05b Use poll() when possible to gather Unix randomness entropy 2006-06-27 06:31:57 +00:00
Bodo Möller
5e3003bb52 Be more explicit about requirements for multi-threading. 2006-06-23 14:59:59 +00:00
Bodo Möller
e6e3f38bfa Fix for previous change: explicitly named ciphersuites are OK to add 2006-06-22 13:07:45 +00:00
Bodo Möller
aa17ab7e57 Put ECCdraft ciphersuites back into default build (but disabled
unless specifically requested)
2006-06-22 12:35:54 +00:00
Bodo Möller
35908bd040 Remove ECC ciphersuites from 0.9.8 branch (should use 0.9.9 branch) 2006-06-20 08:50:33 +00:00
Bodo Möller
4a9cfd763e Another thread-safety fix 2006-06-16 01:01:14 +00:00
Bodo Möller
0e73294e26 Disable invalid ciphersuites 2006-06-14 17:52:01 +00:00
Bodo Möller
b610f46bae Make sure that AES ciphersuites get priority over Camellia ciphersuites
in the default cipher string.
2006-06-14 13:52:49 +00:00
Bodo Möller
1921a1adb2 "make depend" for the default configuration, i.e. no-camellia here in
the 0.9.8 branch!
2006-06-14 09:56:08 +00:00
Bodo Möller
6d2cd23f40 Thread-safety fixes 2006-06-14 08:51:41 +00:00
Bodo Möller
14fb67f28a make update 2006-06-14 08:47:00 +00:00
Richard Levitte
c552680473 Keep synchronised with Unix 2006-06-12 06:46:27 +00:00
Bodo Möller
edbf9f878d Camellia cipher, contributed by NTT
Submitted by: Masashi Fujita
Reviewed by: Bodo Moeller
2006-06-11 01:08:15 +00:00
Richard Levitte
2745ddfc33 Keep synchronised with the Unix build 2006-06-10 05:38:29 +00:00
Bodo Möller
808606034a Camellia cipher, contributed by NTT
Submitted by: Masashi Fujita
Reviewed by: Bodo Moeller
2006-06-09 22:31:05 +00:00
Bodo Möller
e18eef3d7a Camellia cipher, contributed by NTT
Submitted by: Masashi Fujita
Reviewed by: Bodo Moeller
2006-06-09 15:42:21 +00:00
Andy Polyakov
e78fc11a95 Tidy up hpux targets. 2006-05-20 08:51:11 +00:00
Dr. Stephen Henson
83231cb376 Fix from HEAD. 2006-05-17 18:25:59 +00:00
Dr. Stephen Henson
986ad56124 Fix from HEAD. 2006-05-17 18:20:27 +00:00
Dr. Stephen Henson
b723a7b11b Don't check for padding bug if compression is negotiated.
PR: 1204
2006-05-07 12:27:48 +00:00
Ulf Möller
1b6b67b17e bug fix.
PR: 1326
Submitted by: John Skodon
2006-05-06 18:35:41 +00:00
Dr. Stephen Henson
1ee3236f72 Update debug-steve 2006-05-06 12:18:15 +00:00
Dr. Stephen Henson
b03a4917be Backport of CPUID support in mk1mf and update Mingw32 batch file to build
cpuid source file.
2006-05-05 13:19:35 +00:00
Dr. Stephen Henson
84971b39f5 Initial support for single batch file to build all Win32 ASM files. 2006-05-05 00:22:18 +00:00
Dr. Stephen Henson
5ab3e743f3 Detect MSYS and use Unix like build if detected. 2006-05-04 16:24:27 +00:00
Dr. Stephen Henson
1c5dc844e7 Update for next dev version. 2006-05-04 13:08:35 +00:00
Dr. Stephen Henson
f871949efd Prepare for new release. 2006-05-04 12:46:42 +00:00
Dr. Stephen Henson
eb2ec6bee9 make update 2006-05-04 12:15:59 +00:00
Dr. Stephen Henson
df22f59f6e Update NEWS file. 2006-05-04 11:23:28 +00:00
Dr. Stephen Henson
db0edc3273 Inherit check time if appropriate. 2006-05-03 13:16:02 +00:00
Dr. Stephen Henson
6300c14248 Create a crlnumber file when a CA is created using CA.pl 2006-04-28 00:28:51 +00:00
Dr. Stephen Henson
d4426e79a7 Fix warning. 2006-04-15 17:53:52 +00:00
Dr. Stephen Henson
b095418d20 Fix from 0.9.7-stable. 2006-04-15 17:43:18 +00:00
Dr. Stephen Henson
d6fd880481 Fix on the right branch this time :-) 2006-04-15 13:17:53 +00:00
Dr. Stephen Henson
cbb0b734c7 If cipher list contains a match for an explicit ciphersuite only match that
one suite.
2006-04-15 00:22:34 +00:00
Richard Levitte
f4bcd70f27 Change chop to chomp when reading lines, so CRLF is properly processed on
the operating systems where they are the normal line endings
2006-04-03 09:15:40 +00:00
Ulf Möller
6e16b45d9d *** empty log message *** 2006-03-17 19:29:26 +00:00
Ulf Möller
e09e7ab362 as in head 2006-03-17 19:27:22 +00:00
Nils Larsch
d5cc2f19cd fix error found by coverity: check if ctx is != NULL before calling BN_CTX_end() 2006-03-14 22:48:31 +00:00
Nils Larsch
b7a80146f4 fix error found by coverity: check if ctx is != NULL before calling BN_CTX_end() 2006-03-13 23:12:08 +00:00
Bodo Möller
5586a71a6e clarification 2006-03-11 22:10:46 +00:00
Dr. Stephen Henson
81418b7c77 Update from HEAD. 2006-03-01 21:17:50 +00:00
Nils Larsch
8bd0c77ae3 force C locale when using [a-z] in sed expressions
PR: 1283
Submitted by: Mike Frysinger
2006-03-01 19:52:07 +00:00
Nils Larsch
e2217e7ed5 fix "#ifndef HZ" statement
PR: 1287
2006-02-28 20:08:46 +00:00
Nils Larsch
51b75ea7ef fix Intel Mac configuration; patch supplied by JP Szikora <szikora@icp.ucl.ac.be> 2006-02-25 11:53:45 +00:00
Nils Larsch
41d4d6721c fix no-dh configure option; patch supplied by Peter Meerwald 2006-02-24 17:58:35 +00:00
Dr. Stephen Henson
9d01d50459 Update from head. 2006-02-21 01:00:47 +00:00
Dr. Stephen Henson
e27c67c5c5 Fix from HEAD. 2006-02-19 13:45:22 +00:00
Nils Larsch
e7decd5f4d fix typos
PR: 1280
2006-02-15 19:44:45 +00:00
Dr. Stephen Henson
38a3178185 Fix OBJ_obj2txt() for large OIDs. 2006-02-15 15:03:47 +00:00
Nils Larsch
58828ae573 fix typo: pass pre-computed parameters to the underlying signature function; thanks to Lucas Newman 2006-02-13 08:22:39 +00:00
Richard Levitte
6b5f5e3508 Backport the following changes from HEAD:
1.270:
As an effect of revisions 1.261, BUILD_CMD was changed so $(DIRS)
wasn't respected when using it to build different parts of OpenSSL.
1.269 was an attempt to correct that, but unfortunately meant that we
built every part that was given i $(DIRS) 7 times.  This change puts
back the original intent with BUILD_CMD via the new macro
BUILD_ONE_CMD while keeping the intent with RECURSIVE_BUILD_CMD.

1.271:
Document the building macros.
2006-02-10 08:52:56 +00:00
Dr. Stephen Henson
f0ec771933 Update from 0.9.7-stable. 2006-02-09 12:28:30 +00:00
Nils Larsch
22d1087e16 backport recent changes from the cvs head 2006-02-08 19:16:33 +00:00
Dr. Stephen Henson
9f85fcefdc Update filenames in makefiles 2006-02-04 01:49:36 +00:00
Dr. Stephen Henson
269d2575cd Fix from HEAD. 2006-02-04 01:26:49 +00:00
Nils Larsch
0b8ed5de2d fix if statement: call conn_state() if the BIO is not in the BIO_CONN_S_OK state 2006-02-02 22:16:45 +00:00
Ben Laurie
c22684eac9 Constification. 2006-02-02 15:27:22 +00:00
Dr. Stephen Henson
c42cd4b831 Fix from HEAD. 2006-01-31 18:37:41 +00:00
Dr. Stephen Henson
ab50cf18db file fips-sx86-elf.s was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:11 +0000 2006-01-30 18:15:28 +00:00
Dr. Stephen Henson
31c0a38482 file fips_standalone_sha1.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:09 +0000 2006-01-30 18:15:27 +00:00
Dr. Stephen Henson
91c88deafe file fips_shatest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:09 +0000 2006-01-30 18:15:26 +00:00
Dr. Stephen Henson
a91cb15daa file fips_sha_locl.h was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:09 +0000 2006-01-30 18:15:25 +00:00
Dr. Stephen Henson
d2890f6223 file fips_sha512.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:08 +0000 2006-01-30 18:15:24 +00:00
Dr. Stephen Henson
1ce5bb27e4 file fips_sha256.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:08 +0000 2006-01-30 18:15:23 +00:00
Dr. Stephen Henson
04262cee42 file fips_sha1dgst.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:08 +0000 2006-01-30 18:15:22 +00:00
Dr. Stephen Henson
a5a1e71e86 file fips_sha1_selftest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:08 +0000 2006-01-30 18:15:21 +00:00
Dr. Stephen Henson
06d2a382c4 file fips_sha.h was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:08 +0000 2006-01-30 18:15:20 +00:00
Dr. Stephen Henson
4630a51537 file fips_md32_common.h was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:08 +0000 2006-01-30 18:15:19 +00:00
Dr. Stephen Henson
01f2ee2bc6 file SHAmix.req was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:07 +0000 2006-01-30 18:15:18 +00:00
Dr. Stephen Henson
def5aefa7f file SHAmix.fax was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:07 +0000 2006-01-30 18:15:17 +00:00
Dr. Stephen Henson
5ba7d69c66 file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:07 +0000 2006-01-30 18:15:16 +00:00
Dr. Stephen Henson
cf81dc74bd file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:07 +0000 2006-01-30 18:15:15 +00:00
Dr. Stephen Henson
46c646225d file fips_rsavtest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:05 +0000 2006-01-30 18:15:14 +00:00
Dr. Stephen Henson
d18c4d09d1 file fips_rsastest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:05 +0000 2006-01-30 18:15:13 +00:00
Dr. Stephen Henson
e5ad779b69 file fips_rsagtest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:05 +0000 2006-01-30 18:15:12 +00:00
Dr. Stephen Henson
cb36743161 file fips_rsa_x931g.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:05 +0000 2006-01-30 18:15:11 +00:00
Dr. Stephen Henson
fb3eab3562 file fips_rsa_selftest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:05 +0000 2006-01-30 18:15:10 +00:00
Dr. Stephen Henson
2724bcac2f file fips_rsa_gen.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:04 +0000 2006-01-30 18:15:09 +00:00
Dr. Stephen Henson
3431c07a66 file fips_rsa_eay.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:04 +0000 2006-01-30 18:15:08 +00:00
Dr. Stephen Henson
9abf011643 file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:04 +0000 2006-01-30 18:15:07 +00:00
Dr. Stephen Henson
75cdb055e6 file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:04 +0000 2006-01-30 18:15:06 +00:00
Dr. Stephen Henson
f4207058b8 file fips_rngvs.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:03 +0000 2006-01-30 18:15:05 +00:00
Dr. Stephen Henson
900b1eb869 file fips_randtest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:02 +0000 2006-01-30 18:15:04 +00:00
Dr. Stephen Henson
e3b61b1e57 file fips_rand_selftest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:02 +0000 2006-01-30 18:15:03 +00:00
Dr. Stephen Henson
750779da07 file fips_rand.h was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:02 +0000 2006-01-30 18:15:02 +00:00
Dr. Stephen Henson
157f01a8ef file fips_rand.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:02 +0000 2006-01-30 18:15:01 +00:00
Dr. Stephen Henson
491923fde1 file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:02 +0000 2006-01-30 18:15:00 +00:00
Dr. Stephen Henson
273f5726a5 file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:02 +0000 2006-01-30 18:14:59 +00:00
Dr. Stephen Henson
a37778046d file fips_hmactest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:01 +0000 2006-01-30 18:14:58 +00:00
Dr. Stephen Henson
8a087e57d2 file fips_hmac_selftest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:00 +0000 2006-01-30 18:14:57 +00:00
Dr. Stephen Henson
e384fd9418 file fips_hmac.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:00 +0000 2006-01-30 18:14:56 +00:00
Dr. Stephen Henson
f6e32f9db4 file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:00 +0000 2006-01-30 18:14:55 +00:00
Dr. Stephen Henson
66bb600b05 file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:00 +0000 2006-01-30 18:14:54 +00:00
Dr. Stephen Henson
c3b2d69945 file fips_dssvs.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:58 +0000 2006-01-30 18:14:53 +00:00
Dr. Stephen Henson
619991cc3e file fips_dsatest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:58 +0000 2006-01-30 18:14:52 +00:00
Dr. Stephen Henson
3c410172b7 file fips_dsa_selftest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:58 +0000 2006-01-30 18:14:51 +00:00
Dr. Stephen Henson
56319ad00e file fips_dsa_ossl.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:58 +0000 2006-01-30 18:14:50 +00:00
Dr. Stephen Henson
f7832889d3 file fips_dsa_gen.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:58 +0000 2006-01-30 18:14:49 +00:00
Dr. Stephen Henson
46fdad292a file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:58 +0000 2006-01-30 18:14:48 +00:00
Dr. Stephen Henson
da99684a8e file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:58 +0000 2006-01-30 18:14:47 +00:00
Dr. Stephen Henson
2130ee35d9 file fips_dh_key.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:56 +0000 2006-01-30 18:14:46 +00:00
Dr. Stephen Henson
15f239a4a3 file fips_dh_gen.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:56 +0000 2006-01-30 18:14:45 +00:00
Dr. Stephen Henson
223ab84726 file fips_dh_check.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:56 +0000 2006-01-30 18:14:44 +00:00
Dr. Stephen Henson
94d66c3182 file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:56 +0000 2006-01-30 18:14:43 +00:00
Dr. Stephen Henson
a0dd62bdb7 file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:56 +0000 2006-01-30 18:14:42 +00:00
Dr. Stephen Henson
fd6d2e0754 file fips-dx86-elf.s was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:55 +0000 2006-01-30 18:14:41 +00:00
Dr. Stephen Henson
4a4d3c02f2 file fips_set_key.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:54 +0000 2006-01-30 18:14:40 +00:00
Dr. Stephen Henson
7abd533793 file fips_desmovs.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:53 +0000 2006-01-30 18:14:39 +00:00
Dr. Stephen Henson
b1816f93e1 file fips_des_selftest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:53 +0000 2006-01-30 18:14:38 +00:00
Dr. Stephen Henson
e1904f9eec file fips_des_locl.h was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:53 +0000 2006-01-30 18:14:37 +00:00
Dr. Stephen Henson
9f3d5018c4 file fips_des_enc.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:53 +0000 2006-01-30 18:14:36 +00:00
Dr. Stephen Henson
768729afbe file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:53 +0000 2006-01-30 18:14:35 +00:00
Dr. Stephen Henson
0c96e35c42 file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:53 +0000 2006-01-30 18:14:34 +00:00
Dr. Stephen Henson
72e2934909 file fips-ax86-elf.s was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:52 +0000 2006-01-30 18:14:33 +00:00
Dr. Stephen Henson
26d96f26da file fips_aesavs.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:51 +0000 2006-01-30 18:14:32 +00:00
Dr. Stephen Henson
5fcc83ed1e file fips_aes_selftest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:51 +0000 2006-01-30 18:14:31 +00:00
Dr. Stephen Henson
9ecb20f1de file fips_aes_locl.h was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:51 +0000 2006-01-30 18:14:30 +00:00
Dr. Stephen Henson
b611ff350c file fips_aes_core.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:50 +0000 2006-01-30 18:14:29 +00:00
Dr. Stephen Henson
7f790e0575 file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:50 +0000 2006-01-30 18:14:28 +00:00
Dr. Stephen Henson
dccf15ee25 file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:50 +0000 2006-01-30 18:14:27 +00:00
Dr. Stephen Henson
89d8a20f22 file openssl_fips_fingerprint was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:46 +0000 2006-01-30 18:14:26 +00:00
Dr. Stephen Henson
782f8600fa file install.com was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:46 +0000 2006-01-30 18:14:25 +00:00
Dr. Stephen Henson
f2008fe3fd file fipsld was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:46 +0000 2006-01-30 18:14:24 +00:00
Dr. Stephen Henson
70b3786ffe file fips_test_suite.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:46 +0000 2006-01-30 18:14:23 +00:00
Dr. Stephen Henson
b48fb91edd file fips_premain.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:45 +0000 2006-01-30 18:14:22 +00:00
Dr. Stephen Henson
8a19891b2a file fips_locl.h was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:45 +0000 2006-01-30 18:14:21 +00:00
Dr. Stephen Henson
f35d0948eb file fips_canister.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:45 +0000 2006-01-30 18:14:20 +00:00
Dr. Stephen Henson
d0f2c1bb81 file fips.h was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:45 +0000 2006-01-30 18:14:19 +00:00
Dr. Stephen Henson
7ba410f9a5 file fips.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:45 +0000 2006-01-30 18:14:18 +00:00
Dr. Stephen Henson
36c2be5645 file fips-lib.com was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:44 +0000 2006-01-30 18:14:17 +00:00
Dr. Stephen Henson
0869cd2676 file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:43 +0000 2006-01-30 18:14:16 +00:00
Dr. Stephen Henson
4ac5596a86 file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:38:43 +0000 2006-01-30 18:14:15 +00:00
Lutz Jänicke
4d018f7067 Typo
Submitted by: Girish Venkatachalam <girish1729@gmail.com>
2006-01-30 17:06:59 +00:00
Dr. Stephen Henson
3df76b15ed file fipslink.pl was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:20 +0000 2006-01-21 21:28:28 +00:00
Dr. Stephen Henson
46eaf3b0cc file fipslink.pl was added on branch OpenSSL_0_9_8-stable on 2008-09-18 11:20:08 +0000 2006-01-21 21:28:27 +00:00
Dr. Stephen Henson
9b3cce3d00 file fipsld was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:31 +0000 2006-01-21 14:01:14 +00:00
Dr. Stephen Henson
9df2a00b94 file fipsld was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:10 +0000 2006-01-21 14:01:13 +00:00
Dr. Stephen Henson
c8a2f669f3 file fips_premain.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:31 +0000 2006-01-21 14:01:12 +00:00
Dr. Stephen Henson
fbcf4bc1f2 file fips_premain.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:10 +0000 2006-01-21 14:01:11 +00:00
Dr. Stephen Henson
04a2a836f7 file fips_canister.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:31 +0000 2006-01-21 14:01:10 +00:00
Dr. Stephen Henson
ca08c064bb file fips_canister.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:10 +0000 2006-01-21 14:01:09 +00:00
Dr. Stephen Henson
02df47d349 Fixes for BOOL handling: produce errors for invalid string for mini-compiler,
correctly encode FALSE for BOOL in ASN1_TYPE.
2006-01-19 17:17:33 +00:00
Dr. Stephen Henson
41c39e3366 Fix for Win32 dynamic engine loading. 2006-01-15 17:28:35 +00:00
Nils Larsch
45803988ce make "./configure no-ssl2" work again
PR: 1217
2006-01-15 16:57:01 +00:00
Dr. Stephen Henson
28251e7ff9 Typo. 2006-01-15 13:56:06 +00:00
Dr. Stephen Henson
217382d584 Handle manifest files for VC++
Submitted by: Austin Ziegler <halostatue@gmail.com>
2006-01-15 13:46:20 +00:00
Nils Larsch
82a2cb6f51 fix cipher list order 2006-01-15 07:14:38 +00:00
Nils Larsch
611ed5f312 fix comment
PR: 1270
2006-01-13 23:52:17 +00:00
Nils Larsch
27fbb5dbf4 2 is a prime number ...
PR: 1266
2006-01-13 23:29:31 +00:00
Richard Levitte
db8d9b7cf1 Forgot to initialize CC6DISABLEWARNINGS properly... 2006-01-11 18:55:49 +00:00
Richard Levitte
60ec950517 Typo... 2006-01-11 13:31:19 +00:00
Richard Levitte
2cd4ebc01f Disable the Mixed Linkage warning for some selected modules. This is
because the Compaq C compiler will not accept that a variable be
declared extern then defined static without a warning.
2006-01-09 19:22:53 +00:00
Richard Levitte
5f4dcaf781 /usr/bin/perl util/mkerr.pl -recurse -write -rebuild 2006-01-09 16:05:22 +00:00
Bodo Möller
c55d882fab Avoid contradictive error code assignments.
"make error".
2006-01-08 21:52:46 +00:00
Bodo Möller
8dc7450068 Detect more errors.
Change assignment strategy: rathern than using max+r for new codes,
find first hole in list of existing codes.
2006-01-08 21:40:07 +00:00
Bodo Möller
2e885232c2 Some error code cleanups (SSL lib. used SSL_R_... codes reserved for alerts) 2006-01-08 19:41:25 +00:00
Dr. Stephen Henson
970d9b3795 Update from HEAD. 2006-01-03 14:20:47 +00:00
Bodo Möller
2f58af0d85 Make sure that after the change from revision 1.256.2.6 (1.261 in HEAD),
it's still possible to do a partial build.
2006-01-03 03:04:46 +00:00
Richard Levitte
0ae50f19da Missing files in the VMS installation 2006-01-02 23:33:06 +00:00
Andy Polyakov
c4ac37361e util/*.pl update from HEAD. 2006-01-02 14:08:22 +00:00
Andy Polyakov
3152861e81 mkerr.pl update from HEAD. 2006-01-01 18:43:37 +00:00
Bodo Möller
a14afd0804 Rewrite timeout computation in a way that is less prone to overflow.
(Problem reported by Peter Sylvester.)
2005-12-30 23:51:57 +00:00
Andy Polyakov
25d5d1a60d eng_padlock.c update from HEAD. 2005-12-28 16:26:07 +00:00
Andy Polyakov
6ff58b9240 Minor eng_padlock.c update from HEAD. 2005-12-27 21:24:22 +00:00
Andy Polyakov
99237262d4 Missing CFLAG in couple of depend: targets [from HEAD].
PR: 1247
Submitted by: Doug Kaufman
2005-12-18 19:02:22 +00:00
Andy Polyakov
29982dfd15 DJGPP-related e_os2.h update from HEAD.
PR: 1247
2005-12-18 18:57:07 +00:00
Andy Polyakov
6c4da94687 bio.h update from HEAD.
PR: 1252
2005-12-16 21:24:59 +00:00
Andy Polyakov
6986d0e6eb Fix typos in osf1 shared rules [from HEAD].
PR: 1248
2005-12-16 20:52:38 +00:00
Bodo Möller
bc9320452c update TLS-ECC code
Submitted by: Douglas Stebila
2005-12-13 07:41:47 +00:00
Bodo Möller
23d43aae27 add missing entry (the corresponding code *is* in the 0.9.8 branch,
and both the code and the CHANGES entry are in HEAD)
2005-12-13 07:32:10 +00:00
Bodo Möller
de71735e7c comment 2005-12-13 05:46:30 +00:00
Andy Polyakov
05decf3638 Perlasm update from HEAD addressing build problems on non-ELF platforms
after http://cvs.openssl.org/chngview?cn=14661.
2005-12-06 18:47:18 +00:00
Dr. Stephen Henson
95bffa1a1f Fix from HEAD. 2005-12-06 13:37:56 +00:00
Dr. Stephen Henson
974d52fdb8 Fix from HEAD. 2005-12-05 17:32:22 +00:00
Dr. Stephen Henson
7614f0e55e Various zlib related fixes and enhancements. 2005-12-05 13:34:56 +00:00
Dr. Stephen Henson
0632284f79 Fix warning. 2005-12-04 21:34:51 +00:00
Dr. Stephen Henson
ad4a89f070 Fix from HEAD. 2005-12-03 17:47:20 +00:00
Andy Polyakov
6104c49f31 x86cpuid.pl update [from HEAD]. 2005-12-03 11:57:36 +00:00
Dr. Stephen Henson
07fc760999 Update ordinals. 2005-12-02 13:56:04 +00:00
Dr. Stephen Henson
cf6bc84148 Update from HEAD. 2005-12-02 13:47:02 +00:00
Dr. Stephen Henson
36d51bea93 Update from HEAD. 2005-12-02 13:29:28 +00:00
Dr. Stephen Henson
fc12885b1b Fix from HEAD. 2005-11-30 19:25:31 +00:00
Ben Laurie
ec7033745e Fix memory leak. 2005-11-25 14:26:12 +00:00
Ben Laurie
9e31e63147 Improve documentation. 2005-11-25 13:46:41 +00:00
Dr. Stephen Henson
feef17fd88 Update from HEAD. 2005-11-20 13:26:57 +00:00
Andy Polyakov
817f011191 Keep shutting up VC8 [from HEAD].
PR: 1243
2005-11-15 08:09:04 +00:00
Andy Polyakov
98c045cf3a crypto/bn/asm/sparcv8plus.S update from HEAD. 2005-11-15 08:05:19 +00:00
Dr. Stephen Henson
8860f3a82a Fix possible race condition. 2005-11-11 12:59:39 +00:00
Andy Polyakov
43e9f4ca2f crypto/Makefile update from HEAD.
PR: 1236
2005-11-09 20:47:40 +00:00
Andy Polyakov
586f843c76 FAQ update from HEAD. 2005-11-09 19:47:40 +00:00
Andy Polyakov
7cfc9e6d8c AIX -blibpath is not accumulative, one apparently has to specify even
self-obvious /usr/lib:/lib.
PR: 1239
2005-11-09 17:28:22 +00:00
Andy Polyakov
4952ed0fa4 FAQ and ms/applink.c update from HEAD. 2005-11-09 17:12:42 +00:00
Dr. Stephen Henson
a084185d76 Document VC++ build changes. 2005-11-07 00:32:47 +00:00
Dr. Stephen Henson
914b80d276 Update from head. 2005-11-07 00:23:37 +00:00
Dr. Stephen Henson
282557da52 Include a "test" target do (hopefully) do something sensible. 2005-11-07 00:08:55 +00:00
Dr. Stephen Henson
5f649d583c Fix "install" target for Win32 to install most utilities in a sensible location. 2005-11-07 00:05:27 +00:00
Dr. Stephen Henson
b98225ebf5 "copy" perl script to avoid problems with Win32 builtin copy command. 2005-11-06 17:54:51 +00:00
Dr. Stephen Henson
abb0c2bba4 Update VC++ build engine to include supported engine DLL builds. 2005-11-06 17:49:00 +00:00
Nils Larsch
b3bdb474a9 fix typo, pointed out by Patrick Guio 2005-11-02 22:19:23 +00:00
Nils Larsch
d796e6acb7 compile sstrsep only if HAVE_FORK is defined; patch supplied by Johan Gill <johane@lysator.liu.se> 2005-11-02 22:13:23 +00:00
Richard Levitte
d3afc92bc9 Document it 2005-11-01 07:53:43 +00:00
Richard Levitte
35a97b4b7b Fix numerous bugs in the Win32 path splitter 2005-11-01 07:49:47 +00:00
Richard Levitte
f59463aad3 A slight change in documentation that makes it so much more comprehensible 2005-11-01 04:56:29 +00:00
Dr. Stephen Henson
ed656499c4 Fix from HEAD. 2005-10-29 12:52:10 +00:00
Andy Polyakov
63533e9a22 Add -install_name to link_a.darwin rule [from HEAD].
PR: 1218
2005-10-28 08:11:51 +00:00
Bodo Möller
20f7053254 harmonize with 0.9.7-stable CHANGES 2005-10-26 19:26:15 +00:00
Andy Polyakov
8b8ef74d39 Fix typos in macos x targets [from HEAD]. 2005-10-25 22:08:11 +00:00
Andy Polyakov
3bfe024d8d Fix install problems on MacOS X and HP-UX.
PR: 1218,1185
2005-10-25 22:03:36 +00:00
Andy Polyakov
063333e03d Add rudimentary aix64-gcc target [from HEAD].
Submitted by: Stefan Neis
2005-10-19 18:47:31 +00:00
Andy Polyakov
0a0918ff38 util/pl/OS2-EMX.pl sync [from HEAD].
Submitted by: Stefan Neis, Brian Havard
2005-10-19 18:38:09 +00:00
Mark J. Cox
802c014656 One time CAN->CVE change 2005-10-19 10:51:36 +00:00
Richard Levitte
860841794d Add in CHANGES for 0.9.7i. 2005-10-15 04:27:05 +00:00
Andy Polyakov
2a87c31237 Broaden compatibility amount Win32 headers even further [from HEAD]. 2005-10-13 19:07:28 +00:00
Richard Levitte
da5f7fdcee The version text wasn't bumoed after tagging... 2005-10-11 19:26:41 +00:00
Mark J. Cox
d8b408b1de Bump after tag 2005-10-11 10:21:22 +00:00
Mark J. Cox
64932f9e4a Add fixes for CAN-2005-2969
Bump release ready for OpenSSL_0_9_8a tag
2005-10-11 10:16:21 +00:00
Richard Levitte
5a20efcf17 Synchronise with Unixly make. 2005-10-11 10:15:56 +00:00
Dr. Stephen Henson
2a2857bbc8 Update ordinals 2005-10-10 00:37:36 +00:00
Dr. Stephen Henson
1bef284ab1 Update from HEAD. 2005-10-05 17:53:40 +00:00
Andy Polyakov
d8d0b6434f Documentation update from HEAD.
PR: 1160
2005-10-04 06:35:14 +00:00
Dr. Stephen Henson
416b6fd115 Make OPENSSL_NO_COMP work on Win32. 2005-10-02 12:26:06 +00:00
Dr. Stephen Henson
f685cf920b As HEAD. 2005-10-01 00:41:24 +00:00
Dr. Stephen Henson
54f51116b2 Update from HEAD. 2005-09-30 23:38:20 +00:00
Nils Larsch
b0d90958fc successfully updating the db shouldn't result in an error message 2005-09-30 16:47:15 +00:00
Andy Polyakov
049ced2c2f Fix typo [from HEAD]. 2005-09-29 20:18:05 +00:00
Andy Polyakov
844b0e603b Fix missing applink call [from HEAD]. 2005-09-29 16:59:19 +00:00
Richard Levitte
75ef751e23 Change a comment so it corresponds to reality. Put back a character that
was previously replaced with a NUL for parsing purposes.  This seems to
fix a very weird parsing bug involving two variable references in the same
value.
2005-09-28 18:03:06 +00:00
Dr. Stephen Henson
c4f6e56fca Avoid unused variable warnings. 2005-09-26 02:40:18 +00:00
Nils Larsch
ff86d3d894 protect BN_BLINDING_invert with a write lock and BN_BLINDING_convert
with a read lock

Submitted by: Leandro Santi <lesanti@fiuba7504.com.ar>
2005-09-22 23:32:49 +00:00
Andy Polyakov
85b4c03e33 Fix SunOS 4 building issue [from HEAD].
PR: 1196
Submitted by: Russel Ruby
2005-09-22 20:39:25 +00:00
Andy Polyakov
efaf159af6 Broaden compatibility among Windows SDK versions [from HEAD]. 2005-09-22 20:29:35 +00:00
Dr. Stephen Henson
daa657fb78 Fix from HEAD. 2005-09-21 00:57:28 +00:00
Andy Polyakov
4685663d73 Latest MSVCR80 doesn't tolerate unsupported signal numbers [from HEAD].
PR: 1205
2005-09-20 20:32:36 +00:00
Andy Polyakov
ed1f716022 "Overload" SunOS 4.x memcmp, which ruins ASN1_OBJECT table lookups [from HEAD].
PR: 1196
Submitted by: Russel Ruby
2005-09-20 20:25:17 +00:00
Andy Polyakov
d3205a4898 Fix typo [from HEAD].
PR: 1198
2005-09-20 12:16:30 +00:00
Andy Polyakov
86731ce2c6 Refine AIX support [from HEAD].
PR: 1198
2005-09-20 07:44:11 +00:00
Andy Polyakov
1399309624 BC-32.pl updates [from HEAD].
Submitted by: Old Wolf, Jon Bright
2005-09-20 07:09:29 +00:00
Andy Polyakov
cb59297438 Proper solution to nasm compilation problems in Borland context. 2005-09-20 06:15:18 +00:00
Andy Polyakov
5824f6bc06 ./PROBLEMS update from HEAD.
PR: 1176 [and others]
2005-09-19 14:58:57 +00:00
Andy Polyakov
5ce7090d54 Missing spaces in VC-32.pl. 2005-09-19 14:43:32 +00:00
Andy Polyakov
7306ab29bc bswapl usage should be masked by I386_ONLY.
PR: 1195
2005-09-19 13:17:07 +00:00
Dr. Stephen Henson
3a8b42f291 Don't always use issuer serial version of AKID. 2005-09-16 12:20:24 +00:00
Nils Larsch
e4c25383f2 fix typos
PR: 1201
2005-09-15 19:12:01 +00:00
Nils Larsch
e734dcc2c7 bugfix: register engine as default engine in ENGINE_set_default_DSA
Submitted by: Jonathon Green
2005-09-09 07:52:18 +00:00
Dr. Stephen Henson
0fce007b8e Add two extra verify flags functions. 2005-09-02 22:48:21 +00:00
Nils Larsch
5a053a3a07 fix typo in sbgp names
PR: 1194
2005-09-02 21:22:50 +00:00
Nils Larsch
3b2ba5f7fb don't try to load cert/key when the "-nocert" option is set 2005-09-02 12:27:02 +00:00
Nils Larsch
7f622f6c04 fix warnings when building openssl with (gcc 3.3.1):
-Wmissing-prototypes -Wcomment -Wformat -Wimplicit -Wmain -Wmultichar
-Wswitch -Wshadow -Wtrigraphs -Werror -Wchar-subscripts
-Wstrict-prototypes -Wreturn-type -Wpointer-arith  -W -Wunused
-Wno-unused-parameter -Wuninitialized
2005-08-28 23:20:52 +00:00
Ben Laurie
801136bcc2 Fix warnings. 2005-08-27 12:05:23 +00:00
Nils Larsch
3c0e39c539 Keep cipher lists sorted in the source instead of sorting them at
runtime, thus removing the need for a lock. Add a test to ssltest
to verify that the cipher lists are sorted.
2005-08-25 07:43:04 +00:00
Bodo Möller
19fddebf0e recent DH change does not avoid *all* possible small-subgroup attacks;
let's be clear about that
2005-08-23 06:55:45 +00:00
Bodo Möller
9eaf7e14c7 avoid potential spurious BN_free()
Submitted by: David Heine <dlheine@suif.Stanford.EDU>
2005-08-23 04:14:55 +00:00
Ben Laurie
0e441bc103 Missing arguments. 2005-08-22 04:59:27 +00:00
Nils Larsch
cd9911fdf8 initialize cipher/digest methods table in SSL_library_init() and hence remove the need for a lock 2005-08-21 23:06:51 +00:00
Ben Laurie
6086422193 Missed stuff. 2005-08-20 21:30:33 +00:00
Ben Laurie
9ddb11f11c Avoid weak subgroups in Diffie Hellman. 2005-08-20 18:35:53 +00:00
Andy Polyakov
7a20cabd03 Eliminate reference to removed platform line [from HEAD]. 2005-08-11 09:40:30 +00:00
Andy Polyakov
9dc4ca4507 Pedantic polish to ectest.c [from HEAD]. 2005-08-11 08:44:34 +00:00
Andy Polyakov
62fea98b4f Fix typo in WCE section in VC-32.pl [from HEAD]. 2005-08-11 08:19:43 +00:00
Andy Polyakov
7ae4eac5b6 INSTALL.WCE update from HEAD. 2005-08-10 08:40:26 +00:00
Andy Polyakov
fcf8ae5e2b Suppress "deprecated" warnings introduced in VC8 [from HEAD].
PR: 1183
2005-08-09 22:45:51 +00:00
Andy Polyakov
55b9a7938b Add support for more recent WCE SDK. 2005-08-09 22:20:45 +00:00
Nils Larsch
cf1546a60e a ssl object needs it's own instance of a ecdh key; remove obsolete comment 2005-08-08 19:39:29 +00:00
Nils Larsch
e7eec05af0 fix typo 2005-08-08 19:26:35 +00:00
Andy Polyakov
98e986141b Windows CE update from HEAD. 2005-08-07 22:29:58 +00:00
Nils Larsch
d7e35e0371 avoid infinite recursion if dynamic engine isn't loaded
Submitted by: Jonathon Green <jonathon_au@yahoo.com>
2005-08-06 10:34:35 +00:00
Dr. Stephen Henson
222f224664 Initialize SSL_METHOD structures at compile time. This removes the need
for locking code. The CRYPTO_LOCK_SSL_METHOD lock is now no longer used.
2005-08-05 23:52:08 +00:00
Nils Larsch
62b6cd007f fix potential memory leak + improved error checking
PR: 1182
2005-08-05 09:41:24 +00:00
Dr. Stephen Henson
1682e8fb12 Allow PKCS7_decrypt() to work if no cert supplied. 2005-08-04 22:10:05 +00:00
Andy Polyakov
984aefe0e8 3-4 times better RSA/DSA performance on WIN64A target [from HEAD]. 2005-08-04 17:42:58 +00:00
Andy Polyakov
2d54cc69c9 WCE update, mostly typos [from HEAD]. 2005-08-03 20:04:05 +00:00
Andy Polyakov
2dd8278de8 PIC-ify SPARC assembler in alternative manner to eliminate dependency on
OPENSSL_PIC macro [from HEAD].
2005-08-03 10:44:29 +00:00
Andy Polyakov
e0d8ac972e Abstain from GUI calls in rand_win.c in NT service context [from HEAD]. 2005-08-02 22:22:17 +00:00
Andy Polyakov
ec03812fb0 WCE-specific update for VC-32.pl [from HEAD]. 2005-08-02 22:21:39 +00:00
Andy Polyakov
93cf2b17bf WCE-specific fix for cryptlib.c [from HEAD]. 2005-08-02 22:21:07 +00:00
Andy Polyakov
77ef1a989d Keep disclaiming 16-bit support [from HEAD]. 2005-08-02 22:20:15 +00:00
Andy Polyakov
423c7ac6c6 Optimize for space on embedded WCE. [from HEAD] 2005-08-02 14:11:04 +00:00
Andy Polyakov
2c368ef148 WCE-specific update from HEAD. 2005-08-02 12:21:35 +00:00
Andy Polyakov
b3c7162fd0 WCE update from HEAD. 2005-08-02 12:03:09 +00:00
Andy Polyakov
67865069eb Implement complementary LoadLibraryA shim under WCE. [from HEAD] 2005-08-02 11:03:42 +00:00
Andy Polyakov
1896a9be60 Typo in OSF1 platform name. 2005-08-02 10:59:42 +00:00
Andy Polyakov
b5b2c037c1 Eliminate dependency on 3rd party wcedefs.mak [from HEAD]. 2005-07-30 19:51:55 +00:00
Andy Polyakov
1957924d51 Fix #if _MSC_VER clause in aes_locl.h [from HEAD]. 2005-07-30 19:49:24 +00:00
Nils Larsch
104a66f256 remove unused variable 2005-07-27 20:19:51 +00:00
Nils Larsch
3de6d65ea3 improved error checking and some fixes
PR: 1170
Submitted by: Yair Elharrar
Reviewed and edited by: Nils Larsch
2005-07-26 20:55:17 +00:00
Dr. Stephen Henson
fdb0a6e004 Update from head. 2005-07-26 12:46:53 +00:00
Nils Larsch
87b857b6bf fix BN_mod_word and give a more reasonable return value if an error occurred 2005-07-25 22:55:48 +00:00
Dr. Stephen Henson
b18165301d Update from head. 2005-07-25 18:40:09 +00:00
Andy Polyakov
097e65944a Visual C specific update from HEAD. 2005-07-24 21:55:41 +00:00
Nils Larsch
0cdd29ea78 Remove BN_CTX_DEBUG from the normal debug build flags (it's too noisy
to be really useful for 'normal' debugging).
Disable EC_GROUP_precompute_mult for the nist curves in ectest.c as
it causes problems when libefence is used.
2005-07-23 08:46:41 +00:00
Nils Larsch
7dec24688f set correct bn->top value 2005-07-21 22:38:16 +00:00
Nils Larsch
e62fa54811 the final byte of pkcs7 padded plaintext can never be 0
Submitted by: K S Sreeram <sreeram@tachyontech.net>
2005-07-20 22:02:25 +00:00
Andy Polyakov
1614174e79 Bug-fix from HEAD.
PR: 1130
2005-07-19 23:10:04 +00:00
Nils Larsch
f95d097359 fix typo 2005-07-17 21:05:11 +00:00
Nils Larsch
3c6ab9aad9 bugfix: 0 - w (w != 0) is actually negative 2005-07-17 16:08:21 +00:00
Nils Larsch
4913b88f70 make
./configure no-deprecated [no-dsa] [no-dh] [no-ec] [no-rsa]
	make all test
work again (+ make update)

PR: 1159
2005-07-16 11:13:10 +00:00
Nils Larsch
273157153c add missing entries for "-multivalue-rdn" and "-utf8" in ca.pod and req.pod
PR: 1158
Submitted by: Michael Bell <michael.bell@cms.hu-berlin.de>
2005-07-15 09:50:38 +00:00
Nils Larsch
fb5156ff38 the second argument to d2i_X509, d2i_X509_CRL and d2i_X509_REQ is const
PR: 1156
Submitted by: Michael Bell <michael.bell@cms.hu-berlin.de>
2005-07-13 21:58:40 +00:00
Andy Polyakov
2a824402f3 DES CFB bug-fix from HEAD. 2005-07-08 16:48:34 +00:00
Richard Levitte
86a249fe4f On case insensitive systems, 'install' gets mixed up with the existing file
'INSTALL', so we need to put some force into installing
2005-07-08 10:13:25 +00:00
Richard Levitte
6cae8221c9 Oops, the release date in the FAQ was wrong.
I'm not retagging it, but I made the same change in the distribution
directory, so the distribution will have a corrected FAQ.
2005-07-05 19:20:11 +00:00
Richard Levitte
750cb3d248 Now that 0.9.8 has been tagged, it's time to move on. 2005-07-05 19:11:56 +00:00
Richard Levitte
f254b540b8 Time to release OpenSSL 0.9.8.
The tag will be OpenSSL_0_9_8.
2005-07-05 18:49:43 +00:00
Richard Levitte
11024f252e make update 2005-07-05 18:41:28 +00:00
Richard Levitte
9d5cba17ba We don't support no-engine for now. It's a lot more work than one
might imagine.
2005-07-05 18:32:37 +00:00
Richard Levitte
1d01c9d43d Last additions to the release documentation. 2005-07-05 18:32:05 +00:00
Andy Polyakov
e32ea81876 Mention Win64 support in CHANGES and throw in building instructions. 2005-07-05 10:53:13 +00:00
Richard Levitte
ef8a18f49b Add libcrypto.pc and libssl.pc, and install them along with openssl.pc.
PR: 1143
2005-07-05 05:14:21 +00:00
Andy Polyakov
b914049c53 Get rid of "unary minus applied to unsigned type" warning. 2005-07-04 23:30:31 +00:00
Andy Polyakov
dabaea8048 To secure Win64 API I'm throwing in this minimalistic Win64 support. 2005-07-04 23:24:12 +00:00
Dr. Stephen Henson
09c1a425a9 Add utf8 options to ca utility.
PR:1109
2005-07-04 23:04:28 +00:00
Richard Levitte
8c6fed007f The private key should never have ended up in newreq.pem.
Now, it ends up in newkey.pem instead.
2005-07-04 21:44:22 +00:00
Andy Polyakov
2e39604021 Fix bugs in bug-fix to x509/by_dir.c [from HEAD].
PR: 1131
2005-07-03 13:15:53 +00:00
Andy Polyakov
fbfb947b21 Bugfix for bn_div_words PPC assembler implementation [from HEAD]. 2005-07-03 09:23:57 +00:00
Nils Larsch
8b963f4ba4 initialize newly allocated data
PR: 1145
2005-07-01 16:15:48 +00:00
Dr. Stephen Henson
9152f07eaf Check PKCS7 structures in PKCS#12 files are of type data. 2005-06-30 11:34:27 +00:00
Richard Levitte
35f70c09f5 Actually, the 64bit format specifier differs between SIXTY_FOUR_BIT and
SIXTY_FOUR_BIT_LONG
2005-06-29 18:48:12 +00:00
Richard Levitte
cc4cba7b5d asn1parse doesn't support any TXT format, so let's stop pretending
it does.
2005-06-28 15:44:18 +00:00
Nils Larsch
6b695fefd0 remove OPENSSL_NO_ASM dependency 2005-06-28 15:03:58 +00:00
Ben Laurie
910d193029 Did you know it was wrong to use a char as an array index? 2005-06-28 13:27:53 +00:00
Ben Laurie
f18dd687c8 Nasty fix for another warning, but all I have the patience for right now. 2005-06-28 13:07:46 +00:00
Ben Laurie
50d5376698 Replace missing character deleted in error. 2005-06-28 12:53:33 +00:00
Ben Laurie
5b9b62a7db Fix warning. 2005-06-28 12:41:35 +00:00
Ben Laurie
c0e29e5b01 Fix warnings. 2005-06-28 12:32:48 +00:00
Andy Polyakov
2f03129d46 bn.h update from HEAD. 2005-06-28 11:52:52 +00:00
Andy Polyakov
b44e2d3416 x86nasm.pl update from HEAD. 2005-06-28 11:30:12 +00:00
Andy Polyakov
564915681c PROBLEMS update from HEAD. 2005-06-28 10:00:08 +00:00
Andy Polyakov
a24b7eeb87 Makefile updates from HEAD [see http://cvs.openssl.org/chngview?cn=14099
for further details].
2005-06-28 09:10:19 +00:00
Richard Levitte
0215c01861 There are a few showstoppers. Unfortunately, I only remember one. Please fill this in. 2005-06-28 05:55:24 +00:00
Andy Polyakov
beae6324e5 Eliminate dependency on UNICODE macro. 2005-06-27 21:21:12 +00:00
Andy Polyakov
71a61c573e Fix typos in apps/apps.c. 2005-06-27 15:58:55 +00:00
Dr. Stephen Henson
6b3b632767 Sync libeay.num 2005-06-27 00:43:22 +00:00
Andy Polyakov
2a2fa04b7b Unify some SCO targets [from HEAD]. 2005-06-26 18:10:20 +00:00
Andy Polyakov
79b81d194b Configure/TABLE update from HEAD. 2005-06-26 17:18:45 +00:00
Andy Polyakov
ef04c9aff8 IA64 RC4 update from HEAD [see commentary in HEAD for details].
PR: 1114
2005-06-26 16:14:22 +00:00
Richard Levitte
7f85197c10 Further successes with the latest snapshot. 2005-06-24 22:23:54 +00:00
Andy Polyakov
ff0bfe64af Replace emms with finit in x86cpuid. 2005-06-24 16:34:46 +00:00
Dr. Stephen Henson
44b3a3a5e6 Add Argen root CAs. 2005-06-24 10:54:36 +00:00
Richard Levitte
7e3033aa93 Someone did some cutting and pasting and didn't quite finish the job :-).
Notified by Steffen Pankratz <kratz00@gmx.de>
2005-06-24 05:13:18 +00:00
Richard Levitte
8bdbf50772 Wrap the inclusion of openssl/engine.h with a protective check for
the absence of OPENSSL_NO_ENGINE.
2005-06-23 22:08:41 +00:00
Richard Levitte
ec33a76641 Wrap the inclusion of openssl/engine.h with a protective check for
the absence of OPENSSL_NO_ENGINE.

PR: 1123
2005-06-23 21:57:37 +00:00
Richard Levitte
00ce9376c7 Do not defined des_crypt(), since it clashes with Solaris crypt.h.
PR: 1125
2005-06-23 21:53:52 +00:00
Richard Levitte
46e7a9797e Initialise dir to avoid a compiler warning. 2005-06-23 21:49:18 +00:00
Richard Levitte
7006c4ac88 The NAME section of a man page is required to have a dash followed by a
short description, at least according to pod2man.

PR: 1127
2005-06-23 21:45:32 +00:00
Richard Levitte
a50a2126cf DCC doesn't like argument names in returned function pointers.
PR: 1122
2005-06-23 21:35:20 +00:00
Richard Levitte
07f7b4b470 Update for Stratus VOS.
PR: 1130
2005-06-23 21:27:13 +00:00
Richard Levitte
7e726e42f4 Configure update for Stratus VOS.
PR: 1129
2005-06-23 21:20:31 +00:00
Richard Levitte
40ba0257de Change dir_ctrl to check for the environment variable before using the default
directory instead of the other way around.

PR: 1131
2005-06-23 21:14:10 +00:00
Richard Levitte
3fbd5f9fea Strip the engine shared libraries as well.
Submitted by Corinna Vinschen <vinschen@redhat.com>
2005-06-23 20:55:35 +00:00
Andy Polyakov
57b2246d35 Darwin specific update from HEAD. 2005-06-23 20:47:54 +00:00
Andy Polyakov
2a5b22d6f9 Missed -c in IRIX rule. 2005-06-23 20:38:19 +00:00
Andy Polyakov
f247dc7522 IRIX upadte from HEAD. 2005-06-23 16:47:21 +00:00
Andy Polyakov
e6531253e2 HP-UX specific update to Makefile.shared. 2005-06-23 15:39:19 +00:00
Richard Levitte
c938babf00 A number of architectures noted so far. 2005-06-23 06:31:08 +00:00
Andy Polyakov
bf3900020f no-asm didn't prevent make from compiling assembler modules [from HEAD]. 2005-06-22 23:50:07 +00:00
Dr. Stephen Henson
586df3bb7f Typo. 2005-06-22 18:54:05 +00:00
Dr. Stephen Henson
c4b13b0268 Reorder extensions to account for synced OID table. 2005-06-22 17:28:55 +00:00
Dr. Stephen Henson
daef72316f Sync OID database with 0.9.7. 2005-06-22 17:26:24 +00:00
Dr. Stephen Henson
1f93c96e63 Fix extension ordering. 2005-06-22 13:25:38 +00:00
Richard Levitte
8aa9c79276 Tagging is done, we're moving on. 2005-06-21 05:56:26 +00:00
Richard Levitte
09a7f2e734 Prepare for a release of 0.9.8-beta6. This is supposed to be the
final beta.
The tag will be OpenSSL_0_9_8-beta6
2005-06-21 05:49:47 +00:00
Richard Levitte
b2d27e376d Some new news. 2005-06-21 05:46:41 +00:00
Richard Levitte
644c4af11e make update 2005-06-21 05:28:47 +00:00
Richard Levitte
ca3dc3a0a0 DEVRANDOM, not DEBRANDOM... 2005-06-21 04:41:31 +00:00
Richard Levitte
2b975dfd5b Do no try to pretend we're at the end of anything unless we're at the end
of a 4-character block.
2005-06-20 22:11:28 +00:00
Richard Levitte
0932892278 Check for 'usage' and 'Usage'.
Submitted by Tim Rice <tim@multitalents.net>.  His comment is:

I noticed "make report" didn't show the cc version on most of
my System V platforms. This patch corrects this.
2005-06-20 20:49:05 +00:00
Andy Polyakov
fe0b3d98c2 Refine ELF detection on BSD platforms. 2005-06-20 17:36:19 +00:00
Andy Polyakov
8d56c8b51c Solaris x86_64 /usr/ccs/bin/as support. 2005-06-20 14:50:26 +00:00
Richard Levitte
d8e6409336 Add crypto/bn/bn_prime.h to the collection of generated files. In the
update target, place the dependency on depend last, so all necessary files
are generated *before* the dependencies are figured out.

PR: 1121
2005-06-20 04:29:56 +00:00
Richard Levitte
a4ae746656 With DJGPP, it seems like the return code from grep, even when in the
middle of a pipe, is noted.  Counter that by forcing a true return code
when the return code has no importance.

PR: 1085
2005-06-19 20:31:32 +00:00
Richard Levitte
331a0a7b9b Undefine DECRANDOM before redefining it.
PR: 1110
2005-06-19 20:20:33 +00:00
Richard Levitte
c630a3e8d6 Add better documentation on how id_function() should be defined and what
issues there are.

PR: 1096
2005-06-18 05:52:23 +00:00
Richard Levitte
7435d89edf Move the definition of DEVRANDOM for DJGPP from Configure to e_os.h.
That should solve the issues with propagating it through the Makefiles.

PR: 1110
2005-06-18 04:42:34 +00:00
Richard Levitte
14557c8be4 Only define ZLIB_SHARED if it hasn't already been defined (on the command
line, for example).

PR: 1112
2005-06-18 04:32:23 +00:00
Richard Levitte
98b4995bad Have pod2man.pl accept '=for comment ...' before the '=head1 NAME' line.
PR: 1113
2005-06-18 04:27:15 +00:00
Nils Larsch
3000bdcc3a clear dso pointer in case of an error
PR: 816
2005-06-17 21:27:28 +00:00
Nils Larsch
cbe77a6753 update for the cswift engine:
- fix the problem described in bug report 825
- fix a segfault when the engine fails to initialize
- let the engine switch to software when keysize > 2048

PR: 825, 826
Submitted by: Frédéric Giudicelli
2005-06-17 20:43:05 +00:00
Richard Levitte
c58a1f76f8 Do not undefine _XOPEN_SOURCE. This is currently experimental, and
will be firmed up as soon as it's been verified not to break anything.
2005-06-16 22:19:14 +00:00
Dr. Stephen Henson
ecf2875ebf Don't strip extensions from header filenames in mk1mf.pl. 2005-06-16 02:16:50 +00:00
Dr. Stephen Henson
ce2c19e357 Update from head. 2005-06-16 02:05:57 +00:00
Richard Levitte
1b1081a3ed 0.9.8-beta5 works on Gentoo/arml but not /armb, and works on Linux AMD64 2005-06-14 05:42:56 +00:00
Richard Levitte
37b200389a Data about which Cygwin versions 0.9.8-beta5 work on 2005-06-13 17:10:07 +00:00
Richard Levitte
6b5a8f3a22 0.9.8-beta5 works on SuSE 9.3 2005-06-13 17:03:17 +00:00
Richard Levitte
0b18d8b0c7 0.9.8-beta5 works on Cygwin 2005-06-13 17:00:25 +00:00
Nils Larsch
3d187ede47 update FAQ 2005-06-13 08:36:38 +00:00
Richard Levitte
f3b9c34515 0.9.8-beta5 works on VMS/Alpha 2005-06-13 04:17:24 +00:00
Richard Levitte
c923394924 Now that beta5 is tagged, lets continue with beta6. 2005-06-13 03:48:22 +00:00
Richard Levitte
d9dbd24db5 Time to release beta 5.
The tag will be OpenSSL_0_9_8-beta5
2005-06-13 03:36:21 +00:00
Richard Levitte
b135819d71 make update 2005-06-13 03:29:04 +00:00
Richard Levitte
cbcbd07da2 Netware patch submitted by Verdon Walker" <VWalker@novell.com> in PR
1107.  He says:

This is a followup to the NetWare patch that was applied to beta3.  It
does the following:

- Fixes a problem in the CLib build with undefined symbols.

- Adds the ability to use BSD sockets as the default for the OpenSSL
  socket BIO.  NetWare supports 2 flavors of sockets and our Apache
  developers need BSD sockets as a configurable option when building
  OpenSSL.  This adds that for them.

- Updates to the INSTALL.NW file to explain new options.

I have tried very hard to make sure all the changes are in NetWare
specific files or guarded carefully to make sure they only impact
NetWare builds.  I have tested the Windows build to make sure it does
not break that since we have made changes to mk1mf.pl.

We are still working the gcc cross compile for NetWare issue and hope
to have a patch for that before beta 6 is released.
2005-06-13 03:21:01 +00:00
Richard Levitte
24f6ab73a7 Show what the offending target was.
PR: 1108
2005-06-13 02:38:13 +00:00
Nils Larsch
5e88347e1b replace the deprecated "-m486" gcc option with "-march=i486"
PR: 1049
2005-06-12 10:32:11 +00:00
Nils Larsch
cac0d4ee6f - let SSL_CTX_set_cipher_list and SSL_set_cipher_list return an
error if the cipher list is empty
- fix last commit in ssl_create_cipher_list
- clean up ssl_create_cipher_list
2005-06-10 19:51:16 +00:00
Andy Polyakov
428759b3d4 Allow for dso load by explicit path on HP-UX. 2005-06-09 20:50:44 +00:00
Nils Larsch
898d3ecce0 use "=" instead of "|=", fix typo 2005-06-08 22:20:24 +00:00
Richard Levitte
004f16f6c4 Avoid endless loops. Really, we were using the same variable for two
different conditions...
2005-06-08 21:59:54 +00:00
Nils Larsch
4e2a0e58f2 ssl_create_cipher_list should return an error if no cipher could be
collected (see SSL_CTX_set_cipher_list manpage). Fix handling of
"cipher1+cipher2" expressions in ssl_cipher_process_rulestr

PR: 836 + 1005
2005-06-08 21:13:52 +00:00
Dr. Stephen Henson
39d29195a7 Update from head. 2005-06-06 22:41:50 +00:00
Andy Polyakov
727c9b8027 Allow BIO_s_file to open and sequentially access files larger than 2GB
on affected platforms.
PR: 973
2005-06-06 12:05:12 +00:00
Andy Polyakov
bd4e9b0512 FAQ to mention no-sha512 as option for compilers without support for
64-bit integer type [from HEAD].
2005-06-06 09:33:45 +00:00
Richard Levitte
7844ff735f Pass INSTALL_PREFIX in BUILDENV.
PR: 1100
2005-06-06 08:52:32 +00:00
Richard Levitte
49e96badcf Skipping all tests just because one algorithm is disabled seems a bit harsch.
PR: 1089
2005-06-06 08:38:23 +00:00
Andy Polyakov
eb6a81bacc Change mention of Makefile.ssl to Makefile. 2005-06-06 08:36:31 +00:00
Richard Levitte
6687f12988 Now that tagging is done, we can continue working. 2005-06-06 00:44:49 +00:00
Richard Levitte
fcd12fc0f1 Time to release 0.9.8 beta 4.
The tag will be OpenSSL_0_9_8-beta4
2005-06-06 00:39:18 +00:00
Richard Levitte
0fb4d54068 Further change pq_compat.h to generate the flag macros PQ_64BIT_IS_INTEGER
and PQ_64BIT_IS_BIGNUM with the values 0 (for false) and 1 (for true),
depending on which is true.  Use those flags everywhere else to provide
the correct implementation for handling certain operations in q PQ_64BIT.
2005-06-06 00:32:30 +00:00
Richard Levitte
830a468a23 Document the change and update the release number. 2005-06-05 23:25:51 +00:00
Richard Levitte
af3ca7b4a9 Remove the incorrect installation of '%{openssldir}/lib'.
PR: 1074
2005-06-05 23:15:29 +00:00
Richard Levitte
7a6bb17255 Change pq_compat.h to trust the macros defined by bn.h a bit more, and thereby
provide better generic support for environments that do not have 64-bit
integers.  Among others, this should solve PR 1086
2005-06-05 22:43:08 +00:00
Richard Levitte
bc6d459a6e gcc 2.95.3 on Ultrix supports long long.
PR: 1091
2005-06-05 22:19:34 +00:00
Richard Levitte
ff7f34e353 Correct typo ia64.o -> bn-ia64.o.
PR: 1094
2005-06-05 22:09:21 +00:00
Richard Levitte
2e3d79aaec Add support for the new Intel compiler, icc.
Submitted by Keith Thompson <kst@sdsc.edu>

PR: 1095
2005-06-05 22:01:32 +00:00
Richard Levitte
8a41bcc934 Old typo...
PR: 1097
2005-06-05 21:55:09 +00:00
Richard Levitte
e2414b41ad Updated support for NetWare, submitted by Verdon Walker <VWalker@novell.com>.
PR: 1098
2005-06-05 21:46:57 +00:00
Andy Polyakov
266958bce7 PROBLEMS to mention workarounds for ULTRIX build problems.
PR: 1092
2005-06-05 18:07:47 +00:00
Richard Levitte
bc5354cbf0 The macro THREADS was changed to OPENSSL_THREADS a long time ago.
PR: 1096
2005-06-04 08:44:08 +00:00
Dr. Stephen Henson
cc4997843e Update from head. 2005-06-02 23:17:38 +00:00
Dr. Stephen Henson
ab95eac286 Typo. 2005-06-02 20:30:46 +00:00
Dr. Stephen Henson
1cd76233d1 Update CHANGES. 2005-06-02 20:09:43 +00:00
Andy Polyakov
3d5afc8b83 PSS update [from 0.9.7]. 2005-06-02 18:29:21 +00:00
Richard Levitte
d28b7799dd handshake_write_seq is an unsigned short, so treat it like one 2005-06-02 17:26:17 +00:00
Nils Larsch
b0fb889c29 check return value 2005-06-01 22:35:07 +00:00
Dr. Stephen Henson
460e80bd1d Update from 0.9.7-stable 2005-06-01 22:14:41 +00:00
Richard Levitte
bc1e96e942 Synchronise yet a little more with the Unixly build 2005-06-01 16:24:20 +00:00
Nils Larsch
7ea61df414 clear error queue on success and return NULL if cert could be read
PR: 1088
2005-06-01 08:31:22 +00:00
Nils Larsch
431712293d fix assertion
PR: 1072
2005-05-31 20:38:31 +00:00
Richard Levitte
335ed97263 Synchronise more with the Unix build 2005-05-31 20:28:55 +00:00
Nils Larsch
e00b165e9b let "make all test" work with "no-aes"
PR: 1078
2005-05-31 17:56:17 +00:00
Nils Larsch
5467ddf0e1 include opensslconf.h if OPENSSL_NO_* is used 2005-05-31 17:31:50 +00:00
Andy Polyakov
7a37dd92ed "Show" more respect to no-sha* config options.
PR: 1086
2005-05-31 16:33:43 +00:00
Ben Laurie
d0c11e9d72 Fix warnings. 2005-05-31 13:13:18 +00:00
Andy Polyakov
5ec52fee2c Mention more GCC bugs in ./PROBLEMS. 2005-05-31 12:39:14 +00:00
Dr. Stephen Henson
d39e69c95a file fips_rsa_x931g.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:44 +0000 2005-05-31 12:38:02 +00:00
Dr. Stephen Henson
5026bc13bb file fips_rsa_x931g.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:21 +0000 2005-05-31 12:38:01 +00:00
Dr. Stephen Henson
69ffdb2d46 file fips_rsagtest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:44 +0000 2005-05-31 12:38:00 +00:00
Dr. Stephen Henson
c7d27e5247 file fips_rsagtest.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:22 +0000 2005-05-31 12:37:59 +00:00
Dr. Stephen Henson
e301a26ade file bn_x931p.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:37:53 +0000 2005-05-31 12:37:58 +00:00
Dr. Stephen Henson
b7d7af7ea9 file bn_x931p.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 22:54:29 +0000 2005-05-31 12:37:57 +00:00
Andy Polyakov
39663d2c40 Missing sparcv8.o rule.
PR: 1082
2005-05-31 12:18:15 +00:00
Andy Polyakov
000299a0e6 Fix typo in ./config. 2005-05-31 11:31:07 +00:00
Andy Polyakov
0a47d82b9b AMD64 OPENSSL_Uplink update. 2005-05-31 11:00:15 +00:00
Nils Larsch
198bcece58 fix warning 2005-05-31 09:55:13 +00:00
Andy Polyakov
053677d124 Improve ELF detection procedure on BSD targets.
PR: 1079
2005-05-31 09:32:00 +00:00
Andy Polyakov
804072f014 Zap sco3.
Submitted by: Tim Rice
2005-05-31 09:08:17 +00:00
Andy Polyakov
e9429b43ce Default to no-sse2 no-sha512 on selected platforms. 2005-05-31 09:05:31 +00:00
Richard Levitte
3d37d5e24a Forgottent make update. These files will be retagged. 2005-05-30 23:20:32 +00:00
Richard Levitte
2728a1b4f3 Forgottent needed changed. This file will be retagged. 2005-05-30 23:19:11 +00:00
Richard Levitte
adb040d4cb Tagging done, moving up to next beta in development. 2005-05-30 23:07:30 +00:00
Richard Levitte
479d7934c0 Not quite right... 2005-05-30 22:59:22 +00:00
Richard Levitte
22d1acd5ac Time to release the next beta (a few days late, sorry about that).
The tag will be OpenSSL_0_9_8-beta3
2005-05-30 22:56:49 +00:00
Richard Levitte
b257c152c6 A couple more things were added. 2005-05-30 22:51:05 +00:00
Richard Levitte
77b97ee0d7 DJGPP changes. Contributed by Doug Kaufman <dkaufman@rahul.net> 2005-05-30 22:37:41 +00:00
Richard Levitte
e2ac4732cd pqueue and dtls uses 64-bit values. Unfortunately, OpenSSL doesn't
have a uniform representation for those over all architectures, so a
little bit of hackery is needed.

Contributed by nagendra modadugu <nagendra@cs.stanford.edu>
2005-05-30 22:34:28 +00:00
Richard Levitte
e8f665b495 Synchronise with Unixly build 2005-05-30 22:26:23 +00:00
Richard Levitte
55f3ef29ea Change all relevant occurences of 'ncipher' to 'chil'. That's what nCipher always wanted... 2005-05-30 05:17:07 +00:00
Dr. Stephen Henson
c2d78c9623 Copy ordinals from 0.9.7 and update. 2005-05-30 00:28:38 +00:00
Geoff Thorpe
a4578a5413 Change the source and output paths for 'chil' and '4758cca' engines so that
dynamic loading is consistent with respect to engine ids.
2005-05-29 19:16:26 +00:00
cvs2svn
e884fcf785 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_8-stable'.
2005-05-29 19:14:22 +00:00
Richard Levitte
e96025755d We have some source with \r\n as line ends. DEC C informs about that,
and I really can't be bothered...
2005-05-29 12:13:20 +00:00
Richard Levitte
c9028b0ab5 Typo 2005-05-29 11:26:56 +00:00
Dr. Stephen Henson
b4d2858f95 Add PSS prototype to rsa.h 2005-05-28 20:50:11 +00:00
Dr. Stephen Henson
dea446d995 Update from 0.9.7-stable branch. 2005-05-28 20:49:09 +00:00
cvs2svn
5cd94f9e9d This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_8-stable'.
2005-05-28 20:44:38 +00:00
Bodo Möller
cad811fc41 Use BN_with_flags() in a cleaner way. 2005-05-27 15:39:24 +00:00
Dr. Stephen Henson
2ed0cf8eef file SHAmix.req was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:45 +0000 2005-05-26 22:17:54 +00:00
Dr. Stephen Henson
1c2cbe6fcc file SHAmix.fax was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:45 +0000 2005-05-26 22:17:53 +00:00
Dr. Stephen Henson
023616e32d file fips_standalone_sha1.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:46 +0000 2005-05-26 21:29:09 +00:00
Dr. Stephen Henson
69f6a9f007 file fips_standalone_sha1.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:23 +0000 2005-05-26 21:29:08 +00:00
Dr. Stephen Henson
b2703470e0 file fips_shatest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:46 +0000 2005-05-26 21:29:07 +00:00
Dr. Stephen Henson
4eeee0c59f file fips_shatest.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:23 +0000 2005-05-26 21:29:06 +00:00
Dr. Stephen Henson
452cd79114 file fips_sha1_selftest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:46 +0000 2005-05-26 21:29:05 +00:00
Dr. Stephen Henson
a5afa6c95f file fips_sha1_selftest.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:23 +0000 2005-05-26 21:29:04 +00:00
Dr. Stephen Henson
9eaca0079f file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:45 +0000 2005-05-26 21:29:03 +00:00
Dr. Stephen Henson
625dacb93d file Makefile was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:23 +0000 2005-05-26 21:29:02 +00:00
Dr. Stephen Henson
bbaf3c2b40 file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:45 +0000 2005-05-26 21:29:01 +00:00
Dr. Stephen Henson
62e9c2e091 file .cvsignore was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:23 +0000 2005-05-26 21:29:00 +00:00
Bodo Möller
e4106a4e24 make sure DSA signing exponentiations really are constant-time 2005-05-26 04:40:57 +00:00
Bodo Möller
a506b8c7dd check BN_copy() return value 2005-05-26 04:30:48 +00:00
Andy Polyakov
e5cd536894 Some assemblers are too rudimentary to understand dynamic labels. 2005-05-25 21:37:18 +00:00
Geoff Thorpe
629ea39a88 Handle differences between engine IDs and their dynamic library names (and
source files, for that matter) by tolerating the alternatives. It would be
preferable to also change the generated shared library names, but that will
be taken up separately.
2005-05-25 02:52:44 +00:00
Richard Levitte
7d9e1321c7 Forgot to change the version number itself. 2005-05-24 03:57:12 +00:00
Richard Levitte
83af7422a0 Tagging is done, we continue on beta3, which is planned to be released
on Sunday May 29th.
2005-05-24 03:50:30 +00:00
Richard Levitte
ce8945f35c Time to release the next beta.
The tag will be OpenSSL_0_9_8-beta2.
2005-05-24 03:42:49 +00:00
Richard Levitte
dd890f0776 make update 2005-05-24 03:39:37 +00:00
Richard Levitte
af4ac437ab It seems like mkdef.pl couldn't quite understand that #ifdef OPENSSL_NO_SHA512
was still active when it came down to the functions.  mkdef.pl should really
be corrected, but that'll be another day...
2005-05-24 03:39:10 +00:00
Richard Levitte
607585fdaf Typo correction 2005-05-24 03:27:57 +00:00
Richard Levitte
2f596aeef5 DEC C complains about bad subscript, but we know better, so let's shut it up. 2005-05-24 03:22:56 +00:00
Dr. Stephen Henson
69762c75fa Fix WIN32+KRB5 issues. 2005-05-23 00:32:55 +00:00
Andy Polyakov
36b29660ce Be more consistent with OPENSSL_NO_SHA256. 2005-05-22 10:26:47 +00:00
Andy Polyakov
4976983f30 Disseminate BUILDENV even further. 2005-05-22 09:13:30 +00:00
Andy Polyakov
31e4ad25ba OPENSSL_NO_SHA512 to mask even SHA512_CTX declaration. This is done to
make no-sha512 more effective on platforms, which don't support 64-bit
integer type of *any* kind.
2005-05-22 08:52:12 +00:00
Andy Polyakov
225f4daf15 Still SEGV trouble in .init segment under Solaris x86... 2005-05-21 17:51:12 +00:00
Richard Levitte
b9927cfa2d When _XOPEN_SOURCE is defined, make sure it's defined to 500. Required in
http://www.opengroup.org/onlinepubs/007908799/xsh/compilation.html.

Notified by David Wolfe <dwolfe5272@yahoo.com>
2005-05-21 17:39:53 +00:00
Andy Polyakov
af6cafc603 Default to no-sse2 on selected platforms. 2005-05-21 16:52:30 +00:00
Richard Levitte
15da07d436 Patches for Cygwin, provided by Corinna Vinschen <vinschen@redhat.com> 2005-05-21 16:37:41 +00:00
Andy Polyakov
886ed3544b Move _WIN32_WINNT definition from command line to e_os.h [from HEAD]. 2005-05-21 13:19:46 +00:00
Nils Larsch
aff2922f9a fix typo, add prototype 2005-05-20 23:01:31 +00:00
Nils Larsch
f32e0035a3 fix potential memory leak
Submitted by: Goetz Babin-Ebell
2005-05-19 22:11:22 +00:00
Nils Larsch
7b1e7706d8 update ecdsa doc 2005-05-19 20:54:22 +00:00
Andy Polyakov
cd74dda72a FAQ to mention no-sse2. 2005-05-19 19:57:27 +00:00
Richard Levitte
032bb2a2c5 Tagging of 0.9.8-beta1 is done, time to update the version numbers to
the next beta (beta2).
2005-05-19 19:45:53 +00:00
Richard Levitte
fa96ed06d2 Update version information. 2005-05-19 19:42:04 +00:00
Richard Levitte
43133041c9 'make update' with a default configuration. 2005-05-19 19:31:53 +00:00
Richard Levitte
e0ee5ea962 Added news items for OpenSSL 0.9.8. 2005-05-19 19:12:36 +00:00
Nils Larsch
f5634286a3 fix "dereferencing type-punned pointer will break strict-aliasing rules"
warning when using gcc 4.0
2005-05-19 11:59:35 +00:00
Dr. Stephen Henson
97d37c1c1e Recognize new macros. 2005-05-19 11:51:43 +00:00
Andy Polyakov
739b139cb2 Propogate BUILDENV even in ./engines. 2005-05-19 02:13:10 +00:00
Andy Polyakov
0bc9920ad4 Stringify substitutions [some shells require it]. 2005-05-19 02:08:01 +00:00
Andy Polyakov
3f516ce837 SysV make [or least some of them] don't propogate command line macros to
recursively called make. So let's pass down BUILDENV as value too...
2005-05-19 01:48:46 +00:00
Nils Larsch
9f197f9da5 make the type parameter const when ID2_OF_const() is used 2005-05-18 22:29:17 +00:00
Andy Polyakov
3dc2cc36e9 FAQ update to mention Applink [from HEAD]. 2005-05-18 13:37:20 +00:00
Andy Polyakov
ca3e683747 Don't emit SSE2 instructions unless were asked to [from HEAD].
PR: 1073
2005-05-18 08:45:21 +00:00
Andy Polyakov
38a1757168 Engage Applink in mingw. [from HEAD] 2005-05-18 08:17:29 +00:00
Richard Levitte
4104a57107 OpenSSL 0.9.8 has just entered beta status. Not quite releasing yet,
since I need to write a NEWS entry.

This means we're in feature freeze.  HEAD is now 0.9.9-dev.
2005-05-18 04:14:22 +00:00
cvs2svn
b0c0f20071 This commit was manufactured by cvs2svn to create branch
'OpenSSL_0_9_8-stable'.
2005-05-17 16:50:47 +00:00
Dr. Stephen Henson
ce147f8998 file fips_hmac_selftest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:39 +0000 2005-05-09 19:22:16 +00:00
Dr. Stephen Henson
7870774162 file fips_hmac_selftest.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:17 +0000 2005-05-09 19:22:15 +00:00
Dr. Stephen Henson
4e99f848d8 file fips_rngvs.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:42 +0000 2005-05-07 22:06:44 +00:00
Dr. Stephen Henson
4213cdaf5d file fips_rngvs.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:18 +0000 2005-05-07 22:06:43 +00:00
Dr. Stephen Henson
358cf2f6e8 file fips_rand_selftest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:41 +0000 2005-05-07 22:06:42 +00:00
Dr. Stephen Henson
39b4c974ee file fips_rand_selftest.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:18 +0000 2005-05-07 22:06:41 +00:00
Dr. Stephen Henson
407c2c1106 file fips_rsastest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:44 +0000 2005-05-07 12:50:27 +00:00
Dr. Stephen Henson
508f56f17c file fips_rsastest.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:22 +0000 2005-05-07 12:50:26 +00:00
Dr. Stephen Henson
2e8aaf94c2 file fips_rsavtest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:44 +0000 2005-05-05 21:46:29 +00:00
Dr. Stephen Henson
48665b7c99 file fips_rsavtest.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:22 +0000 2005-05-05 21:46:28 +00:00
Dr. Stephen Henson
3108a80b09 file fips_hmactest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:39 +0000 2005-05-03 17:07:55 +00:00
Dr. Stephen Henson
51971f7293 file fips_hmactest.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:17 +0000 2005-05-03 17:07:54 +00:00
Dr. Stephen Henson
bfa3933c8b file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:38 +0000 2005-05-02 23:06:05 +00:00
Dr. Stephen Henson
3d3addb252 file .cvsignore was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:17 +0000 2005-05-02 23:06:04 +00:00
Dr. Stephen Henson
40b4a633a1 file fips_hmac.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:38 +0000 2005-05-02 23:04:20 +00:00
Dr. Stephen Henson
3f8bdd1fdb file fips_hmac.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:17 +0000 2005-05-02 23:04:19 +00:00
Dr. Stephen Henson
fc784cbc5c file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:38 +0000 2005-05-02 23:04:17 +00:00
Dr. Stephen Henson
6181fd949f file Makefile was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:17 +0000 2005-05-02 23:04:16 +00:00
Dr. Stephen Henson
afd61c63c2 file .cvsignore was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:14 +0000 2004-06-19 13:18:03 +00:00
Dr. Stephen Henson
d20b5c2043 file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:35 +0000 2004-06-19 13:18:02 +00:00
Dr. Stephen Henson
fdf45c44be file fips_dh_key.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:36 +0000 2004-06-19 13:16:55 +00:00
Dr. Stephen Henson
9a2073b4cd file fips_dh_key.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:14 +0000 2004-06-19 13:16:54 +00:00
Dr. Stephen Henson
68b08c56c2 file fips_dh_gen.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:36 +0000 2004-06-19 13:16:53 +00:00
Dr. Stephen Henson
f28468188b file fips_dh_gen.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:14 +0000 2004-06-19 13:16:52 +00:00
Dr. Stephen Henson
4416eec8ca file fips_dh_check.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:36 +0000 2004-06-19 13:16:50 +00:00
Dr. Stephen Henson
8871d87512 file fips_dh_check.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:14 +0000 2004-06-19 13:16:49 +00:00
Dr. Stephen Henson
709af3877d file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:36 +0000 2004-06-19 13:16:48 +00:00
Dr. Stephen Henson
a2b81188be file Makefile was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:14 +0000 2004-06-19 13:16:47 +00:00
Dr. Stephen Henson
8651ba5d45 file install.com was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:31 +0000 2004-05-27 10:07:03 +00:00
Dr. Stephen Henson
f91f6cd5e4 file install.com was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:10 +0000 2004-05-27 10:07:02 +00:00
Dr. Stephen Henson
efbb2cb4e5 file fips-lib.com was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:30 +0000 2004-05-27 10:04:39 +00:00
Dr. Stephen Henson
bd923a7bac file fips-lib.com was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:09 +0000 2004-05-27 10:04:38 +00:00
Dr. Stephen Henson
dec45d606f file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:43 +0000 2004-03-10 09:23:50 +00:00
Dr. Stephen Henson
373c88faef file Makefile was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:21 +0000 2004-03-10 09:23:49 +00:00
Dr. Stephen Henson
6dfd1801fe file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:40 +0000 2004-03-10 09:23:48 +00:00
Dr. Stephen Henson
14813d8123 file Makefile was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:18 +0000 2004-03-10 09:23:47 +00:00
Dr. Stephen Henson
d8242c65b3 file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:37 +0000 2004-03-10 09:23:46 +00:00
Dr. Stephen Henson
92f2437f48 file Makefile was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:15 +0000 2004-03-10 09:23:45 +00:00
Dr. Stephen Henson
ee42430cc8 file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:35 +0000 2004-03-10 09:23:44 +00:00
Dr. Stephen Henson
da959761ff file Makefile was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:13 +0000 2004-03-10 09:23:43 +00:00
Dr. Stephen Henson
da3fe316cf file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:33 +0000 2004-03-10 09:23:42 +00:00
Dr. Stephen Henson
d8cd25aa0d file Makefile was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:12 +0000 2004-03-10 09:23:41 +00:00
Dr. Stephen Henson
c8214d6c8b file Makefile was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:30 +0000 2004-03-10 09:23:40 +00:00
Dr. Stephen Henson
d63d4f46fc file Makefile was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:09 +0000 2004-03-10 09:23:39 +00:00
Dr. Stephen Henson
063b216760 file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:43 +0000 2004-02-13 21:56:22 +00:00
Dr. Stephen Henson
52161e090d file .cvsignore was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:21 +0000 2004-02-13 21:56:21 +00:00
Dr. Stephen Henson
65f0a05325 file fips_test_suite.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:31 +0000 2004-01-30 19:22:18 +00:00
Dr. Stephen Henson
9e55e06501 file fips_test_suite.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:10 +0000 2004-01-30 19:22:17 +00:00
Dr. Stephen Henson
952b6955c0 file fips_dsa_selftest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:37 +0000 2003-09-27 20:07:16 +00:00
Dr. Stephen Henson
0b6df67fb1 file fips_dsa_selftest.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:16 +0000 2003-09-27 20:07:15 +00:00
Dr. Stephen Henson
6f74afaa57 file fips_rsa_selftest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:43 +0000 2003-09-27 15:54:42 +00:00
Dr. Stephen Henson
bf087e1ea1 file fips_rsa_selftest.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:21 +0000 2003-09-27 15:54:41 +00:00
Dr. Stephen Henson
3edefe670a file fips_locl.h was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:31 +0000 2003-09-14 13:01:53 +00:00
Dr. Stephen Henson
885818fb7c file fips_locl.h was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:10 +0000 2003-09-14 13:01:52 +00:00
Dr. Stephen Henson
a461d307f2 file testfipsssl was added on branch OpenSSL-fips-0_9_8-stable on 2007-03-22 00:39:19 +0000 2003-09-13 17:03:57 +00:00
Dr. Stephen Henson
2f370048cb file testfipsssl was added on branch OpenSSL_0_9_8-stable on 2008-09-17 16:27:50 +0000 2003-09-13 17:03:56 +00:00
Dr. Stephen Henson
89a4dad179 file fips_rsa_gen.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:43 +0000 2003-09-11 21:37:00 +00:00
Dr. Stephen Henson
28dc02a9d8 file fips_rsa_gen.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:21 +0000 2003-09-11 21:36:59 +00:00
Dr. Stephen Henson
1ea2fda9dc file fips_rsa_eay.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:43 +0000 2003-09-11 21:36:58 +00:00
Dr. Stephen Henson
54ebaca535 file fips_rsa_eay.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:21 +0000 2003-09-11 21:36:57 +00:00
Dr. Stephen Henson
f41dcf3d50 file openssl_fips_fingerprint was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:31 +0000 2003-09-07 11:13:53 +00:00
Dr. Stephen Henson
4fedc91a4a file openssl_fips_fingerprint was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:10 +0000 2003-09-07 11:13:52 +00:00
Dr. Stephen Henson
1e6031eeb7 file fips_des_selftest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:35 +0000 2003-09-04 16:46:44 +00:00
Dr. Stephen Henson
f734aaa413 file fips_des_selftest.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:13 +0000 2003-09-04 16:46:43 +00:00
Dr. Stephen Henson
d9e61666c9 file fips_aes_selftest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:33 +0000 2003-09-04 16:46:41 +00:00
Dr. Stephen Henson
a575d4b9ee file fips_aes_selftest.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:12 +0000 2003-09-04 16:46:40 +00:00
Dr. Stephen Henson
2f07e0d591 file fips_dsa_gen.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:37 +0000 2003-09-03 14:11:32 +00:00
Dr. Stephen Henson
77a87ded3a file fips_dsa_gen.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:15 +0000 2003-09-03 14:11:31 +00:00
Dr. Stephen Henson
b0a3d8dd27 file fips_dssvs.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:38 +0000 2003-09-03 14:11:30 +00:00
Dr. Stephen Henson
b958d2c298 file fips_dssvs.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:16 +0000 2003-09-03 14:11:29 +00:00
Dr. Stephen Henson
a7100590fe file fips_desmovs.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:35 +0000 2003-07-30 18:30:15 +00:00
Dr. Stephen Henson
dc72a195c2 file fips_desmovs.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:13 +0000 2003-07-30 18:30:14 +00:00
Dr. Stephen Henson
7b1ef38609 file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:35 +0000 2003-07-30 18:30:13 +00:00
Dr. Stephen Henson
e2812ff61f file .cvsignore was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:13 +0000 2003-07-30 18:30:12 +00:00
Dr. Stephen Henson
3f5602ce04 file fips_randtest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:41 +0000 2003-07-27 17:00:50 +00:00
Dr. Stephen Henson
8c2e34e27f file fips_randtest.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:18 +0000 2003-07-27 17:00:49 +00:00
Dr. Stephen Henson
be0dccdd9e file fips_rand.h was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:41 +0000 2003-07-27 17:00:48 +00:00
Dr. Stephen Henson
31f3950fbf file fips_rand.h was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:18 +0000 2003-07-27 17:00:47 +00:00
Dr. Stephen Henson
50a4d84e79 file fips_rand.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:41 +0000 2003-07-27 17:00:46 +00:00
Dr. Stephen Henson
75b3654d18 file fips_rand.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:18 +0000 2003-07-27 17:00:45 +00:00
Dr. Stephen Henson
0135aa9888 file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:40 +0000 2003-07-27 17:00:44 +00:00
Dr. Stephen Henson
418f9ac5e3 file .cvsignore was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:18 +0000 2003-07-27 17:00:43 +00:00
Dr. Stephen Henson
692e644df6 file fips_dsa_ossl.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:37 +0000 2003-07-27 17:00:42 +00:00
Dr. Stephen Henson
ad4afe4edf file fips_dsa_ossl.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:15 +0000 2003-07-27 17:00:41 +00:00
Dr. Stephen Henson
3b72341958 file fips_dsatest.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:37 +0000 2003-07-27 17:00:40 +00:00
Dr. Stephen Henson
c844b971cb file fips_dsatest.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:16 +0000 2003-07-27 17:00:39 +00:00
Dr. Stephen Henson
3a0278b211 file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:37 +0000 2003-07-27 17:00:38 +00:00
Dr. Stephen Henson
ca9b1c47af file .cvsignore was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:15 +0000 2003-07-27 17:00:37 +00:00
Dr. Stephen Henson
304ba9fa78 file fips_aesavs.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:34 +0000 2003-07-27 17:00:36 +00:00
Dr. Stephen Henson
86039d2751 file fips_aesavs.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:12 +0000 2003-07-27 17:00:35 +00:00
Dr. Stephen Henson
4484703f5e file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:33 +0000 2003-07-27 17:00:34 +00:00
Dr. Stephen Henson
420a692f04 file .cvsignore was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:12 +0000 2003-07-27 17:00:33 +00:00
Dr. Stephen Henson
6b7751ac2c file fips.h was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:31 +0000 2003-07-27 17:00:32 +00:00
Dr. Stephen Henson
1d2a464fe0 file fips.h was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:09 +0000 2003-07-27 17:00:31 +00:00
Dr. Stephen Henson
7af4688a8f file fips.c was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:30 +0000 2003-07-27 17:00:30 +00:00
Dr. Stephen Henson
7735dd0750 file fips.c was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:09 +0000 2003-07-27 17:00:29 +00:00
Dr. Stephen Henson
d8360c3a8a file .cvsignore was added on branch OpenSSL-fips-0_9_8-stable on 2007-08-15 13:35:30 +0000 2003-07-27 17:00:28 +00:00
Dr. Stephen Henson
bf7b075f0c file .cvsignore was added on branch OpenSSL_0_9_8-stable on 2008-09-16 10:12:09 +0000 2003-07-27 17:00:27 +00:00
1879 changed files with 267885 additions and 399022 deletions

18
.cvsignore Normal file
View File

@ -0,0 +1,18 @@
openssl.pc
MINFO
makefile.one
tmp
out
outinc
rehash.time
testlog
make.log
maketest.log
cctest
cctest.c
cctest.a
libcrypto.so.*
libssl.so.*
*.flc
semantic.cache
Makefile

114
.gitignore vendored
View File

@ -1,114 +0,0 @@
# Object files
*.o
*.obj
# editor artefacts
*.swp
.#*
#*#
*~
/.dir-locals.el
# Top level excludes
/Makefile.bak
/Makefile
/*.a
/include
/*.pc
/rehash.time
# Most *.c files under test/ are symlinks
/test/*.c
# Apart from these
!/test/asn1test.c
!/test/methtest.c
!/test/dummytest.c
!/test/igetest.c
!/test/r160test.c
!/test/fips_algvs.c
/test/*.ss
/test/*.srl
/test/.rnd
/test/test*.pem
/test/newkey.pem
# Certificate symbolic links
*.0
# Links under apps
/apps/CA.pl
/apps/md4.c
# Auto generated headers
/crypto/buildinf.h
/crypto/opensslconf.h
# Auto generated assembly language source files
*.s
!/crypto/bn/asm/pa-risc2.s
!/crypto/bn/asm/pa-risc2W.s
crypto/aes/asm/a_win32.asm
crypto/bf/asm/b_win32.asm
crypto/bn/asm/bn_win32.asm
crypto/bn/asm/co_win32.asm
crypto/bn/asm/mt_win32.asm
crypto/cast/asm/c_win32.asm
crypto/cpu_win32.asm
crypto/des/asm/d_win32.asm
crypto/des/asm/y_win32.asm
crypto/md5/asm/m5_win32.asm
crypto/rc4/asm/r4_win32.asm
crypto/rc5/asm/r5_win32.asm
crypto/ripemd/asm/rm_win32.asm
crypto/sha/asm/s1_win32.asm
crypto/sha/asm/sha512-sse2.asm
# Executables
/apps/openssl
/test/sha256t
/test/sha512t
/test/*test
/test/fips_aesavs
/test/fips_desmovs
/test/fips_dhvs
/test/fips_drbgvs
/test/fips_dssvs
/test/fips_ecdhvs
/test/fips_ecdsavs
/test/fips_rngvs
/test/fips_test_suite
*.so*
*.dylib*
*.dll*
# Exceptions
!/test/bctest
!/crypto/des/times/486-50.sol
# Misc auto generated files
/tools/c_rehash
/test/evptests.txt
lib
Makefile.save
*.bak
tags
TAGS
# Windows
/tmp32
/tmp32.dbg
/tmp32dll
/tmp32dll.dbg
/out32
/out32.dbg
/out32dll
/out32dll.dbg
/inc32
/MINFO
ms/bcb.mak
ms/libeay32.def
ms/nt.mak
ms/ntdll.mak
ms/ssleay32.def
ms/version32.rc

View File

@ -1,10 +0,0 @@
#! /bin/sh
# $1 is expected to be $TRAVIS_OS_NAME
if [ "$1" == osx ]; then
make -f Makefile.org \
DISTTARVARS="NAME=_srcdist TAR_COMMAND='\$\$(TAR) \$\$(TARFLAGS) -s \"|^|\$\$(NAME)/|\" -T \$\$(TARFILE).list -cvf -' TARFLAGS='-n' TARFILE=_srcdist.tar" SHELL='sh -vx' dist
else
make -f Makefile.org DISTTARVARS='TARFILE=_srcdist.tar NAME=_srcdist' SHELL='sh -v' dist
fi

View File

@ -1,60 +0,0 @@
language: c
addons:
apt_packages:
- binutils-mingw-w64
- gcc-mingw-w64
os:
- linux
- osx
compiler:
- clang
- gcc
- i686-w64-mingw32-gcc
- x86_64-w64-mingw32-gcc
env:
- CONFIG_OPTS=""
- CONFIG_OPTS="shared"
- CONFIG_OPTS="-d --strict-warnings"
matrix:
exclude:
- os: osx
compiler: i686-w64-mingw32-gcc
- os: osx
compiler: x86_64-w64-mingw32-gcc
- compiler: i686-w64-mingw32-gcc
env: CONFIG_OPTS="-d --strict-warnings"
- compiler: x86_64-w64-mingw32-gcc
env: CONFIG_OPTS="-d --strict-warnings"
before_script:
- sh .travis-create-release.sh $TRAVIS_OS_NAME
- tar -xvzf _srcdist.tar.gz
- cd _srcdist
- if [ "$CC" == i686-w64-mingw32-gcc ]; then
export CROSS_COMPILE=${CC%%gcc}; unset CC;
./Configure mingw $CONFIG_OPTS;
elif [ "$CC" == x86_64-w64-mingw32-gcc ]; then
export CROSS_COMPILE=${CC%%gcc}; unset CC;
./Configure mingw64 $CONFIG_OPTS;
else
./config $CONFIG_OPTS;
fi
- cd ..
script:
- cd _srcdist
- make
- if [ -z "$CROSS_COMPILE" ]; then make test; fi
- cd ..
notifications:
recipient:
- openssl-commits@openssl.org
email:
on_success: change
on_failure: always

View File

@ -1,2 +0,0 @@
Please https://www.openssl.org/community/thanks.html for the current
acknowledgements.

2697
CHANGES

File diff suppressed because it is too large Load Diff

View File

@ -148,7 +148,7 @@ eric (about to go bushwalking for the 4 day easter break :-)
This would tend to cause memory overwrites since SSLv3 has This would tend to cause memory overwrites since SSLv3 has
a maximum packet size of 16k. If your program uses a maximum packet size of 16k. If your program uses
buffers <= 16k, you would probably never see this problem. buffers <= 16k, you would probably never see this problem.
- Fixed a few errors that were cause by malloc() not returning - Fixed a new errors that were cause by malloc() not returning
0 initialised memory.. 0 initialised memory..
- SSL_OP_NETSCAPE_CA_DN_BUG was being switched on when using - SSL_OP_NETSCAPE_CA_DN_BUG was being switched on when using
SSL_CTX_set_options(ssl_ctx,SSL_OP_ALL); which was a bad thing SSL_CTX_set_options(ssl_ctx,SSL_OP_ALL); which was a bad thing

View File

@ -1,38 +0,0 @@
HOW TO CONTRIBUTE TO OpenSSL
----------------------------
Development is coordinated on the openssl-dev mailing list (see
http://www.openssl.org for information on subscribing). If you
would like to submit a patch, send it to rt@openssl.org with
the string "[PATCH]" in the subject. Please be sure to include a
textual explanation of what your patch does.
You can also make GitHub pull requests. If you do this, please also send
mail to rt@openssl.org with a brief description and a link to the PR so
that we can more easily keep track of it.
If you are unsure as to whether a feature will be useful for the general
OpenSSL community please discuss it on the openssl-dev mailing list first.
Someone may be already working on the same thing or there may be a good
reason as to why that feature isn't implemented.
Patches should be as up to date as possible, preferably relative to the
current Git or the last snapshot. They should follow our coding style
(see https://www.openssl.org/policies/codingstyle.html) and compile without
warnings using the --strict-warnings flag. OpenSSL compiles on many varied
platforms: try to ensure you only use portable features.
Our preferred format for patch files is "git format-patch" output. For example
to provide a patch file containing the last commit in your local git repository
use the following command:
# git format-patch --stdout HEAD^ >mydiffs.patch
Another method of creating an acceptable patch file without using git is as
follows:
# cd openssl-work
# [your changes]
# ./Configure dist; make clean
# cd ..
# diff -ur openssl-orig openssl-work > mydiffs.patch

View File

@ -0,0 +1,163 @@
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

894
Configure

File diff suppressed because it is too large Load Diff

900
FAQ
View File

@ -1,2 +1,898 @@
The FAQ is now maintained on the web: OpenSSL - Frequently Asked Questions
https://www.openssl.org/docs/faq.html --------------------------------------
[MISC] Miscellaneous questions
* Which is the current version of OpenSSL?
* Where is the documentation?
* How can I contact the OpenSSL developers?
* Where can I get a compiled version of OpenSSL?
* Why aren't tools like 'autoconf' and 'libtool' used?
* What is an 'engine' version?
* How do I check the authenticity of the OpenSSL distribution?
[LEGAL] Legal questions
* Do I need patent licenses to use OpenSSL?
* Can I use OpenSSL with GPL software?
[USER] Questions on using the OpenSSL applications
* Why do I get a "PRNG not seeded" error message?
* Why do I get an "unable to write 'random state'" error message?
* How do I create certificates or certificate requests?
* Why can't I create certificate requests?
* Why does <SSL program> fail with a certificate verify error?
* Why can I only use weak ciphers when I connect to a server using OpenSSL?
* How can I create DSA certificates?
* Why can't I make an SSL connection using a DSA certificate?
* How can I remove the passphrase on a private key?
* Why can't I use OpenSSL certificates with SSL client authentication?
* Why does my browser give a warning about a mismatched hostname?
* 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
* Why does the linker complain about undefined symbols?
* Why does the OpenSSL test fail with "bc: command not found"?
* Why does the OpenSSL test fail with "bc: 1 no implemented"?
* Why does the OpenSSL test fail with "bc: stack empty"?
* Why does the OpenSSL compilation fail on Alpha Tru64 Unix?
* Why does the OpenSSL compilation fail with "ar: command not found"?
* Why does the OpenSSL compilation fail on Win32 with VC++?
* 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 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
* Is OpenSSL thread-safe?
* 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?
* 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 called <some function> and it fails, why?
* I just get a load of numbers for the error output, what do they mean?
* Why do I get errors about unknown algorithms?
* Why can't the OpenSSH configure script detect OpenSSL?
* Can I use OpenSSL's SSL library with non-blocking I/O?
* 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?
===============================================================================
[MISC] ========================================================================
* Which is the current version of OpenSSL?
The current version is available from <URL: http://www.openssl.org>.
OpenSSL 0.9.8e was released on February 23rd, 2007.
In addition to the current stable release, you can also access daily
snapshots of the OpenSSL development version at <URL:
ftp://ftp.openssl.org/snapshot/>, or get it by anonymous CVS access.
* Where is the documentation?
OpenSSL is a library that provides cryptographic functionality to
applications such as secure web servers. Be sure to read the
documentation of the application you want to use. The INSTALL file
explains how to install this library.
OpenSSL includes a command line utility that can be used to perform a
variety of cryptographic functions. It is described in the openssl(1)
manpage. Documentation for developers is currently being written. A
few manual pages already are available; overviews over libcrypto and
libssl are given in the crypto(3) and ssl(3) manpages.
The OpenSSL manpages are installed in /usr/local/ssl/man/ (or a
different directory if you specified one as described in INSTALL).
In addition, you can read the most current versions at
<URL: http://www.openssl.org/docs/>.
For information on parts of libcrypto that are not yet documented, you
might want to read Ariel Glenn's documentation on SSLeay 0.9, OpenSSL's
predecessor, at <URL: http://www.columbia.edu/~ariel/ssleay/>. Much
of this still applies to OpenSSL.
There is some documentation about certificate extensions and PKCS#12
in doc/openssl.txt
The original SSLeay documentation is included in OpenSSL as
doc/ssleay.txt. It may be useful when none of the other resources
help, but please note that it reflects the obsolete version SSLeay
0.6.6.
* How can I contact the OpenSSL developers?
The README file describes how to submit bug reports and patches to
OpenSSL. Information on the OpenSSL mailing lists is available from
<URL: http://www.openssl.org>.
* 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.
When using such an application, you don't need to install OpenSSL
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
a C compiler, read the "Mingw32" section of INSTALL.W32 for information
on how to obtain and install the free GNU C compiler.
A number of Linux and *BSD distributions include OpenSSL.
* Why aren't tools like 'autoconf' and 'libtool' used?
autoconf will probably be used in future OpenSSL versions. If it was
less Unix-centric, it might have been used much earlier.
* What is an 'engine' version?
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
version 0.9.7 the changes were merged into the main development line,
so that the special release is no longer necessary.
* How do I check the authenticity of the OpenSSL distribution?
We provide MD5 digests and ASC signatures of each tarball.
Use MD5 to check that a tarball from a mirror site is identical:
md5sum TARBALL | awk '{print $1;}' | cmp - TARBALL.md5
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
list of keys at <URL: http://www.openssl.org/about/>). Then
just do:
pgp TARBALL.asc
[LEGAL] =======================================================================
* Do I need patent licenses to use OpenSSL?
The patents section of the README file lists patents that may apply to
you if you want to use OpenSSL. For information on intellectual
property rights, please consult a lawyer. The OpenSSL team does not
offer legal advice.
You can configure OpenSSL so as not to use IDEA, MDC2 and RC5 by using
./config no-idea no-mdc2 no-rc5
* Can I use OpenSSL with GPL software?
On many systems including the major Linux and BSD distributions, yes (the
GPL does not place restrictions on using libraries that are part of the
normal operating system distribution).
On other systems, the situation is less clear. Some GPL software copyright
holders claim that you infringe on their rights if you use OpenSSL with
their software on operating systems that don't normally include OpenSSL.
If you develop open source software that uses OpenSSL, you may find it
useful to choose an other license than the GPL, or state explicitly that
"This program is released under the GPL with the additional exemption that
compiling, linking, and/or using OpenSSL is allowed." If you are using
GPL software developed by others, you may want to ask the copyright holder
for permission to use their software with OpenSSL.
[USER] ========================================================================
* Why do I get a "PRNG not seeded" error message?
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.
All OpenSSL versions try to use /dev/urandom by default; starting with
version 0.9.7, OpenSSL also tries /dev/random if /dev/urandom is not
available.
On other systems, applications have to call the RAND_add() or
RAND_seed() function with appropriate data before generating keys or
performing public key encryption. (These functions initialize the
pseudo-random number generator, PRNG.) Some broken applications do
not do this. As of version 0.9.5, the OpenSSL functions that need
randomness report an error if the random number generator has not been
seeded with at least 128 bits of randomness. If this error occurs and
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
use the Entropy Gathering Demon (EGD); see the RAND_egd() manpage for
details. Starting with version 0.9.7, OpenSSL will automatically look
for an EGD socket at /var/run/egd-pool, /dev/egd-pool, /etc/egd-pool and
/etc/entropy.
Most components of the openssl command line utility automatically try
to seed the random number generator from a file. The name of the
default seeding file is determined as follows: If environment variable
RANDFILE is set, then it names the seeding file. Otherwise if
environment variable HOME is set, then the seeding file is $HOME/.rnd.
If neither RANDFILE nor HOME is set, versions up to OpenSSL 0.9.6 will
use file .rnd in the current directory while OpenSSL 0.9.6a uses no
default seeding file at all. OpenSSL 0.9.6b and later will behave
similarly to 0.9.6a, but will use a default of "C:\" for HOME on
Windows systems if the environment variable has not been set.
If the default seeding file does not exist or is too short, the "PRNG
not seeded" error message may occur.
The openssl command line utility will write back a new state to the
default seeding file (and create this file if necessary) unless
there was no sufficient seeding.
Pointing $RANDFILE to an Entropy Gathering Daemon socket does not work.
Use the "-rand" option of the OpenSSL command line tools instead.
The $RANDFILE environment variable and $HOME/.rnd are only used by the
OpenSSL command line tools. Applications using the OpenSSL library
provide their own configuration options to specify the entropy source,
please check out the documentation coming the with application.
* Why do I get an "unable to write 'random state'" error message?
Sometimes the openssl command line utility does not abort with
a "PRNG not seeded" error message, but complains that it is
"unable to write 'random state'". This message refers to the
default seeding file (see previous answer). A possible reason
is that no default filename is known because neither RANDFILE
nor HOME is set. (Versions up to 0.9.6 used file ".rnd" in the
current directory in this case, but this has changed with 0.9.6a.)
* How do I create certificates or certificate requests?
Check out the CA.pl(1) manual page. This provides a simple wrapper round
the 'req', 'verify', 'ca' and 'pkcs12' utilities. For finer control check
out the manual pages for the individual utilities and the certificate
extensions documentation (currently in doc/openssl.txt).
* Why can't I create certificate requests?
You typically get the error:
unable to find 'distinguished_name' in config
problems making Certificate Request
This is because it can't find the configuration file. Check out the
DIAGNOSTICS section of req(1) for more information.
* Why does <SSL program> fail with a certificate verify error?
This problem is usually indicated by log messages saying something like
"unable to get local issuer certificate" or "self signed certificate".
When a certificate is verified its root CA must be "trusted" by OpenSSL
this typically means that the CA certificate must be placed in a directory
or file and the relevant program configured to read it. The OpenSSL program
'verify' behaves in a similar way and issues similar error messages: check
the verify(1) program manual page for more information.
* Why can I only use weak ciphers when I connect to a server using OpenSSL?
This is almost certainly because you are using an old "export grade" browser
which only supports weak encryption. Upgrade your browser to support 128 bit
ciphers.
* How can I create DSA certificates?
Check the CA.pl(1) manual page for a DSA certificate example.
* Why can't I make an SSL connection to a server using a DSA certificate?
Typically you'll see a message saying there are no shared ciphers when
the same setup works fine with an RSA certificate. There are two possible
causes. The client may not support connections to DSA servers most web
browsers (including Netscape and MSIE) only support connections to servers
supporting RSA cipher suites. The other cause is that a set of DH parameters
has not been supplied to the server. DH parameters can be created with the
dhparam(1) command and loaded using the SSL_CTX_set_tmp_dh() for example:
check the source to s_server in apps/s_server.c for an example.
* How can I remove the passphrase on a private key?
Firstly you should be really *really* sure you want to do this. Leaving
a private key unencrypted is a major security risk. If you decide that
you do have to do this check the EXAMPLES sections of the rsa(1) and
dsa(1) manual pages.
* Why can't I use OpenSSL certificates with SSL client authentication?
What will typically happen is that when a server requests authentication
it will either not include your certificate or tell you that you have
no client certificates (Netscape) or present you with an empty list box
(MSIE). The reason for this is that when a server requests a client
certificate it includes a list of CAs names which it will accept. Browsers
will only let you select certificates from the list on the grounds that
there is little point presenting a certificate which the server will
reject.
The solution is to add the relevant CA certificate to your servers "trusted
CA list". How you do this depends on the server software in uses. You can
print out the servers list of acceptable CAs using the OpenSSL s_client tool:
openssl s_client -connect www.some.host:443 -prexit
If your server only requests certificates on certain URLs then you may need
to manually issue an HTTP GET command to get the list when s_client connects:
GET /some/page/needing/a/certificate.html
If your CA does not appear in the list then this confirms the problem.
* Why does my browser give a warning about a mismatched hostname?
Browsers expect the server's hostname to match the value in the commonName
(CN) field of the certificate. If it does not then you get a warning.
* How do I install a CA certificate into a browser?
The usual way is to send the DER encoded certificate to the browser as
MIME type application/x-x509-ca-cert, for example by clicking on an appropriate
link. On MSIE certain extensions such as .der or .cacert may also work, or you
can import the certificate using the certificate import wizard.
You can convert a certificate to DER form using the command:
openssl x509 -in ca.pem -outform DER -out ca.der
Occasionally someone suggests using a command such as:
openssl pkcs12 -export -out cacert.p12 -in cacert.pem -inkey cakey.pem
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
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] =======================================================================
* Why does the linker complain about undefined symbols?
Maybe the compilation was interrupted, and make doesn't notice that
something is missing. Run "make clean; make".
If you used ./Configure instead of ./config, make sure that you
selected the right target. File formats may differ slightly between
OS versions (for example sparcv8/sparcv9, or a.out/elf).
In case you get errors about the following symbols, use the config
option "no-asm", as described in INSTALL:
BF_cbc_encrypt, BF_decrypt, BF_encrypt, CAST_cbc_encrypt,
CAST_decrypt, CAST_encrypt, RC4, RC5_32_cbc_encrypt, RC5_32_decrypt,
RC5_32_encrypt, bn_add_words, bn_div_words, bn_mul_add_words,
bn_mul_comba4, bn_mul_comba8, bn_mul_words, bn_sqr_comba4,
bn_sqr_comba8, bn_sqr_words, bn_sub_words, des_decrypt3,
des_ede3_cbc_encrypt, des_encrypt, des_encrypt2, des_encrypt3,
des_ncbc_encrypt, md5_block_asm_host_order, sha1_block_asm_data_order
If none of these helps, you may want to try using the current snapshot.
If the problem persists, please submit a bug report.
* Why does the OpenSSL test fail with "bc: command not found"?
You didn't install "bc", the Unix calculator. If you want to run the
tests, get GNU bc from ftp://ftp.gnu.org or from your OS distributor.
* Why does the OpenSSL test fail with "bc: 1 no implemented"?
On some SCO installations or versions, bc has a bug that gets triggered
when you run the test suite (using "make test"). The message returned is
"bc: 1 not implemented".
The best way to deal with this is to find another implementation of bc
and compile/install it. GNU bc (see http://www.gnu.org/software/software.html
for download instructions) can be safely used, for example.
* Why does the OpenSSL test fail with "bc: stack empty"?
On some DG/ux versions, bc seems to have a too small stack for calculations
that the OpenSSL bntest throws at it. This gets triggered when you run the
test suite (using "make test"). The message returned is "bc: stack empty".
The best way to deal with this is to find another implementation of bc
and compile/install it. GNU bc (see http://www.gnu.org/software/software.html
for download instructions) can be safely used, for example.
* Why does the OpenSSL compilation fail on Alpha Tru64 Unix?
On some Alpha installations running Tru64 Unix and Compaq C, the compilation
of crypto/sha/sha_dgst.c fails with the message 'Fatal: Insufficient virtual
memory to continue compilation.' As far as the tests have shown, this may be
a compiler bug. What happens is that it eats up a lot of resident memory
to build something, probably a table. The problem is clearly in the
optimization code, because if one eliminates optimization completely (-O0),
the compilation goes through (and the compiler consumes about 2MB of resident
memory instead of 240MB or whatever one's limit is currently).
There are three options to solve this problem:
1. set your current data segment size soft limit higher. Experience shows
that about 241000 kbytes seems to be enough on an AlphaServer DS10. You do
this with the command 'ulimit -Sd nnnnnn', where 'nnnnnn' is the number of
kbytes to set the limit to.
2. If you have a hard limit that is lower than what you need and you can't
get it changed, you can compile all of OpenSSL with -O0 as optimization
level. This is however not a very nice thing to do for those who expect to
get the best result from OpenSSL. A bit more complicated solution is the
following:
----- snip:start -----
make DIRS=crypto SDIRS=sha "`grep '^CFLAG=' Makefile.ssl | \
sed -e 's/ -O[0-9] / -O0 /'`"
rm `ls crypto/*.o crypto/sha/*.o | grep -v 'sha_dgst\.o'`
make
----- snip:end -----
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
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"?
Getting this message is quite usual on Solaris 2, because Sun has hidden
away 'ar' and other development commands in directories that aren't in
$PATH by default. One of those directories is '/usr/ccs/bin'. The
quickest way to fix this is to do the following (it assumes you use sh
or any sh-compatible shell):
----- snip:start -----
PATH=${PATH}:/usr/ccs/bin; export PATH
----- snip:end -----
and then redo the compilation. What you should really do is make sure
'/usr/ccs/bin' is permanently in your $PATH, for example through your
'.profile' (again, assuming you use a sh-compatible shell).
* Why does the OpenSSL compilation fail on Win32 with VC++?
Sometimes, you may get reports from VC++ command line (cl) that it
can't find standard include files like stdio.h and other weirdnesses.
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
VCVARS32.BAT which is found in the 'bin' subdirectory of the VC++
installation directory (somewhere under 'Program Files'). For VC++
version 7 (and up?), which is also called VS.NET, the file is called
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?
Red Hat Linux (release 7.0 and later) include a preinstalled limited
version of OpenSSL. For patent reasons, support for IDEA, RC5 and MDC2
is disabled in this version. The same may apply to other Linux distributions.
Users may therefore wish to install more or all of the features left out.
To do this you MUST ensure that you do not overwrite the openssl that is in
/usr/bin on your Red Hat machine. Several packages depend on this file,
including sendmail and ssh. /usr/local/bin is a good alternative choice. The
libraries that come with Red Hat 7.0 onwards have different names and so are
not affected. (eg For Red Hat 7.2 they are /lib/libssl.so.0.9.6b and
/lib/libcrypto.so.0.9.6b with symlinks /lib/libssl.so.2 and
/lib/libcrypto.so.2 respectively).
Please note that we have been advised by Red Hat attempting to recompile the
openssl rpm with all the cryptography enabled will not work. All other
packages depend on the original Red Hat supplied openssl package. It is also
worth noting that due to the way Red Hat supplies its packages, updates to
openssl on each distribution never change the package version, only the
build number. For example, on Red Hat 7.1, the latest openssl package has
version number 0.9.6 and build number 9 even though it contains all the
relevant updates in packages up to and including 0.9.6b.
A possible way around this is to persuade Red Hat to produce a non-US
version of Red Hat Linux.
FYI: Patent numbers and expiry dates of US patents:
MDC-2: 4,908,861 13/03/2007
IDEA: 5,214,703 25/05/2010
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?
If the failure happens when running 'make test' and the RC4 test fails,
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.6d. The problem is that
the loader ('ld') in MacOS X has a misfeature that's quite difficult to
go around and has linked the programs "openssl" and the test programs
with /usr/lib/libcrypto.dylib and /usr/lib/libssl.dylib instead of the
libraries you just built.
Look in the file PROBLEMS for a more detailed explanation and for possible
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] ========================================================================
* Is OpenSSL thread-safe?
Yes (with limitations: an SSL connection may not concurrently be used
by multiple threads). On Windows and many Unix systems, OpenSSL
automatically uses the multi-threaded versions of the standard
libraries. If your platform is not one of these, consult the INSTALL
file.
Multi-threaded applications must provide two callback functions to
OpenSSL by calling CRYPTO_set_locking_callback() and
CRYPTO_set_id_callback(). This is described in the threads(3)
manpage.
* I've compiled a program under Windows and it crashes: why?
This is usually because you've missed the comment in INSTALL.W32.
Your application must link against the same version of the Win32
C-Runtime against which your openssl libraries were linked. The
default version for OpenSSL is /MD - "Multithreaded DLL".
If you are using Microsoft Visual C++'s IDE (Visual Studio), in
many cases, your new project most likely defaulted to "Debug
Singlethreaded" - /ML. This is NOT interchangeable with /MD and your
program will crash, typically on the first BIO related read or write
operation.
For each of the six possible link stage configurations within Win32,
your application must link against the same by which OpenSSL was
built. If you are using MS Visual C++ (Studio) this can be changed
by:
1. Select Settings... from the Project Menu.
2. Select the C/C++ Tab.
3. Select "Code Generation from the "Category" drop down list box
4. Select the Appropriate library (see table below) from the "Use
run-time library" drop down list box. Perform this step for both
your debug and release versions of your application (look at the
top left of the settings panel to change between the two)
Single Threaded /ML - MS VC++ often defaults to
this for the release
version of a new project.
Debug Single Threaded /MLd - MS VC++ often defaults to
this for the debug version
of a new project.
Multithreaded /MT
Debug Multithreaded /MTd
Multithreaded DLL /MD - OpenSSL defaults to this.
Debug Multithreaded DLL /MDd
Note that debug and release libraries are NOT interchangeable. If you
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?
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
i2d_*(), d2i_*() functions directly. Since these are often the
cause of grief here are some code fragments using PKCS7 as an example:
unsigned char *buf, *p;
int len;
len = i2d_PKCS7(p7, NULL);
buf = OPENSSL_malloc(len); /* or Malloc, error checking omitted */
p = buf;
i2d_PKCS7(p7, &p);
At this point buf contains the len bytes of the DER encoding of
p7.
The opposite assumes we already have len bytes in buf:
unsigned char *p;
p = buf;
p7 = d2i_PKCS7(NULL, &p, len);
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
information.
The reason for the temporary variable 'p' is that the ASN1 functions
increment the passed pointer so it is ready to read or write the next
structure. This is often a cause of problems: without the temporary
variable the buffer pointer is changed to point just after the data
that has been read or written. This may well be uninitialized data
and attempts to free the buffer will have unpredictable results
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?
This usually happens when you try compiling something using the PKCS#12
macros with a C++ compiler. There is hardly ever any need to use the
PKCS#12 macros in a program, it is much easier to parse and create
PKCS#12 files using the PKCS12_parse() and PKCS12_create() functions
documented in doc/openssl.txt and with examples in demos/pkcs12. The
'pkcs12' application has to use the macros because it prints out
debugging information.
* I've called <some function> and it fails, why?
Before submitting a report or asking in one of the mailing lists, you
should try to determine the cause. In particular, you should call
ERR_print_errors() or ERR_print_errors_fp() after the failed call
and see if the message helps. Note that the problem may occur earlier
than you think -- you should check for errors after every call where
it is possible, otherwise the actual problem may be hidden because
some OpenSSL functions clear the error state.
* I just get a load of numbers for the error output, what do they mean?
The actual format is described in the ERR_print_errors() manual page.
You should call the function ERR_load_crypto_strings() before hand and
the message will be output in text form. If you can't do this (for example
it is a pre-compiled binary) you can use the errstr utility on the error
code itself (the hex digits after the second colon).
* Why do I get errors about unknown algorithms?
This can happen under several circumstances such as reading in an
encrypted private key or attempting to decrypt a PKCS#12 file. The cause
is forgetting to load OpenSSL's table of algorithms with
OpenSSL_add_all_algorithms(). See the manual page for more information.
* Why can't the OpenSSH configure script detect OpenSSL?
Several reasons for problems with the automatic detection exist.
OpenSSH requires at least version 0.9.5a of the OpenSSL libraries.
Sometimes the distribution has installed an older version in the system
locations that is detected instead of a new one installed. The OpenSSL
library might have been compiled for another CPU or another mode (32/64 bits).
Permissions might be wrong.
The general answer is to check the config.log file generated when running
the OpenSSH configure script. It should contain the detailed information
on why the OpenSSL library was not detected or considered incompatible.
* Can I use OpenSSL's SSL library with non-blocking I/O?
Yes; make sure to read the SSL_get_error(3) manual page!
A pitfall to avoid: Don't assume that SSL_read() will just read from
the underlying transport or that SSL_write() will just write to it --
it is also possible that SSL_write() cannot do any useful work until
there is data to read, or that SSL_read() cannot do anything until it
is possible to send data. One reason for this is that the peer may
request a new TLS/SSL handshake at any time during the protocol,
requiring a bi-directional message exchange; both SSL_read() and
SSL_write() will try to continue any pending handshake.
* Why doesn't my server application receive a client certificate?
Due to the TLS protocol definition, a client will only send a certificate,
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.
* 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().
===============================================================================

22
INSTALL
View File

@ -98,17 +98,11 @@
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, -mxxx, -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.
-DHAVE_CRYPTODEV Enable the BSD cryptodev engine even if we are not using
BSD. Useful if you are running ocf-linux or something
similar. Once enabled you can also enable the use of
cryptodev digests, which is usually slower unless you have
large amounts data. Use -DUSE_CRYPTODEV_DIGESTS to force
it.
Installation in Detail Installation in Detail
---------------------- ----------------------
@ -164,10 +158,10 @@
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
at https://www.openssl.org/community/index.html#bugs and will be via http://www.openssl.org/support/rt2.html and will be forwarded to a
forwarded to a public mailing list). Include the output of "make public mailing list). Include the output of "make report" in your message.
report" in your message. Please check out the request tracker. Maybe Please check out the request tracker. Maybe the bug was already
the bug was already reported or has already been fixed. reported or has already been fixed.
[If you encounter assembler error messages, try the "no-asm" [If you encounter assembler error messages, try the "no-asm"
configuration option as an immediate fix.] configuration option as an immediate fix.]
@ -186,7 +180,7 @@
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/rt.html. http://www.openssl.org/support/rt2.html.
4. If everything tests ok, install OpenSSL with 4. If everything tests ok, install OpenSSL with
@ -212,10 +206,6 @@
compile programs with libcrypto or libssl. compile programs with libcrypto or libssl.
lib Contains the OpenSSL library files themselves. lib Contains the OpenSSL library files themselves.
Use "make install_sw" to install the software without documentation,
and "install_docs_html" to install HTML renditions of the manual
pages.
Package builders who want to configure the library for standard Package builders who want to configure the library for standard
locations, but have the package installed somewhere else so that locations, but have the package installed somewhere else so that
it can easily be packaged, can use it can easily be packaged, can use

View File

@ -8,62 +8,58 @@ Notes about building OpenSSL for NetWare.
BUILD PLATFORM: BUILD PLATFORM:
--------------- ---------------
The build scripts (batch files, perl scripts, etc) have been developed and The build scripts (batch files, perl scripts, etc) have been developed and
tested on W2K. The scripts should run fine on other Windows platforms tested on W2K. The scripts should run fine on other Windows
(NT, Win9x, WinXP) but they have not been tested. They may require some platforms (NT, Win9x, WinXP) but they haven't been tested. They may require
modifications. some modifications.
Supported NetWare Platforms - NetWare 5.x, NetWare 6.x: Supported NetWare Platforms - NetWare 5.x, NetWare 6.x:
------------------------------------------------------- ------------------------------------------
OpenSSL can either use the WinSock interfaces introduced in NetWare 5, OpenSSL uses the WinSock interfaces introduced in NetWare 5. Therefore,
or the BSD socket interface. Previous versions of NetWare, 4.x and 3.x, previous versions of NetWare, 4.x and 3.x, are not supported.
are only supported if OpenSSL is build for CLIB and BSD sockets;
WinSock builds only support NetWare 5 and up.
On NetWare there are two c-runtime libraries. There is the legacy CLIB On NetWare there are two c-runtime libraries. There is the legacy CLIB
interfaces and the newer LIBC interfaces. Being ANSI-C libraries, the interfaces and the newer LibC interfaces. Being ANSI-C libraries, the
functionality in CLIB and LIBC is similar but the LIBC interfaces are built functionality in CLIB and LibC is similar but the LibC interfaces are built
using Novell Kernal Services (NKS) which is designed to leverage using Novell Kernal Services (NKS) which is designed to leverage
multi-processor environments. multi-processor environments.
The NetWare port of OpenSSL can be configured to build using CLIB or LIBC. The NetWare port of OpenSSL can configured to build using CLIB or LibC. The
The CLIB build was developed and tested using NetWare 5.0 sp6.0a. The LIBC 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. build was developed and tested using the NetWare 6.0 FCS.
The necessary LIBC functionality ships with NetWare 6. However, earlier The necessary LibC functionality ships with NetWare 6. However, earlier
NetWare 5.x versions will require updates in order to run the OpenSSL LIBC NetWare 5.x versions will require updates in order to run the OpenSSL LibC
build (NetWare 5.1 SP8 is known to work). build.
As of June 2005, the LIBC build can be configured to use BSD sockets instead 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 of WinSock sockets. Call Configure (usually through netware\build.bat) using
a target of "netware-libc-bsdsock" instead of "netware-libc". a target of "netware-libc-bsdsock" instead of "netware-libc".
As of June 2007, support for CLIB and BSD sockets is also now available
using a target of "netware-clib-bsdsock" instead of "netware-clib";
also gcc builds are now supported on both Linux and Win32 (post 0.9.8e).
REQUIRED TOOLS: REQUIRED TOOLS:
--------------- ---------------
Based upon the configuration and build options used, some or all of the Based upon the configuration and build options used, some or all of the
following tools may be required: following tools may be required:
* Perl for Win32 - required (http://www.activestate.com/ActivePerl) * Perl for Win32 - required (http://www.activestate.com/ActivePerl)
Used to run the various perl scripts on the build platform. Used to run the various perl scripts on the build platform.
* Perl 5.8.0 for NetWare v3.20 (or later) - required * Perl 5.8.0 for NetWare v3.20 (or later) - required
(http://developer.novell.com) Used to run the test script on NetWare (http://developer.novell.com) Used to run the test script on NetWare
after building. after building.
* Compiler / Linker - required:
Metrowerks CodeWarrior PDK 2.1 (or later) for NetWare (commercial):
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)
gcc / nlmconv Cross-Compiler, available from Novell Forge (free): * Metrowerks CodeWarrior PDK 2.1 (or later) for NetWare - required:
http://forge.novell.com/modules/xfmod/project/?aunixnw 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: * Assemblers - optional:
If you intend to build using the assembly options you will need an If you intend to build using the assembly options you will need an
@ -83,11 +79,11 @@ following tools may be required:
In order to build you will need a make tool. Two make tools are In order to build you will need a make tool. Two make tools are
supported, GNU make (gmake.exe) or Microsoft nmake.exe. supported, GNU make (gmake.exe) or Microsoft nmake.exe.
make.exe - GNU make for Windows (version 3.75 used for development) gmake.exe - GNU make for Windows (version 3.75 used for development)
http://gnuwin32.sourceforge.net/packages/make.htm http://www.gnu.org/software/make/make.html
nmake.exe - Microsoft make (Version 6.00.8168.0 used for development) nmake.exe - Microsoft make (Version 6.00.8168.0 used for development)
http://support.microsoft.com/kb/132084/EN-US/
* Novell Developer Kit (NDK) - required: (http://developer.novell.com) * Novell Developer Kit (NDK) - required: (http://developer.novell.com)
@ -127,14 +123,14 @@ following tools may be required:
LIBC - BUILDS: LIBC - BUILDS:
Libraries for C (LIBC) - LIBC headers and import files Libraries for C (LibC) - LibC headers and import files
If you are going to build a LIBC version of OpenSSL, you will 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 need the LibC headers and imports. The March 14, 2002 NDK release or
later is required. later is required.
NOTE: The LIBC SDK includes the necessary WinSock2 support. NOTE: The LibC SDK includes the necessary WinSock2 support. It
It is not necessary to download the WinSock2 NDK when building for It is not necessary to download the WinSock2 Developer when building
LIBC. The LIBC SDK also includes the appropriate BSD socket support for LibC. The LibC SDK also includes the appropriate BSD socket support
if configuring to use BSD sockets. if configuring to use BSD sockets.
@ -147,36 +143,33 @@ 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 and environment variables you will need to build. Modify the
various lines to point to YOUR tools and run set_env.bat. various lines to point to YOUR tools and run set_env.bat.
netware\set_env.bat <target> [compiler] netware\set_env.bat [target]
target - "netware-clib" - CLIB NetWare build target - "netware-clib" - CLib NetWare build
- "netware-libc" - LIBC NetWare build - "netware-libc" - LibC NetWare build
compiler - "gnuc" - GNU GCC Compiler
- "codewarrior" - MetroWerks CodeWarrior (default)
If you don't use set_env.bat, you will need to set up the following If you don't use set_env.bat, you will need to set up the following
environment variables: environment variables:
PATH - Set PATH to point to the tools you will use. path - Set path to point to the tools you will use.
INCLUDE - The location of the NDK include files. MWCIncludes - The location of the NDK include files.
CLIB ex: set INCLUDE=c:\ndk\nwsdk\include\nlm CLIB ex: set MWCIncludes=c:\ndk\nwsdk\include\nlm
LIBC ex: set INCLUDE=c:\ndk\libc\include LibC ex: set MWCIncludes=c:\ndk\libc\include
PRELUDE - The absolute path of the prelude object to link with. For 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 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 with the Metrowerks PDK for NetWare. For a LibC build you should
use the "libcpre.o" file delivered with the LIBC NDK components. use the "libcpre.o" file delivered with the LibC NDK components.
CLIB ex: set PRELUDE=c:\ndk\nwsdk\imports\clibpre.o CLIB ex: set PRELUDE=c:\ndk\nwsdk\imports\clibpre.o
LIBC ex: set PRELUDE=c:\ndk\libc\imports\libcpre.o LibC ex: set PRELUDE=c:\ndk\libc\imports\libcpre.o
IMPORTS - The locaton of the NDK import files. IMPORTS - The locaton of the NDK import files.
CLIB ex: set IMPORTS=c:\ndk\nwsdk\imports CLIB ex: set IMPORTS=c:\ndk\nwsdk\imports
LIBC ex: set IMPORTS=c:\ndk\libc\imports LibC ex: set IMPORTS=c:\ndk\libc\imports
In order to build, you need to run the Perl scripts to configure the build In order to build, you need to run the Perl scripts to configure the build
@ -189,10 +182,9 @@ the assembly code. Always run build.bat from the "openssl" directory.
netware\build [target] [debug opts] [assembly opts] [configure opts] netware\build [target] [debug opts] [assembly opts] [configure opts]
target - "netware-clib" - CLIB NetWare build (WinSock Sockets) target - "netware-clib" - CLib NetWare build (WinSock Sockets)
- "netware-clib-bsdsock" - CLIB NetWare build (BSD Sockets) - "netware-libc" - LibC NetWare build (WinSock Sockets)
- "netware-libc" - LIBC NetWare build (WinSock Sockets) - "netware-libc-bsdsock" - LibC NetWare build (BSD Sockets)
- "netware-libc-bsdsock" - LIBC NetWare build (BSD Sockets)
debug opts - "debug" - build debug debug opts - "debug" - build debug
@ -201,27 +193,25 @@ the assembly code. Always run build.bat from the "openssl" directory.
"no-asm" - don't use assembly "no-asm" - don't use assembly
configure opts- all unrecognized arguments are passed to the configure opts- all unrecognized arguments are passed to the
perl 'configure' script. See that script for perl configure script
internal documentation regarding options that
are available.
examples: examples:
CLIB build, debug, without assembly: CLIB build, debug, without assembly:
netware\build.bat netware-clib debug no-asm netware\build.bat netware-clib debug no-asm
LIBC build, non-debug, using NASM assembly, add mdc2 support: LibC build, non-debug, using NASM assembly:
netware\build.bat netware-libc nw-nasm enable-mdc2 netware\build.bat netware-libc nw-nasm
LIBC build, BSD sockets, non-debug, without assembly: LibC build, BSD sockets, non-debug, without assembly:
netware\build.bat netware-libc-bsdsock no-asm netware\build.bat netware-libc-bsdsock no-asm
Running build.bat generates a make file to be processed by your make Running build.bat generates a make file to be processed by your make
tool (gmake or nmake): tool (gmake or nmake):
CLIB ex: gmake -f netware\nlm_clib_dbg.mak CLIB ex: gmake -f netware\nlm_clib_dbg.mak
LIBC ex: gmake -f netware\nlm_libc.mak LibC ex: gmake -f netware\nlm_libc.mak
LIBC ex: gmake -f netware\nlm_libc_bsdsock.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 You can also run the build scripts manually if you do not want to use the
@ -230,7 +220,7 @@ subdirectory (in the order listed below):
perl configure no-asm [other config opts] [netware-clib|netware-libc|netware-libc-bsdsock] perl configure no-asm [other config opts] [netware-clib|netware-libc|netware-libc-bsdsock]
configures no assembly build for specified netware environment configures no assembly build for specified netware environment
(CLIB or LIBC). (CLIB or LibC).
perl util\mkfiles.pl >MINFO perl util\mkfiles.pl >MINFO
generates a listing of source files (used by mk1mf) generates a listing of source files (used by mk1mf)
@ -260,12 +250,12 @@ The output from the build is placed in the following directories:
tmp_nw_clib - temporary build files tmp_nw_clib - temporary build files
outinc_nw_clib - necesary include files outinc_nw_clib - necesary include files
LIBC Debug build: LibC Debug build:
out_nw_libc.dbg - static libs & test nlm(s) out_nw_libc.dbg - static libs & test nlm(s)
tmp_nw_libc.dbg - temporary build files tmp_nw_libc.dbg - temporary build files
outinc_nw_libc - necessary include files outinc_nw_libc - necessary include files
LIBC Non-debug build: LibC Non-debug build:
out_nw_libc - static libs & test nlm(s) out_nw_libc - static libs & test nlm(s)
tmp_nw_libc - temporary build files tmp_nw_libc - temporary build files
outinc_nw_libc - necesary include files outinc_nw_libc - necesary include files
@ -291,7 +281,7 @@ To run cpy_tests.bat:
NetWare drive - drive letter of mapped drive NetWare drive - drive letter of mapped drive
CLIB ex: netware\cpy_tests out_nw_clib m: CLIB ex: netware\cpy_tests out_nw_clib m:
LIBC ex: netware\cpy_tests out_nw_libc m: LibC ex: netware\cpy_tests out_nw_libc m:
The Perl script, "do_tests.pl", in the "OpenSSL" directory on the server The Perl script, "do_tests.pl", in the "OpenSSL" directory on the server
@ -366,9 +356,9 @@ clean up the resources!
Multi-threaded Development Multi-threaded Development
--------------------------- ---------------------------
The NetWare version of OpenSSL is thread-safe, however multi-threaded The NetWare version of OpenSSL is thread-safe however, multi-threaded
applications must provide the necessary locking function callbacks. This applications must provide the necessary locking function callbacks. This
is described in doc\threads.doc. The file "openssl-x.x.x\crypto\threads\mttest.c" is described in doc\threads.doc. The file "openssl\crypto\threads\mttest.c"
is a multi-threaded test program and demonstrates the locking functions. is a multi-threaded test program and demonstrates the locking functions.
@ -438,7 +428,7 @@ Makefile "vclean"
------------------ ------------------
The generated makefile has a "vclean" target which cleans up the build The generated makefile has a "vclean" target which cleans up the build
directories. If you have been building successfully and suddenly directories. If you have been building successfully and suddenly
experience problems, use "vclean" (gmake -f netware\nlm_xxxx.mak vclean) and retry. experience problems, use "vclean" (gmake -f netware\nlm.mak vclean) and retry.
"Undefined Symbol" Linker errors "Undefined Symbol" Linker errors

View File

@ -71,7 +71,7 @@ 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 the following:
@MAKEVMS <option> <bits> <debug-p> [<compiler>] @MAKEVMS <option> <rsaref-p> <debug-p> [<compiler>]
<option> must be one of the following: <option> must be one of the following:
@ -87,11 +87,24 @@ directory. The syntax is the following:
TEST Just build the "[.xxx.EXE.TEST]" test programs for OpenSSL. TEST Just build the "[.xxx.EXE.TEST]" test programs for OpenSSL.
APPS Just build the "[.xxx.EXE.APPS]" application programs for OpenSSL. APPS Just build the "[.xxx.EXE.APPS]" application programs for OpenSSL.
<bits> must be one of the following: <rsaref-p> must be one of the following:
"" compile using default pointer size RSAREF compile using the RSAREF Library
32 compile using 32 bit pointer size NORSAREF compile without using RSAREF
64 compile using 64 bit pointer size
Note 0: The RSAREF library IS NO LONGER NEEDED. The RSA patent
expires September 20, 2000, and RSA Security chose to make
the algorithm public domain two weeks before that.
Note 1: If you still want to use RSAREF, the library is NOT INCLUDED
and you have to download it. RSA Security doesn't carry it
any more, but there are a number of places where you can find
it. You have to get the ".tar-Z" file as the ".zip" file
doesn't have the directory structure stored. You have to
extract the file into the [.RSAREF] directory as that is where
the scripts will look for the files.
Note 2: I have never done this, so I've no idea if it works or not.
<debug-p> must be one of the following: <debug-p> must be one of the following:
@ -104,13 +117,12 @@ directory. The syntax is the following:
GNUC For GNU C. GNUC For GNU C.
You will find the crypto library in [.xxx.EXE.CRYPTO] (where xxx is VAX, You will find the crypto library in [.xxx.EXE.CRYPTO], called LIBCRYPTO.OLB,
ALPHA or IA64), called SSL_LIBCRYPTO32.OLB or SSL_LIBCRYPTO.OLB depending where xxx is VAX or AXP. You will find the SSL library in [.xxx.EXE.SSL],
on how it was built. You will find the SSL library in [.xxx.EXE.SSL], named LIBSSL.OLB, and you will find a bunch of useful programs in
named SSL_LIBSSL32.OLB or SSL_LIBSSL.OLB, and you will find a bunch of [.xxx.EXE.APPS]. However, these shouldn't be used right off unless it's
useful programs in [.xxx.EXE.APPS]. However, these shouldn't be used just to test them. For production use, make sure you install first, see
right off unless it's just to test them. For production use, make sure Installation below.
you install first, see Installation below.
Note 1: Some programs in this package require a TCP/IP library. Note 1: Some programs in this package require a TCP/IP library.
@ -158,14 +170,12 @@ Installation:
Installation is easy, just do the following: Installation is easy, just do the following:
@INSTALL <root> <bits> @INSTALL <root>
<root> is the directory in which everything will be installed, <root> is the directory in which everything will be installed,
subdirectories, libraries, header files, programs and startup command subdirectories, libraries, header files, programs and startup command
procedures. procedures.
<bits> works the same way as for MAKEVMS.COM
N.B.: INSTALL.COM builds a new directory structure, different from N.B.: INSTALL.COM builds a new directory structure, different from
the directory tree where you have now build OpenSSL. the directory tree where you have now build OpenSSL.
@ -186,10 +196,6 @@ following command procedures:
sets up the symbols to the applications. Should be called sets up the symbols to the applications. Should be called
from for example SYS$MANAGER:SYLOGIN.COM from for example SYS$MANAGER:SYLOGIN.COM
OPENSSL_UNDO.COM
deassigns the logical names created with OPENSSL_STARTUP.COM.
The logical names that are set up are the following: The logical names that are set up are the following:
SSLROOT a dotted concealed logical name pointing at the SSLROOT a dotted concealed logical name pointing at the
@ -197,6 +203,7 @@ The logical names that are set up are the following:
SSLCERTS Initially an empty directory, this is the default SSLCERTS Initially an empty directory, this is the default
location for certificate files. location for certificate files.
SSLMISC Various scripts.
SSLPRIVATE Initially an empty directory, this is the default SSLPRIVATE Initially an empty directory, this is the default
location for private key files. location for private key files.
@ -204,9 +211,8 @@ The logical names that are set up are the following:
programs. programs.
SSLINCLUDE Contains the header files needed if you want to SSLINCLUDE Contains the header files needed if you want to
compile programs with libcrypto or libssl. compile programs with libcrypto or libssl.
SSLLIB Contains the OpenSSL library files themselves: SSLLIB Contains the OpenSSL library files (LIBCRYPTO.OLB
- SSL_LIBCRYPTO32.OLB and SSL_LIBSSL32.OLB or and LIBSSL.OLB) themselves.
- SSL_LIBCRYPTO.OLB and SSL_LIBSSL.OLB
OPENSSL Same as SSLINCLUDE. This is because the standard OPENSSL Same as SSLINCLUDE. This is because the standard
way to include OpenSSL header files from version way to include OpenSSL header files from version
@ -290,4 +296,4 @@ have any ideas.
-- --
Richard Levitte <richard@levitte.org> Richard Levitte <richard@levitte.org>
2000-02-27, 2011-03-18 2000-02-27

View File

@ -5,31 +5,20 @@
[Instructions for building for Windows CE can be found in INSTALL.WCE] [Instructions for building for Windows CE can be found in INSTALL.WCE]
[Instructions for building for Win64 can be found in INSTALL.W64] [Instructions for building for Win64 can be found in INSTALL.W64]
Here are a few comments about building OpenSSL for Win32 environments, Heres a few comments about building OpenSSL in Windows environments. Most
such as Windows NT and Windows 9x. It should be noted though that of this is tested on Win32 but it may also work in Win 3.1 with some
Windows 9x are not ordinarily tested. Its mention merely means that we modification.
attempt to maintain certain programming discipline and pay attention
to backward compatibility issues, in other words it's kind of expected
to work on Windows 9x, but no regression tests are actually performed.
On additional note newer OpenSSL versions are compiled and linked with You need Perl for Win32. Unless you will build on Cygwin, you will need
Winsock 2. This means that minimum OS requirement was elevated to NT 4 ActiveState Perl, available from http://www.activestate.com/ActivePerl.
and Windows 98 [there is Winsock 2 update for Windows 95 though].
- you need Perl for Win32. Unless you will build on Cygwin, you will need and one of the following C compilers:
ActiveState Perl, available from http://www.activestate.com/ActivePerl.
- one of the following C compilers:
* Visual C++ * Visual C++
* Borland C * Borland C
* GNU C (Cygwin or MinGW) * GNU C (Cygwin or MinGW)
- Netwide Assembler, a.k.a. NASM, available from http://nasm.sourceforge.net/ If you are compiling from a tarball or a CVS snapshot then the Win32 files
is required if you intend to utilize assembler modules. Note that NASM
is now the only supported assembler.
If you are compiling from a tarball or a Git snapshot then the Win32 files
may well be not up to date. This may mean that some "tweaking" is required to 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?) get it all to work. See the trouble shooting section later on for if (when?)
it goes wrong. it goes wrong.
@ -37,18 +26,39 @@
Visual C++ Visual C++
---------- ----------
If you want to compile in the assembly language routines with Visual If you want to compile in the assembly language routines with Visual C++ then
C++, then you will need already mentioned Netwide Assembler binary, you will need an assembler. This is worth doing because it will result in
nasmw.exe or nasm.exe, to be available on your %PATH%. faster code: for example it will typically result in a 2 times speedup in the
RSA routines. Currently the following assemblers are supported:
Firstly you should run Configure with platform VC-WIN32: * Microsoft MASM (aka "ml")
* Free Netwide Assembler NASM.
> perl Configure VC-WIN32 --prefix=c:\some\openssl\dir MASM is distributed with most versions of VC++. For the versions where it is
not included in VC++, it is also distributed with some Microsoft DDKs, for
example the Windows NT 4.0 DDK and the Windows 98 DDK. If you do not have
either of these DDKs then you can just download the binaries for the Windows
98 DDK and extract and rename the two files XXXXXml.exe and XXXXXml.err, to
ml.exe and ml.err and install somewhere on your PATH. Both DDKs can be
downloaded from the Microsoft developers site www.msdn.com.
Where the prefix argument specifies where OpenSSL will be installed to. 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:
http://www.kernel.org/pub/software/devel/nasm/binaries/win32/
The NASM binary nasmw.exe needs to be installed anywhere on your PATH.
Next you need to build the Makefiles and optionally the assembly Firstly you should run Configure:
language files:
> perl Configure VC-WIN32 --prefix=c:/some/openssl/dir
Where the prefix argument specifies where OpenSSL will be installed to.
Next you need to build the Makefiles and optionally the assembly language
files:
- If you are using MASM then run:
> ms\do_masm
- If you are using NASM then run: - If you are using NASM then run:
@ -56,7 +66,6 @@
- If you don't want to use the assembly language files at all then run: - If you don't want to use the assembly language files at all then run:
> perl Configure VC-WIN32 no-asm --prefix=c:/some/openssl/dir
> ms\do_ms > ms\do_ms
If you get errors about things not having numbers assigned then check the If you get errors about things not having numbers assigned then check the
@ -67,39 +76,42 @@
> nmake -f ms\ntdll.mak > nmake -f ms\ntdll.mak
If all is well it should compile and you will have some DLLs and If all is well it should compile and you will have some DLLs and executables
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 > nmake -f ms\ntdll.mak test
To install OpenSSL to the specified location do: To install OpenSSL to the specified location do:
> nmake -f ms\ntdll.mak install > nmake -f ms\ntdll.mak install
Tweaks: Tweaks:
There are various changes you can make to the Win32 compile There are various changes you can make to the Win32 compile environment. By
environment. By default the library is not compiled with debugging default the library is not compiled with debugging symbols. If you add 'debug'
symbols. If you use the platform debug-VC-WIN32 instead of VC-WIN32 to the mk1mf.pl lines in the do_* batch file then debugging symbols will be
then debugging symbols will be compiled in. 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.
By default in 1.0.0 OpenSSL will compile builtin ENGINES into the
separate shared librariesy. If you specify the "enable-static-engine" By default in 0.9.8 OpenSSL will compile builtin ENGINES into the libeay32.dll
option on the command line to Configure the shared library build shared library. If you specify the "no-static-engine" option on the command
(ms\ntdll.mak) will compile the engines into libeay32.dll instead. 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.
If you want to enable the NT specific features of OpenSSL (currently If you want to enable the NT specific features of OpenSSL (currently only the
only the logging BIO) follow the instructions above but call the batch logging BIO) follow the instructions above but call the batch file do_nt.bat
file do_nt.bat instead of do_ms.bat. instead of do_ms.bat.
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
--------------------- ---------------------
@ -125,13 +137,17 @@
GNU C (Cygwin) GNU C (Cygwin)
-------------- --------------
Cygwin implements a Posix/Unix runtime system (cygwin1.dll) on top of Cygwin provides a bash shell and GNU tools environment running
Win32 subsystem and provides a bash shell and GNU tools environment. on NT 4.0, Windows 9x, Windows ME, Windows 2000, and Windows XP.
Consequently, a make of OpenSSL with Cygwin is virtually identical to Consequently, a make of OpenSSL with Cygwin is closer to a GNU
Unix procedure. It is also possible to create Win32 binaries that only bash environment such as Linux than to other the other Win32
use the Microsoft C runtime system (msvcrt.dll or crtdll.dll) using makes.
MinGW. MinGW can be used in the Cygwin development environment or in a
standalone setup as described in the following section. 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: To build OpenSSL using Cygwin:
@ -176,44 +192,35 @@
non-fatal error in "make test" but is otherwise harmless. If non-fatal error in "make test" but is otherwise harmless. If
desired and needed, GNU bc can be built with Cygwin without change. desired and needed, GNU bc can be built with Cygwin without change.
GNU C (MinGW/MSYS) GNU C (MinGW)
------------- -------------
* Compiler and shell environment installation: * Compiler installation:
MinGW and MSYS are available from http://www.mingw.org/, both are MinGW is available from http://www.mingw.org. Run the installer and
required. Run the installers and do whatever magic they say it takes set the MinGW bin directory to the PATH in "System Properties" or
to start MSYS bash shell with GNU tools on its PATH. autoexec.bat.
N.B. Since source tar-ball can contain symbolic links, it's essential
that you use accompanying MSYS tar to unpack the source. It will
either handle them in one way or another or fail to extract them,
which does the trick too. Latter means that you may safely ignore all
"cannot create symlink" messages, as they will be "re-created" at
configure stage by copying corresponding files. Alternative programs
were observed to create empty files instead, which results in build
failure.
* Compile OpenSSL: * Compile OpenSSL:
$ ./config > ms\mingw32
[...]
$ make
[...]
$ make test
This will create the library and binaries in root source directory This will create the library and binaries in out. In case any problems
and openssl.exe application in apps directory. occur, try
> ms\mingw32 no-asm
It is also possible to cross-compile it on Linux by configuring instead.
with './Configure --cross-compile-prefix=i386-mingw32- mingw ...'.
'make test' is naturally not applicable then.
libcrypto.a and libssl.a are the static libraries. To use the DLLs, libcrypto.a and libssl.a are the static libraries. To use the DLLs,
link with libeay32.a and libssl32.a instead. link with libeay32.a and libssl32.a instead.
See troubleshooting if you get error messages about functions not See troubleshooting if you get error messages about functions not having
having a number assigned. a number assigned.
* You can now try the tests:
> cd out
> ..\ms\test
Installation Installation
------------ ------------
@ -257,7 +264,7 @@
then ms\do_XXX should not give a warning any more. However the numbers that then ms\do_XXX should not give a warning any more. However the numbers that
get assigned by this technique may not match those that eventually get get assigned by this technique may not match those that eventually get
assigned in the Git tree: so anything linked against this version of the assigned in the CVS tree: so anything linked against this version of the
library may need to be recompiled. library may need to be recompiled.
If you get errors about unresolved symbols there are several possible If you get errors about unresolved symbols there are several possible
@ -300,24 +307,13 @@
If you link with static OpenSSL libraries [those built with ms/nt.mak], If you link with static OpenSSL libraries [those built with ms/nt.mak],
then you're expected to additionally link your application with then you're expected to additionally link your application with
WS2_32.LIB, ADVAPI32.LIB, GDI32.LIB and USER32.LIB. Those developing WSOCK32.LIB, ADVAPI32.LIB, GDI32.LIB and USER32.LIB. Those developing
non-interactive service applications might feel concerned about linking non-interactive service applications might feel concerned about linking
with the latter two, as they are justly associated with interactive with latter two, as they are justly associated with interactive desktop,
desktop, which is not available to service processes. The toolkit is which is not available to service processes. The toolkit is designed
designed to detect in which context it's currently executed, GUI, to detect in which context it's currently executed, GUI, console app
console app or service, and act accordingly, namely whether or not to or service, and act accordingly, namely whether or not to actually make
actually make GUI calls. Additionally those who wish to GUI calls.
/DELAYLOAD:GDI32.DLL and /DELAYLOAD:USER32.DLL and actually keep them
off service process should consider implementing and exporting from
.exe image in question own _OPENSSL_isservice not relying on USER32.DLL.
E.g., on Windows Vista and later you could:
__declspec(dllexport) __cdecl BOOL _OPENSSL_isservice(void)
{ DWORD sess;
if (ProcessIdToSessionId(GetCurrentProcessId(),&sess))
return sess==0;
return FALSE;
}
If you link with OpenSSL .DLLs, then you're expected to include into If you link with OpenSSL .DLLs, then you're expected to include into
your application code small "shim" snippet, which provides glue between your application code small "shim" snippet, which provides glue between

View File

@ -4,36 +4,27 @@
Building OpenSSL for Windows CE requires the following external tools: Building OpenSSL for Windows CE requires the following external tools:
* Microsoft eMbedded Visual C++ 3.0 or later * Microsoft eMbedded Visual C++ 3.0
* Appropriate SDK might be required * wcecompat compatibility library (www.essemer.com.au)
* Perl for Win32 [commonly recommended ActiveState Perl is available * Optionally ceutils for running automated tests (www.essemer.com.au)
from http://www.activestate.com/Products/ActivePerl/]
* wcecompat compatibility library available at You also need Perl for Win32. You will need ActiveState Perl, available
http://www.essemer.com.au/windowsce/ from http://www.activestate.com/ActivePerl.
* Optionally ceutils for running automated tests (same location)
_or_ 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.
* PocketConsole driver and PortSDK available at The C Runtime Library implementation for Windows CE that is included with
http://www.symbolictools.de/public/pocketconsole/ Microsoft eMbedded Visual C++ 3.0 is incomplete and in some places
* CMD command interpreter (same location) 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
As Windows CE support in OpenSSL relies on 3rd party compatibility and provides low-level IO and stream IO support for stdin/stdout/stderr
library, it's appropriate to check corresponding URL for updates. For (which Windows CE does not provide). This IO functionality is not needed
example if you choose wcecompat, note that as for the moment of this by the OpenSSL library itself but is used for the tests and openssl.exe.
writing version 1.2 is available and actually required for WCE 4.2 More information is available at www.essemer.com.au.
and newer platforms. All wcecompat issues should be directed to
www.essemer.com.au.
Why compatibility library at all? The C Runtime Library implementation
for Windows CE that is included with Microsoft eMbedded Visual C++ is
incomplete and in some places incorrect. Compatibility library plugs
the holes and tries to bring the Windows CE CRT to [more] usable level.
Most gaping hole in CRT is support for stdin/stdout/stderr IO, which
proposed compatibility libraries solve in two different ways: wcecompat
redirects IO to active sync link, while PortSDK - to NT-like console
driver on the handheld itself.
Building Building
-------- --------
@ -43,21 +34,9 @@
> "C:\Program Files\Microsoft eMbedded Tools\EVC\WCE300\BIN\WCEARM.BAT" > "C:\Program Files\Microsoft eMbedded Tools\EVC\WCE300\BIN\WCEARM.BAT"
Next pick compatibility library according to your preferences. Next indicate where wcecompat is located:
1. To choose wcecompat set up WCECOMPAT environment variable pointing > set WCECOMPAT=C:\wcecompat
at the location of wcecompat tree "root":
> set WCECOMPAT=C:\wcecompat
> set PORTSDK_LIBPATH=
2. To choose PortSDK set up PORTSDK_LIBPATH to point at hardware-
specific location where your portlib.lib is installed:
> set PORTSDK_LIBPATH=C:\PortSDK\lib\ARM
> set WCECOMPAT=
Note that you may not set both variables.
Next you should run Configure: Next you should run Configure:
@ -73,16 +52,16 @@
Then from the VC++ environment at a prompt do: 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 > nmake -f ms\cedll.mak
[note that static builds are not supported under CE] 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
If all is well it should compile and you will have some DLLs and executables
in out32dll*.
<<< everyting below needs revision in respect to wcecompat vs. PortSDK >>>
If you want
to try the tests then make sure the ceutils are in the path and do: to try the tests then make sure the ceutils are in the path and do:
> cd out32 > cd out32

View File

@ -12,7 +12,7 @@
--------------- ---------------
/* ==================================================================== /* ====================================================================
* Copyright (c) 1998-2016 The OpenSSL Project. All rights reserved. * Copyright (c) 1998-2007 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

@ -29,7 +29,7 @@ OSErr AppendErrorMessageToHandle(Handle inoutHandle);
// A bunch of evil macros that would be unnecessary if I were always using C++ ! // A bunch of evil macros that would be uneccessary if I were always using C++ !
#define SetErrorMessageAndBailIfNil(theArg,theMessage) \ #define SetErrorMessageAndBailIfNil(theArg,theMessage) \
{ \ { \

View File

@ -5,98 +5,97 @@
extern "C" { extern "C" {
#endif #endif
enum {
kMacSocket_TimeoutErr = -2
enum
{
kMacSocket_TimeoutErr = -2
}; };
// Since MacSocket does busy waiting, I do a callback while waiting
typedef OSErr(*MacSocket_IdleWaitCallback) (void *); // Since MacSocket does busy waiting, I do a callback while waiting
// Call this before anything else! typedef OSErr (*MacSocket_IdleWaitCallback)(void *);
// Call this before anything else!
OSErr MacSocket_Startup(void); OSErr MacSocket_Startup(void);
// Call this to cleanup before quitting
// Call this to cleanup before quitting
OSErr MacSocket_Shutdown(void); OSErr MacSocket_Shutdown(void);
// Call this to allocate a "socket" (reference number is returned in
// outSocketNum)
// Note that inDoThreadSwitching is pretty much irrelevant right now, since I
// ignore it
// The inTimeoutTicks parameter is applied during reads/writes of data
// The inIdleWaitCallback parameter specifies a callback which is called
// during busy-waiting periods
// The inUserRefPtr parameter is passed back to the idle-wait callback
OSErr MacSocket_socket(int *outSocketNum, const Boolean inDoThreadSwitching, // Call this to allocate a "socket" (reference number is returned in outSocketNum)
const long inTimeoutTicks, // Note that inDoThreadSwitching is pretty much irrelevant right now, since I ignore it
MacSocket_IdleWaitCallback inIdleWaitCallback, // The inTimeoutTicks parameter is applied during reads/writes of data
void *inUserRefPtr); // The inIdleWaitCallback parameter specifies a callback which is called during busy-waiting periods
// The inUserRefPtr parameter is passed back to the idle-wait callback
// Call this to connect to an IP/DNS address OSErr MacSocket_socket(int *outSocketNum,const Boolean inDoThreadSwitching,const long inTimeoutTicks,MacSocket_IdleWaitCallback inIdleWaitCallback,void *inUserRefPtr);
// Note that inTargetAddressAndPort is in "IP:port" format-- e.g.
// 10.1.1.1:123
OSErr MacSocket_connect(const int inSocketNum, char *inTargetAddressAndPort);
// Call this to listen on a port // Call this to connect to an IP/DNS address
// Since this a low-performance implementation, I allow a maximum of 1 (one!) // Note that inTargetAddressAndPort is in "IP:port" format-- e.g. 10.1.1.1:123
// incoming request when I listen
OSErr MacSocket_listen(const int inSocketNum, const int inPortNum); OSErr MacSocket_connect(const int inSocketNum,char *inTargetAddressAndPort);
// Call this to close a socket
// Call this to listen on a port
// Since this a low-performance implementation, I allow a maximum of 1 (one!) incoming request when I listen
OSErr MacSocket_listen(const int inSocketNum,const int inPortNum);
// Call this to close a socket
OSErr MacSocket_close(const int inSocketNum); OSErr MacSocket_close(const int inSocketNum);
// Call this to receive data on a socket
// Most parameters' purpose are obvious-- except maybe "inBlock" which
// controls whether I wait for data or return immediately
int MacSocket_recv(const int inSocketNum, void *outBuff, int outBuffLength, // Call this to receive data on a socket
const Boolean inBlock); // Most parameters' purpose are obvious-- except maybe "inBlock" which controls whether I wait for data or return immediately
// Call this to send data on a socket int MacSocket_recv(const int inSocketNum,void *outBuff,int outBuffLength,const Boolean inBlock);
int MacSocket_send(const int inSocketNum, const void *inBuff,
int inBuffLength);
// If zero bytes were read in a call to MacSocket_recv(), it may be that the // Call this to send data on a socket
// remote end has done a half-close
// This function will let you check whether that's true or not int MacSocket_send(const int inSocketNum,const void *inBuff,int inBuffLength);
// If zero bytes were read in a call to MacSocket_recv(), it may be that the remote end has done a half-close
// This function will let you check whether that's true or not
Boolean MacSocket_RemoteEndIsClosing(const int inSocketNum); Boolean MacSocket_RemoteEndIsClosing(const int inSocketNum);
// Call this to see if the listen has completed after a call to
// MacSocket_listen() // Call this to see if the listen has completed after a call to MacSocket_listen()
Boolean MacSocket_ListenCompleted(const int inSocketNum); Boolean MacSocket_ListenCompleted(const int inSocketNum);
// These really aren't very useful anymore
// These really aren't very useful anymore
Boolean MacSocket_LocalEndIsOpen(const int inSocketNum); Boolean MacSocket_LocalEndIsOpen(const int inSocketNum);
Boolean MacSocket_RemoteEndIsOpen(const int inSocketNum); Boolean MacSocket_RemoteEndIsOpen(const int inSocketNum);
// You may wish to change the userRefPtr for a socket callback-- use this to
// do it
void MacSocket_SetUserRefPtr(const int inSocketNum, void *inNewRefPtr); // You may wish to change the userRefPtr for a socket callback-- use this to do it
// Call these to get the socket's IP:port descriptor void MacSocket_SetUserRefPtr(const int inSocketNum,void *inNewRefPtr);
void MacSocket_GetLocalIPAndPort(const int inSocketNum, char *outIPAndPort,
const int inIPAndPortLength);
void MacSocket_GetRemoteIPAndPort(const int inSocketNum, char *outIPAndPort,
const int inIPAndPortLength);
// Call this to get error info from a socket // Call these to get the socket's IP:port descriptor
void MacSocket_GetSocketErrorInfo(const int inSocketNum, void MacSocket_GetLocalIPAndPort(const int inSocketNum,char *outIPAndPort,const int inIPAndPortLength);
int *outSocketErrCode, void MacSocket_GetRemoteIPAndPort(const int inSocketNum,char *outIPAndPort,const int inIPAndPortLength);
char *outSocketErrString,
const int inSocketErrStringMaxLength);
// Call this to get error info from a socket
void MacSocket_GetSocketErrorInfo(const int inSocketNum,int *outSocketErrCode,char *outSocketErrString,const int inSocketErrStringMaxLength);
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -1,42 +1,43 @@
// Gathers unpredictable system data to be used for generating // Gathers unpredictable system data to be used for generating
// random bits // random bits
#include <MacTypes.h> #include <MacTypes.h>
class CRandomizer { class CRandomizer
public: {
CRandomizer(void); public:
void PeriodicAction(void); CRandomizer (void);
void PeriodicAction (void);
private:
private: // Private calls
// Private calls void AddTimeSinceMachineStartup (void);
void AddAbsoluteSystemStartupTime (void);
void AddAppRunningTime (void);
void AddStartupVolumeInfo (void);
void AddFiller (void);
void AddTimeSinceMachineStartup(void); void AddCurrentMouse (void);
void AddAbsoluteSystemStartupTime(void); void AddNow (double millisecondUncertainty);
void AddAppRunningTime(void); void AddBytes (void *data, long size, double entropy);
void AddStartupVolumeInfo(void);
void AddFiller(void); void GetTimeBaseResolution (void);
unsigned long SysTimer (void);
void AddCurrentMouse(void); // System Info
void AddNow(double millisecondUncertainty); bool mSupportsLargeVolumes;
void AddBytes(void *data, long size, double entropy); bool mIsPowerPC;
bool mIs601;
void GetTimeBaseResolution(void);
unsigned long SysTimer(void); // Time info
double mTimebaseTicksPerMillisec;
// System Info unsigned long mLastPeriodicTicks;
bool mSupportsLargeVolumes;
bool mIsPowerPC; // Mouse info
bool mIs601; long mSamplePeriod;
Point mLastMouse;
// Time info long mMouseStill;
double mTimebaseTicksPerMillisec;
unsigned long mLastPeriodicTicks;
// Mouse info
long mSamplePeriod;
Point mLastMouse;
long mMouseStill;
}; };

View File

@ -1,9 +1,9 @@
#include <MacHeaders.h> #include <MacHeaders.h>
#define B_ENDIAN #define B_ENDIAN
#ifdef __POWERPC__ #ifdef __POWERPC__
# pragma longlong on #pragma longlong on
#endif #endif
#if 1 #if 1
# define MAC_OS_GUSI_SOURCE #define MAC_OS_GUSI_SOURCE
#endif #endif
#define MONOLITH #define MONOLITH

View File

@ -1,9 +1,9 @@
#include <MacHeaders.h> #include <MacHeaders.h>
#define B_ENDIAN #define B_ENDIAN
#ifdef __POWERPC__ #ifdef __POWERPC__
# pragma longlong on #pragma longlong on
#endif #endif
#if 0 #if 0
# define MAC_OS_GUSI_SOURCE #define MAC_OS_GUSI_SOURCE
#endif #endif
#define MONOLITH #define MONOLITH

View File

@ -1,5 +1,5 @@
#ifndef MK1MF_BUILD #ifndef MK1MF_BUILD
# define CFLAGS "-DB_ENDIAN" # define CFLAGS "-DB_ENDIAN"
# define PLATFORM "macos" # define PLATFORM "macos"
# define DATE "Sun Feb 27 19:44:16 MET 2000" # define DATE "Sun Feb 27 19:44:16 MET 2000"
#endif #endif

View File

@ -1,126 +1,116 @@
/* MacOS/opensslconf.h */ /* MacOS/opensslconf.h */
#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */ #if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
# if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR) #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
# define OPENSSLDIR "/usr/local/ssl" #define OPENSSLDIR "/usr/local/ssl"
# endif #endif
#endif #endif
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT) #if defined(HEADER_IDEA_H) && !defined(IDEA_INT)
# define IDEA_INT unsigned int #define IDEA_INT unsigned int
#endif #endif
#if defined(HEADER_MD2_H) && !defined(MD2_INT) #if defined(HEADER_MD2_H) && !defined(MD2_INT)
# define MD2_INT unsigned int #define MD2_INT unsigned int
#endif #endif
#if defined(HEADER_RC2_H) && !defined(RC2_INT) #if defined(HEADER_RC2_H) && !defined(RC2_INT)
/* I need to put in a mod for the alpha - eay */ /* I need to put in a mod for the alpha - eay */
# define RC2_INT unsigned int #define RC2_INT unsigned int
#endif #endif
#if defined(HEADER_RC4_H) #if defined(HEADER_RC4_H)
# if !defined(RC4_INT) #if !defined(RC4_INT)
/* using int types make the structure larger but make the code faster
* on most boxes I have tested - up to %20 faster. */
/* /*
* using int types make the structure larger but make the code faster on most
* boxes I have tested - up to %20 faster.
*/
/*-
* I don't know what does "most" mean, but declaring "int" is a must on: * I don't know what does "most" mean, but declaring "int" is a must on:
* - Intel P6 because partial register stalls are very expensive; * - Intel P6 because partial register stalls are very expensive;
* - elder Alpha because it lacks byte load/store instructions; * - elder Alpha because it lacks byte load/store instructions;
*/ */
# define RC4_INT unsigned char #define RC4_INT unsigned char
# endif #endif
# if !defined(RC4_CHUNK) #if !defined(RC4_CHUNK)
/* /*
* This enables code handling data aligned at natural CPU word * This enables code handling data aligned at natural CPU word
* boundary. See crypto/rc4/rc4_enc.c for further details. * boundary. See crypto/rc4/rc4_enc.c for further details.
*/ */
# define RC4_CHUNK unsigned long #define RC4_CHUNK unsigned long
# endif #endif
#endif #endif
#if defined(HEADER_DES_H) && !defined(DES_LONG) #if defined(HEADER_DES_H) && !defined(DES_LONG)
/* /* If this is set to 'unsigned int' on a DEC Alpha, this gives about a
* If this is set to 'unsigned int' on a DEC Alpha, this gives about a %20 * %20 speed up (longs are 8 bytes, int's are 4). */
* speed up (longs are 8 bytes, int's are 4). #ifndef DES_LONG
*/ #define DES_LONG unsigned long
# ifndef DES_LONG #endif
# define DES_LONG unsigned long
# endif
#endif #endif
#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H) #if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)
# define CONFIG_HEADER_BN_H #define CONFIG_HEADER_BN_H
# if __option(longlong) #if __option(longlong)
# define BN_LLONG # define BN_LLONG
# else #else
# undef BN_LLONG # undef BN_LLONG
# endif #endif
/* Should we define BN_DIV2W here? */ /* Should we define BN_DIV2W here? */
/* Only one for the following should be defined */ /* Only one for the following should be defined */
/* /* The prime number generation stuff may not work when
* The prime number generation stuff may not work when EIGHT_BIT but I don't * EIGHT_BIT but I don't care since I've only used this mode
* care since I've only used this mode for debuging the bignum libraries * for debuging the bignum libraries */
*/ #undef SIXTY_FOUR_BIT_LONG
# undef SIXTY_FOUR_BIT_LONG #undef SIXTY_FOUR_BIT
# undef SIXTY_FOUR_BIT #define THIRTY_TWO_BIT
# define THIRTY_TWO_BIT #undef SIXTEEN_BIT
# undef SIXTEEN_BIT #undef EIGHT_BIT
# undef EIGHT_BIT
#endif #endif
#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H) #if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H)
# define CONFIG_HEADER_RC4_LOCL_H #define CONFIG_HEADER_RC4_LOCL_H
/* /* if this is defined data[i] is used instead of *data, this is a %20
* if this is defined data[i] is used instead of *data, this is a %20 speedup * speedup on x86 */
* on x86 #undef RC4_INDEX
*/
# undef RC4_INDEX
#endif #endif
#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H) #if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
# define CONFIG_HEADER_BF_LOCL_H #define CONFIG_HEADER_BF_LOCL_H
# define BF_PTR #define BF_PTR
#endif /* HEADER_BF_LOCL_H */ #endif /* HEADER_BF_LOCL_H */
#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H) #if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)
# define CONFIG_HEADER_DES_LOCL_H #define CONFIG_HEADER_DES_LOCL_H
/* /* the following is tweaked from a config script, that is why it is a
* the following is tweaked from a config script, that is why it is a * protected undef/define */
* protected undef/define #ifndef DES_PTR
*/ #define DES_PTR
# ifndef DES_PTR #endif
# define DES_PTR
# endif /* This helps C compiler generate the correct code for multiple functional
* units. It reduces register dependancies at the expense of 2 more
/* * registers */
* This helps C compiler generate the correct code for multiple functional #ifndef DES_RISC1
* units. It reduces register dependancies at the expense of 2 more #define DES_RISC1
* registers #endif
*/
# ifndef DES_RISC1 #ifndef DES_RISC2
# define DES_RISC1 #undef DES_RISC2
# endif #endif
# ifndef DES_RISC2 #if defined(DES_RISC1) && defined(DES_RISC2)
# undef DES_RISC2 YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
# endif #endif
# if defined(DES_RISC1) && defined(DES_RISC2) /* Unroll the inner loop, this sometimes helps, sometimes hinders.
YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED ! !!!! * Very mucy CPU dependant */
# endif #ifndef DES_UNROLL
/* #define DES_UNROLL
* Unroll the inner loop, this sometimes helps, sometimes hinders. Very mucy #endif
* CPU dependant
*/ #endif /* HEADER_DES_LOCL_H */
# ifndef DES_UNROLL
# define DES_UNROLL #ifndef __POWERPC__
# endif #define MD32_XARRAY
#endif /* HEADER_DES_LOCL_H */
#ifndef __POWERPC__
# define MD32_XARRAY
#endif #endif

View File

@ -65,13 +65,12 @@ EX_LIBS=
EXE_EXT= EXE_EXT=
ARFLAGS= ARFLAGS=
AR=ar $(ARFLAGS) r AR=ar $(ARFLAGS) r
ARD=ar $(ARFLAGS) d
RANLIB= ranlib RANLIB= ranlib
NM= nm
PERL= perl PERL= perl
TAR= tar TAR= tar
TARFLAGS= --no-recursion --record-size=10240 TARFLAGS= --no-recursion
MAKEDEPPROG=makedepend MAKEDEPPROG=makedepend
LIBDIR=lib
# We let the C compiler driver to take care of .s files. This is done in # We let the C compiler driver to take care of .s files. This is done in
# order to be excused from maintaining a separate set of architecture # order to be excused from maintaining a separate set of architecture
@ -89,7 +88,7 @@ PROCESSOR=
CPUID_OBJ= CPUID_OBJ=
BN_ASM= bn_asm.o BN_ASM= bn_asm.o
DES_ENC= des_enc.o fcrypt_b.o DES_ENC= des_enc.o fcrypt_b.o
AES_ENC= aes_core.o aes_cbc.o AES_ASM_OBJ=aes_core.o aes_cbc.o
BF_ENC= bf_enc.o BF_ENC= bf_enc.o
CAST_ENC= c_enc.o CAST_ENC= c_enc.o
RC4_ENC= rc4_enc.o RC4_ENC= rc4_enc.o
@ -97,11 +96,6 @@ RC5_ENC= rc5_enc.o
MD5_ASM_OBJ= MD5_ASM_OBJ=
SHA1_ASM_OBJ= SHA1_ASM_OBJ=
RMD160_ASM_OBJ= RMD160_ASM_OBJ=
WP_ASM_OBJ=
CMLL_ENC=
MODES_ASM_OBJ=
ENGINES_ASM_OBJ=
PERLASM_SCHEME=
# KRB5 stuff # KRB5 stuff
KRB5_INCLUDES= KRB5_INCLUDES=
@ -111,17 +105,19 @@ LIBKRB5=
ZLIB_INCLUDE= ZLIB_INCLUDE=
LIBZLIB= LIBZLIB=
# TOP level FIPS install directory.
FIPSDIR=
# This is the location of fipscanister.o and friends. # This is the location of fipscanister.o and friends.
# The FIPS module build will place it $(INSTALLTOP)/lib # The FIPS module build will place it $(INSTALLTOP)/lib
# but since $(INSTALLTOP) can only take the default value # but since $(INSTALLTOP) can only take the default value
# when the module is built it will be in /usr/local/ssl/lib # when the module is built it will be in /usr/local/ssl/lib
# $(INSTALLTOP) for this build may be different so hard # $(INSTALLTOP) for this build make be different so hard
# code the path. # code the path.
FIPSLIBDIR= FIPSLIBDIR=/usr/local/ssl/lib/
# This is set to "y" if fipscanister.o is compiled internally as
# opposed to coming from an external validated location.
FIPSCANISTERINTERNAL=n
# The location of the library which contains fipscanister.o # The location of the library which contains fipscanister.o
# normally it will be libcrypto unless fipsdso is set in which # normally it will be libcrypto unless fipsdso is set in which
@ -135,19 +131,18 @@ FIPSCANLIB=
BASEADDR= BASEADDR=
DIRS= crypto ssl engines apps test tools DIRS= crypto fips ssl engines apps test tools
ENGDIRS= ccgost SHLIBDIRS= crypto ssl fips
SHLIBDIRS= crypto ssl
# dirs in crypto to build # dirs in crypto to build
SDIRS= \ SDIRS= \
objects \ objects \
md2 md4 md5 sha mdc2 hmac ripemd whrlpool \ md2 md4 md5 sha mdc2 hmac ripemd \
des aes rc2 rc4 rc5 idea bf cast camellia seed modes \ des aes rc2 rc4 rc5 idea bf cast camellia seed \
bn ec rsa dsa ecdsa dh ecdh dso engine \ bn ec rsa dsa ecdsa dh ecdh dso engine \
buffer bio stack lhash rand err \ buffer bio stack lhash rand err \
evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 \ evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 \
cms pqueue ts jpake srp store cmac store cms pqueue
# keep in mind that the above list is adjusted by ./Configure # keep in mind that the above list is adjusted by ./Configure
# according to no-xxx arguments... # according to no-xxx arguments...
@ -161,8 +156,6 @@ MANDIR=$(OPENSSLDIR)/man
MAN1=1 MAN1=1
MAN3=3 MAN3=3
MANSUFFIX= MANSUFFIX=
HTMLSUFFIX=html
HTMLDIR=$(OPENSSLDIR)/html
SHELL=/bin/sh SHELL=/bin/sh
TOP= . TOP= .
@ -172,18 +165,20 @@ WDIRS= windows
LIBS= libcrypto.a libssl.a LIBS= libcrypto.a libssl.a
SHARED_CRYPTO=libcrypto$(SHLIB_EXT) SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
SHARED_SSL=libssl$(SHLIB_EXT) SHARED_SSL=libssl$(SHLIB_EXT)
SHARED_FIPS=
SHARED_LIBS= SHARED_LIBS=
SHARED_LIBS_LINK_EXTS= SHARED_LIBS_LINK_EXTS=
SHARED_LDFLAGS= SHARED_LDFLAGS=
GENERAL= Makefile GENERAL= Makefile
BASENAME= openssl BASENAME= openssl
NAME= $(BASENAME)-$(VERSION) NAME= $(BASENAME)-fips-$(VERSION)
TARFILE= ../$(NAME).tar TARFILE= $(NAME).tar
WTARFILE= $(NAME)-win.tar
EXHEADER= e_os2.h EXHEADER= e_os2.h
HEADER= e_os.h HEADER= e_os.h
all: Makefile build_all all: Makefile build_all openssl.pc libssl.pc libcrypto.pc
# as we stick to -e, CLEARENV ensures that local variables in lower # as we stick to -e, CLEARENV ensures that local variables in lower
# Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn # Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn
@ -197,44 +192,36 @@ CLEARENV= TOP= && unset TOP $${LIB+LIB} $${LIBS+LIBS} \
$${EXHEADER+EXHEADER} $${HEADER+HEADER} \ $${EXHEADER+EXHEADER} $${HEADER+HEADER} \
$${GENERAL+GENERAL} $${CFLAGS+CFLAGS} \ $${GENERAL+GENERAL} $${CFLAGS+CFLAGS} \
$${ASFLAGS+ASFLAGS} $${AFLAGS+AFLAGS} \ $${ASFLAGS+ASFLAGS} $${AFLAGS+AFLAGS} \
$${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS} $${SCRIPTS+SCRIPTS} \ $${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS} \
$${SHAREDCMD+SHAREDCMD} $${SHAREDFLAGS+SHAREDFLAGS} \ $${SHAREDCMD+SHAREDCMD} $${SHAREDFLAGS+SHAREDFLAGS} \
$${SHARED_LIB+SHARED_LIB} $${LIBEXTRAS+LIBEXTRAS} $${SHARED_LIB+SHARED_LIB} $${LIBEXTRAS+LIBEXTRAS}
BUILDENV= PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \ BUILDENV= PLATFORM='${PLATFORM}' PROCESSOR='${PROCESSOR}' \
CC='$(CC)' CFLAG='$(CFLAG)' \ CC='${CC}' CFLAG='${CFLAG}' \
AS='$(CC)' ASFLAG='$(CFLAG) -c' \ AS='${CC}' ASFLAG='${CFLAG} -c' \
AR='$(AR)' NM='$(NM)' RANLIB='$(RANLIB)' \ AR='${AR}' PERL='${PERL}' RANLIB='${RANLIB}' \
CROSS_COMPILE='$(CROSS_COMPILE)' \ SDIRS='${SDIRS}' LIBRPATH='${INSTALLTOP}/lib' \
PERL='$(PERL)' ENGDIRS='$(ENGDIRS)' \ INSTALL_PREFIX='${INSTALL_PREFIX}' \
SDIRS='$(SDIRS)' LIBRPATH='$(INSTALLTOP)/$(LIBDIR)' \ INSTALLTOP='${INSTALLTOP}' OPENSSLDIR='${OPENSSLDIR}' \
INSTALL_PREFIX='$(INSTALL_PREFIX)' \ MAKEDEPEND='$$$${TOP}/util/domd $$$${TOP} -MD ${MAKEDEPPROG}' \
INSTALLTOP='$(INSTALLTOP)' OPENSSLDIR='$(OPENSSLDIR)' \ DEPFLAG='-DOPENSSL_NO_DEPRECATED ${DEPFLAG}' \
LIBDIR='$(LIBDIR)' \ MAKEDEPPROG='${MAKEDEPPROG}' \
MAKEDEPEND='$$$${TOP}/util/domd $$$${TOP} -MD $(MAKEDEPPROG)' \ SHARED_LDFLAGS='${SHARED_LDFLAGS}' \
DEPFLAG='-DOPENSSL_NO_DEPRECATED $(DEPFLAG)' \ KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' \
MAKEDEPPROG='$(MAKEDEPPROG)' \ EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' \
SHARED_LDFLAGS='$(SHARED_LDFLAGS)' \ SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' \
KRB5_INCLUDES='$(KRB5_INCLUDES)' LIBKRB5='$(LIBKRB5)' \ PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' \
ZLIB_INCLUDE='$(ZLIB_INCLUDE)' LIBZLIB='$(LIBZLIB)' \ CPUID_OBJ='${CPUID_OBJ}' \
EXE_EXT='$(EXE_EXT)' SHARED_LIBS='$(SHARED_LIBS)' \ BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' \
SHLIB_EXT='$(SHLIB_EXT)' SHLIB_TARGET='$(SHLIB_TARGET)' \ AES_ASM_OBJ='${AES_ASM_OBJ}' \
PEX_LIBS='$(PEX_LIBS)' EX_LIBS='$(EX_LIBS)' \ BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' \
CPUID_OBJ='$(CPUID_OBJ)' \ RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' \
BN_ASM='$(BN_ASM)' DES_ENC='$(DES_ENC)' \ SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' \
AES_ENC='$(AES_ENC)' CMLL_ENC='$(CMLL_ENC)' \ MD5_ASM_OBJ='${MD5_ASM_OBJ}' \
BF_ENC='$(BF_ENC)' CAST_ENC='$(CAST_ENC)' \ RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' \
RC4_ENC='$(RC4_ENC)' RC5_ENC='$(RC5_ENC)' \ FIPSLIBDIR='${FIPSLIBDIR}' FIPSCANLIB='${FIPSCANLIB}' \
SHA1_ASM_OBJ='$(SHA1_ASM_OBJ)' \ FIPSCANISTERINTERNAL='${FIPSCANISTERINTERNAL}' \
MD5_ASM_OBJ='$(MD5_ASM_OBJ)' \ FIPS_EX_OBJ='${FIPS_EX_OBJ}' \
RMD160_ASM_OBJ='$(RMD160_ASM_OBJ)' \
WP_ASM_OBJ='$(WP_ASM_OBJ)' \
MODES_ASM_OBJ='$(MODES_ASM_OBJ)' \
ENGINES_ASM_OBJ='$(ENGINES_ASM_OBJ)' \
PERLASM_SCHEME='$(PERLASM_SCHEME)' \
FIPSLIBDIR='${FIPSLIBDIR}' \
FIPSDIR='${FIPSDIR}' \
FIPSCANLIB="$${FIPSCANLIB:-$(FIPSCANLIB)}" \
THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES= THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
# MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors, # MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors,
# which in turn eliminates ambiguities in variable treatment with -e. # which in turn eliminates ambiguities in variable treatment with -e.
@ -259,54 +246,120 @@ BUILD_CMD= if [ -d "$$dir" ]; then \
fi fi
RECURSIVE_BUILD_CMD=for dir in $(DIRS); do $(BUILD_CMD); done RECURSIVE_BUILD_CMD=for dir in $(DIRS); do $(BUILD_CMD); done
BUILD_ONE_CMD=\ BUILD_ONE_CMD=\
if expr " $(DIRS) " : ".* $$dir " >/dev/null 2>&1; then \ if echo " $(DIRS) " | grep " $$dir " >/dev/null 2>/dev/null; then \
$(BUILD_CMD); \ $(BUILD_CMD); \
fi fi
reflect: reflect:
@[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV) @[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)
sub_all: build_all FIPS_EX_OBJ= ../crypto/aes/aes_cfb.o \
../crypto/aes/aes_ecb.o \
../crypto/aes/aes_ofb.o \
../crypto/bn/bn_add.o \
../crypto/bn/bn_blind.o \
../crypto/bn/bn_ctx.o \
../crypto/bn/bn_div.o \
../crypto/bn/bn_exp2.o \
../crypto/bn/bn_exp.o \
../crypto/bn/bn_gcd.o \
../crypto/bn/bn_lib.o \
../crypto/bn/bn_mod.o \
../crypto/bn/bn_mont.o \
../crypto/bn/bn_mul.o \
../crypto/bn/bn_prime.o \
../crypto/bn/bn_rand.o \
../crypto/bn/bn_recp.o \
../crypto/bn/bn_shift.o \
../crypto/bn/bn_sqr.o \
../crypto/bn/bn_word.o \
../crypto/bn/bn_x931p.o \
../crypto/buffer/buf_str.o \
../crypto/cryptlib.o \
../crypto/des/cfb64ede.o \
../crypto/des/cfb64enc.o \
../crypto/des/cfb_enc.o \
../crypto/des/ecb3_enc.o \
../crypto/des/ecb_enc.o \
../crypto/des/ofb64ede.o \
../crypto/des/ofb64enc.o \
../crypto/des/fcrypt.o \
../crypto/des/set_key.o \
../crypto/dsa/dsa_utl.o \
../crypto/dsa/dsa_sign.o \
../crypto/dsa/dsa_vrf.o \
../crypto/err/err.o \
../crypto/evp/digest.o \
../crypto/evp/enc_min.o \
../crypto/evp/e_aes.o \
../crypto/evp/e_des3.o \
../crypto/evp/p_sign.o \
../crypto/evp/p_verify.o \
../crypto/mem_clr.o \
../crypto/mem.o \
../crypto/rand/md_rand.o \
../crypto/rand/rand_egd.o \
../crypto/rand/randfile.o \
../crypto/rand/rand_lib.o \
../crypto/rand/rand_os2.o \
../crypto/rand/rand_unix.o \
../crypto/rand/rand_win.o \
../crypto/rsa/rsa_lib.o \
../crypto/rsa/rsa_none.o \
../crypto/rsa/rsa_oaep.o \
../crypto/rsa/rsa_pk1.o \
../crypto/rsa/rsa_pss.o \
../crypto/rsa/rsa_ssl.o \
../crypto/rsa/rsa_x931.o \
../crypto/sha/sha1dgst.o \
../crypto/sha/sha256.o \
../crypto/sha/sha512.o \
../crypto/uid.o
sub_all: build_all
build_all: build_libs build_apps build_tests build_tools build_all: build_libs build_apps build_tests build_tools
build_libs: build_libcrypto build_libssl openssl.pc build_libs: build_crypto build_fips build_ssl build_shared build_engines
build_libcrypto: build_crypto build_engines libcrypto.pc
build_libssl: build_ssl libssl.pc
build_crypto: build_crypto:
@dir=crypto; target=all; $(BUILD_ONE_CMD) if [ -n "$(FIPSCANLIB)" ]; then \
build_ssl: build_crypto EXCL_OBJ='$(AES_ASM_OBJ) $(BN_ASM) $(DES_ENC) $(CPUID_OBJ) $(SHA1_ASM_OBJ) $(FIPS_EX_OBJ)' ; export EXCL_OBJ ; \
ARX='$(PERL) $${TOP}/util/arx.pl $(AR)' ; \
else \
ARX='${AR}' ; \
fi ; export ARX ; \
dir=crypto; target=all; $(BUILD_ONE_CMD)
build_fips:
@dir=fips; target=all; [ -z "$(FIPSCANLIB)" ] || $(BUILD_ONE_CMD)
build_ssl:
@dir=ssl; target=all; $(BUILD_ONE_CMD) @dir=ssl; target=all; $(BUILD_ONE_CMD)
build_engines: build_crypto build_engines:
@dir=engines; target=all; $(BUILD_ONE_CMD) @dir=engines; target=all; $(BUILD_ONE_CMD)
build_apps: build_libs build_apps:
@dir=apps; target=all; $(BUILD_ONE_CMD) @dir=apps; target=all; $(BUILD_ONE_CMD)
build_tests: build_libs build_tests:
@dir=test; target=all; $(BUILD_ONE_CMD) @dir=test; target=all; $(BUILD_ONE_CMD)
build_tools: build_libs build_tools:
@dir=tools; target=all; $(BUILD_ONE_CMD) @dir=tools; target=all; $(BUILD_ONE_CMD)
all_testapps: build_libs build_testapps all_testapps: build_libs build_testapps
build_testapps: build_testapps:
@dir=crypto; target=testapps; $(BUILD_ONE_CMD) @dir=crypto; target=testapps; $(BUILD_ONE_CMD)
fips_premain_dso$(EXE_EXT): libcrypto.a build_shared: $(SHARED_LIBS)
[ -z "$(FIPSCANLIB)" ] || $(CC) $(CFLAG) -Iinclude \ libcrypto$(SHLIB_EXT): libcrypto.a $(SHARED_FIPS)
-DFINGERPRINT_PREMAIN_DSO_LOAD -o $@ \
$(FIPSLIBDIR)fips_premain.c $(FIPSLIBDIR)fipscanister.o \
libcrypto.a $(EX_LIBS)
libcrypto$(SHLIB_EXT): libcrypto.a fips_premain_dso$(EXE_EXT)
@if [ "$(SHLIB_TARGET)" != "" ]; then \ @if [ "$(SHLIB_TARGET)" != "" ]; then \
if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \ if [ "$(FIPSCANLIB)" = "libfips" ]; then \
FIPSLD_LIBCRYPTO=libcrypto.a ; \ $(ARD) libcrypto.a fipscanister.o ; \
FIPSLD_CC="$(CC)"; CC=$(FIPSDIR)/bin/fipsld; \ $(MAKE) SHLIBDIRS='crypto' SHLIBDEPS='-lfips' build-shared; \
export CC FIPSLD_CC FIPSLD_LIBCRYPTO; \ $(AR) libcrypto.a fips/fipscanister.o ; \
fi; \ else \
$(MAKE) -e SHLIBDIRS=crypto CC="$${CC:-$(CC)}" build-shared && \ if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
(touch -c fips_premain_dso$(EXE_EXT) || :); \ FIPSLD_CC=$(CC); CC=fips/fipsld; \
export CC FIPSLD_CC; \
fi; \
$(MAKE) -e SHLIBDIRS='crypto' build-shared; \
fi \
else \ else \
echo "There's no support for shared libraries on this platform" >&2; \ echo "There's no support for shared libraries on this platform" >&2; \
exit 1; \ exit 1; \
@ -314,12 +367,32 @@ libcrypto$(SHLIB_EXT): libcrypto.a fips_premain_dso$(EXE_EXT)
libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a
@if [ "$(SHLIB_TARGET)" != "" ]; then \ @if [ "$(SHLIB_TARGET)" != "" ]; then \
$(MAKE) SHLIBDIRS=ssl SHLIBDEPS='-lcrypto' build-shared; \ shlibdeps=-lcrypto; \
[ "$(FIPSCANLIB)" = "libfips" ] && shlibdeps="$$shlibdeps -lfips"; \
$(MAKE) SHLIBDIRS=ssl SHLIBDEPS="$$shlibdeps" build-shared; \
else \
echo "There's no support for shared libraries on this platform" >&2 ; \
exit 1; \
fi
fips/fipscanister.o: build_fips
libfips$(SHLIB_EXT): fips/fipscanister.o
@if [ "$(SHLIB_TARGET)" != "" ]; then \
FIPSLD_CC=$(CC); CC=fips/fipsld; export CC FIPSLD_CC; \
$(MAKE) -f Makefile.shared -e $(BUILDENV) \
CC=$${CC} LIBNAME=fips THIS=$@ \
LIBEXTRAS=fips/fipscanister.o \
LIBDEPS="$(EX_LIBS)" \
LIBVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} \
link_o.$(SHLIB_TARGET) || { rm -f $@; exit 1; } \
else \ else \
echo "There's no support for shared libraries on this platform" >&2; \ echo "There's no support for shared libraries on this platform" >&2; \
exit 1; \ exit 1; \
fi fi
libfips.a:
dir=fips; target=all; $(BUILD_ONE_CMD)
clean-shared: clean-shared:
@set -e; for i in $(SHLIBDIRS); do \ @set -e; for i in $(SHLIBDIRS); do \
if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \ if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
@ -335,10 +408,10 @@ clean-shared:
done done
link-shared: link-shared:
@ set -e; for i in $(SHLIBDIRS); do \ @ set -e; for i in ${SHLIBDIRS}; do \
$(MAKE) -f $(HERE)/Makefile.shared -e $(BUILDENV) \ $(MAKE) -f $(HERE)/Makefile.shared -e $(BUILDENV) \
LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \ LIBNAME=$$i LIBVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} \
LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \ LIBCOMPATVERSIONS=";${SHLIB_VERSION_HISTORY}" \
symlink.$(SHLIB_TARGET); \ symlink.$(SHLIB_TARGET); \
libs="$$libs -l$$i"; \ libs="$$libs -l$$i"; \
done done
@ -346,13 +419,13 @@ link-shared:
build-shared: do_$(SHLIB_TARGET) link-shared build-shared: do_$(SHLIB_TARGET) link-shared
do_$(SHLIB_TARGET): do_$(SHLIB_TARGET):
@ set -e; libs='-L. $(SHLIBDEPS)'; for i in $(SHLIBDIRS); do \ @ set -e; libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
if [ "$$i" = "ssl" -a -n "$(LIBKRB5)" ]; then \ if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
libs="$(LIBKRB5) $$libs"; \ libs="$(LIBKRB5) $$libs"; \
fi; \ fi; \
$(CLEARENV) && $(MAKE) -f Makefile.shared -e $(BUILDENV) \ $(CLEARENV) && $(MAKE) -f Makefile.shared -e $(BUILDENV) \
LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \ LIBNAME=$$i LIBVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} \
LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \ LIBCOMPATVERSIONS=";${SHLIB_VERSION_HISTORY}" \
LIBDEPS="$$libs $(EX_LIBS)" \ LIBDEPS="$$libs $(EX_LIBS)" \
link_a.$(SHLIB_TARGET); \ link_a.$(SHLIB_TARGET); \
libs="-l$$i $$libs"; \ libs="-l$$i $$libs"; \
@ -361,43 +434,40 @@ do_$(SHLIB_TARGET):
libcrypto.pc: Makefile libcrypto.pc: Makefile
@ ( echo 'prefix=$(INSTALLTOP)'; \ @ ( echo 'prefix=$(INSTALLTOP)'; \
echo 'exec_prefix=$${prefix}'; \ echo 'exec_prefix=$${prefix}'; \
echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \ echo 'libdir=$${exec_prefix}/lib'; \
echo 'includedir=$${prefix}/include'; \ echo 'includedir=$${prefix}/include'; \
echo ''; \ echo ''; \
echo 'Name: OpenSSL-libcrypto'; \ echo 'Name: OpenSSL-libcrypto'; \
echo 'Description: OpenSSL cryptography library'; \ echo 'Description: OpenSSL cryptography library'; \
echo 'Version: '$(VERSION); \ echo 'Version: '$(VERSION); \
echo 'Requires: '; \ echo 'Requires: '; \
echo 'Libs: -L$${libdir} -lcrypto'; \ echo 'Libs: -L$${libdir} -lcrypto $(EX_LIBS)'; \
echo 'Libs.private: $(EX_LIBS)'; \
echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc
libssl.pc: Makefile libssl.pc: Makefile
@ ( echo 'prefix=$(INSTALLTOP)'; \ @ ( echo 'prefix=$(INSTALLTOP)'; \
echo 'exec_prefix=$${prefix}'; \ echo 'exec_prefix=$${prefix}'; \
echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \ echo 'libdir=$${exec_prefix}/lib'; \
echo 'includedir=$${prefix}/include'; \ echo 'includedir=$${prefix}/include'; \
echo ''; \ echo ''; \
echo 'Name: OpenSSL'; \ echo 'Name: OpenSSL'; \
echo 'Description: Secure Sockets Layer and cryptography libraries'; \ echo 'Description: Secure Sockets Layer and cryptography libraries'; \
echo 'Version: '$(VERSION); \ echo 'Version: '$(VERSION); \
echo 'Requires: '; \ echo 'Requires: '; \
echo 'Libs: -L$${libdir} -lssl -lcrypto'; \ echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
echo 'Libs.private: $(EX_LIBS)'; \
echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
openssl.pc: Makefile openssl.pc: Makefile
@ ( echo 'prefix=$(INSTALLTOP)'; \ @ ( echo 'prefix=$(INSTALLTOP)'; \
echo 'exec_prefix=$${prefix}'; \ echo 'exec_prefix=$${prefix}'; \
echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \ echo 'libdir=$${exec_prefix}/lib'; \
echo 'includedir=$${prefix}/include'; \ echo 'includedir=$${prefix}/include'; \
echo ''; \ echo ''; \
echo 'Name: OpenSSL'; \ echo 'Name: OpenSSL'; \
echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \ echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
echo 'Version: '$(VERSION); \ echo 'Version: '$(VERSION); \
echo 'Requires: '; \ echo 'Requires: '; \
echo 'Libs: -L$${libdir} -lssl -lcrypto'; \ echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
echo 'Libs.private: $(EX_LIBS)'; \
echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
Makefile: Makefile.org Configure config Makefile: Makefile.org Configure config
@ -406,7 +476,7 @@ Makefile: Makefile.org Configure config
@false @false
libclean: libclean:
rm -f *.map *.so *.so.* *.dylib *.dll engines/*.so engines/*.dll engines/*.dylib *.a engines/*.a */lib */*/lib rm -f *.map *.so *.so.* *.dll engines/*.so engines/*.dll *.a engines/*.a */lib */*/lib
clean: libclean clean: libclean
rm -f shlib/*.o *.o core a.out fluff rehash.time testlog make.log cctest cctest.c rm -f shlib/*.o *.o core a.out fluff rehash.time testlog make.log cctest cctest.c
@ -435,36 +505,30 @@ links:
gentests: gentests:
@(cd test && echo "generating dummy tests (if needed)..." && \ @(cd test && echo "generating dummy tests (if needed)..." && \
$(CLEARENV) && $(MAKE) -e $(BUILDENV) TESTS='$(TESTS)' OPENSSL_DEBUG_MEMORY=on generate ); $(CLEARENV) && $(MAKE) -e $(BUILDENV) TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on generate );
dclean: dclean:
rm -rf *.bak include/openssl certs/.0 rm -f *.bak
@set -e; target=dclean; $(RECURSIVE_BUILD_CMD) @set -e; target=dclean; $(RECURSIVE_BUILD_CMD)
rehash: rehash.time rehash: rehash.time
rehash.time: certs apps rehash.time: certs
@if [ -z "$(CROSS_COMPILE)" ]; then \ @(OPENSSL="`pwd`/util/opensslwrap.sh"; \
(OPENSSL="`pwd`/util/opensslwrap.sh"; \ OPENSSL_DEBUG_MEMORY=on; \
[ -x "apps/openssl.exe" ] && OPENSSL="apps/openssl.exe" || :; \ export OPENSSL OPENSSL_DEBUG_MEMORY; \
OPENSSL_DEBUG_MEMORY=on; \ $(PERL) tools/c_rehash certs)
export OPENSSL OPENSSL_DEBUG_MEMORY; \ touch rehash.time
$(PERL) tools/c_rehash certs/demo) && \
touch rehash.time; \
else :; fi
test: tests test: tests
tests: rehash tests: rehash
@(cd test && echo "testing..." && \ @(cd test && echo "testing..." && \
$(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. TESTS='$(TESTS)' OPENSSL_DEBUG_MEMORY=on OPENSSL_CONF=../apps/openssl.cnf tests ); $(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on tests );
OPENSSL_CONF=apps/openssl.cnf util/opensslwrap.sh version -a util/opensslwrap.sh version -a
report: report:
@$(PERL) util/selftest.pl @$(PERL) util/selftest.pl
update: errors stacks util/libeay.num util/ssleay.num TABLE
@set -e; target=update; $(RECURSIVE_BUILD_CMD)
depend: depend:
@set -e; target=depend; $(RECURSIVE_BUILD_CMD) @set -e; target=depend; $(RECURSIVE_BUILD_CMD)
@ -476,9 +540,9 @@ tags:
find . -name '[^.]*.[ch]' | xargs etags -a find . -name '[^.]*.[ch]' | xargs etags -a
errors: errors:
$(PERL) util/ck_errf.pl -strict */*.c */*/*.c
$(PERL) util/mkerr.pl -recurse -write $(PERL) util/mkerr.pl -recurse -write
(cd engines; $(MAKE) PERL=$(PERL) errors) (cd engines; $(MAKE) PERL=$(PERL) errors)
$(PERL) util/ck_errf.pl */*.c */*/*.c
stacks: stacks:
$(PERL) util/mkstack.pl -write $(PERL) util/mkstack.pl -write
@ -489,52 +553,66 @@ util/libeay.num::
util/ssleay.num:: util/ssleay.num::
$(PERL) util/mkdef.pl ssl update $(PERL) util/mkdef.pl ssl update
crypto/objects/obj_dat.h: crypto/objects/obj_dat.pl crypto/objects/obj_mac.h
$(PERL) crypto/objects/obj_dat.pl crypto/objects/obj_mac.h crypto/objects/obj_dat.h
crypto/objects/obj_mac.h: crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num
$(PERL) crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num crypto/objects/obj_mac.h
apps/openssl-vms.cnf: apps/openssl.cnf
$(PERL) VMS/VMSify-conf.pl < apps/openssl.cnf > apps/openssl-vms.cnf
crypto/bn/bn_prime.h: crypto/bn/bn_prime.pl
$(PERL) crypto/bn/bn_prime.pl >crypto/bn/bn_prime.h
TABLE: Configure TABLE: Configure
(echo 'Output of `Configure TABLE'"':"; \ (echo 'Output of `Configure TABLE'"':"; \
$(PERL) Configure TABLE) > TABLE $(PERL) Configure TABLE) > TABLE
update: errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h apps/openssl-vms.cnf crypto/bn/bn_prime.h TABLE depend
# Build distribution tar-file. As the list of files returned by "find" is # Build distribution tar-file. As the list of files returned by "find" is
# pretty long, on several platforms a "too many arguments" error or similar # pretty long, on several platforms a "too many arguments" error or similar
# would occur. Therefore the list of files is temporarily stored into a file # would occur. Therefore the list of files is temporarily stored into a file
# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal # and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal
# tar does not support the --files-from option. # tar does not support the --files-from option.
TAR_COMMAND=$(TAR) $(TARFLAGS) --files-from $(TARFILE).list \ tar:
--owner 0 --group 0 \
--transform 's|^|$(NAME)/|' \
-cvf -
$(TARFILE).list:
find * \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \
\! -name '*.so' \! -name '*.so.*' \! -name 'openssl' \
\( \! -name '*test' -o -name bctest -o -name pod2mantest \) \
\! -name '.#*' \! -name '*~' \! -type l \
| sort > $(TARFILE).list
tar: $(TARFILE).list
find . -type d -print | xargs chmod 755 find . -type d -print | xargs chmod 755
find . -type f -print | xargs chmod a+r find . -type f -print | xargs chmod a+r
find . -type f -perm -0100 -print | xargs chmod a+x find . -type f -perm -0100 -print | xargs chmod a+x
$(TAR_COMMAND) | gzip --best > $(TARFILE).gz find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE | sort > ../$(TARFILE).list; \
rm -f $(TARFILE).list $(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list -cvf - | \
ls -l $(TARFILE).gz tardy --user_number=0 --user_name=openssl \
--group_number=0 --group_name=openssl \
--prefix=openssl-fips-$(VERSION) - |\
gzip --best >../$(TARFILE).gz; \
rm -f ../$(TARFILE).list; \
ls -l ../$(TARFILE).gz
tar-snap: $(TARFILE).list tar-snap:
$(TAR_COMMAND) > $(TARFILE) @$(TAR) $(TARFLAGS) -cvf - \
rm -f $(TARFILE).list `find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \! -name '*.so' \! -name '*.so.*' \! -name 'openssl' \! -name '*test' \! -name '.#*' \! -name '*~' | sort` |\
ls -l $(TARFILE) tardy --user_number=0 --user_name=openssl \
--group_number=0 --group_name=openssl \
--prefix=openssl-$(VERSION) - > ../$(TARFILE);\
ls -l ../$(TARFILE)
dist: dist:
$(PERL) Configure dist $(PERL) Configure dist
@$(MAKE) SDIRS='$(SDIRS)' clean @$(MAKE) dist_pem_h
@$(MAKE) TAR='$(TAR)' TARFLAGS='$(TARFLAGS)' $(DISTTARVARS) tar @$(MAKE) SDIRS='${SDIRS}' clean
@$(MAKE) TAR='${TAR}' TARFLAGS='${TARFLAGS}' tar
install: all install_docs install_sw dist_pem_h:
(cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
install: all install_sw
install_sw: install_sw:
@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \ @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \ $(INSTALL_PREFIX)$(INSTALLTOP)/lib \
$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines \ $(INSTALL_PREFIX)$(INSTALLTOP)/lib/engines \
$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig \ $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig \
$(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \ $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
$(INSTALL_PREFIX)$(OPENSSLDIR)/misc \ $(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
$(INSTALL_PREFIX)$(OPENSSLDIR)/certs \ $(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
@ -545,14 +623,14 @@ install_sw:
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \ chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
done; done;
@set -e; target=install; $(RECURSIVE_BUILD_CMD) @set -e; target=install; $(RECURSIVE_BUILD_CMD)
@set -e; liblist="$(LIBS)"; for i in $$liblist ;\ @set -e; for i in $(LIBS) ;\
do \ do \
if [ -f "$$i" ]; then \ if [ -f "$$i" ]; then \
( echo installing $$i; \ ( echo installing $$i; \
cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
$(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ $(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i ); \ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i ); \
fi; \ fi; \
done; done;
@set -e; if [ -n "$(SHARED_LIBS)" ]; then \ @set -e; if [ -n "$(SHARED_LIBS)" ]; then \
@ -562,32 +640,22 @@ install_sw:
if [ -f "$$i" -o -f "$$i.a" ]; then \ if [ -f "$$i" -o -f "$$i.a" ]; then \
( echo installing $$i; \ ( echo installing $$i; \
if [ "$(PLATFORM)" != "Cygwin" ]; then \ if [ "$(PLATFORM)" != "Cygwin" ]; then \
cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \
else \ else \
c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \ c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \
cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \ cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \ chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \
cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \
fi ); \ fi ); \
if expr $(PLATFORM) : 'mingw' > /dev/null; then \
( case $$i in \
*crypto*) i=libeay32.dll;; \
*ssl*) i=ssleay32.dll;; \
esac; \
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 ); \
fi; \
fi; \ fi; \
done; \ done; \
( here="`pwd`"; \ ( here="`pwd`"; \
cd $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR); \ cd $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
$(MAKE) -f $$here/Makefile HERE="$$here" link-shared ); \ $(MAKE) -f $$here/Makefile HERE="$$here" link-shared ); \
if [ "$(INSTALLTOP)" != "/usr" ]; then \ if [ "$(INSTALLTOP)" != "/usr" ]; then \
echo 'OpenSSL shared libraries have been installed in:'; \ echo 'OpenSSL shared libraries have been installed in:'; \
@ -596,33 +664,12 @@ install_sw:
sed -e '1,/^$$/d' doc/openssl-shared.txt; \ sed -e '1,/^$$/d' doc/openssl-shared.txt; \
fi; \ fi; \
fi fi
cp libcrypto.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig cp libcrypto.pc $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libcrypto.pc chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig/libcrypto.pc
cp libssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig cp libssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libssl.pc chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig/libssl.pc
cp openssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig cp openssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig/openssl.pc
install_html_docs:
here="`pwd`"; \
for subdir in apps crypto ssl; do \
mkdir -p $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \
for i in doc/$$subdir/*.pod; do \
fn=`basename $$i .pod`; \
echo "installing html/$$fn.$(HTMLSUFFIX)"; \
cat $$i \
| sed -r 's/L<([^)]*)(\([0-9]\))?\|([^)]*)(\([0-9]\))?>/L<\1|\3>/g' \
| pod2html --podroot=doc --htmlroot=.. --podpath=apps:crypto:ssl \
| sed -r 's/<!DOCTYPE.*//g' \
> $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir/$$fn.$(HTMLSUFFIX); \
$(PERL) util/extract-names.pl < $$i | \
grep -v $$filecase "^$$fn\$$" | \
(cd $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \
while read n; do \
PLATFORM=$(PLATFORM) $$here/util/point.sh $$fn.$(HTMLSUFFIX) "$$n".$(HTMLSUFFIX); \
done); \
done; \
done
install_docs: install_docs:
@$(PERL) $(TOP)/util/mkdir-p.pl \ @$(PERL) $(TOP)/util/mkdir-p.pl \
@ -630,7 +677,7 @@ install_docs:
$(INSTALL_PREFIX)$(MANDIR)/man3 \ $(INSTALL_PREFIX)$(MANDIR)/man3 \
$(INSTALL_PREFIX)$(MANDIR)/man5 \ $(INSTALL_PREFIX)$(MANDIR)/man5 \
$(INSTALL_PREFIX)$(MANDIR)/man7 $(INSTALL_PREFIX)$(MANDIR)/man7
@pod2man="`cd ./util; ./pod2mantest $(PERL)`"; \ @pod2man="`cd util; ./pod2mantest $(PERL)`"; \
here="`pwd`"; \ here="`pwd`"; \
filecase=; \ filecase=; \
if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" -o "$(PLATFORM)" = "mingw" ]; then \ if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" -o "$(PLATFORM)" = "mingw" ]; then \
@ -650,7 +697,7 @@ install_docs:
(grep -v "[ ]"; true) | \ (grep -v "[ ]"; true) | \
(cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \ (cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \
while read n; do \ while read n; do \
PLATFORM=$(PLATFORM) $$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \ $$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \
done); \ done); \
done; \ done; \
set -e; for i in doc/crypto/*.pod doc/ssl/*.pod; do \ set -e; for i in doc/crypto/*.pod doc/ssl/*.pod; do \
@ -667,7 +714,7 @@ install_docs:
(grep -v "[ ]"; true) | \ (grep -v "[ ]"; true) | \
(cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \ (cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \
while read n; do \ while read n; do \
PLATFORM=$(PLATFORM) $$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \ $$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \
done); \ done); \
done done

View File

@ -14,8 +14,6 @@ CFLAGS=$(CFLAG)
LDFLAGS= LDFLAGS=
SHARED_LDFLAGS= SHARED_LDFLAGS=
NM=nm
# LIBNAME contains just the name of the library, without prefix ("lib" # LIBNAME contains just the name of the library, without prefix ("lib"
# on Unix, "cyg" for certain forms under Cygwin...) or suffix (.a, .so, # on Unix, "cyg" for certain forms under Cygwin...) or suffix (.a, .so,
# .dll, ...). This one MUST have a value when using this makefile to # .dll, ...). This one MUST have a value when using this makefile to
@ -93,7 +91,7 @@ LINK_APP= \
( $(SET_X); \ ( $(SET_X); \
LIBDEPS="$${LIBDEPS:-$(LIBDEPS)}"; \ LIBDEPS="$${LIBDEPS:-$(LIBDEPS)}"; \
LDCMD="$${LDCMD:-$(CC)}"; LDFLAGS="$${LDFLAGS:-$(CFLAGS)}"; \ LDCMD="$${LDCMD:-$(CC)}"; LDFLAGS="$${LDFLAGS:-$(CFLAGS)}"; \
LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \ 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'`; \ LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \ LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
$${LDCMD} $${LDFLAGS} -o $${APPNAME:=$(APPNAME)} $(OBJECTS) $${LIBDEPS} ) $${LDCMD} $${LDFLAGS} -o $${APPNAME:=$(APPNAME)} $(OBJECTS) $${LIBDEPS} )
@ -103,7 +101,7 @@ LINK_SO= \
LIBDEPS="$${LIBDEPS:-$(LIBDEPS)}"; \ LIBDEPS="$${LIBDEPS:-$(LIBDEPS)}"; \
SHAREDCMD="$${SHAREDCMD:-$(CC)}"; \ SHAREDCMD="$${SHAREDCMD:-$(CC)}"; \
SHAREDFLAGS="$${SHAREDFLAGS:-$(CFLAGS) $(SHARED_LDFLAGS)}"; \ SHAREDFLAGS="$${SHAREDFLAGS:-$(CFLAGS) $(SHARED_LDFLAGS)}"; \
LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \ 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'`; \ LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \ LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
$${SHAREDCMD} $${SHAREDFLAGS} \ $${SHAREDCMD} $${SHAREDFLAGS} \
@ -135,7 +133,7 @@ LINK_SO_A_VIA_O= \
ALL=$$ALLSYMSFLAGS; ALLSYMSFLAGS=; NOALLSYMSFLAGS=; \ ALL=$$ALLSYMSFLAGS; ALLSYMSFLAGS=; NOALLSYMSFLAGS=; \
( $(SET_X); \ ( $(SET_X); \
ld $(LDFLAGS) -r -o lib$(LIBNAME).o $$ALL lib$(LIBNAME).a $(LIBEXTRAS) ); \ ld $(LDFLAGS) -r -o lib$(LIBNAME).o $$ALL lib$(LIBNAME).a $(LIBEXTRAS) ); \
$(LINK_SO) && rm -f lib$(LIBNAME).o $(LINK_SO) && rm -f $(LIBNAME).o
LINK_SO_A_UNPACKED= \ LINK_SO_A_UNPACKED= \
UNPACKDIR=link_tmp.$$$$; rm -rf $$UNPACKDIR; mkdir $$UNPACKDIR; \ UNPACKDIR=link_tmp.$$$$; rm -rf $$UNPACKDIR; mkdir $$UNPACKDIR; \
@ -144,7 +142,7 @@ LINK_SO_A_UNPACKED= \
SHOBJECTS=$$UNPACKDIR/*.o; \ SHOBJECTS=$$UNPACKDIR/*.o; \
$(LINK_SO) && rm -rf $$UNPACKDIR $(LINK_SO) && rm -rf $$UNPACKDIR
DETECT_GNU_LD=($(CC) -Wl,-V /dev/null 2>&1 | grep '^GNU ld' )>/dev/null DETECT_GNU_LD=(${CC} -Wl,-V /dev/null 2>&1 | grep '^GNU ld' )>/dev/null
DO_GNU_SO=$(CALC_VERSIONS); \ DO_GNU_SO=$(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).so; \ SHLIB=lib$(LIBNAME).so; \
@ -170,19 +168,8 @@ link_a.gnu:
link_app.gnu: link_app.gnu:
@ $(DO_GNU_APP); $(LINK_APP) @ $(DO_GNU_APP); $(LINK_APP)
DO_BEOS_SO= 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_SUFFIX"
link_o.beos:
@ $(DO_BEOS_SO); $(LINK_SO_O)
link_a.beos:
@ $(DO_BEOS_SO); $(LINK_SO_A)
link_o.bsd: link_o.bsd:
@if $(DETECT_GNU_LD); then $(DO_GNU_SO); else \ @if ${DETECT_GNU_LD}; then $(DO_GNU_SO); else \
$(CALC_VERSIONS); \ $(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).so; \ SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \ SHLIB_SUFFIX=; \
@ -192,7 +179,7 @@ link_o.bsd:
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -nostdlib"; \ SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -nostdlib"; \
fi; $(LINK_SO_O) fi; $(LINK_SO_O)
link_a.bsd: link_a.bsd:
@if $(DETECT_GNU_LD); then $(DO_GNU_SO); else \ @if ${DETECT_GNU_LD}; then $(DO_GNU_SO); else \
$(CALC_VERSIONS); \ $(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).so; \ SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \ SHLIB_SUFFIX=; \
@ -202,34 +189,24 @@ link_a.bsd:
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -nostdlib"; \ SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -nostdlib"; \
fi; $(LINK_SO_A) fi; $(LINK_SO_A)
link_app.bsd: link_app.bsd:
@if $(DETECT_GNU_LD); then $(DO_GNU_APP); else \ @if ${DETECT_GNU_LD}; then $(DO_GNU_APP); else \
LDFLAGS="$(CFLAGS) -Wl,-rpath,$(LIBPATH)"; \ LDFLAGS="$(CFLAGS) -Wl,-rpath,$(LIBPATH)"; \
fi; $(LINK_APP) fi; $(LINK_APP)
# For Darwin AKA Mac OS/X (dyld) # For Darwin AKA Mac OS/X (dyld)
# Originally link_o.darwin produced .so, because it was hard-coded # link_o.darwin produces .so, because we let it use dso_dlfcn module,
# in dso_dlfcn module. At later point dso_dlfcn switched to .dylib # which has .so extension hard-coded. One can argue that one should
# extension in order to allow for run-time linking with vendor- # develop special dso module for MacOS X. At least manual encourages
# supplied shared libraries such as libz, so that link_o.darwin had # to use native NSModule(3) API and refers to dlfcn as termporary hack.
# to be harmonized with it. This caused minor controversy, because
# it was believed that dlopen can't be used to dynamically load
# .dylib-s, only so called bundle modules (ones linked with -bundle
# flag). The belief seems to be originating from pre-10.4 release,
# where dlfcn functionality was emulated by dlcompat add-on. In
# 10.4 dlopen was rewritten as native part of dyld and is documented
# to be capable of loading both dynamic libraries and bundles. In
# order to provide compatibility with pre-10.4 dlopen, modules are
# linked with -bundle flag, which makes .dylib extension misleading.
# It works, because dlopen is [and always was] extension-agnostic.
# Alternative to this heuristic approach is to develop specific
# MacOS X dso module relying on whichever "native" dyld interface.
link_o.darwin: link_o.darwin:
@ $(CALC_VERSIONS); \ @ $(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME); \ SHLIB=`expr "$$THIS" : '.*/\([^/\.]*\)\.'`; \
SHLIB_SUFFIX=.dylib; \ SHLIB=$${SHLIB:-lib$(LIBNAME)}; \
SHLIB_SUFFIX=`expr "$$THIS" : '.*\(\.[^\.]*\)$$'`; \
SHLIB_SUFFIX=$${SHLIB_SUFFIX:-.so}; \
ALLSYMSFLAGS='-all_load'; \ ALLSYMSFLAGS='-all_load'; \
NOALLSYMSFLAGS=''; \ NOALLSYMSFLAGS=''; \
SHAREDFLAGS="$(CFLAGS) `echo $(SHARED_LDFLAGS) | sed s/dynamiclib/bundle/`"; \ SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS)"; \
if [ -n "$(LIBVERSION)" ]; then \ if [ -n "$(LIBVERSION)" ]; then \
SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \ SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \
fi; \ fi; \
@ -250,7 +227,7 @@ link_a.darwin:
if [ -n "$$SHLIB_SOVER_NODOT" ]; then \ if [ -n "$$SHLIB_SOVER_NODOT" ]; then \
SHAREDFLAGS="$$SHAREDFLAGS -compatibility_version $$SHLIB_SOVER_NODOT"; \ SHAREDFLAGS="$$SHAREDFLAGS -compatibility_version $$SHLIB_SOVER_NODOT"; \
fi; \ fi; \
SHAREDFLAGS="$$SHAREDFLAGS -install_name $(INSTALLTOP)/$(LIBDIR)/$$SHLIB$(SHLIB_EXT)"; \ SHAREDFLAGS="$$SHAREDFLAGS -install_name ${INSTALLTOP}/lib/$$SHLIB${SHLIB_EXT}"; \
$(LINK_SO_A) $(LINK_SO_A)
link_app.darwin: # is there run-path on darwin? link_app.darwin: # is there run-path on darwin?
$(LINK_APP) $(LINK_APP)
@ -260,59 +237,40 @@ link_o.cygwin:
INHIBIT_SYMLINKS=yes; \ INHIBIT_SYMLINKS=yes; \
SHLIB=cyg$(LIBNAME); \ SHLIB=cyg$(LIBNAME); \
base=-Wl,--enable-auto-image-base; \ base=-Wl,--enable-auto-image-base; \
deffile=; \
if expr $(PLATFORM) : 'mingw' > /dev/null; then \ if expr $(PLATFORM) : 'mingw' > /dev/null; then \
SHLIB=$(LIBNAME)eay32; base=; \ SHLIB=$(LIBNAME)eay32; base=; \
if test -f $(LIBNAME)eay32.def; then \
deffile=$(LIBNAME)eay32.def; \
fi; \
fi; \ fi; \
SHLIB_SUFFIX=.dll; \ SHLIB_SUFFIX=.dll; \
LIBVERSION="$(LIBVERSION)"; \ LIBVERSION="$(LIBVERSION)"; \
SHLIB_SOVER=${LIBVERSION:+"-$(LIBVERSION)"}; \ SHLIB_SOVER=${LIBVERSION:+"-$(LIBVERSION)"}; \
ALLSYMSFLAGS='-Wl,--whole-archive'; \ ALLSYMSFLAGS='-Wl,--whole-archive'; \
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \ NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base $$deffile -Wl,-s,-Bsymbolic"; \ SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
$(LINK_SO_O) $(LINK_SO_O)
#for mingw target if def-file is in use dll-name should match library-name
link_a.cygwin: link_a.cygwin:
@ $(CALC_VERSIONS); \ @ $(CALC_VERSIONS); \
INHIBIT_SYMLINKS=yes; \ INHIBIT_SYMLINKS=yes; \
SHLIB=cyg$(LIBNAME); SHLIB_SOVER=-$(LIBVERSION); SHLIB_SUFFIX=.dll; \ SHLIB=cyg$(LIBNAME); \
dll_name=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; extras=; \
base=-Wl,--enable-auto-image-base; \ base=-Wl,--enable-auto-image-base; \
if expr $(PLATFORM) : 'mingw' > /dev/null; then \ if expr $(PLATFORM) : 'mingw' > /dev/null; then \
case $(LIBNAME) in \ SHLIB=$(LIBNAME)eay32; \
crypto) SHLIB=libeay;; \ base=; [ $(LIBNAME) = "crypto" ] && base=-Wl,--image-base,0x63000000; \
ssl) SHLIB=ssleay;; \
esac; \
SHLIB_SOVER=32; \
extras="$(LIBNAME).def"; \
$(PERL) util/mkdef.pl 32 $$SHLIB > $$extras; \
base=; [ $(LIBNAME) = "crypto" ] && base=-Wl,--image-base,0x63000000; \
fi; \ fi; \
dll_name=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \ SHLIB_SUFFIX=.dll; \
$(PERL) util/mkrc.pl $$dll_name | \ SHLIB_SOVER=-$(LIBVERSION); \
$(CROSS_COMPILE)windres -o rc.o; \
extras="$$extras rc.o"; \
ALLSYMSFLAGS='-Wl,--whole-archive'; \ ALLSYMSFLAGS='-Wl,--whole-archive'; \
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \ NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-s,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a $$extras"; \ SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
[ -f apps/$$dll_name ] && rm apps/$$dll_name; \ [ -f apps/$$SHLIB$$SHLIB_SUFFIX ] && rm apps/$$SHLIB$$SHLIB_SUFFIX; \
[ -f test/$$dll_name ] && rm test/$$dll_name; \ [ -f test/$$SHLIB$$SHLIB_SUFFIX ] && rm test/$$SHLIB$$SHLIB_SUFFIX; \
$(LINK_SO_A) || exit 1; \ $(LINK_SO_A) || exit 1; \
rm $$extras; \ cp -p $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX apps/; \
cp -p $$dll_name apps/; \ cp -p $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX test/
cp -p $$dll_name test/
link_app.cygwin: link_app.cygwin:
@if expr "$(CFLAGS)" : '.*OPENSSL_USE_APPLINK' > /dev/null; then \
LIBDEPS="$(TOP)/crypto/applink.o $${LIBDEPS:-$(LIBDEPS)}"; \
export LIBDEPS; \
fi; \
$(LINK_APP) $(LINK_APP)
link_o.alpha-osf1: link_o.alpha-osf1:
@ if $(DETECT_GNU_LD); then \ @ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \ $(DO_GNU_SO); \
else \ else \
SHLIB=lib$(LIBNAME).so; \ SHLIB=lib$(LIBNAME).so; \
@ -333,7 +291,7 @@ link_o.alpha-osf1:
fi; \ fi; \
$(LINK_SO_O) $(LINK_SO_O)
link_a.alpha-osf1: link_a.alpha-osf1:
@ if $(DETECT_GNU_LD); then \ @ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \ $(DO_GNU_SO); \
else \ else \
SHLIB=lib$(LIBNAME).so; \ SHLIB=lib$(LIBNAME).so; \
@ -354,7 +312,7 @@ link_a.alpha-osf1:
fi; \ fi; \
$(LINK_SO_A) $(LINK_SO_A)
link_app.alpha-osf1: link_app.alpha-osf1:
@if $(DETECT_GNU_LD); then \ @if ${DETECT_GNU_LD}; then \
$(DO_GNU_APP); \ $(DO_GNU_APP); \
else \ else \
LDFLAGS="$(CFLAGS) -rpath $(LIBRPATH)"; \ LDFLAGS="$(CFLAGS) -rpath $(LIBRPATH)"; \
@ -362,7 +320,7 @@ link_app.alpha-osf1:
$(LINK_APP) $(LINK_APP)
link_o.solaris: link_o.solaris:
@ if $(DETECT_GNU_LD); then \ @ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \ $(DO_GNU_SO); \
else \ else \
$(CALC_VERSIONS); \ $(CALC_VERSIONS); \
@ -376,12 +334,12 @@ link_o.solaris:
fi; \ fi; \
$(LINK_SO_O) $(LINK_SO_O)
link_a.solaris: link_a.solaris:
@ if $(DETECT_GNU_LD); then \ @ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \ $(DO_GNU_SO); \
else \ else \
$(CALC_VERSIONS); \ $(CALC_VERSIONS); \
MINUSZ='-z '; \ MINUSZ='-z '; \
($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSZ='-Wl,-z,'; \ (${CC} -v 2>&1 | grep gcc) > /dev/null && MINUSZ='-Wl,-z,'; \
SHLIB=lib$(LIBNAME).so; \ SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=;\ SHLIB_SUFFIX=;\
ALLSYMSFLAGS="$${MINUSZ}allextract"; \ ALLSYMSFLAGS="$${MINUSZ}allextract"; \
@ -390,7 +348,7 @@ link_a.solaris:
fi; \ fi; \
$(LINK_SO_A) $(LINK_SO_A)
link_app.solaris: link_app.solaris:
@ if $(DETECT_GNU_LD); then \ @ if ${DETECT_GNU_LD}; then \
$(DO_GNU_APP); \ $(DO_GNU_APP); \
else \ else \
LDFLAGS="$(CFLAGS) -R $(LIBRPATH)"; \ LDFLAGS="$(CFLAGS) -R $(LIBRPATH)"; \
@ -399,7 +357,7 @@ link_app.solaris:
# OpenServer 5 native compilers used # OpenServer 5 native compilers used
link_o.svr3: link_o.svr3:
@ if $(DETECT_GNU_LD); then \ @ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \ $(DO_GNU_SO); \
else \ else \
$(CALC_VERSIONS); \ $(CALC_VERSIONS); \
@ -411,7 +369,7 @@ link_o.svr3:
fi; \ fi; \
$(LINK_SO_O) $(LINK_SO_O)
link_a.svr3: link_a.svr3:
@ if $(DETECT_GNU_LD); then \ @ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \ $(DO_GNU_SO); \
else \ else \
$(CALC_VERSIONS); \ $(CALC_VERSIONS); \
@ -423,12 +381,12 @@ link_a.svr3:
fi; \ fi; \
$(LINK_SO_A_UNPACKED) $(LINK_SO_A_UNPACKED)
link_app.svr3: link_app.svr3:
@$(DETECT_GNU_LD) && $(DO_GNU_APP); \ @${DETECT_GNU_LD} && $(DO_GNU_APP); \
$(LINK_APP) $(LINK_APP)
# UnixWare 7 and OpenUNIX 8 native compilers used # UnixWare 7 and OpenUNIX 8 native compilers used
link_o.svr5: link_o.svr5:
@ if $(DETECT_GNU_LD); then \ @ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \ $(DO_GNU_SO); \
else \ else \
$(CALC_VERSIONS); \ $(CALC_VERSIONS); \
@ -442,12 +400,12 @@ link_o.svr5:
fi; \ fi; \
$(LINK_SO_O) $(LINK_SO_O)
link_a.svr5: link_a.svr5:
@ if $(DETECT_GNU_LD); then \ @ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \ $(DO_GNU_SO); \
else \ else \
$(CALC_VERSIONS); \ $(CALC_VERSIONS); \
SHARE_FLAG='-G'; \ SHARE_FLAG='-G'; \
($(CC) -v 2>&1 | grep gcc) > /dev/null && SHARE_FLAG='-shared'; \ (${CC} -v 2>&1 | grep gcc) > /dev/null && SHARE_FLAG='-shared'; \
SHLIB=lib$(LIBNAME).so; \ SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \ SHLIB_SUFFIX=; \
ALLSYMSFLAGS=''; \ ALLSYMSFLAGS=''; \
@ -456,11 +414,11 @@ link_a.svr5:
fi; \ fi; \
$(LINK_SO_A_UNPACKED) $(LINK_SO_A_UNPACKED)
link_app.svr5: link_app.svr5:
@$(DETECT_GNU_LD) && $(DO_GNU_APP); \ @${DETECT_GNU_LD} && $(DO_GNU_APP); \
$(LINK_APP) $(LINK_APP)
link_o.irix: link_o.irix:
@ if $(DETECT_GNU_LD); then \ @ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \ $(DO_GNU_SO); \
else \ else \
$(CALC_VERSIONS); \ $(CALC_VERSIONS); \
@ -474,7 +432,7 @@ link_o.irix:
fi; \ fi; \
$(LINK_SO_O) $(LINK_SO_O)
link_a.irix: link_a.irix:
@ if $(DETECT_GNU_LD); then \ @ if ${DETECT_GNU_LD}; then \
$(DO_GNU_SO); \ $(DO_GNU_SO); \
else \ else \
$(CALC_VERSIONS); \ $(CALC_VERSIONS); \
@ -500,7 +458,7 @@ link_app.irix:
# ELFs by the way]. # ELFs by the way].
# #
link_o.hpux: link_o.hpux:
@if $(DETECT_GNU_LD); then $(DO_GNU_SO); else \ @if ${DETECT_GNU_LD}; then $(DO_GNU_SO); else \
$(CALC_VERSIONS); \ $(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).sl; \ SHLIB=lib$(LIBNAME).sl; \
expr "$(CFLAGS)" : '.*DSO_DLFCN' > /dev/null && SHLIB=lib$(LIBNAME).so; \ expr "$(CFLAGS)" : '.*DSO_DLFCN' > /dev/null && SHLIB=lib$(LIBNAME).so; \
@ -513,7 +471,7 @@ link_o.hpux:
rm -f $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX || :; \ rm -f $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX || :; \
$(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX $(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
link_a.hpux: link_a.hpux:
@if $(DETECT_GNU_LD); then $(DO_GNU_SO); else \ @if ${DETECT_GNU_LD}; then $(DO_GNU_SO); else \
$(CALC_VERSIONS); \ $(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).sl; \ SHLIB=lib$(LIBNAME).sl; \
expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \ expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \
@ -526,30 +484,30 @@ link_a.hpux:
rm -f $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX || :; \ rm -f $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX || :; \
$(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX $(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
link_app.hpux: link_app.hpux:
@if $(DETECT_GNU_LD); then $(DO_GNU_APP); else \ @if ${DETECT_GNU_LD}; then $(DO_GNU_APP); else \
LDFLAGS="$(CFLAGS) -Wl,+s,+cdp,../:,+cdp,./:,+b,$(LIBRPATH)"; \ LDFLAGS="$(CFLAGS) -Wl,+s,+cdp,../:,+cdp,./:,+b,$(LIBRPATH)"; \
fi; \ fi; \
$(LINK_APP) $(LINK_APP)
link_o.aix: link_o.aix:
@ $(CALC_VERSIONS); \ @ $(CALC_VERSIONS); \
OBJECT_MODE=`expr "x$(SHARED_LDFLAGS)" : 'x\-[a-z]*\(64\)'` || :; \ OBJECT_MODE=`expr x$(SHARED_LDFLAGS) : 'x\-[a-z]*\(64\)'` || :; \
OBJECT_MODE=$${OBJECT_MODE:-32}; export OBJECT_MODE; \ OBJECT_MODE=$${OBJECT_MODE:-32}; export OBJECT_MODE; \
SHLIB=lib$(LIBNAME).so; \ SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \ SHLIB_SUFFIX=; \
ALLSYMSFLAGS=''; \ ALLSYMSFLAGS=''; \
NOALLSYMSFLAGS=''; \ NOALLSYMSFLAGS=''; \
SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-bexpall,-bnolibpath,-bM:SRE'; \ SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-G,-bexpall,-bnolibpath,-bM:SRE'; \
$(LINK_SO_O); $(LINK_SO_O);
link_a.aix: link_a.aix:
@ $(CALC_VERSIONS); \ @ $(CALC_VERSIONS); \
OBJECT_MODE=`expr "x$(SHARED_LDFLAGS)" : 'x\-[a-z]*\(64\)'` || : ; \ OBJECT_MODE=`expr x$(SHARED_LDFLAGS) : 'x\-[a-z]*\(64\)'` || : ; \
OBJECT_MODE=$${OBJECT_MODE:-32}; export OBJECT_MODE; \ OBJECT_MODE=$${OBJECT_MODE:-32}; export OBJECT_MODE; \
SHLIB=lib$(LIBNAME).so; \ SHLIB=lib$(LIBNAME).so; \
SHLIB_SUFFIX=; \ SHLIB_SUFFIX=; \
ALLSYMSFLAGS='-bnogc'; \ ALLSYMSFLAGS='-bnogc'; \
NOALLSYMSFLAGS=''; \ NOALLSYMSFLAGS=''; \
SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-bexpall,-bnolibpath,-bM:SRE'; \ SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-G,-bexpall,-bnolibpath,-bM:SRE'; \
$(LINK_SO_A_VIA_O) $(LINK_SO_A_VIA_O)
link_app.aix: link_app.aix:
LDFLAGS="$(CFLAGS) -Wl,-brtl,-blibpath:$(LIBRPATH):$${LIBPATH:-/usr/lib:/lib}"; \ LDFLAGS="$(CFLAGS) -Wl,-brtl,-blibpath:$(LIBRPATH):$${LIBPATH:-/usr/lib:/lib}"; \
@ -591,7 +549,7 @@ symlink.hpux:
expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \ expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \
$(SYMLINK_SO) $(SYMLINK_SO)
# The following lines means those specific architectures do no symlinks # The following lines means those specific architectures do no symlinks
symlink.cygwin symlink.alpha-osf1 symlink.tru64 symlink.tru64-rpath symlink.beos: symlink.cygwin symlink.alpha-osf1 symlink.tru64 symlink.tru64-rpath:
# Compatibility targets # Compatibility targets
link_o.bsd-gcc-shared link_o.linux-shared link_o.gnu-shared: link_o.gnu link_o.bsd-gcc-shared link_o.linux-shared link_o.gnu-shared: link_o.gnu
@ -649,7 +607,3 @@ link_o.reliantunix-shared: link_o.reliantunix
link_a.reliantunix-shared: link_a.reliantunix link_a.reliantunix-shared: link_a.reliantunix
link_app.reliantunix-shared: link_app.reliantunix link_app.reliantunix-shared: link_app.reliantunix
symlink.reliantunix-shared: symlink.reliantunix symlink.reliantunix-shared: symlink.reliantunix
link_o.beos-shared: link_o.beos
link_a.beos-shared: link_a.beos
link_app.beos-shared: link_app.gnu
symlink.beos-shared: symlink.beos

360
NEWS
View File

@ -5,304 +5,23 @@
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 1.0.1s and OpenSSL 1.0.1t [under development] Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e:
o
Major changes between OpenSSL 1.0.1r and OpenSSL 1.0.1s [1 Mar 2016]
o Disable weak ciphers in SSLv3 and up in default builds of OpenSSL.
o Disable SSLv2 default build, default negotiation and weak ciphers
(CVE-2016-0800)
o Fix a double-free in DSA code (CVE-2016-0705)
o Disable SRP fake user seed to address a server memory leak
(CVE-2016-0798)
o Fix BN_hex2bn/BN_dec2bn NULL pointer deref/heap corruption
(CVE-2016-0797)
o Fix memory issues in BIO_*printf functions (CVE-2016-0799)
o Fix side channel attack on modular exponentiation (CVE-2016-0702)
Major changes between OpenSSL 1.0.1q and OpenSSL 1.0.1r [28 Jan 2016]
o Protection for DH small subgroup attacks
o SSLv2 doesn't block disabled ciphers (CVE-2015-3197)
Major changes between OpenSSL 1.0.1p and OpenSSL 1.0.1q [3 Dec 2015]
o Certificate verify crash with missing PSS parameter (CVE-2015-3194)
o X509_ATTRIBUTE memory leak (CVE-2015-3195)
o Rewrite EVP_DecodeUpdate (base64 decoding) to fix several bugs
o In DSA_generate_parameters_ex, if the provided seed is too short,
return an error
Major changes between OpenSSL 1.0.1o and OpenSSL 1.0.1p [9 Jul 2015]
o Alternate chains certificate forgery (CVE-2015-1793)
o Race condition handling PSK identify hint (CVE-2015-3196)
Major changes between OpenSSL 1.0.1n and OpenSSL 1.0.1o [12 Jun 2015]
o Fix HMAC ABI incompatibility
Major changes between OpenSSL 1.0.1m and OpenSSL 1.0.1n [11 Jun 2015]
o Malformed ECParameters causes infinite loop (CVE-2015-1788)
o Exploitable out-of-bounds read in X509_cmp_time (CVE-2015-1789)
o PKCS7 crash with missing EnvelopedContent (CVE-2015-1790)
o CMS verify infinite loop with unknown hash function (CVE-2015-1792)
o Race condition handling NewSessionTicket (CVE-2015-1791)
Major changes between OpenSSL 1.0.1l and OpenSSL 1.0.1m [19 Mar 2015]
o Segmentation fault in ASN1_TYPE_cmp fix (CVE-2015-0286)
o ASN.1 structure reuse memory corruption fix (CVE-2015-0287)
o PKCS7 NULL pointer dereferences fix (CVE-2015-0289)
o DoS via reachable assert in SSLv2 servers fix (CVE-2015-0293)
o Use After Free following d2i_ECPrivatekey error fix (CVE-2015-0209)
o X509_to_X509_REQ NULL pointer deref fix (CVE-2015-0288)
o Removed the export ciphers from the DEFAULT ciphers
Major changes between OpenSSL 1.0.1k and OpenSSL 1.0.1l [15 Jan 2015]
o Build fixes for the Windows and OpenVMS platforms
Major changes between OpenSSL 1.0.1j and OpenSSL 1.0.1k [8 Jan 2015]
o Fix for CVE-2014-3571
o Fix for CVE-2015-0206
o Fix for CVE-2014-3569
o Fix for CVE-2014-3572
o Fix for CVE-2015-0204
o Fix for CVE-2015-0205
o Fix for CVE-2014-8275
o Fix for CVE-2014-3570
Major changes between OpenSSL 1.0.1i and OpenSSL 1.0.1j [15 Oct 2014]
o Fix for CVE-2014-3513
o Fix for CVE-2014-3567
o Mitigation for CVE-2014-3566 (SSL protocol vulnerability)
o Fix for CVE-2014-3568
Major changes between OpenSSL 1.0.1h and OpenSSL 1.0.1i [6 Aug 2014]
o Fix for CVE-2014-3512
o Fix for CVE-2014-3511
o Fix for CVE-2014-3510
o Fix for CVE-2014-3507
o Fix for CVE-2014-3506
o Fix for CVE-2014-3505
o Fix for CVE-2014-3509
o Fix for CVE-2014-5139
o Fix for CVE-2014-3508
Major changes between OpenSSL 1.0.1g and OpenSSL 1.0.1h [5 Jun 2014]
o Fix for CVE-2014-0224
o Fix for CVE-2014-0221
o Fix for CVE-2014-0198
o Fix for CVE-2014-0195
o Fix for CVE-2014-3470
o Fix for CVE-2010-5298
Major changes between OpenSSL 1.0.1f and OpenSSL 1.0.1g [7 Apr 2014]
o Fix for CVE-2014-0160
o Add TLS padding extension workaround for broken servers.
o Fix for CVE-2014-0076
Major changes between OpenSSL 1.0.1e and OpenSSL 1.0.1f [6 Jan 2014]
o Don't include gmt_unix_time in TLS server and client random values
o Fix for TLS record tampering bug CVE-2013-4353
o Fix for TLS version checking bug CVE-2013-6449
o Fix for DTLS retransmission bug CVE-2013-6450
Major changes between OpenSSL 1.0.1d and OpenSSL 1.0.1e [11 Feb 2013]:
o Corrected fix for CVE-2013-0169
Major changes between OpenSSL 1.0.1c and OpenSSL 1.0.1d [4 Feb 2013]:
o Fix renegotiation in TLS 1.1, 1.2 by using the correct TLS version.
o Include the fips configuration module.
o Fix OCSP bad key DoS attack CVE-2013-0166
o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
o Fix for TLS AESNI record handling flaw CVE-2012-2686
Major changes between OpenSSL 1.0.1b and OpenSSL 1.0.1c [10 May 2012]:
o Fix TLS/DTLS record length checking bug CVE-2012-2333
o Don't attempt to use non-FIPS composite ciphers in FIPS mode.
Major changes between OpenSSL 1.0.1a and OpenSSL 1.0.1b [26 Apr 2012]:
o Fix compilation error on non-x86 platforms.
o Make FIPS capable OpenSSL ciphers work in non-FIPS mode.
o Fix SSL_OP_NO_TLSv1_1 clash with SSL_OP_ALL in OpenSSL 1.0.0
Major changes between OpenSSL 1.0.1 and OpenSSL 1.0.1a [19 Apr 2012]:
o Fix for ASN1 overflow bug CVE-2012-2110
o Workarounds for some servers that hang on long client hellos.
o Fix SEGV in AES code.
Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.1 [14 Mar 2012]:
o TLS/DTLS heartbeat support.
o SCTP support.
o RFC 5705 TLS key material exporter.
o RFC 5764 DTLS-SRTP negotiation.
o Next Protocol Negotiation.
o PSS signatures in certificates, requests and CRLs.
o Support for password based recipient info for CMS.
o Support TLS v1.2 and TLS v1.1.
o Preliminary FIPS capability for unvalidated 2.0 FIPS module.
o SRP support.
Major changes between OpenSSL 1.0.0g and OpenSSL 1.0.0h [12 Mar 2012]:
o Fix for CMS/PKCS#7 MMA CVE-2012-0884
o Corrected fix for CVE-2011-4619
o Various DTLS fixes.
Major changes between OpenSSL 1.0.0f and OpenSSL 1.0.0g [18 Jan 2012]:
o Fix for DTLS DoS issue CVE-2012-0050
Major changes between OpenSSL 1.0.0e and OpenSSL 1.0.0f [4 Jan 2012]:
o Fix for DTLS plaintext recovery attack CVE-2011-4108
o Clear block padding bytes of SSL 3.0 records CVE-2011-4576
o Only allow one SGC handshake restart for SSL/TLS CVE-2011-4619
o Check parameters are not NULL in GOST ENGINE CVE-2012-0027
o Check for malformed RFC3779 data CVE-2011-4577
Major changes between OpenSSL 1.0.0d and OpenSSL 1.0.0e [6 Sep 2011]:
o Fix for CRL vulnerability issue CVE-2011-3207
o Fix for ECDH crashes CVE-2011-3210
o Protection against EC timing attacks.
o Support ECDH ciphersuites for certificates using SHA2 algorithms.
o Various DTLS fixes.
Major changes between OpenSSL 1.0.0c and OpenSSL 1.0.0d [8 Feb 2011]:
o Fix for security issue CVE-2011-0014
Major changes between OpenSSL 1.0.0b and OpenSSL 1.0.0c [2 Dec 2010]:
o Fix for security issue CVE-2010-4180
o Fix for CVE-2010-4252
o Fix mishandling of absent EC point format extension.
o Fix various platform compilation issues.
o Corrected fix for security issue CVE-2010-3864.
Major changes between OpenSSL 1.0.0a and OpenSSL 1.0.0b [16 Nov 2010]:
o Fix for security issue CVE-2010-3864.
o Fix for CVE-2010-2939
o Fix WIN32 build system for GOST ENGINE.
Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a [1 Jun 2010]:
o Fix for security issue CVE-2010-1633.
o GOST MAC and CFB fixes.
Major changes between OpenSSL 0.9.8n and OpenSSL 1.0.0 [29 Mar 2010]:
o RFC3280 path validation: sufficient to process PKITS tests.
o Integrated support for PVK files and keyblobs.
o Change default private key format to PKCS#8.
o CMS support: able to process all examples in RFC4134
o Streaming ASN1 encode support for PKCS#7 and CMS.
o Multiple signer and signer add support for PKCS#7 and CMS.
o ASN1 printing support.
o Whirlpool hash algorithm added.
o RFC3161 time stamp support.
o New generalised public key API supporting ENGINE based algorithms.
o New generalised public key API utilities.
o New ENGINE supporting GOST algorithms.
o SSL/TLS GOST ciphersuite support.
o PKCS#7 and CMS GOST support.
o RFC4279 PSK ciphersuite support.
o Supported points format extension for ECC ciphersuites.
o ecdsa-with-SHA224/256/384/512 signature types.
o dsa-with-SHA224 and dsa-with-SHA256 signature types.
o Opaque PRF Input TLS extension support.
o Updated time routines to avoid OS limitations.
Major changes between OpenSSL 0.9.8m and OpenSSL 0.9.8n [24 Mar 2010]:
o CFB cipher definition fixes.
o Fix security issues CVE-2010-0740 and CVE-2010-0433.
Major changes between OpenSSL 0.9.8l and OpenSSL 0.9.8m [25 Feb 2010]:
o Cipher definition fixes.
o Workaround for slow RAND_poll() on some WIN32 versions.
o Remove MD2 from algorithm tables.
o SPKAC handling fixes.
o Support for RFC5746 TLS renegotiation extension.
o Compression memory leak fixed.
o Compression session resumption fixed.
o Ticket and SNI coexistence fixes.
o Many fixes to DTLS handling.
Major changes between OpenSSL 0.9.8k and OpenSSL 0.9.8l [5 Nov 2009]:
o Temporary work around for CVE-2009-3555: disable renegotiation.
Major changes between OpenSSL 0.9.8j and OpenSSL 0.9.8k [25 Mar 2009]:
o Fix various build issues.
o Fix security issues (CVE-2009-0590, CVE-2009-0591, CVE-2009-0789)
Major changes between OpenSSL 0.9.8i and OpenSSL 0.9.8j [7 Jan 2009]:
o Fix security issue (CVE-2008-5077)
o Merge FIPS 140-2 branch code.
Major changes between OpenSSL 0.9.8g and OpenSSL 0.9.8h [28 May 2008]:
o CryptoAPI ENGINE support.
o Various precautionary measures.
o Fix for bugs affecting certificate request creation.
o Support for local machine keyset attribute in PKCS#12 files.
Major changes between OpenSSL 0.9.8f and OpenSSL 0.9.8g [19 Oct 2007]:
o Backport of CMS functionality to 0.9.8.
o Fixes for bugs introduced with 0.9.8f.
Major changes between OpenSSL 0.9.8e and OpenSSL 0.9.8f [11 Oct 2007]:
o Add gcc 4.2 support.
o Add support for AES and SSE2 assembly lanugauge optimization
for VC++ build.
o Support for RFC4507bis and server name extensions if explicitly
selected at compile time.
o DTLS improvements.
o RFC4507bis support.
o TLS Extensions support.
Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e [23 Feb 2007]:
o Various ciphersuite selection fixes. o Various ciphersuite selection fixes.
o RFC3779 support. o RFC3779 support.
Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d [28 Sep 2006]: Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d:
o Introduce limits to prevent malicious key DoS (CVE-2006-2940) 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 Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
o Changes to ciphersuite selection algorithm o Changes to ciphersuite selection algorithm
Major changes between OpenSSL 0.9.8b and OpenSSL 0.9.8c [5 Sep 2006]: Major changes between OpenSSL 0.9.8b and OpenSSL 0.9.8c:
o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339 o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339
o New cipher Camellia o New cipher Camellia
Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b [4 May 2006]: Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b:
o Cipher string fixes. o Cipher string fixes.
o Fixes for VC++ 2005. o Fixes for VC++ 2005.
@ -312,12 +31,12 @@
o Built in dynamic engine compilation support on Win32. o Built in dynamic engine compilation support on Win32.
o Fixes auto dynamic engine loading in Win32. o Fixes auto dynamic engine loading in Win32.
Major changes between OpenSSL 0.9.8 and OpenSSL 0.9.8a [11 Oct 2005]: Major changes between OpenSSL 0.9.8 and OpenSSL 0.9.8a:
o Fix potential SSL 2.0 rollback, CVE-2005-2969 o Fix potential SSL 2.0 rollback, CVE-2005-2969
o Extended Windows CE support o Extended Windows CE support
Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.8 [5 Jul 2005]: Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.8:
o Major work on the BIGNUM library for higher efficiency and to o Major work on the BIGNUM library for higher efficiency and to
make operations more streamlined and less contradictory. This make operations more streamlined and less contradictory. This
@ -391,36 +110,31 @@
o Added initial support for Win64. o Added initial support for Win64.
o Added alternate pkg-config files. o Added alternate pkg-config files.
Major changes between OpenSSL 0.9.7l and OpenSSL 0.9.7m [23 Feb 2007]: Major changes between OpenSSL 0.9.7k and OpenSSL 0.9.7l:
o FIPS 1.1.1 module linking.
o Various ciphersuite selection fixes.
Major changes between OpenSSL 0.9.7k and OpenSSL 0.9.7l [28 Sep 2006]:
o Introduce limits to prevent malicious key DoS (CVE-2006-2940) 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 Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
Major changes between OpenSSL 0.9.7j and OpenSSL 0.9.7k [5 Sep 2006]: Major changes between OpenSSL 0.9.7j and OpenSSL 0.9.7k:
o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339 o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339
Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j [4 May 2006]: Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j:
o Visual C++ 2005 fixes. o Visual C++ 2005 fixes.
o Update Windows build system for FIPS. o Update Windows build system for FIPS.
Major changes between OpenSSL 0.9.7h and OpenSSL 0.9.7i [14 Oct 2005]: 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. 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 [11 Oct 2005]: Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.7h:
o Fix SSL 2.0 Rollback, CVE-2005-2969 o Fix SSL 2.0 Rollback, CVE-2005-2969
o Allow use of fixed-length exponent on DSA signing o Allow use of fixed-length exponent on DSA signing
o Default fixed-window RSA, DSA, DH private-key operations o Default fixed-window RSA, DSA, DH private-key operations
Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g [11 Apr 2005]: Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g:
o More compilation issues fixed. o More compilation issues fixed.
o Adaptation to more modern Kerberos API. o Adaptation to more modern Kerberos API.
@ -429,7 +143,7 @@
o More constification. o More constification.
o Added processing of proxy certificates (RFC 3820). o Added processing of proxy certificates (RFC 3820).
Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f [22 Mar 2005]: Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f:
o Several compilation issues fixed. o Several compilation issues fixed.
o Many memory allocation failure checks added. o Many memory allocation failure checks added.
@ -437,12 +151,12 @@
o Mandatory basic checks on certificates. o Mandatory basic checks on certificates.
o Performance improvements. o Performance improvements.
Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e [25 Oct 2004]: Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e:
o Fix race condition in CRL checking code. o Fix race condition in CRL checking code.
o Fixes to PKCS#7 (S/MIME) code. o Fixes to PKCS#7 (S/MIME) code.
Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d [17 Mar 2004]: Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d:
o Security: Fix Kerberos ciphersuite SSL/TLS handshaking bug o Security: Fix Kerberos ciphersuite SSL/TLS handshaking bug
o Security: Fix null-pointer assignment in do_change_cipher_spec() o Security: Fix null-pointer assignment in do_change_cipher_spec()
@ -450,14 +164,14 @@
o Multiple X509 verification fixes o Multiple X509 verification fixes
o Speed up HMAC and other operations o Speed up HMAC and other operations
Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c [30 Sep 2003]: Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c:
o Security: fix various ASN1 parsing bugs. o Security: fix various ASN1 parsing bugs.
o New -ignore_err option to OCSP utility. o New -ignore_err option to OCSP utility.
o Various interop and bug fixes in S/MIME code. o Various interop and bug fixes in S/MIME code.
o SSL/TLS protocol fix for unrequested client certificates. o SSL/TLS protocol fix for unrequested client certificates.
Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b [10 Apr 2003]: Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b:
o Security: counter the Klima-Pokorny-Rosa extension of o Security: counter the Klima-Pokorny-Rosa extension of
Bleichbacher's attack Bleichbacher's attack
@ -468,7 +182,7 @@
o ASN.1: treat domainComponent correctly. o ASN.1: treat domainComponent correctly.
o Documentation: fixes and additions. o Documentation: fixes and additions.
Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a [19 Feb 2003]: Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a:
o Security: Important security related bugfixes. o Security: Important security related bugfixes.
o Enhanced compatibility with MIT Kerberos. o Enhanced compatibility with MIT Kerberos.
@ -479,7 +193,7 @@
o SSL/TLS: now handles manual certificate chain building. o SSL/TLS: now handles manual certificate chain building.
o SSL/TLS: certain session ID malfunctions corrected. o SSL/TLS: certain session ID malfunctions corrected.
Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7 [30 Dec 2002]: Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7:
o New library section OCSP. o New library section OCSP.
o Complete rewrite of ASN1 code. o Complete rewrite of ASN1 code.
@ -525,23 +239,23 @@
o SSL/TLS: add callback to retrieve SSL/TLS messages. o SSL/TLS: add callback to retrieve SSL/TLS messages.
o SSL/TLS: support AES cipher suites (RFC3268). o SSL/TLS: support AES cipher suites (RFC3268).
Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k [30 Sep 2003]: Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k:
o Security: fix various ASN1 parsing bugs. o Security: fix various ASN1 parsing bugs.
o SSL/TLS protocol fix for unrequested client certificates. o SSL/TLS protocol fix for unrequested client certificates.
Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j [10 Apr 2003]: Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j:
o Security: counter the Klima-Pokorny-Rosa extension of o Security: counter the Klima-Pokorny-Rosa extension of
Bleichbacher's attack Bleichbacher's attack
o Security: make RSA blinding default. o Security: make RSA blinding default.
o Build: shared library support fixes. o Build: shared library support fixes.
Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i [19 Feb 2003]: Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i:
o Important security related bugfixes. o Important security related bugfixes.
Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h [5 Dec 2002]: 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.
o New OIDs for Microsoft attributes. o New OIDs for Microsoft attributes.
@ -555,25 +269,25 @@
o Fixes for smaller building problems. o Fixes for smaller building problems.
o Updates of manuals, FAQ and other instructive documents. o Updates of manuals, FAQ and other instructive documents.
Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g [9 Aug 2002]: Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g:
o Important building fixes on Unix. o Important building fixes on Unix.
Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f [8 Aug 2002]: Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f:
o Various important bugfixes. o Various important bugfixes.
Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e [30 Jul 2002]: Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e:
o Important security related bugfixes. o Important security related bugfixes.
o Various SSL/TLS library bugfixes. o Various SSL/TLS library bugfixes.
Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d [9 May 2002]: Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d:
o Various SSL/TLS library bugfixes. o Various SSL/TLS library bugfixes.
o Fix DH parameter generation for 'non-standard' generators. o Fix DH parameter generation for 'non-standard' generators.
Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c [21 Dec 2001]: Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c:
o Various SSL/TLS library bugfixes. o Various SSL/TLS library bugfixes.
o BIGNUM library fixes. o BIGNUM library fixes.
@ -586,7 +300,7 @@
Broadcom and Cryptographic Appliance's keyserver Broadcom and Cryptographic Appliance's keyserver
[in 0.9.6c-engine release]. [in 0.9.6c-engine release].
Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b [9 Jul 2001]: Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b:
o Security fix: PRNG improvements. o Security fix: PRNG improvements.
o Security fix: RSA OAEP check. o Security fix: RSA OAEP check.
@ -603,7 +317,7 @@
o Increase default size for BIO buffering filter. o Increase default size for BIO buffering filter.
o Compatibility fixes in some scripts. o Compatibility fixes in some scripts.
Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.6a [5 Apr 2001]: Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.6a:
o Security fix: change behavior of OpenSSL to avoid using o Security fix: change behavior of OpenSSL to avoid using
environment variables when running as root. environment variables when running as root.
@ -628,7 +342,7 @@
o New function BN_rand_range(). o New function BN_rand_range().
o Add "-rand" option to openssl s_client and s_server. o Add "-rand" option to openssl s_client and s_server.
Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6 [10 Oct 2000]: Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6:
o Some documentation for BIO and SSL libraries. o Some documentation for BIO and SSL libraries.
o Enhanced chain verification using key identifiers. o Enhanced chain verification using key identifiers.
@ -643,7 +357,7 @@
[1] The support for external crypto devices is currently a separate [1] The support for external crypto devices is currently a separate
distribution. See the file README.ENGINE. distribution. See the file README.ENGINE.
Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a [1 Apr 2000]: Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a:
o Bug fixes for Win32, SuSE Linux, NeXTSTEP and FreeBSD 2.2.8 o Bug fixes for Win32, SuSE Linux, NeXTSTEP and FreeBSD 2.2.8
o Shared library support for HPUX and Solaris-gcc o Shared library support for HPUX and Solaris-gcc
@ -652,7 +366,7 @@
o New 'rand' application o New 'rand' application
o New way to check for existence of algorithms from scripts o New way to check for existence of algorithms from scripts
Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5 [25 May 2000]: Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5:
o S/MIME support in new 'smime' command o S/MIME support in new 'smime' command
o Documentation for the OpenSSL command line application o Documentation for the OpenSSL command line application
@ -688,7 +402,7 @@
o Enhanced support for Alpha Linux o Enhanced support for Alpha Linux
o Experimental MacOS support o Experimental MacOS support
Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4 [9 Aug 1999]: Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4:
o Transparent support for PKCS#8 format private keys: these are used o Transparent support for PKCS#8 format private keys: these are used
by several software packages and are more secure than the standard by several software packages and are more secure than the standard
@ -699,7 +413,7 @@
o New pipe-like BIO that allows using the SSL library when actual I/O o New pipe-like BIO that allows using the SSL library when actual I/O
must be handled by the application (BIO pair) must be handled by the application (BIO pair)
Major changes between OpenSSL 0.9.2b and OpenSSL 0.9.3 [24 May 1999]: Major changes between OpenSSL 0.9.2b and OpenSSL 0.9.3:
o Lots of enhancements and cleanups to the Configuration mechanism o Lots of enhancements and cleanups to the Configuration mechanism
o RSA OEAP related fixes o RSA OEAP related fixes
o Added `openssl ca -revoke' option for revoking a certificate o Added `openssl ca -revoke' option for revoking a certificate
@ -713,7 +427,7 @@
o Sparc assembler bignum implementation, optimized hash functions o Sparc assembler bignum implementation, optimized hash functions
o Option to disable selected ciphers o Option to disable selected ciphers
Major changes between OpenSSL 0.9.1c and OpenSSL 0.9.2b [22 Mar 1999]: Major changes between OpenSSL 0.9.1c and OpenSSL 0.9.2b:
o Fixed a security hole related to session resumption o Fixed a security hole related to session resumption
o Fixed RSA encryption routines for the p < q case o Fixed RSA encryption routines for the p < q case
o "ALL" in cipher lists now means "everything except NULL ciphers" o "ALL" in cipher lists now means "everything except NULL ciphers"
@ -735,7 +449,7 @@
o Lots of memory leak fixes. o Lots of memory leak fixes.
o Lots of bug fixes. o Lots of bug fixes.
Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c [23 Dec 1998]: Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c:
o Integration of the popular NO_RSA/NO_DSA patches o Integration of the popular NO_RSA/NO_DSA patches
o Initial support for compression inside the SSL record layer o Initial support for compression inside the SSL record layer
o Added BIO proxy and filtering functionality o Added BIO proxy and filtering functionality

View File

@ -159,8 +159,6 @@ cd ..\..\..
echo SHA1 echo SHA1
cd crypto\sha\asm cd crypto\sha\asm
perl sha1-586.pl %ASM_MODE% > s1-nw.asm perl sha1-586.pl %ASM_MODE% > s1-nw.asm
perl sha256-586.pl %ASM_MODE% > sha256-nw.asm
perl sha512-586.pl %ASM_MODE% > sha512-nw.asm
cd ..\..\.. cd ..\..\..
echo RIPEMD160 echo RIPEMD160
@ -173,11 +171,6 @@ cd crypto\rc5\asm
perl rc5-586.pl %ASM_MODE% > r5-nw.asm perl rc5-586.pl %ASM_MODE% > r5-nw.asm
cd ..\..\.. cd ..\..\..
echo WHIRLPOOL
cd crypto\whrlpool\asm
perl wp-mmx.pl %ASM_MODE% > wp-nw.asm
cd ..\..\..
echo CPUID echo CPUID
cd crypto cd crypto
perl x86cpuid.pl %ASM_MODE% > x86cpuid-nw.asm perl x86cpuid.pl %ASM_MODE% > x86cpuid-nw.asm

View File

@ -36,9 +36,7 @@ may differ on your machine.
As long as Apple doesn't fix the problem with ld, this problem building As long as Apple doesn't fix the problem with ld, this problem building
OpenSSL will remain as is. Well, the problem was addressed in 0.9.8f by OpenSSL will remain as is.
passing -Wl,-search_paths_first, but it's unknown if the flag was
supported from the initial MacOS X release.
* Parallell make leads to errors * Parallell make leads to errors
@ -197,17 +195,3 @@ reconfigure with additional no-sse2 [or 386] option passed to ./config.
We don't have framework to associate -ldl with no-dso, therefore the only 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 way is to edit Makefile right after ./config no-dso and remove -ldl from
EX_LIBS line. EX_LIBS line.
* hpux-parisc2-cc no-asm build fails with SEGV in ECDSA/DH.
Compiler bug, presumably at particular patch level. Remaining
hpux*-parisc*-cc configurations can be affected too. Drop optimization
level to +O2 when compiling bn_nist.o.
* solaris64-sparcv9-cc link failure
Solaris 8 ar can fail to maintain symbol table in .a, which results in
link failures. Apply 109147-09 or later or modify Makefile generated
by ./Configure solaris64-sparcv9-cc and replace RANLIB assignment with
RANLIB= /usr/ccs/bin/ar rs

200
README
View File

@ -1,26 +1,32 @@
OpenSSL 1.0.1t-dev OpenSSL 0.9.8h-fips-dev test version
Copyright (c) 1998-2015 The OpenSSL Project Copyright (c) 1998-2007 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 a port of the FIPS 140-2 code to OpenSSL
0.9.8. See the file README.FIPS for brief usage details.
DESCRIPTION DESCRIPTION
----------- -----------
The OpenSSL Project is a collaborative effort to develop a robust, The OpenSSL Project is a collaborative effort to develop a robust,
commercial-grade, fully featured, and Open Source toolkit implementing the commercial-grade, fully featured, and Open Source toolkit implementing the
Secure Sockets Layer (SSLv3) and Transport Layer Security (TLS) protocols as Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1)
well as a full-strength general purpose cryptograpic library. The project is protocols as well as a full-strength general purpose cryptography library.
managed by a worldwide community of volunteers that use the Internet to The project is managed by a worldwide community of volunteers that use the
communicate, plan, and develop the OpenSSL toolkit and its related Internet to communicate, plan, and develop the OpenSSL toolkit and its
documentation. related documentation.
OpenSSL is descended from the SSLeay library developed by 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), which means that you are free to OpenSSL license plus the SSLeay license) situation, which basically means
get and use it for commercial and non-commercial purposes as long as you that you are free to get and use it for commercial and non-commercial
fulfill the conditions of both licenses. purposes as long as you fulfill the conditions of both licenses.
OVERVIEW OVERVIEW
-------- --------
@ -28,41 +34,117 @@
The OpenSSL toolkit includes: The OpenSSL toolkit includes:
libssl.a: libssl.a:
Provides the client and server-side implementations for SSLv3 and TLS. Implementation of SSLv2, SSLv3, TLSv1 and the required code to support
both SSLv2, SSLv3 and TLSv1 in the one server and client.
libcrypto.a: libcrypto.a:
Provides general cryptographic and X.509 support needed by SSL/TLS but General encryption and X.509 v1/v3 stuff needed by SSL/TLS but not
not logically part of it. actually logically part of it. It includes routines for the following:
Ciphers
libdes - EAY's libdes DES encryption package which was floating
around the net for a few years, and was then relicensed by
him as part of SSLeay. It includes 15 'modes/variations'
of DES (1, 2 and 3 key versions of ecb, cbc, cfb and ofb;
pcbc and a more general form of cfb and ofb) including desx
in cbc mode, a fast crypt(3), and routines to read
passwords from the keyboard.
RC4 encryption,
RC2 encryption - 4 different modes, ecb, cbc, cfb and ofb.
Blowfish encryption - 4 different modes, ecb, cbc, cfb and ofb.
IDEA encryption - 4 different modes, ecb, cbc, cfb and ofb.
Digests
MD5 and MD2 message digest algorithms, fast implementations,
SHA (SHA-0) and SHA-1 message digest algorithms,
MDC2 message digest. A DES based hash that is popular on smart cards.
Public Key
RSA encryption/decryption/generation.
There is no limit on the number of bits.
DSA encryption/decryption/generation.
There is no limit on the number of bits.
Diffie-Hellman key-exchange/key generation.
There is no limit on the number of bits.
X.509v3 certificates
X509 encoding/decoding into/from binary ASN1 and a PEM
based ASCII-binary encoding which supports encryption with a
private key. Program to generate RSA and DSA certificate
requests and to generate RSA and DSA certificates.
Systems
The normal digital envelope routines and base64 encoding. Higher
level access to ciphers and digests by name. New ciphers can be
loaded at run time. The BIO io system which is a simple non-blocking
IO abstraction. Current methods supported are file descriptors,
sockets, socket accept, socket connect, memory buffer, buffering, SSL
client/server, file pointer, encryption, digest, non-blocking testing
and null.
Data structures
A dynamically growing hashing system
A simple stack.
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 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 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
And more...
PATENTS
-------
Various companies hold various patents for various algorithms in various
locations around the world. _YOU_ are responsible for ensuring that your use
of any algorithms is legal by checking if there are any patents in your
country. The file contains some of the patents that we know about or are
rumored to exist. This is not a definitive list.
RSA Security holds software patents on the RC5 algorithm. If you
intend to use this cipher, you must contact RSA Security for
licensing conditions. Their web page is http://www.rsasecurity.com/.
RC4 is a trademark of RSA Security, so use of this label should perhaps
only be used with RSA Security's permission.
The IDEA algorithm is patented by Ascom in Austria, France, Germany, Italy,
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
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
------------ ------------
See the appropriate file: To install this package under a Unix derivative, read the INSTALL file. For
INSTALL Linux, Unix, etc. a Win32 platform, read the INSTALL.W32 file. For OpenVMS systems, read
INSTALL.DJGPP DOS platform with DJGPP INSTALL.VMS.
INSTALL.NW Netware
INSTALL.OS2 OS/2 Read the documentation in the doc/ directory. It is quite rough, but it
INSTALL.VMS VMS lists the functions; you will probably have to look at the code to work out
INSTALL.W32 Windows (32bit) how to use them. Look at the example programs.
INSTALL.W64 Windows (64bit)
INSTALL.WCE Windows CE PROBLEMS
--------
For some platforms, there are some known problems that may affect the user
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.
SUPPORT SUPPORT
------- -------
See the OpenSSL website www.openssl.org for details on how to obtain
commercial technical 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
first: first:
@ -84,36 +166,42 @@
- Problem Description (steps that will reproduce the problem, if known) - Problem Description (steps that will reproduce the problem, if known)
- Stack Traceback (if the application dumps core) - Stack Traceback (if the application dumps core)
Email the report to: Report the bug to the OpenSSL project via the Request Tracker
(http://www.openssl.org/support/rt2.html) by mail to:
rt@openssl.org openssl-bugs@openssl.org
In order to avoid spam, this is a moderated mailing list, and it might Note that mail to openssl-bugs@openssl.org is recorded in the publicly
take a day for the ticket to show up. (We also scan posts to make sure readable request tracker database and is forwarded to a public
that security disclosures aren't publically posted by mistake.) Mail mailing list. Confidential mail may be sent to openssl-security@openssl.org
to this address is recorded in the public RT (request tracker) database (PGP key available from the key servers).
(see https://www.openssl.org/community/index.html#bugs for details) and
also forwarded the public openssl-dev mailing list. Confidential mail
may be sent to openssl-security@openssl.org (PGP key available from the
key servers).
Please do NOT use this for general assistance or support queries.
Just because something doesn't work the way you expect does not mean it
is necessarily a bug in OpenSSL.
You can also make GitHub pull requests. If you do this, please also send
mail to rt@openssl.org with a link to the PR so that we can more easily
keep track of it.
HOW TO CONTRIBUTE TO OpenSSL HOW TO CONTRIBUTE TO OpenSSL
---------------------------- ----------------------------
See CONTRIBUTING Development is coordinated on the openssl-dev mailing list (see
http://www.openssl.org for information on subscribing). If you
would like to submit a patch, send it to openssl-dev@openssl.org with
the string "[PATCH]" in the subject. Please be sure to include a
textual explanation of what your patch does.
LEGALITIES 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
(formerly BXA) with a copy to the ENC Encryption Request Coordinator;
please take some time to look at
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
generate it like this:
# cd openssl-work
# [your changes]
# ./Configure dist; make clean
# cd ..
# diff -ur openssl-orig openssl-work > mydiffs.patch
A number of nations, in particular the U.S., restrict the use or export
of cryptography. If you are potentially subject to such restrictions
you should seek competent professional legal advice before attempting to
develop or distribute cryptographic code.

84
README.FIPS Normal file
View File

@ -0,0 +1,84 @@
Brief instructions on using OpenSSL 0.9.8 FIPS 140-2 test branch.
NOTE: this distribution is NOT FIPS140-2 validated. These instructions are
intended for people who wish to test the OpenSSL FIPS 140-2 1.2 module. More
complete instructions will be made available after validation.
1. Build from test tarball.
Download the OpenSSL test 1.2 source tree. The current version has the CVS tag
FIPS_098_TEST_8 or can be downloaded from:
ftp://ftp.openssl.org/snapshot/openssl-fips-test-1.2.0.tar.gz
Ignore any instructions in that tree: they are likely to be out of date.
If you are using a Unix like environment run the following commands. You may
NOT specify ANY other options at this stage.
./config fipscanisterbuild
make
make install
This will build and install the test 1.2 module and binaries under
/usr/local/fips-1.0
For Windows you need VC++, perl and NASM installed. This is now a pure VC++
build: no alternative compilers or tools are required. From a VC++ environment
do:
ms\do_fips
It should report that the compile was successful.
This will compile binaries into the out32dll directory. They can be copied to
a more convenient location.
2. Link test module to a more recent version of OpenSSL.
Once the test module has been installed it can be linked against a more recent
version of OpenSSL. Currently only versions from the 0.9.8-fips stable branch
can be used. It has the CVS tag OpenSSL-fips-0_9_8-stable daily snaphots can
also be downloaded as:
ftp://ftp.openssl.org/snapshot/openssl-0.9.8-fips-test-SNAP-YYMMDD.tar.gz
For a Unix build the standrd build procedure is followed and the option "fips"
is passed to either the config or Configure scripts. The fipscanisterbuild
option MUST NOT be used. Any other options may be included. Static libraries
can be built using the no-shared option.
For example:
./config fips
./config fips no-shared
For Windows builds the options "fips" and --with-fipslibdir=<path> are passed
to the Configure script where <path> is wherever the module was installed
For example:
perl Configure fips --with-fipslibdir=C:\some\path\fips
Then the build process continues in the normal way for example:
ms\do_nasm
nmake -f ms\ntdll.mak
for DLLs or
ms\do_nasm
nmake -f ms\nt.mak
for static builds.
3. Test new version of OpenSSL.
The new test FIPS enabled OpenSSL can now be tested in the usual way.
Additionally binary compatibility tests against OpenSSL 0.9.8x would be
MOST welcomed. This will help avoid any major issues when the 0.9.8-fips
branch is merged into 0.9.8 branch.
Any problems should be reported to the openssl-dev mailing list.

129
STATUS Normal file
View File

@ -0,0 +1,129 @@
OpenSSL STATUS Last modified at
______________ $Date: 2007/02/23 12:12:27 $
DEVELOPMENT STATE
o OpenSSL 0.9.9: 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.6g: Released on August 9th, 2002
o OpenSSL 0.9.6f: Released on August 8th, 2002
o OpenSSL 0.9.6e: Released on July 30th, 2002
o OpenSSL 0.9.6d: Released on May 9th, 2002
o OpenSSL 0.9.6c: Released on December 21st, 2001
o OpenSSL 0.9.6b: Released on July 9th, 2001
o OpenSSL 0.9.6a: Released on April 5th, 2001
o OpenSSL 0.9.6: Released on September 24th, 2000
o OpenSSL 0.9.5a: Released on April 1st, 2000
o OpenSSL 0.9.5: Released on February 28th, 2000
o OpenSSL 0.9.4: Released on August 09th, 1999
o OpenSSL 0.9.3a: Released on May 29th, 1999
o OpenSSL 0.9.3: Released on May 25th, 1999
o OpenSSL 0.9.2b: Released on March 22th, 1999
o OpenSSL 0.9.1c: Released on December 23th, 1998
[See also http://www.openssl.org/support/rt2.html]
RELEASE SHOWSTOPPERS
o The Makefiles fail with some SysV makes.
o
AVAILABLE PATCHES
o
IN PROGRESS
o Steve is currently working on (in no particular order):
ASN1 code redesign, butchery, replacement.
OCSP
EVP cipher enhancement.
Enhanced certificate chain verification.
Private key, certificate and CRL API and implementation.
Developing and bugfixing PKCS#7 (S/MIME code).
Various X509 issues: character sets, certificate request extensions.
o Richard is currently working on:
Constification
Attribute Certificate support
Certificate Pair support
Storage Engines (primarly an LDAP storage engine)
Certificate chain validation with full RFC 3280 compatibility
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 "OpenSSL STATUS" is never up-to-date.
OPEN ISSUES
o The Makefile hierarchy and build mechanism is still not a round thing:
1. The config vs. Configure scripts
It's the same nasty situation as for Apache with APACI vs.
src/Configure. It confuses.
Suggestion: Merge Configure and config into a single configure
script with a Autoconf style interface ;-) and remove
Configure and config. Or even let us use GNU Autoconf
itself. Then we can avoid a lot of those platform checks
which are currently in Configure.
o Support for Shared Libraries has to be added at least
for the major Unix platforms. The details we can rip from the stuff
Ralf has done for the Apache src/Configure script. Ben wants the
solution to be really simple.
Status: Ralf will look how we can easily incorporate the
compiler PIC and linker DSO flags from Apache
into the OpenSSL Configure script.
Ulf: +1 for using GNU autoconf and libtool (but not automake,
which apparently is not flexible enough to generate
libcrypto)
WISHES
o Add variants of DH_generate_parameters() and BN_generate_prime() [etc?]
where the callback function can request that the function be aborted.
[Gregory Stark <ghstark@pobox.com>, <rayyang2000@yahoo.com>]
o SRP in TLS.
[wished by:
Dj <derek@yo.net>, Tom Wu <tom@arcot.com>,
Tom Holroyd <tomh@po.crl.go.jp>]
See http://search.ietf.org/internet-drafts/draft-ietf-tls-srp-00.txt
as well as http://www-cs-students.stanford.edu/~tjw/srp/.
Tom Holroyd tells us there is a SRP patch for OpenSSH at
http://members.tripod.com/professor_tom/archives/, that could
be useful.

3882
TABLE

File diff suppressed because it is too large Load Diff

View File

@ -1,67 +0,0 @@
$! install-vms.com -- Installs the files in a given directory tree
$!
$! Author: Richard Levitte <richard@levitte.org>
$! Time of creation: 23-MAY-1998 19:22
$!
$! P1 root of the directory tree
$!
$!
$! Announce/identify.
$!
$ proc = f$environment( "procedure")
$ write sys$output "@@@ "+ -
f$parse( proc, , , "name")+ f$parse( proc, , , "type")
$!
$ on error then goto tidy
$ on control_c then goto tidy
$!
$ if p1 .eqs. ""
$ then
$ write sys$output "First argument missing."
$ write sys$output -
"Should be the directory where you want things installed."
$ exit
$ endif
$
$ if (f$getsyi( "cpu") .lt. 128)
$ then
$ arch = "VAX"
$ else
$ arch = f$edit( f$getsyi( "arch_name"), "upcase")
$ if (arch .eqs. "") then arch = "UNK"
$ endif
$
$ root = f$parse( P1, "[]A.;0", , , "SYNTAX_ONLY, NO_CONCEAL")- "A.;0"
$ root_dev = f$parse( root, , , "device", "syntax_only")
$ root_dir = f$parse( root, , , "directory", "syntax_only") - -
"[000000." - "][" - "[" - "]"
$ root = root_dev + "[" + root_dir
$
$ define /nolog wrk_sslroot 'root'.] /translation_attributes = concealed
$ define /nolog wrk_sslinclude wrk_sslroot:[include]
$
$ if f$parse( "wrk_sslroot:[000000]") .eqs. "" then -
create /directory /log wrk_sslroot:[000000]
$ if f$parse( "wrk_sslinclude:") .eqs. "" then -
create /directory /log wrk_sslinclude:
$ if f$parse( "wrk_sslroot:[vms]") .eqs. "" then -
create /directory /log wrk_sslroot:[vms]
$!
$ copy /log /protection = world:re openssl_startup.com wrk_sslroot:[vms]
$ copy /log /protection = world:re openssl_undo.com wrk_sslroot:[vms]
$ copy /log /protection = world:re openssl_utils.com wrk_sslroot:[vms]
$!
$ tidy:
$!
$ call deass wrk_sslroot
$ call deass wrk_sslinclude
$!
$ exit
$!
$ deass: subroutine
$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
$ then
$ deassign /process 'p1'
$ endif
$ endsubroutine
$!

72
VMS/install.com Normal file
View File

@ -0,0 +1,72 @@
$! INSTALL.COM -- Installs the files in a given directory tree
$!
$! Author: Richard Levitte <richard@levitte.org>
$! Time of creation: 23-MAY-1998 19:22
$!
$! P1 root of the directory tree
$!
$ IF P1 .EQS. ""
$ THEN
$ WRITE SYS$OUTPUT "First argument missing."
$ WRITE SYS$OUTPUT "Should be the directory where you want things installed."
$ EXIT
$ ENDIF
$
$ ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
$ ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
$ ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
- "[000000." - "][" - "[" - "]"
$ ROOT = ROOT_DEV + "[" + ROOT_DIR
$
$ DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
$ DEFINE/NOLOG WRK_SSLVLIB WRK_SSLROOT:[VAX_LIB]
$ DEFINE/NOLOG WRK_SSLALIB WRK_SSLROOT:[ALPHA_LIB]
$ DEFINE/NOLOG WRK_SSLINCLUDE WRK_SSLROOT:[INCLUDE]
$ DEFINE/NOLOG WRK_SSLVEXE WRK_SSLROOT:[VAX_EXE]
$ DEFINE/NOLOG WRK_SSLAEXE WRK_SSLROOT:[ALPHA_EXE]
$ DEFINE/NOLOG WRK_SSLCERTS WRK_SSLROOT:[CERTS]
$ DEFINE/NOLOG WRK_SSLPRIVATE WRK_SSLROOT:[PRIVATE]
$
$ IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
CREATE/DIR/LOG WRK_SSLROOT:[000000]
$ IF F$PARSE("WRK_SSLINCLUDE:") .EQS. "" THEN -
CREATE/DIR/LOG WRK_SSLINCLUDE:
$ IF F$PARSE("WRK_SSLROOT:[VMS]") .EQS. "" THEN -
CREATE/DIR/LOG WRK_SSLROOT:[VMS]
$
$ IF F$SEARCH("WRK_SSLINCLUDE:vms_idhacks.h") .NES. "" THEN -
DELETE WRK_SSLINCLUDE:vms_idhacks.h;*
$
$ OPEN/WRITE SF WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM
$ WRITE SYS$OUTPUT "%OPEN-I-CREATED, ",F$SEARCH("WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM")," created."
$ WRITE SF "$! Startup file for Openssl 0.9.2-RL 15-Mar-1999"
$ WRITE SF "$!"
$ WRITE SF "$! Do not edit this file, as it will be regenerated during next installation."
$ WRITE SF "$! Instead, add or change SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"
$ WRITE SF "$!"
$ WRITE SF "$! P1 a qualifier to DEFINE. For example ""/SYSTEM"" to get the logical names"
$ WRITE SF "$! defined in the system logical name table."
$ WRITE SF "$!"
$ WRITE SF "$ ARCH = ""VAX"""
$ WRITE SF "$ IF F$GETSYI(""CPU"") .GE. 128 THEN ARCH = ""ALPHA"""
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLROOT ",ROOT,".] /TRANS=CONC"
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLLIB SSLROOT:['ARCH'_LIB]"
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLINCLUDE SSLROOT:[INCLUDE]"
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLEXE SSLROOT:['ARCH'_EXE]"
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLCERTS SSLROOT:[CERTS]"
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLPRIVATE SSLROOT:[PRIVATE]"
$ WRITE SF "$"
$ WRITE SF "$! This is program can include <openssl/{foo}.h>"
$ WRITE SF "$ DEFINE/NOLOG'P1 OPENSSL SSLINCLUDE:"
$ WRITE SF "$"
$ WRITE SF "$ IF F$SEARCH(""SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"") .NES."""" THEN -"
$ WRITE SF " @SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"
$ WRITE SF "$"
$ WRITE SF "$ EXIT"
$ CLOSE SF
$ SET FILE/PROT=WORLD:RE WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM
$
$ COPY OPENSSL_UTILS.COM WRK_SSLROOT:[VMS]/LOG
$ SET FILE/PROT=WORLD:RE WRK_SSLROOT:[VMS]OPENSSL_UTILS.COM
$
$ EXIT

View File

@ -1,168 +1,77 @@
$! MKSHARED.COM -- Create shareable images. $! MKSHARED.COM -- script to created shareable images on VMS
$! $!
$! P1: "64" for 64-bit pointers. $! No command line parameters. This should be run at the start of the source
$! tree (the same directory where one finds INSTALL.VMS).
$! $!
$! P2: Zlib object library path (optional). $! Input: [.UTIL]LIBEAY.NUM,[.AXP.EXE.CRYPTO]LIBCRYPTO.OLB
$! $! [.UTIL]SSLEAY.NUM,[.AXP.EXE.SSL]LIBSSL.OLB
$! Input: [.UTIL]LIBEAY.NUM,[.xxx.EXE.CRYPTO]SSL_LIBCRYPTO[32].OLB $! Output: [.AXP.EXE.CRYPTO]LIBCRYPTO.OPT,.MAP,.EXE
$! [.UTIL]SSLEAY.NUM,[.xxx.EXE.SSL]SSL_LIBSSL[32].OLB $! [.AXP.EXE.SSL]LIBSSL.OPT,.MAP,.EXE
$! [.CRYPTO.xxx]OPENSSLCONF.H
$! Output: [.xxx.EXE.CRYPTO]SSL_LIBCRYPTO_SHR[32].OPT,.MAP,.EXE
$! [.xxx.EXE.SSL]SSL_LIBSSL_SRH[32].OPT,.MAP,.EXE
$! $!
$! So far, tests have only been made on VMS for Alpha. VAX will come in time. $! So far, tests have only been made on VMS for Alpha. VAX will come in time.
$! =========================================================================== $! ===========================================================================
$! $
$! Announce/identify.
$!
$ proc = f$environment( "procedure")
$ write sys$output "@@@ "+ -
f$parse( proc, , , "name")+ f$parse( proc, , , "type")
$!
$! Save the original default device:[directory].
$!
$ def_orig = f$environment( "default")
$ on error then goto tidy
$ on control_c then goto tidy
$!
$! SET DEFAULT to the main kit directory.
$!
$ proc = f$environment("procedure")
$ proc = f$parse( "A.;", proc)- "A.;"
$ set default 'proc'
$ set default [-]
$!
$! ----- Prepare info for processing: version number and file info $! ----- Prepare info for processing: version number and file info
$ gosub read_version_info $ gosub read_version_info
$ if libver .eqs. "" $ if libver .eqs. ""
$ then $ then
$ write sys$error "ERROR: Couldn't find any library version info..." $ write sys$error "ERROR: Couldn't find any library version info..."
$ go to tidy: $ exit
$ endif $ endif
$ $
$ if (f$getsyi("cpu") .lt. 128) $ if f$getsyi("CPU") .ge. 128
$ then $ then
$ arch_vax = 1 $ libid = "Crypto"
$ arch = "VAX" $ 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 $ else
$ arch_vax = 0
$ arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
$ if (arch .eqs. "") then arch = "UNK"
$ endif
$!
$ archd = arch
$ lib32 = "32"
$ shr = "SHR32"
$!
$ if (p1 .nes. "")
$ then
$ if (p1 .eqs. "64")
$ then
$ archd = arch+ "_64"
$ lib32 = ""
$ shr = "SHR"
$ else
$ if (p1 .nes. "32")
$ then
$ write sys$output "Second argument invalid."
$ write sys$output "It should be "32", "64", or nothing."
$ exit
$ endif
$ endif
$ endif
$!
$! ----- Prepare info for processing: disabled algorithms info
$ gosub read_disabled_algorithms_info
$!
$ ZLIB = p2
$ zlib_lib = ""
$ if (ZLIB .nes. "")
$ then
$ file2 = f$parse( ZLIB, "libz.olb", , , "syntax_only")
$ if (f$search( file2) .eqs. "")
$ then
$ write sys$output ""
$ write sys$output "The Option ", ZLIB, " Is Invalid."
$ write sys$output " Can't find library: ''file2'"
$ write sys$output ""
$ goto tidy
$ endif
$ zlib_lib = ", ''file2' /library"
$ endif
$!
$ if (arch_vax)
$ then
$ libtit = "CRYPTO_TRANSFER_VECTOR" $ libtit = "CRYPTO_TRANSFER_VECTOR"
$ libid = "Crypto" $ libid = "Crypto"
$ libnum = "[.UTIL]LIBEAY.NUM" $ libnum = "[.UTIL]LIBEAY.NUM"
$ libdir = "[.''ARCHD'.EXE.CRYPTO]" $ libdir = "[.VAX.EXE.CRYPTO]"
$ libmar = "''libdir'SSL_LIBCRYPTO_''shr'.MAR" $ libmar = "''libdir'LIBCRYPTO.MAR"
$ libolb = "''libdir'SSL_LIBCRYPTO''lib32'.OLB" $ libolb = "''libdir'LIBCRYPTO.OLB"
$ libopt = "''libdir'SSL_LIBCRYPTO_''shr'.OPT" $ libopt = "''libdir'LIBCRYPTO.OPT"
$ libobj = "''libdir'SSL_LIBCRYPTO_''shr'.OBJ" $ libobj = "''libdir'LIBCRYPTO.OBJ"
$ libmap = "''libdir'SSL_LIBCRYPTO_''shr'.MAP" $ libmap = "''libdir'LIBCRYPTO.MAP"
$ libgoal= "''libdir'SSL_LIBCRYPTO_''shr'.EXE" $ libgoal= "''libdir'LIBCRYPTO.EXE"
$ libref = "" $ libref = ""
$ libvec = "LIBCRYPTO" $ libvec = "LIBCRYPTO"
$ if f$search( libolb) .nes. "" then gosub create_vax_shr $ gosub create_vax_shr
$ libtit = "SSL_TRANSFER_VECTOR" $ libtit = "SSL_TRANSFER_VECTOR"
$ libid = "SSL" $ libid = "SSL"
$ libnum = "[.UTIL]SSLEAY.NUM" $ libnum = "[.UTIL]SSLEAY.NUM"
$ libdir = "[.''ARCHD'.EXE.SSL]" $ libdir = "[.VAX.EXE.SSL]"
$ libmar = "''libdir'SSL_LIBSSL_''shr'.MAR" $ libmar = "''libdir'LIBSSL.MAR"
$ libolb = "''libdir'SSL_LIBSSL''lib32'.OLB" $ libolb = "''libdir'LIBSSL.OLB"
$ libopt = "''libdir'SSL_LIBSSL_''shr'.OPT" $ libopt = "''libdir'LIBSSL.OPT"
$ libobj = "''libdir'SSL_LIBSSL_''shr'.OBJ" $ libobj = "''libdir'LIBSSL.OBJ"
$ libmap = "''libdir'SSL_LIBSSL_''shr'.MAP" $ libmap = "''libdir'LIBSSL.MAP"
$ libgoal= "''libdir'SSL_LIBSSL_''shr'.EXE" $ libgoal= "''libdir'LIBSSL.EXE"
$ libref = "[.''ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO_''shr'.EXE" $ libref = "[.VAX.EXE.CRYPTO]LIBCRYPTO.EXE"
$ libvec = "LIBSSL" $ libvec = "LIBSSL"
$ if f$search( libolb) .nes. "" then gosub create_vax_shr $ gosub create_vax_shr
$ else
$ libid = "Crypto"
$ libnum = "[.UTIL]LIBEAY.NUM"
$ libdir = "[.''ARCHD'.EXE.CRYPTO]"
$ libolb = "''libdir'SSL_LIBCRYPTO''lib32'.OLB"
$ libopt = "''libdir'SSL_LIBCRYPTO_''shr'.OPT"
$ libmap = "''libdir'SSL_LIBCRYPTO_''shr'.MAP"
$ libgoal= "''libdir'SSL_LIBCRYPTO_''shr'.EXE"
$ libref = ""
$ if f$search( libolb) .nes. "" then gosub create_nonvax_shr
$ libid = "SSL"
$ libnum = "[.UTIL]SSLEAY.NUM"
$ libdir = "[.''ARCHD'.EXE.SSL]"
$ libolb = "''libdir'SSL_LIBSSL''lib32'.OLB"
$ libopt = "''libdir'SSL_LIBSSL_''shr'.OPT"
$ libmap = "''libdir'SSL_LIBSSL_''shr'.MAP"
$ libgoal= "''libdir'SSL_LIBSSL_''shr'.EXE"
$ libref = "[.''ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO_''shr'.EXE"
$ if f$search( libolb) .nes. "" then gosub create_nonvax_shr
$ endif $ endif
$!
$ tidy:
$!
$! Close any open files.
$!
$ if (f$trnlnm( "libnum", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
close libnum
$!
$ if (f$trnlnm( "mar", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
close mar
$!
$ if (f$trnlnm( "opt", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
close opt
$!
$ if (f$trnlnm( "vf", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
close vf
$!
$! Restore the original default device:[directory].
$!
$ set default 'def_orig'
$ exit $ exit
$ $
$! ----- Subroutines to build the shareable libraries $! ----- Soubroutines to actually build the shareable libraries
$! For each supported architecture, there's a main shareable library $! The way things work, there's a main shareable library creator for each
$! creator, which is called from the main code above. $! supported architecture, which is called from the main code above.
$! The creator will define a number of variables to tell the next levels of $! 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 $! 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 $! main processor, read_func_num, and when that is done, it will write version
@ -188,29 +97,28 @@ $! 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 $! libwriter The name of the writer routine to call for each .num file line
$! ----- $! -----
$ $
$! ----- Subroutines for non-VAX $! ----- Subroutines for AXP
$! ----- $! -----
$! The creator routine $! The creator routine
$ create_nonvax_shr: $ create_axp_shr:
$ open /write opt 'libopt' $ open/write opt 'libopt'
$ write opt "identification=""",libid," ",libverstr,"""" $ write opt "identification=""",libid," ",libverstr,""""
$ write opt libolb, " /library" $ write opt libolb,"/lib"
$ if libref .nes. "" then write opt libref,"/SHARE" $ if libref .nes. "" then write opt libref,"/SHARE"
$ write opt "SYMBOL_VECTOR=(-" $ write opt "SYMBOL_VECTOR=(-"
$ libfirstentry := true $ libfirstentry := true
$ libwrch := opt $ libwrch := opt
$ libwriter := write_nonvax_transfer_entry $ libwriter := write_axp_transfer_entry
$ textcount = 0 $ textcount = 0
$ gosub read_func_num $ gosub read_func_num
$ write opt ")" $ write opt ")"
$ write opt "GSMATCH=",libvmatch,",",libver $ write opt "GSMATCH=",libvmatch,",",libver
$ close opt $ close opt
$ link /map = 'libmap' /full /share = 'libgoal' 'libopt' /options - $ link/map='libmap'/full/share='libgoal' 'libopt'/option
'zlib_lib'
$ return $ return
$ $
$! The record writer routine $! The record writer routine
$ write_nonvax_transfer_entry: $ write_axp_transfer_entry:
$ if libentry .eqs. ".dummy" then return $ if libentry .eqs. ".dummy" then return
$ if info_kind .eqs. "VARIABLE" $ if info_kind .eqs. "VARIABLE"
$ then $ then
@ -236,11 +144,11 @@ $ libfirstentry := false
$ textcount = textcount + textcount_this $ textcount = textcount + textcount_this
$ return $ return
$ $
$! ----- Subroutines for VAX $! ----- Subroutines for AXP
$! ----- $! -----
$! The creator routine $! The creator routine
$ create_vax_shr: $ create_vax_shr:
$ open /write mar 'libmar' $ open/write mar 'libmar'
$ type sys$input:/out=mar: $ type sys$input:/out=mar:
; ;
; Transfer vector for VAX shareable image ; Transfer vector for VAX shareable image
@ -275,10 +183,10 @@ $! libwriter := write_vax_vtransfer_entry
$! gosub read_func_num $! gosub read_func_num
$ write mar " .END" $ write mar " .END"
$ close mar $ close mar
$ open /write opt 'libopt' $ open/write opt 'libopt'
$ write opt "identification=""",libid," ",libverstr,"""" $ write opt "identification=""",libid," ",libverstr,""""
$ write opt libobj $ write opt libobj
$ write opt libolb, " /library" $ write opt libolb,"/lib"
$ if libref .nes. "" then write opt libref,"/SHARE" $ if libref .nes. "" then write opt libref,"/SHARE"
$ type sys$input:/out=opt: $ type sys$input:/out=opt:
! !
@ -297,8 +205,7 @@ $ libwriter := write_vax_psect_attr
$ gosub read_func_num $ gosub read_func_num
$ close opt $ close opt
$ macro/obj='libobj' 'libmar' $ macro/obj='libobj' 'libmar'
$ link /map = 'libmap' /full /share = 'libgoal' 'libopt' /options - $ link/map='libmap'/full/share='libgoal' 'libopt'/option
'zlib_lib'
$ return $ return
$ $
$! The record writer routine for VAX functions $! The record writer routine for VAX functions
@ -320,9 +227,9 @@ $ return
$ $
$! ----- Common subroutines $! ----- Common subroutines
$! ----- $! -----
$! The .num file reader. This one has great responsibility. $! The .num file reader. This one has great responsability.
$ read_func_num: $ read_func_num:
$ open /read libnum 'libnum' $ open libnum 'libnum'
$ goto read_nums $ goto read_nums
$ $
$ read_nums: $ read_nums:
@ -330,46 +237,35 @@ $ libentrynum=0
$ liblastentry:=false $ liblastentry:=false
$ entrycount=0 $ entrycount=0
$ loop: $ loop:
$ read /end=loop_end /err=loop_end libnum line $ read/end=loop_end/err=loop_end libnum line
$ lin = f$edit( line, "COMPRESS,TRIM") $ entrynum=f$int(f$element(1," ",f$edit(line,"COMPRESS,TRIM")))
$! Skip a "#" comment line. $ entryinfo=f$element(2," ",f$edit(line,"COMPRESS,TRIM"))
$ if (f$extract( 0, 1, lin) .eqs. "#") then goto loop $ curentry=f$element(0," ",f$edit(line,"COMPRESS,TRIM"))
$ entrynum = f$int(f$element( 1, " ", lin)) $ info_exist=f$element(0,":",entryinfo)
$ entryinfo = f$element( 2, " ", lin) $ info_platforms=","+f$element(1,":",entryinfo)+","
$ curentry = f$element( 0, " ", lin) $ info_kind=f$element(2,":",entryinfo)
$ info_exist = f$element( 0, ":", entryinfo) $ info_algorithms=","+f$element(3,":",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 $ if info_exist .eqs. "NOEXIST" then goto loop
$ truesum = 0 $ truesum = 0
$ falsesum = 0 $ falsesum = 0
$ negatives = 1 $ negatives = 1
$ plat_i = 0 $ plat_i = 0
$ loop1: $ loop1:
$ plat_entry = f$element( plat_i, ",", info_platforms) $ plat_entry = f$element(plat_i,",",info_platforms)
$ plat_i = plat_i + 1 $ plat_i = plat_i + 1
$ if plat_entry .eqs. "" then goto loop1 $ if plat_entry .eqs. "" then goto loop1
$ if plat_entry .nes. "," $ if plat_entry .nes. ","
$ then $ then
$ if f$extract(0,1,plat_entry) .nes. "!" then negatives = 0 $ if f$extract(0,1,plat_entry) .nes. "!" then negatives = 0
$ if (arch_vax) $ if f$getsyi("CPU") .lt. 128
$ then $ then
$ if plat_entry .eqs. "EXPORT_VAR_AS_FUNCTION" then - $ if plat_entry .eqs. "EXPORT_VAR_AS_FUNCTION" then -
$ truesum = truesum + 1 $ truesum = truesum + 1
$ if plat_entry .eqs. "!EXPORT_VAR_AS_FUNCTION" then - $ if plat_entry .eqs. "!EXPORT_VAR_AS_FUNCTION" then -
$ falsesum = falsesum + 1 $ falsesum = falsesum + 1
$ endif $ endif
$! $ if plat_entry .eqs. "VMS" then truesum = truesum + 1
$ if ((plat_entry .eqs. "VMS") .or. - $ if plat_entry .eqs. "!VMS" then falsesum = falsesum + 1
((plat_entry .eqs. "ZLIB") .and. (ZLIB .nes. "")) .or. -
(arch_vax .and. (plat_entry .eqs. "VMSVAX"))) then -
truesum = truesum + 1
$!
$ if ((plat_entry .eqs. "!VMS") .or. -
(arch_vax .and. (plat_entry .eqs. "!VMSVAX"))) then -
falsesum = falsesum + 1
$!
$ goto loop1 $ goto loop1
$ endif $ endif
$ endloop1: $ endloop1:
@ -388,7 +284,8 @@ $ alg_i = alg_i + 1
$ if alg_entry .eqs. "" then goto loop2 $ if alg_entry .eqs. "" then goto loop2
$ if alg_entry .nes. "," $ if alg_entry .nes. ","
$ then $ then
$ if disabled_algorithms - ("," + alg_entry + ",") .nes disabled_algorithms then goto loop $ 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 $ if f$trnlnm("OPENSSL_NO_"+alg_entry) .nes. "" then goto loop
$ goto loop2 $ goto loop2
$ endif $ endif
@ -431,7 +328,7 @@ $
$! The version number reader $! The version number reader
$ read_version_info: $ read_version_info:
$ libver = "" $ libver = ""
$ open /read vf [.CRYPTO]OPENSSLV.H $ open/read vf [.CRYPTO]OPENSSLV.H
$ loop_rvi: $ loop_rvi:
$ read/err=endloop_rvi/end=endloop_rvi vf rvi_line $ read/err=endloop_rvi/end=endloop_rvi vf rvi_line
$ if rvi_line - "SHLIB_VERSION_NUMBER """ .eqs. rvi_line then - $ if rvi_line - "SHLIB_VERSION_NUMBER """ .eqs. rvi_line then -
@ -455,22 +352,3 @@ $ endif
$ endloop_rvi: $ endloop_rvi:
$ close vf $ close vf
$ return $ return
$
$! The disabled algorithms reader
$ read_disabled_algorithms_info:
$ disabled_algorithms = ","
$ open /read cf [.CRYPTO.'ARCH']OPENSSLCONF.H
$ loop_rci:
$ read/err=endloop_rci/end=endloop_rci cf rci_line
$ rci_line = f$edit(rci_line,"TRIM,COMPRESS")
$ rci_ei = 0
$ if f$extract(0,9,rci_line) .eqs. "# define " then rci_ei = 2
$ if f$extract(0,8,rci_line) .eqs. "#define " then rci_ei = 1
$ if rci_ei .eq. 0 then goto loop_rci
$ rci_e = f$element(rci_ei," ",rci_line)
$ if f$extract(0,11,rci_e) .nes. "OPENSSL_NO_" then goto loop_rci
$ disabled_algorithms = disabled_algorithms + f$extract(11,999,rci_e) + ","
$ goto loop_rci
$ endloop_rci:
$ close cf
$ return

View File

@ -1,108 +0,0 @@
$!
$! Startup file for OpenSSL 1.x.
$!
$! 2011-03-05 SMS.
$!
$! This procedure must reside in the OpenSSL installation directory.
$! It will fail if it is copied to a different location.
$!
$! P1 qualifier(s) for DEFINE. For example, "/SYSTEM" to get the
$! logical names defined in the system logical name table.
$!
$! P2 "64", to use executables which were built with 64-bit pointers.
$!
$! Good (default) and bad status values.
$!
$ status = %x00010001 ! RMS$_NORMAL, normal successful completion.
$ rms_e_fnf = %x00018292 ! RMS$_FNF, file not found.
$!
$! Prepare for problems.
$!
$ orig_dev_dir = f$environment( "DEFAULT")
$ on control_y then goto clean_up
$ on error then goto clean_up
$!
$! Determine hardware architecture.
$!
$ if (f$getsyi( "cpu") .lt. 128)
$ then
$ arch_name = "VAX"
$ else
$ arch_name = f$edit( f$getsyi( "arch_name"), "upcase")
$ if (arch_name .eqs. "") then arch_name = "UNK"
$ endif
$!
$ if (p2 .eqs. "64")
$ then
$ arch_name_exe = arch_name+ "_64"
$ else
$ arch_name_exe = arch_name
$ endif
$!
$! Derive the OpenSSL installation device:[directory] from the location
$! of this command procedure.
$!
$ proc = f$environment( "procedure")
$ proc_dev_dir = f$parse( "A.;", proc, , , "no_conceal") - "A.;"
$ proc_dev = f$parse( proc_dev_dir, , , "device", "syntax_only")
$ proc_dir = f$parse( proc_dev_dir, , , "directory", "syntax_only") - -
".][000000"- "[000000."- "]["- "["- "]"
$ proc_dev_dir = proc_dev+ "["+ proc_dir+ "]"
$ set default 'proc_dev_dir'
$ set default [-]
$ ossl_dev_dir = f$environment( "default")
$!
$! Check existence of expected directories (to see if this procedure has
$! been moved away from its proper place).
$!
$ if ((f$search( "certs.dir;1") .eqs. "") .or. -
(f$search( "include.dir;1") .eqs. "") .or. -
(f$search( "private.dir;1") .eqs. "") .or. -
(f$search( "vms.dir;1") .eqs. ""))
$ then
$ write sys$output -
" Can't find expected common OpenSSL directories in:"
$ write sys$output " ''ossl_dev_dir'"
$ status = rms_e_fnf
$ goto clean_up
$ endif
$!
$ if ((f$search( "''arch_name_exe'_exe.dir;1") .eqs. "") .or. -
(f$search( "''arch_name'_lib.dir;1") .eqs. ""))
$ then
$ write sys$output -
" Can't find expected architecture-specific OpenSSL directories in:"
$ write sys$output " ''ossl_dev_dir'"
$ status = rms_e_fnf
$ goto clean_up
$ endif
$!
$! All seems well (enough). Define the OpenSSL logical names.
$!
$ ossl_root = ossl_dev_dir- "]"+ ".]"
$ define /translation_attributes = concealed /nolog'p1 SSLROOT 'ossl_root'
$ define /nolog 'p1' SSLCERTS sslroot:[certs]
$ define /nolog 'p1' SSLINCLUDE sslroot:[include]
$ define /nolog 'p1' SSLPRIVATE sslroot:[private]
$ define /nolog 'p1' SSLEXE sslroot:['arch_name_exe'_exe]
$ define /nolog 'p1' SSLLIB sslroot:['arch_name'_lib]
$!
$! Defining OPENSSL lets a C program use "#include <openssl/{foo}.h>":
$ define /nolog 'p1' OPENSSL SSLINCLUDE:
$!
$! Run a site-specific procedure, if it exists.
$!
$ if f$search( "sslroot:[vms]openssl_systartup.com") .nes."" then -
@ sslroot:[vms]openssl_systartup.com
$!
$! Restore the original default dev:[dir] (if known).
$!
$ clean_up:
$!
$ if (f$type( orig_dev_dir) .nes. "")
$ then
$ set default 'orig_dev_dir'
$ endif
$!
$ EXIT 'status'
$!

View File

@ -1,20 +0,0 @@
$!
$! Deassign OpenSSL logical names.
$!
$ call deass "OPENSSL" "''p1'"
$ call deass "SSLCERTS" "''p1'"
$ call deass "SSLEXE" "''p1'"
$ call deass "SSLINCLUDE" "''p1'"
$ call deass "SSLLIB" "''p1'"
$ call deass "SSLPRIVATE" "''p1'"
$ call deass "SSLROOT" "''p1'"
$!
$ exit
$!
$deass: subroutine
$ if (f$trnlnm( p1) .nes. "")
$ then
$ deassign 'p2' 'p1'
$ endif
$ endsubroutine
$!

View File

@ -8,39 +8,31 @@ $!
$! $!
$! Slightly modified by Richard Levitte <richard@levitte.org> $! Slightly modified by Richard Levitte <richard@levitte.org>
$! $!
$!
$! Always define OPENSSL. Others are optional (non-null P1).
$!
$ OPENSSL :== $SSLEXE:OPENSSL $ OPENSSL :== $SSLEXE:OPENSSL
$ $ VERIFY :== $SSLEXE:OPENSSL VERIFY
$ IF (P1 .NES. "") $ ASN1PARSE:== $SSLEXE:OPENSSL ASN1PARS
$ THEN $ REQ :== $SSLEXE:OPENSSL REQ
$ VERIFY :== $SSLEXE:OPENSSL VERIFY $ DGST :== $SSLEXE:OPENSSL DGST
$ ASN1PARSE:== $SSLEXE:OPENSSL ASN1PARS $ DH :== $SSLEXE:OPENSSL DH
$! REQ could conflict with REQUEST. $ ENC :== $SSLEXE:OPENSSL ENC
$ OREQ :== $SSLEXE:OPENSSL REQ $ GENDH :== $SSLEXE:OPENSSL GENDH
$ DGST :== $SSLEXE:OPENSSL DGST $ ERRSTR :== $SSLEXE:OPENSSL ERRSTR
$ DH :== $SSLEXE:OPENSSL DH $ CA :== $SSLEXE:OPENSSL CA
$ ENC :== $SSLEXE:OPENSSL ENC $ CRL :== $SSLEXE:OPENSSL CRL
$ GENDH :== $SSLEXE:OPENSSL GENDH $ RSA :== $SSLEXE:OPENSSL RSA
$ ERRSTR :== $SSLEXE:OPENSSL ERRSTR $ DSA :== $SSLEXE:OPENSSL DSA
$ CA :== $SSLEXE:OPENSSL CA $ DSAPARAM :== $SSLEXE:OPENSSL DSAPARAM
$ CRL :== $SSLEXE:OPENSSL CRL $ X509 :== $SSLEXE:OPENSSL X509
$ RSA :== $SSLEXE:OPENSSL RSA $ GENRSA :== $SSLEXE:OPENSSL GENRSA
$ DSA :== $SSLEXE:OPENSSL DSA $ GENDSA :== $SSLEXE:OPENSSL GENDSA
$ DSAPARAM :== $SSLEXE:OPENSSL DSAPARAM $ S_SERVER :== $SSLEXE:OPENSSL S_SERVER
$ X509 :== $SSLEXE:OPENSSL X509 $ S_CLIENT :== $SSLEXE:OPENSSL S_CLIENT
$ GENRSA :== $SSLEXE:OPENSSL GENRSA $ SPEED :== $SSLEXE:OPENSSL SPEED
$ GENDSA :== $SSLEXE:OPENSSL GENDSA $ S_TIME :== $SSLEXE:OPENSSL S_TIME
$ S_SERVER :== $SSLEXE:OPENSSL S_SERVER $ VERSION :== $SSLEXE:OPENSSL VERSION
$ S_CLIENT :== $SSLEXE:OPENSSL S_CLIENT $ PKCS7 :== $SSLEXE:OPENSSL PKCS7
$ SPEED :== $SSLEXE:OPENSSL SPEED $ CRL2PKCS7:== $SSLEXE:OPENSSL CRL2P7
$ S_TIME :== $SSLEXE:OPENSSL S_TIME $ SESS_ID :== $SSLEXE:OPENSSL SESS_ID
$ VERSION :== $SSLEXE:OPENSSL VERSION $ CIPHERS :== $SSLEXE:OPENSSL CIPHERS
$ PKCS7 :== $SSLEXE:OPENSSL PKCS7 $ NSEQ :== $SSLEXE:OPENSSL NSEQ
$ CRL2PKCS7:== $SSLEXE:OPENSSL CRL2P7 $ PKCS12 :== $SSLEXE:OPENSSL PKCS12
$ SESS_ID :== $SSLEXE:OPENSSL SESS_ID
$ CIPHERS :== $SSLEXE:OPENSSL CIPHERS
$ NSEQ :== $SSLEXE:OPENSSL NSEQ
$ PKCS12 :== $SSLEXE:OPENSSL PKCS12
$ ENDIF

7
apps/.cvsignore Normal file
View File

@ -0,0 +1,7 @@
openssl
Makefile.save
der_chop
der_chop.bak
CA.pl
*.flc
semantic.cache

View File

@ -37,25 +37,14 @@ $ VERIFY = openssl + " verify"
$ X509 = openssl + " x509" $ X509 = openssl + " x509"
$ PKCS12 = openssl + " pkcs12" $ PKCS12 = openssl + " pkcs12"
$ echo = "write sys$Output" $ echo = "write sys$Output"
$ RET = 1
$! $!
$! 2010-12-20 SMS. $ s = F$PARSE(F$ENVIRONMENT("DEFAULT"),"[]") - "].;"
$! Use a concealed logical name to reduce command line lengths, to $ CATOP := 's'.demoCA
$! avoid DCL errors on VAX: $ CAKEY := ]cakey.pem
$! %DCL-W-TKNOVF, command element is too long - shorten $ CACERT := ]cacert.pem
$! (Path segments like "openssl-1_0_1-stable-SNAP-20101217" accumulate
$! quickly.)
$!
$ CATOP = F$PARSE( F$ENVIRONMENT( "DEFAULT"), "[]")- "].;"+ ".demoCA.]"
$ define /translation_attributes = concealed CATOP 'CATOP'
$!
$ on error then goto clean_up
$ on control_y then goto clean_up
$!
$ CAKEY = "CATOP:[private]cakey.pem"
$ CACERT = "CATOP:[000000]cacert.pem"
$ $
$ __INPUT := SYS$COMMAND $ __INPUT := SYS$COMMAND
$ RET = 1
$! $!
$ i = 1 $ i = 1
$opt_loop: $opt_loop:
@ -66,7 +55,7 @@ $
$ IF (prog_opt .EQS. "?" .OR. prog_opt .EQS. "-h" .OR. prog_opt .EQS. "-help") $ IF (prog_opt .EQS. "?" .OR. prog_opt .EQS. "-h" .OR. prog_opt .EQS. "-help")
$ THEN $ THEN
$ echo "usage: CA -newcert|-newreq|-newca|-sign|-verify" $ echo "usage: CA -newcert|-newreq|-newca|-sign|-verify"
$ goto clean_up $ exit
$ ENDIF $ ENDIF
$! $!
$ IF (prog_opt .EQS. "-input") $ IF (prog_opt .EQS. "-input")
@ -80,7 +69,7 @@ $!
$ IF (prog_opt .EQS. "-newcert") $ IF (prog_opt .EQS. "-newcert")
$ THEN $ THEN
$ ! Create a certificate. $ ! Create a certificate.
$ DEFINE /USER_MODE SYS$INPUT '__INPUT' $ DEFINE/USER SYS$INPUT '__INPUT'
$ REQ -new -x509 -keyout newreq.pem -out newreq.pem 'DAYS' $ REQ -new -x509 -keyout newreq.pem -out newreq.pem 'DAYS'
$ RET=$STATUS $ RET=$STATUS
$ echo "Certificate (and private key) is in newreq.pem" $ echo "Certificate (and private key) is in newreq.pem"
@ -90,7 +79,7 @@ $!
$ IF (prog_opt .EQS. "-newreq") $ IF (prog_opt .EQS. "-newreq")
$ THEN $ THEN
$ ! Create a certificate request $ ! Create a certificate request
$ DEFINE /USER_MODE SYS$INPUT '__INPUT' $ DEFINE/USER SYS$INPUT '__INPUT'
$ REQ -new -keyout newreq.pem -out newreq.pem 'DAYS' $ REQ -new -keyout newreq.pem -out newreq.pem 'DAYS'
$ RET=$STATUS $ RET=$STATUS
$ echo "Request (and private key) is in newreq.pem" $ echo "Request (and private key) is in newreq.pem"
@ -101,40 +90,41 @@ $ IF (prog_opt .EQS. "-newca")
$ THEN $ THEN
$ ! 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
$ ! structure that Eric likes to manage things. $ ! structure that Eric likes to manage things.
$ IF F$SEARCH( "CATOP:[000000]serial.") .EQS. "" $ IF F$SEARCH(CATOP+"]serial.") .EQS. ""
$ THEN $ THEN
$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[000000] $ CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP']
$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[certs] $ CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.certs]
$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[crl] $ CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.crl]
$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[newcerts] $ CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.newcerts]
$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[private] $ CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.private]
$ $
$ OPEN /WRITE ser_file CATOP:[000000]serial. $ OPEN /WRITE ser_file 'CATOP']serial.
$ WRITE ser_file "01" $ WRITE ser_file "01"
$ CLOSE ser_file $ CLOSE ser_file
$ APPEND /NEW_VERSION NL: CATOP:[000000]index.txt $ APPEND/NEW NL: 'CATOP']index.txt
$ $
$ ! The following is to make sure access() doesn't get confused. It $ ! The following is to make sure access() doesn't get confused. It
$ ! really needs one file in the directory to give correct answers... $ ! really needs one file in the directory to give correct answers...
$ COPY NLA0: CATOP:[certs].; $ COPY NLA0: 'CATOP'.certs].;
$ COPY NLA0: CATOP:[crl].; $ COPY NLA0: 'CATOP'.crl].;
$ COPY NLA0: CATOP:[newcerts].; $ COPY NLA0: 'CATOP'.newcerts].;
$ COPY NLA0: CATOP:[private].; $ COPY NLA0: 'CATOP'.private].;
$ ENDIF $ ENDIF
$! $!
$ IF F$SEARCH( CAKEY) .EQS. "" $ IF F$SEARCH(CATOP+".private"+CAKEY) .EQS. ""
$ THEN $ THEN
$ READ '__INPUT' FILE - $ READ '__INPUT' FILE -
/PROMPT="CA certificate filename (or enter to create): " /PROMT="CA certificate filename (or enter to create)"
$ IF (FILE .NES. "") .AND. (F$SEARCH(FILE) .NES. "") $ IF F$SEARCH(FILE) .NES. ""
$ THEN $ THEN
$ COPY 'FILE' 'CAKEY' $ COPY 'FILE' 'CATOP'.private'CAKEY'
$ RET=$STATUS $ RET=$STATUS
$ ELSE $ ELSE
$ echo "Making CA certificate ..." $ echo "Making CA certificate ..."
$ DEFINE /USER_MODE SYS$INPUT '__INPUT' $ DEFINE/USER SYS$INPUT '__INPUT'
$ REQ -new -x509 -keyout 'CAKEY' -out 'CACERT' 'DAYS' $ REQ -new -x509 -keyout 'CATOP'.private'CAKEY' -
$ RET=$STATUS -out 'CATOP''CACERT' 'DAYS'
$ RET=$STATUS
$ ENDIF $ ENDIF
$ ENDIF $ ENDIF
$ GOTO opt_loop_continue $ GOTO opt_loop_continue
@ -145,16 +135,16 @@ $ THEN
$ i = i + 1 $ i = i + 1
$ cname = P'i' $ cname = P'i'
$ IF cname .EQS. "" THEN cname = "My certificate" $ IF cname .EQS. "" THEN cname = "My certificate"
$ PKCS12 -in newcert.pem -inkey newreq.pem -certfile 'CACERT' - $ PKCS12 -in newcert.pem -inkey newreq.pem -certfile 'CATOP''CACERT -
-out newcert.p12 -export -name "''cname'" -out newcert.p12 -export -name "''cname'"
$ RET=$STATUS $ RET=$STATUS
$ goto clean_up $ exit RET
$ ENDIF $ ENDIF
$! $!
$ IF (prog_opt .EQS. "-xsign") $ IF (prog_opt .EQS. "-xsign")
$ THEN $ THEN
$! $!
$ DEFINE /USER_MODE SYS$INPUT '__INPUT' $ DEFINE/USER SYS$INPUT '__INPUT'
$ CA -policy policy_anything -infiles newreq.pem $ CA -policy policy_anything -infiles newreq.pem
$ RET=$STATUS $ RET=$STATUS
$ GOTO opt_loop_continue $ GOTO opt_loop_continue
@ -163,7 +153,7 @@ $!
$ IF ((prog_opt .EQS. "-sign") .OR. (prog_opt .EQS. "-signreq")) $ IF ((prog_opt .EQS. "-sign") .OR. (prog_opt .EQS. "-signreq"))
$ THEN $ THEN
$! $!
$ DEFINE /USER_MODE SYS$INPUT '__INPUT' $ DEFINE/USER SYS$INPUT '__INPUT'
$ CA -policy policy_anything -out newcert.pem -infiles newreq.pem $ CA -policy policy_anything -out newcert.pem -infiles newreq.pem
$ RET=$STATUS $ RET=$STATUS
$ type newcert.pem $ type newcert.pem
@ -175,9 +165,9 @@ $ IF (prog_opt .EQS. "-signcert")
$ THEN $ THEN
$! $!
$ echo "Cert passphrase will be requested twice - bug?" $ echo "Cert passphrase will be requested twice - bug?"
$ DEFINE /USER_MODE SYS$INPUT '__INPUT' $ DEFINE/USER SYS$INPUT '__INPUT'
$ X509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem $ X509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem
$ DEFINE /USER_MODE SYS$INPUT '__INPUT' $ DEFINE/USER SYS$INPUT '__INPUT'
$ CA -policy policy_anything -out newcert.pem -infiles tmp.pem $ CA -policy policy_anything -out newcert.pem -infiles tmp.pem
y y
y y
@ -192,17 +182,17 @@ $!
$ i = i + 1 $ i = i + 1
$ IF (p'i' .EQS. "") $ IF (p'i' .EQS. "")
$ THEN $ THEN
$ DEFINE /USER_MODE SYS$INPUT '__INPUT' $ DEFINE/USER SYS$INPUT '__INPUT'
$ VERIFY "-CAfile" 'CACERT' newcert.pem $ VERIFY "-CAfile" 'CATOP''CACERT' newcert.pem
$ ELSE $ ELSE
$ j = i $ j = i
$ verify_opt_loop: $ verify_opt_loop:
$ IF j .GT. 8 THEN GOTO verify_opt_loop_end $ IF j .GT. 8 THEN GOTO verify_opt_loop_end
$ IF p'j' .NES. "" $ IF p'j' .NES. ""
$ THEN $ THEN
$ DEFINE /USER_MODE SYS$INPUT '__INPUT' $ DEFINE/USER SYS$INPUT '__INPUT'
$ __tmp = p'j' $ __tmp = p'j'
$ VERIFY "-CAfile" 'CACERT' '__tmp' $ VERIFY "-CAfile" 'CATOP''CACERT' '__tmp'
$ tmp=$STATUS $ tmp=$STATUS
$ IF tmp .NE. 0 THEN RET=tmp $ IF tmp .NE. 0 THEN RET=tmp
$ ENDIF $ ENDIF
@ -218,8 +208,8 @@ $ IF (prog_opt .NES. "")
$ THEN $ THEN
$! $!
$ echo "Unknown argument ''prog_opt'" $ echo "Unknown argument ''prog_opt'"
$ RET = 3 $
$ goto clean_up $ EXIT 3
$ ENDIF $ ENDIF
$ $
$opt_loop_continue: $opt_loop_continue:
@ -227,10 +217,4 @@ $ i = i + 1
$ GOTO opt_loop $ GOTO opt_loop
$ $
$opt_loop_end: $opt_loop_end:
$!
$clean_up:
$!
$ if f$trnlnm( "CATOP", "LNM$PROCESS") .nes. "" then -
deassign /process CATOP
$!
$ EXIT 'RET' $ EXIT 'RET'

View File

@ -5,10 +5,10 @@
# 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 ... 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
# and the other the certificate) and cat them together and that is what # and the other the certificate) and cat them together and that is what
# you want/need ... I'll make even this a little cleaner later. # you want/need ... I'll make even this a little cleaner later.
# #
@ -16,8 +16,8 @@
# 12-Jan-96 tjh Added more things ... including CA -signcert which # 12-Jan-96 tjh Added more things ... including CA -signcert which
# converts a certificate to a request and then signs it. # converts a certificate to a request and then signs it.
# 10-Jan-96 eay Fixed a few more bugs and added the SSLEAY_CONFIG # 10-Jan-96 eay Fixed a few more bugs and added the SSLEAY_CONFIG
# environment variable so this can be driven from # environment variable so this can be driven from
# a script. # a script.
# 25-Jul-96 eay Cleaned up filenames some more. # 25-Jul-96 eay Cleaned up filenames some more.
# 11-Jun-96 eay Fixed a few filename missmatches. # 11-Jun-96 eay Fixed a few filename missmatches.
# 03-May-96 eay Modified to use 'ssleay cmd' instead of 'cmd'. # 03-May-96 eay Modified to use 'ssleay cmd' instead of 'cmd'.
@ -29,87 +29,52 @@
# 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
cp_pem() {
infile=$1
outfile=$2
bound=$3
flag=0
exec <$infile;
while read line; do
if [ $flag -eq 1 ]; then
echo $line|grep "^-----END.*$bound" 2>/dev/null 1>/dev/null
if [ $? -eq 0 ] ; then
echo $line >>$outfile
break
else
echo $line >>$outfile
fi
fi
echo $line|grep "^-----BEGIN.*$bound" 2>/dev/null 1>/dev/null
if [ $? -eq 0 ]; then
echo $line >$outfile
flag=1
fi
done
}
usage() {
echo "usage: $0 -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify" >&2
}
if [ -z "$OPENSSL" ]; then OPENSSL=openssl; fi if [ -z "$OPENSSL" ]; then OPENSSL=openssl; fi
if [ -z "$DAYS" ] ; then DAYS="-days 365" ; fi # 1 year DAYS="-days 365" # 1 year
CADAYS="-days 1095" # 3 years 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"
if [ -z "$CATOP" ] ; then CATOP=./demoCA ; fi CATOP=./demoCA
CAKEY=./cakey.pem CAKEY=./cakey.pem
CAREQ=./careq.pem CAREQ=./careq.pem
CACERT=./cacert.pem CACERT=./cacert.pem
RET=0 for i
do
while [ "$1" != "" ] ; do case $i in
case $1 in
-\?|-h|-help) -\?|-h|-help)
usage echo "usage: CA -newcert|-newreq|-newca|-sign|-verify" >&2
exit 0 exit 0
;; ;;
-newcert) -newcert)
# create a certificate # create a certificate
$REQ -new -x509 -keyout newkey.pem -out newcert.pem $DAYS $REQ -new -x509 -keyout newkey.pem -out newcert.pem $DAYS
RET=$? RET=$?
echo "Certificate is in newcert.pem, private key is in newkey.pem" echo "Certificate is in newcert.pem, private key is in newkey.pem"
;; ;;
-newreq) -newreq)
# create a certificate request # create a certificate request
$REQ -new -keyout newkey.pem -out newreq.pem $DAYS $REQ -new -keyout newkey.pem -out newreq.pem $DAYS
RET=$? RET=$?
echo "Request is in newreq.pem, private key is in newkey.pem" echo "Request is in newreq.pem, private key is in newkey.pem"
;; ;;
-newreq-nodes) -newca)
# create a certificate request
$REQ -new -nodes -keyout newreq.pem -out newreq.pem $DAYS
RET=$?
echo "Request (and private key) is in newreq.pem"
;;
-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
# structure that Eric likes to manage things # structure that Eric likes to manage things
NEW="1" NEW="1"
if [ "$NEW" -o ! -f ${CATOP}/serial ]; then if [ "$NEW" -o ! -f ${CATOP}/serial ]; then
# create the directory hierarchy # create the directory hierarchy
mkdir -p ${CATOP} mkdir ${CATOP}
mkdir -p ${CATOP}/certs mkdir ${CATOP}/certs
mkdir -p ${CATOP}/crl mkdir ${CATOP}/crl
mkdir -p ${CATOP}/newcerts mkdir ${CATOP}/newcerts
mkdir -p ${CATOP}/private mkdir ${CATOP}/private
echo "00" > ${CATOP}/serial
touch ${CATOP}/index.txt touch ${CATOP}/index.txt
fi fi
if [ ! -f ${CATOP}/private/$CAKEY ]; then if [ ! -f ${CATOP}/private/$CAKEY ]; then
@ -118,60 +83,37 @@ case $1 in
# ask user for existing CA certificate # ask user for existing CA certificate
if [ "$FILE" ]; then if [ "$FILE" ]; then
cp_pem $FILE ${CATOP}/private/$CAKEY PRIVATE cp $FILE ${CATOP}/private/$CAKEY
cp_pem $FILE ${CATOP}/$CACERT CERTIFICATE
RET=$? RET=$?
if [ ! -f "${CATOP}/serial" ]; then
$X509 -in ${CATOP}/$CACERT -noout -next_serial \
-out ${CATOP}/serial
fi
else else
echo "Making CA certificate ..." echo "Making CA certificate ..."
$REQ -new -keyout ${CATOP}/private/$CAKEY \ $REQ -new -keyout ${CATOP}/private/$CAKEY \
-out ${CATOP}/$CAREQ -out ${CATOP}/$CAREQ
$CA -create_serial -out ${CATOP}/$CACERT $CADAYS -batch \ $CA -out ${CATOP}/$CACERT $CADAYS -batch \
-keyfile ${CATOP}/private/$CAKEY -selfsign \ -keyfile ${CATOP}/private/$CAKEY -selfsign \
-extensions v3_ca \ -infiles ${CATOP}/$CAREQ
-infiles ${CATOP}/$CAREQ
RET=$? RET=$?
fi fi
fi fi
;; ;;
-xsign) -xsign)
$CA -policy policy_anything -infiles newreq.pem $CA -policy policy_anything -infiles newreq.pem
RET=$? RET=$?
;; ;;
-pkcs12) -sign|-signreq)
if [ -z "$2" ] ; then
CNAME="My Certificate"
else
CNAME="$2"
fi
$PKCS12 -in newcert.pem -inkey newreq.pem -certfile ${CATOP}/$CACERT \
-out newcert.p12 -export -name "$CNAME"
RET=$?
exit $RET
;;
-sign|-signreq)
$CA -policy policy_anything -out newcert.pem -infiles newreq.pem $CA -policy policy_anything -out newcert.pem -infiles newreq.pem
RET=$? RET=$?
cat newcert.pem cat newcert.pem
echo "Signed certificate is in newcert.pem" echo "Signed certificate is in newcert.pem"
;; ;;
-signCA) -signcert)
$CA -policy policy_anything -out newcert.pem -extensions v3_ca -infiles newreq.pem
RET=$?
echo "Signed CA certificate is in newcert.pem"
;;
-signcert)
echo "Cert passphrase will be requested twice - bug?" echo "Cert passphrase will be requested twice - bug?"
$X509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem $X509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem
$CA -policy policy_anything -out newcert.pem -infiles tmp.pem $CA -policy policy_anything -out newcert.pem -infiles tmp.pem
RET=$?
cat newcert.pem cat newcert.pem
echo "Signed certificate is in newcert.pem" echo "Signed certificate is in newcert.pem"
;; ;;
-verify) -verify)
shift shift
if [ -z "$1" ]; then if [ -z "$1" ]; then
$VERIFY -CAfile $CATOP/$CACERT newcert.pem $VERIFY -CAfile $CATOP/$CACERT newcert.pem
@ -185,14 +127,13 @@ case $1 in
fi fi
done done
fi fi
exit $RET exit 0
;; ;;
*) *)
echo "Unknown arg $i" >&2 echo "Unknown arg $i";
usage
exit 1 exit 1
;; ;;
esac esac
shift
done done
exit $RET exit $RET

File diff suppressed because it is too large Load Diff

View File

@ -5,21 +5,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
@ -63,7 +63,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@ -115,106 +115,104 @@
#include <openssl/bio.h> #include <openssl/bio.h>
#include <openssl/rand.h> #include <openssl/rand.h>
static int seeded = 0; static int seeded = 0;
static int egdsocket = 0; static int egdsocket = 0;
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 consider_randfile = (file == NULL); int consider_randfile = (file == NULL);
char buffer[200]; char buffer[200];
#ifdef OPENSSL_SYS_WINDOWS #ifdef OPENSSL_SYS_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();
BIO_printf(bio_e, " done\n"); BIO_printf(bio_e," done\n");
#endif #endif
if (file == NULL) if (file == NULL)
file = RAND_file_name(buffer, sizeof buffer); file = RAND_file_name(buffer, sizeof buffer);
else if (RAND_egd(file) > 0) { else if (RAND_egd(file) > 0)
/* {
* we try if the given filename is an EGD socket. if it is, we don't /* we try if the given filename is an EGD socket.
* write anything back to the file. if it is, we don't write anything back to the file. */
*/ egdsocket = 1;
egdsocket = 1; return 1;
return 1; }
} if (file == NULL || !RAND_load_file(file, -1))
if (file == NULL || !RAND_load_file(file, -1)) { {
if (RAND_status() == 0) { if (RAND_status() == 0)
if (!dont_warn) { {
BIO_printf(bio_e, "unable to load 'random state'\n"); if (!dont_warn)
BIO_printf(bio_e, {
"This means that the random number generator has not been seeded\n"); BIO_printf(bio_e,"unable to load 'random state'\n");
BIO_printf(bio_e, "with much random data.\n"); BIO_printf(bio_e,"This means that the random number generator has not been seeded\n");
if (consider_randfile) { /* explanation does not apply when a BIO_printf(bio_e,"with much random data.\n");
* file is explicitly named */ 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,"Consider setting the RANDFILE environment variable to point at a file that\n");
BIO_printf(bio_e, BIO_printf(bio_e,"'random' data can be kept in (the file will be overwritten).\n");
"'random' data can be kept in (the file will be overwritten).\n"); }
} }
} return 0;
return 0; }
} }
} seeded = 1;
seeded = 1; return 1;
return 1; }
}
long app_RAND_load_files(char *name) long app_RAND_load_files(char *name)
{ {
char *p, *n; char *p,*n;
int last; int last;
long tot = 0; long tot=0;
int egd; int egd;
for (;;)
{
last=0;
for (p=name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++);
if (*p == '\0') last=1;
*p='\0';
n=name;
name=p+1;
if (*n == '\0') break;
for (;;) { egd=RAND_egd(n);
last = 0; if (egd > 0)
for (p = name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++) ; tot+=egd;
if (*p == '\0') else
last = 1; tot+=RAND_load_file(n,-1);
*p = '\0'; if (last) break;
n = name; }
name = p + 1; if (tot > 512)
if (*n == '\0') app_RAND_allow_write_file();
break; return(tot);
}
egd = RAND_egd(n);
if (egd > 0)
tot += egd;
else
tot += RAND_load_file(n, -1);
if (last)
break;
}
if (tot > 512)
app_RAND_allow_write_file();
return (tot);
}
int app_RAND_write_file(const char *file, BIO *bio_e) int app_RAND_write_file(const char *file, BIO *bio_e)
{ {
char buffer[200]; char buffer[200];
if (egdsocket || !seeded)
/* If we did not manage to read the seed file,
* we should not write a low-entropy seed file back --
* it would suppress a crucial warning the next time
* we want to use it. */
return 0;
if (egdsocket || !seeded) if (file == NULL)
/* file = RAND_file_name(buffer, sizeof buffer);
* If we did not manage to read the seed file, we should not write a if (file == NULL || !RAND_write_file(file))
* low-entropy seed file back -- it would suppress a crucial warning {
* the next time we want to use it. BIO_printf(bio_e,"unable to write 'random state'\n");
*/ return 0;
return 0; }
return 1;
if (file == NULL) }
file = RAND_file_name(buffer, sizeof buffer);
if (file == NULL || !RAND_write_file(file)) {
BIO_printf(bio_e, "unable to write 'random state'\n");
return 0;
}
return 1;
}
void app_RAND_allow_write_file(void) void app_RAND_allow_write_file(void)
{ {
seeded = 1; seeded = 1;
} }

File diff suppressed because it is too large Load Diff

View File

@ -5,21 +5,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
@ -63,7 +63,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@ -110,119 +110,151 @@
*/ */
#ifndef HEADER_APPS_H #ifndef HEADER_APPS_H
# define HEADER_APPS_H #define HEADER_APPS_H
# include "e_os.h" #include "e_os.h"
# include <openssl/bio.h> #include <openssl/bio.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> #include <openssl/txt_db.h>
# ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
# include <openssl/engine.h> #include <openssl/engine.h>
# endif #endif
# ifndef OPENSSL_NO_OCSP #ifndef OPENSSL_NO_OCSP
# include <openssl/ocsp.h> #include <openssl/ocsp.h>
# endif #endif
# include <openssl/ossl_typ.h> #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);
/* /* When `file' is NULL, use defaults.
* When `file' is NULL, use defaults. `bio_e' is for error messages. * `bio_e' is for error messages. */
*/
void app_RAND_allow_write_file(void); void app_RAND_allow_write_file(void);
long app_RAND_load_files(char *file); /* `file' is a list of files to read, long app_RAND_load_files(char *file); /* `file' is a list of files to read,
* separated by LIST_SEPARATOR_CHAR * separated by LIST_SEPARATOR_CHAR
* (see e_os.h). The string is * (see e_os.h). The string is
* destroyed! */ * destroyed! */
# ifndef MONOLITH #ifdef OPENSSL_SYS_WIN32
#define rename(from,to) WIN32_rename((from),(to))
int WIN32_rename(const char *oldname,const char *newname);
#endif
# define MAIN(a,v) main(a,v) #ifndef MONOLITH
# ifndef NON_MAIN #define MAIN(a,v) main(a,v)
CONF *config = NULL;
BIO *bio_err = NULL; #ifndef NON_MAIN
# else CONF *config=NULL;
BIO *bio_err=NULL;
int in_FIPS_mode=0;
#else
extern CONF *config; extern CONF *config;
extern BIO *bio_err; extern BIO *bio_err;
# endif extern int in_FIPS_mode;
#endif
# else #else
# define MAIN(a,v) PROG(a,v) #define MAIN(a,v) PROG(a,v)
extern CONF *config; extern CONF *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 #ifndef OPENSSL_SYS_NETWARE
# include <signal.h> #include <signal.h>
# endif #endif
# ifdef SIGPIPE #ifdef SIGPIPE
# define do_pipe_sig() signal(SIGPIPE,SIG_IGN) #define do_pipe_sig() signal(SIGPIPE,SIG_IGN)
# else #else
# define do_pipe_sig() #define do_pipe_sig()
# endif #endif
# ifdef OPENSSL_NO_COMP #if defined(MONOLITH) && !defined(OPENSSL_C)
# define zlib_cleanup()
# else
# define zlib_cleanup() COMP_zlib_cleanup()
# endif
# if defined(MONOLITH) && !defined(OPENSSL_C)
# define apps_startup() \ # define apps_startup() \
do_pipe_sig() do_pipe_sig()
# define apps_shutdown() # define apps_shutdown()
# else #else
# ifndef OPENSSL_NO_ENGINE # ifndef OPENSSL_NO_ENGINE
# define apps_startup() \ # if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WIN16) || \
do { do_pipe_sig(); CRYPTO_malloc_init(); \ defined(OPENSSL_SYS_WIN32)
ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \ # ifdef _O_BINARY
ENGINE_load_builtin_engines(); setup_ui_method(); } while(0) # define apps_startup() \
# define apps_shutdown() \ do { _fmode=_O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
do { CONF_modules_unload(1); destroy_ui_method(); \ ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
OBJ_cleanup(); EVP_cleanup(); ENGINE_cleanup(); \ ENGINE_load_builtin_engines(); setup_ui_method(); } while(0)
CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \ # else
RAND_cleanup(); \ # define apps_startup() \
ERR_free_strings(); zlib_cleanup();} while(0) 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
# define apps_startup() \
do { do_pipe_sig(); OpenSSL_add_all_algorithms(); \
ERR_load_crypto_strings(); ENGINE_load_builtin_engines(); \
setup_ui_method(); } while(0)
# 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
# define apps_startup() \ # if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WIN16) || \
do { do_pipe_sig(); CRYPTO_malloc_init(); \ defined(OPENSSL_SYS_WIN32)
ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \ # ifdef _O_BINARY
setup_ui_method(); } while(0) # define apps_startup() \
# define apps_shutdown() \ do { _fmode=_O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
do { CONF_modules_unload(1); destroy_ui_method(); \ ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
OBJ_cleanup(); EVP_cleanup(); \ setup_ui_method(); } while(0)
CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \ # else
RAND_cleanup(); \ # define apps_startup() \
ERR_free_strings(); zlib_cleanup(); } while(0) 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
# ifdef OPENSSL_SYSNAME_WIN32 #ifdef OPENSSL_SYSNAME_WIN32
# define openssl_fdset(a,b) FD_SET((unsigned int)a, b) # define openssl_fdset(a,b) FD_SET((unsigned int)a, b)
# else #else
# define openssl_fdset(a,b) FD_SET(a, b) # define openssl_fdset(a,b) FD_SET(a, b)
# endif #endif
typedef struct args_st { typedef struct args_st
char **data; {
int count; char **data;
} ARGS; int count;
} ARGS;
# define PW_MIN_LENGTH 4 #define PW_MIN_LENGTH 4
typedef struct pw_cb_data { typedef struct pw_cb_data
const void *password; {
const char *prompt_info; const void *password;
} PW_CB_DATA; const char *prompt_info;
} PW_CB_DATA;
int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_data); int password_callback(char *buf, int bufsiz, int verify,
PW_CB_DATA *cb_data);
int setup_ui_method(void); int setup_ui_method(void);
void destroy_ui_method(void); void destroy_ui_method(void);
@ -230,13 +262,12 @@ 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);
void program_name(char *in, char *out, int size); 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, void print_name(BIO *out, const char *title, X509_NAME *nm, unsigned long lflags);
unsigned long lflags); #endif
# endif
int set_cert_ex(unsigned long *flags, const char *arg); 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 set_ext_copy(int *copy_type, const char *arg);
@ -244,134 +275,89 @@ 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, CONF *conf);
X509 *load_cert(BIO *err, const char *file, int format, X509 *load_cert(BIO *err, const char *file, int format,
const char *pass, ENGINE *e, const char *cert_descrip); const char *pass, ENGINE *e, const char *cert_descrip);
EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin, EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
const char *pass, ENGINE *e, const char *key_descrip); const char *pass, ENGINE *e, const char *key_descrip);
EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin, EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin,
const char *pass, ENGINE *e, const char *key_descrip); const char *pass, ENGINE *e, const char *key_descrip);
STACK_OF(X509) *load_certs(BIO *err, const char *file, int format, STACK_OF(X509) *load_certs(BIO *err, const char *file, int format,
const char *pass, ENGINE *e, const char *pass, ENGINE *e, const char *cert_descrip);
const char *cert_descrip);
STACK_OF(X509_CRL) *load_crls(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); X509_STORE *setup_verify(BIO *bp, char *CAfile, char *CApath);
# ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
ENGINE *setup_engine(BIO *err, const char *engine, int debug); ENGINE *setup_engine(BIO *err, const char *engine, int debug);
# endif #endif
# ifndef OPENSSL_NO_OCSP #ifndef OPENSSL_NO_OCSP
OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req, OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req,
char *host, char *path, char *port, char *host, char *path, char *port, int use_ssl,
int use_ssl, STACK_OF(CONF_VALUE) *headers, int req_timeout);
int req_timeout); #endif
# endif
int load_config(BIO *err, CONF *cnf); int load_config(BIO *err, CONF *cnf);
char *make_config_name(void); char *make_config_name(void);
/* Functions defined in ca.c and also used in ocsp.c */ /* Functions defined in ca.c and also used in ocsp.c */
int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold, int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
ASN1_GENERALIZEDTIME **pinvtm, const char *str); ASN1_GENERALIZEDTIME **pinvtm, const char *str);
# define DB_type 0 #define DB_type 0
# define DB_exp_date 1 #define DB_exp_date 1
# define DB_rev_date 2 #define DB_rev_date 2
# define DB_serial 3 /* index - unique */ #define DB_serial 3 /* index - unique */
# define DB_file 4 #define DB_file 4
# define DB_name 5 /* index - unique when active and not #define DB_name 5 /* index - unique when active and not disabled */
* disabled */ #define DB_NUMBER 6
# define DB_NUMBER 6
# define DB_TYPE_REV 'R' #define DB_TYPE_REV 'R'
# define DB_TYPE_EXP 'E' #define DB_TYPE_EXP 'E'
# define DB_TYPE_VAL 'V' #define DB_TYPE_VAL 'V'
typedef struct db_attr_st { typedef struct db_attr_st
int unique_subject; {
} DB_ATTR; int unique_subject;
typedef struct ca_db_st { } DB_ATTR;
DB_ATTR attributes; typedef struct ca_db_st
TXT_DB *db; {
} CA_DB; DB_ATTR attributes;
TXT_DB *db;
} CA_DB;
BIGNUM *load_serial(char *serialfile, int create, ASN1_INTEGER **retai); BIGNUM *load_serial(char *serialfile, int create, ASN1_INTEGER **retai);
int save_serial(char *serialfile, char *suffix, BIGNUM *serial, int save_serial(char *serialfile, char *suffix, BIGNUM *serial, ASN1_INTEGER **retai);
ASN1_INTEGER **retai);
int rotate_serial(char *serialfile, char *new_suffix, char *old_suffix); int rotate_serial(char *serialfile, char *new_suffix, char *old_suffix);
int rand_serial(BIGNUM *b, ASN1_INTEGER *ai); int rand_serial(BIGNUM *b, ASN1_INTEGER *ai);
CA_DB *load_index(char *dbfile, DB_ATTR *dbattr); CA_DB *load_index(char *dbfile, DB_ATTR *dbattr);
int index_index(CA_DB *db); int index_index(CA_DB *db);
int save_index(const char *dbfile, const char *suffix, 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, int rotate_index(const char *dbfile, const char *new_suffix, const char *old_suffix);
const char *old_suffix);
void free_index(CA_DB *db); void free_index(CA_DB *db);
# define index_name_cmp_noconst(a, b) \ int index_name_cmp(const char **a, const char **b);
index_name_cmp((const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, a), \
(const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, b))
int index_name_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b);
int parse_yesno(const char *str, int def); int parse_yesno(const char *str, int def);
X509_NAME *parse_name(char *str, long chtype, int multirdn); X509_NAME *parse_name(char *str, long chtype, int multirdn);
int args_verify(char ***pargs, int *pargc, int args_verify(char ***pargs, int *pargc,
int *badarg, BIO *err, X509_VERIFY_PARAM **pm); int *badarg, BIO *err, X509_VERIFY_PARAM **pm);
void policies_print(BIO *out, X509_STORE_CTX *ctx); void policies_print(BIO *out, X509_STORE_CTX *ctx);
int bio_to_mem(unsigned char **out, int maxlen, BIO *in);
int pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value);
int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
const char *algname, ENGINE *e, int do_param);
int do_X509_sign(BIO *err, X509 *x, EVP_PKEY *pkey, const EVP_MD *md,
STACK_OF(OPENSSL_STRING) *sigopts);
int do_X509_REQ_sign(BIO *err, X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md,
STACK_OF(OPENSSL_STRING) *sigopts);
int do_X509_CRL_sign(BIO *err, X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md,
STACK_OF(OPENSSL_STRING) *sigopts);
# ifndef OPENSSL_NO_PSK
extern char *psk_key;
# endif
# ifndef OPENSSL_NO_JPAKE
void jpake_client_auth(BIO *out, BIO *conn, const char *secret);
void jpake_server_auth(BIO *out, BIO *conn, const char *secret);
# endif
# if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) #define FORMAT_UNDEF 0
unsigned char *next_protos_parse(unsigned short *outlen, const char *in); #define FORMAT_ASN1 1
# endif /* !OPENSSL_NO_TLSEXT && #define FORMAT_TEXT 2
* !OPENSSL_NO_NEXTPROTONEG */ #define FORMAT_PEM 3
#define FORMAT_NETSCAPE 4
#define FORMAT_PKCS12 5
#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 FORMAT_UNDEF 0 #define EXT_COPY_NONE 0
# define FORMAT_ASN1 1 #define EXT_COPY_ADD 1
# define FORMAT_TEXT 2 #define EXT_COPY_ALL 2
# define FORMAT_PEM 3
# define FORMAT_NETSCAPE 4
# define FORMAT_PKCS12 5
# 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 FORMAT_PEMRSA 9 /* PEM RSAPubicKey format */
# define FORMAT_ASN1RSA 10 /* DER RSAPubicKey format */
# define FORMAT_MSBLOB 11 /* MS Key blob format */
# define FORMAT_PVK 12 /* MS PVK file format */
# define EXT_COPY_NONE 0 #define NETSCAPE_CERT_HDR "certificate"
# define EXT_COPY_ADD 1
# define EXT_COPY_ALL 2
# define NETSCAPE_CERT_HDR "certificate" #define APP_PASS_LEN 1024
# define APP_PASS_LEN 1024 #define SERIAL_RAND_BITS 64
# define SERIAL_RAND_BITS 64
int app_isdir(const char *);
int raw_read_stdin(void *, int);
int raw_write_stdout(const void *, int);
# define TM_START 0
# define TM_STOP 1
double app_tminterval(int stop, int usertime);
# define OPENSSL_NO_SSL_INTERN
#endif #endif

View File

@ -5,21 +5,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -49,16 +49,15 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
/* /* A nice addition from Dr Stephen Henson <shenson@bigfoot.com> to
* A nice addition from Dr Stephen Henson <steve@openssl.org> to add the * add the -strparse option which parses nested binary structures
* -strparse option which parses nested binary structures
*/ */
#include <stdio.h> #include <stdio.h>
@ -70,361 +69,376 @@
#include <openssl/x509.h> #include <openssl/x509.h>
#include <openssl/pem.h> #include <openssl/pem.h>
/*- /* -inform arg - input format - default PEM (DER or PEM)
* -inform arg - input format - default PEM (DER or PEM) * -in arg - input file - default stdin
* -in arg - input file - default stdin * -i - indent the details by depth
* -i - indent the details by depth * -offset - where in the file to start
* -offset - where in the file to start * -length - how many bytes to use
* -length - how many bytes to use * -oid file - extra oid description file
* -oid file - extra oid description file
*/ */
#undef PROG #undef PROG
#define PROG asn1parse_main #define PROG asn1parse_main
int MAIN(int, char **); int MAIN(int, char **);
static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf); 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;
unsigned int length = 0; unsigned int length=0;
long num, tmplen; long num,tmplen;
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; char *genstr=NULL, *genconf=NULL;
unsigned char *tmpbuf; unsigned char *tmpbuf;
const unsigned char *ctmpbuf; const unsigned char *ctmpbuf;
BUF_MEM *buf = NULL; BUF_MEM *buf=NULL;
STACK_OF(OPENSSL_STRING) *osk = NULL; STACK *osk=NULL;
ASN1_TYPE *at = NULL; ASN1_TYPE *at=NULL;
informat = FORMAT_PEM; informat=FORMAT_PEM;
apps_startup(); apps_startup();
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)) if (!load_config(bio_err, NULL))
goto end; goto end;
prog = argv[0]; prog=argv[0];
argc--; argc--;
argv++; argv++;
if ((osk = sk_OPENSSL_STRING_new_null()) == NULL) { if ((osk=sk_new_null()) == NULL)
BIO_printf(bio_err, "Memory allocation failure\n"); {
goto end; BIO_printf(bio_err,"Memory allocation failure\n");
} goto end;
while (argc >= 1) { }
if (strcmp(*argv, "-inform") == 0) { while (argc >= 1)
if (--argc < 1) {
goto bad; if (strcmp(*argv,"-inform") == 0)
informat = str2fmt(*(++argv)); {
} else if (strcmp(*argv, "-in") == 0) { if (--argc < 1) goto bad;
if (--argc < 1) informat=str2fmt(*(++argv));
goto bad; }
infile = *(++argv); else if (strcmp(*argv,"-in") == 0)
} else if (strcmp(*argv, "-out") == 0) { {
if (--argc < 1) if (--argc < 1) goto bad;
goto bad; infile= *(++argv);
derfile = *(++argv); }
} else if (strcmp(*argv, "-i") == 0) { else if (strcmp(*argv,"-out") == 0)
indent = 1; {
} else if (strcmp(*argv, "-noout") == 0) if (--argc < 1) goto bad;
noout = 1; derfile= *(++argv);
else if (strcmp(*argv, "-oid") == 0) { }
if (--argc < 1) else if (strcmp(*argv,"-i") == 0)
goto bad; {
oidfile = *(++argv); indent=1;
} else if (strcmp(*argv, "-offset") == 0) { }
if (--argc < 1) else if (strcmp(*argv,"-noout") == 0) noout = 1;
goto bad; else if (strcmp(*argv,"-oid") == 0)
offset = atoi(*(++argv)); {
} else if (strcmp(*argv, "-length") == 0) { if (--argc < 1) goto bad;
if (--argc < 1) oidfile= *(++argv);
goto bad; }
length = atoi(*(++argv)); else if (strcmp(*argv,"-offset") == 0)
if (length == 0) {
goto bad; if (--argc < 1) goto bad;
} else if (strcmp(*argv, "-dump") == 0) { offset= atoi(*(++argv));
dump = -1; }
} else if (strcmp(*argv, "-dlimit") == 0) { else if (strcmp(*argv,"-length") == 0)
if (--argc < 1) {
goto bad; if (--argc < 1) goto bad;
dump = atoi(*(++argv)); length= atoi(*(++argv));
if (dump <= 0) if (length == 0) goto bad;
goto bad; }
} else if (strcmp(*argv, "-strparse") == 0) { else if (strcmp(*argv,"-dump") == 0)
if (--argc < 1) {
goto bad; dump= -1;
sk_OPENSSL_STRING_push(osk, *(++argv)); }
} else if (strcmp(*argv, "-genstr") == 0) { else if (strcmp(*argv,"-dlimit") == 0)
if (--argc < 1) {
goto bad; if (--argc < 1) goto bad;
genstr = *(++argv); dump= atoi(*(++argv));
} else if (strcmp(*argv, "-genconf") == 0) { if (dump <= 0) goto bad;
if (--argc < 1) }
goto bad; else if (strcmp(*argv,"-strparse") == 0)
genconf = *(++argv); {
} else { if (--argc < 1) goto bad;
BIO_printf(bio_err, "unknown option %s\n", *argv); sk_push(osk,*(++argv));
badops = 1; }
break; else if (strcmp(*argv,"-genstr") == 0)
} {
argc--; if (--argc < 1) goto bad;
argv++; genstr= *(++argv);
} }
else if (strcmp(*argv,"-genconf") == 0)
{
if (--argc < 1) goto bad;
genconf= *(++argv);
}
else
{
BIO_printf(bio_err,"unknown option %s\n",*argv);
badops=1;
break;
}
argc--;
argv++;
}
if (badops) { if (badops)
bad: {
BIO_printf(bio_err, "%s [options] <infile\n", prog); bad:
BIO_printf(bio_err, "where options are\n"); BIO_printf(bio_err,"%s [options] <infile\n",prog);
BIO_printf(bio_err, " -inform arg input format - one of DER PEM\n"); BIO_printf(bio_err,"where options are\n");
BIO_printf(bio_err, " -in arg input file\n"); BIO_printf(bio_err," -inform arg input format - one of DER PEM\n");
BIO_printf(bio_err, BIO_printf(bio_err," -in arg input file\n");
" -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");
BIO_printf(bio_err, " -offset arg offset into file\n"); BIO_printf(bio_err," -offset arg offset into file\n");
BIO_printf(bio_err, " -length arg length of section in file\n"); BIO_printf(bio_err," -length arg length of section in file\n");
BIO_printf(bio_err, " -i indent entries\n"); BIO_printf(bio_err," -i indent entries\n");
BIO_printf(bio_err, " -dump dump unknown data in hex form\n"); BIO_printf(bio_err," -dump dump unknown data in hex form\n");
BIO_printf(bio_err, BIO_printf(bio_err," -dlimit arg dump the first arg bytes of unknown data in hex form\n");
" -dlimit arg dump the first arg bytes of unknown data in hex form\n"); BIO_printf(bio_err," -oid file file of extra oid definitions\n");
BIO_printf(bio_err, " -oid file file of extra oid definitions\n"); 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, BIO_printf(bio_err," ASN1 blob wrappings\n");
" a series of these can be used to 'dig' into multiple\n"); BIO_printf(bio_err," -genstr str string to generate ASN1 structure from\n");
BIO_printf(bio_err, " ASN1 blob wrappings\n"); BIO_printf(bio_err," -genconf file file to generate ASN1 structure from\n");
BIO_printf(bio_err, goto end;
" -genstr str string to generate ASN1 structure from\n"); }
BIO_printf(bio_err,
" -genconf file file to generate ASN1 structure from\n");
goto end;
}
ERR_load_crypto_strings(); ERR_load_crypto_strings();
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))
ERR_print_errors(bio_err); {
goto end; ERR_print_errors(bio_err);
} 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 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);
} }
#endif #endif
if (oidfile != NULL) { if (oidfile != NULL)
if (BIO_read_filename(in, oidfile) <= 0) { {
BIO_printf(bio_err, "problems opening %s\n", oidfile); if (BIO_read_filename(in,oidfile) <= 0)
ERR_print_errors(bio_err); {
goto end; BIO_printf(bio_err,"problems opening %s\n",oidfile);
} ERR_print_errors(bio_err);
OBJ_create_objects(in); goto end;
} }
OBJ_create_objects(in);
}
if (infile == NULL) if (infile == NULL)
BIO_set_fp(in, stdin, BIO_NOCLOSE); BIO_set_fp(in,stdin,BIO_NOCLOSE);
else { else
if (BIO_read_filename(in, infile) <= 0) { {
perror(infile); if (BIO_read_filename(in,infile) <= 0)
goto end; {
} perror(infile);
} goto end;
}
}
if (derfile) { if (derfile) {
if (!(derout = BIO_new_file(derfile, "wb"))) { if(!(derout = BIO_new_file(derfile, "wb"))) {
BIO_printf(bio_err, "problems opening %s\n", derfile); BIO_printf(bio_err,"problems opening %s\n",derfile);
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
goto end; goto end;
} }
} }
if ((buf = BUF_MEM_new()) == NULL) if ((buf=BUF_MEM_new()) == NULL) goto end;
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 (genstr || genconf)
num = do_generate(bio_err, genstr, genconf, buf); {
if (num < 0) { num = do_generate(bio_err, genstr, genconf, buf);
ERR_print_errors(bio_err); if (num < 0)
goto end; {
} ERR_print_errors(bio_err);
} goto end;
}
}
else { else
{
if (informat == FORMAT_PEM) { if (informat == FORMAT_PEM)
BIO *tmp; {
BIO *tmp;
if ((b64 = BIO_new(BIO_f_base64())) == NULL) if ((b64=BIO_new(BIO_f_base64())) == NULL)
goto end; goto end;
BIO_push(b64, in); BIO_push(b64,in);
tmp = in; tmp=in;
in = b64; in=b64;
b64 = tmp; b64=tmp;
} }
num = 0; num=0;
for (;;) { for (;;)
if (!BUF_MEM_grow(buf, (int)num + BUFSIZ)) {
goto end; if (!BUF_MEM_grow(buf,(int)num+BUFSIZ)) goto end;
i = BIO_read(in, &(buf->data[num]), BUFSIZ); i=BIO_read(in,&(buf->data[num]),BUFSIZ);
if (i <= 0) if (i <= 0) break;
break; num+=i;
num += i; }
} }
} str=buf->data;
str = buf->data;
/* If any structs to parse go through in sequence */ /* If any structs to parse go through in sequence */
if (sk_OPENSSL_STRING_num(osk)) { if (sk_num(osk))
tmpbuf = (unsigned char *)str; {
tmplen = num; tmpbuf=(unsigned char *)str;
for (i = 0; i < sk_OPENSSL_STRING_num(osk); i++) { tmplen=num;
ASN1_TYPE *atmp; for (i=0; i<sk_num(osk); i++)
int typ; {
j = atoi(sk_OPENSSL_STRING_value(osk, i)); ASN1_TYPE *atmp;
if (j == 0) { int typ;
BIO_printf(bio_err, "'%s' is an invalid number\n", j=atoi(sk_value(osk,i));
sk_OPENSSL_STRING_value(osk, i)); if (j == 0)
continue; {
} BIO_printf(bio_err,"'%s' is an invalid number\n",sk_value(osk,i));
tmpbuf += j; continue;
tmplen -= j; }
atmp = at; tmpbuf+=j;
ctmpbuf = tmpbuf; tmplen-=j;
at = d2i_ASN1_TYPE(NULL, &ctmpbuf, tmplen); atmp = at;
ASN1_TYPE_free(atmp); ctmpbuf = tmpbuf;
if (!at) { at = d2i_ASN1_TYPE(NULL,&ctmpbuf,tmplen);
BIO_printf(bio_err, "Error parsing structure\n"); ASN1_TYPE_free(atmp);
ERR_print_errors(bio_err); if(!at)
goto end; {
} BIO_printf(bio_err,"Error parsing structure\n");
typ = ASN1_TYPE_get(at); ERR_print_errors(bio_err);
if ((typ == V_ASN1_OBJECT) goto end;
|| (typ == V_ASN1_BOOLEAN) }
|| (typ == V_ASN1_NULL)) { typ = ASN1_TYPE_get(at);
BIO_printf(bio_err, "Can't parse %s type\n", ASN1_tag2str(typ)); if ((typ == V_ASN1_OBJECT)
ERR_print_errors(bio_err); || (typ == V_ASN1_NULL))
goto end; {
} BIO_printf(bio_err, "Can't parse %s type\n",
/* hmm... this is a little evil but it works */ typ == V_ASN1_NULL ? "NULL" : "OBJECT");
tmpbuf = at->value.asn1_string->data; ERR_print_errors(bio_err);
tmplen = at->value.asn1_string->length; goto end;
} }
str = (char *)tmpbuf; /* hmm... this is a little evil but it works */
num = tmplen; tmpbuf=at->value.asn1_string->data;
} tmplen=at->value.asn1_string->length;
}
str=(char *)tmpbuf;
num=tmplen;
}
if (offset >= num) { if (offset >= num)
BIO_printf(bio_err, "Error: offset too large\n"); {
goto end; BIO_printf(bio_err, "Error: offset too large\n");
} goto end;
}
num -= offset; num -= offset;
if ((length == 0) || ((long)length > num)) if ((length == 0) || ((long)length > num)) length=(unsigned int)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"); ERR_print_errors(bio_err);
ERR_print_errors(bio_err); goto end;
goto end; }
} }
} if (!noout &&
if (!noout && !ASN1_parse_dump(out,(unsigned char *)&(str[offset]),length,
!ASN1_parse_dump(out, (unsigned char *)&(str[offset]), length, indent,dump))
indent, dump)) { {
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
goto end; goto end;
} }
ret = 0; ret=0;
end: end:
BIO_free(derout); BIO_free(derout);
if (in != NULL) if (in != NULL) BIO_free(in);
BIO_free(in); if (out != NULL) BIO_free_all(out);
if (out != NULL) if (b64 != NULL) BIO_free(b64);
BIO_free_all(out); if (ret != 0)
if (b64 != NULL) ERR_print_errors(bio_err);
BIO_free(b64); if (buf != NULL) BUF_MEM_free(buf);
if (ret != 0) if (at != NULL) ASN1_TYPE_free(at);
ERR_print_errors(bio_err); if (osk != NULL) sk_free(osk);
if (buf != NULL) OBJ_cleanup();
BUF_MEM_free(buf); apps_shutdown();
if (at != NULL) OPENSSL_EXIT(ret);
ASN1_TYPE_free(at); }
if (osk != NULL)
sk_OPENSSL_STRING_free(osk);
OBJ_cleanup();
apps_shutdown();
OPENSSL_EXIT(ret);
}
static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf) static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf)
{ {
CONF *cnf = NULL; CONF *cnf = NULL;
int len; int len;
long errline = 0; long errline;
unsigned char *p; unsigned char *p;
ASN1_TYPE *atyp = NULL; ASN1_TYPE *atyp = NULL;
if (genconf) { if (genconf)
cnf = NCONF_new(NULL); {
if (!NCONF_load(cnf, genconf, &errline)) cnf = NCONF_new(NULL);
goto conferr; if (!NCONF_load(cnf, genconf, &errline))
if (!genstr) goto conferr;
genstr = NCONF_get_string(cnf, "default", "asn1"); if (!genstr)
if (!genstr) { genstr = NCONF_get_string(cnf, "default", "asn1");
BIO_printf(bio, "Can't find 'asn1' in '%s'\n", genconf); if (!genstr)
goto err; {
} BIO_printf(bio, "Can't find 'asn1' in '%s'\n", genconf);
} goto err;
}
}
atyp = ASN1_generate_nconf(genstr, cnf); atyp = ASN1_generate_nconf(genstr, cnf);
NCONF_free(cnf); NCONF_free(cnf);
cnf = NULL;
if (!atyp) if (!atyp)
return -1; return -1;
len = i2d_ASN1_TYPE(atyp, NULL); len = i2d_ASN1_TYPE(atyp, NULL);
if (len <= 0) if (len <= 0)
goto err; goto err;
if (!BUF_MEM_grow(buf, len)) if (!BUF_MEM_grow(buf,len))
goto err; goto err;
p = (unsigned char *)buf->data; p=(unsigned char *)buf->data;
i2d_ASN1_TYPE(atyp, &p); i2d_ASN1_TYPE(atyp, &p);
ASN1_TYPE_free(atyp); ASN1_TYPE_free(atyp);
return len; return len;
conferr: conferr:
if (errline > 0) if (errline > 0)
BIO_printf(bio, "Error on line %ld of config file '%s'\n", BIO_printf(bio, "Error on line %ld of config file '%s'\n",
errline, genconf); errline, genconf);
else else
BIO_printf(bio, "Error loading config file '%s'\n", genconf); BIO_printf(bio, "Error loading config file '%s'\n", genconf);
err: err:
NCONF_free(cnf); NCONF_free(cnf);
ASN1_TYPE_free(atyp); ASN1_TYPE_free(atyp);
return -1; return -1;
} }

5054
apps/ca.c

File diff suppressed because it is too large Load Diff

View File

@ -5,21 +5,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
@ -60,166 +60,149 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#ifdef OPENSSL_NO_STDIO #ifdef OPENSSL_NO_STDIO
# define APPS_WIN16 #define APPS_WIN16
#endif #endif
#include "apps.h" #include "apps.h"
#include <openssl/err.h> #include <openssl/err.h>
#include <openssl/ssl.h> #include <openssl/ssl.h>
#undef PROG #undef PROG
#define PROG ciphers_main #define PROG ciphers_main
static const char *ciphers_usage[] = { static const char *ciphers_usage[]={
"usage: ciphers args\n", "usage: ciphers args\n",
" -v - verbose mode, a textual listing of the SSL/TLS ciphers in OpenSSL\n", " -v - verbose mode, a textual listing of the ciphers in SSLeay\n",
" -V - even more verbose\n", " -ssl2 - SSL2 mode\n",
" -ssl2 - SSL2 mode\n", " -ssl3 - SSL3 mode\n",
" -ssl3 - SSL3 mode\n", " -tls1 - TLS1 mode\n",
" -tls1 - TLS1 mode\n", NULL
NULL
}; };
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
int ret = 1, i; int ret=1,i;
int verbose = 0, Verbose = 0; int verbose=0;
const char **pp; const char **pp;
const char *p; const char *p;
int badops = 0; int badops=0;
SSL_CTX *ctx = NULL; SSL_CTX *ctx=NULL;
SSL *ssl = NULL; SSL *ssl=NULL;
char *ciphers = NULL; char *ciphers=NULL;
const SSL_METHOD *meth = NULL; SSL_METHOD *meth=NULL;
STACK_OF(SSL_CIPHER) *sk; STACK_OF(SSL_CIPHER) *sk;
char buf[512]; char buf[512];
BIO *STDout = NULL; BIO *STDout=NULL;
meth = SSLv23_server_method(); #if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
meth=SSLv23_server_method();
apps_startup(); #elif !defined(OPENSSL_NO_SSL3)
meth=SSLv3_server_method();
if (bio_err == NULL) #elif !defined(OPENSSL_NO_SSL2)
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); meth=SSLv2_server_method();
STDout = BIO_new_fp(stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS
{
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
STDout = BIO_push(tmpbio, STDout);
}
#endif #endif
if (!load_config(bio_err, NULL))
goto end;
argc--; apps_startup();
argv++;
while (argc >= 1) { if (bio_err == NULL)
if (strcmp(*argv, "-v") == 0) bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
verbose = 1; STDout=BIO_new_fp(stdout,BIO_NOCLOSE);
else if (strcmp(*argv, "-V") == 0) #ifdef OPENSSL_SYS_VMS
verbose = Verbose = 1; {
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
STDout = BIO_push(tmpbio, STDout);
}
#endif
argc--;
argv++;
while (argc >= 1)
{
if (strcmp(*argv,"-v") == 0)
verbose=1;
#ifndef OPENSSL_NO_SSL2 #ifndef OPENSSL_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 OPENSSL_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 OPENSSL_NO_TLS1
else if (strcmp(*argv, "-tls1") == 0) else if (strcmp(*argv,"-tls1") == 0)
meth = TLSv1_client_method(); meth=TLSv1_client_method();
#endif #endif
else if ((strncmp(*argv, "-h", 2) == 0) || (strcmp(*argv, "-?") == 0)) { else if ((strncmp(*argv,"-h",2) == 0) ||
badops = 1; (strcmp(*argv,"-?") == 0))
break; {
} else { badops=1;
ciphers = *argv; break;
} }
argc--; else
argv++; {
} ciphers= *argv;
}
argc--;
argv++;
}
if (badops) { if (badops)
for (pp = ciphers_usage; (*pp != NULL); pp++) {
BIO_printf(bio_err, "%s", *pp); for (pp=ciphers_usage; (*pp != NULL); pp++)
goto end; BIO_printf(bio_err,"%s",*pp);
} goto end;
}
OpenSSL_add_ssl_algorithms(); OpenSSL_add_ssl_algorithms();
ctx = SSL_CTX_new(meth); ctx=SSL_CTX_new(meth);
if (ctx == NULL) if (ctx == NULL) goto err;
goto err; if (ciphers != NULL) {
if (ciphers != NULL) { if(!SSL_CTX_set_cipher_list(ctx,ciphers)) {
if (!SSL_CTX_set_cipher_list(ctx, ciphers)) { BIO_printf(bio_err, "Error in cipher list\n");
BIO_printf(bio_err, "Error in cipher list\n"); goto err;
goto err; }
} }
} ssl=SSL_new(ctx);
ssl = SSL_new(ctx); if (ssl == NULL) goto err;
if (ssl == NULL)
goto err;
if (!verbose) {
for (i = 0;; i++) {
p = SSL_get_cipher_list(ssl, i);
if (p == NULL)
break;
if (i != 0)
BIO_printf(STDout, ":");
BIO_printf(STDout, "%s", p);
}
BIO_printf(STDout, "\n");
} else { /* verbose */
sk = SSL_get_ciphers(ssl); if (!verbose)
{
for (i=0; ; i++)
{
p=SSL_get_cipher_list(ssl,i);
if (p == NULL) break;
if (i != 0) BIO_printf(STDout,":");
BIO_printf(STDout,"%s",p);
}
BIO_printf(STDout,"\n");
}
else
{
sk=SSL_get_ciphers(ssl);
for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) { for (i=0; i<sk_SSL_CIPHER_num(sk); i++)
SSL_CIPHER *c; {
BIO_puts(STDout,SSL_CIPHER_description(
sk_SSL_CIPHER_value(sk,i),
buf,sizeof buf));
}
}
c = sk_SSL_CIPHER_value(sk, i); ret=0;
if (0)
{
err:
SSL_load_error_strings();
ERR_print_errors(bio_err);
}
end:
if (ctx != NULL) SSL_CTX_free(ctx);
if (ssl != NULL) SSL_free(ssl);
if (STDout != NULL) BIO_free_all(STDout);
apps_shutdown();
OPENSSL_EXIT(ret);
}
if (Verbose) {
unsigned long id = SSL_CIPHER_get_id(c);
int id0 = (int)(id >> 24);
int id1 = (int)((id >> 16) & 0xffL);
int id2 = (int)((id >> 8) & 0xffL);
int id3 = (int)(id & 0xffL);
if ((id & 0xff000000L) == 0x02000000L) {
/* SSL2 cipher */
BIO_printf(STDout, " 0x%02X,0x%02X,0x%02X - ", id1,
id2, id3);
} else if ((id & 0xff000000L) == 0x03000000L) {
/* SSL3 cipher */
BIO_printf(STDout, " 0x%02X,0x%02X - ", id2,
id3);
} else {
/* whatever */
BIO_printf(STDout, "0x%02X,0x%02X,0x%02X,0x%02X - ", id0,
id1, id2, id3);
}
}
BIO_puts(STDout, SSL_CIPHER_description(c, buf, sizeof buf));
}
}
ret = 0;
if (0) {
err:
SSL_load_error_strings();
ERR_print_errors(bio_err);
}
end:
if (ctx != NULL)
SSL_CTX_free(ctx);
if (ssl != NULL)
SSL_free(ssl);
if (STDout != NULL)
BIO_free_all(STDout);
apps_shutdown();
OPENSSL_EXIT(ret);
}

View File

@ -1,52 +1,24 @@
subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = Test Client Cert issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Client test cert (512 bit)
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIID5zCCAs+gAwIBAgIJALnu1NlVpZ6yMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV MIIB6TCCAVICAQIwDQYJKoZIhvcNAQEEBQAwWzELMAkGA1UEBhMCQVUxEzARBgNV
BAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMSIwIAYDVQQLDBlGT1IgVEVT BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYD
VElORyBQVVJQT1NFUyBPTkxZMSUwIwYDVQQDDBxPcGVuU1NMIFRlc3QgSW50ZXJt VQQDExJUZXN0IENBICgxMDI0IGJpdCkwHhcNOTcwNjA5MTM1NzU2WhcNOTgwNjA5
ZWRpYXRlIENBMB4XDTExMTIwODE0MDE0OFoXDTIxMTAxNjE0MDE0OFowZDELMAkG MTM1NzU2WjBjMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
A1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBU A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxIzAhBgNVBAMTGkNsaWVudCB0ZXN0IGNl
RVNUSU5HIFBVUlBPU0VTIE9OTFkxGTAXBgNVBAMMEFRlc3QgQ2xpZW50IENlcnQw cnQgKDUxMiBiaXQpMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALtv55QyzG6i2Plw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0ranbHRLcLVqN+0BzcZpY Z1pah7++Gv8L5j6Hnyr/uTZE1NLG0ABDDexmq/R4KedLjFEIYjocDui+IXs62NNt
+yOLqxzDWT1LD9eW1stC4NzXX9/DCtSIVyN7YIHdGLrIPr64IDdXXaMRzgZ2rOKs XrT8odkCAwEAATANBgkqhkiG9w0BAQQFAAOBgQBwtMmI7oGUG8nKmftQssATViH5
lmHCAiFpO/ja99gGCJRxH0xwQatqAULfJVHeUhs7OEGOZc2nWifjqKvGfNTilP7D NRRtoEw07DxJp/LfatHdrhqQB73eGdL5WILZJXk46Xz2e9WMSUjVCSYhdKxtflU3
nwi69ipQFq9oS19FmhwVHk2wg7KZGHI1qDyG04UrfCZMRitvS9+UVhPpIPjuiBi2 UR2Ajv1Oo0sTNdfz0wDqJNirLNtzyhhsaq8qMTrLwXrCP31VxBiigFSQSUFnZyTE
x3/FZIpL5gXJvvFK6xHY63oq2asyzBATntBgnP4qJFWWcvRx24wF1PnZabxuVoL2 9TKwhS4GlwbtCfxSKQ==
bPnQ/KvONDrw3IdqkKhYNTul7jEcu3OlcZIMw+7DiaKJLAzKb/bBF5gm/pwW6As9
AgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBeAwLAYJYIZI
AYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQW
BBSZHKyLoTh7Mb409Zn/mK1ceSDAjDAfBgNVHSMEGDAWgBQ2w2yI55X+sL3szj49
hqshgYfa2jANBgkqhkiG9w0BAQUFAAOCAQEAD0mL7PtPYgCEuDyOQSbLpeND5hVS
curxQdGnrJ6Acrhodb7E9ccATokeb0PLx6HBLQUicxhTZIQ9FbO43YkQcOU6C3BB
IlwskqmtN6+VmrQzNolHCDzvxNZs9lYL2VbGPGqVRyjZeHpoAlf9cQr8PgDb4d4b
vUx2KAhHQvV2nkmYvKyXcgnRuHggumF87mkxidriGAEFwH4qfOqetUg64WyxP7P2
QLipm04SyQa7ONtIApfVXgHcE42Py4/f4arzCzMjKe3VyhGkS7nsT55X/fWgTaRm
CQPkO+H94P958WTvQDt77bQ+D3IvYaVvfil8n6HJMOJfFT0LJuSUbpSXJg==
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY----- -----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAtK2p2x0S3C1ajftAc3GaWPsji6scw1k9Sw/XltbLQuDc11/f MIIBOwIBAAJBALtv55QyzG6i2PlwZ1pah7++Gv8L5j6Hnyr/uTZE1NLG0ABDDexm
wwrUiFcje2CB3Ri6yD6+uCA3V12jEc4GdqzirJZhwgIhaTv42vfYBgiUcR9McEGr q/R4KedLjFEIYjocDui+IXs62NNtXrT8odkCAwEAAQJAbwXq0vJ/+uyEvsNgxLko
agFC3yVR3lIbOzhBjmXNp1on46irxnzU4pT+w58IuvYqUBavaEtfRZocFR5NsIOy /V86mGXQ/KrSkeKlL0r4ENxjcyeMAGoKu6J9yMY7+X9+Zm4nxShNfTsf/+Freoe1
mRhyNag8htOFK3wmTEYrb0vflFYT6SD47ogYtsd/xWSKS+YFyb7xSusR2Ot6Ktmr HQIhAPOSm5Q1YI+KIsII2GeVJx1U69+wnd71OasIPakS1L1XAiEAxQAW+J3/JWE0
MswQE57QYJz+KiRVlnL0cduMBdT52Wm8blaC9mz50PyrzjQ68NyHapCoWDU7pe4x ftEYakbhUOKL8tD1OaFZS71/5GdG7E8CIQCefUMmySSvwd6kC0VlATSWbW+d+jp/
HLtzpXGSDMPuw4miiSwMym/2wReYJv6cFugLPQIDAQABAoIBAAZOyc9MhIwLSU4L nWmM1KvqnAo5uQIhALqEADu5U1Wvt8UN8UDGBRPQulHWNycuNV45d3nnskWPAiAw
p4RgQvM4UVVe8/Id+3XTZ8NsXExJbWxXfIhiqGjaIfL8u4vsgRjcl+v1s/jo2/iT ueTyr6WsZ5+SD8g/Hy3xuvF3nPmJRH+rwvVihlcFOg==
KMab4o4D8gXD7UavQVDjtjb/ta79WL3SjRl2Uc9YjjMkyq6WmDNQeo2NKDdafCTB
1uzSJtLNipB8Z53ELPuHJhxX9QMHrMnuha49riQgXZ7buP9iQrHJFhImBjSzbxJx
L+TI6rkyLSf9Wi0Pd3L27Ob3QWNfNRYNSeTE+08eSRChkur5W0RuXAcuAICdQlCl
LBvWO/LmmvbzCqiDcgy/TliSb6CGGwgiNG7LJZmlkYNj8laGwalNlYZs3UrVv6NO
Br2loAECgYEA2kvCvPGj0Dg/6g7WhXDvAkEbcaL1tSeCxBbNH+6HS2UWMWvyTtCn
/bbD519QIdkvayy1QjEf32GV/UjUVmlULMLBcDy0DGjtL3+XpIhLKWDNxN1v1/ai
1oz23ZJCOgnk6K4qtFtlRS1XtynjA+rBetvYvLP9SKeFrnpzCgaA2r0CgYEA0+KX
1ACXDTNH5ySX3kMjSS9xdINf+OOw4CvPHFwbtc9aqk2HePlEsBTz5I/W3rKwXva3
NqZ/bRqVVeZB/hHKFywgdUQk2Uc5z/S7Lw70/w1HubNTXGU06Ngb6zOFAo/o/TwZ
zTP1BMIKSOB6PAZPS3l+aLO4FRIRotfFhgRHOoECgYEAmiZbqt8cJaJDB/5YYDzC
mp3tSk6gIb936Q6M5VqkMYp9pIKsxhk0N8aDCnTU+kIK6SzWBpr3/d9Ecmqmfyq7
5SvWO3KyVf0WWK9KH0abhOm2BKm2HBQvI0DB5u8sUx2/hsvOnjPYDISbZ11t0MtK
u35Zy89yMYcSsIYJjG/ROCUCgYEAgI2P9G5PNxEP5OtMwOsW84Y3Xat/hPAQFlI+
HES+AzbFGWJkeT8zL2nm95tVkFP1sggZ7Kxjz3w7cpx7GX0NkbWSE9O+T51pNASV
tN1sQ3p5M+/a+cnlqgfEGJVvc7iAcXQPa3LEi5h2yPR49QYXAgG6cifn3dDSpmwn
SUI7PQECgYEApGCIIpSRPLAEHTGmP87RBL1smurhwmy2s/pghkvUkWehtxg0sGHh
kuaqDWcskogv+QC0sVdytiLSz8G0DwcEcsHK1Fkyb8A+ayiw6jWJDo2m9+IF4Fww
1Te6jFPYDESnbhq7+TLGgHGhtwcu5cnb4vSuYXGXKupZGzoLOBbv1Zw=
-----END RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----

2300
apps/cms.c

File diff suppressed because it is too large Load Diff

View File

@ -5,21 +5,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
@ -67,368 +67,363 @@
#include <openssl/pem.h> #include <openssl/pem.h>
#undef PROG #undef PROG
#define PROG crl_main #define PROG crl_main
#undef POSTFIX #undef POSTFIX
#define POSTFIX ".rvk" #define POSTFIX ".rvk"
static const char *crl_usage[] = { static const 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",
" -outform arg - output format - default PEM\n", " -outform arg - output format - default PEM\n",
" -text - print out a text format version\n", " -text - print out a text format version\n",
" -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",
#ifndef OPENSSL_NO_MD5 " -fingerprint - print the crl fingerprint\n",
" -hash_old - print old-style (MD5) hash value\n", " -issuer - print issuer DN\n",
#endif " -lastupdate - lastUpdate field\n",
" -fingerprint - print the crl fingerprint\n", " -nextupdate - nextUpdate field\n",
" -issuer - print issuer DN\n", " -noout - no CRL output\n",
" -lastupdate - lastUpdate field\n", " -CAfile name - verify CRL using certificates in file \"name\"\n",
" -nextupdate - nextUpdate field\n", " -CApath dir - verify CRL using certificates in \"dir\"\n",
" -crlnumber - print CRL number\n", " -nameopt arg - various certificate name options\n",
" -noout - no CRL output\n", NULL
" -CAfile name - verify CRL using certificates in file \"name\"\n",
" -CApath dir - verify CRL using certificates in \"dir\"\n",
" -nameopt arg - various certificate name options\n",
NULL
}; };
static X509_CRL *load_crl(char *file, int format); static X509_CRL *load_crl(char *file, int format);
static BIO *bio_out = NULL; static BIO *bio_out=NULL;
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
unsigned long nmflag = 0; 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;
BIO *out = NULL; BIO *out=NULL;
int informat, outformat; int informat,outformat;
char *infile = NULL, *outfile = NULL; char *infile=NULL,*outfile=NULL;
int hash = 0, issuer = 0, lastupdate = 0, nextupdate = 0, noout = int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0;
0, text = 0; int fingerprint = 0;
#ifndef OPENSSL_NO_MD5 const char **pp;
int hash_old = 0; X509_STORE *store = NULL;
#endif X509_STORE_CTX ctx;
int fingerprint = 0, crlnumber = 0; X509_LOOKUP *lookup = NULL;
const char **pp; X509_OBJECT xobj;
X509_STORE *store = NULL; EVP_PKEY *pkey;
X509_STORE_CTX ctx; int do_ver = 0;
X509_LOOKUP *lookup = NULL; const EVP_MD *md_alg,*digest=EVP_sha1();
X509_OBJECT xobj;
EVP_PKEY *pkey;
int do_ver = 0;
const EVP_MD *md_alg, *digest = EVP_sha1();
apps_startup(); apps_startup();
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)) if (!load_config(bio_err, NULL))
goto end; 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 OPENSSL_SYS_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);
} }
#endif #endif
} }
informat = FORMAT_PEM; informat=FORMAT_PEM;
outformat = FORMAT_PEM; outformat=FORMAT_PEM;
argc--; argc--;
argv++; argv++;
num = 0; num=0;
while (argc >= 1) { while (argc >= 1)
{
#ifdef undef #ifdef undef
if (strcmp(*argv, "-p") == 0) { if (strcmp(*argv,"-p") == 0)
if (--argc < 1) {
goto bad; if (--argc < 1) goto bad;
if (!args_from_file(++argv, Nargc, Nargv)) { if (!args_from_file(++argv,Nargc,Nargv)) { goto end; }*/
goto end; }
}
*/}
#endif #endif
if (strcmp(*argv, "-inform") == 0) { if (strcmp(*argv,"-inform") == 0)
if (--argc < 1) {
goto bad; if (--argc < 1) goto bad;
informat = str2fmt(*(++argv)); informat=str2fmt(*(++argv));
} else if (strcmp(*argv, "-outform") == 0) { }
if (--argc < 1) else if (strcmp(*argv,"-outform") == 0)
goto bad; {
outformat = str2fmt(*(++argv)); if (--argc < 1) goto bad;
} else if (strcmp(*argv, "-in") == 0) { outformat=str2fmt(*(++argv));
if (--argc < 1) }
goto bad; else if (strcmp(*argv,"-in") == 0)
infile = *(++argv); {
} else if (strcmp(*argv, "-out") == 0) { if (--argc < 1) goto bad;
if (--argc < 1) infile= *(++argv);
goto bad; }
outfile = *(++argv); else if (strcmp(*argv,"-out") == 0)
} else if (strcmp(*argv, "-CApath") == 0) { {
if (--argc < 1) if (--argc < 1) goto bad;
goto bad; outfile= *(++argv);
CApath = *(++argv); }
do_ver = 1; else if (strcmp(*argv,"-CApath") == 0)
} else if (strcmp(*argv, "-CAfile") == 0) { {
if (--argc < 1) if (--argc < 1) goto bad;
goto bad; CApath = *(++argv);
CAfile = *(++argv); do_ver = 1;
do_ver = 1; }
} else if (strcmp(*argv, "-verify") == 0) else if (strcmp(*argv,"-CAfile") == 0)
do_ver = 1; {
else if (strcmp(*argv, "-text") == 0) if (--argc < 1) goto bad;
text = 1; CAfile = *(++argv);
else if (strcmp(*argv, "-hash") == 0) do_ver = 1;
hash = ++num; }
#ifndef OPENSSL_NO_MD5 else if (strcmp(*argv,"-verify") == 0)
else if (strcmp(*argv, "-hash_old") == 0) do_ver = 1;
hash_old = ++num; else if (strcmp(*argv,"-text") == 0)
#endif text = 1;
else if (strcmp(*argv, "-nameopt") == 0) { else if (strcmp(*argv,"-hash") == 0)
if (--argc < 1) hash= ++num;
goto bad; else if (strcmp(*argv,"-nameopt") == 0)
if (!set_name_ex(&nmflag, *(++argv))) {
goto bad; if (--argc < 1) goto bad;
} else if (strcmp(*argv, "-issuer") == 0) if (!set_name_ex(&nmflag, *(++argv))) goto bad;
issuer = ++num; }
else if (strcmp(*argv, "-lastupdate") == 0) else if (strcmp(*argv,"-issuer") == 0)
lastupdate = ++num; issuer= ++num;
else if (strcmp(*argv, "-nextupdate") == 0) else if (strcmp(*argv,"-lastupdate") == 0)
nextupdate = ++num; lastupdate= ++num;
else if (strcmp(*argv, "-noout") == 0) else if (strcmp(*argv,"-nextupdate") == 0)
noout = ++num; nextupdate= ++num;
else if (strcmp(*argv, "-fingerprint") == 0) else if (strcmp(*argv,"-noout") == 0)
fingerprint = ++num; noout= ++num;
else if (strcmp(*argv, "-crlnumber") == 0) else if (strcmp(*argv,"-fingerprint") == 0)
crlnumber = ++num; fingerprint= ++num;
else if ((md_alg = EVP_get_digestbyname(*argv + 1))) { else if ((md_alg=EVP_get_digestbyname(*argv + 1)))
/* ok */ {
digest = md_alg; /* ok */
} else { digest=md_alg;
BIO_printf(bio_err, "unknown option %s\n", *argv); }
badops = 1; else
break; {
} BIO_printf(bio_err,"unknown option %s\n",*argv);
argc--; badops=1;
argv++; break;
} }
argc--;
argv++;
}
if (badops) { if (badops)
bad: {
for (pp = crl_usage; (*pp != NULL); pp++) bad:
BIO_printf(bio_err, "%s", *pp); for (pp=crl_usage; (*pp != NULL); pp++)
goto end; BIO_printf(bio_err,"%s",*pp);
} goto end;
}
ERR_load_crypto_strings(); ERR_load_crypto_strings();
x = load_crl(infile, informat); x=load_crl(infile,informat);
if (x == NULL) { if (x == NULL) { goto end; }
goto end;
}
if (do_ver) { if(do_ver) {
store = X509_STORE_new(); store = X509_STORE_new();
lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file()); lookup=X509_STORE_add_lookup(store,X509_LOOKUP_file());
if (lookup == NULL) if (lookup == NULL) goto end;
goto end; if (!X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM))
if (!X509_LOOKUP_load_file(lookup, CAfile, X509_FILETYPE_PEM)) X509_LOOKUP_load_file(lookup,NULL,X509_FILETYPE_DEFAULT);
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 (!X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM))
X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
ERR_clear_error();
lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir()); if(!X509_STORE_CTX_init(&ctx, store, NULL, NULL)) {
if (lookup == NULL) BIO_printf(bio_err,
goto end; "Error initialising X509 store\n");
if (!X509_LOOKUP_add_dir(lookup, CApath, X509_FILETYPE_PEM)) goto end;
X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT); }
ERR_clear_error();
if (!X509_STORE_CTX_init(&ctx, store, NULL, NULL)) { i = X509_STORE_get_by_subject(&ctx, X509_LU_X509,
BIO_printf(bio_err, "Error initialising X509 store\n"); X509_CRL_get_issuer(x), &xobj);
goto end; if(i <= 0) {
} BIO_printf(bio_err,
"Error getting CRL issuer certificate\n");
goto end;
}
pkey = X509_get_pubkey(xobj.data.x509);
X509_OBJECT_free_contents(&xobj);
if(!pkey) {
BIO_printf(bio_err,
"Error getting CRL issuer public key\n");
goto end;
}
i = X509_CRL_verify(x, pkey);
EVP_PKEY_free(pkey);
if(i < 0) goto end;
if(i == 0) BIO_printf(bio_err, "verify failure\n");
else BIO_printf(bio_err, "verify OK\n");
}
i = X509_STORE_get_by_subject(&ctx, X509_LU_X509, if (num)
X509_CRL_get_issuer(x), &xobj); {
if (i <= 0) { for (i=1; i<=num; i++)
BIO_printf(bio_err, "Error getting CRL issuer certificate\n"); {
goto end; if (issuer == i)
} {
pkey = X509_get_pubkey(xobj.data.x509); print_name(bio_out, "issuer=", X509_CRL_get_issuer(x), nmflag);
X509_OBJECT_free_contents(&xobj); }
if (!pkey) {
BIO_printf(bio_err, "Error getting CRL issuer public key\n");
goto end;
}
i = X509_CRL_verify(x, pkey);
EVP_PKEY_free(pkey);
if (i < 0)
goto end;
if (i == 0)
BIO_printf(bio_err, "verify failure\n");
else
BIO_printf(bio_err, "verify OK\n");
}
if (num) { if (hash == i)
for (i = 1; i <= num; i++) { {
if (issuer == i) { BIO_printf(bio_out,"%08lx\n",
print_name(bio_out, "issuer=", X509_CRL_get_issuer(x), X509_NAME_hash(X509_CRL_get_issuer(x)));
nmflag); }
} if (lastupdate == i)
if (crlnumber == i) { {
ASN1_INTEGER *crlnum; BIO_printf(bio_out,"lastUpdate=");
crlnum = X509_CRL_get_ext_d2i(x, NID_crl_number, NULL, NULL); ASN1_TIME_print(bio_out,
BIO_printf(bio_out, "crlNumber="); X509_CRL_get_lastUpdate(x));
if (crlnum) { BIO_printf(bio_out,"\n");
i2a_ASN1_INTEGER(bio_out, crlnum); }
ASN1_INTEGER_free(crlnum); if (nextupdate == i)
} else {
BIO_puts(bio_out, "<NONE>"); BIO_printf(bio_out,"nextUpdate=");
BIO_printf(bio_out, "\n"); if (X509_CRL_get_nextUpdate(x))
} ASN1_TIME_print(bio_out,
if (hash == i) { X509_CRL_get_nextUpdate(x));
BIO_printf(bio_out, "%08lx\n", else
X509_NAME_hash(X509_CRL_get_issuer(x))); BIO_printf(bio_out,"NONE");
} BIO_printf(bio_out,"\n");
#ifndef OPENSSL_NO_MD5 }
if (hash_old == i) { if (fingerprint == i)
BIO_printf(bio_out, "%08lx\n", {
X509_NAME_hash_old(X509_CRL_get_issuer(x))); int j;
} unsigned int n;
#endif unsigned char md[EVP_MAX_MD_SIZE];
if (lastupdate == i) {
BIO_printf(bio_out, "lastUpdate=");
ASN1_TIME_print(bio_out, X509_CRL_get_lastUpdate(x));
BIO_printf(bio_out, "\n");
}
if (nextupdate == i) {
BIO_printf(bio_out, "nextUpdate=");
if (X509_CRL_get_nextUpdate(x))
ASN1_TIME_print(bio_out, X509_CRL_get_nextUpdate(x));
else
BIO_printf(bio_out, "NONE");
BIO_printf(bio_out, "\n");
}
if (fingerprint == i) {
int j;
unsigned int n;
unsigned char md[EVP_MAX_MD_SIZE];
if (!X509_CRL_digest(x, digest, md, &n)) { if (!X509_CRL_digest(x,digest,md,&n))
BIO_printf(bio_err, "out of memory\n"); {
goto end; BIO_printf(bio_err,"out of memory\n");
} goto end;
BIO_printf(bio_out, "%s Fingerprint=", }
OBJ_nid2sn(EVP_MD_type(digest))); BIO_printf(bio_out,"%s Fingerprint=",
for (j = 0; j < (int)n; j++) { OBJ_nid2sn(EVP_MD_type(digest)));
BIO_printf(bio_out, "%02X%c", md[j], (j + 1 == (int)n) for (j=0; j<(int)n; j++)
? '\n' : ':'); {
} BIO_printf(bio_out,"%02X%c",md[j],
} (j+1 == (int)n)
} ?'\n':':');
} }
}
}
}
out = BIO_new(BIO_s_file()); out=BIO_new(BIO_s_file());
if (out == NULL) { if (out == NULL)
ERR_print_errors(bio_err); {
goto end; ERR_print_errors(bio_err);
} goto end;
}
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 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);
} }
#endif #endif
} else { }
if (BIO_write_filename(out, outfile) <= 0) { else
perror(outfile); {
goto end; if (BIO_write_filename(out,outfile) <= 0)
} {
} perror(outfile);
goto end;
}
}
if (text) if (text) X509_CRL_print(out, x);
X509_CRL_print(out, x);
if (noout) { if (noout)
ret = 0; {
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);
else if (outformat == FORMAT_PEM) else if (outformat == FORMAT_PEM)
i = PEM_write_bio_X509_CRL(out, x); i=PEM_write_bio_X509_CRL(out,x);
else { else
BIO_printf(bio_err, "bad output format specified for outfile\n"); {
goto end; BIO_printf(bio_err,"bad output format specified for outfile\n");
} goto end;
if (!i) { }
BIO_printf(bio_err, "unable to write CRL\n"); if (!i) { BIO_printf(bio_err,"unable to write CRL\n"); goto end; }
goto end; ret=0;
} end:
ret = 0; BIO_free_all(out);
end: BIO_free_all(bio_out);
BIO_free_all(out); bio_out=NULL;
BIO_free_all(bio_out); X509_CRL_free(x);
bio_out = NULL; if(store) {
X509_CRL_free(x); X509_STORE_CTX_cleanup(&ctx);
if (store) { X509_STORE_free(store);
X509_STORE_CTX_cleanup(&ctx); }
X509_STORE_free(store); apps_shutdown();
} OPENSSL_EXIT(ret);
apps_shutdown(); }
OPENSSL_EXIT(ret);
}
static X509_CRL *load_crl(char *infile, int format) static X509_CRL *load_crl(char *infile, int format)
{ {
X509_CRL *x = NULL; X509_CRL *x=NULL;
BIO *in = NULL; BIO *in=NULL;
in = BIO_new(BIO_s_file()); in=BIO_new(BIO_s_file());
if (in == NULL) { if (in == NULL)
ERR_print_errors(bio_err); {
goto end; ERR_print_errors(bio_err);
} goto end;
}
if (infile == NULL) if (infile == NULL)
BIO_set_fp(in, stdin, BIO_NOCLOSE); BIO_set_fp(in,stdin,BIO_NOCLOSE);
else { else
if (BIO_read_filename(in, infile) <= 0) { {
perror(infile); if (BIO_read_filename(in,infile) <= 0)
goto end; {
} perror(infile);
} goto end;
if (format == FORMAT_ASN1) }
x = d2i_X509_CRL_bio(in, NULL); }
else if (format == FORMAT_PEM) if (format == FORMAT_ASN1)
x = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL); x=d2i_X509_CRL_bio(in,NULL);
else { else if (format == FORMAT_PEM)
BIO_printf(bio_err, "bad input format specified for input crl\n"); x=PEM_read_bio_X509_CRL(in,NULL,NULL,NULL);
goto end; else {
} BIO_printf(bio_err,"bad input format specified for input crl\n");
if (x == NULL) { goto end;
BIO_printf(bio_err, "unable to load CRL\n"); }
ERR_print_errors(bio_err); if (x == NULL)
goto end; {
} BIO_printf(bio_err,"unable to load CRL\n");
ERR_print_errors(bio_err);
goto end;
}
end:
BIO_free(in);
return(x);
}
end:
BIO_free(in);
return (x);
}

View File

@ -5,21 +5,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -49,22 +49,21 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
/* /* This was written by Gordon Chaffee <chaffee@plateau.cs.berkeley.edu>
* This was written by Gordon Chaffee <chaffee@plateau.cs.berkeley.edu> and * and donated 'to the cause' along with lots and lots of other fixes to
* donated 'to the cause' along with lots and lots of other fixes to the * the library. */
* library.
*/
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h>
#include "apps.h" #include "apps.h"
#include <openssl/err.h> #include <openssl/err.h>
#include <openssl/evp.h> #include <openssl/evp.h>
@ -75,260 +74,272 @@
static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile); static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile);
#undef PROG #undef PROG
#define PROG crl2pkcs7_main #define PROG crl2pkcs7_main
/*- /* -inform arg - input format - default PEM (DER or PEM)
* -inform arg - input format - default PEM (DER or PEM)
* -outform arg - output format - default PEM * -outform arg - output format - default PEM
* -in arg - input file - default stdin * -in arg - input file - default stdin
* -out arg - output file - default stdout * -out arg - output file - default stdout
*/ */
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
int i, badops = 0; int i,badops=0;
BIO *in = NULL, *out = NULL; BIO *in=NULL,*out=NULL;
int informat, outformat; int informat,outformat;
char *infile, *outfile, *prog, *certfile; char *infile,*outfile,*prog,*certfile;
PKCS7 *p7 = NULL; PKCS7 *p7 = NULL;
PKCS7_SIGNED *p7s = NULL; PKCS7_SIGNED *p7s = NULL;
X509_CRL *crl = NULL; X509_CRL *crl=NULL;
STACK_OF(OPENSSL_STRING) *certflst = NULL; STACK *certflst=NULL;
STACK_OF(X509_CRL) *crl_stack = NULL; STACK_OF(X509_CRL) *crl_stack=NULL;
STACK_OF(X509) *cert_stack = NULL; STACK_OF(X509) *cert_stack=NULL;
int ret = 1, nocrl = 0; int ret=1,nocrl=0;
apps_startup(); apps_startup();
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);
infile = NULL; infile=NULL;
outfile = NULL; outfile=NULL;
informat = FORMAT_PEM; informat=FORMAT_PEM;
outformat = FORMAT_PEM; outformat=FORMAT_PEM;
prog = argv[0]; prog=argv[0];
argc--; argc--;
argv++; argv++;
while (argc >= 1) { while (argc >= 1)
if (strcmp(*argv, "-inform") == 0) { {
if (--argc < 1) if (strcmp(*argv,"-inform") == 0)
goto bad; {
informat = str2fmt(*(++argv)); if (--argc < 1) goto bad;
} else if (strcmp(*argv, "-outform") == 0) { informat=str2fmt(*(++argv));
if (--argc < 1) }
goto bad; else if (strcmp(*argv,"-outform") == 0)
outformat = str2fmt(*(++argv)); {
} else if (strcmp(*argv, "-in") == 0) { if (--argc < 1) goto bad;
if (--argc < 1) outformat=str2fmt(*(++argv));
goto bad; }
infile = *(++argv); else if (strcmp(*argv,"-in") == 0)
} else if (strcmp(*argv, "-nocrl") == 0) { {
nocrl = 1; if (--argc < 1) goto bad;
} else if (strcmp(*argv, "-out") == 0) { infile= *(++argv);
if (--argc < 1) }
goto bad; else if (strcmp(*argv,"-nocrl") == 0)
outfile = *(++argv); {
} else if (strcmp(*argv, "-certfile") == 0) { nocrl=1;
if (--argc < 1) }
goto bad; else if (strcmp(*argv,"-out") == 0)
if (!certflst) {
certflst = sk_OPENSSL_STRING_new_null(); if (--argc < 1) goto bad;
if (!certflst) outfile= *(++argv);
goto end; }
if (!sk_OPENSSL_STRING_push(certflst, *(++argv))) { else if (strcmp(*argv,"-certfile") == 0)
sk_OPENSSL_STRING_free(certflst); {
goto end; if (--argc < 1) goto bad;
} if(!certflst) certflst = sk_new_null();
} else { sk_push(certflst,*(++argv));
BIO_printf(bio_err, "unknown option %s\n", *argv); }
badops = 1; else
break; {
} BIO_printf(bio_err,"unknown option %s\n",*argv);
argc--; badops=1;
argv++; break;
} }
argc--;
argv++;
}
if (badops) { if (badops)
bad: {
BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog); bad:
BIO_printf(bio_err, "where options are\n"); BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
BIO_printf(bio_err, " -inform arg input format - DER or PEM\n"); BIO_printf(bio_err,"where options are\n");
BIO_printf(bio_err, " -outform arg output format - DER or PEM\n"); BIO_printf(bio_err," -inform arg input format - DER or PEM\n");
BIO_printf(bio_err, " -in arg input file\n"); BIO_printf(bio_err," -outform arg output format - DER or PEM\n");
BIO_printf(bio_err, " -out arg output file\n"); BIO_printf(bio_err," -in arg input file\n");
BIO_printf(bio_err, BIO_printf(bio_err," -out arg output file\n");
" -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, BIO_printf(bio_err," -nocrl no crl to load, just certs from '-certfile'\n");
" -nocrl no crl to load, just certs from '-certfile'\n"); ret = 1;
ret = 1; goto end;
goto end; }
}
ERR_load_crypto_strings(); ERR_load_crypto_strings();
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))
ERR_print_errors(bio_err); {
goto end; ERR_print_errors(bio_err);
} goto end;
}
if (!nocrl) { if (!nocrl)
if (infile == NULL) {
BIO_set_fp(in, stdin, BIO_NOCLOSE); if (infile == NULL)
else { BIO_set_fp(in,stdin,BIO_NOCLOSE);
if (BIO_read_filename(in, infile) <= 0) { else
perror(infile); {
goto end; if (BIO_read_filename(in,infile) <= 0)
} {
} perror(infile);
goto end;
}
}
if (informat == FORMAT_ASN1) if (informat == FORMAT_ASN1)
crl = d2i_X509_CRL_bio(in, NULL); crl=d2i_X509_CRL_bio(in,NULL);
else if (informat == FORMAT_PEM) else if (informat == FORMAT_PEM)
crl = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL); crl=PEM_read_bio_X509_CRL(in,NULL,NULL,NULL);
else { else {
BIO_printf(bio_err, "bad input format specified for input crl\n"); BIO_printf(bio_err,"bad input format specified for input crl\n");
goto end; goto end;
} }
if (crl == NULL) { if (crl == NULL)
BIO_printf(bio_err, "unable to load CRL\n"); {
ERR_print_errors(bio_err); BIO_printf(bio_err,"unable to load CRL\n");
goto end; ERR_print_errors(bio_err);
} goto end;
} }
}
if ((p7=PKCS7_new()) == NULL) goto end;
if ((p7s=PKCS7_SIGNED_new()) == NULL) goto end;
p7->type=OBJ_nid2obj(NID_pkcs7_signed);
p7->d.sign=p7s;
p7s->contents->type=OBJ_nid2obj(NID_pkcs7_data);
if ((p7 = PKCS7_new()) == NULL) if (!ASN1_INTEGER_set(p7s->version,1)) goto end;
goto end; if ((crl_stack=sk_X509_CRL_new_null()) == NULL) goto end;
if ((p7s = PKCS7_SIGNED_new()) == NULL) p7s->crl=crl_stack;
goto end; if (crl != NULL)
p7->type = OBJ_nid2obj(NID_pkcs7_signed); {
p7->d.sign = p7s; sk_X509_CRL_push(crl_stack,crl);
p7s->contents->type = OBJ_nid2obj(NID_pkcs7_data); crl=NULL; /* now part of p7 for OPENSSL_freeing */
}
if (!ASN1_INTEGER_set(p7s->version, 1)) if ((cert_stack=sk_X509_new_null()) == NULL) goto end;
goto end; p7s->cert=cert_stack;
if ((crl_stack = sk_X509_CRL_new_null()) == NULL)
goto end;
p7s->crl = crl_stack;
if (crl != NULL) {
sk_X509_CRL_push(crl_stack, crl);
crl = NULL; /* now part of p7 for OPENSSL_freeing */
}
if ((cert_stack = sk_X509_new_null()) == NULL) if(certflst) for(i = 0; i < sk_num(certflst); i++) {
goto end; certfile = sk_value(certflst, i);
p7s->cert = cert_stack; if (add_certs_from_file(cert_stack,certfile) < 0)
{
BIO_printf(bio_err, "error loading certificates\n");
ERR_print_errors(bio_err);
goto end;
}
}
if (certflst) sk_free(certflst);
for (i = 0; i < sk_OPENSSL_STRING_num(certflst); i++) {
certfile = sk_OPENSSL_STRING_value(certflst, i);
if (add_certs_from_file(cert_stack, certfile) < 0) {
BIO_printf(bio_err, "error loading certificates\n");
ERR_print_errors(bio_err);
goto end;
}
}
sk_OPENSSL_STRING_free(certflst); 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 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);
} }
#endif #endif
} else { }
if (BIO_write_filename(out, outfile) <= 0) { else
perror(outfile); {
goto end; if (BIO_write_filename(out,outfile) <= 0)
} {
} perror(outfile);
goto end;
}
}
if (outformat == FORMAT_ASN1) if (outformat == FORMAT_ASN1)
i = i2d_PKCS7_bio(out, p7); i=i2d_PKCS7_bio(out,p7);
else if (outformat == FORMAT_PEM) else if (outformat == FORMAT_PEM)
i = PEM_write_bio_PKCS7(out, p7); i=PEM_write_bio_PKCS7(out,p7);
else { else {
BIO_printf(bio_err, "bad output format specified for outfile\n"); BIO_printf(bio_err,"bad output format specified for outfile\n");
goto end; goto end;
} }
if (!i) { if (!i)
BIO_printf(bio_err, "unable to write pkcs7 object\n"); {
ERR_print_errors(bio_err); BIO_printf(bio_err,"unable to write pkcs7 object\n");
goto end; ERR_print_errors(bio_err);
} goto end;
ret = 0; }
end: ret=0;
if (in != NULL) end:
BIO_free(in); if (in != NULL) BIO_free(in);
if (out != NULL) if (out != NULL) BIO_free_all(out);
BIO_free_all(out); if (p7 != NULL) PKCS7_free(p7);
if (p7 != NULL) if (crl != NULL) X509_CRL_free(crl);
PKCS7_free(p7);
if (crl != NULL)
X509_CRL_free(crl);
apps_shutdown(); apps_shutdown();
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }
/*- /*
*---------------------------------------------------------------------- *----------------------------------------------------------------------
* int add_certs_from_file * int add_certs_from_file
* *
* Read a list of certificates to be checked from a file. * Read a list of certificates to be checked from a file.
* *
* Results: * Results:
* number of certs added if successful, -1 if not. * number of certs added if successful, -1 if not.
*---------------------------------------------------------------------- *----------------------------------------------------------------------
*/ */
static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile) static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile)
{ {
BIO *in = NULL; struct stat st;
int count = 0; BIO *in=NULL;
int ret = -1; int count=0;
STACK_OF(X509_INFO) *sk = NULL; int ret= -1;
X509_INFO *xi; STACK_OF(X509_INFO) *sk=NULL;
X509_INFO *xi;
in = BIO_new(BIO_s_file()); if ((stat(certfile,&st) != 0))
if ((in == NULL) || (BIO_read_filename(in, certfile) <= 0)) { {
BIO_printf(bio_err, "error opening the file, %s\n", certfile); BIO_printf(bio_err,"unable to load the file, %s\n",certfile);
goto end; goto end;
} }
/* This loads from a file, a stack of x509/crl/pkey sets */ in=BIO_new(BIO_s_file());
sk = PEM_X509_INFO_read_bio(in, NULL, NULL, NULL); if ((in == NULL) || (BIO_read_filename(in,certfile) <= 0))
if (sk == NULL) { {
BIO_printf(bio_err, "error reading the file, %s\n", certfile); BIO_printf(bio_err,"error opening the file, %s\n",certfile);
goto end; goto end;
} }
/* scan over it and pull out the CRL's */ /* This loads from a file, a stack of x509/crl/pkey sets */
while (sk_X509_INFO_num(sk)) { sk=PEM_X509_INFO_read_bio(in,NULL,NULL,NULL);
xi = sk_X509_INFO_shift(sk); if (sk == NULL) {
if (xi->x509 != NULL) { BIO_printf(bio_err,"error reading the file, %s\n",certfile);
sk_X509_push(stack, xi->x509); goto end;
xi->x509 = NULL; }
count++;
} /* scan over it and pull out the CRL's */
X509_INFO_free(xi); while (sk_X509_INFO_num(sk))
} {
xi=sk_X509_INFO_shift(sk);
if (xi->x509 != NULL)
{
sk_X509_push(stack,xi->x509);
xi->x509=NULL;
count++;
}
X509_INFO_free(xi);
}
ret=count;
end:
/* never need to OPENSSL_free x */
if (in != NULL) BIO_free(in);
if (sk != NULL) sk_X509_INFO_free(sk);
return(ret);
}
ret = count;
end:
/* never need to OPENSSL_free x */
if (in != NULL)
BIO_free(in);
if (sk != NULL)
sk_X509_INFO_free(sk);
return (ret);
}

View File

@ -1,6 +0,0 @@
# This is a file that will be filled by the openssl srp routine.
# You can initialize the file with additional groups, these are
# records starting with a I followed by the g and N values and the id.
# The exact values ... you have to dig this out from the source of srp.c
# or srp_vfy.c
# The last value of an I is used as the default group for new users.

View File

@ -1 +0,0 @@
unique_subject = yes

File diff suppressed because it is too large Load Diff

557
apps/dh.c
View File

@ -6,21 +6,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -35,10 +35,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -50,36 +50,35 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */ #include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */
#ifndef OPENSSL_NO_DH #ifndef OPENSSL_NO_DH
# include <stdio.h> #include <stdio.h>
# include <stdlib.h> #include <stdlib.h>
# include <time.h> #include <time.h>
# include <string.h> #include <string.h>
# include "apps.h" #include "apps.h"
# include <openssl/bio.h> #include <openssl/bio.h>
# include <openssl/err.h> #include <openssl/err.h>
# include <openssl/bn.h> #include <openssl/bn.h>
# include <openssl/dh.h> #include <openssl/dh.h>
# include <openssl/x509.h> #include <openssl/x509.h>
# include <openssl/pem.h> #include <openssl/pem.h>
# undef PROG #undef PROG
# define PROG dh_main #define PROG dh_main
/*- /* -inform arg - input format - default PEM (DER or PEM)
* -inform arg - input format - default PEM (DER or PEM)
* -outform arg - output format - default PEM * -outform arg - output format - default PEM
* -in arg - input file - default stdin * -in arg - input file - default stdin
* -out arg - output file - default stdout * -out arg - output file - default stdout
* -check - check the parameters are ok * -check - check the parameters are ok
* -noout * -noout
* -text * -text
* -C * -C
@ -88,250 +87,266 @@
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
DH *dh = NULL; #ifndef OPENSSL_NO_ENGINE
int i, badops = 0, text = 0; ENGINE *e = NULL;
BIO *in = NULL, *out = NULL; #endif
int informat, outformat, check = 0, noout = 0, C = 0, ret = 1; DH *dh=NULL;
char *infile, *outfile, *prog; int i,badops=0,text=0;
# ifndef OPENSSL_NO_ENGINE BIO *in=NULL,*out=NULL;
char *engine; int informat,outformat,check=0,noout=0,C=0,ret=1;
# endif char *infile,*outfile,*prog;
#ifndef OPENSSL_NO_ENGINE
apps_startup(); char *engine;
#endif
if (bio_err == NULL)
if ((bio_err = BIO_new(BIO_s_file())) != NULL) apps_startup();
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
if (bio_err == NULL)
if (!load_config(bio_err, NULL)) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
goto end; BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
# ifndef OPENSSL_NO_ENGINE if (!load_config(bio_err, NULL))
engine = NULL; goto end;
# endif
infile = NULL; #ifndef OPENSSL_NO_ENGINE
outfile = NULL; engine=NULL;
informat = FORMAT_PEM; #endif
outformat = FORMAT_PEM; infile=NULL;
outfile=NULL;
prog = argv[0]; informat=FORMAT_PEM;
argc--; outformat=FORMAT_PEM;
argv++;
while (argc >= 1) { prog=argv[0];
if (strcmp(*argv, "-inform") == 0) { argc--;
if (--argc < 1) argv++;
goto bad; while (argc >= 1)
informat = str2fmt(*(++argv)); {
} else if (strcmp(*argv, "-outform") == 0) { if (strcmp(*argv,"-inform") == 0)
if (--argc < 1) {
goto bad; if (--argc < 1) goto bad;
outformat = str2fmt(*(++argv)); informat=str2fmt(*(++argv));
} else if (strcmp(*argv, "-in") == 0) { }
if (--argc < 1) else if (strcmp(*argv,"-outform") == 0)
goto bad; {
infile = *(++argv); if (--argc < 1) goto bad;
} else if (strcmp(*argv, "-out") == 0) { outformat=str2fmt(*(++argv));
if (--argc < 1) }
goto bad; else if (strcmp(*argv,"-in") == 0)
outfile = *(++argv); {
} if (--argc < 1) goto bad;
# ifndef OPENSSL_NO_ENGINE infile= *(++argv);
else if (strcmp(*argv, "-engine") == 0) { }
if (--argc < 1) else if (strcmp(*argv,"-out") == 0)
goto bad; {
engine = *(++argv); if (--argc < 1) goto bad;
} outfile= *(++argv);
# endif }
else if (strcmp(*argv, "-check") == 0) #ifndef OPENSSL_NO_ENGINE
check = 1; else if (strcmp(*argv,"-engine") == 0)
else if (strcmp(*argv, "-text") == 0) {
text = 1; if (--argc < 1) goto bad;
else if (strcmp(*argv, "-C") == 0) engine= *(++argv);
C = 1; }
else if (strcmp(*argv, "-noout") == 0) #endif
noout = 1; else if (strcmp(*argv,"-check") == 0)
else { check=1;
BIO_printf(bio_err, "unknown option %s\n", *argv); else if (strcmp(*argv,"-text") == 0)
badops = 1; text=1;
break; else if (strcmp(*argv,"-C") == 0)
} C=1;
argc--; else if (strcmp(*argv,"-noout") == 0)
argv++; noout=1;
} else
{
if (badops) { BIO_printf(bio_err,"unknown option %s\n",*argv);
bad: badops=1;
BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog); break;
BIO_printf(bio_err, "where options are\n"); }
BIO_printf(bio_err, " -inform arg input format - one of DER PEM\n"); argc--;
BIO_printf(bio_err, argv++;
" -outform arg output format - one of DER PEM\n"); }
BIO_printf(bio_err, " -in arg input file\n");
BIO_printf(bio_err, " -out arg output file\n"); if (badops)
BIO_printf(bio_err, " -check check the DH parameters\n"); {
BIO_printf(bio_err, bad:
" -text print a text form of the DH parameters\n"); BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
BIO_printf(bio_err, " -C Output C code\n"); BIO_printf(bio_err,"where options are\n");
BIO_printf(bio_err, " -noout no output\n"); BIO_printf(bio_err," -inform arg input format - one of DER PEM\n");
# ifndef OPENSSL_NO_ENGINE BIO_printf(bio_err," -outform arg output format - one of DER PEM\n");
BIO_printf(bio_err, BIO_printf(bio_err," -in arg input file\n");
" -engine e use engine e, possibly a hardware device.\n"); BIO_printf(bio_err," -out arg output file\n");
# endif BIO_printf(bio_err," -check check the DH parameters\n");
goto end; 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," -noout no output\n");
ERR_load_crypto_strings(); #ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
# ifndef OPENSSL_NO_ENGINE #endif
setup_engine(bio_err, engine, 0); goto end;
# endif }
in = BIO_new(BIO_s_file()); ERR_load_crypto_strings();
out = BIO_new(BIO_s_file());
if ((in == NULL) || (out == NULL)) { #ifndef OPENSSL_NO_ENGINE
ERR_print_errors(bio_err); e = setup_engine(bio_err, engine, 0);
goto end; #endif
}
in=BIO_new(BIO_s_file());
if (infile == NULL) out=BIO_new(BIO_s_file());
BIO_set_fp(in, stdin, BIO_NOCLOSE); if ((in == NULL) || (out == NULL))
else { {
if (BIO_read_filename(in, infile) <= 0) { ERR_print_errors(bio_err);
perror(infile); goto end;
goto end; }
}
} if (infile == NULL)
if (outfile == NULL) { BIO_set_fp(in,stdin,BIO_NOCLOSE);
BIO_set_fp(out, stdout, BIO_NOCLOSE); else
# ifdef OPENSSL_SYS_VMS {
{ if (BIO_read_filename(in,infile) <= 0)
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); {
out = BIO_push(tmpbio, out); perror(infile);
} goto end;
# endif }
} else { }
if (BIO_write_filename(out, outfile) <= 0) { if (outfile == NULL)
perror(outfile); {
goto end; BIO_set_fp(out,stdout,BIO_NOCLOSE);
} #ifdef OPENSSL_SYS_VMS
} {
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
if (informat == FORMAT_ASN1) out = BIO_push(tmpbio, out);
dh = d2i_DHparams_bio(in, NULL); }
else if (informat == FORMAT_PEM) #endif
dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL); }
else { else
BIO_printf(bio_err, "bad input format specified\n"); {
goto end; if (BIO_write_filename(out,outfile) <= 0)
} {
if (dh == NULL) { perror(outfile);
BIO_printf(bio_err, "unable to load DH parameters\n"); goto end;
ERR_print_errors(bio_err); }
goto end; }
}
if (informat == FORMAT_ASN1)
if (text) { dh=d2i_DHparams_bio(in,NULL);
DHparams_print(out, dh); else if (informat == FORMAT_PEM)
# ifdef undef dh=PEM_read_bio_DHparams(in,NULL,NULL,NULL);
printf("p="); else
BN_print(stdout, dh->p); {
printf("\ng="); BIO_printf(bio_err,"bad input format specified\n");
BN_print(stdout, dh->g); goto end;
printf("\n"); }
if (dh->length != 0) if (dh == NULL)
printf("recommended private length=%ld\n", dh->length); {
# endif BIO_printf(bio_err,"unable to load DH parameters\n");
} ERR_print_errors(bio_err);
goto end;
if (check) { }
if (!DH_check(dh, &i)) {
ERR_print_errors(bio_err);
goto end;
} if (text)
if (i & DH_CHECK_P_NOT_PRIME) {
printf("p value is not prime\n"); DHparams_print(out,dh);
if (i & DH_CHECK_P_NOT_SAFE_PRIME) #ifdef undef
printf("p value is not a safe prime\n"); printf("p=");
if (i & DH_UNABLE_TO_CHECK_GENERATOR) BN_print(stdout,dh->p);
printf("unable to check the generator value\n"); printf("\ng=");
if (i & DH_NOT_SUITABLE_GENERATOR) BN_print(stdout,dh->g);
printf("the g value is not a generator\n"); printf("\n");
if (i == 0) if (dh->length != 0)
printf("DH parameters appear to be ok.\n"); printf("recommended private length=%ld\n",dh->length);
} #endif
if (C) { }
unsigned char *data;
int len, l, bits; if (check)
{
len = BN_num_bytes(dh->p); if (!DH_check(dh,&i))
bits = BN_num_bits(dh->p); {
data = (unsigned char *)OPENSSL_malloc(len); ERR_print_errors(bio_err);
if (data == NULL) { goto end;
perror("OPENSSL_malloc"); }
goto end; if (i & DH_CHECK_P_NOT_PRIME)
} printf("p value is not prime\n");
l = BN_bn2bin(dh->p, data); if (i & DH_CHECK_P_NOT_SAFE_PRIME)
printf("static unsigned char dh%d_p[]={", bits); printf("p value is not a safe prime\n");
for (i = 0; i < l; i++) { if (i & DH_UNABLE_TO_CHECK_GENERATOR)
if ((i % 12) == 0) printf("unable to check the generator value\n");
printf("\n\t"); if (i & DH_NOT_SUITABLE_GENERATOR)
printf("0x%02X,", data[i]); printf("the g value is not a generator\n");
} if (i == 0)
printf("\n\t};\n"); printf("DH parameters appear to be ok.\n");
}
l = BN_bn2bin(dh->g, data); if (C)
printf("static unsigned char dh%d_g[]={", bits); {
for (i = 0; i < l; i++) { unsigned char *data;
if ((i % 12) == 0) int len,l,bits;
printf("\n\t");
printf("0x%02X,", data[i]); len=BN_num_bytes(dh->p);
} bits=BN_num_bits(dh->p);
printf("\n\t};\n\n"); data=(unsigned char *)OPENSSL_malloc(len);
if (data == NULL)
printf("DH *get_dh%d()\n\t{\n", bits); {
printf("\tDH *dh;\n\n"); perror("OPENSSL_malloc");
printf("\tif ((dh=DH_new()) == NULL) return(NULL);\n"); goto end;
printf("\tdh->p=BN_bin2bn(dh%d_p,sizeof(dh%d_p),NULL);\n", }
bits, bits); l=BN_bn2bin(dh->p,data);
printf("\tdh->g=BN_bin2bn(dh%d_g,sizeof(dh%d_g),NULL);\n", printf("static unsigned char dh%d_p[]={",bits);
bits, bits); for (i=0; i<l; i++)
printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n"); {
printf("\t\treturn(NULL);\n"); if ((i%12) == 0) printf("\n\t");
printf("\treturn(dh);\n\t}\n"); printf("0x%02X,",data[i]);
OPENSSL_free(data); }
} printf("\n\t};\n");
if (!noout) { l=BN_bn2bin(dh->g,data);
if (outformat == FORMAT_ASN1) printf("static unsigned char dh%d_g[]={",bits);
i = i2d_DHparams_bio(out, dh); for (i=0; i<l; i++)
else if (outformat == FORMAT_PEM) {
i = PEM_write_bio_DHparams(out, dh); if ((i%12) == 0) printf("\n\t");
else { printf("0x%02X,",data[i]);
BIO_printf(bio_err, "bad output format specified for outfile\n"); }
goto end; printf("\n\t};\n\n");
}
if (!i) { printf("DH *get_dh%d()\n\t{\n",bits);
BIO_printf(bio_err, "unable to write DH parameters\n"); printf("\tDH *dh;\n\n");
ERR_print_errors(bio_err); printf("\tif ((dh=DH_new()) == NULL) return(NULL);\n");
goto end; printf("\tdh->p=BN_bin2bn(dh%d_p,sizeof(dh%d_p),NULL);\n",
} bits,bits);
} printf("\tdh->g=BN_bin2bn(dh%d_g,sizeof(dh%d_g),NULL);\n",
ret = 0; bits,bits);
end: printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
if (in != NULL) printf("\t\treturn(NULL);\n");
BIO_free(in); printf("\treturn(dh);\n\t}\n");
if (out != NULL) OPENSSL_free(data);
BIO_free_all(out); }
if (dh != NULL)
DH_free(dh);
apps_shutdown(); if (!noout)
OPENSSL_EXIT(ret); {
} if (outformat == FORMAT_ASN1)
#else /* !OPENSSL_NO_DH */ i=i2d_DHparams_bio(out,dh);
else if (outformat == FORMAT_PEM)
# if PEDANTIC i=PEM_write_bio_DHparams(out,dh);
static void *dummy = &dummy; else {
# endif BIO_printf(bio_err,"bad output format specified for outfile\n");
goto end;
}
if (!i)
{
BIO_printf(bio_err,"unable to write DH parameters\n");
ERR_print_errors(bio_err);
goto end;
}
}
ret=0;
end:
if (in != NULL) BIO_free(in);
if (out != NULL) BIO_free_all(out);
if (dh != NULL) DH_free(dh);
apps_shutdown();
OPENSSL_EXIT(ret);
}
#endif #endif

View File

@ -5,21 +5,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
@ -63,7 +63,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@ -109,36 +109,35 @@
* *
*/ */
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */ #include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */
#ifndef OPENSSL_NO_DH #ifndef OPENSSL_NO_DH
# include <stdio.h> #include <stdio.h>
# include <stdlib.h> #include <stdlib.h>
# include <time.h> #include <time.h>
# include <string.h> #include <string.h>
# include "apps.h" #include "apps.h"
# include <openssl/bio.h> #include <openssl/bio.h>
# include <openssl/err.h> #include <openssl/err.h>
# include <openssl/bn.h> #include <openssl/bn.h>
# include <openssl/dh.h> #include <openssl/dh.h>
# include <openssl/x509.h> #include <openssl/x509.h>
# include <openssl/pem.h> #include <openssl/pem.h>
# ifndef OPENSSL_NO_DSA #ifndef OPENSSL_NO_DSA
# include <openssl/dsa.h> #include <openssl/dsa.h>
# endif #endif
# undef PROG #undef PROG
# define PROG dhparam_main #define PROG dhparam_main
# define DEFBITS 2048 #define DEFBITS 512
/*- /* -inform arg - input format - default PEM (DER or PEM)
* -inform arg - input format - default PEM (DER or PEM)
* -outform arg - output format - default PEM * -outform arg - output format - default PEM
* -in arg - input file - default stdin * -in arg - input file - default stdin
* -out arg - output file - default stdout * -out arg - output file - default stdout
* -dsaparam - read or generate DSA parameters, convert to DH * -dsaparam - read or generate DSA parameters, convert to DH
* -check - check the parameters are ok * -check - check the parameters are ok
* -noout * -noout
* -text * -text
* -C * -C
@ -149,395 +148,410 @@ static int MS_CALLBACK dh_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)
{ {
DH *dh = NULL; #ifndef OPENSSL_NO_ENGINE
int i, badops = 0, text = 0; ENGINE *e = NULL;
# ifndef OPENSSL_NO_DSA #endif
int dsaparam = 0; DH *dh=NULL;
# endif int i,badops=0,text=0;
BIO *in = NULL, *out = NULL; #ifndef OPENSSL_NO_DSA
int informat, outformat, check = 0, noout = 0, C = 0, ret = 1; int dsaparam=0;
char *infile, *outfile, *prog; #endif
char *inrand = NULL; BIO *in=NULL,*out=NULL;
# ifndef OPENSSL_NO_ENGINE int informat,outformat,check=0,noout=0,C=0,ret=1;
char *engine = NULL; char *infile,*outfile,*prog;
# endif char *inrand=NULL;
int num = 0, g = 0; #ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
int num = 0, g = 0;
apps_startup(); apps_startup();
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)) if (!load_config(bio_err, NULL))
goto end; goto end;
infile = NULL; infile=NULL;
outfile = NULL; outfile=NULL;
informat = FORMAT_PEM; informat=FORMAT_PEM;
outformat = FORMAT_PEM; outformat=FORMAT_PEM;
prog = argv[0]; prog=argv[0];
argc--; argc--;
argv++; argv++;
while (argc >= 1) { while (argc >= 1)
if (strcmp(*argv, "-inform") == 0) { {
if (--argc < 1) if (strcmp(*argv,"-inform") == 0)
goto bad; {
informat = str2fmt(*(++argv)); if (--argc < 1) goto bad;
} else if (strcmp(*argv, "-outform") == 0) { informat=str2fmt(*(++argv));
if (--argc < 1) }
goto bad; else if (strcmp(*argv,"-outform") == 0)
outformat = str2fmt(*(++argv)); {
} else if (strcmp(*argv, "-in") == 0) { if (--argc < 1) goto bad;
if (--argc < 1) outformat=str2fmt(*(++argv));
goto bad; }
infile = *(++argv); else if (strcmp(*argv,"-in") == 0)
} else if (strcmp(*argv, "-out") == 0) { {
if (--argc < 1) if (--argc < 1) goto bad;
goto bad; infile= *(++argv);
outfile = *(++argv); }
} else if (strcmp(*argv,"-out") == 0)
# ifndef OPENSSL_NO_ENGINE {
else if (strcmp(*argv, "-engine") == 0) { if (--argc < 1) goto bad;
if (--argc < 1) outfile= *(++argv);
goto bad; }
engine = *(++argv); #ifndef OPENSSL_NO_ENGINE
} else if (strcmp(*argv,"-engine") == 0)
# endif {
else if (strcmp(*argv, "-check") == 0) if (--argc < 1) goto bad;
check = 1; engine= *(++argv);
else if (strcmp(*argv, "-text") == 0) }
text = 1; #endif
# ifndef OPENSSL_NO_DSA else if (strcmp(*argv,"-check") == 0)
else if (strcmp(*argv, "-dsaparam") == 0) check=1;
dsaparam = 1; else if (strcmp(*argv,"-text") == 0)
# endif text=1;
else if (strcmp(*argv, "-C") == 0) #ifndef OPENSSL_NO_DSA
C = 1; else if (strcmp(*argv,"-dsaparam") == 0)
else if (strcmp(*argv, "-noout") == 0) dsaparam=1;
noout = 1; #endif
else if (strcmp(*argv, "-2") == 0) else if (strcmp(*argv,"-C") == 0)
g = 2; C=1;
else if (strcmp(*argv, "-5") == 0) else if (strcmp(*argv,"-noout") == 0)
g = 5; noout=1;
else if (strcmp(*argv, "-rand") == 0) { else if (strcmp(*argv,"-2") == 0)
if (--argc < 1) g=2;
goto bad; else if (strcmp(*argv,"-5") == 0)
inrand = *(++argv); g=5;
} else if (((sscanf(*argv, "%d", &num) == 0) || (num <= 0))) else if (strcmp(*argv,"-rand") == 0)
goto bad; {
argv++; if (--argc < 1) goto bad;
argc--; inrand= *(++argv);
} }
else if (((sscanf(*argv,"%d",&num) == 0) || (num <= 0)))
goto bad;
argv++;
argc--;
}
if (badops) { if (badops)
bad: {
BIO_printf(bio_err, "%s [options] [numbits]\n", prog); bad:
BIO_printf(bio_err, "where options are\n"); BIO_printf(bio_err,"%s [options] [numbits]\n",prog);
BIO_printf(bio_err, " -inform arg input format - one of DER PEM\n"); BIO_printf(bio_err,"where options are\n");
BIO_printf(bio_err, BIO_printf(bio_err," -inform arg input format - one of DER PEM\n");
" -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 OPENSSL_NO_DSA
BIO_printf(bio_err, BIO_printf(bio_err," -dsaparam read or generate DSA parameters, convert to DH\n");
" -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"); BIO_printf(bio_err," -text print a text form of the DH parameters\n");
BIO_printf(bio_err, BIO_printf(bio_err," -C Output C code\n");
" -text print a text form of the DH parameters\n"); BIO_printf(bio_err," -2 generate parameters using 2 as the generator value\n");
BIO_printf(bio_err, " -C Output C code\n"); BIO_printf(bio_err," -5 generate parameters using 5 as the generator value\n");
BIO_printf(bio_err, BIO_printf(bio_err," numbits number of bits in to generate (default 512)\n");
" -2 generate parameters using 2 as the generator value\n"); #ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err, BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
" -5 generate parameters using 5 as the generator value\n"); #endif
BIO_printf(bio_err, BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
" numbits number of bits in to generate (default 2048)\n"); BIO_printf(bio_err," - load the file (or the files in the directory) into\n");
# ifndef OPENSSL_NO_ENGINE BIO_printf(bio_err," the random number generator\n");
BIO_printf(bio_err, BIO_printf(bio_err," -noout no output\n");
" -engine e use engine e, possibly a hardware device.\n"); goto end;
# endif }
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, " the random number generator\n");
BIO_printf(bio_err, " -noout no output\n");
goto end;
}
ERR_load_crypto_strings(); ERR_load_crypto_strings();
# ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
setup_engine(bio_err, engine, 0); e = setup_engine(bio_err, engine, 0);
# endif #endif
if (g && !num) if (g && !num)
num = DEFBITS; num = DEFBITS;
# ifndef OPENSSL_NO_DSA #ifndef OPENSSL_NO_DSA
if (dsaparam) { if (dsaparam)
if (g) { {
BIO_printf(bio_err, if (g)
"generator may not be chosen for DSA parameters\n"); {
goto end; BIO_printf(bio_err, "generator may not be chosen for DSA parameters\n");
} goto end;
} else }
# endif }
{ else
/* DH parameters */ #endif
if (num && !g) {
g = 2; /* DH parameters */
} if (num && !g)
g = 2;
}
if (num) { if(num) {
BN_GENCB cb; BN_GENCB cb;
BN_GENCB_set(&cb, dh_cb, bio_err); 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");
} }
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));
# ifndef OPENSSL_NO_DSA #ifndef OPENSSL_NO_DSA
if (dsaparam) { if (dsaparam)
DSA *dsa = DSA_new(); {
DSA *dsa = DSA_new();
BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
if(!dsa || !DSA_generate_parameters_ex(dsa, num,
NULL, 0, NULL, NULL, &cb))
{
if(dsa) DSA_free(dsa);
ERR_print_errors(bio_err);
goto end;
}
BIO_printf(bio_err, dh = DSA_dup_DH(dsa);
"Generating DSA parameters, %d bit long prime\n", num); DSA_free(dsa);
if (!dsa if (dh == NULL)
|| !DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL, {
&cb)) { ERR_print_errors(bio_err);
if (dsa) goto end;
DSA_free(dsa); }
ERR_print_errors(bio_err); }
goto end; else
} #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,"This is going to take a long time\n");
if(!dh || !DH_generate_parameters_ex(dh, num, g, &cb))
{
if(dh) DH_free(dh);
ERR_print_errors(bio_err);
goto end;
}
}
dh = DSA_dup_DH(dsa); app_RAND_write_file(NULL, bio_err);
DSA_free(dsa); } else {
if (dh == NULL) {
ERR_print_errors(bio_err);
goto end;
}
} else
# 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, "This is going to take a long time\n");
if (!dh || !DH_generate_parameters_ex(dh, num, g, &cb)) {
ERR_print_errors(bio_err);
goto end;
}
}
app_RAND_write_file(NULL, bio_err); in=BIO_new(BIO_s_file());
} else { if (in == 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;
}
}
in = BIO_new(BIO_s_file()); if (informat != FORMAT_ASN1 && informat != FORMAT_PEM)
if (in == NULL) { {
ERR_print_errors(bio_err); BIO_printf(bio_err,"bad input format specified\n");
goto end; 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 (informat != FORMAT_ASN1 && informat != FORMAT_PEM) { #ifndef OPENSSL_NO_DSA
BIO_printf(bio_err, "bad input format specified\n"); if (dsaparam)
goto end; {
} DSA *dsa;
# ifndef OPENSSL_NO_DSA
if (dsaparam) { if (informat == FORMAT_ASN1)
DSA *dsa; dsa=d2i_DSAparams_bio(in,NULL);
else /* informat == FORMAT_PEM */
dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL);
if (dsa == NULL)
{
BIO_printf(bio_err,"unable to load DSA parameters\n");
ERR_print_errors(bio_err);
goto end;
}
dh = DSA_dup_DH(dsa);
DSA_free(dsa);
if (dh == NULL)
{
ERR_print_errors(bio_err);
goto end;
}
}
else
#endif
{
if (informat == FORMAT_ASN1)
dh=d2i_DHparams_bio(in,NULL);
else /* informat == FORMAT_PEM */
dh=PEM_read_bio_DHparams(in,NULL,NULL,NULL);
if (dh == NULL)
{
BIO_printf(bio_err,"unable to load DH parameters\n");
ERR_print_errors(bio_err);
goto end;
}
}
/* dh != NULL */
}
out=BIO_new(BIO_s_file());
if (out == NULL)
{
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;
}
}
if (informat == FORMAT_ASN1)
dsa = d2i_DSAparams_bio(in, NULL);
else /* informat == FORMAT_PEM */
dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL);
if (dsa == NULL) { if (text)
BIO_printf(bio_err, "unable to load DSA parameters\n"); {
ERR_print_errors(bio_err); DHparams_print(out,dh);
goto end; }
}
if (check)
{
if (!DH_check(dh,&i))
{
ERR_print_errors(bio_err);
goto end;
}
if (i & DH_CHECK_P_NOT_PRIME)
printf("p value is not prime\n");
if (i & DH_CHECK_P_NOT_SAFE_PRIME)
printf("p value is not a safe prime\n");
if (i & DH_UNABLE_TO_CHECK_GENERATOR)
printf("unable to check the generator value\n");
if (i & DH_NOT_SUITABLE_GENERATOR)
printf("the g value is not a generator\n");
if (i == 0)
printf("DH parameters appear to be ok.\n");
}
if (C)
{
unsigned char *data;
int len,l,bits;
dh = DSA_dup_DH(dsa); len=BN_num_bytes(dh->p);
DSA_free(dsa); bits=BN_num_bits(dh->p);
if (dh == NULL) { data=(unsigned char *)OPENSSL_malloc(len);
ERR_print_errors(bio_err); if (data == NULL)
goto end; {
} perror("OPENSSL_malloc");
} else goto end;
# endif }
{ printf("#ifndef HEADER_DH_H\n"
if (informat == FORMAT_ASN1) "#include <openssl/dh.h>\n"
dh = d2i_DHparams_bio(in, NULL); "#endif\n");
else /* informat == FORMAT_PEM */ printf("DH *get_dh%d()\n\t{\n",bits);
dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL);
if (dh == NULL) { l=BN_bn2bin(dh->p,data);
BIO_printf(bio_err, "unable to load DH parameters\n"); printf("\tstatic unsigned char dh%d_p[]={",bits);
ERR_print_errors(bio_err); for (i=0; i<l; i++)
goto end; {
} if ((i%12) == 0) printf("\n\t\t");
} printf("0x%02X,",data[i]);
}
printf("\n\t\t};\n");
/* dh != NULL */ l=BN_bn2bin(dh->g,data);
} printf("\tstatic unsigned char dh%d_g[]={",bits);
for (i=0; i<l; i++)
{
if ((i%12) == 0) printf("\n\t\t");
printf("0x%02X,",data[i]);
}
printf("\n\t\t};\n");
out = BIO_new(BIO_s_file()); printf("\tDH *dh;\n\n");
if (out == NULL) { printf("\tif ((dh=DH_new()) == NULL) return(NULL);\n");
ERR_print_errors(bio_err); printf("\tdh->p=BN_bin2bn(dh%d_p,sizeof(dh%d_p),NULL);\n",
goto end; bits,bits);
} printf("\tdh->g=BN_bin2bn(dh%d_g,sizeof(dh%d_g),NULL);\n",
if (outfile == NULL) { bits,bits);
BIO_set_fp(out, stdout, BIO_NOCLOSE); printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
# ifdef OPENSSL_SYS_VMS printf("\t\t{ DH_free(dh); return(NULL); }\n");
{ if (dh->length)
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); printf("\tdh->length = %ld;\n", dh->length);
out = BIO_push(tmpbio, out); printf("\treturn(dh);\n\t}\n");
} OPENSSL_free(data);
# endif }
} else {
if (BIO_write_filename(out, outfile) <= 0) {
perror(outfile);
goto end;
}
}
if (text) {
DHparams_print(out, dh);
}
if (check) { if (!noout)
if (!DH_check(dh, &i)) { {
ERR_print_errors(bio_err); if (outformat == FORMAT_ASN1)
goto end; i=i2d_DHparams_bio(out,dh);
} else if (outformat == FORMAT_PEM)
if (i & DH_CHECK_P_NOT_PRIME) i=PEM_write_bio_DHparams(out,dh);
printf("p value is not prime\n"); else {
if (i & DH_CHECK_P_NOT_SAFE_PRIME) BIO_printf(bio_err,"bad output format specified for outfile\n");
printf("p value is not a safe prime\n"); goto end;
if (i & DH_UNABLE_TO_CHECK_GENERATOR) }
printf("unable to check the generator value\n"); if (!i)
if (i & DH_NOT_SUITABLE_GENERATOR) {
printf("the g value is not a generator\n"); BIO_printf(bio_err,"unable to write DH parameters\n");
if (i == 0) ERR_print_errors(bio_err);
printf("DH parameters appear to be ok.\n"); goto end;
} }
if (C) { }
unsigned char *data; ret=0;
int len, l, bits; end:
if (in != NULL) BIO_free(in);
len = BN_num_bytes(dh->p); if (out != NULL) BIO_free_all(out);
bits = BN_num_bits(dh->p); if (dh != NULL) DH_free(dh);
data = (unsigned char *)OPENSSL_malloc(len); apps_shutdown();
if (data == NULL) { OPENSSL_EXIT(ret);
perror("OPENSSL_malloc"); }
goto end;
}
printf("#ifndef HEADER_DH_H\n"
"#include <openssl/dh.h>\n" "#endif\n");
printf("DH *get_dh%d()\n\t{\n", bits);
l = BN_bn2bin(dh->p, data);
printf("\tstatic unsigned char dh%d_p[]={", bits);
for (i = 0; i < l; i++) {
if ((i % 12) == 0)
printf("\n\t\t");
printf("0x%02X,", data[i]);
}
printf("\n\t\t};\n");
l = BN_bn2bin(dh->g, data);
printf("\tstatic unsigned char dh%d_g[]={", bits);
for (i = 0; i < l; i++) {
if ((i % 12) == 0)
printf("\n\t\t");
printf("0x%02X,", data[i]);
}
printf("\n\t\t};\n");
printf("\tDH *dh;\n\n");
printf("\tif ((dh=DH_new()) == NULL) return(NULL);\n");
printf("\tdh->p=BN_bin2bn(dh%d_p,sizeof(dh%d_p),NULL);\n",
bits, bits);
printf("\tdh->g=BN_bin2bn(dh%d_g,sizeof(dh%d_g),NULL);\n",
bits, bits);
printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
printf("\t\t{ DH_free(dh); return(NULL); }\n");
if (dh->length)
printf("\tdh->length = %ld;\n", dh->length);
printf("\treturn(dh);\n\t}\n");
OPENSSL_free(data);
}
if (!noout) {
if (outformat == FORMAT_ASN1)
i = i2d_DHparams_bio(out, dh);
else if (outformat == FORMAT_PEM)
i = PEM_write_bio_DHparams(out, dh);
else {
BIO_printf(bio_err, "bad output format specified for outfile\n");
goto end;
}
if (!i) {
BIO_printf(bio_err, "unable to write DH parameters\n");
ERR_print_errors(bio_err);
goto end;
}
}
ret = 0;
end:
if (in != NULL)
BIO_free(in);
if (out != NULL)
BIO_free_all(out);
if (dh != NULL)
DH_free(dh);
apps_shutdown();
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 int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
{ {
char c = '*'; char c='*';
if (p == 0) if (p == 0) c='.';
c = '.'; if (p == 1) c='+';
if (p == 1) if (p == 2) c='*';
c = '+'; if (p == 3) c='\n';
if (p == 2) BIO_write(cb->arg,&c,1);
c = '*'; (void)BIO_flush(cb->arg);
if (p == 3) #ifdef LINT
c = '\n'; p=n;
BIO_write(cb->arg, &c, 1); #endif
(void)BIO_flush(cb->arg); return 1;
# ifdef LINT }
p = n;
# endif
return 1;
}
#else /* !OPENSSL_NO_DH */
# if PEDANTIC
static void *dummy = &dummy;
# endif
#endif #endif

View File

@ -5,21 +5,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -49,326 +49,287 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */ #include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */
#ifndef OPENSSL_NO_DSA #ifndef OPENSSL_NO_DSA
# include <stdio.h> #include <stdio.h>
# include <stdlib.h> #include <stdlib.h>
# include <string.h> #include <string.h>
# include <time.h> #include <time.h>
# include "apps.h" #include "apps.h"
# include <openssl/bio.h> #include <openssl/bio.h>
# include <openssl/err.h> #include <openssl/err.h>
# include <openssl/dsa.h> #include <openssl/dsa.h>
# 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> #include <openssl/bn.h>
# undef PROG #undef PROG
# define PROG dsa_main #define PROG dsa_main
/*- /* -inform arg - input format - default PEM (one of DER, NET or PEM)
* -inform arg - input format - default PEM (one of DER, NET or PEM)
* -outform arg - output format - default PEM * -outform arg - output format - default PEM
* -in arg - input file - default stdin * -in arg - input file - default stdin
* -out arg - output file - default stdout * -out arg - output file - default stdout
* -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 * -aes128 - encrypt output if PEM format
* -aes192 - encrypt output if PEM format * -aes192 - encrypt output if PEM format
* -aes256 - encrypt output if PEM format * -aes256 - encrypt output if PEM format
* -camellia128 - encrypt output if PEM format * -camellia128 - encrypt output if PEM format
* -camellia192 - encrypt output if PEM format * -camellia192 - encrypt output if PEM format
* -camellia256 - encrypt output if PEM format * -camellia256 - encrypt output if PEM format
* -seed - 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
*/ */
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
ENGINE *e = NULL; #ifndef OPENSSL_NO_ENGINE
int ret = 1; ENGINE *e = NULL;
DSA *dsa = NULL; #endif
int i, badops = 0; int ret=1;
const EVP_CIPHER *enc = NULL; DSA *dsa=NULL;
BIO *in = NULL, *out = NULL; int i,badops=0;
int informat, outformat, text = 0, noout = 0; const EVP_CIPHER *enc=NULL;
int pubin = 0, pubout = 0; BIO *in=NULL,*out=NULL;
char *infile, *outfile, *prog; int informat,outformat,text=0,noout=0;
# ifndef OPENSSL_NO_ENGINE int pubin = 0, pubout = 0;
char *engine; char *infile,*outfile,*prog;
# endif #ifndef OPENSSL_NO_ENGINE
char *passargin = NULL, *passargout = NULL; char *engine;
char *passin = NULL, *passout = NULL; #endif
int modulus = 0; char *passargin = NULL, *passargout = NULL;
char *passin = NULL, *passout = NULL;
int pvk_encr = 2; int modulus=0;
apps_startup(); apps_startup();
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)) if (!load_config(bio_err, NULL))
goto end; goto end;
# ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
engine = NULL; engine=NULL;
# endif #endif
infile = NULL; infile=NULL;
outfile = NULL; outfile=NULL;
informat = FORMAT_PEM; informat=FORMAT_PEM;
outformat = FORMAT_PEM; outformat=FORMAT_PEM;
prog = argv[0]; prog=argv[0];
argc--; argc--;
argv++; argv++;
while (argc >= 1) { while (argc >= 1)
if (strcmp(*argv, "-inform") == 0) { {
if (--argc < 1) if (strcmp(*argv,"-inform") == 0)
goto bad; {
informat = str2fmt(*(++argv)); if (--argc < 1) goto bad;
} else if (strcmp(*argv, "-outform") == 0) { informat=str2fmt(*(++argv));
if (--argc < 1) }
goto bad; else if (strcmp(*argv,"-outform") == 0)
outformat = str2fmt(*(++argv)); {
} else if (strcmp(*argv, "-in") == 0) { if (--argc < 1) goto bad;
if (--argc < 1) outformat=str2fmt(*(++argv));
goto bad; }
infile = *(++argv); else if (strcmp(*argv,"-in") == 0)
} else if (strcmp(*argv, "-out") == 0) { {
if (--argc < 1) if (--argc < 1) goto bad;
goto bad; infile= *(++argv);
outfile = *(++argv); }
} else if (strcmp(*argv, "-passin") == 0) { else if (strcmp(*argv,"-out") == 0)
if (--argc < 1) {
goto bad; if (--argc < 1) goto bad;
passargin = *(++argv); outfile= *(++argv);
} else if (strcmp(*argv, "-passout") == 0) { }
if (--argc < 1) else if (strcmp(*argv,"-passin") == 0)
goto bad; {
passargout = *(++argv); if (--argc < 1) goto bad;
} passargin= *(++argv);
# ifndef OPENSSL_NO_ENGINE }
else if (strcmp(*argv, "-engine") == 0) { else if (strcmp(*argv,"-passout") == 0)
if (--argc < 1) {
goto bad; if (--argc < 1) goto bad;
engine = *(++argv); passargout= *(++argv);
} }
# endif #ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv, "-pvk-strong") == 0) else if (strcmp(*argv,"-engine") == 0)
pvk_encr = 2; {
else if (strcmp(*argv, "-pvk-weak") == 0) if (--argc < 1) goto bad;
pvk_encr = 1; engine= *(++argv);
else if (strcmp(*argv, "-pvk-none") == 0) }
pvk_encr = 0; #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)
text = 1; text=1;
else if (strcmp(*argv, "-modulus") == 0) else if (strcmp(*argv,"-modulus") == 0)
modulus = 1; modulus=1;
else if (strcmp(*argv, "-pubin") == 0) else if (strcmp(*argv,"-pubin") == 0)
pubin = 1; pubin=1;
else if (strcmp(*argv, "-pubout") == 0) else if (strcmp(*argv,"-pubout") == 0)
pubout = 1; pubout=1;
else if ((enc = EVP_get_cipherbyname(&(argv[0][1]))) == NULL) { else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
BIO_printf(bio_err, "unknown option %s\n", *argv); {
badops = 1; BIO_printf(bio_err,"unknown option %s\n",*argv);
break; badops=1;
} break;
argc--; }
argv++; argc--;
} argv++;
}
if (badops) {
bad: if (badops)
BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog); {
BIO_printf(bio_err, "where options are\n"); bad:
BIO_printf(bio_err, " -inform arg input format - DER or PEM\n"); BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
BIO_printf(bio_err, " -outform arg output format - DER or PEM\n"); BIO_printf(bio_err,"where options are\n");
BIO_printf(bio_err, " -in arg input file\n"); BIO_printf(bio_err," -inform arg input format - DER or PEM\n");
BIO_printf(bio_err, BIO_printf(bio_err," -outform arg output format - DER or PEM\n");
" -passin arg input file pass phrase source\n"); BIO_printf(bio_err," -in arg input file\n");
BIO_printf(bio_err, " -out arg output file\n"); BIO_printf(bio_err," -passin arg input file pass phrase source\n");
BIO_printf(bio_err, BIO_printf(bio_err," -out arg output file\n");
" -passout arg output file pass phrase source\n"); BIO_printf(bio_err," -passout arg output file pass phrase source\n");
# ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err, BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
" -engine e use engine e, possibly a hardware device.\n"); #endif
# endif BIO_printf(bio_err," -des encrypt PEM output with cbc des\n");
BIO_printf(bio_err, BIO_printf(bio_err," -des3 encrypt PEM output with ede cbc des using 168 bit key\n");
" -des encrypt PEM output with cbc des\n"); #ifndef OPENSSL_NO_IDEA
BIO_printf(bio_err, BIO_printf(bio_err," -idea encrypt PEM output with cbc idea\n");
" -des3 encrypt PEM output with ede cbc des using 168 bit key\n"); #endif
# ifndef OPENSSL_NO_IDEA #ifndef OPENSSL_NO_AES
BIO_printf(bio_err, BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
" -idea encrypt PEM output with cbc idea\n"); BIO_printf(bio_err," encrypt PEM output with cbc aes\n");
# endif #endif
# ifndef OPENSSL_NO_AES #ifndef OPENSSL_NO_CAMELLIA
BIO_printf(bio_err, " -aes128, -aes192, -aes256\n"); BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
BIO_printf(bio_err, BIO_printf(bio_err," encrypt PEM output with cbc camellia\n");
" encrypt PEM output with cbc aes\n"); #endif
# endif #ifndef OPENSSL_NO_SEED
# ifndef OPENSSL_NO_CAMELLIA BIO_printf(bio_err," -seed encrypt PEM output with cbc seed\n");
BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n"); #endif
BIO_printf(bio_err, BIO_printf(bio_err," -text print the key in text\n");
" encrypt PEM output with cbc camellia\n"); BIO_printf(bio_err," -noout don't print key out\n");
# endif BIO_printf(bio_err," -modulus print the DSA public value\n");
# ifndef OPENSSL_NO_SEED goto end;
BIO_printf(bio_err, }
" -seed encrypt PEM output with cbc seed\n");
# endif ERR_load_crypto_strings();
BIO_printf(bio_err, " -text print the key in text\n");
BIO_printf(bio_err, " -noout don't print key out\n"); #ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err, " -modulus print the DSA public value\n"); e = setup_engine(bio_err, engine, 0);
goto end; #endif
}
if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
ERR_load_crypto_strings(); BIO_printf(bio_err, "Error getting passwords\n");
goto end;
# ifndef OPENSSL_NO_ENGINE }
e = setup_engine(bio_err, engine, 0);
# endif out=BIO_new(BIO_s_file());
if (out == NULL)
if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { {
BIO_printf(bio_err, "Error getting passwords\n"); ERR_print_errors(bio_err);
goto end; goto end;
} }
in = BIO_new(BIO_s_file()); BIO_printf(bio_err,"read DSA key\n");
out = BIO_new(BIO_s_file()); {
if ((in == NULL) || (out == NULL)) { EVP_PKEY *pkey;
ERR_print_errors(bio_err); if (pubin)
goto end; pkey = load_pubkey(bio_err, infile, informat, 1,
} passin, e, "Public Key");
else
if (infile == NULL) pkey = load_key(bio_err, infile, informat, 1,
BIO_set_fp(in, stdin, BIO_NOCLOSE); passin, e, "Private Key");
else {
if (BIO_read_filename(in, infile) <= 0) { if (pkey != NULL)
perror(infile); dsa = pkey == NULL ? NULL : EVP_PKEY_get1_DSA(pkey);
goto end; EVP_PKEY_free(pkey);
} }
} if (dsa == NULL)
{
BIO_printf(bio_err, "read DSA key\n"); BIO_printf(bio_err,"unable to load Key\n");
ERR_print_errors(bio_err);
{ goto end;
EVP_PKEY *pkey; }
if (pubin) if (outfile == NULL)
pkey = load_pubkey(bio_err, infile, informat, 1, {
passin, e, "Public Key"); BIO_set_fp(out,stdout,BIO_NOCLOSE);
else #ifdef OPENSSL_SYS_VMS
pkey = load_key(bio_err, infile, informat, 1, {
passin, e, "Private Key"); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out);
if (pkey) { }
dsa = EVP_PKEY_get1_DSA(pkey); #endif
EVP_PKEY_free(pkey); }
} else
} {
if (dsa == NULL) { if (BIO_write_filename(out,outfile) <= 0)
BIO_printf(bio_err, "unable to load Key\n"); {
ERR_print_errors(bio_err); perror(outfile);
goto end; goto end;
} }
}
if (outfile == NULL) {
BIO_set_fp(out, stdout, BIO_NOCLOSE); if (text)
# ifdef OPENSSL_SYS_VMS if (!DSA_print(out,dsa,0))
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); perror(outfile);
out = BIO_push(tmpbio, out); ERR_print_errors(bio_err);
} goto end;
# endif }
} else {
if (BIO_write_filename(out, outfile) <= 0) { if (modulus)
perror(outfile); {
goto end; fprintf(stdout,"Public Key=");
} BN_print(out,dsa->pub_key);
} fprintf(stdout,"\n");
}
if (text)
if (!DSA_print(out, dsa, 0)) { if (noout) goto end;
perror(outfile); BIO_printf(bio_err,"writing DSA key\n");
ERR_print_errors(bio_err); if (outformat == FORMAT_ASN1) {
goto end; if(pubin || pubout) i=i2d_DSA_PUBKEY_bio(out,dsa);
} else i=i2d_DSAPrivateKey_bio(out,dsa);
} else if (outformat == FORMAT_PEM) {
if (modulus) { if(pubin || pubout)
fprintf(stdout, "Public Key="); i=PEM_write_bio_DSA_PUBKEY(out,dsa);
BN_print(out, dsa->pub_key); else i=PEM_write_bio_DSAPrivateKey(out,dsa,enc,
fprintf(stdout, "\n"); NULL,0,NULL, passout);
} } else {
BIO_printf(bio_err,"bad output format specified for outfile\n");
if (noout) goto end;
goto end; }
BIO_printf(bio_err, "writing DSA key\n"); if (!i)
if (outformat == FORMAT_ASN1) { {
if (pubin || pubout) BIO_printf(bio_err,"unable to write private key\n");
i = i2d_DSA_PUBKEY_bio(out, dsa); ERR_print_errors(bio_err);
else }
i = i2d_DSAPrivateKey_bio(out, dsa); else
} else if (outformat == FORMAT_PEM) { ret=0;
if (pubin || pubout) end:
i = PEM_write_bio_DSA_PUBKEY(out, dsa); if(in != NULL) BIO_free(in);
else if(out != NULL) BIO_free_all(out);
i = PEM_write_bio_DSAPrivateKey(out, dsa, enc, if(dsa != NULL) DSA_free(dsa);
NULL, 0, NULL, passout); if(passin) OPENSSL_free(passin);
# if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_RC4) if(passout) OPENSSL_free(passout);
} else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) { apps_shutdown();
EVP_PKEY *pk; OPENSSL_EXIT(ret);
pk = EVP_PKEY_new(); }
EVP_PKEY_set1_DSA(pk, dsa);
if (outformat == FORMAT_PVK)
i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
else if (pubin || pubout)
i = i2b_PublicKey_bio(out, pk);
else
i = i2b_PrivateKey_bio(out, pk);
EVP_PKEY_free(pk);
# endif
} else {
BIO_printf(bio_err, "bad output format specified for outfile\n");
goto end;
}
if (i <= 0) {
BIO_printf(bio_err, "unable to write private key\n");
ERR_print_errors(bio_err);
} else
ret = 0;
end:
if (in != NULL)
BIO_free(in);
if (out != NULL)
BIO_free_all(out);
if (dsa != NULL)
DSA_free(dsa);
if (passin)
OPENSSL_free(passin);
if (passout)
OPENSSL_free(passout);
apps_shutdown();
OPENSSL_EXIT(ret);
}
#else /* !OPENSSL_NO_DSA */
# if PEDANTIC
static void *dummy = &dummy;
# endif
#endif #endif

View File

@ -5,21 +5,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -49,44 +49,41 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */ #include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */
/* /* Until the key-gen callbacks are modified to use newer prototypes, we allow
* Until the key-gen callbacks are modified to use newer prototypes, we allow * deprecated functions for openssl-internal code */
* deprecated functions for openssl-internal code
*/
#ifdef OPENSSL_NO_DEPRECATED #ifdef OPENSSL_NO_DEPRECATED
# undef OPENSSL_NO_DEPRECATED #undef OPENSSL_NO_DEPRECATED
#endif #endif
#ifndef OPENSSL_NO_DSA #ifndef OPENSSL_NO_DSA
# include <assert.h> #include <assert.h>
# include <stdio.h> #include <stdio.h>
# include <stdlib.h> #include <stdlib.h>
# include <time.h> #include <time.h>
# include <string.h> #include <string.h>
# include "apps.h" #include "apps.h"
# include <openssl/bio.h> #include <openssl/bio.h>
# include <openssl/err.h> #include <openssl/err.h>
# include <openssl/bn.h> #include <openssl/bn.h>
# include <openssl/dsa.h> #include <openssl/dsa.h>
# include <openssl/x509.h> #include <openssl/x509.h>
# include <openssl/pem.h> #include <openssl/pem.h>
# undef PROG #undef PROG
# define PROG dsaparam_main #define PROG dsaparam_main
/*- /* -inform arg - input format - default PEM (DER or PEM)
* -inform arg - input format - default PEM (DER or PEM)
* -outform arg - output format - default PEM * -outform arg - output format - default PEM
* -in arg - input file - default stdin * -in arg - input file - default stdin
* -out arg - output file - default stdout * -out arg - output file - default stdout
* -noout * -noout
* -text * -text
* -C * -C
@ -97,373 +94,385 @@
* #endif * #endif
*/ */
# ifdef GENCB_TEST #ifdef GENCB_TEST
static int stop_keygen_flag = 0; static int stop_keygen_flag = 0;
static void timebomb_sigalarm(int foo) static void timebomb_sigalarm(int foo)
{ {
stop_keygen_flag = 1; stop_keygen_flag = 1;
} }
# endif #endif
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb); 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)
{ {
DSA *dsa = NULL; #ifndef OPENSSL_NO_ENGINE
int i, badops = 0, text = 0; ENGINE *e = NULL;
BIO *in = NULL, *out = NULL; #endif
int informat, outformat, noout = 0, C = 0, ret = 1; DSA *dsa=NULL;
char *infile, *outfile, *prog, *inrand = NULL; int i,badops=0,text=0;
int numbits = -1, num, genkey = 0; BIO *in=NULL,*out=NULL;
int need_rand = 0; int informat,outformat,noout=0,C=0,ret=1;
# ifndef OPENSSL_NO_ENGINE char *infile,*outfile,*prog,*inrand=NULL;
char *engine = NULL; int numbits= -1,num,genkey=0;
# endif int need_rand=0;
# ifdef GENCB_TEST #ifndef OPENSSL_NO_ENGINE
int timebomb = 0; char *engine=NULL;
# endif #endif
#ifdef GENCB_TEST
int timebomb=0;
#endif
apps_startup(); apps_startup();
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)) if (!load_config(bio_err, NULL))
goto end; goto end;
infile = NULL; infile=NULL;
outfile = NULL; outfile=NULL;
informat = FORMAT_PEM; informat=FORMAT_PEM;
outformat = FORMAT_PEM; outformat=FORMAT_PEM;
prog = argv[0]; prog=argv[0];
argc--; argc--;
argv++; argv++;
while (argc >= 1) { while (argc >= 1)
if (strcmp(*argv, "-inform") == 0) { {
if (--argc < 1) if (strcmp(*argv,"-inform") == 0)
goto bad; {
informat = str2fmt(*(++argv)); if (--argc < 1) goto bad;
} else if (strcmp(*argv, "-outform") == 0) { informat=str2fmt(*(++argv));
if (--argc < 1) }
goto bad; else if (strcmp(*argv,"-outform") == 0)
outformat = str2fmt(*(++argv)); {
} else if (strcmp(*argv, "-in") == 0) { if (--argc < 1) goto bad;
if (--argc < 1) outformat=str2fmt(*(++argv));
goto bad; }
infile = *(++argv); else if (strcmp(*argv,"-in") == 0)
} else if (strcmp(*argv, "-out") == 0) { {
if (--argc < 1) if (--argc < 1) goto bad;
goto bad; infile= *(++argv);
outfile = *(++argv); }
} else if (strcmp(*argv,"-out") == 0)
# ifndef OPENSSL_NO_ENGINE {
else if (strcmp(*argv, "-engine") == 0) { if (--argc < 1) goto bad;
if (--argc < 1) outfile= *(++argv);
goto bad; }
engine = *(++argv); #ifndef OPENSSL_NO_ENGINE
} else if(strcmp(*argv, "-engine") == 0)
# endif {
# ifdef GENCB_TEST if (--argc < 1) goto bad;
else if (strcmp(*argv, "-timebomb") == 0) { engine = *(++argv);
if (--argc < 1) }
goto bad; #endif
timebomb = atoi(*(++argv)); #ifdef GENCB_TEST
} else if(strcmp(*argv, "-timebomb") == 0)
# endif {
else if (strcmp(*argv, "-text") == 0) if (--argc < 1) goto bad;
text = 1; timebomb = atoi(*(++argv));
else if (strcmp(*argv, "-C") == 0) }
C = 1; #endif
else if (strcmp(*argv, "-genkey") == 0) { else if (strcmp(*argv,"-text") == 0)
genkey = 1; text=1;
need_rand = 1; else if (strcmp(*argv,"-C") == 0)
} else if (strcmp(*argv, "-rand") == 0) { C=1;
if (--argc < 1) else if (strcmp(*argv,"-genkey") == 0)
goto bad; {
inrand = *(++argv); genkey=1;
need_rand = 1; need_rand=1;
} else if (strcmp(*argv, "-noout") == 0) }
noout = 1; else if (strcmp(*argv,"-rand") == 0)
else if (sscanf(*argv, "%d", &num) == 1) { {
/* generate a key */ if (--argc < 1) goto bad;
numbits = num; inrand= *(++argv);
need_rand = 1; need_rand=1;
} else { }
BIO_printf(bio_err, "unknown option %s\n", *argv); else if (strcmp(*argv,"-noout") == 0)
badops = 1; noout=1;
break; else if (sscanf(*argv,"%d",&num) == 1)
} {
argc--; /* generate a key */
argv++; numbits=num;
} need_rand=1;
}
else
{
BIO_printf(bio_err,"unknown option %s\n",*argv);
badops=1;
break;
}
argc--;
argv++;
}
if (badops) { if (badops)
bad: {
BIO_printf(bio_err, "%s [options] [bits] <infile >outfile\n", prog); bad:
BIO_printf(bio_err, "where options are\n"); BIO_printf(bio_err,"%s [options] [bits] <infile >outfile\n",prog);
BIO_printf(bio_err, " -inform arg input format - DER or PEM\n"); BIO_printf(bio_err,"where options are\n");
BIO_printf(bio_err, " -outform arg output format - DER or PEM\n"); BIO_printf(bio_err," -inform arg input format - DER or PEM\n");
BIO_printf(bio_err, " -in arg input file\n"); BIO_printf(bio_err," -outform arg output format - DER or PEM\n");
BIO_printf(bio_err, " -out arg output file\n"); BIO_printf(bio_err," -in arg input file\n");
BIO_printf(bio_err, " -text print as text\n"); BIO_printf(bio_err," -out arg output file\n");
BIO_printf(bio_err, " -C Output C code\n"); BIO_printf(bio_err," -text print as text\n");
BIO_printf(bio_err, " -noout no output\n"); BIO_printf(bio_err," -C Output C code\n");
BIO_printf(bio_err, " -genkey generate a DSA key\n"); BIO_printf(bio_err," -noout no output\n");
BIO_printf(bio_err, BIO_printf(bio_err," -genkey generate a DSA key\n");
" -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 #ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err, BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
" -engine e use engine e, possibly a hardware device.\n"); #endif
# endif #ifdef GENCB_TEST
# ifdef GENCB_TEST BIO_printf(bio_err," -timebomb n interrupt keygen after <n> seconds\n");
BIO_printf(bio_err, #endif
" -timebomb n interrupt keygen after <n> seconds\n"); BIO_printf(bio_err," number number of bits to use for generating private key\n");
# endif goto end;
BIO_printf(bio_err, }
" number number of bits to use for generating private key\n");
goto end;
}
ERR_load_crypto_strings(); ERR_load_crypto_strings();
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))
ERR_print_errors(bio_err); {
goto end; ERR_print_errors(bio_err);
} goto end;
}
if (infile == NULL) if (infile == NULL)
BIO_set_fp(in, stdin, BIO_NOCLOSE); BIO_set_fp(in,stdin,BIO_NOCLOSE);
else { else
if (BIO_read_filename(in, infile) <= 0) { {
perror(infile); if (BIO_read_filename(in,infile) <= 0)
goto end; {
} perror(infile);
} goto end;
if (outfile == NULL) { }
BIO_set_fp(out, stdout, BIO_NOCLOSE); }
# ifdef OPENSSL_SYS_VMS if (outfile == NULL)
{ {
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO_set_fp(out,stdout,BIO_NOCLOSE);
out = BIO_push(tmpbio, out); #ifdef OPENSSL_SYS_VMS
} {
# endif BIO *tmpbio = BIO_new(BIO_f_linebuffer());
} else { out = BIO_push(tmpbio, out);
if (BIO_write_filename(out, outfile) <= 0) { }
perror(outfile); #endif
goto end; }
} else
} {
if (BIO_write_filename(out,outfile) <= 0)
{
perror(outfile);
goto end;
}
}
# ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
setup_engine(bio_err, engine, 0); e = setup_engine(bio_err, engine, 0);
# endif #endif
if (need_rand) { if (need_rand)
app_RAND_load_file(NULL, bio_err, (inrand != NULL)); {
if (inrand != NULL) app_RAND_load_file(NULL, bio_err, (inrand != NULL));
BIO_printf(bio_err, "%ld semi-random bytes loaded\n", if (inrand != NULL)
app_RAND_load_files(inrand)); BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
} app_RAND_load_files(inrand));
}
if (numbits > 0) { if (numbits > 0)
BN_GENCB cb; {
BN_GENCB_set(&cb, dsa_cb, bio_err); BN_GENCB cb;
assert(need_rand); BN_GENCB_set(&cb, dsa_cb, bio_err);
dsa = DSA_new(); assert(need_rand);
if (!dsa) { dsa = DSA_new();
BIO_printf(bio_err, "Error allocating DSA object\n"); if(!dsa)
goto end; {
} BIO_printf(bio_err,"Error allocating DSA object\n");
BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\n", goto end;
num); }
BIO_printf(bio_err, "This could take some time\n"); BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
# ifdef GENCB_TEST BIO_printf(bio_err,"This could take some time\n");
if (timebomb > 0) { #ifdef GENCB_TEST
struct sigaction act; if(timebomb > 0)
act.sa_handler = timebomb_sigalarm; {
act.sa_flags = 0; struct sigaction act;
BIO_printf(bio_err, act.sa_handler = timebomb_sigalarm;
"(though I'll stop it if not done within %d secs)\n", act.sa_flags = 0;
timebomb); BIO_printf(bio_err,"(though I'll stop it if not done within %d secs)\n",
if (sigaction(SIGALRM, &act, NULL) != 0) { timebomb);
BIO_printf(bio_err, "Error, couldn't set SIGALRM handler\n"); if(sigaction(SIGALRM, &act, NULL) != 0)
goto end; {
} BIO_printf(bio_err,"Error, couldn't set SIGALRM handler\n");
alarm(timebomb); goto end;
} }
# endif alarm(timebomb);
if (!DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL, &cb)) { }
# ifdef GENCB_TEST #endif
if (stop_keygen_flag) { if(!DSA_generate_parameters_ex(dsa,num,NULL,0,NULL,NULL, &cb))
BIO_printf(bio_err, "DSA key generation time-stopped\n"); {
/* This is an asked-for behaviour! */ #ifdef GENCB_TEST
ret = 0; if(stop_keygen_flag)
goto end; {
} BIO_printf(bio_err,"DSA key generation time-stopped\n");
# endif /* This is an asked-for behaviour! */
ERR_print_errors(bio_err); ret = 0;
BIO_printf(bio_err, "Error, DSA key generation failed\n"); goto end;
goto end; }
} #endif
} else if (informat == FORMAT_ASN1) BIO_printf(bio_err,"Error, DSA key generation failed\n");
dsa = d2i_DSAparams_bio(in, NULL); goto end;
else if (informat == FORMAT_PEM) }
dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL); }
else { else if (informat == FORMAT_ASN1)
BIO_printf(bio_err, "bad input format specified\n"); dsa=d2i_DSAparams_bio(in,NULL);
goto end; else if (informat == FORMAT_PEM)
} dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL);
if (dsa == NULL) { else
BIO_printf(bio_err, "unable to load DSA parameters\n"); {
ERR_print_errors(bio_err); BIO_printf(bio_err,"bad input format specified\n");
goto end; goto end;
} }
if (dsa == NULL)
{
BIO_printf(bio_err,"unable to load DSA parameters\n");
ERR_print_errors(bio_err);
goto end;
}
if (text) { if (text)
DSAparams_print(out, dsa); {
} DSAparams_print(out,dsa);
}
if (C)
{
unsigned char *data;
int l,len,bits_p,bits_q,bits_g;
if (C) { len=BN_num_bytes(dsa->p);
unsigned char *data; bits_p=BN_num_bits(dsa->p);
int l, len, bits_p; bits_q=BN_num_bits(dsa->q);
bits_g=BN_num_bits(dsa->g);
data=(unsigned char *)OPENSSL_malloc(len+20);
if (data == NULL)
{
perror("OPENSSL_malloc");
goto end;
}
l=BN_bn2bin(dsa->p,data);
printf("static unsigned char dsa%d_p[]={",bits_p);
for (i=0; i<l; i++)
{
if ((i%12) == 0) printf("\n\t");
printf("0x%02X,",data[i]);
}
printf("\n\t};\n");
len = BN_num_bytes(dsa->p); l=BN_bn2bin(dsa->q,data);
bits_p = BN_num_bits(dsa->p); printf("static unsigned char dsa%d_q[]={",bits_p);
data = (unsigned char *)OPENSSL_malloc(len + 20); for (i=0; i<l; i++)
if (data == NULL) { {
perror("OPENSSL_malloc"); if ((i%12) == 0) printf("\n\t");
goto end; printf("0x%02X,",data[i]);
} }
l = BN_bn2bin(dsa->p, data); printf("\n\t};\n");
printf("static unsigned char dsa%d_p[]={", bits_p);
for (i = 0; i < l; i++) {
if ((i % 12) == 0)
printf("\n\t");
printf("0x%02X,", data[i]);
}
printf("\n\t};\n");
l = BN_bn2bin(dsa->q, data); l=BN_bn2bin(dsa->g,data);
printf("static unsigned char dsa%d_q[]={", bits_p); printf("static unsigned char dsa%d_g[]={",bits_p);
for (i = 0; i < l; i++) { for (i=0; i<l; i++)
if ((i % 12) == 0) {
printf("\n\t"); if ((i%12) == 0) printf("\n\t");
printf("0x%02X,", data[i]); printf("0x%02X,",data[i]);
} }
printf("\n\t};\n"); printf("\n\t};\n\n");
l = BN_bn2bin(dsa->g, data); printf("DSA *get_dsa%d()\n\t{\n",bits_p);
printf("static unsigned char dsa%d_g[]={", bits_p); printf("\tDSA *dsa;\n\n");
for (i = 0; i < l; i++) { printf("\tif ((dsa=DSA_new()) == NULL) return(NULL);\n");
if ((i % 12) == 0) printf("\tdsa->p=BN_bin2bn(dsa%d_p,sizeof(dsa%d_p),NULL);\n",
printf("\n\t"); bits_p,bits_p);
printf("0x%02X,", data[i]); printf("\tdsa->q=BN_bin2bn(dsa%d_q,sizeof(dsa%d_q),NULL);\n",
} bits_p,bits_p);
printf("\n\t};\n\n"); printf("\tdsa->g=BN_bin2bn(dsa%d_g,sizeof(dsa%d_g),NULL);\n",
bits_p,bits_p);
printf("\tif ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))\n");
printf("\t\t{ DSA_free(dsa); return(NULL); }\n");
printf("\treturn(dsa);\n\t}\n");
}
printf("DSA *get_dsa%d()\n\t{\n", bits_p);
printf("\tDSA *dsa;\n\n");
printf("\tif ((dsa=DSA_new()) == NULL) return(NULL);\n");
printf("\tdsa->p=BN_bin2bn(dsa%d_p,sizeof(dsa%d_p),NULL);\n",
bits_p, bits_p);
printf("\tdsa->q=BN_bin2bn(dsa%d_q,sizeof(dsa%d_q),NULL);\n",
bits_p, bits_p);
printf("\tdsa->g=BN_bin2bn(dsa%d_g,sizeof(dsa%d_g),NULL);\n",
bits_p, bits_p);
printf
("\tif ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))\n");
printf("\t\t{ DSA_free(dsa); return(NULL); }\n");
printf("\treturn(dsa);\n\t}\n");
}
if (!noout) { if (!noout)
if (outformat == FORMAT_ASN1) {
i = i2d_DSAparams_bio(out, dsa); if (outformat == FORMAT_ASN1)
else if (outformat == FORMAT_PEM) i=i2d_DSAparams_bio(out,dsa);
i = PEM_write_bio_DSAparams(out, dsa); else if (outformat == FORMAT_PEM)
else { i=PEM_write_bio_DSAparams(out,dsa);
BIO_printf(bio_err, "bad output format specified for outfile\n"); else {
goto end; BIO_printf(bio_err,"bad output format specified for outfile\n");
} goto end;
if (!i) { }
BIO_printf(bio_err, "unable to write DSA parameters\n"); if (!i)
ERR_print_errors(bio_err); {
goto end; BIO_printf(bio_err,"unable to write DSA parameters\n");
} ERR_print_errors(bio_err);
} goto end;
if (genkey) { }
DSA *dsakey; }
if (genkey)
{
DSA *dsakey;
assert(need_rand); assert(need_rand);
if ((dsakey = DSAparams_dup(dsa)) == NULL) if ((dsakey=DSAparams_dup(dsa)) == NULL) goto end;
goto end; if (!DSA_generate_key(dsakey)) goto end;
if (!DSA_generate_key(dsakey)) { if (outformat == FORMAT_ASN1)
ERR_print_errors(bio_err); i=i2d_DSAPrivateKey_bio(out,dsakey);
DSA_free(dsakey); else if (outformat == FORMAT_PEM)
goto end; i=PEM_write_bio_DSAPrivateKey(out,dsakey,NULL,NULL,0,NULL,NULL);
} else {
if (outformat == FORMAT_ASN1) BIO_printf(bio_err,"bad output format specified for outfile\n");
i = i2d_DSAPrivateKey_bio(out, dsakey); goto end;
else if (outformat == FORMAT_PEM) }
i = PEM_write_bio_DSAPrivateKey(out, dsakey, NULL, NULL, 0, NULL, DSA_free(dsakey);
NULL); }
else { if (need_rand)
BIO_printf(bio_err, "bad output format specified for outfile\n"); app_RAND_write_file(NULL, bio_err);
DSA_free(dsakey); ret=0;
goto end; end:
} if (in != NULL) BIO_free(in);
DSA_free(dsakey); if (out != NULL) BIO_free_all(out);
} if (dsa != NULL) DSA_free(dsa);
if (need_rand) apps_shutdown();
app_RAND_write_file(NULL, bio_err); OPENSSL_EXIT(ret);
ret = 0; }
end:
if (in != NULL)
BIO_free(in);
if (out != NULL)
BIO_free_all(out);
if (dsa != NULL)
DSA_free(dsa);
apps_shutdown();
OPENSSL_EXIT(ret);
}
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb) static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb)
{ {
char c = '*'; char c='*';
if (p == 0)
c = '.';
if (p == 1)
c = '+';
if (p == 2)
c = '*';
if (p == 3)
c = '\n';
BIO_write(cb->arg, &c, 1);
(void)BIO_flush(cb->arg);
# ifdef LINT
p = n;
# endif
# ifdef GENCB_TEST
if (stop_keygen_flag)
return 0;
# endif
return 1;
}
#else /* !OPENSSL_NO_DSA */
# if PEDANTIC
static void *dummy = &dummy;
# endif
if (p == 0) c='.';
if (p == 1) c='+';
if (p == 2) c='*';
if (p == 3) c='\n';
BIO_write(cb->arg,&c,1);
(void)BIO_flush(cb->arg);
#ifdef LINT
p=n;
#endif
#ifdef GENCB_TEST
if(stop_keygen_flag)
return 0;
#endif
return 1;
}
#endif #endif

616
apps/ec.c
View File

@ -10,7 +10,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@ -58,20 +58,19 @@
#include <openssl/opensslconf.h> #include <openssl/opensslconf.h>
#ifndef OPENSSL_NO_EC #ifndef OPENSSL_NO_EC
# include <stdio.h> #include <stdio.h>
# include <stdlib.h> #include <stdlib.h>
# include <string.h> #include <string.h>
# include "apps.h" #include "apps.h"
# include <openssl/bio.h> #include <openssl/bio.h>
# include <openssl/err.h> #include <openssl/err.h>
# include <openssl/evp.h> #include <openssl/evp.h>
# include <openssl/pem.h> #include <openssl/pem.h>
# undef PROG #undef PROG
# define PROG ec_main #define PROG ec_main
/*- /* -inform arg - input format - default PEM (one of DER, NET or PEM)
* -inform arg - input format - default PEM (one of DER, NET or PEM)
* -outform arg - output format - default PEM * -outform arg - output format - default PEM
* -in arg - input file - default stdin * -in arg - input file - default stdin
* -out arg - output file - default stdout * -out arg - output file - default stdout
@ -86,280 +85,319 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
int ret = 1; #ifndef OPENSSL_NO_ENGINE
EC_KEY *eckey = NULL; ENGINE *e = NULL;
const EC_GROUP *group; #endif
int i, badops = 0; int ret = 1;
const EVP_CIPHER *enc = NULL; EC_KEY *eckey = NULL;
BIO *in = NULL, *out = NULL; const EC_GROUP *group;
int informat, outformat, text = 0, noout = 0; int i, badops = 0;
int pubin = 0, pubout = 0, param_out = 0; const EVP_CIPHER *enc = NULL;
char *infile, *outfile, *prog, *engine; BIO *in = NULL, *out = NULL;
char *passargin = NULL, *passargout = NULL; int informat, outformat, text=0, noout=0;
char *passin = NULL, *passout = NULL; int pubin = 0, pubout = 0, param_out = 0;
point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED; char *infile, *outfile, *prog, *engine;
int new_form = 0; char *passargin = NULL, *passargout = NULL;
int asn1_flag = OPENSSL_EC_NAMED_CURVE; char *passin = NULL, *passout = NULL;
int new_asn1_flag = 0; point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
int new_form = 0;
apps_startup(); int asn1_flag = OPENSSL_EC_NAMED_CURVE;
int new_asn1_flag = 0;
if (bio_err == NULL)
if ((bio_err = BIO_new(BIO_s_file())) != NULL) apps_startup();
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
if (bio_err == NULL)
if (!load_config(bio_err, NULL)) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
goto end; BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
engine = NULL; if (!load_config(bio_err, NULL))
infile = NULL; goto end;
outfile = NULL;
informat = FORMAT_PEM; engine = NULL;
outformat = FORMAT_PEM; infile = NULL;
outfile = NULL;
prog = argv[0]; informat = FORMAT_PEM;
argc--; outformat = FORMAT_PEM;
argv++;
while (argc >= 1) { prog = argv[0];
if (strcmp(*argv, "-inform") == 0) { argc--;
if (--argc < 1) argv++;
goto bad; while (argc >= 1)
informat = str2fmt(*(++argv)); {
} else if (strcmp(*argv, "-outform") == 0) { if (strcmp(*argv,"-inform") == 0)
if (--argc < 1) {
goto bad; if (--argc < 1) goto bad;
outformat = str2fmt(*(++argv)); informat=str2fmt(*(++argv));
} else if (strcmp(*argv, "-in") == 0) { }
if (--argc < 1) else if (strcmp(*argv,"-outform") == 0)
goto bad; {
infile = *(++argv); if (--argc < 1) goto bad;
} else if (strcmp(*argv, "-out") == 0) { outformat=str2fmt(*(++argv));
if (--argc < 1) }
goto bad; else if (strcmp(*argv,"-in") == 0)
outfile = *(++argv); {
} else if (strcmp(*argv, "-passin") == 0) { if (--argc < 1) goto bad;
if (--argc < 1) infile= *(++argv);
goto bad; }
passargin = *(++argv); else if (strcmp(*argv,"-out") == 0)
} else if (strcmp(*argv, "-passout") == 0) { {
if (--argc < 1) if (--argc < 1) goto bad;
goto bad; outfile= *(++argv);
passargout = *(++argv); }
} else if (strcmp(*argv, "-engine") == 0) { else if (strcmp(*argv,"-passin") == 0)
if (--argc < 1) {
goto bad; if (--argc < 1) goto bad;
engine = *(++argv); passargin= *(++argv);
} else if (strcmp(*argv, "-noout") == 0) }
noout = 1; else if (strcmp(*argv,"-passout") == 0)
else if (strcmp(*argv, "-text") == 0) {
text = 1; if (--argc < 1) goto bad;
else if (strcmp(*argv, "-conv_form") == 0) { passargout= *(++argv);
if (--argc < 1) }
goto bad; else if (strcmp(*argv, "-engine") == 0)
++argv; {
new_form = 1; if (--argc < 1) goto bad;
if (strcmp(*argv, "compressed") == 0) engine= *(++argv);
form = POINT_CONVERSION_COMPRESSED; }
else if (strcmp(*argv, "uncompressed") == 0) else if (strcmp(*argv, "-noout") == 0)
form = POINT_CONVERSION_UNCOMPRESSED; noout = 1;
else if (strcmp(*argv, "hybrid") == 0) else if (strcmp(*argv, "-text") == 0)
form = POINT_CONVERSION_HYBRID; text = 1;
else else if (strcmp(*argv, "-conv_form") == 0)
goto bad; {
} else if (strcmp(*argv, "-param_enc") == 0) { if (--argc < 1)
if (--argc < 1) goto bad;
goto bad; ++argv;
++argv; new_form = 1;
new_asn1_flag = 1; if (strcmp(*argv, "compressed") == 0)
if (strcmp(*argv, "named_curve") == 0) form = POINT_CONVERSION_COMPRESSED;
asn1_flag = OPENSSL_EC_NAMED_CURVE; else if (strcmp(*argv, "uncompressed") == 0)
else if (strcmp(*argv, "explicit") == 0) form = POINT_CONVERSION_UNCOMPRESSED;
asn1_flag = 0; else if (strcmp(*argv, "hybrid") == 0)
else form = POINT_CONVERSION_HYBRID;
goto bad; else
} else if (strcmp(*argv, "-param_out") == 0) goto bad;
param_out = 1; }
else if (strcmp(*argv, "-pubin") == 0) else if (strcmp(*argv, "-param_enc") == 0)
pubin = 1; {
else if (strcmp(*argv, "-pubout") == 0) if (--argc < 1)
pubout = 1; goto bad;
else if ((enc = EVP_get_cipherbyname(&(argv[0][1]))) == NULL) { ++argv;
BIO_printf(bio_err, "unknown option %s\n", *argv); new_asn1_flag = 1;
badops = 1; if (strcmp(*argv, "named_curve") == 0)
break; asn1_flag = OPENSSL_EC_NAMED_CURVE;
} else if (strcmp(*argv, "explicit") == 0)
argc--; asn1_flag = 0;
argv++; else
} goto bad;
}
if (badops) { else if (strcmp(*argv, "-param_out") == 0)
bad: param_out = 1;
BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog); else if (strcmp(*argv, "-pubin") == 0)
BIO_printf(bio_err, "where options are\n"); pubin=1;
BIO_printf(bio_err, " -inform arg input format - " else if (strcmp(*argv, "-pubout") == 0)
"DER or PEM\n"); pubout=1;
BIO_printf(bio_err, " -outform arg output format - " else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
"DER or PEM\n"); {
BIO_printf(bio_err, " -in arg input file\n"); BIO_printf(bio_err, "unknown option %s\n", *argv);
BIO_printf(bio_err, " -passin arg input file pass " badops=1;
"phrase source\n"); break;
BIO_printf(bio_err, " -out arg output file\n"); }
BIO_printf(bio_err, " -passout arg output file pass " argc--;
"phrase source\n"); argv++;
BIO_printf(bio_err, " -engine e use engine e, " }
"possibly a hardware device.\n");
BIO_printf(bio_err, " -des encrypt PEM output, " if (badops)
"instead of 'des' every other \n" {
" cipher " bad:
"supported by OpenSSL can be used\n"); BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
BIO_printf(bio_err, " -text print the key\n"); BIO_printf(bio_err, "where options are\n");
BIO_printf(bio_err, " -noout don't print key out\n"); BIO_printf(bio_err, " -inform arg input format - "
BIO_printf(bio_err, " -param_out print the elliptic " "DER or PEM\n");
"curve parameters\n"); BIO_printf(bio_err, " -outform arg output format - "
BIO_printf(bio_err, " -conv_form arg specifies the " "DER or PEM\n");
"point conversion form \n"); BIO_printf(bio_err, " -in arg input file\n");
BIO_printf(bio_err, " possible values:" BIO_printf(bio_err, " -passin arg input file pass "
" compressed\n"); "phrase source\n");
BIO_printf(bio_err, " " BIO_printf(bio_err, " -out arg output file\n");
" uncompressed (default)\n"); BIO_printf(bio_err, " -passout arg output file pass "
BIO_printf(bio_err, " " " hybrid\n"); "phrase source\n");
BIO_printf(bio_err, " -param_enc arg specifies the way" BIO_printf(bio_err, " -engine e use engine e, "
" the ec parameters are encoded\n"); "possibly a hardware device.\n");
BIO_printf(bio_err, " in the asn1 der " "encoding\n"); BIO_printf(bio_err, " -des encrypt PEM output, "
BIO_printf(bio_err, " possible values:" "instead of 'des' every other \n"
" named_curve (default)\n"); " cipher "
BIO_printf(bio_err, " " "supported by OpenSSL can be used\n");
"explicit\n"); BIO_printf(bio_err, " -text print the key\n");
goto end; BIO_printf(bio_err, " -noout don't print key out\n");
} BIO_printf(bio_err, " -param_out print the elliptic "
"curve parameters\n");
ERR_load_crypto_strings(); BIO_printf(bio_err, " -conv_form arg specifies the "
"point conversion form \n");
# ifndef OPENSSL_NO_ENGINE BIO_printf(bio_err, " possible values:"
setup_engine(bio_err, engine, 0); " compressed\n");
# endif BIO_printf(bio_err, " "
" uncompressed (default)\n");
if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { BIO_printf(bio_err, " "
BIO_printf(bio_err, "Error getting passwords\n"); " hybrid\n");
goto end; BIO_printf(bio_err, " -param_enc arg specifies the way"
} " the ec parameters are encoded\n");
BIO_printf(bio_err, " in the asn1 der "
in = BIO_new(BIO_s_file()); "encoding\n");
out = BIO_new(BIO_s_file()); BIO_printf(bio_err, " possible values:"
if ((in == NULL) || (out == NULL)) { " named_curve (default)\n");
ERR_print_errors(bio_err); BIO_printf(bio_err," "
goto end; "explicit\n");
} goto end;
}
if (infile == NULL)
BIO_set_fp(in, stdin, BIO_NOCLOSE); ERR_load_crypto_strings();
else {
if (BIO_read_filename(in, infile) <= 0) { #ifndef OPENSSL_NO_ENGINE
perror(infile); e = setup_engine(bio_err, engine, 0);
goto end; #endif
}
} if(!app_passwd(bio_err, passargin, passargout, &passin, &passout))
{
BIO_printf(bio_err, "read EC key\n"); BIO_printf(bio_err, "Error getting passwords\n");
if (informat == FORMAT_ASN1) { goto end;
if (pubin) }
eckey = d2i_EC_PUBKEY_bio(in, NULL);
else in = BIO_new(BIO_s_file());
eckey = d2i_ECPrivateKey_bio(in, NULL); out = BIO_new(BIO_s_file());
} else if (informat == FORMAT_PEM) { if ((in == NULL) || (out == NULL))
if (pubin) {
eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL, NULL); ERR_print_errors(bio_err);
else goto end;
eckey = PEM_read_bio_ECPrivateKey(in, NULL, NULL, passin); }
} else {
BIO_printf(bio_err, "bad input format specified for key\n"); if (infile == NULL)
goto end; BIO_set_fp(in, stdin, BIO_NOCLOSE);
} else
if (eckey == NULL) { {
BIO_printf(bio_err, "unable to load Key\n"); if (BIO_read_filename(in, infile) <= 0)
ERR_print_errors(bio_err); {
goto end; perror(infile);
} goto end;
}
if (outfile == NULL) { }
BIO_set_fp(out, stdout, BIO_NOCLOSE);
# ifdef OPENSSL_SYS_VMS BIO_printf(bio_err, "read EC key\n");
{ if (informat == FORMAT_ASN1)
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); {
out = BIO_push(tmpbio, out); if (pubin)
} eckey = d2i_EC_PUBKEY_bio(in, NULL);
# endif else
} else { eckey = d2i_ECPrivateKey_bio(in, NULL);
if (BIO_write_filename(out, outfile) <= 0) { }
perror(outfile); else if (informat == FORMAT_PEM)
goto end; {
} if (pubin)
} eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL,
NULL);
group = EC_KEY_get0_group(eckey); else
eckey = PEM_read_bio_ECPrivateKey(in, NULL, NULL,
if (new_form) passin);
EC_KEY_set_conv_form(eckey, form); }
else
if (new_asn1_flag) {
EC_KEY_set_asn1_flag(eckey, asn1_flag); BIO_printf(bio_err, "bad input format specified for key\n");
goto end;
if (text) }
if (!EC_KEY_print(out, eckey, 0)) { if (eckey == NULL)
perror(outfile); {
ERR_print_errors(bio_err); BIO_printf(bio_err,"unable to load Key\n");
goto end; ERR_print_errors(bio_err);
} goto end;
}
if (noout) {
ret = 0; if (outfile == NULL)
goto end; {
} BIO_set_fp(out, stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS
BIO_printf(bio_err, "writing EC key\n"); {
if (outformat == FORMAT_ASN1) { BIO *tmpbio = BIO_new(BIO_f_linebuffer());
if (param_out) out = BIO_push(tmpbio, out);
i = i2d_ECPKParameters_bio(out, group); }
else if (pubin || pubout) #endif
i = i2d_EC_PUBKEY_bio(out, eckey); }
else else
i = i2d_ECPrivateKey_bio(out, eckey); {
} else if (outformat == FORMAT_PEM) { if (BIO_write_filename(out, outfile) <= 0)
if (param_out) {
i = PEM_write_bio_ECPKParameters(out, group); perror(outfile);
else if (pubin || pubout) goto end;
i = PEM_write_bio_EC_PUBKEY(out, eckey); }
else }
i = PEM_write_bio_ECPrivateKey(out, eckey, enc,
NULL, 0, NULL, passout); group = EC_KEY_get0_group(eckey);
} else {
BIO_printf(bio_err, "bad output format specified for " "outfile\n"); if (new_form)
goto end; EC_KEY_set_conv_form(eckey, form);
}
if (new_asn1_flag)
if (!i) { EC_KEY_set_asn1_flag(eckey, asn1_flag);
BIO_printf(bio_err, "unable to write private key\n");
ERR_print_errors(bio_err); if (text)
} else if (!EC_KEY_print(out, eckey, 0))
ret = 0; {
end: perror(outfile);
if (in) ERR_print_errors(bio_err);
BIO_free(in); goto end;
if (out) }
BIO_free_all(out);
if (eckey) if (noout)
EC_KEY_free(eckey); {
if (passin) ret = 0;
OPENSSL_free(passin); goto end;
if (passout) }
OPENSSL_free(passout);
apps_shutdown(); BIO_printf(bio_err, "writing EC key\n");
OPENSSL_EXIT(ret); if (outformat == FORMAT_ASN1)
} {
#else /* !OPENSSL_NO_EC */ if (param_out)
i = i2d_ECPKParameters_bio(out, group);
# if PEDANTIC else if (pubin || pubout)
static void *dummy = &dummy; i = i2d_EC_PUBKEY_bio(out, eckey);
# endif 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 #endif

File diff suppressed because it is too large Load Diff

1143
apps/enc.c

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,6 @@
/* apps/engine.c */ /* apps/engine.c -*- mode: C; c-file-style: "eay" -*- */
/* /* Written by Richard Levitte <richard@levitte.org> for the OpenSSL
* Written by Richard Levitte <richard@levitte.org> for the OpenSSL project * project 2000.
* 2000.
*/ */
/* ==================================================================== /* ====================================================================
* Copyright (c) 2000 The OpenSSL Project. All rights reserved. * Copyright (c) 2000 The OpenSSL Project. All rights reserved.
@ -11,7 +10,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@ -57,456 +56,487 @@
* *
*/ */
#ifndef OPENSSL_NO_ENGINE
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#ifdef OPENSSL_NO_STDIO #ifdef OPENSSL_NO_STDIO
# define APPS_WIN16 #define APPS_WIN16
#endif #endif
#include "apps.h" #include "apps.h"
#include <openssl/err.h> #include <openssl/err.h>
#ifndef OPENSSL_NO_ENGINE #include <openssl/engine.h>
# include <openssl/engine.h> #include <openssl/ssl.h>
# include <openssl/ssl.h>
# undef PROG #undef PROG
# define PROG engine_main #define PROG engine_main
static const char *engine_usage[] = { static const char *engine_usage[]={
"usage: engine opts [engine ...]\n", "usage: engine opts [engine ...]\n",
" -v[v[v[v]]] - verbose mode, for each engine, list its 'control commands'\n", " -v[v[v[v]]] - verbose mode, for each engine, list its 'control commands'\n",
" -vv will additionally display each command's description\n", " -vv will additionally display each command's description\n",
" -vvv will also add the input flags for each command\n", " -vvv will also add the input flags for each command\n",
" -vvvv will also show internal input flags\n", " -vvvv will also show internal input flags\n",
" -c - for each engine, also list the capabilities\n", " -c - for each engine, also list the capabilities\n",
" -t[t] - for each engine, check that they are really available\n", " -t[t] - for each engine, check that they are really available\n",
" -tt will display error trace for unavailable engines\n", " -tt will display error trace for unavailable engines\n",
" -pre <cmd> - runs command 'cmd' against the ENGINE before any attempts\n", " -pre <cmd> - runs command 'cmd' against the ENGINE before any attempts\n",
" to load it (if -t is used)\n", " to load it (if -t is used)\n",
" -post <cmd> - runs command 'cmd' against the ENGINE after loading it\n", " -post <cmd> - runs command 'cmd' against the ENGINE after loading it\n",
" (only used if -t is also provided)\n", " (only used if -t is also provided)\n",
" NB: -pre and -post will be applied to all ENGINEs supplied on the command\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", " line, or all supported ENGINEs if none are specified.\n",
" Eg. '-pre \"SO_PATH:/lib/libdriver.so\"' calls command \"SO_PATH\" with\n", " Eg. '-pre \"SO_PATH:/lib/libdriver.so\"' calls command \"SO_PATH\" with\n",
" argument \"/lib/libdriver.so\".\n", " argument \"/lib/libdriver.so\".\n",
NULL NULL
}; };
static void identity(char *ptr) static void identity(void *ptr)
{ {
return; return;
} }
static int append_buf(char **buf, const char *s, int *size, int step) static int append_buf(char **buf, const char *s, int *size, int step)
{ {
if (*buf == NULL) { int l = strlen(s);
*size = step;
*buf = OPENSSL_malloc(*size);
if (*buf == NULL)
return 0;
**buf = '\0';
}
if (strlen(*buf) + strlen(s) >= (unsigned int)*size) { if (*buf == NULL)
*size += step; {
*buf = OPENSSL_realloc(*buf, *size); *size = step;
} *buf = OPENSSL_malloc(*size);
if (*buf == NULL)
return 0;
**buf = '\0';
}
if (*buf == NULL) if (**buf != '\0')
return 0; l += 2; /* ", " */
if (**buf != '\0') if (strlen(*buf) + strlen(s) >= (unsigned int)*size)
BUF_strlcat(*buf, ", ", *size); {
BUF_strlcat(*buf, s, *size); *size += step;
*buf = OPENSSL_realloc(*buf, *size);
}
return 1; 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) static int util_flags(BIO *bio_out, unsigned int flags, const char *indent)
{ {
int started = 0, err = 0; int started = 0, err = 0;
/* Indent before displaying input flags */ /* Indent before displaying input flags */
BIO_printf(bio_out, "%s%s(input flags): ", indent, indent); BIO_printf(bio_out, "%s%s(input flags): ", indent, indent);
if (flags == 0) { if(flags == 0)
BIO_printf(bio_out, "<no flags>\n"); {
return 1; BIO_printf(bio_out, "<no flags>\n");
} return 1;
/* }
* If the object is internal, mark it in a way that shows instead of /* 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. * having it part of all the other flags, even if it really is. */
*/ if(flags & ENGINE_CMD_FLAG_INTERNAL)
if (flags & ENGINE_CMD_FLAG_INTERNAL) { {
BIO_printf(bio_out, "[Internal] "); BIO_printf(bio_out, "[Internal] ");
} }
if (flags & ENGINE_CMD_FLAG_NUMERIC) { if(flags & ENGINE_CMD_FLAG_NUMERIC)
BIO_printf(bio_out, "NUMERIC"); {
started = 1; if(started)
} {
/* BIO_printf(bio_out, "|");
* Now we check that no combinations of the mutually exclusive NUMERIC, err = 1;
* 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 BIO_printf(bio_out, "NUMERIC");
* the testing logic. started = 1;
*/ }
if (flags & ENGINE_CMD_FLAG_STRING) { /* Now we check that no combinations of the mutually exclusive NUMERIC,
if (started) { * STRING, and NO_INPUT flags have been used. Future flags that can be
BIO_printf(bio_out, "|"); * OR'd together with these would need to added after these to preserve
err = 1; * the testing logic. */
} if(flags & ENGINE_CMD_FLAG_STRING)
BIO_printf(bio_out, "STRING"); {
started = 1; if(started)
} {
if (flags & ENGINE_CMD_FLAG_NO_INPUT) { BIO_printf(bio_out, "|");
if (started) { err = 1;
BIO_printf(bio_out, "|"); }
err = 1; BIO_printf(bio_out, "STRING");
} started = 1;
BIO_printf(bio_out, "NO_INPUT"); }
started = 1; if(flags & ENGINE_CMD_FLAG_NO_INPUT)
} {
/* Check for unknown flags */ if(started)
flags = flags & ~ENGINE_CMD_FLAG_NUMERIC & {
~ENGINE_CMD_FLAG_STRING & BIO_printf(bio_out, "|");
~ENGINE_CMD_FLAG_NO_INPUT & ~ENGINE_CMD_FLAG_INTERNAL; err = 1;
if (flags) { }
if (started) BIO_printf(bio_out, "NO_INPUT");
BIO_printf(bio_out, "|"); started = 1;
BIO_printf(bio_out, "<0x%04X>", flags); }
} /* Check for unknown flags */
if (err) flags = flags & ~ENGINE_CMD_FLAG_NUMERIC &
BIO_printf(bio_out, " <illegal flags!>"); ~ENGINE_CMD_FLAG_STRING &
BIO_printf(bio_out, "\n"); ~ENGINE_CMD_FLAG_NO_INPUT &
return 1; ~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, static int util_verbose(ENGINE *e, int verbose, BIO *bio_out, const char *indent)
const char *indent) {
{ static const int line_wrap = 78;
static const int line_wrap = 78; int num;
int num; int ret = 0;
int ret = 0; char *name = NULL;
char *name = NULL; char *desc = NULL;
char *desc = NULL; int flags;
int flags; int xpos = 0;
int xpos = 0; STACK *cmds = NULL;
STACK_OF(OPENSSL_STRING) *cmds = NULL; if(!ENGINE_ctrl(e, ENGINE_CTRL_HAS_CTRL_FUNCTION, 0, NULL, NULL) ||
if (!ENGINE_ctrl(e, ENGINE_CTRL_HAS_CTRL_FUNCTION, 0, NULL, NULL) || ((num = ENGINE_ctrl(e, ENGINE_CTRL_GET_FIRST_CMD_TYPE,
((num = ENGINE_ctrl(e, ENGINE_CTRL_GET_FIRST_CMD_TYPE, 0, NULL, NULL)) <= 0))
0, NULL, NULL)) <= 0)) { {
# if 0 #if 0
BIO_printf(bio_out, "%s<no control commands>\n", indent); BIO_printf(bio_out, "%s<no control commands>\n", indent);
# endif #endif
return 1; return 1;
} }
cmds = sk_OPENSSL_STRING_new_null(); cmds = sk_new_null();
if (!cmds) if(!cmds)
goto err; goto err;
do { do {
int len; int len;
/* Get the command input flags */ /* Get the command input flags */
if ((flags = ENGINE_ctrl(e, ENGINE_CTRL_GET_CMD_FLAGS, num, if((flags = ENGINE_ctrl(e, ENGINE_CTRL_GET_CMD_FLAGS, num,
NULL, NULL)) < 0) NULL, NULL)) < 0)
goto err; goto err;
if (!(flags & ENGINE_CMD_FLAG_INTERNAL) || verbose >= 4) { 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, /* Get the command name */
NULL, NULL)) <= 0) if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_LEN_FROM_CMD, num,
goto err; NULL, NULL)) <= 0)
if ((name = OPENSSL_malloc(len + 1)) == NULL) goto err;
goto err; if((name = OPENSSL_malloc(len + 1)) == NULL)
if (ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_FROM_CMD, num, name, goto err;
NULL) <= 0) if(ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_FROM_CMD, num, name,
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) NULL) <= 0)
goto err; goto err;
} /* Get the command description */
/* Now decide on the output */ if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_LEN_FROM_CMD, num,
if (xpos == 0) NULL, NULL)) < 0)
/* Do an indent */ goto err;
xpos = BIO_puts(bio_out, indent); if(len > 0)
else {
/* Otherwise prepend a ", " */ if((desc = OPENSSL_malloc(len + 1)) == NULL)
xpos += BIO_printf(bio_out, ", "); goto err;
if (verbose == 1) { if(ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_FROM_CMD, num, desc,
/* NULL) <= 0)
* We're just listing names, comma-delimited goto err;
*/ }
if ((xpos > (int)strlen(indent)) && /* Now decide on the output */
(xpos + (int)strlen(name) > line_wrap)) { if(xpos == 0)
BIO_printf(bio_out, "\n"); /* Do an indent */
xpos = BIO_puts(bio_out, indent); xpos = BIO_printf(bio_out, indent);
} else
xpos += BIO_printf(bio_out, "%s", name); /* Otherwise prepend a ", " */
} else { xpos += BIO_printf(bio_out, ", ");
/* We're listing names plus descriptions */ if(verbose == 1)
BIO_printf(bio_out, "%s: %s\n", name, {
(desc == NULL) ? "<no description>" : desc); /* We're just listing names, comma-delimited */
/* ... and sometimes input flags */ if((xpos > (int)strlen(indent)) &&
if ((verbose >= 3) && !util_flags(bio_out, flags, indent)) (xpos + (int)strlen(name) > line_wrap))
goto err; {
xpos = 0; BIO_printf(bio_out, "\n");
} xpos = BIO_printf(bio_out, indent);
} }
OPENSSL_free(name); xpos += BIO_printf(bio_out, "%s", name);
name = NULL; }
if (desc) { else
OPENSSL_free(desc); {
desc = NULL; /* We're listing names plus descriptions */
} BIO_printf(bio_out, "%s: %s\n", name,
/* Move to the next command */ (desc == NULL) ? "<no description>" : desc);
num = ENGINE_ctrl(e, ENGINE_CTRL_GET_NEXT_CMD_TYPE, num, NULL, NULL); /* ... and sometimes input flags */
} while (num > 0); if((verbose >= 3) && !util_flags(bio_out, flags,
if (xpos > 0) indent))
BIO_printf(bio_out, "\n"); goto err;
ret = 1; xpos = 0;
err: }
if (cmds) }
sk_OPENSSL_STRING_pop_free(cmds, identity); OPENSSL_free(name); name = NULL;
if (name) if(desc) { OPENSSL_free(desc); desc = NULL; }
OPENSSL_free(name); /* Move to the next command */
if (desc) num = ENGINE_ctrl(e, ENGINE_CTRL_GET_NEXT_CMD_TYPE,
OPENSSL_free(desc); num, NULL, NULL);
return ret; } 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_OF(OPENSSL_STRING) *cmds, static void util_do_cmds(ENGINE *e, STACK *cmds, BIO *bio_out, const char *indent)
BIO *bio_out, const char *indent) {
{ int loop, res, num = sk_num(cmds);
int loop, res, num = sk_OPENSSL_STRING_num(cmds); if(num < 0)
{
if (num < 0) { BIO_printf(bio_out, "[Error]: internal stack error\n");
BIO_printf(bio_out, "[Error]: internal stack error\n"); return;
return; }
} for(loop = 0; loop < num; loop++)
for (loop = 0; loop < num; loop++) { {
char buf[256]; char buf[256];
const char *cmd, *arg; const char *cmd, *arg;
cmd = sk_OPENSSL_STRING_value(cmds, loop); cmd = sk_value(cmds, loop);
res = 1; /* assume success */ res = 1; /* assume success */
/* Check if this command has no ":arg" */ /* Check if this command has no ":arg" */
if ((arg = strstr(cmd, ":")) == NULL) { if((arg = strstr(cmd, ":")) == NULL)
if (!ENGINE_ctrl_cmd_string(e, cmd, NULL, 0)) {
res = 0; if(!ENGINE_ctrl_cmd_string(e, cmd, NULL, 0))
} else { res = 0;
if ((int)(arg - cmd) > 254) { }
BIO_printf(bio_out, "[Error]: command name too long\n"); else
return; {
} if((int)(arg - cmd) > 254)
memcpy(buf, cmd, (int)(arg - cmd)); {
buf[arg - cmd] = '\0'; BIO_printf(bio_out,"[Error]: command name too long\n");
arg++; /* Move past the ":" */ return;
/* Call the command with the argument */ }
if (!ENGINE_ctrl_cmd_string(e, buf, arg, 0)) memcpy(buf, cmd, (int)(arg - cmd));
res = 0; buf[arg-cmd] = '\0';
} arg++; /* Move past the ":" */
if (res) /* Call the command with the argument */
BIO_printf(bio_out, "[Success]: %s\n", cmd); if(!ENGINE_ctrl_cmd_string(e, buf, arg, 0))
else { res = 0;
BIO_printf(bio_out, "[Failure]: %s\n", cmd); }
ERR_print_errors(bio_out); 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, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
int ret = 1, i; int ret=1,i;
const char **pp; const char **pp;
int verbose = 0, list_cap = 0, test_avail = 0, test_avail_noise = 0; int verbose=0, list_cap=0, test_avail=0, test_avail_noise = 0;
ENGINE *e; ENGINE *e;
STACK_OF(OPENSSL_STRING) *engines = sk_OPENSSL_STRING_new_null(); STACK *engines = sk_new_null();
STACK_OF(OPENSSL_STRING) *pre_cmds = sk_OPENSSL_STRING_new_null(); STACK *pre_cmds = sk_new_null();
STACK_OF(OPENSSL_STRING) *post_cmds = sk_OPENSSL_STRING_new_null(); STACK *post_cmds = sk_new_null();
int badops = 1; int badops=1;
BIO *bio_out = NULL; BIO *bio_out=NULL;
const char *indent = " "; const char *indent = " ";
apps_startup(); apps_startup();
SSL_load_error_strings(); SSL_load_error_strings();
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)) if (!load_config(bio_err, NULL))
goto end; goto end;
bio_out = BIO_new_fp(stdout, BIO_NOCLOSE); bio_out=BIO_new_fp(stdout,BIO_NOCLOSE);
# ifdef OPENSSL_SYS_VMS #ifdef OPENSSL_SYS_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);
} }
# endif #endif
argc--; argc--;
argv++; argv++;
while (argc >= 1) { while (argc >= 1)
if (strncmp(*argv, "-v", 2) == 0) { {
if (strspn(*argv + 1, "v") < strlen(*argv + 1)) if (strncmp(*argv,"-v",2) == 0)
goto skip_arg_loop; {
if ((verbose = strlen(*argv + 1)) > 4) if(strspn(*argv + 1, "v") < strlen(*argv + 1))
goto skip_arg_loop; goto skip_arg_loop;
} else if (strcmp(*argv, "-c") == 0) if((verbose=strlen(*argv + 1)) > 4)
list_cap = 1; goto skip_arg_loop;
else if (strncmp(*argv, "-t", 2) == 0) { }
test_avail = 1; else if (strcmp(*argv,"-c") == 0)
if (strspn(*argv + 1, "t") < strlen(*argv + 1)) list_cap=1;
goto skip_arg_loop; else if (strncmp(*argv,"-t",2) == 0)
if ((test_avail_noise = strlen(*argv + 1) - 1) > 1) {
goto skip_arg_loop; test_avail=1;
} else if (strcmp(*argv, "-pre") == 0) { if(strspn(*argv + 1, "t") < strlen(*argv + 1))
argc--; goto skip_arg_loop;
argv++; if((test_avail_noise = strlen(*argv + 1) - 1) > 1)
if (argc == 0) goto skip_arg_loop;
goto skip_arg_loop; }
sk_OPENSSL_STRING_push(pre_cmds, *argv); else if (strcmp(*argv,"-pre") == 0)
} else if (strcmp(*argv, "-post") == 0) { {
argc--; argc--; argv++;
argv++; if (argc == 0)
if (argc == 0) goto skip_arg_loop;
goto skip_arg_loop; sk_push(pre_cmds,*argv);
sk_OPENSSL_STRING_push(post_cmds, *argv); }
} else if ((strncmp(*argv, "-h", 2) == 0) || else if (strcmp(*argv,"-post") == 0)
(strcmp(*argv, "-?") == 0)) {
goto skip_arg_loop; argc--; argv++;
else if (argc == 0)
sk_OPENSSL_STRING_push(engines, *argv); goto skip_arg_loop;
argc--; sk_push(post_cmds,*argv);
argv++; }
} else if ((strncmp(*argv,"-h",2) == 0) ||
/* Looks like everything went OK */ (strcmp(*argv,"-?") == 0))
badops = 0; goto skip_arg_loop;
skip_arg_loop: else
sk_push(engines,*argv);
argc--;
argv++;
}
/* Looks like everything went OK */
badops = 0;
skip_arg_loop:
if (badops) { if (badops)
for (pp = engine_usage; (*pp != NULL); pp++) {
BIO_printf(bio_err, "%s", *pp); for (pp=engine_usage; (*pp != NULL); pp++)
goto end; BIO_printf(bio_err,"%s",*pp);
} goto end;
}
if (sk_OPENSSL_STRING_num(engines) == 0) { if (sk_num(engines) == 0)
for (e = ENGINE_get_first(); e != NULL; e = ENGINE_get_next(e)) { {
sk_OPENSSL_STRING_push(engines, (char *)ENGINE_get_id(e)); 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_OPENSSL_STRING_num(engines); i++) { for (i=0; i<sk_num(engines); i++)
const char *id = sk_OPENSSL_STRING_value(engines, i); {
if ((e = ENGINE_by_id(id)) != NULL) { const char *id = sk_value(engines,i);
const char *name = ENGINE_get_name(e); if ((e = ENGINE_by_id(id)) != NULL)
/* {
* Do "id" first, then "name". Easier to auto-parse. 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); BIO_printf(bio_out, "(%s) %s\n", id, name);
util_do_cmds(e, pre_cmds, bio_out, indent); util_do_cmds(e, pre_cmds, bio_out, indent);
if (strcmp(ENGINE_get_id(e), id) != 0) { if (strcmp(ENGINE_get_id(e), id) != 0)
BIO_printf(bio_out, "Loaded: (%s) %s\n", {
ENGINE_get_id(e), ENGINE_get_name(e)); BIO_printf(bio_out, "Loaded: (%s) %s\n",
} ENGINE_get_id(e), ENGINE_get_name(e));
if (list_cap) { }
int cap_size = 256; if (list_cap)
char *cap_buf = NULL; {
int k, n; int cap_size = 256;
const int *nids; char *cap_buf = NULL;
ENGINE_CIPHERS_PTR fn_c; int k,n;
ENGINE_DIGESTS_PTR fn_d; const int *nids;
ENGINE_PKEY_METHS_PTR fn_pk; ENGINE_CIPHERS_PTR fn_c;
ENGINE_DIGESTS_PTR fn_d;
if (ENGINE_get_RSA(e) != NULL if (ENGINE_get_RSA(e) != NULL
&& !append_buf(&cap_buf, "RSA", &cap_size, 256)) && !append_buf(&cap_buf, "RSA",
goto end; &cap_size, 256))
if (ENGINE_get_DSA(e) != NULL goto end;
&& !append_buf(&cap_buf, "DSA", &cap_size, 256)) if (ENGINE_get_DSA(e) != NULL
goto end; && !append_buf(&cap_buf, "DSA",
if (ENGINE_get_DH(e) != NULL &cap_size, 256))
&& !append_buf(&cap_buf, "DH", &cap_size, 256)) goto end;
goto end; if (ENGINE_get_DH(e) != NULL
if (ENGINE_get_RAND(e) != NULL && !append_buf(&cap_buf, "DH",
&& !append_buf(&cap_buf, "RAND", &cap_size, 256)) &cap_size, 256))
goto end; goto end;
if (ENGINE_get_RAND(e) != NULL
&& !append_buf(&cap_buf, "RAND",
&cap_size, 256))
goto end;
fn_c = ENGINE_get_ciphers(e); fn_c = ENGINE_get_ciphers(e);
if (!fn_c) if(!fn_c) goto skip_ciphers;
goto skip_ciphers; n = fn_c(e, NULL, &nids, 0);
n = fn_c(e, NULL, &nids, 0); for(k=0 ; k < n ; ++k)
for (k = 0; k < n; ++k) if(!append_buf(&cap_buf,
if (!append_buf(&cap_buf, OBJ_nid2sn(nids[k]),
OBJ_nid2sn(nids[k]), &cap_size, 256)) &cap_size, 256))
goto end; goto end;
skip_ciphers: skip_ciphers:
fn_d = ENGINE_get_digests(e); fn_d = ENGINE_get_digests(e);
if (!fn_d) if(!fn_d) goto skip_digests;
goto skip_digests; n = fn_d(e, NULL, &nids, 0);
n = fn_d(e, NULL, &nids, 0); for(k=0 ; k < n ; ++k)
for (k = 0; k < n; ++k) if(!append_buf(&cap_buf,
if (!append_buf(&cap_buf, OBJ_nid2sn(nids[k]),
OBJ_nid2sn(nids[k]), &cap_size, 256)) &cap_size, 256))
goto end; goto end;
skip_digests: skip_digests:
fn_pk = ENGINE_get_pkey_meths(e); if (cap_buf && (*cap_buf != '\0'))
if (!fn_pk) BIO_printf(bio_out, " [%s]\n", cap_buf);
goto skip_pmeths;
n = fn_pk(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_pmeths:
if (cap_buf && (*cap_buf != '\0'))
BIO_printf(bio_out, " [%s]\n", cap_buf);
OPENSSL_free(cap_buf); OPENSSL_free(cap_buf);
} }
if (test_avail) { if(test_avail)
BIO_printf(bio_out, "%s", indent); {
if (ENGINE_init(e)) { BIO_printf(bio_out, "%s", indent);
BIO_printf(bio_out, "[ available ]\n"); if (ENGINE_init(e))
util_do_cmds(e, post_cmds, bio_out, indent); {
ENGINE_finish(e); BIO_printf(bio_out, "[ available ]\n");
} else { util_do_cmds(e, post_cmds, bio_out, indent);
BIO_printf(bio_out, "[ unavailable ]\n"); ENGINE_finish(e);
if (test_avail_noise) }
ERR_print_errors_fp(stdout); else
ERR_clear_error(); {
} BIO_printf(bio_out, "[ unavailable ]\n");
} if(test_avail_noise)
if ((verbose > 0) && !util_verbose(e, verbose, bio_out, indent)) ERR_print_errors_fp(stdout);
goto end; ERR_clear_error();
ENGINE_free(e); }
} else }
ERR_print_errors(bio_err); if((verbose > 0) && !util_verbose(e, verbose, bio_out, indent))
} goto end;
ENGINE_free(e);
}
else
ERR_print_errors(bio_err);
}
ret = 0; ret=0;
end: end:
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
sk_OPENSSL_STRING_pop_free(engines, identity); sk_pop_free(engines, identity);
sk_OPENSSL_STRING_pop_free(pre_cmds, identity); sk_pop_free(pre_cmds, identity);
sk_OPENSSL_STRING_pop_free(post_cmds, identity); sk_pop_free(post_cmds, identity);
if (bio_out != NULL) if (bio_out != NULL) BIO_free_all(bio_out);
BIO_free_all(bio_out); apps_shutdown();
apps_shutdown(); OPENSSL_EXIT(ret);
OPENSSL_EXIT(ret); }
}
#else #else
# if PEDANTIC # if PEDANTIC
static void *dummy = &dummy; static void *dummy=&dummy;
# endif # endif
#endif #endif

View File

@ -5,21 +5,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
@ -66,56 +66,61 @@
#include <openssl/ssl.h> #include <openssl/ssl.h>
#undef PROG #undef PROG
#define PROG errstr_main #define PROG errstr_main
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
int i, ret = 0; int i,ret=0;
char buf[256]; char buf[256];
unsigned long l; unsigned long l;
apps_startup(); apps_startup();
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);
SSL_load_error_strings(); SSL_load_error_strings();
if ((argc > 1) && (strcmp(argv[1], "-stats") == 0)) { if ((argc > 1) && (strcmp(argv[1],"-stats") == 0))
BIO *out = NULL; {
BIO *out=NULL;
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 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);
} }
#endif #endif
lh_ERR_STRING_DATA_node_stats_bio(ERR_get_string_table(), out); lh_node_stats_bio((LHASH *)ERR_get_string_table(),out);
lh_ERR_STRING_DATA_stats_bio(ERR_get_string_table(), out); lh_stats_bio((LHASH *)ERR_get_string_table(),out);
lh_ERR_STRING_DATA_node_usage_stats_bio(ERR_get_string_table(), lh_node_usage_stats_bio((LHASH *)
out); ERR_get_string_table(),out);
} }
if (out != NULL) if (out != NULL) BIO_free_all(out);
BIO_free_all(out); argc--;
argc--; argv++;
argv++; }
}
for (i = 1; i < argc; i++) { for (i=1; i<argc; i++)
if (sscanf(argv[i], "%lx", &l)) { {
ERR_error_string_n(l, buf, sizeof buf); if (sscanf(argv[i],"%lx",&l))
printf("%s\n", buf); {
} else { ERR_error_string_n(l, buf, sizeof buf);
printf("%s: bad error code\n", argv[i]); printf("%s\n",buf);
printf("usage: errstr [-stats] <errno> ...\n"); }
ret++; else
} {
} printf("%s: bad error code\n",argv[i]);
apps_shutdown(); printf("usage: errstr [-stats] <errno> ...\n");
OPENSSL_EXIT(ret); ret++;
} }
}
apps_shutdown();
OPENSSL_EXIT(ret);
}

View File

@ -6,21 +6,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -35,10 +35,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -50,7 +50,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
@ -58,191 +58,181 @@
*/ */
#include <openssl/opensslconf.h> #include <openssl/opensslconf.h>
/* /* Until the key-gen callbacks are modified to use newer prototypes, we allow
* Until the key-gen callbacks are modified to use newer prototypes, we allow * deprecated functions for openssl-internal code */
* deprecated functions for openssl-internal code
*/
#ifdef OPENSSL_NO_DEPRECATED #ifdef OPENSSL_NO_DEPRECATED
# undef OPENSSL_NO_DEPRECATED #undef OPENSSL_NO_DEPRECATED
#endif #endif
#ifndef OPENSSL_NO_DH #ifndef OPENSSL_NO_DH
# include <stdio.h> #include <stdio.h>
# include <string.h> #include <string.h>
# include <sys/types.h> #include <sys/types.h>
# include <sys/stat.h> #include <sys/stat.h>
# include "apps.h" #include "apps.h"
# include <openssl/bio.h> #include <openssl/bio.h>
# include <openssl/rand.h> #include <openssl/rand.h>
# include <openssl/err.h> #include <openssl/err.h>
# include <openssl/bn.h> #include <openssl/bn.h>
# include <openssl/dh.h> #include <openssl/dh.h>
# include <openssl/x509.h> #include <openssl/x509.h>
# include <openssl/pem.h> #include <openssl/pem.h>
# define DEFBITS 2048 #define DEFBITS 512
# 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 int MS_CALLBACK dh_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)
{ {
BN_GENCB cb; BN_GENCB cb;
DH *dh = NULL; #ifndef OPENSSL_NO_ENGINE
int ret = 1, num = DEFBITS; ENGINE *e = NULL;
int g = 2; #endif
char *outfile = NULL; DH *dh=NULL;
char *inrand = NULL; int ret=1,num=DEFBITS;
# ifndef OPENSSL_NO_ENGINE int g=2;
char *engine = NULL; char *outfile=NULL;
# endif char *inrand=NULL;
BIO *out = NULL; #ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif
BIO *out=NULL;
apps_startup(); apps_startup();
BN_GENCB_set(&cb, dh_cb, bio_err); 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)) if (!load_config(bio_err, NULL))
goto end; goto end;
argv++; argv++;
argc--; argc--;
for (;;) { for (;;)
if (argc <= 0) {
break; if (argc <= 0) break;
if (strcmp(*argv, "-out") == 0) { if (strcmp(*argv,"-out") == 0)
if (--argc < 1) {
goto bad; if (--argc < 1) goto bad;
outfile = *(++argv); outfile= *(++argv);
} else if (strcmp(*argv, "-2") == 0) }
g = 2; else if (strcmp(*argv,"-2") == 0)
/*- else if (strcmp(*argv,"-3") == 0) g=2;
g=3; */ /* else if (strcmp(*argv,"-3") == 0)
else if (strcmp(*argv, "-5") == 0) g=3; */
g = 5; else if (strcmp(*argv,"-5") == 0)
# ifndef OPENSSL_NO_ENGINE g=5;
else if (strcmp(*argv, "-engine") == 0) { #ifndef OPENSSL_NO_ENGINE
if (--argc < 1) else if (strcmp(*argv,"-engine") == 0)
goto bad; {
engine = *(++argv); if (--argc < 1) goto bad;
} engine= *(++argv);
# endif }
else if (strcmp(*argv, "-rand") == 0) { #endif
if (--argc < 1) else if (strcmp(*argv,"-rand") == 0)
goto bad; {
inrand = *(++argv); if (--argc < 1) goto bad;
} else inrand= *(++argv);
break; }
argv++; else
argc--; break;
} argv++;
if ((argc >= 1) && ((sscanf(*argv, "%d", &num) == 0) || (num < 0))) { argc--;
bad: }
BIO_printf(bio_err, "usage: gendh [args] [numbits]\n"); if ((argc >= 1) && ((sscanf(*argv,"%d",&num) == 0) || (num < 0)))
BIO_printf(bio_err, " -out file - output the key to 'file\n"); {
BIO_printf(bio_err, " -2 - use 2 as the generator value\n"); bad:
/* BIO_printf(bio_err,"usage: gendh [args] [numbits]\n");
* BIO_printf(bio_err," -3 - use 3 as the generator value\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, " -5 - use 5 as the generator value\n"); /* BIO_printf(bio_err," -3 - use 3 as the generator value\n"); */
# ifndef OPENSSL_NO_ENGINE BIO_printf(bio_err," -5 - use 5 as the generator value\n");
BIO_printf(bio_err, #ifndef OPENSSL_NO_ENGINE
" -engine e - use engine e, possibly a hardware device.\n"); 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, BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, 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, BIO_printf(bio_err," the random number generator\n");
" - load the file (or the files in the directory) into\n"); goto end;
BIO_printf(bio_err, " the random number generator\n"); }
goto end;
} #ifndef OPENSSL_NO_ENGINE
# ifndef OPENSSL_NO_ENGINE e = setup_engine(bio_err, engine, 0);
setup_engine(bio_err, engine, 0); #endif
# endif
out = BIO_new(BIO_s_file()); out=BIO_new(BIO_s_file());
if (out == NULL) { if (out == NULL)
ERR_print_errors(bio_err); {
goto end; ERR_print_errors(bio_err);
} goto end;
}
if (outfile == NULL) { if (outfile == NULL)
BIO_set_fp(out, stdout, BIO_NOCLOSE); {
# ifdef OPENSSL_SYS_VMS BIO_set_fp(out,stdout,BIO_NOCLOSE);
{ #ifdef OPENSSL_SYS_VMS
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); {
out = BIO_push(tmpbio, out); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
} out = BIO_push(tmpbio, out);
# endif }
} else { #endif
if (BIO_write_filename(out, outfile) <= 0) { }
perror(outfile); else
goto end; {
} if (BIO_write_filename(out,outfile) <= 0)
} {
perror(outfile);
goto end;
}
}
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");
} }
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));
BIO_printf(bio_err, BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g);
"Generating DH parameters, %d bit long safe prime, generator %d\n", BIO_printf(bio_err,"This is going to take a long time\n");
num, g);
BIO_printf(bio_err, "This is going to take a long time\n");
if (((dh = DH_new()) == NULL) if(((dh = DH_new()) == NULL) || !DH_generate_parameters_ex(dh, num, g, &cb))
|| !DH_generate_parameters_ex(dh, num, g, &cb)) goto end;
goto end;
app_RAND_write_file(NULL, bio_err);
app_RAND_write_file(NULL, bio_err); if (!PEM_write_bio_DHparams(out,dh))
goto end;
if (!PEM_write_bio_DHparams(out, dh)) ret=0;
goto end; end:
ret = 0; if (ret != 0)
end: ERR_print_errors(bio_err);
if (ret != 0) if (out != NULL) BIO_free_all(out);
ERR_print_errors(bio_err); if (dh != NULL) DH_free(dh);
if (out != NULL) apps_shutdown();
BIO_free_all(out); OPENSSL_EXIT(ret);
if (dh != NULL) }
DH_free(dh);
apps_shutdown();
OPENSSL_EXIT(ret);
}
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb) static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
{ {
char c = '*'; char c='*';
if (p == 0)
c = '.';
if (p == 1)
c = '+';
if (p == 2)
c = '*';
if (p == 3)
c = '\n';
BIO_write(cb->arg, &c, 1);
(void)BIO_flush(cb->arg);
# ifdef LINT
p = n;
# endif
return 1;
}
#else /* !OPENSSL_NO_DH */
# if PEDANTIC
static void *dummy = &dummy;
# endif
if (p == 0) c='.';
if (p == 1) c='+';
if (p == 2) c='*';
if (p == 3) c='\n';
BIO_write(cb->arg,&c,1);
(void)BIO_flush(cb->arg);
#ifdef LINT
p=n;
#endif
return 1;
}
#endif #endif

View File

@ -5,21 +5,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -49,239 +49,234 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
* [including the GNU Public Licence.] * [including the GNU Public Licence.]
*/ */
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */ #include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */
#ifndef OPENSSL_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>
# include <sys/stat.h> #include <sys/stat.h>
# include "apps.h" #include "apps.h"
# include <openssl/bio.h> #include <openssl/bio.h>
# include <openssl/err.h> #include <openssl/err.h>
# include <openssl/bn.h> #include <openssl/bn.h>
# include <openssl/dsa.h> #include <openssl/dsa.h>
# include <openssl/x509.h> #include <openssl/x509.h>
# include <openssl/pem.h> #include <openssl/pem.h>
# define DEFBITS 512 #define DEFBITS 512
# undef PROG #undef PROG
# define PROG gendsa_main #define PROG gendsa_main
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
DSA *dsa = NULL; #ifndef OPENSSL_NO_ENGINE
int ret = 1; ENGINE *e = NULL;
char *outfile = NULL; #endif
char *inrand = NULL, *dsaparams = NULL; DSA *dsa=NULL;
char *passargout = NULL, *passout = NULL; int ret=1;
BIO *out = NULL, *in = NULL; char *outfile=NULL;
const EVP_CIPHER *enc = NULL; char *inrand=NULL,*dsaparams=NULL;
# ifndef OPENSSL_NO_ENGINE char *passargout = NULL, *passout = NULL;
char *engine = NULL; BIO *out=NULL,*in=NULL;
# endif const EVP_CIPHER *enc=NULL;
#ifndef OPENSSL_NO_ENGINE
apps_startup(); char *engine=NULL;
#endif
if (bio_err == NULL)
if ((bio_err = BIO_new(BIO_s_file())) != NULL) apps_startup();
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
if (bio_err == NULL)
if (!load_config(bio_err, NULL)) if ((bio_err=BIO_new(BIO_s_file())) != NULL)
goto end; BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
argv++; if (!load_config(bio_err, NULL))
argc--; goto end;
for (;;) {
if (argc <= 0) argv++;
break; argc--;
if (strcmp(*argv, "-out") == 0) { for (;;)
if (--argc < 1) {
goto bad; if (argc <= 0) break;
outfile = *(++argv); if (strcmp(*argv,"-out") == 0)
} else if (strcmp(*argv, "-passout") == 0) { {
if (--argc < 1) if (--argc < 1) goto bad;
goto bad; outfile= *(++argv);
passargout = *(++argv); }
} else if (strcmp(*argv,"-passout") == 0)
# ifndef OPENSSL_NO_ENGINE {
else if (strcmp(*argv, "-engine") == 0) { if (--argc < 1) goto bad;
if (--argc < 1) passargout= *(++argv);
goto bad; }
engine = *(++argv); #ifndef OPENSSL_NO_ENGINE
} else if (strcmp(*argv,"-engine") == 0)
# endif {
else if (strcmp(*argv, "-rand") == 0) { if (--argc < 1) goto bad;
if (--argc < 1) engine= *(++argv);
goto bad; }
inrand = *(++argv); #endif
} else if (strcmp(*argv, "-") == 0) else if (strcmp(*argv,"-rand") == 0)
goto bad; {
# ifndef OPENSSL_NO_DES if (--argc < 1) goto bad;
else if (strcmp(*argv, "-des") == 0) inrand= *(++argv);
enc = EVP_des_cbc(); }
else if (strcmp(*argv, "-des3") == 0) else if (strcmp(*argv,"-") == 0)
enc = EVP_des_ede3_cbc(); goto bad;
# endif #ifndef OPENSSL_NO_DES
# ifndef OPENSSL_NO_IDEA else if (strcmp(*argv,"-des") == 0)
else if (strcmp(*argv, "-idea") == 0) enc=EVP_des_cbc();
enc = EVP_idea_cbc(); else if (strcmp(*argv,"-des3") == 0)
# endif enc=EVP_des_ede3_cbc();
# ifndef OPENSSL_NO_SEED #endif
else if (strcmp(*argv, "-seed") == 0) #ifndef OPENSSL_NO_IDEA
enc = EVP_seed_cbc(); else if (strcmp(*argv,"-idea") == 0)
# endif enc=EVP_idea_cbc();
# ifndef OPENSSL_NO_AES #endif
else if (strcmp(*argv, "-aes128") == 0) #ifndef OPENSSL_NO_SEED
enc = EVP_aes_128_cbc(); else if (strcmp(*argv,"-seed") == 0)
else if (strcmp(*argv, "-aes192") == 0) enc=EVP_seed_cbc();
enc = EVP_aes_192_cbc(); #endif
else if (strcmp(*argv, "-aes256") == 0) #ifndef OPENSSL_NO_AES
enc = EVP_aes_256_cbc(); else if (strcmp(*argv,"-aes128") == 0)
# endif enc=EVP_aes_128_cbc();
# ifndef OPENSSL_NO_CAMELLIA else if (strcmp(*argv,"-aes192") == 0)
else if (strcmp(*argv, "-camellia128") == 0) enc=EVP_aes_192_cbc();
enc = EVP_camellia_128_cbc(); else if (strcmp(*argv,"-aes256") == 0)
else if (strcmp(*argv, "-camellia192") == 0) enc=EVP_aes_256_cbc();
enc = EVP_camellia_192_cbc(); #endif
else if (strcmp(*argv, "-camellia256") == 0) #ifndef OPENSSL_NO_CAMELLIA
enc = EVP_camellia_256_cbc(); else if (strcmp(*argv,"-camellia128") == 0)
# endif enc=EVP_camellia_128_cbc();
else if (**argv != '-' && dsaparams == NULL) { else if (strcmp(*argv,"-camellia192") == 0)
dsaparams = *argv; enc=EVP_camellia_192_cbc();
} else else if (strcmp(*argv,"-camellia256") == 0)
goto bad; enc=EVP_camellia_256_cbc();
argv++; #endif
argc--; else if (**argv != '-' && dsaparams == NULL)
} {
dsaparams = *argv;
if (dsaparams == NULL) { }
bad: else
BIO_printf(bio_err, "usage: gendsa [args] dsaparam-file\n"); goto bad;
BIO_printf(bio_err, " -out file - output the key to 'file'\n"); argv++;
# ifndef OPENSSL_NO_DES argc--;
BIO_printf(bio_err, }
" -des - encrypt the generated key with DES in cbc mode\n");
BIO_printf(bio_err, if (dsaparams == NULL)
" -des3 - encrypt the generated key with DES in ede cbc mode (168 bit key)\n"); {
# endif bad:
# ifndef OPENSSL_NO_IDEA BIO_printf(bio_err,"usage: gendsa [args] dsaparam-file\n");
BIO_printf(bio_err, BIO_printf(bio_err," -out file - output the key to 'file'\n");
" -idea - encrypt the generated key with IDEA in cbc mode\n"); #ifndef OPENSSL_NO_DES
# endif BIO_printf(bio_err," -des - encrypt the generated key with DES in cbc mode\n");
# ifndef OPENSSL_NO_SEED BIO_printf(bio_err," -des3 - encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
BIO_printf(bio_err, " -seed\n"); #endif
BIO_printf(bio_err, #ifndef OPENSSL_NO_IDEA
" encrypt PEM output with cbc seed\n"); BIO_printf(bio_err," -idea - encrypt the generated key with IDEA in cbc mode\n");
# endif #endif
# ifndef OPENSSL_NO_AES #ifndef OPENSSL_NO_SEED
BIO_printf(bio_err, " -aes128, -aes192, -aes256\n"); BIO_printf(bio_err," -seed\n");
BIO_printf(bio_err, BIO_printf(bio_err," encrypt PEM output with cbc seed\n");
" encrypt PEM output with cbc aes\n"); #endif
# endif #ifndef OPENSSL_NO_AES
# ifndef OPENSSL_NO_CAMELLIA BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n"); BIO_printf(bio_err," encrypt PEM output with cbc aes\n");
BIO_printf(bio_err, #endif
" encrypt PEM output with cbc camellia\n"); #ifndef OPENSSL_NO_CAMELLIA
# endif BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
# ifndef OPENSSL_NO_ENGINE BIO_printf(bio_err," encrypt PEM output with cbc camellia\n");
BIO_printf(bio_err, #endif
" -engine e - use engine e, possibly a hardware device.\n"); #ifndef OPENSSL_NO_ENGINE
# endif BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n");
BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, #endif
LIST_SEPARATOR_CHAR); BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
BIO_printf(bio_err, BIO_printf(bio_err," - load the file (or the files in the directory) into\n");
" - 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," dsaparam-file\n");
BIO_printf(bio_err, " dsaparam-file\n"); BIO_printf(bio_err," - a DSA parameter file as generated by the dsaparam command\n");
BIO_printf(bio_err, goto end;
" - a DSA parameter file as generated by the dsaparam command\n"); }
goto end;
} #ifndef OPENSSL_NO_ENGINE
# ifndef OPENSSL_NO_ENGINE e = setup_engine(bio_err, engine, 0);
setup_engine(bio_err, engine, 0); #endif
# 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; }
}
in = BIO_new(BIO_s_file()); in=BIO_new(BIO_s_file());
if (!(BIO_read_filename(in, dsaparams))) { if (!(BIO_read_filename(in,dsaparams)))
perror(dsaparams); {
goto end; perror(dsaparams);
} goto end;
}
if ((dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL)) == NULL) {
BIO_printf(bio_err, "unable to load DSA parameter file\n"); if ((dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL)) == NULL)
goto end; {
} BIO_printf(bio_err,"unable to load DSA parameter file\n");
BIO_free(in); goto end;
in = NULL; }
BIO_free(in);
out = BIO_new(BIO_s_file()); in = NULL;
if (out == NULL)
goto end; out=BIO_new(BIO_s_file());
if (out == NULL) goto end;
if (outfile == NULL) {
BIO_set_fp(out, stdout, BIO_NOCLOSE); if (outfile == NULL)
# ifdef OPENSSL_SYS_VMS {
{ BIO_set_fp(out,stdout,BIO_NOCLOSE);
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); #ifdef OPENSSL_SYS_VMS
out = BIO_push(tmpbio, out); {
} BIO *tmpbio = BIO_new(BIO_f_linebuffer());
# endif out = BIO_push(tmpbio, out);
} else { }
if (BIO_write_filename(out, outfile) <= 0) { #endif
perror(outfile); }
goto end; else
} {
} if (BIO_write_filename(out,outfile) <= 0)
{
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) { perror(outfile);
BIO_printf(bio_err, goto end;
"warning, not much extra random data, consider using the -rand option\n"); }
} }
if (inrand != NULL)
BIO_printf(bio_err, "%ld semi-random bytes loaded\n", if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL)
app_RAND_load_files(inrand)); {
BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
BIO_printf(bio_err, "Generating DSA key, %d bits\n", BN_num_bits(dsa->p)); }
if (!DSA_generate_key(dsa)) if (inrand != NULL)
goto end; BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
app_RAND_load_files(inrand));
app_RAND_write_file(NULL, bio_err);
BIO_printf(bio_err,"Generating DSA key, %d bits\n",
if (!PEM_write_bio_DSAPrivateKey(out, dsa, enc, NULL, 0, NULL, passout)) BN_num_bits(dsa->p));
goto end; if (!DSA_generate_key(dsa)) goto end;
ret = 0;
end: app_RAND_write_file(NULL, bio_err);
if (ret != 0)
ERR_print_errors(bio_err); if (!PEM_write_bio_DSAPrivateKey(out,dsa,enc,NULL,0,NULL, passout))
if (in != NULL) goto end;
BIO_free(in); ret=0;
if (out != NULL) end:
BIO_free_all(out); if (ret != 0)
if (dsa != NULL) ERR_print_errors(bio_err);
DSA_free(dsa); if (in != NULL) BIO_free(in);
if (passout) if (out != NULL) BIO_free_all(out);
OPENSSL_free(passout); if (dsa != NULL) DSA_free(dsa);
apps_shutdown(); if(passout) OPENSSL_free(passout);
OPENSSL_EXIT(ret); apps_shutdown();
} OPENSSL_EXIT(ret);
#else /* !OPENSSL_NO_DSA */ }
# if PEDANTIC
static void *dummy = &dummy;
# endif
#endif #endif

View File

@ -1,405 +0,0 @@
/* apps/genpkey.c */
/*
* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
* 2006
*/
/* ====================================================================
* Copyright (c) 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
* licensing@OpenSSL.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
#include <stdio.h>
#include <string.h>
#include "apps.h"
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#ifndef OPENSSL_NO_ENGINE
# include <openssl/engine.h>
#endif
static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
const char *file, ENGINE *e);
static int genpkey_cb(EVP_PKEY_CTX *ctx);
#define PROG genpkey_main
int MAIN(int, char **);
int MAIN(int argc, char **argv)
{
ENGINE *e = NULL;
char **args, *outfile = NULL;
char *passarg = NULL;
BIO *in = NULL, *out = NULL;
const EVP_CIPHER *cipher = NULL;
int outformat;
int text = 0;
EVP_PKEY *pkey = NULL;
EVP_PKEY_CTX *ctx = NULL;
char *pass = NULL;
int badarg = 0;
int ret = 1, rv;
int do_param = 0;
if (bio_err == NULL)
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
if (!load_config(bio_err, NULL))
goto end;
outformat = FORMAT_PEM;
ERR_load_crypto_strings();
OpenSSL_add_all_algorithms();
args = argv + 1;
while (!badarg && *args && *args[0] == '-') {
if (!strcmp(*args, "-outform")) {
if (args[1]) {
args++;
outformat = str2fmt(*args);
} else
badarg = 1;
} else if (!strcmp(*args, "-pass")) {
if (!args[1])
goto bad;
passarg = *(++args);
}
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*args, "-engine") == 0) {
if (!args[1])
goto bad;
e = setup_engine(bio_err, *(++args), 0);
}
#endif
else if (!strcmp(*args, "-paramfile")) {
if (!args[1])
goto bad;
args++;
if (do_param == 1)
goto bad;
if (!init_keygen_file(bio_err, &ctx, *args, e))
goto end;
} else if (!strcmp(*args, "-out")) {
if (args[1]) {
args++;
outfile = *args;
} else
badarg = 1;
} else if (strcmp(*args, "-algorithm") == 0) {
if (!args[1])
goto bad;
if (!init_gen_str(bio_err, &ctx, *(++args), e, do_param))
goto end;
} else if (strcmp(*args, "-pkeyopt") == 0) {
if (!args[1])
goto bad;
if (!ctx) {
BIO_puts(bio_err, "No keytype specified\n");
goto bad;
} else if (pkey_ctrl_string(ctx, *(++args)) <= 0) {
BIO_puts(bio_err, "parameter setting error\n");
ERR_print_errors(bio_err);
goto end;
}
} else if (strcmp(*args, "-genparam") == 0) {
if (ctx)
goto bad;
do_param = 1;
} else if (strcmp(*args, "-text") == 0)
text = 1;
else {
cipher = EVP_get_cipherbyname(*args + 1);
if (!cipher) {
BIO_printf(bio_err, "Unknown cipher %s\n", *args + 1);
badarg = 1;
}
if (do_param == 1)
badarg = 1;
}
args++;
}
if (!ctx)
badarg = 1;
if (badarg) {
bad:
BIO_printf(bio_err, "Usage: genpkey [options]\n");
BIO_printf(bio_err, "where options may be\n");
BIO_printf(bio_err, "-out file output file\n");
BIO_printf(bio_err,
"-outform X output format (DER or PEM)\n");
BIO_printf(bio_err,
"-pass arg output file pass phrase source\n");
BIO_printf(bio_err,
"-<cipher> use cipher <cipher> to encrypt the key\n");
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err,
"-engine e use engine e, possibly a hardware device.\n");
#endif
BIO_printf(bio_err, "-paramfile file parameters file\n");
BIO_printf(bio_err, "-algorithm alg the public key algorithm\n");
BIO_printf(bio_err,
"-pkeyopt opt:value set the public key algorithm option <opt>\n"
" to value <value>\n");
BIO_printf(bio_err,
"-genparam generate parameters, not key\n");
BIO_printf(bio_err, "-text print the in text\n");
BIO_printf(bio_err,
"NB: options order may be important! See the manual page.\n");
goto end;
}
if (!app_passwd(bio_err, passarg, NULL, &pass, NULL)) {
BIO_puts(bio_err, "Error getting password\n");
goto end;
}
if (outfile) {
if (!(out = BIO_new_file(outfile, "wb"))) {
BIO_printf(bio_err, "Can't open output file %s\n", outfile);
goto end;
}
} else {
out = BIO_new_fp(stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS
{
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out);
}
#endif
}
EVP_PKEY_CTX_set_cb(ctx, genpkey_cb);
EVP_PKEY_CTX_set_app_data(ctx, bio_err);
if (do_param) {
if (EVP_PKEY_paramgen(ctx, &pkey) <= 0) {
BIO_puts(bio_err, "Error generating parameters\n");
ERR_print_errors(bio_err);
goto end;
}
} else {
if (EVP_PKEY_keygen(ctx, &pkey) <= 0) {
BIO_puts(bio_err, "Error generating key\n");
ERR_print_errors(bio_err);
goto end;
}
}
if (do_param)
rv = PEM_write_bio_Parameters(out, pkey);
else if (outformat == FORMAT_PEM)
rv = PEM_write_bio_PrivateKey(out, pkey, cipher, NULL, 0, NULL, pass);
else if (outformat == FORMAT_ASN1)
rv = i2d_PrivateKey_bio(out, pkey);
else {
BIO_printf(bio_err, "Bad format specified for key\n");
goto end;
}
if (rv <= 0) {
BIO_puts(bio_err, "Error writing key\n");
ERR_print_errors(bio_err);
}
if (text) {
if (do_param)
rv = EVP_PKEY_print_params(out, pkey, 0, NULL);
else
rv = EVP_PKEY_print_private(out, pkey, 0, NULL);
if (rv <= 0) {
BIO_puts(bio_err, "Error printing key\n");
ERR_print_errors(bio_err);
}
}
ret = 0;
end:
if (pkey)
EVP_PKEY_free(pkey);
if (ctx)
EVP_PKEY_CTX_free(ctx);
if (out)
BIO_free_all(out);
BIO_free(in);
if (pass)
OPENSSL_free(pass);
return ret;
}
static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
const char *file, ENGINE *e)
{
BIO *pbio;
EVP_PKEY *pkey = NULL;
EVP_PKEY_CTX *ctx = NULL;
if (*pctx) {
BIO_puts(err, "Parameters already set!\n");
return 0;
}
pbio = BIO_new_file(file, "r");
if (!pbio) {
BIO_printf(err, "Can't open parameter file %s\n", file);
return 0;
}
pkey = PEM_read_bio_Parameters(pbio, NULL);
BIO_free(pbio);
if (!pkey) {
BIO_printf(bio_err, "Error reading parameter file %s\n", file);
return 0;
}
ctx = EVP_PKEY_CTX_new(pkey, e);
if (!ctx)
goto err;
if (EVP_PKEY_keygen_init(ctx) <= 0)
goto err;
EVP_PKEY_free(pkey);
*pctx = ctx;
return 1;
err:
BIO_puts(err, "Error initializing context\n");
ERR_print_errors(err);
if (ctx)
EVP_PKEY_CTX_free(ctx);
if (pkey)
EVP_PKEY_free(pkey);
return 0;
}
int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
const char *algname, ENGINE *e, int do_param)
{
EVP_PKEY_CTX *ctx = NULL;
const EVP_PKEY_ASN1_METHOD *ameth;
ENGINE *tmpeng = NULL;
int pkey_id;
if (*pctx) {
BIO_puts(err, "Algorithm already set!\n");
return 0;
}
ameth = EVP_PKEY_asn1_find_str(&tmpeng, algname, -1);
#ifndef OPENSSL_NO_ENGINE
if (!ameth && e)
ameth = ENGINE_get_pkey_asn1_meth_str(e, algname, -1);
#endif
if (!ameth) {
BIO_printf(bio_err, "Algorithm %s not found\n", algname);
return 0;
}
ERR_clear_error();
EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth);
#ifndef OPENSSL_NO_ENGINE
if (tmpeng)
ENGINE_finish(tmpeng);
#endif
ctx = EVP_PKEY_CTX_new_id(pkey_id, e);
if (!ctx)
goto err;
if (do_param) {
if (EVP_PKEY_paramgen_init(ctx) <= 0)
goto err;
} else {
if (EVP_PKEY_keygen_init(ctx) <= 0)
goto err;
}
*pctx = ctx;
return 1;
err:
BIO_printf(err, "Error initializing %s context\n", algname);
ERR_print_errors(err);
if (ctx)
EVP_PKEY_CTX_free(ctx);
return 0;
}
static int genpkey_cb(EVP_PKEY_CTX *ctx)
{
char c = '*';
BIO *b = EVP_PKEY_CTX_get_app_data(ctx);
int p;
p = EVP_PKEY_CTX_get_keygen_info(ctx, 0);
if (p == 0)
c = '.';
if (p == 1)
c = '+';
if (p == 2)
c = '*';
if (p == 3)
c = '\n';
BIO_write(b, &c, 1);
(void)BIO_flush(b);
#ifdef LINT
p = n;
#endif
return 1;
}

View File

@ -5,21 +5,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
@ -57,294 +57,285 @@
*/ */
#include <openssl/opensslconf.h> #include <openssl/opensslconf.h>
/* /* Until the key-gen callbacks are modified to use newer prototypes, we allow
* Until the key-gen callbacks are modified to use newer prototypes, we allow * deprecated functions for openssl-internal code */
* deprecated functions for openssl-internal code
*/
#ifdef OPENSSL_NO_DEPRECATED #ifdef OPENSSL_NO_DEPRECATED
# undef OPENSSL_NO_DEPRECATED #undef OPENSSL_NO_DEPRECATED
#endif #endif
#ifndef OPENSSL_NO_RSA #ifndef OPENSSL_NO_RSA
# include <stdio.h> #include <stdio.h>
# include <string.h> #include <string.h>
# include <sys/types.h> #include <sys/types.h>
# include <sys/stat.h> #include <sys/stat.h>
# include "apps.h" #include "apps.h"
# include <openssl/bio.h> #include <openssl/bio.h>
# include <openssl/err.h> #include <openssl/err.h>
# include <openssl/bn.h> #include <openssl/bn.h>
# include <openssl/rsa.h> #include <openssl/rsa.h>
# 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> #include <openssl/rand.h>
# define DEFBITS 1024 #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 int MS_CALLBACK genrsa_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)
{ {
BN_GENCB cb; BN_GENCB cb;
# ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
ENGINE *e = NULL; ENGINE *e = NULL;
# endif #endif
int ret = 1; int ret=1;
int i, num = DEFBITS; int i,num=DEFBITS;
long l; long l;
const EVP_CIPHER *enc = NULL; int use_x931 = 0;
unsigned long f4 = RSA_F4; const EVP_CIPHER *enc=NULL;
char *outfile = NULL; unsigned long f4=RSA_F4;
char *passargout = NULL, *passout = NULL; char *outfile=NULL;
# ifndef OPENSSL_NO_ENGINE char *passargout = NULL, *passout = NULL;
char *engine = NULL; #ifndef OPENSSL_NO_ENGINE
# endif char *engine=NULL;
char *inrand = NULL; #endif
BIO *out = NULL; char *inrand=NULL;
BIGNUM *bn = BN_new(); BIO *out=NULL;
RSA *rsa = NULL; BIGNUM *bn = BN_new();
RSA *rsa = RSA_new();
if (!bn) if(!bn || !rsa) goto err;
goto err;
apps_startup(); apps_startup();
BN_GENCB_set(&cb, genrsa_cb, bio_err); 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)) if (!load_config(bio_err, NULL))
goto err; 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"); {
goto err; BIO_printf(bio_err,"unable to create BIO for output\n");
} goto err;
}
argv++; argv++;
argc--; argc--;
for (;;) { for (;;)
if (argc <= 0) {
break; if (argc <= 0) break;
if (strcmp(*argv, "-out") == 0) { if (strcmp(*argv,"-out") == 0)
if (--argc < 1) {
goto bad; if (--argc < 1) goto bad;
outfile = *(++argv); outfile= *(++argv);
} else if (strcmp(*argv, "-3") == 0) }
f4 = 3; else if (strcmp(*argv,"-3") == 0)
else if (strcmp(*argv, "-F4") == 0 || strcmp(*argv, "-f4") == 0) f4=3;
f4 = RSA_F4; else if (strcmp(*argv,"-F4") == 0 || strcmp(*argv,"-f4") == 0)
# ifndef OPENSSL_NO_ENGINE f4=RSA_F4;
else if (strcmp(*argv, "-engine") == 0) { else if (strcmp(*argv,"-x931") == 0)
if (--argc < 1) use_x931 = 1;
goto bad; #ifndef OPENSSL_NO_ENGINE
engine = *(++argv); else if (strcmp(*argv,"-engine") == 0)
} {
# endif if (--argc < 1) goto bad;
else if (strcmp(*argv, "-rand") == 0) { engine= *(++argv);
if (--argc < 1) }
goto bad; #endif
inrand = *(++argv); else if (strcmp(*argv,"-rand") == 0)
} {
# ifndef OPENSSL_NO_DES if (--argc < 1) goto bad;
else if (strcmp(*argv, "-des") == 0) inrand= *(++argv);
enc = EVP_des_cbc(); }
else if (strcmp(*argv, "-des3") == 0) #ifndef OPENSSL_NO_DES
enc = EVP_des_ede3_cbc(); else if (strcmp(*argv,"-des") == 0)
# endif enc=EVP_des_cbc();
# ifndef OPENSSL_NO_IDEA else if (strcmp(*argv,"-des3") == 0)
else if (strcmp(*argv, "-idea") == 0) enc=EVP_des_ede3_cbc();
enc = EVP_idea_cbc(); #endif
# endif #ifndef OPENSSL_NO_IDEA
# ifndef OPENSSL_NO_SEED else if (strcmp(*argv,"-idea") == 0)
else if (strcmp(*argv, "-seed") == 0) enc=EVP_idea_cbc();
enc = EVP_seed_cbc(); #endif
# endif #ifndef OPENSSL_NO_SEED
# ifndef OPENSSL_NO_AES else if (strcmp(*argv,"-seed") == 0)
else if (strcmp(*argv, "-aes128") == 0) enc=EVP_seed_cbc();
enc = EVP_aes_128_cbc(); #endif
else if (strcmp(*argv, "-aes192") == 0) #ifndef OPENSSL_NO_AES
enc = EVP_aes_192_cbc(); else if (strcmp(*argv,"-aes128") == 0)
else if (strcmp(*argv, "-aes256") == 0) enc=EVP_aes_128_cbc();
enc = EVP_aes_256_cbc(); else if (strcmp(*argv,"-aes192") == 0)
# endif enc=EVP_aes_192_cbc();
# ifndef OPENSSL_NO_CAMELLIA else if (strcmp(*argv,"-aes256") == 0)
else if (strcmp(*argv, "-camellia128") == 0) enc=EVP_aes_256_cbc();
enc = EVP_camellia_128_cbc(); #endif
else if (strcmp(*argv, "-camellia192") == 0) #ifndef OPENSSL_NO_CAMELLIA
enc = EVP_camellia_192_cbc(); else if (strcmp(*argv,"-camellia128") == 0)
else if (strcmp(*argv, "-camellia256") == 0) enc=EVP_camellia_128_cbc();
enc = EVP_camellia_256_cbc(); else if (strcmp(*argv,"-camellia192") == 0)
# endif enc=EVP_camellia_192_cbc();
else if (strcmp(*argv, "-passout") == 0) { else if (strcmp(*argv,"-camellia256") == 0)
if (--argc < 1) enc=EVP_camellia_256_cbc();
goto bad; #endif
passargout = *(++argv); else if (strcmp(*argv,"-passout") == 0)
} else {
break; if (--argc < 1) goto bad;
argv++; passargout= *(++argv);
argc--; }
} else
if ((argc >= 1) && ((sscanf(*argv, "%d", &num) == 0) || (num < 0))) { break;
bad: argv++;
BIO_printf(bio_err, "usage: genrsa [args] [numbits]\n"); argc--;
BIO_printf(bio_err, }
" -des encrypt the generated key with DES in cbc mode\n"); if ((argc >= 1) && ((sscanf(*argv,"%d",&num) == 0) || (num < 0)))
BIO_printf(bio_err, {
" -des3 encrypt the generated key with DES in ede cbc mode (168 bit key)\n"); bad:
# ifndef OPENSSL_NO_IDEA BIO_printf(bio_err,"usage: genrsa [args] [numbits]\n");
BIO_printf(bio_err, BIO_printf(bio_err," -des encrypt the generated key with DES in cbc mode\n");
" -idea encrypt the generated key with IDEA in cbc mode\n"); BIO_printf(bio_err," -des3 encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
# endif #ifndef OPENSSL_NO_IDEA
# ifndef OPENSSL_NO_SEED BIO_printf(bio_err," -idea encrypt the generated key with IDEA in cbc mode\n");
BIO_printf(bio_err, " -seed\n"); #endif
BIO_printf(bio_err, #ifndef OPENSSL_NO_SEED
" encrypt PEM output with cbc seed\n"); BIO_printf(bio_err," -seed\n");
# endif BIO_printf(bio_err," encrypt PEM output with cbc seed\n");
# ifndef OPENSSL_NO_AES #endif
BIO_printf(bio_err, " -aes128, -aes192, -aes256\n"); #ifndef OPENSSL_NO_AES
BIO_printf(bio_err, BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
" encrypt PEM output with cbc aes\n"); BIO_printf(bio_err," encrypt PEM output with cbc aes\n");
# endif #endif
# ifndef OPENSSL_NO_CAMELLIA #ifndef OPENSSL_NO_CAMELLIA
BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n"); BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
BIO_printf(bio_err, BIO_printf(bio_err," encrypt PEM output with cbc camellia\n");
" 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, BIO_printf(bio_err," -f4 use F4 (0x10001) for the E value\n");
" -passout arg output file pass phrase source\n"); BIO_printf(bio_err," -3 use 3 for the E value\n");
BIO_printf(bio_err, #ifndef OPENSSL_NO_ENGINE
" -f4 use F4 (0x10001) for the E value\n"); BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
BIO_printf(bio_err, " -3 use 3 for the E value\n"); #endif
# ifndef OPENSSL_NO_ENGINE BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
BIO_printf(bio_err, BIO_printf(bio_err," load the file (or the files in the directory) into\n");
" -engine e use engine e, possibly a hardware device.\n"); BIO_printf(bio_err," the random number generator\n");
# endif goto err;
BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, }
LIST_SEPARATOR_CHAR);
BIO_printf(bio_err, ERR_load_crypto_strings();
" load the file (or the files in the directory) into\n");
BIO_printf(bio_err, " the random number generator\n");
goto err;
}
ERR_load_crypto_strings(); if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
BIO_printf(bio_err, "Error getting password\n");
goto err;
}
if (!app_passwd(bio_err, NULL, passargout, NULL, &passout)) { #ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err, "Error getting password\n"); e = setup_engine(bio_err, engine, 0);
goto err; #endif
}
# 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); {
# ifdef OPENSSL_SYS_VMS BIO_set_fp(out,stdout,BIO_NOCLOSE);
{ #ifdef OPENSSL_SYS_VMS
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); {
out = BIO_push(tmpbio, out); BIO *tmpbio = BIO_new(BIO_f_linebuffer());
} out = BIO_push(tmpbio, out);
# endif }
} else { #endif
if (BIO_write_filename(out, outfile) <= 0) { }
perror(outfile); else
goto err; {
} if (BIO_write_filename(out,outfile) <= 0)
} {
perror(outfile);
goto err;
}
}
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())
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");
} }
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));
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);
# ifdef OPENSSL_NO_ENGINE
rsa = RSA_new();
# else
rsa = RSA_new_method(e);
# endif
if (!rsa)
goto err;
if (!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, &cb)) if (use_x931)
goto err; {
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); /* We need to do the following for when the base number size is <
* long, esp windows 3.1 :-(. */
l=0L;
for (i=0; i<rsa->e->top; i++)
{
#ifndef SIXTY_FOUR_BIT
l<<=BN_BITS4;
l<<=BN_BITS4;
#endif
l+=rsa->e->d[i];
}
BIO_printf(bio_err,"e is %ld (0x%lX)\n",l,l);
{
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;
}
/* ret=0;
* We need to do the following for when the base number size is < long, err:
* esp windows 3.1 :-(. if (bn) BN_free(bn);
*/ if (rsa) RSA_free(rsa);
l = 0L; if (out) BIO_free_all(out);
for (i = 0; i < rsa->e->top; i++) { if(passout) OPENSSL_free(passout);
# ifndef SIXTY_FOUR_BIT if (ret != 0)
l <<= BN_BITS4; ERR_print_errors(bio_err);
l <<= BN_BITS4; apps_shutdown();
# endif OPENSSL_EXIT(ret);
l += rsa->e->d[i]; }
}
BIO_printf(bio_err, "e is %ld (0x%lX)\n", l, l);
{
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;
}
ret = 0;
err:
if (bn)
BN_free(bn);
if (rsa)
RSA_free(rsa);
if (out)
BIO_free_all(out);
if (passout)
OPENSSL_free(passout);
if (ret != 0)
ERR_print_errors(bio_err);
apps_shutdown();
OPENSSL_EXIT(ret);
}
static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb) static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb)
{ {
char c = '*'; char c='*';
if (p == 0) if (p == 0) c='.';
c = '.'; if (p == 1) c='+';
if (p == 1) if (p == 2) c='*';
c = '+'; if (p == 3) c='\n';
if (p == 2) BIO_write(cb->arg,&c,1);
c = '*'; (void)BIO_flush(cb->arg);
if (p == 3) #ifdef LINT
c = '\n'; p=n;
BIO_write(cb->arg, &c, 1); #endif
(void)BIO_flush(cb->arg); return 1;
# ifdef LINT }
p = n; #else /* !OPENSSL_NO_RSA */
# endif
return 1;
}
#else /* !OPENSSL_NO_RSA */
# if PEDANTIC # if PEDANTIC
static void *dummy = &dummy; static void *dummy=&dummy;
# endif # endif
#endif #endif

View File

@ -1,107 +0,0 @@
$! INSTALL.COM -- Installs the files in a given directory tree
$!
$! Author: Richard Levitte <richard@levitte.org>
$! Time of creation: 22-MAY-1998 10:13
$!
$! P1 root of the directory tree
$! P2 "64" for 64-bit pointers.
$!
$!
$! Announce/identify.
$!
$ proc = f$environment( "procedure")
$ write sys$output "@@@ "+ -
f$parse( proc, , , "name")+ f$parse( proc, , , "type")
$!
$ on error then goto tidy
$ on control_c then goto tidy
$!
$ if (p1 .eqs. "")
$ then
$ write sys$output "First argument missing."
$ write sys$output -
"It should be the directory where you want things installed."
$ exit
$ endif
$!
$ if (f$getsyi("cpu") .lt. 128)
$ then
$ arch = "VAX"
$ else
$ arch = f$edit( f$getsyi( "arch_name"), "upcase")
$ if (arch .eqs. "") then arch = "UNK"
$ endif
$!
$ archd = arch
$!
$ if (p2 .nes. "")
$ then
$ if (p2 .eqs. "64")
$ then
$ archd = arch+ "_64"
$ else
$ if (p2 .nes. "32")
$ then
$ write sys$output "Second argument invalid."
$ write sys$output "It should be "32", "64", or nothing."
$ exit
$ endif
$ endif
$ endif
$!
$ root = f$parse( p1, "[]A.;0", , , "syntax_only, no_conceal") - "A.;0"
$ root_dev = f$parse(root,,,"device","syntax_only")
$ root_dir = f$parse(root,,,"directory","syntax_only") - -
"[000000." - "][" - "[" - "]"
$ root = root_dev + "[" + root_dir
$!
$ define /nolog wrk_sslroot 'root'.] /trans=conc
$ define /nolog wrk_sslxexe wrk_sslroot:['archd'_exe]
$!
$ if f$parse("wrk_sslroot:[000000]") .eqs. "" then -
create /directory /log wrk_sslroot:[000000]
$ if f$parse("wrk_sslxexe:") .eqs. "" then -
create /directory /log wrk_sslxexe:
$!
$ exe := openssl
$!
$ exe_dir := [-.'archd'.exe.apps]
$!
$! Executables.
$!
$ i = 0
$ loop_exe:
$ e = f$edit(f$element( i, ",", exe), "trim")
$ i = i + 1
$ if e .eqs. "," then goto loop_exe_end
$ set noon
$ file = exe_dir+ e+ ".exe"
$ if f$search( file) .nes. ""
$ then
$ copy /protection = w:re 'file' wrk_sslxexe: /log
$ endif
$ set on
$ goto loop_exe
$ loop_exe_end:
$!
$! Miscellaneous.
$!
$ set noon
$ copy /protection = w:re ca.com wrk_sslxexe:ca.com /log
$ copy /protection = w:re openssl-vms.cnf wrk_sslroot:[000000]openssl.cnf /log
$ set on
$!
$ tidy:
$!
$ call deass wrk_sslroot
$ call deass wrk_sslxexe
$!
$ exit
$!
$ deass: subroutine
$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
$ then
$ deassign /process 'p1'
$ endif
$ endsubroutine
$!

69
apps/install.com Normal file
View File

@ -0,0 +1,69 @@
$! INSTALL.COM -- Installs the files in a given directory tree
$!
$! Author: Richard Levitte <richard@levitte.org>
$! Time of creation: 22-MAY-1998 10:13
$!
$! P1 root of the directory tree
$!
$ IF P1 .EQS. ""
$ THEN
$ WRITE SYS$OUTPUT "First argument missing."
$ WRITE SYS$OUTPUT "Should be the directory where you want things installed."
$ EXIT
$ ENDIF
$
$ ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
$ ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
$ ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
- "[000000." - "][" - "[" - "]"
$ ROOT = ROOT_DEV + "[" + ROOT_DIR
$
$ DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
$ DEFINE/NOLOG WRK_SSLVEXE WRK_SSLROOT:[VAX_EXE]
$ DEFINE/NOLOG WRK_SSLAEXE WRK_SSLROOT:[ALPHA_EXE]
$ DEFINE/NOLOG WRK_SSLLIB WRK_SSLROOT:[LIB]
$
$ IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
CREATE/DIR/LOG WRK_SSLROOT:[000000]
$ IF F$PARSE("WRK_SSLVEXE:") .EQS. "" THEN -
CREATE/DIR/LOG WRK_SSLVEXE:
$ IF F$PARSE("WRK_SSLAEXE:") .EQS. "" THEN -
CREATE/DIR/LOG WRK_SSLAEXE:
$ IF F$PARSE("WRK_SSLLIB:") .EQS. "" THEN -
CREATE/DIR/LOG WRK_SSLLIB:
$
$ EXE := openssl
$
$ VEXE_DIR := [-.VAX.EXE.APPS]
$ AEXE_DIR := [-.AXP.EXE.APPS]
$
$ I = 0
$ LOOP_EXE:
$ E = F$EDIT(F$ELEMENT(I, ",", EXE),"TRIM")
$ I = I + 1
$ IF E .EQS. "," THEN GOTO LOOP_EXE_END
$ SET NOON
$ IF F$SEARCH(VEXE_DIR+E+".EXE") .NES. ""
$ THEN
$ COPY 'VEXE_DIR''E'.EXE WRK_SSLVEXE:'E'.EXE/log
$ SET FILE/PROT=W:RE WRK_SSLVEXE:'E'.EXE
$ ENDIF
$ IF F$SEARCH(AEXE_DIR+E+".EXE") .NES. ""
$ THEN
$ COPY 'AEXE_DIR''E'.EXE WRK_SSLAEXE:'E'.EXE/log
$ SET FILE/PROT=W:RE WRK_SSLAEXE:'E'.EXE
$ ENDIF
$ SET ON
$ GOTO LOOP_EXE
$ LOOP_EXE_END:
$
$ SET NOON
$ COPY CA.COM WRK_SSLAEXE:CA.COM/LOG
$ SET FILE/PROT=W:RE WRK_SSLAEXE:CA.COM
$ COPY CA.COM WRK_SSLVEXE:CA.COM/LOG
$ SET FILE/PROT=W:RE WRK_SSLVEXE:CA.COM
$ COPY OPENSSL-VMS.CNF WRK_SSLROOT:[000000]OPENSSL.CNF/LOG
$ SET FILE/PROT=W:R WRK_SSLROOT:[000000]OPENSSL.CNF
$ SET ON
$
$ EXIT

View File

@ -6,12 +6,11 @@ $! A-Com Computing, Inc.
$! byer@mail.all-net.net $! byer@mail.all-net.net
$! $!
$! Changes by Richard Levitte <richard@levitte.org> $! Changes by Richard Levitte <richard@levitte.org>
$! Zoltan Arpadffy <zoli@polarhome.com>
$! $!
$! This command files compiles and creates all the various different $! This command files compiles and creates all the various different
$! "application" programs for the different types of encryption for OpenSSL. $! "application" programs for the different types of encryption for OpenSSL.
$! The EXE's are placed in the directory [.xxx.EXE.APPS] where "xxx" denotes $! The EXE's are placed in the directory [.xxx.EXE.APPS] where "xxx" denotes
$! ALPHA, IA64 or VAX, depending on your machine architecture. $! either AXP or VAX depending on your machine architecture.
$! $!
$! 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.
@ -25,7 +24,7 @@ $! VAXC For VAX C.
$! DECC For DEC C. $! DECC For DEC C.
$! GNUC For GNU C. $! GNUC For GNU C.
$! $!
$! If you don't specify 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 $! P3, if defined, sets a TCP/IP library to use, through one of the following
@ -39,105 +38,64 @@ $! P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
$! $!
$! P5, if defined, sets a choice of programs to compile. $! P5, if defined, sets a choice of programs to compile.
$! $!
$! P6, if defined, specifies the C pointer size. Ignored on VAX.
$! ("64=ARGV" gives more efficient code with HP C V7.3 or newer.)
$! Supported values are:
$!
$! "" Compile with default (/NOPOINTER_SIZE)
$! 32 Compile with /POINTER_SIZE=32 (SHORT)
$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV])
$! (Automatically select ARGV if compiler supports it.)
$! 64= Compile with /POINTER_SIZE=64 (LONG).
$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV).
$!
$! P7, if defined, specifies a directory where ZLIB files (zlib.h,
$! libz.olb) may be found. Optionally, a non-default object library
$! name may be included ("dev:[dir]libz_64.olb", for example).
$!
$!
$! Announce/identify.
$!
$ proc = f$environment( "procedure")
$ write sys$output "@@@ "+ -
f$parse( proc, , , "name")+ f$parse( proc, , , "type")
$!
$ on control_c then goto exit
$! $!
$! Define A TCP/IP Library That We Will Need To Link To. $! Define A TCP/IP Library That We Will Need To Link To.
$! (That Is, If We Need To Link To One.) $! (That Is, If We Need To Link To One.)
$! $!
$ TCPIP_LIB = "" $ TCPIP_LIB = ""
$ ZLIB_LIB = ""
$! $!
$! Check What Architecture We Are Using. $! Check What Architecture We Are Using.
$! $!
$ IF (F$GETSYI("CPU").LT.128) $ IF (F$GETSYI("CPU").GE.128)
$ THEN $ THEN
$! $!
$! The Architecture Is VAX. $! The Architecture Is AXP.
$! $!
$ ARCH = "VAX" $ ARCH := AXP
$! $!
$! Else... $! Else...
$! $!
$ ELSE $ ELSE
$! $!
$! The Architecture Is Alpha, IA64 or whatever comes in the future. $! The Architecture Is VAX.
$! $!
$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE") $ ARCH := VAX
$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
$! $!
$! End The Architecture Check. $! End The Architecture Check.
$! $!
$ ENDIF $ ENDIF
$! $!
$ ARCHD = ARCH
$ LIB32 = "32"
$ OPT_FILE = ""
$ POINTER_SIZE = ""
$!
$! Define what programs should be compiled $! Define what programs should be compiled
$! $!
$ PROGRAMS := OPENSSL $ PROGRAMS := OPENSSL
$!$ PROGRAMS := VERIFY,ASN1PARS,REQ,DGST,DH,ENC,PASSWD,GENDH,ERRSTR,CA,CRL,-
$! RSA,DSA,DSAPARAM,-
$! X509,GENRSA,GENDSA,S_SERVER,S_CLIENT,SPEED,-
$! S_TIME,VERSION,PKCS7,CRL2P7,SESS_ID,CIPHERS,NSEQ,
$! $!
$! Check To Make Sure We Have Valid Command Line Parameters. $! Check To Make Sure We Have Valid Command Line Parameters.
$! $!
$ GOSUB CHECK_OPTIONS $ GOSUB CHECK_OPTIONS
$! $!
$! Define The CRYPTO Library.
$!
$ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB
$!
$! Define The SSL Library.
$!
$ SSL_LIB := SYS$DISK:[-.'ARCHD'.EXE.SSL]SSL_LIBSSL'LIB32'.OLB
$!
$! Define The OBJ and EXE Directories.
$!
$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.APPS]
$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.APPS]
$!
$! Specify the destination directory in any /MAP option.
$!
$ if (LINKMAP .eqs. "MAP")
$ then
$ LINKMAP = LINKMAP+ "=''EXE_DIR'"
$ endif
$!
$! Add the location prefix to the linker options file name.
$!
$ if (OPT_FILE .nes. "")
$ then
$ OPT_FILE = EXE_DIR+ OPT_FILE
$ endif
$!
$! Initialise logical names and such $! Initialise logical names and such
$! $!
$ GOSUB INITIALISE $ GOSUB INITIALISE
$! $!
$! Tell The User What Kind of Machine We Run On. $! Tell The User What Kind of Machine We Run On.
$! $!
$ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'" $ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine."
$!
$! Define The CRYPTO Library.
$!
$ CRYPTO_LIB := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]LIBCRYPTO.OLB
$!
$! Define The SSL Library.
$!
$ SSL_LIB := SYS$DISK:[-.'ARCH'.EXE.SSL]LIBSSL.OLB
$!
$! Define The OBJ Directory.
$!
$ OBJ_DIR := SYS$DISK:[-.'ARCH'.OBJ.APPS]
$! $!
$! Check To See If The OBJ Directory Exists. $! Check To See If The OBJ Directory Exists.
$! $!
@ -152,6 +110,10 @@ $! End The OBJ Directory Check.
$! $!
$ ENDIF $ ENDIF
$! $!
$! Define The EXE Directory.
$!
$ EXE_DIR := SYS$DISK:[-.'ARCH'.EXE.APPS]
$!
$! Check To See If The EXE Directory Exists. $! Check To See If The EXE Directory Exists.
$! $!
$ IF (F$PARSE(EXE_DIR).EQS."") $ IF (F$PARSE(EXE_DIR).EQS."")
@ -174,184 +136,165 @@ $!
$ GOSUB CHECK_OPT_FILE $ GOSUB CHECK_OPT_FILE
$! $!
$! Define The Application Files. $! Define The Application Files.
$! NOTE: Some might think this list ugly. However, it's made this way to
$! reflect the E_OBJ variable in Makefile as closely as possible, thereby
$! making it fairly easy to verify that the lists are the same.
$!
$ LIB_OPENSSL = "VERIFY,ASN1PARS,REQ,DGST,DH,DHPARAM,ENC,PASSWD,GENDH,ERRSTR,"+-
"CA,PKCS7,CRL2P7,CRL,"+-
"RSA,RSAUTL,DSA,DSAPARAM,EC,ECPARAM,"+-
"X509,GENRSA,GENDSA,GENPKEY,S_SERVER,S_CLIENT,SPEED,"+-
"S_TIME,APPS,S_CB,S_SOCKET,APP_RAND,VERSION,SESS_ID,"+-
"CIPHERS,NSEQ,PKCS12,PKCS8,PKEY,PKEYPARAM,PKEYUTL,"+ -
"SPKAC,SMIME,CMS,RAND,ENGINE,OCSP,PRIME,TS,SRP"
$!
$ LIB_OPENSSL = LIB_OPENSSL+ ",VMS_DECC_INIT"
$! $!
$ LIB_FILES = "VERIFY;ASN1PARS;REQ;DGST;DH;DHPARAM;ENC;PASSWD;GENDH;ERRSTR;"+-
"CA;PKCS7;CRL2P7;CRL;"+-
"RSA;RSAUTL;DSA;DSAPARAM;EC;ECPARAM;"+-
"X509;GENRSA;GENDSA;S_SERVER;S_CLIENT;SPEED;"+-
"S_TIME;APPS;S_CB;S_SOCKET;APP_RAND;VERSION;SESS_ID;"+-
"CIPHERS;NSEQ;PKCS12;PKCS8;SPKAC;SMIME;RAND;ENGINE;OCSP;PRIME"
$ TCPIP_PROGRAMS = ",," $ TCPIP_PROGRAMS = ",,"
$ IF COMPILER .EQS. "VAXC" THEN - $ IF COMPILER .EQS. "VAXC" THEN -
TCPIP_PROGRAMS = ",OPENSSL," TCPIP_PROGRAMS = ",OPENSSL,"
$! $!
$! Setup exceptional compilations $! Setup exceptional compilations
$! $!
$ COMPILEWITH_CC2 = ",S_SOCKET,S_SERVER,S_CLIENT," $ COMPILEWITH_CC2 = ",S_SERVER,S_CLIENT,"
$! $!
$ PHASE := LIB $ PHASE := LIB
$! $!
$ RESTART: $ RESTART:
$! $!
$! Define An App Counter And Set It To "0". $! Define A File Counter And Set It To "0".
$! $!
$ APP_COUNTER = 0 $ FILE_COUNTER = 0
$! $!
$! Top Of The App Loop. $! Top Of The File Loop.
$! $!
$ NEXT_APP: $ NEXT_FILE:
$! $!
$! Make The Application File Name $! O.K, Extract The File Name From The File List.
$! $!
$ CURRENT_APP = F$EDIT(F$ELEMENT(APP_COUNTER,",",PROGRAMS),"TRIM") $ FILE_NAME0 = F$EDIT(F$ELEMENT(FILE_COUNTER,";",'PHASE'_FILES),"TRIM")
$ FILE_NAME = F$EDIT(F$ELEMENT(0,",",FILE_NAME0),"TRIM")
$ EXTRA_OBJ = FILE_NAME0 - FILE_NAME
$! $!
$! Create The Executable File Name. $! Check To See If We Are At The End Of The File List.
$! $!
$ EXE_FILE = EXE_DIR + CURRENT_APP + ".EXE" $ IF (FILE_NAME0.EQS.";")
$!
$! Check To See If We Are At The End Of The File List.
$!
$ IF (CURRENT_APP.EQS.",")
$ THEN $ THEN
$ IF (PHASE.EQS."LIB") $ IF (PHASE.EQS."LIB")
$ THEN $ THEN
$ PHASE := APP $ PHASE := APP
$ GOTO RESTART $ GOTO RESTART
$ ELSE $ ELSE
$ GOTO APP_DONE $ GOTO FILE_DONE
$ ENDIF $ ENDIF
$ ENDIF $ ENDIF
$! $!
$! Increment The Counter. $! Increment The Counter.
$! $!
$ APP_COUNTER = APP_COUNTER + 1 $ FILE_COUNTER = FILE_COUNTER + 1
$! $!
$! Decide if we're building the object files or not. $! Check to see if this program should actually be compiled
$!
$ IF PHASE .EQS. "APP" .AND. -
","+PROGRAMS+"," - (","+F$EDIT(FILE_NAME,"UPCASE")+",") .EQS. ","+PROGRAMS+","
$ THEN
$ GOTO NEXT_FILE
$ ENDIF
$!
$! Create The Source File Name.
$!
$ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C"
$!
$! Create The Object File Name.
$!
$ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
$!
$! Create The Executable File Name.
$!
$ EXE_FILE = EXE_DIR + FILE_NAME + ".EXE"
$ ON WARNING THEN GOTO NEXT_FILE
$!
$! Check To See If The File We Want To Compile Actually Exists.
$!
$ IF (F$SEARCH(SOURCE_FILE).EQS."")
$ THEN
$!
$! Tell The User That The File Dosen't Exist.
$!
$ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
$ WRITE SYS$OUTPUT ""
$!
$! Exit The Build.
$!
$ GOTO EXIT
$!
$! End The File Exist Check.
$!
$ ENDIF
$!
$! Tell The User What We Are Building.
$! $!
$ IF (PHASE.EQS."LIB") $ IF (PHASE.EQS."LIB")
$ THEN $ THEN
$ WRITE SYS$OUTPUT "Compiling The ",FILE_NAME,".C File."
$ ELSE
$ WRITE SYS$OUTPUT "Building The ",FILE_NAME," Application Program."
$ ENDIF
$! $!
$! Define A Library File Counter And Set It To "-1". $! Compile The File.
$! -1 Means The Application File Name Is To Be Used.
$! $!
$ LIB_COUNTER = -1 $ ON ERROR THEN GOTO NEXT_FILE
$ IF COMPILEWITH_CC2 - FILE_NAME .NES. COMPILEWITH_CC2
$ THEN
$ CC2/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
$ ELSE
$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
$ ENDIF
$! $!
$! Create a .OPT file for the object files $ ON WARNING THEN GOTO NEXT_FILE
$! $!
$ OPEN /WRITE OBJECTS 'EXE_DIR''CURRENT_APP'.OPT $ IF (PHASE.EQS."LIB")
$! $ THEN
$! Top Of The File Loop. $ GOTO NEXT_FILE
$!
$ NEXT_LIB:
$!
$! O.K, Extract The File Name From The File List.
$!
$ IF LIB_COUNTER .GE. 0
$ THEN
$ FILE_NAME = F$EDIT(F$ELEMENT(LIB_COUNTER,",",LIB_'CURRENT_APP'),"TRIM")
$ ELSE
$ FILE_NAME = CURRENT_APP
$ ENDIF
$!
$! Check To See If We Are At The End Of The File List.
$!
$ IF (FILE_NAME.EQS.",")
$ THEN
$ CLOSE OBJECTS
$ GOTO NEXT_APP
$ ENDIF
$!
$! Increment The Counter.
$!
$ LIB_COUNTER = LIB_COUNTER + 1
$!
$! Create The Source File Name.
$!
$ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C"
$!
$! Create The Object File Name.
$!
$ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
$ ON WARNING THEN GOTO NEXT_LIB
$!
$! Check To See If The File We Want To Compile Actually Exists.
$!
$ IF (F$SEARCH(SOURCE_FILE).EQS."")
$ THEN
$!
$! Tell The User That The File Dosen't Exist.
$!
$ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
$ WRITE SYS$OUTPUT ""
$!
$! Exit The Build.
$!
$ GOTO EXIT
$!
$! End The File Exist Check.
$!
$ ENDIF
$!
$! Tell The User What We Are Building.
$!
$ IF (PHASE.EQS."LIB")
$ THEN
$ WRITE SYS$OUTPUT "Compiling The ",FILE_NAME,".C File."
$ ELSE
$ WRITE SYS$OUTPUT "Building The ",FILE_NAME," Application Program."
$ ENDIF
$!
$! Compile The File.
$!
$ ON ERROR THEN GOTO NEXT_LIB
$ IF COMPILEWITH_CC2 - FILE_NAME .NES. COMPILEWITH_CC2
$ THEN
$ CC2/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
$ ELSE
$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
$ ENDIF
$ WRITE OBJECTS OBJECT_FILE
$!
$ GOTO NEXT_LIB
$ ENDIF $ ENDIF
$! $!
$! Check if this program works well without a TCPIP library $! Check if this program works well without a TCPIP library
$! $!
$ IF TCPIP_LIB .EQS. "" .AND. TCPIP_PROGRAMS - CURRENT_APP .NES. TCPIP_PROGRAMS $ IF TCPIP_LIB .EQS. "" .AND. TCPIP_PROGRAMS - FILE_NAME .NES. TCPIP_PROGRAMS
$ THEN $ THEN
$ WRITE SYS$OUTPUT CURRENT_APP," needs a TCP/IP library. Can't link. Skipping..." $ WRITE SYS$OUTPUT FILE_NAME," needs a TCP/IP library. Can't link. Skipping..."
$ GOTO NEXT_APP $ GOTO NEXT_FILE
$ ENDIF $ ENDIF
$! $!
$! Link The Program. $! Link The Program.
$! Check To See If We Are To Link With A Specific TCP/IP Library.
$! $!
$ ON WARNING THEN GOTO NEXT_APP $ IF (TCPIP_LIB.NES."")
$ THEN
$! $!
$! Don't Link With The RSAREF Routines And TCP/IP Library. $! Don't Link With The RSAREF Routines And TCP/IP Library.
$! $!
$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' /EXE='EXE_FILE' - $ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
'EXE_DIR''CURRENT_APP'.OPT /OPTIONS, - 'OBJECT_FILE''EXTRA_OBJ', -
'SSL_LIB' /LIBRARY, - 'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
'CRYPTO_LIB' /LIBRARY - 'TCPIP_LIB','OPT_FILE'/OPTION
'TCPIP_LIB' - $!
'ZLIB_LIB' - $! Else...
,'OPT_FILE' /OPTIONS $!
$ 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
$! $!
$! Go Back And Do It Again. $! Go Back And Do It Again.
$! $!
$ GOTO NEXT_APP $ GOTO NEXT_FILE
$! $!
$! All Done With This File. $! All Done With This File.
$! $!
$ APP_DONE: $ FILE_DONE:
$ EXIT: $ EXIT:
$! $!
$! All Done, Time To Clean Up And Exit. $! All Done, Time To Clean Up And Exit.
@ -378,7 +321,7 @@ $!
$ CREATE 'OPT_FILE' $ CREATE 'OPT_FILE'
$DECK $DECK
! !
! Default System Options File To Link Against ! Default System Options File To Link Agianst
! The Sharable VAX C Runtime Library. ! The Sharable VAX C Runtime Library.
! !
SYS$SHARE:VAXCRTL.EXE/SHARE SYS$SHARE:VAXCRTL.EXE/SHARE
@ -407,7 +350,7 @@ $!
$ CREATE 'OPT_FILE' $ CREATE 'OPT_FILE'
$DECK $DECK
! !
! Default System Options File To Link Against ! Default System Options File To Link Agianst
! The Sharable C Runtime Library. ! The Sharable C Runtime Library.
! !
GNU_CC:[000000]GCCLIB/LIBRARY GNU_CC:[000000]GCCLIB/LIBRARY
@ -442,7 +385,7 @@ $!
$ CREATE 'OPT_FILE' $ CREATE 'OPT_FILE'
$DECK $DECK
! !
! Default System Options File To Link Against ! Default System Options File To Link Agianst
! The Sharable DEC C Runtime Library. ! The Sharable DEC C Runtime Library.
! !
SYS$SHARE:DECC$SHR.EXE/SHARE SYS$SHARE:DECC$SHR.EXE/SHARE
@ -452,19 +395,19 @@ $! Else...
$! $!
$ ELSE $ ELSE
$! $!
$! Create The non-VAX Linker Option File. $! Create The AXP Linker Option File.
$! $!
$ CREATE 'OPT_FILE' $ CREATE 'OPT_FILE'
$DECK $DECK
! !
! Default System Options File For non-VAX To Link Against ! Default System Options File For AXP To Link Agianst
! The Sharable C Runtime Library. ! The Sharable C Runtime Library.
! !
SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
SYS$SHARE:CMA$OPEN_RTL/SHARE SYS$SHARE:CMA$OPEN_RTL/SHARE
$EOD $EOD
$! $!
$! End The DEC C Option File Check. $! End The VAX/AXP DEC C Option File Check.
$! $!
$ ENDIF $ ENDIF
$! $!
@ -541,15 +484,14 @@ $!
$ IF (P1.EQS."NODEBUG") $ IF (P1.EQS."NODEBUG")
$ THEN $ THEN
$! $!
$! P1 Is NODEBUG, So Compile Without Debugger Information. $! P1 Is NODEBUG, So Compile Without Debugger Information.
$! $!
$ DEBUGGER = "NODEBUG" $ DEBUGGER = "NODEBUG"
$ LINKMAP = "NOMAP" $ TRACEBACK = "NOTRACEBACK"
$ TRACEBACK = "NOTRACEBACK" $ GCC_OPTIMIZE = "OPTIMIZE"
$ GCC_OPTIMIZE = "OPTIMIZE" $ CC_OPTIMIZE = "OPTIMIZE"
$ CC_OPTIMIZE = "OPTIMIZE" $ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile." $ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
$! $!
$! Else... $! Else...
$! $!
@ -563,7 +505,6 @@ $!
$! Compile With Debugger Information. $! Compile With Debugger Information.
$! $!
$ DEBUGGER = "DEBUG" $ DEBUGGER = "DEBUG"
$ LINKMAP = "MAP"
$ TRACEBACK = "TRACEBACK" $ TRACEBACK = "TRACEBACK"
$ GCC_OPTIMIZE = "NOOPTIMIZE" $ GCC_OPTIMIZE = "NOOPTIMIZE"
$ CC_OPTIMIZE = "NOOPTIMIZE" $ CC_OPTIMIZE = "NOOPTIMIZE"
@ -571,7 +512,7 @@ $ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization." $ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
$ ELSE $ ELSE
$! $!
$! 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 ",P1," Is Invalid. The Valid Options Are:"
@ -584,7 +525,7 @@ $! Time To EXIT.
$! $!
$ EXIT $ EXIT
$! $!
$! End The Valid Argument Check. $! End The Valid Arguement Check.
$! $!
$ ENDIF $ ENDIF
$! $!
@ -592,87 +533,6 @@ $! End The P1 Check.
$! $!
$ ENDIF $ ENDIF
$! $!
$! Check P6 (POINTER_SIZE).
$!
$ IF (P6 .NES. "") .AND. (ARCH .NES. "VAX")
$ THEN
$!
$ IF (P6 .EQS. "32")
$ THEN
$ POINTER_SIZE = " /POINTER_SIZE=32"
$ ELSE
$ POINTER_SIZE = F$EDIT( P6, "COLLAPSE, UPCASE")
$ IF ((POINTER_SIZE .EQS. "64") .OR. -
(POINTER_SIZE .EQS. "64=") .OR. -
(POINTER_SIZE .EQS. "64=ARGV"))
$ THEN
$ ARCHD = ARCH+ "_64"
$ LIB32 = ""
$ IF (F$EXTRACT( 2, 1, POINTER_SIZE) .EQS. "=")
$ THEN
$! Explicit user choice: "64" or "64=ARGV".
$ IF (POINTER_SIZE .EQS. "64=") THEN POINTER_SIZE = "64"
$ ELSE
$ SET NOON
$ DEFINE /USER_MODE SYS$OUTPUT NL:
$ DEFINE /USER_MODE SYS$ERROR NL:
$ CC /NOLIST /NOOBJECT /POINTER_SIZE=64=ARGV NL:
$ IF ($STATUS .AND. %X0FFF0000) .EQ. %X00030000
$ THEN
$ ! If we got here, it means DCL complained like this:
$ ! %DCL-W-NOVALU, value not allowed - remove value specification
$ ! \64=\
$ !
$ ! If the compiler was run, logicals defined in /USER would
$ ! have been deassigned automatically. However, when DCL
$ ! complains, they aren't, so we do it here (it might be
$ ! unnecessary, but just in case there will be another error
$ ! message further on that we don't want to miss)
$ DEASSIGN /USER_MODE SYS$ERROR
$ DEASSIGN /USER_MODE SYS$OUTPUT
$ ELSE
$ POINTER_SIZE = POINTER_SIZE + "=ARGV"
$ ENDIF
$ SET ON
$ ENDIF
$ POINTER_SIZE = " /POINTER_SIZE=''POINTER_SIZE'"
$!
$ ELSE
$!
$! Tell The User Entered An Invalid Option.
$!
$ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT "The Option ", P6, -
" Is Invalid. The Valid Options Are:"
$ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT -
" """" : Compile with default (short) pointers."
$ WRITE SYS$OUTPUT -
" 32 : Compile with 32-bit (short) pointers."
$ WRITE SYS$OUTPUT -
" 64 : Compile with 64-bit (long) pointers (auto ARGV)."
$ WRITE SYS$OUTPUT -
" 64= : Compile with 64-bit (long) pointers (no ARGV)."
$ WRITE SYS$OUTPUT -
" 64=ARGV : Compile with 64-bit (long) pointers (ARGV)."
$ WRITE SYS$OUTPUT ""
$!
$! Time To EXIT.
$!
$ EXIT
$!
$ ENDIF
$!
$ ENDIF
$!
$! End The P6 (POINTER_SIZE) Check.
$!
$ ENDIF
$!
$! Set basic C compiler /INCLUDE directories.
$!
$ CC_INCLUDES = "SYS$DISK:[-],SYS$DISK:[-.CRYPTO]"
$!
$! Check To See If P2 Is Blank. $! Check To See If P2 Is Blank.
$! $!
$ IF (P2.EQS."") $ IF (P2.EQS."")
@ -696,7 +556,7 @@ $ ELSE
$! $!
$! Check To See If We Have VAXC Or DECC. $! Check To See If We Have VAXC Or DECC.
$! $!
$ IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."") $ IF (ARCH.EQS."AXP").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
$ THEN $ THEN
$! $!
$! Looks Like DECC, Set To Use DECC. $! Looks Like DECC, Set To Use DECC.
@ -773,67 +633,11 @@ $ CCDEFS = "MONOLITH"
$ 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 = "" !!! "MAYLOSEDATA3" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR" $ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" $ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
$ THEN CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
$ IF CCDISABLEWARNINGS .NES. "" THEN CCDISABLEWARNINGS = CCDISABLEWARNINGS + ","
$ CCDISABLEWARNINGS = CCDISABLEWARNINGS + USER_CCDISABLEWARNINGS
$ ENDIF
$! $!
$! Check To See If We Have A ZLIB Option. $! Check To See If The User Entered A Valid Paramter.
$!
$ ZLIB = P7
$ IF (ZLIB .NES. "")
$ THEN
$!
$! Check for expected ZLIB files.
$!
$ err = 0
$ file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
$ if (f$search( file1) .eqs. "")
$ then
$ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
$ WRITE SYS$OUTPUT " Can't find header: ''file1'"
$ err = 1
$ endif
$ file1 = f$parse( "A.;", ZLIB)- "A.;"
$!
$ file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
$ if (f$search( file2) .eqs. "")
$ then
$ if (err .eq. 0)
$ then
$ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
$ endif
$ WRITE SYS$OUTPUT " Can't find library: ''file2'"
$ WRITE SYS$OUTPUT ""
$ err = err+ 2
$ endif
$ if (err .eq. 1)
$ then
$ WRITE SYS$OUTPUT ""
$ endif
$!
$ if (err .ne. 0)
$ then
$ EXIT
$ endif
$!
$ CCDEFS = """ZLIB=1"", "+ CCDEFS
$ CC_INCLUDES = CC_INCLUDES+ ", "+ file1
$ ZLIB_LIB = ", ''file2' /library"
$!
$! Print info
$!
$ WRITE SYS$OUTPUT "ZLIB library spec: ", file2
$!
$! End The ZLIB Check.
$!
$ ENDIF
$!
$! Check To See If The User Entered A Valid Parameter.
$! $!
$ IF (P2.EQS."VAXC").OR.(P2.EQS."DECC").OR.(P2.EQS."GNUC") $ IF (P2.EQS."VAXC").OR.(P2.EQS."DECC").OR.(P2.EQS."GNUC")
$ THEN $ THEN
@ -856,13 +660,13 @@ $!
$ CC = "CC" $ 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=RELAXED"+ - $ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
"''POINTER_SIZE' /NOLIST /PREFIX=ALL" + - "/NOLIST/PREFIX=ALL" + -
" /INCLUDE=(''CC_INCLUDES') " + CCEXTRAFLAGS "/INCLUDE=(SYS$DISK:[-],SYS$DISK:[-.CRYPTO])" + CCEXTRAFLAGS
$! $!
$! Define The Linker Options File Name. $! Define The Linker Options File Name.
$! $!
$ OPT_FILE = "VAX_DECC_OPTIONS.OPT" $ OPT_FILE = "SYS$DISK:[]VAX_DECC_OPTIONS.OPT"
$! $!
$! End DECC Check. $! End DECC Check.
$! $!
@ -883,14 +687,14 @@ $!
$! Compile Using VAXC. $! Compile Using VAXC.
$! $!
$ CC = "CC" $ CC = "CC"
$ IF ARCH.NES."VAX" $ IF ARCH.EQS."AXP"
$ THEN $ THEN
$ WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!" $ 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" + -
"/INCLUDE=(''CC_INCLUDES')" + 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]
@ -899,7 +703,7 @@ $ DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
$! $!
$! Define The Linker Options File Name. $! Define The Linker Options File Name.
$! $!
$ OPT_FILE = "VAX_VAXC_OPTIONS.OPT" $ OPT_FILE = "SYS$DISK:[]VAX_VAXC_OPTIONS.OPT"
$! $!
$! End VAXC Check $! End VAXC Check
$! $!
@ -922,11 +726,11 @@ $! 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" + -
"/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS "/INCLUDE=(SYS$DISK:[-],SYS$DISK:[-.CRYPTO])" + CCEXTRAFLAGS
$! $!
$! Define The Linker Options File Name. $! Define The Linker Options File Name.
$! $!
$ OPT_FILE = "VAX_GNUC_OPTIONS.OPT" $ OPT_FILE = "SYS$DISK:[]VAX_GNUC_OPTIONS.OPT"
$! $!
$! End The GNU C Check. $! End The GNU C Check.
$! $!
@ -936,7 +740,7 @@ $! Set up default defines
$! $!
$ CCDEFS = """FLAT_INC=1""," + CCDEFS $ CCDEFS = """FLAT_INC=1""," + CCDEFS
$! $!
$! Else The User Entered An Invalid Argument. $! Else The User Entered An Invalid Arguement.
$! $!
$ ELSE $ ELSE
$! $!
@ -968,7 +772,7 @@ $ THEN
$! $!
$! Set the library to use SOCKETSHR $! Set the library to use SOCKETSHR
$! $!
$ TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS" $ TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT"
$! $!
$! Done with SOCKETSHR $! Done with SOCKETSHR
$! $!
@ -994,13 +798,13 @@ $ THEN
$! $!
$! Set the library to use UCX. $! Set the library to use UCX.
$! $!
$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS" $ TCPIP_LIB = "SYS$DISK:[-.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 /OPTIONS" $ TCPIP_LIB = "SYS$DISK:[-.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 /OPTIONS" TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT/OPT"
$ ENDIF $ ENDIF
$! $!
$! Done with UCX $! Done with UCX
@ -1014,7 +818,7 @@ $ THEN
$! $!
$! Set the library to use TCPIP. $! Set the library to use TCPIP.
$! $!
$ TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS" $ TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT"
$! $!
$! Done with TCPIP $! Done with TCPIP
$! $!
@ -1039,9 +843,9 @@ $ CCDEFS = CCDEFS + ",TCPIP_TYPE_''P3'"
$! $!
$! Print info $! Print info
$! $!
$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- "," $ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB
$! $!
$! Else The User Entered An Invalid Argument. $! Else The User Entered An Invalid Arguement.
$! $!
$ ELSE $ ELSE
$! $!
@ -1067,27 +871,15 @@ $! Finish up the definition of CC.
$! $!
$ IF COMPILER .EQS. "DECC" $ IF COMPILER .EQS. "DECC"
$ THEN $ THEN
$! Not all compiler versions support MAYLOSEDATA3.
$ OPT_TEST = "MAYLOSEDATA3"
$ DEFINE /USER_MODE SYS$ERROR NL:
$ DEFINE /USER_MODE SYS$OUTPUT NL:
$ 'CC' /NOCROSS_REFERENCE /NOLIST /NOOBJECT -
/WARNINGS = DISABLE = ('OPT_TEST', EMPTYFILE) NL:
$ IF ($SEVERITY)
$ THEN
$ IF CCDISABLEWARNINGS .NES. "" THEN -
CCDISABLEWARNINGS = CCDISABLEWARNINGS+ ","
$ CCDISABLEWARNINGS = CCDISABLEWARNINGS+ OPT_TEST
$ ENDIF
$ IF CCDISABLEWARNINGS .NES. "" $ IF CCDISABLEWARNINGS .NES. ""
$ THEN $ THEN
$ CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))" $ CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
$ ENDIF $ ENDIF
$ ELSE $ ELSE
$ CCDISABLEWARNINGS = "" $ CCDISABLEWARNINGS = ""
$ ENDIF $ ENDIF
$ CC2 = CC + " /DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS $ CC2 = CC + "/DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS
$ CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS $ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
$! $!
$! Show user the result $! Show user the result
$! $!
@ -1153,7 +945,7 @@ $ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
$! $!
$! Set up the logical name OPENSSL to point at the include directory $! Set up the logical name OPENSSL to point at the include directory
$! $!
$ DEFINE OPENSSL /NOLOG '__INCLUDE' $ DEFINE OPENSSL/NOLOG '__INCLUDE'
$! $!
$! Done $! Done
$! $!
@ -1161,24 +953,15 @@ $ RETURN
$! $!
$ CLEANUP: $ CLEANUP:
$! $!
$! Restore the saved logical name OPENSSL, if it had a value. $! Restore the logical name OPENSSL if it had a value
$! $!
$ if (f$type( __SAVE_OPENSSL) .nes. "") $ IF __SAVE_OPENSSL .EQS. ""
$ then $ THEN
$ IF __SAVE_OPENSSL .EQS. "" $ DEASSIGN OPENSSL
$ THEN $ ELSE
$ DEASSIGN OPENSSL $ DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL'
$ ELSE $ ENDIF
$ DEFINE /NOLOG OPENSSL '__SAVE_OPENSSL'
$ ENDIF
$ endif
$!
$! Close any open files.
$!
$ if (f$trnlnm( "objects", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
close objects
$! $!
$! Done $! Done
$! $!
$ RETURN $ RETURN
$!

View File

@ -1,7 +1,6 @@
/* nseq.c */ /* nseq.c */
/* /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project * project 1999.
* 1999.
*/ */
/* ==================================================================== /* ====================================================================
* Copyright (c) 1999 The OpenSSL Project. All rights reserved. * Copyright (c) 1999 The OpenSSL Project. All rights reserved.
@ -11,7 +10,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@ -70,101 +69,99 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
char **args, *infile = NULL, *outfile = NULL; char **args, *infile = NULL, *outfile = NULL;
BIO *in = NULL, *out = NULL; BIO *in = NULL, *out = NULL;
int toseq = 0; int toseq = 0;
X509 *x509 = NULL; X509 *x509 = NULL;
NETSCAPE_CERT_SEQUENCE *seq = NULL; NETSCAPE_CERT_SEQUENCE *seq = NULL;
int i, ret = 1; int i, ret = 1;
int badarg = 0; int badarg = 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); ERR_load_crypto_strings();
ERR_load_crypto_strings(); args = argv + 1;
args = argv + 1; while (!badarg && *args && *args[0] == '-') {
while (!badarg && *args && *args[0] == '-') { if (!strcmp (*args, "-toseq")) toseq = 1;
if (!strcmp(*args, "-toseq")) else if (!strcmp (*args, "-in")) {
toseq = 1; if (args[1]) {
else if (!strcmp(*args, "-in")) { args++;
if (args[1]) { infile = *args;
args++; } else badarg = 1;
infile = *args; } else if (!strcmp (*args, "-out")) {
} else if (args[1]) {
badarg = 1; args++;
} else if (!strcmp(*args, "-out")) { outfile = *args;
if (args[1]) { } else badarg = 1;
args++; } else badarg = 1;
outfile = *args; args++;
} else }
badarg = 1;
} else
badarg = 1;
args++;
}
if (badarg) { if (badarg) {
BIO_printf(bio_err, "Netscape certificate sequence utility\n"); BIO_printf (bio_err, "Netscape certificate sequence utility\n");
BIO_printf(bio_err, "Usage nseq [options]\n"); BIO_printf (bio_err, "Usage nseq [options]\n");
BIO_printf(bio_err, "where options are\n"); BIO_printf (bio_err, "where options are\n");
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, "-toseq output NS Sequence file\n"); BIO_printf (bio_err, "-toseq output NS Sequence file\n");
OPENSSL_EXIT(1); OPENSSL_EXIT(1);
} }
if (infile) { if (infile) {
if (!(in = BIO_new_file(infile, "r"))) { if (!(in = BIO_new_file (infile, "r"))) {
BIO_printf(bio_err, "Can't open input file %s\n", infile); BIO_printf (bio_err,
goto end; "Can't open input file %s\n", infile);
} goto end;
} else }
in = BIO_new_fp(stdin, BIO_NOCLOSE); } else in = BIO_new_fp(stdin, BIO_NOCLOSE);
if (outfile) { if (outfile) {
if (!(out = BIO_new_file(outfile, "w"))) { if (!(out = BIO_new_file (outfile, "w"))) {
BIO_printf(bio_err, "Can't open output file %s\n", outfile); BIO_printf (bio_err,
goto end; "Can't open output file %s\n", outfile);
} goto end;
} else { }
out = BIO_new_fp(stdout, BIO_NOCLOSE); } else {
out = BIO_new_fp(stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #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);
} }
#endif #endif
} }
if (toseq) { if (toseq) {
seq = NETSCAPE_CERT_SEQUENCE_new(); seq = NETSCAPE_CERT_SEQUENCE_new();
seq->certs = sk_X509_new_null(); seq->certs = sk_X509_new_null();
while ((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL))) while((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL)))
sk_X509_push(seq->certs, x509); sk_X509_push(seq->certs,x509);
if (!sk_X509_num(seq->certs)) { if(!sk_X509_num(seq->certs))
BIO_printf(bio_err, "Error reading certs file %s\n", infile); {
ERR_print_errors(bio_err); BIO_printf (bio_err, "Error reading certs file %s\n", infile);
goto end; ERR_print_errors(bio_err);
} goto end;
PEM_write_bio_NETSCAPE_CERT_SEQUENCE(out, seq); }
ret = 0; PEM_write_bio_NETSCAPE_CERT_SEQUENCE(out, seq);
goto end; ret = 0;
} goto end;
}
if (!(seq = PEM_read_bio_NETSCAPE_CERT_SEQUENCE(in, NULL, NULL, NULL))) { if (!(seq = PEM_read_bio_NETSCAPE_CERT_SEQUENCE(in, NULL, NULL, NULL))) {
BIO_printf(bio_err, "Error reading sequence file %s\n", infile); BIO_printf (bio_err, "Error reading sequence file %s\n", infile);
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
goto end; goto end;
} }
for (i = 0; i < sk_X509_num(seq->certs); i++) { for(i = 0; i < sk_X509_num(seq->certs); i++) {
x509 = sk_X509_value(seq->certs, i); x509 = sk_X509_value(seq->certs, i);
dump_cert_text(out, x509); dump_cert_text(out, x509);
PEM_write_bio_X509(out, x509); PEM_write_bio_X509(out, x509);
} }
ret = 0; ret = 0;
end: end:
BIO_free(in); BIO_free(in);
BIO_free_all(out); BIO_free_all(out);
NETSCAPE_CERT_SEQUENCE_free(seq); NETSCAPE_CERT_SEQUENCE_free(seq);
OPENSSL_EXIT(ret); OPENSSL_EXIT(ret);
} }

File diff suppressed because it is too large Load Diff

View File

@ -8,9 +8,8 @@
HOME = . HOME = .
RANDFILE = $ENV::HOME/.rnd RANDFILE = $ENV::HOME/.rnd
# Extra OBJECT IDENTIFIER info: # Uncomment out to enable OpenSSL configuration see config(3)
#oid_file = $ENV::HOME/.oid # openssl_conf = openssl_init
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
@ -19,18 +18,22 @@ oid_section = new_oids
# (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 'ca', 'req' and 'ts'. # We can add new OIDs in here for use by any config aware application
# Add a simple OID like this: # Add a simple OID like this:
# testoid1=1.2.3.4 # shortname=Long Object Identifier Name, 1.2.3.4
# Or use config file substitution like this: # Or use config file substitution like this:
# testoid2=${testoid1}.5.6 # testoid2=OID2 LONG NAME, ${testoid1}.5.6, OTHER OID
# Policies used by the TSA examples. [ algs ]
tsa_policy1 = 1.2.3.4.1 # Algorithm configuration options. Currently just fips_mode
tsa_policy2 = 1.2.3.4.5.6 fips_mode = no
tsa_policy3 = 1.2.3.4.5.7
#################################################################### ####################################################################
[ ca ] [ ca ]
@ -72,7 +75,7 @@ cert_opt = ca_default # Certificate field options
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 = default # use public key default MD default_md = sha1 # 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
@ -115,12 +118,13 @@ x509_extensions = v3_ca # The extentions to add to the self signed cert
# This sets a mask for permitted string types. There are several options. # This sets a mask for permitted string types. There are several options.
# default: PrintableString, T61String, BMPString. # default: PrintableString, T61String, BMPString.
# pkix : PrintableString, BMPString (PKIX recommendation before 2004) # pkix : PrintableString, BMPString.
# utf8only: only UTF8Strings (PKIX recommendation after 2004). # utf8only: only UTF8Strings.
# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). # nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
# MASK:XXXX a literal mask value. # MASK:XXXX a literal mask value.
# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings. # WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings
string_mask = utf8only # so use this option with caution!
string_mask = nombstr
# req_extensions = v3_req # The extensions to add to a certificate request # req_extensions = v3_req # The extensions to add to a certificate request
@ -145,7 +149,7 @@ localityName = Locality Name (eg, city)
organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName = Organizational Unit Name (eg, section)
#organizationalUnitName_default = #organizationalUnitName_default =
commonName = Common Name (e.g. server FQDN or YOUR name) commonName = Common Name (eg, YOUR name)
commonName_max = 64 commonName_max = 64
emailAddress = Email Address emailAddress = Email Address
@ -211,9 +215,6 @@ authorityKeyIdentifier=keyid,issuer
#nsCaPolicyUrl #nsCaPolicyUrl
#nsSslServerName #nsSslServerName
# This is required for TSA certificates.
# extendedKeyUsage = critical,timeStamping
[ v3_req ] [ v3_req ]
# Extensions to add to a certificate request # Extensions to add to a certificate request
@ -231,7 +232,7 @@ keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectKeyIdentifier=hash subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer authorityKeyIdentifier=keyid:always,issuer:always
# This is what PKIX recommends but some broken software chokes on critical # This is what PKIX recommends but some broken software chokes on critical
# extensions. # extensions.
@ -264,7 +265,7 @@ basicConstraints = CA:true
# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. # Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
# issuerAltName=issuer:copy # issuerAltName=issuer:copy
authorityKeyIdentifier=keyid:always authorityKeyIdentifier=keyid:always,issuer:always
[ proxy_cert_ext ] [ proxy_cert_ext ]
# These extensions should be added when creating a proxy certificate # These extensions should be added when creating a proxy certificate
@ -297,7 +298,7 @@ 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.
@ -318,33 +319,3 @@ authorityKeyIdentifier=keyid,issuer
# This really needs to be in place for it to be a proxy certificate. # This really needs to be in place for it to be a proxy certificate.
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
####################################################################
[ tsa ]
default_tsa = tsa_config1 # the default TSA section
[ tsa_config1 ]
# These are used by the TSA reply generation only.
dir = sys\$disk:[.demoCA # TSA root directory
serial = $dir]tsaserial. # The current serial number (mandatory)
crypto_device = builtin # OpenSSL engine to use for signing
signer_cert = $dir/tsacert.pem # The TSA signing certificate
# (optional)
certs = $dir.cacert.pem] # Certificate chain to include in reply
# (optional)
signer_key = $dir/private/tsakey.pem # The TSA private key (optional)
default_policy = tsa_policy1 # Policy if request did not specify it
# (optional)
other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional)
digests = md5, sha1 # Acceptable message digests (mandatory)
accuracy = secs:1, millisecs:500, microsecs:100 # (optional)
clock_precision_digits = 0 # number of digits after dot. (optional)
ordering = yes # Is ordering defined for timestamps?
# (optional, default: no)
tsa_name = yes # Must the TSA name be included in the reply?
# (optional, default: no)
ess_cert_id_chain = no # Must the ESS cert id chain be included?
# (optional, default: no)

View File

@ -5,21 +5,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
@ -63,7 +63,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@ -109,588 +109,432 @@
* *
*/ */
#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 #define OPENSSL_C /* tells apps.h to use complete apps_startup() */
* apps_startup() */
#include "apps.h" #include "apps.h"
#include <openssl/bio.h> #include <openssl/bio.h>
#include <openssl/crypto.h> #include <openssl/crypto.h>
#include <openssl/rand.h>
#include <openssl/lhash.h> #include <openssl/lhash.h>
#include <openssl/conf.h> #include <openssl/conf.h>
#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 #ifndef OPENSSL_NO_ENGINE
# include <openssl/engine.h> #include <openssl/engine.h>
#endif #endif
#define USE_SOCKETS /* needed for the _O_BINARY defs in the MS #define USE_SOCKETS /* needed for the _O_BINARY defs in the MS world */
* world */
#include "progs.h" #include "progs.h"
#include "s_apps.h" #include "s_apps.h"
#include <openssl/err.h> #include <openssl/err.h>
#ifdef OPENSSL_FIPS
# include <openssl/fips.h>
#endif
/* /* The LHASH callbacks ("hash" & "cmp") have been replaced by functions with the
* The LHASH callbacks ("hash" & "cmp") have been replaced by functions with * base prototypes (we cast each variable inside the function to the required
* the base prototypes (we cast each variable inside the function to the * type of "FUNCTION*"). This removes the necessity for macro-generated wrapper
* required type of "FUNCTION*"). This removes the necessity for * functions. */
* macro-generated wrapper functions.
*/
static LHASH_OF(FUNCTION) *prog_init(void); /* static unsigned long MS_CALLBACK hash(FUNCTION *a); */
static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[]); static unsigned long MS_CALLBACK hash(const void *a_void);
static void list_pkey(BIO *out); /* static int MS_CALLBACK cmp(FUNCTION *a,FUNCTION *b); */
static void list_cipher(BIO *out); static int MS_CALLBACK cmp(const void *a_void,const void *b_void);
static void list_md(BIO *out); static LHASH *prog_init(void );
char *default_config_file = NULL; static int do_cmd(LHASH *prog,int argc,char *argv[]);
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; CONF *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 void lock_dbg_cb(int mode, int type, const char *file, int line)
{ {
static int modes[CRYPTO_NUM_LOCKS]; /* = {0, 0, ... } */ static int modes[CRYPTO_NUM_LOCKS]; /* = {0, 0, ... } */
const char *errstr = NULL; const char *errstr = NULL;
int rw; int rw;
rw = mode & (CRYPTO_READ|CRYPTO_WRITE);
if (!((rw == CRYPTO_READ) || (rw == CRYPTO_WRITE)))
{
errstr = "invalid mode";
goto err;
}
rw = mode & (CRYPTO_READ | CRYPTO_WRITE); if (type < 0 || type >= CRYPTO_NUM_LOCKS)
if (!((rw == CRYPTO_READ) || (rw == CRYPTO_WRITE))) { {
errstr = "invalid mode"; errstr = "type out of bounds";
goto err; goto err;
} }
if (type < 0 || type >= CRYPTO_NUM_LOCKS) { if (mode & CRYPTO_LOCK)
errstr = "type out of bounds"; {
goto err; if (modes[type])
} {
errstr = "already locked";
/* must not happen in a single-threaded program
* (would deadlock) */
goto err;
}
if (mode & CRYPTO_LOCK) { modes[type] = rw;
if (modes[type]) { }
errstr = "already locked"; else if (mode & CRYPTO_UNLOCK)
/* {
* must not happen in a single-threaded program (would deadlock) if (!modes[type])
*/ {
goto err; 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] = rw; modes[type] = 0;
} else if (mode & CRYPTO_UNLOCK) { }
if (!modes[type]) { else
errstr = "not locked"; {
goto err; errstr = "invalid mode";
} 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: err:
if (errstr) { if (errstr)
/* we cannot use bio_err here */ {
fprintf(stderr, /* we cannot use bio_err here */
"openssl (lock_dbg_cb): %s (mode=%d, type=%d) at %s:%d\n", fprintf(stderr, "openssl (lock_dbg_cb): %s (mode=%d, type=%d) at %s:%d\n",
errstr, mode, type, file, line); errstr, mode, type, file, line);
} }
} }
#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64)
# define ARGV _Argv int main(int Argc, char *Argv[])
#else {
# define ARGV Argv ARGS arg;
#define PROG_NAME_SIZE 39
char pname[PROG_NAME_SIZE+1];
FUNCTION f,*fp;
MS_STATIC const char *prompt;
MS_STATIC char buf[1024];
char *to_free=NULL;
int n,i,ret=0;
int argc;
char **argv,*p;
LHASH *prog=NULL;
long errline;
arg.data=NULL;
arg.count=0;
in_FIPS_mode = 0;
#ifdef OPENSSL_FIPS
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 #endif
int main(int Argc, char *ARGV[]) if (bio_err == NULL)
{ if ((bio_err=BIO_new(BIO_s_file())) != NULL)
ARGS arg; BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
#define PROG_NAME_SIZE 39
char pname[PROG_NAME_SIZE + 1];
FUNCTION f, *fp;
MS_STATIC const char *prompt;
MS_STATIC char buf[1024];
char *to_free = NULL;
int n, i, ret = 0;
int argc;
char **argv, *p;
LHASH_OF(FUNCTION) *prog = NULL;
long errline;
#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64) if (getenv("OPENSSL_DEBUG_MEMORY") != NULL) /* if not defined, use compiled-in library defaults */
/*- {
* 2011-03-22 SMS. if (!(0 == strcmp(getenv("OPENSSL_DEBUG_MEMORY"), "off")))
* If we have 32-bit pointers everywhere, then we're safe, and {
* we bypass this mess, as on non-VMS systems. (See ARGV, CRYPTO_malloc_debug_init();
* above.) CRYPTO_set_mem_debug_options(V_CRYPTO_MDEBUG_ALL);
* Problem 1: Compaq/HP C before V7.3 always used 32-bit }
* pointers for argv[]. else
* Fix 1: For a 32-bit argv[], when we're using 64-bit pointers {
* everywhere else, we always allocate and use a 64-bit /* OPENSSL_DEBUG_MEMORY=off */
* duplicate of argv[]. CRYPTO_set_mem_debug_functions(0, 0, 0, 0, 0);
* Problem 2: Compaq/HP C V7.3 (Alpha, IA64) before ECO1 failed }
* to NULL-terminate a 64-bit argv[]. (As this was written, the }
* compiler ECO was available only on IA64.) CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
* Fix 2: Unless advised not to (VMS_TRUST_ARGV), we test a
* 64-bit argv[argc] for NULL, and, if necessary, use a
* (properly) NULL-terminated (64-bit) duplicate of argv[].
* The same code is used in either case to duplicate argv[].
* Some of these decisions could be handled in preprocessing,
* but the code tends to get even uglier, and the penalty for
* deciding at compile- or run-time is tiny.
*/
char **Argv = NULL;
int free_Argv = 0;
if ((sizeof(_Argv) < 8) /* 32-bit argv[]. */
# if !defined( VMS_TRUST_ARGV)
|| (_Argv[Argc] != NULL) /* Untrusted argv[argc] not NULL. */
# endif
) {
int i;
Argv = OPENSSL_malloc((Argc + 1) * sizeof(char *));
if (Argv == NULL) {
ret = -1;
goto end;
}
for (i = 0; i < Argc; i++)
Argv[i] = _Argv[i];
Argv[Argc] = NULL; /* Certain NULL termination. */
free_Argv = 1;
} else {
/*
* Use the known-good 32-bit argv[] (which needs the type cast to
* satisfy the compiler), or the trusted or tested-good 64-bit argv[]
* as-is.
*/
Argv = (char **)_Argv;
}
#endif /* defined( OPENSSL_SYS_VMS) &&
* (__INITIAL_POINTER_SIZE == 64) */
arg.data = NULL;
arg.count = 0;
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 (getenv("OPENSSL_DEBUG_MEMORY") != NULL) { /* if not defined, use
* compiled-in library
* defaults */
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 0
if (getenv("OPENSSL_DEBUG_LOCKING") != NULL) if (getenv("OPENSSL_DEBUG_LOCKING") != NULL)
#endif #endif
{ {
CRYPTO_set_locking_callback(lock_dbg_cb); CRYPTO_set_locking_callback(lock_dbg_cb);
} }
if (getenv("OPENSSL_FIPS")) { apps_startup();
#ifdef OPENSSL_FIPS
if (!FIPS_mode_set(1)) {
ERR_load_crypto_strings();
ERR_print_errors(BIO_new_fp(stderr, BIO_NOCLOSE));
EXIT(1);
}
#else
fprintf(stderr, "FIPS mode not supported.\n");
EXIT(1);
#endif
}
apps_startup(); /* Lets load up our environment a little */
p=getenv("OPENSSL_CONF");
if (p == NULL)
p=getenv("SSLEAY_CONF");
if (p == NULL)
p=to_free=make_config_name();
/* Lets load up our environment a little */ default_config_file=p;
p = getenv("OPENSSL_CONF");
if (p == NULL)
p = getenv("SSLEAY_CONF");
if (p == NULL)
p = to_free = make_config_name();
default_config_file = p; config=NCONF_new(NULL);
i=NCONF_load(config,p,&errline);
if (i == 0)
{
NCONF_free(config);
config = NULL;
ERR_clear_error();
}
config = NCONF_new(NULL); prog=prog_init();
i = NCONF_load(config, p, &errline);
if (i == 0) {
if (ERR_GET_REASON(ERR_peek_last_error())
== CONF_R_NO_SUCH_FILE) {
BIO_printf(bio_err, "WARNING: can't open config file: %s\n", p);
ERR_clear_error();
NCONF_free(config);
config = NULL;
} else {
ERR_print_errors(bio_err);
NCONF_free(config);
exit(1);
}
}
prog = prog_init(); /* first check the program name */
program_name(Argv[0],pname,sizeof pname);
/* first check the program name */ f.name=pname;
program_name(Argv[0], pname, sizeof pname); fp=(FUNCTION *)lh_retrieve(prog,&f);
if (fp != NULL)
{
Argv[0]=pname;
ret=fp->func(Argc,Argv);
goto end;
}
f.name = pname; /* ok, now check that there are not arguments, if there are,
fp = lh_FUNCTION_retrieve(prog, &f); * run with them, shifting the ssleay off the front */
if (fp != NULL) { if (Argc != 1)
Argv[0] = pname; {
ret = fp->func(Argc, Argv); Argc--;
goto end; Argv++;
} ret=do_cmd(prog,Argc,Argv);
if (ret < 0) ret=0;
goto end;
}
/* /* ok, lets enter the old 'OpenSSL>' mode */
* ok, now check that there are not arguments, if there are, run with
* them, shifting the ssleay off the front for (;;)
*/ {
if (Argc != 1) { ret=0;
Argc--; p=buf;
Argv++; n=sizeof buf;
ret = do_cmd(prog, Argc, Argv); i=0;
if (ret < 0) for (;;)
ret = 0; {
goto end; p[0]='\0';
} if (i++)
prompt=">";
else prompt="OpenSSL> ";
fputs(prompt,stdout);
fflush(stdout);
fgets(p,n,stdin);
if (p[0] == '\0') goto end;
i=strlen(p);
if (i <= 1) break;
if (p[i-2] != '\\') break;
i-=2;
p+=i;
n-=i;
}
if (!chopup_args(&arg,buf,&argc,&argv)) break;
/* ok, lets enter the old 'OpenSSL>' mode */ ret=do_cmd(prog,argc,argv);
if (ret < 0)
{
ret=0;
goto end;
}
if (ret != 0)
BIO_printf(bio_err,"error in %s\n",argv[0]);
(void)BIO_flush(bio_err);
}
BIO_printf(bio_err,"bad exit\n");
ret=1;
end:
if (to_free)
OPENSSL_free(to_free);
if (config != NULL)
{
NCONF_free(config);
config=NULL;
}
if (prog != NULL) lh_free(prog);
if (arg.data != NULL) OPENSSL_free(arg.data);
for (;;) { apps_shutdown();
ret = 0;
p = buf;
n = sizeof buf;
i = 0;
for (;;) {
p[0] = '\0';
if (i++)
prompt = ">";
else
prompt = "OpenSSL> ";
fputs(prompt, stdout);
fflush(stdout);
if (!fgets(p, n, stdin))
goto end;
if (p[0] == '\0')
goto end;
i = strlen(p);
if (i <= 1)
break;
if (p[i - 2] != '\\')
break;
i -= 2;
p += i;
n -= i;
}
if (!chopup_args(&arg, buf, &argc, &argv))
break;
ret = do_cmd(prog, argc, argv); CRYPTO_mem_leaks(bio_err);
if (ret < 0) { if (bio_err != NULL)
ret = 0; {
goto end; BIO_free(bio_err);
} bio_err=NULL;
if (ret != 0) }
BIO_printf(bio_err, "error in %s\n", argv[0]); OPENSSL_EXIT(ret);
(void)BIO_flush(bio_err); }
}
BIO_printf(bio_err, "bad exit\n");
ret = 1;
end:
if (to_free)
OPENSSL_free(to_free);
if (config != NULL) {
NCONF_free(config);
config = NULL;
}
if (prog != NULL)
lh_FUNCTION_free(prog);
if (arg.data != NULL)
OPENSSL_free(arg.data);
#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64)
/* Free any duplicate Argv[] storage. */
if (free_Argv) {
OPENSSL_free(Argv);
}
#endif
apps_shutdown();
CRYPTO_mem_leaks(bio_err);
if (bio_err != NULL) {
BIO_free(bio_err);
bio_err = NULL;
}
OPENSSL_EXIT(ret);
}
#define LIST_STANDARD_COMMANDS "list-standard-commands" #define LIST_STANDARD_COMMANDS "list-standard-commands"
#define LIST_MESSAGE_DIGEST_COMMANDS "list-message-digest-commands" #define LIST_MESSAGE_DIGEST_COMMANDS "list-message-digest-commands"
#define LIST_MESSAGE_DIGEST_ALGORITHMS "list-message-digest-algorithms"
#define LIST_CIPHER_COMMANDS "list-cipher-commands" #define LIST_CIPHER_COMMANDS "list-cipher-commands"
#define LIST_CIPHER_ALGORITHMS "list-cipher-algorithms"
#define LIST_PUBLIC_KEY_ALGORITHMS "list-public-key-algorithms"
static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[]) static int do_cmd(LHASH *prog, int argc, char *argv[])
{ {
FUNCTION f, *fp; FUNCTION f,*fp;
int i, ret = 1, tp, nl; int i,ret=1,tp,nl;
if ((argc <= 0) || (argv[0] == NULL)) { if ((argc <= 0) || (argv[0] == NULL))
ret = 0; { ret=0; goto end; }
goto end; f.name=argv[0];
} fp=(FUNCTION *)lh_retrieve(prog,&f);
f.name = argv[0]; if (fp != NULL)
fp = lh_FUNCTION_retrieve(prog, &f); {
if (fp == NULL) { ret=fp->func(argc,argv);
if (EVP_get_digestbyname(argv[0])) { }
f.type = FUNC_TYPE_MD; else if ((strncmp(argv[0],"no-",3)) == 0)
f.func = dgst_main; {
fp = &f; BIO *bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
} else if (EVP_get_cipherbyname(argv[0])) {
f.type = FUNC_TYPE_CIPHER;
f.func = enc_main;
fp = &f;
}
}
if (fp != NULL) {
ret = fp->func(argc, argv);
} else if ((strncmp(argv[0], "no-", 3)) == 0) {
BIO *bio_stdout = BIO_new_fp(stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef OPENSSL_SYS_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);
} }
#endif #endif
f.name = argv[0] + 3; f.name=argv[0]+3;
ret = (lh_FUNCTION_retrieve(prog, &f) != NULL); ret = (lh_retrieve(prog,&f) != NULL);
if (!ret) if (!ret)
BIO_printf(bio_stdout, "%s\n", argv[0]); BIO_printf(bio_stdout, "%s\n", argv[0]);
else else
BIO_printf(bio_stdout, "%s\n", argv[0] + 3); BIO_printf(bio_stdout, "%s\n", argv[0]+3);
BIO_free_all(bio_stdout); BIO_free_all(bio_stdout);
goto end; goto end;
} else if ((strcmp(argv[0], "quit") == 0) || }
(strcmp(argv[0], "q") == 0) || else if ((strcmp(argv[0],"quit") == 0) ||
(strcmp(argv[0], "exit") == 0) || (strcmp(argv[0],"q") == 0) ||
(strcmp(argv[0], "bye") == 0)) { (strcmp(argv[0],"exit") == 0) ||
ret = -1; (strcmp(argv[0],"bye") == 0))
goto end; {
} else if ((strcmp(argv[0], LIST_STANDARD_COMMANDS) == 0) || ret= -1;
(strcmp(argv[0], LIST_MESSAGE_DIGEST_COMMANDS) == 0) || goto end;
(strcmp(argv[0], LIST_MESSAGE_DIGEST_ALGORITHMS) == 0) || }
(strcmp(argv[0], LIST_CIPHER_COMMANDS) == 0) || else if ((strcmp(argv[0],LIST_STANDARD_COMMANDS) == 0) ||
(strcmp(argv[0], LIST_CIPHER_ALGORITHMS) == 0) || (strcmp(argv[0],LIST_MESSAGE_DIGEST_COMMANDS) == 0) ||
(strcmp(argv[0], LIST_PUBLIC_KEY_ALGORITHMS) == 0)) { (strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0))
int list_type; {
BIO *bio_stdout; int list_type;
BIO *bio_stdout;
if (strcmp(argv[0], LIST_STANDARD_COMMANDS) == 0) if (strcmp(argv[0],LIST_STANDARD_COMMANDS) == 0)
list_type = FUNC_TYPE_GENERAL; list_type = FUNC_TYPE_GENERAL;
else if (strcmp(argv[0], LIST_MESSAGE_DIGEST_COMMANDS) == 0) else if (strcmp(argv[0],LIST_MESSAGE_DIGEST_COMMANDS) == 0)
list_type = FUNC_TYPE_MD; list_type = FUNC_TYPE_MD;
else if (strcmp(argv[0], LIST_MESSAGE_DIGEST_ALGORITHMS) == 0) else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */
list_type = FUNC_TYPE_MD_ALG; list_type = FUNC_TYPE_CIPHER;
else if (strcmp(argv[0], LIST_PUBLIC_KEY_ALGORITHMS) == 0) bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
list_type = FUNC_TYPE_PKEY;
else if (strcmp(argv[0], LIST_CIPHER_ALGORITHMS) == 0)
list_type = FUNC_TYPE_CIPHER_ALG;
else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */
list_type = FUNC_TYPE_CIPHER;
bio_stdout = BIO_new_fp(stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #ifdef OPENSSL_SYS_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);
} }
#endif #endif
if (!load_config(bio_err, NULL)) for (fp=functions; fp->name != NULL; fp++)
goto end; if (fp->type == list_type)
BIO_printf(bio_stdout, "%s\n", fp->name);
if (list_type == FUNC_TYPE_PKEY) BIO_free_all(bio_stdout);
list_pkey(bio_stdout); ret=0;
if (list_type == FUNC_TYPE_MD_ALG) goto end;
list_md(bio_stdout); }
if (list_type == FUNC_TYPE_CIPHER_ALG) else
list_cipher(bio_stdout); {
else { BIO_printf(bio_err,"openssl:Error: '%s' is an invalid command.\n",
for (fp = functions; fp->name != NULL; fp++) argv[0]);
if (fp->type == list_type) BIO_printf(bio_err, "\nStandard commands");
BIO_printf(bio_stdout, "%s\n", fp->name); i=0;
} tp=0;
BIO_free_all(bio_stdout); for (fp=functions; fp->name != NULL; fp++)
ret = 0; {
goto end; nl=0;
} else {
BIO_printf(bio_err, "openssl:Error: '%s' is an invalid command.\n",
argv[0]);
BIO_printf(bio_err, "\nStandard commands");
i = 0;
tp = 0;
for (fp = functions; fp->name != NULL; fp++) {
nl = 0;
#ifdef OPENSSL_NO_CAMELLIA #ifdef OPENSSL_NO_CAMELLIA
if (((i++) % 5) == 0) if (((i++) % 5) == 0)
#else #else
if (((i++) % 4) == 0) if (((i++) % 4) == 0)
#endif #endif
{ {
BIO_printf(bio_err, "\n"); BIO_printf(bio_err,"\n");
nl = 1; nl=1;
} }
if (fp->type != tp) { if (fp->type != tp)
tp = fp->type; {
if (!nl) tp=fp->type;
BIO_printf(bio_err, "\n"); if (!nl) BIO_printf(bio_err,"\n");
if (tp == FUNC_TYPE_MD) { if (tp == FUNC_TYPE_MD)
i = 1; {
BIO_printf(bio_err, i=1;
"\nMessage Digest commands (see the `dgst' command for more details)\n"); BIO_printf(bio_err,
} else if (tp == FUNC_TYPE_CIPHER) { "\nMessage Digest commands (see the `dgst' command for more details)\n");
i = 1; }
BIO_printf(bio_err, else if (tp == FUNC_TYPE_CIPHER)
"\nCipher commands (see the `enc' command for more details)\n"); {
} i=1;
} BIO_printf(bio_err,"\nCipher commands (see the `enc' command for more details)\n");
}
}
#ifdef OPENSSL_NO_CAMELLIA #ifdef OPENSSL_NO_CAMELLIA
BIO_printf(bio_err, "%-15s", fp->name); BIO_printf(bio_err,"%-15s",fp->name);
#else #else
BIO_printf(bio_err, "%-18s", fp->name); BIO_printf(bio_err,"%-18s",fp->name);
#endif #endif
} }
BIO_printf(bio_err, "\n\n"); BIO_printf(bio_err,"\n\n");
ret = 0; ret=0;
}
end:
return(ret);
}
static int SortFnByName(const void *_f1,const void *_f2)
{
const FUNCTION *f1=_f1;
const FUNCTION *f2=_f2;
if(f1->type != f2->type)
return f1->type-f2->type;
return strcmp(f1->name,f2->name);
} }
end:
return (ret);
}
static int SortFnByName(const void *_f1, const void *_f2) static LHASH *prog_init(void)
{ {
const FUNCTION *f1 = _f1; LHASH *ret;
const FUNCTION *f2 = _f2; FUNCTION *f;
size_t i;
if (f1->type != f2->type) /* Purely so it looks nice when the user hits ? */
return f1->type - f2->type; for(i=0,f=functions ; f->name != NULL ; ++f,++i)
return strcmp(f1->name, f2->name); ;
} qsort(functions,i,sizeof *functions,SortFnByName);
static void list_pkey(BIO *out) if ((ret=lh_new(hash, cmp)) == NULL)
{ return(NULL);
int i;
for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) {
const EVP_PKEY_ASN1_METHOD *ameth;
int pkey_id, pkey_base_id, pkey_flags;
const char *pinfo, *pem_str;
ameth = EVP_PKEY_asn1_get0(i);
EVP_PKEY_asn1_get0_info(&pkey_id, &pkey_base_id, &pkey_flags,
&pinfo, &pem_str, ameth);
if (pkey_flags & ASN1_PKEY_ALIAS) {
BIO_printf(out, "Name: %s\n", OBJ_nid2ln(pkey_id));
BIO_printf(out, "\tType: Alias to %s\n",
OBJ_nid2ln(pkey_base_id));
} else {
BIO_printf(out, "Name: %s\n", pinfo);
BIO_printf(out, "\tType: %s Algorithm\n",
pkey_flags & ASN1_PKEY_DYNAMIC ?
"External" : "Builtin");
BIO_printf(out, "\tOID: %s\n", OBJ_nid2ln(pkey_id));
if (pem_str == NULL)
pem_str = "(none)";
BIO_printf(out, "\tPEM string: %s\n", pem_str);
}
} for (f=functions; f->name != NULL; f++)
} lh_insert(ret,f);
return(ret);
}
static void list_cipher_fn(const EVP_CIPHER *c, /* static int MS_CALLBACK cmp(FUNCTION *a, FUNCTION *b) */
const char *from, const char *to, void *arg) static int MS_CALLBACK cmp(const void *a_void, const void *b_void)
{ {
if (c) return(strncmp(((const FUNCTION *)a_void)->name,
BIO_printf(arg, "%s\n", EVP_CIPHER_name(c)); ((const FUNCTION *)b_void)->name,8));
else { }
if (!from)
from = "<undefined>";
if (!to)
to = "<undefined>";
BIO_printf(arg, "%s => %s\n", from, to);
}
}
static void list_cipher(BIO *out) /* static unsigned long MS_CALLBACK hash(FUNCTION *a) */
{ static unsigned long MS_CALLBACK hash(const void *a_void)
EVP_CIPHER_do_all_sorted(list_cipher_fn, out); {
} return(lh_strhash(((const FUNCTION *)a_void)->name));
}
static void list_md_fn(const EVP_MD *m,
const char *from, const char *to, void *arg)
{
if (m)
BIO_printf(arg, "%s\n", EVP_MD_name(m));
else {
if (!from)
from = "<undefined>";
if (!to)
to = "<undefined>";
BIO_printf(arg, "%s => %s\n", from, to);
}
}
static void list_md(BIO *out)
{
EVP_MD_do_all_sorted(list_md_fn, out);
}
static int MS_CALLBACK function_cmp(const FUNCTION * a, const FUNCTION * b)
{
return strncmp(a->name, b->name, 8);
}
static IMPLEMENT_LHASH_COMP_FN(function, FUNCTION)
static unsigned long MS_CALLBACK function_hash(const FUNCTION * a)
{
return lh_strhash(a->name);
}
static IMPLEMENT_LHASH_HASH_FN(function, FUNCTION)
static LHASH_OF(FUNCTION) *prog_init(void)
{
LHASH_OF(FUNCTION) *ret;
FUNCTION *f;
size_t i;
/* Purely so it looks nice when the user hits ? */
for (i = 0, f = functions; f->name != NULL; ++f, ++i) ;
qsort(functions, i, sizeof *functions, SortFnByName);
if ((ret = lh_FUNCTION_new()) == NULL)
return (NULL);
for (f = functions; f->name != NULL; f++)
(void)lh_FUNCTION_insert(ret, f);
return (ret);
}

View File

@ -8,9 +8,8 @@
HOME = . HOME = .
RANDFILE = $ENV::HOME/.rnd RANDFILE = $ENV::HOME/.rnd
# Extra OBJECT IDENTIFIER info: # Uncomment out to enable OpenSSL configuration see config(3)
#oid_file = $ENV::HOME/.oid # openssl_conf = openssl_init
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
@ -19,18 +18,22 @@ oid_section = new_oids
# (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 'ca', 'req' and 'ts'. # We can add new OIDs in here for use by any config aware application
# Add a simple OID like this: # Add a simple OID like this:
# testoid1=1.2.3.4 # shortname=Long Object Identifier Name, 1.2.3.4
# Or use config file substitution like this: # Or use config file substitution like this:
# testoid2=${testoid1}.5.6 # testoid2=OID2 LONG NAME, ${testoid1}.5.6, OTHER OID
# Policies used by the TSA examples. [ algs ]
tsa_policy1 = 1.2.3.4.1 # Algorithm configuration options. Currently just fips_mode
tsa_policy2 = 1.2.3.4.5.6 fips_mode = no
tsa_policy3 = 1.2.3.4.5.7
#################################################################### ####################################################################
[ ca ] [ ca ]
@ -72,7 +75,7 @@ cert_opt = ca_default # Certificate field options
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 = default # use public key default MD default_md = sha1 # 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
@ -115,12 +118,13 @@ x509_extensions = v3_ca # The extentions to add to the self signed cert
# This sets a mask for permitted string types. There are several options. # This sets a mask for permitted string types. There are several options.
# default: PrintableString, T61String, BMPString. # default: PrintableString, T61String, BMPString.
# pkix : PrintableString, BMPString (PKIX recommendation before 2004) # pkix : PrintableString, BMPString.
# utf8only: only UTF8Strings (PKIX recommendation after 2004). # utf8only: only UTF8Strings.
# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). # nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
# MASK:XXXX a literal mask value. # MASK:XXXX a literal mask value.
# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings. # WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings
string_mask = utf8only # so use this option with caution!
string_mask = nombstr
# req_extensions = v3_req # The extensions to add to a certificate request # req_extensions = v3_req # The extensions to add to a certificate request
@ -145,7 +149,7 @@ localityName = Locality Name (eg, city)
organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName = Organizational Unit Name (eg, section)
#organizationalUnitName_default = #organizationalUnitName_default =
commonName = Common Name (e.g. server FQDN or YOUR name) commonName = Common Name (eg, YOUR name)
commonName_max = 64 commonName_max = 64
emailAddress = Email Address emailAddress = Email Address
@ -211,9 +215,6 @@ authorityKeyIdentifier=keyid,issuer
#nsCaPolicyUrl #nsCaPolicyUrl
#nsSslServerName #nsSslServerName
# This is required for TSA certificates.
# extendedKeyUsage = critical,timeStamping
[ v3_req ] [ v3_req ]
# Extensions to add to a certificate request # Extensions to add to a certificate request
@ -231,7 +232,7 @@ keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectKeyIdentifier=hash subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer authorityKeyIdentifier=keyid:always,issuer:always
# This is what PKIX recommends but some broken software chokes on critical # This is what PKIX recommends but some broken software chokes on critical
# extensions. # extensions.
@ -264,7 +265,7 @@ basicConstraints = CA:true
# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. # Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
# issuerAltName=issuer:copy # issuerAltName=issuer:copy
authorityKeyIdentifier=keyid:always authorityKeyIdentifier=keyid:always,issuer:always
[ proxy_cert_ext ] [ proxy_cert_ext ]
# These extensions should be added when creating a proxy certificate # These extensions should be added when creating a proxy certificate
@ -297,7 +298,7 @@ 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.
@ -318,33 +319,3 @@ authorityKeyIdentifier=keyid,issuer
# This really needs to be in place for it to be a proxy certificate. # This really needs to be in place for it to be a proxy certificate.
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
####################################################################
[ tsa ]
default_tsa = tsa_config1 # the default TSA section
[ tsa_config1 ]
# These are used by the TSA reply generation only.
dir = ./demoCA # TSA root directory
serial = $dir/tsaserial # The current serial number (mandatory)
crypto_device = builtin # OpenSSL engine to use for signing
signer_cert = $dir/tsacert.pem # The TSA signing certificate
# (optional)
certs = $dir/cacert.pem # Certificate chain to include in reply
# (optional)
signer_key = $dir/private/tsakey.pem # The TSA private key (optional)
default_policy = tsa_policy1 # Policy if request did not specify it
# (optional)
other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional)
digests = md5, sha1 # Acceptable message digests (mandatory)
accuracy = secs:1, millisecs:500, microsecs:100 # (optional)
clock_precision_digits = 0 # number of digits after dot. (optional)
ordering = yes # Is ordering defined for timestamps?
# (optional, default: no)
tsa_name = yes # Must the TSA name be included in the reply?
# (optional, default: no)
ess_cert_id_chain = no # Must the ESS cert id chain be included?
# (optional, default: no)

View File

@ -6,44 +6,44 @@
#if !defined(OPENSSL_NO_DES) || !defined(NO_MD5CRYPT_1) #if !defined(OPENSSL_NO_DES) || !defined(NO_MD5CRYPT_1)
# include <assert.h> #include <assert.h>
# include <string.h> #include <string.h>
# include "apps.h" #include "apps.h"
# include <openssl/bio.h> #include <openssl/bio.h>
# 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 OPENSSL_NO_DES
# include <openssl/des.h> # include <openssl/des.h>
# endif #endif
# ifndef NO_MD5CRYPT_1 #ifndef NO_MD5CRYPT_1
# include <openssl/md5.h> # include <openssl/md5.h>
# endif #endif
# undef PROG
# define PROG passwd_main
static unsigned const char cov_2char[64] = { #undef PROG
/* from crypto/des/fcrypt.c */ #define PROG passwd_main
0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,
0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44,
0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, static unsigned const char cov_2char[64]={
0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, /* from crypto/des/fcrypt.c */
0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62, 0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35,
0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,
0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,
0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A 0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,
0x55,0x56,0x57,0x58,0x59,0x5A,0x61,0x62,
0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,
0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,
0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A
}; };
static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p, static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
char *passwd, BIO *out, int quiet, int table, char *passwd, BIO *out, int quiet, int table, int reverse,
int reverse, size_t pw_maxlen, int usecrypt, int use1, size_t pw_maxlen, int usecrypt, int use1, int useapr1);
int useapr1);
/*- /* -crypt - standard Unix password algorithm (default)
* -crypt - standard Unix password algorithm (default)
* -1 - MD5-based password algorithm * -1 - MD5-based password algorithm
* -apr1 - MD5-based password algorithm, Apache variant * -apr1 - MD5-based password algorithm, Apache variant
* -salt string - salt * -salt string - salt
@ -58,437 +58,455 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) 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; 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;
int pw_source_defined = 0; int pw_source_defined = 0;
BIO *in = NULL, *out = NULL; BIO *in = NULL, *out = NULL;
int i, badopt, opt_done; int i, badopt, opt_done;
int passed_salt = 0, quiet = 0, table = 0, reverse = 0; int passed_salt = 0, quiet = 0, table = 0, reverse = 0;
int usecrypt = 0, use1 = 0, useapr1 = 0; int usecrypt = 0, use1 = 0, useapr1 = 0;
size_t pw_maxlen = 0; size_t pw_maxlen = 0;
apps_startup(); apps_startup();
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)) if (!load_config(bio_err, NULL))
goto err; 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 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);
} }
# endif #endif
badopt = 0, opt_done = 0; badopt = 0, opt_done = 0;
i = 0; i = 0;
while (!badopt && !opt_done && argv[++i] != NULL) { while (!badopt && !opt_done && argv[++i] != NULL)
if (strcmp(argv[i], "-crypt") == 0) {
usecrypt = 1; if (strcmp(argv[i], "-crypt") == 0)
else if (strcmp(argv[i], "-1") == 0) usecrypt = 1;
use1 = 1; else if (strcmp(argv[i], "-1") == 0)
else if (strcmp(argv[i], "-apr1") == 0) use1 = 1;
useapr1 = 1; else if (strcmp(argv[i], "-apr1") == 0)
else if (strcmp(argv[i], "-salt") == 0) { useapr1 = 1;
if ((argv[i + 1] != NULL) && (salt == NULL)) { else if (strcmp(argv[i], "-salt") == 0)
passed_salt = 1; {
salt = argv[++i]; if ((argv[i+1] != NULL) && (salt == NULL))
} else {
badopt = 1; passed_salt = 1;
} else if (strcmp(argv[i], "-in") == 0) { salt = argv[++i];
if ((argv[i + 1] != NULL) && !pw_source_defined) { }
pw_source_defined = 1; else
infile = argv[++i]; badopt = 1;
} else }
badopt = 1; else if (strcmp(argv[i], "-in") == 0)
} else if (strcmp(argv[i], "-stdin") == 0) { {
if (!pw_source_defined) { if ((argv[i+1] != NULL) && !pw_source_defined)
pw_source_defined = 1; {
in_stdin = 1; pw_source_defined = 1;
} else infile = argv[++i];
badopt = 1; }
} else if (strcmp(argv[i], "-noverify") == 0) else
in_noverify = 1; badopt = 1;
else if (strcmp(argv[i], "-quiet") == 0) }
quiet = 1; else if (strcmp(argv[i], "-stdin") == 0)
else if (strcmp(argv[i], "-table") == 0) {
table = 1; if (!pw_source_defined)
else if (strcmp(argv[i], "-reverse") == 0) {
reverse = 1; pw_source_defined = 1;
else if (argv[i][0] == '-') in_stdin = 1;
badopt = 1; }
else if (!pw_source_defined) else
/* non-option arguments, use as passwords */ badopt = 1;
{ }
pw_source_defined = 1; else if (strcmp(argv[i], "-noverify") == 0)
passwds = &argv[i]; in_noverify = 1;
opt_done = 1; else if (strcmp(argv[i], "-quiet") == 0)
} else quiet = 1;
badopt = 1; else if (strcmp(argv[i], "-table") == 0)
} table = 1;
else if (strcmp(argv[i], "-reverse") == 0)
reverse = 1;
else if (argv[i][0] == '-')
badopt = 1;
else if (!pw_source_defined)
/* non-option arguments, use as passwords */
{
pw_source_defined = 1;
passwds = &argv[i];
opt_done = 1;
}
else
badopt = 1;
}
if (!usecrypt && !use1 && !useapr1) /* use default */ if (!usecrypt && !use1 && !useapr1) /* use default */
usecrypt = 1; usecrypt = 1;
if (usecrypt + use1 + useapr1 > 1) /* conflict */ if (usecrypt + use1 + useapr1 > 1) /* conflict */
badopt = 1; badopt = 1;
/* reject unsupported algorithms */ /* reject unsupported algorithms */
# ifdef OPENSSL_NO_DES #ifdef OPENSSL_NO_DES
if (usecrypt) if (usecrypt) badopt = 1;
badopt = 1; #endif
# endif #ifdef NO_MD5CRYPT_1
# ifdef NO_MD5CRYPT_1 if (use1 || useapr1) badopt = 1;
if (use1 || useapr1) #endif
badopt = 1;
# endif
if (badopt) { if (badopt)
BIO_printf(bio_err, "Usage: passwd [options] [passwords]\n"); {
BIO_printf(bio_err, "where options are\n"); BIO_printf(bio_err, "Usage: passwd [options] [passwords]\n");
# ifndef OPENSSL_NO_DES BIO_printf(bio_err, "where options are\n");
BIO_printf(bio_err, #ifndef OPENSSL_NO_DES
"-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
BIO_printf(bio_err, BIO_printf(bio_err, "-1 MD5-based password algorithm\n");
"-1 MD5-based password algorithm\n"); BIO_printf(bio_err, "-apr1 MD5-based password algorithm, Apache variant\n");
BIO_printf(bio_err, #endif
"-apr1 MD5-based password algorithm, Apache variant\n"); BIO_printf(bio_err, "-salt string use provided salt\n");
# endif BIO_printf(bio_err, "-in file read passwords from file\n");
BIO_printf(bio_err, "-salt string use provided salt\n"); BIO_printf(bio_err, "-stdin read passwords from stdin\n");
BIO_printf(bio_err, "-in file read passwords from file\n"); BIO_printf(bio_err, "-noverify never verify when reading password from terminal\n");
BIO_printf(bio_err, "-stdin read passwords from stdin\n"); BIO_printf(bio_err, "-quiet no warnings\n");
BIO_printf(bio_err, BIO_printf(bio_err, "-table format output as table\n");
"-noverify never verify when reading password from terminal\n"); BIO_printf(bio_err, "-reverse switch table columns\n");
BIO_printf(bio_err, "-quiet no warnings\n");
BIO_printf(bio_err, "-table format output as table\n"); goto err;
BIO_printf(bio_err, "-reverse switch table columns\n"); }
goto err; if ((infile != NULL) || in_stdin)
} {
in = BIO_new(BIO_s_file());
if (in == NULL)
goto err;
if (infile != NULL)
{
assert(in_stdin == 0);
if (BIO_read_filename(in, infile) <= 0)
goto err;
}
else
{
assert(in_stdin);
BIO_set_fp(in, stdin, BIO_NOCLOSE);
}
}
if (usecrypt)
pw_maxlen = 8;
else if (use1 || useapr1)
pw_maxlen = 256; /* arbitrary limit, should be enough for most passwords */
if ((infile != NULL) || in_stdin) { if (passwds == NULL)
in = BIO_new(BIO_s_file()); {
if (in == NULL) /* no passwords on the command line */
goto err;
if (infile != NULL) {
assert(in_stdin == 0);
if (BIO_read_filename(in, infile) <= 0)
goto err;
} else {
assert(in_stdin);
BIO_set_fp(in, stdin, BIO_NOCLOSE);
}
}
if (usecrypt) passwd_malloc_size = pw_maxlen + 2;
pw_maxlen = 8; /* longer than necessary so that we can warn about truncation */
else if (use1 || useapr1) passwd = passwd_malloc = OPENSSL_malloc(passwd_malloc_size);
pw_maxlen = 256; /* arbitrary limit, should be enough for most if (passwd_malloc == NULL)
* passwords */ goto err;
}
if (passwds == NULL) { if ((in == NULL) && (passwds == NULL))
/* no passwords on the command line */ {
/* build a null-terminated list */
static char *passwds_static[2] = {NULL, NULL};
passwds = passwds_static;
if (in == NULL)
if (EVP_read_pw_string(passwd_malloc, passwd_malloc_size, "Password: ", !(passed_salt || in_noverify)) != 0)
goto err;
passwds[0] = passwd_malloc;
}
passwd_malloc_size = pw_maxlen + 2; if (in == NULL)
/* {
* longer than necessary so that we can warn about truncation assert(passwds != NULL);
*/ assert(*passwds != NULL);
passwd = passwd_malloc = OPENSSL_malloc(passwd_malloc_size);
if (passwd_malloc == NULL) do /* loop over list of passwords */
goto err; {
} passwd = *passwds++;
if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out,
quiet, table, reverse, pw_maxlen, usecrypt, use1, useapr1))
goto err;
}
while (*passwds != NULL);
}
else
/* in != NULL */
{
int done;
if ((in == NULL) && (passwds == NULL)) { assert (passwd != NULL);
/* build a null-terminated list */ do
static char *passwds_static[2] = { NULL, NULL }; {
int r = BIO_gets(in, passwd, pw_maxlen + 1);
if (r > 0)
{
char *c = (strchr(passwd, '\n')) ;
if (c != NULL)
*c = 0; /* truncate at newline */
else
{
/* ignore rest of line */
char trash[BUFSIZ];
do
r = BIO_gets(in, trash, sizeof trash);
while ((r > 0) && (!strchr(trash, '\n')));
}
if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out,
quiet, table, reverse, pw_maxlen, usecrypt, use1, useapr1))
goto err;
}
done = (r <= 0);
}
while (!done);
}
ret = 0;
passwds = passwds_static; err:
if (in == NULL) ERR_print_errors(bio_err);
if (EVP_read_pw_string if (salt_malloc)
(passwd_malloc, passwd_malloc_size, "Password: ", OPENSSL_free(salt_malloc);
!(passed_salt || in_noverify)) != 0) if (passwd_malloc)
goto err; OPENSSL_free(passwd_malloc);
passwds[0] = passwd_malloc; if (in)
} BIO_free(in);
if (out)
BIO_free_all(out);
apps_shutdown();
OPENSSL_EXIT(ret);
}
if (in == NULL) {
assert(passwds != NULL);
assert(*passwds != NULL);
do { /* loop over list of passwords */ #ifndef NO_MD5CRYPT_1
passwd = *passwds++; /* MD5-based password algorithm (should probably be available as a library
if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out, * function; then the static buffer would not be acceptable).
quiet, table, reverse, pw_maxlen, usecrypt, use1, * For magic string "1", this should be compatible to the MD5-based BSD
useapr1)) * password algorithm.
goto err; * For 'magic' string "apr1", this is compatible to the MD5-based Apache
} * password algorithm.
while (*passwds != NULL); * (Apparently, the Apache password algorithm is identical except that the
} else * 'magic' string was changed -- the laziest application of the NIH principle
/* in != NULL */ * I've ever encountered.)
{
int done;
assert(passwd != NULL);
do {
int r = BIO_gets(in, passwd, pw_maxlen + 1);
if (r > 0) {
char *c = (strchr(passwd, '\n'));
if (c != NULL)
*c = 0; /* truncate at newline */
else {
/* ignore rest of line */
char trash[BUFSIZ];
do
r = BIO_gets(in, trash, sizeof trash);
while ((r > 0) && (!strchr(trash, '\n')));
}
if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out,
quiet, table, reverse, pw_maxlen, usecrypt,
use1, useapr1))
goto err;
}
done = (r <= 0);
}
while (!done);
}
ret = 0;
err:
ERR_print_errors(bio_err);
if (salt_malloc)
OPENSSL_free(salt_malloc);
if (passwd_malloc)
OPENSSL_free(passwd_malloc);
if (in)
BIO_free(in);
if (out)
BIO_free_all(out);
apps_shutdown();
OPENSSL_EXIT(ret);
}
# ifndef NO_MD5CRYPT_1
/*
* MD5-based password algorithm (should probably be available as a library
* function; then the static buffer would not be acceptable). For magic
* string "1", this should be compatible to the MD5-based BSD password
* algorithm. For 'magic' string "apr1", this is compatible to the MD5-based
* Apache password algorithm. (Apparently, the Apache password algorithm is
* identical except that the 'magic' string was changed -- the laziest
* application of the NIH principle I've ever encountered.)
*/ */
static char *md5crypt(const char *passwd, const char *magic, const char *salt) static char *md5crypt(const char *passwd, const char *magic, const char *salt)
{ {
/* "$apr1$..salt..$.......md5hash..........\0" */ static char out_buf[6 + 9 + 24 + 2]; /* "$apr1$..salt..$.......md5hash..........\0" */
static char out_buf[6 + 9 + 24 + 2]; unsigned char buf[MD5_DIGEST_LENGTH];
unsigned char buf[MD5_DIGEST_LENGTH]; char *salt_out;
char *salt_out; int n;
int n; unsigned int i;
unsigned int i; EVP_MD_CTX md,md2;
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);
out_buf[0] = '$'; out_buf[0] = '$';
out_buf[1] = 0; out_buf[1] = 0;
assert(strlen(magic) <= 4); /* "1" or "apr1" */ assert(strlen(magic) <= 4); /* "1" or "apr1" */
strncat(out_buf, magic, 4); strncat(out_buf, magic, 4);
strncat(out_buf, "$", 1); strncat(out_buf, "$", 1);
strncat(out_buf, salt, 8); strncat(out_buf, salt, 8);
assert(strlen(out_buf) <= 6 + 8); /* "$apr1$..salt.." */ assert(strlen(out_buf) <= 6 + 8); /* "$apr1$..salt.." */
salt_out = out_buf + 2 + strlen(magic); salt_out = out_buf + 2 + strlen(magic);
salt_len = strlen(salt_out); salt_len = strlen(salt_out);
assert(salt_len <= 8); assert(salt_len <= 8);
EVP_MD_CTX_init(&md);
EVP_DigestInit_ex(&md,EVP_md5(), NULL);
EVP_DigestUpdate(&md, passwd, passwd_len);
EVP_DigestUpdate(&md, "$", 1);
EVP_DigestUpdate(&md, magic, strlen(magic));
EVP_DigestUpdate(&md, "$", 1);
EVP_DigestUpdate(&md, salt_out, salt_len);
EVP_MD_CTX_init(&md2);
EVP_DigestInit_ex(&md2,EVP_md5(), NULL);
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);
EVP_MD_CTX_init(&md); for (i = passwd_len; i > sizeof buf; i -= sizeof buf)
EVP_DigestInit_ex(&md, EVP_md5(), NULL); EVP_DigestUpdate(&md, buf, sizeof buf);
EVP_DigestUpdate(&md, passwd, passwd_len); EVP_DigestUpdate(&md, buf, i);
EVP_DigestUpdate(&md, "$", 1);
EVP_DigestUpdate(&md, magic, strlen(magic)); n = passwd_len;
EVP_DigestUpdate(&md, "$", 1); while (n)
EVP_DigestUpdate(&md, salt_out, salt_len); {
EVP_DigestUpdate(&md, (n & 1) ? "\0" : passwd, 1);
n >>= 1;
}
EVP_DigestFinal_ex(&md, buf, NULL);
EVP_MD_CTX_init(&md2); for (i = 0; i < 1000; i++)
EVP_DigestInit_ex(&md2, EVP_md5(), NULL); {
EVP_DigestUpdate(&md2, passwd, passwd_len); EVP_DigestInit_ex(&md2,EVP_md5(), NULL);
EVP_DigestUpdate(&md2, salt_out, salt_len); EVP_DigestUpdate(&md2, (i & 1) ? (unsigned const char *) passwd : buf,
EVP_DigestUpdate(&md2, passwd, passwd_len); (i & 1) ? passwd_len : sizeof buf);
EVP_DigestFinal_ex(&md2, buf, NULL); if (i % 3)
EVP_DigestUpdate(&md2, salt_out, salt_len);
if (i % 7)
EVP_DigestUpdate(&md2, passwd, passwd_len);
EVP_DigestUpdate(&md2, (i & 1) ? buf : (unsigned const char *) passwd,
(i & 1) ? sizeof buf : passwd_len);
EVP_DigestFinal_ex(&md2, buf, NULL);
}
EVP_MD_CTX_cleanup(&md2);
{
/* transform buf into output string */
unsigned char buf_perm[sizeof buf];
int dest, source;
char *output;
for (i = passwd_len; i > sizeof buf; i -= sizeof buf) /* silly output permutation */
EVP_DigestUpdate(&md, buf, sizeof buf); for (dest = 0, source = 0; dest < 14; dest++, source = (source + 6) % 17)
EVP_DigestUpdate(&md, buf, i); buf_perm[dest] = buf[source];
buf_perm[14] = buf[5];
buf_perm[15] = buf[11];
#ifndef PEDANTIC /* Unfortunately, this generates a "no effect" warning */
assert(16 == sizeof buf_perm);
#endif
output = salt_out + salt_len;
assert(output == out_buf + strlen(out_buf));
*output++ = '$';
n = passwd_len; for (i = 0; i < 15; i += 3)
while (n) { {
EVP_DigestUpdate(&md, (n & 1) ? "\0" : passwd, 1); *output++ = cov_2char[buf_perm[i+2] & 0x3f];
n >>= 1; *output++ = cov_2char[((buf_perm[i+1] & 0xf) << 2) |
} (buf_perm[i+2] >> 6)];
EVP_DigestFinal_ex(&md, buf, NULL); *output++ = cov_2char[((buf_perm[i] & 3) << 4) |
(buf_perm[i+1] >> 4)];
*output++ = cov_2char[buf_perm[i] >> 2];
}
assert(i == 15);
*output++ = cov_2char[buf_perm[i] & 0x3f];
*output++ = cov_2char[buf_perm[i] >> 6];
*output = 0;
assert(strlen(out_buf) < sizeof(out_buf));
}
EVP_MD_CTX_cleanup(&md);
for (i = 0; i < 1000; i++) { return out_buf;
EVP_DigestInit_ex(&md2, EVP_md5(), NULL); }
EVP_DigestUpdate(&md2, (i & 1) ? (unsigned const char *)passwd : buf, #endif
(i & 1) ? passwd_len : sizeof buf);
if (i % 3)
EVP_DigestUpdate(&md2, salt_out, salt_len);
if (i % 7)
EVP_DigestUpdate(&md2, passwd, passwd_len);
EVP_DigestUpdate(&md2, (i & 1) ? buf : (unsigned const char *)passwd,
(i & 1) ? sizeof buf : passwd_len);
EVP_DigestFinal_ex(&md2, buf, NULL);
}
EVP_MD_CTX_cleanup(&md2);
{
/* transform buf into output string */
unsigned char buf_perm[sizeof buf];
int dest, source;
char *output;
/* silly output permutation */
for (dest = 0, source = 0; dest < 14;
dest++, source = (source + 6) % 17)
buf_perm[dest] = buf[source];
buf_perm[14] = buf[5];
buf_perm[15] = buf[11];
# ifndef PEDANTIC /* Unfortunately, this generates a "no
* effect" warning */
assert(16 == sizeof buf_perm);
# endif
output = salt_out + salt_len;
assert(output == out_buf + strlen(out_buf));
*output++ = '$';
for (i = 0; i < 15; i += 3) {
*output++ = cov_2char[buf_perm[i + 2] & 0x3f];
*output++ = cov_2char[((buf_perm[i + 1] & 0xf) << 2) |
(buf_perm[i + 2] >> 6)];
*output++ = cov_2char[((buf_perm[i] & 3) << 4) |
(buf_perm[i + 1] >> 4)];
*output++ = cov_2char[buf_perm[i] >> 2];
}
assert(i == 15);
*output++ = cov_2char[buf_perm[i] & 0x3f];
*output++ = cov_2char[buf_perm[i] >> 6];
*output = 0;
assert(strlen(out_buf) < sizeof(out_buf));
}
EVP_MD_CTX_cleanup(&md);
return out_buf;
}
# endif
static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p, static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
char *passwd, BIO *out, int quiet, int table, char *passwd, BIO *out, int quiet, int table, int reverse,
int reverse, size_t pw_maxlen, int usecrypt, int use1, size_t pw_maxlen, int usecrypt, int use1, int useapr1)
int useapr1) {
{ char *hash = NULL;
char *hash = NULL;
assert(salt_p != NULL); assert(salt_p != NULL);
assert(salt_malloc_p != NULL); assert(salt_malloc_p != NULL);
/* first make sure we have a salt */ /* first make sure we have a salt */
if (!passed_salt) { if (!passed_salt)
# ifndef OPENSSL_NO_DES {
if (usecrypt) { #ifndef OPENSSL_NO_DES
if (*salt_malloc_p == NULL) { if (usecrypt)
*salt_p = *salt_malloc_p = OPENSSL_malloc(3); {
if (*salt_malloc_p == NULL) if (*salt_malloc_p == NULL)
goto err; {
} *salt_p = *salt_malloc_p = OPENSSL_malloc(3);
if (RAND_pseudo_bytes((unsigned char *)*salt_p, 2) < 0) if (*salt_malloc_p == NULL)
goto err; goto err;
(*salt_p)[0] = cov_2char[(*salt_p)[0] & 0x3f]; /* 6 bits */ }
(*salt_p)[1] = cov_2char[(*salt_p)[1] & 0x3f]; /* 6 bits */ if (RAND_pseudo_bytes((unsigned char *)*salt_p, 2) < 0)
(*salt_p)[2] = 0; goto err;
# ifdef CHARSET_EBCDIC (*salt_p)[0] = cov_2char[(*salt_p)[0] & 0x3f]; /* 6 bits */
ascii2ebcdic(*salt_p, *salt_p, 2); /* des_crypt will convert back (*salt_p)[1] = cov_2char[(*salt_p)[1] & 0x3f]; /* 6 bits */
* to ASCII */ (*salt_p)[2] = 0;
# endif #ifdef CHARSET_EBCDIC
} ascii2ebcdic(*salt_p, *salt_p, 2); /* des_crypt will convert
# endif /* !OPENSSL_NO_DES */ * back to ASCII */
#endif
}
#endif /* !OPENSSL_NO_DES */
# ifndef NO_MD5CRYPT_1 #ifndef NO_MD5CRYPT_1
if (use1 || useapr1) { if (use1 || useapr1)
int i; {
int i;
if (*salt_malloc_p == NULL)
{
*salt_p = *salt_malloc_p = OPENSSL_malloc(9);
if (*salt_malloc_p == NULL)
goto err;
}
if (RAND_pseudo_bytes((unsigned char *)*salt_p, 8) < 0)
goto err;
for (i = 0; i < 8; i++)
(*salt_p)[i] = cov_2char[(*salt_p)[i] & 0x3f]; /* 6 bits */
(*salt_p)[8] = 0;
}
#endif /* !NO_MD5CRYPT_1 */
}
assert(*salt_p != NULL);
/* truncate password if necessary */
if ((strlen(passwd) > pw_maxlen))
{
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", (unsigned)pw_maxlen);
passwd[pw_maxlen] = 0;
}
assert(strlen(passwd) <= pw_maxlen);
/* now compute password hash */
#ifndef OPENSSL_NO_DES
if (usecrypt)
hash = DES_crypt(passwd, *salt_p);
#endif
#ifndef NO_MD5CRYPT_1
if (use1 || useapr1)
hash = md5crypt(passwd, (use1 ? "1" : "apr1"), *salt_p);
#endif
assert(hash != NULL);
if (*salt_malloc_p == NULL) { if (table && !reverse)
*salt_p = *salt_malloc_p = OPENSSL_malloc(9); BIO_printf(out, "%s\t%s\n", passwd, hash);
if (*salt_malloc_p == NULL) else if (table && reverse)
goto err; BIO_printf(out, "%s\t%s\n", hash, passwd);
} else
if (RAND_pseudo_bytes((unsigned char *)*salt_p, 8) < 0) BIO_printf(out, "%s\n", hash);
goto err; return 1;
for (i = 0; i < 8; i++) err:
(*salt_p)[i] = cov_2char[(*salt_p)[i] & 0x3f]; /* 6 bits */ return 0;
(*salt_p)[8] = 0; }
}
# endif /* !NO_MD5CRYPT_1 */
}
assert(*salt_p != NULL);
/* truncate password if necessary */
if ((strlen(passwd) > pw_maxlen)) {
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",
(unsigned)pw_maxlen);
passwd[pw_maxlen] = 0;
}
assert(strlen(passwd) <= pw_maxlen);
/* now compute password hash */
# ifndef OPENSSL_NO_DES
if (usecrypt)
hash = DES_crypt(passwd, *salt_p);
# endif
# ifndef NO_MD5CRYPT_1
if (use1 || useapr1)
hash = md5crypt(passwd, (use1 ? "1" : "apr1"), *salt_p);
# endif
assert(hash != NULL);
if (table && !reverse)
BIO_printf(out, "%s\t%s\n", passwd, hash);
else if (table && reverse)
BIO_printf(out, "%s\t%s\n", hash, passwd);
else
BIO_printf(out, "%s\n", hash);
return 1;
err:
return 0;
}
#else #else
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
fputs("Program not available.\n", stderr) fputs("Program not available.\n", stderr)
OPENSSL_EXIT(1); OPENSSL_EXIT(1);
} }
#endif #endif

File diff suppressed because it is too large Load Diff

View File

@ -5,21 +5,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
@ -69,244 +69,250 @@
#include <openssl/pem.h> #include <openssl/pem.h>
#undef PROG #undef PROG
#define PROG pkcs7_main #define PROG pkcs7_main
/*- /* -inform arg - input format - default PEM (DER or PEM)
* -inform arg - input format - default PEM (DER or PEM)
* -outform arg - output format - default PEM * -outform arg - output format - default PEM
* -in arg - input file - default stdin * -in arg - input file - default stdin
* -out arg - output file - default stdout * -out arg - output file - default stdout
* -print_certs * -print_certs
*/ */
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
PKCS7 *p7 = NULL;
int i, badops = 0;
BIO *in = NULL, *out = NULL;
int informat, outformat;
char *infile, *outfile, *prog;
int print_certs = 0, text = 0, noout = 0, p7_print = 0;
int ret = 1;
#ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
char *engine = NULL; ENGINE *e = NULL;
#endif
PKCS7 *p7=NULL;
int i,badops=0;
BIO *in=NULL,*out=NULL;
int informat,outformat;
char *infile,*outfile,*prog;
int print_certs=0,text=0,noout=0;
int ret=1;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif #endif
apps_startup(); apps_startup();
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)) if (!load_config(bio_err, NULL))
goto end; goto end;
infile = NULL; infile=NULL;
outfile = NULL; outfile=NULL;
informat = FORMAT_PEM; informat=FORMAT_PEM;
outformat = FORMAT_PEM; outformat=FORMAT_PEM;
prog = argv[0]; prog=argv[0];
argc--; argc--;
argv++; argv++;
while (argc >= 1) { while (argc >= 1)
if (strcmp(*argv, "-inform") == 0) { {
if (--argc < 1) if (strcmp(*argv,"-inform") == 0)
goto bad; {
informat = str2fmt(*(++argv)); if (--argc < 1) goto bad;
} else if (strcmp(*argv, "-outform") == 0) { informat=str2fmt(*(++argv));
if (--argc < 1) }
goto bad; else if (strcmp(*argv,"-outform") == 0)
outformat = str2fmt(*(++argv)); {
} else if (strcmp(*argv, "-in") == 0) { if (--argc < 1) goto bad;
if (--argc < 1) outformat=str2fmt(*(++argv));
goto bad; }
infile = *(++argv); else if (strcmp(*argv,"-in") == 0)
} else if (strcmp(*argv, "-out") == 0) { {
if (--argc < 1) if (--argc < 1) goto bad;
goto bad; infile= *(++argv);
outfile = *(++argv); }
} else if (strcmp(*argv, "-noout") == 0) else if (strcmp(*argv,"-out") == 0)
noout = 1; {
else if (strcmp(*argv, "-text") == 0) if (--argc < 1) goto bad;
text = 1; outfile= *(++argv);
else if (strcmp(*argv, "-print") == 0) }
p7_print = 1; else if (strcmp(*argv,"-noout") == 0)
else if (strcmp(*argv, "-print_certs") == 0) noout=1;
print_certs = 1; else if (strcmp(*argv,"-text") == 0)
text=1;
else if (strcmp(*argv,"-print_certs") == 0)
print_certs=1;
#ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv, "-engine") == 0) { else if (strcmp(*argv,"-engine") == 0)
if (--argc < 1) {
goto bad; if (--argc < 1) goto bad;
engine = *(++argv); engine= *(++argv);
} }
#endif #endif
else { else
BIO_printf(bio_err, "unknown option %s\n", *argv); {
badops = 1; BIO_printf(bio_err,"unknown option %s\n",*argv);
break; badops=1;
} break;
argc--; }
argv++; argc--;
} argv++;
}
if (badops) { if (badops)
bad: {
BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog); bad:
BIO_printf(bio_err, "where options are\n"); BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
BIO_printf(bio_err, " -inform arg input format - DER or PEM\n"); BIO_printf(bio_err,"where options are\n");
BIO_printf(bio_err, " -outform arg output format - DER or PEM\n"); BIO_printf(bio_err," -inform arg input format - DER or PEM\n");
BIO_printf(bio_err, " -in arg input file\n"); BIO_printf(bio_err," -outform arg output format - DER or PEM\n");
BIO_printf(bio_err, " -out arg output file\n"); BIO_printf(bio_err," -in arg input file\n");
BIO_printf(bio_err, BIO_printf(bio_err," -out arg output file\n");
" -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, BIO_printf(bio_err," -text print full details of certificates\n");
" -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 #ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err, BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
" -engine e use engine e, possibly a hardware device.\n");
#endif #endif
ret = 1; ret = 1;
goto end; goto end;
} }
ERR_load_crypto_strings(); ERR_load_crypto_strings();
#ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
setup_engine(bio_err, engine, 0); e = setup_engine(bio_err, engine, 0);
#endif #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))
ERR_print_errors(bio_err); {
goto end; ERR_print_errors(bio_err);
} goto end;
}
if (infile == NULL) if (infile == NULL)
BIO_set_fp(in, stdin, BIO_NOCLOSE); BIO_set_fp(in,stdin,BIO_NOCLOSE);
else { else
if (BIO_read_filename(in, infile) <= 0) { {
BIO_printf(bio_err, "unable to load input file\n"); if (BIO_read_filename(in,infile) <= 0)
ERR_print_errors(bio_err); if (in == NULL)
goto end; {
} perror(infile);
} goto end;
}
}
if (informat == FORMAT_ASN1) if (informat == FORMAT_ASN1)
p7 = d2i_PKCS7_bio(in, NULL); p7=d2i_PKCS7_bio(in,NULL);
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 { else
BIO_printf(bio_err, "bad input format specified for pkcs7 object\n"); {
goto end; BIO_printf(bio_err,"bad input format specified for pkcs7 object\n");
} goto end;
if (p7 == NULL) { }
BIO_printf(bio_err, "unable to load PKCS7 object\n"); if (p7 == NULL)
ERR_print_errors(bio_err); {
goto end; BIO_printf(bio_err,"unable to load PKCS7 object\n");
} ERR_print_errors(bio_err);
goto end;
}
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 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);
} }
#endif #endif
} else { }
if (BIO_write_filename(out, outfile) <= 0) { else
perror(outfile); {
goto end; if (BIO_write_filename(out,outfile) <= 0)
} {
} perror(outfile);
goto end;
}
}
if (p7_print) if (print_certs)
PKCS7_print_ctx(out, p7, 0, NULL); {
STACK_OF(X509) *certs=NULL;
STACK_OF(X509_CRL) *crls=NULL;
if (print_certs) { i=OBJ_obj2nid(p7->type);
STACK_OF(X509) *certs = NULL; switch (i)
STACK_OF(X509_CRL) *crls = NULL; {
case NID_pkcs7_signed:
certs=p7->d.sign->cert;
crls=p7->d.sign->crl;
break;
case NID_pkcs7_signedAndEnveloped:
certs=p7->d.signed_and_enveloped->cert;
crls=p7->d.signed_and_enveloped->crl;
break;
default:
break;
}
i = OBJ_obj2nid(p7->type); if (certs != NULL)
switch (i) { {
case NID_pkcs7_signed: X509 *x;
if (p7->d.sign != NULL) {
certs = p7->d.sign->cert;
crls = p7->d.sign->crl;
}
break;
case NID_pkcs7_signedAndEnveloped:
if (p7->d.signed_and_enveloped != NULL) {
certs = p7->d.signed_and_enveloped->cert;
crls = p7->d.signed_and_enveloped->crl;
}
break;
default:
break;
}
if (certs != NULL) { for (i=0; i<sk_X509_num(certs); i++)
X509 *x; {
x=sk_X509_value(certs,i);
if(text) X509_print(out, x);
else dump_cert_text(out, x);
for (i = 0; i < sk_X509_num(certs); i++) { if(!noout) PEM_write_bio_X509(out,x);
x = sk_X509_value(certs, i); BIO_puts(out,"\n");
if (text) }
X509_print(out, x); }
else if (crls != NULL)
dump_cert_text(out, x); {
X509_CRL *crl;
if (!noout) for (i=0; i<sk_X509_CRL_num(crls); i++)
PEM_write_bio_X509(out, x); {
BIO_puts(out, "\n"); crl=sk_X509_CRL_value(crls,i);
}
}
if (crls != NULL) {
X509_CRL *crl;
for (i = 0; i < sk_X509_CRL_num(crls); i++) { X509_CRL_print(out, crl);
crl = sk_X509_CRL_value(crls, i);
X509_CRL_print(out, crl); if(!noout)PEM_write_bio_X509_CRL(out,crl);
BIO_puts(out,"\n");
}
}
if (!noout) ret=0;
PEM_write_bio_X509_CRL(out, crl); goto end;
BIO_puts(out, "\n"); }
}
}
ret = 0; if(!noout) {
goto end; if (outformat == FORMAT_ASN1)
} i=i2d_PKCS7_bio(out,p7);
else if (outformat == FORMAT_PEM)
i=PEM_write_bio_PKCS7(out,p7);
else {
BIO_printf(bio_err,"bad output format specified for outfile\n");
goto end;
}
if (!noout) { if (!i)
if (outformat == FORMAT_ASN1) {
i = i2d_PKCS7_bio(out, p7); BIO_printf(bio_err,"unable to write pkcs7 object\n");
else if (outformat == FORMAT_PEM) ERR_print_errors(bio_err);
i = PEM_write_bio_PKCS7(out, p7); goto end;
else { }
BIO_printf(bio_err, "bad output format specified for outfile\n"); }
goto end; ret=0;
} end:
if (p7 != NULL) PKCS7_free(p7);
if (!i) { if (in != NULL) BIO_free(in);
BIO_printf(bio_err, "unable to write pkcs7 object\n"); if (out != NULL) BIO_free_all(out);
ERR_print_errors(bio_err); apps_shutdown();
goto end; OPENSSL_EXIT(ret);
} }
}
ret = 0;
end:
if (p7 != NULL)
PKCS7_free(p7);
if (in != NULL)
BIO_free(in);
if (out != NULL)
BIO_free_all(out);
apps_shutdown();
OPENSSL_EXIT(ret);
}

View File

@ -1,7 +1,6 @@
/* pkcs8.c */ /* pkcs8.c */
/* /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project * project 1999-2004.
* 1999-2004.
*/ */
/* ==================================================================== /* ====================================================================
* Copyright (c) 1999 The OpenSSL Project. All rights reserved. * Copyright (c) 1999 The OpenSSL Project. All rights reserved.
@ -11,7 +10,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@ -69,324 +68,393 @@
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
ENGINE *e = NULL; 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;
int topk8 = 0; int topk8 = 0;
int pbe_nid = -1; int pbe_nid = -1;
const EVP_CIPHER *cipher = NULL; const EVP_CIPHER *cipher = NULL;
int iter = PKCS12_DEFAULT_ITER; int iter = PKCS12_DEFAULT_ITER;
int informat, outformat; int informat, outformat;
int p8_broken = PKCS8_OK; int p8_broken = PKCS8_OK;
int nocrypt = 0; int nocrypt = 0;
X509_SIG *p8 = NULL; X509_SIG *p8;
PKCS8_PRIV_KEY_INFO *p8inf = NULL; PKCS8_PRIV_KEY_INFO *p8inf;
EVP_PKEY *pkey = NULL; EVP_PKEY *pkey=NULL;
char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL; char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL;
int badarg = 0; int badarg = 0;
int ret = 1;
#ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
char *engine = NULL; char *engine=NULL;
#endif #endif
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)) if (!load_config(bio_err, NULL))
goto end; 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 (args[1]) { if (!strcmp(*args,"-v2"))
args++; {
cipher = EVP_get_cipherbyname(*args); if (args[1])
if (!cipher) { {
BIO_printf(bio_err, "Unknown cipher %s\n", *args); args++;
badarg = 1; cipher=EVP_get_cipherbyname(*args);
} if (!cipher)
} else {
badarg = 1; BIO_printf(bio_err,
} else if (!strcmp(*args, "-v1")) { "Unknown cipher %s\n", *args);
if (args[1]) { badarg = 1;
args++; }
pbe_nid = OBJ_txt2nid(*args); }
if (pbe_nid == NID_undef) { else
BIO_printf(bio_err, "Unknown PBE algorithm %s\n", *args); badarg = 1;
badarg = 1; }
} else if (!strcmp(*args,"-v1"))
} else {
badarg = 1; if (args[1])
} else if (!strcmp(*args, "-inform")) { {
if (args[1]) { args++;
args++; pbe_nid=OBJ_txt2nid(*args);
informat = str2fmt(*args); if (pbe_nid == NID_undef)
} else {
badarg = 1; BIO_printf(bio_err,
} else if (!strcmp(*args, "-outform")) { "Unknown PBE algorithm %s\n", *args);
if (args[1]) { badarg = 1;
args++; }
outformat = str2fmt(*args); }
} else else
badarg = 1; badarg = 1;
} else if (!strcmp(*args, "-topk8")) }
topk8 = 1; else if (!strcmp(*args,"-inform"))
else if (!strcmp(*args, "-noiter")) {
iter = 1; if (args[1])
else if (!strcmp(*args, "-nocrypt")) {
nocrypt = 1; args++;
else if (!strcmp(*args, "-nooct")) informat=str2fmt(*args);
p8_broken = PKCS8_NO_OCTET; }
else if (!strcmp(*args, "-nsdb")) else badarg = 1;
p8_broken = PKCS8_NS_DB; }
else if (!strcmp(*args, "-embed")) else if (!strcmp(*args,"-outform"))
p8_broken = PKCS8_EMBEDDED_PARAM; {
else if (!strcmp(*args, "-passin")) { if (args[1])
if (!args[1]) {
goto bad; args++;
passargin = *(++args); outformat=str2fmt(*args);
} else if (!strcmp(*args, "-passout")) { }
if (!args[1]) else badarg = 1;
goto bad; }
passargout = *(++args); else if (!strcmp (*args, "-topk8"))
} topk8 = 1;
else if (!strcmp (*args, "-noiter"))
iter = 1;
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"))
{
if (!args[1]) goto bad;
passargin= *(++args);
}
else if (!strcmp(*args,"-passout"))
{
if (!args[1]) goto bad;
passargout= *(++args);
}
#ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
else if (strcmp(*args, "-engine") == 0) { else if (strcmp(*args,"-engine") == 0)
if (!args[1]) {
goto bad; if (!args[1]) goto bad;
engine = *(++args); engine= *(++args);
} }
#endif #endif
else if (!strcmp(*args, "-in")) { else if (!strcmp (*args, "-in"))
if (args[1]) { {
args++; if (args[1])
infile = *args; {
} else args++;
badarg = 1; infile = *args;
} else if (!strcmp(*args, "-out")) { }
if (args[1]) { else badarg = 1;
args++; }
outfile = *args; else if (!strcmp (*args, "-out"))
} else {
badarg = 1; if (args[1])
} else {
badarg = 1; args++;
args++; outfile = *args;
} }
else badarg = 1;
}
else badarg = 1;
args++;
}
if (badarg) { if (badarg)
bad: {
BIO_printf(bio_err, "Usage pkcs8 [options]\n"); bad:
BIO_printf(bio_err, "where options are\n"); BIO_printf(bio_err, "Usage pkcs8 [options]\n");
BIO_printf(bio_err, "-in file input file\n"); BIO_printf(bio_err, "where options are\n");
BIO_printf(bio_err, "-inform X input format (DER or PEM)\n"); BIO_printf(bio_err, "-in file input file\n");
BIO_printf(bio_err, BIO_printf(bio_err, "-inform X input format (DER or PEM)\n");
"-passin arg input file pass phrase source\n"); BIO_printf(bio_err, "-passin arg input file pass phrase source\n");
BIO_printf(bio_err, "-outform X output format (DER or PEM)\n"); BIO_printf(bio_err, "-outform X output format (DER or PEM)\n");
BIO_printf(bio_err, "-out file output file\n"); BIO_printf(bio_err, "-out file output file\n");
BIO_printf(bio_err, BIO_printf(bio_err, "-passout arg output file pass phrase source\n");
"-passout arg output file pass phrase source\n"); BIO_printf(bio_err, "-topk8 output PKCS8 file\n");
BIO_printf(bio_err, "-topk8 output PKCS8 file\n"); BIO_printf(bio_err, "-nooct use (nonstandard) no octet format\n");
BIO_printf(bio_err, BIO_printf(bio_err, "-embed use (nonstandard) embedded DSA parameters format\n");
"-nooct use (nonstandard) no octet format\n"); BIO_printf(bio_err, "-nsdb use (nonstandard) DSA Netscape DB format\n");
BIO_printf(bio_err, BIO_printf(bio_err, "-noiter use 1 as iteration count\n");
"-embed use (nonstandard) embedded DSA parameters format\n"); BIO_printf(bio_err, "-nocrypt use or expect unencrypted private key\n");
BIO_printf(bio_err, BIO_printf(bio_err, "-v2 alg use PKCS#5 v2.0 and cipher \"alg\"\n");
"-nsdb use (nonstandard) DSA Netscape DB format\n"); BIO_printf(bio_err, "-v1 obj use PKCS#5 v1.5 and cipher \"alg\"\n");
BIO_printf(bio_err, "-noiter use 1 as iteration count\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,
"-v1 obj use PKCS#5 v1.5 and cipher \"alg\"\n");
#ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err, BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
" -engine e use engine e, possibly a hardware device.\n");
#endif #endif
goto end; return 1;
} }
#ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0); e = setup_engine(bio_err, engine, 0);
#endif #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"); {
goto end; BIO_printf(bio_err, "Error getting passwords\n");
} 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"))) { {
BIO_printf(bio_err, "Can't open input file %s\n", infile); if (!(in = BIO_new_file(infile, "rb")))
goto end; {
} BIO_printf(bio_err,
} else "Can't open input file %s\n", infile);
in = BIO_new_fp(stdin, BIO_NOCLOSE); return (1);
}
}
else
in = BIO_new_fp (stdin, BIO_NOCLOSE);
if (outfile) { if (outfile)
if (!(out = BIO_new_file(outfile, "wb"))) { {
BIO_printf(bio_err, "Can't open output file %s\n", outfile); if (!(out = BIO_new_file (outfile, "wb")))
goto end; {
} BIO_printf(bio_err,
} else { "Can't open output file %s\n", outfile);
out = BIO_new_fp(stdout, BIO_NOCLOSE); return (1);
}
}
else
{
out = BIO_new_fp (stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS #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);
} }
#endif #endif
} }
if (topk8) { if (topk8)
pkey = load_key(bio_err, infile, informat, 1, passin, e, "key"); {
if (!pkey) BIO_free(in); /* Not needed in this section */
goto end; pkey = load_key(bio_err, infile, informat, 1,
if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken))) { passin, e, "key");
BIO_printf(bio_err, "Error converting key\n"); if (!pkey)
ERR_print_errors(bio_err); {
goto end; BIO_free_all(out);
} return 1;
if (nocrypt) { }
if (outformat == FORMAT_PEM) if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken)))
PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf); {
else if (outformat == FORMAT_ASN1) BIO_printf(bio_err, "Error converting key\n");
i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf); ERR_print_errors(bio_err);
else { EVP_PKEY_free(pkey);
BIO_printf(bio_err, "Bad format specified for key\n"); BIO_free_all(out);
goto end; return 1;
} }
} else { if (nocrypt)
if (passout) {
p8pass = passout; if (outformat == FORMAT_PEM)
else { PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf);
p8pass = pass; else if (outformat == FORMAT_ASN1)
if (EVP_read_pw_string i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf);
(pass, sizeof pass, "Enter Encryption Password:", 1)) else
goto end; {
} BIO_printf(bio_err, "Bad format specified for key\n");
app_RAND_load_file(NULL, bio_err, 0); PKCS8_PRIV_KEY_INFO_free(p8inf);
if (!(p8 = PKCS8_encrypt(pbe_nid, cipher, EVP_PKEY_free(pkey);
p8pass, strlen(p8pass), BIO_free_all(out);
NULL, 0, iter, p8inf))) { return (1);
BIO_printf(bio_err, "Error encrypting key\n"); }
ERR_print_errors(bio_err); }
goto end; else
} {
app_RAND_write_file(NULL, bio_err); if (passout)
if (outformat == FORMAT_PEM) p8pass = passout;
PEM_write_bio_PKCS8(out, p8); else
else if (outformat == FORMAT_ASN1) {
i2d_PKCS8_bio(out, p8); p8pass = pass;
else { if (EVP_read_pw_string(pass, sizeof pass, "Enter Encryption Password:", 1))
BIO_printf(bio_err, "Bad format specified for key\n"); {
goto end; PKCS8_PRIV_KEY_INFO_free(p8inf);
} EVP_PKEY_free(pkey);
} BIO_free_all(out);
return (1);
}
}
app_RAND_load_file(NULL, bio_err, 0);
if (!(p8 = PKCS8_encrypt(pbe_nid, cipher,
p8pass, strlen(p8pass),
NULL, 0, iter, p8inf)))
{
BIO_printf(bio_err, "Error encrypting key\n");
ERR_print_errors(bio_err);
PKCS8_PRIV_KEY_INFO_free(p8inf);
EVP_PKEY_free(pkey);
BIO_free_all(out);
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);
}
ret = 0; PKCS8_PRIV_KEY_INFO_free (p8inf);
goto end; EVP_PKEY_free(pkey);
} BIO_free_all(out);
if (passin)
OPENSSL_free(passin);
if (passout)
OPENSSL_free(passout);
return (0);
}
if (nocrypt) { if (nocrypt)
if (informat == FORMAT_PEM) {
p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in, NULL, NULL, NULL); if (informat == FORMAT_PEM)
else if (informat == FORMAT_ASN1) p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in,NULL,NULL, NULL);
p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL); else if (informat == FORMAT_ASN1)
else { p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL);
BIO_printf(bio_err, "Bad format specified for key\n"); else
goto end; {
} BIO_printf(bio_err, "Bad format specified for key\n");
} else { return (1);
if (informat == FORMAT_PEM) }
p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL); }
else if (informat == FORMAT_ASN1) else
p8 = d2i_PKCS8_bio(in, NULL); {
else { if (informat == FORMAT_PEM)
BIO_printf(bio_err, "Bad format specified for key\n"); p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL);
goto end; else if (informat == FORMAT_ASN1)
} p8 = d2i_PKCS8_bio(in, NULL);
else
{
BIO_printf(bio_err, "Bad format specified for key\n");
return (1);
}
if (!p8) { if (!p8)
BIO_printf(bio_err, "Error reading key\n"); {
ERR_print_errors(bio_err); BIO_printf (bio_err, "Error reading key\n");
goto end; ERR_print_errors(bio_err);
} return (1);
if (passin) }
p8pass = passin; if (passin)
else { p8pass = passin;
p8pass = pass; else
EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0); {
} p8pass = pass;
p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass)); EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0);
} }
p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass));
X509_SIG_free(p8);
}
if (!p8inf) { if (!p8inf)
BIO_printf(bio_err, "Error decrypting key\n"); {
ERR_print_errors(bio_err); BIO_printf(bio_err, "Error decrypting key\n");
goto end; ERR_print_errors(bio_err);
} return (1);
}
if (!(pkey = EVP_PKCS82PKEY(p8inf))) { if (!(pkey = EVP_PKCS82PKEY(p8inf)))
BIO_printf(bio_err, "Error converting key\n"); {
ERR_print_errors(bio_err); BIO_printf(bio_err, "Error converting key\n");
goto end; ERR_print_errors(bio_err);
} return (1);
}
if (p8inf->broken)
{
BIO_printf(bio_err, "Warning: broken key encoding: ");
switch (p8inf->broken)
{
case PKCS8_NO_OCTET:
BIO_printf(bio_err, "No Octet String in PrivateKey\n");
break;
if (p8inf->broken) { case PKCS8_EMBEDDED_PARAM:
BIO_printf(bio_err, "Warning: broken key encoding: "); BIO_printf(bio_err, "DSA parameters included in PrivateKey\n");
switch (p8inf->broken) { break;
case PKCS8_NO_OCTET:
BIO_printf(bio_err, "No Octet String in PrivateKey\n");
break;
case PKCS8_EMBEDDED_PARAM: case PKCS8_NS_DB:
BIO_printf(bio_err, "DSA parameters included in PrivateKey\n"); BIO_printf(bio_err, "DSA public key include in PrivateKey\n");
break; break;
case PKCS8_NS_DB: default:
BIO_printf(bio_err, "DSA public key include in PrivateKey\n"); BIO_printf(bio_err, "Unknown broken type\n");
break; break;
}
}
PKCS8_PRIV_KEY_INFO_free(p8inf);
if (outformat == FORMAT_PEM)
PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout);
else if (outformat == FORMAT_ASN1)
i2d_PrivateKey_bio(out, pkey);
else
{
BIO_printf(bio_err, "Bad format specified for key\n");
return (1);
}
case PKCS8_NEG_PRIVKEY: end:
BIO_printf(bio_err, "DSA private key value is negative\n"); EVP_PKEY_free(pkey);
break; BIO_free_all(out);
BIO_free(in);
if (passin)
OPENSSL_free(passin);
if (passout)
OPENSSL_free(passout);
default: return (0);
BIO_printf(bio_err, "Unknown broken type\n"); }
break;
}
}
if (outformat == FORMAT_PEM)
PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout);
else if (outformat == FORMAT_ASN1)
i2d_PrivateKey_bio(out, pkey);
else {
BIO_printf(bio_err, "Bad format specified for key\n");
goto end;
}
ret = 0;
end:
X509_SIG_free(p8);
PKCS8_PRIV_KEY_INFO_free(p8inf);
EVP_PKEY_free(pkey);
BIO_free_all(out);
BIO_free(in);
if (passin)
OPENSSL_free(passin);
if (passout)
OPENSSL_free(passout);
return ret;
}

View File

@ -1,251 +0,0 @@
/* apps/pkey.c */
/*
* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
* 2006
*/
/* ====================================================================
* Copyright (c) 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
* licensing@OpenSSL.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
#include <stdio.h>
#include <string.h>
#include "apps.h"
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#define PROG pkey_main
int MAIN(int, char **);
int MAIN(int argc, char **argv)
{
ENGINE *e = NULL;
char **args, *infile = NULL, *outfile = NULL;
char *passargin = NULL, *passargout = NULL;
BIO *in = NULL, *out = NULL;
const EVP_CIPHER *cipher = NULL;
int informat, outformat;
int pubin = 0, pubout = 0, pubtext = 0, text = 0, noout = 0;
EVP_PKEY *pkey = NULL;
char *passin = NULL, *passout = NULL;
int badarg = 0;
#ifndef OPENSSL_NO_ENGINE
char *engine = NULL;
#endif
int ret = 1;
if (bio_err == NULL)
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
if (!load_config(bio_err, NULL))
goto end;
informat = FORMAT_PEM;
outformat = FORMAT_PEM;
ERR_load_crypto_strings();
OpenSSL_add_all_algorithms();
args = argv + 1;
while (!badarg && *args && *args[0] == '-') {
if (!strcmp(*args, "-inform")) {
if (args[1]) {
args++;
informat = str2fmt(*args);
} else
badarg = 1;
} else if (!strcmp(*args, "-outform")) {
if (args[1]) {
args++;
outformat = str2fmt(*args);
} else
badarg = 1;
} else if (!strcmp(*args, "-passin")) {
if (!args[1])
goto bad;
passargin = *(++args);
} else if (!strcmp(*args, "-passout")) {
if (!args[1])
goto bad;
passargout = *(++args);
}
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*args, "-engine") == 0) {
if (!args[1])
goto bad;
engine = *(++args);
}
#endif
else if (!strcmp(*args, "-in")) {
if (args[1]) {
args++;
infile = *args;
} else
badarg = 1;
} else if (!strcmp(*args, "-out")) {
if (args[1]) {
args++;
outfile = *args;
} else
badarg = 1;
} else if (strcmp(*args, "-pubin") == 0) {
pubin = 1;
pubout = 1;
pubtext = 1;
} else if (strcmp(*args, "-pubout") == 0)
pubout = 1;
else if (strcmp(*args, "-text_pub") == 0) {
pubtext = 1;
text = 1;
} else if (strcmp(*args, "-text") == 0)
text = 1;
else if (strcmp(*args, "-noout") == 0)
noout = 1;
else {
cipher = EVP_get_cipherbyname(*args + 1);
if (!cipher) {
BIO_printf(bio_err, "Unknown cipher %s\n", *args + 1);
badarg = 1;
}
}
args++;
}
if (badarg) {
bad:
BIO_printf(bio_err, "Usage pkey [options]\n");
BIO_printf(bio_err, "where options are\n");
BIO_printf(bio_err, "-in file input file\n");
BIO_printf(bio_err, "-inform X input format (DER or PEM)\n");
BIO_printf(bio_err,
"-passin arg input file pass phrase source\n");
BIO_printf(bio_err, "-outform X output format (DER or PEM)\n");
BIO_printf(bio_err, "-out file output file\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
return 1;
}
#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;
}
if (outfile) {
if (!(out = BIO_new_file(outfile, "wb"))) {
BIO_printf(bio_err, "Can't open output file %s\n", outfile);
goto end;
}
} else {
out = BIO_new_fp(stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS
{
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out);
}
#endif
}
if (pubin)
pkey = load_pubkey(bio_err, infile, informat, 1,
passin, e, "Public Key");
else
pkey = load_key(bio_err, infile, informat, 1, passin, e, "key");
if (!pkey)
goto end;
if (!noout) {
if (outformat == FORMAT_PEM) {
if (pubout)
PEM_write_bio_PUBKEY(out, pkey);
else
PEM_write_bio_PrivateKey(out, pkey, cipher,
NULL, 0, NULL, passout);
} else if (outformat == FORMAT_ASN1) {
if (pubout)
i2d_PUBKEY_bio(out, pkey);
else
i2d_PrivateKey_bio(out, pkey);
} else {
BIO_printf(bio_err, "Bad format specified for key\n");
goto end;
}
}
if (text) {
if (pubtext)
EVP_PKEY_print_public(out, pkey, 0, NULL);
else
EVP_PKEY_print_private(out, pkey, 0, NULL);
}
ret = 0;
end:
EVP_PKEY_free(pkey);
BIO_free_all(out);
BIO_free(in);
if (passin)
OPENSSL_free(passin);
if (passout)
OPENSSL_free(passout);
return ret;
}

View File

@ -1,185 +0,0 @@
/* apps/pkeyparam.c */
/*
* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
* 2006
*/
/* ====================================================================
* Copyright (c) 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
* licensing@OpenSSL.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
#include <stdio.h>
#include <string.h>
#include "apps.h"
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#define PROG pkeyparam_main
int MAIN(int, char **);
int MAIN(int argc, char **argv)
{
char **args, *infile = NULL, *outfile = NULL;
BIO *in = NULL, *out = NULL;
int text = 0, noout = 0;
EVP_PKEY *pkey = NULL;
int badarg = 0;
#ifndef OPENSSL_NO_ENGINE
char *engine = NULL;
#endif
int ret = 1;
if (bio_err == NULL)
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
if (!load_config(bio_err, NULL))
goto end;
ERR_load_crypto_strings();
OpenSSL_add_all_algorithms();
args = argv + 1;
while (!badarg && *args && *args[0] == '-') {
if (!strcmp(*args, "-in")) {
if (args[1]) {
args++;
infile = *args;
} else
badarg = 1;
} else if (!strcmp(*args, "-out")) {
if (args[1]) {
args++;
outfile = *args;
} else
badarg = 1;
}
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*args, "-engine") == 0) {
if (!args[1])
goto bad;
engine = *(++args);
}
#endif
else if (strcmp(*args, "-text") == 0)
text = 1;
else if (strcmp(*args, "-noout") == 0)
noout = 1;
args++;
}
if (badarg) {
#ifndef OPENSSL_NO_ENGINE
bad:
#endif
BIO_printf(bio_err, "Usage pkeyparam [options]\n");
BIO_printf(bio_err, "where options are\n");
BIO_printf(bio_err, "-in file input file\n");
BIO_printf(bio_err, "-out file output file\n");
BIO_printf(bio_err, "-text print parameters as text\n");
BIO_printf(bio_err,
"-noout don't output encoded parameters\n");
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err,
"-engine e use engine e, possibly a hardware device.\n");
#endif
return 1;
}
#ifndef OPENSSL_NO_ENGINE
setup_engine(bio_err, engine, 0);
#endif
if (infile) {
if (!(in = BIO_new_file(infile, "r"))) {
BIO_printf(bio_err, "Can't open input file %s\n", infile);
goto end;
}
} else
in = BIO_new_fp(stdin, BIO_NOCLOSE);
if (outfile) {
if (!(out = BIO_new_file(outfile, "w"))) {
BIO_printf(bio_err, "Can't open output file %s\n", outfile);
goto end;
}
} else {
out = BIO_new_fp(stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS
{
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out);
}
#endif
}
pkey = PEM_read_bio_Parameters(in, NULL);
if (!pkey) {
BIO_printf(bio_err, "Error reading parameters\n");
ERR_print_errors(bio_err);
goto end;
}
if (!noout)
PEM_write_bio_Parameters(out, pkey);
if (text)
EVP_PKEY_print_params(out, pkey, 0, NULL);
ret = 0;
end:
EVP_PKEY_free(pkey);
BIO_free_all(out);
BIO_free(in);
return ret;
}

View File

@ -1,523 +0,0 @@
/*
* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
* 2006.
*/
/* ====================================================================
* Copyright (c) 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
* licensing@OpenSSL.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
#include "apps.h"
#include <string.h>
#include <openssl/err.h>
#include <openssl/pem.h>
#include <openssl/evp.h>
#define KEY_PRIVKEY 1
#define KEY_PUBKEY 2
#define KEY_CERT 3
static void usage(void);
#undef PROG
#define PROG pkeyutl_main
static EVP_PKEY_CTX *init_ctx(int *pkeysize,
char *keyfile, int keyform, int key_type,
char *passargin, int pkey_op, ENGINE *e);
static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
const char *file);
static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
unsigned char *out, size_t *poutlen,
unsigned char *in, size_t inlen);
int MAIN(int argc, char **);
int MAIN(int argc, char **argv)
{
BIO *in = NULL, *out = NULL;
char *infile = NULL, *outfile = NULL, *sigfile = NULL;
ENGINE *e = NULL;
int pkey_op = EVP_PKEY_OP_SIGN, key_type = KEY_PRIVKEY;
int keyform = FORMAT_PEM, peerform = FORMAT_PEM;
char badarg = 0, rev = 0;
char hexdump = 0, asn1parse = 0;
EVP_PKEY_CTX *ctx = NULL;
char *passargin = NULL;
int keysize = -1;
unsigned char *buf_in = NULL, *buf_out = NULL, *sig = NULL;
size_t buf_outlen;
int buf_inlen = 0, siglen = -1;
int ret = 1, rv = -1;
argc--;
argv++;
if (!bio_err)
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
if (!load_config(bio_err, NULL))
goto end;
ERR_load_crypto_strings();
OpenSSL_add_all_algorithms();
while (argc >= 1) {
if (!strcmp(*argv, "-in")) {
if (--argc < 1)
badarg = 1;
else
infile = *(++argv);
} else if (!strcmp(*argv, "-out")) {
if (--argc < 1)
badarg = 1;
else
outfile = *(++argv);
} else if (!strcmp(*argv, "-sigfile")) {
if (--argc < 1)
badarg = 1;
else
sigfile = *(++argv);
} else if (!strcmp(*argv, "-inkey")) {
if (--argc < 1)
badarg = 1;
else {
ctx = init_ctx(&keysize,
*(++argv), keyform, key_type,
passargin, pkey_op, e);
if (!ctx) {
BIO_puts(bio_err, "Error initializing context\n");
ERR_print_errors(bio_err);
badarg = 1;
}
}
} else if (!strcmp(*argv, "-peerkey")) {
if (--argc < 1)
badarg = 1;
else if (!setup_peer(bio_err, ctx, peerform, *(++argv)))
badarg = 1;
} else if (!strcmp(*argv, "-passin")) {
if (--argc < 1)
badarg = 1;
else
passargin = *(++argv);
} else if (strcmp(*argv, "-peerform") == 0) {
if (--argc < 1)
badarg = 1;
else
peerform = str2fmt(*(++argv));
} else if (strcmp(*argv, "-keyform") == 0) {
if (--argc < 1)
badarg = 1;
else
keyform = str2fmt(*(++argv));
}
#ifndef OPENSSL_NO_ENGINE
else if (!strcmp(*argv, "-engine")) {
if (--argc < 1)
badarg = 1;
else
e = setup_engine(bio_err, *(++argv), 0);
}
#endif
else if (!strcmp(*argv, "-pubin"))
key_type = KEY_PUBKEY;
else if (!strcmp(*argv, "-certin"))
key_type = KEY_CERT;
else if (!strcmp(*argv, "-asn1parse"))
asn1parse = 1;
else if (!strcmp(*argv, "-hexdump"))
hexdump = 1;
else if (!strcmp(*argv, "-sign"))
pkey_op = EVP_PKEY_OP_SIGN;
else if (!strcmp(*argv, "-verify"))
pkey_op = EVP_PKEY_OP_VERIFY;
else if (!strcmp(*argv, "-verifyrecover"))
pkey_op = EVP_PKEY_OP_VERIFYRECOVER;
else if (!strcmp(*argv, "-rev"))
rev = 1;
else if (!strcmp(*argv, "-encrypt"))
pkey_op = EVP_PKEY_OP_ENCRYPT;
else if (!strcmp(*argv, "-decrypt"))
pkey_op = EVP_PKEY_OP_DECRYPT;
else if (!strcmp(*argv, "-derive"))
pkey_op = EVP_PKEY_OP_DERIVE;
else if (strcmp(*argv, "-pkeyopt") == 0) {
if (--argc < 1)
badarg = 1;
else if (!ctx) {
BIO_puts(bio_err, "-pkeyopt command before -inkey\n");
badarg = 1;
} else if (pkey_ctrl_string(ctx, *(++argv)) <= 0) {
BIO_puts(bio_err, "parameter setting error\n");
ERR_print_errors(bio_err);
goto end;
}
} else
badarg = 1;
if (badarg) {
usage();
goto end;
}
argc--;
argv++;
}
if (!ctx) {
usage();
goto end;
}
if (sigfile && (pkey_op != EVP_PKEY_OP_VERIFY)) {
BIO_puts(bio_err, "Signature file specified for non verify\n");
goto end;
}
if (!sigfile && (pkey_op == EVP_PKEY_OP_VERIFY)) {
BIO_puts(bio_err, "No signature file specified for verify\n");
goto end;
}
/* FIXME: seed PRNG only if needed */
app_RAND_load_file(NULL, bio_err, 0);
if (pkey_op != EVP_PKEY_OP_DERIVE) {
if (infile) {
if (!(in = BIO_new_file(infile, "rb"))) {
BIO_puts(bio_err, "Error Opening Input File\n");
ERR_print_errors(bio_err);
goto end;
}
} else
in = BIO_new_fp(stdin, BIO_NOCLOSE);
}
if (outfile) {
if (!(out = BIO_new_file(outfile, "wb"))) {
BIO_printf(bio_err, "Error Creating Output File\n");
ERR_print_errors(bio_err);
goto end;
}
} else {
out = BIO_new_fp(stdout, BIO_NOCLOSE);
#ifdef OPENSSL_SYS_VMS
{
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
out = BIO_push(tmpbio, out);
}
#endif
}
if (sigfile) {
BIO *sigbio = BIO_new_file(sigfile, "rb");
if (!sigbio) {
BIO_printf(bio_err, "Can't open signature file %s\n", sigfile);
goto end;
}
siglen = bio_to_mem(&sig, keysize * 10, sigbio);
BIO_free(sigbio);
if (siglen <= 0) {
BIO_printf(bio_err, "Error reading signature data\n");
goto end;
}
}
if (in) {
/* Read the input data */
buf_inlen = bio_to_mem(&buf_in, keysize * 10, in);
if (buf_inlen <= 0) {
BIO_printf(bio_err, "Error reading input Data\n");
exit(1);
}
if (rev) {
size_t i;
unsigned char ctmp;
size_t l = (size_t)buf_inlen;
for (i = 0; i < l / 2; i++) {
ctmp = buf_in[i];
buf_in[i] = buf_in[l - 1 - i];
buf_in[l - 1 - i] = ctmp;
}
}
}
if (pkey_op == EVP_PKEY_OP_VERIFY) {
rv = EVP_PKEY_verify(ctx, sig, (size_t)siglen,
buf_in, (size_t)buf_inlen);
if (rv == 0)
BIO_puts(out, "Signature Verification Failure\n");
else if (rv == 1)
BIO_puts(out, "Signature Verified Successfully\n");
if (rv >= 0)
goto end;
} else {
rv = do_keyop(ctx, pkey_op, NULL, (size_t *)&buf_outlen,
buf_in, (size_t)buf_inlen);
if (rv > 0) {
buf_out = OPENSSL_malloc(buf_outlen);
if (!buf_out)
rv = -1;
else
rv = do_keyop(ctx, pkey_op,
buf_out, (size_t *)&buf_outlen,
buf_in, (size_t)buf_inlen);
}
}
if (rv <= 0) {
BIO_printf(bio_err, "Public Key operation error\n");
ERR_print_errors(bio_err);
goto end;
}
ret = 0;
if (asn1parse) {
if (!ASN1_parse_dump(out, buf_out, buf_outlen, 1, -1))
ERR_print_errors(bio_err);
} else if (hexdump)
BIO_dump(out, (char *)buf_out, buf_outlen);
else
BIO_write(out, buf_out, buf_outlen);
end:
if (ctx)
EVP_PKEY_CTX_free(ctx);
BIO_free(in);
BIO_free_all(out);
if (buf_in)
OPENSSL_free(buf_in);
if (buf_out)
OPENSSL_free(buf_out);
if (sig)
OPENSSL_free(sig);
return ret;
}
static void usage()
{
BIO_printf(bio_err, "Usage: pkeyutl [options]\n");
BIO_printf(bio_err, "-in file input file\n");
BIO_printf(bio_err, "-out file output file\n");
BIO_printf(bio_err,
"-sigfile file signature file (verify operation only)\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 a public key\n");
BIO_printf(bio_err,
"-certin input is a certificate carrying a public key\n");
BIO_printf(bio_err, "-pkeyopt X:Y public key options\n");
BIO_printf(bio_err, "-sign sign with private key\n");
BIO_printf(bio_err, "-verify verify with public key\n");
BIO_printf(bio_err,
"-verifyrecover verify with public key, recover original data\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, "-derive derive shared secret\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");
#endif
BIO_printf(bio_err, "-passin arg pass phrase source\n");
}
static EVP_PKEY_CTX *init_ctx(int *pkeysize,
char *keyfile, int keyform, int key_type,
char *passargin, int pkey_op, ENGINE *e)
{
EVP_PKEY *pkey = NULL;
EVP_PKEY_CTX *ctx = NULL;
char *passin = NULL;
int rv = -1;
X509 *x;
if (((pkey_op == EVP_PKEY_OP_SIGN) || (pkey_op == EVP_PKEY_OP_DECRYPT)
|| (pkey_op == EVP_PKEY_OP_DERIVE))
&& (key_type != KEY_PRIVKEY)) {
BIO_printf(bio_err, "A private key is needed for this operation\n");
goto end;
}
if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
BIO_printf(bio_err, "Error getting password\n");
goto end;
}
switch (key_type) {
case KEY_PRIVKEY:
pkey = load_key(bio_err, keyfile, keyform, 0,
passin, e, "Private Key");
break;
case KEY_PUBKEY:
pkey = load_pubkey(bio_err, keyfile, keyform, 0,
NULL, e, "Public Key");
break;
case KEY_CERT:
x = load_cert(bio_err, keyfile, keyform, NULL, e, "Certificate");
if (x) {
pkey = X509_get_pubkey(x);
X509_free(x);
}
break;
}
*pkeysize = EVP_PKEY_size(pkey);
if (!pkey)
goto end;
ctx = EVP_PKEY_CTX_new(pkey, e);
EVP_PKEY_free(pkey);
if (!ctx)
goto end;
switch (pkey_op) {
case EVP_PKEY_OP_SIGN:
rv = EVP_PKEY_sign_init(ctx);
break;
case EVP_PKEY_OP_VERIFY:
rv = EVP_PKEY_verify_init(ctx);
break;
case EVP_PKEY_OP_VERIFYRECOVER:
rv = EVP_PKEY_verify_recover_init(ctx);
break;
case EVP_PKEY_OP_ENCRYPT:
rv = EVP_PKEY_encrypt_init(ctx);
break;
case EVP_PKEY_OP_DECRYPT:
rv = EVP_PKEY_decrypt_init(ctx);
break;
case EVP_PKEY_OP_DERIVE:
rv = EVP_PKEY_derive_init(ctx);
break;
}
if (rv <= 0) {
EVP_PKEY_CTX_free(ctx);
ctx = NULL;
}
end:
if (passin)
OPENSSL_free(passin);
return ctx;
}
static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
const char *file)
{
EVP_PKEY *peer = NULL;
int ret;
if (!ctx) {
BIO_puts(err, "-peerkey command before -inkey\n");
return 0;
}
peer = load_pubkey(bio_err, file, peerform, 0, NULL, NULL, "Peer Key");
if (!peer) {
BIO_printf(bio_err, "Error reading peer key %s\n", file);
ERR_print_errors(err);
return 0;
}
ret = EVP_PKEY_derive_set_peer(ctx, peer);
EVP_PKEY_free(peer);
if (ret <= 0)
ERR_print_errors(err);
return ret;
}
static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
unsigned char *out, size_t *poutlen,
unsigned char *in, size_t inlen)
{
int rv = 0;
switch (pkey_op) {
case EVP_PKEY_OP_VERIFYRECOVER:
rv = EVP_PKEY_verify_recover(ctx, out, poutlen, in, inlen);
break;
case EVP_PKEY_OP_SIGN:
rv = EVP_PKEY_sign(ctx, out, poutlen, in, inlen);
break;
case EVP_PKEY_OP_ENCRYPT:
rv = EVP_PKEY_encrypt(ctx, out, poutlen, in, inlen);
break;
case EVP_PKEY_OP_DECRYPT:
rv = EVP_PKEY_decrypt(ctx, out, poutlen, in, inlen);
break;
case EVP_PKEY_OP_DERIVE:
rv = EVP_PKEY_derive(ctx, out, poutlen);
break;
}
return rv;
}

View File

@ -6,7 +6,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@ -52,100 +52,79 @@
#include "apps.h" #include "apps.h"
#include <openssl/bn.h> #include <openssl/bn.h>
#undef PROG #undef PROG
#define PROG prime_main #define PROG prime_main
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
int hex = 0; int hex=0;
int checks = 20; int checks=20;
int generate = 0; BIGNUM *bn=NULL;
int bits = 0;
int safe = 0;
BIGNUM *bn = NULL;
BIO *bio_out; BIO *bio_out;
apps_startup(); apps_startup();
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);
--argc; --argc;
++argv; ++argv;
while (argc >= 1 && **argv == '-') { while (argc >= 1 && **argv == '-')
if (!strcmp(*argv, "-hex")) {
hex = 1; if(!strcmp(*argv,"-hex"))
else if (!strcmp(*argv, "-generate")) hex=1;
generate = 1; else if(!strcmp(*argv,"-checks"))
else if (!strcmp(*argv, "-bits")) if(--argc < 1)
if (--argc < 1) goto bad;
goto bad; else
else checks=atoi(*++argv);
bits = atoi(*++argv); else
else if (!strcmp(*argv, "-safe")) {
safe = 1; BIO_printf(bio_err,"Unknown option '%s'\n",*argv);
else if (!strcmp(*argv, "-checks")) goto bad;
if (--argc < 1) }
goto bad; --argc;
else ++argv;
checks = atoi(*++argv); }
else {
BIO_printf(bio_err, "Unknown option '%s'\n", *argv);
goto bad;
}
--argc;
++argv;
}
if (argv[0] == NULL && !generate) { if (argv[0] == NULL)
BIO_printf(bio_err, "No prime specified\n"); {
goto bad; BIO_printf(bio_err,"No prime specified\n");
} goto bad;
}
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 OPENSSL_SYS_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);
} }
#endif #endif
} }
if (generate) { if(hex)
char *s; BN_hex2bn(&bn,argv[0]);
else
BN_dec2bn(&bn,argv[0]);
if (!bits) { BN_print(bio_out,bn);
BIO_printf(bio_err, "Specifiy the number of bits.\n"); BIO_printf(bio_out," is %sprime\n",
return 1; BN_is_prime_ex(bn,checks,NULL,NULL) ? "" : "not ");
}
bn = BN_new();
BN_generate_prime_ex(bn, bits, safe, NULL, NULL, NULL);
s = hex ? BN_bn2hex(bn) : BN_bn2dec(bn);
BIO_printf(bio_out, "%s\n", s);
OPENSSL_free(s);
} else {
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); BN_free(bn);
BIO_free_all(bio_out); BIO_free_all(bio_out);
return 0; return 0;
bad: bad:
BIO_printf(bio_err, "options are\n"); BIO_printf(bio_err,"options are\n");
BIO_printf(bio_err, "%-14s hex\n", "-hex"); BIO_printf(bio_err,"%-14s hex\n","-hex");
BIO_printf(bio_err, "%-14s number of checks\n", "-checks <n>"); BIO_printf(bio_err,"%-14s number of checks\n","-checks <n>");
return 1; return 1;
} }

View File

@ -1,366 +1,343 @@
/* apps/progs.h */ /* apps/progs.h */
/* automatically generated by progs.pl for openssl.c */ /* automatically generated by progs.pl for openssl.c */
extern int verify_main(int argc, char *argv[]); extern int verify_main(int argc,char *argv[]);
extern int asn1parse_main(int argc, char *argv[]); extern int asn1parse_main(int argc,char *argv[]);
extern int req_main(int argc, char *argv[]); extern int req_main(int argc,char *argv[]);
extern int dgst_main(int argc, char *argv[]); extern int dgst_main(int argc,char *argv[]);
extern int dh_main(int argc, char *argv[]); extern int dh_main(int argc,char *argv[]);
extern int dhparam_main(int argc, char *argv[]); extern int dhparam_main(int argc,char *argv[]);
extern int enc_main(int argc, char *argv[]); extern int enc_main(int argc,char *argv[]);
extern int passwd_main(int argc, char *argv[]); extern int passwd_main(int argc,char *argv[]);
extern int gendh_main(int argc, char *argv[]); extern int gendh_main(int argc,char *argv[]);
extern int errstr_main(int argc, char *argv[]); extern int errstr_main(int argc,char *argv[]);
extern int ca_main(int argc, char *argv[]); extern int ca_main(int argc,char *argv[]);
extern int crl_main(int argc, char *argv[]); extern int crl_main(int argc,char *argv[]);
extern int rsa_main(int argc, char *argv[]); 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 ec_main(int argc,char *argv[]);
extern int ecparam_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[]);
extern int genpkey_main(int argc, char *argv[]); extern int s_server_main(int argc,char *argv[]);
extern int s_server_main(int argc, char *argv[]); extern int s_client_main(int argc,char *argv[]);
extern int s_client_main(int argc, char *argv[]); extern int speed_main(int argc,char *argv[]);
extern int speed_main(int argc, char *argv[]); extern int s_time_main(int argc,char *argv[]);
extern int s_time_main(int argc, char *argv[]); extern int version_main(int argc,char *argv[]);
extern int version_main(int argc, char *argv[]); extern int pkcs7_main(int argc,char *argv[]);
extern int pkcs7_main(int argc, char *argv[]); extern int cms_main(int argc,char *argv[]);
extern int cms_main(int argc, char *argv[]); extern int crl2pkcs7_main(int argc,char *argv[]);
extern int crl2pkcs7_main(int argc, char *argv[]); extern int sess_id_main(int argc,char *argv[]);
extern int sess_id_main(int argc, char *argv[]); extern int ciphers_main(int argc,char *argv[]);
extern int ciphers_main(int argc, char *argv[]); extern int nseq_main(int argc,char *argv[]);
extern int nseq_main(int argc, char *argv[]); extern int pkcs12_main(int argc,char *argv[]);
extern int pkcs12_main(int argc, char *argv[]); extern int pkcs8_main(int argc,char *argv[]);
extern int pkcs8_main(int argc, char *argv[]); extern int spkac_main(int argc,char *argv[]);
extern int pkey_main(int argc, char *argv[]); extern int smime_main(int argc,char *argv[]);
extern int pkeyparam_main(int argc, char *argv[]); extern int rand_main(int argc,char *argv[]);
extern int pkeyutl_main(int argc, char *argv[]); extern int engine_main(int argc,char *argv[]);
extern int spkac_main(int argc, char *argv[]); extern int ocsp_main(int argc,char *argv[]);
extern int smime_main(int argc, char *argv[]); extern int prime_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[]);
extern int ts_main(int argc, char *argv[]);
extern int srp_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
#define FUNC_TYPE_CIPHER 3 #define FUNC_TYPE_CIPHER 3
#define FUNC_TYPE_PKEY 4
#define FUNC_TYPE_MD_ALG 5
#define FUNC_TYPE_CIPHER_ALG 6
typedef struct { typedef struct {
int type; int type;
const char *name; const char *name;
int (*func) (int argc, char *argv[]); int (*func)(int argc,char *argv[]);
} FUNCTION; } FUNCTION;
DECLARE_LHASH_OF(FUNCTION);
FUNCTION functions[] = { FUNCTION functions[] = {
{FUNC_TYPE_GENERAL, "verify", verify_main}, {FUNC_TYPE_GENERAL,"verify",verify_main},
{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 OPENSSL_NO_DH
{FUNC_TYPE_GENERAL, "dh", dh_main}, {FUNC_TYPE_GENERAL,"dh",dh_main},
#endif #endif
#ifndef OPENSSL_NO_DH #ifndef OPENSSL_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 OPENSSL_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 OPENSSL_NO_RSA
{FUNC_TYPE_GENERAL, "rsa", rsa_main}, {FUNC_TYPE_GENERAL,"rsa",rsa_main},
#endif #endif
#ifndef OPENSSL_NO_RSA #ifndef OPENSSL_NO_RSA
{FUNC_TYPE_GENERAL, "rsautl", rsautl_main}, {FUNC_TYPE_GENERAL,"rsautl",rsautl_main},
#endif #endif
#ifndef OPENSSL_NO_DSA #ifndef OPENSSL_NO_DSA
{FUNC_TYPE_GENERAL, "dsa", dsa_main}, {FUNC_TYPE_GENERAL,"dsa",dsa_main},
#endif #endif
#ifndef OPENSSL_NO_DSA #ifndef OPENSSL_NO_DSA
{FUNC_TYPE_GENERAL, "dsaparam", dsaparam_main}, {FUNC_TYPE_GENERAL,"dsaparam",dsaparam_main},
#endif #endif
#ifndef OPENSSL_NO_EC #ifndef OPENSSL_NO_EC
{FUNC_TYPE_GENERAL, "ec", ec_main}, {FUNC_TYPE_GENERAL,"ec",ec_main},
#endif #endif
#ifndef OPENSSL_NO_EC #ifndef OPENSSL_NO_EC
{FUNC_TYPE_GENERAL, "ecparam", ecparam_main}, {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 OPENSSL_NO_RSA
{FUNC_TYPE_GENERAL, "genrsa", genrsa_main}, {FUNC_TYPE_GENERAL,"genrsa",genrsa_main},
#endif #endif
#ifndef OPENSSL_NO_DSA #ifndef OPENSSL_NO_DSA
{FUNC_TYPE_GENERAL, "gendsa", gendsa_main}, {FUNC_TYPE_GENERAL,"gendsa",gendsa_main},
#endif #endif
{FUNC_TYPE_GENERAL, "genpkey", genpkey_main}, #if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
#if !defined(OPENSSL_NO_SOCK) {FUNC_TYPE_GENERAL,"s_server",s_server_main},
{FUNC_TYPE_GENERAL, "s_server", s_server_main},
#endif #endif
#if !defined(OPENSSL_NO_SOCK) #if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
{FUNC_TYPE_GENERAL, "s_client", s_client_main}, {FUNC_TYPE_GENERAL,"s_client",s_client_main},
#endif #endif
#ifndef OPENSSL_NO_SPEED #ifndef OPENSSL_NO_SPEED
{FUNC_TYPE_GENERAL, "speed", speed_main}, {FUNC_TYPE_GENERAL,"speed",speed_main},
#endif #endif
#if !defined(OPENSSL_NO_SOCK) #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},
#ifndef OPENSSL_NO_CMS #ifndef OPENSSL_NO_CMS
{FUNC_TYPE_GENERAL, "cms", cms_main}, {FUNC_TYPE_GENERAL,"cms",cms_main},
#endif #endif
{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) #if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_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(OPENSSL_NO_DES) && !defined(OPENSSL_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, "pkey", pkey_main}, {FUNC_TYPE_GENERAL,"spkac",spkac_main},
{FUNC_TYPE_GENERAL, "pkeyparam", pkeyparam_main}, {FUNC_TYPE_GENERAL,"smime",smime_main},
{FUNC_TYPE_GENERAL, "pkeyutl", pkeyutl_main}, {FUNC_TYPE_GENERAL,"rand",rand_main},
{FUNC_TYPE_GENERAL, "spkac", spkac_main},
{FUNC_TYPE_GENERAL, "smime", smime_main},
{FUNC_TYPE_GENERAL, "rand", rand_main},
#ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
{FUNC_TYPE_GENERAL, "engine", engine_main}, {FUNC_TYPE_GENERAL,"engine",engine_main},
#endif
#ifndef OPENSSL_NO_OCSP
{FUNC_TYPE_GENERAL, "ocsp", ocsp_main},
#endif
{FUNC_TYPE_GENERAL, "prime", prime_main},
{FUNC_TYPE_GENERAL, "ts", ts_main},
#ifndef OPENSSL_NO_SRP
{FUNC_TYPE_GENERAL, "srp", srp_main},
#endif #endif
{FUNC_TYPE_GENERAL,"ocsp",ocsp_main},
{FUNC_TYPE_GENERAL,"prime",prime_main},
#ifndef OPENSSL_NO_MD2 #ifndef OPENSSL_NO_MD2
{FUNC_TYPE_MD, "md2", dgst_main}, {FUNC_TYPE_MD,"md2",dgst_main},
#endif #endif
#ifndef OPENSSL_NO_MD4 #ifndef OPENSSL_NO_MD4
{FUNC_TYPE_MD, "md4", dgst_main}, {FUNC_TYPE_MD,"md4",dgst_main},
#endif #endif
#ifndef OPENSSL_NO_MD5 #ifndef OPENSSL_NO_MD5
{FUNC_TYPE_MD, "md5", dgst_main}, {FUNC_TYPE_MD,"md5",dgst_main},
#endif #endif
#ifndef OPENSSL_NO_SHA #ifndef OPENSSL_NO_SHA
{FUNC_TYPE_MD, "sha", dgst_main}, {FUNC_TYPE_MD,"sha",dgst_main},
#endif #endif
#ifndef OPENSSL_NO_SHA1 #ifndef OPENSSL_NO_SHA1
{FUNC_TYPE_MD, "sha1", dgst_main}, {FUNC_TYPE_MD,"sha1",dgst_main},
#endif #endif
#ifndef OPENSSL_NO_MDC2 #ifndef OPENSSL_NO_MDC2
{FUNC_TYPE_MD, "mdc2", dgst_main}, {FUNC_TYPE_MD,"mdc2",dgst_main},
#endif #endif
#ifndef OPENSSL_NO_RMD160 #ifndef OPENSSL_NO_RMD160
{FUNC_TYPE_MD, "rmd160", dgst_main}, {FUNC_TYPE_MD,"rmd160",dgst_main},
#endif #endif
#ifndef OPENSSL_NO_AES #ifndef OPENSSL_NO_AES
{FUNC_TYPE_CIPHER, "aes-128-cbc", enc_main}, {FUNC_TYPE_CIPHER,"aes-128-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_AES #ifndef OPENSSL_NO_AES
{FUNC_TYPE_CIPHER, "aes-128-ecb", enc_main}, {FUNC_TYPE_CIPHER,"aes-128-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_AES #ifndef OPENSSL_NO_AES
{FUNC_TYPE_CIPHER, "aes-192-cbc", enc_main}, {FUNC_TYPE_CIPHER,"aes-192-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_AES #ifndef OPENSSL_NO_AES
{FUNC_TYPE_CIPHER, "aes-192-ecb", enc_main}, {FUNC_TYPE_CIPHER,"aes-192-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_AES #ifndef OPENSSL_NO_AES
{FUNC_TYPE_CIPHER, "aes-256-cbc", enc_main}, {FUNC_TYPE_CIPHER,"aes-256-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_AES #ifndef OPENSSL_NO_AES
{FUNC_TYPE_CIPHER, "aes-256-ecb", enc_main}, {FUNC_TYPE_CIPHER,"aes-256-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAMELLIA #ifndef OPENSSL_NO_CAMELLIA
{FUNC_TYPE_CIPHER, "camellia-128-cbc", enc_main}, {FUNC_TYPE_CIPHER,"camellia-128-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAMELLIA #ifndef OPENSSL_NO_CAMELLIA
{FUNC_TYPE_CIPHER, "camellia-128-ecb", enc_main}, {FUNC_TYPE_CIPHER,"camellia-128-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAMELLIA #ifndef OPENSSL_NO_CAMELLIA
{FUNC_TYPE_CIPHER, "camellia-192-cbc", enc_main}, {FUNC_TYPE_CIPHER,"camellia-192-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAMELLIA #ifndef OPENSSL_NO_CAMELLIA
{FUNC_TYPE_CIPHER, "camellia-192-ecb", enc_main}, {FUNC_TYPE_CIPHER,"camellia-192-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAMELLIA #ifndef OPENSSL_NO_CAMELLIA
{FUNC_TYPE_CIPHER, "camellia-256-cbc", enc_main}, {FUNC_TYPE_CIPHER,"camellia-256-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAMELLIA #ifndef OPENSSL_NO_CAMELLIA
{FUNC_TYPE_CIPHER, "camellia-256-ecb", enc_main}, {FUNC_TYPE_CIPHER,"camellia-256-ecb",enc_main},
#endif #endif
{FUNC_TYPE_CIPHER, "base64", enc_main}, {FUNC_TYPE_CIPHER,"base64",enc_main},
#ifdef ZLIB #ifndef OPENSSL_NO_DES
{FUNC_TYPE_CIPHER, "zlib", enc_main}, {FUNC_TYPE_CIPHER,"des",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef OPENSSL_NO_DES
{FUNC_TYPE_CIPHER, "des", enc_main}, {FUNC_TYPE_CIPHER,"des3",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef OPENSSL_NO_DES
{FUNC_TYPE_CIPHER, "des3", enc_main}, {FUNC_TYPE_CIPHER,"desx",enc_main},
#endif
#ifndef OPENSSL_NO_DES
{FUNC_TYPE_CIPHER, "desx", enc_main},
#endif #endif
#ifndef OPENSSL_NO_IDEA #ifndef OPENSSL_NO_IDEA
{FUNC_TYPE_CIPHER, "idea", enc_main}, {FUNC_TYPE_CIPHER,"idea",enc_main},
#endif #endif
#ifndef OPENSSL_NO_SEED #ifndef OPENSSL_NO_SEED
{FUNC_TYPE_CIPHER, "seed", enc_main}, {FUNC_TYPE_CIPHER,"seed",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC4 #ifndef OPENSSL_NO_RC4
{FUNC_TYPE_CIPHER, "rc4", enc_main}, {FUNC_TYPE_CIPHER,"rc4",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC4 #ifndef OPENSSL_NO_RC4
{FUNC_TYPE_CIPHER, "rc4-40", enc_main}, {FUNC_TYPE_CIPHER,"rc4-40",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC2 #ifndef OPENSSL_NO_RC2
{FUNC_TYPE_CIPHER, "rc2", enc_main}, {FUNC_TYPE_CIPHER,"rc2",enc_main},
#endif #endif
#ifndef OPENSSL_NO_BF #ifndef OPENSSL_NO_BF
{FUNC_TYPE_CIPHER, "bf", enc_main}, {FUNC_TYPE_CIPHER,"bf",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAST #ifndef OPENSSL_NO_CAST
{FUNC_TYPE_CIPHER, "cast", enc_main}, {FUNC_TYPE_CIPHER,"cast",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC5 #ifndef OPENSSL_NO_RC5
{FUNC_TYPE_CIPHER, "rc5", enc_main}, {FUNC_TYPE_CIPHER,"rc5",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef OPENSSL_NO_DES
{FUNC_TYPE_CIPHER, "des-ecb", enc_main}, {FUNC_TYPE_CIPHER,"des-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef OPENSSL_NO_DES
{FUNC_TYPE_CIPHER, "des-ede", enc_main}, {FUNC_TYPE_CIPHER,"des-ede",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef OPENSSL_NO_DES
{FUNC_TYPE_CIPHER, "des-ede3", enc_main}, {FUNC_TYPE_CIPHER,"des-ede3",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef OPENSSL_NO_DES
{FUNC_TYPE_CIPHER, "des-cbc", enc_main}, {FUNC_TYPE_CIPHER,"des-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef OPENSSL_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 OPENSSL_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 OPENSSL_NO_DES
{FUNC_TYPE_CIPHER, "des-cfb", enc_main}, {FUNC_TYPE_CIPHER,"des-cfb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef OPENSSL_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 OPENSSL_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 OPENSSL_NO_DES
{FUNC_TYPE_CIPHER, "des-ofb", enc_main}, {FUNC_TYPE_CIPHER,"des-ofb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_DES #ifndef OPENSSL_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 OPENSSL_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 OPENSSL_NO_IDEA
{FUNC_TYPE_CIPHER, "idea-cbc", enc_main}, {FUNC_TYPE_CIPHER,"idea-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_IDEA #ifndef OPENSSL_NO_IDEA
{FUNC_TYPE_CIPHER, "idea-ecb", enc_main}, {FUNC_TYPE_CIPHER,"idea-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_IDEA #ifndef OPENSSL_NO_IDEA
{FUNC_TYPE_CIPHER, "idea-cfb", enc_main}, {FUNC_TYPE_CIPHER,"idea-cfb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_IDEA #ifndef OPENSSL_NO_IDEA
{FUNC_TYPE_CIPHER, "idea-ofb", enc_main}, {FUNC_TYPE_CIPHER,"idea-ofb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_SEED #ifndef OPENSSL_NO_SEED
{FUNC_TYPE_CIPHER, "seed-cbc", enc_main}, {FUNC_TYPE_CIPHER,"seed-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_SEED #ifndef OPENSSL_NO_SEED
{FUNC_TYPE_CIPHER, "seed-ecb", enc_main}, {FUNC_TYPE_CIPHER,"seed-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_SEED #ifndef OPENSSL_NO_SEED
{FUNC_TYPE_CIPHER, "seed-cfb", enc_main}, {FUNC_TYPE_CIPHER,"seed-cfb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_SEED #ifndef OPENSSL_NO_SEED
{FUNC_TYPE_CIPHER, "seed-ofb", enc_main}, {FUNC_TYPE_CIPHER,"seed-ofb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC2 #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 OPENSSL_NO_RC2
{FUNC_TYPE_CIPHER, "rc2-ecb", enc_main}, {FUNC_TYPE_CIPHER,"rc2-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC2 #ifndef OPENSSL_NO_RC2
{FUNC_TYPE_CIPHER, "rc2-cfb", enc_main}, {FUNC_TYPE_CIPHER,"rc2-cfb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC2 #ifndef OPENSSL_NO_RC2
{FUNC_TYPE_CIPHER, "rc2-ofb", enc_main}, {FUNC_TYPE_CIPHER,"rc2-ofb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC2 #ifndef OPENSSL_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 OPENSSL_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 OPENSSL_NO_BF
{FUNC_TYPE_CIPHER, "bf-cbc", enc_main}, {FUNC_TYPE_CIPHER,"bf-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_BF #ifndef OPENSSL_NO_BF
{FUNC_TYPE_CIPHER, "bf-ecb", enc_main}, {FUNC_TYPE_CIPHER,"bf-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_BF #ifndef OPENSSL_NO_BF
{FUNC_TYPE_CIPHER, "bf-cfb", enc_main}, {FUNC_TYPE_CIPHER,"bf-cfb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_BF #ifndef OPENSSL_NO_BF
{FUNC_TYPE_CIPHER, "bf-ofb", enc_main}, {FUNC_TYPE_CIPHER,"bf-ofb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAST #ifndef OPENSSL_NO_CAST
{FUNC_TYPE_CIPHER, "cast5-cbc", enc_main}, {FUNC_TYPE_CIPHER,"cast5-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAST #ifndef OPENSSL_NO_CAST
{FUNC_TYPE_CIPHER, "cast5-ecb", enc_main}, {FUNC_TYPE_CIPHER,"cast5-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAST #ifndef OPENSSL_NO_CAST
{FUNC_TYPE_CIPHER, "cast5-cfb", enc_main}, {FUNC_TYPE_CIPHER,"cast5-cfb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAST #ifndef OPENSSL_NO_CAST
{FUNC_TYPE_CIPHER, "cast5-ofb", enc_main}, {FUNC_TYPE_CIPHER,"cast5-ofb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_CAST #ifndef OPENSSL_NO_CAST
{FUNC_TYPE_CIPHER, "cast-cbc", enc_main}, {FUNC_TYPE_CIPHER,"cast-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC5 #ifndef OPENSSL_NO_RC5
{FUNC_TYPE_CIPHER, "rc5-cbc", enc_main}, {FUNC_TYPE_CIPHER,"rc5-cbc",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC5 #ifndef OPENSSL_NO_RC5
{FUNC_TYPE_CIPHER, "rc5-ecb", enc_main}, {FUNC_TYPE_CIPHER,"rc5-ecb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC5 #ifndef OPENSSL_NO_RC5
{FUNC_TYPE_CIPHER, "rc5-cfb", enc_main}, {FUNC_TYPE_CIPHER,"rc5-cfb",enc_main},
#endif #endif
#ifndef OPENSSL_NO_RC5 #ifndef OPENSSL_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

@ -13,16 +13,12 @@ print <<'EOF';
#define FUNC_TYPE_GENERAL 1 #define FUNC_TYPE_GENERAL 1
#define FUNC_TYPE_MD 2 #define FUNC_TYPE_MD 2
#define FUNC_TYPE_CIPHER 3 #define FUNC_TYPE_CIPHER 3
#define FUNC_TYPE_PKEY 4
#define FUNC_TYPE_MD_ALG 5
#define FUNC_TYPE_CIPHER_ALG 6
typedef struct { typedef struct {
int type; int type;
const char *name; const char *name;
int (*func)(int argc,char *argv[]); int (*func)(int argc,char *argv[]);
} FUNCTION; } FUNCTION;
DECLARE_LHASH_OF(FUNCTION);
FUNCTION functions[] = { FUNCTION functions[] = {
EOF EOF
@ -32,7 +28,7 @@ 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)\n${str}#endif\n"; } { print "#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))\n${str}#endif\n"; }
elsif ( ($_ =~ /^speed$/)) elsif ( ($_ =~ /^speed$/))
{ print "#ifndef OPENSSL_NO_SPEED\n${str}#endif\n"; } { print "#ifndef OPENSSL_NO_SPEED\n${str}#endif\n"; }
elsif ( ($_ =~ /^engine$/)) elsif ( ($_ =~ /^engine$/))
@ -49,10 +45,6 @@ foreach (@ARGV)
{ print "#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1)\n${str}#endif\n"; } { print "#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1)\n${str}#endif\n"; }
elsif ( ($_ =~ /^cms$/)) elsif ( ($_ =~ /^cms$/))
{ print "#ifndef OPENSSL_NO_CMS\n${str}#endif\n"; } { print "#ifndef OPENSSL_NO_CMS\n${str}#endif\n"; }
elsif ( ($_ =~ /^ocsp$/))
{ print "#ifndef OPENSSL_NO_OCSP\n${str}#endif\n"; }
elsif ( ($_ =~ /^srp$/))
{ print "#ifndef OPENSSL_NO_SRP\n${str}#endif\n"; }
else else
{ print $str; } { print $str; }
} }
@ -70,7 +62,7 @@ foreach (
"camellia-128-cbc", "camellia-128-ecb", "camellia-128-cbc", "camellia-128-ecb",
"camellia-192-cbc", "camellia-192-ecb", "camellia-192-cbc", "camellia-192-ecb",
"camellia-256-cbc", "camellia-256-ecb", "camellia-256-cbc", "camellia-256-ecb",
"base64", "zlib", "base64",
"des", "des3", "desx", "idea", "seed", "rc4", "rc4-40", "des", "des3", "desx", "idea", "seed", "rc4", "rc4-40",
"rc2", "bf", "cast", "rc5", "rc2", "bf", "cast", "rc5",
"des-ecb", "des-ede", "des-ede3", "des-ecb", "des-ede", "des-ede3",
@ -97,7 +89,6 @@ foreach (
elsif ($_ =~ /bf/) { $t="#ifndef OPENSSL_NO_BF\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 ($_ =~ /cast/) { $t="#ifndef OPENSSL_NO_CAST\n${t}#endif\n"; }
elsif ($_ =~ /rc5/) { $t="#ifndef OPENSSL_NO_RC5\n${t}#endif\n"; } elsif ($_ =~ /rc5/) { $t="#ifndef OPENSSL_NO_RC5\n${t}#endif\n"; }
elsif ($_ =~ /zlib/) { $t="#ifdef ZLIB\n${t}#endif\n"; }
print $t; print $t;
} }

View File

@ -7,7 +7,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@ -66,164 +66,162 @@
#undef PROG #undef PROG
#define PROG rand_main #define PROG rand_main
/*- /* -out file - write to file
* -out file - write to file
* -rand file:file - PRNG seed files * -rand file:file - PRNG seed files
* -base64 - base64 encode output * -base64 - encode output
* -hex - hex encode output
* num - write 'num' bytes * num - write 'num' bytes
*/ */
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
int i, r, ret = 1;
int badopt;
char *outfile = NULL;
char *inrand = NULL;
int base64 = 0;
int hex = 0;
BIO *out = NULL;
int num = -1;
#ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
char *engine = NULL; ENGINE *e = NULL;
#endif
int i, r, ret = 1;
int badopt;
char *outfile = NULL;
char *inrand = NULL;
int base64 = 0;
BIO *out = NULL;
int num = -1;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
#endif #endif
apps_startup(); apps_startup();
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)) if (!load_config(bio_err, NULL))
goto err; goto err;
badopt = 0; badopt = 0;
i = 0; i = 0;
while (!badopt && argv[++i] != NULL) { while (!badopt && argv[++i] != NULL)
if (strcmp(argv[i], "-out") == 0) { {
if ((argv[i + 1] != NULL) && (outfile == NULL)) if (strcmp(argv[i], "-out") == 0)
outfile = argv[++i]; {
else if ((argv[i+1] != NULL) && (outfile == NULL))
badopt = 1; outfile = argv[++i];
} else
badopt = 1;
}
#ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
else if (strcmp(argv[i], "-engine") == 0) { else if (strcmp(argv[i], "-engine") == 0)
if ((argv[i + 1] != NULL) && (engine == NULL)) {
engine = argv[++i]; if ((argv[i+1] != NULL) && (engine == NULL))
else engine = argv[++i];
badopt = 1; else
} badopt = 1;
}
#endif #endif
else if (strcmp(argv[i], "-rand") == 0) { else if (strcmp(argv[i], "-rand") == 0)
if ((argv[i + 1] != NULL) && (inrand == NULL)) {
inrand = argv[++i]; if ((argv[i+1] != NULL) && (inrand == NULL))
else inrand = argv[++i];
badopt = 1; else
} else if (strcmp(argv[i], "-base64") == 0) { badopt = 1;
if (!base64) }
base64 = 1; else if (strcmp(argv[i], "-base64") == 0)
else {
badopt = 1; if (!base64)
} else if (strcmp(argv[i], "-hex") == 0) { base64 = 1;
if (!hex) else
hex = 1; badopt = 1;
else }
badopt = 1; else if (isdigit((unsigned char)argv[i][0]))
} else if (isdigit((unsigned char)argv[i][0])) { {
if (num < 0) { if (num < 0)
r = sscanf(argv[i], "%d", &num); {
if (r == 0 || num < 0) r = sscanf(argv[i], "%d", &num);
badopt = 1; if (r == 0 || num < 0)
} else badopt = 1;
badopt = 1; }
} else else
badopt = 1; badopt = 1;
} }
else
badopt = 1;
}
if (hex && base64) if (num < 0)
badopt = 1; badopt = 1;
if (num < 0) if (badopt)
badopt = 1; {
BIO_printf(bio_err, "Usage: rand [options] num\n");
if (badopt) { BIO_printf(bio_err, "where options are\n");
BIO_printf(bio_err, "Usage: rand [options] num\n"); BIO_printf(bio_err, "-out file - write to file\n");
BIO_printf(bio_err, "where options are\n");
BIO_printf(bio_err, "-out file - write to file\n");
#ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err, BIO_printf(bio_err, "-engine e - use engine e, possibly a hardware device.\n");
"-engine e - use engine e, possibly a hardware device.\n");
#endif #endif
BIO_printf(bio_err, "-rand file%cfile%c... - seed PRNG from files\n", BIO_printf(bio_err, "-rand file%cfile%c... - seed PRNG from files\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); BIO_printf(bio_err, "-base64 - encode output\n");
BIO_printf(bio_err, "-base64 - base64 encode output\n"); goto err;
BIO_printf(bio_err, "-hex - hex encode output\n"); }
goto err;
}
#ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
setup_engine(bio_err, engine, 0); e = setup_engine(bio_err, engine, 0);
#endif #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",
app_RAND_load_files(inrand)); app_RAND_load_files(inrand));
out = BIO_new(BIO_s_file()); out = BIO_new(BIO_s_file());
if (out == NULL) if (out == NULL)
goto err; goto err;
if (outfile != NULL) if (outfile != NULL)
r = BIO_write_filename(out, outfile); r = BIO_write_filename(out, outfile);
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 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);
} }
#endif #endif
} }
if (r <= 0) if (r <= 0)
goto err; goto err;
if (base64) { if (base64)
BIO *b64 = BIO_new(BIO_f_base64()); {
if (b64 == NULL) BIO *b64 = BIO_new(BIO_f_base64());
goto err; if (b64 == NULL)
out = BIO_push(b64, out); goto err;
} out = BIO_push(b64, out);
}
while (num > 0)
{
unsigned char buf[4096];
int chunk;
while (num > 0) { chunk = num;
unsigned char buf[4096]; if (chunk > (int)sizeof(buf))
int chunk; chunk = sizeof buf;
r = RAND_bytes(buf, chunk);
if (r <= 0)
goto err;
BIO_write(out, buf, chunk);
num -= chunk;
}
(void)BIO_flush(out);
chunk = num; app_RAND_write_file(NULL, bio_err);
if (chunk > (int)sizeof(buf)) ret = 0;
chunk = sizeof buf;
r = RAND_bytes(buf, chunk); err:
if (r <= 0) ERR_print_errors(bio_err);
goto err; if (out)
if (!hex) BIO_free_all(out);
BIO_write(out, buf, chunk); apps_shutdown();
else { OPENSSL_EXIT(ret);
for (i = 0; i < chunk; i++) }
BIO_printf(out, "%02x", buf[i]);
}
num -= chunk;
}
if (hex)
BIO_puts(out, "\n");
(void)BIO_flush(out);
app_RAND_write_file(NULL, bio_err);
ret = 0;
err:
ERR_print_errors(bio_err);
if (out)
BIO_free_all(out);
apps_shutdown();
OPENSSL_EXIT(ret);
}

3069
apps/req.c

File diff suppressed because it is too large Load Diff

View File

@ -5,21 +5,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
@ -58,382 +58,344 @@
#include <openssl/opensslconf.h> #include <openssl/opensslconf.h>
#ifndef OPENSSL_NO_RSA #ifndef OPENSSL_NO_RSA
# include <stdio.h> #include <stdio.h>
# include <stdlib.h> #include <stdlib.h>
# include <string.h> #include <string.h>
# include <time.h> #include <time.h>
# include "apps.h" #include "apps.h"
# include <openssl/bio.h> #include <openssl/bio.h>
# include <openssl/err.h> #include <openssl/err.h>
# include <openssl/rsa.h> #include <openssl/rsa.h>
# 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> #include <openssl/bn.h>
# undef PROG #undef PROG
# define PROG rsa_main #define PROG rsa_main
/*- /* -inform arg - input format - default PEM (one of DER, NET or PEM)
* -inform arg - input format - default PEM (one of DER, NET or PEM)
* -outform arg - output format - default PEM * -outform arg - output format - default PEM
* -in arg - input file - default stdin * -in arg - input file - default stdin
* -out arg - output file - default stdout * -out arg - output file - default stdout
* -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 * -seed - encrypt output if PEM format
* -aes128 - encrypt output if PEM format * -aes128 - encrypt output if PEM format
* -aes192 - encrypt output if PEM format * -aes192 - encrypt output if PEM format
* -aes256 - encrypt output if PEM format * -aes256 - encrypt output if PEM format
* -camellia128 - encrypt output if PEM format * -camellia128 - encrypt output if PEM format
* -camellia192 - encrypt output if PEM format * -camellia192 - encrypt output if PEM format
* -camellia256 - 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
* -pubin - Expect a public key in input file. * -pubin - Expect a public key in input file.
* -pubout - Output a public key. * -pubout - Output a public key.
*/ */
int MAIN(int, char **); int MAIN(int, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
ENGINE *e = NULL; 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 *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 #ifndef OPENSSL_NO_ENGINE
char *engine = NULL; char *engine=NULL;
# endif #endif
int modulus = 0; int modulus=0;
int pvk_encr = 2; apps_startup();
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 (bio_err == NULL) if (!load_config(bio_err, NULL))
if ((bio_err = BIO_new(BIO_s_file())) != NULL) goto end;
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
if (!load_config(bio_err, NULL)) infile=NULL;
goto end; outfile=NULL;
informat=FORMAT_PEM;
outformat=FORMAT_PEM;
infile = NULL; prog=argv[0];
outfile = NULL; argc--;
informat = FORMAT_PEM; argv++;
outformat = FORMAT_PEM; 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);
}
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine= *(++argv);
}
#endif
else if (strcmp(*argv,"-sgckey") == 0)
sgckey=1;
else if (strcmp(*argv,"-pubin") == 0)
pubin=1;
else if (strcmp(*argv,"-pubout") == 0)
pubout=1;
else if (strcmp(*argv,"-noout") == 0)
noout=1;
else if (strcmp(*argv,"-text") == 0)
text=1;
else if (strcmp(*argv,"-modulus") == 0)
modulus=1;
else if (strcmp(*argv,"-check") == 0)
check=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++;
}
prog = argv[0]; if (badops)
argc--; {
argv++; bad:
while (argc >= 1) { BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
if (strcmp(*argv, "-inform") == 0) { BIO_printf(bio_err,"where options are\n");
if (--argc < 1) BIO_printf(bio_err," -inform arg input format - one of DER NET PEM\n");
goto bad; BIO_printf(bio_err," -outform arg output format - one of DER NET PEM\n");
informat = str2fmt(*(++argv)); BIO_printf(bio_err," -in arg input file\n");
} else if (strcmp(*argv, "-outform") == 0) { BIO_printf(bio_err," -sgckey Use IIS SGC key format\n");
if (--argc < 1) BIO_printf(bio_err," -passin arg input file pass phrase source\n");
goto bad; BIO_printf(bio_err," -out arg output file\n");
outformat = str2fmt(*(++argv)); BIO_printf(bio_err," -passout arg output file pass phrase source\n");
} else if (strcmp(*argv, "-in") == 0) { BIO_printf(bio_err," -des encrypt PEM output with cbc des\n");
if (--argc < 1) BIO_printf(bio_err," -des3 encrypt PEM output with ede cbc des using 168 bit key\n");
goto bad; #ifndef OPENSSL_NO_IDEA
infile = *(++argv); BIO_printf(bio_err," -idea encrypt PEM output with cbc idea\n");
} else if (strcmp(*argv, "-out") == 0) { #endif
if (--argc < 1) #ifndef OPENSSL_NO_SEED
goto bad; BIO_printf(bio_err," -seed encrypt PEM output with cbc seed\n");
outfile = *(++argv); #endif
} else if (strcmp(*argv, "-passin") == 0) { #ifndef OPENSSL_NO_AES
if (--argc < 1) BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
goto bad; BIO_printf(bio_err," encrypt PEM output with cbc aes\n");
passargin = *(++argv); #endif
} else if (strcmp(*argv, "-passout") == 0) { #ifndef OPENSSL_NO_CAMELLIA
if (--argc < 1) BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
goto bad; BIO_printf(bio_err," encrypt PEM output with cbc camellia\n");
passargout = *(++argv); #endif
} BIO_printf(bio_err," -text print the key in text\n");
# ifndef OPENSSL_NO_ENGINE BIO_printf(bio_err," -noout don't print key out\n");
else if (strcmp(*argv, "-engine") == 0) { BIO_printf(bio_err," -modulus print the RSA key modulus\n");
if (--argc < 1) BIO_printf(bio_err," -check verify key consistency\n");
goto bad; BIO_printf(bio_err," -pubin expect a public key in input file\n");
engine = *(++argv); BIO_printf(bio_err," -pubout output a public key\n");
} #ifndef OPENSSL_NO_ENGINE
# endif BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
else if (strcmp(*argv, "-sgckey") == 0) #endif
sgckey = 1; goto end;
else if (strcmp(*argv, "-pubin") == 0) }
pubin = 1;
else if (strcmp(*argv, "-pubout") == 0)
pubout = 1;
else if (strcmp(*argv, "-RSAPublicKey_in") == 0)
pubin = 2;
else if (strcmp(*argv, "-RSAPublicKey_out") == 0)
pubout = 2;
else if (strcmp(*argv, "-pvk-strong") == 0)
pvk_encr = 2;
else if (strcmp(*argv, "-pvk-weak") == 0)
pvk_encr = 1;
else if (strcmp(*argv, "-pvk-none") == 0)
pvk_encr = 0;
else if (strcmp(*argv, "-noout") == 0)
noout = 1;
else if (strcmp(*argv, "-text") == 0)
text = 1;
else if (strcmp(*argv, "-modulus") == 0)
modulus = 1;
else if (strcmp(*argv, "-check") == 0)
check = 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) { ERR_load_crypto_strings();
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 - one of DER NET PEM\n");
BIO_printf(bio_err,
" -outform arg output format - one of DER NET PEM\n");
BIO_printf(bio_err, " -in arg input file\n");
BIO_printf(bio_err, " -sgckey Use IIS SGC key format\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,
" -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");
# ifndef OPENSSL_NO_IDEA
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
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, " -modulus print the RSA key modulus\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, " -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;
}
ERR_load_crypto_strings(); #ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
#endif
# ifndef OPENSSL_NO_ENGINE if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
e = setup_engine(bio_err, engine, 0); BIO_printf(bio_err, "Error getting passwords\n");
# endif goto end;
}
if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { if(check && pubin) {
BIO_printf(bio_err, "Error getting passwords\n"); BIO_printf(bio_err, "Only private keys can be checked\n");
goto end; goto end;
} }
if (check && pubin) { out=BIO_new(BIO_s_file());
BIO_printf(bio_err, "Only private keys can be checked\n");
goto end;
}
out = BIO_new(BIO_s_file()); {
EVP_PKEY *pkey;
{ if (pubin)
EVP_PKEY *pkey; pkey = load_pubkey(bio_err, infile,
(informat == FORMAT_NETSCAPE && sgckey ?
FORMAT_IISSGC : informat), 1,
passin, e, "Public Key");
else
pkey = load_key(bio_err, infile,
(informat == FORMAT_NETSCAPE && sgckey ?
FORMAT_IISSGC : informat), 1,
passin, e, "Private Key");
if (pubin) { if (pkey != NULL)
int tmpformat = -1; rsa = pkey == NULL ? NULL : EVP_PKEY_get1_RSA(pkey);
if (pubin == 2) { EVP_PKEY_free(pkey);
if (informat == FORMAT_PEM) }
tmpformat = FORMAT_PEMRSA;
else if (informat == FORMAT_ASN1)
tmpformat = FORMAT_ASN1RSA;
} else if (informat == FORMAT_NETSCAPE && sgckey)
tmpformat = FORMAT_IISSGC;
else
tmpformat = informat;
pkey = load_pubkey(bio_err, infile, tmpformat, 1, if (rsa == NULL)
passin, e, "Public Key"); {
} else ERR_print_errors(bio_err);
pkey = load_key(bio_err, infile, goto end;
(informat == FORMAT_NETSCAPE && sgckey ? }
FORMAT_IISSGC : informat), 1,
passin, e, "Private Key");
if (pkey != NULL) if (outfile == NULL)
rsa = EVP_PKEY_get1_RSA(pkey); {
EVP_PKEY_free(pkey); 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;
}
}
if (rsa == NULL) { if (text)
ERR_print_errors(bio_err); if (!RSA_print(out,rsa,0))
goto end; {
} perror(outfile);
ERR_print_errors(bio_err);
goto end;
}
if (outfile == NULL) { if (modulus)
BIO_set_fp(out, stdout, BIO_NOCLOSE); {
# ifdef OPENSSL_SYS_VMS BIO_printf(out,"Modulus=");
{ BN_print(out,rsa->n);
BIO *tmpbio = BIO_new(BIO_f_linebuffer()); BIO_printf(out,"\n");
out = BIO_push(tmpbio, out); }
}
# endif
} else {
if (BIO_write_filename(out, outfile) <= 0) {
perror(outfile);
goto end;
}
}
if (text) if (check)
if (!RSA_print(out, rsa, 0)) { {
perror(outfile); int r = RSA_check_key(rsa);
ERR_print_errors(bio_err);
goto end;
}
if (modulus) { if (r == 1)
BIO_printf(out, "Modulus="); BIO_printf(out,"RSA key ok\n");
BN_print(out, rsa->n); else if (r == 0)
BIO_printf(out, "\n"); {
} unsigned long err;
if (check) { while ((err = ERR_peek_error()) != 0 &&
int r = RSA_check_key(rsa); ERR_GET_LIB(err) == ERR_LIB_RSA &&
ERR_GET_FUNC(err) == RSA_F_RSA_CHECK_KEY &&
ERR_GET_REASON(err) != ERR_R_MALLOC_FAILURE)
{
BIO_printf(out, "RSA key error: %s\n", ERR_reason_error_string(err));
ERR_get_error(); /* remove e from error stack */
}
}
if (r == -1 || ERR_peek_error() != 0) /* should happen only if r == -1 */
{
ERR_print_errors(bio_err);
goto end;
}
}
if (noout)
{
ret = 0;
goto end;
}
BIO_printf(bio_err,"writing RSA key\n");
if (outformat == FORMAT_ASN1) {
if(pubout || pubin) i=i2d_RSA_PUBKEY_bio(out,rsa);
else i=i2d_RSAPrivateKey_bio(out,rsa);
}
#ifndef OPENSSL_NO_RC4
else if (outformat == FORMAT_NETSCAPE)
{
unsigned char *p,*pp;
int size;
if (r == 1) i=1;
BIO_printf(out, "RSA key ok\n"); size=i2d_RSA_NET(rsa,NULL,NULL, sgckey);
else if (r == 0) { if ((p=(unsigned char *)OPENSSL_malloc(size)) == NULL)
unsigned long err; {
BIO_printf(bio_err,"Memory allocation failure\n");
while ((err = ERR_peek_error()) != 0 && goto end;
ERR_GET_LIB(err) == ERR_LIB_RSA && }
ERR_GET_FUNC(err) == RSA_F_RSA_CHECK_KEY && pp=p;
ERR_GET_REASON(err) != ERR_R_MALLOC_FAILURE) { i2d_RSA_NET(rsa,&p,NULL, sgckey);
BIO_printf(out, "RSA key error: %s\n", BIO_write(out,(char *)pp,size);
ERR_reason_error_string(err)); OPENSSL_free(pp);
ERR_get_error(); /* remove e from error stack */ }
} #endif
} else if (outformat == FORMAT_PEM) {
if(pubout || pubin)
if (r == -1 || ERR_peek_error() != 0) { /* should happen only if r == i=PEM_write_bio_RSA_PUBKEY(out,rsa);
* -1 */ else i=PEM_write_bio_RSAPrivateKey(out,rsa,
ERR_print_errors(bio_err); enc,NULL,0,NULL,passout);
goto end; } else {
} BIO_printf(bio_err,"bad output format specified for outfile\n");
} goto end;
}
if (noout) { if (!i)
ret = 0; {
goto end; BIO_printf(bio_err,"unable to write key\n");
} ERR_print_errors(bio_err);
BIO_printf(bio_err, "writing RSA key\n"); }
if (outformat == FORMAT_ASN1) { else
if (pubout || pubin) { ret=0;
if (pubout == 2) end:
i = i2d_RSAPublicKey_bio(out, rsa); if(out != NULL) BIO_free_all(out);
else if(rsa != NULL) RSA_free(rsa);
i = i2d_RSA_PUBKEY_bio(out, rsa); if(passin) OPENSSL_free(passin);
} else if(passout) OPENSSL_free(passout);
i = i2d_RSAPrivateKey_bio(out, rsa); apps_shutdown();
} OPENSSL_EXIT(ret);
# ifndef OPENSSL_NO_RC4 }
else if (outformat == FORMAT_NETSCAPE) { #else /* !OPENSSL_NO_RSA */
unsigned char *p, *pp;
int size;
i = 1;
size = i2d_RSA_NET(rsa, NULL, NULL, sgckey);
if ((p = (unsigned char *)OPENSSL_malloc(size)) == NULL) {
BIO_printf(bio_err, "Memory allocation failure\n");
goto end;
}
pp = p;
i2d_RSA_NET(rsa, &p, NULL, sgckey);
BIO_write(out, (char *)pp, size);
OPENSSL_free(pp);
}
# endif
else if (outformat == FORMAT_PEM) {
if (pubout || pubin) {
if (pubout == 2)
i = PEM_write_bio_RSAPublicKey(out, rsa);
else
i = PEM_write_bio_RSA_PUBKEY(out, rsa);
} else
i = PEM_write_bio_RSAPrivateKey(out, rsa,
enc, NULL, 0, NULL, passout);
# if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_RC4)
} else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
EVP_PKEY *pk;
pk = EVP_PKEY_new();
EVP_PKEY_set1_RSA(pk, rsa);
if (outformat == FORMAT_PVK)
i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
else if (pubin || pubout)
i = i2b_PublicKey_bio(out, pk);
else
i = i2b_PrivateKey_bio(out, pk);
EVP_PKEY_free(pk);
# endif
} else {
BIO_printf(bio_err, "bad output format specified for outfile\n");
goto end;
}
if (i <= 0) {
BIO_printf(bio_err, "unable to write key\n");
ERR_print_errors(bio_err);
} else
ret = 0;
end:
if (out != NULL)
BIO_free_all(out);
if (rsa != NULL)
RSA_free(rsa);
if (passin)
OPENSSL_free(passin);
if (passout)
OPENSSL_free(passout);
apps_shutdown();
OPENSSL_EXIT(ret);
}
#else /* !OPENSSL_NO_RSA */
# if PEDANTIC # if PEDANTIC
static void *dummy = &dummy; static void *dummy=&dummy;
# endif # endif
#endif #endif

View File

@ -1,7 +1,6 @@
/* rsautl.c */ /* rsautl.c */
/* /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project * project 2000.
* 2000.
*/ */
/* ==================================================================== /* ====================================================================
* Copyright (c) 2000 The OpenSSL Project. All rights reserved. * Copyright (c) 2000 The OpenSSL Project. All rights reserved.
@ -11,7 +10,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@ -60,316 +59,287 @@
#include <openssl/opensslconf.h> #include <openssl/opensslconf.h>
#ifndef OPENSSL_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> #include <openssl/rsa.h>
# define RSA_SIGN 1 #define RSA_SIGN 1
# define RSA_VERIFY 2 #define RSA_VERIFY 2
# define RSA_ENCRYPT 3 #define RSA_ENCRYPT 3
# define RSA_DECRYPT 4 #define RSA_DECRYPT 4
# define KEY_PRIVKEY 1 #define KEY_PRIVKEY 1
# define KEY_PUBKEY 2 #define KEY_PUBKEY 2
# define KEY_CERT 3 #define KEY_CERT 3
static void usage(void); static void usage(void);
# undef PROG #undef PROG
# define PROG rsautl_main #define PROG rsautl_main
int MAIN(int argc, char **); int MAIN(int argc, char **);
int MAIN(int argc, char **argv) int MAIN(int argc, char **argv)
{ {
ENGINE *e = NULL; 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 #ifndef OPENSSL_NO_ENGINE
char *engine = NULL; char *engine = NULL;
# endif #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;
char need_priv = 0, badarg = 0, rev = 0; char need_priv = 0, badarg = 0, rev = 0;
char hexdump = 0, asn1parse = 0; char hexdump = 0, asn1parse = 0;
X509 *x; X509 *x;
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; char *passargin = NULL, *passin = NULL;
int rsa_inlen, rsa_outlen = 0; int rsa_inlen, rsa_outlen = 0;
int keysize; int keysize;
int ret = 1; int ret = 1;
argc--; argc--;
argv++; argv++;
if (!bio_err) if(!bio_err) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
if (!load_config(bio_err, NULL)) if (!load_config(bio_err, NULL))
goto end; 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;
while(argc >= 1)
{
if (!strcmp(*argv,"-in")) {
if (--argc < 1)
badarg = 1;
else
infile= *(++argv);
} else if (!strcmp(*argv,"-out")) {
if (--argc < 1)
badarg = 1;
else
outfile= *(++argv);
} else if(!strcmp(*argv, "-inkey")) {
if (--argc < 1)
badarg = 1;
else
keyfile = *(++argv);
} else if (!strcmp(*argv,"-passin")) {
if (--argc < 1)
badarg = 1;
else
passargin= *(++argv);
} else if (strcmp(*argv,"-keyform") == 0) {
if (--argc < 1)
badarg = 1;
else
keyform=str2fmt(*(++argv));
#ifndef OPENSSL_NO_ENGINE
} else if(!strcmp(*argv, "-engine")) {
if (--argc < 1)
badarg = 1;
else
engine = *(++argv);
#endif
} else if(!strcmp(*argv, "-pubin")) {
key_type = KEY_PUBKEY;
} else if(!strcmp(*argv, "-certin")) {
key_type = KEY_CERT;
}
else if(!strcmp(*argv, "-asn1parse")) asn1parse = 1;
else if(!strcmp(*argv, "-hexdump")) hexdump = 1;
else if(!strcmp(*argv, "-raw")) pad = RSA_NO_PADDING;
else if(!strcmp(*argv, "-oaep")) pad = RSA_PKCS1_OAEP_PADDING;
else if(!strcmp(*argv, "-ssl")) pad = RSA_SSLV23_PADDING;
else if(!strcmp(*argv, "-pkcs")) pad = RSA_PKCS1_PADDING;
else if(!strcmp(*argv, "-x931")) pad = RSA_X931_PADDING;
else if(!strcmp(*argv, "-sign")) {
rsa_mode = RSA_SIGN;
need_priv = 1;
} else if(!strcmp(*argv, "-verify")) rsa_mode = RSA_VERIFY;
else if(!strcmp(*argv, "-rev")) rev = 1;
else if(!strcmp(*argv, "-encrypt")) rsa_mode = RSA_ENCRYPT;
else if(!strcmp(*argv, "-decrypt")) {
rsa_mode = RSA_DECRYPT;
need_priv = 1;
} else badarg = 1;
if(badarg) {
usage();
goto end;
}
argc--;
argv++;
}
while (argc >= 1) { if(need_priv && (key_type != KEY_PRIVKEY)) {
if (!strcmp(*argv, "-in")) { BIO_printf(bio_err, "A private key is needed for this operation\n");
if (--argc < 1) goto end;
badarg = 1; }
else
infile = *(++argv);
} else if (!strcmp(*argv, "-out")) {
if (--argc < 1)
badarg = 1;
else
outfile = *(++argv);
} else if (!strcmp(*argv, "-inkey")) {
if (--argc < 1)
badarg = 1;
else
keyfile = *(++argv);
} else if (!strcmp(*argv, "-passin")) {
if (--argc < 1)
badarg = 1;
else
passargin = *(++argv);
} else if (strcmp(*argv, "-keyform") == 0) {
if (--argc < 1)
badarg = 1;
else
keyform = str2fmt(*(++argv));
# ifndef OPENSSL_NO_ENGINE
} else if (!strcmp(*argv, "-engine")) {
if (--argc < 1)
badarg = 1;
else
engine = *(++argv);
# endif
} else if (!strcmp(*argv, "-pubin")) {
key_type = KEY_PUBKEY;
} else if (!strcmp(*argv, "-certin")) {
key_type = KEY_CERT;
} else if (!strcmp(*argv, "-asn1parse"))
asn1parse = 1;
else if (!strcmp(*argv, "-hexdump"))
hexdump = 1;
else if (!strcmp(*argv, "-raw"))
pad = RSA_NO_PADDING;
else if (!strcmp(*argv, "-oaep"))
pad = RSA_PKCS1_OAEP_PADDING;
else if (!strcmp(*argv, "-ssl"))
pad = RSA_SSLV23_PADDING;
else if (!strcmp(*argv, "-pkcs"))
pad = RSA_PKCS1_PADDING;
else if (!strcmp(*argv, "-x931"))
pad = RSA_X931_PADDING;
else if (!strcmp(*argv, "-sign")) {
rsa_mode = RSA_SIGN;
need_priv = 1;
} else if (!strcmp(*argv, "-verify"))
rsa_mode = RSA_VERIFY;
else if (!strcmp(*argv, "-rev"))
rev = 1;
else if (!strcmp(*argv, "-encrypt"))
rsa_mode = RSA_ENCRYPT;
else if (!strcmp(*argv, "-decrypt")) {
rsa_mode = RSA_DECRYPT;
need_priv = 1;
} else
badarg = 1;
if (badarg) {
usage();
goto end;
}
argc--;
argv++;
}
if (need_priv && (key_type != KEY_PRIVKEY)) { #ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err, "A private key is needed for this operation\n"); e = setup_engine(bio_err, engine, 0);
goto end; #endif
} if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
# ifndef OPENSSL_NO_ENGINE BIO_printf(bio_err, "Error getting password\n");
e = setup_engine(bio_err, engine, 0); goto end;
# 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) {
case KEY_PRIVKEY:
pkey = load_key(bio_err, keyfile, keyform, 0,
passin, e, "Private Key");
break;
switch (key_type) { case KEY_PUBKEY:
case KEY_PRIVKEY: pkey = load_pubkey(bio_err, keyfile, keyform, 0,
pkey = load_key(bio_err, keyfile, keyform, 0, NULL, e, "Public Key");
passin, e, "Private Key"); break;
break;
case KEY_PUBKEY: case KEY_CERT:
pkey = load_pubkey(bio_err, keyfile, keyform, 0, x = load_cert(bio_err, keyfile, keyform,
NULL, e, "Public Key"); NULL, e, "Certificate");
break; if(x) {
pkey = X509_get_pubkey(x);
X509_free(x);
}
break;
}
case KEY_CERT: if(!pkey) {
x = load_cert(bio_err, keyfile, keyform, NULL, e, "Certificate"); return 1;
if (x) { }
pkey = X509_get_pubkey(x);
X509_free(x);
}
break;
}
if (!pkey) { rsa = EVP_PKEY_get1_RSA(pkey);
return 1; EVP_PKEY_free(pkey);
}
rsa = EVP_PKEY_get1_RSA(pkey); if(!rsa) {
EVP_PKEY_free(pkey); BIO_printf(bio_err, "Error getting RSA key\n");
ERR_print_errors(bio_err);
goto end;
}
if (!rsa) {
BIO_printf(bio_err, "Error getting RSA key\n");
ERR_print_errors(bio_err);
goto end;
}
if (infile) { if(infile) {
if (!(in = BIO_new_file(infile, "rb"))) { if(!(in = BIO_new_file(infile, "rb"))) {
BIO_printf(bio_err, "Error Reading Input File\n"); BIO_printf(bio_err, "Error Reading Input File\n");
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
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, "wb"))) { if(!(out = BIO_new_file(outfile, "wb"))) {
BIO_printf(bio_err, "Error Reading Output File\n"); BIO_printf(bio_err, "Error Reading Output File\n");
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
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 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);
} }
# endif #endif
} }
keysize = RSA_size(rsa); keysize = RSA_size(rsa);
rsa_in = OPENSSL_malloc(keysize * 2); rsa_in = OPENSSL_malloc(keysize * 2);
rsa_out = OPENSSL_malloc(keysize); rsa_out = OPENSSL_malloc(keysize);
if (!rsa_in || !rsa_out) {
BIO_printf(bio_err, "Out of memory\n");
ERR_print_errors(bio_err);
goto end;
}
/* Read the input data */ /* Read the input data */
rsa_inlen = BIO_read(in, rsa_in, keysize * 2); rsa_inlen = BIO_read(in, rsa_in, keysize * 2);
if (rsa_inlen <= 0) { if(rsa_inlen <= 0) {
BIO_printf(bio_err, "Error reading input Data\n"); BIO_printf(bio_err, "Error reading input Data\n");
exit(1); exit(1);
} }
if (rev) { if(rev) {
int i; int i;
unsigned char ctmp; unsigned char ctmp;
for (i = 0; i < rsa_inlen / 2; i++) { for(i = 0; i < rsa_inlen/2; i++) {
ctmp = rsa_in[i]; ctmp = rsa_in[i];
rsa_in[i] = rsa_in[rsa_inlen - 1 - i]; rsa_in[i] = rsa_in[rsa_inlen - 1 - i];
rsa_in[rsa_inlen - 1 - i] = ctmp; rsa_in[rsa_inlen - 1 - i] = ctmp;
} }
} }
switch (rsa_mode) { switch(rsa_mode) {
case RSA_VERIFY: case RSA_VERIFY:
rsa_outlen = RSA_public_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad); rsa_outlen = RSA_public_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
break; break;
case RSA_SIGN: case RSA_SIGN:
rsa_outlen = rsa_outlen = RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad); break;
break;
case RSA_ENCRYPT: case RSA_ENCRYPT:
rsa_outlen = RSA_public_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad); rsa_outlen = RSA_public_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
break; break;
case RSA_DECRYPT: case RSA_DECRYPT:
rsa_outlen = rsa_outlen = RSA_private_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
RSA_private_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad); break;
break;
} }
if (rsa_outlen <= 0) { if(rsa_outlen <= 0) {
BIO_printf(bio_err, "RSA operation error\n"); BIO_printf(bio_err, "RSA operation error\n");
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
goto end; goto end;
} }
ret = 0; ret = 0;
if (asn1parse) { if(asn1parse) {
if (!ASN1_parse_dump(out, rsa_out, rsa_outlen, 1, -1)) { if(!ASN1_parse_dump(out, rsa_out, rsa_outlen, 1, -1)) {
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
} }
} else if (hexdump) } else if(hexdump) BIO_dump(out, (char *)rsa_out, rsa_outlen);
BIO_dump(out, (char *)rsa_out, rsa_outlen); else BIO_write(out, rsa_out, rsa_outlen);
else end:
BIO_write(out, rsa_out, rsa_outlen); RSA_free(rsa);
end: BIO_free(in);
RSA_free(rsa); BIO_free_all(out);
BIO_free(in); if(rsa_in) OPENSSL_free(rsa_in);
BIO_free_all(out); if(rsa_out) OPENSSL_free(rsa_out);
if (rsa_in) if(passin) OPENSSL_free(passin);
OPENSSL_free(rsa_in); return ret;
if (rsa_out)
OPENSSL_free(rsa_out);
if (passin)
OPENSSL_free(passin);
return ret;
} }
static void usage() static void usage()
{ {
BIO_printf(bio_err, "Usage: rsautl [options]\n"); BIO_printf(bio_err, "Usage: rsautl [options]\n");
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, "-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, BIO_printf(bio_err, "-certin input is a certificate carrying an RSA public key\n");
"-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"); BIO_printf(bio_err, "-raw use no padding\n");
BIO_printf(bio_err, "-raw use no padding\n"); BIO_printf(bio_err, "-pkcs use PKCS#1 v1.5 padding (default)\n");
BIO_printf(bio_err, BIO_printf(bio_err, "-oaep use PKCS#1 OAEP\n");
"-pkcs use PKCS#1 v1.5 padding (default)\n"); BIO_printf(bio_err, "-sign sign with private key\n");
BIO_printf(bio_err, "-oaep use PKCS#1 OAEP\n"); BIO_printf(bio_err, "-verify verify with public key\n");
BIO_printf(bio_err, "-sign sign with private key\n"); BIO_printf(bio_err, "-encrypt encrypt with public key\n");
BIO_printf(bio_err, "-verify verify with public key\n"); BIO_printf(bio_err, "-decrypt decrypt with private key\n");
BIO_printf(bio_err, "-encrypt encrypt with public key\n"); BIO_printf(bio_err, "-hexdump hex dump output\n");
BIO_printf(bio_err, "-decrypt decrypt with private key\n"); #ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err, "-hexdump hex dump output\n"); BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n");
# ifndef OPENSSL_NO_ENGINE BIO_printf (bio_err, "-passin arg pass phrase source\n");
BIO_printf(bio_err, #endif
"-engine e use engine e, possibly a hardware device.\n");
BIO_printf(bio_err, "-passin arg pass phrase source\n");
# endif
} }
#else /* !OPENSSL_NO_RSA */
# if PEDANTIC
static void *dummy = &dummy;
# endif
#endif #endif

View File

@ -5,21 +5,21 @@
* This package is an SSL implementation written * This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com). * by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL. * The implementation was written so as to conform with Netscapes SSL.
* *
* This library is free for commercial and non-commercial use as long as * This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions * the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA, * apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation * lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms * included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com). * except that the holder is Tim Hudson (tjh@cryptsoft.com).
* *
* Copyright remains Eric Young's, and as such any Copyright notices in * Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed. * the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution * If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used. * as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or * This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package. * in documentation (online or textual) provided with the package.
* *
* 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
* are met: * are met:
@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)" * Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library * The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-). * being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from * 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement: * the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
* *
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* The licence and distribution terms for any publically available version or * The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be * derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence * copied and put under another distribution licence
@ -63,7 +63,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@ -108,52 +108,47 @@
* Hudson (tjh@cryptsoft.com). * Hudson (tjh@cryptsoft.com).
* *
*/ */
/* conflicts with winsock2 stuff on netware */ #if !defined(OPENSSL_SYS_NETWARE) /* conflicts with winsock2 stuff on netware */
#if !defined(OPENSSL_SYS_NETWARE) #include <sys/types.h>
# include <sys/types.h>
#endif #endif
#include <openssl/opensslconf.h> #include <openssl/opensslconf.h>
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) #if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
# include <conio.h> #include <conio.h>
#endif #endif
#if defined(OPENSSL_SYS_MSDOS) && !defined(_WIN32) #ifdef OPENSSL_SYS_MSDOS
# define _kbhit kbhit #define _kbhit kbhit
#endif #endif
#if defined(OPENSSL_SYS_VMS) && !defined(FD_SET) #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 */
*/ #define MAX_NOFILE 32
/* These definitions are borrowed from SOCKETSHR. /Richard Levitte */ #define NBBY 8 /* number of bits in a byte */
# define MAX_NOFILE 32
# define NBBY 8 /* number of bits in a byte */
# ifndef FD_SETSIZE #ifndef FD_SETSIZE
# define FD_SETSIZE MAX_NOFILE #define FD_SETSIZE MAX_NOFILE
# endif /* FD_SETSIZE */ #endif /* FD_SETSIZE */
/* How many things we'll allow select to use. 0 if unlimited */ /* How many things we'll allow select to use. 0 if unlimited */
# define MAXSELFD MAX_NOFILE #define MAXSELFD MAX_NOFILE
typedef int fd_mask; /* int here! VMS prototypes int, not long */ typedef int fd_mask; /* int here! VMS prototypes int, not long */
# define NFDBITS (sizeof(fd_mask) * NBBY)/* bits per mask (power of 2!) */ #define NFDBITS (sizeof(fd_mask) * NBBY) /* bits per mask (power of 2!)*/
# define NFDSHIFT 5 /* Shift based on above */ #define NFDSHIFT 5 /* Shift based on above */
typedef fd_mask fd_set; typedef fd_mask fd_set;
# define FD_SET(n, p) (*(p) |= (1 << ((n) % NFDBITS))) #define FD_SET(n, p) (*(p) |= (1 << ((n) % NFDBITS)))
# define FD_CLR(n, p) (*(p) &= ~(1 << ((n) % NFDBITS))) #define FD_CLR(n, p) (*(p) &= ~(1 << ((n) % NFDBITS)))
# define FD_ISSET(n, p) (*(p) & (1 << ((n) % NFDBITS))) #define FD_ISSET(n, p) (*(p) & (1 << ((n) % NFDBITS)))
# define FD_ZERO(p) memset((char *)(p), 0, sizeof(*(p))) #define FD_ZERO(p) memset((char *)(p), 0, sizeof(*(p)))
#endif #endif
#define PORT 4433 #define PORT 4433
#define PORT_STR "4433" #define PORT_STR "4433"
#define PROTOCOL "tcp" #define PROTOCOL "tcp"
int do_server(int port, int type, int *ret, int do_server(int port, int type, int *ret, int (*cb) (char *hostname, int s, unsigned char *context), unsigned char *context);
int (*cb) (char *hostname, int s, unsigned char *context),
unsigned 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);
#endif #endif
@ -164,21 +159,15 @@ int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key);
int init_client(int *sock, char *server, int port, int type); int init_client(int *sock, char *server, int port, int type);
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, int extract_host_port(char *str,char **host_ptr,unsigned char *ip,short *p);
short *p);
long MS_CALLBACK bio_dump_callback(BIO *bio, int cmd, const char *argp, long MS_CALLBACK bio_dump_callback(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(const SSL *s, int where, int ret);
void MS_CALLBACK msg_cb(int write_p, int version, int content_type, void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg);
const void *buf, size_t len, SSL *ssl, void *arg);
void MS_CALLBACK tlsext_cb(SSL *s, int client_server, int type, void MS_CALLBACK tlsext_cb(SSL *s, int client_server, int type,
unsigned char *data, int len, void *arg); unsigned char *data, int len,
void *arg);
#endif #endif
int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie,
unsigned int *cookie_len);
int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie,
unsigned int cookie_len);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,52 +1,369 @@
subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = Test Server Cert issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA subject= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Server test cert (512 bit)
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIID5zCCAs+gAwIBAgIJALnu1NlVpZ6zMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV MIIB6TCCAVICAQYwDQYJKoZIhvcNAQEEBQAwWzELMAkGA1UEBhMCQVUxEzARBgNV
BAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMSIwIAYDVQQLDBlGT1IgVEVT BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYD
VElORyBQVVJQT1NFUyBPTkxZMSUwIwYDVQQDDBxPcGVuU1NMIFRlc3QgSW50ZXJt VQQDExJUZXN0IENBICgxMDI0IGJpdCkwHhcNMDAxMDE2MjIzMTAzWhcNMDMwMTE0
ZWRpYXRlIENBMB4XDTExMTIwODE0MDE0OFoXDTIxMTAxNjE0MDE0OFowZDELMAkG MjIzMTAzWjBjMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
A1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBU A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxIzAhBgNVBAMTGlNlcnZlciB0ZXN0IGNl
RVNUSU5HIFBVUlBPU0VTIE9OTFkxGTAXBgNVBAMMEFRlc3QgU2VydmVyIENlcnQw cnQgKDUxMiBiaXQpMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ+zw4Qnlf8SMVIP
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDzhPOSNtyyRspmeuUpxfNJ Fe9GEcStgOY2Ww/dgNdhjeD8ckUJNP5VZkVDTGiXav6ooKXfX3j/7tdkuD8Ey2//
KCLTuf7g3uQ4zu4iHOmRO5TQci+HhVlLZrHF9XqFXcIP0y4pWDbMSGuiorUmzmfi Kv7+ue0CAwEAATANBgkqhkiG9w0BAQQFAAOBgQCT0grFQeZaqYb5EYfk20XixZV4
R7bfSdI/+qIQt8KXRH6HNG1t8ou0VSvWId5TS5Dq/er5ODUr9OaaDva7EquHIcMv GmyAbXMftG1Eo7qGiMhYzRwGNWxEYojf5PZkYZXvSqZ/ZXHXa4g59jK/rJNnaVGM
vPQGuI+OEAcnleVCy9HVEIySrO4P3CNIicnGkwwiAud05yUAq/gPXBC1hTtmlPD7 k+xIX8mxQvlV0n5O9PIha5BX5teZnkHKgL8aKKLKW1BK7YTngsfSzzaeame5iKfz
TVcGVSEiJdvzqqlgv02qedGrkki6GY4S7GjZxrrf7Foc2EP+51LJzwLQx3/JfrCU itAE+OjGF+PFKbwX8Q==
41NEWAsu/Sl0tQabXESN+zJ1pDqoZ3uHMgpQjeGiE0olr+YcsSW/tJmiU9OiAr8R
AgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBeAwLAYJYIZI
AYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQW
BBSCvM8AABPR9zklmifnr9LvIBturDAfBgNVHSMEGDAWgBQ2w2yI55X+sL3szj49
hqshgYfa2jANBgkqhkiG9w0BAQUFAAOCAQEAqb1NV0B0/pbpK9Z4/bNjzPQLTRLK
WnSNm/Jh5v0GEUOE/Beg7GNjNrmeNmqxAlpqWz9qoeoFZax+QBpIZYjROU3TS3fp
yLsrnlr0CDQ5R7kCCDGa8dkXxemmpZZLbUCpW2Uoy8sAA4JjN9OtsZY7dvUXFgJ7
vVNTRnI01ghknbtD+2SxSQd3CWF6QhcRMAzZJ1z1cbbwGDDzfvGFPzJ+Sq+zEPds
xoVLLSetCiBc+40ZcDS5dV98h9XD7JMTQfxzA7mNGv73JoZJA6nFgj+ADSlJsY/t
JBv+z1iQRueoh9Qeee+ZbRifPouCB8FDx+AltvHTANdAq0t/K3o+pplMVA==
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY----- -----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA84TzkjbcskbKZnrlKcXzSSgi07n+4N7kOM7uIhzpkTuU0HIv MIIBPAIBAAJBAJ+zw4Qnlf8SMVIPFe9GEcStgOY2Ww/dgNdhjeD8ckUJNP5VZkVD
h4VZS2axxfV6hV3CD9MuKVg2zEhroqK1Js5n4ke230nSP/qiELfCl0R+hzRtbfKL TGiXav6ooKXfX3j/7tdkuD8Ey2//Kv7+ue0CAwEAAQJAN6W31vDEP2DjdqhzCDDu
tFUr1iHeU0uQ6v3q+Tg1K/Tmmg72uxKrhyHDL7z0BriPjhAHJ5XlQsvR1RCMkqzu OA4NACqoiFqyblo7yc2tM4h4xMbC3Yx5UKMN9ZkCtX0gzrz6DyF47bdKcWBzNWCj
D9wjSInJxpMMIgLndOclAKv4D1wQtYU7ZpTw+01XBlUhIiXb86qpYL9NqnnRq5JI gQIhANEoojVt7hq+SQ6MCN6FTAysGgQf56Q3TYoJMoWvdiXVAiEAw3e3rc+VJpOz
uhmOEuxo2ca63+xaHNhD/udSyc8C0Md/yX6wlONTRFgLLv0pdLUGm1xEjfsydaQ6 rHuDo6bgpjUAAXM+v3fcpsfZSNO6V7kCIQCtbVjanpUwvZkMI9by02oUk9taki3b
qGd7hzIKUI3hohNKJa/mHLElv7SZolPTogK/EQIDAQABAoIBAADq9FwNtuE5IRQn PzPfAfNPYAbCJQIhAJXNQDWyqwn/lGmR11cqY2y9nZ1+5w3yHGatLrcDnQHxAiEA
zGtO4q7Y5uCzZ8GDNYr9RKp+P2cbuWDbvVAecYq2NV9QoIiWJOAYZKklOvekIju3 vnlEGo8K85u+KwIOimM48ZG8oTk7iFdkqLJR1utT3aU=
r0UZLA0PRiIrTg6NrESx3JrjWDK8QNlUO7CPTZ39/K+FrmMkV9lem9yxjJjyC34D
AQB+YRTx+l14HppjdxNwHjAVQpIx/uO2F5xAMuk32+3K+pq9CZUtrofe1q4Agj9R
5s8mSy9pbRo9kW9wl5xdEotz1LivFOEiqPUJTUq5J5PeMKao3vdK726XI4Z455Nm
W2/MA0YV0ug2FYinHcZdvKM6dimH8GLfa3X8xKRfzjGjTiMSwsdjgMa4awY3tEHH
674jhAECgYEA/zqMrc0zsbNk83sjgaYIug5kzEpN4ic020rSZsmQxSCerJTgNhmg
utKSCt0Re09Jt3LqG48msahX8ycqDsHNvlEGPQSbMu9IYeO3Wr3fAm75GEtFWePY
BhM73I7gkRt4s8bUiUepMG/wY45c5tRF23xi8foReHFFe9MDzh8fJFECgYEA9EFX
4qAik1pOJGNei9BMwmx0I0gfVEIgu0tzeVqT45vcxbxr7RkTEaDoAG6PlbWP6D9a
WQNLp4gsgRM90ZXOJ4up5DsAWDluvaF4/omabMA+MJJ5kGZ0gCj5rbZbKqUws7x8
bp+6iBfUPJUbcqNqFmi/08Yt7vrDnMnyMw2A/sECgYEAiiuRMxnuzVm34hQcsbhH
6ymVqf7j0PW2qK0F4H1ocT9qhzWFd+RB3kHWrCjnqODQoI6GbGr/4JepHUpre1ex
4UEN5oSS3G0ru0rC3U4C59dZ5KwDHFm7ffZ1pr52ljfQDUsrjjIMRtuiwNK2OoRa
WSsqiaL+SDzSB+nBmpnAizECgYBdt/y6rerWUx4MhDwwtTnel7JwHyo2MDFS6/5g
n8qC2Lj6/fMDRE22w+CA2esp7EJNQJGv+b27iFpbJEDh+/Lf5YzIT4MwVskQ5bYB
JFcmRxUVmf4e09D7o705U/DjCgMH09iCsbLmqQ38ONIRSHZaJtMDtNTHD1yi+jF+
OT43gQKBgQC/2OHZoko6iRlNOAQ/tMVFNq7fL81GivoQ9F1U0Qr+DH3ZfaH8eIkX
xT0ToMPJUzWAn8pZv0snA0um6SIgvkCuxO84OkANCVbttzXImIsL7pFzfcwV/ERK
UM6j0ZuSMFOCr/lGPAoOQU0fskidGEHi1/kW+suSr28TqsyYZpwBDQ==
-----END RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----
subject=/C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
issuer= /C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
notBefore=950413210656Z
notAfter =970412210656Z
-----BEGIN X509 CERTIFICATE-----
MIICCDCCAXECAQAwDQYJKoZIhvcNAQEEBQAwTjELMAkGA1UEBhMCVVMxHzAdBgNV
BAoUFkFUJlQgQmVsbCBMYWJvcmF0b3JpZXMxHjAcBgNVBAsUFVByb3RvdHlwZSBS
ZXNlYXJjaCBDQTAeFw05NTA0MTMyMTA2NTZaFw05NzA0MTIyMTA2NTZaME4xCzAJ
BgNVBAYTAlVTMR8wHQYDVQQKFBZBVCZUIEJlbGwgTGFib3JhdG9yaWVzMR4wHAYD
VQQLFBVQcm90b3R5cGUgUmVzZWFyY2ggQ0EwgZwwDQYJKoZIhvcNAQEBBQADgYoA
MIGGAoGAebOmgtSCl+wCYZc86UGYeTLY8cjmW2P0FN8ToT/u2pECCoFdrlycX0OR
3wt0ZhpFXLVNeDnHwEE9veNUih7pCL2ZBFqoIoQkB1lZmXRiVtjGonz8BLm/qrFM
YHb0lme/Ol+s118mwKVxnn6bSAeI/OXKhLaVdYZWk+aEaxEDkVkCAQ8wDQYJKoZI
hvcNAQEEBQADgYEAAZMG14lZmZ8bahkaHaTV9dQf4p2FZiQTFwHP9ZyGsXPC+LT5
dG5iTaRmyjNIJdPWohZDl97kAci79aBndvuEvRKOjLHs3WRGBIwERnAcnY9Mz8u/
zIHK23PjYVxGGaZd669OJwD0CYyqH22HH9nFUGaoJdsv39ChW0NRdLE9+y8=
-----END X509 CERTIFICATE-----
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
-----BEGIN CERTIFICATE-----
MIICJjCCAY8CAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTc0M1oXDTAxMDYw
OTEzNTc0M1owWzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYDVQQDExJUZXN0IENBICgxMDI0
IGJpdCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKO7o8t116VP6cgybTsZ
DCZhr95nYlZuya3aCi1IKoztqwWnjbmDFIriOqGFPrZQ+moMETC9D59iRW/dFXSv
1F65ka/XY2hLh9exCCo7XuUcDs53Qp3bI3AmMqHjgzE8oO3ajyJAzJkTTOUecQU2
mw/gI4tMM0LqWMQS7luTy4+xAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAM7achv3v
hLQJcv/65eGEpBXM40ZDVoFQFFJWaY5p883HTqLB1x4FdzsXHH0QKBTcKpWwqyu4
YDm3fb8oDugw72bCzfyZK/zVZPR/hVlqI/fvU109Qoc+7oPvIXWky71HfcK6ZBCA
q30KIqGM/uoM60INq97qjDmCJapagcNBGQs=
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCju6PLddelT+nIMm07GQwmYa/eZ2JWbsmt2gotSCqM7asFp425
gxSK4jqhhT62UPpqDBEwvQ+fYkVv3RV0r9ReuZGv12NoS4fXsQgqO17lHA7Od0Kd
2yNwJjKh44MxPKDt2o8iQMyZE0zlHnEFNpsP4COLTDNC6ljEEu5bk8uPsQIDAQAB
AoGAVZmpFZsDZfr0l2S9tLLwpjRWNOlKATQkno6q2WesT0eGLQufTciY+c8ypfU6
hyio8r5iUl/VhhdjhAtKx1mRpiotftHo/eYf8rtsrnprOnWG0bWjLjtIoMbcxGn2
J3bN6LJmbJMjDs0eJ3KnTu646F3nDUw2oGAwmpzKXA1KAP0CQQDRvQhxk2D3Pehs
HvG665u2pB5ipYQngEFlZO7RHJZzJOZEWSLuuMqaF/7pTfA5jiBvWqCgJeCRRInL
21ru4dlPAkEAx9jj7BgKn5TYnMoBSSe0afjsV9oApVpN1Nacb1YDtCwy+scp3++s
nFxlv98wxIlSdpwMUn+AUWfjiWR7Tu/G/wJBAJ/KjwZIrFVxewP0x2ILYsTRYLzz
MS4PDsO7FB+I0i7DbBOifXS2oNSpd3I0CNMwrxFnUHzynpbOStVfN3ZL5w0CQQCa
pwFahxBRhkJKsxhjoFJBX9yl75JoY4Wvm5Tbo9ih6UJaRx3kqfkN14L2BKYcsZgb
KY9vmDOYy6iNfjDeWTfJAkBkfPUb8oTJ/nSP5zN6sqGxSY4krc4xLxpRmxoJ8HL2
XfhqXkTzbU13RX9JJ/NZ8vQN9Vm2NhxRGJocQkmcdVtJ
-----END RSA PRIVATE KEY-----
-----BEGIN X509 CERTIFICATE-----
MIICYDCCAiACAgEoMAkGBSsOAwINBQAwfDELMAkGA1UEBhMCVVMxNjA0BgNVBAoT
LU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFuZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZ
MBcGA1UECxMQVGVzdCBFbnZpcm9ubWVudDEaMBgGA1UECxMRRFNTLU5BU0EtUGls
b3QtQ0EwHhcNOTYwMjI2MTYzMjQ1WhcNOTcwMjI1MTYzMjQ1WjB8MQswCQYDVQQG
EwJVUzE2MDQGA1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFk
bWluaXN0cmF0aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MRowGAYDVQQL
ExFEU1MtTkFTQS1QaWxvdC1DQTCB8jAJBgUrDgMCDAUAA4HkADCB4AJBAMA/ssKb
hPNUG7ZlASfVwEJU21O5OyF/iyBzgHI1O8eOhJGUYO8cc8wDMjR508Mr9cp6Uhl/
ZB7FV5GkLNEnRHYCQQDUEaSg45P2qrDwixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLb
bn3QK74T2IxY1yY+kCNq8XrIqf5fJJzIH0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3
fVd0geUCQQCzCFUQAh+ZkEmp5804cs6ZWBhrUAfnra8lJItYo9xPcXgdIfLfibcX
R71UsyO77MRD7B0+Ag2tq794IleCVcEEMAkGBSsOAwINBQADLwAwLAIUUayDfreR
Yh2WeU86/pHNdkUC1IgCFEfxe1f0oMpxJyrJ5XIxTi7vGdoK
-----END X509 CERTIFICATE-----
-----BEGIN X509 CERTIFICATE-----
MIICGTCCAdgCAwCqTDAJBgUrDgMCDQUAMHwxCzAJBgNVBAYTAlVTMTYwNAYDVQQK
Ey1OYXRpb25hbCBBZXJvbmF1dGljcyBhbmQgU3BhY2UgQWRtaW5pc3RyYXRpb24x
GTAXBgNVBAsTEFRlc3QgRW52aXJvbm1lbnQxGjAYBgNVBAsTEURTUy1OQVNBLVBp
bG90LUNBMB4XDTk2MDUxNDE3MDE0MVoXDTk3MDUxNDE3MDE0MVowMzELMAkGA1UE
BhMCQVUxDzANBgNVBAoTBk1pbmNvbTETMBEGA1UEAxMKRXJpYyBZb3VuZzCB8jAJ
BgUrDgMCDAUAA4HkADCB4AJBAKbfHz6vE6pXXMTpswtGUec2tvnfLJUsoxE9qs4+
ObZX7LmLvragNPUeiTJx7UOWZ5DfBj6bXLc8eYne0lP1g3ACQQDUEaSg45P2qrDw
ixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLbbn3QK74T2IxY1yY+kCNq8XrIqf5fJJzI
H0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3fVd0geUCQQCzCFUQAh+ZkEmp5804cs6Z
WBhrUAfnra8lJItYo9xPcXgdIfLfibcXR71UsyO77MRD7B0+Ag2tq794IleCVcEE
MAkGBSsOAwINBQADMAAwLQIUWsuuJRE3VT4ueWkWMAJMJaZjj1ECFQCYY0zX4bzM
LC7obsrHD8XAHG+ZRG==
-----END X509 CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICTTCCAbagAwIBAgIBADANBgkqhkiG9w0BAQQFADBMMQswCQYDVQQGEwJHQjEM
MAoGA1UEChMDVUNMMRgwFgYDVQQLEw9JQ0UtVEVMIFByb2plY3QxFTATBgNVBAMT
DFRydXN0RmFjdG9yeTAeFw05NzA0MjIxNDM5MTRaFw05ODA0MjIxNDM5MTRaMEwx
CzAJBgNVBAYTAkdCMQwwCgYDVQQKEwNVQ0wxGDAWBgNVBAsTD0lDRS1URUwgUHJv
amVjdDEVMBMGA1UEAxMMVHJ1c3RGYWN0b3J5MIGcMAoGBFUIAQECAgQAA4GNADCB
iQKBgQCEieR8NcXkUW1f0G6aC6u0i8q/98JqS6RxK5YmHIGKCkuTWAUjzLfUa4dt
U9igGCjTuxaDqlzEim+t/02pmiBZT9HaX++35MjQPUWmsChcYU5WyzGErXi+rQaw
zlwS73zM8qiPj/97lXYycWhgL0VaiDSPxRXEUdWoaGruom4mNQIDAQABo0IwQDAd
BgNVHQ4EFgQUHal1LZr7oVg5z6lYzrhTgZRCmcUwDgYDVR0PAQH/BAQDAgH2MA8G
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAfaggfl6FZoioecjv0dq8
/DXo/u11iMZvXn08gjX/zl2b4wtPbShOSY5FhkSm8GeySasz+/Nwb/uzfnIhokWi
lfPZHtlCWtXbIy/TN51eJyq04ceDCQDWvLC2enVg9KB+GJ34b5c5VaPRzq8MBxsA
S7ELuYGtmYgYm9NZOIr7yU0=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIB6jCCAZQCAgEtMA0GCSqGSIb3DQEBBAUAMIGAMQswCQYDVQQGEwJVUzE2MDQG
A1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFkbWluaXN0cmF0
aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MR4wHAYDVQQLExVNRDUtUlNB
LU5BU0EtUGlsb3QtQ0EwHhcNOTYwNDMwMjIwNTAwWhcNOTcwNDMwMjIwNTAwWjCB
gDELMAkGA1UEBhMCVVMxNjA0BgNVBAoTLU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFu
ZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZMBcGA1UECxMQVGVzdCBFbnZpcm9ubWVu
dDEeMBwGA1UECxMVTUQ1LVJTQS1OQVNBLVBpbG90LUNBMFkwCgYEVQgBAQICAgAD
SwAwSAJBALmmX5+GqAvcrWK13rfDrNX9UfeA7f+ijyBgeFQjYUoDpFqapw4nzQBL
bAXug8pKkRwa2Zh8YODhXsRWu2F/UckCAwEAATANBgkqhkiG9w0BAQQFAANBAH9a
OBA+QCsjxXgnSqHx04gcU8S49DVUb1f2XVoLnHlIb8RnX0k5O6mpHT5eti9bLkiW
GJNMJ4L0AJ/ac+SmHZc=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICajCCAdMCBDGA0QUwDQYJKoZIhvcNAQEEBQAwfTELMAkGA1UEBhMCQ2ExDzAN
BgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmlsaXR5IEFjY2VwdGVkMR8w
HQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRwwGgYDVQQDExNFbnRydXN0
IERlbW8gV2ViIENBMB4XDTk2MDQyNjEzMzUwMVoXDTA2MDQyNjEzMzUwMVowfTEL
MAkGA1UEBhMCQ2ExDzANBgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmls
aXR5IEFjY2VwdGVkMR8wHQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRww
GgYDVQQDExNFbnRydXN0IERlbW8gV2ViIENBMIGdMA0GCSqGSIb3DQEBAQUAA4GL
ADCBhwKBgQCaroS7O1DA0hm4IefNYU1cx/nqOmzEnk291d1XqznDeF4wEgakbkCc
zTKxK791yNpXG5RmngqH7cygDRTHZJ6mfCRn0wGC+AI00F2vYTGqPGRQL1N3lZT0
YDKFC0SQeMMjFIZ1aeQigroFQnHo0VB3zWIMpNkka8PY9lxHZAmWwQIBAzANBgkq
hkiG9w0BAQQFAAOBgQBAx0UMVA1s54lMQyXjMX5kj99FJN5itb8bK1Rk+cegPQPF
cWO9SEWyEjjBjIkjjzAwBkaEszFsNGxemxtXvwjIm1xEUMTVlPEWTs2qnDvAUA9W
YqhWbhH0toGT36236QAsqCZ76rbTRVSSX2BHyJwJMG2tCRv7kRJ//NIgxj3H4w==
-----END CERTIFICATE-----
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
-----BEGIN CERTIFICATE-----
MIICJzCCAZACAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTczN1oXDTAxMDYw
OTEzNTczN1owXDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYDVQQDExNUZXN0IFBDQSAoMTAy
NCBiaXQpMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdoWk/3+WcMlfjIrkg
40ketmnQaEogQe1LLcuOJV6rKfUSAsPgwgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp
22Jp85PmemiDzyUIStwk72qhp1imbANZvlmlCFKiQrjUyuDfu4TABmn+kkt3vR1Y
BEOGt+IFye1UBVSATVdRJ2UVhwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABNA1u/S
Cg/LJZWb7GliiKJsvuhxlE4E5JxQF2zMub/CSNbF97//tYSyj96sxeFQxZXbcjm9
xt6mr/xNLA4szNQMJ4P+L7b5e/jC5DSqlwS+CUYJgaFs/SP+qJoCSu1bR3IM9XWO
cRBpDmcBbYLkSyB92WURvsZ1LtjEcn+cdQVI
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCdoWk/3+WcMlfjIrkg40ketmnQaEogQe1LLcuOJV6rKfUSAsPg
wgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp22Jp85PmemiDzyUIStwk72qhp1imbANZ
vlmlCFKiQrjUyuDfu4TABmn+kkt3vR1YBEOGt+IFye1UBVSATVdRJ2UVhwIDAQAB
AoGAba4fTtuap5l7/8ZsbE7Z1O32KJY4ZcOZukLOLUUhXxXduT+FTgGWujc0/rgc
z9qYCLlNZHOouMYTgtSfYvuMuLZ11VIt0GYH+nRioLShE59Yy+zCRyC+gPigS1kz
xvo14AsOIPYV14Tk/SsHyq6E0eTk7VzaIE197giiINUERPECQQDSKmtPTh/lRKw7
HSZSM0I1mFWn/1zqrAbontRQY5w98QWIOe5qmzYyFbPXYT3d9BzlsMyhgiRNoBbD
yvohSHXJAkEAwAHx6ezAZeWWzD5yXD36nyjpkVCw7Tk7TSmOceLJMWt1QcrCfqlS
xA5jjpQ6Z8suU5DdtWAryM2sAir1WisYzwJAd6Zcx56jvAQ3xcPXsE6scBTVFzrj
7FqZ6E+cclPzfLQ+QQsyOBE7bpI6e/FJppY26XGZXo3YGzV8IGXrt40oOQJALETG
h86EFXo3qGOFbmsDy4pdP5nBERCu8X1xUCSfintiD4c2DInxgS5oGclnJeMcjTvL
QjQoJCX3UJCi/OUO1QJBAKgcDHWjMvt+l1pjJBsSEZ0HX9AAIIVx0RQmbFGS+F2Q
hhu5l77WnnZOQ9vvhV5u7NPCUF9nhU3jh60qWWO8mkc=
-----END RSA PRIVATE KEY-----
subject=/C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
issuer= /C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
notBefore=941104185834Z
notAfter =991103185834Z
-----BEGIN X509 CERTIFICATE-----
MIICIzCCAZACBQJBAAAWMA0GCSqGSIb3DQEBAgUAMFwxCzAJBgNVBAYTAlVTMSAw
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVy
Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDQxODU4MzRaFw05
OTExMDMxODU4MzRaMFwxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBT
ZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9u
IEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCk+4Fie84QJ93o
975sbsZwmdu41QUDaSiCnHJ/lj+O7Kwpkj+KFPhCdr69XQO5kNTQvAayUTNfxMK/
touPmbZiImDd298ggrTKoi8tUO2UMt7gVY3UaOLgTNLNBRYulWZcYVI4HlGogqHE
7yXpCuaLK44xZtn42f29O2nZ6wIDAQABMA0GCSqGSIb3DQEBAgUAA34AdrW2EP4j
9/dZYkuwX5zBaLxJu7NJbyFHXSudVMQAKD+YufKKg5tgf+tQx6sFEC097TgCwaVI
0v5loMC86qYjFmZsGySp8+x5NRhPJsjjr1BKx6cxa9B8GJ1Qv6km+iYrRpwUqbtb
MJhCKLVLU7tDCZJAuqiqWqTGtotXTcU=
-----END X509 CERTIFICATE-----
subject=/C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
issuer= /C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
notBefore=941109235417Z
notAfter =991231235417Z
-----BEGIN X509 CERTIFICATE-----
MIICKTCCAZYCBQJBAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMSAw
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJl
IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDkyMzU0MTda
Fw05OTEyMzEyMzU0MTdaMF8xCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0
YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJlIFNlcnZlciBDZXJ0aWZp
Y2F0aW9uIEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCSznrB
roM+WqqJg1esJQF2DK2ujiw3zus1eGRUA+WEQFHJv48I4oqCCNIWhjdV6bEhAq12
aIGaBaJLyUslZiJWbIgHj/eBWW2EB2VwE3F2Ppt3TONQiVaYSLkdpykaEy5KEVmc
HhXVSVQsczppgrGXOZxtcGdI5d0t1sgeewIDAQABMA0GCSqGSIb3DQEBAgUAA34A
iNHReSHO4ovo+MF9NFM/YYPZtgs4F7boviGNjwC4i1N+RGceIr2XJ+CchcxK9oU7
suK+ktPlDemvXA4MRpX/oRxePug2WHpzpgr4IhFrwwk4fia7c+8AvQKk8xQNMD9h
cHsg/jKjn7P0Z1LctO6EjJY2IN6BCINxIYoPnqk=
-----END X509 CERTIFICATE-----
subject=/C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
/OU=Certification Services Division/CN=Thawte Server CA
/Email=server-certs@thawte.com
issuer= /C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
/OU=Certification Services Division/CN=Thawte Server CA
/Email=server-certs@thawte.com
-----BEGIN CERTIFICATE-----
MIIC+TCCAmICAQAwDQYJKoZIhvcNAQEEBQAwgcQxCzAJBgNVBAYTAlpBMRUwEwYD
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
dmljZXMgRGl2aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkq
hkiG9w0BCQEWF3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMB4XDTk2MDcyNzE4MDc1
N1oXDTk4MDcyNzE4MDc1N1owgcQxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0
ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMUVGhhd3RlIENv
bnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkqhkiG9w0BCQEW
F3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
iQKBgQDTpFBuyP9Wa+bPXbbqDGh1R6KqwtqEJfyo9EdR2oW1IHSUhh4PdcnpCGH1
Bm0wbhUZAulSwGLbTZme4moMRDjN/r7jZAlwxf6xaym2L0nIO9QnBCUQly/nkG3A
KEKZ10xD3sP1IW1Un13DWOHA5NlbsLjctHvfNjrCtWYiEtaHDQIDAQABMA0GCSqG
SIb3DQEBBAUAA4GBAIsvn7ifX3RUIrvYXtpI4DOfARkTogwm6o7OwVdl93yFhDcX
7h5t0XZ11MUAMziKdde3rmTvzUYIUCYoY5b032IwGMTvdiclK+STN6NP2m5nvFAM
qJT5gC5O+j/jBuZRQ4i0AMYQr5F4lT8oBJnhgafw6PL8aDY2vMHGSPl9+7uf
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDDTCCAnYCAQAwDQYJKoZIhvcNAQEEBQAwgc4xCzAJBgNVBAYTAlpBMRUwEwYD
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBD
QTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTAeFw05
NjA3MjcxODA3MTRaFw05ODA3MjcxODA3MTRaMIHOMQswCQYDVQQGEwJaQTEVMBMG
A1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xHTAbBgNVBAoT
FFRoYXd0ZSBDb25zdWx0aW5nIGNjMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNl
cnZpY2VzIERpdmlzaW9uMSEwHwYDVQQDExhUaGF3dGUgUHJlbWl1bSBTZXJ2ZXIg
Q0ExKDAmBgkqhkiG9w0BCQEWGXByZW1pdW0tc2VydmVyQHRoYXd0ZS5jb20wgZ8w
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANI2NmqL18JbntqBQWKPOO5JBFXW0O8c
G5UWR+8YSDU6UvQragaPOy/qVuOvho2eF/eetGV1Ak3vywmiIVHYm9Bn0LoNkgYU
c9STy5cqAJxcTgy8+hVS/PJEbtoRSm4Iny8t4/mqOoZztkZTWMiJBb2DEbhzP6oH
jfRCTedAnRw3AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAutFIgTRZVYerIZfL9lvR
w9Eifvvo5KTZ3h+Bj+VzNnyw4Qc/IyXkPOu6SIiH9LQ3sCmWBdxpe+qr4l77rLj2
GYuMtESFfn1XVALzkYgC7JcPuTOjMfIiMByt+uFf8AV8x0IW/Qkuv+hEQcyM9vxK
3VZdLbCVIhNoEsysrxCpxcI=
-----END CERTIFICATE-----
Tims test GCI CA
-----BEGIN CERTIFICATE-----
MIIB8DCCAZoCAQAwDQYJKoZIhvcNAQEEBQAwgYIxCzAJBgNVBAYTAkFVMRMwEQYD
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2RldmVsb3BtZW50MRkwFwYDVQQDExBD
cnlwdFNvZnQgRGV2IENBMB4XDTk3MDMyMjEzMzQwNFoXDTk4MDMyMjEzMzQwNFow
gYIxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhC
cmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2Rl
dmVsb3BtZW50MRkwFwYDVQQDExBDcnlwdFNvZnQgRGV2IENBMFwwDQYJKoZIhvcN
AQEBBQADSwAwSAJBAOAOAqogG5QwAmLhzyO4CoRnx/wVy4NZP4dxJy83O1EnL0rw
OdsamJKvPOLHgSXo3gDu9uVyvCf/QJmZAmC5ml8CAwEAATANBgkqhkiG9w0BAQQF
AANBADRRS/GVdd7rAqRW6SdmgLJduOU2yq3avBu99kRqbp9A/dLu6r6jU+eP4oOA
TfdbFZtAAD2Hx9jUtY3tfdrJOb8=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICVjCCAgACAQAwDQYJKoZIhvcNAQEEBQAwgbUxCzAJBgNVBAYTAkFVMRMwEQYD
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsTI1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9O
IEFVVEhPUklUSUVTMTQwMgYDVQQDEytaRVJPIFZBTFVFIENBIC0gREVNT05TVFJB
VElPTiBQVVJQT1NFUyBPTkxZMB4XDTk3MDQwMzEzMjI1NFoXDTk4MDQwMzEzMjI1
NFowgbUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQH
EwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsT
I1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9OIEFVVEhPUklUSUVTMTQwMgYDVQQDEyta
RVJPIFZBTFVFIENBIC0gREVNT05TVFJBVElPTiBQVVJQT1NFUyBPTkxZMFwwDQYJ
KoZIhvcNAQEBBQADSwAwSAJBAOZ7T7yqP/tyspcko3yPY1y0Cm2EmwNvzW4QgVXR
Fjs3HmJ4xtSpXdo6mwcGezL3Abt/aQXaxv9PU8xt+Jr0OFUCAwEAATANBgkqhkiG
9w0BAQQFAANBAOQpYmGgyCqCy1OljgJhCqQOu627oVlHzK1L+t9vBaMfn40AVUR4
WzQVWO31KTgi5vTK1U+3h46fgUWqQ0h+6rU=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIAwgKADAgECAgEAMA0GCSqGSIb3DQEBBAUAMGIxETAPBgNVBAcTCEludGVybmV0
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xh
c3MgMSBDQSAtIEluZGl2aWR1YWwgU3Vic2NyaWJlcjAeFw05NjA0MDgxMDIwMjda
Fw05NzA0MDgxMDIwMjdaMGIxETAPBgNVBAcTCEludGVybmV0MRcwFQYDVQQKEw5W
ZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xhc3MgMSBDQSAtIElu
ZGl2aWR1YWwgU3Vic2NyaWJlcjCAMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2
FKbPTdAFDdjKI9BvqrQpkmOOLPhvltcunXZLEbE2jVfJw/0cxrr+Hgi6M8qV6r7j
W80GqLd5HUQq7XPysVKDaBBwZJHXPmv5912dFEObbpdFmIFH0S3L3bty10w/cari
QPJUObwW7s987LrbP2wqsxaxhhKdrpM01bjV0Pc+qQIDAQABAAAAADANBgkqhkiG
9w0BAQQFAAOBgQA+1nJryNt8VBRjRr07ArDAV/3jAH7GjDc9jsrxZS68ost9v06C
TvTNKGL+LISNmFLXl+JXhgGB0JZ9fvyYzNgHQ46HBUng1H6voalfJgS2KdEo50wW
8EFZYMDkT1k4uynwJqkVN2QJK/2q4/A/VCov5h6SlM8Affg2W+1TLqvqkwAA
-----END CERTIFICATE-----
subject=/L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
issuer= /L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
-----BEGIN CERTIFICATE-----
MIIEkzCCA/ygAwIBAgIRANDTUpSRL3nTFeMrMayFSPAwDQYJKoZIhvcNAQECBQAw
YjERMA8GA1UEBxMISW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQw
MgYDVQQLEytWZXJpU2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3Jp
YmVyMB4XDTk2MDYwNDAwMDAwMFoXDTk4MDYwNDIzNTk1OVowYjERMA8GA1UEBxMI
SW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQLEytWZXJp
U2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3JpYmVyMIGfMA0GCSqG
SIb3DQEBAQUAA4GNADCBiQKBgQC6A+2czKGRcYMfm8gdnk+0de99TDDzsqo0v5nb
RsbUmMcdRQ7nsMbRWe0SAb/9QoLTZ/cJ0iOBqdrkz7UpqqKarVoTSdlSMVM92tWp
3bJncZHQD1t4xd6lQVdI1/T6R+5J0T1ukOdsI9Jmf+F28S6g3R3L1SFwiHKeZKZv
z+793wIDAQABo4ICRzCCAkMwggIpBgNVHQMBAf8EggIdMIICGTCCAhUwggIRBgtg
hkgBhvhFAQcBATCCAgAWggGrVGhpcyBjZXJ0aWZpY2F0ZSBpbmNvcnBvcmF0ZXMg
YnkgcmVmZXJlbmNlLCBhbmQgaXRzIHVzZSBpcyBzdHJpY3RseSBzdWJqZWN0IHRv
LCB0aGUgVmVyaVNpZ24gQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQg
KENQUyksIGF2YWlsYWJsZSBhdDogaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL0NQ
Uy0xLjA7IGJ5IEUtbWFpbCBhdCBDUFMtcmVxdWVzdHNAdmVyaXNpZ24uY29tOyBv
ciBieSBtYWlsIGF0IFZlcmlTaWduLCBJbmMuLCAyNTkzIENvYXN0IEF2ZS4sIE1v
dW50YWluIFZpZXcsIENBIDk0MDQzIFVTQSBUZWwuICsxICg0MTUpIDk2MS04ODMw
IENvcHlyaWdodCAoYykgMTk5NiBWZXJpU2lnbiwgSW5jLiAgQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4gQ0VSVEFJTiBXQVJSQU5USUVTIERJU0NMQUlNRUQgYW5kIExJQUJJ
TElUWSBMSU1JVEVELqAOBgxghkgBhvhFAQcBAQGhDgYMYIZIAYb4RQEHAQECMC8w
LRYraHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvQ1BTLTEuMDAU
BglghkgBhvhCAQEBAf8EBAMCAgQwDQYJKoZIhvcNAQECBQADgYEApRJRkNBqLLgs
53IR/d18ODdLOWMTZ+QOOxBrq460iBEdUwgF8vmPRX1ku7UiDeNzaLlurE6eFqHq
2zPyK5j60zfTLVJMWKcQWwTJLjHtXrW8pxhNtFc6Fdvy5ZkHnC/9NIl7/t4U6WqB
p4y+p7SdMIkEwIZfds0VbnQyX5MRUJY=
-----END CERTIFICATE-----
subject=/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
issuer= /C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
-----BEGIN CERTIFICATE-----
MIICMTCCAZoCBQKhAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMg
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyVxZ
nvIbigEUtBDfBEDb41evakVAj4QMC9Ez2dkRz+4CWB8l9yqoRAWq7AMfeH+ek7ma
AKojfdashaJjRcdyJ8z0TMZ1cdI5709C8HXfCpDGjiBvmA/4rCNfcCk2pMmG57Ga
IMtTpYXnPb59mv4kRTPcdhXtD6JxZExlLoFoRacCAwEAATANBgkqhkiG9w0BAQIF
AAOBgQB1Zmw+0c2B27X4LzZRtvdCvM1Cr9wO+hVs+GeTVzrrtpLotgHKjLeOQ7RJ
Zfk+7r11Ri7J/CVdqMcvi5uPaM+0nJcYwE3vH9mvgrPmZLiEXIqaB1JDYft0nls6
NvxMsvwaPxUupVs8G5DsiCnkWRb5zget7Ond2tIxik/W2O8XjQ==
-----END CERTIFICATE-----
subject=/C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
issuer= /C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
-----BEGIN CERTIFICATE-----
MIICMTCCAZoCBQKmAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMg
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LJ1
9njQrlpQ9OlQqZ+M1++RlHDo0iSQdomF1t+s5gEXMoDwnZNHvJplnR+Xrr/phnVj
IIm9gFidBAydqMEk6QvlMXi9/C0MN2qeeIDpRnX57aP7E3vIwUzSo+/1PLBij0pd
O92VZ48TucE81qcmm+zDO3rZTbxtm+gVAePwR6kCAwEAATANBgkqhkiG9w0BAQIF
AAOBgQBT3dPwnCR+QKri/AAa19oM/DJhuBUNlvP6Vxt/M3yv6ZiaYch6s7f/sdyZ
g9ysEvxwyR84Qu1E9oAuW2szaayc01znX1oYx7EteQSWQZGZQbE8DbqEOcY7l/Am
yY7uvcxClf8exwI/VAx49byqYHwCaejcrOICdmHEPgPq0ook0Q==
-----END CERTIFICATE-----

View File

@ -1,52 +1,376 @@
subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = Test Server Cert #2 issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Server test cert (1024 bit)
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIID6jCCAtKgAwIBAgIJALnu1NlVpZ60MA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV MIICLjCCAZcCAQEwDQYJKoZIhvcNAQEEBQAwWzELMAkGA1UEBhMCQVUxEzARBgNV
BAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMSIwIAYDVQQLDBlGT1IgVEVT BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYD
VElORyBQVVJQT1NFUyBPTkxZMSUwIwYDVQQDDBxPcGVuU1NMIFRlc3QgSW50ZXJt VQQDExJUZXN0IENBICgxMDI0IGJpdCkwHhcNOTcwNjA5MTM1NzU0WhcNOTgwNjA5
ZWRpYXRlIENBMB4XDTExMTIwODE0MDE0OFoXDTIxMTAxNjE0MDE0OFowZzELMAkG MTM1NzU0WjBkMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
A1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBU A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxJDAiBgNVBAMTG1NlcnZlciB0ZXN0IGNl
RVNUSU5HIFBVUlBPU0VTIE9OTFkxHDAaBgNVBAMME1Rlc3QgU2VydmVyIENlcnQg cnQgKDEwMjQgYml0KTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsxH1PBPm
IzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrdi7j9yctG+L4EjBy RkxrR11eV4bzNi4N9n11CI8nV29+ARlT1+qDe/mjVUvXlmsr1v/vf71G9GgqopSa
gjPmEqZzOJEQba26MoQGzglU7e5Xf59Rb/hgVQuKAoiZe7/R8rK4zJ4W7iXdXw0L 6RXrICLVdk/FYYYzhPvl1M+OrjaXDFO8BzBAF1Lnz6c7aRZvGRJNrRSr2nZEkqDf
qBpyG8B5aGKeI32w+A9TcBApoXXL2CrYQEQjZwUIpLlYBIi2NkJj3nVkq5dgl1gO JW9dY7r2VZEpD5QeuaRYUnuECkqeieB65GMCAwEAATANBgkqhkiG9w0BAQQFAAOB
ALiQ+W8jg3kzg5Ec9rimp9r93N8wsSL3awsafurmYCvOf7leHaMP1WJ/zDRGUNHG gQCWsOta6C0wiVzXz8wPmJKyTrurMlgUss2iSuW9366iwofZddsNg7FXniMzkIf6
/WtDjXc8ZUG1+6EXU9Jc2Fs+2Omf7fcN0l00AK/wPg8OaNS0rKyGq9JdIT9FRGV1 dp7jnmWZwKZ9cXsNUS2o4OL07qOk2HOywC0YsNZQsOBu1CBTYYkIefDiKFL1zQHh
bXe/rx58FaE5CItdwCSYhJvF/O95LWQoxJXye5bCFLmvDTEyVq9FMSCptfsmbXjE 8lwwNd4NP+OE3NzUNkCfh4DnFfg9WHkXUlD5UpxNRJ4gJA==
ZGsXAgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBeAwLAYJ
YIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1Ud
DgQWBBR52UaWWTKzZGDH/X4mWNcuqeQVazAfBgNVHSMEGDAWgBQ2w2yI55X+sL3s
zj49hqshgYfa2jANBgkqhkiG9w0BAQUFAAOCAQEANBW+XYLlHBqVY/31ie+3gRlS
LPfy4SIqn0t3RJjagT29MXprblBO2cbMO8VGjkQdKGpmMXjxbht2arOOUXRHX4n/
XTyn/QHEf0bcwIITMReO3DZUPAEw8hSjn9xEOM0IRVOCP+mH5fi74QzzQaZVCyYg
5VtLKdww/+sc0nCbKl2KWgDluriH0nfVx95qgW3mg9dhXRr0zmf1w2zkBHYpARYL
Dew6Z8EE4tS3HJu8/qM6meWzNtrfonQ3eiiMxjZBxzV46jchBwa2z9XYhP6AmpPb
oeTSzcQNbWsxaGYzWo46oLDUZmJOwSBawbS31bZNMCoPIY6ukoesCzFSsUKZww==
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY----- -----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA63Yu4/cnLRvi+BIwcoIz5hKmcziREG2tujKEBs4JVO3uV3+f MIICXgIBAAKBgQCzEfU8E+ZGTGtHXV5XhvM2Lg32fXUIjydXb34BGVPX6oN7+aNV
UW/4YFULigKImXu/0fKyuMyeFu4l3V8NC6gachvAeWhiniN9sPgPU3AQKaF1y9gq S9eWayvW/+9/vUb0aCqilJrpFesgItV2T8VhhjOE++XUz46uNpcMU7wHMEAXUufP
2EBEI2cFCKS5WASItjZCY951ZKuXYJdYDgC4kPlvI4N5M4ORHPa4pqfa/dzfMLEi pztpFm8ZEk2tFKvadkSSoN8lb11juvZVkSkPlB65pFhSe4QKSp6J4HrkYwIDAQAB
92sLGn7q5mArzn+5Xh2jD9Vif8w0RlDRxv1rQ413PGVBtfuhF1PSXNhbPtjpn+33 AoGBAKy8jvb0Lzby8q11yNLf7+78wCVdYi7ugMHcYA1JVFK8+zb1WfSm44FLQo/0
DdJdNACv8D4PDmjUtKyshqvSXSE/RURldW13v68efBWhOQiLXcAkmISbxfzveS1k dSChAjgz36TTexeLODPYxleJndjVcOMVzsLJjSM8dLpXsTS4FCeMbhw2s2u+xqKY
KMSV8nuWwhS5rw0xMlavRTEgqbX7Jm14xGRrFwIDAQABAoIBAHLsTPihIfLnYIE5 bbPWfk+HOTyJjfnkcC5Nbg44eOmruq0gSmBeUXVM5UntlTnxAkEA7TGCA3h7kx5E
x4GsQQ5zXeBw5ITDM37ktwHnQDC+rIzyUl1aLD1AZRBoKinXd4lOTqLZ4/NHKx4A Bl4zl2pc3gPAGt+dyfk5Po9mGJUUXhF5p2zueGmYWW74TmOWB1kzt4QRdYMzFePq
DYr58mZtWyUmqLOMmQVuHXTZBlp7XtYuXMMNovQwjQlp9LicBeoBU6gQ5PVMtubD zfDNXEa1CwJBAMFErdY0xp0UJ13WwBbUTk8rujqQdHtjw0klhpbuKkjxu2hN0wwM
F4xGF89Sn0cTHW3iMkqTtQ5KcR1j57OcJO0FEb1vPvk2MXI5ZyAatUYE7YacbEzd 6p0D9qxF7JHaghqVRI0fAW/EE0OzdHMR9QkCQQDNR26dMFXKsoPu+vItljj/UEGf
rg02uIwx3FqNSkuSI79uz4hMdV5TPtuhxx9nTwj9aLUhXFeZ0mn2PVgVzEnnMoJb QG7gERiQ4yxaFBPHgdpGo0kT31eh9x9hQGDkxTe0GNG/YSgCRvm8+C3TMcKXAkBD
+znlsZDgzDlJqdaD744YGWh8Z3OEssB35KfzFcdOeO6yH8lmv2Zfznk7pNPT7LTb dhGn36wkUFCddMSAM4NSJ1VN8/Z0y5HzCmI8dM3VwGtGMUQlxKxwOl30LEQzdS5M
Lae9VgkCgYEA92p1qnAB3NtJtNcaW53i0S5WJgS1hxWKvUDx3lTB9s8X9fHpqL1a 0SWojNYXiT2gOBfBwtbhAkEAhafl5QEOIgUz+XazS/IlZ8goNKdDVfYgK3mHHjvv
E94fDfWzp/hax6FefUKIvBOukPLQ6bYjTMiFoOHzVirghAIuIUoMI5VtLhwD1hKs nY5G+AuGebdNkXJr4KSWxDcN+C2i47zuj4QXA16MAOandA==
Lr7l/dptMgKb1nZHyXoKHRBthsy3K4+udsPi8TzMvYElgEqyQIe/Rk0CgYEA86GL
8HC6zLszzKERDPBxrboRmoFvVUCTQDhsfj1M8aR3nQ8V5LkdIJc7Wqm/Ggfk9QRf
rJ8M2WUMlU5CNnCn/KCrKzCNZIReze3fV+HnKdbcXGLvgbHPrhnz8yYehUFG+RGq
bVyDWRU94T38izy2s5qMYrMJWZEYyXncSPbfcPMCgYAtaXfxcZ+V5xYPQFARMtiX
5nZfggvDoJuXgx0h3tK/N2HBfcaSdzbaYLG4gTmZggc/jwnl2dl5E++9oSPhUdIG
3ONSFUbxsOsGr9PBvnKd8WZZyUCXAVRjPBzAzF+whzQNWCZy/5htnz9LN7YDI9s0
5113Q96cheDZPFydZY0hHQKBgQDVbEhNukM5xCiNcu+f2SaMnLp9EjQ4h5g3IvaP
5B16daw/Dw8LzcohWboqIxeAsze0GD/D1ZUJAEd0qBjC3g+a9BjefervCjKOzXng
38mEUm+6EwVjJSQcjSmycEs+Sr/kwr/8i5WYvU32+jk4tFgMoC+o6tQe/Uesf68k
z/dPVwKBgGbF7Vv1/3SmhlOy+zYyvJ0CrWtKxH9QP6tLIEgEpd8x7YTSuCH94yok
kToMXYA3sWNPt22GbRDZ+rcp4c7HkDx6I6vpdP9aQEwJTp0EPy0sgWr2XwYmreIQ
NFmkk8Itn9EY2R9VBaP7GLv5kvwxDdLAnmwGmzVtbmaVdxCaBwUk
-----END RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----
subject=/C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
issuer= /C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
notBefore=950413210656Z
notAfter =970412210656Z
-----BEGIN X509 CERTIFICATE-----
MIICCDCCAXECAQAwDQYJKoZIhvcNAQEEBQAwTjELMAkGA1UEBhMCVVMxHzAdBgNV
BAoUFkFUJlQgQmVsbCBMYWJvcmF0b3JpZXMxHjAcBgNVBAsUFVByb3RvdHlwZSBS
ZXNlYXJjaCBDQTAeFw05NTA0MTMyMTA2NTZaFw05NzA0MTIyMTA2NTZaME4xCzAJ
BgNVBAYTAlVTMR8wHQYDVQQKFBZBVCZUIEJlbGwgTGFib3JhdG9yaWVzMR4wHAYD
VQQLFBVQcm90b3R5cGUgUmVzZWFyY2ggQ0EwgZwwDQYJKoZIhvcNAQEBBQADgYoA
MIGGAoGAebOmgtSCl+wCYZc86UGYeTLY8cjmW2P0FN8ToT/u2pECCoFdrlycX0OR
3wt0ZhpFXLVNeDnHwEE9veNUih7pCL2ZBFqoIoQkB1lZmXRiVtjGonz8BLm/qrFM
YHb0lme/Ol+s118mwKVxnn6bSAeI/OXKhLaVdYZWk+aEaxEDkVkCAQ8wDQYJKoZI
hvcNAQEEBQADgYEAAZMG14lZmZ8bahkaHaTV9dQf4p2FZiQTFwHP9ZyGsXPC+LT5
dG5iTaRmyjNIJdPWohZDl97kAci79aBndvuEvRKOjLHs3WRGBIwERnAcnY9Mz8u/
zIHK23PjYVxGGaZd669OJwD0CYyqH22HH9nFUGaoJdsv39ChW0NRdLE9+y8=
-----END X509 CERTIFICATE-----
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
-----BEGIN CERTIFICATE-----
MIICJjCCAY8CAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTc0M1oXDTAxMDYw
OTEzNTc0M1owWzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYDVQQDExJUZXN0IENBICgxMDI0
IGJpdCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKO7o8t116VP6cgybTsZ
DCZhr95nYlZuya3aCi1IKoztqwWnjbmDFIriOqGFPrZQ+moMETC9D59iRW/dFXSv
1F65ka/XY2hLh9exCCo7XuUcDs53Qp3bI3AmMqHjgzE8oO3ajyJAzJkTTOUecQU2
mw/gI4tMM0LqWMQS7luTy4+xAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAM7achv3v
hLQJcv/65eGEpBXM40ZDVoFQFFJWaY5p883HTqLB1x4FdzsXHH0QKBTcKpWwqyu4
YDm3fb8oDugw72bCzfyZK/zVZPR/hVlqI/fvU109Qoc+7oPvIXWky71HfcK6ZBCA
q30KIqGM/uoM60INq97qjDmCJapagcNBGQs=
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCju6PLddelT+nIMm07GQwmYa/eZ2JWbsmt2gotSCqM7asFp425
gxSK4jqhhT62UPpqDBEwvQ+fYkVv3RV0r9ReuZGv12NoS4fXsQgqO17lHA7Od0Kd
2yNwJjKh44MxPKDt2o8iQMyZE0zlHnEFNpsP4COLTDNC6ljEEu5bk8uPsQIDAQAB
AoGAVZmpFZsDZfr0l2S9tLLwpjRWNOlKATQkno6q2WesT0eGLQufTciY+c8ypfU6
hyio8r5iUl/VhhdjhAtKx1mRpiotftHo/eYf8rtsrnprOnWG0bWjLjtIoMbcxGn2
J3bN6LJmbJMjDs0eJ3KnTu646F3nDUw2oGAwmpzKXA1KAP0CQQDRvQhxk2D3Pehs
HvG665u2pB5ipYQngEFlZO7RHJZzJOZEWSLuuMqaF/7pTfA5jiBvWqCgJeCRRInL
21ru4dlPAkEAx9jj7BgKn5TYnMoBSSe0afjsV9oApVpN1Nacb1YDtCwy+scp3++s
nFxlv98wxIlSdpwMUn+AUWfjiWR7Tu/G/wJBAJ/KjwZIrFVxewP0x2ILYsTRYLzz
MS4PDsO7FB+I0i7DbBOifXS2oNSpd3I0CNMwrxFnUHzynpbOStVfN3ZL5w0CQQCa
pwFahxBRhkJKsxhjoFJBX9yl75JoY4Wvm5Tbo9ih6UJaRx3kqfkN14L2BKYcsZgb
KY9vmDOYy6iNfjDeWTfJAkBkfPUb8oTJ/nSP5zN6sqGxSY4krc4xLxpRmxoJ8HL2
XfhqXkTzbU13RX9JJ/NZ8vQN9Vm2NhxRGJocQkmcdVtJ
-----END RSA PRIVATE KEY-----
-----BEGIN X509 CERTIFICATE-----
MIICYDCCAiACAgEoMAkGBSsOAwINBQAwfDELMAkGA1UEBhMCVVMxNjA0BgNVBAoT
LU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFuZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZ
MBcGA1UECxMQVGVzdCBFbnZpcm9ubWVudDEaMBgGA1UECxMRRFNTLU5BU0EtUGls
b3QtQ0EwHhcNOTYwMjI2MTYzMjQ1WhcNOTcwMjI1MTYzMjQ1WjB8MQswCQYDVQQG
EwJVUzE2MDQGA1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFk
bWluaXN0cmF0aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MRowGAYDVQQL
ExFEU1MtTkFTQS1QaWxvdC1DQTCB8jAJBgUrDgMCDAUAA4HkADCB4AJBAMA/ssKb
hPNUG7ZlASfVwEJU21O5OyF/iyBzgHI1O8eOhJGUYO8cc8wDMjR508Mr9cp6Uhl/
ZB7FV5GkLNEnRHYCQQDUEaSg45P2qrDwixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLb
bn3QK74T2IxY1yY+kCNq8XrIqf5fJJzIH0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3
fVd0geUCQQCzCFUQAh+ZkEmp5804cs6ZWBhrUAfnra8lJItYo9xPcXgdIfLfibcX
R71UsyO77MRD7B0+Ag2tq794IleCVcEEMAkGBSsOAwINBQADLwAwLAIUUayDfreR
Yh2WeU86/pHNdkUC1IgCFEfxe1f0oMpxJyrJ5XIxTi7vGdoK
-----END X509 CERTIFICATE-----
-----BEGIN X509 CERTIFICATE-----
MIICGTCCAdgCAwCqTDAJBgUrDgMCDQUAMHwxCzAJBgNVBAYTAlVTMTYwNAYDVQQK
Ey1OYXRpb25hbCBBZXJvbmF1dGljcyBhbmQgU3BhY2UgQWRtaW5pc3RyYXRpb24x
GTAXBgNVBAsTEFRlc3QgRW52aXJvbm1lbnQxGjAYBgNVBAsTEURTUy1OQVNBLVBp
bG90LUNBMB4XDTk2MDUxNDE3MDE0MVoXDTk3MDUxNDE3MDE0MVowMzELMAkGA1UE
BhMCQVUxDzANBgNVBAoTBk1pbmNvbTETMBEGA1UEAxMKRXJpYyBZb3VuZzCB8jAJ
BgUrDgMCDAUAA4HkADCB4AJBAKbfHz6vE6pXXMTpswtGUec2tvnfLJUsoxE9qs4+
ObZX7LmLvragNPUeiTJx7UOWZ5DfBj6bXLc8eYne0lP1g3ACQQDUEaSg45P2qrDw
ixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLbbn3QK74T2IxY1yY+kCNq8XrIqf5fJJzI
H0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3fVd0geUCQQCzCFUQAh+ZkEmp5804cs6Z
WBhrUAfnra8lJItYo9xPcXgdIfLfibcXR71UsyO77MRD7B0+Ag2tq794IleCVcEE
MAkGBSsOAwINBQADMAAwLQIUWsuuJRE3VT4ueWkWMAJMJaZjj1ECFQCYY0zX4bzM
LC7obsrHD8XAHG+ZRG==
-----END X509 CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICTTCCAbagAwIBAgIBADANBgkqhkiG9w0BAQQFADBMMQswCQYDVQQGEwJHQjEM
MAoGA1UEChMDVUNMMRgwFgYDVQQLEw9JQ0UtVEVMIFByb2plY3QxFTATBgNVBAMT
DFRydXN0RmFjdG9yeTAeFw05NzA0MjIxNDM5MTRaFw05ODA0MjIxNDM5MTRaMEwx
CzAJBgNVBAYTAkdCMQwwCgYDVQQKEwNVQ0wxGDAWBgNVBAsTD0lDRS1URUwgUHJv
amVjdDEVMBMGA1UEAxMMVHJ1c3RGYWN0b3J5MIGcMAoGBFUIAQECAgQAA4GNADCB
iQKBgQCEieR8NcXkUW1f0G6aC6u0i8q/98JqS6RxK5YmHIGKCkuTWAUjzLfUa4dt
U9igGCjTuxaDqlzEim+t/02pmiBZT9HaX++35MjQPUWmsChcYU5WyzGErXi+rQaw
zlwS73zM8qiPj/97lXYycWhgL0VaiDSPxRXEUdWoaGruom4mNQIDAQABo0IwQDAd
BgNVHQ4EFgQUHal1LZr7oVg5z6lYzrhTgZRCmcUwDgYDVR0PAQH/BAQDAgH2MA8G
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAfaggfl6FZoioecjv0dq8
/DXo/u11iMZvXn08gjX/zl2b4wtPbShOSY5FhkSm8GeySasz+/Nwb/uzfnIhokWi
lfPZHtlCWtXbIy/TN51eJyq04ceDCQDWvLC2enVg9KB+GJ34b5c5VaPRzq8MBxsA
S7ELuYGtmYgYm9NZOIr7yU0=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIB6jCCAZQCAgEtMA0GCSqGSIb3DQEBBAUAMIGAMQswCQYDVQQGEwJVUzE2MDQG
A1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFkbWluaXN0cmF0
aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MR4wHAYDVQQLExVNRDUtUlNB
LU5BU0EtUGlsb3QtQ0EwHhcNOTYwNDMwMjIwNTAwWhcNOTcwNDMwMjIwNTAwWjCB
gDELMAkGA1UEBhMCVVMxNjA0BgNVBAoTLU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFu
ZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZMBcGA1UECxMQVGVzdCBFbnZpcm9ubWVu
dDEeMBwGA1UECxMVTUQ1LVJTQS1OQVNBLVBpbG90LUNBMFkwCgYEVQgBAQICAgAD
SwAwSAJBALmmX5+GqAvcrWK13rfDrNX9UfeA7f+ijyBgeFQjYUoDpFqapw4nzQBL
bAXug8pKkRwa2Zh8YODhXsRWu2F/UckCAwEAATANBgkqhkiG9w0BAQQFAANBAH9a
OBA+QCsjxXgnSqHx04gcU8S49DVUb1f2XVoLnHlIb8RnX0k5O6mpHT5eti9bLkiW
GJNMJ4L0AJ/ac+SmHZc=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICajCCAdMCBDGA0QUwDQYJKoZIhvcNAQEEBQAwfTELMAkGA1UEBhMCQ2ExDzAN
BgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmlsaXR5IEFjY2VwdGVkMR8w
HQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRwwGgYDVQQDExNFbnRydXN0
IERlbW8gV2ViIENBMB4XDTk2MDQyNjEzMzUwMVoXDTA2MDQyNjEzMzUwMVowfTEL
MAkGA1UEBhMCQ2ExDzANBgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmls
aXR5IEFjY2VwdGVkMR8wHQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRww
GgYDVQQDExNFbnRydXN0IERlbW8gV2ViIENBMIGdMA0GCSqGSIb3DQEBAQUAA4GL
ADCBhwKBgQCaroS7O1DA0hm4IefNYU1cx/nqOmzEnk291d1XqznDeF4wEgakbkCc
zTKxK791yNpXG5RmngqH7cygDRTHZJ6mfCRn0wGC+AI00F2vYTGqPGRQL1N3lZT0
YDKFC0SQeMMjFIZ1aeQigroFQnHo0VB3zWIMpNkka8PY9lxHZAmWwQIBAzANBgkq
hkiG9w0BAQQFAAOBgQBAx0UMVA1s54lMQyXjMX5kj99FJN5itb8bK1Rk+cegPQPF
cWO9SEWyEjjBjIkjjzAwBkaEszFsNGxemxtXvwjIm1xEUMTVlPEWTs2qnDvAUA9W
YqhWbhH0toGT36236QAsqCZ76rbTRVSSX2BHyJwJMG2tCRv7kRJ//NIgxj3H4w==
-----END CERTIFICATE-----
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
-----BEGIN CERTIFICATE-----
MIICJzCCAZACAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTczN1oXDTAxMDYw
OTEzNTczN1owXDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYDVQQDExNUZXN0IFBDQSAoMTAy
NCBiaXQpMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdoWk/3+WcMlfjIrkg
40ketmnQaEogQe1LLcuOJV6rKfUSAsPgwgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp
22Jp85PmemiDzyUIStwk72qhp1imbANZvlmlCFKiQrjUyuDfu4TABmn+kkt3vR1Y
BEOGt+IFye1UBVSATVdRJ2UVhwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABNA1u/S
Cg/LJZWb7GliiKJsvuhxlE4E5JxQF2zMub/CSNbF97//tYSyj96sxeFQxZXbcjm9
xt6mr/xNLA4szNQMJ4P+L7b5e/jC5DSqlwS+CUYJgaFs/SP+qJoCSu1bR3IM9XWO
cRBpDmcBbYLkSyB92WURvsZ1LtjEcn+cdQVI
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCdoWk/3+WcMlfjIrkg40ketmnQaEogQe1LLcuOJV6rKfUSAsPg
wgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp22Jp85PmemiDzyUIStwk72qhp1imbANZ
vlmlCFKiQrjUyuDfu4TABmn+kkt3vR1YBEOGt+IFye1UBVSATVdRJ2UVhwIDAQAB
AoGAba4fTtuap5l7/8ZsbE7Z1O32KJY4ZcOZukLOLUUhXxXduT+FTgGWujc0/rgc
z9qYCLlNZHOouMYTgtSfYvuMuLZ11VIt0GYH+nRioLShE59Yy+zCRyC+gPigS1kz
xvo14AsOIPYV14Tk/SsHyq6E0eTk7VzaIE197giiINUERPECQQDSKmtPTh/lRKw7
HSZSM0I1mFWn/1zqrAbontRQY5w98QWIOe5qmzYyFbPXYT3d9BzlsMyhgiRNoBbD
yvohSHXJAkEAwAHx6ezAZeWWzD5yXD36nyjpkVCw7Tk7TSmOceLJMWt1QcrCfqlS
xA5jjpQ6Z8suU5DdtWAryM2sAir1WisYzwJAd6Zcx56jvAQ3xcPXsE6scBTVFzrj
7FqZ6E+cclPzfLQ+QQsyOBE7bpI6e/FJppY26XGZXo3YGzV8IGXrt40oOQJALETG
h86EFXo3qGOFbmsDy4pdP5nBERCu8X1xUCSfintiD4c2DInxgS5oGclnJeMcjTvL
QjQoJCX3UJCi/OUO1QJBAKgcDHWjMvt+l1pjJBsSEZ0HX9AAIIVx0RQmbFGS+F2Q
hhu5l77WnnZOQ9vvhV5u7NPCUF9nhU3jh60qWWO8mkc=
-----END RSA PRIVATE KEY-----
subject=/C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
issuer= /C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
notBefore=941104185834Z
notAfter =991103185834Z
-----BEGIN X509 CERTIFICATE-----
MIICIzCCAZACBQJBAAAWMA0GCSqGSIb3DQEBAgUAMFwxCzAJBgNVBAYTAlVTMSAw
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVy
Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDQxODU4MzRaFw05
OTExMDMxODU4MzRaMFwxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBT
ZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9u
IEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCk+4Fie84QJ93o
975sbsZwmdu41QUDaSiCnHJ/lj+O7Kwpkj+KFPhCdr69XQO5kNTQvAayUTNfxMK/
touPmbZiImDd298ggrTKoi8tUO2UMt7gVY3UaOLgTNLNBRYulWZcYVI4HlGogqHE
7yXpCuaLK44xZtn42f29O2nZ6wIDAQABMA0GCSqGSIb3DQEBAgUAA34AdrW2EP4j
9/dZYkuwX5zBaLxJu7NJbyFHXSudVMQAKD+YufKKg5tgf+tQx6sFEC097TgCwaVI
0v5loMC86qYjFmZsGySp8+x5NRhPJsjjr1BKx6cxa9B8GJ1Qv6km+iYrRpwUqbtb
MJhCKLVLU7tDCZJAuqiqWqTGtotXTcU=
-----END X509 CERTIFICATE-----
subject=/C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
issuer= /C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
notBefore=941109235417Z
notAfter =991231235417Z
-----BEGIN X509 CERTIFICATE-----
MIICKTCCAZYCBQJBAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMSAw
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJl
IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDkyMzU0MTda
Fw05OTEyMzEyMzU0MTdaMF8xCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0
YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJlIFNlcnZlciBDZXJ0aWZp
Y2F0aW9uIEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCSznrB
roM+WqqJg1esJQF2DK2ujiw3zus1eGRUA+WEQFHJv48I4oqCCNIWhjdV6bEhAq12
aIGaBaJLyUslZiJWbIgHj/eBWW2EB2VwE3F2Ppt3TONQiVaYSLkdpykaEy5KEVmc
HhXVSVQsczppgrGXOZxtcGdI5d0t1sgeewIDAQABMA0GCSqGSIb3DQEBAgUAA34A
iNHReSHO4ovo+MF9NFM/YYPZtgs4F7boviGNjwC4i1N+RGceIr2XJ+CchcxK9oU7
suK+ktPlDemvXA4MRpX/oRxePug2WHpzpgr4IhFrwwk4fia7c+8AvQKk8xQNMD9h
cHsg/jKjn7P0Z1LctO6EjJY2IN6BCINxIYoPnqk=
-----END X509 CERTIFICATE-----
subject=/C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
/OU=Certification Services Division/CN=Thawte Server CA
/Email=server-certs@thawte.com
issuer= /C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
/OU=Certification Services Division/CN=Thawte Server CA
/Email=server-certs@thawte.com
-----BEGIN CERTIFICATE-----
MIIC+TCCAmICAQAwDQYJKoZIhvcNAQEEBQAwgcQxCzAJBgNVBAYTAlpBMRUwEwYD
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
dmljZXMgRGl2aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkq
hkiG9w0BCQEWF3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMB4XDTk2MDcyNzE4MDc1
N1oXDTk4MDcyNzE4MDc1N1owgcQxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0
ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMUVGhhd3RlIENv
bnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkqhkiG9w0BCQEW
F3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
iQKBgQDTpFBuyP9Wa+bPXbbqDGh1R6KqwtqEJfyo9EdR2oW1IHSUhh4PdcnpCGH1
Bm0wbhUZAulSwGLbTZme4moMRDjN/r7jZAlwxf6xaym2L0nIO9QnBCUQly/nkG3A
KEKZ10xD3sP1IW1Un13DWOHA5NlbsLjctHvfNjrCtWYiEtaHDQIDAQABMA0GCSqG
SIb3DQEBBAUAA4GBAIsvn7ifX3RUIrvYXtpI4DOfARkTogwm6o7OwVdl93yFhDcX
7h5t0XZ11MUAMziKdde3rmTvzUYIUCYoY5b032IwGMTvdiclK+STN6NP2m5nvFAM
qJT5gC5O+j/jBuZRQ4i0AMYQr5F4lT8oBJnhgafw6PL8aDY2vMHGSPl9+7uf
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDDTCCAnYCAQAwDQYJKoZIhvcNAQEEBQAwgc4xCzAJBgNVBAYTAlpBMRUwEwYD
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBD
QTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTAeFw05
NjA3MjcxODA3MTRaFw05ODA3MjcxODA3MTRaMIHOMQswCQYDVQQGEwJaQTEVMBMG
A1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xHTAbBgNVBAoT
FFRoYXd0ZSBDb25zdWx0aW5nIGNjMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNl
cnZpY2VzIERpdmlzaW9uMSEwHwYDVQQDExhUaGF3dGUgUHJlbWl1bSBTZXJ2ZXIg
Q0ExKDAmBgkqhkiG9w0BCQEWGXByZW1pdW0tc2VydmVyQHRoYXd0ZS5jb20wgZ8w
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANI2NmqL18JbntqBQWKPOO5JBFXW0O8c
G5UWR+8YSDU6UvQragaPOy/qVuOvho2eF/eetGV1Ak3vywmiIVHYm9Bn0LoNkgYU
c9STy5cqAJxcTgy8+hVS/PJEbtoRSm4Iny8t4/mqOoZztkZTWMiJBb2DEbhzP6oH
jfRCTedAnRw3AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAutFIgTRZVYerIZfL9lvR
w9Eifvvo5KTZ3h+Bj+VzNnyw4Qc/IyXkPOu6SIiH9LQ3sCmWBdxpe+qr4l77rLj2
GYuMtESFfn1XVALzkYgC7JcPuTOjMfIiMByt+uFf8AV8x0IW/Qkuv+hEQcyM9vxK
3VZdLbCVIhNoEsysrxCpxcI=
-----END CERTIFICATE-----
Tims test GCI CA
-----BEGIN CERTIFICATE-----
MIIB8DCCAZoCAQAwDQYJKoZIhvcNAQEEBQAwgYIxCzAJBgNVBAYTAkFVMRMwEQYD
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2RldmVsb3BtZW50MRkwFwYDVQQDExBD
cnlwdFNvZnQgRGV2IENBMB4XDTk3MDMyMjEzMzQwNFoXDTk4MDMyMjEzMzQwNFow
gYIxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhC
cmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2Rl
dmVsb3BtZW50MRkwFwYDVQQDExBDcnlwdFNvZnQgRGV2IENBMFwwDQYJKoZIhvcN
AQEBBQADSwAwSAJBAOAOAqogG5QwAmLhzyO4CoRnx/wVy4NZP4dxJy83O1EnL0rw
OdsamJKvPOLHgSXo3gDu9uVyvCf/QJmZAmC5ml8CAwEAATANBgkqhkiG9w0BAQQF
AANBADRRS/GVdd7rAqRW6SdmgLJduOU2yq3avBu99kRqbp9A/dLu6r6jU+eP4oOA
TfdbFZtAAD2Hx9jUtY3tfdrJOb8=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICVjCCAgACAQAwDQYJKoZIhvcNAQEEBQAwgbUxCzAJBgNVBAYTAkFVMRMwEQYD
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsTI1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9O
IEFVVEhPUklUSUVTMTQwMgYDVQQDEytaRVJPIFZBTFVFIENBIC0gREVNT05TVFJB
VElPTiBQVVJQT1NFUyBPTkxZMB4XDTk3MDQwMzEzMjI1NFoXDTk4MDQwMzEzMjI1
NFowgbUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQH
EwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsT
I1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9OIEFVVEhPUklUSUVTMTQwMgYDVQQDEyta
RVJPIFZBTFVFIENBIC0gREVNT05TVFJBVElPTiBQVVJQT1NFUyBPTkxZMFwwDQYJ
KoZIhvcNAQEBBQADSwAwSAJBAOZ7T7yqP/tyspcko3yPY1y0Cm2EmwNvzW4QgVXR
Fjs3HmJ4xtSpXdo6mwcGezL3Abt/aQXaxv9PU8xt+Jr0OFUCAwEAATANBgkqhkiG
9w0BAQQFAANBAOQpYmGgyCqCy1OljgJhCqQOu627oVlHzK1L+t9vBaMfn40AVUR4
WzQVWO31KTgi5vTK1U+3h46fgUWqQ0h+6rU=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIAwgKADAgECAgEAMA0GCSqGSIb3DQEBBAUAMGIxETAPBgNVBAcTCEludGVybmV0
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xh
c3MgMSBDQSAtIEluZGl2aWR1YWwgU3Vic2NyaWJlcjAeFw05NjA0MDgxMDIwMjda
Fw05NzA0MDgxMDIwMjdaMGIxETAPBgNVBAcTCEludGVybmV0MRcwFQYDVQQKEw5W
ZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xhc3MgMSBDQSAtIElu
ZGl2aWR1YWwgU3Vic2NyaWJlcjCAMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2
FKbPTdAFDdjKI9BvqrQpkmOOLPhvltcunXZLEbE2jVfJw/0cxrr+Hgi6M8qV6r7j
W80GqLd5HUQq7XPysVKDaBBwZJHXPmv5912dFEObbpdFmIFH0S3L3bty10w/cari
QPJUObwW7s987LrbP2wqsxaxhhKdrpM01bjV0Pc+qQIDAQABAAAAADANBgkqhkiG
9w0BAQQFAAOBgQA+1nJryNt8VBRjRr07ArDAV/3jAH7GjDc9jsrxZS68ost9v06C
TvTNKGL+LISNmFLXl+JXhgGB0JZ9fvyYzNgHQ46HBUng1H6voalfJgS2KdEo50wW
8EFZYMDkT1k4uynwJqkVN2QJK/2q4/A/VCov5h6SlM8Affg2W+1TLqvqkwAA
-----END CERTIFICATE-----
subject=/L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
issuer= /L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
-----BEGIN CERTIFICATE-----
MIIEkzCCA/ygAwIBAgIRANDTUpSRL3nTFeMrMayFSPAwDQYJKoZIhvcNAQECBQAw
YjERMA8GA1UEBxMISW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQw
MgYDVQQLEytWZXJpU2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3Jp
YmVyMB4XDTk2MDYwNDAwMDAwMFoXDTk4MDYwNDIzNTk1OVowYjERMA8GA1UEBxMI
SW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQLEytWZXJp
U2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3JpYmVyMIGfMA0GCSqG
SIb3DQEBAQUAA4GNADCBiQKBgQC6A+2czKGRcYMfm8gdnk+0de99TDDzsqo0v5nb
RsbUmMcdRQ7nsMbRWe0SAb/9QoLTZ/cJ0iOBqdrkz7UpqqKarVoTSdlSMVM92tWp
3bJncZHQD1t4xd6lQVdI1/T6R+5J0T1ukOdsI9Jmf+F28S6g3R3L1SFwiHKeZKZv
z+793wIDAQABo4ICRzCCAkMwggIpBgNVHQMBAf8EggIdMIICGTCCAhUwggIRBgtg
hkgBhvhFAQcBATCCAgAWggGrVGhpcyBjZXJ0aWZpY2F0ZSBpbmNvcnBvcmF0ZXMg
YnkgcmVmZXJlbmNlLCBhbmQgaXRzIHVzZSBpcyBzdHJpY3RseSBzdWJqZWN0IHRv
LCB0aGUgVmVyaVNpZ24gQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQg
KENQUyksIGF2YWlsYWJsZSBhdDogaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL0NQ
Uy0xLjA7IGJ5IEUtbWFpbCBhdCBDUFMtcmVxdWVzdHNAdmVyaXNpZ24uY29tOyBv
ciBieSBtYWlsIGF0IFZlcmlTaWduLCBJbmMuLCAyNTkzIENvYXN0IEF2ZS4sIE1v
dW50YWluIFZpZXcsIENBIDk0MDQzIFVTQSBUZWwuICsxICg0MTUpIDk2MS04ODMw
IENvcHlyaWdodCAoYykgMTk5NiBWZXJpU2lnbiwgSW5jLiAgQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4gQ0VSVEFJTiBXQVJSQU5USUVTIERJU0NMQUlNRUQgYW5kIExJQUJJ
TElUWSBMSU1JVEVELqAOBgxghkgBhvhFAQcBAQGhDgYMYIZIAYb4RQEHAQECMC8w
LRYraHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvQ1BTLTEuMDAU
BglghkgBhvhCAQEBAf8EBAMCAgQwDQYJKoZIhvcNAQECBQADgYEApRJRkNBqLLgs
53IR/d18ODdLOWMTZ+QOOxBrq460iBEdUwgF8vmPRX1ku7UiDeNzaLlurE6eFqHq
2zPyK5j60zfTLVJMWKcQWwTJLjHtXrW8pxhNtFc6Fdvy5ZkHnC/9NIl7/t4U6WqB
p4y+p7SdMIkEwIZfds0VbnQyX5MRUJY=
-----END CERTIFICATE-----
subject=/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
issuer= /C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
-----BEGIN CERTIFICATE-----
MIICMTCCAZoCBQKhAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMg
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyVxZ
nvIbigEUtBDfBEDb41evakVAj4QMC9Ez2dkRz+4CWB8l9yqoRAWq7AMfeH+ek7ma
AKojfdashaJjRcdyJ8z0TMZ1cdI5709C8HXfCpDGjiBvmA/4rCNfcCk2pMmG57Ga
IMtTpYXnPb59mv4kRTPcdhXtD6JxZExlLoFoRacCAwEAATANBgkqhkiG9w0BAQIF
AAOBgQB1Zmw+0c2B27X4LzZRtvdCvM1Cr9wO+hVs+GeTVzrrtpLotgHKjLeOQ7RJ
Zfk+7r11Ri7J/CVdqMcvi5uPaM+0nJcYwE3vH9mvgrPmZLiEXIqaB1JDYft0nls6
NvxMsvwaPxUupVs8G5DsiCnkWRb5zget7Ond2tIxik/W2O8XjQ==
-----END CERTIFICATE-----
subject=/C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
issuer= /C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
-----BEGIN CERTIFICATE-----
MIICMTCCAZoCBQKmAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMg
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LJ1
9njQrlpQ9OlQqZ+M1++RlHDo0iSQdomF1t+s5gEXMoDwnZNHvJplnR+Xrr/phnVj
IIm9gFidBAydqMEk6QvlMXi9/C0MN2qeeIDpRnX57aP7E3vIwUzSo+/1PLBij0pd
O92VZ48TucE81qcmm+zDO3rZTbxtm+gVAePwR6kCAwEAATANBgkqhkiG9w0BAQIF
AAOBgQBT3dPwnCR+QKri/AAa19oM/DJhuBUNlvP6Vxt/M3yv6ZiaYch6s7f/sdyZ
g9ysEvxwyR84Qu1E9oAuW2szaayc01znX1oYx7EteQSWQZGZQbE8DbqEOcY7l/Am
yY7uvcxClf8exwI/VAx49byqYHwCaejcrOICdmHEPgPq0ook0Q==
-----END CERTIFICATE-----

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