Compare commits

...

56 Commits

Author SHA1 Message Date
cvs2svn
a13ec6774d This commit was manufactured by cvs2svn to create tag 'AFTER_COMPAQ_PATCH'. 2002-05-22 11:27:43 +00:00
Richard Levitte
77e2de7ea7 Compaq sent a rather large patch, and here are the contents, adapted
where necessary to the main trunk (0.9.8-dev).

This does not include rearrangements and work I've been doing, that'll
come in the next bunch of commits to this branch.  This set of changes
can't be expected to work on any VMS system, there are changes in here
that are very specific to Compaq's building system.

This set of changes will be surrounded by the tags BEFORE_COMPAQ_PATCH
and AFTER_COMPAQ_PATCH.
2002-05-22 11:27:42 +00:00
cvs2svn
606efc54e6 This commit was manufactured by cvs2svn to create branch 'BRANCH_VMS_64BIT'. 2002-05-21 08:59:58 +00:00
Bodo Möller
7711de24f9 accept NULL in 'free' functions 2002-05-21 08:59:57 +00:00
Dr. Stephen Henson
eee6c81af8 Reorganise -subj option code, fix buffer overrun. 2002-05-19 16:31:10 +00:00
Dr. Stephen Henson
b89670ef0e Fix Mingw32 asm build: use the Unix
bignum assembly method of bn-586.pl
and co-586.pl which (for some reason)
VC++ doesn't use.
2002-05-19 12:03:05 +00:00
Dr. Stephen Henson
0fccb00b5b Add missing EVP_CIPHER_CTX_init call. 2002-05-18 23:43:10 +00:00
Lutz Jänicke
72da660ddb Fix incorrect =over 4 location.
Submitted by: David Waitzman <djw@bbn.com>
Reviewed by: Lutz Jaenicke
PR: [openssl.org #38]
2002-05-16 17:45:37 +00:00
Bodo Möller
46ffee4792 fix EVP_dsa_sha macro
Submitted by: Nils Larsch
2002-05-16 12:51:18 +00:00
Lutz Jänicke
c0a953650b Use the indirect way to the actual request tracker, so that people
also are informed about the credentials required for guest access
and the operation instructions.
2002-05-16 10:01:53 +00:00
Bodo Möller
0424fe1a8f update 2002-05-16 09:28:09 +00:00
Dr. Stephen Henson
544a2aea4b Zero cipher_data in EVP_CIPHER_CTX_cleanup
Add cleanup calls to evp_test.c

Allow reuse of cipher contexts by removing
automatic cleanup in EVP_*Final().
2002-05-15 18:49:25 +00:00
Bodo Möller
60e5f36d27 make b_print.c consistent with the rest of OpenSSL:
disable assert() except for debug builds
2002-05-14 19:40:58 +00:00
Lutz Jänicke
2469361c0f Add missing '"'
Submitted by: Boyd Gerber <gerberb@zenez.com>
2002-05-12 20:37:44 +00:00
Lutz Jänicke
6fa865a325 Recognize PPC64 target.
Submitted by:
Reviewed by:
PR: 26
2002-05-12 19:45:51 +00:00
Dr. Stephen Henson
e9ba69631b EVP_SealFinal should return a value. 2002-05-11 17:37:08 +00:00
Ulf Möller
d80a8d1919 values were reset for no reason. 2002-05-11 09:15:42 +00:00
Ulf Möller
d0ff2a237b updated Mingw32 instructions. 2002-05-11 09:14:40 +00:00
Dr. Stephen Henson
6e5dd63c77 Add config entry debug-steve-linux-pseudo64. This sets the
SIXTY_FOUR bignum library option to use 64 bit operations
on the 32 bit linux platform.

This is very inefficient but it can be used to test some
of the 64 bit logic on a 32 bit platform.
2002-05-10 23:00:43 +00:00
Dr. Stephen Henson
dc014d43af Fallback to normal multiply if n2 == 8 and dna or dnb is not zero
in bn_mul_recursive.

This is (hopefully) what was triggering bignum errors on 64 bit
platforms and causing the BN_mod_mul test to fail.
2002-05-10 22:18:13 +00:00
Dr. Stephen Henson
2f9cf160e4 Avoid gcc warning: BN_DEC_CONV when SIXTY_FOUR_BIT is defined is unsigned. 2002-05-10 22:07:37 +00:00
Richard Levitte
336c35dc9e Updating status for 0.9.6d 2002-05-09 23:54:02 +00:00
Richard Levitte
72b5215645 Synchronise the FAQ 2002-05-09 23:41:40 +00:00
Richard Levitte
06bed64317 Make the huge buffer smaller, so the size becomes reasonable for small-stack environments.
Notified by Verdon Walker <VWalker@novell.com>
2002-05-09 20:14:00 +00:00
Richard Levitte
c559759265 One place where VMS wasn't changed to OPENSSL_SYS_VMS... 2002-05-09 18:27:06 +00:00
Richard Levitte
b4000e8ad8 Move an assert() to avoid core dumps when a static buffer hasn't been given.
Notified by Verdon Walker <VWalker@novell.com>
2002-05-09 18:19:21 +00:00
Richard Levitte
21d5ed98d5 Small documentation fix for EVP_CipherFinal or EVP_CipherFinal_ex.
Notified by Stella Power <snpower@maths.tcd.ie>.
PR: 24
2002-05-08 15:20:38 +00:00
Richard Levitte
e9a182fa30 Generate an error if rewinding wasn't possible.
Notified by Ken Hirsch <kenhirsch@myself.com>.
PR: 23
2002-05-08 15:12:59 +00:00
Bodo Möller
b6db386ffd Change internals of the EC library so that the functions
EC_GROUP_{set_generator,get_generator,get_order,get_cofactor} are
implemented directly in crypto/ec/ec_lib.c and not dispatched to
methods.

Also fix EC_GROUP_copy to copy the NID.
2002-05-08 11:54:24 +00:00
Lutz Jänicke
2c975b501d Add missing ";" after fi
Submitted by: bryanh@giraffe-data.com
Reviewed by:
PR: [openssl.org #18]
2002-05-07 15:35:48 +00:00
Bodo Möller
279fe3b1c5 in SignerInfo, use ecdsa-with-SHA1 OID for ECDSA (not ecPublicKey)
Submitted by: Nils Larsch
2002-05-07 15:14:12 +00:00
Bodo Möller
98a9092af1 Fix ciphersuite list to enforce low priority for RC4. 2002-05-07 08:36:26 +00:00
Bodo Möller
87108f5af9 ensure that, for each strength, RC4 ciphers have least preference
in the default ciphersuite list
2002-05-07 07:59:35 +00:00
Bodo Möller
f257d984b7 refer to latest draft for AES ciphersuites 2002-05-07 07:55:36 +00:00
Bodo Möller
b889d6a8e8 fix warning 2002-05-06 10:44:59 +00:00
Bodo Möller
47234cd3d2 update 2002-05-05 23:47:46 +00:00
Bodo Möller
2c8d0dccfc improve wNAF generation 2002-05-05 23:45:09 +00:00
Bodo Möller
a4f576a378 disable AES ciphersuites unless explicitly requested 2002-05-05 23:44:27 +00:00
Bodo Möller
3def5a010e fix casts 2002-05-05 23:00:28 +00:00
Richard Levitte
294bd1e2f3 Make sure that date is run under the C locale, so dates are given in the
default format.
PR: 16
2002-05-02 08:05:46 +00:00
Dr. Stephen Henson
253ef2187c Add apps_startup and bio_err init code to smime.c 2002-05-01 20:07:46 +00:00
Lutz Jänicke
c0455cbb18 Fix escaping when using the -subj option of "openssl req", document
'hidden' -nameopt support. (Robert Joop <joop@fokus.gmd.de>)
2002-04-30 12:08:18 +00:00
Lutz Jänicke
17e2c77a77 Add information about -nameopt option for x509. 2002-04-29 16:01:41 +00:00
Bodo Möller
b52f3818f4 undo nonsense patch (r *is* signed or we have signedness mismatches elsewhere) 2002-04-29 11:03:06 +00:00
Richard Levitte
cc12975514 Fix unsigned vs. signed clash 2002-04-29 10:29:38 +00:00
Richard Levitte
9738f395c6 Synchronise with 0.9.7-stable. 2002-04-29 10:28:29 +00:00
Richard Levitte
d4294c8984 Synchronise with 0.9.7-stable. 2002-04-29 10:19:19 +00:00
Bodo Möller
8df61b5011 Fix crypto/asn1/a_sign.c so that 'parameters' is omitted (not
encoded as NULL) with id-dsa-with-sha1.

Submitted by: Nils Larsch
2002-04-26 08:28:34 +00:00
Lutz Jänicke
f1e6643751 Add generationQualifier OID (proposed by Fiel Cabral). 2002-04-25 18:03:13 +00:00
Richard Levitte
6991bf196c Potential memory leak removed. Notified by <threaded@totalise.co.uk> 2002-04-25 10:11:21 +00:00
Bodo Möller
822a4c1bdb new items for 0.9.7 2002-04-25 07:52:07 +00:00
Bodo Möller
a5868b3fe2 oops 2002-04-25 07:46:35 +00:00
Bodo Möller
4edfacb983 AlgorithmIdentifier bugs 2002-04-25 06:29:27 +00:00
Bodo Möller
c6efe6f59e fix usage (no 'key') 2002-04-23 13:56:14 +00:00
Richard Levitte
35c2b3a9ac Uhmmm, if we use && after having tested for the presence of the certificate,
we just *might* stand a certain chance of actually getting it written
to file...
2002-04-23 13:15:08 +00:00
Lutz Jänicke
af9675e75a ERR_file_name is no longer being used. 2002-04-22 13:54:50 +00:00
139 changed files with 14572 additions and 867 deletions

56
CHANGES
View File

@@ -4,6 +4,21 @@
Changes between 0.9.7 and 0.9.8 [xx XXX 2002]
*) Change internals of the EC library so that the functions
EC_GROUP_set_generator()
EC_GROUP_get_generator()
EC_GROUP_get_order()
EC_GROUP_get_cofactor()
are implemented directly in crypto/ec/ec_lib.c and not dispatched
to methods, which would lead to unnecessary code duplication when
adding different types of curves.
[Nils Larsch with input by Bodo Moeller]
*) Implement compute_wNAF (crypto/ec/ec_mult.c) without BIGNUM
arithmetic, and such that modified wNAFs are generated
(which avoid length expansion in many cases).
[Bodo Moeller]
*) Add a function EC_GROUP_check_discriminant() (defined via
EC_METHOD) that verifies that the curve discriminant is non-zero.
@@ -40,6 +55,23 @@
Changes between 0.9.6d and 0.9.7 [XX xxx 2002]
*) Remove most calls to EVP_CIPHER_CTX_cleanup() in evp_enc.c, this
allows existing EVP_CIPHER_CTX structures to be reused after
calling EVP_*Final(). This behaviour is used by encryption
BIOs and some applications. This has the side effect that
applications must explicitly clean up cipher contexts with
EVP_CIPHER_CTX_cleanup() or they will leak memory.
[Steve Henson]
*) Check the values of dna and dnb in bn_mul_recursive before calling
bn_mul_comba (a non zero value means the a or b arrays do not contain
n2 elements) and fallback to bn_mul_normal if either is not zero.
[Steve Henson]
*) Fix escaping of non-ASCII characters when using the -subj option
of the "openssl req" command line tool. (Robert Joop <joop@fokus.gmd.de>)
[Lutz Jaenicke]
*) Make object definitions compliant to LDAP (RFC2256): SN is the short
form for "surname", serialNumber has no short form.
Use "mail" as the short name for "rfc822Mailbox" according to RFC2798;
@@ -1053,9 +1085,16 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k
*) Update Rijndael code to version 3.0 and change EVP AES ciphers to
handle the new API. Currently only ECB, CBC modes supported. Add new
AES OIDs. Add TLS AES ciphersuites as described in the "AES Ciphersuites
for TLS" draft-ietf-tls-ciphersuite-03.txt.
[Ben Laurie, Steve Henson]
AES OIDs.
Add TLS AES ciphersuites as described in the "AES Ciphersuites
for TLS" draft-ietf-tls-ciphersuite-06.txt. As these are not yet
official, they are not enabled by default and are not even part
of the "ALL" ciphersuite alias; for now, they must be explicitly
requested by specifying the new "AESdraft" ciphersuite alias. If
you want the default ciphersuite list plus the new ciphersuites,
use "DEFAULT:AESdraft:@STRENGTH".
[Ben Laurie, Steve Henson, Bodo Moeller]
*) New function OCSP_copy_nonce() to copy nonce value (if present) from
request to response.
@@ -1625,7 +1664,16 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k
*) Clean old EAY MD5 hack from e_os.h.
[Richard Levitte]
Changes between 0.9.6c and 0.9.6d [XX xxx 2002]
Changes between 0.9.6d and 0.9.6e [XX xxx XXXX]
*) Fix EVP_dsa_sha macro.
[Nils Larsch]
Changes between 0.9.6c and 0.9.6d [9 May 2002]
*) Fix crypto/asn1/a_sign.c so that 'parameters' is omitted (not
encoded as NULL) with id-dsa-with-sha1.
[Nils Larsch <nla@trustcenter.de>; problem pointed out by Bodo Moeller]
*) Check various X509_...() return values in apps/req.c.
[Nils Larsch <nla@trustcenter.de>]

View File

@@ -144,6 +144,7 @@ my %table=(
"debug-bodo", "gcc:-DL_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBIO_PAIR_DEBUG -DPEDANTIC -g -m486 -pedantic -Wshadow -Wall::-D_REENTRANT:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
"debug-ulf", "gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -g -O2 -m486 -Wall -Werror -Wshadow -pipe::-D_REENTRANT:::${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
"debug-steve", "gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DPEDANTIC -g -mcpu=i486 -pedantic -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
"debug-steve-linux-pseudo64", "gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DOPENSSL_NO_ASM -g -mcpu=i486 -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:SIXTY_FOUR_BIT::dlfcn",
"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wid-clash-31 -Wno-long-long -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wid-clash-31 -Wno-long-long -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"dist", "cc:-O::(unknown)::::::",

10
FAQ
View File

@@ -29,6 +29,7 @@ OpenSSL - Frequently Asked Questions
* 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?
[BUILD] Questions about building and testing OpenSSL
@@ -59,7 +60,7 @@ OpenSSL - Frequently Asked Questions
* Which is the current version of OpenSSL?
The current version is available from <URL: http://www.openssl.org>.
OpenSSL 0.9.6c was released on December 21st, 2001.
OpenSSL 0.9.6d was released on May 9, 2002.
In addition to the current stable release, you can also access daily
snapshots of the OpenSSL development version at <URL:
@@ -343,6 +344,13 @@ 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.
[BUILD] =======================================================================

View File

@@ -112,10 +112,10 @@
* Compiler installation:
Mingw32 is available from <ftp://ftp.xraylith.wisc.edu/pub/khan/
gnu-win32/mingw32/gcc-2.95.2/gcc-2.95.2-msvcrt.exe>. GNU make is at
<ftp://agnes.dida.physik.uni-essen.de/home/janjaap/mingw32/binaries/
make-3.76.1.zip>. Install both of them in C:\egcs-1.1.2 and run
C:\egcs-1.1.2\mingw32.bat to set the PATH.
gnu-win32/mingw32/gcc-2.95.2/gcc-2.95.2-msvcrt.exe>. Extract it
to a directory such as C:\gcc-2.95.2 and add c:\gcc-2.95.2\bin to
the PATH environment variable in "System Properties"; or edit and
run C:\gcc-2.95.2\mingw32.bat to set the PATH.
* Compile OpenSSL:

View File

@@ -697,8 +697,8 @@ install: all install_docs
cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
$(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i ); \
fi \
done
fi; \
done;
@if [ -n "$(SHARED_LIBS)" ]; then \
tmp="$(SHARED_LIBS)"; \
for i in $${tmp:-x}; \
@@ -715,7 +715,7 @@ install: all install_docs
cp $$i.a $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a; \
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a; \
fi ); \
fi \
fi; \
done; \
( here="`pwd`"; \
cd $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \

1
NEWS
View File

@@ -38,6 +38,7 @@
o SSL/TLS: support Kerberos cipher suites (RFC2712).
o SSL/TLS: allow more precise control of renegotiations and sessions.
o SSL/TLS: add callback to retrieve SSL/TLS messages.
o SSL/TLS: add draft AES ciphersuites (disabled unless explicitly requested).
Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d:

25
STATUS
View File

@@ -1,10 +1,11 @@
OpenSSL STATUS Last modified at
______________ $Date: 2002/04/13 22:47:04 $
______________ $Date: 2002/05/16 10:01:53 $
DEVELOPMENT STATE
o OpenSSL 0.9.7: Under development...
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
@@ -17,23 +18,12 @@
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 BIGNUM library failures on 64-bit platforms (0.9.7-dev):
- BN_mod_mul verificiation (bc) fails for solaris64-sparcv9-cc
and other 64-bit platforms
Checked on Result
alpha-cc (Tru64 version 4.0) works
linux-alpha+bwx-gcc doesn't work. Reported by
Sean O'Riordain <seanpor@acm.org>
OpenBSD-sparc64 doesn't work. BN_mod_mul breaks.
Needs checked on
[add platforms here]
- BN_mod_mul verification fails for mips3-sgi-irix
unless configured with no-asm
o BN_mod_mul verification fails for mips3-sgi-irix
unless configured with no-asm
AVAILABLE PATCHES
@@ -68,6 +58,9 @@
OPEN ISSUES
o Do we want the EVP API changes in 0.9.7?
Can compatibility be improved?
o The Makefile hierarchy and build mechanism is still not a round thing:
1. The config vs. Configure scripts

477
VMS/cert_tool/hostaddr.c Normal file
View File

@@ -0,0 +1,477 @@
#ifdef VMS
#pragma module HOSTADDR "X-1"
/*
**
** Copyright (c) 2000 Compaq Computer Corporation
** COMPAQ Registered in U.S. Patent and Trademark Office.
**
** Confidential computer software. Valid license from Compaq or
** authorized sublicensor required for possession, use or copying.
** Consistent with FAR 12.211 and 12.212, Commercial Computer Software,
** Computer Software Documentation, and Technical Data for Commercial
** Items are licensed to the U.S. Government under vendor's standard
** commercial license.
**
*/
/*
**++
**
** FACILITY: Apache Web Server
**
** ABSTRACT:
**
** This program determine the hostaddr of the default node or of
** a given hostname.
**
** The command line syntax is:
**
** HOSTADDR [-l log-name] [-s sym-name] [host-name]
**
** where:
**
** -l log-name specifies an optional logical name to receive hostname.
**
** -c sym-name specifies an optional symbol name to receive hostname.
**
** host-name specifies an optional host name to resolve.
**
** AUTHOR: Matthew Doremus CREATION DATE: 07-Jul-2000
**
** Modification History:
**
** X-1 Matthew Doremus 07-Jul-2000
** Initial development
**
**--
**
** Compile/Link instructions:
**
** OpenVMS Alpha/VAX:
** $ CC HOSTADDR+SYS$LIBRARY:SYS$LIB_C/LIBRARY
** $ LINK HOSTADDR
**
*/
/*
** Define __NEW_STARLET if it's not already defined
*/
#ifndef __NEW_STARLET
#define __NEW_STARLET
#define __NEW_STARLET_SET
#endif
/*
** Include the necessary header files
*/
#include <lib$routines>
#include <libclidef>
#include <descrip>
#include <stdlib>
#include <string>
#include <stdio>
#include <netdb>
#include <in>
/*
** Undefine __NEW_STARLET if we had defined it
*/
#ifndef __NEW_STARLET_SET
#undef __NEW_STARLET_SET
#undef __NEW_STARLET
#endif
/*
** Option Data Structure
*/
typedef struct _opt_data {
char *log_name;
char *sym_name;
char *host_name;
} OPT_DATA;
/*
** Local Routine Prototypes
*/
static void
ParseCmdLine (
int,
char *[],
OPT_DATA *);
static void
SetLogName (
char *,
char *);
static void
SetSymName (
char *,
char *);
static void
Usage ();
/*
**
** main - Main processing routine for the HOSTADDR utility
**
** Functional Description:
**
** This routine controls overall program execution.
**
** Usage:
**
** main argc, argv, envp
**
** Formal parameters:
**
** argc - (IN) argument count
** argv - (IN) address of an argument array
** envp - (IN) address of an environment string
**
** Implicit Parameters:
**
** None
**
** Routine Value:
**
** None
**
** Side Effects:
**
** None
**
*/
int
main (
int argc,
char *argv[],
char *envp[]
)
{
struct in_addr *addr_ptr;
char hostname[512+1];
struct hostent *hp;
OPT_DATA OptData;
char *hostaddr;
int addr_max,
i;
/*
** Parse the command line
*/
ParseCmdLine (argc, argv, &OptData);
/*
** If no host name was given, then use gethostname otherwise
** use the host name given.
*/
if (! OptData.host_name)
{
if (gethostname (hostname, sizeof (hostname) - 1))
{
perror ("gethostname");
exit (1);
}
}
else
strcpy (hostname, OptData.host_name);
/*
** Get the host address using gethostbyname
*/
if (! (hp = gethostbyname (hostname)))
{
perror ("gethostbyname");
exit (1);
}
/*
** Format the host address(es) into a comma separated list
*/
addr_max = hp->h_length / sizeof (struct in_addr);
hostaddr = malloc ((addr_max * (15 + 1)) + 1);
addr_ptr = (struct in_addr *) hp->h_addr;
for (i = 0; i < addr_max; i++)
{
if (i > 0)
strcat (hostaddr, ",");
addr_ptr = addr_ptr + (i * sizeof (struct in_addr));
sprintf (hostaddr + strlen (hostaddr), "%d.%d.%d.%d",
addr_ptr->s_net, addr_ptr->s_host,
addr_ptr->s_lh, addr_ptr->s_impno);
}
/*
** Define a logical name if one was provided
*/
if (OptData.log_name)
SetLogName (OptData.log_name, hostaddr);
/*
** Define a symbol name if one was provided
*/
if (OptData.sym_name)
SetSymName (OptData.sym_name, hostaddr);
/*
** print the host address if no logical or symbol name was provided
*/
if (! OptData.log_name && ! OptData.sym_name)
printf ("%s\n", hostaddr);
}
/*
**
** ParseCmdLine - Parse the command line options
**
** Functional Description:
**
** This routine parses the command line options.
**
** Usage:
**
** ParseCmdLine argc, argv, OptData
**
** Formal parameters:
**
** argc - (IN) argument count
** argv - (IN) address of an argument array
** OptData - (OUT) address of command option data structure
** which will contain the parsed input.
**
** Implicit Parameters:
**
** None
**
** Routine Value:
**
** None
**
** Side Effects:
**
** None
**
*/
static void
ParseCmdLine (
int argc,
char *argv[],
OPT_DATA *OptData
)
{
int option,
i;
/*
** Initialize the option data
*/
OptData->log_name = NULL;
OptData->sym_name = NULL;
OptData->host_name = NULL;
/*
** Process the command line options
*/
while ((option = getopt (argc, argv, "l:s:?")) != EOF)
{
switch (option)
{
/*
** Output to logical name ?
*/
case 'l':
OptData->log_name = strdup (optarg);
break;
/*
** Output to symbol name ?
*/
case 's':
OptData->sym_name = strdup (optarg);
break;
/*
** Invalid argument ?
*/
case '?':
default:
Usage ();
exit (1);
break;
}
}
/*
** Are the number of parameters correct ?
*/
if (argc - optind > 1)
{
Usage ();
exit (1);
}
/*
** Host Name provided ?
*/
if (argc - optind == 1)
OptData->host_name = strdup (argv[optind]);
}
/*
**
** SetLogName - Set a logical name & value
**
** Functional Description:
**
** This routine sets a logical name & value.
**
** Usage:
**
** SetLogName LogName, LogValue
**
** Formal parameters:
**
** LogName - (IN) address of the logical name
** LogValue - (IN) address of the logical value
**
** Implicit Parameters:
**
** None
**
** Routine Value:
**
** None
**
** Side Effects:
**
** None
**
*/
static void
SetLogName (
char *LogName,
char *LogValue
)
{
struct dsc$descriptor_s log_nam_desc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0};
struct dsc$descriptor_s log_val_desc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0};
int status;
/*
** Setup the logical name & value descriptors
*/
log_nam_desc.dsc$w_length = strlen (LogName);
log_nam_desc.dsc$a_pointer = LogName;
log_val_desc.dsc$w_length = strlen (LogValue);
log_val_desc.dsc$a_pointer = LogValue;
/*
** Set the logical name & value
*/
status = lib$set_logical (&log_nam_desc, &log_val_desc, 0, 0, 0);
if (! (status & 1))
exit (status);
}
/*
**
** SetSymName - Set a symbol name & value
**
** Functional Description:
**
** This routine sets a symbol name & value.
**
** Usage:
**
** SetSymName SymName, SymValue
**
** Formal parameters:
**
** SymName - (IN) address of the symbol name
** SymValue - (IN) address of the Symbol value
**
** Implicit Parameters:
**
** None
**
** Routine Value:
**
** None
**
** Side Effects:
**
** None
**
*/
static void
SetSymName (
char *SymName,
char *SymValue
)
{
struct dsc$descriptor_s sym_nam_desc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0};
struct dsc$descriptor_s sym_val_desc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0};
int status;
/*
** Setup the symbol name & value descriptors
*/
sym_nam_desc.dsc$w_length = strlen (SymName);
sym_nam_desc.dsc$a_pointer = SymName;
sym_val_desc.dsc$w_length = strlen (SymValue);
sym_val_desc.dsc$a_pointer = SymValue;
/*
** Set the symbol name & value
*/
status = lib$set_symbol (&sym_nam_desc, &sym_val_desc, &LIB$K_CLI_LOCAL_SYM);
if (! (status & 1))
exit (status);
}
/*
**
** Usage - Display the acceptable unix style command usage
**
** Functional Description:
**
** This routine displays to standard output the appropriate unix style
** command usage.
**
** Usage:
**
** Usage
**
** Formal parameters:
**
** None
**
** Implicit Parameters:
**
** None
**
** Routine Value:
**
** None
**
** Side Effects:
**
** None
**
*/
static void
Usage ()
{
fprintf (stdout, "Usage: HOSTADDR [-l log-name] [-s sym-name] [host-name]\n");
}
#endif /* #ifdef VMS */

513
VMS/cert_tool/hostname.c Normal file
View File

@@ -0,0 +1,513 @@
#ifdef VMS
#pragma module HOSTNAME "X-1"
/*
**
** Copyright (c) 2000 Compaq Computer Corporation
** COMPAQ Registered in U.S. Patent and Trademark Office.
**
** Confidential computer software. Valid license from Compaq or
** authorized sublicensor required for possession, use or copying.
** Consistent with FAR 12.211 and 12.212, Commercial Computer Software,
** Computer Software Documentation, and Technical Data for Commercial
** Items are licensed to the U.S. Government under vendor's standard
** commercial license.
**
*/
/*
**++
**
** FACILITY: Apache Web Server
**
** ABSTRACT:
**
** This program determine the hostname of the default node or of
** a given hostaddr.
**
** The command line syntax is:
**
** HOSTNAME [-l log-name] [-s sym-name] [host-addr]
**
** where:
**
** -l log-name specifies an optional logical name to receive hostname.
**
** -c sym-name specifies an optional symbol name to receive hostname.
**
** host-addr specifies an optional host address to resolve.
**
** AUTHOR: Matthew Doremus CREATION DATE: 07-Jul-2000
**
** Modification History:
**
** X-1 Matthew Doremus 07-Jul-2000
** Initial development
**
**--
**
** Compile/Link instructions:
**
** OpenVMS Alpha/VAX:
** $ CC HOSTNAME+SYS$LIBRARY:SYS$LIB_C/LIBRARY
** $ LINK HOSTNAME
**
*/
/*
** Define __NEW_STARLET if it's not already defined
*/
#ifndef __NEW_STARLET
#define __NEW_STARLET
#define __NEW_STARLET_SET
#endif
/*
** Include the necessary header files
*/
#include <lib$routines>
#include <libclidef>
#include <descrip>
#include <stdlib>
#include <string>
#include <stdio>
#include <netdb>
#include <in>
#include <socket>
/*
** Undefine __NEW_STARLET if we had defined it
*/
#ifndef __NEW_STARLET_SET
#undef __NEW_STARLET_SET
#undef __NEW_STARLET
#endif
/*
** Option Data Structure
*/
typedef struct _opt_data {
char *log_name;
char *sym_name;
unsigned char host_addr[4];
} OPT_DATA;
/*
** Local Routine Prototypes
*/
static void
ParseCmdLine (
int,
char *[],
OPT_DATA *);
static void
SetLogName (
char *,
char *);
static void
SetSymName (
char *,
char *);
static void
Usage ();
/*
**
** main - Main processing routine for the HOSTNAME utility
**
** Functional Description:
**
** This routine controls overall program execution.
**
** Usage:
**
** main argc, argv, envp
**
** Formal parameters:
**
** argc - (IN) argument count
** argv - (IN) address of an argument array
** envp - (IN) address of an environment string
**
** Implicit Parameters:
**
** None
**
** Routine Value:
**
** None
**
** Side Effects:
**
** None
**
*/
int
main (
int argc,
char *argv[],
char *envp[]
)
{
struct in_addr host_addr;
char hostname[512+1];
struct hostent *hp;
OPT_DATA OptData;
int i;
/*
** Parse the command line
*/
ParseCmdLine (argc, argv, &OptData);
/*
** If no host address was given, then use gethostname otherwise
** use gethostbyaddr.
*/
if (! OptData.host_addr[0] && ! OptData.host_addr[1] &&
! OptData.host_addr[2] && ! OptData.host_addr[3])
{
if (gethostname (hostname, sizeof (hostname) - 1))
{
perror ("gethostname");
exit (1);
}
if (! (hp = gethostbyname (hostname)))
{
perror ("gethostbyname");
exit (1);
}
}
else
{
host_addr.s_net = OptData.host_addr[0];
host_addr.s_host = OptData.host_addr[1];
host_addr.s_lh = OptData.host_addr[2];
host_addr.s_impno = OptData.host_addr[3];
if (! (hp = gethostbyaddr (&host_addr, sizeof (host_addr), AF_INET)))
{
perror ("gethostbyaddr");
exit (1);
}
}
/*
** Let's try to determine the best available fully qualified hostname.
*/
if (hp->h_name)
{
strcpy (hostname, hp->h_name);
if (! strchr (hostname, '.'))
{
for (i = 0; hp->h_aliases[i]; i++)
{
if (strchr (hp->h_aliases[i], '.') &&
! strncasecmp (hp->h_aliases[i], hostname, strlen (hostname)))
{
strcpy (hostname, hp->h_aliases[i]);
break;
}
}
}
}
else
strcpy (hostname, "(unavailable)");
/*
** Define a logical name if one was provided
*/
if (OptData.log_name)
SetLogName (OptData.log_name, hostname);
/*
** Define a symbol name if one was provided
*/
if (OptData.sym_name)
SetSymName (OptData.sym_name, hostname);
/*
** print the host name if no logical or symbol name was provided
*/
if (! OptData.log_name && ! OptData.sym_name)
printf ("%s\n", hostname);
}
/*
**
** ParseCmdLine - Parse the command line options
**
** Functional Description:
**
** This routine parses the command line options.
**
** Usage:
**
** ParseCmdLine argc, argv, OptData
**
** Formal parameters:
**
** argc - (IN) argument count
** argv - (IN) address of an argument array
** OptData - (OUT) address of command option data structure
** which will contain the parsed input.
**
** Implicit Parameters:
**
** None
**
** Routine Value:
**
** None
**
** Side Effects:
**
** None
**
*/
static void
ParseCmdLine (
int argc,
char *argv[],
OPT_DATA *OptData
)
{
int option,
i;
/*
** Initialize the option data
*/
OptData->log_name = NULL;
OptData->sym_name = NULL;
OptData->host_addr[0] = 0;
OptData->host_addr[1] = 0;
OptData->host_addr[2] = 0;
OptData->host_addr[3] = 0;
/*
** Process the command line options
*/
while ((option = getopt (argc, argv, "l:s:?")) != EOF)
{
switch (option)
{
/*
** Output to logical name ?
*/
case 'l':
OptData->log_name = strdup (optarg);
break;
/*
** Output to symbol name ?
*/
case 's':
OptData->sym_name = strdup (optarg);
break;
/*
** Invalid argument ?
*/
case '?':
default:
Usage ();
exit (1);
break;
}
}
/*
** Are the number of parameters correct ?
*/
if (argc - optind > 1)
{
Usage ();
exit (1);
}
/*
** Host Address provided ?
*/
if (argc - optind == 1)
{
char *addr_ptr = argv[optind],
*addr_sep;
for (i = 0; i < 4; i++)
{
if ((addr_sep = strchr (addr_ptr, '.')) && (i < 3))
*addr_sep = '\0';
if (strlen (addr_ptr) == 0 || atoi (addr_ptr) > 255 ||
strspn (addr_ptr, "0123456789") != strlen (addr_ptr))
{
printf ("Invalid TCP/IP address format.\n");
exit (1);
}
OptData->host_addr[i] = atoi (addr_ptr);
if (addr_sep)
addr_ptr = addr_sep + 1;
}
}
}
/*
**
** SetLogName - Set a logical name & value
**
** Functional Description:
**
** This routine sets a logical name & value.
**
** Usage:
**
** SetLogName LogName, LogValue
**
** Formal parameters:
**
** LogName - (IN) address of the logical name
** LogValue - (IN) address of the logical value
**
** Implicit Parameters:
**
** None
**
** Routine Value:
**
** None
**
** Side Effects:
**
** None
**
*/
static void
SetLogName (
char *LogName,
char *LogValue
)
{
struct dsc$descriptor_s log_nam_desc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0};
struct dsc$descriptor_s log_val_desc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0};
int status;
/*
** Setup the logical name & value descriptors
*/
log_nam_desc.dsc$w_length = strlen (LogName);
log_nam_desc.dsc$a_pointer = LogName;
log_val_desc.dsc$w_length = strlen (LogValue);
log_val_desc.dsc$a_pointer = LogValue;
/*
** Set the logical name & value
*/
status = lib$set_logical (&log_nam_desc, &log_val_desc, 0, 0, 0);
if (! (status & 1))
exit (status);
}
/*
**
** SetSymName - Set a symbol name & value
**
** Functional Description:
**
** This routine sets a symbol name & value.
**
** Usage:
**
** SetSymName SymName, SymValue
**
** Formal parameters:
**
** SymName - (IN) address of the symbol name
** SymValue - (IN) address of the Symbol value
**
** Implicit Parameters:
**
** None
**
** Routine Value:
**
** None
**
** Side Effects:
**
** None
**
*/
static void
SetSymName (
char *SymName,
char *SymValue
)
{
struct dsc$descriptor_s sym_nam_desc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0};
struct dsc$descriptor_s sym_val_desc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0};
int status;
/*
** Setup the symbol name & value descriptors
*/
sym_nam_desc.dsc$w_length = strlen (SymName);
sym_nam_desc.dsc$a_pointer = SymName;
sym_val_desc.dsc$w_length = strlen (SymValue);
sym_val_desc.dsc$a_pointer = SymValue;
/*
** Set the symbol name & value
*/
status = lib$set_symbol (&sym_nam_desc, &sym_val_desc, &LIB$K_CLI_LOCAL_SYM);
if (! (status & 1))
exit (status);
}
/*
**
** Usage - Display the acceptable unix style command usage
**
** Functional Description:
**
** This routine displays to standard output the appropriate unix style
** command usage.
**
** Usage:
**
** Usage
**
** Formal parameters:
**
** None
**
** Implicit Parameters:
**
** None
**
** Routine Value:
**
** None
**
** Side Effects:
**
** None
**
*/
static void
Usage ()
{
fprintf (stdout, "Usage: HOSTNAME [-l log-name] [-s sym-name] [host-addr]\n");
}
#endif /* #ifdef VMS */

View File

@@ -0,0 +1,639 @@
$!
$!------------------------------------------------------------------------------
$! SSL$AUTH_CERT.COM - SSL Certificate Authority procedure
$!------------------------------------------------------------------------------
$!
$ Verify = F$VERIFY (0)
$ Set NoOn
$ Set NoControl=Y
$!
$!------------------------------------------------------------------------------
$! Description
$!------------------------------------------------------------------------------
$!
$! This procedure prompts the user through creating a Server Certificate.
$!
$! There are no parameters used.
$!
$!------------------------------------------------------------------------------
$! Define symbols
$!------------------------------------------------------------------------------
$!
$ DELETE := DELETE
$ SAY := WRITE SYS$OUTPUT
$ ASK := READ SYS$COMMAND /END_OF_FILE=EXIT /PROMPT=
$ PID = F$GETJPI ("","PID")
$ TT_NOECHO = F$GETDVI ("TT:","TT_NOECHO")
$ On Control_Y THEN GOTO EXIT
$ Set Control=Y
$!
$ TT_ROWS = F$GETDVI ("TT:","TT_PAGE")
$ TT_COLS = F$GETDVI ("TT:","DEVBUFSIZ")
$!
$ GET_USER_DATA := CALL GET_USER_DATA
$ SET_USER_DATA := CALL SET_USER_DATA
$ DEL_USER_DATA := CALL DEL_USER_DATA
$ INIT_TERM := @SSL$COM:SSL$INIT_TERM
$ SHOW_FILE := @SSL$COM:SSL$SHOW_FILE
$ SSL_CONF_FILE = F$TRNLMN ("SSL$CA_CONF")
$ GET_CONF_DATA := @SSL$COM:SSL$CONF_UTIL 'SSL_CONF_FILE' GET
$ SET_CONF_DATA := @SSL$COM:SSL$CONF_UTIL 'SSL_CONF_FILE' SET
$!
$ ESC[0,8] = 27 ! Set the Escape Character
$ BELL[0,8] = 7 ! Ring the terminal Bell
$ RED = 1 ! Color - Red
$ FGD = 30 ! Foreground
$ BGD = 0 ! Background
$ CSCR = ESC + "[2J" ! Clear the Screen
$ CEOS = ESC + "[0J" ! Clear to the End of the Screen
$ CEOL = ESC + "[0K" ! Clear to the End of the Line
$ NORM = ESC + "[0m" ! Turn Attributes off
$ BLNK = ESC + "[5m" ! Turn on BLINK Attribute
$ WIDE = ESC + "#6" ! Turn on WIDE Attribute
$!
$!------------------------------------------------------------------------------
$! Run the SSL setup if it hasn't been run yet
$!------------------------------------------------------------------------------
$!
$ IF F$TRNLNM ("SSL$CA_CONF") .EQS. ""
$ THEN
$ IF F$SEARCH ("SSL$COM:SSL$INIT_ENV.COM") .NES. ""
$ THEN
$ @SSL$COM:SSL$INIT_ENV.COM
$ ELSE
$ SAY BELL, "Unable to locate SSL$COM:SSL$INIT_ENV.COM ..."
$ GOTO EXIT
$ ENDIF
$ ENDIF
$!
$!------------------------------------------------------------------------------
$! Display the Page Header
$!------------------------------------------------------------------------------
$!
$ INIT_TERM
$ BCOLOR = BGD
$ FCOLOR = FGD + RED
$ COLOR = ESC + "[''BCOLOR';''FCOLOR'm"
$!
$ TEXT = "SSL Certificate Tool"
$ COL = (TT_COLS - (F$LENGTH (TEXT) * 2)) / 4
$!
$ SAY ESC + "[01;01H", CSCR
$ SAY ESC + "[02;''COL'H", COLOR, WIDE, TEXT, NORM
$!
$ TEXT = "Create Certification Authority"
$ COL = (TT_COLS - F$LENGTH (TEXT)) / 2
$!
$ SAY ESC + "[04;01H"
$ SAY ESC + "[04;''COL'H", COLOR, TEXT, NORM
$!
$ ROW = 6
$ COL = 2
$ TOP_ROW = ROW
$ MSG_ROW = TT_ROWS - 1
$!
$!------------------------------------------------------------------------------
$! Initialize the Request Data
$!------------------------------------------------------------------------------
$!
$ IF F$SEARCH ("''SSL_CONF_FILE'") .NES. ""
$ THEN
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Reading Configuration ...", NORM
$ ELSE
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Initializing Configuration ...", NORM
$ ENDIF
$!
$ _request_name = "req"
$!
$ _distinguished_name = "CA_distinguished_name"
$ _distinguished_name_upd = "Y"
$!
$ _default_bits = "1024"
$ _default_bits_upd = "Y"
$!
$ _default_days = "1825"
$ _default_days_upd = "Y"
$!
$ _default_keyfile = "SSL$KEY:SERVER_CA.KEY"
$ _default_keyfile_upd = "Y"
$!
$ _default_crtfile = "SSL$CRT:SERVER_CA.CRT"
$ _default_crtfile_upd = "Y"
$!
$ _countryName_prompt = "Country Name ?"
$ _countryName_min = "2"
$ _countryName_max = "2"
$ _countryName_default = "US"
$ _countryName_upd = "Y"
$ _countryName_cnt = 4
$!
$ _0organizationName_prompt = "Organization Name ?"
$ _0organizationName_default = ""
$ _0organizationName_upd = "Y"
$ _0organizationName_cnt = 2
$!
$ _organizationalUnitName_prompt = "Organization Unit Name ?"
$ _organizationalUnitName_default = ""
$ _organizationalUnitName_upd = "Y"
$ _organizationalUnitName_cnt = 2
$!
$ _commonName_prompt = "Common Name ?"
$ _commonName_max = "64"
$ _commonName_default = "CA Authority"
$ _commonName_upd = "Y"
$ _commonName_cnt = 3
$!
$ IF F$SEARCH ("''SSL_CONF_FILE'") .NES. ""
$ THEN
$ GET_CONF_DATA "[''_request_name']#distinguished_name"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _distinguished_name = SSL_CONF_DATA
$ _distinguished_name_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_request_name']#default_bits"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_bits = SSL_CONF_DATA
$ _default_bits_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_request_name']#default_days"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_days = SSL_CONF_DATA
$ _default_days_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_request_name']#default_keyfile"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_keyfile = F$PARSE (SSL_CONF_DATA,"SSL$ROOT:",,"DEVICE") + -
F$PARSE (SSL_CONF_DATA,"[KEY]",,"DIRECTORY") + -
F$PARSE (SSL_CONF_DATA,"SERVER",,"NAME") + -
F$PARSE (SSL_CONF_DATA,".KEY",,"TYPE")
$ _default_keyfile_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_request_name']#default_crtfile"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_crtfile = F$PARSE (SSL_CONF_DATA,"SSL$ROOT:",,"DEVICE") + -
F$PARSE (SSL_CONF_DATA,"[CRT]",,"DIRECTORY") + -
F$PARSE (SSL_CONF_DATA,"SERVER",,"NAME") + -
F$PARSE (SSL_CONF_DATA,".CRT",,"TYPE")
$ _default_crtfile_upd = "N"
$ ENDIF
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#countryName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _countryName_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#countryName_min"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _countryName_min = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#countryName_max"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _countryName_max = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#countryName_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _countryName_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _countryName_cnt .EQ. CTR THEN _countryName_upd = "N"
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#0.organizationName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _0organizationName_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#0.organizationName_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _0organizationName_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _0organizationName_cnt .EQ. CTR THEN _0organizationName_upd = "N"
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#organizationalUnitName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _organizationalUnitName_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#organizationalUnitName_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _organizationalUnitName_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _organizationalUnitName_cnt .EQ. CTR THEN _organizationalUnitName_upd = "N"
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#commonName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _commonName_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#commonName_max"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _commonName_max = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#commonName_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _commonName_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _commonName_cnt .EQ. CTR THEN _commonName_upd = "N"
$ ENDIF
$!
$ SET_USER_DATA "[]#pem_pass_phrase#-##PEM Pass Phrase ?#P#1###Y#Y"
$ SET_USER_DATA "[''_request_name']#default_bits#D#''_default_bits'#Encryption Bits ?#I###''_default_bits_upd'#Y#N"
$ SET_USER_DATA "[''_request_name']#default_days#D#''_default_days'#Default Days ?#I###''_default_days_upd'#Y#N"
$ SET_USER_DATA "[''_request_name']#default_keyfile#D#''_default_keyfile'#CA certificate Key File ?#F###''_default_keyfile_upd'#Y#N"
$ SET_USER_DATA "[''_request_name']#default_crtfile#D#''_default_crtfile'#CA certificate File ?#F###''_default_crtfile_upd'#Y#N"
$ SET_USER_DATA "[''_request_name']#distinguished_name#D#''_distinguished_name'##S###''_distinguished_name_upd'#N#N"
$ SET_USER_DATA "[''_distinguished_name']#countryName#P#''_countryName_default'#''_countryName_prompt'#S#''_countryName_min'#''_countryName_max'#''_countryName_upd'#Y#N"
$ SET_USER_DATA "[''_distinguished_name']#0.organizationName#P#''_0organizationName_default'#''_0organizationName_prompt'#S###''_0organizationName_upd'#Y#N"
$ SET_USER_DATA "[''_distinguished_name']#organizationalUnitName#P#''_organizationalUnitName_default'#''_organizationalUnitName_prompt'#S###''_organizationUnitName_upd'#Y#N"
$ SET_USER_DATA "[''_distinguished_name']#commonName#P#''_commonName_default'#''_commonName_prompt'#S##''_commonName_max'#''_commonName_upd'#Y#N"
$ SET_USER_DATA "[]#display_certificate#-#N#Display the CA certificate ?#S##1##Y#N"
$!
$ SAY ESC + "[''MSG_ROW';01H", CEOS
$!
$!------------------------------------------------------------------------------
$! Confirm/Update the SSL Configuration Data
$!------------------------------------------------------------------------------
$!
$ CTR = 1
$!
$PROMPT_LOOP:
$!
$ IF CTR .LE. SSL_USER_DATA_MAX
$ THEN
$ KEY = F$ELEMENT (0,"#",SSL_USER_DATA_'CTR') ! Key Name
$ ITM = F$ELEMENT (1,"#",SSL_USER_DATA_'CTR') ! Item Name
$ VAL = F$ELEMENT (2,"#",SSL_USER_DATA_'CTR') ! Item Value Contains Default or Prompt
$ DEF = F$ELEMENT (3,"#",SSL_USER_DATA_'CTR') ! Default Value
$ PRM = F$ELEMENT (4,"#",SSL_USER_DATA_'CTR') ! Prompt Value
$ TYP = F$ELEMENT (5,"#",SSL_USER_DATA_'CTR') ! Value Type
$ MIN = F$ELEMENT (6,"#",SSL_USER_DATA_'CTR') ! Value Minimum Length
$ MAX = F$ELEMENT (7,"#",SSL_USER_DATA_'CTR') ! Value Maximum Length
$ UPD = F$ELEMENT (8,"#",SSL_USER_DATA_'CTR') ! Entry Updated ?
$ REQ = F$ELEMENT (9,"#",SSL_USER_DATA_'CTR') ! Entry Required for Input ?
$ CFM = F$ELEMENT (10,"#",SSL_USER_DATA_'CTR')! Confirm Input ?
$ CONFIRMED = 0
$ IF REQ .EQS. "N"
$ THEN
$ CTR = CTR + 1
$ GOTO PROMPT_LOOP
$ ENDIF
$ IF ROW .GT. MSG_ROW - 2
$ THEN
$ SAY ESC + "[''TOP_ROW';01H", CEOS
$ ROW = TOP_ROW
$ ENDIF
$!
$CONFIRM_LOOP:
$!
$ IF PRM .EQS. ""
$ THEN
$ PROMPT = ESC + "[''ROW';''COL'H''ITM' ? [''DEF'] ''CEOL'"
$ ELSE
$ PROMPT = ESC + "[''ROW';''COL'H''PRM' [''DEF'] ''CEOL'"
$ ENDIF
$ IF TYP .EQS. "P" THEN SET TERMINAL /NOECHO
$ ASK "''PROMPT'" ANS /END_OF_FILE=EXIT
$ IF TYP .EQS. "P" THEN SET TERMINAL /ECHO
$ ANS = F$EDIT (ANS,"TRIM")
$ IF ANS .EQS. "" THEN ANS = DEF
$ IF TYP .EQS. "F"
$ THEN
$ ANS = F$PARSE ("''ANS'","''DEF'",,,"SYNTAX_ONLY")
$ ENDIF
$ IF TYP .EQS. "I" .AND. F$TYPE (ANS) .NES. "INTEGER"
$ THEN
$ CALL INVALID_ENTRY
$ SAY ESC + "[''ROW';01H", CEOS
$ GOTO PROMPT_LOOP
$ ENDIF
$ IF (TYP .EQS. "S" .OR. TYP .EQS. "P") .AND. -
((MIN .NES. "" .AND. F$LENGTH (ANS) .LT. F$INTEGER(MIN)) .OR. -
(MAX .NES. "" .AND. F$LENGTH (ANS) .GT. F$INTEGER(MAX)))
$ THEN
$ CALL INVALID_ENTRY
$ SAY ESC + "[''ROW';01H", CEOS
$ IF TYP .EQS. "S" THEN GOTO PROMPT_LOOP
$ IF TYP .EQS. "P" THEN GOTO CONFIRM_LOOP
$ ENDIF
$ ROW = ROW + 1
$ IF CFM .EQS. "Y"
$ THEN
$ IF CONFIRMED .EQ. 0
$ THEN
$ CONFIRMED = 1
$ CONFIRMED_ANS = ANS
$ PRM = "Confirm ''PRM'"
$ GOTO CONFIRM_LOOP
$ ELSE
$ IF ANS .NES. CONFIRMED_ANS
$ THEN
$ CALL INVALID_ENTRY
$ ROW = ROW - 2
$ SAY ESC + "[''ROW';01H", CEOS
$ GOTO PROMPT_LOOP
$ ENDIF
$ ENDIF
$ ENDIF
$ IF ANS .NES. DEF THEN SSL_USER_DATA_'CTR' = "''KEY'#''ITM'#''VAL'#''ANS'#''PRM'#''TYP'#''MIN'#''MAX'#Y#''REQ'#''CFM'"
$ CTR = CTR + 1
$ GOTO PROMPT_LOOP
$ ENDIF
$!
$!------------------------------------------------------------------------------
$! Save the SSL Configuration Data
$!------------------------------------------------------------------------------
$!
$ CTR = 1
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Saving Configuration ...", NORM
$!
$SAVE_CONF_LOOP:
$!
$ IF CTR .LE. SSL_USER_DATA_MAX
$ THEN
$ KEY = F$ELEMENT (0,"#",SSL_USER_DATA_'CTR') ! Key Name
$ ITM = F$ELEMENT (1,"#",SSL_USER_DATA_'CTR') ! Item Name
$ VAL = F$ELEMENT (2,"#",SSL_USER_DATA_'CTR') ! Item Value Contains Default or Prompt
$ DEF = F$ELEMENT (3,"#",SSL_USER_DATA_'CTR') ! Default Value
$ PRM = F$ELEMENT (4,"#",SSL_USER_DATA_'CTR') ! Prompt Value
$ TYP = F$ELEMENT (5,"#",SSL_USER_DATA_'CTR') ! Value Type
$ MIN = F$ELEMENT (6,"#",SSL_USER_DATA_'CTR') ! Value Minimum Length
$ MAX = F$ELEMENT (7,"#",SSL_USER_DATA_'CTR') ! Value Maximum Length
$ UPD = F$ELEMENT (8,"#",SSL_USER_DATA_'CTR') ! Entry Updated ?
$ REQ = F$ELEMENT (9,"#",SSL_USER_DATA_'CTR') ! Entry Required for Input ?
$ CFM = F$ELEMENT (10,"#",SSL_USER_DATA_'CTR')! Confirm Input ?
$ IF UPD .NES. "Y" .OR. VAL .EQS. "-"
$ THEN
$ CTR = CTR + 1
$ GOTO SAVE_CONF_LOOP
$ ENDIF
$ IF VAL .EQS. "D"
$ THEN
$ SET_CONF_DATA "''KEY'#''ITM'" "''DEF'"
$ ELSE
$ SET_CONF_DATA "''KEY'#''ITM'" "''PRM'"
$ SET_CONF_DATA "''KEY'#''ITM'_default" "''DEF'"
$ ENDIF
$ IF MIN .NES. "" THEN SET_CONF_DATA "''KEY'#''ITM'_min" "''MIN'"
$ IF MAX .NES. "" THEN SET_CONF_DATA "''KEY'#''ITM'_max" "''MAX'"
$ CTR = CTR + 1
$ GOTO SAVE_CONF_LOOP
$ ENDIF
$!
$ PURGE /NOLOG /NOCONFIRM 'SSL_CONF_FILE'
$ RENAME 'SSL_CONF_FILE'; ;1
$!
$ SAY ESC + "[''MSG_ROW';01H", CEOS
$!
$!------------------------------------------------------------------------------
$! Create the Certificiate Authority
$!------------------------------------------------------------------------------
$!
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Creating Certificate Authority ...", NORM
$!
$ X1 = 2
$ Y1 = TOP_ROW
$ X2 = TT_COLS - 2
$ Y2 = MSG_ROW - 1
$!
$ GET_USER_DATA "[''_request_name']#default_days"
$ _default_days = SSL_USER_DATA
$ GET_USER_DATA "[''_request_name']#default_keyfile"
$ _default_keyfile = SSL_USER_DATA
$ GET_USER_DATA "[''_request_name']#default_crtfile"
$ _default_crtfile = SSL_USER_DATA
$ GET_USER_DATA "[]#pem_pass_phrase"
$ _pem_pass_phrase = SSL_USER_DATA
$ GET_USER_DATA "[]#display_certificate"
$ _display_certificate = SSL_USER_DATA
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SHOW SYSTEM /FULL /OUT=SYS$LOGIN:SSL_REQ_'PID'.RND
$!
$ OPEN /WRITE OFILE SYS$LOGIN:SSL_REQ_'PID'.COM
$ WRITE OFILE "$ DEFINE /USER /NOLOG RANDFILE SYS$LOGIN:SSL_REQ_''PID'.RND"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$ERROR SYS$LOGIN:SSL_REQ_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$OUTPUT SYS$LOGIN:SSL_REQ_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$COMMAND SYS$INPUT"
$ WRITE OFILE "$ OPENSSL req -config ''SSL_CONF_FILE' -new -x509 -days ''_default_days' -keyout ''_default_keyfile' -out ''_default_crtfile'"
$ WRITE OFILE "''_pem_pass_phrase'"
$ WRITE OFILE "''_pem_pass_phrase'"
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ CLOSE OFILE
$!
$ @SYS$LOGIN:SSL_REQ_'PID'.COM
$!
$ DELETE/NOLOG/NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.RND;*
$ DELETE/NOLOG/NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.COM;*
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SEARCH SYS$LOGIN:SSL_REQ_'PID'.LOG /OUT=SYS$LOGIN:SSL_REQ_'PID'.ERR ":error:"
$ IF F$SEARCH ("SYS$LOGIN:SSL_REQ_''PID'.ERR") .NES. ""
$ THEN
$ IF F$FILE_ATTRIBUTE ("SYS$LOGIN:SSL_REQ_''PID'.ERR","ALQ") .NE. 0
$ THEN
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.ERR;*
$ SAY ESC + "[''MSG_ROW';01H''BELL'''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_REQ_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ERROR >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.LOG;*
$ GOTO EXIT
$ ENDIF
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.ERR;*
$ ENDIF
$!
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.LOG;*
$!
$ IF F$EDIT (_display_certificate,"TRIM,UPCASE") .EQS. "Y"
$ THEN
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Generating Output ...", NORM, CEOL
$!
$ OPEN /WRITE OFILE SYS$LOGIN:SSL_X509_'PID'.COM
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$ERROR SYS$LOGIN:SSL_X509_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$OUTPUT SYS$LOGIN:SSL_X509_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$COMMAND SYS$INPUT"
$ WRITE OFILE "$ OPENSSL x509 -noout -text -in ''_default_crtfile'"
$ CLOSE OFILE
$!
$ @SYS$LOGIN:SSL_X509_'PID'.COM
$!
$ DELETE/NOLOG/NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.COM;*
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SEARCH SYS$LOGIN:SSL_X509_'PID'.LOG /OUT=SYS$LOGIN:SSL_X509_'PID'.ERR ":error:"
$ IF F$SEARCH ("SYS$LOGIN:SSL_X509_''PID'.ERR") .NES. ""
$ THEN
$ IF F$FILE_ATTRIBUTE ("SYS$LOGIN:SSL_X509_''PID'.ERR","ALQ") .NE. 0
$ THEN
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.ERR;*
$ SAY ESC + "[''MSG_ROW';01H''BELL'''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_X509_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ERROR >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.LOG;*
$ GOTO EXIT
$ ENDIF
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.ERR;*
$ ENDIF
$!
$ SAY ESC + "[''MSG_ROW';01H''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_X509_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ''_default_crtfile' >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.LOG;*
$ GOTO EXIT
$ ENDIF
$!
$ TEXT = "Press return to continue"
$ COL = (TT_COLS - F$LENGTH (TEXT)) / 2
$!
$ SAY ESC + "[''MSG_ROW';01H", CEOS
$ PROMPT = ESC + "[''MSG_ROW';''COL'H''TEXT'"
$ ASK "''PROMPT'" OPT
$!
$GOTO EXIT
$!
$!------------------------------------------------------------------------------
$! Set the User Data
$!------------------------------------------------------------------------------
$!
$SET_USER_DATA: SUBROUTINE
$!
$ IF F$TYPE (SSL_USER_DATA_MAX) .EQS. ""
$ THEN
$ SSL_USER_DATA_MAX == 1
$ ELSE
$ SSL_USER_DATA_MAX == SSL_USER_DATA_MAX + 1
$ ENDIF
$!
$ SSL_USER_DATA_'SSL_USER_DATA_MAX' == "''P1'"
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Get the User Data
$!------------------------------------------------------------------------------
$!
$GET_USER_DATA: SUBROUTINE
$!
$ CTR = 1
$ USER_KEY = F$ELEMENT (0,"#",P1)
$ USER_ITM = F$ELEMENT (1,"#",P1)
$!
$GET_USER_DATA_LOOP:
$!
$ IF CTR .LE. SSL_USER_DATA_MAX
$ THEN
$ KEY = F$ELEMENT (0,"#",SSL_USER_DATA_'CTR') ! Key Name
$ ITM = F$ELEMENT (1,"#",SSL_USER_DATA_'CTR') ! Item Name
$ VAL = F$ELEMENT (2,"#",SSL_USER_DATA_'CTR') ! Item Value Contains Default or Prompt
$ DEF = F$ELEMENT (3,"#",SSL_USER_DATA_'CTR') ! Default Value
$ PRM = F$ELEMENT (4,"#",SSL_USER_DATA_'CTR') ! Prompt Value
$ IF USER_KEY .NES. KEY .OR. USER_ITM .NES. ITM
$ THEN
$ CTR = CTR + 1
$ GOTO GET_USER_DATA_LOOP
$ ENDIF
$ IF VAL .EQS. "-" THEN SSL_USER_DATA == "''DEF'"
$ IF VAL .EQS. "D" THEN SSL_USER_DATA == "''DEF'"
$ IF VAL .EQS. "P" THEN SSL_USER_DATA == "''PRM'"
$ ENDIF
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Delete the User Data
$!------------------------------------------------------------------------------
$!
$DEL_USER_DATA: SUBROUTINE
$!
$ IF F$TYPE (SSL_USER_DATA_MAX) .EQS. "" THEN GOTO DEL_USER_DATA_END
$!
$DEL_USER_DATA_LOOP:
$!
$ IF F$TYPE (SSL_USER_DATA_'SSL_USER_DATA_MAX') .NES. ""
$ THEN
$ DELETE /SYMBOL /GLOBAL SSL_USER_DATA_'SSL_USER_DATA_MAX'
$ SSL_USER_DATA_MAX == SSL_USER_DATA_MAX - 1
$ GOTO DEL_USER_DATA_LOOP
$ ENDIF
$!
$ DELETE /SYMBOL /GLOBAL SSL_USER_DATA_MAX
$!
$DEL_USER_DATA_END:
$!
$ IF F$TYPE (SSL_USER_DATA) .NES. "" THEN DELETE /SYMBOL /GLOBAL SSL_USER_DATA
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Display the invalid entry
$!------------------------------------------------------------------------------
$!
$INVALID_ENTRY: SUBROUTINE
$!
$ SAY ESC + "[''MSG_ROW';01H", BELL, " Invalid Entry, Try again ...''CEOL'"
$ Wait 00:00:01.5
$ SAY ESC + "[''MSG_ROW';01H", CEOL
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Exit the procedure
$!------------------------------------------------------------------------------
$!
$EXIT:
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ CLOSE OFILE
$!
$ DEL_USER_DATA
$!
$ IF F$TYPE (SSL_CONF_DATA) .NES. "" THEN DELETE /SYMBOL /GLOBAL SSL_CONF_DATA
$!
$ IF F$GETDVI ("TT:","TT_NOECHO") .AND. .NOT. TT_NOECHO THEN SET TERMINAL /ECHO
$!
$ IF F$SEARCH ("SYS$LOGIN:SSL_REQ_''PID'.%%%;*") .NES. "" THEN DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.%%%;*
$ IF F$SEARCH ("SYS$LOGIN:SSL_X509_''PID'.%%%;*") .NES. "" THEN DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.%%%;*
$!
$ Verify = F$VERIFY (Verify)
$!
$ EXIT

View File

@@ -0,0 +1,101 @@
$!
$!------------------------------------------------------------------------------
$! SSL$AUTO_CERT.COM - SSL Automatic Self-Signed Certificate procedure
$!------------------------------------------------------------------------------
$!
$ Verify = F$VERIFY (0)
$!
$ Set NoOn
$ Set NoControl=Y
$!
$!------------------------------------------------------------------------------
$! Define Symbols
$!------------------------------------------------------------------------------
$!
$ OPENSSL :== $ SSL$EXE:OPENSSL
$ HOSTNAME :== $ SSL$EXE:SSL$HOSTNAME
$!
$ HOSTNAME -s HOST_NAME
$ PID = F$GETJPI ("","PID")
$ USER = F$EDIT (F$GETJPI ("","USERNAME"),"TRIM")
$ KEY_FILE = "SSL$KEY:SERVER.KEY"
$ CRT_FILE = "SSL$CRT:SERVER.CRT"
$!
$!------------------------------------------------------------------------------
$! Create a Temporary SSL Configuration
$!------------------------------------------------------------------------------
$!
$ OPEN /WRITE CFILE SYS$LOGIN:SSL_'PID'.CNF
$ WRITE CFILE "[req]"
$ WRITE CFILE "default_bits = 1024"
$ WRITE CFILE "distinguished_name = REQ_distinguished_name"
$ WRITE CFILE "[REQ_distinguished_name]"
$ WRITE CFILE "countryName = Country Name ?"
$ WRITE CFILE "countryName_default = "
$ WRITE CFILE "stateOrProvinceName = State or Province Name ?"
$ WRITE CFILE "stateOrProvinceName_default = "
$ WRITE CFILE "localityName = City Name ?"
$ WRITE CFILE "localityName_default = "
$ WRITE CFILE "0.organizationName = Organization Name ?"
$ WRITE CFILE "0.organizationName_default = "
$ WRITE CFILE "organizationalUnitName = Organization Unit Name ?
$ WRITE CFILE "organizationalUnitName_default = "
$ WRITE CFILE "commonName = Common Name ?"
$ WRITE CFILE "commonName_default = ''HOST_NAME'"
$ WRITE CFILE "emailAddress = Email Address ?"
$ WRITE CFILE "emailAddress_default = ''USER'@''HOST_NAME'"
$ CLOSE CFILE
$!
$!------------------------------------------------------------------------------
$! Create the Self-Signed Server Certificiate
$!------------------------------------------------------------------------------
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SHOW SYSTEM /FULL /OUT=SYS$LOGIN:SSL_'PID'.RND
$!
$ OPEN /WRITE OFILE SYS$LOGIN:SSL_'PID'.COM
$ WRITE OFILE "$ DEFINE /USER /NOLOG RANDFILE SYS$LOGIN:SSL_''PID'.RND"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$ERROR SYS$LOGIN:SSL_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$OUTPUT SYS$LOGIN:SSL_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$COMMAND SYS$INPUT"
$ WRITE OFILE "$ OPENSSL req -nodes -new -days 30 -x509 -config SYS$LOGIN:SSL_''PID'.CNF -keyout ''KEY_FILE' -out ''CRT_FILE'"
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ CLOSE OFILE
$!
$ @SYS$LOGIN:SSL_'PID'.COM
$!
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_'PID'.CNF;*
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_'PID'.RND;*
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_'PID'.COM;*
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SEARCH SYS$LOGIN:SSL_'PID'.LOG /OUT=SYS$LOGIN:SSL_'PID'.ERR ":error:"
$!
$ IF F$SEARCH ("SYS$LOGIN:SSL_''PID'.ERR") .NES. ""
$ THEN
$ IF F$FILE_ATTRIBUTE ("SYS$LOGIN:SSL_''PID'.ERR","ALQ") .NE. 0
$ THEN
$ TYPE SYS$LOGIN:SSL_'PID'.LOG
$ ENDIF
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_'PID'.ERR;*
$ ENDIF
$!
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_'PID'.LOG;*
$!
$!------------------------------------------------------------------------------
$! Exit
$!------------------------------------------------------------------------------
$!
$EXIT:
$!
$ Verify = F$VERIFY (Verify)
$!
$ EXIT

View File

@@ -0,0 +1,231 @@
$!
$!------------------------------------------------------------------------------
$! SSL$CERT_TOOL.COM - SSL Certificate Tool procedure
$!------------------------------------------------------------------------------
$!
$ Verify = F$VERIFY (0)
$ Set NoOn
$ Set NoControl=Y
$!
$!------------------------------------------------------------------------------
$! Description
$!------------------------------------------------------------------------------
$!
$! This procedure provides the user a menu from which they can choose desired
$! SSL Certificate processing.
$!
$! There are no parameters used.
$!
$!------------------------------------------------------------------------------
$! Define symbols
$!------------------------------------------------------------------------------
$!
$ DELETE := DELETE
$ SAY := WRITE SYS$OUTPUT
$ ASK := READ SYS$COMMAND /END_OF_FILE=EXIT /PROMPT=
$ On Control_Y THEN GOTO EXIT
$ Set Control=Y
$!
$ TT_ROWS = f$getdvi ("TT:","TT_PAGE")
$ TT_COLS = f$getdvi ("TT:","DEVBUFSIZ")
$!
$ SET_MENU_DATA := CALL SET_MENU_DATA
$ DEL_MENU_DATA := CALL DEL_MENU_DATA
$!
$ ESC[0,8] = 27 ! Set the Escape Character
$ BELL[0,8] = 7 ! Ring the terminal Bell
$ RED = 1 ! Color - Red
$ FGD = 30 ! Foreground
$ BGD = 0 ! Background
$ CSCR = ESC + "[2J" ! Clear the Screen
$ CEOS = ESC + "[0J" ! Clear to the End of the Screen
$ CEOL = ESC + "[0K" ! Clear to the End of the Line
$ NORM = ESC + "[0m" ! Turn Attributes off
$ BOLD = ESC + "[1m" ! Turn on BOLD Attribute
$ WIDE = ESC + "#6" ! Turn on WIDE Attribute
$!
$!------------------------------------------------------------------------------
$! Run the SSL setup if it hasn't been run yet
$!------------------------------------------------------------------------------
$!
$ IF F$TRNLNM ("SSL$CA_CONF") .EQS. ""
$ THEN
$ IF F$SEARCH ("SSL$COM:SSL$INIT_ENV.COM") .NES. ""
$ THEN
$ @SSL$COM:SSL$INIT_ENV.COM
$ ELSE
$ SAY BELL, "Unable to locate SSL$COM:SSL$INIT_ENV.COM ..."
$ GOTO EXIT
$ ENDIF
$ ENDIF
$!
$!------------------------------------------------------------------------------
$! Initialize the Menu Items
$!------------------------------------------------------------------------------
$!
$ SET_MENU_DATA "View a Certificate#@SSL$COM:SSL$VIEW_CERT.COM CRT"
$ SET_MENU_DATA "View a Certificate Signing Request#@SSL$COM:SSL$VIEW_CERT.COM CSR"
$ SET_MENU_DATA "Create a Certificate Signing Request#@SSL$COM:SSL$RQST_CERT.COM"
$ SET_MENU_DATA "Create a Self-Signed Certificate#@SSL$COM:SSL$SELF_CERT.COM"
$ SET_MENU_DATA "Create a CA (Certification Authority) Certificate#@SSL$COM:SSL$AUTH_CERT.COM"
$ SET_MENU_DATA "Sign a Certificate Signing Request#@SSL$COM:SSL$SIGN_CERT.COM"
$ SET_MENU_DATA "Hash Certificates#@SSL$COM:SSL$HASH_CERT.COM CRT"
$ SET_MENU_DATA "Hash Certificate Revocations#@SSL$COM:SSL$HASH_CERT.COM CRL"
$ SET_MENU_DATA "Exit#GOTO EXIT"
$!
$!------------------------------------------------------------------------------
$! Display the Page Header
$!------------------------------------------------------------------------------
$!
$PAGE_LOOP:
$!
$ BCOLOR = BGD
$ FCOLOR = FGD + RED
$ COLOR = ESC + "[''BCOLOR';''FCOLOR'm"
$!
$ TEXT = "SSL Certificate Tool"
$ COL = (TT_COLS - (F$LENGTH (TEXT) * 2)) / 4
$!
$ SAY ESC + "[01;01H", CSCR
$ SAY ESC + "[02;''COL'H", COLOR, WIDE, TEXT, NORM
$!
$ TEXT = "Main Menu"
$ COL = (TT_COLS - F$LENGTH (TEXT)) / 2
$!
$ SAY ESC + "[04;01H"
$ SAY ESC + "[04;''COL'H", COLOR, TEXT, NORM
$!
$ CTR = 1
$ ROW = 6
$ COL = (TT_COLS - (SSL_MENU_ITEM_MAX + 4)) / 2
$ TOP_ROW = ROW
$ SEP_ROWS = 2
$ MSG_ROW = TT_ROWS - 1
$!
$!------------------------------------------------------------------------------
$! Process the menu options
$!------------------------------------------------------------------------------
$!
$MENU_LOOP:
$!
$ IF CTR .LE. SSL_MENU_DATA_MAX
$ THEN
$ OPT = F$ELEMENT (0,"#",SSL_MENU_DATA_'CTR') ! Option String
$ CMD = F$ELEMENT (1,"#",SSL_MENU_DATA_'CTR') ! Command String
$ IF ROW .GE. (MSG_ROW - (SEP_ROWS + 2)) .AND. SEP_ROWS .GT. 1
$ THEN
$ SAY ESC + "[''TOP_ROW';01H", CEOS
$ ROW = TOP_ROW
$ SEP_ROWS = 1
$ CTR = 1
$ ELSE
$ NUM = F$FAO ("!2SL", CTR)
$ SAY ESC + "[''ROW';''COL'H", BOLD, "''NUM'. ", NORM, "''OPT'"
$ ROW = ROW + SEP_ROWS
$ CTR = CTR + 1
$ ENDIF
$ GOTO MENU_LOOP
$ ENDIF
$!
$ ROW = ROW + 1
$!
$!------------------------------------------------------------------------------
$! Prompt the user for input
$!------------------------------------------------------------------------------
$!
$PROMPT_LOOP:
$!
$ PROMPT = ESC + "[''ROW';''COL'HEnter Option: ''CEOL'"
$ ASK "''PROMPT'" OPT /END_OF_FILE=EXIT
$ OPT = F$EDIT (OPT, "TRIM")
$ IF OPT .EQS. "" THEN GOTO PROMPT_LOOP
$!
$ IF F$TYPE (OPT) .NES. "INTEGER" .OR. -
F$INTEGER (OPT) .LE. 0 .OR. -
F$INTEGER (OPT) .GT. SSL_MENU_DATA_MAX
$ THEN
$ CALL INVALID_OPTION
$ GOTO PROMPT_LOOP
$ ENDIF
$!
$ CMD = F$ELEMENT (1,"#",SSL_MENU_DATA_'OPT')
$!
$ 'CMD'
$!
$ GOTO PAGE_LOOP
$!
$!------------------------------------------------------------------------------
$! Set the Menu Data
$!------------------------------------------------------------------------------
$!
$SET_MENU_DATA: SUBROUTINE
$!
$ IF F$TYPE (SSL_MENU_DATA_MAX) .EQS. ""
$ THEN
$ SSL_MENU_DATA_MAX == 1
$ SSL_MENU_ITEM_MAX == 0
$ ELSE
$ SSL_MENU_DATA_MAX == SSL_MENU_DATA_MAX + 1
$ ENDIF
$!
$ SSL_MENU_DATA_'SSL_MENU_DATA_MAX' == "''P1'"
$!
$ MENU_ITEM = F$ELEMENT (0,"#",SSL_MENU_DATA_'SSL_MENU_DATA_MAX')
$ IF F$LENGTH (MENU_ITEM) .GT. SSL_MENU_ITEM_MAX THEN SSL_MENU_ITEM_MAX == F$LENGTH (MENU_ITEM)
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Delete the Menu Data
$!------------------------------------------------------------------------------
$!
$DEL_MENU_DATA: SUBROUTINE
$!
$ IF F$TYPE (SSL_MENU_DATA_MAX) .EQS. "" THEN GOTO DEL_MENU_DATA_END
$!
$DEL_MENU_DATA_LOOP:
$!
$ IF F$TYPE (SSL_MENU_DATA_'SSL_MENU_DATA_MAX') .NES. ""
$ THEN
$ DELETE /SYMBOL /GLOBAL SSL_MENU_DATA_'SSL_MENU_DATA_MAX'
$ SSL_MENU_DATA_MAX == SSL_MENU_DATA_MAX - 1
$ GOTO DEL_MENU_DATA_LOOP
$ ENDIF
$!
$ DELETE /SYMBOL /GLOBAL SSL_MENU_DATA_MAX
$!
$DEL_MENU_DATA_END:
$!
$ IF F$TYPE (SSL_MENU_ITEM_MAX) .NES. "" THEN DELETE /SYMBOL /GLOBAL SSL_MENU_ITEM_MAX
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Display the invalid entry
$!------------------------------------------------------------------------------
$!
$INVALID_OPTION: SUBROUTINE
$!
$ SAY ESC + "[''MSG_ROW';01H", BELL, " Invalid Option, Try again ...''CEOL'"
$ Wait 00:00:01.5
$ SAY ESC + "[''MSG_ROW';01H", CEOL
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Exit
$!------------------------------------------------------------------------------
$!
$EXIT:
$!
$ DEL_MENU_DATA
$!
$ Verify = F$VERIFY (Verify)
$!
$ EXIT

View File

@@ -0,0 +1,220 @@
$!
$!------------------------------------------------------------------------------
$! SSL$CONF_UTIL.COM - SSL Configuration Utility procedure
$!------------------------------------------------------------------------------
$!
$ Verify = F$VERIFY (0)
$ Set NoOn
$ Set NoControl=Y
$!
$!------------------------------------------------------------------------------
$! Description
$!------------------------------------------------------------------------------
$!
$! This procedure gets or sets a given key item in a SSL configuration file.
$! The parameters used are:
$!
$! P1 - SSL Configuration File
$! P2 - SSL Configuration Function (i.e. GET/SET)
$! P3 - SSL Configuration Key/Item (delimited by '#')
$! P4 - SSL Configuration Key/Item Value (for SET function only)
$!
$!------------------------------------------------------------------------------
$! Define symbols
$!------------------------------------------------------------------------------
$!
$ SSL_CONF_DATA == ""
$ SAY := WRITE SYS$OUTPUT
$ ASK := READ SYS$COMMAND /END_OF_FILE=EXIT /PROMPT=
$ On Control_Y THEN GOTO EXIT
$ Set Control=Y
$!
$!------------------------------------------------------------------------------
$! Process parameters
$!------------------------------------------------------------------------------
$!
$ KEY_FOUND = 0
$ ITM_FOUND = 0
$ P1 = F$EDIT (P1,"TRIM")
$ P2 = F$EDIT (P2,"TRIM,UPCASE")
$ KEY = F$ELEMENT (0,"#",P3)
$ ITM = F$ELEMENT (1,"#",P3)
$!
$!------------------------------------------------------------------------------
$! Process the configuration function
$!------------------------------------------------------------------------------
$!
$ IF P2 .EQS. "GET" THEN GOSUB GET_CONF_DATA
$ IF P2 .EQS. "SET" THEN GOSUB SET_CONF_DATA
$!
$ GOTO EXIT
$!
$!------------------------------------------------------------------------------
$! Get the configuration data
$!------------------------------------------------------------------------------
$!
$GET_CONF_DATA:
$!
$ OPEN /READ /ERROR=OPEN_ERROR IFILE 'P1'
$!
$GET_CONF_DATA_LOOP:
$!
$ READ /ERROR=READ_ERROR /END_OF_FILE=GET_CONF_DATA_END IFILE IREC
$!
$ SREC = IREC
$ IPOS = F$LOCATE ("#",IREC)
$ IF IPOS .NE. F$LENGTH (IREC) THEN IREC = F$EXTRACT (0,IPOS,IREC)
$ IREC = F$EDIT (IREC,"COLLAPSE")
$ IF IREC .EQS. "" THEN GOTO GET_CONF_DATA_LOOP
$!
$ IF IREC .EQS. KEY
$ THEN
$ KEY_FOUND = 1
$ GOTO GET_CONF_DATA_LOOP
$ ENDIF
$!
$ IF KEY_FOUND .EQ. 1
$ THEN
$ IF F$EXTRACT (0,1,IREC) .EQS. "[" .AND. F$EXTRACT (F$LENGTH (IREC)-1,1,IREC) .EQS. "]"
$ THEN
$ SSL_CONF_DATA == ""
$ GOTO GET_CONF_DATA_END
$ ENDIF
$!
$ IF ITM .EQS. F$EDIT (F$ELEMENT (0,"=",IREC),"TRIM")
$ THEN
$ VAL = F$EDIT (F$ELEMENT (1,"=",SREC),"TRIM")
$ SSL_CONF_DATA == "''VAL'"
$ GOTO GET_CONF_DATA_END
$ ENDIF
$ ENDIF
$!
$ GOTO GET_CONF_DATA_LOOP
$!
$GET_CONF_DATA_END:
$!
$ CLOSE /ERROR=CLOSE_ERROR IFILE
$!
$ RETURN
$!
$!------------------------------------------------------------------------------
$! Set the configuration data
$!------------------------------------------------------------------------------
$!
$SET_CONF_DATA:
$!
$ IF F$SEARCH ("''P1'") .EQS. "" THEN CREATE /NOLOG 'P1'
$!
$ OPEN /READ /ERROR=OPEN_ERROR IFILE 'P1'
$ OPEN /WRITE /ERROR=OPEN_ERROR OFILE 'P1'
$!
$SET_CONF_DATA_LOOP:
$!
$ READ /ERROR=READ_ERROR /END_OF_FILE=SET_CONF_DATA_END IFILE IREC
$!
$ IF ITM_FOUND .EQ. 1
$ THEN
$ WRITE /ERROR=WRITE_ERROR OFILE IREC
$ GOTO SET_CONF_DATA_LOOP
$ ENDIF
$!
$ SREC = IREC
$ IPOS = F$LOCATE ("#",IREC)
$ IF IPOS .NE. F$LENGTH (IREC) THEN IREC = F$EXTRACT (0,IPOS,IREC)
$ IREC = F$EDIT (IREC,"COLLAPSE")
$!
$ IF IREC .EQS. ""
$ THEN
$ WRITE /ERROR=WRITE_ERROR OFILE SREC
$ GOTO SET_CONF_DATA_LOOP
$ ENDIF
$!
$ IF IREC .EQS. KEY
$ THEN
$ KEY_FOUND = 1
$ WRITE /ERROR=WRITE_ERROR OFILE SREC
$ GOTO SET_CONF_DATA_LOOP
$ ENDIF
$!
$ IF KEY_FOUND .EQ. 1
$ THEN
$ IF F$EXTRACT (0,1,IREC) .EQS. "[" .AND. F$EXTRACT (F$LENGTH (IREC)-1,1,IREC) .EQS. "]"
$ THEN
$ WRITE /ERROR=WRITE_ERROR OFILE "''ITM' = ''P4'"
$ WRITE /ERROR=WRITE_ERROR OFILE SREC
$ ITM_FOUND = 1
$ GOTO SET_CONF_DATA_LOOP
$ ENDIF
$!
$ IF ITM .EQS. F$EDIT (F$ELEMENT (0,"=",IREC),"TRIM")
$ THEN
$ WRITE /ERROR=WRITE_ERROR OFILE "''ITM' = ''P4'"
$ ITM_FOUND = 1
$ GOTO SET_CONF_DATA_LOOP
$ ENDIF
$ ENDIF
$!
$ WRITE /ERROR=WRITE_ERROR OFILE SREC
$!
$ GOTO SET_CONF_DATA_LOOP
$!
$SET_CONF_DATA_END:
$!
$ IF KEY_FOUND .EQ. 0
$ THEN
$ WRITE /ERROR=WRITE_ERROR OFILE "''KEY'"
$ WRITE /ERROR=WRITE_ERROR OFILE "''ITM' = ''P4'"
$ ENDIF
$!
$ IF KEY_FOUND .EQ. 1 .AND. ITM_FOUND .EQ. 0
$ THEN
$ WRITE /ERROR=WRITE_ERROR OFILE "''ITM' = ''P4'"
$ ENDIF
$!
$ CLOSE IFILE
$ CLOSE OFILE
$!
$ RETURN
$!
$!------------------------------------------------------------------------------
$! File Errors
$!------------------------------------------------------------------------------
$!
$OPEN_ERROR:
$!
$ SAY "Open error for file ''P1' ... aborting ''P2'"
$ GOTO EXIT
$!
$READ_ERROR:
$!
$ SAY "Read error for file ''P1' ... aborting ''P2'"
$ GOTO EXIT
$!
$WRITE_ERROR:
$!
$ SAY "Write error for file ''P1' ... aborting ''P2'"
$ GOTO EXIT
$!
$CLOSE_ERROR:
$!
$ SAY "Close error for file ''P1' ... aborting ''P2'"
$ GOTO EXIT
$!
$!------------------------------------------------------------------------------
$! Exit
$!------------------------------------------------------------------------------
$!
$EXIT:
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ CLOSE IFILE
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ CLOSE OFILE
$!
$ Verify = F$VERIFY (Verify)
$!
$ EXIT 1

View File

@@ -0,0 +1,109 @@
$!
$!------------------------------------------------------------------------------
$! SSL$DRAW_BOX.COM - SSL Draw Box procedure
$!------------------------------------------------------------------------------
$!
$ Verify = F$VERIFY (0)
$ Set NoOn
$ Set NoControl=Y
$!
$!------------------------------------------------------------------------------
$! Description
$!------------------------------------------------------------------------------
$!
$! This procedure draws a box with the specified coordinates.
$!
$! The parameters used are:
$!
$! P1 - X1 coordinate
$! P2 - Y1 coordinate
$! P3 - X2 coordinate
$! P4 - Y3 coordinate
$! P5 - Box Header (Optional)
$! P6 - Box Footer (Optional)
$! P7 - Fill Box (Optional)
$!
$!------------------------------------------------------------------------------
$! Define symbols
$!------------------------------------------------------------------------------
$!
$ SAY := WRITE SYS$OUTPUT
$ On Control_Y THEN GOTO EXIT
$ Set Control=Y
$!
$ FILL_BOX := @SSL$COM:SSL$FILL_BOX
$!
$ ESC[0,8] = 27 ! Set the Escape Character
$ GRPH_ON[0,8] = 14 ! Turn GRAPHICS mode On
$ GRPH_OFF[0,8] = 15 ! Turn GRAPHICS mode Off
$ NORM = ESC + "[0m" ! Turn Attributes off
$ BOLD = ESC + "[1m" ! Turn on BOLD Attribute
$!
$!------------------------------------------------------------------------------
$! Draw the box
$!------------------------------------------------------------------------------
$!
$ X1 = F$INTEGER (P1)
$ Y1 = F$INTEGER (P2)
$ X2 = F$INTEGER (P3)
$ Y2 = F$INTEGER (P4)
$!
$ ROW = Y1 + 1
$ COL = X1 + 1
$ SIDE1 = X1
$ SIDE2 = X2 + 1
$ TOP = "l" + F$FAO("!#*q", x2 - x1) + "k"
$ BOT = "m" + F$FAO("!#*q", x2 - x1) + "j"
$!
$ SAY ESC + "[''Y1';''X1'H", BOLD, GRPH_ON, TOP, GRPH_OFF, NORM
$!
$SIDES:
$!
$ SAY ESC + "[''ROW';''SIDE1'H",BOLD,GRPH_ON,"x",GRPH_OFF,NORM
$ SAY ESC + "[''ROW';''SIDE2'H",BOLD,GRPH_ON,"x",GRPH_OFF,NORM
$!
$ IF ROW .LT. Y2
$ THEN
$ ROW = ROW + 1
$ GOTO SIDES
$ ENDIF
$!
$ SAY ESC + "[''Y2';''X1'H", BOLD, GRPH_ON, BOT, GRPH_OFF, NORM
$!
$ IF P5 .NES. ""
$ THEN
$ IF F$LENGTH(P5) .GT. X2 - X1
$ THEN
$ HEADER = F$EXTRACT (0, (X2 - X1 - 4), P5)
$ ELSE
$ HEADER = P5
$ ENDIF
$ COL = X1 + ((X2 - X1 - F$LENGTH(HEADER)) / 2)
$ SAY ESC + "[''Y1';''COL'H''BOLD'''HEADER'''NORM'"
$ ENDIF
$!
$ IF P6 .NES. ""
$ THEN
$ IF F$LENGTH(P6) .GT. X2 - X1
$ THEN
$ FOOTER = F$EXTRACT (0, (X2 - X1 - 4), P6)
$ ELSE
$ FOOTER = P6
$ ENDIF
$ COL = X1 + ((X2 - X1 - F$LENGTH(FOOTER)) / 2)
$ SAY ESC + "[''Y2';''COL'H''BOLD'''FOOTER'''NORM'"
$ ENDIF
$!
$ IF P7 .EQS. "" .OR. P7 .EQS. "Y" THEN FILL_BOX 'X1' 'Y1' 'X2' 'Y2'
$!
$ GOTO EXIT
$!
$!------------------------------------------------------------------------------
$! Exit
$!------------------------------------------------------------------------------
$!
$EXIT:
$!
$ Verify = F$VERIFY (Verify)
$!
$ EXIT

View File

@@ -0,0 +1 @@
EXIT

View File

@@ -0,0 +1,65 @@
$!
$!------------------------------------------------------------------------------
$! SSL$FILL_BOX.COM - SSL Fill Box procedure
$!------------------------------------------------------------------------------
$!
$ Verify = F$VERIFY (0)
$ Set NoOn
$ Set NoControl=Y
$!
$!------------------------------------------------------------------------------
$! Description
$!------------------------------------------------------------------------------
$!
$! This procedure draws a box with the specified coordinates.
$!
$! The parameters used are:
$!
$! P1 - X1 coordinate
$! P2 - Y1 coordinate
$! P3 - X2 coordinate
$! P4 - Y2 coordinate
$!
$!------------------------------------------------------------------------------
$! Define symbols
$!------------------------------------------------------------------------------
$!
$ SAY := WRITE SYS$OUTPUT
$ On Control_Y THEN GOTO EXIT
$ Set Control=Y
$!
$ ESC[0,8] = 27 ! Set the Escape Character
$!
$!------------------------------------------------------------------------------
$! Draw the box
$!------------------------------------------------------------------------------
$!
$ X1 = F$INTEGER (P1)
$ Y1 = F$INTEGER (P2)
$ X2 = F$INTEGER (P3)
$ Y2 = F$INTEGER (P4)
$!
$ ROW = Y1 + 1
$ COL = X1 + 1
$ FILL = F$FAO("!#* ", X2 - X1)
$!
$FILL_LOOP:
$!
$ IF ROW .LT. Y2
$ THEN
$ SAY ESC + "[''ROW';''COL'H",FILL
$ ROW = ROW + 1
$ GOTO FILL_LOOP
$ ENDIF
$!
$ GOTO EXIT
$!
$!------------------------------------------------------------------------------
$! Exit
$!------------------------------------------------------------------------------
$!
$EXIT:
$!
$ Verify = F$VERIFY (Verify)
$!
$ EXIT

View File

@@ -0,0 +1,235 @@
$!
$!------------------------------------------------------------------------------
$! SSL$HASH_CERT.COM - SSL Hash Certificate procedure
$!------------------------------------------------------------------------------
$!
$ Verify = F$VERIFY (0)
$ Set NoOn
$ Set NoControl=Y
$!
$!------------------------------------------------------------------------------
$! Description
$!------------------------------------------------------------------------------
$!
$! This procedure prompts the user through hashing Certificates.
$!
$! The parameters used are:
$!
$! P1 - Certificate or Certificate Revocation List (i.e. "CRT" or "CRL")
$!
$!------------------------------------------------------------------------------
$! Define symbols
$!------------------------------------------------------------------------------
$!
$ DELETE := DELETE
$ SAY := WRITE SYS$OUTPUT
$ ASK := READ SYS$COMMAND /END_OF_FILE=EXIT /PROMPT=
$ On Control_Y THEN GOTO EXIT
$ Set Control=Y
$!
$ TT_ROWS = F$GETDVI ("TT:","TT_PAGE")
$ TT_COLS = F$GETDVI ("TT:","DEVBUFSIZ")
$!
$ INIT_TERM := @SSL$COM:SSL$INIT_TERM
$!
$ ESC[0,8] = 27 ! Set the Escape Character
$ BELL[0,8] = 7 ! Ring the terminal Bell
$ RED = 1 ! Color - Red
$ FGD = 30 ! Foreground
$ BGD = 0 ! Background
$ CSCR = ESC + "[2J" ! Clear the Screen
$ CEOS = ESC + "[0J" ! Clear to the End of the Screen
$ CEOL = ESC + "[0K" ! Clear to the End of the Line
$ NORM = ESC + "[0m" ! Turn Attributes off
$ BLNK = ESC + "[5m" ! Turn on BLINK Attribute
$ WIDE = ESC + "#6" ! Turn on WIDE Attribute
$!
$!------------------------------------------------------------------------------
$! Run the SSL setup if it hasn't been run yet
$!------------------------------------------------------------------------------
$!
$ IF F$TRNLNM ("SSL$ROOT") .EQS. ""
$ THEN
$ IF F$SEARCH ("SSL$COM:SSL$INIT_ENV.COM") .NES. ""
$ THEN
$ @SSL$COM:SSL$INIT_ENV.COM
$ ELSE
$ SAY BELL, "Unable to locate SSL$COM:SSL$INIT_ENV.COM ..."
$ GOTO EXIT
$ ENDIF
$ ENDIF
$!
$!------------------------------------------------------------------------------
$! Display the Page Header
$!------------------------------------------------------------------------------
$!
$ INIT_TERM
$ BCOLOR = BGD
$ FCOLOR = FGD + RED
$ COLOR = ESC + "[''BCOLOR';''FCOLOR'm"
$!
$ TEXT = "SSL Certificate Tool"
$ COL = (TT_COLS - (F$LENGTH (TEXT) * 2)) / 4
$!
$ SAY ESC + "[01;01H", CSCR
$ SAY ESC + "[02;''COL'H", COLOR, WIDE, TEXT, NORM
$!
$ IF P1 .EQS. "CRT"
$ THEN
$ TEXT = "Hash Certification Authorities"
$ ELSE
$ TEXT = "Hash Certificate Revocations"
$ ENDIF
$ COL = (TT_COLS - F$LENGTH (TEXT)) / 2
$!
$ SAY ESC + "[04;01H"
$ SAY ESC + "[04;''COL'H", COLOR, TEXT, NORM
$!
$ CTR = 1
$ ROW = 6
$ COL = 2
$ TOP_ROW = ROW
$ MSG_ROW = TT_ROWS - 1
$!
$!------------------------------------------------------------------------------
$! Initialize the Request Data
$!------------------------------------------------------------------------------
$!
$ IF P1 .EQS. "CRT"
$ THEN
$ PRM = "Certificate Path:"
$ DEF = "SSL$CRT:*.CRT"
$ ENDIF
$!
$ IF P1 .EQS. "CRL"
$ THEN
$ PRM = "Certificate Revocation Path:"
$ DEF = "SSL$CRT:*.CRL"
$ ENDIF
$!
$ SAY ESC + "[''MSG_ROW';01H", CEOS
$!
$!------------------------------------------------------------------------------
$! Confirm/Update the SSL Configuration Data
$!------------------------------------------------------------------------------
$!
$PROMPT_LOOP:
$!
$ PROMPT = ESC + "[''ROW';''COL'H''PRM' ? [''DEF'] ''CEOL'"
$ ASK "''PROMPT'" _hash_path_name
$ _hash_path_name = F$EDIT (_hash_path_name,"TRIM")
$ IF _hash_path_name .EQS. "" THEN _hash_path_name = DEF
$!
$ HASH_DEV = F$PARSE (_hash_path_name,DEF,,"DEVICE")
$ HASH_DIR = F$PARSE (_hash_path_name,DEF,,"DIRECTORY")
$ HASH_NAM = F$PARSE (_hash_path_name,DEF,,"NAME")
$ HASH_TYP = F$PARSE (_hash_path_name,DEF,,"TYPE")
$ _hash_path_name = HASH_DEV + HASH_DIR + HASH_NAM + HASH_TYP
$!
$!------------------------------------------------------------------------------
$! Create the Certificiate Hashes
$!------------------------------------------------------------------------------
$!
$ IF P1 .EQS. "CRT"
$ THEN
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Hashing Certificate Authorities ...", NORM, CEOL
$ ENDIF
$!
$ IF P1 .EQS. "CRL"
$ THEN
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Hashing Certificate Revocations ...", NORM, CEOL
$ ENDIF
$!
$ IF F$SEARCH ("''HASH_DEV'''HASH_DIR'DELETE_HASH_FILES.COM") .NES. ""
$ THEN
$ @'HASH_DEV''HASH_DIR'DELETE_HASH_FILES.COM
$ DELETE 'HASH_DEV''HASH_DIR'DELETE_HASH_FILES.COM;*
$ ENDIF
$!
$ CTR = 0
$!
$ OPEN /WRITE OFILE 'HASH_DEV''HASH_DIR'DELETE_HASH_FILES.COM
$!
$CERT_LOOP:
$!
$ CERT_FILE = F$SEARCH ("''_hash_path_name'", 1)
$ IF CERT_FILE .EQS. "" THEN GOTO CERT_END
$ CTR = CTR + 1
$!
$ CALL HASH_CERT 'P1' 'CERT_FILE'
$!
$ GOTO CERT_LOOP
$!
$CERT_END:
$!
$ CLOSE OFILE
$!
$ IF CTR .EQ. 0
$ THEN
$ TEXT = "No files found, Press return to continue"
$ ELSE
$ TEXT = "Press return to continue"
$ ENDIF
$ COL = (TT_COLS - F$LENGTH (TEXT)) / 2
$!
$ IF CTR .EQ. 0
$ THEN
$ SAY BELL, ESC + "[''MSG_ROW';01H", CEOS
$ ELSE
$ SAY ESC + "[''MSG_ROW';01H", CEOS
$ ENDIF
$ PROMPT = ESC + "[''MSG_ROW';''COL'H''TEXT'"
$ ASK "''PROMPT'" OPT
$!
$ GOTO EXIT
$!
$!------------------------------------------------------------------------------
$! Hash Certificate Subroutine
$!------------------------------------------------------------------------------
$!
$HASH_CERT: SUBROUTINE
$!
$ IF P1 .EQS. "CRT"
$ THEN
$ HASH_SUFF = ""
$ HASH_FUNC = "$SSL$EXE:OPENSSL X509 -HASH -NOOUT -IN"
$ ELSE
$ HASH_SUFF = "R"
$ HASH_FUNC = "$SSL$EXE:OPENSSL CRL -HASH -NOOUT -IN"
$ ENDIF
$!
$ PIPE HASH_FUNC 'P2' | (READ SYS$INPUT VAL ; DEFINE/NOLOG/JOB HASH_VAL &VAL)
$ HASH_VAL = F$TRNLNM ("HASH_VAL")
$ DEASSIGN /JOB HASH_VAL
$!
$ IDX = 0
$!
$IDX_LOOP:
$!
$ HASH_FILE = "''HASH_DEV'''HASH_DIR'''HASH_VAL'.''HASH_SUFF'''IDX'"
$ IF F$SEARCH ("''HASH_FILE'") .NES. ""
$ THEN
$ IDX = IDX + 1
$ GOTO IDX_LOOP
$ ENDIF
$!
$ COPY 'P2' 'HASH_FILE'
$ WRITE OFILE "$ DELETE ''HASH_FILE';*"
$!
$ EXIT
$!
$ ENDSUBOUTINE
$!
$!------------------------------------------------------------------------------
$! Exit the procedure
$!------------------------------------------------------------------------------
$!
$EXIT:
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ CLOSE OFILE
$!
$ Verify = F$VERIFY (Verify)
$!
$ EXIT

View File

@@ -0,0 +1,61 @@
$!
$!------------------------------------------------------------------------------
$! SSL$INIT_ENV.COM - SSL Initialize Environment
$!------------------------------------------------------------------------------
$!
$ Verify = F$VERIFY (0)
$ Set NoOn
$!
$!------------------------------------------------------------------------------
$! Description
$!------------------------------------------------------------------------------
$!
$! This procedure sets up the SSL environment logicals & symbols.
$!
$! P1 = Mode of the logicals (ie - "/SYSTEM/EXECUTIVE_MODE").
$! Note - if P1 is not passed in, P1 will default to PROCESS.
$!
$!------------------------------------------------------------------------------
$! Initialization
$!------------------------------------------------------------------------------
$!
$ IF F$TRNLNM("SSL$ROOT") .EQS. ""
$ THEN
$ WRITE SYS$OUTPUT " "
$ WRITE SYS$OUTPUT " SSL-E-ERROR, SSL has not been started."
$ WRITE SYS$OUTPUT " "
$ WRITE SYS$OUTPUT " Execute the command procedure, SYS$STARTUP:SSL$STARTUP.COM, and then try this procedure again."
$ WRITE SYS$OUTPUT " "
$ EXIT
$ ENDIF
$!
$ IF P1 .EQS. ""
$ THEN
$ P1 = "/PROCESS"
$ ENDIF
$!
$!------------------------------------------------------------------------------
$! Define logicals
$!------------------------------------------------------------------------------
$!
$ DEFINE 'P1 SSL$CA_CONF SSL$ROOT:[CONF]SSL$CA.CNF
$ DEFINE 'P1 SSL$CONF SSL$ROOT:[CONF]SSL$CERT.CNF
$ DEFINE 'P1 SSL$COM SSL$ROOT:[COM]
$ DEFINE 'P1 SSL$CRT SSL$ROOT:[CERTS]
$ DEFINE 'P1 SSL$CSR SSL$ROOT:[CERTS]
$ DEFINE 'P1 SSL$KEY SSL$ROOT:[CERTS]
$ DEFINE 'P1 SSL$DB SSL$ROOT:[PRIVATE]
$!
$!------------------------------------------------------------------------------
$! Define foreign symbols
$!------------------------------------------------------------------------------
$!
$ OPENSSL :== $ SSL$EXE:OPENSSL
$ HOSTADDR :== $ SSL$EXE:SSL$HOSTADDR
$ HOSTNAME :== $ SSL$EXE:SSL$HOSTNAME
$!
$!------------------------------------------------------------------------------
$! Exit
$!------------------------------------------------------------------------------
$!
$ EXIT

View File

@@ -0,0 +1,55 @@
$!
$!------------------------------------------------------------------------------
$! SSL$INIT_TERM.COM - SSL Initialize Terminal procedure
$!------------------------------------------------------------------------------
$!
$ Verify = F$VERIFY (0)
$ Set NoOn
$ Set NoControl=Y
$!
$!------------------------------------------------------------------------------
$! Description
$!------------------------------------------------------------------------------
$!
$! This procedure initializes the terminal attributes.
$!
$! The parameters used are:
$!
$!------------------------------------------------------------------------------
$! Define symbols
$!------------------------------------------------------------------------------
$!
$ On Control_Y THEN GOTO EXIT
$ Set Control=Y
$!
$ EDIT := EDIT
$!
$!------------------------------------------------------------------------------
$! Initialize the terminal with TPU
$!------------------------------------------------------------------------------
$!
$ IF F$SEARCH ("SSL$COM:SSL$EXIT_CMD.TPU") .EQS. ""
$ THEN
$ OPEN /WRITE OFILE SSL$COM:SSL$EXIT_CMD.TPU
$ WRITE OFILE "EXIT"
$ CLOSE OFILE
$ ENDIF
$!
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$INPUT SYS$COMMAND
$ EDIT /TPU /COMMAND=OPENSS$COM:SSL$EXIT_CMD.TPU
$!
$!------------------------------------------------------------------------------
$! Exit
$!------------------------------------------------------------------------------
$!
$EXIT:
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ CLOSE OFILE
$!
$ Verify = F$VERIFY (Verify)
$!
$ EXIT

View File

@@ -0,0 +1,230 @@
$!
$!------------------------------------------------------------------------------
$! SSL$PICK_FILE.COM - SSL Pick File procedure
$!------------------------------------------------------------------------------
$!
$ Verify = F$VERIFY (0)
$ Set NoOn
$ Set NoControl=Y
$!
$!------------------------------------------------------------------------------
$! Description
$!------------------------------------------------------------------------------
$!
$! This procedure display the contents of a given file in a box size specified.
$!
$! The parameters used are:
$!
$! P1 - File Spec to Parse
$! P2 - X1 coordinate
$! P3 - Y1 coordinate
$! P4 - X2 coordinate
$! P5 - Y3 coordinate
$! P6 - File Pick Header (Optional)
$!
$!------------------------------------------------------------------------------
$! Define symbols
$!------------------------------------------------------------------------------
$!
$ SSL_FILE_NAME == ""
$ SAY := WRITE SYS$OUTPUT
$ ASK := READ SYS$COMMAND /END_OF_FILE=EXIT /PROMPT=
$ On Control_Y THEN GOTO EXIT
$ Set Control=Y
$!
$ DRAW_BOX := @SSL$COM:SSL$DRAW_BOX
$ FILL_BOX := @SSL$COM:SSL$FILL_BOX
$!
$ ESC[0,8] = 27 ! Set the Escape Character
$ BELL[0,8] = 7 ! Ring the terminal Bell
$ CEOL = ESC + "[0K" ! Clear to the End of the Line
$ NORM = ESC + "[0m" ! Turn Attributes off
$ BOLD = ESC + "[1m" ! Turn on BOLD Attribute
$!
$!------------------------------------------------------------------------------
$! Display the Page Header
$!------------------------------------------------------------------------------
$!
$ P1 = F$EDIT (P1, "TRIM")
$ P2 = F$INTEGER (P2)
$ P3 = F$INTEGER (P3)
$ P4 = F$INTEGER (P4)
$ P5 = F$INTEGER (P5)
$ FILE_MAX = 0
$!
$SEARCH_LOOP:
$!
$ FILE = F$SEARCH ("''P1'",1)
$ IF FILE .NES. ""
$ THEN
$ IF FILE_MAX .EQ. 1
$ THEN
$ IF FILE_1 .EQS. FILE THEN GOTO SEARCH_END
$ ENDIF
$ FILE_MAX = FILE_MAX + 1
$ FILE_'FILE_MAX' = FILE
$ GOTO SEARCH_LOOP
$ ENDIF
$!
$SEARCH_END:
$!
$ IF FILE_MAX .EQ. 0
$ THEN
$ DRAW_BOX 'P2' 'P3' 'P4' 'P5' "''P6'" " No Files Found, Press Return to Exit "
$ INPUT_ROW = P5 + 1
$ PROMPT = ESC + "[''INPUT_ROW';01H ''CEOL'"
$ ASK "''PROMPT'" OPT
$ GOTO EXIT
$ ENDIF
$!
$ COL = P2 + 2
$ ROW = P3 + 2
$ TOP_ROW = ROW
$ INPUT_ROW = P5 + 1
$ BOX_WIDTH = P4 - (P2 + 2)
$ BOX_HEIGHT = P5 - (P3 + 3)
$!
$ FILE_CTR = 1
$ PAGE_CTR = 1
$ PAGE_'PAGE_CTR'_FILE_CTR = FILE_CTR
$ FILES_PER_PAGE = BOX_HEIGHT
$ PAGE_MAX = FILE_MAX / FILES_PER_PAGE
$ IF PAGE_MAX * FILES_PER_PAGE .LT. FILE_MAX THEN PAGE_MAX = PAGE_MAX + 1
$!
$ DRAW_BOX 'P2' 'P3' 'P4' 'P5' "''P6'" " Enter B for Back, N for Next, Ctrl-Z to Exit or Enter a File Number "
$ PAGE_TXT = F$FAO (" Page !UL of !UL ", PAGE_CTR, PAGE_MAX)
$ _COL = P2 + (BOX_WIDTH - F$LENGTH (PAGE_TXT)) + 2
$ SAY ESC + "[''P3';''_COL'H''BOLD'''PAGE_TXT'''NORM'"
$!
$DISPLAY_LOOP:
$!
$ IF FILE_CTR .LE. FILE_MAX .AND. F$TYPE (FILE_'FILE_CTR') .NES. ""
$ THEN
$ FILE = FILE_'FILE_CTR'
$ ELSE
$ FILE = ""
$ ENDIF
$ WRAP_IN_PROGRESS = 0
$!
$WRAP_LOOP:
$!
$ IF ROW .LE. (P5 - 2) .AND. -
FILE_CTR .LE. PAGE_CTR * FILES_PER_PAGE
$ THEN
$ IF F$LENGTH (FILE) .GT. BOX_WIDTH
$ THEN
$ IF WRAP_IN_PROGRESS .EQ. 0
$ THEN
$ CTR_TXT = F$FAO ("!3UL. ",FILE_CTR)
$ WRAP_IN_PROGRESS = 1
$ ELSE
$ CTR_TXT = " "
$ ENDIF
$ FILE_SEG = F$EXTRACT (0, BOX_WIDTH - F$LENGTH (CTR_TXT), FILE)
$ SAY ESC + "[''ROW';''COL'H''BOLD'''CTR_TXT'''NORM'''FILE_SEG'"
$ FILE = F$EXTRACT (BOX_WIDTH - F$LENGTH (CTR_TXT), F$LENGTH (FILE) - (BOX_WIDTH + F$LENGTH (CTR_TXT)), FILE)
$ ROW = ROW + 1
$ GOTO WRAP_LOOP
$ ELSE
$ IF FILE .NES. ""
$ THEN
$ IF WRAP_IN_PROGRESS .EQ. 0
$ THEN
$ CTR_TXT = F$FAO ("!3UL. ",FILE_CTR)
$ ELSE
$ CTR_TXT = " "
$ ENDIF
$ SAY ESC + "[''ROW';''COL'H''BOLD'''CTR_TXT'''NORM'''FILE'"
$ ENDIF
$ ENDIF
$ ELSE
$!
$RETRY:
$!
$ PROMPT = ESC + "[''INPUT_ROW';01H ''CEOL'"
$ ASK "''PROMPT'" OPT
$ IF F$TYPE (OPT) .NES. "INTEGER" .AND. -
F$EDIT (OPT,"TRIM,UPCASE") .NES. "B" .AND. -
F$EDIT (OPT,"TRIM,UPCASE") .NES. "N"
$ THEN
$ CALL INVALID_ENTRY
$ GOTO RETRY
$ ENDIF
$ IF F$TYPE (OPT) .EQS. "INTEGER"
$ THEN
$ IF OPT .GT. 0 .AND. -
OPT .LE. FILE_MAX .AND. -
OPT .LE. (FILE_CTR - 1) .AND. -
OPT .GE. (FILE_CTR - 1 - FILES_PER_PAGE)
$ THEN
$ SSL_FILE_NAME == FILE_'OPT'
$ GOTO EXIT
$ ELSE
$ CALL INVALID_ENTRY
$ GOTO RETRY
$ ENDIF
$ ENDIF
$ IF F$EDIT (OPT,"TRIM,UPCASE") .EQS. "B"
$ THEN
$ IF PAGE_CTR .GT. 1
$ THEN
$ ROW = TOP_ROW
$ PAGE_CTR = PAGE_CTR - 1
$ FILE_CTR = PAGE_'PAGE_CTR'_FILE_CTR
$ PAGE_TXT = F$FAO (" Page !UL of !UL ", PAGE_CTR, PAGE_MAX)
$ _COL = P2 + (BOX_WIDTH - F$LENGTH (PAGE_TXT)) + 2
$ SAY ESC + "[''P3';''_COL'H''BOLD'''PAGE_TXT'''NORM'"
$ FILL_BOX 'P2' 'P3' 'P4' 'P5'
$ GOTO DISPLAY_LOOP
$ ELSE
$ CALL INVALID_ENTRY
$ GOTO RETRY
$ ENDIF
$ ENDIF
$ IF F$EDIT (OPT,"TRIM,UPCASE") .EQS. "N"
$ THEN
$ IF PAGE_CTR .LT. PAGE_MAX
$ THEN
$ PAGE_CTR = PAGE_CTR + 1
$ PAGE_'PAGE_CTR'_FILE_CTR = FILE_CTR
$ FILE_CTR = PAGE_'PAGE_CTR'_FILE_CTR
$ PAGE_TXT = F$FAO (" Page !UL of !UL ", PAGE_CTR, PAGE_MAX)
$ _COL = P2 + (BOX_WIDTH - F$LENGTH (PAGE_TXT)) + 2
$ SAY ESC + "[''P3';''_COL'H''BOLD'''PAGE_TXT'''NORM'"
$ FILL_BOX 'P2' 'P3' 'P4' 'P5'
$ ELSE
$ CALL INVALID_ENTRY
$ GOTO RETRY
$ ENDIF
$ ENDIF
$ FILL_BOX 'P2' 'P3' 'P4' 'P5'
$ ROW = TOP_ROW
$ GOTO WRAP_LOOP
$ ENDIF
$ FILE_CTR = FILE_CTR + 1
$ ROW = ROW + 1
$ GOTO DISPLAY_LOOP
$!
$!------------------------------------------------------------------------------
$! Display the invalid entry
$!------------------------------------------------------------------------------
$!
$INVALID_ENTRY: SUBROUTINE
$!
$ SAY ESC + "[''INPUT_ROW';01H", BELL, " Invalid Entry, Try again ...''CEOL'"
$ Wait 00:00:01.5
$ SAY ESC + "[''INPUT_ROW';01H", CEOL
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Exit
$!------------------------------------------------------------------------------
$!
$EXIT:
$!
$ Verify = F$VERIFY (Verify)
$!
$ EXIT

View File

@@ -0,0 +1,62 @@
$!
$!------------------------------------------------------------------------------
$! SSL$REM_ENV.COM - Remove the SSL Initialize Environment
$!------------------------------------------------------------------------------
$!
$ Verify = F$VERIFY (0)
$ Set NoOn
$!
$!------------------------------------------------------------------------------
$! Description
$!------------------------------------------------------------------------------
$!
$! This procedure deletes the SSL environment logicals & symbols set up by
$! SSL$INIT_ENV.COM.
$!
$! P1 = Mode of the logicals (ie - "/SYSTEM/EXECUTIVE_MODE").
$! Note - if P1 is not passed in, P1 will default to PROCESS.
$!
$!------------------------------------------------------------------------------
$! Initialization
$!------------------------------------------------------------------------------
$!
$ IF F$TRNLNM("SSL$ROOT") .EQS. ""
$ THEN
$ WRITE SYS$OUTPUT " "
$ WRITE SYS$OUTPUT " SSL-E-ERROR, SSL has not been started."
$ WRITE SYS$OUTPUT " "
$ WRITE SYS$OUTPUT " Execute the command procedure, SYS$STARTUP:SSL$STARTUP.COM, and then try this procedure again."
$ WRITE SYS$OUTPUT " "
$ EXIT
$ ENDIF
$!
$ IF P1 .EQS. ""
$ THEN
$ P1 = "/PROCESS"
$ ENDIF
$!
$!------------------------------------------------------------------------------
$! Define logicals
$!------------------------------------------------------------------------------
$!
$ DEASSIGN 'P1 SSL$CA_CONF
$ DEASSIGN 'P1 SSL$CONF
$ DEASSIGN 'P1 SSL$COM
$ DEASSIGN 'P1 SSL$CRT
$ DEASSIGN 'P1 SSL$CSR
$ DEASSIGN 'P1 SSL$KEY
$ DEASSIGN 'P1 SSL$DB
$!
$!------------------------------------------------------------------------------
$! Define foreign symbols
$!------------------------------------------------------------------------------
$!
$ DELETE/SYMBOL/GLOBAL OPENSSL
$ DELETE/SYMBOL/GLOBAL HOSTADDR
$ DELETE/SYMBOL/GLOBAL HOSTNAME
$!
$!------------------------------------------------------------------------------
$! Exit
$!------------------------------------------------------------------------------
$!
$ EXIT

View File

@@ -0,0 +1,769 @@
$!
$!------------------------------------------------------------------------------
$! SSL$RQST_CERT.COM - SSL Certificate Request procedure
$!------------------------------------------------------------------------------
$!
$ Verify = F$VERIFY (0)
$ Set NoOn
$ Set NoControl=Y
$!
$!------------------------------------------------------------------------------
$! Description
$!------------------------------------------------------------------------------
$!
$! This procedure prompts the user through creating a Certificate Request.
$!
$! There are no parameters used.
$!
$!------------------------------------------------------------------------------
$! Define symbols
$!------------------------------------------------------------------------------
$!
$ DELETE := DELETE
$ SAY := WRITE SYS$OUTPUT
$ ASK := READ SYS$COMMAND /END_OF_FILE=EXIT /PROMPT=
$ PID = F$GETJPI ("","PID")
$ TT_NOECHO = F$GETDVI ("TT:","TT_NOECHO")
$ On Control_Y THEN GOTO EXIT
$ Set Control=Y
$!
$ TT_ROWS = F$GETDVI ("TT:","TT_PAGE")
$ TT_COLS = F$GETDVI ("TT:","DEVBUFSIZ")
$!
$ GET_USER_DATA := CALL GET_USER_DATA
$ SET_USER_DATA := CALL SET_USER_DATA
$ DEL_USER_DATA := CALL DEL_USER_DATA
$ INIT_TERM := @SSL$COM:SSL$INIT_TERM
$ SHOW_FILE := @SSL$COM:SSL$SHOW_FILE
$ SSL_CONF_FILE = F$TRNLNM ("SSL$CONF")
$ GET_CONF_DATA := @SSL$COM:SSL$CONF_UTIL 'SSL_CONF_FILE' GET
$ SET_CONF_DATA := @SSL$COM:SSL$CONF_UTIL 'SSL_CONF_FILE' SET
$!
$ ESC[0,8] = 27 ! Set the Escape Character
$ BELL[0,8] = 7 ! Ring the terminal Bell
$ RED = 1 ! Color - Red
$ FGD = 30 ! Foreground
$ BGD = 0 ! Background
$ CSCR = ESC + "[2J" ! Clear the Screen
$ CEOS = ESC + "[0J" ! Clear to the End of the Screen
$ CEOL = ESC + "[0K" ! Clear to the End of the Line
$ NORM = ESC + "[0m" ! Turn Attributes off
$ BLNK = ESC + "[5m" ! Turn on BLINK Attribute
$ WIDE = ESC + "#6" ! Turn on WIDE Attribute
$!
$!------------------------------------------------------------------------------
$! Run the SSL setup if it hasn't been run yet
$!------------------------------------------------------------------------------
$!
$ IF F$TRNLNM ("SSL$ROOT") .EQS. ""
$ THEN
$ IF F$SEARCH ("SSL$COM:SSL$INIT_ENV.COM") .NES. ""
$ THEN
$ @SSL$COM:SSL$INIT_ENV.COM
$ ELSE
$ SAY BELL, "Unable to locate SSL$COM:SSL$INIT_ENV.COM ..."
$ GOTO EXIT
$ ENDIF
$ ENDIF
$!
$!------------------------------------------------------------------------------
$! Display the Page Header
$!------------------------------------------------------------------------------
$!
$ INIT_TERM
$ BCOLOR = BGD
$ FCOLOR = FGD + RED
$ COLOR = ESC + "[''BCOLOR';''FCOLOR'm"
$!
$ TEXT = "SSL Certificate Tool"
$ COL = (TT_COLS - (F$LENGTH (TEXT) * 2)) / 4
$!
$ SAY ESC + "[01;01H", CSCR
$ SAY ESC + "[02;''COL'H", COLOR, WIDE, TEXT, NORM
$!
$ TEXT = "Create Certificate Request"
$ COL = (TT_COLS - F$LENGTH (TEXT)) / 2
$!
$ SAY ESC + "[04;01H"
$ SAY ESC + "[04;''COL'H", COLOR, TEXT, NORM
$!
$ ROW = 6
$ COL = 2
$ TOP_ROW = ROW
$ MSG_ROW = TT_ROWS - 1
$!
$!------------------------------------------------------------------------------
$! Initialize the Request Data
$!------------------------------------------------------------------------------
$!
$ IF F$SEARCH ("''SSL_CONF_FILE'") .NES. ""
$ THEN
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Reading Configuration ...", NORM
$ ELSE
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Initializing Configuration ...", NORM
$ ENDIF
$!
$ _request_name = "req"
$!
$ _distinguished_name = "REQ_distinguished_name"
$ _distinguished_name_upd = "Y"
$!
$ _default_bits = "1024"
$ _default_bits_upd = "Y"
$!
$ _default_keyfile = "SSL$KEY:SERVER.KEY"
$ _default_keyfile_upd = "Y"
$!
$ _default_csrfile = "SSL$CSR:SERVER.CSR"
$ _default_csrfile_upd = "Y"
$!
$ _countryName_prompt = "Country Name ?"
$ _countryName_min = "2"
$ _countryName_max = "2"
$ _countryName_default = "US"
$ _countryName_upd = "Y"
$ _countryName_cnt = 4
$!
$ _stateOrProvinceName_prompt = "State or Province Name ?"
$ _stateOrProvinceName_default = ""
$ _stateOrProvinceName_upd = "Y"
$ _stateOrProvinceName_cnt = 2
$!
$ _localityName_prompt = "City Name ?"
$ _localityName_default = ""
$ _localityName_upd = "Y"
$ _localityName_cnt = 2
$!
$ _0organizationName_prompt = "Organization Name ?"
$ _0organizationName_default = ""
$ _0organizationName_upd = "Y"
$ _0organizationName_cnt = 2
$!
$ _organizationalUnitName_prompt = "Organization Unit Name ?"
$ _organizationalUnitName_default = ""
$ _organizationalUnitName_upd = "Y"
$ _organizationalUnitName_cnt = 2
$!
$ _commonName_prompt = "Common Name ?"
$ _commonName_max = "64"
$ HOSTNAME -s _commonName_default
$ _commonName_upd = "Y"
$ _commonName_cnt = 3
$!
$ _emailAddress_prompt = "Email Address ?"
$ _emailAddress_max = "40"
$ _emailAddress_default = "webmaster@''_commonName_default'"
$ _emailAddress_upd = "Y"
$ _emailAddress_cnt = 3
$!
$ IF F$SEARCH ("''SSL_CONF_FILE'") .NES. ""
$ THEN
$ GET_CONF_DATA "[''_request_name']#distinguished_name"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _distinguished_name = SSL_CONF_DATA
$ _distinguished_name_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_request_name']#default_bits"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_bits = SSL_CONF_DATA
$ _default_bits_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_request_name']#default_keyfile"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_keyfile = F$PARSE (SSL_CONF_DATA,"SSL$ROOT:",,"DEVICE") + -
F$PARSE (SSL_CONF_DATA,"[KEY]",,"DIRECTORY") + -
F$PARSE (SSL_CONF_DATA,"SERVER",,"NAME") + -
F$PARSE (SSL_CONF_DATA,".KEY",,"TYPE")
$ _default_keyfile_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_request_name']#default_csrfile"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_csrfile = F$PARSE (SSL_CONF_DATA,"SSL$ROOT:",,"DEVICE") + -
F$PARSE (SSL_CONF_DATA,"[CSR]",,"DIRECTORY") + -
F$PARSE (SSL_CONF_DATA,"SERVER",,"NAME") + -
F$PARSE (SSL_CONF_DATA,".CSR",,"TYPE")
$ _default_csrfile_upd = "N"
$ ENDIF
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#countryName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _countryName_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#countryName_min"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _countryName_min = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#countryName_max"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _countryName_max = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#countryName_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _countryName_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _countryName_cnt .EQ. CTR THEN _countryName_upd = "N"
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#stateOrProvinceName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _stateOrProvinceName_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#stateOrProvinceName_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _stateOrProvinceName_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _stateOrProvinceName_cnt .EQ. CTR THEN _stateOrProvinceName_upd = "N"
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#localityName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _localityName_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#localityName_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _localityName_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _localityName_cnt .EQ. CTR THEN _localityName_upd = "N"
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#0.organizationName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _0organizationName_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#0.organizationName_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _0organizationName_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _0organizationName_cnt .EQ. CTR THEN _0organizationName_upd = "N"
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#organizationalUnitName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _organizationalUnitName_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#organizationalUnitName_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _organizationalUnitName_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _organizationalUnitName_cnt .EQ. CTR THEN _organizationalUnitName_upd = "N"
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#commonName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _commonName_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#commonName_max"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _commonName_max = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#commonName_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _commonName_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _commonName_cnt .EQ. CTR THEN _commonName_upd = "N"
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#emailAddress"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _emailAddress_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#emailAddress_max"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _emailAddress_max = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#emailAddress_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _emailAddress_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _emailAddress_cnt .EQ. CTR THEN _emailAddress_upd = "N"
$ ENDIF
$!
$ SET_USER_DATA "[]#encrypt_key#-#N#Encrypt Private Key ?#S##1##Y#N"
$ SET_USER_DATA "[]#pem_pass_phrase#-##PEM Pass Phrase ?#P#1###Y#Y"
$ SET_USER_DATA "[''_request_name']#default_bits#D#''_default_bits'#Encryption Bits ?#I###''_default_bits_upd'#Y#N"
$ SET_USER_DATA "[''_request_name']#default_keyfile#D#''_default_keyfile'#Certificate Key File ?#F###''_default_keyfile_upd'#Y#N"
$ SET_USER_DATA "[''_request_name']#default_csrfile#D#''_default_csrfile'#Certificate Request File ?#F###''_default_csrfile_upd'#Y#N"
$ SET_USER_DATA "[''_request_name']#distinguished_name#D#''_distinguished_name'##S###''_distinguished_name_upd'#N#N"
$ SET_USER_DATA "[''_distinguished_name']#countryName#P#''_countryName_default'#''_countryName_prompt'#S#''_countryName_min'#''_countryName_max'#''_countryName_upd'#Y#N"
$ SET_USER_DATA "[''_distinguished_name']#stateOrProvinceName#P#''_stateOrProvinceName_default'#''_stateOrProvinceName_prompt'#S###''_stateOrProvinceName_upd'#Y#N"
$ SET_USER_DATA "[''_distinguished_name']#localityName#P#''_localityName_default'#''_localityName_prompt'#S###''_localityName_upd'#Y#N"
$ SET_USER_DATA "[''_distinguished_name']#0.organizationName#P#''_0organizationName_default'#''_0organizationName_prompt'#S###''_0organizationName_upd'#Y#N"
$ SET_USER_DATA "[''_distinguished_name']#organizationalUnitName#P#''_organizationalUnitName_default'#''_organizationalUnitName_prompt'#S###''_organizationUnitName_upd'#Y#N"
$ SET_USER_DATA "[''_distinguished_name']#commonName#P#''_commonName_default'#''_commonName_prompt'#S##''_commonName_max'#''_commonName_upd'#Y#N"
$ SET_USER_DATA "[''_distinguished_name']#emailAddress#P#''_emailAddress_default'#''_emailAddress_prompt'#S##''_emailAddress_max'#''_emailAddress_upd'#Y#N"
$ SET_USER_DATA "[]#display_certificate#-#N#Display the Certificate ?#S##1##Y#N"
$!
$ SAY ESC + "[''MSG_ROW';01H", CEOS
$!
$!------------------------------------------------------------------------------
$! Confirm/Update the SSL Configuration Data
$!------------------------------------------------------------------------------
$!
$ CTR = 1
$!
$PROMPT_LOOP:
$!
$ IF CTR .LE. SSL_USER_DATA_MAX
$ THEN
$ KEY = F$ELEMENT (0,"#",SSL_USER_DATA_'CTR') ! Key Name
$ ITM = F$ELEMENT (1,"#",SSL_USER_DATA_'CTR') ! Item Name
$ VAL = F$ELEMENT (2,"#",SSL_USER_DATA_'CTR') ! Item Value Contains Default or Prompt
$ DEF = F$ELEMENT (3,"#",SSL_USER_DATA_'CTR') ! Default Value
$ PRM = F$ELEMENT (4,"#",SSL_USER_DATA_'CTR') ! Prompt Value
$ TYP = F$ELEMENT (5,"#",SSL_USER_DATA_'CTR') ! Value Type
$ MIN = F$ELEMENT (6,"#",SSL_USER_DATA_'CTR') ! Value Minimum Length
$ MAX = F$ELEMENT (7,"#",SSL_USER_DATA_'CTR') ! Value Maximum Length
$ UPD = F$ELEMENT (8,"#",SSL_USER_DATA_'CTR') ! Entry Updated ?
$ REQ = F$ELEMENT (9,"#",SSL_USER_DATA_'CTR') ! Entry Required for Input ?
$ CFM = F$ELEMENT (10,"#",SSL_USER_DATA_'CTR')! Confirm Input ?
$!
$! The PEM Pass Phrase prompt is dependant on the answer to encrypt the private key
$!
$ IF KEY .EQS. "[]" .AND. ITM .EQS. "pem_pass_phrase"
$ THEN
$ GET_USER_DATA "[]#encrypt_key"
$ _encrypt_key = SSL_USER_DATA
$ IF F$EDIT (_encrypt_key,"UPCASE") .NES. "Y"
$ THEN
$ CTR = CTR + 1
$ GOTO PROMPT_LOOP
$ ENDIF
$ ENDIF
$!
$ CONFIRMED = 0
$ IF REQ .EQS. "N"
$ THEN
$ CTR = CTR + 1
$ GOTO PROMPT_LOOP
$ ENDIF
$ IF ROW .GT. MSG_ROW - 2
$ THEN
$ SAY ESC + "[''TOP_ROW';01H", CEOS
$ ROW = TOP_ROW
$ ENDIF
$!
$CONFIRM_LOOP:
$!
$ IF PRM .EQS. ""
$ THEN
$ PROMPT = ESC + "[''ROW';''COL'H''ITM' ? [''DEF'] ''CEOL'"
$ ELSE
$ PROMPT = ESC + "[''ROW';''COL'H''PRM' [''DEF'] ''CEOL'"
$ ENDIF
$ IF TYP .EQS. "P" THEN SET TERMINAL /NOECHO
$ ASK "''PROMPT'" ANS /END_OF_FILE=EXIT
$ IF TYP .EQS. "P" THEN SET TERMINAL /ECHO
$ ANS = F$EDIT (ANS,"TRIM")
$ IF ANS .EQS. "" THEN ANS = DEF
$ IF TYP .EQS. "F"
$ THEN
$ ANS = F$PARSE ("''ANS'","''DEF'",,,"SYNTAX_ONLY")
$ ENDIF
$ IF TYP .EQS. "I" .AND. F$TYPE (ANS) .NES. "INTEGER"
$ THEN
$ CALL INVALID_ENTRY
$ SAY ESC + "[''ROW';01H", CEOS
$ GOTO PROMPT_LOOP
$ ENDIF
$ IF (TYP .EQS. "S" .OR. TYP .EQS. "P") .AND. -
((MIN .NES. "" .AND. F$LENGTH (ANS) .LT. F$INTEGER(MIN)) .OR. -
(MAX .NES. "" .AND. F$LENGTH (ANS) .GT. F$INTEGER(MAX)))
$ THEN
$ CALL INVALID_ENTRY
$ SAY ESC + "[''ROW';01H", CEOS
$ IF TYP .EQS. "S" THEN GOTO PROMPT_LOOP
$ IF TYP .EQS. "P" THEN GOTO CONFIRM_LOOP
$ ENDIF
$ ROW = ROW + 1
$ IF CFM .EQS. "Y"
$ THEN
$ IF CONFIRMED .EQ. 0
$ THEN
$ CONFIRMED = 1
$ CONFIRMED_ANS = ANS
$ PRM = "Confirm ''PRM'"
$ GOTO CONFIRM_LOOP
$ ELSE
$ IF ANS .NES. CONFIRMED_ANS
$ THEN
$ CALL INVALID_ENTRY
$ ROW = ROW - 2
$ SAY ESC + "[''ROW';01H", CEOS
$ GOTO PROMPT_LOOP
$ ENDIF
$ ENDIF
$ ENDIF
$ IF ANS .NES. DEF THEN SSL_USER_DATA_'CTR' = "''KEY'#''ITM'#''VAL'#''ANS'#''PRM'#''TYP'#''MIN'#''MAX'#Y#''REQ'#''CFM'"
$ CTR = CTR + 1
$ GOTO PROMPT_LOOP
$ ENDIF
$!
$!------------------------------------------------------------------------------
$! Save the SSL Configuration Data
$!------------------------------------------------------------------------------
$!
$ CTR = 1
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Saving Configuration ...", NORM
$!
$SAVE_CONF_LOOP:
$!
$ IF CTR .LE. SSL_USER_DATA_MAX
$ THEN
$ KEY = F$ELEMENT (0,"#",SSL_USER_DATA_'CTR') ! Key Name
$ ITM = F$ELEMENT (1,"#",SSL_USER_DATA_'CTR') ! Item Name
$ VAL = F$ELEMENT (2,"#",SSL_USER_DATA_'CTR') ! Item Value Contains Default or Prompt
$ DEF = F$ELEMENT (3,"#",SSL_USER_DATA_'CTR') ! Default Value
$ PRM = F$ELEMENT (4,"#",SSL_USER_DATA_'CTR') ! Prompt Value
$ TYP = F$ELEMENT (5,"#",SSL_USER_DATA_'CTR') ! Value Type
$ MIN = F$ELEMENT (6,"#",SSL_USER_DATA_'CTR') ! Value Minimum Length
$ MAX = F$ELEMENT (7,"#",SSL_USER_DATA_'CTR') ! Value Maximum Length
$ UPD = F$ELEMENT (8,"#",SSL_USER_DATA_'CTR') ! Entry Updated ?
$ REQ = F$ELEMENT (9,"#",SSL_USER_DATA_'CTR') ! Entry Required for Input ?
$ CFM = F$ELEMENT (10,"#",SSL_USER_DATA_'CTR')! Confirm Input ?
$ IF UPD .NES. "Y" .OR. VAL .EQS. "-"
$ THEN
$ CTR = CTR + 1
$ GOTO SAVE_CONF_LOOP
$ ENDIF
$ IF VAL .EQS. "D"
$ THEN
$ SET_CONF_DATA "''KEY'#''ITM'" "''DEF'"
$ ELSE
$ SET_CONF_DATA "''KEY'#''ITM'" "''PRM'"
$ SET_CONF_DATA "''KEY'#''ITM'_default" "''DEF'"
$ ENDIF
$ IF MIN .NES. "" THEN SET_CONF_DATA "''KEY'#''ITM'_min" "''MIN'"
$ IF MAX .NES. "" THEN SET_CONF_DATA "''KEY'#''ITM'_max" "''MAX'"
$ CTR = CTR + 1
$ GOTO SAVE_CONF_LOOP
$ ENDIF
$!
$ PURGE /NOLOG /NOCONFIRM 'SSL_CONF_FILE'
$ RENAME 'SSL_CONF_FILE'; ;1
$!
$ SAY ESC + "[''MSG_ROW';01H", CEOS
$!
$!------------------------------------------------------------------------------
$! Create the Server Certificiate
$!------------------------------------------------------------------------------
$!
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Creating Certificate Request ...", NORM
$!
$ X1 = 2
$ Y1 = TOP_ROW
$ X2 = TT_COLS - 2
$ Y2 = MSG_ROW - 1
$!
$ GET_USER_DATA "[]#encrypt_key"
$ _encrypt_key = SSL_USER_DATA
$ IF F$EDIT (_encrypt_key,"UPCASE") .EQS. "Y"
$ THEN
$ GET_USER_DATA "[]#pem_pass_phrase"
$ _pem_pass_phrase = SSL_USER_DATA
$ ENDIF
$ GET_USER_DATA "[req]#default_bits"
$ _default_bits = SSL_USER_DATA
$ GET_USER_DATA "[req]#default_keyfile"
$ _default_keyfile = SSL_USER_DATA
$ GET_USER_DATA "[req]#default_csrfile"
$ _default_csrfile = SSL_USER_DATA
$ GET_USER_DATA "[]#display_certificate"
$ _display_certificate = SSL_USER_DATA
$!
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SHOW SYSTEM /FULL /OUT=SYS$LOGIN:SSL_GENRSA_'PID'.RND
$!
$ OPEN /WRITE OFILE SYS$LOGIN:SSL_GENRSA_'PID'.COM
$ WRITE OFILE "$ DEFINE /USER /NOLOG RANDFILE SYS$LOGIN:SSL_GENRSA_''PID'.RND"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$ERROR SYS$LOGIN:SSL_GENRSA_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$OUTPUT SYS$LOGIN:SSL_GENRSA_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$COMMAND SYS$INPUT"
$ IF _encrypt_key .EQS. "Y"
$ THEN
$ WRITE OFILE "$ OPENSSL genrsa -des3 -out ''_default_keyfile' ''_default_bits'"
$ WRITE OFILE "''_pem_pass_phrase'"
$ WRITE OFILE "''_pem_pass_phrase'"
$ ELSE
$ WRITE OFILE "$ OPENSSL genrsa -out ''_default_keyfile' ''_default_bits'"
$ ENDIF
$ CLOSE OFILE
$!
$ @SYS$LOGIN:SSL_GENRSA_'PID'.COM
$!
$ DELETE/NOLOG/NOCONFIRM SYS$LOGIN:SSL_GENRSA_'PID'.RND;*
$ DELETE/NOLOG/NOCONFIRM SYS$LOGIN:SSL_GENRSA_'PID'.COM;*
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SEARCH SYS$LOGIN:SSL_GENRSA_'PID'.LOG /OUT=SYS$LOGIN:SSL_GENRSA_'PID'.ERR ":error:"
$ IF F$SEARCH ("SYS$LOGIN:SSL_GENRSA_''PID'.ERR") .NES. ""
$ THEN
$ IF F$FILE_ATTRIBUTE ("SYS$LOGIN:SSL_GENRSA_''PID'.ERR","ALQ") .NE. 0
$ THEN
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_GENRSA_'PID'.ERR;*
$ SAY ESC + "[''MSG_ROW';01H''BELL'''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_GENRSA_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ERROR >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_GENRSA_'PID'.LOG;*
$ GOTO EXIT
$ ENDIF
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_GENRSA_'PID'.ERR;*
$ ENDIF
$!
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_GENRSA_'PID'.LOG;*
$!
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SHOW SYSTEM /FULL /OUT=SYS$LOGIN:SSL_REQ_'PID'.RND
$!
$ OPEN /WRITE OFILE SYS$LOGIN:SSL_REQ_'PID'.COM
$ WRITE OFILE "$ DEFINE /USER /NOLOG RANDFILE SYS$LOGIN:SSL_REQ_''PID'.RND"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$ERROR SYS$LOGIN:SSL_REQ_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$OUTPUT SYS$LOGIN:SSL_REQ_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$COMMAND SYS$INPUT"
$ IF _encrypt_key .EQS. "Y"
$ THEN
$ WRITE OFILE "$ OPENSSL req -new -config ''SSL_CONF_FILE' -key ''_default_keyfile' -out ''_default_csrfile'"
$ WRITE OFILE "''_pem_pass_phrase'"
$ WRITE OFILE "''_pem_pass_phrase'"
$ ELSE
$ WRITE OFILE "$ OPENSSL req -new -nodes -config ''SSL_CONF_FILE' -keyout ''_default_keyfile' -out ''_default_csrfile'"
$ ENDIF
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ CLOSE OFILE
$!
$ @SYS$LOGIN:SSL_REQ_'PID'.COM
$!
$ DELETE/NOLOG/NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.COM;*
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SEARCH SYS$LOGIN:SSL_REQ_'PID'.LOG /OUT=SYS$LOGIN:SSL_REQ_'PID'.ERR ":error:"
$ IF F$SEARCH ("SYS$LOGIN:SSL_REQ_''PID'.ERR") .NES. ""
$ THEN
$ IF F$FILE_ATTRIBUTE ("SYS$LOGIN:SSL_REQ_''PID'.ERR","ALQ") .NE. 0
$ THEN
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.ERR;*
$ SAY ESC + "[''MSG_ROW';01H''BELL'''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_REQ_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ERROR >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.LOG;*
$ GOTO EXIT
$ ENDIF
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.ERR;*
$ ENDIF
$!
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.LOG;*
$!
$ IF F$EDIT (_display_certificate,"TRIM,UPCASE") .EQS. "Y"
$ THEN
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Generating Output ...", NORM, CEOL
$!
$ OPEN /WRITE OFILE SYS$LOGIN:SSL_REQ_'PID'.COM
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$ERROR SYS$LOGIN:SSL_REQ_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$OUTPUT SYS$LOGIN:SSL_REQ_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$COMMAND SYS$INPUT"
$ WRITE OFILE "$ OPENSSL req -noout -text -config ''SSL_CONF_FILE' -in ''_default_csrfile'"
$ CLOSE OFILE
$!
$ @SYS$LOGIN:SSL_REQ_'PID'.COM
$!
$ DELETE/NOLOG/NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.COM;*
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SEARCH SYS$LOGIN:SSL_REQ_'PID'.LOG /OUT=SYS$LOGIN:SSL_REQ_'PID'.ERR ":error:"
$ IF F$SEARCH ("SYS$LOGIN:SSL_REQ_''PID'.ERR") .NES. ""
$ THEN
$ IF F$FILE_ATTRIBUTE ("SYS$LOGIN:SSL_REQ_''PID'.ERR","ALQ") .NE. 0
$ THEN
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.ERR;*
$ SAY ESC + "[''MSG_ROW';01H''BELL'''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_REQ_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ERROR >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.LOG;*
$ GOTO EXIT
$ ENDIF
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.ERR;*
$ ENDIF
$!
$ SAY ESC + "[''MSG_ROW';01H''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_REQ_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ''_default_csrfile' >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.LOG;*
$ GOTO EXIT
$ ENDIF
$!
$ TEXT = "Press return to continue"
$ COL = (TT_COLS - F$LENGTH (TEXT)) / 2
$!
$ SAY ESC + "[''MSG_ROW';01H", CEOS
$ PROMPT = ESC + "[''MSG_ROW';''COL'H''TEXT'"
$ ASK "''PROMPT'" OPT
$!
$GOTO EXIT
$!
$!------------------------------------------------------------------------------
$! Set the User Data
$!------------------------------------------------------------------------------
$!
$SET_USER_DATA: SUBROUTINE
$!
$ IF F$TYPE (SSL_USER_DATA_MAX) .EQS. ""
$ THEN
$ SSL_USER_DATA_MAX == 1
$ ELSE
$ SSL_USER_DATA_MAX == SSL_USER_DATA_MAX + 1
$ ENDIF
$!
$ SSL_USER_DATA_'SSL_USER_DATA_MAX' == "''P1'"
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Get the User Data
$!------------------------------------------------------------------------------
$!
$GET_USER_DATA: SUBROUTINE
$!
$ CTR = 1
$ USER_KEY = F$ELEMENT (0,"#",P1)
$ USER_ITM = F$ELEMENT (1,"#",P1)
$!
$GET_USER_DATA_LOOP:
$!
$ IF CTR .LE. SSL_USER_DATA_MAX
$ THEN
$ KEY = F$ELEMENT (0,"#",SSL_USER_DATA_'CTR') ! Key Name
$ ITM = F$ELEMENT (1,"#",SSL_USER_DATA_'CTR') ! Item Name
$ VAL = F$ELEMENT (2,"#",SSL_USER_DATA_'CTR') ! Item Value Contains Default or Prompt
$ DEF = F$ELEMENT (3,"#",SSL_USER_DATA_'CTR') ! Default Value
$ PRM = F$ELEMENT (4,"#",SSL_USER_DATA_'CTR') ! Prompt Value
$ IF USER_KEY .NES. KEY .OR. USER_ITM .NES. ITM
$ THEN
$ CTR = CTR + 1
$ GOTO GET_USER_DATA_LOOP
$ ENDIF
$ IF VAL .EQS. "-" THEN SSL_USER_DATA == "''DEF'"
$ IF VAL .EQS. "D" THEN SSL_USER_DATA == "''DEF'"
$ IF VAL .EQS. "P" THEN SSL_USER_DATA == "''PRM'"
$ ENDIF
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Delete the User Data
$!------------------------------------------------------------------------------
$!
$DEL_USER_DATA: SUBROUTINE
$!
$ IF F$TYPE (SSL_USER_DATA_MAX) .EQS. "" THEN GOTO DEL_USER_DATA_END
$!
$DEL_USER_DATA_LOOP:
$!
$ IF F$TYPE (SSL_USER_DATA_'SSL_USER_DATA_MAX') .NES. ""
$ THEN
$ DELETE /SYMBOL /GLOBAL SSL_USER_DATA_'SSL_USER_DATA_MAX'
$ SSL_USER_DATA_MAX == SSL_USER_DATA_MAX - 1
$ GOTO DEL_USER_DATA_LOOP
$ ENDIF
$!
$ DELETE /SYMBOL /GLOBAL SSL_USER_DATA_MAX
$!
$DEL_USER_DATA_END:
$!
$ IF F$TYPE (SSL_USER_DATA) .NES. "" THEN DELETE /SYMBOL /GLOBAL SSL_USER_DATA
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Display the invalid entry
$!------------------------------------------------------------------------------
$!
$INVALID_ENTRY: SUBROUTINE
$!
$ SAY ESC + "[''MSG_ROW';01H", BELL, " Invalid Entry, Try again ...''CEOL'"
$ Wait 00:00:01.5
$ SAY ESC + "[''MSG_ROW';01H", CEOL
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$!
$!------------------------------------------------------------------------------
$!
$EXIT:
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ CLOSE OFILE
$!
$ DEL_USER_DATA
$!
$ IF F$TYPE (SSL_CONF_DATA) .NES. "" THEN DELETE /SYMBOL /GLOBAL SSL_CONF_DATA
$!
$ IF F$GETDVI ("TT:","TT_NOECHO") .AND. .NOT. TT_NOECHO THEN SET TERMINAL /ECHO
$!
$ IF F$SEARCH ("SYS$LOGIN:SSL_GENRSA_''PID'.%%%;*") .NES. "" THEN DELETE/NOLOG/NOCONFIRM SYS$LOGIN:SSL_GENRSA_'PID'.%%%;*
$ IF F$SEARCH ("SYS$LOGIN:SSL_REQ_''PID'.%%%;*") .NES. "" THEN DELETE/NOLOG/NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.%%%;*
$!
$ Verify = F$VERIFY (Verify)
$!
$ EXIT

View File

@@ -0,0 +1,725 @@
$!
$!------------------------------------------------------------------------------
$! SSL$SELF_CERT.COM - SSL Self Signed Certificate procedure
$!------------------------------------------------------------------------------
$!
$ Verify = F$VERIFY (0)
$ Set NoOn
$ Set NoControl=Y
$!
$!------------------------------------------------------------------------------
$! Description
$!------------------------------------------------------------------------------
$!
$! This procedure prompts the user through creating a Server Certificate.
$!
$! There are no parameters used.
$!
$!------------------------------------------------------------------------------
$! Define symbols
$!------------------------------------------------------------------------------
$!
$ DELETE := DELETE
$ SAY := WRITE SYS$OUTPUT
$ ASK := READ SYS$COMMAND /END_OF_FILE=EXIT /PROMPT=
$ PID = F$GETJPI ("","PID")
$ TT_NOECHO = F$GETDVI ("TT:","TT_NOECHO")
$ On Control_Y THEN GOTO EXIT
$ Set Control=Y
$!
$ TT_ROWS = F$GETDVI ("TT:","TT_PAGE")
$ TT_COLS = F$GETDVI ("TT:","DEVBUFSIZ")
$!
$ GET_USER_DATA := CALL GET_USER_DATA
$ SET_USER_DATA := CALL SET_USER_DATA
$ DEL_USER_DATA := CALL DEL_USER_DATA
$ INIT_TERM := @SSL$COM:SSL$INIT_TERM
$ SHOW_FILE := @SSL$COM:SSL$SHOW_FILE
$ SSL_CONF_FILE = F$TRNLNM ("SSL$CONF")
$ GET_CONF_DATA := @SSL$COM:SSL$CONF_UTIL 'SSL_CONF_FILE' GET
$ SET_CONF_DATA := @SSL$COM:SSL$CONF_UTIL 'SSL_CONF_FILE' SET
$!
$ ESC[0,8] = 27 ! Set the Escape Character
$ BELL[0,8] = 7 ! Ring the terminal Bell
$ RED = 1 ! Color - Red
$ FGD = 30 ! Foreground
$ BGD = 0 ! Background
$ CSCR = ESC + "[2J" ! Clear the Screen
$ CEOS = ESC + "[0J" ! Clear to the End of the Screen
$ CEOL = ESC + "[0K" ! Clear to the End of the Line
$ NORM = ESC + "[0m" ! Turn Attributes off
$ BLNK = ESC + "[5m" ! Turn on BLINK Attribute
$ WIDE = ESC + "#6" ! Turn on WIDE Attribute
$!
$!------------------------------------------------------------------------------
$! Run the SSL setup if it hasn't been run yet
$!------------------------------------------------------------------------------
$!
$ IF F$TRNLNM ("SSL$ROOT") .EQS. ""
$ THEN
$ IF F$SEARCH ("SSL$COM:SSL$INIT_ENV.COM") .NES. ""
$ THEN
$ @SSL$COM:SSL$INIT_ENV.COM
$ ELSE
$ SAY BELL, "Unable to locate SSL$COM:SSL$INIT_ENV.COM ..."
$ GOTO EXIT
$ ENDIF
$ ENDIF
$!
$!------------------------------------------------------------------------------
$! Display the Page Header
$!------------------------------------------------------------------------------
$!
$ INIT_TERM
$ BCOLOR = BGD
$ FCOLOR = FGD + RED
$ COLOR = ESC + "[''BCOLOR';''FCOLOR'm"
$!
$ TEXT = "SSL Certificate Tool"
$ COL = (TT_COLS - (F$LENGTH (TEXT) * 2)) / 4
$!
$ SAY ESC + "[01;01H", CSCR
$ SAY ESC + "[02;''COL'H", COLOR, WIDE, TEXT, NORM
$!
$ TEXT = "Create Self-Signed Certificate"
$ COL = (TT_COLS - F$LENGTH (TEXT)) / 2
$!
$ SAY ESC + "[04;01H"
$ SAY ESC + "[04;''COL'H", COLOR, TEXT, NORM
$!
$ ROW = 6
$ COL = 2
$ TOP_ROW = ROW
$ MSG_ROW = TT_ROWS - 1
$!
$!------------------------------------------------------------------------------
$! Initialize the Request Data
$!------------------------------------------------------------------------------
$!
$ IF F$SEARCH ("''SSL_CONF_FILE'") .NES. ""
$ THEN
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Reading Configuration ...", NORM
$ ELSE
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Initializing Configuration ...", NORM
$ ENDIF
$!
$ _request_name = "req"
$!
$ _distinguished_name = "REQ_distinguished_name"
$ _distinguished_name_upd = "Y"
$!
$ _default_bits = "1024"
$ _default_bits_upd = "Y"
$!
$ _default_keyfile = "SSL$KEY:SERVER.KEY"
$ _default_keyfile_upd = "Y"
$!
$ _default_crtfile = "SSL$CRT:SERVER.CRT"
$ _default_crtfile_upd = "Y"
$!
$ _countryName_prompt = "Country Name ?"
$ _countryName_min = "2"
$ _countryName_max = "2"
$ _countryName_default = "US"
$ _countryName_upd = "Y"
$ _countryName_cnt = 4
$!
$ _stateOrProvinceName_prompt = "State or Province Name ?"
$ _stateOrProvinceName_default = ""
$ _stateOrProvinceName_upd = "Y"
$ _stateOrProvinceName_cnt = 2
$!
$ _localityName_prompt = "City Name ?"
$ _localityName_default = ""
$ _localityName_upd = "Y"
$ _localityName_cnt = 2
$!
$ _0organizationName_prompt = "Organization Name ?"
$ _0organizationName_default = ""
$ _0organizationName_upd = "Y"
$ _0organizationName_cnt = 2
$!
$ _organizationalUnitName_prompt = "Organization Unit Name ?"
$ _organizationalUnitName_default = ""
$ _organizationalUnitName_upd = "Y"
$ _organizationalUnitName_cnt = 2
$!
$ _commonName_prompt = "Common Name ?"
$ _commonName_max = "64"
$ HOSTNAME -s _commonName_default
$ _commonName_upd = "Y"
$ _commonName_cnt = 3
$!
$ _emailAddress_prompt = "Email Address ?"
$ _emailAddress_max = "40"
$ _emailAddress_default = "webmaster@''_commonName_default'"
$ _emailAddress_upd = "Y"
$ _emailAddress_cnt = 3
$!
$ IF F$SEARCH ("''SSL_CONF_FILE'") .NES. ""
$ THEN
$ GET_CONF_DATA "[''_request_name']#distinguished_name"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _distinguished_name = SSL_CONF_DATA
$ _distinguished_name_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_request_name']#default_bits"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_bits = SSL_CONF_DATA
$ _default_bits_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_request_name']#default_keyfile"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_keyfile = F$PARSE (SSL_CONF_DATA,"SSL$ROOT:",,"DEVICE") + -
F$PARSE (SSL_CONF_DATA,"[KEY]",,"DIRECTORY") + -
F$PARSE (SSL_CONF_DATA,"SERVER",,"NAME") + -
F$PARSE (SSL_CONF_DATA,".KEY",,"TYPE")
$ _default_keyfile_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_request_name']#default_crtfile"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_crtfile = F$PARSE (SSL_CONF_DATA,"SSL$ROOT:",,"DEVICE") + -
F$PARSE (SSL_CONF_DATA,"[CRT]",,"DIRECTORY") + -
F$PARSE (SSL_CONF_DATA,"SERVER",,"NAME") + -
F$PARSE (SSL_CONF_DATA,".CRT",,"TYPE")
$ _default_crtfile_upd = "N"
$ ENDIF
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#countryName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _countryName_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#countryName_min"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _countryName_min = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#countryName_max"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _countryName_max = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#countryName_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _countryName_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _countryName_cnt .EQS. CTR THEN _countryName_upd = "N"
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#stateOrProvinceName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _stateOrProvinceName_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#stateOrProvinceName_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _stateOrProvinceName_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _stateOrProvinceName_cnt .EQ. CTR THEN _stateOrProvinceName_upd = "N"
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#localityName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _localityName_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#localityName_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _localityName_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _localityName_cnt .EQ. CTR THEN _localityName_default_upd = "N"
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#0.organizationName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _0organizationName_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#0.organizationName_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _0organizationName_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _0organizationName_cnt .EQ. CTR THEN _0organizationName_default_upd = "N"
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#organizationalUnitName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _organizationalUnitName_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#organizationalUnitName_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _organizationalUnitName_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _organizationalUnitName_cnt .EQ. CTR THEN _organizationalUnitName_upd = "N"
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#commonName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _commonName_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#commonName_max"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _commonName_max = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#commonName_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _commonName_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _commonName_cnt .EQ. CTR THEN _commonName_default_upd = "N"
$!
$ CTR = 0
$ GET_CONF_DATA "[''_distinguished_name']#emailAddress"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _emailAddress_prompt = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#emailAddress_max"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _emailAddress_max = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ GET_CONF_DATA "[''_distinguished_name']#emailAddress_default"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _emailAddress_default = SSL_CONF_DATA
$ CTR = CTR + 1
$ ENDIF
$ IF _emailAddress_cnt .EQ. CTR THEN _emailAddress_default_upd = "N"
$ ENDIF
$!
$ SET_USER_DATA "[]#encrypt_key#-#N#Encrypt Private Key ?#S##1##Y#N"
$ SET_USER_DATA "[]#pem_pass_phrase#-##PEM Pass Phrase ?#P#1###Y#Y"
$ SET_USER_DATA "[''_request_name']#default_bits#D#''_default_bits'#Encryption Bits ?#I###''_default_bits_upd'#Y#N"
$ SET_USER_DATA "[''_request_name']#default_keyfile#D#''_default_keyfile'#Certificate Key File ?#F###''_default_keyfile_upd'#Y#N"
$ SET_USER_DATA "[''_request_name']#default_crtfile#D#''_default_crtfile'#Certificate File ?#F###''_default_crtfile_upd'#Y#N"
$ SET_USER_DATA "[''_request_name']#distinguished_name#D#''_distinguished_name'##S###''_distinguished_name_upd'#N#N"
$ SET_USER_DATA "[''_distinguished_name']#countryName#P#''_countryName_default'#''_countryName_prompt'#S#''_countryName_min'#''#''_countryName_upd'#Y#N"
$ SET_USER_DATA "[''_distinguished_name']#stateOrProvinceName#P#''_stateOrProvinceName_default'#''_stateOrProvinceName_prompt'####''_stateOrProvinceName_upd'#Y#N"
$ SET_USER_DATA "[''_distinguished_name']#localityName#P#''_localityName_default'#''_localityName_prompt'#S###''_localityName_upd'#Y#N"
$ SET_USER_DATA "[''_distinguished_name']#0.organizationName#P#''_0organizationName_default'#''_0organizationName_prompt'#S###''_0organizationalName_upd'#Y#N"
$ SET_USER_DATA "[''_distinguished_name']#organizationalUnitName#P#''_organizationalUnitName_default'#''_organizationalUnitName_prompt#S###''_organizationalUnitName_upd'#Y#N"
$ SET_USER_DATA "[''_distinguished_name']#commonName#P#''_commonName_default'#''_commonName_prompt'#S##''_commonName_max'#''_commonName_upd'#Y#N"
$ SET_USER_DATA "[''_distinguished_name']#emailAddress#P#''_emailAddress_default'#''_emailAddress_prompt'#S##''_emailAddress_max'#''_emailAddress_upd'#Y#N"
$ SET_USER_DATA "[]#display_certificate#-#N#Display the Certificate ?#S##1##Y#N"
$!
$ SAY ESC + "[''MSG_ROW';01H", CEOS
$!
$!------------------------------------------------------------------------------
$! Confirm/Update the SSL Configuration Data
$!------------------------------------------------------------------------------
$!
$ CTR = 1
$!
$PROMPT_LOOP:
$!
$ IF CTR .LE. SSL_USER_DATA_MAX
$ THEN
$ KEY = F$ELEMENT (0,"#",SSL_USER_DATA_'CTR') ! Key Name
$ ITM = F$ELEMENT (1,"#",SSL_USER_DATA_'CTR') ! Item Name
$ VAL = F$ELEMENT (2,"#",SSL_USER_DATA_'CTR') ! Item Value Contains Default or Prompt
$ DEF = F$ELEMENT (3,"#",SSL_USER_DATA_'CTR') ! Default Value
$ PRM = F$ELEMENT (4,"#",SSL_USER_DATA_'CTR') ! Prompt Value
$ TYP = F$ELEMENT (5,"#",SSL_USER_DATA_'CTR') ! Value Type
$ MIN = F$ELEMENT (6,"#",SSL_USER_DATA_'CTR') ! Value Minimum Length
$ MAX = F$ELEMENT (7,"#",SSL_USER_DATA_'CTR') ! Value Maximum Length
$ UPD = F$ELEMENT (8,"#",SSL_USER_DATA_'CTR') ! Entry Updated ?
$ REQ = F$ELEMENT (9,"#",SSL_USER_DATA_'CTR') ! Entry Required for Input ?
$ CFM = F$ELEMENT (10,"#",SSL_USER_DATA_'CTR')! Confirm Input ?
$!
$! The PEM Pass Phrase prompt is dependant on the answer to encrypt the private key
$!
$ IF KEY .EQS. "[]" .AND. ITM .EQS. "pem_pass_phrase"
$ THEN
$ GET_USER_DATA "[]#encrypt_key"
$ _encrypt_key = SSL_USER_DATA
$ IF F$EDIT (_encrypt_key,"UPCASE") .NES. "Y"
$ THEN
$ CTR = CTR + 1
$ GOTO PROMPT_LOOP
$ ENDIF
$ ENDIF
$!
$ CONFIRMED = 0
$ IF REQ .EQS. "N"
$ THEN
$ CTR = CTR + 1
$ GOTO PROMPT_LOOP
$ ENDIF
$ IF ROW .GT. MSG_ROW - 2
$ THEN
$ SAY ESC + "[''TOP_ROW';01H", CEOS
$ ROW = TOP_ROW
$ ENDIF
$!
$CONFIRM_LOOP:
$!
$ IF PRM .EQS. ""
$ THEN
$ PROMPT = ESC + "[''ROW';''COL'H''ITM' ? [''DEF'] ''CEOL'"
$ ELSE
$ PROMPT = ESC + "[''ROW';''COL'H''PRM' [''DEF'] ''CEOL'"
$ ENDIF
$ IF TYP .EQS. "P" THEN SET TERMINAL /NOECHO
$ ASK "''PROMPT'" ANS /END_OF_FILE=EXIT
$ IF TYP .EQS. "P" THEN SET TERMINAL /ECHO
$ ANS = F$EDIT (ANS,"TRIM")
$ IF ANS .EQS. "" THEN ANS = DEF
$ IF TYP .EQS. "F"
$ THEN
$ ANS = F$PARSE ("''ANS'","''DEF'",,,"SYNTAX_ONLY")
$ ENDIF
$ IF TYP .EQS. "I" .AND. F$TYPE (ANS) .NES. "INTEGER"
$ THEN
$ CALL INVALID_ENTRY
$ SAY ESC + "[''ROW';01H", CEOS
$ GOTO PROMPT_LOOP
$ ENDIF
$ IF (TYP .EQS. "S" .OR. TYP .EQS. "P") .AND. -
((MIN .NES. "" .AND. F$LENGTH (ANS) .LT. F$INTEGER(MIN)) .OR. -
(MAX .NES. "" .AND. F$LENGTH (ANS) .GT. F$INTEGER(MAX)))
$ THEN
$ CALL INVALID_ENTRY
$ SAY ESC + "[''ROW';01H", CEOS
$ IF TYP .EQS. "S" THEN GOTO PROMPT_LOOP
$ IF TYP .EQS. "P" THEN GOTO CONFIRM_LOOP
$ ENDIF
$ ROW = ROW + 1
$ IF CFM .EQS. "Y"
$ THEN
$ IF CONFIRMED .EQ. 0
$ THEN
$ CONFIRMED = 1
$ CONFIRMED_ANS = ANS
$ PRM = "Confirm ''PRM'"
$ GOTO CONFIRM_LOOP
$ ELSE
$ IF ANS .NES. CONFIRMED_ANS
$ THEN
$ CALL INVALID_ENTRY
$ ROW = ROW - 2
$ SAY ESC + "[''ROW';01H", CEOS
$ GOTO PROMPT_LOOP
$ ENDIF
$ ENDIF
$ ENDIF
$ IF ANS .NES. DEF THEN SSL_USER_DATA_'CTR' = "''KEY'#''ITM'#''VAL'#''ANS'#''PRM'#''TYP'#''MIN'#''MAX'#Y#''REQ'#''CFM'"
$ CTR = CTR + 1
$ GOTO PROMPT_LOOP
$ ENDIF
$!
$!------------------------------------------------------------------------------
$! Save the SSL Configuration Data
$!------------------------------------------------------------------------------
$!
$ CTR = 1
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Saving Configuration ...", NORM
$!
$SAVE_CONF_LOOP:
$!
$ IF CTR .LE. SSL_USER_DATA_MAX
$ THEN
$ KEY = F$ELEMENT (0,"#",SSL_USER_DATA_'CTR') ! Key Name
$ ITM = F$ELEMENT (1,"#",SSL_USER_DATA_'CTR') ! Item Name
$ VAL = F$ELEMENT (2,"#",SSL_USER_DATA_'CTR') ! Item Value Contains Default or Prompt
$ DEF = F$ELEMENT (3,"#",SSL_USER_DATA_'CTR') ! Default Value
$ PRM = F$ELEMENT (4,"#",SSL_USER_DATA_'CTR') ! Prompt Value
$ TYP = F$ELEMENT (5,"#",SSL_USER_DATA_'CTR') ! Value Type
$ MIN = F$ELEMENT (6,"#",SSL_USER_DATA_'CTR') ! Value Minimum Length
$ MAX = F$ELEMENT (7,"#",SSL_USER_DATA_'CTR') ! Value Maximum Length
$ UPD = F$ELEMENT (8,"#",SSL_USER_DATA_'CTR') ! Entry Updated ?
$ REQ = F$ELEMENT (9,"#",SSL_USER_DATA_'CTR') ! Entry Required for Input ?
$ CFM = F$ELEMENT (10,"#",SSL_USER_DATA_'CTR')! Confirm Input ?
$ IF UPD .NES. "Y" .OR. VAL .EQS. "-"
$ THEN
$ CTR = CTR + 1
$ GOTO SAVE_CONF_LOOP
$ ENDIF
$ IF VAL .EQS. "D"
$ THEN
$ SET_CONF_DATA "''KEY'#''ITM'" "''DEF'"
$ ELSE
$ SET_CONF_DATA "''KEY'#''ITM'" "''PRM'"
$ SET_CONF_DATA "''KEY'#''ITM'_default" "''DEF'"
$ ENDIF
$ IF MIN .NES. "" THEN SET_CONF_DATA "''KEY'#''ITM'_min" "''MIN'"
$ IF MAX .NES. "" THEN SET_CONF_DATA "''KEY'#''ITM'_max" "''MAX'"
$ CTR = CTR + 1
$ GOTO SAVE_CONF_LOOP
$ ENDIF
$!
$ PURGE /NOLOG /NOCONFIRM 'SSL_CONF_FILE'
$ RENAME 'SSL_CONF_FILE'; ;1
$!
$ SAY ESC + "[''MSG_ROW';01H", CEOS
$!
$!------------------------------------------------------------------------------
$! Create the Server Certificiate
$!------------------------------------------------------------------------------
$!
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Creating Self-Signed Certificate ...", NORM
$!
$ X1 = 2
$ Y1 = TOP_ROW
$ X2 = TT_COLS - 2
$ Y2 = MSG_ROW - 1
$!
$ GET_USER_DATA "[]#encrypt_key"
$ _encrypt_key = SSL_USER_DATA
$ IF F$EDIT (_encrypt_key,"UPCASE") .EQS. "Y"
$ THEN
$ GET_USER_DATA "[]#pem_pass_phrase"
$ _pem_pass_phrase = SSL_USER_DATA
$ ENDIF
$ GET_USER_DATA "[''_request_name']#default_bits"
$ _default_bits = SSL_USER_DATA
$ GET_USER_DATA "[''_request_name']#default_keyfile"
$ _default_keyfile = SSL_USER_DATA
$ GET_USER_DATA "[''_request_name']#default_crtfile"
$ _default_crtfile = SSL_USER_DATA
$ GET_USER_DATA "[]#display_certificate"
$ _display_certificate = SSL_USER_DATA
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SHOW SYSTEM /FULL /OUT=SYS$LOGIN:SSL_REQ_'PID'.RND
$!
$ OPEN /WRITE OFILE SYS$LOGIN:SSL_REQ_'PID'.COM
$ WRITE OFILE "$ DEFINE /USER /NOLOG RANDFILE SYS$LOGIN:SSL_REQ_''PID'.RND"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$ERROR SYS$LOGIN:SSL_REQ_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$OUTPUT SYS$LOGIN:SSL_REQ_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$COMMAND SYS$INPUT"
$ IF F$EDIT (_encrypt_key,"UPCASE") .EQS. "Y"
$ THEN
$ WRITE OFILE "$ OPENSSL req -config ''SSL_CONF_FILE' -new -days 365 -x509 -keyout ''_default_keyfile' -out ''_default_crtfile'"
$ WRITE OFILE "''_pem_pass_phrase'"
$ WRITE OFILE "''_pem_pass_phrase'"
$ ELSE
$ WRITE OFILE "$ OPENSSL req -config ''SSL_CONF_FILE' -nodes -new -days 365 -x509 -keyout ''_default_keyfile' -out ''_default_crtfile'"
$ ENDIF
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ WRITE OFILE ""
$ CLOSE OFILE
$!
$ @SYS$LOGIN:SSL_REQ_'PID'.COM
$!
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.COM;*
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SEARCH SYS$LOGIN:SSL_REQ_'PID'.LOG /OUT=SYS$LOGIN:SSL_REQ_'PID'.ERR ":error:"
$ IF F$SEARCH ("SYS$LOGIN:SSL_REQ_''PID'.ERR") .NES. ""
$ THEN
$ IF F$FILE_ATTRIBUTE ("SYS$LOGIN:SSL_REQ_''PID'.ERR","ALQ") .NE. 0
$ THEN
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.ERR;*
$ SAY ESC + "[''MSG_ROW';01H''BELL'''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_REQ_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ERROR >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.LOG;*
$ GOTO EXIT
$ ENDIF
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.ERR;*
$ ENDIF
$!
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.LOG;*
$!
$ IF F$EDIT (_display_certificate,"TRIM,UPCASE") .EQS. "Y"
$ THEN
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Generating Output ...", NORM, CEOL
$!
$ OPEN /WRITE OFILE SYS$LOGIN:SSL_X509_'PID'.COM
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$ERROR SYS$LOGIN:SSL_X509_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$OUTPUT SYS$LOGIN:SSL_X509_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$COMMAND SYS$INPUT"
$ WRITE OFILE "$ OPENSSL x509 -noout -text -in ''_default_crtfile'"
$ CLOSE OFILE
$!
$ @SYS$LOGIN:SSL_X509_'PID'.COM
$!
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.COM;*
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SEARCH SYS$LOGIN:SSL_X509_'PID'.LOG /OUT=SYS$LOGIN:SSL_X509_'PID'.ERR ":error:"
$ IF F$SEARCH ("SYS$LOGIN:SSL_X509_''PID'.ERR") .NES. ""
$ THEN
$ IF F$FILE_ATTRIBUTE ("SYS$LOGIN:SSL_X509_''PID'.ERR","ALQ") .NE. 0
$ THEN
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.ERR;*
$ SAY ESC + "[''MSG_ROW';01H''BELL'''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_X509_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ERROR >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.LOG;*
$ GOTO EXIT
$ ENDIF
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.ERR;*
$ ENDIF
$!
$ SAY ESC + "[''MSG_ROW';01H''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_X509_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ''_default_crtfile' >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.LOG;*
$ GOTO EXIT
$ ENDIF
$!
$ TEXT = "Press return to continue"
$ COL = (TT_COLS - F$LENGTH (TEXT)) / 2
$!
$ SAY ESC + "[''MSG_ROW';01H", CEOS
$ PROMPT = ESC + "[''MSG_ROW';''COL'H''TEXT'"
$ ASK "''PROMPT'" OPT
$!
$GOTO EXIT
z$!
$!------------------------------------------------------------------------------
$! Set the User Data
$!------------------------------------------------------------------------------
$!
$SET_USER_DATA: SUBROUTINE
$!
$ IF F$TYPE (SSL_USER_DATA_MAX) .EQS. ""
$ THEN
$ SSL_USER_DATA_MAX == 1
$ ELSE
$ SSL_USER_DATA_MAX == SSL_USER_DATA_MAX + 1
$ ENDIF
$!
$ SSL_USER_DATA_'SSL_USER_DATA_MAX' == "''P1'"
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Find the Request Data
$!------------------------------------------------------------------------------
$!
$GET_USER_DATA: SUBROUTINE
$!
$ CTR = 1
$ USER_KEY = F$ELEMENT (0,"#",P1)
$ USER_ITM = F$ELEMENT (1,"#",P1)
$!
$GET_USER_DATA_LOOP:
$!
$ IF CTR .LE. SSL_USER_DATA_MAX
$ THEN
$ KEY = F$ELEMENT (0,"#",SSL_USER_DATA_'CTR') ! Key Name
$ ITM = F$ELEMENT (1,"#",SSL_USER_DATA_'CTR') ! Item Name
$ VAL = F$ELEMENT (2,"#",SSL_USER_DATA_'CTR') ! Item Value Contains Default or Prompt
$ DEF = F$ELEMENT (3,"#",SSL_USER_DATA_'CTR') ! Default Value
$ PRM = F$ELEMENT (4,"#",SSL_USER_DATA_'CTR') ! Prompt Value
$ IF USER_KEY .NES. KEY .OR. USER_ITM .NES. ITM
$ THEN
$ CTR = CTR + 1
$ GOTO GET_USER_DATA_LOOP
$ ENDIF
$ IF VAL .EQS. "-" THEN SSL_USER_DATA == "''DEF'"
$ IF VAL .EQS. "D" THEN SSL_USER_DATA == "''DEF'"
$ IF VAL .EQS. "P" THEN SSL_USER_DATA == "''PRM'"
$ ENDIF
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Delete the User Data
$!------------------------------------------------------------------------------
$!
$DEL_USER_DATA: SUBROUTINE
$!
$ IF F$TYPE (SSL_USER_DATA_MAX) .EQS. "" THEN GOTO DEL_USER_DATA_END
$!
$DEL_USER_DATA_LOOP:
$!
$ IF F$TYPE (SSL_USER_DATA_'SSL_USER_DATA_MAX') .NES. ""
$ THEN
$ DELETE /SYMBOL /GLOBAL SSL_USER_DATA_'SSL_USER_DATA_MAX'
$ SSL_USER_DATA_MAX == SSL_USER_DATA_MAX - 1
$ GOTO DEL_USER_DATA_LOOP
$ ENDIF
$!
$ DELETE /SYMBOL /GLOBAL SSL_USER_DATA_MAX
$!
$DEL_USER_DATA_END:
$!
$ IF F$TYPE (SSL_USER_DATA) .NES. "" THEN DELETE /SYMBOL /GLOBAL SSL_USER_DATA
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Display the invalid entry
$!------------------------------------------------------------------------------
$!
$INVALID_ENTRY: SUBROUTINE
$!
$ SAY ESC + "[''MSG_ROW';01H", BELL, " Invalid Entry, Try again ...''CEOL'"
$ Wait 00:00:01.5
$ SAY ESC + "[''MSG_ROW';01H", CEOL
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$!
$!------------------------------------------------------------------------------
$!
$EXIT:
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ CLOSE OFILE
$!
$ DEL_USER_DATA
$!
$ IF F$TYPE (SSL_CONF_DATA) .NES. "" THEN DELETE /SYMBOL /GLOBAL SSL_CONF_DATA
$!
$ IF F$GETDVI ("TT:","TT_NOECHO") .AND. .NOT. TT_NOECHO THEN SET TERMINAL /ECHO
$!
$ IF F$SEARCH ("SYS$LOGIN:SSL_REQ_''PID'.%%%;*") .NES. "" THEN DELETE/NOLOG/NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.%%%;*
$ IF F$SEARCH ("SYS$LOGIN:SSL_X509_''PID'.%%%;*") .NES. "" THEN DELETE/NOLOG/NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.%%%;*
$!
$ Verify = F$VERIFY (Verify)
$!
$ EXIT

View File

@@ -0,0 +1,205 @@
$!
$!------------------------------------------------------------------------------
$! SSL$SHOW_FILE.COM - SSL Show File procedure
$!------------------------------------------------------------------------------
$!
$ Verify = F$VERIFY (0)
$ Set NoOn
$ Set NoControl=Y
$!
$!------------------------------------------------------------------------------
$! Description
$!------------------------------------------------------------------------------
$!
$! This procedure display the contents of a given file in a box size specified.
$!
$! The parameters used are:
$!
$! P1 - File to View
$! P2 - X1 coordinate
$! P3 - Y1 coordinate
$! P4 - X2 coordinate
$! P5 - Y3 coordinate
$! P6 - File Box Title (Optional)
$!
$!------------------------------------------------------------------------------
$! Define symbols
$!------------------------------------------------------------------------------
$!
$ SAY := WRITE SYS$OUTPUT
$ ASK := READ SYS$COMMAND /END_OF_FILE=EXIT /PROMPT=
$ On Control_Y THEN GOTO EXIT
$ Set Control=Y
$!
$ DRAW_BOX := @SSL$COM:SSL$DRAW_BOX
$ FILL_BOX := @SSL$COM:SSL$FILL_BOX
$!
$ ESC[0,8] = 27 ! Set the Escape Character
$ CEOL = ESC + "[0K" ! Clear to the End of the Line
$ NORM = ESC + "[0m" ! Turn Attributes off
$ BOLD = ESC + "[1m" ! Turn on BOLD Attribute
$!
$!------------------------------------------------------------------------------
$! Display the Page Header
$!------------------------------------------------------------------------------
$!
$ REC_MAX = 0
$ OPEN /READ IFILE 'P1'
$!
$READ_LOOP:
$!
$ READ /END_OF_FILE=READ_END IFILE IREC
$ REC_MAX = REC_MAX + 1
$ REC_'REC_MAX' = IREC
$ GOTO READ_LOOP
$!
$READ_END:
$!
$ CLOSE IFILE
$!
$ IF REC_MAX .EQ. 0
$ THEN
$ DRAW_BOX 'P2' 'P3' 'P4' 'P5' "''P6'" " ** End-of-File **, Press Return to Exit "
$ INPUT_ROW = P5 + 1
$ PROMPT = ESC + "[''INPUT_ROW';01H ''CEOL'"
$ ASK "''PROMPT'" OPT
$ GOTO EXIT
$ ENDIF
$!
$ COL = P2 + 2
$ ROW = P3 + 2
$ TOP_ROW = ROW
$ INPUT_ROW = P5 + 1
$ BOX_WIDTH = P4 - (P2 + 2)
$ BOX_HEIGHT = P5 - (P3 + 3)
$!
$ REC_CTR = 1
$ PAGE_CTR = 1
$ PAGE_'PAGE_CTR'_REC_CTR = REC_CTR
$ RECS_PER_PAGE = BOX_HEIGHT
$ PAGE_MAX = REC_MAX / RECS_PER_PAGE
$ IF PAGE_MAX * RECS_PER_PAGE .LT. REC_MAX THEN PAGE_MAX = PAGE_MAX + 1
$!
$ DRAW_BOX 'P2' 'P3' 'P4' 'P5' "''P6'" " Enter B for Back, N for Next, Ctrl-Z to Exit "
$ PAGE_TXT = F$FAO (" Page !UL of !UL ", PAGE_CTR, PAGE_MAX)
$ _COL = P2 + (BOX_WIDTH - F$LENGTH (PAGE_TXT)) + 2
$ SAY ESC + "[''P3';''_COL'H''BOLD'''PAGE_TXT'''NORM'"
$!
$DISPLAY_LOOP:
$!
$ IF REC_CTR .LE. REC_MAX .AND. F$TYPE (REC_'REC_CTR') .NES. ""
$ THEN
$ REC = REC_'REC_CTR'
$ ENDIF
$ WRAP_IN_PROGRESS = 0
$!
$WRAP_LOOP:
$!
$ IF ROW .LE. (P5 - 2) .AND. -
REC_CTR .LE. PAGE_CTR * RECS_PER_PAGE
$ THEN
$ IF F$LENGTH (REC) .GT. BOX_WIDTH
$ THEN
$ IF WRAP_IN_PROGRESS .EQ. 0
$ THEN
$ WRAP_IN_PROGRESS = 1
$ _COL = COL
$ ELSE
$ _COL = COL - 1
$ ENDIF
$ REC_SEG = F$EXTRACT (0, BOX_WIDTH, REC)
$ SAY ESC + "[''ROW';''_COL'H", REC_SEG
$ REC = ">" + F$EXTRACT (BOX_WIDTH, F$LENGTH (REC)-BOX_WIDTH, REC)
$ ROW = ROW + 1
$ GOTO WRAP_LOOP
$ ELSE
$ IF REC_CTR .LE. REC_MAX .AND. F$TYPE (REC_'REC_CTR') .NES. ""
$ THEN
$ IF WRAP_IN_PROGRESS .EQ. 1
$ THEN
$ _COL = COL - 1
$ ELSE
$ _COL = COL
$ ENDIF
$ SAY ESC + "[''ROW';''_COL'H", REC
$ ENDIF
$ ENDIF
$ ELSE
$!
$RETRY:
$!
$ PROMPT = ESC + "[''INPUT_ROW';01H ''CEOL'"
$ ASK "''PROMPT'" OPT
$ IF F$EDIT (OPT,"TRIM,UPCASE") .NES. "B" .AND. -
F$EDIT (OPT,"TRIM,UPCASE") .NES. "N"
$ THEN
$ CALL INVALID_ENTRY
$ GOTO RETRY
$ ENDIF
$ IF F$EDIT (OPT,"TRIM,UPCASE") .EQS. "B"
$ THEN
$ IF PAGE_CTR .GT. 1
$ THEN
$ ROW = TOP_ROW
$ PAGE_CTR = PAGE_CTR - 1
$ REC_CTR = PAGE_'PAGE_CTR'_REC_CTR
$ PAGE_TXT = F$FAO (" Page !UL of !UL ", PAGE_CTR, PAGE_MAX)
$ _COL = P2 + (BOX_WIDTH - F$LENGTH (PAGE_TXT)) + 2
$ SAY ESC + "[''P3';''_COL'H''BOLD'''PAGE_TXT'''NORM'"
$ FILL_BOX 'P2' 'P3' 'P4' 'P5'
$ GOTO DISPLAY_LOOP
$ ELSE
$ CALL INVALID_ENTRY
$ GOTO RETRY
$ ENDIF
$ ENDIF
$ IF F$EDIT (OPT,"TRIM,UPCASE") .EQS. "N"
$ THEN
$ IF PAGE_CTR .LT. PAGE_MAX
$ THEN
$ PAGE_CTR = PAGE_CTR + 1
$ PAGE_'PAGE_CTR'_REC_CTR = REC_CTR
$ PAGE_TXT = F$FAO (" Page !UL of !UL ", PAGE_CTR, PAGE_MAX)
$ _COL = P2 + (BOX_WIDTH - F$LENGTH (PAGE_TXT)) + 2
$ SAY ESC + "[''P3';''_COL'H''BOLD'''PAGE_TXT'''NORM'"
$ FILL_BOX 'P2' 'P3' 'P4' 'P5'
$ ELSE
$ CALL INVALID_ENTRY
$ GOTO RETRY
$ ENDIF
$ ENDIF
$ FILL_BOX 'P2' 'P3' 'P4' 'P5'
$ ROW = TOP_ROW
$ GOTO WRAP_LOOP
$ ENDIF
$ REC_CTR = REC_CTR + 1
$ ROW = ROW + 1
$ GOTO DISPLAY_LOOP
$!
$!------------------------------------------------------------------------------
$! Display the invalid entry
$!------------------------------------------------------------------------------
$!
$INVALID_ENTRY: SUBROUTINE
$!
$ SAY ESC + "[''INPUT_ROW';01H", BELL, " Invalid Entry, Try again ...''CEOL'"
$ Wait 00:00:01.5
$ SAY ESC + "[''INPUT_ROW';01H", CEOL
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Exit
$!------------------------------------------------------------------------------
$!
$EXIT:
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ CLOSE IFILE
$!
$ Verify = F$VERIFY (Verify)
$!
$ EXIT

View File

@@ -0,0 +1,759 @@
$!
$!------------------------------------------------------------------------------
$! SSL$SIGN_CERT.COM - SSL Sign Certificate Request procedure
$!------------------------------------------------------------------------------
$!
$ Verify = F$VERIFY (0)
$ Set NoOn
$ Set NoControl=Y
$!
$!------------------------------------------------------------------------------
$! Description
$!------------------------------------------------------------------------------
$!
$! This procedure prompts the user through creating a Server Certificate.
$!
$! There are no parameters used.
$!
$!------------------------------------------------------------------------------
$! Define symbols
$!------------------------------------------------------------------------------
$!
$ DELETE := DELETE
$ SAY := WRITE SYS$OUTPUT
$ ASK := READ SYS$COMMAND /END_OF_FILE=EXIT /PROMPT=
$ PID = F$GETJPI ("","PID")
$ TT_NOECHO = F$GETDVI ("TT:","TT_NOECHO")
$ On Control_Y THEN GOTO EXIT
$ Set Control=Y
$!
$ TT_ROWS = F$GETDVI ("TT:","TT_PAGE")
$ TT_COLS = F$GETDVI ("TT:","DEVBUFSIZ")
$!
$ GET_USER_DATA := CALL GET_USER_DATA
$ SET_USER_DATA := CALL SET_USER_DATA
$ DEL_USER_DATA := CALL DEL_USER_DATA
$ INIT_TERM := @SSL$COM:SSL$INIT_TERM
$ SHOW_FILE := @SSL$COM:SSL$SHOW_FILE
$ SSL_CONF_FILE = F$TRNLMN ("SSL$CA_CONF")
$ GET_CONF_DATA := @SSL$COM:SSL$CONF_UTIL 'SSL_CONF_FILE' GET
$ SET_CONF_DATA := @SSL$COM:SSL$CONF_UTIL 'SSL_CONF_FILE' SET
$!
$ ESC[0,8] = 27 ! Set the Escape Character
$ BELL[0,8] = 7 ! Ring the terminal Bell
$ RED = 1 ! Color - Red
$ FGD = 30 ! Foreground
$ BGD = 0 ! Background
$ CSCR = ESC + "[2J" ! Clear the Screen
$ CEOS = ESC + "[0J" ! Clear to the End of the Screen
$ CEOL = ESC + "[0K" ! Clear to the End of the Line
$ NORM = ESC + "[0m" ! Turn Attributes off
$ BLNK = ESC + "[5m" ! Turn on BLINK Attribute
$ WIDE = ESC + "#6" ! Turn on WIDE Attribute
$!
$!------------------------------------------------------------------------------
$! Run the SSL setup if it hasn't been run yet
$!------------------------------------------------------------------------------
$!
$ IF F$TRNLNM ("SSL$ROOT") .EQS. ""
$ THEN
$ IF F$SEARCH ("SSL$COM:SSL$INIT_ENV.COM") .NES. ""
$ THEN
$ @SSL$COM:SSL$INIT_ENV.COM
$ ELSE
$ SAY BELL, "Unable to locate SSL$COM:SSL$INIT_ENV.COM ..."
$ GOTO EXIT
$ ENDIF
$ ENDIF
$!
$!------------------------------------------------------------------------------
$! Display the Page Header
$!------------------------------------------------------------------------------
$!
$ INIT_TERM
$ BCOLOR = BGD
$ FCOLOR = FGD + RED
$ COLOR = ESC + "[''BCOLOR';''FCOLOR'm"
$!
$ TEXT = "SSL Certificate Tool"
$ COL = (TT_COLS - (F$LENGTH (TEXT) * 2)) / 4
$!
$ SAY ESC + "[01;01H", CSCR
$ SAY ESC + "[02;''COL'H", COLOR, WIDE, TEXT, NORM
$!
$ TEXT = "Sign Certificate Request"
$ COL = (TT_COLS - F$LENGTH (TEXT)) / 2
$!
$ SAY ESC + "[04;01H"
$ SAY ESC + "[04;''COL'H", COLOR, TEXT, NORM
$!
$ CTR = 1
$ ROW = 6
$ COL = 2
$ TOP_ROW = ROW
$ MSG_ROW = TT_ROWS - 1
$!
$!------------------------------------------------------------------------------
$! Initialize the Request Data
$!------------------------------------------------------------------------------
$!
$ IF F$SEARCH ("''SSL_CONF_FILE'") .NES. ""
$ THEN
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Reading Configuration ...", NORM
$ ELSE
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Initializing Configuration ...", NORM
$ ENDIF
$!
$ _ca = "ca"
$!
$ _default_ca = "CA_default_ca"
$ _default_ca_upd = "Y"
$!
$ _default_serfile = "SSL$DB:SERIAL.TXT"
$ _default_serfile_upd = "Y"
$!
$ _default_idxfile = "SSL$DB:INDEX.TXT"
$ _default_idxfile_upd = "Y"
$!
$ _default_crtfile = "SSL$CRT:SERVER_CA.CRT"
$ _default_crtfile_upd = "Y"
$!
$ _default_keyfile = "SSL$KEY:SERVER_CA.KEY"
$ _default_keyfile_upd = "Y"
$!
$ _default_csrfile = "SSL$CSR:SERVER.CSR"
$ _default_csrfile_upd = "Y"
$!
$ _default_sgnfile = "SSL$CRT:SIGNED.CRT"
$ _default_sgnfile_upd = "Y"
$!
$ _default_newcert = "SSL$CRT"
$ _default_newcert_upd = "Y"
$!
$ _default_md = "md5"
$ _default_md_upd = "Y"
$!
$ _default_days = "365"
$ _default_days_upd = "Y"
$!
$ _default_policy = "policy_anything"
$ _default_policy_upd = "Y"
$!
$ _policy_countryName = "optional"
$ _policy_countryName_upd = "Y"
$!
$ _policy_stateOrProvinceName = "optional"
$ _policy_stateOrProvinceName_upd = "Y"
$!
$ _policy_localityName = "optional"
$ _policy_localityName_upd = "Y"
$!
$ _policy_organizationName = "optional"
$ _policy_organizationName_upd = "Y"
$!
$ _policy_organizationalUnitName = "optional"
$ _policy_organizationalUnitName_upd = "Y"
$!
$ _policy_commonName = "supplied"
$ _policy_commonName_upd = "Y"
$!
$ _policy_emailAddress = "optional"
$ _policy_emailAddress_upd = "Y"
$!
$ _default_x509_extensions = "CA_x509_extensions"
$ _default_x509_extensions_upd = "Y"
$!
$ _x509_basicContraints = "CA:FALSE"
$ _x509_basicContraints_upd = "Y"
$!
$ _x509_nsCertType = "client,email,objsign,server"
$ _x509_nsCertType_upd = "Y"
$!
$ _x509_nsComment = "SSL Generated Certificate"
$ _x509_nsComment_upd = "Y"
$!
$ _x509_subjectKeyIdentifier = "hash"
$ _x509_subjectKeyIdentifier_upd = "Y"
$!
$ _x509_authorityKeyIdentifier = "keyid,issuer:always"
$ _x509_authorityKeyIdentifier_upd = "Y"
$!
$ IF F$SEARCH ("''SSL_CONF_FILE'") .NES. ""
$ THEN
$ GET_CONF_DATA "[''_ca']#default_ca"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_ca = SSL_CONF_DATA
$ _default_ca_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_ca']#serial"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_serfile = F$PARSE (SSL_CONF_DATA,"SSL$ROOT:",,"DEVICE") + -
F$PARSE (SSL_CONF_DATA,"[DB]",,"DIRECTORY") + -
F$PARSE (SSL_CONF_DATA,"SERIAL",,"NAME") + -
F$PARSE (SSL_CONF_DATA,".TXT",,"TYPE")
$ _default_serfile_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_ca']#database"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_idxfile = F$PARSE (SSL_CONF_DATA,"SSL$ROOT:",,"DEVICE") + -
F$PARSE (SSL_CONF_DATA,"[DB]",,"DIRECTORY") + -
F$PARSE (SSL_CONF_DATA,"INDEX",,"NAME") + -
F$PARSE (SSL_CONF_DATA,".TXT",,"TYPE")
$ _default_idxfile_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_ca']#certificate"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_crtfile = F$PARSE (SSL_CONF_DATA,"SSL$ROOT:",,"DEVICE") + -
F$PARSE (SSL_CONF_DATA,"[CRT]",,"DIRECTORY") + -
F$PARSE (SSL_CONF_DATA,"SERVER_CA",,"NAME") + -
F$PARSE (SSL_CONF_DATA,".CRT",,"TYPE")
$ _default_crtfile_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_ca']#private_key"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_keyfile = F$PARSE (SSL_CONF_DATA,"SSL$ROOT:",,"DEVICE") + -
F$PARSE (SSL_CONF_DATA,"[KEY]",,"DIRECTORY") + -
F$PARSE (SSL_CONF_DATA,"SERVER_CA",,"NAME") + -
F$PARSE (SSL_CONF_DATA,".KEY",,"TYPE")
$ _default_keyfile_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_ca']#new_certs_dir"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_newcert = SSL_CONF_DATA
$ _default_newcert_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_ca']#default_md"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_md = SSL_CONF_DATA
$ _default_md_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_ca']#default_days"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_days = SSL_CONF_DATA
$ _default_days_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_ca']#policy"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_policy = SSL_CONF_DATA
$ _default_policy_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_policy']#countryName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _policy_countryName = SSL_CONF_DATA
$ _policy_countryName_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_policy']#stateOrProvinceName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _policy_stateOrProvinceName = SSL_CONF_DATA
$ _policy_stateOrProvinceName_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_policy']#localityName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _policy_localityName = SSL_CONF_DATA
$ _policy_localityName_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_policy']#organizationName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _policy_organizationName = SSL_CONF_DATA
$ _policy_organizationName_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_policy']#organizationalUnitName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _policy_organizationalUnitName = SSL_CONF_DATA
$ _policy_organizationalUnitName_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_policy']#commonName"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _policy_commonName = SSL_CONF_DATA
$ _policy_commonName_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_policy']#emailAddress"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _policy_emailAddress = SSL_CONF_DATA
$ _policy_emailAddress_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_ca']#x509_extensions"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _default_x509_extensions = SSL_CONF_DATA
$ _default_x509_extensions_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_x509_extensions']#basicConstraints"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _x509_basicConstraints = SSL_CONF_DATA
$ _x509_basicConstraints_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_x509_extensions']#nsCertType"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _x509_nsCertType = SSL_CONF_DATA
$ _x509_nsCertType_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_x509_extensions']#nsComment"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _x509_nsComment = SSL_CONF_DATA
$ _x509_nsComment_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_x509_extensions']#subjectKeyIdentifier"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _x509_subjectKeyIdentifier = SSL_CONF_DATA
$ _x509_subjectKeyIdentifier_upd = "N"
$ ENDIF
$!
$ GET_CONF_DATA "[''_default_x509_extensions']#authorityKeyIdentifier"
$ IF SSL_CONF_DATA .NES. ""
$ THEN
$ _x509_authorityKeyIdentifier = SSL_CONF_DATA
$ _x509_authorityKeyIdentifier_upd = "N"
$ ENDIF
$ ENDIF
$!
$ SET_USER_DATA "[''_ca']#default_ca#D#''_default_ca'##S###''_default_ca_upd'#N#N"
$ SET_USER_DATA "[''_default_ca']#serial#D#''_default_serfile'#Serial File ?#F###''_default_serfile_upd'#N#N"
$ SET_USER_DATA "[''_default_ca']#database#D#''_default_idxfile'#Database File ?#F###''_default_idxfile_upd'#N#N"
$ SET_USER_DATA "[''_default_ca']#certificate#D#''_default_crtfile'#CA Certificate File ?#F###''_default_crtfile_upd'#Y#N"
$ SET_USER_DATA "[''_default_ca']#private_key#D#''_default_keyfile'#CA Certificate Key File ?#F###''_default_keyfile_upd'#Y#N"
$ SET_USER_DATA "[]#default_csrfile#-#''_default_csrfile'#Certificate Request File ?#F###''_default_csrfile_upd'#Y#N"
$ SET_USER_DATA "[]#default_sgnfile#-#''_default_sgnfile'#Signed Certificate File ?#F###''_default_sgnfile_upd'#Y#N"
$ SET_USER_DATA "[''_default_ca']#new_certs_dir#D#''_default_newcert'#New Certificate Directory ?#S###''_default_newcert_upd'#N#N"
$ SET_USER_DATA "[''_default_ca']#default_md#D#''_default_md'#Default Digest ?#I###''_default_md_upd'#N#N"
$ SET_USER_DATA "[''_default_ca']#default_days#D#''_default_days'#Default Days ?#I###''_default_days_upd'#Y#N"
$ SET_USER_DATA "[''_default_ca']#policy#D#''_default_policy'#Default Policy ?#S###''_default_policy_upd'#N#N"
$ SET_USER_DATA "[''_default_policy']#countryName#D#''_policy_countryName'#Country Name Policy ?#S###''_policy_countryName_upd'#N#N"
$ SET_USER_DATA "[''_default_policy']#stateOrProvinceName#D#''_policy_stateOrProvinceName'#State or Province Name Policy ?#S###''_policy_stateOrProvinceName_upd'#N#N"
$ SET_USER_DATA "[''_default_policy']#localityName#D#''_policy_localityName'#Locality Name Policy ?#S###''_policy_localityName_upd'#N#N"
$ SET_USER_DATA "[''_default_policy']#organizationName#D#''_policy_organizationName'#Organization Name Policy ?#S###''_policy_organizationName_upd'#N#N"
$ SET_USER_DATA "[''_default_policy']#organizationalUnitName#D#''_policy_organizationalUnitName'#Organization Unit Name Policy ?#S###''_policy_organizationalUnitName_upd'#N#N"
$ SET_USER_DATA "[''_default_policy']#commonName#D#''_policy_commonName'#Common Name Policy ?#S###''_policy_commonName_upd'#N#N"
$ SET_USER_DATA "[''_default_policy']#emailAddress#D#''_policy_emailAddress'#Email Address Policy ?#S###''_policy_emailAddress_upd'#N#N"
$ SET_USER_DATA "[''_default_ca']#x509_extensions#D#''_default_x509_extensions'#X509 Extensions ?#S###''_default_x509_extensions_upd'#N#N"
$ SET_USER_DATA "[''_default_x509_extensions']#basicConstraints#D#''_x509_basicConstraints'#X509 Basic Constraints ?#S###''_x509_basicConstraints_upd'#N#N"
$ SET_USER_DATA "[''_default_x509_extensions']#nsCertType#D#''_x509_nsCertType'#X509 NS Cert Type ?#S###''_x509_nsCertType_upd'#N#N"
$ SET_USER_DATA "[''_default_x509_extensions']#nsComment#D#''_x509_nsComment'#X509 NS Comment ?#S###''_x509_nsComment_upd'#N#N"
$ SET_USER_DATA "[''_default_x509_extensions']#subjectKeyIdentifier#D#''_x509_subjectKeyIdentifier'#X509 Subject Key Identifier ?#S###''_x509_subjectKeyIdentifier_upd'#N#N"
$ SET_USER_DATA "[''_default_x509_extensions']#authorityKeyIdentifier#D#''_x509_authorityKeyIdentifier'#X509 Authority Key Identifier ?#S###''_x509_authorityKeyIdentifier_upd'#N#N"
$ SET_USER_DATA "[]#pem_pass_phrase#-##PEM Pass Phrase ?#P#1###Y#N"
$ SET_USER_DATA "[]#display_certificate#-#N#Display the Certificate ?#S##1##Y#N"
$!
$ SAY ESC + "[''MSG_ROW';01H", CEOS
$!
$!------------------------------------------------------------------------------
$! Confirm/Update the SSL Configuration Data
$!------------------------------------------------------------------------------
$!
$PROMPT_LOOP:
$!
$ IF CTR .LE. SSL_USER_DATA_MAX
$ THEN
$ KEY = F$ELEMENT (0,"#",SSL_USER_DATA_'CTR') ! Key Name
$ ITM = F$ELEMENT (1,"#",SSL_USER_DATA_'CTR') ! Item Name
$ VAL = F$ELEMENT (2,"#",SSL_USER_DATA_'CTR') ! Item Value Contains Default or Prompt
$ DEF = F$ELEMENT (3,"#",SSL_USER_DATA_'CTR') ! Default Value
$ PRM = F$ELEMENT (4,"#",SSL_USER_DATA_'CTR') ! Prompt Value
$ TYP = F$ELEMENT (5,"#",SSL_USER_DATA_'CTR') ! Value Type
$ MIN = F$ELEMENT (6,"#",SSL_USER_DATA_'CTR') ! Value Minimum Length
$ MAX = F$ELEMENT (7,"#",SSL_USER_DATA_'CTR') ! Value Maximum Length
$ UPD = F$ELEMENT (8,"#",SSL_USER_DATA_'CTR') ! Entry Updated ?
$ REQ = F$ELEMENT (9,"#",SSL_USER_DATA_'CTR') ! Entry Required for Input ?
$ CFM = F$ELEMENT (10,"#",SSL_USER_DATA_'CTR')! Confirm Input ?
$ CONFIRMED = 0
$ IF REQ .EQS. "N"
$ THEN
$ CTR = CTR + 1
$ GOTO PROMPT_LOOP
$ ENDIF
$ IF ROW .GT. MSG_ROW - 2
$ THEN
$ SAY ESC + "[''TOP_ROW';01H", CEOS
$ ROW = TOP_ROW
$ ENDIF
$!
$CONFIRM_LOOP:
$!
$ IF PRM .EQS. ""
$ THEN
$ PROMPT = ESC + "[''ROW';''COL'H''ITM' ? [''DEF'] ''CEOL'"
$ ELSE
$ PROMPT = ESC + "[''ROW';''COL'H''PRM' [''DEF'] ''CEOL'"
$ ENDIF
$ IF TYP .EQS. "P" THEN SET TERMINAL /NOECHO
$ ASK "''PROMPT'" ANS /END_OF_FILE=EXIT
$ IF TYP .EQS. "P" THEN SET TERMINAL /ECHO
$ ANS = F$EDIT (ANS,"TRIM")
$ IF ANS .EQS. "" THEN ANS = DEF
$ IF TYP .EQS. "F"
$ THEN
$ ANS = F$PARSE ("''ANS'","''DEF'",,,"SYNTAX_ONLY")
$ ENDIF
$ IF TYP .EQS. "I" .AND. F$TYPE (ANS) .NES. "INTEGER"
$ THEN
$ CALL INVALID_ENTRY
$ SAY ESC + "[''ROW';01H", CEOS
$ GOTO PROMPT_LOOP
$ ENDIF
$ IF (TYP .EQS. "S" .OR. TYP .EQS. "P") .AND. -
((MIN .NES. "" .AND. F$LENGTH (ANS) .LT. F$INTEGER(MIN)) .OR. -
(MAX .NES. "" .AND. F$LENGTH (ANS) .GT. F$INTEGER(MAX)))
$ THEN
$ CALL INVALID_ENTRY
$ SAY ESC + "[''ROW';01H", CEOS
$ IF TYP .EQS. "S" THEN GOTO PROMPT_LOOP
$ IF TYP .EQS. "P" THEN GOTO CONFIRM_LOOP
$ ENDIF
$ ROW = ROW + 1
$ IF CFM .EQS. "Y"
$ THEN
$ IF CONFIRMED .EQ. 0
$ THEN
$ CONFIRMED = 1
$ CONFIRMED_ANS = ANS
$ PRM = "Confirm ''PRM'"
$ GOTO CONFIRM_LOOP
$ ELSE
$ IF ANS .NES. CONFIRMED_ANS
$ THEN
$ CALL INVALID_ENTRY
$ ROW = ROW - 2
$ SAY ESC + "[''ROW';01H", CEOS
$ GOTO PROMPT_LOOP
$ ENDIF
$ ENDIF
$ ENDIF
$ IF ANS .NES. DEF THEN SSL_USER_DATA_'CTR' = "''KEY'#''ITM'#''VAL'#''ANS'#''PRM'#''TYP'#''MIN'#''MAX'#Y#''REQ'#''CFM'"
$ CTR = CTR + 1
$ GOTO PROMPT_LOOP
$ ENDIF
$!
$!------------------------------------------------------------------------------
$! Save the SSL Configuration Data
$!------------------------------------------------------------------------------
$!
$ CTR = 1
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Saving Configuration ...", NORM
$!
$SAVE_CONF_LOOP:
$!
$ IF CTR .LE. SSL_USER_DATA_MAX
$ THEN
$ KEY = F$ELEMENT (0,"#",SSL_USER_DATA_'CTR') ! Key Name
$ ITM = F$ELEMENT (1,"#",SSL_USER_DATA_'CTR') ! Item Name
$ VAL = F$ELEMENT (2,"#",SSL_USER_DATA_'CTR') ! Item Value Contains Default or Prompt
$ DEF = F$ELEMENT (3,"#",SSL_USER_DATA_'CTR') ! Default Value
$ PRM = F$ELEMENT (4,"#",SSL_USER_DATA_'CTR') ! Prompt Value
$ TYP = F$ELEMENT (5,"#",SSL_USER_DATA_'CTR') ! Value Type
$ MIN = F$ELEMENT (6,"#",SSL_USER_DATA_'CTR') ! Value Minimum Length
$ MAX = F$ELEMENT (7,"#",SSL_USER_DATA_'CTR') ! Value Maximum Length
$ UPD = F$ELEMENT (8,"#",SSL_USER_DATA_'CTR') ! Entry Updated ?
$ REQ = F$ELEMENT (9,"#",SSL_USER_DATA_'CTR') ! Entry Required for Input ?
$ CFM = F$ELEMENT (10,"#",SSL_USER_DATA_'CTR')! Confirm Input ?
$ IF UPD .NES. "Y" .OR. VAL .EQS. "-"
$ THEN
$ CTR = CTR + 1
$ GOTO SAVE_CONF_LOOP
$ ENDIF
$ IF VAL .EQS. "D"
$ THEN
$ SET_CONF_DATA "''KEY'#''ITM'" "''DEF'"
$ ELSE
$ SET_CONF_DATA "''KEY'#''ITM'" "''PRM'"
$ SET_CONF_DATA "''KEY'#''ITM'_default" "''DEF'"
$ ENDIF
$ IF MIN .NES. "" THEN SET_CONF_DATA "''KEY'#''ITM'_min" "''MIN'"
$ IF MAX .NES. "" THEN SET_CONF_DATA "''KEY'#''ITM'_max" "''MAX'"
$ CTR = CTR + 1
$ GOTO SAVE_CONF_LOOP
$ ENDIF
$!
$ PURGE /NOLOG /NOCONFIRM 'SSL_CONF_FILE'
$ RENAME 'SSL_CONF_FILE'; ;1
$!
$ SAY ESC + "[''MSG_ROW';01H", CEOS
$!
$!------------------------------------------------------------------------------
$! Create the Certificiate Authority
$!------------------------------------------------------------------------------
$!
$SKIP:
$!
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Signing Certificate Request ...", NORM
$!
$ X1 = 2
$ Y1 = TOP_ROW
$ X2 = TT_COLS - 2
$ Y2 = MSG_ROW - 1
$!
$ GET_USER_DATA "[]#pem_pass_phrase"
$ _pem_pass_phrase = SSL_USER_DATA
$ GET_USER_DATA "[''_default_ca']#database"
$ _default_idxfile = SSL_USER_DATA
$ GET_USER_DATA "[''_default_ca']#serial"
$ _default_serfile = SSL_USER_DATA
$ GET_USER_DATA "[]#default_csrfile"
$ _default_csrfile = SSL_USER_DATA
$ GET_USER_DATA "[]#default_sgnfile"
$ _default_sgnfile = SSL_USER_DATA
$ GET_USER_DATA "[]#display_certificate"
$ _display_certificate = SSL_USER_DATA
$!
$ IF F$SEARCH ("''_default_idxfile'") .EQS. ""
$ THEN
$ OPEN /WRITE OFILE '_default_idxfile'
$ CLOSE OFILE
$ ENDIF
$!
$ IF F$SEARCH ("''_default_serfile'") .EQS. ""
$ THEN
$ OPEN /WRITE OFILE '_default_serfile'
$ WRITE OFILE "01"
$ CLOSE OFILE
$ ENDIF
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SHOW SYSTEM /FULL /OUT=SYS$LOGIN:SSL_CA_'PID'.RND
$!
$ OPEN /WRITE OFILE SYS$LOGIN:SSL_CA_'PID'.COM
$ WRITE OFILE "$ SET NOON"
$ WRITE OFILE "$ SET MESSAGE /NOFACILITY /NOIDENTIFICATION /NOSEVERITY /NOTEXT"
$ WRITE OFILE "$ DEFINE /USER /NOLOG RANDFILE SYS$LOGIN:SSL_CA_''PID'.RND"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$ERROR SYS$LOGIN:SSL_CA_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$OUTPUT SYS$LOGIN:SSL_CA_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$COMMAND SYS$INPUT"
$ WRITE OFILE "$ OPENSSL ca -config ''SSL_CONF_FILE' -out ''_default_sgnfile' -infiles ''_default_csrfile'"
$ WRITE OFILE "''_pem_pass_phrase'"
$ WRITE OFILE "y"
$ WRITE OFILE "y"
$ WRITE OFILE "$ SET MESSAGE /FACILITY /IDENTIFICATION /SEVERITY /TEXT"
$ CLOSE OFILE
$!
$ @SYS$LOGIN:SSL_CA_'PID'.COM
$!
$ DELETE/NOLOG/NOCONFIRM SYS$LOGIN:SSL_CA_'PID'.RND;*
$ DELETE/NOLOG/NOCONFIRM SYS$LOGIN:SSL_CA_'PID'.COM;*
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SEARCH SYS$LOGIN:SSL_CA_'PID'.LOG /OUT=SYS$LOGIN:SSL_CA_'PID'.ERR "error:"
$ IF F$SEARCH ("SYS$LOGIN:SSL_CA_''PID'.ERR") .NES. ""
$ THEN
$ IF F$FILE_ATTRIBUTE ("SYS$LOGIN:SSL_CA_''PID'.ERR","ALQ") .NE. 0
$ THEN
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_CA_'PID'.ERR;*
$ SAY ESC + "[''MSG_ROW';01H''BELL'''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_CA_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ERROR >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_CA_'PID'.LOG;*
$ GOTO EXIT
$ ENDIF
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_CA_'PID'.ERR;*
$ ENDIF
$!
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_CA_'PID'.LOG;*
$!
$ IF F$EDIT (_display_certificate,"TRIM,UPCASE") .EQS. "Y"
$ THEN
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Generating Output ...", NORM, CEOL
$!
$ OPEN /WRITE OFILE SYS$LOGIN:SSL_X509_'PID'.COM
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$ERROR SYS$LOGIN:SSL_X509_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$OUTPUT SYS$LOGIN:SSL_X509_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$COMMAND SYS$INPUT"
$ WRITE OFILE "$ OPENSSL x509 -noout -text -in ''_default_sgnfile'"
$ CLOSE OFILE
$!
$ @SYS$LOGIN:SSL_X509_'PID'.COM
$!
$ DELETE/NOLOG/NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.COM;*
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SEARCH SYS$LOGIN:SSL_X509_'PID'.LOG /OUT=SYS$LOGIN:SSL_X509_'PID'.ERR ":error:"
$ IF F$SEARCH ("SYS$LOGIN:SSL_X509_''PID'.ERR") .NES. ""
$ THEN
$ IF F$FILE_ATTRIBUTE ("SYS$LOGIN:SSL_X509_''PID'.ERR","ALQ") .NE. 0
$ THEN
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.ERR;*
$ SAY ESC + "[''MSG_ROW';01H''BELL'''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_X509_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ERROR >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.LOG;*
$ GOTO EXIT
$ ENDIF
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.ERR;*
$ ENDIF
$!
$ SAY ESC + "[''MSG_ROW';01H''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_X509_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ''_default_sgnfile' >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.LOG;*
$ GOTO EXIT
$ ENDIF
$!
$ TEXT = "Press return to continue"
$ COL = (TT_COLS - F$LENGTH (TEXT)) / 2
$!
$ SAY ESC + "[''MSG_ROW';01H", CEOS
$ PROMPT = ESC + "[''MSG_ROW';''COL'H''TEXT'"
$ ASK "''PROMPT'" OPT
$!
$GOTO EXIT
$!
$!------------------------------------------------------------------------------
$! Set the User Data
$!------------------------------------------------------------------------------
$!
$SET_USER_DATA: SUBROUTINE
$!
$ IF F$TYPE (SSL_USER_DATA_MAX) .EQS. ""
$ THEN
$ SSL_USER_DATA_MAX == 1
$ ELSE
$ SSL_USER_DATA_MAX == SSL_USER_DATA_MAX + 1
$ ENDIF
$!
$ SSL_USER_DATA_'SSL_USER_DATA_MAX' == "''P1'"
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Find the Request Data
$!------------------------------------------------------------------------------
$!
$GET_USER_DATA: SUBROUTINE
$!
$ CTR = 1
$ USER_KEY = F$ELEMENT (0,"#",P1)
$ USER_ITM = F$ELEMENT (1,"#",P1)
$!
$GET_USER_DATA_LOOP:
$!
$ IF CTR .LE. SSL_USER_DATA_MAX
$ THEN
$ KEY = F$ELEMENT (0,"#",SSL_USER_DATA_'CTR') ! Key Name
$ ITM = F$ELEMENT (1,"#",SSL_USER_DATA_'CTR') ! Item Name
$ VAL = F$ELEMENT (2,"#",SSL_USER_DATA_'CTR') ! Item Value Contains Default or Prompt
$ DEF = F$ELEMENT (3,"#",SSL_USER_DATA_'CTR') ! Default Value
$ PRM = F$ELEMENT (4,"#",SSL_USER_DATA_'CTR') ! Prompt Value
$ IF USER_KEY .NES. KEY .OR. USER_ITM .NES. ITM
$ THEN
$ CTR = CTR + 1
$ GOTO GET_USER_DATA_LOOP
$ ENDIF
$ IF VAL .EQS. "-" THEN SSL_USER_DATA == "''DEF'"
$ IF VAL .EQS. "D" THEN SSL_USER_DATA == "''DEF'"
$ IF VAL .EQS. "P" THEN SSL_USER_DATA == "''PRM'"
$ ENDIF
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Delete the User Data
$!------------------------------------------------------------------------------
$!
$DEL_USER_DATA: SUBROUTINE
$!
$ IF F$TYPE (SSL_USER_DATA_MAX) .EQS. "" THEN GOTO DEL_USER_DATA_END
$!
$DEL_USER_DATA_LOOP:
$!
$ IF F$TYPE (SSL_USER_DATA_'SSL_USER_DATA_MAX') .NES. ""
$ THEN
$ DELETE /SYMBOL /GLOBAL SSL_USER_DATA_'SSL_USER_DATA_MAX'
$ SSL_USER_DATA_MAX == SSL_USER_DATA_MAX - 1
$ GOTO DEL_USER_DATA_LOOP
$ ENDIF
$!
$ DELETE /SYMBOL /GLOBAL SSL_USER_DATA_MAX
$!
$DEL_USER_DATA_END:
$!
$ IF F$TYPE (SSL_USER_DATA) .NES. "" THEN DELETE /SYMBOL /GLOBAL SSL_USER_DATA
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Display the invalid entry
$!------------------------------------------------------------------------------
$!
$INVALID_ENTRY: SUBROUTINE
$!
$ SAY ESC + "[''MSG_ROW';01H", BELL, " Invalid Entry, Try again ...''CEOL'"
$ Wait 00:00:01.5
$ SAY ESC + "[''MSG_ROW';01H", CEOL
$!
$ EXIT
$!
$ ENDSUBROUTINE
$!
$!------------------------------------------------------------------------------
$! Exit the procedure
$!------------------------------------------------------------------------------
$!
$EXIT:
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ DEASSIGN SYS$OUTPUT
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ DEASSIGN SYS$ERROR
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ CLOSE OFILE
$!
$ DEL_USER_DATA
$!
$ IF F$TYPE (SSL_CONF_DATA) .NES. "" THEN DELETE /SYMBOL /GLOBAL SSL_CONF_DATA
$!
$ IF F$GETDVI ("TT:","TT_NOECHO") .AND. .NOT. TT_NOECHO THEN SET TERMINAL /ECHO
$!
$ IF F$SEARCH ("SYS$LOGIN:SSL_CA_''PID'.%%%;*") .NES. "" THEN DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_CA_'PID'.%%%;*
$ IF F$SEARCH ("SYS$LOGIN:SSL_X509_''PID'.%%%;*") .NES. "" THEN DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.%%%;*
$!
$ Verify = F$VERIFY (Verify)
$!
$ EXIT

View File

@@ -0,0 +1,245 @@
$!
$!------------------------------------------------------------------------------
$! SSL$VIEW_CERT.COM - SSL View Certificate procedure
$!------------------------------------------------------------------------------
$!
$ Verify = F$VERIFY (0)
$ Set NoOn
$ Set NoControl=Y
$!
$!------------------------------------------------------------------------------
$! Description
$!------------------------------------------------------------------------------
$!
$! This procedure prompts the user through creating a Server Certificate.
$!
$! The parameters used are:
$!
$! P1 - Certificate or Certificate Request (i.e. "CRT" or "CSR")
$!
$!------------------------------------------------------------------------------
$! Define symbols
$!------------------------------------------------------------------------------
$!
$ DELETE := DELETE
$ SAY := WRITE SYS$OUTPUT
$ ASK := READ SYS$COMMAND /END_OF_FILE=EXIT /PROMPT=
$ PID = F$GETJPI ("","PID")
$ TT_NOECHO = F$GETDVI ("TT:","TT_NOECHO")
$ On Control_Y THEN GOTO EXIT
$ Set Control=Y
$!
$ TT_ROWS = F$GETDVI ("TT:","TT_PAGE")
$ TT_COLS = F$GETDVI ("TT:","DEVBUFSIZ")
$!
$ INIT_TERM := @SSL$COM:SSL$INIT_TERM
$ PICK_FILE := @SSL$COM:SSL$PICK_FILE
$ SHOW_FILE := @SSL$COM:SSL$SHOW_FILE
$!
$ ESC[0,8] = 27 ! Set the Escape Character
$ BELL[0,8] = 7 ! Ring the terminal Bell
$ RED = 1 ! Color - Red
$ FGD = 30 ! Foreground
$ BGD = 0 ! Background
$ CSCR = ESC + "[2J" ! Clear the Screen
$ CEOS = ESC + "[0J" ! Clear to the End of the Screen
$ CEOL = ESC + "[0K" ! Clear to the End of the Line
$ NORM = ESC + "[0m" ! Turn Attributes off
$ BLNK = ESC + "[5m" ! Turn on BLINK Attribute
$ WIDE = ESC + "#6" ! Turn on WIDE Attribute
$!
$!------------------------------------------------------------------------------
$! Run the SSL setup if it hasn't been run yet
$!------------------------------------------------------------------------------
$!
$ IF F$TRNLNM ("SSL$ROOT") .EQS. ""
$ THEN
$ IF F$SEARCH ("SSL$COM:SSL$INIT_ENV.COM") .NES. ""
$ THEN
$ @SSL$COM:SSL$INIT_ENV.COM
$ ELSE
$ SAY BELL, "Unable to locate SSL$COM:SSL$INIT_ENV.COM ..."
$ GOTO EXIT
$ ENDIF
$ ENDIF
$!
$!------------------------------------------------------------------------------
$! Display the Page Header
$!------------------------------------------------------------------------------
$!
$ INIT_TERM
$ BCOLOR = BGD
$ FCOLOR = FGD + RED
$ COLOR = ESC + "[''BCOLOR';''FCOLOR'm"
$!
$ TEXT = "SSL Certificate Tool"
$ COL = (TT_COLS - (F$LENGTH (TEXT) * 2)) / 4
$!
$ SAY ESC + "[01;01H", CSCR
$ SAY ESC + "[02;''COL'H", COLOR, WIDE, TEXT, NORM
$!
$ IF P1 .EQS. "CSR"
$ THEN
$ TEXT = "View Certificate Request"
$ ELSE
$ TEXT = "View Certificate"
$ ENDIF
$ COL = (TT_COLS - F$LENGTH (TEXT)) / 2
$!
$ SAY ESC + "[04;01H"
$ SAY ESC + "[04;''COL'H", COLOR, TEXT, NORM
$!
$ CTR = 1
$ ROW = 6
$ COL = 2
$ TOP_ROW = ROW
$ MSG_ROW = TT_ROWS - 1
$!
$!------------------------------------------------------------------------------
$! Initialize the Request Data
$!------------------------------------------------------------------------------
$!
$ IF P1 .NES. "CRT" .AND. P1 .NES. "CSR"
$ THEN
$ PRM = "Display File:"
$ DEF = "*.*"
$ ENDIF
$!
$ IF P1 .EQS. "CRT"
$ THEN
$ PRM = "Display Certificate File:"
$ DEF = "SSL$CRT:*.CRT"
$ ENDIF
$!
$ IF P1 .EQS. "CSR"
$ THEN
$ PRM = "Display Certificate Request File:"
$ DEF = "SSL$CSR:*.CSR"
$ ENDIF
$!
$ SAY ESC + "[''MSG_ROW';01H", CEOS
$!
$!------------------------------------------------------------------------------
$! Confirm/Update the SSL Configuration Data
$!------------------------------------------------------------------------------
$!
$PROMPT_LOOP:
$!
$ PROMPT = ESC + "[''ROW';''COL'H''PRM' ? [''DEF'] ''CEOL'"
$ ASK "''PROMPT'" _view_file_name
$ _view_file_name = F$EDIT (_view_file_name,"TRIM")
$ IF _view_file_name .EQS. "" THEN _view_file_name = DEF
$!
$ X1 = 2
$ Y1 = TOP_ROW
$ X2 = TT_COLS - 2
$ Y2 = MSG_ROW - 1
$!
$PICK_FILE:
$!
$ PICK_FILE "''_view_file_name'" 'X1' 'Y1' 'X2' 'Y2' "< Select a File >"
$!
$ SAY ESC + "[''TOP_ROW';01H", CEOS
$!
$ IF SSL_FILE_NAME .EQS. "" THEN GOTO EXIT
$!
$!------------------------------------------------------------------------------
$! Create the Certificiate Authority
$!------------------------------------------------------------------------------
$!
$ SAY ESC + "[''MSG_ROW';01H", BLNK, " Generating Output ...", NORM, CEOL
$!
$ IF P1 .EQS. "CRT"
$ THEN
$ OPEN /WRITE OFILE SYS$LOGIN:SSL_X509_'PID'.COM
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$ERROR SYS$LOGIN:SSL_X509_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$OUTPUT SYS$LOGIN:SSL_X509_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$COMMAND SYS$INPUT"
$ WRITE OFILE "$ OPENSSL x509 -noout -text -in ''SSL_FILE_NAME'"
$ CLOSE OFILE
$!
$ @SYS$LOGIN:SSL_X509_'PID'.COM
$!
$ DELETE/NOLOG/NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.COM;*
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SEARCH SYS$LOGIN:SSL_X509_'PID'.LOG /OUT=SYS$LOGIN:SSL_X509_'PID'.ERR ":error:"
$ IF F$SEARCH ("SYS$LOGIN:SSL_X509_''PID'.ERR") .NES. ""
$ THEN
$ IF F$FILE_ATTRIBUTE ("SYS$LOGIN:SSL_X509_''PID'.ERR","ALQ") .NE. 0
$ THEN
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.ERR;*
$ SAY ESC + "[''MSG_ROW';01H''BELL'''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_X509_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ERROR >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.LOG;*
$ GOTO EXIT
$ ENDIF
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.ERR;*
$ ENDIF
$!
$ SAY ESC + "[''MSG_ROW';01H''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_X509_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ''SSL_FILE_NAME' >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.LOG;*
$ GOTO PICK_FILE
$ ENDIF
$!
$ IF P1 .EQS. "CSR"
$ THEN
$ OPEN /WRITE OFILE SYS$LOGIN:SSL_REQ_'PID'.COM
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$ERROR SYS$LOGIN:SSL_REQ_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$OUTPUT SYS$LOGIN:SSL_REQ_''PID'.LOG"
$ WRITE OFILE "$ DEFINE /USER /NOLOG SYS$COMMAND SYS$INPUT"
$ WRITE OFILE "$ OPENSSL req -noout -text -in ''SSL_FILE_NAME'"
$ CLOSE OFILE
$!
$ @SYS$LOGIN:SSL_REQ_'PID'.COM
$!
$ DELETE/NOLOG/NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.COM;*
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ SEARCH SYS$LOGIN:SSL_REQ_'PID'.LOG /OUT=SYS$LOGIN:SSL_REQ_'PID'.ERR ":error:"
$ IF F$SEARCH ("SYS$LOGIN:SSL_REQ_''PID'.ERR") .NES. ""
$ THEN
$ IF F$FILE_ATTRIBUTE ("SYS$LOGIN:SSL_REQ_''PID'.ERR","ALQ") .NE. 0
$ THEN
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.ERR;*
$ SAY ESC + "[''MSG_ROW';01H''BELL'''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_REQ_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ERROR >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.LOG;*
$ GOTO EXIT
$ ENDIF
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.ERR;*
$ ENDIF
$!
$ SAY ESC + "[''MSG_ROW';01H''CEOS'"
$ SHOW_FILE "SYS$LOGIN:SSL_REQ_''PID'.LOG" 'X1' 'Y1' 'X2' 'Y2' "< ''SSL_FILE_NAME' >"
$ DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.LOG;*
$ GOTO PICK_FILE
$ ENDIF
$!
$ SAY ESC + "[''MSG_ROW';01H''CEOS'"
$ SHOW_FILE "''SYS$LOGIN:SSL_FILE_NAME'" 'X1' 'Y1' 'X2' 'Y2' "< ''SSL_FILE_NAME' >"
$ GOTO PICK_FILE
$!
$!------------------------------------------------------------------------------
$! Exit the procedure
$!------------------------------------------------------------------------------
$!
$EXIT:
$!
$ DEFINE /USER /NOLOG SYS$ERROR NL:
$ DEFINE /USER /NOLOG SYS$OUTPUT NL:
$ CLOSE OFILE
$!
$ IF F$TYPE (SSL_FILE_NAME) .NES. "" THEN DELETE /SYMBOL /GLOBAL SSL_FILE_NAME
$!
$ IF F$GETDVI ("TT:","TT_NOECHO") .AND. .NOT. TT_NOECHO THEN SET TERMINAL /ECHO
$!
$ IF F$SEARCH ("SYS$LOGIN:SSL_REQ_''PID'.%%%;*") .NES. "" THEN DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_REQ_'PID'.%%%;*
$ IF F$SEARCH ("SYS$LOGIN:SSL_X509_''PID'.%%%;*") .NES. "" THEN DELETE /NOLOG /NOCONFIRM SYS$LOGIN:SSL_X509_'PID'.%%%;*
$!
$ Verify = F$VERIFY (Verify)
$!
$ EXIT

View File

@@ -26,47 +26,129 @@ $ 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]
$ DEFINE/NOLOG WRK_SSLCOM WRK_SSLROOT:[COM]
$
$ 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$PARSE("WRK_SSLROOT:[VMS]") .EQS. "" THEN -
$! CREATE/DIR/LOG WRK_SSLROOT:[VMS]
$ IF F$PARSE("WRK_SSLCOM:") .EQS. "" THEN -
CREATE/DIR/LOG WRK_SSLROOT:[COM]
$
$ 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"
$ OPEN/WRITE SF WRK_SSLCOM:SSL$STARTUP.COM
$ WRITE SYS$OUTPUT "%OPEN-I-CREATED, ",F$SEARCH("WRK_SSLCOM:SSL$STARTUP.COM")," created."
$ WRITE SF "$! Startup file for SSL 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 "$! Instead, add or change SSL$COM:SSL$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 "$ IF F$SEARCH(""SYS$STARTUP:SSL$DEFINE_ROOT.COM"") .NES."""" THEN -"
$ WRITE SF "$ @SYS$STARTUP:SSL$DEFINE_ROOT.COM"
$ WRITE SF "$!"
$ WRITE SF "$!"
$ WRITE SF "$ DEFINE/NOLOG/SYSTEM/EXEC SSL$CERTS SSL$ROOT:[CERTS]"
$ WRITE SF "$ DEFINE/NOLOG/SYSTEM/EXEC SSL$COM SSL$ROOT:[COM]"
$ WRITE SF "$ DEFINE/NOLOG/SYSTEM/EXEC SSL$EXE SSL$ROOT:['ARCH'_EXE]"
$ WRITE SF "$ DEFINE/NOLOG/SYSTEM/EXEC SSL$INCLUDE SSL$ROOT:[INCLUDE]"
$ WRITE SF "$ DEFINE/NOLOG/SYSTEM/EXEC SSL$KEY SSL$ROOT:[CERTS]"
$ WRITE SF "$ DEFINE/NOLOG/SYSTEM/EXEC SSL$PRIVATE SSL$ROOT:[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 "$ DEFINE/NOLOG/SYSTEM/EXEC OPENSSL SSL$INCLUDE:"
$ WRITE SF "$!"
$ WRITE SF "$ IF F$SEARCH(""SSL$COM:SSL$SYSTARTUP.COM"") .NES."""" THEN -"
$ WRITE SF " @SSL$COM:SSL$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
$
$ SET FILE/PROT=WORLD:RE WRK_SSLCOM:SSL$STARTUP.COM
$!
$ OPEN/WRITE SF WRK_SSLCOM:SSL$SHUTDOWN.COM
$ WRITE SYS$OUTPUT "%OPEN-I-CREATED, ",F$SEARCH("WRK_SSLCOM:SSL$SHUTDOWN.COM")," created."
$ WRITE SF "$! Shutdown file for SSL"
$ WRITE SF "$!"
$ WRITE SF "$! Do not edit this file, as it will be regenerated during next installation."
$ WRITE SF "$!"
$ WRITE SF "$ ARCH = ""VAX"""
$ WRITE SF "$ IF F$GETSYI(""CPU"") .GE. 128 THEN ARCH = ""ALPHA"""
$ WRITE SF "$!"
$ WRITE SF "$ IF F$SEARCH(""SSL$COM:SSL$SYSHUTDOWN.COM"") .NES."""" THEN -"
$ WRITE SF " @SSL$COM:SSL$SYSHUTDOWN.COM"
$ WRITE SF "$!"
$ WRITE SF "$ IF F$TRNLNM(""SSL$CERTS"") .NES."""" THEN -"
$ WRITE SF " DEASSIGN/SYSTEM/EXEC SSL$CERTS"
$!
$ WRITE SF "$ IF F$TRNLNM(""SSL$COM"") .NES."""" THEN -"
$ WRITE SF " DEASSIGN/SYSTEM/EXEC SSL$COM"
$!
$ WRITE SF "$ IF F$TRNLNM(""SSL$EXE"") .NES."""" THEN -"
$ WRITE SF " DEASSIGN/SYSTEM/EXEC SSL$EXE"
$!
$ WRITE SF "$ IF F$TRNLNM(""SSL$INCLUDE"") .NES."""" THEN -"
$ WRITE SF " DEASSIGN/SYSTEM/EXEC SSL$INCLUDE"
$!
$ WRITE SF "$ IF F$TRNLNM(""SSL$KEY"") .NES."""" THEN -"
$ WRITE SF " DEASSIGN/SYSTEM/EXEC SSL$KEY"
$!
$ WRITE SF "$ IF F$TRNLNM(""SSL$PRIVATE"") .NES."""" THEN -"
$ WRITE SF " DEASSIGN/SYSTEM/EXEC SSL$PRIVATE"
$!
$ WRITE SF "$!"
$ WRITE SF "$ IF F$TRNLNM(""OPENSSL"") .NES."""" THEN -"
$ WRITE SF " DEASSIGN/SYSTEM/EXEC OPENSSL"
$ WRITE SF "$!"
$ WRITE SF "$ IF F$TRNLNM(""SSL$ROOT"") .NES."""" THEN -"
$ WRITE SF " DEASSIGN/SYSTEM/EXEC SSL$ROOT"
$ WRITE SF "$!"
$ WRITE SF "$ EXIT"
$ CLOSE SF
$ SET FILE/PROT=WORLD:RE WRK_SSLCOM:SSL$SHUTDOWN.COM
$!
$ COPY SSL$UTILS.COM WRK_SSLCOM:/LOG
$ SET FILE/PROT=WORLD:RE WRK_SSLCOM:SSL$UTILS.COM
$!
$ COPY SSL$SYSTARTUP.COM WRK_SSLCOM:/LOG
$ SET FILE/PROT=WORLD:RE WRK_SSLCOM:SSL$SYSTARTUP.COM
$ COPY SSL$SYSHUTDOWN.COM WRK_SSLCOM:/LOG
$ SET FILE/PROT=WORLD:RE WRK_SSLCOM:SSL$SYSHUTDOWN.COM
$!
$ CERT_DIR := [.CERT_TOOL]
$ CERT_FILES := SSL$AUTH_CERT.COM,SSL$AUTO_CERT.COM,SSL$CERT_TOOL.COM, -
SSL$CONF_UTIL.COM,SSL$DRAW_BOX.COM,SSL$EXIT_CMD.TPU, -
SSL$FILL_BOX.COM,SSL$HASH_CERT.COM,SSL$HOSTADDR.EXE, -
SSL$HOSTNAME.EXE,SSL$INIT_ENV.COM,SSL$INIT_TERM.COM, -
SSL$PICK_FILE.COM,SSL$RQST_CERT.COM,SSL$SELF_CERT.COM, -
SSL$SHOW_FILE.COM,SSL$SIGN_CERT.COM,SSL$VIEW_CERT.COM, -
SSL$REM_ENV.COM
$!
$ I = 0
$ LOOP:
$ CF = F$EDIT(F$ELEMENT(I, ",", CERT_FILES),"TRIM")
$ I = I + 1
$ IF CF .EQS. "," THEN GOTO LOOP_END
$ SET NOON
$ IF F$SEARCH(CERT_DIR+CF) .NES. ""
$ THEN
$ COPY 'CERT_DIR''CF' WRK_SSLCOM:*.*/log
$ SET FILE/PROT=W:RE WRK_SSLCOM:'CF'
$ ENDIF
$ SET ON
$ GOTO LOOP
$ LOOP_END:
$!
$ SHOW SYSTEM/FULL/OUTPUT=WRK_SSLROOT:[PRIVATE]RANDFILE.
$ SET FILE/PROT=WORLD:RE WRK_SSLROOT:[PRIVATE]RANDFILE.
$!
$ COPY SSL010.RELEASE_NOTES WRK_SSLROOT:[000000]/LOG
$ SET FILE/PROT=WORLD:RE WRK_SSLROOT:[000000]SSL010.RELEASE_NOTES
$!
$ EXIT

View File

@@ -3,16 +3,94 @@ $!
$! No command line parameters. This should be run at the start of the source
$! tree (the same directory where one finds INSTALL.VMS).
$!
$! Input: [.UTIL]LIBEAY.NUM,[.AXP.EXE.CRYPTO]LIBCRYPTO.OLB
$! [.UTIL]SSLEAY.NUM,[.AXP.EXE.SSL]LIBSSL.OLB
$! Output: [.AXP.EXE.CRYPTO]LIBCRYPTO.OPT,.MAP,.EXE
$! [.AXP.EXE.SSL]LIBSSL.OPT,.MAP,.EXE
$! Input: [.UTIL]LIBEAY.NUM,[.AXP.EXE.CRYPTO]LIBCRYPTO.OLB
$! [.UTIL]SSLEAY.NUM,[.AXP.EXE.SSL]LIBSSL.OLB
$! Output: [.AXP.EXE.CRYPTO]LIBCRYPTO.OPT,.MAP,.EXE
$! [.AXP.EXE.SSL]LIBSSL.OPT,.MAP,.EXE
$!
$! So far, tests have only been made on VMS for Alpha. VAX will come in time.
$!
$!
$! >>>>>
$! Note: Since I don't know how to put a comment into one of the .NUM
$! files, I will put the comment here and hope that it is found.
$!
$! For SSLEAY.NUM, we do not expose SSL_add_dir_cert_subjs_to_stk.
$! We do not expose it because it is a truncated VMS name that
$! points to (via SYMHACKS.H) SSL_add_dir_cert_subjects_to_stack.
$! However, SSL_add_dir_cert_subjects_to_stack is #ifndef VMS
$! out of SSL_CERT.C. So, comment them all out and we won't get
$! any link errors about undefined symbols. This all works fine
$! until we need this API's functionality.
$!
$! For LIBEAY.NUM,
$! ASN1_UTCTIME_GET #if 0 [.CRYPTO.ASN1]A_UTCTM.C
$! [.CRYPTO.ASN1]ASN1.H
$!
$! DES_SET_WEAK_KEY_FLAG [.CRYPTO.DES]DES.H
$! Not used in any .C file.
$!
$! DH_GET_DEFAULT_METHOD Not found in any .C or .H file.
$! DH_SET_DEFAULT_METHOD Not found in any .C or .H file.
$! DSA_GET_DEFAULT_METHOD Not found in any .C or .H file.
$! DSA_SET_DEFAULT_METHOD Not found in any .C or .H file.
$!
$! PEM_READ_BIO_NETSCAPE_CERT_SEQUENCE [.CRYPTO.PEM]PEM.H
$! [.CRYPTO]SYMHACKS.H
$! PEM_read_bio_NS_CERT_SEQ is not in any .C or .H file.
$!
$! PEM_READ_BIO_PKCS8_PRIV_KEY_INFO [.CRYPTO]SYMHACKS.H
$! #define PEM_read_bio_PKCS8_PRIV_KEY_INFO PEM_read_bio_P8_PRIV_KEY_INFO
$! PEM_read_bio_P8_PRIV_KEY_INFO is not in any .C or .H file.
$!
$! PEM_READ_NETSCAPE_CERT_SEQUENCE [.CRYPTO.PEM]PEM.H
$! [.CRYPTO]SYMHACKS.H
$! #define PEM_read_NETSCAPE_CERT_SEQUENCE PEM_read_NS_CERT_SEQ
$! PEM_read_NS_CERT_SEQ is not in any .C or .H file.
$!
$! PEM_READ_PKCS8_PRIV_KEY_INFO [.CRYPTO]SYMHACKS.H
$! #define PEM_read_PKCS8_PRIV_KEY_INFO PEM_read_P8_PRIV_KEY_INFO
$! PEM_read_P8_PRIV_KEY_INFO is not in any .C or .H file.
$!
$! PEM_WRITE_BIO_NETSCAPE_CERT_SEQUENCE [.CRYPTO.PEM]PEM.H
$! [.CRYPTO]SYMHACKS.H
$! #define PEM_write_bio_NETSCAPE_CERT_SEQUENCE PEM_write_bio_NS_CERT_SEQ
$! PEM_write_bio_NS_CERT_SEQ is not in any .C or .H file.
$!
$! PEM_WRITE_BIO_PKCS8_PRIV_KEY_INFO [.CRYPTO]SYMHACKS.H
$! #define PEM_write_bio_PKCS8_PRIV_KEY_INFO PEM_write_bio_P8_PRIV_KEY_INFO
$! PEM_write_bio_P8_PRIV_KEY_INFO is not in any .C or .H file.
$!
$! PEM_WRITE_NETSCAPE_CERT_SEQUENCE [.CRYPTO.PEM]PEM.H
$! [.CRYPTO]SYMHACKS.H
$! #define PEM_write_NETSCAPE_CERT_SEQUENCE PEM_write_NS_CERT_SEQ
$! PEM_write_NS_CERT_SEQ is not in any .C or .H file.
$!
$! PEM_WRITE_PKCS8_PRIV_KEY_INFO [.CRYPTO]SYMHACKS.H
$! #define PEM_write_PKCS8_PRIV_KEY_INFO PEM_write_P8_PRIV_KEY_INFO
$! PEM_write_P8_PRIV_KEY_INFO is not in any .C or .H file.
$!
$! RAND_EVENT [.CRYPTO.RAND]RAND.H RAND_event is #if windows || Win32
$! [.CRYPTO.RAND]RAND_WIN.C
$! All modules in RAND_WIN are WINDOWS or WIN32 modules.
$!
$! RAND_SCREEN if Windows or Win32 - [.CRYPTO.RAND]RAND.H
$!
$! RSA_GET_DEFAULT_METHOD is not in any .C or .H file.
$!
$! RSA_SET_DEFAULT_METHOD is not in any .C or .H file.
$!
$!
$!
$! ===========================================================================
$
$!
$! Setup VMS specific information.
$!
$ @vms_build_info
$!
$! ----- Prepare info for processing: version number and file info
$ gosub read_version_info
$!
$ if libver .eqs. ""
$ then
$ write sys$error "ERROR: Couldn't find any library version info..."
@@ -24,20 +102,31 @@ $ then
$ libid = "Crypto"
$ libnum = "[.UTIL]LIBEAY.NUM"
$ libdir = "[.AXP.EXE.CRYPTO]"
$ libolb = "''libdir'LIBCRYPTO.OLB"
$ libolb = "''libdir'LIBCRYPTO''build_bits'.OLB"
$ libopt = "''libdir'LIBCRYPTO.OPT"
$ libmap = "''libdir'LIBCRYPTO.MAP"
$ libgoal= "''libdir'LIBCRYPTO.EXE"
$ if build_bits .eqs. "32"
$ then
$ libgoal= "''libdir'SSL$LIBCRYPTO_SHR''build_bits'.EXE"
$ else
$ libgoal= "''libdir'SSL$LIBCRYPTO_SHR.EXE"
$ endif
$ libref = ""
$ gosub create_axp_shr
$ libid = "SSL"
$ libnum = "[.UTIL]SSLEAY.NUM"
$ libdir = "[.AXP.EXE.SSL]"
$ libolb = "''libdir'LIBSSL.OLB"
$ libolb = "''libdir'LIBSSL''build_bits'.OLB"
$ libopt = "''libdir'LIBSSL.OPT"
$ libmap = "''libdir'LIBSSL.MAP"
$ libgoal= "''libdir'LIBSSL.EXE"
$ libref = "[.AXP.EXE.CRYPTO]LIBCRYPTO.EXE"
$ if build_bits .eqs. "32"
$ then
$ libgoal= "''libdir'SSL$LIBSSL_SHR''build_bits'.EXE"
$ libref = "[.AXP.EXE.CRYPTO]SSL$LIBCRYPTO_SHR''build_bits'.EXE"
$ else
$ libgoal= "''libdir'SSL$LIBSSL_SHR.EXE"
$ libref = "[.AXP.EXE.CRYPTO]SSL$LIBCRYPTO_SHR.EXE"
$ endif
$ gosub create_axp_shr
$ else
$ libtit = "CRYPTO_TRANSFER_VECTOR"
@@ -45,11 +134,16 @@ $ libid = "Crypto"
$ libnum = "[.UTIL]LIBEAY.NUM"
$ libdir = "[.VAX.EXE.CRYPTO]"
$ libmar = "''libdir'LIBCRYPTO.MAR"
$ libolb = "''libdir'LIBCRYPTO.OLB"
$ libolb = "''libdir'LIBCRYPTO''build_bits.OLB"
$ libopt = "''libdir'LIBCRYPTO.OPT"
$ libobj = "''libdir'LIBCRYPTO.OBJ"
$ libmap = "''libdir'LIBCRYPTO.MAP"
$ libgoal= "''libdir'LIBCRYPTO.EXE"
$ if build_bits .eqs. "32"
$ then
$ libgoal= "''libdir'SSL$LIBCRYPTO_SHR''build_bits'.EXE"
$ else
$ libgoal= "''libdir'SSL$LIBCRYPTO_SHR.EXE"
$ endif
$ libref = ""
$ libvec = "LIBCRYPTO"
$ gosub create_vax_shr
@@ -58,12 +152,18 @@ $ libid = "SSL"
$ libnum = "[.UTIL]SSLEAY.NUM"
$ libdir = "[.VAX.EXE.SSL]"
$ libmar = "''libdir'LIBSSL.MAR"
$ libolb = "''libdir'LIBSSL.OLB"
$ libolb = "''libdir'LIBSSL''build_bits'.OLB"
$ libopt = "''libdir'LIBSSL.OPT"
$ libobj = "''libdir'LIBSSL.OBJ"
$ libmap = "''libdir'LIBSSL.MAP"
$ libgoal= "''libdir'LIBSSL.EXE"
$ libref = "[.VAX.EXE.CRYPTO]LIBCRYPTO.EXE"
$ if build_bits .eqs. "32"
$ then
$ libgoal= "''libdir'SSL$LIBSSL_SHR''build_bits'.EXE"
$ libref = "[.VAX.EXE.CRYPTO]SSL$LIBCRYPTO_SHR''build_bits'.EXE"
$ else
$ libgoal= "''libdir'SSL$LIBSSL_SHR.EXE"
$ libref = "[.VAX.EXE.CRYPTO]SSL$LIBCRYPTO_SHR.EXE"
$ endif
$ libvec = "LIBSSL"
$ gosub create_vax_shr
$ endif
@@ -83,18 +183,18 @@ $! in the .num file, check that each line applies to VMS and the architecture,
$! and to fill in "holes" with dummy entries.
$!
$! The creator routines depend on the following variables:
$! libnum The name of the .num file to use as input
$! libolb The name of the object library to build from
$! libid The identification string of the shareable library
$! libopt The name of the .opt file to write
$! libtit The title of the assembler transfer vector file (VAX only)
$! libmar The name of the assembler transfer vector file (VAX only)
$! libmap The name of the map file to write
$! libgoal The name of the shareable library to write
$! libref The name of a shareable library to link in
$! libnum The name of the .num file to use as input
$! libolb The name of the object library to build from
$! libid The identification string of the shareable library
$! libopt The name of the .opt file to write
$! libtit The title of the assembler transfer vector file (VAX only)
$! libmar The name of the assembler transfer vector file (VAX only)
$! libmap The name of the map file to write
$! libgoal The name of the shareable library to write
$! libref The name of a shareable library to link in
$!
$! read_func_num depends on the following variables from the creator:
$! libwriter The name of the writer routine to call for each .num file line
$! libwriter The name of the writer routine to call for each .num file line
$! -----
$
$! ----- Subroutines for AXP
@@ -103,6 +203,7 @@ $! The creator routine
$ create_axp_shr:
$ open/write opt 'libopt'
$ write opt "identification=""",libid," ",libverstr,""""
$ write opt "build_ident=""",build_ident,"_",build_platform,"_",build_bits,""" "
$ write opt libolb,"/lib"
$ if libref .nes. "" then write opt libref,"/SHARE"
$ write opt "SYMBOL_VECTOR=(-"
@@ -137,14 +238,16 @@ $ endif
$ if libfirstentry
$ then
$ write 'libwrch' " ",libentry,"=",pr," -"
$!DEBUG!$ write sys$output "''libentry' = ''pr' #1"
$ else
$ write 'libwrch' " ,",libentry,"=",pr," -"
$!DEBUG!$ write sys$output ",''libentry' = ''pr'"
$ endif
$ libfirstentry := false
$ textcount = textcount + textcount_this
$ return
$
$! ----- Subroutines for AXP
$! ----- Subroutines for VAX
$! -----
$! The creator routine
$ create_vax_shr:
@@ -153,23 +256,23 @@ $ type sys$input:/out=mar:
;
; Transfer vector for VAX shareable image
;
$ write mar " .TITLE ",libtit
$ write mar " .IDENT /",libid,"/"
$ write mar " .TITLE ",libtit
$ write mar " .IDENT /",libid,"/"
$ type sys$input:/out=mar:
;
; Define macro to assist in building transfer vector entries. Each entry
; should take no more than 8 bytes.
;
.MACRO FTRANSFER_ENTRY routine
.ALIGN QUAD
.TRANSFER routine
.MASK routine
JMP routine+2
.ENDM FTRANSFER_ENTRY
.MACRO FTRANSFER_ENTRY routine
.ALIGN QUAD
.TRANSFER routine
.MASK routine
JMP routine+2
.ENDM TRANSFER_ENTRY
;
; Place entries in own program section.
;
$ write mar " .PSECT $$",libvec,",QUAD,PIC,USR,CON,REL,LCL,SHR,EXE,RD,NOWRT"
$ write mar " .PSECT $$",libvec,"QUAD,PIC,USR,CON,REL,LCL,SHR,EXE,RD,NOWRT"
$ write mar libvec,"_xfer:"
$ libwrch := mar
$ libwriter := write_vax_ftransfer_entry
@@ -178,10 +281,10 @@ $ type sys$input:/out=mar:
;
; Allocate extra storage at end of vector to allow for expansion.
;
$ write mar " .BLKB 32768-<.-",libvec,"_xfer> ; 64 pages total."
$! libwriter := write_vax_vtransfer_entry
$! gosub read_func_num
$ write mar " .END"
$ write mar " .BLKB 32768-<.-",libvec,"_xfer> ; 64 pages total."
$ libwriter := write_vax_vtransfer_entry
$ gosub read_func_num
$ write mar " .END"
$ close mar
$ open/write opt 'libopt'
$ write opt "identification=""",libid," ",libverstr,""""
@@ -202,7 +305,7 @@ $ type sys$input:/out=opt:
PSECT_ATTR=$CHAR_STRING_CONSTANTS,NOWRT
$ libwrch := opt
$ libwriter := write_vax_psect_attr
$ gosub read_func_num
$ gosub read_var_num
$ close opt
$ macro/obj='libobj' 'libmar'
$ link/map='libmap'/full/share='libgoal' 'libopt'/option
@@ -213,9 +316,9 @@ $ write_vax_ftransfer_entry:
$ if info_kind .nes. "FUNCTION" then return
$ if libentry .eqs ".dummy"
$ then
$ write 'libwrch' " .BLKB 8" ! Dummy is zeroes...
$ write 'libwrch' " .BLKB 8" ! Dummy is zeroes...
$ else
$ write 'libwrch' " FTRANSFER_ENTRY ",libentry
$ write 'libwrch' " FTRANSFER_ENTRY ",libentry
$ endif
$ return
$! The record writer routine for VAX variables (should never happen!)
@@ -245,6 +348,16 @@ $ info_exist=f$element(0,":",entryinfo)
$ info_platforms=","+f$element(1,":",entryinfo)+","
$ info_kind=f$element(2,":",entryinfo)
$ info_algorithms=","+f$element(3,":",entryinfo)+","
$!
$!DEBUG!$ write sys$output " Processing ... ", line
$!DEBUG!$ write sys$output "Entry num = ",entrynum
$!DEBUG!$ write sys$output "Entry info = ",entryinfo
$!DEBUG!$ write sys$output "Cur Entry = ",curentry
$!DEBUG!$ write sys$output "info exist = ",info_exist
$!DEBUG!$ write sys$output "info platforms = ",info_platforms
$!DEBUG!$ write sys$output "info kind = ",info_kind
$!DEBUG!$ write sys$output "info algs = ",info_algorithms
$!
$ if info_exist .eqs. "NOEXIST" then goto loop
$ truesum = 0
$ falsesum = 0
@@ -252,10 +365,15 @@ $ negatives = 1
$ plat_i = 0
$ loop1:
$ plat_entry = f$element(plat_i,",",info_platforms)
$!DEBUG!$ write sys$output "plat entry = ",plat_entry
$!
$ plat_i = plat_i + 1
$!DEBUG!$ write sys$output "plat i = ", plat_i
$ if plat_entry .eqs. "" then goto loop1
$ if plat_entry .nes. ","
$ if plat_entry .eqs. ","
$ then
$ goto endloop1
$ else
$ if f$extract(0,1,plat_entry) .nes. "!" then negatives = 0
$ if f$getsyi("CPU") .lt. 128
$ then
@@ -264,30 +382,48 @@ $ truesum = truesum + 1
$ if plat_entry .eqs. "!EXPORT_VAR_AS_FUNCTION" then -
$ falsesum = falsesum + 1
$ endif
$ if plat_entry .eqs. "VMS" then truesum = truesum + 1
$ if plat_entry .eqs. "!VMS" then falsesum = falsesum + 1
$ goto loop1
$ if plat_entry .eqs. "VMS"
$ then
$ truesum = truesum + 1
$!DEBUG!$ write sys$output "plat_entry = VMS"
$ endif
$!
$ if plat_entry .eqs. "!VMS"
$ then
$ falsesum = falsesum + 1
$!DEBUG!$ write sys$output "plat_entry <> VMS"
$ endif
$ endif
$ goto loop1
$!
$ endloop1:
$!DEBUG!$ if info_platforms - "EXPORT_VAR_AS_FUNCTION" .nes. info_platforms
$!DEBUG!$ then
$!DEBUG!$ write sys$output line
$!DEBUG!$ write sys$output " truesum = ",truesum,-
$!DEBUG! ", negatives = ",negatives,", falsesum = ",falsesum
$!DEBUG! ", negatives = ",negatives,", falsesum = ",falsesum
$!DEBUG!$ endif
$ if falsesum .ne. 0 then goto loop
$ if truesum+negatives .eq. 0 then goto loop
$ if truesum+negatives .eq. 0
$ then
$!DEBUG!$ write sys$output "truesum+negatives .eq. 0. Going to loop."
$ goto loop
$ endif
$ alg_i = 0
$ loop2:
$ alg_entry = f$element(alg_i,",",info_algorithms)
$ alg_i = alg_i + 1
$!DEBUG!$ write sys$output "alg entry = ",alg_entry
$ alg_i = alg_i + 1
$ if alg_entry .eqs. "" then goto loop2
$ if alg_entry .nes. ","
$ if alg_entry .eqs. ","
$ then
$ goto endloop2
$ else
$ if alg_entry .eqs. "KRB5" then goto loop ! Special for now
$ if f$trnlnm("OPENSSL_NO_"+alg_entry) .nes. "" then goto loop
$ goto loop2
$ endif
$ goto loop2
$!
$ endloop2:
$ if info_platforms - "EXPORT_VAR_AS_FUNCTION" .nes. info_platforms
$ then
@@ -323,15 +459,16 @@ $ goto 'next'
$ loop_end:
$ close libnum
$ return
$
$!
$! The version number reader
$ read_version_info:
$!
$read_version_info:
$ libver = ""
$ open/read vf [.CRYPTO]OPENSSLV.H
$ loop_rvi:
$ read/err=endloop_rvi/end=endloop_rvi vf rvi_line
$ if rvi_line - "SHLIB_VERSION_NUMBER """ .eqs. rvi_line then -
goto loop_rvi
goto loop_rvi
$ libverstr = f$element(1,"""",rvi_line)
$ libvmajor = f$element(0,".",libverstr)
$ libvminor = f$element(1,".",libverstr)
@@ -339,7 +476,7 @@ $ libvedit = f$element(2,".",libverstr)
$ libvpatch = f$cvui(0,8,f$extract(1,1,libvedit)+"@")-f$cvui(0,8,"@")
$ libvedit = f$extract(0,1,libvedit)
$ libver = f$string(f$int(libvmajor)*100)+","+-
f$string(f$int(libvminor)*100+f$int(libvedit)*10+f$int(libvpatch))
f$string(f$int(libvminor)*100+f$int(libvedit)*10+f$int(libvpatch))
$ if libvmajor .eqs. "0"
$ then
$ libvmatch = "EQUAL"

8
VMS/ssl$syshutdown.com Normal file
View File

@@ -0,0 +1,8 @@
$!
$! SSL$SYSHUTDOWN.COM - This command procedure is used for site specific SSL
$! shutdown tasks. Anything setup in SSL$SYSTARTUP.COM
$! should be cleaned up in this command procedure.
$!
$ DEASSIGN/SYSTEM/EXEC RANDFILE
$ DEASSIGN/SYSTEM/EXEC SSL$RANDFILE
$!

7
VMS/ssl$systartup.com Normal file
View File

@@ -0,0 +1,7 @@
$!
$!
$! Add logical to aid random number generators. -- http://www.free.lp.se/openssl/docs/openssl3.html#ss3.1
$!
$ DEFINE/SYSTEM/EXEC RANDFILE SSL$ROOT:[PRIVATE]RANDFILE.;
$ DEFINE/SYSTEM/EXEC SSL$RANDFILE SSL$ROOT:[PRIVATE]RANDFILE.;
$!

76
VMS/ssl$utils.com Normal file
View File

@@ -0,0 +1,76 @@
$!
$! APPS.COM
$! Written By: Robert Byer
$! Vice-President
$! A-Com Computing, Inc.
$! byer@mail.all-net.net
$!
$!
$! Slightly modified by Richard Levitte <richard@levitte.org>
$!
$ IF P1 .NES. "" THEN GOTO 'P1
$!
$DEFINE:
$!
$ OPENSSL :== $SSL$EXE:OPENSSL
$ VERIFY :== $SSL$EXE:OPENSSL VERIFY
$ ASN1PARSE:== $SSL$EXE:OPENSSL ASN1PARS
$ REQ :== $SSL$EXE:OPENSSL REQ
$ DGST :== $SSL$EXE:OPENSSL DGST
$ DH :== $SSL$EXE:OPENSSL DH
$ ENC :== $SSL$EXE:OPENSSL ENC
$ GENDH :== $SSL$EXE:OPENSSL GENDH
$ ERRSTR :== $SSL$EXE:OPENSSL ERRSTR
$ CA :== $SSL$EXE:OPENSSL CA
$ CRL :== $SSL$EXE:OPENSSL CRL
$ RSA :== $SSL$EXE:OPENSSL RSA
$ DSA :== $SSL$EXE:OPENSSL DSA
$ DSAPARAM :== $SSL$EXE:OPENSSL DSAPARAM
$ X509 :== $SSL$EXE:OPENSSL X509
$ GENRSA :== $SSL$EXE:OPENSSL GENRSA
$ GENDSA :== $SSL$EXE:OPENSSL GENDSA
$ S_SERVER :== $SSL$EXE:OPENSSL S_SERVER
$ S_CLIENT :== $SSL$EXE:OPENSSL S_CLIENT
$ SPEED :== $SSL$EXE:OPENSSL SPEED
$ S_TIME :== $SSL$EXE:OPENSSL S_TIME
$ VERSION :== $SSL$EXE:OPENSSL VERSION
$ PKCS7 :== $SSL$EXE:OPENSSL PKCS7
$ CRL2PKCS7:== $SSL$EXE:OPENSSL CRL2P7
$ SESS_ID :== $SSL$EXE:OPENSSL SESS_ID
$ CIPHERS :== $SSL$EXE:OPENSSL CIPHERS
$ NSEQ :== $SSL$EXE:OPENSSL NSEQ
$ PKCS12 :== $SSL$EXE:OPENSSL PKCS12
$!
$EXIT
$!
$REMOVE:
$ DELETE/SYMBOL/GLOBAL OPENSSL
$ DELETE/SYMBOL/GLOBAL VERIFY
$ DELETE/SYMBOL/GLOBAL ASN1PARSE
$ DELETE/SYMBOL/GLOBAL REQ
$ DELETE/SYMBOL/GLOBAL DGST
$ DELETE/SYMBOL/GLOBAL DH
$ DELETE/SYMBOL/GLOBAL ENC
$ DELETE/SYMBOL/GLOBAL GENDH
$ DELETE/SYMBOL/GLOBAL ERRSTR
$ DELETE/SYMBOL/GLOBAL CA
$ DELETE/SYMBOL/GLOBAL CRL
$ DELETE/SYMBOL/GLOBAL RSA
$ DELETE/SYMBOL/GLOBAL DSA
$ DELETE/SYMBOL/GLOBAL DSAPARAM
$ DELETE/SYMBOL/GLOBAL X509
$ DELETE/SYMBOL/GLOBAL GENRSA
$ DELETE/SYMBOL/GLOBAL GENDSA
$ DELETE/SYMBOL/GLOBAL S_SERVER
$ DELETE/SYMBOL/GLOBAL S_CLIENT
$ DELETE/SYMBOL/GLOBAL SPEED
$ DELETE/SYMBOL/GLOBAL S_TIME
$ DELETE/SYMBOL/GLOBAL VERSION
$ DELETE/SYMBOL/GLOBAL PKCS7
$ DELETE/SYMBOL/GLOBAL CRL2PKCS7
$ DELETE/SYMBOL/GLOBAL SESS_ID
$ DELETE/SYMBOL/GLOBAL CIPHERS
$ DELETE/SYMBOL/GLOBAL NSEQ
$ DELETE/SYMBOL/GLOBAL PKCS12
$!
$EXIT

25
VMS/ssl010.release_notes Normal file
View File

@@ -0,0 +1,25 @@
Compaq SSL for OpenVMS Alpha
Field Test Release Notes
February 2002
Based on OpenSSL 0.9.6B
Compaq SSL T1.0 for OpenVMS Alpha
CPQ-AXPVMS-SSL-T0100--1.PCSI-DCX-AXPEXE
----------------------------------------------
Compaq is pleased to provide you with the first release of Compaq
SSL for OpenVMS Alpha. Compaq SSL (Secure Sockets Layer)
is based on the 0.9.6B release from the Open Group. See
http://www.openssl.org for more information about OpenSSL.
Documentation for this kit, including installation and configuration
information, release notes, a programming tutorial and API reference,
is included in "Open Source Security for OpenVMS Alpha
Volume 2: SSL" in HTML, PDF, and PostScript format. This document
is included on the OpenVMS field test documentation CD-ROM.

1
VMS/tcpip_shr_decc.opt Normal file
View File

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

View File

@@ -253,6 +253,8 @@ int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
ASN1_GENERALIZEDTIME **pinvtm, char *str);
int make_serial_index(TXT_DB *db);
X509_NAME *do_subject(char *str, long chtype);
#define FORMAT_UNDEF 0
#define FORMAT_ASN1 1
#define FORMAT_TEXT 2

136
apps/ca.c
View File

@@ -238,7 +238,6 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst,
int verbose, X509_REQ *req, char *ext_sect, CONF *conf,
unsigned long certopt, unsigned long nameopt, int default_op,
int ext_copy);
static X509_NAME *do_subject(char *subject);
static int do_revoke(X509 *x509, TXT_DB *db, int ext, char *extval);
static int get_certificate_status(const char *ser_status, TXT_DB *db);
static int do_updatedb(TXT_DB *db);
@@ -1879,7 +1878,7 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst,
if (subj)
{
X509_NAME *n = do_subject(subj);
X509_NAME *n = do_subject(subj, MBSTRING_ASC);
if (!n)
{
@@ -3023,65 +3022,124 @@ int make_revoked(X509_REVOKED *rev, char *str)
return ret;
}
static X509_NAME *do_subject(char *subject)
/*
* subject is expected to be in the format /type0=value0/type1=value1/type2=...
* where characters may be escaped by \
*/
X509_NAME *do_subject(char *subject, long chtype)
{
size_t buflen = strlen(subject)+1; /* to copy the types and values into. due to escaping, the copy can only become shorter */
char *buf = OPENSSL_malloc(buflen);
size_t max_ne = buflen / 2 + 1; /* maximum number of name elements */
char **ne_types = OPENSSL_malloc(max_ne * sizeof (char *));
char **ne_values = OPENSSL_malloc(max_ne * sizeof (char *));
char *sp = subject, *bp = buf;
int i, ne_num = 0;
X509_NAME *n = NULL;
int nid;
int i, nid, ne_num=0;
if (!buf || !ne_types || !ne_values)
{
BIO_printf(bio_err, "malloc error\n");
goto error;
}
char *ne_name = NULL;
char *ne_value = NULL;
if (*subject != '/')
{
BIO_printf(bio_err, "Subject does not start with '/'.\n");
goto error;
}
sp++; /* skip leading / */
char *tmp = NULL;
char *p[2];
char *str_list[256];
p[0] = ",/";
p[1] = "=";
n = X509_NAME_new();
tmp = strtok(subject, p[0]);
while((tmp != NULL) && (ne_num < (sizeof str_list/sizeof *str_list)))
while (*sp)
{
/* collect type */
ne_types[ne_num] = bp;
while (*sp)
{
char *token = tmp;
while (token[0] == ' ')
token++;
str_list[ne_num] = token;
tmp = strtok(NULL, p[0]);
ne_num++;
if (*sp == '\\') /* is there anything to escape in the type...? */
if (*++sp)
*bp++ = *sp++;
else
{
BIO_printf(bio_err, "escape character at end of string\n");
goto error;
}
else if (*sp == '=')
{
sp++;
*bp++ = '\0';
break;
}
else
*bp++ = *sp++;
}
if (!*sp)
{
BIO_printf(bio_err, "end of string encountered while processing type of subject name element #%d\n", ne_num);
goto error;
}
ne_values[ne_num] = bp;
while (*sp)
{
if (*sp == '\\')
if (*++sp)
*bp++ = *sp++;
else
{
BIO_printf(bio_err, "escape character at end of string\n");
goto error;
}
else if (*sp == '/')
{
sp++;
break;
}
else
*bp++ = *sp++;
}
*bp++ = '\0';
ne_num++;
}
if (!(n = X509_NAME_new()))
goto error;
for (i = 0; i < ne_num; i++)
{
ne_name = strtok(str_list[i], p[1]);
ne_value = strtok(NULL, p[1]);
if ((nid=OBJ_txt2nid(ne_name)) == NID_undef)
if ((nid=OBJ_txt2nid(ne_types[i])) == NID_undef)
{
BIO_printf(bio_err, "Subject Attribute %s has no known NID, skipped\n", ne_name);
BIO_printf(bio_err, "Subject Attribute %s has no known NID, skipped\n", ne_types[i]);
continue;
}
if (ne_value == NULL)
if (!*ne_values[i])
{
BIO_printf(bio_err, "No value provided for Subject Attribute %s, skipped\n", ne_name);
BIO_printf(bio_err, "No value provided for Subject Attribute %s, skipped\n", ne_types[i]);
continue;
}
if (!X509_NAME_add_entry_by_NID(n, nid, MBSTRING_ASC, (unsigned char*)ne_value, -1,-1,0))
{
X509_NAME_free(n);
return NULL;
}
if (!X509_NAME_add_entry_by_NID(n, nid, chtype, (unsigned char*)ne_values[i], -1,-1,0))
goto error;
}
OPENSSL_free(ne_values);
OPENSSL_free(ne_types);
OPENSSL_free(buf);
return n;
}
error:
X509_NAME_free(n);
if (ne_values)
OPENSSL_free(ne_values);
if (ne_types)
OPENSSL_free(ne_types);
if (buf)
OPENSSL_free(buf);
return NULL;
}
int old_entry_print(BIO *bp, ASN1_OBJECT *obj, ASN1_STRING *str)
{

View File

@@ -87,6 +87,7 @@ static char *crl_usage[]={
" -noout - no CRL output\n",
" -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
};
@@ -97,6 +98,7 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv)
{
unsigned long nmflag = 0;
X509_CRL *x=NULL;
char *CAfile = NULL, *CApath = NULL;
int ret=1,i,num,badops=0;
@@ -105,7 +107,7 @@ int MAIN(int argc, char **argv)
char *infile=NULL,*outfile=NULL;
int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0;
int fingerprint = 0;
char **pp,buf[256];
char **pp;
X509_STORE *store = NULL;
X509_STORE_CTX ctx;
X509_LOOKUP *lookup = NULL;
@@ -188,6 +190,11 @@ int MAIN(int argc, char **argv)
text = 1;
else if (strcmp(*argv,"-hash") == 0)
hash= ++num;
else if (strcmp(*argv,"-nameopt") == 0)
{
if (--argc < 1) goto bad;
if (!set_name_ex(&nmflag, *(++argv))) goto bad;
}
else if (strcmp(*argv,"-issuer") == 0)
issuer= ++num;
else if (strcmp(*argv,"-lastupdate") == 0)
@@ -271,9 +278,7 @@ bad:
{
if (issuer == i)
{
X509_NAME_oneline(X509_CRL_get_issuer(x),
buf,256);
BIO_printf(bio_out,"issuer= %s\n",buf);
print_name(bio_out, "issuer=", X509_CRL_get_issuer(x), nmflag);
}
if (hash == i)

View File

@@ -186,7 +186,7 @@ bad:
BIO_printf(bio_err," -outform arg output format - DER or PEM\n");
BIO_printf(bio_err," -in arg input file\n");
BIO_printf(bio_err," -out arg output file\n");
BIO_printf(bio_err," -text print the key in text\n");
BIO_printf(bio_err," -text print as text\n");
BIO_printf(bio_err," -C Output C code\n");
BIO_printf(bio_err," -noout no output\n");
BIO_printf(bio_err," -genkey generate a DSA key\n");

View File

@@ -336,7 +336,7 @@ bad:
BIO_printf(bio_err," -outform arg output format - DER or PEM\n");
BIO_printf(bio_err," -in arg input file\n");
BIO_printf(bio_err," -out arg output file\n");
BIO_printf(bio_err," -text print the key in text\n");
BIO_printf(bio_err," -text print as text\n");
BIO_printf(bio_err," -C Output C code\n");
BIO_printf(bio_err," -check validate the ec parameters\n");
BIO_printf(bio_err," -noout no output\n");

View File

@@ -485,11 +485,6 @@ bad:
else
memset(str,0,strlen(str));
}
if ((hiv != NULL) && !set_hex(hiv,iv,sizeof iv))
{
BIO_printf(bio_err,"invalid hex iv value\n");
goto end;
}
if ((hiv == NULL) && (str == NULL))
{
/* No IV was explicitly set and no IV was generated
@@ -498,6 +493,11 @@ bad:
BIO_printf(bio_err, "iv undefined\n");
goto end;
}
if ((hiv != NULL) && !set_hex(hiv,iv,sizeof iv))
{
BIO_printf(bio_err,"invalid hex iv value\n");
goto end;
}
if ((hkey != NULL) && !set_hex(hkey,key,sizeof key))
{
BIO_printf(bio_err,"invalid hex key value\n");

View File

@@ -62,7 +62,9 @@ $ 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
$ COPY OPENSSL-VMS.CNF WRK_SSLROOT:[000000]OPENSSL-VMS.CNF/LOG
$ SET FILE/PROT=W:R WRK_SSLROOT:[000000]OPENSSL-VMS.CNF
$ COPY OPENSSL.CNF WRK_SSLROOT:[000000]OPENSSL.CNF/LOG
$ SET FILE/PROT=W:R WRK_SSLROOT:[000000]OPENSSL.CNF
$ SET ON
$

View File

@@ -44,12 +44,19 @@ $! keywords:
$!
$! UCX for UCX
$! SOCKETSHR for SOCKETSHR+NETLIB
$! TCPIP for TCPIP (post UCX)
$!
$! P5, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
$!
$! P6, if defined, sets a choice of programs to compile.
$!
$!
$!
$! Define USER_CCFLAGS
$!
$ @[-]vms_build_info.com
$ WRITE SYS$OUTPUT " Using USER_CCFLAGS = ", USER_CCFLAGS
$!
$! Define A TCP/IP Library That We Will Need To Link To.
$! (That Is, If We Need To Link To One.)
$!
@@ -98,15 +105,15 @@ $ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine."
$!
$! Define The CRYPTO Library.
$!
$ CRYPTO_LIB := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]LIBCRYPTO.OLB
$ CRYPTO_LIB := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]LIBCRYPTO'build_bits'.OLB
$!
$! Define The RSAREF Library.
$!
$ RSAREF_LIB := SYS$DISK:[-.'ARCH'.EXE.RSAREF]LIBRSAGLUE.OLB
$ RSAREF_LIB := SYS$DISK:[-.'ARCH'.EXE.RSAREF]LIBRSAGLUE'build_bits'.OLB
$!
$! Define The SSL Library.
$!
$ SSL_LIB := SYS$DISK:[-.'ARCH'.EXE.SSL]LIBSSL.OLB
$ SSL_LIB := SYS$DISK:[-.'ARCH'.EXE.SSL]LIBSSL'build_bits'.OLB
$!
$! Define The OBJ Directory.
$!
@@ -125,6 +132,23 @@ $! End The OBJ Directory Check.
$!
$ ENDIF
$!
$! Define The LIS Directory.
$!
$ LIS_DIR := SYS$DISK:[-.'ARCH'.LIS.APPS]
$!
$! Check To See If The OBJ Directory Exists.
$!
$ IF (F$PARSE(LIS_DIR).EQS."")
$ THEN
$!
$! It Dosen't Exist, So Create It.
$!
$ CREATE/DIRECTORY 'LIS_DIR'
$!
$! End The LIS Directory Check.
$!
$ ENDIF
$!
$! Define The EXE Directory.
$!
$ EXE_DIR := SYS$DISK:[-.'ARCH'.EXE.APPS]
@@ -155,13 +179,13 @@ $!
$ LIB_FILES = "VERIFY;ASN1PARS;REQ;DGST;DH;DHPARAM;ENC;PASSWD;GENDH;ERRSTR;"+-
"CA;PKCS7;CRL2P7;CRL;"+-
"RSA;RSAUTL;DSA;DSAPARAM;"+-
"X509;GENRSA;GENDSA;S_SERVER;S_CLIENT;SPEED;"+-
"X509;GENRSA;GENDSA;TERM_SOCK;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"
$ APP_FILES := OPENSSL,'OBJ_DIR'VERIFY.OBJ,ASN1PARS.OBJ,REQ.OBJ,DGST.OBJ,DH.OBJ,DHPARAM.OBJ,ENC.OBJ,PASSWD.OBJ,GENDH.OBJ,ERRSTR.OBJ,-
CA.OBJ,PKCS7.OBJ,CRL2P7.OBJ,CRL.OBJ,-
RSA.OBJ,RSAUTL.OBJ,DSA.OBJ,DSAPARAM.OBJ,-
X509.OBJ,GENRSA.OBJ,GENDSA.OBJ,S_SERVER.OBJ,S_CLIENT.OBJ,SPEED.OBJ,-
X509.OBJ,GENRSA.OBJ,GENDSA.OBJ,TERM_SOCK.OBJ,S_SERVER.OBJ,S_CLIENT.OBJ,SPEED.OBJ,-
S_TIME.OBJ,APPS.OBJ,S_CB.OBJ,S_SOCKET.OBJ,APP_RAND.OBJ,VERSION.OBJ,SESS_ID.OBJ,-
CIPHERS.OBJ,NSEQ.OBJ,PKCS12.OBJ,PKCS8.OBJ,SPKAC.OBJ,SMIME.OBJ,RAND.OBJ,ENGINE.OBJ,OCSP.OBJ
$ TCPIP_PROGRAMS = ",,"
@@ -234,6 +258,10 @@ $! Create The Object File Name.
$!
$ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
$!
$! Create The Listing File Name.
$!
$ LIST_FILE = LIS_DIR + FILE_NAME + ".LIS"
$!
$! Create The Executable File Name.
$!
$ EXE_FILE = EXE_DIR + FILE_NAME + ".EXE"
@@ -247,7 +275,7 @@ $!
$! 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 F$MESSAGE("%X10018290") + ". The File ",SOURCE_FILE," Dosen't Exist."
$ WRITE SYS$OUTPUT ""
$!
$! Exit The Build.
@@ -272,9 +300,9 @@ $!
$ ON ERROR THEN GOTO NEXT_FILE
$ IF COMPILEWITH_CC2 - FILE_NAME .NES. COMPILEWITH_CC2
$ THEN
$ CC2/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
$ CC2/OBJECT='OBJECT_FILE'/LIST='LIST_FILE'/MACHINE_CODE 'SOURCE_FILE'
$ ELSE
$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
$ CC/OBJECT='OBJECT_FILE'/LIST='LIST_FILE'/MACHINE_CODE 'SOURCE_FILE'
$ ENDIF
$!
$ ON WARNING THEN GOTO NEXT_FILE
@@ -304,10 +332,14 @@ $ THEN
$!
$! Link With The RSAREF Library And A Specific TCP/IP Library.
$!
$ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
$ LINK /'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' /MAP='MAP_FILE' /FULL/CROSS -
'OBJECT_FILE''EXTRA_OBJ', -
'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY,'RSAREF_LIB'/LIBRARY, -
'TCPIP_LIB','OPT_FILE'/OPTION
'SSL_LIB'/LIBRARY,-
'CRYPTO_LIB'/LIBRARY, -
'RSAREF_LIB'/LIBRARY, -
'TCPIP_LIB', -
'OPT_FILE'/OPTION, -
SYS$DISK:[-]SSL_IDENT.OPT/OPTION
$!
$! Else...
$!
@@ -315,10 +347,13 @@ $ ELSE
$!
$! Link With The RSAREF Library And NO TCP/IP Library.
$!
$ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
$ LINK /'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' /MAP='MAP_FILE' /FULL/CROSS -
'OBJECT_FILE''EXTRA_OBJ', -
'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY,'RSAREF_LIB'/LIBRARY, -
'OPT_FILE'/OPTION
'SSL_LIB'/LIBRARY, -
'CRYPTO_LIB'/LIBRARY, -
'RSAREF_LIB'/LIBRARY, -
'OPT_FILE'/OPTION, -
SYS$DISK:[-]SSL_IDENT.OPT/OPTION
$!
$! End The TCP/IP Library Check.
$!
@@ -338,10 +373,14 @@ $ THEN
$!
$! Don't Link With The RSAREF Routines And TCP/IP Library.
$!
$ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
$ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' /MAP='MAP_FILE' /FULL/CROSS -
'OBJECT_FILE''EXTRA_OBJ', -
'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
'TCPIP_LIB','OPT_FILE'/OPTION
'SSL_LIB'/LIBRARY, -
'CRYPTO_LIB'/LIBRARY, -
'TCPIP_LIB', -
'OPT_FILE'/OPTION, -
SYS$DISK:[-]SSL_IDENT.OPT/OPTION
$!
$! Else...
$!
@@ -349,10 +388,13 @@ $ ELSE
$!
$! Don't Link With The RSAREF Routines And Link With A TCP/IP Library.
$!
$ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
$ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' /MAP='MAP_FILE' /FULL/CROSS -
'OBJECT_FILE''EXTRA_OBJ', -
'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
'OPT_FILE'/OPTION
'SSL_LIB'/LIBRARY, -
'CRYPTO_LIB'/LIBRARY, -
'OPT_FILE'/OPTION, -
SYS$DISK:[-]SSL_IDENT.OPT/OPTION
$!
$!
$! End The TCP/IP Library Check.
$!
@@ -489,6 +531,7 @@ $! End The Option File Search.
$!
$ ENDIF
$!
$!
$! End The DEC C Check.
$!
$ ENDIF
@@ -838,12 +881,12 @@ $ CC = "CC"
$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
THEN CC = "CC/DECC"
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
"/NOLIST/PREFIX=ALL" + -
"/PREFIX=ALL" + -
"/INCLUDE=(SYS$DISK:[-])" + CCEXTRAFLAGS
$!
$! Define The Linker Options File Name.
$!
$ OPT_FILE = "SYS$DISK:[]VAX_DECC_OPTIONS.OPT"
$ OPT_FILE = "SYS$DISK:[]''arch'_DECC_OPTIONS.OPT"
$!
$! End DECC Check.
$!
@@ -870,7 +913,7 @@ $ WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
$ EXIT
$ ENDIF
$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'" + -
"/INCLUDE=(SYS$DISK:[-])" + CCEXTRAFLAGS
$ CCDEFS = CCDEFS + ",""VAXC"""
$!
@@ -880,7 +923,7 @@ $ DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
$!
$! Define The Linker Options File Name.
$!
$ OPT_FILE = "SYS$DISK:[]VAX_VAXC_OPTIONS.OPT"
$ OPT_FILE = "SYS$DISK:[]''arch'_VAXC_OPTIONS.OPT"
$!
$! End VAXC Check
$!
@@ -902,12 +945,12 @@ $!
$! Use GNU C...
$!
$ IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC
$ CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
$ CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'" + -
"/INCLUDE=(SYS$DISK:[-])" + CCEXTRAFLAGS
$!
$! Define The Linker Options File Name.
$!
$ OPT_FILE = "SYS$DISK:[]VAX_GNUC_OPTIONS.OPT"
$ OPT_FILE = "SYS$DISK:[]''arch'_GNUC_OPTIONS.OPT"
$!
$! End The GNU C Check.
$!
@@ -963,7 +1006,7 @@ $ ENDIF
$!
$! Time to check the contents, and to make sure we get the correct library.
$!
$ IF P4.EQS."SOCKETSHR" .OR. P4.EQS."MULTINET" .OR. P4.EQS."UCX"
$ IF P4.EQS."SOCKETSHR" .OR. P4.EQS."MULTINET" .OR. P4.EQS."UCX" .OR. P4.EQS."TCPIP" .OR. P4.EQS."NONE"
$ THEN
$!
$! Check to see if SOCKETSHR was chosen
@@ -973,7 +1016,7 @@ $ THEN
$!
$! Set the library to use SOCKETSHR
$!
$ TCPIP_LIB = "[-.VMS]SOCKETSHR_SHR.OPT/OPT"
$ TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT"
$!
$! Done with SOCKETSHR
$!
@@ -999,19 +1042,45 @@ $ THEN
$!
$! Set the library to use UCX.
$!
$ TCPIP_LIB = "[-.VMS]UCX_SHR_DECC.OPT/OPT"
$ TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT/OPT"
$ IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
$ THEN
$ TCPIP_LIB = "[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT"
$ TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT"
$ ELSE
$ IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
TCPIP_LIB = "[-.VMS]UCX_SHR_VAXC.OPT/OPT"
TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT/OPT"
$ ENDIF
$!
$! Done with UCX
$!
$ ENDIF
$!
$! Check to see if TCPIP (post UCX) was chosen
$!
$ IF P4.EQS."TCPIP"
$ THEN
$!
$! Set the library to use TCPIP.
$!
$ TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT"
$!
$! Done with TCPIP
$!
$ ENDIF
$!
$! Check to see if NONE was chosen
$!
$ IF P4.EQS."NONE"
$ THEN
$!
$! Do not use TCPIP.
$!
$ TCPIP_LIB = ""
$!
$! Done with TCPIP
$!
$ ENDIF
$!
$! Add TCP/IP type to CC definitions.
$!
$ CCDEFS = CCDEFS + ",TCPIP_TYPE_''P4'"
@@ -1031,6 +1100,7 @@ $ WRITE SYS$OUTPUT "The Option ",P4," Is Invalid. The Valid Options Are:"
$ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT " SOCKETSHR : To link with SOCKETSHR TCP/IP library."
$ WRITE SYS$OUTPUT " UCX : To link with UCX TCP/IP library."
$ WRITE SYS$OUTPUT " TCPIP : To link with TCPIP (post UCX) TCP/IP library."
$ WRITE SYS$OUTPUT ""
$!
$! Time To EXIT.

View File

@@ -3,8 +3,8 @@
# This is mostly being used for generation of certificate requests.
#
RANDFILE = $ENV::HOME/.rnd
oid_file = $ENV::HOME/.oid
RANDFILE = ${ENV::HOME}/.rnd
oid_file = ${ENV::HOME}/.oid
oid_section = new_oids
# To use this configuration file with the "-extfile" option of the
@@ -29,17 +29,17 @@ default_ca = CA_default # The default ca section
####################################################################
[ CA_default ]
dir = sys\$disk:[.demoCA # Where everything is kept
certs = $dir.certs] # Where the issued certs are kept
crl_dir = $dir.crl] # Where the issued crl are kept
database = $dir]index.txt # database index file.
new_certs_dir = $dir.newcerts] # default place for new certs.
dir = ssl$root:[000000 # Where everything is kept
certs = ${dir}.certs] # Where the issued certs are kept
crl_dir = ${dir}.certs] # Where the issued crl are kept
database = ${dir}.private]index.txt # database index file.
new_certs_dir = ${dir}.certs] # default place for new certs.
certificate = $dir]cacert.pem # The CA certificate
serial = $dir]serial. # The current serial number
crl = $dir]crl.pem # The current CRL
private_key = $dir.private]cakey.pem# The private key
RANDFILE = $dir.private].rand # private random number file
certificate = ${dir}]cacert.pem # The CA certificate
serial = ${dir}.private]serial.txt # The current serial number
crl = ${dir}]crl.pem # The current CRL
private_key = ${dir}.private]cakey.pem # The private key
RANDFILE = ${dir}.private].rand # private random number file
x509_extensions = usr_cert # The extentions to add to the cert
@@ -60,8 +60,8 @@ policy = policy_match
# For the CA policy
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
stateOrProvinceName = supplied
organizationName = supplied
organizationalUnitName = optional
commonName = supplied
emailAddress = optional

View File

@@ -138,6 +138,18 @@ static unsigned long MS_CALLBACK hash(const void *a_void);
/* static int MS_CALLBACK cmp(FUNCTION *a,FUNCTION *b); */
static int MS_CALLBACK cmp(const void *a_void,const void *b_void);
static LHASH *prog_init(void );
#ifdef OPENSSL_SYS_VMS
#if __INITIAL_POINTER_SIZE == 64
#pragma __required_pointer_size __save
#pragma __required_pointer_size 32
#endif
typedef char ** Argv_32;
#if __INITIAL_POINTER_SIZE == 64
#pragma __required_pointer_size __restore
#endif
#endif
static int do_cmd(LHASH *prog,int argc,char *argv[]);
CONF *config=NULL;
char *default_config_file=NULL;
@@ -212,7 +224,11 @@ static void lock_dbg_cb(int mode, int type, const char *file, int line)
}
#ifdef OPENSSL_SYS_VMS
int main(int Argc, Argv_32 argv32)
#else
int main(int Argc, char *Argv[])
#endif
{
ARGS arg;
#define PROG_NAME_SIZE 39
@@ -222,8 +238,16 @@ int main(int Argc, char *Argv[])
int n,i,ret=0;
int argc;
char **argv,*p;
#ifdef OPENSSL_SYS_VMS
#if __INITIAL_POINTER_SIZE == 64
char **argv64;
#endif
#endif
LHASH *prog=NULL;
long errline;
int loop; /* For checking if it's first round in the OpenSSL commandline loop */
arg.data=NULL;
arg.count=0;
@@ -284,14 +308,23 @@ int main(int Argc, char *Argv[])
prog=prog_init();
/* first check the program name */
#ifdef OPENSSL_SYS_VMS
program_name(argv32[0],pname,PROG_NAME_SIZE);
#else
program_name(Argv[0],pname,PROG_NAME_SIZE);
#endif
f.name=pname;
fp=(FUNCTION *)lh_retrieve(prog,&f);
if (fp != NULL)
{
#ifdef OPENSSL_SYS_VMS
argv32[0]=pname;
ret=fp->func(Argc,argv32);
#else
Argv[0]=pname;
ret=fp->func(Argc,Argv);
#endif
goto end;
}
@@ -300,14 +333,32 @@ int main(int Argc, char *Argv[])
if (Argc != 1)
{
Argc--;
#ifdef OPENSSL_SYS_VMS
argv32++;
#if __INITIAL_POINTER_SIZE == 64
argv64=(char **)_malloc64(sizeof(char *)*Argc); /* memory allocation in 64-bit address */
for (i=0;i<Argc;i++)
{
argv64[i]=argv32[i]; /* copying 32-bit Argv to 64-bit argv*/
}
ret=do_cmd(prog,Argc,argv64);
free(argv64);
#else
ret=do_cmd(prog,Argc,argv32);
#endif
#else
Argv++;
ret=do_cmd(prog,Argc,Argv);
#endif
if (ret < 0) ret=0;
goto end;
}
/* ok, lets enter the old 'OpenSSL>' mode */
loop=0;
for (;;)
{
ret=0;
@@ -319,7 +370,14 @@ int main(int Argc, char *Argv[])
p[0]='\0';
if (i++)
prompt=">";
else prompt="OpenSSL> ";
else
if(loop == 0){ /* first round in this loop*/
prompt="OpenSSL> ";
loop++;
}
else
prompt="\nOpenSSL> ";
fputs(prompt,stdout);
fflush(stdout);
fgets(p,n,stdin);
@@ -369,6 +427,7 @@ end:
#define LIST_MESSAGE_DIGEST_COMMANDS "list-message-digest-commands"
#define LIST_CIPHER_COMMANDS "list-cipher-commands"
static int do_cmd(LHASH *prog, int argc, char *argv[])
{
FUNCTION f,*fp;

View File

@@ -6,7 +6,15 @@
# This definition stops the following lines choking if HOME isn't
# defined.
HOME = .
RANDFILE = $ENV::HOME/.rnd
#
# From the instructions at http://www.free.lp.se/openssl/docs/openssl3.html#ss3.1,
# change the value of RANDFILE. Also moved definition of dir up since RANDFILE
# depends on it.
#
#RANDFILE = $ENV::HOME/.rnd
dir = SSLROOT:[000000 # Where everything is kept
RANDFILE = $dir.private]RANDFILE.;
# Extra OBJECT IDENTIFIER info:
#oid_file = $ENV::HOME/.oid
@@ -33,8 +41,12 @@ default_ca = CA_default # The default ca section
####################################################################
[ CA_default ]
dir = ./demoCA # Where everything is kept
#
# From the instructions at http://www.free.lp.se/openssl/docs/openssl3.html#ss3.1,
# change the value of dir.
#
#dir = sys\$disk:[.demoCA # Where everything is kept
dir = SSLROOT:[000000 # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
@@ -174,6 +186,11 @@ basicConstraints=CA:FALSE
# and for everything including object signing:
# nsCertType = client, email, objsign
#
# From the instructions at http://www.free.lp.se/openssl/docs/openssl3.html#ss3.1,
# include server in the nsCertType.
#
nsCertType = client, email, objsign, server
# This is typical in keyUsage for a client certificate.
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment

View File

@@ -779,7 +779,10 @@ int dump_certs_pkeys_bag (BIO *out, PKCS12_SAFEBAG *bag, char *pass,
print_attribs (out, bag->attrib, "Bag Attributes");
if (!(p8 = PKCS12_decrypt_skey(bag, pass, passlen)))
return 0;
if (!(pkey = EVP_PKCS82PKEY (p8))) return 0;
if (!(pkey = EVP_PKCS82PKEY (p8))) {
PKCS8_PRIV_KEY_INFO_free(p8);
return 0;
}
print_attribs (out, p8->attributes, "Key Attributes");
PKCS8_PRIV_KEY_INFO_free(p8);
PEM_write_bio_PrivateKey (out, pkey, enc, NULL, 0, NULL, pempass);

View File

@@ -505,6 +505,7 @@ bad:
BIO_printf(bio_err," -extensions .. specify certificate extension section (override value in config file)\n");
BIO_printf(bio_err," -reqexts .. specify request extension section (override value in config file)\n");
BIO_printf(bio_err," -utf8 input characters are UTF8 (default ASCII)\n");
BIO_printf(bio_err," -nameopt arg - various certificate name options\n");
goto end;
}
@@ -1210,64 +1211,22 @@ err:
return(ret);
}
/*
* subject is expected to be in the format /type0=value0/type1=value1/type2=...
* where characters may be escaped by \
*/
static int build_subject(X509_REQ *req, char *subject, unsigned long chtype)
{
X509_NAME *n = NULL;
X509_NAME *n;
int i, nid, ne_num=0;
char *ne_name = NULL;
char *ne_value = NULL;
char *tmp = NULL;
char *p[2];
char *str_list[256];
p[0] = ",/";
p[1] = "=";
n = X509_NAME_new();
tmp = strtok(subject, p[0]);
while((tmp != NULL) && (ne_num < (sizeof str_list/sizeof *str_list)))
{
char *token = tmp;
while (token[0] == ' ')
token++;
str_list[ne_num] = token;
tmp = strtok(NULL, p[0]);
ne_num++;
}
for(i = 0; i < ne_num; i++)
{
ne_name = strtok(str_list[i], p[1]);
ne_value = strtok(NULL, p[1]);
if ((nid=OBJ_txt2nid(ne_name)) == NID_undef)
{
BIO_printf(bio_err, "Subject Attribute %s has no known NID, skipped\n", ne_name);
continue;
}
if (ne_value == NULL)
{
BIO_printf(bio_err, "No value provided for Subject Attribute %s, skipped\n", ne_name);
continue;
}
if (!X509_NAME_add_entry_by_NID(n, nid, chtype, (unsigned char*)ne_value, -1,-1,0))
{
X509_NAME_free(n);
return 0;
}
}
if (!(n = do_subject(subject, chtype)))
return 0;
if (!X509_REQ_set_subject_name(req, n))
{
X509_NAME_free(n);
return 0;
}
X509_NAME_free(n);
return 1;
}

View File

@@ -239,16 +239,18 @@ long MS_CALLBACK bio_dump_cb(BIO *bio, int cmd, const char *argp, int argi,
if (cmd == (BIO_CB_READ|BIO_CB_RETURN))
{
BIO_printf(out,"read from %08X [%08lX] (%d bytes => %ld (0x%X))\n",
BIO_printf(out,"read from %08X [%08lX] (%d bytes => %ld (0x%X))\n\n",
bio,argp,argi,ret,ret);
BIO_dump(out,argp,(int)ret);
BIO_printf(out,"\n");
return(ret);
}
else if (cmd == (BIO_CB_WRITE|BIO_CB_RETURN))
{
BIO_printf(out,"write to %08X [%08lX] (%d bytes => %ld (0x%X))\n",
BIO_printf(out,"write to %08X [%08lX] (%d bytes => %ld (0x%X))\n\n",
bio,argp,argi,ret,ret);
BIO_dump(out,argp,(int)ret);
BIO_printf(out,"\n");
}
return(ret);
}
@@ -266,7 +268,7 @@ void MS_CALLBACK apps_ssl_info_callback(const SSL *s, int where, int ret)
if (where & SSL_CB_LOOP)
{
BIO_printf(bio_err,"%s:%s\n",str,SSL_state_string_long(s));
BIO_printf(bio_err,"%s:%s\n\n",str,SSL_state_string_long(s));
}
else if (where & SSL_CB_ALERT)
{

View File

@@ -141,6 +141,10 @@ typedef unsigned int u_int;
#endif
#ifdef OPENSSL_SYS_VMS
#include "term_sock.h"
#endif
#if (defined(OPENSSL_SYS_VMS) && __VMS_VER < 70000000)
/* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */
#undef FIONBIO
@@ -251,6 +255,10 @@ int MAIN(int argc, char **argv)
#ifdef OPENSSL_SYS_WINDOWS
struct timeval tv;
#endif
#ifdef OPENSSL_SYS_VMS
int stdin_sock;
TerminalSocket (TERM_SOCK_CREATE, &stdin_sock);
#endif
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
meth=SSLv23_client_method();
@@ -436,10 +444,10 @@ bad:
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
&& !RAND_status())
{
BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n\n");
}
if (inrand != NULL)
BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
BIO_printf(bio_err,"%ld semi-random bytes loaded\n\n",
app_RAND_load_files(inrand));
if (bio_c_out == NULL)
@@ -516,7 +524,7 @@ re_start:
SHUTDOWN(s);
goto end;
}
BIO_printf(bio_c_out,"CONNECTED(%08X)\n",s);
BIO_printf(bio_c_out,"CONNECTED(%08X)\n\n",s);
#ifdef FIONBIO
if (c_nbio)
@@ -557,6 +565,11 @@ re_start:
SSL_set_connect_state(con);
/* ok, lets connect */
#ifdef OPENSSL_SYS_VMS
if (stdin_sock > SSL_get_fd(con))
width=stdin_sock+1;
else
#endif
width=SSL_get_fd(con)+1;
read_tty=1;
@@ -623,8 +636,12 @@ re_start:
#ifndef OPENSSL_SYS_WINDOWS
if (tty_on)
{
if (read_tty) FD_SET(fileno(stdin),&readfds);
if (write_tty) FD_SET(fileno(stdout),&writefds);
#ifdef OPENSSL_SYS_VMS
if (read_tty) FD_SET(stdin_sock,&readfds);
#else
if (read_tty) FD_SET(fileno(stdin),&readfds);
if (write_tty) FD_SET(fileno(stdout),&writefds);
#endif
}
if (read_ssl)
FD_SET(SSL_get_fd(con),&readfds);
@@ -746,7 +763,7 @@ re_start:
goto shut;
}
}
#ifdef OPENSSL_SYS_WINDOWS
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_VMS)
/* Assume Windows can always write */
else if (!ssl_pending && write_tty)
#else
@@ -805,7 +822,7 @@ printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240
read_tty=0;
break;
case SSL_ERROR_WANT_READ:
BIO_printf(bio_c_out,"read R BLOCK\n");
BIO_printf(bio_c_out,"read R BLOCK\n\n");
write_tty=0;
read_ssl=1;
if ((read_tty == 0) && (write_ssl == 0))
@@ -830,14 +847,22 @@ printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240
#ifdef OPENSSL_SYS_WINDOWS
else if ((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0)))
#else
else if (FD_ISSET(fileno(stdin),&readfds))
#ifdef OPENSSL_SYS_VMS
else if (FD_ISSET(stdin_sock,&readfds))
#else
else if (FD_ISSET(fileno(stdin),&readfds))
#endif
#endif
{
if (crlf)
{
int j, lf_num;
i=read(fileno(stdin),cbuf,BUFSIZZ/2);
#ifdef OPENSSL_SYS_VMS
i=recv(stdin_sock,cbuf,BUFSIZZ/2,0);
#else
i=read(fileno(stdin),cbuf,BUFSIZZ/2);
#endif
lf_num = 0;
/* both loops are skipped when i <= 0 */
for (j = 0; j < i; j++)
@@ -856,7 +881,11 @@ printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240
assert(lf_num == 0);
}
else
i=read(fileno(stdin),cbuf,BUFSIZZ);
#ifdef OPENSSL_SYS_VMS
i=recv(stdin_sock,cbuf,BUFSIZZ,0);
#else
i=read(fileno(stdin),cbuf,BUFSIZZ);
#endif
if ((!c_ign_eof) && ((i <= 0) || (cbuf[0] == 'Q')))
{
@@ -901,6 +930,9 @@ end:
bio_c_out=NULL;
}
apps_shutdown();
#ifdef OPENSSL_SYS_VMS
TerminalSocket (TERM_SOCK_DELETE, &stdin_sock);
#endif
EXIT(ret);
}
@@ -934,7 +966,7 @@ static void print_stuff(BIO *bio, SSL *s, int full)
BIO_printf(bio,"%2d s:%s\n",i,buf);
X509_NAME_oneline(X509_get_issuer_name(
sk_X509_value(sk,i)),buf,BUFSIZ);
BIO_printf(bio," i:%s\n",buf);
BIO_printf(bio," i:%s\n\n",buf);
if (c_showcerts)
PEM_write_bio_X509(bio,sk_X509_value(sk,i));
}
@@ -1008,7 +1040,7 @@ static void print_stuff(BIO *bio, SSL *s, int full)
}
BIO_printf(bio,((s->hit)?"---\nReused, ":"---\nNew, "));
c=SSL_get_current_cipher(s);
BIO_printf(bio,"%s, Cipher is %s\n",
BIO_printf(bio,"%s, Cipher is %s\n\n",
SSL_CIPHER_get_version(c),
SSL_CIPHER_get_name(c));
if (peer != NULL) {
@@ -1019,7 +1051,7 @@ static void print_stuff(BIO *bio, SSL *s, int full)
EVP_PKEY_free(pktmp);
}
SSL_SESSION_print(bio,SSL_get_session(s));
BIO_printf(bio,"---\n");
BIO_printf(bio,"---\n\n");
if (peer != NULL)
X509_free(peer);
/* flush, or debugging output gets mixed with http response */

View File

@@ -144,6 +144,10 @@ typedef unsigned int u_int;
#include <conio.h>
#endif
#ifdef OPENSSL_SYS_VMS
#include "term_sock.h"
#endif
#if (defined(OPENSSL_SYS_VMS) && __VMS_VER < 70000000)
/* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */
#undef FIONBIO
@@ -827,7 +831,7 @@ bad:
goto end;
}
RSA_free(rsa);
BIO_printf(bio_s_out,"\n");
BIO_printf(bio_s_out,"\n\n");
}
#endif
#endif
@@ -883,7 +887,7 @@ static void print_stats(BIO *bio, SSL_CTX *ssl_ctx)
BIO_printf(bio,"%4d session cache misses\n",SSL_CTX_sess_misses(ssl_ctx));
BIO_printf(bio,"%4d session cache timeouts\n",SSL_CTX_sess_timeouts(ssl_ctx));
BIO_printf(bio,"%4d callback cache hits\n",SSL_CTX_sess_cb_hits(ssl_ctx));
BIO_printf(bio,"%4d cache full overflows (%d allowed)\n",
BIO_printf(bio,"%4d cache full overflows (%d allowed)\n\n",
SSL_CTX_sess_cache_full(ssl_ctx),
SSL_CTX_sess_get_cache_size(ssl_ctx));
}
@@ -900,7 +904,12 @@ static int sv_body(char *hostname, int s, unsigned char *context)
#ifdef OPENSSL_SYS_WINDOWS
struct timeval tv;
#endif
#ifdef OPENSSL_SYS_VMS
int stdin_sock;
TerminalSocket (TERM_SOCK_CREATE, &stdin_sock);
#endif
if ((buf=OPENSSL_malloc(bufsize)) == NULL)
{
BIO_printf(bio_err,"out of memory\n");
@@ -959,7 +968,12 @@ static int sv_body(char *hostname, int s, unsigned char *context)
SSL_set_msg_callback_arg(con, bio_s_out);
}
width=s+1;
#ifdef OPENSSL_SYS_VMS
if (stdin_sock > s)
width = stdin_sock + 1;
else
#endif
width=s+1;
for (;;)
{
int read_from_terminal;
@@ -972,7 +986,11 @@ static int sv_body(char *hostname, int s, unsigned char *context)
{
FD_ZERO(&readfds);
#ifndef OPENSSL_SYS_WINDOWS
#ifdef OPENSSL_SYS_VMS
FD_SET(stdin_sock,&readfds);
#else
FD_SET(fileno(stdin),&readfds);
#endif
#endif
FD_SET(s,&readfds);
/* Note: under VMS with SOCKETSHR the second parameter is
@@ -996,8 +1014,12 @@ static int sv_body(char *hostname, int s, unsigned char *context)
#else
i=select(width,(void *)&readfds,NULL,NULL,NULL);
if (i <= 0) continue;
if (FD_ISSET(fileno(stdin),&readfds))
read_from_terminal = 1;
#ifdef OPENSSL_SYS_VMS
if (FD_ISSET(stdin_sock,&readfds))
#else
if (FD_ISSET(fileno(stdin),&readfds))
#endif
read_from_terminal = 1;
#endif
if (FD_ISSET(s,&readfds))
read_from_sslcon = 1;
@@ -1008,7 +1030,11 @@ static int sv_body(char *hostname, int s, unsigned char *context)
{
int j, lf_num;
i=read(fileno(stdin), buf, bufsize/2);
#ifdef OPENSSL_SYS_VMS
i=recv(stdin_sock, buf, bufsize/2, 0);
#else
i=read(fileno(stdin), buf, bufsize/2);
#endif
lf_num = 0;
/* both loops are skipped when i <= 0 */
for (j = 0; j < i; j++)
@@ -1027,7 +1053,11 @@ static int sv_body(char *hostname, int s, unsigned char *context)
assert(lf_num == 0);
}
else
i=read(fileno(stdin),buf,bufsize);
#ifdef OPENSSL_SYS_VMS
i=recv(stdin_sock,buf,bufsize, 0);
#else
i=read(fileno(stdin),buf,bufsize);
#endif
if (!s_quiet)
{
if ((i <= 0) || (buf[0] == 'Q'))
@@ -1096,7 +1126,7 @@ static int sv_body(char *hostname, int s, unsigned char *context)
case SSL_ERROR_WANT_WRITE:
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_X509_LOOKUP:
BIO_printf(bio_s_out,"Write BLOCK\n");
BIO_printf(bio_s_out,"Write BLOCK\n\n");
break;
case SSL_ERROR_SYSCALL:
case SSL_ERROR_SSL:
@@ -1106,7 +1136,7 @@ static int sv_body(char *hostname, int s, unsigned char *context)
goto err;
/* break; */
case SSL_ERROR_ZERO_RETURN:
BIO_printf(bio_s_out,"DONE\n");
BIO_printf(bio_s_out,"DONE\n\n");
ret=1;
goto err;
}
@@ -1144,12 +1174,13 @@ again:
#endif
write(fileno(stdout),buf,
(unsigned int)i);
BIO_printf(bio_s_out,"\n");
if (SSL_pending(con)) goto again;
break;
case SSL_ERROR_WANT_WRITE:
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_X509_LOOKUP:
BIO_printf(bio_s_out,"Read BLOCK\n");
BIO_printf(bio_s_out,"Read BLOCK\n\n");
break;
case SSL_ERROR_SYSCALL:
case SSL_ERROR_SSL:
@@ -1181,6 +1212,9 @@ err:
}
if (ret >= 0)
BIO_printf(bio_s_out,"ACCEPT\n");
#ifdef OPENSSL_SYS_VMS
TerminalSocket (TERM_SOCK_DELETE, &stdin_sock);
#endif
return(ret);
}
@@ -1238,7 +1272,7 @@ static int init_ssl_connection(SSL *con)
if (SSL_get_shared_ciphers(con,buf,BUFSIZ) != NULL)
BIO_printf(bio_s_out,"Shared ciphers:%s\n",buf);
str=SSL_CIPHER_get_name(SSL_get_current_cipher(con));
BIO_printf(bio_s_out,"CIPHER is %s\n",(str != NULL)?str:"(NONE)");
BIO_printf(bio_s_out,"CIPHER is %s\n\n",(str != NULL)?str:"(NONE)");
if (con->hit) BIO_printf(bio_s_out,"Reused session-id\n");
if (SSL_ctrl(con,SSL_CTRL_GET_FLAGS,0,NULL) &
TLS1_FLAGS_TLS_PADDING_BUG)
@@ -1394,7 +1428,7 @@ static int www_body(char *hostname, int s, unsigned char *context)
}
else
{
BIO_printf(bio_s_out,"read R BLOCK\n");
BIO_printf(bio_s_out,"read R BLOCK\n\n");
#ifndef OPENSSL_SYS_MSDOS
sleep(1);
#endif
@@ -1620,7 +1654,7 @@ static int www_body(char *hostname, int s, unsigned char *context)
goto write_error;
else
{
BIO_printf(bio_s_out,"rwrite W BLOCK\n");
BIO_printf(bio_s_out,"rwrite W BLOCK\n\n");
}
}
else

View File

@@ -109,6 +109,12 @@ int MAIN(int argc, char **argv)
args = argv + 1;
ret = 1;
apps_startup();
if (bio_err == NULL)
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
if (!load_config(bio_err, NULL))
goto end;
@@ -465,7 +471,10 @@ int MAIN(int argc, char **argv)
p7 = PKCS7_encrypt(encerts, in, cipher, flags);
} else if(operation == SMIME_SIGN) {
p7 = PKCS7_sign(signer, key, other, in, flags);
BIO_reset(in);
if (BIO_reset(in) != 0 && (flags & PKCS7_DETACHED)) {
BIO_printf(bio_err, "Can't rewind input file\n");
goto end;
}
} else {
if(informat == FORMAT_SMIME)
p7 = SMIME_read_PKCS7(in, &indata);

581
apps/term_sock.c Normal file
View File

@@ -0,0 +1,581 @@
#ifdef VMS
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <inet.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <starlet.h>
#include <iodef.h>
#ifdef __alpha
#include <iosbdef.h>
#else
typedef struct _iosb { /* Copied from IOSBDEF.H for Alpha */
#pragma __nomember_alignment
__union {
__struct {
unsigned short int iosb$w_status; /* Final I/O status */
__union {
__struct { /* 16-bit byte count variant */
unsigned short int iosb$w_bcnt; /* 16-bit byte count */
__union {
unsigned int iosb$l_dev_depend; /* 32-bit device dependent info */
unsigned int iosb$l_pid; /* 32-bit pid */
} iosb$r_l;
} iosb$r_bcnt_16;
__struct { /* 32-bit byte count variant */
unsigned int iosb$l_bcnt; /* 32-bit byte count (unaligned) */
unsigned short int iosb$w_dev_depend_high; /* 16-bit device dependent info */
} iosb$r_bcnt_32;
} iosb$r_devdepend;
} iosb$r_io_64;
__struct {
__union {
unsigned int iosb$l_getxxi_status; /* Final GETxxI status */
unsigned int iosb$l_reg_status; /* Final $Registry status */
} iosb$r_l_status;
unsigned int iosb$l_reserved; /* Reserved field */
} iosb$r_get_64;
} iosb$r_io_get;
} IOSB;
#if !defined(__VAXC)
#define iosb$w_status iosb$r_io_get.iosb$r_io_64.iosb$w_status
#define iosb$w_bcnt iosb$r_io_get.iosb$r_io_64.iosb$r_devdepend.iosb$r_bcnt_16.iosb$w_bcnt
#define iosb$r_l iosb$r_io_get.iosb$r_io_64.iosb$r_devdepend.iosb$r_bcnt_16.iosb$r_l
#define iosb$l_dev_depend iosb$r_l.iosb$l_dev_depend
#define iosb$l_pid iosb$r_l.iosb$l_pid
#define iosb$l_bcnt iosb$r_io_get.iosb$r_io_64.iosb$r_devdepend.iosb$r_bcnt_32.iosb$l_bcnt
#define iosb$w_dev_depend_high iosb$r_io_get.iosb$r_io_64.iosb$r_devdepend.iosb$r_bcnt_32.iosb$w_dev_depend_high
#define iosb$l_getxxi_status iosb$r_io_get.iosb$r_get_64.iosb$r_l_status.iosb$l_getxxi_status
#define iosb$l_reg_status iosb$r_io_get.iosb$r_get_64.iosb$r_l_status.iosb$l_reg_status
#endif /* #if !defined(__VAXC) */
#endif /* End of IOSBDEF */
#include <efndef.h>
#include <stdlib.h>
#include <ssdef.h>
#include <time.h>
#include <stdarg.h>
#include <descrip.h>
#include "term_sock.h"
#ifdef __alpha
static struct _iosb TerminalDeviceIosb;
#else
IOSB TerminalDeviceIosb;
#endif
static char TerminalDeviceBuff[255 + 2];
static int TerminalSocketPair[2] = {0, 0};
static unsigned short TerminalDeviceChan = 0;
static int CreateSocketPair (int, int, int, int *);
static void SocketPairTimeoutAst (int);
static int TerminalDeviceAst (int);
static void LogMessage (char *, ...);
/*
** Socket Pair Timeout Value (must be 0-59 seconds)
*/
#define SOCKET_PAIR_TIMEOUT_VALUE 20
/*
** Socket Pair Timeout Block which is passed to timeout AST
*/
typedef struct _SocketPairTimeoutBlock {
unsigned short SockChan1;
unsigned short SockChan2;
} SPTB;
#ifdef TERM_SOCK_TEST
/*----------------------------------------------------------------------------*/
/* */
/*----------------------------------------------------------------------------*/
int main (int argc, char *argv[], char *envp[])
{
char TermBuff[80];
int TermSock,
status,
len;
LogMessage ("Enter 'q' or 'Q' to quit ...");
while (strcasecmp (TermBuff, "Q"))
{
/*
** Create the terminal socket
*/
status = TerminalSocket (TERM_SOCK_CREATE, &TermSock);
if (status != TERM_SOCK_SUCCESS)
exit (1);
/*
** Process the terminal input
*/
LogMessage ("Waiting on terminal I/O ...\n");
len = recv (TermSock, TermBuff, sizeof (TermBuff), 0) ;
TermBuff[len] = '\0';
LogMessage ("Received terminal I/O [%s]", TermBuff);
/*
** Delete the terminal socket
*/
status = TerminalSocket (TERM_SOCK_DELETE, &TermSock);
if (status != TERM_SOCK_SUCCESS)
exit (1);
}
return 1;
}
#endif
/*----------------------------------------------------------------------------*/
/* */
/*----------------------------------------------------------------------------*/
int TerminalSocket (int FunctionCode, int *ReturnSocket)
{
int status;
$DESCRIPTOR (TerminalDeviceDesc, "SYS$COMMAND");
/*
** Process the requested function code
*/
switch (FunctionCode)
{
case TERM_SOCK_CREATE:
/*
** Create a socket pair
*/
status = CreateSocketPair (AF_INET, SOCK_STREAM, 0, TerminalSocketPair);
if (status == -1)
{
LogMessage ("TerminalSocket: CreateSocketPair () - %08X", status);
if (TerminalSocketPair[0])
close (TerminalSocketPair[0]);
if (TerminalSocketPair[1])
close (TerminalSocketPair[1]);
return (TERM_SOCK_FAILURE);
}
/*
** Assign a channel to the terminal device
*/
status = sys$assign (&TerminalDeviceDesc,
&TerminalDeviceChan,
0, 0, 0);
if (! (status & 1))
{
LogMessage ("TerminalSocket: SYS$ASSIGN () - %08X", status);
close (TerminalSocketPair[0]);
close (TerminalSocketPair[1]);
return (TERM_SOCK_FAILURE);
}
/*
** Queue an async IO to the terminal device
*/
status = sys$qio (EFN$C_ENF,
TerminalDeviceChan,
IO$_READVBLK,
&TerminalDeviceIosb,
TerminalDeviceAst,
0,
TerminalDeviceBuff,
sizeof (TerminalDeviceBuff) - 2,
0, 0, 0, 0);
if (! (status & 1))
{
LogMessage ("TerminalSocket: SYS$QIO () - %08X", status);
close (TerminalSocketPair[0]);
close (TerminalSocketPair[1]);
return (TERM_SOCK_FAILURE);
}
/*
** Return the input side of the socket pair
*/
*ReturnSocket = TerminalSocketPair[1];
break;
case TERM_SOCK_DELETE:
/*
** Cancel any pending IO on the terminal channel
*/
status = sys$cancel (TerminalDeviceChan);
if (! (status & 1))
{
LogMessage ("TerminalSocket: SYS$CANCEL () - %08X", status);
close (TerminalSocketPair[0]);
close (TerminalSocketPair[1]);
return (TERM_SOCK_FAILURE);
}
/*
** Deassign the terminal channel
*/
status = sys$dassgn (TerminalDeviceChan);
if (! (status & 1))
{
LogMessage ("TerminalSocket: SYS$DASSGN () - %08X", status);
close (TerminalSocketPair[0]);
close (TerminalSocketPair[1]);
return (TERM_SOCK_FAILURE);
}
/*
** Close the terminal socket pair
*/
close (TerminalSocketPair[0]);
close (TerminalSocketPair[1]);
/*
** Return the initialized socket
*/
*ReturnSocket = 0;
break;
default:
/*
** Invalid function code
*/
LogMessage ("TerminalSocket: Invalid Function Code - %d", FunctionCode);
return (TERM_SOCK_FAILURE);
break;
}
/*
** Return success
*/
return (TERM_SOCK_SUCCESS);
}
/*----------------------------------------------------------------------------*/
/* */
/*----------------------------------------------------------------------------*/
static int CreateSocketPair (
int SocketFamily,
int SocketType,
int SocketProtocol,
int *SocketPair)
{
struct dsc$descriptor AscTimeDesc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, NULL};
static const char* LocalHostAddr = {"127.0.0.1"};
unsigned short TcpAcceptChan = 0,
TcpDeviceChan = 0;
unsigned long BinTimeBuff[2];
struct sockaddr_in sin;
char AscTimeBuff[32];
short LocalHostPort;
unsigned int status,
slen;
#ifdef __alpha
struct _iosb iosb;
#else
IOSB iosb;
#endif
int SockDesc1 = 0,
SockDesc2 = 0;
SPTB sptb;
$DESCRIPTOR (TcpDeviceDesc, "TCPIP$DEVICE");
/*
** Create a socket
*/
SockDesc1 = socket (SocketFamily, SocketType, 0);
if (SockDesc1 < 0)
{
LogMessage ("CreateSocketPair: socket () - %d", errno);
return (-1);
}
/*
** Initialize the socket information
*/
slen = sizeof (sin);
memset ((char *) &sin, 0, slen);
sin.sin_family = SocketFamily;
sin.sin_addr.s_addr = inet_addr (LocalHostAddr);
sin.sin_port = 0;
/*
** Bind the socket to the local IP
*/
status = bind (SockDesc1, (struct sockaddr *) &sin, slen);
if (status < 0)
{
LogMessage ("CreateSocketPair: bind () - %d", errno);
close (SockDesc1);
return (-1);
}
/*
** Get the socket name so we can save the port number
*/
status = getsockname (SockDesc1, (struct sockaddr *) &sin, &slen);
if (status < 0)
{
LogMessage ("CreateSocketPair: getsockname () - %d", errno);
close (SockDesc1);
return (-1);
}
else
LocalHostPort = sin.sin_port;
/*
** Setup a listen for the socket
*/
listen (SockDesc1, 5);
/*
** Get the binary (64-bit) time of the specified timeout value
*/
sprintf (AscTimeBuff, "0 0:0:%02d.00", SOCKET_PAIR_TIMEOUT_VALUE);
AscTimeDesc.dsc$w_length = strlen (AscTimeBuff);
AscTimeDesc.dsc$a_pointer = AscTimeBuff;
status = sys$bintim (&AscTimeDesc, BinTimeBuff);
if (! (status & 1))
{
LogMessage ("CreateSocketPair: SYS$BINTIM () - %08X", status);
close (SockDesc1);
return (-1);
}
/*
** Assign another channel to the TCP/IP device for the accept.
** This is the channel that ends up being connected to.
*/
status = sys$assign (&TcpDeviceDesc, &TcpDeviceChan, 0, 0, 0);
if (! (status & 1))
{
LogMessage ("CreateSocketPair: SYS$ASSIGN () - %08X", status);
close (SockDesc1);
return (-1);
}
/*
** Get the channel of the first socket for the accept
*/
TcpAcceptChan = decc$get_sdc (SockDesc1);
/*
** Perform the accept using $QIO so we can do this asynchronously
*/
status = sys$qio (EFN$C_ENF,
TcpAcceptChan,
IO$_ACCESS | IO$M_ACCEPT,
&iosb,
0, 0, 0, 0, 0,
&TcpDeviceChan,
0, 0);
if (! (status & 1))
{
LogMessage ("CreateSocketPair: SYS$QIO () - %08X", status);
close (SockDesc1);
sys$dassgn (TcpDeviceChan);
return (-1);
}
/*
** Create the second socket to do the connect
*/
SockDesc2 = socket (SocketFamily, SocketType, 0);
if (SockDesc2 < 0)
{
LogMessage ("CreateSocketPair: socket () - %d", errno);
sys$cancel (TcpAcceptChan);
close (SockDesc1);
sys$dassgn (TcpDeviceChan);
return (-1) ;
}
/*
** Setup the Socket Pair Timeout Block
*/
sptb.SockChan1 = TcpAcceptChan;
sptb.SockChan2 = decc$get_sdc (SockDesc2);
/*
** Before we block on the connect, set a timer that can cancel I/O on our two
** sockets if it never connects.
*/
status = sys$setimr (EFN$C_ENF,
BinTimeBuff,
SocketPairTimeoutAst,
&sptb,
0);
if (! (status & 1))
{
LogMessage ("CreateSocketPair: SYS$SETIMR () - %08X", status);
sys$cancel (TcpAcceptChan);
close (SockDesc1);
close (SockDesc2);
sys$dassgn (TcpDeviceChan);
return (-1);
}
/*
** Now issue the connect
*/
memset ((char *) &sin, 0, sizeof (sin)) ;
sin.sin_family = SocketFamily;
sin.sin_addr.s_addr = inet_addr (LocalHostAddr) ;
sin.sin_port = LocalHostPort ;
status = connect (SockDesc2, (struct sockaddr *) &sin, sizeof (sin));
if (status < 0 )
{
LogMessage ("CreateSocketPair: connect () - %d", errno);
sys$cantim (&sptb, 0);
sys$cancel (TcpAcceptChan);
close (SockDesc1);
close (SockDesc2);
sys$dassgn (TcpDeviceChan);
return (-1);
}
/*
** Wait for the asynch $QIO to finish. Note that if the I/O was aborted
** (SS$_ABORT), then we probably canceled it from the AST routine - so log a
** timeout.
*/
status = sys$synch (EFN$C_ENF, &iosb);
if (! (iosb.iosb$w_status & 1))
{
if (iosb.iosb$w_status == SS$_ABORT)
LogMessage ("CreateSocketPair: SYS$QIO(iosb) timeout");
else
{
LogMessage ("CreateSocketPair: SYS$QIO(iosb) - %d", iosb.iosb$w_status);
sys$cantim (&sptb, 0);
}
close (SockDesc1);
close (SockDesc2);
sys$dassgn (TcpDeviceChan);
return (-1);
}
/*
** Here we're successfully connected, so cancel the timer, convert the I/O
** channel to a socket fd, close the listener socket and return the connected
** pair.
*/
sys$cantim (&sptb, 0);
close (SockDesc1) ;
SocketPair[0] = SockDesc2 ;
SocketPair[1] = socket_fd (TcpDeviceChan);
return (0) ;
}
/*----------------------------------------------------------------------------*/
/* */
/*----------------------------------------------------------------------------*/
static void SocketPairTimeoutAst (int astparm)
{
SPTB *sptb = (SPTB *) astparm;
sys$cancel (sptb->SockChan2); /* Cancel the connect() */
sys$cancel (sptb->SockChan1); /* Cancel the accept() */
return;
}
/*----------------------------------------------------------------------------*/
/* */
/*----------------------------------------------------------------------------*/
static int TerminalDeviceAst (int astparm)
{
int status;
/*
** Terminate the terminal buffer
*/
TerminalDeviceBuff[TerminalDeviceIosb.iosb$w_bcnt] = '\0';
strcat (TerminalDeviceBuff, "\n");
/*
** Send the data read from the terminal device throught the socket pair
*/
send (TerminalSocketPair[0], TerminalDeviceBuff, TerminalDeviceIosb.iosb$w_bcnt + 1, 0);
/*
** Queue another async IO to the terminal device
*/
status = sys$qio (EFN$C_ENF,
TerminalDeviceChan,
IO$_READVBLK,
&TerminalDeviceIosb,
TerminalDeviceAst,
0,
TerminalDeviceBuff,
sizeof (TerminalDeviceBuff) - 1,
0, 0, 0, 0);
/*
** Return status
*/
return status;
}
/*----------------------------------------------------------------------------*/
/* */
/*----------------------------------------------------------------------------*/
static void LogMessage (char *msg, ...)
{
char *Month[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
static unsigned int pid = 0;
va_list args;
time_t CurTime;
struct tm *LocTime;
char MsgBuff[256];
/*
** Get the process pid
*/
if (pid == 0)
pid = getpid ();
/*
** Convert the current time into local time
*/
CurTime = time (NULL);
LocTime = localtime (&CurTime);
/*
** Format the message buffer
*/
sprintf (MsgBuff, "%02d-%s-%04d %02d:%02d:%02d [%08X] %s\n",
LocTime->tm_mday, Month[LocTime->tm_mon], (LocTime->tm_year + 1900),
LocTime->tm_hour, LocTime->tm_min, LocTime->tm_sec, pid, msg);
/*
** Get any variable arguments and add them to the print of the message buffer
*/
va_start (args, msg);
vfprintf (stderr, MsgBuff, args);
va_end (args);
/*
** Flush standard error output
*/
fsync (fileno (stderr));
return;
}
#endif

21
apps/term_sock.h Normal file
View File

@@ -0,0 +1,21 @@
#ifndef TERM_SOCK_H
#define TERM_SOCK_H
/*
** Terminal Socket Function Codes
*/
#define TERM_SOCK_CREATE 1
#define TERM_SOCK_DELETE 2
/*
** Terminal Socket Status Codes
*/
#define TERM_SOCK_FAILURE 0
#define TERM_SOCK_SUCCESS 1
/*
** Terminal Socket Prototype
*/
int TerminalSocket (int FunctionCode, int *ReturnSocket);
#endif

4
config
View File

@@ -517,6 +517,10 @@ EOF
${CC} -o dummy dummy.c && OUT=`./dummy ${MACHINE}`
rm dummy dummy.c
;;
ppc64-*-linux2)
#Use the standard target for PPC architecture until we create a
#special one for the 64bit architecture.
OUT="linux-ppc" ;;
ppc-*-linux2) OUT="linux-ppc" ;;
m68k-*-linux*) OUT="linux-m68k" ;;
ia64-*-linux?) OUT="linux-ia64" ;;

View File

@@ -0,0 +1,259 @@
--
-- CPQ-AXPVMS-SSL-T0100--1.PCSI$DESCRIPTION
--
-- KSG00141 Kevin Greaney 21-Jun-2001
-- Using the ENCRYPT file as a template, create a
-- .PCSI$DESCRIPTION file for the OpenSSL port.
--
--
-- First, make sure we are running on correct operating system.
--
product CPQ AXPVMS SSL T1.0 full ;
if (not <software DEC AXPVMS VMS version minimum V7.2>) ;
error NOAXPVMS;
end if;
--
-- Now, perform the installation.
--
--
-- Define the SSL root logical name. This is done by
-- SSL$PCSI.COM. It defines SSL$ROOT to be the
-- equivalence name of the PCSI$DESTINATION logical when
-- installing, and deassigns the logical when removing.
execute
install "@pcsi$destination:[ssl.com]ssl$pcsi.com install"
remove "@pcsi$destination:[ssl.com]ssl$pcsi.com remove";
--
-- SSL$STARTUP.COM defines a handfull of logicals and
-- then executes SSL$SYSTARTUP.COM.
--
-- SSL$SHUTDOWN deassigns the logicals defined in the
-- startup file and then executes SSL$SYSHUTDOWN.COM
--
-- Note : If this kit is installed to a disk other than
-- the system disk, these two files will not end
-- up on the system disk. They will have to be
-- moved over manually.
execute
start "@sys$startup:ssl$startup.com"
stop "@sys$startup:ssl$shutdown.com";
--
-- Now, perform the testing, if it was requested.
--
-- Find out if the IVP should be run ...
-- Note : If the user specified /NOTEST on the command
-- line, the user will still be asked about running
-- the IVP, but no matter what they answer, the IVP
-- will NOT be run. This is because /NOTEST
-- overrides the option here.
option run_ivp default yes;
execute test "@pcsi$destination:[systest]ssl$ivp.com/output=pcsi$destination:[systest]ssl$ivp.log";
end option;
--
information POST_INSTALL phase after with helptext;
information RELEASE_NOTES phase after ;
information START_INSTRUCTION phase after ;
-- information REINSTALL_PROBLEM phase after ;
--
-- And finally, define where all the files should be placed.
--
directory [ssl] ;
file [ssl.com]ssl$pcsi.com protection private;
--
file [syshlp]ssl010.release_notes release notes;
if (<software DEC AXPVMS VMS>) ;
directory [ssl.alpha_exe] ;
file [ssl.alpha_exe]ca.com ;
file [ssl.alpha_exe]openssl.exe ;
file [ssl.alpha_exe]ssl_task.exe ;
--
end if;
if (<software DEC VAXVMS VMS>) ;
directory [ssl.vax_exe] ;
file [ssl.vax_exe]ca.com;
--
directory [ssl.vax_lib] ;
end if;
file [syslib]ssl$libssl_shr.exe ;
file [syslib]ssl$libcrypto_shr.exe ;
file [syslib]ssl$libssl_shr32.exe ;
file [syslib]ssl$libcrypto_shr32.exe ;
file [ssl.alpha_exe]ssl$hostname.exe;
file [ssl.alpha_exe]ssl$hostaddr.exe;
--
directory [ssl.conf] ;
file [ssl]openssl.cnf ;
file [ssl]openssl-vms.cnf ;
--
directory [ssl.certs] ;
--
directory [syshlp.examples.ssl] ;
file [syshlp.examples.ssl]ssl$bio_cli.c ;
file [syshlp.examples.ssl]ssl$bio_serv.c ;
file [syshlp.examples.ssl]ssl$cli_sess_renego.c ;
file [syshlp.examples.ssl]ssl$cli_sess_renego_cli_ver.c ;
file [syshlp.examples.ssl]ssl$cli_sess_reuse.c ;
file [syshlp.examples.ssl]ssl$cli_sess_reuse_cli_ver.c ;
file [syshlp.examples.ssl]ssl$cli_verify_client.c ;
file [syshlp.examples.ssl]ssl$serv_sess_renego.c ;
file [syshlp.examples.ssl]ssl$serv_sess_renego_cli_ver.c ;
file [syshlp.examples.ssl]ssl$serv_sess_reuse.c ;
file [syshlp.examples.ssl]ssl$serv_sess_reuse_cli_ver.c ;
file [syshlp.examples.ssl]ssl$serv_verify_client.c ;
file [syshlp.examples.ssl]ssl$simple_cli.c ;
file [syshlp.examples.ssl]ssl$simple_serv.c ;
file [syshlp.examples.ssl]ssl$examples_setup.com ;
--
directory [ssl.include] ;
--
file [ssl.include]asn1.h ;
file [ssl.include]asn1_mac.h;
file [ssl.include]bio.h;
file [ssl.include]blowfish.h;
file [ssl.include]bn.h;
file [ssl.include]buffer.h;
file [ssl.include]cast.h;
file [ssl.include]comp.h;
file [ssl.include]conf.h;
file [ssl.include]conf_api.h;
file [ssl.include]crypto.h;
file [ssl.include]des.h;
file [ssl.include]dh.h;
file [ssl.include]dsa.h;
file [ssl.include]dso.h;
file [ssl.include]ebcdic.h;
file [ssl.include]engine.h;
file [ssl.include]err.h;
file [ssl.include]evp.h;
file [ssl.include]e_os.h;
file [ssl.include]e_os2.h;
file [ssl.include]hmac.h;
file [ssl.include]idea.h;
file [ssl.include]lhash.h;
file [ssl.include]md2.h;
file [ssl.include]md4.h;
file [ssl.include]md5.h;
file [ssl.include]mdc2.h;
file [ssl.include]objects.h;
file [ssl.include]obj_mac.h;
file [ssl.include]opensslconf.h;
file [ssl.include]opensslv.h;
file [ssl.include]pem.h;
file [ssl.include]pem2.h;
file [ssl.include]pkcs12.h;
file [ssl.include]pkcs7.h;
file [ssl.include]rand.h;
file [ssl.include]rc2.h;
file [ssl.include]rc4.h;
file [ssl.include]rc5.h;
file [ssl.include]ripemd.h;
file [ssl.include]rsa.h;
file [ssl.include]safestack.h;
file [ssl.include]sha.h;
file [ssl.include]ssl.h;
file [ssl.include]ssl2.h;
file [ssl.include]ssl23.h;
file [ssl.include]ssl3.h;
file [ssl.include]stack.h;
file [ssl.include]symhacks.h;
file [ssl.include]tls1.h;
file [ssl.include]tmdiff.h;
file [ssl.include]txt_db.h;
file [ssl.include]x509.h;
file [ssl.include]x509v3.h;
file [ssl.include]x509_vfy.h;
--
directory [ssl.lib] ;
--
directory [ssl.private] ;
file [ssl.private]randfile.;
--
directory [ssl.test] ;
file [ssl.test]tcrl.com;
file [ssl.test]testca.com;
file [ssl.test]testenc.com;
file [ssl.test]testgen.com;
file [ssl.test]testss.com;
file [ssl.test]testssl.com;
file [ssl.test]tests_share.com;
file [ssl.test]tpkcs7.com;
file [ssl.test]tpkcs7d.com;
file [ssl.test]treq.com;
file [ssl.test]trsa.com;
file [ssl.test]tsid.com;
file [ssl.test]tverify.com;
file [ssl.test]tx509.com;
--
file [ssl.test]bftest.exe;
file [ssl.test]bntest.exe;
file [ssl.test]casttest.exe;
file [ssl.test]destest.exe;
file [ssl.test]dhtest.exe;
file [ssl.test]dsatest.exe;
file [ssl.test]exptest.exe;
file [ssl.test]hmactest.exe;
file [ssl.test]ideatest.exe;
file [ssl.test]md2test.exe;
file [ssl.test]md4test.exe;
file [ssl.test]md5test.exe;
file [ssl.test]mdc2test.exe;
file [ssl.test]randtest.exe;
file [ssl.test]rc2test.exe;
file [ssl.test]rc4test.exe;
file [ssl.test]rc5test.exe;
file [ssl.test]rmdtest.exe;
file [ssl.test]rsa_test.exe;
file [ssl.test]sha1test.exe;
file [ssl.test]shatest.exe;
file [ssl.test]ssltest.exe;
--
file [systest]ssl$ivp.com;
--
directory [ssl.com] ;
file [sys$startup]ssl$startup.com;
file [sys$startup]ssl$shutdown.com;
file [ssl.com]ssl$systartup.com;
file [ssl.com]ssl$syshutdown.com;
file [ssl.com]ssl$utils.com;
--
file [ssl.com]ssl$auth_cert.com;
file [ssl.com]ssl$auto_cert.com;
file [ssl.com]ssl$cert_tool.com;
file [ssl.com]ssl$conf_util.com;
file [ssl.com]ssl$draw_box.com;
file [ssl.com]ssl$exit_cmd.tpu;
file [ssl.com]ssl$fill_box.com;
file [ssl.com]ssl$hash_cert.com;
file [ssl.com]ssl$init_env.com;
file [ssl.com]ssl$init_term.com;
file [ssl.com]ssl$pick_file.com;
file [ssl.com]ssl$rem_env.com;
file [ssl.com]ssl$rqst_cert.com;
file [ssl.com]ssl$self_cert.com;
file [ssl.com]ssl$show_file.com;
file [ssl.com]ssl$sign_cert.com;
file [ssl.com]ssl$view_cert.com;
--
end product ;

View File

@@ -0,0 +1,82 @@
=product CPQ AXPVMS SSL T1.0 full
1 'PRODUCT
=prompt SSL for OpenVMS Alpha T1.0 (Based on OpenSSL 0.9.6B).
SSL for OpenVMS provides a toolkit that implements SSL V2/V3, TLS V1,
and a general purpose cryptography library.
1 'PRODUCER
1 'NOTICE
=prompt (c) Compaq Computer Corporation 2002. All rights reserved.
COMPAQ Registered in U.S. Patent and Trademark Office.
Confidential computer software. Valid license from Compaq or
authorized sublicensor required for possession, use or copying.
Consistent with FAR 12.211 and 12.212, Commercial Computer Software,
Computer Software Documentation, and Technical Data for Commercial
Items are licensed to the U.S. Government under vendor's standard
commercial license.
This software is installable on OpenVMS processors using the POLYCENTER
Software Installation utility.
IMPORTANT LEGAL NOTICE:
Exports of this product are subject to U.S. Export Administration
Regulations pertaining to encryption items and may require that
individual export authorization be obtained from the U.S.
Department of Commerce.
1 START_INSTRUCTION
=prompt @SYS$STARTUP:SSL$STARTUP.COM should be run at system startup.
Once the installation is complete, adding the following line to
SYS$MANAGER:SYSTARTUP_VMS.COM will define the SSL$ logicals
in the SYSTEM logical name table:
$ @SYS$STARTUP:SSL$STARTUP.COM "/SYSTEM"
It is also possible to have the logicals placed in other logical
name tables - EXEC,USER, etc - by replacing the SYSTEM parameter
above with the alternate table name.
1 RELEASE_NOTES
=prompt Refer to SYS$HELP:SSL010.RELEASE_NOTES for more information.
The SSL product release notes contain up to date information regarding
bug fixes, known problems, and general installation information.
1 RUN_IVP
=prompt Run the installation verification procedure (IVP)?
This option determines if the installation verification
procedure will be run as part of the installation. The procedure
should take few minutes to run, depending on the processor
speed. If it is not run during the installation, then it
should be run as part of the post installation procedure.
1 POST_INSTALL
=prompt There are post installation activities that need to be performed.
This includes things like defining logical names and running SSL$UTIL.COM
to define some foreign symbols, and running the IVP if it was not done
as part of the installation. Refer the to Release Notes for more
information about activities that should be performed once the installation
has finished.
SSL has created the following directory structure in
PCSI$DESTINATION, which defaults to SYS$SYSDEVICE:[VMS$COMMON]:
[SSL] -
[SSL.ALPHA_EXE] - Contains the images for the Alpha platform.
[SSL.ALPHA_LIB] - Contains the .OLBs for the Alpha platform.
[SSL.CERTS] - Directory to hold certificates
[SSL.COM] - Directory to hold the various command procedures.
[SSL.CONF] - Contains the configuration files.
[SSL.INCLUDE] - Contains the C Header (.H) files.
[SSL.PRIVATE] - Files specifically for SSL use such as RANDFILE.
[SSL.TEST] - Contains the files used during the IVP.
1 NOAXPVMS
=prompt Minimum OpenVMS Alpha software not found on system, abort installation
This kit requires a minimum OpenVMS Alpha version of V7.2.

View File

@@ -57,7 +57,7 @@ buildinf.h: ../Makefile.ssl
echo " /* auto-generated by crypto/Makefile.ssl for crypto/cversion.c */"; \
echo " #define CFLAGS \"$(CC) $(CFLAG)\""; \
echo " #define PLATFORM \"$(PLATFORM)\""; \
echo " #define DATE \"`date`\""; \
echo " #define DATE \"`LC_ALL=C LC_TIME=C date`\""; \
echo "#endif" ) >buildinf.h
testapps:

View File

@@ -55,6 +55,59 @@
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
/* ====================================================================
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@openssl.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
#include <stdio.h>
#include <time.h>
@@ -90,7 +143,14 @@ int ASN1_sign(int (*i2d)(), X509_ALGOR *algor1, X509_ALGOR *algor2,
else
a=algor2;
if (a == NULL) continue;
if ( (a->parameter == NULL) ||
if (type->pkey_type == NID_dsaWithSHA1)
{
/* special case: RFC 2459 tells us to omit 'parameters'
* with id-dsa-with-sha1 */
ASN1_TYPE_free(a->parameter);
a->parameter = NULL;
}
else if ((a->parameter == NULL) ||
(a->parameter->type != V_ASN1_NULL))
{
ASN1_TYPE_free(a->parameter);
@@ -169,7 +229,14 @@ int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2,
else
a=algor2;
if (a == NULL) continue;
if ( (a->parameter == NULL) ||
if (type->pkey_type == NID_dsaWithSHA1)
{
/* special case: RFC 2459 tells us to omit 'parameters'
* with id-dsa-with-sha1 */
ASN1_TYPE_free(a->parameter);
a->parameter = NULL;
}
else if ((a->parameter == NULL) ||
(a->parameter->type != V_ASN1_NULL))
{
ASN1_TYPE_free(a->parameter);

View File

@@ -116,6 +116,8 @@ X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
if (RAND_pseudo_bytes(iv, EVP_CIPHER_iv_length(cipher)) < 0)
goto err;
EVP_CIPHER_CTX_init(&ctx);
/* Dummy cipherinit to just setup the IV */
EVP_CipherInit_ex(&ctx, cipher, NULL, NULL, iv, 0);
if(EVP_CIPHER_param_to_asn1(&ctx, scheme->parameter) < 0) {

View File

@@ -56,6 +56,13 @@
* [including the GNU Public Licence.]
*/
/* disable assert() unless BIO_DEBUG has been defined */
#ifndef BIO_DEBUG
# ifndef NDEBUG
# define NDEBUG
# endif
#endif
/*
* Stolen from tjh's ssl/ssl_trc.c stuff.
*/
@@ -716,12 +723,13 @@ doapr_outch(
if (buffer) {
while (*currlen >= *maxlen) {
if (*buffer == NULL) {
assert(*sbuffer != NULL);
if (*maxlen == 0)
*maxlen = 1024;
*buffer = OPENSSL_malloc(*maxlen);
if (*currlen > 0)
if (*currlen > 0) {
assert(*sbuffer != NULL);
memcpy(*buffer, *sbuffer, *currlen);
}
*sbuffer = NULL;
} else {
*maxlen += 1024;
@@ -761,7 +769,9 @@ int BIO_vprintf (BIO *bio, const char *format, va_list args)
{
int ret;
size_t retlen;
MS_STATIC char hugebuf[1024*10];
char hugebuf[1024*2]; /* Was previously 10k, which is unreasonable
in small-stack environments, like threads
or DOS programs. */
char *hugebufp = hugebuf;
size_t hugebufsize = sizeof(hugebuf);
char *dynbuf = NULL;

View File

@@ -86,6 +86,17 @@ static int wsa_init_done=0;
static unsigned long BIO_ghbn_hits=0L;
static unsigned long BIO_ghbn_miss=0L;
/* For 64-bit API */
#if __INITIAL_POINTER_SIZE == 64
#pragma __required_pointer_size __save
#pragma __required_pointer_size 32
#endif
typedef char ** char_32pp;
typedef char * char_32p;
#if __INITIAL_POINTER_SIZE == 64
#pragma __required_pointer_size __restore
#endif
#define GHBN_NUM 4
static struct ghbn_cache_st
{
@@ -282,18 +293,34 @@ static struct hostent *ghbn_dup(struct hostent *a)
for (i=0; a->h_aliases[i] != NULL; i++)
;
i++;
#ifdef OPENSSL_SYS_VMS
ret->h_aliases = (char_32pp)_malloc32(i*sizeof(char_32p)); /* changed for both 32-bit & 64-bit */
#else
ret->h_aliases = (char **)OPENSSL_malloc(i*sizeof(char *));
#endif
if (ret->h_aliases == NULL)
goto err;
#ifdef OPENSSL_SYS_VMS
_memset32(ret->h_aliases, 0, i*sizeof(char_32p)); /* changed for both 32-bit & 64-bit */
#else
memset(ret->h_aliases, 0, i*sizeof(char *));
#endif
for (i=0; a->h_addr_list[i] != NULL; i++)
;
i++;
#ifdf OPENSSL_SYS_VMS
ret->h_addr_list=(char_32pp)_malloc32(i*sizeof(char_32p)); /* changed for both 32-bit & 64-bit */
#else
ret->h_addr_list=(char **)OPENSSL_malloc(i*sizeof(char *));
#endif
if (ret->h_addr_list == NULL)
goto err;
#ifdef OPENSSL_SYS_VMS
_memset32(ret->h_addr_list, 0, i*sizeof(char_32p)); /* changed for both 32-bit & 64-bit */
#else
memset(ret->h_addr_list, 0, i*sizeof(char *));
#endif
j=strlen(a->h_name)+1;
if ((ret->h_name=OPENSSL_malloc(j)) == NULL) goto err;
@@ -301,15 +328,24 @@ static struct hostent *ghbn_dup(struct hostent *a)
for (i=0; a->h_aliases[i] != NULL; i++)
{
j=strlen(a->h_aliases[i])+1;
#ifdef OPENSSL_SYS_VMS
if ((ret->h_aliases[i]=(char_32p)_malloc32(j)) == NULL) goto err; /* changed for both 32-bit & 64-bit */
#else
if ((ret->h_aliases[i]=OPENSSL_malloc(j)) == NULL) goto err;
#endif
memcpy(ret->h_aliases[i],a->h_aliases[i],j);
}
ret->h_length=a->h_length;
ret->h_addrtype=a->h_addrtype;
for (i=0; a->h_addr_list[i] != NULL; i++)
{
#ifdef OPENSSL_SYS_VMS
if ((ret->h_addr_list[i]=(char_32p)_malloc32(a->h_length)) == NULL) /* changed for both 32-bit & 64-bit */
goto err;
#else
if ((ret->h_addr_list[i]=OPENSSL_malloc(a->h_length)) == NULL)
goto err;
#endif
memcpy(ret->h_addr_list[i],a->h_addr_list[i],a->h_length);
}
if (0)
@@ -332,15 +368,27 @@ static void ghbn_free(struct hostent *a)
if (a->h_aliases != NULL)
{
#ifdef OPENSSL_SYS_VMS
for (i=0; a->h_aliases[i] != NULL; i++)
free(a->h_aliases[i]);
free(a->h_aliases);
#else
for (i=0; a->h_aliases[i] != NULL; i++)
OPENSSL_free(a->h_aliases[i]);
OPENSSL_free(a->h_aliases);
#endif
}
if (a->h_addr_list != NULL)
{
#ifdef OPENSSL_SYS_VMS
for (i=0; a->h_addr_list[i] != NULL; i++)
free(a->h_addr_list[i]);
free(a->h_addr_list);
#else
for (i=0; a->h_addr_list[i] != NULL; i++)
OPENSSL_free(a->h_addr_list[i]);
OPENSSL_free(a->h_addr_list);
#endif
}
if (a->h_name != NULL) OPENSSL_free(a->h_name);
OPENSSL_free(a);
@@ -480,7 +528,7 @@ void BIO_sock_cleanup(void)
#if !defined(OPENSSL_SYS_VMS) || __VMS_VER >= 70000000
int BIO_socket_ioctl(int fd, long type, unsigned long *arg)
int BIO_socket_ioctl(int fd, long type, UINT_L32p arg) /* changed for 64-bit API */
{
int i;

View File

@@ -573,6 +573,20 @@ int BIO_dump(BIO *b,const char *bytes,int len);
int BIO_dump_indent(BIO *b,const char *bytes,int len,int indent);
struct hostent *BIO_gethostbyname(const char *name);
#ifdef OPENSSL_SYS_VMS
/* For 64-bit API */
#if __INITIAL_POINTER_SIZE == 64
#pragma __required_pointer_size __save
#pragma __required_pointer_size 32
#endif
typedef unsigned long * UINT_L32p;
#if __INITIAL_POINTER_SIZE == 64
#pragma __required_pointer_size __restore
#endif
#endif
/* OPENSSL_SYS_VMS */
/* We might want a thread-safe interface too:
* struct hostent *BIO_gethostbyname_r(const char *name,
* struct hostent *result, void *buffer, size_t buflen);
@@ -581,8 +595,13 @@ struct hostent *BIO_gethostbyname(const char *name);
* substructures; if the buffer does not suffice, NULL is returned
* and an appropriate error code is set).
*/
int BIO_sock_error(int sock);
#ifdef OPENSSL_SYS_VMS
int BIO_socket_ioctl(int fd, long type, UINT_L32p arg);
#else
int BIO_socket_ioctl(int fd, long type, unsigned long *arg);
#endif
int BIO_socket_nbio(int fd,int mode);
int BIO_get_port(const char *str, unsigned short *port_ptr);
int BIO_get_host_ip(const char *str, unsigned char *ip);

View File

@@ -7,9 +7,18 @@
* for which no specific BIO method is available.
* See ssl/ssltest.c for some hints on how this can be used. */
/* BIO_DEBUG implies BIO_PAIR_DEBUG */
#ifdef BIO_DEBUG
# ifndef BIO_PAIR_DEBUG
# define BIO_PAIR_DEBUG
# endif
#endif
/* disable assert() unless BIO_PAIR_DEBUG has been defined */
#ifndef BIO_PAIR_DEBUG
# undef NDEBUG /* avoid conflicting definitions */
# define NDEBUG
# ifndef NDEBUG
# define NDEBUG
# endif
#endif
#include <assert.h>

View File

@@ -75,6 +75,9 @@
#undef FIONBIO
#endif
#if(defined(OPENSSL_SYS_VMS))
#include <iodef.h>
#endif
typedef struct bio_connect_st
{
@@ -98,6 +101,13 @@ typedef struct bio_connect_st
int (*info_callback)(const BIO *bio,int state,int ret);
} BIO_CONNECT;
struct iosb /* i/o status block */
{
unsigned short status; /* i/o completion status */
unsigned short bytcnt; /* bytes transferred if read/write */
void *details; /* address of buffer or parameter */
};
static int conn_write(BIO *h, const char *buf, int num);
static int conn_read(BIO *h, char *buf, int size);
static int conn_puts(BIO *h, const char *str);
@@ -404,33 +414,69 @@ static int conn_read(BIO *b, char *out, int outl)
int ret=0;
BIO_CONNECT *data;
#ifdef OPENSSL_SYS_VMS
int sts;
struct iosb *iosb;
iosb = malloc(sizeof(iosb));
#endif
data=(BIO_CONNECT *)b->ptr;
if (data->state != BIO_CONN_S_OK)
{
ret=conn_state(b,data);
if (ret <= 0)
return(ret);
return(ret);
}
if (out != NULL)
{
clear_socket_error();
#ifndef OPENSSL_SYS_VMS
ret=readsocket(b->num,out,outl);
#else
sts = SYS$QIOW(
0,
decc$get_sdc(b->num),
IO$_READVBLK,
iosb,
0,
0,
out,
outl,
0,0,0,0);
#endif
BIO_clear_retry_flags(b);
if (ret <= 0)
{
if (BIO_sock_should_retry(ret))
BIO_set_retry_read(b);
}
}
#ifdef OPENSSL_SYS_VMS
if (sts != 1 || iosb->status != 1) /* SYS$QIOW failed */
{
if (BIO_sock_should_retry(ret))
BIO_set_retry_read(b);
}
else
ret = outl;
free(iosb);
#endif
}
return(ret);
}
static int conn_write(BIO *b, const char *in, int inl)
{
int ret;
int ret = 0;
BIO_CONNECT *data;
#ifdef OPENSSL_SYS_VMS
int sts;
struct iosb *iosb;
iosb = malloc(sizeof(iosb));
#endif
data=(BIO_CONNECT *)b->ptr;
if (data->state != BIO_CONN_S_OK)
{
@@ -439,13 +485,34 @@ static int conn_write(BIO *b, const char *in, int inl)
}
clear_socket_error();
#ifndef OPENSSL_SYS_VMS
ret=writesocket(b->num,in,inl);
BIO_clear_retry_flags(b);
if (ret <= 0)
{
if (BIO_sock_should_retry(ret))
BIO_set_retry_write(b);
}
#else
sts = SYS$QIOW(
0,
decc$get_sdc(b->num),
IO$_WRITEVBLK,
iosb,
0,
0,
in,
inl,
0,0,0,0);
#endif
BIO_clear_retry_flags(b);
#ifdef OPENSSL_SYS_VMS
if (sts != 1 || iosb->status != 1) /* SYS$QIO failed */
{
if (BIO_sock_should_retry(ret))
BIO_set_retry_read(b);
}
else
ret = inl;
free(iosb);
#endif
return(ret);
}

View File

@@ -75,6 +75,7 @@
# include <descrip.h>
# include <lib$routines.h>
# include <starlet.h>
# include <stdlib.h>
#elif defined(__ultrix)
# include <sys/syslog.h>
#elif !defined(MSDOS) && !defined(OPENSSL_SYS_VXWORKS) && !defined(NO_SYSLOG) /* Unix */
@@ -326,13 +327,30 @@ static void xopenlog(BIO* bp, char* name, int level)
static void xsyslog(BIO *bp, int priority, const char *string)
{
struct dsc$descriptor_s opc_dsc;
struct opcdef *opcdef_p;
char buf[10240];
/* For 64-bit API */
#if __INITIAL_POINTER_SIZE == 64
#pragma __required_pointer_size __save
#pragma __required_pointer_size 32
#endif
struct opcdef *opcdef_p;
typedef char * char_32p;
typedef struct opcdef * OPCDEF_TYPE_P;
#if __INITIAL_POINTER_SIZE == 64
#pragma __required_pointer_size __restore
#endif
char_32p buf;
const int bufsize = 10240;
unsigned int len;
struct dsc$descriptor_s buf_dsc;
$DESCRIPTOR(fao_cmd, "!AZ: !AZ");
char *priority_tag;
buf = (char_32p)_malloc32(bufsize);
switch (priority)
{
case LOG_EMERG: priority_tag = "Emergency"; break;
@@ -353,7 +371,7 @@ static void xsyslog(BIO *bp, int priority, const char *string)
lib$sys_fao(&fao_cmd, &len, &buf_dsc, priority_tag, string);
/* we know there's an 8 byte header. That's documented */
opcdef_p = (struct opcdef *) OPENSSL_malloc(8 + len);
opcdef_p = (OPCDEF_TYPE_P) OPENSSL_malloc(8 + len);
opcdef_p->opc$b_ms_type = OPC$_RQ_RQST;
memcpy(opcdef_p->opc$z_ms_target_classes, &VMS_OPC_target, 3);
opcdef_p->opc$l_ms_rqstid = 0;
@@ -361,12 +379,13 @@ static void xsyslog(BIO *bp, int priority, const char *string)
opc_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
opc_dsc.dsc$b_class = DSC$K_CLASS_S;
opc_dsc.dsc$a_pointer = (char *)opcdef_p;
opc_dsc.dsc$a_pointer = (char_32p)opcdef_p;
opc_dsc.dsc$w_length = len + 8;
sys$sndopr(opc_dsc, 0);
OPENSSL_free(opcdef_p);
free(buf);
}
static void xcloselog(BIO* bp)

View File

@@ -64,6 +64,20 @@
#include "cryptlib.h"
#include <openssl/bio.h>
#ifdef OPENSSL_SYS_VMS
/* For 64-bit API */
#if __INITIAL_POINTER_SIZE == 64
#pragma __required_pointer_size __save
#pragma __required_pointer_size 32
#endif
typedef char * char_32p;
#if __INITIAL_POINTER_SIZE == 64
#pragma __required_pointer_size __restore
#endif
#endif
static int sock_write(BIO *h, const char *buf, int num);
static int sock_read(BIO *h, char *buf, int size);
static int sock_puts(BIO *h, const char *str);
@@ -129,10 +143,43 @@ static int sock_read(BIO *b, char *out, int outl)
{
int ret=0;
#ifdef OPENSSL_SYS_VMS
#if __INITIAL_POINTER_SIZE == 64
#pragma __required_pointer_size __save
#pragma __required_pointer_size 32
char_32p out32;
out32 = (char_32p)_malloc32(outl*sizeof(char_32p)); /* changed for 64-bit */
_memset32(out32, 0, outl*sizeof(char_32p)); /* changed for 64-bit */
memcpy(out32,out,outl); /* changed for 64-bit */
#pragma __required_pointer_size __restore
#endif
#endif
#ifdef OPENSSL_SYS_VMS
# if __INITIAL_POINTER_SIZE == 64
if (out32 != NULL)
# else
if (out != NULL)
# endif
#else
if (out != NULL)
#endif
{
clear_socket_error();
#ifdef OPENSSL_SYS_VMS
# if __INITIAL_POINTER_SIZE == 64
ret=readsocket(b->num,out32,outl);
memcpy(out,out32,outl);
free(out32);
# else
ret=readsocket(b->num,out,outl);
# endif
#else
ret=readsocket(b->num,out,outl);
#endif
BIO_clear_retry_flags(b);
if (ret <= 0)
{
@@ -146,9 +193,34 @@ static int sock_read(BIO *b, char *out, int outl)
static int sock_write(BIO *b, const char *in, int inl)
{
int ret;
#ifdef OPENSSL_SYS_VMS
#if __INITIAL_POINTER_SIZE == 64
#pragma __required_pointer_size __save
#pragma __required_pointer_size 32
char_32p in32;
in32 = (char_32p)_malloc32(inl*sizeof(char_32p)); /* changed for 64-bit */
_memset32(in32, 0, inl*sizeof(char_32p)); /* changed for 64-bit */
memcpy(in32,in,inl); /* changed for 64-bit */
#pragma __required_pointer_size __restore
#endif
#endif
clear_socket_error();
ret=writesocket(b->num,in,inl);
#ifdef OPENSSL_SYS_VMS
# if __INITIAL_POINTER_SIZE == 64
ret=writesocket(b->num,in32,inl);
free(in32);
# else
ret=writesocket(b->num,in,inl);
# endif
#else
ret=writesocket(b->num,in,inl);
#endif
BIO_clear_retry_flags(b);
if (ret <= 0)
{

View File

@@ -136,7 +136,7 @@ extern "C" {
#define BN_MASK2h (0xffffffff00000000LL)
#define BN_MASK2h1 (0xffffffff80000000LL)
#define BN_TBIT (0x8000000000000000LL)
#define BN_DEC_CONV (10000000000000000000LL)
#define BN_DEC_CONV (10000000000000000000ULL)
#define BN_DEC_FMT1 "%llu"
#define BN_DEC_FMT2 "%019llu"
#define BN_DEC_NUM 19

View File

@@ -408,16 +408,22 @@ void bn_mul_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n2,
return;
}
# endif
if (n2 == 8)
/* Only call bn_mul_comba 8 if n2 == 8 and the
* two arrays are complete [steve]
*/
if (n2 == 8 && dna == 0 && dnb == 0)
{
bn_mul_comba8(r,a,b);
return;
}
# endif /* BN_MUL_COMBA */
/* Else do normal multiply */
if (n2 < BN_MUL_RECURSIVE_SIZE_NORMAL)
{
/* This should not happen */
bn_mul_normal(r,a,n2,b,n2);
bn_mul_normal(r,a,n2+dna,b,n2+dnb);
if ((dna + dnb) < 0)
memset(&r[2*n2 + dna + dnb], 0,
sizeof(BN_ULONG) * -(dna + dnb));
return;
}
/* r=(a[0]-a[1])*(b[1]-b[0]) */

View File

@@ -579,7 +579,14 @@ static int str_copy(CONF *conf, char *section, char **pto, char *from)
q='}';
else if (*s == '(')
q=')';
else q=0;
#ifdef OPENSSL_SYS_VMS
else{
buf->data[to++]= *(from++);
continue;
}
#else
else q=0;
#endif
if (q) s++;
cp=section;

View File

@@ -49,6 +49,7 @@ $! P5, if defined, sets a TCP/IP library to use, through one of the following
$! keywords:
$!
$! UCX for UCX
$! TCPIP for TCPIP (post UCX)
$! SOCKETSHR for SOCKETSHR+NETLIB
$!
$! P6, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
@@ -58,6 +59,11 @@ $! WARNING: this should only be done to recompile some part of an already
$! fully compiled library.
$!
$!
$! Define USER_CCFLAGS
$!
$ @[-]vms_build_info.com
$ WRITE SYS$OUTPUT " Using USER_CCFLAGS = ", USER_CCFLAGS
$!
$! Define A TCP/IP Library That We Will Need To Link To.
$! (That Is, If We Need To Link To One.)
$!
@@ -123,6 +129,23 @@ $! End The Architecture Specific OBJ Directory Check.
$!
$ ENDIF
$!
$! Define The LIS Directory.
$!
$ LIS_DIR := SYS$DISK:[-.'ARCH'.LIS.CRYPTO]
$!
$! Check To See If The Architecture Specific LIS Directory Exists.
$!
$ IF (F$PARSE(LIS_DIR).EQS."")
$ THEN
$!
$! It Dosen't Exist, So Create It.
$!
$ CREATE/DIR 'LIS_DIR'
$!
$! End The Architecture Specific LIS Directory Check.
$!
$ ENDIF
$!
$! Define The EXE Directory.
$!
$ EXE_DIR := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]
@@ -142,15 +165,15 @@ $ ENDIF
$!
$! Define The Library Name.
$!
$ LIB_NAME := 'EXE_DIR'LIBCRYPTO.OLB
$ LIB_NAME := 'EXE_DIR'LIBCRYPTO'build_bits'.OLB
$!
$! Define The CRYPTO-LIB We Are To Use.
$!
$ CRYPTO_LIB := 'EXE_DIR'LIBCRYPTO.OLB
$ CRYPTO_LIB := 'EXE_DIR'LIBCRYPTO'build_bits'.OLB
$!
$! Define The RSAREF-LIB We Are To Use.
$!
$ RSAREF_LIB := SYS$DISK:[-.'ARCH'.EXE.RSAREF]LIBRSAGLUE.OLB
$ RSAREF_LIB := SYS$DISK:[-.'ARCH'.EXE.RSAREF]LIBRSAGLUE'build_bits'.OLB
$!
$! Check To See If We Already Have A "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" Library...
$!
@@ -228,7 +251,7 @@ $ LIB_STACK = "stack"
$ LIB_LHASH = "lhash,lh_stats"
$ LIB_RAND = "md_rand,randfile,rand_lib,rand_err,rand_egd,"+ -
"rand_vms"
$ LIB_ERR = "err,err_all,err_prn"
$ LIB_ERR = "err,err_all,err_prn,progname"
$ LIB_OBJECTS = "o_names,obj_dat,obj_lib,obj_err"
$ LIB_EVP = "encode,digest,evp_enc,evp_key,"+ -
"e_des,e_bf,e_idea,e_des3,"+ -
@@ -282,7 +305,7 @@ $!
$! Setup exceptional compilations
$!
$ COMPILEWITH_CC3 = ",bss_rtcp,"
$ COMPILEWITH_CC4 = ",a_utctm,bss_log,o_time,"
$ COMPILEWITH_CC4 = ",a_utctm,bss_log,o_time,read_pwd,"
$ COMPILEWITH_CC5 = ",md2_dgst,md4_dgst,md5_dgst,mdc2dgst," + -
"sha_dgst,sha1dgst,rmd_dgst,bf_enc,"
$!
@@ -297,10 +320,10 @@ $!
$ IF (F$SEARCH("SYS$DISK:[-.RSAREF]RSAREF.C").EQS."")
$ THEN
$!
$! Tell The User That The File Doesn't Exist.
$! Tell The User That The File Dosen't Exist.
$!
$ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT "The File [-.RSAREF]RSAREF.C Doesn't Exist."
$ WRITE SYS$OUTPUT F$MESSAGE("%X10018290") + ". The File [-.RSAREF]RSAREF.C Dosen't Exist."
$ WRITE SYS$OUTPUT ""
$!
$! Exit The Build.
@@ -332,10 +355,10 @@ $!
$ IF (F$SEARCH("SYS$DISK:[-.RSAREF]RSAR_ERR.C").EQS."")
$ THEN
$!
$! Tell The User That The File Doesn't Exist.
$! Tell The User That The File Dosen't Exist.
$!
$ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT "The File [-.RSAREF]RSAR_ERR.C Doesn't Exist."
$ WRITE SYS$OUTPUT F$MESSAGE("%X10018290") + ". The File [-.RSAREF]RSAR_ERR.C Dosen't Exist."
$ WRITE SYS$OUTPUT ""
$!
$! Exit The Build.
@@ -538,6 +561,10 @@ $ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME
$ ENDIF
$ SOURCE_FILE = SOURCE_FILE - "]["
$!
$! Create The Listing File Name.
$!
$ LIST_FILE = LIS_DIR + F$PARSE(FILE_NAME,,,"NAME","SYNTAX_ONLY") + ".LIS"
$!
$! Create The Object File Name.
$!
$ OBJECT_FILE = OBJ_DIR + F$PARSE(FILE_NAME,,,"NAME","SYNTAX_ONLY") + ".OBJ"
@@ -548,10 +575,10 @@ $!
$ IF (F$SEARCH(SOURCE_FILE).EQS."")
$ THEN
$!
$! Tell The User That The File Doesn't Exist.
$! Tell The User That The File Dosen't Exist.
$!
$ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Doesn't Exist."
$ WRITE SYS$OUTPUT F$MESSAGE("%X10018290") + ". The File ",SOURCE_FILE," Dosen't Exist."
$ WRITE SYS$OUTPUT ""
$!
$! Exit The Build.
@@ -579,21 +606,21 @@ $ ON ERROR THEN GOTO NEXT_FILE
$ FILE_NAME0 = F$ELEMENT(0,".",FILE_NAME)
$ IF FILE_NAME - ".mar" .NES. FILE_NAME
$ THEN
$ MACRO/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
$ MACRO/OBJECT='OBJECT_FILE'/LIST='LIST_FILE' 'SOURCE_FILE'
$ ELSE
$ IF COMPILEWITH_CC3 - FILE_NAME0 .NES. COMPILEWITH_CC3
$ THEN
$ CC3/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
$ CC3/OBJECT='OBJECT_FILE'/LIST='LIST_FILE'/MACHINE_CODE 'SOURCE_FILE'
$ ELSE
$ IF COMPILEWITH_CC4 - FILE_NAME0 .NES. COMPILEWITH_CC4
$ THEN
$ CC4/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
$ CC4/OBJECT='OBJECT_FILE'/LIST='LIST_FILE'/MACHINE_CODE 'SOURCE_FILE'
$ ELSE
$ IF COMPILEWITH_CC5 - FILE_NAME0 .NES. COMPILEWITH_CC5
$ THEN
$ CC5/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
$ CC5/OBJECT='OBJECT_FILE'/LIST='LIST_FILE'/MACHINE_CODE 'SOURCE_FILE'
$ ELSE
$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
$ CC/OBJECT='OBJECT_FILE'/LIST='LIST_FILE'/MACHINE_CODE 'SOURCE_FILE'
$ ENDIF
$ ENDIF
$ ENDIF
@@ -651,9 +678,10 @@ $!
$! Link With The RSAREF Library And A Specific TCP/IP Library.
$!
$ LINK/'DEBUGGER'/'TRACEBACK'/EXE='EXE_DIR''APPLICATION'.EXE -
/MAP='LIS_DIR''APPLICATION'.MAP /FULL/CROSS -
'OBJ_DIR''APPLICATION_OBJECTS', -
'CRYPTO_LIB'/LIBRARY,'RSAREF_LIB'/LIBRARY, -
'TCPIP_LIB','OPT_FILE'/OPTION
'TCPIP_LIB','OPT_FILE'/OPTION, SYS$DISK:[-]SSL_IDENT.OPT/OPTION
$!
$! Else...
$!
@@ -662,9 +690,10 @@ $!
$! Link With The RSAREF Library And NO TCP/IP Library.
$!
$ LINK/'DEBUGGER'/'TRACEBACK'/EXE='EXE_DIR''APPLICATION'.EXE -
/MAP='LIS_DIR''APPLICATION'.MAP /FULL/CROSS -
'OBJ_DIR''APPLICATION_OBJECTS', -
'CRYPTO_LIB'/LIBRARY,'RSAREF_LIB'/LIBRARY, -
'OPT_FILE'/OPTION
'OPT_FILE'/OPTION, SYS$DISK:[-]SSL_IDENT.OPT/OPTION
$!
$! End The TCP/IP Library Check.
$!
@@ -685,9 +714,10 @@ $!
$! Don't Link With The RSAREF Routines And TCP/IP Library.
$!
$ LINK/'DEBUGGER'/'TRACEBACK'/EXE='EXE_DIR''APPLICATION'.EXE -
/MAP='LIS_DIR''APPLICATION'.MAP /FULL/CROSS -
'OBJ_DIR''APPLICATION_OBJECTS', -
'CRYPTO_LIB'/LIBRARY, -
'TCPIP_LIB','OPT_FILE'/OPTION
'TCPIP_LIB','OPT_FILE'/OPTION, SYS$DISK:[-]SSL_IDENT.OPT/OPTION
$!
$! Else...
$!
@@ -696,9 +726,10 @@ $!
$! Don't Link With The RSAREF Routines And Link With A TCP/IP Library.
$!
$ LINK/'DEBUGGER'/'TRACEBACK'/EXE='EXE_DIR''APPLICATION'.EXE -
/MAP='LIS_DIR''APPLICATION'.MAP /FULL/CROSS -
'OBJ_DIR''APPLICATION_OBJECTS',-
'CRYPTO_LIB'/LIBRARY, -
'OPT_FILE'/OPTION
'OPT_FILE'/OPTION, SYS$DISK:[-]SSL_IDENT.OPT/OPTION
$!
$! End The TCP/IP Library Check.
$!
@@ -935,7 +966,7 @@ $!
$ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT "It appears that you don't have the RSAREF Souce Code."
$ WRITE SYS$OUTPUT "You need to go to 'ftp://ftp.rsa.com/rsaref'. You have to"
$ WRITE SYS$OUTPUT "get the '.tar-Z' file as the '.zip' file doesn't have the"
$ WRITE SYS$OUTPUT "get the '.tar-Z' file as the '.zip' file dosen't have the"
$ WRITE SYS$OUTPUT "directory structure stored. You have to extract the file"
$ WRITE SYS$OUTPUT "into the [.RSAREF] directory under the root directory"
$ WRITE SYS$OUTPUT "as that is where the scripts will look for the files."
@@ -1188,7 +1219,7 @@ $ CC = "CC"
$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
THEN CC = "CC/DECC"
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
"/NOLIST/PREFIX=ALL" + -
"/PREFIX=ALL" + -
"/INCLUDE=(SYS$DISK:[],SYS$DISK:[-],SYS$DISK:[.ENGINE.VENDOR_DEFNS],SYS$DISK:[.EVP])" + -
CCEXTRAFLAGS
$!
@@ -1222,7 +1253,7 @@ $ WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
$ EXIT
$ ENDIF
$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'" + -
"/INCLUDE=(SYS$DISK:[],SYS$DISK:[-],SYS$DISK:[.ENGINE.VENDOR_DEFNS])" + -
CCEXTRAFLAGS
$ CCDEFS = """VAXC""," + CCDEFS
@@ -1254,7 +1285,7 @@ $ WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
$!
$! Use GNU C...
$!
$ CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
$ CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'" + -
"/INCLUDE=(SYS$DISK:[],SYS$DISK:[-],SYS$DISK:[.ENGINE.VENDOR_DEFNS])" + -
CCEXTRAFLAGS
$!
@@ -1358,7 +1389,7 @@ $ WRITE SYS$OUTPUT "Main MACRO Compiling Command: ",MACRO
$!
$! Time to check the contents, and to make sure we get the correct library.
$!
$ IF P5.EQS."SOCKETSHR" .OR. P5.EQS."MULTINET" .OR. P5.EQS."UCX"
$ IF P5.EQS."SOCKETSHR" .OR. P5.EQS."MULTINET" .OR. P5.EQS."UCX" .OR. P5.EQS."TCPIP" .OR. P5.EQS."NONE"
$ THEN
$!
$! Check to see if SOCKETSHR was chosen
@@ -1407,6 +1438,32 @@ $! Done with UCX
$!
$ ENDIF
$!
$! Check to see if TCPIP was chosen
$!
$ IF P5.EQS."TCPIP"
$ THEN
$!
$! Set the library to use TCPIP (post UCX).
$!
$ TCPIP_LIB = "[-.VMS]TCPIP_SHR_DECC.OPT/OPT"
$!
$! Done with TCPIP
$!
$ ENDIF
$!
$! Check to see if NONE was chosen
$!
$ IF P5.EQS."NONE"
$ THEN
$!
$! Do not use a TCPIP library.
$!
$ TCPIP_LIB = ""
$!
$! Done with TCPIP
$!
$ ENDIF
$!
$! Print info
$!
$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB
@@ -1422,6 +1479,7 @@ $ WRITE SYS$OUTPUT "The Option ",P5," Is Invalid. The Valid Options Are:"
$ WRITE SYS$OUTPUT ""
$ WRITE SYS$OUTPUT " SOCKETSHR : To link with SOCKETSHR TCP/IP library."
$ WRITE SYS$OUTPUT " UCX : To link with UCX TCP/IP library."
$ WRITE SYS$OUTPUT " TCPIP : To link with TCPIP (post UCX) TCP/IP library."
$ WRITE SYS$OUTPUT ""
$!
$! Time To EXIT.

View File

@@ -40,6 +40,16 @@ $!
$! P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
$!
$!
$! Define USER_CCFLAGS
$!
$ write sys$output " "
$ write sys$output " Now running in DES-LIB.COM. "
$ write sys$output " "
$!
$ @[-]vms_build_info.com
$ WRITE SYS$OUTPUT " Using USER_CCFLAGS = ", USER_CCFLAGS
$!
$!
$! Make sure we know what architecture we run on.
$!
$!
@@ -89,6 +99,23 @@ $! End The Architecture Specific OBJ Directory Check.
$!
$ ENDIF
$!
$! Define The LIS Directory Name.
$!
$ LIS_DIR := SYS$DISK:[--.'ARCH'.LIS.CRYPTO.DES]
$!
$! Check To See If The Architecture Specific LIS Directory Exists.
$!
$ IF (F$PARSE(LIS_DIR).EQS."")
$ THEN
$!
$! It Dosen't Exist, So Create It.
$!
$ CREATE/DIR 'LIS_DIR'
$!
$! End The Architecture Specific LIS Directory Check.
$!
$ ENDIF
$!
$! Define The EXE Directory Name.
$!
$ EXE_DIR :== SYS$DISK:[--.'ARCH'.EXE.CRYPTO.DES]
@@ -108,7 +135,7 @@ $ ENDIF
$!
$! Define The Library Name.
$!
$ LIB_NAME := 'EXE_DIR'LIBDES.OLB
$ LIB_NAME := 'EXE_DIR'LIBDES'build_bits'.OLB
$!
$! Check To See What We Are To Do.
$!
@@ -167,6 +194,12 @@ $ LIB_DES = "set_key,ecb_enc,cbc_enc,"+ -
"des_enc,fcrypt_b,read2pwd,"+ -
"fcrypt,xcbc_enc,read_pwd,rpc_enc,cbc_cksm,supp"
$!
$! Setup exceptional compilations
$!
$ COMPILEWITH_CC3 = ""
$ COMPILEWITH_CC4 = ",read_pwd,"
$ COMPILEWITH_CC5 = ""
$!
$! Define A File Counter And Set It To "0".
$!
$ FILE_COUNTER = 0
@@ -197,6 +230,10 @@ $ WRITE SYS$OUTPUT " ",FILE_NAME,".C"
$!
$! Create The Object File Name.
$!
$ LIST_FILE = LIS_DIR + FILE_NAME + "." + ARCH + "LIS"
$!
$! Create The Object File Name.
$!
$ OBJECT_FILE = OBJ_DIR + FILE_NAME + "." + ARCH + "OBJ"
$ ON WARNING THEN GOTO NEXT_FILE
$!
@@ -222,7 +259,28 @@ $!
$! Compile The File.
$!
$ ON ERROR THEN GOTO NEXT_FILE
$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
$ FILE_NAME0 = F$ELEMENT(0,".",FILE_NAME)
$ IF FILE_NAME - ".mar" .NES. FILE_NAME
$ THEN
$ MACRO/OBJECT='OBJECT_FILE'/LIST='LIST_FILE' 'SOURCE_FILE'
$ ELSE
$ IF COMPILEWITH_CC3 - FILE_NAME0 .NES. COMPILEWITH_CC3
$ THEN
$ CC3/OBJECT='OBJECT_FILE'/LIST='LIST_FILE'/MACHINE_CODE 'SOURCE_FILE'
$ ELSE
$ IF COMPILEWITH_CC4 - FILE_NAME0 .NES. COMPILEWITH_CC4
$ THEN
$ CC4/OBJECT='OBJECT_FILE'/LIST='LIST_FILE'/MACHINE_CODE 'SOURCE_FILE'
$ ELSE
$ IF COMPILEWITH_CC5 - FILE_NAME0 .NES. COMPILEWITH_CC5
$ THEN
$ CC5/OBJECT='OBJECT_FILE'/LIST='LIST_FILE'/MACHINE_CODE 'SOURCE_FILE'
$ ELSE
$ CC/OBJECT='OBJECT_FILE'/LIST='LIST_FILE'/MACHINE_CODE 'SOURCE_FILE'
$ ENDIF
$ ENDIF
$ ENDIF
$ ENDIF
$!
$! Add It To The Library.
$!
@@ -290,7 +348,9 @@ $!
$! Link The DESTEST Program.
$!
$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'DESTEST.EXE -
'OBJ_DIR'DESTEST.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
/MAP='LIS_DIR'DESTEST.MAP /FULL/CROSS -
'OBJ_DIR'DESTEST.OBJ,'LIB_NAME'/LIBRARY, -
'OPT_FILE'/OPTION, SYS$DISK:[--]SSL_IDENT.OPT/OPTION
$!
$! All Done, Time To Return.
$!
@@ -338,7 +398,9 @@ $!
$! Link The SPEED Program.
$!
$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'SPEED.EXE -
'OBJ_DIR'SPEED.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
/MAP='LIS_DIR'SPEED.MAP /FULL/CROSS -
'OBJ_DIR'SPEED.OBJ,'LIB_NAME'/LIBRARY, -
'OPT_FILE'/OPTION, SYS$DISK:[--]SSL_IDENT.OPT/OPTION
$!
$! All Done, Time To Return.
$!
@@ -386,7 +448,9 @@ $!
$! Link The RPW Program.
$!
$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'RPW.EXE -
'OBJ_DIR'RPW.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
/MAP='LIS_DIR'RPW.MAP /FULL/CROSS -
'OBJ_DIR'RPW.OBJ,'LIB_NAME'/LIBRARY, -
'OPT_FILE'/OPTION, SYS$DISK:[--]SSL_IDENT.OPT/OPTION
$!
$! All Done, Time To Return.
$!
@@ -435,8 +499,10 @@ $!
$! Link The DES Program.
$!
$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'DES.EXE -
/MAP='LIS_DIR'DES.MAP /FULL/CROSS -
'OBJ_DIR'DES.OBJ,'OBJ_DIR'CBC3_ENC.OBJ,-
'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
'LIB_NAME'/LIBRARY, -
'OPT_FILE'/OPTION, SYS$DISK:[--]SSL_IDENT.OPT/OPTION
$!
$! All Done, Time To Return.
$!
@@ -484,7 +550,9 @@ $!
$! Link The DES_OPTS Program.
$!
$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'DES_OPTS.EXE -
'OBJ_DIR'DES_OPTS.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
/MAP='LIS_DIR'DES_OPTS.MAP /FULL/CROSS -
'OBJ_DIR'DES_OPTS.OBJ,'LIB_NAME'/LIBRARY, -
'OPT_FILE'/OPTION, SYS$DISK:[--]SSL_IDENT.OPT/OPTION
$!
$! All Done, Time To Return.
$!
@@ -850,7 +918,7 @@ $ CCDEFS = ""
$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = USER_CCDEFS
$ CCEXTRAFLAGS = ""
$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
$ CCDISABLEWARNINGS = ""
$ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX,DOLLARID"
$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
CCDISABLEWARNINGS = USER_CCDISABLEWARNINGS
$!
@@ -878,7 +946,7 @@ $ CC = "CC"
$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
THEN CC = "CC/DECC"
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
"/NOLIST/PREFIX=ALL" + CCEXTRAFLAGS
"/PREFIX=ALL" + CCEXTRAFLAGS
$!
$! Define The Linker Options File Name.
$!
@@ -910,7 +978,7 @@ $ WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
$ EXIT
$ ENDIF
$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + CCEXTRAFLAGS
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'" + CCEXTRAFLAGS
$ CCDEFS = """VAXC""," + CCDEFS
$!
$! Define <sys> As SYS$COMMON:[SYSLIB]
@@ -940,7 +1008,7 @@ $ WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
$!
$! Use GNU C...
$!
$ CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + CCEXTRAFLAGS
$ CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'" + CCEXTRAFLAGS
$!
$! Define The Linker Options File Name.
$!

View File

@@ -77,6 +77,16 @@ DSO_METHOD *DSO_METHOD_vms(void)
#else
#pragma message disable DOLLARID
/* For 64-bit API */
#if __INITIAL_POINTER_SIZE == 64
#pragma __required_pointer_size __save
#pragma __required_pointer_size 32
#endif
typedef char * char_32p;
#if __INITIAL_POINTER_SIZE == 64
#pragma __required_pointer_size __restore
#endif
static int vms_load(DSO *dso);
static int vms_unload(DSO *dso);
static void *vms_bind_var(DSO *dso, const char *symname);
@@ -205,11 +215,11 @@ static int vms_load(DSO *dso)
p->filename_dsc.dsc$w_length = strlen(p->filename);
p->filename_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
p->filename_dsc.dsc$b_class = DSC$K_CLASS_S;
p->filename_dsc.dsc$a_pointer = p->filename;
p->filename_dsc.dsc$a_pointer = (char_32p)p->filename; /* changed for 64-bit API*/
p->imagename_dsc.dsc$w_length = strlen(p->imagename);
p->imagename_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
p->imagename_dsc.dsc$b_class = DSC$K_CLASS_S;
p->imagename_dsc.dsc$a_pointer = p->imagename;
p->imagename_dsc.dsc$a_pointer = (char_32p)p->imagename; /* changed for 64-bit API*/
if(!sk_push(dso->meth_data, (char *)p))
{
@@ -291,7 +301,7 @@ void vms_bind_sym(DSO *dso, const char *symname, void **sym)
symname_dsc.dsc$w_length = strlen(symname);
symname_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
symname_dsc.dsc$b_class = DSC$K_CLASS_S;
symname_dsc.dsc$a_pointer = (char *)symname; /* The cast is needed */
symname_dsc.dsc$a_pointer = (char_32p)symname; /* The cast is needed */ /* changed for 64-bit API*/
if((dso == NULL) || (symname == NULL))
{

View File

@@ -107,11 +107,16 @@ void EC_GROUP_free(EC_GROUP *);
void EC_GROUP_clear_free(EC_GROUP *);
int EC_GROUP_copy(EC_GROUP *, const EC_GROUP *);
const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *);
int EC_GROUP_set_generator(EC_GROUP *, const EC_POINT *generator, const BIGNUM *order, const BIGNUM *cofactor);
EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *);
int EC_GROUP_get_order(const EC_GROUP *, BIGNUM *order, BN_CTX *);
int EC_GROUP_get_cofactor(const EC_GROUP *, BIGNUM *cofactor, BN_CTX *);
void EC_GROUP_set_nid(EC_GROUP *, int);
int EC_GROUP_get_nid(const EC_GROUP *);
const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *);
/* We don't have types for field specifications and field elements in general.
* Otherwise we could declare
@@ -120,11 +125,6 @@ const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *);
int EC_GROUP_set_curve_GFp(EC_GROUP *, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *);
int EC_GROUP_get_curve_GFp(const EC_GROUP *, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *);
int EC_GROUP_set_generator(EC_GROUP *, const EC_POINT *generator, const BIGNUM *order, const BIGNUM *cofactor);
EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *);
int EC_GROUP_get_order(const EC_GROUP *, BIGNUM *order, BN_CTX *);
int EC_GROUP_get_cofactor(const EC_GROUP *, BIGNUM *cofactor, BN_CTX *);
/* EC_GROUP_check() returns 1 if 'group' defines a valid group, 0 otherwise */
int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx);
/* EC_GROUP_check_discriminant() returns 1 if the discriminant of the

View File

@@ -73,15 +73,6 @@ struct ec_method_st {
int (*group_set_curve_GFp)(EC_GROUP *, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *);
int (*group_get_curve_GFp)(const EC_GROUP *, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *);
/* used by EC_GROUP_set_generator, EC_GROUP_get0_generator,
* EC_GROUP_get_order, EC_GROUP_get_cofactor:
*/
int (*group_set_generator)(EC_GROUP *, const EC_POINT *generator,
const BIGNUM *order, const BIGNUM *cofactor);
EC_POINT *(*group_get0_generator)(const EC_GROUP *);
int (*group_get_order)(const EC_GROUP *, BIGNUM *order, BN_CTX *);
int (*group_get_cofactor)(const EC_GROUP *, BIGNUM *cofactor, BN_CTX *);
/* used by EC_GROUP_check: */
int (*group_check_discriminant)(const EC_GROUP *, BN_CTX *);
@@ -146,16 +137,24 @@ struct ec_method_st {
struct ec_group_st {
const EC_METHOD *meth;
EC_POINT *generator; /* optional */
BIGNUM order, cofactor;
int nid; /* optional NID for named curve */
void *extra_data;
void *(*extra_data_dup_func)(void *);
void (*extra_data_free_func)(void *);
void (*extra_data_clear_free_func)(void *);
/* All members except 'meth' and 'extra_data...' are handled by
* the method functions, even if they appear generic */
/* The following members are handled by the method functions,
* even if they appear generic */
BIGNUM field; /* Field specification.
* For curves over GF(p), this is the modulus. */
* For curves over GF(p), this is the modulus;
* for curves over GF(2^m), this is the
* irreducible polynomial defining the field.
*/
BIGNUM a, b; /* Curve coefficients.
* (Here the assumption is that BIGNUMs can be used
@@ -163,14 +162,13 @@ struct ec_group_st {
* For characteristic > 3, the curve is defined
* by a Weierstrass equation of the form
* y^2 = x^3 + a*x + b.
* For characteristic 2, the curve is defined by
* an equation of the form
* y^2 + x*y = x^3 + a*x^2 + b.
*/
int a_is_minus3; /* enable optimized point arithmetics for special case */
EC_POINT *generator; /* optional */
BIGNUM order, cofactor;
int nid;
void *field_data1; /* method-specific (e.g., Montgomery structure) */
void *field_data2; /* method-specific */
} /* EC_GROUP */;
@@ -213,11 +211,6 @@ void ec_GFp_simple_group_clear_finish(EC_GROUP *);
int ec_GFp_simple_group_copy(EC_GROUP *, const EC_GROUP *);
int ec_GFp_simple_group_set_curve_GFp(EC_GROUP *, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *);
int ec_GFp_simple_group_get_curve_GFp(const EC_GROUP *, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *);
int ec_GFp_simple_group_set_generator(EC_GROUP *, const EC_POINT *generator,
const BIGNUM *order, const BIGNUM *cofactor);
EC_POINT *ec_GFp_simple_group_get0_generator(const EC_GROUP *);
int ec_GFp_simple_group_get_order(const EC_GROUP *, BIGNUM *order, BN_CTX *);
int ec_GFp_simple_group_get_cofactor(const EC_GROUP *, BIGNUM *cofactor, BN_CTX *);
int ec_GFp_simple_group_check_discriminant(const EC_GROUP *, BN_CTX *);
int ec_GFp_simple_point_init(EC_POINT *);
void ec_GFp_simple_point_finish(EC_POINT *);

View File

@@ -94,6 +94,10 @@ EC_GROUP *EC_GROUP_new(const EC_METHOD *meth)
ret->extra_data_free_func = 0;
ret->extra_data_clear_free_func = 0;
ret->generator = NULL;
BN_init(&ret->order);
BN_init(&ret->cofactor);
ret->nid = 0;
if (!meth->group_init(ret))
@@ -108,17 +112,26 @@ EC_GROUP *EC_GROUP_new(const EC_METHOD *meth)
void EC_GROUP_free(EC_GROUP *group)
{
if (!group) return;
if (group->meth->group_finish != 0)
group->meth->group_finish(group);
EC_GROUP_free_extra_data(group);
if (group->generator != NULL)
EC_POINT_free(group->generator);
BN_free(&group->order);
BN_free(&group->cofactor);
OPENSSL_free(group);
}
void EC_GROUP_clear_free(EC_GROUP *group)
{
if (!group) return;
if (group->meth->group_clear_finish != 0)
group->meth->group_clear_finish(group);
else if (group->meth != NULL && group->meth->group_finish != 0)
@@ -126,6 +139,11 @@ void EC_GROUP_clear_free(EC_GROUP *group)
EC_GROUP_clear_free_extra_data(group);
if (group->generator != NULL)
EC_POINT_clear_free(group->generator);
BN_clear_free(&group->order);
BN_clear_free(&group->cofactor);
memset(group, 0, sizeof *group);
OPENSSL_free(group);
}
@@ -161,6 +179,30 @@ int EC_GROUP_copy(EC_GROUP *dest, const EC_GROUP *src)
dest->extra_data_clear_free_func = src->extra_data_clear_free_func;
}
if (src->generator != NULL)
{
if (dest->generator == NULL)
{
dest->generator = EC_POINT_new(dest);
if (dest->generator == NULL) return 0;
}
if (!EC_POINT_copy(dest->generator, src->generator)) return 0;
}
else
{
/* src->generator == NULL */
if (dest->generator != NULL)
{
EC_POINT_clear_free(dest->generator);
dest->generator = NULL;
}
}
if (!BN_copy(&dest->order, &src->order)) return 0;
if (!BN_copy(&dest->cofactor, &src->cofactor)) return 0;
dest->nid = src->nid;
return dest->meth->group_copy(dest, src);
}
@@ -171,6 +213,71 @@ const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group)
}
int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, const BIGNUM *order, const BIGNUM *cofactor)
{
if (generator == NULL)
{
ECerr(EC_F_EC_GROUP_SET_GENERATOR, ERR_R_PASSED_NULL_PARAMETER);
return 0 ;
}
if (group->generator == NULL)
{
group->generator = EC_POINT_new(group);
if (group->generator == NULL) return 0;
}
if (!EC_POINT_copy(group->generator, generator)) return 0;
if (order != NULL)
{ if (!BN_copy(&group->order, order)) return 0; }
else
{ if (!BN_zero(&group->order)) return 0; }
if (cofactor != NULL)
{ if (!BN_copy(&group->cofactor, cofactor)) return 0; }
else
{ if (!BN_zero(&group->cofactor)) return 0; }
return 1;
}
EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group)
{
return group->generator;
}
int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx)
{
if (!BN_copy(order, &group->order))
return 0;
return !BN_is_zero(order);
}
int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx)
{
if (!BN_copy(cofactor, &group->cofactor))
return 0;
return !BN_is_zero(&group->cofactor);
}
void EC_GROUP_set_nid(EC_GROUP *group, int nid)
{
group->nid = nid;
}
int EC_GROUP_get_nid(const EC_GROUP *group)
{
return group->nid;
}
int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx)
{
if (group->meth->group_set_curve_GFp == 0)
@@ -193,50 +300,6 @@ int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *
}
int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, const BIGNUM *order, const BIGNUM *cofactor)
{
if (group->meth->group_set_generator == 0)
{
ECerr(EC_F_EC_GROUP_SET_GENERATOR, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
return 0;
}
return group->meth->group_set_generator(group, generator, order, cofactor);
}
EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group)
{
if (group->meth->group_get0_generator == 0)
{
ECerr(EC_F_EC_GROUP_GET0_GENERATOR, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
return 0;
}
return group->meth->group_get0_generator(group);
}
int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx)
{
if (group->meth->group_get_order == 0)
{
ECerr(EC_F_EC_GROUP_GET_ORDER, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
return 0;
}
return group->meth->group_get_order(group, order, ctx);
}
int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx)
{
if (group->meth->group_get_cofactor == 0)
{
ECerr(EC_F_EC_GROUP_GET_COFACTOR, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
return 0;
}
return group->meth->group_get_cofactor(group, cofactor, ctx);
}
int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx)
{
if (group->meth->group_check_discriminant == 0)
@@ -248,18 +311,6 @@ int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx)
}
void EC_GROUP_set_nid(EC_GROUP *group, int nid)
{
group->nid = nid;
}
int EC_GROUP_get_nid(const EC_GROUP *group)
{
return group->nid;
}
/* this has 'package' visibility */
int EC_GROUP_set_extra_data(EC_GROUP *group, void *extra_data, void *(*extra_data_dup_func)(void *),
void (*extra_data_free_func)(void *), void (*extra_data_clear_free_func)(void *))
@@ -361,6 +412,8 @@ EC_POINT *EC_POINT_new(const EC_GROUP *group)
void EC_POINT_free(EC_POINT *point)
{
if (!point) return;
if (point->meth->point_finish != 0)
point->meth->point_finish(point);
OPENSSL_free(point);
@@ -369,6 +422,8 @@ void EC_POINT_free(EC_POINT *point)
void EC_POINT_clear_free(EC_POINT *point)
{
if (!point) return;
if (point->meth->point_clear_finish != 0)
point->meth->point_clear_finish(point);
else if (point->meth != NULL && point->meth->point_finish != 0)

View File

@@ -1,6 +1,6 @@
/* crypto/ec/ec_mult.c */
/* ====================================================================
* Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -68,25 +68,23 @@
*/
/* Determine the width-(w+1) Non-Adjacent Form (wNAF) of 'scalar'.
/* Determine the modified width-(w+1) Non-Adjacent Form (wNAF) of 'scalar'.
* This is an array r[] of values that are either zero or odd with an
* absolute value less than 2^w satisfying
* scalar = \sum_j r[j]*2^j
* where at most one of any w+1 consecutive digits is non-zero.
* where at most one of any w+1 consecutive digits is non-zero
* with the exception that the most significant digit may be only
* w-1 zeros away from that next non-zero digit.
*/
static signed char *compute_wNAF(const BIGNUM *scalar, int w, size_t *ret_len, BN_CTX *ctx)
static signed char *compute_wNAF(const BIGNUM *scalar, int w, size_t *ret_len)
{
BIGNUM *c;
int window_val;
int ok = 0;
signed char *r = NULL;
int sign = 1;
int bit, next_bit, mask;
size_t len = 0, j;
BN_CTX_start(ctx);
c = BN_CTX_get(ctx);
if (c == NULL) goto err;
if (w <= 0 || w > 7) /* 'signed char' can represent integers with absolute values less than 2^7 */
{
ECerr(EC_F_COMPUTE_WNAF, ERR_R_INTERNAL_ERROR);
@@ -96,60 +94,84 @@ static signed char *compute_wNAF(const BIGNUM *scalar, int w, size_t *ret_len, B
next_bit = bit << 1; /* at most 256 */
mask = next_bit - 1; /* at most 255 */
if (!BN_copy(c, scalar)) goto err;
if (c->neg)
if (scalar->neg)
{
sign = -1;
c->neg = 0;
}
len = BN_num_bits(c) + 1; /* wNAF may be one digit longer than binary representation */
r = OPENSSL_malloc(len);
len = BN_num_bits(scalar);
r = OPENSSL_malloc(len + 1); /* modified wNAF may be one digit longer than binary representation */
if (r == NULL) goto err;
j = 0;
while (!BN_is_zero(c))
if (scalar->d == NULL || scalar->top == 0)
{
int u = 0;
ECerr(EC_F_COMPUTE_WNAF, ERR_R_INTERNAL_ERROR);
goto err;
}
window_val = scalar->d[0] & mask;
j = 0;
while ((window_val != 0) || (j + w + 1 < len)) /* if j+w+1 >= len, window_val will not increase */
{
int digit = 0;
if (BN_is_odd(c))
/* 0 <= window_val <= 2^(w+1) */
if (window_val & 1)
{
if (c->d == NULL || c->top == 0)
/* 0 < window_val < 2^(w+1) */
if (window_val & bit)
{
digit = window_val - next_bit; /* -2^w < digit < 0 */
#if 1 /* modified wNAF */
if (j + w + 1 >= len)
{
/* special case for generating modified wNAFs:
* no new bits will be added into window_val,
* so using a positive digit here will decrease
* the total length of the representation */
digit = window_val & (mask >> 1); /* 0 < digit < 2^w */
}
#endif
}
else
{
digit = window_val; /* 0 < digit < 2^w */
}
if (digit <= -bit || digit >= bit || !(digit & 1))
{
ECerr(EC_F_COMPUTE_WNAF, ERR_R_INTERNAL_ERROR);
goto err;
}
u = c->d[0] & mask;
if (u & bit)
{
u -= next_bit;
/* u < 0 */
if (!BN_add_word(c, -u)) goto err;
}
else
{
/* u > 0 */
if (!BN_sub_word(c, u)) goto err;
}
if (u <= -bit || u >= bit || !(u & 1) || c->neg)
window_val -= digit;
/* now window_val is 0 or 2^(w+1) in standard wNAF generation;
* for modified window NAFs, it may also be 2^w
*/
if (window_val != 0 && window_val != next_bit && window_val != bit)
{
ECerr(EC_F_COMPUTE_WNAF, ERR_R_INTERNAL_ERROR);
goto err;
}
}
r[j++] = sign * u;
if (BN_is_odd(c))
r[j++] = sign * digit;
window_val >>= 1;
window_val += bit * BN_is_bit_set(scalar, j + w);
if (window_val > next_bit)
{
ECerr(EC_F_COMPUTE_WNAF, ERR_R_INTERNAL_ERROR);
goto err;
}
if (!BN_rshift1(c, c)) goto err;
}
if (j > len)
if (j > len + 1)
{
ECerr(EC_F_COMPUTE_WNAF, ERR_R_INTERNAL_ERROR);
goto err;
@@ -158,7 +180,6 @@ static signed char *compute_wNAF(const BIGNUM *scalar, int w, size_t *ret_len, B
ok = 1;
err:
BN_CTX_end(ctx);
if (!ok)
{
OPENSSL_free(r);
@@ -314,7 +335,7 @@ int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar,
}
wNAF[i + 1] = NULL; /* make sure we always have a pivot */
wNAF[i] = compute_wNAF((i < num ? scalars[i] : scalar), wsize[i], &wNAF_len[i], ctx);
wNAF[i] = compute_wNAF((i < num ? scalars[i] : scalar), wsize[i], &wNAF_len[i]);
if (wNAF[i] == NULL) goto err;
if (wNAF_len[i] > max_len)
max_len = wNAF_len[i];

View File

@@ -67,10 +67,6 @@ const EC_METHOD *EC_GFp_mont_method(void)
ec_GFp_mont_group_copy,
ec_GFp_mont_group_set_curve_GFp,
ec_GFp_simple_group_get_curve_GFp,
ec_GFp_simple_group_set_generator,
ec_GFp_simple_group_get0_generator,
ec_GFp_simple_group_get_order,
ec_GFp_simple_group_get_cofactor,
ec_GFp_simple_group_check_discriminant,
ec_GFp_simple_point_init,
ec_GFp_simple_point_finish,

View File

@@ -69,10 +69,6 @@ const EC_METHOD *EC_GFp_simple_method(void)
ec_GFp_simple_group_copy,
ec_GFp_simple_group_set_curve_GFp,
ec_GFp_simple_group_get_curve_GFp,
ec_GFp_simple_group_set_generator,
ec_GFp_simple_group_get0_generator,
ec_GFp_simple_group_get_order,
ec_GFp_simple_group_get_cofactor,
ec_GFp_simple_group_check_discriminant,
ec_GFp_simple_point_init,
ec_GFp_simple_point_finish,
@@ -110,9 +106,6 @@ int ec_GFp_simple_group_init(EC_GROUP *group)
BN_init(&group->a);
BN_init(&group->b);
group->a_is_minus3 = 0;
group->generator = NULL;
BN_init(&group->order);
BN_init(&group->cofactor);
return 1;
}
@@ -122,10 +115,6 @@ void ec_GFp_simple_group_finish(EC_GROUP *group)
BN_free(&group->field);
BN_free(&group->a);
BN_free(&group->b);
if (group->generator != NULL)
EC_POINT_free(group->generator);
BN_free(&group->order);
BN_free(&group->cofactor);
}
@@ -134,13 +123,6 @@ void ec_GFp_simple_group_clear_finish(EC_GROUP *group)
BN_clear_free(&group->field);
BN_clear_free(&group->a);
BN_clear_free(&group->b);
if (group->generator != NULL)
{
EC_POINT_clear_free(group->generator);
group->generator = NULL;
}
BN_clear_free(&group->order);
BN_clear_free(&group->cofactor);
}
@@ -152,28 +134,6 @@ int ec_GFp_simple_group_copy(EC_GROUP *dest, const EC_GROUP *src)
dest->a_is_minus3 = src->a_is_minus3;
if (src->generator != NULL)
{
if (dest->generator == NULL)
{
dest->generator = EC_POINT_new(dest);
if (dest->generator == NULL) return 0;
}
if (!EC_POINT_copy(dest->generator, src->generator)) return 0;
}
else
{
/* src->generator == NULL */
if (dest->generator != NULL)
{
EC_POINT_clear_free(dest->generator);
dest->generator = NULL;
}
}
if (!BN_copy(&dest->order, &src->order)) return 0;
if (!BN_copy(&dest->cofactor, &src->cofactor)) return 0;
return 1;
}
@@ -284,61 +244,6 @@ int ec_GFp_simple_group_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *
}
int ec_GFp_simple_group_set_generator(EC_GROUP *group, const EC_POINT *generator,
const BIGNUM *order, const BIGNUM *cofactor)
{
if (generator == NULL)
{
ECerr(EC_F_EC_GFP_SIMPLE_GROUP_SET_GENERATOR, ERR_R_PASSED_NULL_PARAMETER);
return 0 ;
}
if (group->generator == NULL)
{
group->generator = EC_POINT_new(group);
if (group->generator == NULL) return 0;
}
if (!EC_POINT_copy(group->generator, generator)) return 0;
if (order != NULL)
{ if (!BN_copy(&group->order, order)) return 0; }
else
{ if (!BN_zero(&group->order)) return 0; }
if (cofactor != NULL)
{ if (!BN_copy(&group->cofactor, cofactor)) return 0; }
else
{ if (!BN_zero(&group->cofactor)) return 0; }
return 1;
}
EC_POINT *ec_GFp_simple_group_get0_generator(const EC_GROUP *group)
{
return group->generator;
}
int ec_GFp_simple_group_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx)
{
if (!BN_copy(order, &group->order))
return 0;
return !BN_is_zero(&group->order);
}
int ec_GFp_simple_group_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx)
{
if (!BN_copy(cofactor, &group->cofactor))
return 0;
return !BN_is_zero(&group->cofactor);
}
int ec_GFp_simple_group_check_discriminant(const EC_GROUP *group, BN_CTX *ctx)
{
int ret = 0;

View File

@@ -287,13 +287,13 @@ err:
DSO_free(dso);
dso = NULL;
keyRecordRead = (F_KEYRECORDREAD)NULL;
randomNumberGenerate = (F_RANDOMNUMBERGENERATE)NULL;
digitalSignatureGenerate = (F_DIGITALSIGNATUREGENERATE)NULL;
digitalSignatureVerify = (F_DIGITALSIGNATUREVERIFY)NULL;
publicKeyExtract = (F_PUBLICKEYEXTRACT)NULL;
pkaEncrypt = (F_PKAENCRYPT)NULL;
pkaDecrypt = (F_PKADECRYPT)NULL;
keyRecordRead = (F_KEYRECORDREAD)0;
randomNumberGenerate = (F_RANDOMNUMBERGENERATE)0;
digitalSignatureGenerate = (F_DIGITALSIGNATUREGENERATE)0;
digitalSignatureVerify = (F_DIGITALSIGNATUREVERIFY)0;
publicKeyExtract = (F_PUBLICKEYEXTRACT)0;
pkaEncrypt = (F_PKAENCRYPT)0;
pkaDecrypt = (F_PKADECRYPT)0;
return 0;
}
@@ -312,13 +312,13 @@ static int ibm_4758_cca_finish(ENGINE *e)
return 0;
}
dso = NULL;
keyRecordRead = (F_KEYRECORDREAD)NULL;
randomNumberGenerate = (F_RANDOMNUMBERGENERATE)NULL;
digitalSignatureGenerate = (F_DIGITALSIGNATUREGENERATE)NULL;
digitalSignatureVerify = (F_DIGITALSIGNATUREVERIFY)NULL;
publicKeyExtract = (F_PUBLICKEYEXTRACT)NULL;
pkaEncrypt = (F_PKAENCRYPT)NULL;
pkaDecrypt = (F_PKADECRYPT)NULL;
keyRecordRead = (F_KEYRECORDREAD)0;
randomNumberGenerate = (F_RANDOMNUMBERGENERATE)0;
digitalSignatureGenerate = (F_DIGITALSIGNATUREGENERATE)0;
digitalSignatureVerify = (F_DIGITALSIGNATUREVERIFY)0;
publicKeyExtract = (F_PUBLICKEYEXTRACT)0;
pkaEncrypt = (F_PKAENCRYPT)0;
pkaDecrypt = (F_PKADECRYPT)0;
return 1;
}

View File

@@ -95,10 +95,10 @@ static EVP_PKEY *surewarehk_load_privkey(ENGINE *e, const char *key_id,
static EVP_PKEY *surewarehk_load_pubkey(ENGINE *e, const char *key_id,
UI_METHOD *ui_method, void *callback_data);
static void surewarehk_ex_free(void *obj, void *item, CRYPTO_EX_DATA *ad,
int index_,long argl, void *argp);
int idx,long argl, void *argp);
#if 0
static void surewarehk_dh_ex_free(void *obj, void *item, CRYPTO_EX_DATA *ad,
int index_,long argl, void *argp);
int idx,long argl, void *argp);
#endif
#ifndef OPENSSL_NO_RSA
@@ -816,7 +816,7 @@ static EVP_PKEY *surewarehk_load_pubkey(ENGINE *e, const char *key_id,
/* This cleans up an RSA/DSA KM key(do not destroy the key into the hardware)
, called when ex_data is freed */
static void surewarehk_ex_free(void *obj, void *item, CRYPTO_EX_DATA *ad,
int index_,long argl, void *argp)
int idx,long argl, void *argp)
{
if(!p_surewarehk_Free)
{
@@ -831,7 +831,7 @@ static void surewarehk_ex_free(void *obj, void *item, CRYPTO_EX_DATA *ad,
/* This cleans up an DH KM key (destroys the key into hardware),
called when ex_data is freed */
static void surewarehk_dh_ex_free(void *obj, void *item, CRYPTO_EX_DATA *ad,
int index_,long argl, void *argp)
int idx,long argl, void *argp)
{
if(!p_surewarehk_Free)
{

View File

@@ -122,6 +122,11 @@
static void err_load_strings(int lib, ERR_STRING_DATA *str);
static void ERR_STATE_free(ERR_STATE *s);
#ifdef _VMS
void ExtractProgName (char *,char **);
#endif
#ifndef OPENSSL_NO_ERR
static ERR_STRING_DATA ERR_str_libraries[]=
{
@@ -642,7 +647,11 @@ void ERR_put_error(int lib, int func, int reason, const char *file,
if (es->top == es->bottom)
es->bottom=(es->bottom+1)%ERR_NUM_ERRORS;
es->err_buffer[es->top]=ERR_PACK(lib,func,reason);
#ifdef _VMS
ExtractProgName ((char *)file, (char **)&es->err_file[es->top]);
#else
es->err_file[es->top]=file;
#endif
es->err_line[es->top]=line;
err_clear_data(es,es->top);
}

View File

@@ -159,7 +159,7 @@ typedef struct err_state_st
#define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),__FILE__,__LINE__)
#define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),__FILE__,__LINE__)
#define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),__FILE__,__LINE__)
#define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),ERR_file_name,__LINE__)
#define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),__FILE__,__LINE__)
#define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),__FILE__,__LINE__)
/* Borland C seems too stupid to be able to shift and do longs in

60
crypto/err/progname.c Normal file
View File

@@ -0,0 +1,60 @@
#ifdef VMS
#pragma nostandard
#include <stdlib.h>
#include <rms>
void
ExtractProgName
(
char *ImageName,
char **ProgName
)
{
#if __INITIAL_POINTER_SIZE == 64
#pragma __required_pointer_size __save
#pragma __required_pointer_size 32
#endif
typedef char char_32;
char *TmpImageName;
#if __INITIAL_POINTER_SIZE == 64
#pragma __required_pointer_size __restore
#endif
char esa[NAM$C_MAXRSS],
rsa[NAM$C_MAXRSS];
struct FAB fab;
struct NAM nam;
int status;
fab = cc$rms_fab;
nam = cc$rms_nam;
#if __INITIAL_POINTER_SIZE == 64
TmpImageName = (char_32 *)_malloc32 (strlen (ImageName) + 1);
#else
TmpImageName = (char *)malloc (strlen (ImageName) + 1);
#endif
strncpy (TmpImageName, ImageName, strlen (ImageName));
fab.fab$l_fna = TmpImageName;
fab.fab$b_fns = strlen (ImageName);
fab.fab$l_nam = &nam;
nam.nam$l_esa = esa;
nam.nam$b_ess = sizeof (esa);
nam.nam$l_rsa = rsa;
nam.nam$b_rss = sizeof (rsa);
nam.nam$v_synchk = 1;
status = SYS$PARSE (&fab);
if (! (status & 1))
exit (status);
*ProgName = (char *)malloc (nam.nam$b_name + 1);
strncpy (*ProgName, nam.nam$l_name, nam.nam$b_name);
*(*ProgName + nam.nam$b_name) = '\0';
free (TmpImageName);
#pragma standard
}
#endif

View File

@@ -190,7 +190,7 @@ typedef struct evp_pkey_md_st
EVP_rsa_octet_string(),EVP_mdc2())
#define EVP_dsa_sha() \
EVP_PKEY_MD_add(NID_dsaWithSHA,\
EVP_dsa(),EVP_mdc2())
EVP_dsa(),EVP_sha())
#define EVP_dsa_sha1() \
EVP_PKEY_MD_add(NID_dsaWithSHA1,\
EVP_dsa(),EVP_sha1())
@@ -543,7 +543,7 @@ int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char **ek,
int *ekl, unsigned char *iv,EVP_PKEY **pubk, int npubk);
void EVP_SealFinal(EVP_CIPHER_CTX *ctx,unsigned char *out,int *outl);
int EVP_SealFinal(EVP_CIPHER_CTX *ctx,unsigned char *out,int *outl);
void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,

View File

@@ -102,11 +102,13 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *imp
goto skip_to_init;
if (cipher)
{
/* Ensure an ENGINE left lying around from last time is cleared
/* Ensure a context left lying around from last time is cleared
* (the previous check attempted to avoid this if the same
* ENGINE and EVP_CIPHER could be used). */
if(ctx->engine)
ENGINE_finish(ctx->engine);
EVP_CIPHER_CTX_cleanup(ctx);
/* Restore encrypt field: it is zeroed by cleanup */
ctx->encrypt = enc;
if(impl)
{
if (!ENGINE_init(impl))
@@ -140,6 +142,7 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *imp
}
else
ctx->engine = NULL;
ctx->cipher=cipher;
ctx->cipher_data=OPENSSL_malloc(ctx->cipher->ctx_size);
ctx->key_len = cipher->key_len;
@@ -303,7 +306,6 @@ int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
{
int ret;
ret = EVP_EncryptFinal_ex(ctx, out, outl);
EVP_CIPHER_CTX_cleanup(ctx);
return ret;
}
@@ -314,14 +316,12 @@ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
b=ctx->cipher->block_size;
if (b == 1)
{
EVP_CIPHER_CTX_cleanup(ctx);
*outl=0;
return 1;
}
bl=ctx->buf_len;
if (ctx->flags & EVP_CIPH_NO_PADDING)
{
EVP_CIPHER_CTX_cleanup(ctx);
if(bl)
{
EVPerr(EVP_F_EVP_ENCRYPTFINAL,EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH);
@@ -336,7 +336,6 @@ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
ctx->buf[i]=n;
ret=ctx->cipher->do_cipher(ctx,out,ctx->buf,b);
EVP_CIPHER_CTX_cleanup(ctx);
if(ret)
*outl=b;
@@ -394,7 +393,6 @@ int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
{
int ret;
ret = EVP_DecryptFinal_ex(ctx, out, outl);
EVP_CIPHER_CTX_cleanup(ctx);
return ret;
}
@@ -407,7 +405,6 @@ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
b=ctx->cipher->block_size;
if (ctx->flags & EVP_CIPH_NO_PADDING)
{
EVP_CIPHER_CTX_cleanup(ctx);
if(ctx->buf_len)
{
EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH);
@@ -420,14 +417,12 @@ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
{
if (ctx->buf_len || !ctx->final_used)
{
EVP_CIPHER_CTX_cleanup(ctx);
EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_WRONG_FINAL_BLOCK_LENGTH);
return(0);
}
n=ctx->final[b-1];
if (n > b)
{
EVP_CIPHER_CTX_cleanup(ctx);
EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_BAD_DECRYPT);
return(0);
}
@@ -435,7 +430,6 @@ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
{
if (ctx->final[--b] != n)
{
EVP_CIPHER_CTX_cleanup(ctx);
EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_BAD_DECRYPT);
return(0);
}
@@ -447,17 +441,21 @@ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
}
else
*outl=0;
EVP_CIPHER_CTX_cleanup(ctx);
return(1);
}
int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *c)
{
if ((c->cipher != NULL) && (c->cipher->cleanup != NULL))
if (c->cipher != NULL)
{
if(!c->cipher->cleanup(c)) return 0;
if(c->cipher->cleanup && !c->cipher->cleanup(c))
return 0;
/* Zero cipher context data */
if (c->cipher_data)
memset(c->cipher_data, 0, c->cipher->ctx_size);
}
OPENSSL_free(c->cipher_data);
if (c->cipher_data)
OPENSSL_free(c->cipher_data);
if (c->engine)
/* The EVP_CIPHER we used belongs to an ENGINE, release the
* functional reference we held for this reason. */

View File

@@ -209,6 +209,8 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
exit(9);
}
EVP_CIPHER_CTX_cleanup(&ctx);
printf("\n");
}
@@ -279,6 +281,8 @@ static int test_digest(const char *digest,
printf("\n");
EVP_MD_CTX_cleanup(&ctx);
return 1;
}

View File

@@ -106,8 +106,10 @@ int inl;
}
*/
void EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
{
EVP_EncryptFinal_ex(ctx,out,outl);
int i;
i = EVP_EncryptFinal_ex(ctx,out,outl);
EVP_EncryptInit_ex(ctx,NULL,NULL,NULL,NULL);
return i;
}

View File

@@ -11,7 +11,11 @@ $ WRITE SYS$OUTPUT "First argument missing."
$ WRITE SYS$OUTPUT "Should be the directory where you want things installed."
$ EXIT
$ ENDIF
$
$!
$! Define some VMS specific symbols.
$!
$ @[-]vms_build_info
$!
$ 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") -
@@ -20,15 +24,21 @@ $ ROOT = ROOT_DEV + "[" + ROOT_DIR
$
$ DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
$ DEFINE/NOLOG WRK_SSLVLIB WRK_SSLROOT:[VAX_LIB]
$ DEFINE/NOLOG WRK_SSLVEXE WRK_SSLROOT:[VAX_EXE]
$ DEFINE/NOLOG WRK_SSLALIB WRK_SSLROOT:[ALPHA_LIB]
$ DEFINE/NOLOG WRK_SSLAEXE WRK_SSLROOT:[ALPHA_EXE]
$ DEFINE/NOLOG WRK_SSLINCLUDE WRK_SSLROOT:[INCLUDE]
$
$ IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
CREATE/DIR/LOG WRK_SSLROOT:[000000]
$ IF F$PARSE("WRK_SSLVLIB:") .EQS. "" THEN -
CREATE/DIR/LOG WRK_SSLVLIB:
$ IF F$PARSE("WRK_SSLVEXE:") .EQS. "" THEN -
CREATE/DIR/LOG WRK_SSLVEXE:
$ IF F$PARSE("WRK_SSLALIB:") .EQS. "" THEN -
CREATE/DIR/LOG WRK_SSLALIB:
$ IF F$PARSE("WRK_SSLAEXE:") .EQS. "" THEN -
CREATE/DIR/LOG WRK_SSLAEXE:
$ IF F$PARSE("WRK_SSLINCLUDE:") .EQS. "" THEN -
CREATE/DIR/LOG WRK_SSLINCLUDE:
$
@@ -82,7 +92,18 @@ $ EXHEADER_COMP := comp.h
$ EXHEADER_OCSP := ocsp.h
$ EXHEADER_UI := ui.h,ui_compat.h
$ EXHEADER_KRB5 := krb5_asn.h
$ LIBS := LIBCRYPTO
$!
$! We can combine the .OLBs and .EXEs under LIBS
$! since the two pieces of LOOP_* code are smart
$! enough to check for the existance of the file
$! before trying to copy it.
$!
$ if "''build_bits'" .eqs. "32"
$ then
$ LIBS := LIBCRYPTO'build_bits',SSL$LIBCRYPTO_SHR'build_bits'
$ else
$ LIBS := LIBCRYPTO'build_bits',SSL$LIBCRYPTO_SHR
$ endif
$
$ VEXE_DIR := [-.VAX.EXE.CRYPTO]
$ AEXE_DIR := [-.AXP.EXE.CRYPTO]
@@ -117,8 +138,8 @@ $ ENDIF
$ ! Preparing for the time when we have shareable images
$ IF F$SEARCH(VEXE_DIR+E+".EXE") .NES. ""
$ THEN
$ COPY 'VEXE_DIR''E'.EXE WRK_SSLVLIB:'E'.EXE/log
$ SET FILE/PROT=W:RE WRK_SSLVLIB:'E'.EXE
$ 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+".OLB") .NES. ""
$ THEN
@@ -128,8 +149,8 @@ $ ENDIF
$ ! Preparing for the time when we have shareable images
$ IF F$SEARCH(AEXE_DIR+E+".EXE") .NES. ""
$ THEN
$ COPY 'AEXE_DIR''E'.EXE WRK_SSLALIB:'E'.EXE/log
$ SET FILE/PROT=W:RE WRK_SSLALIB:'E'.EXE
$ COPY 'AEXE_DIR''E'.EXE WRK_SSLAEXE:'E'.EXE/log
$ SET FILE/PROT=W:RE WRK_SSLAEXE:'E'.EXE
$ ENDIF
$ SET ON
$ GOTO LOOP_LIB

View File

@@ -62,12 +62,12 @@
* [including the GNU Public Licence.]
*/
#define NUM_NID 574
#define NUM_SN 569
#define NUM_LN 569
#define NUM_OBJ 543
#define NUM_NID 575
#define NUM_SN 570
#define NUM_LN 570
#define NUM_OBJ 544
static unsigned char lvalues[4257]={
static unsigned char lvalues[4260]={
0x00, /* [ 0] OBJ_undef */
0x2A,0x86,0x48,0x86,0xF7,0x0D, /* [ 1] OBJ_rsadsi */
0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01, /* [ 7] OBJ_pkcs */
@@ -611,6 +611,7 @@ static unsigned char lvalues[4257]={
0x2B,0x06,0x01,0x07,0x01,0x02, /* [4236] OBJ_mime_mhs_bodies */
0x2B,0x06,0x01,0x07,0x01,0x01,0x01, /* [4242] OBJ_id_hex_partial_message */
0x2B,0x06,0x01,0x07,0x01,0x01,0x02, /* [4249] OBJ_id_hex_multipart_message */
0x55,0x04,0x2C, /* [4256] OBJ_generationQualifier */
};
static ASN1_OBJECT nid_objs[NUM_NID]={
@@ -1465,6 +1466,8 @@ static ASN1_OBJECT nid_objs[NUM_NID]={
NID_id_hex_partial_message,7,&(lvalues[4242]),0},
{"id-hex-multipart-message","id-hex-multipart-message",
NID_id_hex_multipart_message,7,&(lvalues[4249]),0},
{"generationQualifier","generationQualifier",NID_generationQualifier,
3,&(lvalues[4256]),0},
};
static ASN1_OBJECT *sn_objs[NUM_SN]={
@@ -1682,6 +1685,7 @@ static ASN1_OBJECT *sn_objs[NUM_SN]={
&(nid_objs[453]),/* "friendlyCountry" */
&(nid_objs[490]),/* "friendlyCountryName" */
&(nid_objs[156]),/* "friendlyName" */
&(nid_objs[574]),/* "generationQualifier" */
&(nid_objs[99]),/* "gn" */
&(nid_objs[163]),/* "hmacWithSHA1" */
&(nid_objs[432]),/* "holdInstructionCallIssuer" */
@@ -2246,6 +2250,7 @@ static ASN1_OBJECT *ln_objs[NUM_LN]={
&(nid_objs[453]),/* "friendlyCountry" */
&(nid_objs[490]),/* "friendlyCountryName" */
&(nid_objs[156]),/* "friendlyName" */
&(nid_objs[574]),/* "generationQualifier" */
&(nid_objs[99]),/* "givenName" */
&(nid_objs[163]),/* "hmacWithSHA1" */
&(nid_objs[486]),/* "homePostalAddress" */
@@ -2617,8 +2622,8 @@ static ASN1_OBJECT *obj_objs[NUM_OBJ]={
&(nid_objs[434]),/* OBJ_data 0 9 */
&(nid_objs[181]),/* OBJ_iso 1 */
&(nid_objs[182]),/* OBJ_member_body 1 2 */
&(nid_objs[379]),/* OBJ_org 1 3 */
&(nid_objs[527]),/* OBJ_identified_organization 1 3 */
&(nid_objs[379]),/* OBJ_org 1 3 */
&(nid_objs[393]),/* OBJ_joint_iso_ccitt 2 */
&(nid_objs[11]),/* OBJ_X500 2 5 */
&(nid_objs[380]),/* OBJ_dod 1 3 6 */
@@ -2644,6 +2649,7 @@ static ASN1_OBJECT *obj_objs[NUM_OBJ]={
&(nid_objs[173]),/* OBJ_name 2 5 4 41 */
&(nid_objs[99]),/* OBJ_givenName 2 5 4 42 */
&(nid_objs[101]),/* OBJ_initials 2 5 4 43 */
&(nid_objs[574]),/* OBJ_generationQualifier 2 5 4 44 */
&(nid_objs[568]),/* OBJ_x500UniqueIdentifier 2 5 4 45 */
&(nid_objs[174]),/* OBJ_dnQualifier 2 5 4 46 */
&(nid_objs[400]),/* OBJ_role 2 5 4 72 */

View File

@@ -1897,6 +1897,10 @@
#define NID_initials 101
#define OBJ_initials OBJ_X509,43L
#define LN_generationQualifier "generationQualifier"
#define NID_generationQualifier 574
#define OBJ_generationQualifier OBJ_X509,44L
#define LN_x500UniqueIdentifier "x500UniqueIdentifier"
#define NID_x500UniqueIdentifier 568
#define OBJ_x500UniqueIdentifier OBJ_X509,45L

View File

@@ -571,3 +571,4 @@ mime_mhs_headings 570
mime_mhs_bodies 571
id_hex_partial_message 572
id_hex_multipart_message 573
generationQualifier 574

View File

@@ -611,6 +611,7 @@ X509 13 : : description
X509 41 : name : name
X509 42 : gn : givenName
X509 43 : : initials
X509 44 : : generationQualifier
X509 45 : : x500UniqueIdentifier
X509 46 : dnQualifier : dnQualifier
X509 72 : role : role

View File

@@ -370,7 +370,7 @@ int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc,
}
/* if we have a certificate then write it out now */
if ((xi->x509 != NULL) || (PEM_write_bio_X509(bp,xi->x509) <= 0))
if ((xi->x509 != NULL) && (PEM_write_bio_X509(bp,xi->x509) <= 0))
goto err;
/* we are ignoring anything else that is loaded into the X509_INFO

View File

@@ -307,9 +307,13 @@ int PKCS7_add_crl(PKCS7 *p7, X509_CRL *crl)
int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey,
const EVP_MD *dgst)
{
int nid;
char is_dsa;
if (pkey->type == EVP_PKEY_DSA || pkey->type == EVP_PKEY_ECDSA) is_dsa = 1;
else is_dsa = 0;
if (pkey->type == EVP_PKEY_DSA || pkey->type == EVP_PKEY_ECDSA)
is_dsa = 1;
else
is_dsa = 0;
/* We now need to add another PKCS7_SIGNER_INFO entry */
ASN1_INTEGER_set(p7i->version,1);
X509_NAME_set(&p7i->issuer_and_serial->issuer,
@@ -336,16 +340,38 @@ int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey,
goto err;
p7i->digest_alg->parameter->type=V_ASN1_NULL;
p7i->digest_enc_alg->algorithm=OBJ_nid2obj(EVP_PKEY_type(pkey->type));
if (p7i->digest_enc_alg->parameter != NULL)
ASN1_TYPE_free(p7i->digest_enc_alg->parameter);
if(is_dsa) p7i->digest_enc_alg->parameter = NULL;
else {
nid = EVP_PKEY_type(pkey->type);
if (nid == EVP_PKEY_RSA)
{
p7i->digest_enc_alg->algorithm=OBJ_nid2obj(NID_rsaEncryption);
if (!(p7i->digest_enc_alg->parameter=ASN1_TYPE_new()))
goto err;
p7i->digest_enc_alg->parameter->type=V_ASN1_NULL;
}
}
else if (nid == EVP_PKEY_DSA)
{
#if 1
/* use 'dsaEncryption' OID for compatibility with other software
* (PKCS #7 v1.5 does specify how to handle DSA) ... */
p7i->digest_enc_alg->algorithm=OBJ_nid2obj(NID_dsa);
#else
/* ... although the 'dsaWithSHA1' OID (as required by RFC 2630 for CMS)
* would make more sense. */
p7i->digest_enc_alg->algorithm=OBJ_nid2obj(NID_dsaWithSHA1);
#endif
p7i->digest_enc_alg->parameter = NULL; /* special case for DSA: omit 'parameter'! */
}
else if (nid == EVP_PKEY_ECDSA)
{
p7i->digest_enc_alg->algorithm=OBJ_nid2obj(NID_ecdsa_with_SHA1);
if (!(p7i->digest_enc_alg->parameter=ASN1_TYPE_new()))
goto err;
p7i->digest_enc_alg->parameter->type=V_ASN1_NULL;
}
else
return(0);
return(1);
err:

View File

@@ -94,7 +94,7 @@
* RAND_egd() is a wrapper for RAND_egd_bytes() with numbytes=255.
*/
#if defined(OPENSSL_SYS_WIN32) || defined(VMS) || defined(__VMS)
#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS)
int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes)
{
return(-1);

View File

@@ -1,6 +1,9 @@
/* crypto/rand/rand_vms.c -*- mode:C; c-file-style: "eay" -*- */
/* Written by Richard Levitte <richard@levitte.org> for the OpenSSL
* project 2000.
* RAND_poll() written by Taka Shinagawa <takaaki.shinagawa@compaq.com>
* for the OpenSSL project.
*/
*/
/* ====================================================================
* Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved.
@@ -56,13 +59,76 @@
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <openssl/rand.h>
#include "rand_lcl.h"
#if defined(OPENSSL_SYS_VMS)
#define __NEW_STARLET 1
#define NUM_OF_ITEMS 11
#include <efndef.h>
#include <descrip.h>
#include <jpidef.h>
#ifdef __alpha
#include <iledef.h>
#include <iosbdef.h>
#else
typedef struct _ile3 { /* Copied from ILEDEF.H for Alpha */
#pragma __nomember_alignment
unsigned short int ile3$w_length; /* Length of buffer in bytes */
unsigned short int ile3$w_code; /* Item code value */
void *ile3$ps_bufaddr; /* Buffer address */
unsigned short int *ile3$ps_retlen_addr; /* Address of word for returned length */
} ILE3;
typedef struct _iosb { /* Copied from IOSBDEF.H for Alpha */
#pragma __nomember_alignment
__union {
__struct {
unsigned short int iosb$w_status; /* Final I/O status */
__union {
__struct { /* 16-bit byte count variant */
unsigned short int iosb$w_bcnt; /* 16-bit byte count */
__union {
unsigned int iosb$l_dev_depend; /* 32-bit device dependent info */
unsigned int iosb$l_pid; /* 32-bit pid */
} iosb$r_l;
} iosb$r_bcnt_16;
__struct { /* 32-bit byte count variant */
unsigned int iosb$l_bcnt; /* 32-bit byte count (unaligned) */
unsigned short int iosb$w_dev_depend_high; /* 16-bit device dependent info */
} iosb$r_bcnt_32;
} iosb$r_devdepend;
} iosb$r_io_64;
__struct {
__union {
unsigned int iosb$l_getxxi_status; /* Final GETxxI status */
unsigned int iosb$l_reg_status; /* Final $Registry status */
} iosb$r_l_status;
unsigned int iosb$l_reserved; /* Reserved field */
} iosb$r_get_64;
} iosb$r_io_get;
} IOSB;
#if !defined(__VAXC)
#define iosb$w_status iosb$r_io_get.iosb$r_io_64.iosb$w_status
#define iosb$w_bcnt iosb$r_io_get.iosb$r_io_64.iosb$r_devdepend.iosb$r_bcnt_16.iosb$w_bcnt
#define iosb$r_l iosb$r_io_get.iosb$r_io_64.iosb$r_devdepend.iosb$r_bcnt_16.iosb$r_l
#define iosb$l_dev_depend iosb$r_l.iosb$l_dev_depend
#define iosb$l_pid iosb$r_l.iosb$l_pid
#define iosb$l_bcnt iosb$r_io_get.iosb$r_io_64.iosb$r_devdepend.iosb$r_bcnt_32.iosb$l_bcnt
#define iosb$w_dev_depend_high iosb$r_io_get.iosb$r_io_64.iosb$r_devdepend.iosb$r_bcnt_32.iosb$w_dev_depend_high
#define iosb$l_getxxi_status iosb$r_io_get.iosb$r_get_64.iosb$r_l_status.iosb$l_getxxi_status
#define iosb$l_reg_status iosb$r_io_get.iosb$r_get_64.iosb$r_l_status.iosb$l_reg_status
#endif /* #if !defined(__VAXC) */
#endif /* End of IOSBDEF */
#include <syidef.h>
#include <ssdef.h>
#include <starlet.h>
#ifdef __DECC
@@ -76,25 +142,30 @@ static struct items_data_st
{ { 4, JPI$_BUFIO },
{ 4, JPI$_CPUTIM },
{ 4, JPI$_DIRIO },
{ 4, JPI$_IMAGECOUNT },
{ 8, JPI$_LAST_LOGIN_I },
{ 8, JPI$_LOGINTIM },
{ 4, JPI$_PAGEFLTS },
{ 4, JPI$_PID },
{ 4, JPI$_PPGCNT },
{ 4, JPI$_WSSIZE },
{ 4, JPI$_WSPEAK },
{ 4, JPI$_FINALEXC },
{ 0, 0 }
};
int RAND_poll(void)
{
long pid, iosb[2];
IOSB iosb;
long pid;
int status = 0;
struct
{
short length, code;
long *buffer;
int *retlen;
} item[32], *pitem;
unsigned char data_buffer[256];
short total_length = 0;
#if __INITIAL_POINTER_SIZE == 64
ILEB_64 item[32], *pitem;
#else
ILE3 item[32], *pitem;
#endif
int data_buffer[256];
int total_length = 0;
struct items_data_st *pitems_data;
pitems_data = items_data;
@@ -103,15 +174,33 @@ int RAND_poll(void)
/* Setup */
while (pitems_data->length)
{
pitem->length = pitems_data->length;
pitem->code = pitems_data->code;
pitem->buffer = (long *)data_buffer[total_length];
pitem->retlen = 0;
total_length += pitems_data->length;
#if __INITIAL_POINTER_SIZE == 64
pitem->ileb_64$w_mbo = 1;
pitem->ileb_64$w_code = pitems_data->code;
pitem->ileb_64$l_mbmo = -1;
pitem->ileb_64$q_length = pitems_data->length;
pitem->ileb_64$pq_bufaddr = &data_buffer[total_length];
pitem->ileb_64$pq_retlen_addr = (unsigned __int64 *)&length;
total_length += pitems_data->length/4;
#else
pitem->ile3$w_length = (short)pitems_data->length;
pitem->ile3$w_code = (short)pitems_data->code;
pitem->ile3$ps_bufaddr = &data_buffer[total_length];
pitem->ile3$ps_retlen_addr = &length;
total_length += pitems_data->length/4;
#endif
pitems_data++;
pitem++;
}
pitem->length = pitem->code = 0;
/* Last item of the item list is null terminated */
#if __INITIAL_POINTER_SIZE == 64
pitem->ileb_64$q_length = pitem->ileb_64$w_code = 0;
#else
pitem->ile3$w_length = pitem->ile3$w_code = 0;
#endif
/*
* Scan through all the processes in the system and add entropy with
@@ -119,17 +208,49 @@ int RAND_poll(void)
* However, view the information as only half trustable.
*/
pid = -1; /* search context */
while ((status = sys$getjpiw(0, &pid, 0, item, iosb, 0, 0))
while ((status = sys$getjpiw(EFN$C_ENF, &pid, 0, item, iosb, 0, 0))
!= SS$_NOMOREPROC)
{
if (status == SS$_NORMAL)
{
RAND_add(data_buffer, total_length, total_length/2);
int i;
int tmp_length;
for(i = 0; i < total_length; i++)
{
unsigned int sys_time[2];
sys$gettim(sys_time);
srand(sys_time[0]*data_buffer[0]*data_buffer[1]+i);
if(i==(total_length-1)) /* for JPI$_FINALEXC */
{
long int *ptr = (long *)data_buffer[i];
tmp_length = 0;
for(j=0; j<4; j++)
{
data_buffer[i+j] = ptr[j];
/* OK to use rand() just
to scramble the seed */
data_buffer[i+j] ^=
(sys_time ^ rand());
tmp_length++;
}
}
else
{
/* OK to use rand() just
to scramble the seed */
data_buffer[i] ^= (sys_time ^ rand());
}
}
total_length += (tmp_length - 1);
/* size of seed is total_length*4 bytes (64bytes) */
RAND_add(data_buffer, total_length, total_length*2);
}
}
sys$gettim(iosb);
RAND_add((unsigned char *)iosb, sizeof(iosb), sizeof(iosb)/2);
return 1;
return RAND_status();
}
#endif

View File

@@ -119,9 +119,13 @@ void RC4(RC4_KEY *key, unsigned long len, const unsigned char *indata,
d[x]=ty, \
(RC4_CHUNK)d[(tx+ty)&0xff]\
)
#ifdef OPENSSL_SYS_VMS
if ( ( ((unsigned long long)indata & (sizeof(RC4_CHUNK)-1)) |
((unsigned long long)outdata & (sizeof(RC4_CHUNK)-1)) ) == 0 )
#else
if ( ( ((unsigned long)indata & (sizeof(RC4_CHUNK)-1)) |
((unsigned long)outdata & (sizeof(RC4_CHUNK)-1)) ) == 0 )
#endif
{
RC4_CHUNK ichunk,otp;
const union { long one; char little; } is_endian = {1};

View File

@@ -59,6 +59,7 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <openssl/ripemd.h>
#ifdef OPENSSL_NO_RIPEMD
int main(int argc, char *argv[])
@@ -67,7 +68,6 @@ int main(int argc, char *argv[])
return(0);
}
#else
#include <openssl/ripemd.h>
#include <openssl/evp.h>
#ifdef CHARSET_EBCDIC

View File

@@ -1,9 +1,20 @@
$! To compile mttest on VMS.
$!
$! WARNING: only tested with DEC C so far.
$!
$!
$!
$! Define USER_CCFLAGS
$!
$ @[--]vms_build_info.com
$ WRITE SYS$OUTPUT " Using USER_CCFLAGS = ", USER_CCFLAGS
$
$ arch := vax
$ if f$getsyi("CPU") .ge. 128 then arch := axp
$ define/user openssl [--.include.openssl]
$ cc/def=PTHREADS mttest.c
$ link mttest,[--.'arch'.exe.ssl]libssl/lib,[--.'arch'.exe.crypto]libcrypto/lib
$ link /MAP/FULL/CROSS mttest, -
[--.'arch'.exe.ssl]libssl/lib, -
[--.'arch'.exe.crypto]libcrypto/lib, -
SYS$DISK:[--]SSL_IDENT.OPT/OPTION

View File

@@ -465,7 +465,7 @@ static int open_console(UI *ui)
tty_out=stderr;
#endif
#if defined(TTY_get) && !defined(VMS)
#if defined(TTY_get) && !defined(OPENSSL_SYS_VMS)
if (TTY_get(fileno(tty_in),&tty_orig) == -1)
{
#ifdef ENOTTY

50
demos/install.com Normal file
View File

@@ -0,0 +1,50 @@
$! 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
$
$ IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
CREATE/DIR/LOG WRK_SSLROOT:[000000]
$!
$ EXAMPLE_DIR := [.VMS_EXAMPLES]
$ EXAMPLE_FILES := SSL$BIO_CLI.C,SSL$BIO_SERV.C,SSL$CLI_SESS_RENEGO.C, -
SSL$CLI_SESS_RENEGO_CLI_VER.C,SSL$CLI_SESS_REUSE.C, -
SSL$CLI_SESS_REUSE_CLI_VER.C,SSL$CLI_VERIFY_CLIENT.C, -
SSL$SERV_SESS_RENEGO.C,SSL$SERV_SESS_RENEGO_CLI_VER.C, -
SSL$SERV_SESS_REUSE.C,SSL$SERV_SESS_REUSE_CLI_VER.C, -
SSL$SERV_VERIFY_CLIENT.C,SSL$SIMPLE_CLI.C,SSL$SIMPLE_SERV.C, -
SSL$EXAMPLES_SETUP.COM
$!
$ I = 0
$ LOOP:
$ EF = F$EDIT(F$ELEMENT(I, ",", EXAMPLE_FILES),"TRIM")
$ I = I + 1
$ IF eF .EQS. "," THEN GOTO LOOP_END
$ SET NOON
$ IF F$SEARCH(EXAMPLE_DIR+EF) .NES. ""
$ THEN
$ COPY 'EXAMPLE_DIR''EF' WRK_SSLROOT:[000000]*.*/log
$ SET FILE/PROT=W:RE WRK_SSLROOT:[000000]'EF'
$ ENDIF
$ SET ON
$ GOTO LOOP
$ LOOP_END:
$!
$ EXIT

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