Compare commits
85 Commits
OpenSSL_0_
...
OpenSSL-en
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
da867a51a0 | ||
|
|
25814b9690 | ||
|
|
0fc7c5010d | ||
|
|
166e1f304b | ||
|
|
ef413a7ee8 | ||
|
|
dcd4d341e1 | ||
|
|
61b337bd22 | ||
|
|
06b71aec85 | ||
|
|
527cc9841c | ||
|
|
6901ba7dc8 | ||
|
|
ab13064406 | ||
|
|
192295a094 | ||
|
|
7dfded5c26 | ||
|
|
28b3b4c6e6 | ||
|
|
acab12fbe3 | ||
|
|
1ba5b1b530 | ||
|
|
d786112124 | ||
|
|
bdecf23415 | ||
|
|
03ef63ba69 | ||
|
|
cb9c5dc571 | ||
|
|
a6f8bbcad9 | ||
|
|
9f10f9beeb | ||
|
|
a46229b43f | ||
|
|
c7a48d3d00 | ||
|
|
9188480827 | ||
|
|
2b912846b9 | ||
|
|
854067e8e4 | ||
|
|
eb2f937b93 | ||
|
|
64c4f5732d | ||
|
|
f3052a9eee | ||
|
|
e1e9ead6fb | ||
|
|
5ac85984ec | ||
|
|
e11b297730 | ||
|
|
48555cf0fc | ||
|
|
ae02fc5348 | ||
|
|
93e147dd32 | ||
|
|
3257904c56 | ||
|
|
2a7619d762 | ||
|
|
70d03c4f59 | ||
|
|
5971d37400 | ||
|
|
d813a428a7 | ||
|
|
3b2972d8d9 | ||
|
|
2165d91196 | ||
|
|
fc99c92835 | ||
|
|
1dde74f229 | ||
|
|
665b5ab5a7 | ||
|
|
13232559fc | ||
|
|
1b2f8b6e2a | ||
|
|
ccd98b43ed | ||
|
|
d32e8acf08 | ||
|
|
d8c4d0e819 | ||
|
|
b215f70a0e | ||
|
|
7ed20a2158 | ||
|
|
6c62150674 | ||
|
|
aa23a57918 | ||
|
|
8e2c277353 | ||
|
|
f18ef82a9f | ||
|
|
cc015c48db | ||
|
|
9a4051050c | ||
|
|
4c4ea428cc | ||
|
|
28e94dc70d | ||
|
|
f812743544 | ||
|
|
87f3435f78 | ||
|
|
86787f93d6 | ||
|
|
05d909c549 | ||
|
|
d44c7dcf00 | ||
|
|
5decfb7002 | ||
|
|
50008364a6 | ||
|
|
6a1129837a | ||
|
|
20ca3d49e7 | ||
|
|
f156d5495d | ||
|
|
96d7e0ece7 | ||
|
|
974e22704d | ||
|
|
835475a2d6 | ||
|
|
a26f2b5e62 | ||
|
|
67e08eb185 | ||
|
|
0b4cb28f39 | ||
|
|
9c5ed502ee | ||
|
|
6111f7408b | ||
|
|
b6577e040e | ||
|
|
bb51f21728 | ||
|
|
0e0e569cbf | ||
|
|
71c8e9f1c3 | ||
|
|
e759b095d4 | ||
|
|
afa0598f06 |
68
CHANGES
68
CHANGES
@@ -4,74 +4,6 @@
|
|||||||
|
|
||||||
Changes between 0.9.5a and 0.9.6 [xx XXX 2000]
|
Changes between 0.9.5a and 0.9.6 [xx XXX 2000]
|
||||||
|
|
||||||
*) On VMS, stdout may very well lead to a file that is written to
|
|
||||||
in a record-oriented fashion. That means that every write() will
|
|
||||||
write a separate record, which will be read separately by the
|
|
||||||
programs trying to read from it. This can be very confusing.
|
|
||||||
|
|
||||||
The solution is to put a BIO filter in the way that will buffer
|
|
||||||
text until a linefeed is reached, and then write everything a
|
|
||||||
line at a time, so every record written will be an actual line,
|
|
||||||
not chunks of lines and not (usually doesn't happen, but I've
|
|
||||||
seen it once) several lines in one record. BIO_f_linebuffer() is
|
|
||||||
the answer.
|
|
||||||
|
|
||||||
Currently, it's a VMS-only method, because that's where it has
|
|
||||||
been tested well enough.
|
|
||||||
[Richard Levitte]
|
|
||||||
|
|
||||||
*) Remove 'optimized' squaring variant in BN_mod_mul_montgomery,
|
|
||||||
it can return incorrect results.
|
|
||||||
(Note: The buggy variant was not enabled in OpenSSL 0.9.5a,
|
|
||||||
but it was in 0.9.6-beta[12].)
|
|
||||||
[Bodo Moeller]
|
|
||||||
|
|
||||||
*) Disable the check for content being present when verifying detached
|
|
||||||
signatures in pk7_smime.c. Some versions of Netscape (wrongly)
|
|
||||||
include zero length content when signing messages.
|
|
||||||
[Steve Henson]
|
|
||||||
|
|
||||||
*) New BIO_shutdown_wr macro, which invokes the BIO_C_SHUTDOWN_WR
|
|
||||||
BIO_ctrl (for BIO pairs).
|
|
||||||
|
|
||||||
*) Add DSO method for VMS.
|
|
||||||
[Richard Levitte]
|
|
||||||
|
|
||||||
*) Bug fix: Montgomery multiplication could produce results with the
|
|
||||||
wrong sign.
|
|
||||||
[Ulf M<>ller]
|
|
||||||
|
|
||||||
*) Add RPM specification openssl.spec and modify it to build three
|
|
||||||
packages. The default package contains applications, application
|
|
||||||
documentation and run-time libraries. The devel package contains
|
|
||||||
include files, static libraries and function documentation. The
|
|
||||||
doc package contains the contents of the doc directory. The original
|
|
||||||
openssl.spec was provided by Damien Miller <djm@mindrot.org>.
|
|
||||||
[Richard Levitte]
|
|
||||||
|
|
||||||
*) Add a large number of documentation files for many SSL routines.
|
|
||||||
[Lutz Jaenicke <Lutz.Jaenicke@aet.TU-Cottbus.DE>]
|
|
||||||
|
|
||||||
*) Add a configuration entry for Sony News 4.
|
|
||||||
[NAKAJI Hiroyuki <nakaji@tutrp.tut.ac.jp>]
|
|
||||||
|
|
||||||
*) Don't set the two most significant bits to one when generating a
|
|
||||||
random number < q in the DSA library.
|
|
||||||
[Ulf M<>ller]
|
|
||||||
|
|
||||||
*) New SSL API mode 'SSL_MODE_AUTO_RETRY'. This disables the default
|
|
||||||
behaviour that SSL_read may result in SSL_ERROR_WANT_READ (even if
|
|
||||||
the underlying transport is blocking) if a handshake took place.
|
|
||||||
(The default behaviour is needed by applications such as s_client
|
|
||||||
and s_server that use select() to determine when to use SSL_read;
|
|
||||||
but for applications that know in advance when to expect data, it
|
|
||||||
just makes things more complicated.)
|
|
||||||
[Bodo Moeller]
|
|
||||||
|
|
||||||
*) Add RAND_egd_bytes(), which gives control over the number of bytes read
|
|
||||||
from EGD.
|
|
||||||
[Ben Laurie]
|
|
||||||
|
|
||||||
*) Add a few more EBCDIC conditionals that make `req' and `x509'
|
*) Add a few more EBCDIC conditionals that make `req' and `x509'
|
||||||
work better on such systems.
|
work better on such systems.
|
||||||
[Martin Kraemer <Martin.Kraemer@MchP.Siemens.De>]
|
[Martin Kraemer <Martin.Kraemer@MchP.Siemens.De>]
|
||||||
|
|||||||
52
Configure
52
Configure
@@ -10,7 +10,7 @@ use strict;
|
|||||||
|
|
||||||
# see INSTALL for instructions.
|
# see INSTALL for instructions.
|
||||||
|
|
||||||
my $usage="Usage: Configure [no-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [rsaref] [no-threads] [no-asm] [no-dso] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] os/compiler[:flags]\n";
|
my $usage="Usage: Configure [no-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [rsaref] [no-threads] [no-asm] [no-dso] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] os/compiler[:flags]\n";
|
||||||
|
|
||||||
# Options:
|
# Options:
|
||||||
#
|
#
|
||||||
@@ -23,6 +23,11 @@ my $usage="Usage: Configure [no-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-
|
|||||||
# default). This needn't be set in advance, you can
|
# default). This needn't be set in advance, you can
|
||||||
# just as well use "make INSTALL_PREFIX=/whatever install".
|
# just as well use "make INSTALL_PREFIX=/whatever install".
|
||||||
#
|
#
|
||||||
|
# no-hw-xxx do not compile support for specific crypto hardware.
|
||||||
|
# Generic OpenSSL-style methods relating to this support
|
||||||
|
# are always compiled but return NULL if the hardware
|
||||||
|
# support isn't compiled.
|
||||||
|
# no-hw do not compile support for any crypto hardware.
|
||||||
# rsaref use RSAref
|
# rsaref use RSAref
|
||||||
# [no-]threads [don't] try to create a library that is suitable for
|
# [no-]threads [don't] try to create a library that is suitable for
|
||||||
# multithreaded applications (default is "threads" if we
|
# multithreaded applications (default is "threads" if we
|
||||||
@@ -212,20 +217,11 @@ my %table=(
|
|||||||
# crypto/sha/sha_lcl.h.
|
# crypto/sha/sha_lcl.h.
|
||||||
# <appro@fy.chalmers.se>
|
# <appro@fy.chalmers.se>
|
||||||
#
|
#
|
||||||
#!#"hpux-parisc-cc","cc:-Ae +O3 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY:::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
|
"hpux-parisc-cc","cc:-Ae +O3 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY:::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
|
||||||
# Since there is mention of this in shlib/hpux10-cc.sh
|
# Since there is mention of this in shlib/hpux10-cc.sh
|
||||||
"hpux-parisc-cc-o4","cc:-Ae +O4 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY:::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
|
"hpux-parisc-cc-o4","cc:-Ae +O4 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY:::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
|
||||||
"hpux-parisc-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W:::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
|
"hpux-parisc-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W:::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
|
||||||
"hpux64-parisc-cc","cc:-Ae +DD64 +O3 +ESlit -z -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT:-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dlfcn",
|
"hpux64-parisc-cc","cc:-Ae +DD64 +O3 +ESlit -z -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT:-ldld:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dl",
|
||||||
|
|
||||||
# More attempts at unified 10.X and 11.X targets for HP C compiler.
|
|
||||||
#
|
|
||||||
# Chris Ruemmler <ruemmler@cup.hp.com>
|
|
||||||
# Kevin Steves <ks@hp.se>
|
|
||||||
"hpux-parisc-cc","cc:+O3 +Optrs_strongly_typed +Olibcalls -Ae +ESlit -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::-D_REENTRANT:-ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dl",
|
|
||||||
"hpux-parisc2-cc","cc:+DA2.0 +DS2.0 +O3 +Optrs_strongly_typed +Olibcalls -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT:-ldld:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/pa-risc2.o:::::::::dl",
|
|
||||||
"hpux64-parisc2-cc","cc:+DD64 +O3 +Optrs_strongly_typed +Olibcalls -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT:-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/pa-risc2W.o:::::::::dlfcn",
|
|
||||||
"hpux-parisc1_1-cc","cc:+DA1.1 +DS1.1 +O3 +Optrs_strongly_typed +Olibcalls -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT:-ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dl",
|
|
||||||
|
|
||||||
# HPUX 9.X config.
|
# HPUX 9.X config.
|
||||||
# Don't use the bundled cc. It is broken. Use HP ANSI C if possible, or
|
# Don't use the bundled cc. It is broken. Use HP ANSI C if possible, or
|
||||||
@@ -256,9 +252,6 @@ my %table=(
|
|||||||
#"hpux11-64bit-cc","cc:+DA2.0W -g -D_HPUX_SOURCE -Aa -Ae +ESlit::-D_REENTRANT::SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT :::",
|
#"hpux11-64bit-cc","cc:+DA2.0W -g -D_HPUX_SOURCE -Aa -Ae +ESlit::-D_REENTRANT::SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT :::",
|
||||||
# Use unified settings above instead.
|
# Use unified settings above instead.
|
||||||
|
|
||||||
#### HP MPE/iX http://jazz.external.hp.com/src/openssl/
|
|
||||||
"MPE/iX-gcc", "gcc:-D_ENDIAN -DBN_DIV2W -O3 -DMPE -D_POSIX_SOURCE -D_SOCKET_SOURCE -I/SYSLOG/PUB::(unknown):-L/SYSLOG/PUB -lsyslog -lsocket -lcurses:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:::",
|
|
||||||
|
|
||||||
# Dec Alpha, OSF/1 - the alpha164-cc is the flags for a 21164A with
|
# Dec Alpha, OSF/1 - the alpha164-cc is the flags for a 21164A with
|
||||||
# the new compiler
|
# the new compiler
|
||||||
# For gcc, the following gave a %50 speedup on a 164 over the 'DES_INT' version
|
# For gcc, the following gave a %50 speedup on a 164 over the 'DES_INT' version
|
||||||
@@ -291,8 +284,8 @@ my %table=(
|
|||||||
# The intel boxes :-), It would be worth seeing if bsdi-gcc can use the
|
# The intel boxes :-), It would be worth seeing if bsdi-gcc can use the
|
||||||
# bn86-elf.o file file since it is hand tweaked assembler.
|
# bn86-elf.o file file since it is hand tweaked assembler.
|
||||||
"linux-elf", "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall::-D_REENTRANT:-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC",
|
"linux-elf", "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall::-D_REENTRANT:-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC",
|
||||||
"debug-linux-elf","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -m486 -Wall::-D_REENTRANT:-lefence -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
|
"debug-linux-elf","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -m486 -Wall::-D_REENTRANT:-lefence:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
|
||||||
"debug-linux-elf-noefence","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -m486 -Wall::-D_REENTRANT:-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
|
"debug-linux-elf-noefence","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -m486 -Wall::-D_REENTRANT::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
|
||||||
"linux-aout", "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall::(unknown)::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}",
|
"linux-aout", "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall::(unknown)::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}",
|
||||||
"linux-mips", "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::(unknown)::BN_LLONG:::",
|
"linux-mips", "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::(unknown)::BN_LLONG:::",
|
||||||
"linux-ppc", "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::BN_LLONG::",
|
"linux-ppc", "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::BN_LLONG::",
|
||||||
@@ -371,24 +364,24 @@ my %table=(
|
|||||||
|
|
||||||
# Windows NT, Microsoft Visual C++ 4.0
|
# Windows NT, Microsoft Visual C++ 4.0
|
||||||
|
|
||||||
"VC-NT","cl:::::BN_LLONG RC4_INDEX ${x86_gcc_opts}::::::::::win32",
|
"VC-NT","cl:::::BN_LLONG RC4_INDEX ${x86_gcc_opts}:::",
|
||||||
"VC-WIN32","cl:::::BN_LLONG RC4_INDEX ${x86_gcc_opts}::::::::::win32",
|
"VC-WIN32","cl:::::BN_LLONG RC4_INDEX ${x86_gcc_opts}:::",
|
||||||
"VC-WIN16","cl:::(unknown)::MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX THIRTY_TWO_BIT:::",
|
"VC-WIN16","cl:::(unknown)::MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX THIRTY_TWO_BIT:::",
|
||||||
"VC-W31-16","cl:::(unknown)::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT:::",
|
"VC-W31-16","cl:::(unknown)::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT:::",
|
||||||
"VC-W31-32","cl:::::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX THIRTY_TWO_BIT:::",
|
"VC-W31-32","cl:::::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX THIRTY_TWO_BIT:::",
|
||||||
"VC-MSDOS","cl:::(unknown)::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT:::",
|
"VC-MSDOS","cl:::(unknown)::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT:::",
|
||||||
|
|
||||||
# Borland C++ 4.5
|
# Borland C++ 4.5
|
||||||
"BC-32","bcc32:::::BN_LLONG DES_PTR RC4_INDEX::::::::::win32",
|
"BC-32","bcc32:::::BN_LLONG DES_PTR RC4_INDEX:::",
|
||||||
"BC-16","bcc:::(unknown)::BN_LLONG DES_PTR RC4_INDEX SIXTEEN_BIT:::",
|
"BC-16","bcc:::(unknown)::BN_LLONG DES_PTR RC4_INDEX SIXTEEN_BIT:::",
|
||||||
|
|
||||||
# Mingw32
|
# Mingw32
|
||||||
# (Note: the real CFLAGS for Windows builds are defined by util/mk1mf.pl
|
# (Note: the real CFLAGS for Windows builds are defined by util/mk1mf.pl
|
||||||
# and its library files in util/pl/*)
|
# and its library files in util/pl/*)
|
||||||
"Mingw32", "gcc:-DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::win32",
|
"Mingw32", "gcc:-DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:",
|
||||||
|
|
||||||
# CygWin32
|
# CygWin32
|
||||||
"CygWin32", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::win32",
|
"CygWin32", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:",
|
||||||
|
|
||||||
# Ultrix from Bernhard Simon <simon@zid.tuwien.ac.at>
|
# Ultrix from Bernhard Simon <simon@zid.tuwien.ac.at>
|
||||||
"ultrix-cc","cc:-std1 -O -Olimit 1000 -DL_ENDIAN::(unknown)::::::",
|
"ultrix-cc","cc:-std1 -O -Olimit 1000 -DL_ENDIAN::(unknown)::::::",
|
||||||
@@ -405,9 +398,6 @@ my %table=(
|
|||||||
##### MacOS X (a.k.a. Rhapsody) setup
|
##### MacOS X (a.k.a. Rhapsody) setup
|
||||||
"rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown)::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
|
"rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown)::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
|
||||||
|
|
||||||
##### Sony NEWS-OS 4.x
|
|
||||||
"newsos4-gcc","gcc:-O -DB_ENDIAN -DNEWS4::(unknown):-lmld -liberty:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::",
|
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
my @WinTargets=qw(VC-NT VC-WIN32 VC-WIN16 VC-W31-16 VC-W31-32 VC-MSDOS BC-32
|
my @WinTargets=qw(VC-NT VC-WIN32 VC-WIN16 VC-W31-16 VC-W31-32 VC-MSDOS BC-32
|
||||||
@@ -490,6 +480,18 @@ PROCESS_ARGS:
|
|||||||
$flags .= "-DNO_ASM ";
|
$flags .= "-DNO_ASM ";
|
||||||
$openssl_other_defines .= "#define NO_ASM\n";
|
$openssl_other_defines .= "#define NO_ASM\n";
|
||||||
}
|
}
|
||||||
|
elsif (/^no-hw-(.+)$/)
|
||||||
|
{
|
||||||
|
my $hw=$1;
|
||||||
|
$hw =~ tr/[a-z]/[A-Z]/;
|
||||||
|
$flags .= "-DNO_HW_$hw ";
|
||||||
|
$openssl_other_defines .= "#define NO_HW_$hw\n";
|
||||||
|
}
|
||||||
|
elsif (/^no-hw$/)
|
||||||
|
{
|
||||||
|
$flags .= "-DNO_HW ";
|
||||||
|
$openssl_other_defines .= "#define NO_HW\n";
|
||||||
|
}
|
||||||
elsif (/^no-dso$/)
|
elsif (/^no-dso$/)
|
||||||
{ $no_dso=1; }
|
{ $no_dso=1; }
|
||||||
elsif (/^no-threads$/)
|
elsif (/^no-threads$/)
|
||||||
|
|||||||
4
FAQ
4
FAQ
@@ -135,7 +135,7 @@ installing the SUNski package from Sun patch 105710-01 (Sparc) which
|
|||||||
adds a /dev/random device and make sure it gets used, usually through
|
adds a /dev/random device and make sure it gets used, usually through
|
||||||
$RANDFILE. There are probably similar patches for the other Solaris
|
$RANDFILE. There are probably similar patches for the other Solaris
|
||||||
versions. However, be warned that /dev/random is usually a blocking
|
versions. However, be warned that /dev/random is usually a blocking
|
||||||
device, which may have some effects on OpenSSL.
|
device, which may have som effects on OpenSSL.
|
||||||
|
|
||||||
|
|
||||||
* Why does the linker complain about undefined symbols?
|
* Why does the linker complain about undefined symbols?
|
||||||
@@ -194,7 +194,7 @@ unsigned char *buf, *p;
|
|||||||
int len;
|
int len;
|
||||||
|
|
||||||
len = i2d_PKCS7(p7, NULL);
|
len = i2d_PKCS7(p7, NULL);
|
||||||
buf = OPENSSL_malloc(len); /* or Malloc, error checking omitted */
|
buf = OPENSSL_Malloc(len); /* or Malloc, error checking omitted */
|
||||||
p = buf;
|
p = buf;
|
||||||
i2d_PKCS7(p7, &p);
|
i2d_PKCS7(p7, &p);
|
||||||
|
|
||||||
|
|||||||
19
INSTALL.VMS
19
INSTALL.VMS
@@ -82,17 +82,12 @@ directory. The syntax is trhe following:
|
|||||||
RSAREF compile using the RSAREF Library
|
RSAREF compile using the RSAREF Library
|
||||||
NORSAREF compile without using RSAREF
|
NORSAREF compile without using RSAREF
|
||||||
|
|
||||||
Note 0: The RASREF library IS NO LONGER NEEDED. The RSA patent
|
Note 1: The RSAREF libraries are NOT INCLUDED and you have to
|
||||||
expires September 20, 2000, and RSA Security chose to make
|
download it from "ftp://ftp.rsa.com/rsaref". You have to
|
||||||
the algorithm public domain two weeks before that.
|
get the ".tar-Z" file as the ".zip" file doesn't have the
|
||||||
|
directory structure stored. You have to extract the file
|
||||||
Note 1: If you still want to use RSAREF, the library is NOT INCLUDED
|
into the [.RSAREF] directory as that is where the scripts
|
||||||
and you have to download it. RSA Security doesn't carry it
|
will look for the files.
|
||||||
any more, but there are a number of places where you can find
|
|
||||||
it. You have to get the ".tar-Z" file as the ".zip" file
|
|
||||||
doesn't have the directory structure stored. You have to
|
|
||||||
extract the file into the [.RSAREF] directory as that is where
|
|
||||||
the scripts will look for the files.
|
|
||||||
|
|
||||||
Note 2: I have never done this, so I've no idea if it works or not.
|
Note 2: I have never done this, so I've no idea if it works or not.
|
||||||
|
|
||||||
@@ -134,7 +129,7 @@ Currently, the logical names supported are:
|
|||||||
used. This is good to try if something doesn't work.
|
used. This is good to try if something doesn't work.
|
||||||
OPENSSL_NO_'alg' with value YES, the corresponding crypto algorithm
|
OPENSSL_NO_'alg' with value YES, the corresponding crypto algorithm
|
||||||
will not be implemented. Supported algorithms to
|
will not be implemented. Supported algorithms to
|
||||||
do this with are: RSA, DSA, DH, MD2, MD4, MD5, RIPEMD,
|
do this with are: RSA, DSA, DH, MD2, MD5, RIPEMD,
|
||||||
SHA, DES, MDC2, CR2, RC4, RC5, IDEA, BF, CAST, HMAC,
|
SHA, DES, MDC2, CR2, RC4, RC5, IDEA, BF, CAST, HMAC,
|
||||||
SSL2. So, for example, having the logical name
|
SSL2. So, for example, having the logical name
|
||||||
OPENSSL_NO_RSA with the value YES means that the
|
OPENSSL_NO_RSA with the value YES means that the
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ AR=ar r
|
|||||||
RANLIB= ranlib
|
RANLIB= ranlib
|
||||||
PERL= perl
|
PERL= perl
|
||||||
TAR= tar
|
TAR= tar
|
||||||
TARFLAGS= --no-recursion
|
TARFLAGS= --norecurse
|
||||||
|
|
||||||
# Set BN_ASM to bn_asm.o if you want to use the C version
|
# Set BN_ASM to bn_asm.o if you want to use the C version
|
||||||
BN_ASM= bn_asm.o
|
BN_ASM= bn_asm.o
|
||||||
@@ -163,7 +163,7 @@ SHLIBDIRS= crypto ssl
|
|||||||
SDIRS= \
|
SDIRS= \
|
||||||
md2 md4 md5 sha mdc2 hmac ripemd \
|
md2 md4 md5 sha mdc2 hmac ripemd \
|
||||||
des rc2 rc4 rc5 idea bf cast \
|
des rc2 rc4 rc5 idea bf cast \
|
||||||
bn rsa dsa dh dso \
|
bn rsa dsa dh dso engine \
|
||||||
buffer bio stack lhash rand err objects \
|
buffer bio stack lhash rand err objects \
|
||||||
evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp
|
evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp
|
||||||
|
|
||||||
|
|||||||
14
NEWS
14
NEWS
@@ -5,20 +5,6 @@
|
|||||||
This file gives a brief overview of the major changes between each OpenSSL
|
This file gives a brief overview of the major changes between each OpenSSL
|
||||||
release. For more details please read the CHANGES file.
|
release. For more details please read the CHANGES file.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6:
|
|
||||||
|
|
||||||
o Some documentation for BIO and SSL libraries.
|
|
||||||
o Enhanced chain verification using key identifiers.
|
|
||||||
o New sign and verify options to 'dgst' application.
|
|
||||||
o Support for DER and PEM encoded messages in 'smime' application.
|
|
||||||
o New 'rsautl' application, low level RSA utility.
|
|
||||||
o MD4 now included.
|
|
||||||
o Bugfix for SSL rollback padding check.
|
|
||||||
o Support for external crypto device[1].
|
|
||||||
|
|
||||||
[1] The support for external crypto devices is currently a separate
|
|
||||||
distribution. See the file README.ENGINE.
|
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a:
|
Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a:
|
||||||
|
|
||||||
o Bug fixes for Win32, SuSE Linux, NeXTSTEP and FreeBSD 2.2.8
|
o Bug fixes for Win32, SuSE Linux, NeXTSTEP and FreeBSD 2.2.8
|
||||||
|
|||||||
5
README
5
README
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
OpenSSL 0.9.6-beta3 (Final beta) 21 Sep 2000
|
OpenSSL 0.9.6-beta1 [engine] 11 Sep 2000
|
||||||
|
|
||||||
Copyright (c) 1998-2000 The OpenSSL Project
|
Copyright (c) 1998-2000 The OpenSSL Project
|
||||||
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
|
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
|
||||||
@@ -163,9 +163,6 @@
|
|||||||
the string "[PATCH]" in the subject. Please be sure to include a
|
the string "[PATCH]" in the subject. Please be sure to include a
|
||||||
textual explanation of what your patch does.
|
textual explanation of what your patch does.
|
||||||
|
|
||||||
Note: For legal reasons, contributions from the US can be accepted only
|
|
||||||
if a copy of the patch is sent to crypt@bxa.doc.gov
|
|
||||||
|
|
||||||
The preferred format for changes is "diff -u" output. You might
|
The preferred format for changes is "diff -u" output. You might
|
||||||
generate it like this:
|
generate it like this:
|
||||||
|
|
||||||
|
|||||||
@@ -1,54 +0,0 @@
|
|||||||
|
|
||||||
ENGINE
|
|
||||||
======
|
|
||||||
|
|
||||||
With OpenSSL 0.9.6, a new component has been added to support external
|
|
||||||
crypto devices, for example accelerator cards. The component is called
|
|
||||||
ENGINE, and has still a pretty experimental status and almost no
|
|
||||||
documentation. It's designed to be faily easily extensible by the
|
|
||||||
calling programs.
|
|
||||||
|
|
||||||
There's currently built-in support for the following crypto devices:
|
|
||||||
|
|
||||||
o CryptoSwift
|
|
||||||
o Compaq Atalla
|
|
||||||
o nCipher CHIL
|
|
||||||
|
|
||||||
A number of things are still needed and are being worked on:
|
|
||||||
|
|
||||||
o An openssl utility command to handle or at least check available
|
|
||||||
engines.
|
|
||||||
o A better way of handling the methods that are handled by the
|
|
||||||
engines.
|
|
||||||
o Documentation!
|
|
||||||
|
|
||||||
What already exists is fairly stable as far as it has been tested, but
|
|
||||||
the test base has been a bit small most of the time.
|
|
||||||
|
|
||||||
Because of this experimental status and what's lacking, the ENGINE
|
|
||||||
component is not yet part of the default OpenSSL distribution. However,
|
|
||||||
we have made a separate kit for those who want to try this out, to be
|
|
||||||
found in the same places as the default OpenSSL distribution, but with
|
|
||||||
"-engine-" being part of the kit file name. For example, version 0.9.6
|
|
||||||
is distributed in the following two files:
|
|
||||||
|
|
||||||
openssl-0.9.6.tar.gz
|
|
||||||
openssl-engine-0.9.6.tar.gz
|
|
||||||
|
|
||||||
NOTES
|
|
||||||
=====
|
|
||||||
|
|
||||||
openssl-engine-0.9.6.tar.gz does not depend on openssl-0.9.6.tar, you do
|
|
||||||
not need to download both.
|
|
||||||
|
|
||||||
openssl-engine-0.9.6.tar.gz is usable even if you don't have an external
|
|
||||||
crypto device. The internal OpenSSL functions are contained in the
|
|
||||||
engine "openssl", and will be used by default.
|
|
||||||
|
|
||||||
No external crypto device is chosen unless you say so. You have actively
|
|
||||||
tell the openssl utility commands to use it through a new command line
|
|
||||||
switch called "-engine". And if you want to use the ENGINE library to
|
|
||||||
do something similar, you must also explicitely choose an external crypto
|
|
||||||
device, or the built-in crypto routines will be used, just as in the
|
|
||||||
default OpenSSL distribution.
|
|
||||||
|
|
||||||
80
STATUS
80
STATUS
@@ -1,89 +1,11 @@
|
|||||||
|
|
||||||
OpenSSL STATUS Last modified at
|
OpenSSL STATUS Last modified at
|
||||||
______________ $Date: 2000/09/20 15:22:02 $
|
______________ $Date: 2000/09/11 13:28:30 $
|
||||||
|
|
||||||
DEVELOPMENT STATE
|
DEVELOPMENT STATE
|
||||||
|
|
||||||
o OpenSSL 0.9.6: Under development (in release cycle)...
|
o OpenSSL 0.9.6: Under development (in release cycle)...
|
||||||
Proposed release date September 24, 2000
|
Proposed release date September 24, 2000
|
||||||
0.9.6-beta1 is available:
|
|
||||||
OpenBSD-x86 2.7 - failed
|
|
||||||
ftime not supported [FIXED]
|
|
||||||
hpux-parisc-cc 10.20 - passed
|
|
||||||
hpux-parisc-gcc 10.20 - passed
|
|
||||||
hpux-parisc-gcc 11.00 - passed
|
|
||||||
hpux-gcc - passed
|
|
||||||
hpux-brokengcc - failed
|
|
||||||
BN_sqr fails in test
|
|
||||||
linux-elf - passed
|
|
||||||
linux-sparcv7 - passed
|
|
||||||
linux-ppc - passed
|
|
||||||
Solaris [engine] - failed
|
|
||||||
speed cswift gives odd errors [FIXED]
|
|
||||||
solaris-sparcv8-gcc - passed
|
|
||||||
solaris-sparcv9-gcc - passed
|
|
||||||
solaris-sparcv9-cc - passed
|
|
||||||
solaris64-sparcv9-cc - passed
|
|
||||||
sco5-gcc - passed
|
|
||||||
sco5-cc - passed
|
|
||||||
FreeBSD - passed
|
|
||||||
Win32 VC++ - failed
|
|
||||||
PCURSORINFO not defined unless Win2000 [FIXED]
|
|
||||||
RAND_poll() problem on Win2000 [FIXED]
|
|
||||||
DSO method always DSO_METHOD_null [FIXED]
|
|
||||||
CygWin32 - test failed
|
|
||||||
MingW32 - failed
|
|
||||||
thelp32.h
|
|
||||||
aix-gcc (AIX 4.3.2) - passed
|
|
||||||
VMS/Alpha - failed
|
|
||||||
Some things were missing [FIXED]
|
|
||||||
0.9.6-beta2 is available:
|
|
||||||
linux/openbsd (all platforms?) - mod_exp bug
|
|
||||||
sunos-gcc - passed
|
|
||||||
aix-gcc - passed
|
|
||||||
Win32 w/ VC6 or Mingw32 - failed
|
|
||||||
RAND_poll(), a few uninitialised vars [FIXED]
|
|
||||||
RAND_poll() should used LoadLibrary instead of
|
|
||||||
GetModuleHandle [FIXED]
|
|
||||||
Major compilation problem with VC6 on NT.
|
|
||||||
[FIXED]
|
|
||||||
Mingw32 says "175: parse error before `DWORD'"
|
|
||||||
[FIXED?]
|
|
||||||
Win32 w/ CygWin - success?
|
|
||||||
VMS/Alpha 7.1 (CPQ C 5.6-003, TCP/IP 5.0) - success
|
|
||||||
Just a small warning in dso_vms.c [FIXED]
|
|
||||||
VMS/Alpha 7.2-1 (CPQ 5.6-003, TCP/IP 5.0A) - success
|
|
||||||
VMS/VAX 7.2-1 (CPQ 5.2-003, TCP/IP 5.0) - success
|
|
||||||
hpux-parisc-cc (HP-UX B.11.00) - success
|
|
||||||
hpux-parisc2-cc (11.00) - success
|
|
||||||
hpux64-parisc2-cc (11.00) - success
|
|
||||||
hpux-parisc1_1-cc (11.00) - success
|
|
||||||
hpux-parisc-cc (10.20 w/ -ldld) - success
|
|
||||||
hpux-parisc-gcc (10.20 w/ -ldld) - success
|
|
||||||
hpux-parisc-cc [engine] (10.20 w/ -ldld)- success
|
|
||||||
hpux-parisc-gcc [endine] (10.20 w/ -ldld)- success
|
|
||||||
All hpux 10.20 targets succeeded provided -ldl
|
|
||||||
has been changed to -ldld.
|
|
||||||
solaris-sparcv9-gcc (2.6/ultra5) - success
|
|
||||||
[ solaris-sparcv9-cc (SunOS 5.7 SC3.0) - failed ]
|
|
||||||
[ Complaints about a number of -x parameters to ]
|
|
||||||
[ the compiler and failed to compile an ]
|
|
||||||
[ assembler file. Maybe a too old ]
|
|
||||||
[ compiler? (Yes, apparently:) ]
|
|
||||||
solaris-sparcv9-cc (SunOS 5.6 SC4.2) - success
|
|
||||||
FreeBSD (2.2.5-RELEASE) - success
|
|
||||||
alpha-cc [engine] (OSF1 5.0A) - success
|
|
||||||
irix-mips3-cc [engine] (Irix 6.2) - success
|
|
||||||
One has to do the same as for OpenBSD in
|
|
||||||
speed.c [FIXED]
|
|
||||||
aix-cc (3.2.5, cc 1.3.0.44) - success
|
|
||||||
aix-gcc (3.2.5, gcc 2.8.1) - success
|
|
||||||
Both first failed to compiled due to ftime().
|
|
||||||
[FIXED]
|
|
||||||
alpha-cc (V4.0E) - success
|
|
||||||
alpha-gcc (V4.0E, gcc 2.8.1) - success
|
|
||||||
ultrix-cc (V4.5) - success
|
|
||||||
ultrix-gcc (V4.5, gcc 2.8.1) - success
|
|
||||||
o OpenSSL 0.9.5a: Released on April 1st, 2000
|
o OpenSSL 0.9.5a: Released on April 1st, 2000
|
||||||
o OpenSSL 0.9.5: Released on February 28th, 2000
|
o OpenSSL 0.9.5: Released on February 28th, 2000
|
||||||
o OpenSSL 0.9.4: Released on August 09th, 1999
|
o OpenSSL 0.9.4: Released on August 09th, 1999
|
||||||
|
|||||||
124
TABLE
124
TABLE
@@ -36,7 +36,7 @@ $cast_obj =
|
|||||||
$rc4_obj =
|
$rc4_obj =
|
||||||
$rmd160_obj =
|
$rmd160_obj =
|
||||||
$rc5_obj =
|
$rc5_obj =
|
||||||
$dso_scheme = win32
|
$dso_scheme =
|
||||||
$shared_target=
|
$shared_target=
|
||||||
$shared_cflag =
|
$shared_cflag =
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ $cast_obj =
|
|||||||
$rc4_obj =
|
$rc4_obj =
|
||||||
$rmd160_obj =
|
$rmd160_obj =
|
||||||
$rc5_obj =
|
$rc5_obj =
|
||||||
$dso_scheme = win32
|
$dso_scheme =
|
||||||
$shared_target=
|
$shared_target=
|
||||||
$shared_cflag =
|
$shared_cflag =
|
||||||
|
|
||||||
@@ -140,26 +140,6 @@ $dso_scheme =
|
|||||||
$shared_target=
|
$shared_target=
|
||||||
$shared_cflag =
|
$shared_cflag =
|
||||||
|
|
||||||
*** MPE/iX-gcc
|
|
||||||
$cc = gcc
|
|
||||||
$cflags = -D_ENDIAN -DBN_DIV2W -O3 -DMPE -D_POSIX_SOURCE -D_SOCKET_SOURCE -I/SYSLOG/PUB
|
|
||||||
$unistd =
|
|
||||||
$thread_cflag = (unknown)
|
|
||||||
$lflags = -L/SYSLOG/PUB -lsyslog -lsocket -lcurses
|
|
||||||
$bn_ops = BN_LLONG DES_PTR DES_UNROLL DES_RISC1
|
|
||||||
$bn_obj =
|
|
||||||
$des_obj =
|
|
||||||
$bf_obj =
|
|
||||||
$md5_obj =
|
|
||||||
$sha1_obj =
|
|
||||||
$cast_obj =
|
|
||||||
$rc4_obj =
|
|
||||||
$rmd160_obj =
|
|
||||||
$rc5_obj =
|
|
||||||
$dso_scheme =
|
|
||||||
$shared_target=
|
|
||||||
$shared_cflag =
|
|
||||||
|
|
||||||
*** Mingw32
|
*** Mingw32
|
||||||
$cc = gcc
|
$cc = gcc
|
||||||
$cflags = -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall
|
$cflags = -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall
|
||||||
@@ -176,7 +156,7 @@ $cast_obj =
|
|||||||
$rc4_obj =
|
$rc4_obj =
|
||||||
$rmd160_obj =
|
$rmd160_obj =
|
||||||
$rc5_obj =
|
$rc5_obj =
|
||||||
$dso_scheme = win32
|
$dso_scheme =
|
||||||
$shared_target=
|
$shared_target=
|
||||||
$shared_cflag =
|
$shared_cflag =
|
||||||
|
|
||||||
@@ -416,7 +396,7 @@ $cast_obj =
|
|||||||
$rc4_obj =
|
$rc4_obj =
|
||||||
$rmd160_obj =
|
$rmd160_obj =
|
||||||
$rc5_obj =
|
$rc5_obj =
|
||||||
$dso_scheme = win32
|
$dso_scheme =
|
||||||
$shared_target=
|
$shared_target=
|
||||||
$shared_cflag =
|
$shared_cflag =
|
||||||
|
|
||||||
@@ -496,7 +476,7 @@ $cast_obj =
|
|||||||
$rc4_obj =
|
$rc4_obj =
|
||||||
$rmd160_obj =
|
$rmd160_obj =
|
||||||
$rc5_obj =
|
$rc5_obj =
|
||||||
$dso_scheme = win32
|
$dso_scheme =
|
||||||
$shared_target=
|
$shared_target=
|
||||||
$shared_cflag =
|
$shared_cflag =
|
||||||
|
|
||||||
@@ -825,7 +805,7 @@ $cc = gcc
|
|||||||
$cflags = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -m486 -Wall
|
$cflags = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -m486 -Wall
|
||||||
$unistd =
|
$unistd =
|
||||||
$thread_cflag = -D_REENTRANT
|
$thread_cflag = -D_REENTRANT
|
||||||
$lflags = -lefence -ldl
|
$lflags = -lefence
|
||||||
$bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
$bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||||
$bn_obj = asm/bn86-elf.o asm/co86-elf.o
|
$bn_obj = asm/bn86-elf.o asm/co86-elf.o
|
||||||
$des_obj = asm/dx86-elf.o asm/yx86-elf.o
|
$des_obj = asm/dx86-elf.o asm/yx86-elf.o
|
||||||
@@ -845,7 +825,7 @@ $cc = gcc
|
|||||||
$cflags = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -m486 -Wall
|
$cflags = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -m486 -Wall
|
||||||
$unistd =
|
$unistd =
|
||||||
$thread_cflag = -D_REENTRANT
|
$thread_cflag = -D_REENTRANT
|
||||||
$lflags = -ldl
|
$lflags =
|
||||||
$bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
$bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||||
$bn_obj = asm/bn86-elf.o asm/co86-elf.o
|
$bn_obj = asm/bn86-elf.o asm/co86-elf.o
|
||||||
$des_obj = asm/dx86-elf.o asm/yx86-elf.o
|
$des_obj = asm/dx86-elf.o asm/yx86-elf.o
|
||||||
@@ -1182,11 +1162,11 @@ $shared_cflag =
|
|||||||
|
|
||||||
*** hpux-parisc-cc
|
*** hpux-parisc-cc
|
||||||
$cc = cc
|
$cc = cc
|
||||||
$cflags = +O3 +Optrs_strongly_typed +Olibcalls -Ae +ESlit -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY
|
$cflags = -Ae +O3 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY
|
||||||
$unistd =
|
$unistd =
|
||||||
$thread_cflag = -D_REENTRANT
|
$thread_cflag =
|
||||||
$lflags = -ldld
|
$lflags = -ldld
|
||||||
$bn_ops = MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
|
$bn_ops = BN_LLONG DES_PTR DES_UNROLL DES_RISC1
|
||||||
$bn_obj =
|
$bn_obj =
|
||||||
$des_obj =
|
$des_obj =
|
||||||
$bf_obj =
|
$bf_obj =
|
||||||
@@ -1240,46 +1220,6 @@ $dso_scheme = dl
|
|||||||
$shared_target=
|
$shared_target=
|
||||||
$shared_cflag =
|
$shared_cflag =
|
||||||
|
|
||||||
*** hpux-parisc1_1-cc
|
|
||||||
$cc = cc
|
|
||||||
$cflags = +DA1.1 +DS1.1 +O3 +Optrs_strongly_typed +Olibcalls -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY
|
|
||||||
$unistd =
|
|
||||||
$thread_cflag = -D_REENTRANT
|
|
||||||
$lflags = -ldld
|
|
||||||
$bn_ops = MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
|
|
||||||
$bn_obj =
|
|
||||||
$des_obj =
|
|
||||||
$bf_obj =
|
|
||||||
$md5_obj =
|
|
||||||
$sha1_obj =
|
|
||||||
$cast_obj =
|
|
||||||
$rc4_obj =
|
|
||||||
$rmd160_obj =
|
|
||||||
$rc5_obj =
|
|
||||||
$dso_scheme = dl
|
|
||||||
$shared_target=
|
|
||||||
$shared_cflag =
|
|
||||||
|
|
||||||
*** hpux-parisc2-cc
|
|
||||||
$cc = cc
|
|
||||||
$cflags = +DA2.0 +DS2.0 +O3 +Optrs_strongly_typed +Olibcalls -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY
|
|
||||||
$unistd =
|
|
||||||
$thread_cflag = -D_REENTRANT
|
|
||||||
$lflags = -ldld
|
|
||||||
$bn_ops = SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
|
|
||||||
$bn_obj = asm/pa-risc2.o
|
|
||||||
$des_obj =
|
|
||||||
$bf_obj =
|
|
||||||
$md5_obj =
|
|
||||||
$sha1_obj =
|
|
||||||
$cast_obj =
|
|
||||||
$rc4_obj =
|
|
||||||
$rmd160_obj =
|
|
||||||
$rc5_obj =
|
|
||||||
$dso_scheme = dl
|
|
||||||
$shared_target=
|
|
||||||
$shared_cflag =
|
|
||||||
|
|
||||||
*** hpux10-brokencc
|
*** hpux10-brokencc
|
||||||
$cc = cc
|
$cc = cc
|
||||||
$cflags = -DB_ENDIAN -DBN_DIV2W -Ae +ESlit +O2 -z
|
$cflags = -DB_ENDIAN -DBN_DIV2W -Ae +ESlit +O2 -z
|
||||||
@@ -1365,7 +1305,7 @@ $cc = cc
|
|||||||
$cflags = -Ae +DD64 +O3 +ESlit -z -DB_ENDIAN -DMD32_XARRAY
|
$cflags = -Ae +DD64 +O3 +ESlit -z -DB_ENDIAN -DMD32_XARRAY
|
||||||
$unistd =
|
$unistd =
|
||||||
$thread_cflag = -D_REENTRANT
|
$thread_cflag = -D_REENTRANT
|
||||||
$lflags = -ldl
|
$lflags = -ldld
|
||||||
$bn_ops = SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
|
$bn_ops = SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
|
||||||
$bn_obj =
|
$bn_obj =
|
||||||
$des_obj =
|
$des_obj =
|
||||||
@@ -1376,27 +1316,7 @@ $cast_obj =
|
|||||||
$rc4_obj =
|
$rc4_obj =
|
||||||
$rmd160_obj =
|
$rmd160_obj =
|
||||||
$rc5_obj =
|
$rc5_obj =
|
||||||
$dso_scheme = dlfcn
|
$dso_scheme = dl
|
||||||
$shared_target=
|
|
||||||
$shared_cflag =
|
|
||||||
|
|
||||||
*** hpux64-parisc2-cc
|
|
||||||
$cc = cc
|
|
||||||
$cflags = +DD64 +O3 +Optrs_strongly_typed +Olibcalls -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY
|
|
||||||
$unistd =
|
|
||||||
$thread_cflag = -D_REENTRANT
|
|
||||||
$lflags = -ldl
|
|
||||||
$bn_ops = SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
|
|
||||||
$bn_obj = asm/pa-risc2W.o
|
|
||||||
$des_obj =
|
|
||||||
$bf_obj =
|
|
||||||
$md5_obj =
|
|
||||||
$sha1_obj =
|
|
||||||
$cast_obj =
|
|
||||||
$rc4_obj =
|
|
||||||
$rmd160_obj =
|
|
||||||
$rc5_obj =
|
|
||||||
$dso_scheme = dlfcn
|
|
||||||
$shared_target=
|
$shared_target=
|
||||||
$shared_cflag =
|
$shared_cflag =
|
||||||
|
|
||||||
@@ -1820,26 +1740,6 @@ $dso_scheme =
|
|||||||
$shared_target=
|
$shared_target=
|
||||||
$shared_cflag =
|
$shared_cflag =
|
||||||
|
|
||||||
*** newsos4-gcc
|
|
||||||
$cc = gcc
|
|
||||||
$cflags = -O -DB_ENDIAN -DNEWS4
|
|
||||||
$unistd =
|
|
||||||
$thread_cflag = (unknown)
|
|
||||||
$lflags = -lmld -liberty
|
|
||||||
$bn_ops = BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR
|
|
||||||
$bn_obj =
|
|
||||||
$des_obj =
|
|
||||||
$bf_obj =
|
|
||||||
$md5_obj =
|
|
||||||
$sha1_obj =
|
|
||||||
$cast_obj =
|
|
||||||
$rc4_obj =
|
|
||||||
$rmd160_obj =
|
|
||||||
$rc5_obj =
|
|
||||||
$dso_scheme =
|
|
||||||
$shared_target=
|
|
||||||
$shared_cflag =
|
|
||||||
|
|
||||||
*** nextstep
|
*** nextstep
|
||||||
$cc = cc
|
$cc = cc
|
||||||
$cflags = -O -Wall
|
$cflags = -O -Wall
|
||||||
|
|||||||
@@ -36,7 +36,6 @@
|
|||||||
# default openssl.cnf file has setup as per the following
|
# default openssl.cnf file has setup as per the following
|
||||||
# demoCA ... where everything is stored
|
# demoCA ... where everything is stored
|
||||||
|
|
||||||
$SSLEAY_CONFIG=$ENV{"SSLEAY_CONFIG"};
|
|
||||||
$DAYS="-days 365";
|
$DAYS="-days 365";
|
||||||
$REQ="openssl req $SSLEAY_CONFIG";
|
$REQ="openssl req $SSLEAY_CONFIG";
|
||||||
$CA="openssl ca $SSLEAY_CONFIG";
|
$CA="openssl ca $SSLEAY_CONFIG";
|
||||||
|
|||||||
@@ -146,9 +146,8 @@ progs.h: progs.pl
|
|||||||
app_rand.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
app_rand.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
app_rand.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
app_rand.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
app_rand.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
app_rand.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
app_rand.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
app_rand.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
app_rand.o: ../include/openssl/des.h ../include/openssl/dh.h
|
app_rand.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
app_rand.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
app_rand.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
app_rand.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
app_rand.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
app_rand.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
app_rand.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
app_rand.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
@@ -165,9 +164,8 @@ app_rand.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
|||||||
apps.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
apps.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
apps.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
apps.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
apps.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
apps.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
apps.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
apps.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
apps.o: ../include/openssl/des.h ../include/openssl/dh.h
|
apps.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
apps.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
apps.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
apps.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
apps.o: ../include/openssl/err.h ../include/openssl/evp.h
|
apps.o: ../include/openssl/err.h ../include/openssl/evp.h
|
||||||
apps.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
apps.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
||||||
@@ -186,9 +184,8 @@ apps.o: ../include/openssl/x509_vfy.h apps.h
|
|||||||
asn1pars.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
asn1pars.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
asn1pars.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
asn1pars.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
asn1pars.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
asn1pars.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
asn1pars.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
asn1pars.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
asn1pars.o: ../include/openssl/des.h ../include/openssl/dh.h
|
asn1pars.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
asn1pars.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
asn1pars.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
asn1pars.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
asn1pars.o: ../include/openssl/err.h ../include/openssl/evp.h
|
asn1pars.o: ../include/openssl/err.h ../include/openssl/evp.h
|
||||||
asn1pars.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
asn1pars.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
||||||
@@ -209,14 +206,15 @@ ca.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
|||||||
ca.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
ca.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
||||||
ca.o: ../include/openssl/des.h ../include/openssl/dh.h ../include/openssl/dsa.h
|
ca.o: ../include/openssl/des.h ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
ca.o: ../include/openssl/e_os.h ../include/openssl/e_os.h
|
ca.o: ../include/openssl/e_os.h ../include/openssl/e_os.h
|
||||||
ca.o: ../include/openssl/e_os2.h ../include/openssl/err.h
|
ca.o: ../include/openssl/e_os2.h ../include/openssl/engine.h
|
||||||
ca.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
ca.o: ../include/openssl/err.h ../include/openssl/evp.h
|
||||||
ca.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
ca.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
||||||
ca.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
ca.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
||||||
ca.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
ca.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
||||||
ca.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
ca.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
||||||
ca.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
ca.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
||||||
ca.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
ca.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
||||||
|
ca.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
|
||||||
ca.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
|
ca.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
|
||||||
ca.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
|
ca.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
|
||||||
ca.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
ca.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
||||||
@@ -227,10 +225,9 @@ ca.o: ../include/openssl/x509v3.h apps.h
|
|||||||
ciphers.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
ciphers.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
ciphers.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
ciphers.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
ciphers.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
ciphers.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
ciphers.o: ../include/openssl/comp.h ../include/openssl/conf.h
|
ciphers.o: ../include/openssl/comp.h ../include/openssl/crypto.h
|
||||||
ciphers.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
ciphers.o: ../include/openssl/des.h ../include/openssl/dh.h
|
||||||
ciphers.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
ciphers.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
||||||
ciphers.o: ../include/openssl/e_os.h ../include/openssl/e_os.h
|
|
||||||
ciphers.o: ../include/openssl/e_os2.h ../include/openssl/err.h
|
ciphers.o: ../include/openssl/e_os2.h ../include/openssl/err.h
|
||||||
ciphers.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
ciphers.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
ciphers.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
ciphers.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
@@ -271,9 +268,8 @@ crl.o: ../include/openssl/x509v3.h apps.h
|
|||||||
crl2p7.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
crl2p7.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
crl2p7.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
crl2p7.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
crl2p7.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
crl2p7.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
crl2p7.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
crl2p7.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
crl2p7.o: ../include/openssl/des.h ../include/openssl/dh.h
|
crl2p7.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
crl2p7.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
crl2p7.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
crl2p7.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
crl2p7.o: ../include/openssl/err.h ../include/openssl/evp.h
|
crl2p7.o: ../include/openssl/err.h ../include/openssl/evp.h
|
||||||
crl2p7.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
crl2p7.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
||||||
@@ -291,18 +287,18 @@ crl2p7.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
|||||||
dgst.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
dgst.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
dgst.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
dgst.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
dgst.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
dgst.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
dgst.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
dgst.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
dgst.o: ../include/openssl/des.h ../include/openssl/dh.h
|
dgst.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
dgst.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
dgst.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
dgst.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
dgst.o: ../include/openssl/err.h ../include/openssl/evp.h
|
dgst.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
dgst.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
dgst.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
dgst.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
dgst.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
dgst.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
dgst.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
dgst.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
dgst.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
dgst.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
dgst.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
dgst.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
dgst.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
dgst.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
|
dgst.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
|
dgst.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
dgst.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
dgst.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
dgst.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
dgst.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
dgst.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
dgst.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
@@ -311,10 +307,10 @@ dgst.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
|||||||
dh.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
dh.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
dh.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
dh.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
dh.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
dh.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
dh.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
dh.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
dh.o: ../include/openssl/des.h ../include/openssl/dh.h ../include/openssl/dsa.h
|
dh.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
dh.o: ../include/openssl/e_os.h ../include/openssl/e_os.h
|
dh.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
dh.o: ../include/openssl/e_os2.h ../include/openssl/err.h
|
dh.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
dh.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
dh.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
dh.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
dh.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
dh.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
dh.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
@@ -322,27 +318,27 @@ dh.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
|||||||
dh.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
dh.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
dh.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
dh.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
dh.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
dh.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
dh.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
|
dh.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
dh.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
|
dh.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
dh.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
dh.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
dh.o: ../include/openssl/sha.h ../include/openssl/stack.h
|
dh.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
dh.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
|
dh.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
||||||
dh.o: ../include/openssl/x509_vfy.h apps.h
|
dh.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
||||||
dsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
dsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
dsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
dsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
dsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
dsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
dsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
dsa.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
dsa.o: ../include/openssl/des.h ../include/openssl/dh.h
|
dsa.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
dsa.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
dsa.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
dsa.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
dsa.o: ../include/openssl/err.h ../include/openssl/evp.h
|
dsa.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
dsa.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
dsa.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
dsa.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
dsa.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
dsa.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
dsa.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
dsa.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
dsa.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
dsa.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
dsa.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
dsa.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
dsa.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
dsa.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
|
dsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
|
dsa.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
dsa.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
dsa.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
dsa.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
dsa.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
dsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
dsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
@@ -351,18 +347,18 @@ dsa.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
|||||||
dsaparam.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
dsaparam.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
dsaparam.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
dsaparam.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
dsaparam.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
dsaparam.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
dsaparam.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
dsaparam.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
dsaparam.o: ../include/openssl/des.h ../include/openssl/dh.h
|
dsaparam.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
dsaparam.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
dsaparam.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
dsaparam.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
dsaparam.o: ../include/openssl/err.h ../include/openssl/evp.h
|
dsaparam.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
dsaparam.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
dsaparam.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
dsaparam.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
dsaparam.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
dsaparam.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
dsaparam.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
dsaparam.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
dsaparam.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
dsaparam.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
dsaparam.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
dsaparam.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
dsaparam.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
dsaparam.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
|
dsaparam.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
|
dsaparam.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
dsaparam.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
dsaparam.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
dsaparam.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
dsaparam.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
dsaparam.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
dsaparam.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
@@ -371,31 +367,29 @@ dsaparam.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
|||||||
enc.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
enc.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
enc.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
enc.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
enc.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
enc.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
enc.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
enc.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
enc.o: ../include/openssl/des.h ../include/openssl/dh.h
|
enc.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
enc.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
enc.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
enc.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
enc.o: ../include/openssl/err.h ../include/openssl/evp.h
|
enc.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
enc.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
enc.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
enc.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
enc.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
enc.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
enc.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
enc.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
enc.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
enc.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
enc.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
enc.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
enc.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
enc.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
|
enc.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
enc.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
|
enc.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
enc.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
|
enc.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
enc.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
enc.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
enc.o: ../include/openssl/sha.h ../include/openssl/stack.h
|
enc.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
enc.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
|
enc.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
||||||
enc.o: ../include/openssl/x509_vfy.h apps.h
|
enc.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
||||||
errstr.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
errstr.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
errstr.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
errstr.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
errstr.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
errstr.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
errstr.o: ../include/openssl/comp.h ../include/openssl/conf.h
|
errstr.o: ../include/openssl/comp.h ../include/openssl/crypto.h
|
||||||
errstr.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
errstr.o: ../include/openssl/des.h ../include/openssl/dh.h
|
||||||
errstr.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
errstr.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
||||||
errstr.o: ../include/openssl/e_os.h ../include/openssl/e_os.h
|
|
||||||
errstr.o: ../include/openssl/e_os2.h ../include/openssl/err.h
|
errstr.o: ../include/openssl/e_os2.h ../include/openssl/err.h
|
||||||
errstr.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
errstr.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
errstr.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
errstr.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
@@ -415,39 +409,38 @@ errstr.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
|||||||
gendh.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
gendh.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
gendh.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
gendh.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
gendh.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
gendh.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
gendh.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
gendh.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
gendh.o: ../include/openssl/des.h ../include/openssl/dh.h
|
gendh.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
gendh.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
gendh.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
gendh.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
gendh.o: ../include/openssl/err.h ../include/openssl/evp.h
|
gendh.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
gendh.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
gendh.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
gendh.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
gendh.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
gendh.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
gendh.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
gendh.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
gendh.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
gendh.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
gendh.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
gendh.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
gendh.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
gendh.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
|
gendh.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
gendh.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
|
gendh.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
gendh.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
|
gendh.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
gendh.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
gendh.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
gendh.o: ../include/openssl/sha.h ../include/openssl/stack.h
|
gendh.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
gendh.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
|
gendh.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
||||||
gendh.o: ../include/openssl/x509_vfy.h apps.h
|
gendh.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
||||||
gendsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
gendsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
gendsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
gendsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
gendsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
gendsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
gendsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
gendsa.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
gendsa.o: ../include/openssl/des.h ../include/openssl/dh.h
|
gendsa.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
gendsa.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
gendsa.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
gendsa.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
gendsa.o: ../include/openssl/err.h ../include/openssl/evp.h
|
gendsa.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
gendsa.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
gendsa.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
gendsa.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
gendsa.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
gendsa.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
gendsa.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
gendsa.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
gendsa.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
gendsa.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
gendsa.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
gendsa.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
gendsa.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
gendsa.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
|
gendsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
|
gendsa.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
gendsa.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
gendsa.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
gendsa.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
gendsa.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
gendsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
gendsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
@@ -456,18 +449,18 @@ gendsa.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
|||||||
genrsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
genrsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
genrsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
genrsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
genrsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
genrsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
genrsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
genrsa.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
genrsa.o: ../include/openssl/des.h ../include/openssl/dh.h
|
genrsa.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
genrsa.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
genrsa.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
genrsa.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
genrsa.o: ../include/openssl/err.h ../include/openssl/evp.h
|
genrsa.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
genrsa.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
genrsa.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
genrsa.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
genrsa.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
genrsa.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
genrsa.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
genrsa.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
genrsa.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
genrsa.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
genrsa.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
genrsa.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
genrsa.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
genrsa.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
|
genrsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
|
genrsa.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
genrsa.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
genrsa.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
genrsa.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
genrsa.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
genrsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
genrsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
@@ -476,9 +469,8 @@ genrsa.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
|||||||
nseq.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
nseq.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
nseq.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
nseq.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
nseq.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
nseq.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
nseq.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
nseq.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
nseq.o: ../include/openssl/des.h ../include/openssl/dh.h
|
nseq.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
nseq.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
nseq.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
nseq.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
nseq.o: ../include/openssl/err.h ../include/openssl/evp.h
|
nseq.o: ../include/openssl/err.h ../include/openssl/evp.h
|
||||||
nseq.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
nseq.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
||||||
@@ -520,9 +512,8 @@ openssl.o: progs.h s_apps.h
|
|||||||
passwd.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
passwd.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
passwd.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
passwd.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
passwd.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
passwd.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
passwd.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
passwd.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
passwd.o: ../include/openssl/des.h ../include/openssl/dh.h
|
passwd.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
passwd.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
passwd.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
passwd.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
passwd.o: ../include/openssl/err.h ../include/openssl/evp.h
|
passwd.o: ../include/openssl/err.h ../include/openssl/evp.h
|
||||||
passwd.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
passwd.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
||||||
@@ -540,18 +531,18 @@ passwd.o: ../include/openssl/x509_vfy.h apps.h
|
|||||||
pkcs12.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
pkcs12.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
pkcs12.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
pkcs12.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
pkcs12.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
pkcs12.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
pkcs12.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
pkcs12.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
pkcs12.o: ../include/openssl/des.h ../include/openssl/dh.h
|
pkcs12.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
pkcs12.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
pkcs12.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
pkcs12.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
pkcs12.o: ../include/openssl/err.h ../include/openssl/evp.h
|
pkcs12.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
pkcs12.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
pkcs12.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
pkcs12.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
pkcs12.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
pkcs12.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
pkcs12.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
pkcs12.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
pkcs12.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
pkcs12.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
pkcs12.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
pkcs12.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
pkcs12.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
pkcs12.o: ../include/openssl/pkcs12.h ../include/openssl/pkcs7.h
|
pkcs12.o: ../include/openssl/pem2.h ../include/openssl/pkcs12.h
|
||||||
|
pkcs12.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
|
||||||
pkcs12.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
|
pkcs12.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
|
||||||
pkcs12.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
|
pkcs12.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
|
||||||
pkcs12.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
pkcs12.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
||||||
@@ -561,18 +552,18 @@ pkcs12.o: ../include/openssl/x509_vfy.h apps.h
|
|||||||
pkcs7.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
pkcs7.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
pkcs7.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
pkcs7.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
pkcs7.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
pkcs7.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
pkcs7.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
pkcs7.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
pkcs7.o: ../include/openssl/des.h ../include/openssl/dh.h
|
pkcs7.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
pkcs7.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
pkcs7.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
pkcs7.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
pkcs7.o: ../include/openssl/err.h ../include/openssl/evp.h
|
pkcs7.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
pkcs7.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
pkcs7.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
pkcs7.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
pkcs7.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
pkcs7.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
pkcs7.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
pkcs7.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
pkcs7.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
pkcs7.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
pkcs7.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
pkcs7.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
pkcs7.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
pkcs7.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
|
pkcs7.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
|
pkcs7.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
pkcs7.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
pkcs7.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
pkcs7.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
pkcs7.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
pkcs7.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
pkcs7.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
@@ -581,18 +572,18 @@ pkcs7.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
|||||||
pkcs8.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
pkcs8.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
pkcs8.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
pkcs8.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
pkcs8.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
pkcs8.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
pkcs8.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
pkcs8.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
pkcs8.o: ../include/openssl/des.h ../include/openssl/dh.h
|
pkcs8.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
pkcs8.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
pkcs8.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
pkcs8.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
pkcs8.o: ../include/openssl/err.h ../include/openssl/evp.h
|
pkcs8.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
pkcs8.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
pkcs8.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
pkcs8.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
pkcs8.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
pkcs8.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
pkcs8.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
pkcs8.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
pkcs8.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
pkcs8.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
pkcs8.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
pkcs8.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
pkcs8.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
pkcs8.o: ../include/openssl/pkcs12.h ../include/openssl/pkcs7.h
|
pkcs8.o: ../include/openssl/pem2.h ../include/openssl/pkcs12.h
|
||||||
|
pkcs8.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
|
||||||
pkcs8.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
|
pkcs8.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
|
||||||
pkcs8.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
|
pkcs8.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
|
||||||
pkcs8.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
pkcs8.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
||||||
@@ -602,23 +593,22 @@ pkcs8.o: ../include/openssl/x509_vfy.h apps.h
|
|||||||
rand.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
rand.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
rand.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
rand.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
rand.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
rand.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
rand.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
rand.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
rand.o: ../include/openssl/des.h ../include/openssl/dh.h
|
rand.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
rand.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
rand.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
rand.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
rand.o: ../include/openssl/err.h ../include/openssl/evp.h
|
rand.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
rand.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
rand.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
rand.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
rand.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
rand.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
rand.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
rand.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
rand.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
rand.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
rand.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
rand.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
|
rand.o: ../include/openssl/opensslv.h ../include/openssl/pkcs7.h
|
||||||
rand.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
|
rand.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
rand.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
|
rand.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
rand.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
rand.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
rand.o: ../include/openssl/sha.h ../include/openssl/stack.h
|
rand.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
rand.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
|
rand.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
||||||
rand.o: ../include/openssl/x509_vfy.h apps.h
|
rand.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
||||||
req.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
req.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
req.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
req.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
req.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
req.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
@@ -626,14 +616,15 @@ req.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
|||||||
req.o: ../include/openssl/des.h ../include/openssl/dh.h
|
req.o: ../include/openssl/des.h ../include/openssl/dh.h
|
||||||
req.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
req.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
||||||
req.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
req.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
req.o: ../include/openssl/err.h ../include/openssl/evp.h
|
req.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
req.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
req.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
req.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
req.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
req.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
req.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
req.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
req.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
req.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
req.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
req.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
req.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
req.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
|
req.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
|
req.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
req.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
req.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
req.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
req.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
req.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
req.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
@@ -643,18 +634,18 @@ req.o: ../include/openssl/x509v3.h apps.h
|
|||||||
rsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
rsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
rsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
rsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
rsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
rsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
rsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
rsa.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
rsa.o: ../include/openssl/des.h ../include/openssl/dh.h
|
rsa.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
rsa.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
rsa.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
rsa.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
rsa.o: ../include/openssl/err.h ../include/openssl/evp.h
|
rsa.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
rsa.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
rsa.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
rsa.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
rsa.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
rsa.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
rsa.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
rsa.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
rsa.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
rsa.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
rsa.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
rsa.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
rsa.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
rsa.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
|
rsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
|
rsa.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
rsa.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
rsa.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
rsa.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
rsa.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
rsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
rsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
@@ -663,18 +654,18 @@ rsa.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
|||||||
rsautl.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
rsautl.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
rsautl.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
rsautl.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
rsautl.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
rsautl.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
rsautl.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
rsautl.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
rsautl.o: ../include/openssl/des.h ../include/openssl/dh.h
|
rsautl.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
rsautl.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
rsautl.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
rsautl.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
rsautl.o: ../include/openssl/err.h ../include/openssl/evp.h
|
rsautl.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
rsautl.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
rsautl.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
rsautl.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
rsautl.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
rsautl.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
rsautl.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
rsautl.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
rsautl.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
rsautl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
rsautl.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
rsautl.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
rsautl.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
rsautl.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
|
rsautl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
|
rsautl.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
rsautl.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
rsautl.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
rsautl.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
rsautl.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
rsautl.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
rsautl.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
@@ -683,10 +674,9 @@ rsautl.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
|||||||
s_cb.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
s_cb.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
s_cb.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
s_cb.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
s_cb.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
s_cb.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
s_cb.o: ../include/openssl/comp.h ../include/openssl/conf.h
|
s_cb.o: ../include/openssl/comp.h ../include/openssl/crypto.h
|
||||||
s_cb.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
s_cb.o: ../include/openssl/des.h ../include/openssl/dh.h
|
||||||
s_cb.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
s_cb.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
||||||
s_cb.o: ../include/openssl/e_os.h ../include/openssl/e_os.h
|
|
||||||
s_cb.o: ../include/openssl/e_os2.h ../include/openssl/err.h
|
s_cb.o: ../include/openssl/e_os2.h ../include/openssl/err.h
|
||||||
s_cb.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
s_cb.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
s_cb.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
s_cb.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
@@ -706,18 +696,18 @@ s_cb.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h s_apps.h
|
|||||||
s_client.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
s_client.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
s_client.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
s_client.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
s_client.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
s_client.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
s_client.o: ../include/openssl/comp.h ../include/openssl/conf.h
|
s_client.o: ../include/openssl/comp.h ../include/openssl/crypto.h
|
||||||
s_client.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
s_client.o: ../include/openssl/des.h ../include/openssl/dh.h
|
||||||
s_client.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
s_client.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
||||||
s_client.o: ../include/openssl/e_os.h ../include/openssl/e_os.h
|
s_client.o: ../include/openssl/e_os2.h ../include/openssl/engine.h
|
||||||
s_client.o: ../include/openssl/e_os2.h ../include/openssl/err.h
|
s_client.o: ../include/openssl/err.h ../include/openssl/evp.h
|
||||||
s_client.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
s_client.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
||||||
s_client.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
s_client.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
||||||
s_client.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
s_client.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
||||||
s_client.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
s_client.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
||||||
s_client.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
s_client.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
||||||
s_client.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
s_client.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
||||||
s_client.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
s_client.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
|
||||||
s_client.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
|
s_client.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
|
||||||
s_client.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
|
s_client.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
|
||||||
s_client.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
s_client.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
||||||
@@ -730,18 +720,18 @@ s_client.o: s_apps.h
|
|||||||
s_server.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
s_server.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
s_server.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
s_server.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
s_server.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
s_server.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
s_server.o: ../include/openssl/comp.h ../include/openssl/conf.h
|
s_server.o: ../include/openssl/comp.h ../include/openssl/crypto.h
|
||||||
s_server.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
s_server.o: ../include/openssl/des.h ../include/openssl/dh.h
|
||||||
s_server.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
s_server.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
||||||
s_server.o: ../include/openssl/e_os.h ../include/openssl/e_os.h
|
s_server.o: ../include/openssl/e_os2.h ../include/openssl/engine.h
|
||||||
s_server.o: ../include/openssl/e_os2.h ../include/openssl/err.h
|
s_server.o: ../include/openssl/err.h ../include/openssl/evp.h
|
||||||
s_server.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
s_server.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
||||||
s_server.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
s_server.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
||||||
s_server.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
s_server.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
||||||
s_server.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
s_server.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
||||||
s_server.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
s_server.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
||||||
s_server.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
s_server.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
||||||
s_server.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
s_server.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
|
||||||
s_server.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
|
s_server.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
|
||||||
s_server.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
|
s_server.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
|
||||||
s_server.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
s_server.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
||||||
@@ -754,10 +744,9 @@ s_server.o: s_apps.h
|
|||||||
s_socket.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
s_socket.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
s_socket.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
s_socket.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
s_socket.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
s_socket.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
s_socket.o: ../include/openssl/comp.h ../include/openssl/conf.h
|
s_socket.o: ../include/openssl/comp.h ../include/openssl/crypto.h
|
||||||
s_socket.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
s_socket.o: ../include/openssl/des.h ../include/openssl/dh.h
|
||||||
s_socket.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
s_socket.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
||||||
s_socket.o: ../include/openssl/e_os.h ../include/openssl/e_os.h
|
|
||||||
s_socket.o: ../include/openssl/e_os2.h ../include/openssl/evp.h
|
s_socket.o: ../include/openssl/e_os2.h ../include/openssl/evp.h
|
||||||
s_socket.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
s_socket.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
||||||
s_socket.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
s_socket.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
||||||
@@ -777,10 +766,9 @@ s_socket.o: ../include/openssl/x509_vfy.h apps.h s_apps.h
|
|||||||
s_time.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
s_time.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
s_time.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
s_time.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
s_time.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
s_time.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
s_time.o: ../include/openssl/comp.h ../include/openssl/conf.h
|
s_time.o: ../include/openssl/comp.h ../include/openssl/crypto.h
|
||||||
s_time.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
s_time.o: ../include/openssl/des.h ../include/openssl/dh.h
|
||||||
s_time.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
s_time.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
||||||
s_time.o: ../include/openssl/e_os.h ../include/openssl/e_os.h
|
|
||||||
s_time.o: ../include/openssl/e_os2.h ../include/openssl/err.h
|
s_time.o: ../include/openssl/e_os2.h ../include/openssl/err.h
|
||||||
s_time.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
s_time.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
s_time.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
s_time.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
@@ -801,10 +789,9 @@ s_time.o: s_apps.h
|
|||||||
sess_id.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
sess_id.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
sess_id.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
sess_id.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
sess_id.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
sess_id.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
sess_id.o: ../include/openssl/comp.h ../include/openssl/conf.h
|
sess_id.o: ../include/openssl/comp.h ../include/openssl/crypto.h
|
||||||
sess_id.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
sess_id.o: ../include/openssl/des.h ../include/openssl/dh.h
|
||||||
sess_id.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
sess_id.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
||||||
sess_id.o: ../include/openssl/e_os.h ../include/openssl/e_os.h
|
|
||||||
sess_id.o: ../include/openssl/e_os2.h ../include/openssl/err.h
|
sess_id.o: ../include/openssl/e_os2.h ../include/openssl/err.h
|
||||||
sess_id.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
sess_id.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
sess_id.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
sess_id.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
@@ -824,18 +811,18 @@ sess_id.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
|||||||
smime.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
smime.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
smime.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
smime.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
smime.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
smime.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
smime.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
smime.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
smime.o: ../include/openssl/des.h ../include/openssl/dh.h
|
smime.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
smime.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
smime.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
smime.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
smime.o: ../include/openssl/err.h ../include/openssl/evp.h
|
smime.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
smime.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
smime.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
smime.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
smime.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
smime.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
smime.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
smime.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
smime.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
smime.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
smime.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
smime.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
smime.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
smime.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
|
smime.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
|
smime.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
smime.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
smime.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
smime.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
smime.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
smime.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
smime.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
@@ -844,24 +831,23 @@ smime.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
|
|||||||
speed.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
speed.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
speed.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
speed.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
speed.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
speed.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
speed.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
speed.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
speed.o: ../include/openssl/des.h ../include/openssl/dh.h
|
speed.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
speed.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
speed.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
speed.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
speed.o: ../include/openssl/err.h ../include/openssl/evp.h
|
speed.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
speed.o: ../include/openssl/hmac.h ../include/openssl/idea.h
|
speed.o: ../include/openssl/evp.h ../include/openssl/hmac.h
|
||||||
speed.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
speed.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
||||||
speed.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
speed.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
||||||
speed.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
speed.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
||||||
speed.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
speed.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
||||||
speed.o: ../include/openssl/opensslv.h ../include/openssl/pkcs7.h
|
speed.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
||||||
speed.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
speed.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
|
||||||
speed.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
speed.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
|
||||||
speed.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
speed.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
|
||||||
speed.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
speed.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
|
||||||
speed.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
speed.o: ../include/openssl/sha.h ../include/openssl/stack.h
|
||||||
speed.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h ./testdsa.h
|
speed.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
|
||||||
speed.o: ./testrsa.h apps.h
|
speed.o: ../include/openssl/x509_vfy.h ./testdsa.h ./testrsa.h apps.h
|
||||||
spkac.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
spkac.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
spkac.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
spkac.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
spkac.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
spkac.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
@@ -869,14 +855,15 @@ spkac.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
|||||||
spkac.o: ../include/openssl/des.h ../include/openssl/dh.h
|
spkac.o: ../include/openssl/des.h ../include/openssl/dh.h
|
||||||
spkac.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
spkac.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
||||||
spkac.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
spkac.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
spkac.o: ../include/openssl/err.h ../include/openssl/evp.h
|
spkac.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
spkac.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
spkac.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
spkac.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
spkac.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
spkac.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
spkac.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
spkac.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
spkac.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
spkac.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
spkac.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
spkac.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
spkac.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
spkac.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
|
spkac.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
|
spkac.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
spkac.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
spkac.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
spkac.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
spkac.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
spkac.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
spkac.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
@@ -889,14 +876,15 @@ verify.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
|||||||
verify.o: ../include/openssl/des.h ../include/openssl/dh.h
|
verify.o: ../include/openssl/des.h ../include/openssl/dh.h
|
||||||
verify.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
verify.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
||||||
verify.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
verify.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
verify.o: ../include/openssl/err.h ../include/openssl/evp.h
|
verify.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
verify.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
verify.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
verify.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
verify.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
verify.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
verify.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
verify.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
verify.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
verify.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
verify.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
verify.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
verify.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
verify.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
|
verify.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
|
verify.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
verify.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
verify.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
verify.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
verify.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
verify.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
verify.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
@@ -906,9 +894,8 @@ verify.o: ../include/openssl/x509v3.h apps.h
|
|||||||
version.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
version.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
version.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
version.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
version.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
version.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
version.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
version.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
version.o: ../include/openssl/des.h ../include/openssl/dh.h
|
version.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
version.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
|
||||||
version.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
version.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
version.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
version.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
version.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
version.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
@@ -929,14 +916,15 @@ x509.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
|||||||
x509.o: ../include/openssl/des.h ../include/openssl/dh.h
|
x509.o: ../include/openssl/des.h ../include/openssl/dh.h
|
||||||
x509.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
x509.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
|
||||||
x509.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
x509.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
x509.o: ../include/openssl/err.h ../include/openssl/evp.h
|
x509.o: ../include/openssl/engine.h ../include/openssl/err.h
|
||||||
x509.o: ../include/openssl/idea.h ../include/openssl/lhash.h
|
x509.o: ../include/openssl/evp.h ../include/openssl/idea.h
|
||||||
x509.o: ../include/openssl/md2.h ../include/openssl/md4.h
|
x509.o: ../include/openssl/lhash.h ../include/openssl/md2.h
|
||||||
x509.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
x509.o: ../include/openssl/md4.h ../include/openssl/md5.h
|
||||||
x509.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
x509.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
|
||||||
x509.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
x509.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
x509.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
x509.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
|
||||||
x509.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
|
x509.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
|
x509.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
x509.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
x509.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
x509.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
x509.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
x509.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
x509.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
|
|||||||
@@ -170,6 +170,8 @@ int str2fmt(char *s)
|
|||||||
|| (strcmp(s,"PKCS12") == 0) || (strcmp(s,"pkcs12") == 0)
|
|| (strcmp(s,"PKCS12") == 0) || (strcmp(s,"pkcs12") == 0)
|
||||||
|| (strcmp(s,"P12") == 0) || (strcmp(s,"p12") == 0))
|
|| (strcmp(s,"P12") == 0) || (strcmp(s,"p12") == 0))
|
||||||
return(FORMAT_PKCS12);
|
return(FORMAT_PKCS12);
|
||||||
|
else if ((*s == 'E') || (*s == 'e'))
|
||||||
|
return(FORMAT_ENGINE);
|
||||||
else
|
else
|
||||||
return(FORMAT_UNDEF);
|
return(FORMAT_UNDEF);
|
||||||
}
|
}
|
||||||
@@ -660,7 +662,7 @@ STACK_OF(X509) *load_certs(BIO *err, char *file, int format)
|
|||||||
|
|
||||||
if (format == FORMAT_PEM)
|
if (format == FORMAT_PEM)
|
||||||
{
|
{
|
||||||
othercerts = sk_X509_new_null();
|
othercerts = sk_X509_new(NULL);
|
||||||
if(!othercerts)
|
if(!othercerts)
|
||||||
{
|
{
|
||||||
sk_X509_free(othercerts);
|
sk_X509_free(othercerts);
|
||||||
|
|||||||
@@ -66,7 +66,6 @@
|
|||||||
#include <openssl/crypto.h>
|
#include <openssl/crypto.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/lhash.h>
|
#include <openssl/lhash.h>
|
||||||
#include <openssl/conf.h>
|
|
||||||
|
|
||||||
int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn);
|
int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn);
|
||||||
int app_RAND_write_file(const char *file, BIO *bio_e);
|
int app_RAND_write_file(const char *file, BIO *bio_e);
|
||||||
@@ -100,6 +99,7 @@ extern BIO *bio_err;
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
#define MAIN(a,v) PROG(a,v)
|
#define MAIN(a,v) PROG(a,v)
|
||||||
|
#include <openssl/conf.h>
|
||||||
extern LHASH *config;
|
extern LHASH *config;
|
||||||
extern char *default_config_file;
|
extern char *default_config_file;
|
||||||
extern BIO *bio_err;
|
extern BIO *bio_err;
|
||||||
@@ -162,6 +162,8 @@ STACK_OF(X509) *load_certs(BIO *err, char *file, int format);
|
|||||||
#define FORMAT_NETSCAPE 4
|
#define FORMAT_NETSCAPE 4
|
||||||
#define FORMAT_PKCS12 5
|
#define FORMAT_PKCS12 5
|
||||||
#define FORMAT_SMIME 6
|
#define FORMAT_SMIME 6
|
||||||
|
/* Since this is currently inofficial, let's give it a high number */
|
||||||
|
#define FORMAT_ENGINE 127
|
||||||
|
|
||||||
#define NETSCAPE_CERT_HDR "certificate"
|
#define NETSCAPE_CERT_HDR "certificate"
|
||||||
|
|
||||||
|
|||||||
@@ -206,12 +206,6 @@ bad:
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE|BIO_FP_TEXT);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (oidfile != NULL)
|
if (oidfile != NULL)
|
||||||
{
|
{
|
||||||
@@ -321,7 +315,7 @@ bad:
|
|||||||
end:
|
end:
|
||||||
BIO_free(derout);
|
BIO_free(derout);
|
||||||
if (in != NULL) BIO_free(in);
|
if (in != NULL) BIO_free(in);
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (out != NULL) BIO_free(out);
|
||||||
if (b64 != NULL) BIO_free(b64);
|
if (b64 != NULL) BIO_free(b64);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
|
|||||||
51
apps/ca.c
51
apps/ca.c
@@ -74,6 +74,7 @@
|
|||||||
#include <openssl/x509v3.h>
|
#include <openssl/x509v3.h>
|
||||||
#include <openssl/objects.h>
|
#include <openssl/objects.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#ifndef W_OK
|
#ifndef W_OK
|
||||||
# ifdef VMS
|
# ifdef VMS
|
||||||
@@ -167,6 +168,7 @@ static char *ca_usage[]={
|
|||||||
" -revoke file - Revoke a certificate (given in file)\n",
|
" -revoke file - Revoke a certificate (given in file)\n",
|
||||||
" -extensions .. - Extension section (override value in config file)\n",
|
" -extensions .. - Extension section (override value in config file)\n",
|
||||||
" -crlexts .. - CRL extension section (override value in config file)\n",
|
" -crlexts .. - CRL extension section (override value in config file)\n",
|
||||||
|
" -engine e - use engine e, possibly a hardware device.\n",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -216,6 +218,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
char *key=NULL,*passargin=NULL;
|
char *key=NULL,*passargin=NULL;
|
||||||
int total=0;
|
int total=0;
|
||||||
int total_done=0;
|
int total_done=0;
|
||||||
@@ -268,6 +271,7 @@ int MAIN(int argc, char **argv)
|
|||||||
#define BSIZE 256
|
#define BSIZE 256
|
||||||
MS_STATIC char buf[3][BSIZE];
|
MS_STATIC char buf[3][BSIZE];
|
||||||
char *randfile=NULL;
|
char *randfile=NULL;
|
||||||
|
char *engine = NULL;
|
||||||
|
|
||||||
#ifdef EFENCE
|
#ifdef EFENCE
|
||||||
EF_PROTECT_FREE=1;
|
EF_PROTECT_FREE=1;
|
||||||
@@ -419,6 +423,11 @@ EF_ALIGNMENT=0;
|
|||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
crl_ext= *(++argv);
|
crl_ext= *(++argv);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine= *(++argv);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bad:
|
bad:
|
||||||
@@ -439,6 +448,24 @@ bad:
|
|||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************/
|
/*****************************************************************/
|
||||||
if (configfile == NULL) configfile = getenv("OPENSSL_CONF");
|
if (configfile == NULL) configfile = getenv("OPENSSL_CONF");
|
||||||
if (configfile == NULL) configfile = getenv("SSLEAY_CONF");
|
if (configfile == NULL) configfile = getenv("SSLEAY_CONF");
|
||||||
@@ -690,12 +717,6 @@ bad:
|
|||||||
if (verbose)
|
if (verbose)
|
||||||
{
|
{
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE|BIO_FP_TEXT); /* cannot fail */
|
BIO_set_fp(out,stdout,BIO_NOCLOSE|BIO_FP_TEXT); /* cannot fail */
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
TXT_DB_write(out,db);
|
TXT_DB_write(out,db);
|
||||||
BIO_printf(bio_err,"%d entries loaded from the database\n",
|
BIO_printf(bio_err,"%d entries loaded from the database\n",
|
||||||
db->data->num);
|
db->data->num);
|
||||||
@@ -730,15 +751,7 @@ bad:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
BIO_set_fp(Sout,stdout,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(Sout,stdout,BIO_NOCLOSE|BIO_FP_TEXT);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
Sout = BIO_push(tmpbio, Sout);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req)
|
if (req)
|
||||||
@@ -1034,7 +1047,7 @@ bad:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
BIO_free_all(out);
|
BIO_free(out);
|
||||||
in=NULL;
|
in=NULL;
|
||||||
out=NULL;
|
out=NULL;
|
||||||
if (rename(serialfile,buf[2]) < 0)
|
if (rename(serialfile,buf[2]) < 0)
|
||||||
@@ -1251,9 +1264,9 @@ bad:
|
|||||||
ret=0;
|
ret=0;
|
||||||
err:
|
err:
|
||||||
BIO_free(hex);
|
BIO_free(hex);
|
||||||
BIO_free_all(Cout);
|
BIO_free(Cout);
|
||||||
BIO_free_all(Sout);
|
BIO_free(Sout);
|
||||||
BIO_free_all(out);
|
BIO_free(out);
|
||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
|
|
||||||
sk_X509_pop_free(cert_sk,X509_free);
|
sk_X509_pop_free(cert_sk,X509_free);
|
||||||
@@ -1368,7 +1381,7 @@ static int save_serial(char *serialfile, BIGNUM *serial)
|
|||||||
BIO_puts(out,"\n");
|
BIO_puts(out,"\n");
|
||||||
ret=1;
|
ret=1;
|
||||||
err:
|
err:
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (out != NULL) BIO_free(out);
|
||||||
if (ai != NULL) ASN1_INTEGER_free(ai);
|
if (ai != NULL) ASN1_INTEGER_free(ai);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,12 +108,6 @@ int MAIN(int argc, char **argv)
|
|||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
|
bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
|
||||||
STDout=BIO_new_fp(stdout,BIO_NOCLOSE);
|
STDout=BIO_new_fp(stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
STDout = BIO_push(tmpbio, STDout);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
@@ -201,7 +195,7 @@ err:
|
|||||||
end:
|
end:
|
||||||
if (ctx != NULL) SSL_CTX_free(ctx);
|
if (ctx != NULL) SSL_CTX_free(ctx);
|
||||||
if (ssl != NULL) SSL_free(ssl);
|
if (ssl != NULL) SSL_free(ssl);
|
||||||
if (STDout != NULL) BIO_free_all(STDout);
|
if (STDout != NULL) BIO_free(STDout);
|
||||||
EXIT(ret);
|
EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
20
apps/crl.c
20
apps/crl.c
@@ -122,15 +122,7 @@ int MAIN(int argc, char **argv)
|
|||||||
|
|
||||||
if (bio_out == NULL)
|
if (bio_out == NULL)
|
||||||
if ((bio_out=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_out=BIO_new(BIO_s_file())) != NULL)
|
||||||
{
|
|
||||||
BIO_set_fp(bio_out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(bio_out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
bio_out = BIO_push(tmpbio, bio_out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
informat=FORMAT_PEM;
|
informat=FORMAT_PEM;
|
||||||
outformat=FORMAT_PEM;
|
outformat=FORMAT_PEM;
|
||||||
@@ -322,15 +314,7 @@ bad:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL)
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
if (BIO_write_filename(out,outfile) <= 0)
|
||||||
@@ -356,8 +340,8 @@ bad:
|
|||||||
if (!i) { BIO_printf(bio_err,"unable to write CRL\n"); goto end; }
|
if (!i) { BIO_printf(bio_err,"unable to write CRL\n"); goto end; }
|
||||||
ret=0;
|
ret=0;
|
||||||
end:
|
end:
|
||||||
BIO_free_all(out);
|
BIO_free(out);
|
||||||
BIO_free_all(bio_out);
|
BIO_free(bio_out);
|
||||||
bio_out=NULL;
|
bio_out=NULL;
|
||||||
X509_CRL_free(x);
|
X509_CRL_free(x);
|
||||||
if(store) {
|
if(store) {
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ int MAIN(int argc, char **argv)
|
|||||||
else if (strcmp(*argv,"-certfile") == 0)
|
else if (strcmp(*argv,"-certfile") == 0)
|
||||||
{
|
{
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
if(!certflst) certflst = sk_new_null();
|
if(!certflst) certflst = sk_new(NULL);
|
||||||
sk_push(certflst,*(++argv));
|
sk_push(certflst,*(++argv));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -215,7 +215,7 @@ bad:
|
|||||||
p7s->contents->type=OBJ_nid2obj(NID_pkcs7_data);
|
p7s->contents->type=OBJ_nid2obj(NID_pkcs7_data);
|
||||||
|
|
||||||
if (!ASN1_INTEGER_set(p7s->version,1)) goto end;
|
if (!ASN1_INTEGER_set(p7s->version,1)) goto end;
|
||||||
if ((crl_stack=sk_X509_CRL_new_null()) == NULL) goto end;
|
if ((crl_stack=sk_X509_CRL_new(NULL)) == NULL) goto end;
|
||||||
p7s->crl=crl_stack;
|
p7s->crl=crl_stack;
|
||||||
if (crl != NULL)
|
if (crl != NULL)
|
||||||
{
|
{
|
||||||
@@ -223,7 +223,7 @@ bad:
|
|||||||
crl=NULL; /* now part of p7 for OPENSSL_freeing */
|
crl=NULL; /* now part of p7 for OPENSSL_freeing */
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((cert_stack=sk_X509_new_null()) == NULL) goto end;
|
if ((cert_stack=sk_X509_new(NULL)) == NULL) goto end;
|
||||||
p7s->cert=cert_stack;
|
p7s->cert=cert_stack;
|
||||||
|
|
||||||
if(certflst) for(i = 0; i < sk_num(certflst); i++) {
|
if(certflst) for(i = 0; i < sk_num(certflst); i++) {
|
||||||
@@ -239,15 +239,7 @@ bad:
|
|||||||
sk_free(certflst);
|
sk_free(certflst);
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL)
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
if (BIO_write_filename(out,outfile) <= 0)
|
||||||
@@ -274,7 +266,7 @@ bad:
|
|||||||
ret=0;
|
ret=0;
|
||||||
end:
|
end:
|
||||||
if (in != NULL) BIO_free(in);
|
if (in != NULL) BIO_free(in);
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (out != NULL) BIO_free(out);
|
||||||
if (p7 != NULL) PKCS7_free(p7);
|
if (p7 != NULL) PKCS7_free(p7);
|
||||||
if (crl != NULL) X509_CRL_free(crl);
|
if (crl != NULL) X509_CRL_free(crl);
|
||||||
|
|
||||||
|
|||||||
47
apps/dgst.c
47
apps/dgst.c
@@ -66,6 +66,7 @@
|
|||||||
#include <openssl/objects.h>
|
#include <openssl/objects.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#undef BUFSIZE
|
#undef BUFSIZE
|
||||||
#define BUFSIZE 1024*8
|
#define BUFSIZE 1024*8
|
||||||
@@ -74,12 +75,13 @@
|
|||||||
#define PROG dgst_main
|
#define PROG dgst_main
|
||||||
|
|
||||||
void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, char binout,
|
void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, char binout,
|
||||||
EVP_PKEY *key, unsigned char *sigin, int siglen);
|
EVP_PKEY *key, unsigned char *sigin, unsigned int siglen);
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
unsigned char *buf=NULL;
|
unsigned char *buf=NULL;
|
||||||
int i,err=0;
|
int i,err=0;
|
||||||
const EVP_MD *md=NULL,*m;
|
const EVP_MD *md=NULL,*m;
|
||||||
@@ -96,7 +98,8 @@ int MAIN(int argc, char **argv)
|
|||||||
char out_bin = -1, want_pub = 0, do_verify = 0;
|
char out_bin = -1, want_pub = 0, do_verify = 0;
|
||||||
EVP_PKEY *sigkey = NULL;
|
EVP_PKEY *sigkey = NULL;
|
||||||
unsigned char *sigbuf = NULL;
|
unsigned char *sigbuf = NULL;
|
||||||
int siglen = 0;
|
unsigned int siglen = 0;
|
||||||
|
char *engine=NULL;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
@@ -154,6 +157,11 @@ int MAIN(int argc, char **argv)
|
|||||||
if (--argc < 1) break;
|
if (--argc < 1) break;
|
||||||
sigfile=*(++argv);
|
sigfile=*(++argv);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) break;
|
||||||
|
engine= *(++argv);
|
||||||
|
}
|
||||||
else if (strcmp(*argv,"-hex") == 0)
|
else if (strcmp(*argv,"-hex") == 0)
|
||||||
out_bin = 0;
|
out_bin = 0;
|
||||||
else if (strcmp(*argv,"-binary") == 0)
|
else if (strcmp(*argv,"-binary") == 0)
|
||||||
@@ -190,6 +198,7 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO_printf(bio_err,"-prverify file verify a signature using private key in file\n");
|
BIO_printf(bio_err,"-prverify file verify a signature using private key in file\n");
|
||||||
BIO_printf(bio_err,"-signature file signature to verify\n");
|
BIO_printf(bio_err,"-signature file signature to verify\n");
|
||||||
BIO_printf(bio_err,"-binary output in binary form\n");
|
BIO_printf(bio_err,"-binary output in binary form\n");
|
||||||
|
BIO_printf(bio_err,"-engine e use engine e, possibly a hardware device.\n");
|
||||||
|
|
||||||
BIO_printf(bio_err,"-%3s to use the %s message digest algorithm (default)\n",
|
BIO_printf(bio_err,"-%3s to use the %s message digest algorithm (default)\n",
|
||||||
LN_md5,LN_md5);
|
LN_md5,LN_md5);
|
||||||
@@ -209,6 +218,24 @@ int MAIN(int argc, char **argv)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
in=BIO_new(BIO_s_file());
|
in=BIO_new(BIO_s_file());
|
||||||
bmd=BIO_new(BIO_f_md());
|
bmd=BIO_new(BIO_f_md());
|
||||||
if (debug)
|
if (debug)
|
||||||
@@ -236,15 +263,7 @@ int MAIN(int argc, char **argv)
|
|||||||
if(out_bin)
|
if(out_bin)
|
||||||
out = BIO_new_file(outfile, "wb");
|
out = BIO_new_file(outfile, "wb");
|
||||||
else out = BIO_new_file(outfile, "w");
|
else out = BIO_new_file(outfile, "w");
|
||||||
} else {
|
} else out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!out) {
|
if(!out) {
|
||||||
BIO_printf(bio_err, "Error opening output file %s\n",
|
BIO_printf(bio_err, "Error opening output file %s\n",
|
||||||
@@ -331,7 +350,7 @@ end:
|
|||||||
OPENSSL_free(buf);
|
OPENSSL_free(buf);
|
||||||
}
|
}
|
||||||
if (in != NULL) BIO_free(in);
|
if (in != NULL) BIO_free(in);
|
||||||
BIO_free_all(out);
|
BIO_free(out);
|
||||||
EVP_PKEY_free(sigkey);
|
EVP_PKEY_free(sigkey);
|
||||||
if(sigbuf) OPENSSL_free(sigbuf);
|
if(sigbuf) OPENSSL_free(sigbuf);
|
||||||
if (bmd != NULL) BIO_free(bmd);
|
if (bmd != NULL) BIO_free(bmd);
|
||||||
@@ -339,7 +358,7 @@ end:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, char binout,
|
void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, char binout,
|
||||||
EVP_PKEY *key, unsigned char *sigin, int siglen)
|
EVP_PKEY *key, unsigned char *sigin, unsigned int siglen)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
int i;
|
int i;
|
||||||
@@ -353,7 +372,7 @@ void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, char binout,
|
|||||||
{
|
{
|
||||||
EVP_MD_CTX *ctx;
|
EVP_MD_CTX *ctx;
|
||||||
BIO_get_md_ctx(bp, &ctx);
|
BIO_get_md_ctx(bp, &ctx);
|
||||||
i = EVP_VerifyFinal(ctx, sigin, (unsigned int)siglen, key);
|
i = EVP_VerifyFinal(ctx, sigin, siglen, key);
|
||||||
if(i > 0) BIO_printf(out, "Verified OK\n");
|
if(i > 0) BIO_printf(out, "Verified OK\n");
|
||||||
else if(i == 0) BIO_printf(out, "Verification Failure\n");
|
else if(i == 0) BIO_printf(out, "Verification Failure\n");
|
||||||
else
|
else
|
||||||
|
|||||||
39
apps/dh.c
39
apps/dh.c
@@ -69,6 +69,7 @@
|
|||||||
#include <openssl/dh.h>
|
#include <openssl/dh.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG dh_main
|
#define PROG dh_main
|
||||||
@@ -87,11 +88,12 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
DH *dh=NULL;
|
DH *dh=NULL;
|
||||||
int i,badops=0,text=0;
|
int i,badops=0,text=0;
|
||||||
BIO *in=NULL,*out=NULL;
|
BIO *in=NULL,*out=NULL;
|
||||||
int informat,outformat,check=0,noout=0,C=0,ret=1;
|
int informat,outformat,check=0,noout=0,C=0,ret=1;
|
||||||
char *infile,*outfile,*prog;
|
char *infile,*outfile,*prog,*engine;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
@@ -99,6 +101,7 @@ int MAIN(int argc, char **argv)
|
|||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
||||||
|
|
||||||
|
engine=NULL;
|
||||||
infile=NULL;
|
infile=NULL;
|
||||||
outfile=NULL;
|
outfile=NULL;
|
||||||
informat=FORMAT_PEM;
|
informat=FORMAT_PEM;
|
||||||
@@ -129,6 +132,11 @@ int MAIN(int argc, char **argv)
|
|||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
outfile= *(++argv);
|
outfile= *(++argv);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine= *(++argv);
|
||||||
|
}
|
||||||
else if (strcmp(*argv,"-check") == 0)
|
else if (strcmp(*argv,"-check") == 0)
|
||||||
check=1;
|
check=1;
|
||||||
else if (strcmp(*argv,"-text") == 0)
|
else if (strcmp(*argv,"-text") == 0)
|
||||||
@@ -160,11 +168,30 @@ bad:
|
|||||||
BIO_printf(bio_err," -text print a text form of the DH parameters\n");
|
BIO_printf(bio_err," -text print a text form of the DH parameters\n");
|
||||||
BIO_printf(bio_err," -C Output C code\n");
|
BIO_printf(bio_err," -C Output C code\n");
|
||||||
BIO_printf(bio_err," -noout no output\n");
|
BIO_printf(bio_err," -noout no output\n");
|
||||||
|
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
in=BIO_new(BIO_s_file());
|
in=BIO_new(BIO_s_file());
|
||||||
out=BIO_new(BIO_s_file());
|
out=BIO_new(BIO_s_file());
|
||||||
if ((in == NULL) || (out == NULL))
|
if ((in == NULL) || (out == NULL))
|
||||||
@@ -184,15 +211,7 @@ bad:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (outfile == NULL)
|
if (outfile == NULL)
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
if (BIO_write_filename(out,outfile) <= 0)
|
||||||
@@ -317,7 +336,7 @@ bad:
|
|||||||
ret=0;
|
ret=0;
|
||||||
end:
|
end:
|
||||||
if (in != NULL) BIO_free(in);
|
if (in != NULL) BIO_free(in);
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (out != NULL) BIO_free(out);
|
||||||
if (dh != NULL) DH_free(dh);
|
if (dh != NULL) DH_free(dh);
|
||||||
EXIT(ret);
|
EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -121,6 +121,7 @@
|
|||||||
#include <openssl/dh.h>
|
#include <openssl/dh.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#ifndef NO_DSA
|
#ifndef NO_DSA
|
||||||
#include <openssl/dsa.h>
|
#include <openssl/dsa.h>
|
||||||
@@ -148,6 +149,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
DH *dh=NULL;
|
DH *dh=NULL;
|
||||||
int i,badops=0,text=0;
|
int i,badops=0,text=0;
|
||||||
#ifndef NO_DSA
|
#ifndef NO_DSA
|
||||||
@@ -156,7 +158,7 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO *in=NULL,*out=NULL;
|
BIO *in=NULL,*out=NULL;
|
||||||
int informat,outformat,check=0,noout=0,C=0,ret=1;
|
int informat,outformat,check=0,noout=0,C=0,ret=1;
|
||||||
char *infile,*outfile,*prog;
|
char *infile,*outfile,*prog;
|
||||||
char *inrand=NULL;
|
char *inrand=NULL,*engine=NULL;
|
||||||
int num = 0, g = 0;
|
int num = 0, g = 0;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
@@ -195,6 +197,11 @@ int MAIN(int argc, char **argv)
|
|||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
outfile= *(++argv);
|
outfile= *(++argv);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine= *(++argv);
|
||||||
|
}
|
||||||
else if (strcmp(*argv,"-check") == 0)
|
else if (strcmp(*argv,"-check") == 0)
|
||||||
check=1;
|
check=1;
|
||||||
else if (strcmp(*argv,"-text") == 0)
|
else if (strcmp(*argv,"-text") == 0)
|
||||||
@@ -240,6 +247,7 @@ bad:
|
|||||||
BIO_printf(bio_err," -2 generate parameters using 2 as the generator value\n");
|
BIO_printf(bio_err," -2 generate parameters using 2 as the generator value\n");
|
||||||
BIO_printf(bio_err," -5 generate parameters using 5 as the generator value\n");
|
BIO_printf(bio_err," -5 generate parameters using 5 as the generator value\n");
|
||||||
BIO_printf(bio_err," numbits number of bits in to generate (default 512)\n");
|
BIO_printf(bio_err," numbits number of bits in to generate (default 512)\n");
|
||||||
|
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
||||||
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
||||||
BIO_printf(bio_err," - load the file (or the files in the directory) into\n");
|
BIO_printf(bio_err," - load the file (or the files in the directory) into\n");
|
||||||
BIO_printf(bio_err," the random number generator\n");
|
BIO_printf(bio_err," the random number generator\n");
|
||||||
@@ -249,6 +257,24 @@ bad:
|
|||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
if (g && !num)
|
if (g && !num)
|
||||||
num = DEFBITS;
|
num = DEFBITS;
|
||||||
|
|
||||||
@@ -391,15 +417,7 @@ bad:
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
if (outfile == NULL)
|
if (outfile == NULL)
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
if (BIO_write_filename(out,outfile) <= 0)
|
||||||
@@ -504,7 +522,7 @@ bad:
|
|||||||
ret=0;
|
ret=0;
|
||||||
end:
|
end:
|
||||||
if (in != NULL) BIO_free(in);
|
if (in != NULL) BIO_free(in);
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (out != NULL) BIO_free(out);
|
||||||
if (dh != NULL) DH_free(dh);
|
if (dh != NULL) DH_free(dh);
|
||||||
EXIT(ret);
|
EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|||||||
39
apps/dsa.c
39
apps/dsa.c
@@ -68,6 +68,7 @@
|
|||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG dsa_main
|
#define PROG dsa_main
|
||||||
@@ -87,6 +88,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
int ret=1;
|
int ret=1;
|
||||||
DSA *dsa=NULL;
|
DSA *dsa=NULL;
|
||||||
int i,badops=0;
|
int i,badops=0;
|
||||||
@@ -94,7 +96,7 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO *in=NULL,*out=NULL;
|
BIO *in=NULL,*out=NULL;
|
||||||
int informat,outformat,text=0,noout=0;
|
int informat,outformat,text=0,noout=0;
|
||||||
int pubin = 0, pubout = 0;
|
int pubin = 0, pubout = 0;
|
||||||
char *infile,*outfile,*prog;
|
char *infile,*outfile,*prog,*engine;
|
||||||
char *passargin = NULL, *passargout = NULL;
|
char *passargin = NULL, *passargout = NULL;
|
||||||
char *passin = NULL, *passout = NULL;
|
char *passin = NULL, *passout = NULL;
|
||||||
int modulus=0;
|
int modulus=0;
|
||||||
@@ -105,6 +107,7 @@ int MAIN(int argc, char **argv)
|
|||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
||||||
|
|
||||||
|
engine=NULL;
|
||||||
infile=NULL;
|
infile=NULL;
|
||||||
outfile=NULL;
|
outfile=NULL;
|
||||||
informat=FORMAT_PEM;
|
informat=FORMAT_PEM;
|
||||||
@@ -145,6 +148,11 @@ int MAIN(int argc, char **argv)
|
|||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
passargout= *(++argv);
|
passargout= *(++argv);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine= *(++argv);
|
||||||
|
}
|
||||||
else if (strcmp(*argv,"-noout") == 0)
|
else if (strcmp(*argv,"-noout") == 0)
|
||||||
noout=1;
|
noout=1;
|
||||||
else if (strcmp(*argv,"-text") == 0)
|
else if (strcmp(*argv,"-text") == 0)
|
||||||
@@ -176,6 +184,7 @@ bad:
|
|||||||
BIO_printf(bio_err," -passin arg input file pass phrase source\n");
|
BIO_printf(bio_err," -passin arg input file pass phrase source\n");
|
||||||
BIO_printf(bio_err," -out arg output file\n");
|
BIO_printf(bio_err," -out arg output file\n");
|
||||||
BIO_printf(bio_err," -passout arg output file pass phrase source\n");
|
BIO_printf(bio_err," -passout arg output file pass phrase source\n");
|
||||||
|
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
||||||
BIO_printf(bio_err," -des encrypt PEM output with cbc des\n");
|
BIO_printf(bio_err," -des encrypt PEM output with cbc des\n");
|
||||||
BIO_printf(bio_err," -des3 encrypt PEM output with ede cbc des using 168 bit key\n");
|
BIO_printf(bio_err," -des3 encrypt PEM output with ede cbc des using 168 bit key\n");
|
||||||
#ifndef NO_IDEA
|
#ifndef NO_IDEA
|
||||||
@@ -189,6 +198,24 @@ bad:
|
|||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
|
if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
|
||||||
BIO_printf(bio_err, "Error getting passwords\n");
|
BIO_printf(bio_err, "Error getting passwords\n");
|
||||||
goto end;
|
goto end;
|
||||||
@@ -233,15 +260,7 @@ bad:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL)
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
if (BIO_write_filename(out,outfile) <= 0)
|
||||||
@@ -289,7 +308,7 @@ bad:
|
|||||||
ret=0;
|
ret=0;
|
||||||
end:
|
end:
|
||||||
if(in != NULL) BIO_free(in);
|
if(in != NULL) BIO_free(in);
|
||||||
if(out != NULL) BIO_free_all(out);
|
if(out != NULL) BIO_free(out);
|
||||||
if(dsa != NULL) DSA_free(dsa);
|
if(dsa != NULL) DSA_free(dsa);
|
||||||
if(passin) OPENSSL_free(passin);
|
if(passin) OPENSSL_free(passin);
|
||||||
if(passout) OPENSSL_free(passout);
|
if(passout) OPENSSL_free(passout);
|
||||||
|
|||||||
@@ -69,6 +69,7 @@
|
|||||||
#include <openssl/dsa.h>
|
#include <openssl/dsa.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG dsaparam_main
|
#define PROG dsaparam_main
|
||||||
@@ -90,11 +91,12 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
DSA *dsa=NULL;
|
DSA *dsa=NULL;
|
||||||
int i,badops=0,text=0;
|
int i,badops=0,text=0;
|
||||||
BIO *in=NULL,*out=NULL;
|
BIO *in=NULL,*out=NULL;
|
||||||
int informat,outformat,noout=0,C=0,ret=1;
|
int informat,outformat,noout=0,C=0,ret=1;
|
||||||
char *infile,*outfile,*prog,*inrand=NULL;
|
char *infile,*outfile,*prog,*inrand=NULL,*engine=NULL;
|
||||||
int numbits= -1,num,genkey=0;
|
int numbits= -1,num,genkey=0;
|
||||||
int need_rand=0;
|
int need_rand=0;
|
||||||
|
|
||||||
@@ -205,15 +207,7 @@ bad:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (outfile == NULL)
|
if (outfile == NULL)
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
if (BIO_write_filename(out,outfile) <= 0)
|
||||||
@@ -355,7 +349,7 @@ bad:
|
|||||||
ret=0;
|
ret=0;
|
||||||
end:
|
end:
|
||||||
if (in != NULL) BIO_free(in);
|
if (in != NULL) BIO_free(in);
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (out != NULL) BIO_free(out);
|
||||||
if (dsa != NULL) DSA_free(dsa);
|
if (dsa != NULL) DSA_free(dsa);
|
||||||
EXIT(ret);
|
EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|||||||
37
apps/enc.c
37
apps/enc.c
@@ -70,6 +70,7 @@
|
|||||||
#include <openssl/md5.h>
|
#include <openssl/md5.h>
|
||||||
#endif
|
#endif
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
int set_hex(char *in,unsigned char *out,int size);
|
int set_hex(char *in,unsigned char *out,int size);
|
||||||
#undef SIZE
|
#undef SIZE
|
||||||
@@ -84,6 +85,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
static const char magic[]="Salted__";
|
static const char magic[]="Salted__";
|
||||||
char mbuf[8]; /* should be 1 smaller than magic */
|
char mbuf[8]; /* should be 1 smaller than magic */
|
||||||
char *strbuf=NULL;
|
char *strbuf=NULL;
|
||||||
@@ -101,6 +103,7 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO *in=NULL,*out=NULL,*b64=NULL,*benc=NULL,*rbio=NULL,*wbio=NULL;
|
BIO *in=NULL,*out=NULL,*b64=NULL,*benc=NULL,*rbio=NULL,*wbio=NULL;
|
||||||
#define PROG_NAME_SIZE 16
|
#define PROG_NAME_SIZE 16
|
||||||
char pname[PROG_NAME_SIZE];
|
char pname[PROG_NAME_SIZE];
|
||||||
|
char *engine = NULL;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
@@ -141,6 +144,11 @@ int MAIN(int argc, char **argv)
|
|||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
passarg= *(++argv);
|
passarg= *(++argv);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine= *(++argv);
|
||||||
|
}
|
||||||
else if (strcmp(*argv,"-d") == 0)
|
else if (strcmp(*argv,"-d") == 0)
|
||||||
enc=0;
|
enc=0;
|
||||||
else if (strcmp(*argv,"-p") == 0)
|
else if (strcmp(*argv,"-p") == 0)
|
||||||
@@ -241,6 +249,7 @@ bad:
|
|||||||
BIO_printf(bio_err,"%-14s key/iv in hex is the next argument\n","-K/-iv");
|
BIO_printf(bio_err,"%-14s key/iv in hex is the next argument\n","-K/-iv");
|
||||||
BIO_printf(bio_err,"%-14s print the iv/key (then exit if -P)\n","-[pP]");
|
BIO_printf(bio_err,"%-14s print the iv/key (then exit if -P)\n","-[pP]");
|
||||||
BIO_printf(bio_err,"%-14s buffer size\n","-bufsize <n>");
|
BIO_printf(bio_err,"%-14s buffer size\n","-bufsize <n>");
|
||||||
|
BIO_printf(bio_err,"%-14s use engine e, possibly a hardware device.\n","-engine e");
|
||||||
|
|
||||||
BIO_printf(bio_err,"Cipher Types\n");
|
BIO_printf(bio_err,"Cipher Types\n");
|
||||||
BIO_printf(bio_err,"des : 56 bit key DES encryption\n");
|
BIO_printf(bio_err,"des : 56 bit key DES encryption\n");
|
||||||
@@ -314,6 +323,24 @@ bad:
|
|||||||
argv++;
|
argv++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
if (bufsize != NULL)
|
if (bufsize != NULL)
|
||||||
{
|
{
|
||||||
unsigned long n;
|
unsigned long n;
|
||||||
@@ -416,15 +443,7 @@ bad:
|
|||||||
|
|
||||||
|
|
||||||
if (outf == NULL)
|
if (outf == NULL)
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (BIO_write_filename(out,outf) <= 0)
|
if (BIO_write_filename(out,outf) <= 0)
|
||||||
@@ -592,7 +611,7 @@ end:
|
|||||||
if (strbuf != NULL) OPENSSL_free(strbuf);
|
if (strbuf != NULL) OPENSSL_free(strbuf);
|
||||||
if (buff != NULL) OPENSSL_free(buff);
|
if (buff != NULL) OPENSSL_free(buff);
|
||||||
if (in != NULL) BIO_free(in);
|
if (in != NULL) BIO_free(in);
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (out != NULL) BIO_free(out);
|
||||||
if (benc != NULL) BIO_free(benc);
|
if (benc != NULL) BIO_free(benc);
|
||||||
if (b64 != NULL) BIO_free(b64);
|
if (b64 != NULL) BIO_free(b64);
|
||||||
if(pass) OPENSSL_free(pass);
|
if(pass) OPENSSL_free(pass);
|
||||||
|
|||||||
@@ -91,18 +91,12 @@ int MAIN(int argc, char **argv)
|
|||||||
out=BIO_new(BIO_s_file());
|
out=BIO_new(BIO_s_file());
|
||||||
if ((out != NULL) && BIO_set_fp(out,stdout,BIO_NOCLOSE))
|
if ((out != NULL) && BIO_set_fp(out,stdout,BIO_NOCLOSE))
|
||||||
{
|
{
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
lh_node_stats_bio((LHASH *)ERR_get_string_table(),out);
|
lh_node_stats_bio((LHASH *)ERR_get_string_table(),out);
|
||||||
lh_stats_bio((LHASH *)ERR_get_string_table(),out);
|
lh_stats_bio((LHASH *)ERR_get_string_table(),out);
|
||||||
lh_node_usage_stats_bio((LHASH *)
|
lh_node_usage_stats_bio((LHASH *)
|
||||||
ERR_get_string_table(),out);
|
ERR_get_string_table(),out);
|
||||||
}
|
}
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (out != NULL) BIO_free(out);
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
}
|
}
|
||||||
|
|||||||
43
apps/gendh.c
43
apps/gendh.c
@@ -70,6 +70,7 @@
|
|||||||
#include <openssl/dh.h>
|
#include <openssl/dh.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#define DEFBITS 512
|
#define DEFBITS 512
|
||||||
#undef PROG
|
#undef PROG
|
||||||
@@ -81,11 +82,13 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
DH *dh=NULL;
|
DH *dh=NULL;
|
||||||
int ret=1,num=DEFBITS;
|
int ret=1,num=DEFBITS;
|
||||||
int g=2;
|
int g=2;
|
||||||
char *outfile=NULL;
|
char *outfile=NULL;
|
||||||
char *inrand=NULL;
|
char *inrand=NULL;
|
||||||
|
char *engine=NULL;
|
||||||
BIO *out=NULL;
|
BIO *out=NULL;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
@@ -110,6 +113,11 @@ int MAIN(int argc, char **argv)
|
|||||||
g=3; */
|
g=3; */
|
||||||
else if (strcmp(*argv,"-5") == 0)
|
else if (strcmp(*argv,"-5") == 0)
|
||||||
g=5;
|
g=5;
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine= *(++argv);
|
||||||
|
}
|
||||||
else if (strcmp(*argv,"-rand") == 0)
|
else if (strcmp(*argv,"-rand") == 0)
|
||||||
{
|
{
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
@@ -125,15 +133,34 @@ int MAIN(int argc, char **argv)
|
|||||||
bad:
|
bad:
|
||||||
BIO_printf(bio_err,"usage: gendh [args] [numbits]\n");
|
BIO_printf(bio_err,"usage: gendh [args] [numbits]\n");
|
||||||
BIO_printf(bio_err," -out file - output the key to 'file\n");
|
BIO_printf(bio_err," -out file - output the key to 'file\n");
|
||||||
BIO_printf(bio_err," -2 use 2 as the generator value\n");
|
BIO_printf(bio_err," -2 - use 2 as the generator value\n");
|
||||||
/* BIO_printf(bio_err," -3 use 3 as the generator value\n"); */
|
/* BIO_printf(bio_err," -3 - use 3 as the generator value\n"); */
|
||||||
BIO_printf(bio_err," -5 use 5 as the generator value\n");
|
BIO_printf(bio_err," -5 - use 5 as the generator value\n");
|
||||||
|
BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n");
|
||||||
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
||||||
BIO_printf(bio_err," - load the file (or the files in the directory) into\n");
|
BIO_printf(bio_err," - load the file (or the files in the directory) into\n");
|
||||||
BIO_printf(bio_err," the random number generator\n");
|
BIO_printf(bio_err," the random number generator\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
out=BIO_new(BIO_s_file());
|
out=BIO_new(BIO_s_file());
|
||||||
if (out == NULL)
|
if (out == NULL)
|
||||||
{
|
{
|
||||||
@@ -142,15 +169,7 @@ bad:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL)
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
if (BIO_write_filename(out,outfile) <= 0)
|
||||||
@@ -182,7 +201,7 @@ bad:
|
|||||||
end:
|
end:
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (out != NULL) BIO_free(out);
|
||||||
if (dh != NULL) DH_free(dh);
|
if (dh != NULL) DH_free(dh);
|
||||||
EXIT(ret);
|
EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,6 +68,7 @@
|
|||||||
#include <openssl/dsa.h>
|
#include <openssl/dsa.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#define DEFBITS 512
|
#define DEFBITS 512
|
||||||
#undef PROG
|
#undef PROG
|
||||||
@@ -77,6 +78,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
DSA *dsa=NULL;
|
DSA *dsa=NULL;
|
||||||
int ret=1;
|
int ret=1;
|
||||||
char *outfile=NULL;
|
char *outfile=NULL;
|
||||||
@@ -84,6 +86,7 @@ int MAIN(int argc, char **argv)
|
|||||||
char *passargout = NULL, *passout = NULL;
|
char *passargout = NULL, *passout = NULL;
|
||||||
BIO *out=NULL,*in=NULL;
|
BIO *out=NULL,*in=NULL;
|
||||||
EVP_CIPHER *enc=NULL;
|
EVP_CIPHER *enc=NULL;
|
||||||
|
char *engine=NULL;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
@@ -106,6 +109,11 @@ int MAIN(int argc, char **argv)
|
|||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
passargout= *(++argv);
|
passargout= *(++argv);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine= *(++argv);
|
||||||
|
}
|
||||||
else if (strcmp(*argv,"-rand") == 0)
|
else if (strcmp(*argv,"-rand") == 0)
|
||||||
{
|
{
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
@@ -145,6 +153,7 @@ bad:
|
|||||||
#ifndef NO_IDEA
|
#ifndef NO_IDEA
|
||||||
BIO_printf(bio_err," -idea - encrypt the generated key with IDEA in cbc mode\n");
|
BIO_printf(bio_err," -idea - encrypt the generated key with IDEA in cbc mode\n");
|
||||||
#endif
|
#endif
|
||||||
|
BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n");
|
||||||
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
||||||
BIO_printf(bio_err," - load the file (or the files in the directory) into\n");
|
BIO_printf(bio_err," - load the file (or the files in the directory) into\n");
|
||||||
BIO_printf(bio_err," the random number generator\n");
|
BIO_printf(bio_err," the random number generator\n");
|
||||||
@@ -153,6 +162,24 @@ bad:
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
|
if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
|
||||||
BIO_printf(bio_err, "Error getting password\n");
|
BIO_printf(bio_err, "Error getting password\n");
|
||||||
goto end;
|
goto end;
|
||||||
@@ -178,15 +205,7 @@ bad:
|
|||||||
if (out == NULL) goto end;
|
if (out == NULL) goto end;
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL)
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
if (BIO_write_filename(out,outfile) <= 0)
|
||||||
@@ -217,7 +236,7 @@ end:
|
|||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
if (in != NULL) BIO_free(in);
|
if (in != NULL) BIO_free(in);
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (out != NULL) BIO_free(out);
|
||||||
if (dsa != NULL) DSA_free(dsa);
|
if (dsa != NULL) DSA_free(dsa);
|
||||||
if(passout) OPENSSL_free(passout);
|
if(passout) OPENSSL_free(passout);
|
||||||
EXIT(ret);
|
EXIT(ret);
|
||||||
|
|||||||
@@ -69,6 +69,7 @@
|
|||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#define DEFBITS 512
|
#define DEFBITS 512
|
||||||
#undef PROG
|
#undef PROG
|
||||||
@@ -80,6 +81,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
int ret=1;
|
int ret=1;
|
||||||
RSA *rsa=NULL;
|
RSA *rsa=NULL;
|
||||||
int i,num=DEFBITS;
|
int i,num=DEFBITS;
|
||||||
@@ -88,6 +90,7 @@ int MAIN(int argc, char **argv)
|
|||||||
unsigned long f4=RSA_F4;
|
unsigned long f4=RSA_F4;
|
||||||
char *outfile=NULL;
|
char *outfile=NULL;
|
||||||
char *passargout = NULL, *passout = NULL;
|
char *passargout = NULL, *passout = NULL;
|
||||||
|
char *engine=NULL;
|
||||||
char *inrand=NULL;
|
char *inrand=NULL;
|
||||||
BIO *out=NULL;
|
BIO *out=NULL;
|
||||||
|
|
||||||
@@ -116,6 +119,11 @@ int MAIN(int argc, char **argv)
|
|||||||
f4=3;
|
f4=3;
|
||||||
else if (strcmp(*argv,"-F4") == 0 || strcmp(*argv,"-f4") == 0)
|
else if (strcmp(*argv,"-F4") == 0 || strcmp(*argv,"-f4") == 0)
|
||||||
f4=RSA_F4;
|
f4=RSA_F4;
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine= *(++argv);
|
||||||
|
}
|
||||||
else if (strcmp(*argv,"-rand") == 0)
|
else if (strcmp(*argv,"-rand") == 0)
|
||||||
{
|
{
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
@@ -154,6 +162,7 @@ bad:
|
|||||||
BIO_printf(bio_err," -passout arg output file pass phrase source\n");
|
BIO_printf(bio_err," -passout arg output file pass phrase source\n");
|
||||||
BIO_printf(bio_err," -f4 use F4 (0x10001) for the E value\n");
|
BIO_printf(bio_err," -f4 use F4 (0x10001) for the E value\n");
|
||||||
BIO_printf(bio_err," -3 use 3 for the E value\n");
|
BIO_printf(bio_err," -3 use 3 for the E value\n");
|
||||||
|
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
||||||
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
||||||
BIO_printf(bio_err," load the file (or the files in the directory) into\n");
|
BIO_printf(bio_err," load the file (or the files in the directory) into\n");
|
||||||
BIO_printf(bio_err," the random number generator\n");
|
BIO_printf(bio_err," the random number generator\n");
|
||||||
@@ -167,16 +176,26 @@ bad:
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL)
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
if (BIO_write_filename(out,outfile) <= 0)
|
||||||
@@ -186,7 +205,8 @@ bad:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL)
|
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
|
||||||
|
&& !RAND_status())
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
|
BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
|
||||||
}
|
}
|
||||||
@@ -220,7 +240,7 @@ bad:
|
|||||||
ret=0;
|
ret=0;
|
||||||
err:
|
err:
|
||||||
if (rsa != NULL) RSA_free(rsa);
|
if (rsa != NULL) RSA_free(rsa);
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (out != NULL) BIO_free(out);
|
||||||
if(passout) OPENSSL_free(passout);
|
if(passout) OPENSSL_free(passout);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
|
|||||||
15
apps/nseq.c
15
apps/nseq.c
@@ -119,18 +119,11 @@ int MAIN(int argc, char **argv)
|
|||||||
"Can't open output file %s\n", outfile);
|
"Can't open output file %s\n", outfile);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
} else {
|
} else out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
if (toseq) {
|
if (toseq) {
|
||||||
seq = NETSCAPE_CERT_SEQUENCE_new();
|
seq = NETSCAPE_CERT_SEQUENCE_new();
|
||||||
seq->certs = sk_X509_new_null();
|
seq->certs = sk_X509_new(NULL);
|
||||||
while((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL)))
|
while((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL)))
|
||||||
sk_X509_push(seq->certs,x509);
|
sk_X509_push(seq->certs,x509);
|
||||||
|
|
||||||
@@ -159,7 +152,7 @@ int MAIN(int argc, char **argv)
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
end:
|
end:
|
||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
BIO_free_all(out);
|
BIO_free(out);
|
||||||
NETSCAPE_CERT_SEQUENCE_free(seq);
|
NETSCAPE_CERT_SEQUENCE_free(seq);
|
||||||
|
|
||||||
EXIT(ret);
|
EXIT(ret);
|
||||||
|
|||||||
@@ -238,19 +238,13 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
|
|||||||
else if ((strncmp(argv[0],"no-",3)) == 0)
|
else if ((strncmp(argv[0],"no-",3)) == 0)
|
||||||
{
|
{
|
||||||
BIO *bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
|
BIO *bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
bio_stdout = BIO_push(tmpbio, bio_stdout);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
f.name=argv[0]+3;
|
f.name=argv[0]+3;
|
||||||
ret = (lh_retrieve(prog,&f) != NULL);
|
ret = (lh_retrieve(prog,&f) != NULL);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
BIO_printf(bio_stdout, "%s\n", argv[0]);
|
BIO_printf(bio_stdout, "%s\n", argv[0]);
|
||||||
else
|
else
|
||||||
BIO_printf(bio_stdout, "%s\n", argv[0]+3);
|
BIO_printf(bio_stdout, "%s\n", argv[0]+3);
|
||||||
BIO_free_all(bio_stdout);
|
BIO_free(bio_stdout);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
else if ((strcmp(argv[0],"quit") == 0) ||
|
else if ((strcmp(argv[0],"quit") == 0) ||
|
||||||
@@ -275,17 +269,11 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
|
|||||||
else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */
|
else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */
|
||||||
list_type = FUNC_TYPE_CIPHER;
|
list_type = FUNC_TYPE_CIPHER;
|
||||||
bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
|
bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
bio_stdout = BIO_push(tmpbio, bio_stdout);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (fp=functions; fp->name != NULL; fp++)
|
for (fp=functions; fp->name != NULL; fp++)
|
||||||
if (fp->type == list_type)
|
if (fp->type == list_type)
|
||||||
BIO_printf(bio_stdout, "%s\n", fp->name);
|
BIO_printf(bio_stdout, "%s\n", fp->name);
|
||||||
BIO_free_all(bio_stdout);
|
BIO_free(bio_stdout);
|
||||||
ret=0;
|
ret=0;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,12 +81,6 @@ int MAIN(int argc, char **argv)
|
|||||||
if (out == NULL)
|
if (out == NULL)
|
||||||
goto err;
|
goto err;
|
||||||
BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
|
BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
badopt = 0, opt_done = 0;
|
badopt = 0, opt_done = 0;
|
||||||
i = 0;
|
i = 0;
|
||||||
@@ -282,7 +276,7 @@ err:
|
|||||||
if (in)
|
if (in)
|
||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
if (out)
|
if (out)
|
||||||
BIO_free_all(out);
|
BIO_free(out);
|
||||||
EXIT(ret);
|
EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -66,6 +66,7 @@
|
|||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
#include <openssl/pkcs12.h>
|
#include <openssl/pkcs12.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#define PROG pkcs12_main
|
#define PROG pkcs12_main
|
||||||
|
|
||||||
@@ -92,6 +93,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
char *infile=NULL, *outfile=NULL, *keyname = NULL;
|
char *infile=NULL, *outfile=NULL, *keyname = NULL;
|
||||||
char *certfile=NULL;
|
char *certfile=NULL;
|
||||||
BIO *in=NULL, *out = NULL, *inkey = NULL, *certsin = NULL;
|
BIO *in=NULL, *out = NULL, *inkey = NULL, *certsin = NULL;
|
||||||
@@ -118,6 +120,7 @@ int MAIN(int argc, char **argv)
|
|||||||
char *passin = NULL, *passout = NULL;
|
char *passin = NULL, *passout = NULL;
|
||||||
char *inrand = NULL;
|
char *inrand = NULL;
|
||||||
char *CApath = NULL, *CAfile = NULL;
|
char *CApath = NULL, *CAfile = NULL;
|
||||||
|
char *engine=NULL;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
@@ -197,7 +200,7 @@ int MAIN(int argc, char **argv)
|
|||||||
} else if (!strcmp (*args, "-caname")) {
|
} else if (!strcmp (*args, "-caname")) {
|
||||||
if (args[1]) {
|
if (args[1]) {
|
||||||
args++;
|
args++;
|
||||||
if (!canames) canames = sk_new_null();
|
if (!canames) canames = sk_new(NULL);
|
||||||
sk_push(canames, *args);
|
sk_push(canames, *args);
|
||||||
} else badarg = 1;
|
} else badarg = 1;
|
||||||
} else if (!strcmp (*args, "-in")) {
|
} else if (!strcmp (*args, "-in")) {
|
||||||
@@ -236,6 +239,11 @@ int MAIN(int argc, char **argv)
|
|||||||
args++;
|
args++;
|
||||||
CAfile = *args;
|
CAfile = *args;
|
||||||
} else badarg = 1;
|
} else badarg = 1;
|
||||||
|
} else if (!strcmp(*args,"-engine")) {
|
||||||
|
if (args[1]) {
|
||||||
|
args++;
|
||||||
|
engine = *args;
|
||||||
|
} else badarg = 1;
|
||||||
} else badarg = 1;
|
} else badarg = 1;
|
||||||
|
|
||||||
} else badarg = 1;
|
} else badarg = 1;
|
||||||
@@ -279,12 +287,27 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO_printf (bio_err, "-password p set import/export password source\n");
|
BIO_printf (bio_err, "-password p set import/export password source\n");
|
||||||
BIO_printf (bio_err, "-passin p input file pass phrase source\n");
|
BIO_printf (bio_err, "-passin p input file pass phrase source\n");
|
||||||
BIO_printf (bio_err, "-passout p output file pass phrase source\n");
|
BIO_printf (bio_err, "-passout p output file pass phrase source\n");
|
||||||
|
BIO_printf (bio_err, "-engine e use engine e, possibly a hardware device.\n");
|
||||||
BIO_printf(bio_err, "-rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
BIO_printf(bio_err, "-rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
||||||
BIO_printf(bio_err, " load the file (or the files in the directory) into\n");
|
BIO_printf(bio_err, " load the file (or the files in the directory) into\n");
|
||||||
BIO_printf(bio_err, " the random number generator\n");
|
BIO_printf(bio_err, " the random number generator\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engine != NULL) {
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL) {
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n", engine);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL)) {
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
if(passarg) {
|
if(passarg) {
|
||||||
if(export_cert) passargout = passarg;
|
if(export_cert) passargout = passarg;
|
||||||
else passargin = passarg;
|
else passargin = passarg;
|
||||||
@@ -350,15 +373,8 @@ int MAIN(int argc, char **argv)
|
|||||||
CRYPTO_push_info("write files");
|
CRYPTO_push_info("write files");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!outfile) {
|
if (!outfile) out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
else out = BIO_new_file(outfile, "wb");
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
} else out = BIO_new_file(outfile, "wb");
|
|
||||||
if (!out) {
|
if (!out) {
|
||||||
BIO_printf(bio_err, "Error opening output file %s\n",
|
BIO_printf(bio_err, "Error opening output file %s\n",
|
||||||
outfile ? outfile : "<stdout>");
|
outfile ? outfile : "<stdout>");
|
||||||
@@ -411,7 +427,7 @@ int MAIN(int argc, char **argv)
|
|||||||
CRYPTO_push_info("reading certs from input");
|
CRYPTO_push_info("reading certs from input");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
certs = sk_X509_new_null();
|
certs = sk_X509_new(NULL);
|
||||||
|
|
||||||
/* Load in all certs in input file */
|
/* Load in all certs in input file */
|
||||||
if(!cert_load(in, certs)) {
|
if(!cert_load(in, certs)) {
|
||||||
@@ -443,7 +459,7 @@ int MAIN(int argc, char **argv)
|
|||||||
CRYPTO_push_info("reading certs from certfile");
|
CRYPTO_push_info("reading certs from certfile");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bags = sk_PKCS12_SAFEBAG_new_null ();
|
bags = sk_PKCS12_SAFEBAG_new (NULL);
|
||||||
|
|
||||||
/* Add any more certificates asked for */
|
/* Add any more certificates asked for */
|
||||||
if (certsin) {
|
if (certsin) {
|
||||||
@@ -534,7 +550,7 @@ int MAIN(int argc, char **argv)
|
|||||||
goto export_end;
|
goto export_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
safes = sk_PKCS7_new_null ();
|
safes = sk_PKCS7_new (NULL);
|
||||||
sk_PKCS7_push (safes, authsafe);
|
sk_PKCS7_push (safes, authsafe);
|
||||||
|
|
||||||
#ifdef CRYPTO_MDEBUG
|
#ifdef CRYPTO_MDEBUG
|
||||||
@@ -550,7 +566,7 @@ int MAIN(int argc, char **argv)
|
|||||||
p8 = NULL;
|
p8 = NULL;
|
||||||
if (name) PKCS12_add_friendlyname (bag, name, -1);
|
if (name) PKCS12_add_friendlyname (bag, name, -1);
|
||||||
PKCS12_add_localkeyid (bag, keyid, keyidlen);
|
PKCS12_add_localkeyid (bag, keyid, keyidlen);
|
||||||
bags = sk_PKCS12_SAFEBAG_new_null();
|
bags = sk_PKCS12_SAFEBAG_new(NULL);
|
||||||
sk_PKCS12_SAFEBAG_push (bags, bag);
|
sk_PKCS12_SAFEBAG_push (bags, bag);
|
||||||
|
|
||||||
#ifdef CRYPTO_MDEBUG
|
#ifdef CRYPTO_MDEBUG
|
||||||
@@ -664,7 +680,7 @@ int MAIN(int argc, char **argv)
|
|||||||
CRYPTO_remove_all_info();
|
CRYPTO_remove_all_info();
|
||||||
#endif
|
#endif
|
||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
BIO_free_all(out);
|
BIO_free(out);
|
||||||
if (canames) sk_free(canames);
|
if (canames) sk_free(canames);
|
||||||
if(passin) OPENSSL_free(passin);
|
if(passin) OPENSSL_free(passin);
|
||||||
if(passout) OPENSSL_free(passout);
|
if(passout) OPENSSL_free(passout);
|
||||||
@@ -887,14 +903,14 @@ int print_attribs (BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst, char *name)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case V_ASN1_OCTET_STRING:
|
case V_ASN1_OCTET_STRING:
|
||||||
hex_prin(out, av->value.octet_string->data,
|
hex_prin(out, av->value.bit_string->data,
|
||||||
av->value.octet_string->length);
|
av->value.bit_string->length);
|
||||||
BIO_printf(out, "\n");
|
BIO_printf(out, "\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case V_ASN1_BIT_STRING:
|
case V_ASN1_BIT_STRING:
|
||||||
hex_prin(out, av->value.bit_string->data,
|
hex_prin(out, av->value.octet_string->data,
|
||||||
av->value.bit_string->length);
|
av->value.octet_string->length);
|
||||||
BIO_printf(out, "\n");
|
BIO_printf(out, "\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
37
apps/pkcs7.c
37
apps/pkcs7.c
@@ -67,6 +67,7 @@
|
|||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/pkcs7.h>
|
#include <openssl/pkcs7.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG pkcs7_main
|
#define PROG pkcs7_main
|
||||||
@@ -82,6 +83,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
PKCS7 *p7=NULL;
|
PKCS7 *p7=NULL;
|
||||||
int i,badops=0;
|
int i,badops=0;
|
||||||
BIO *in=NULL,*out=NULL;
|
BIO *in=NULL,*out=NULL;
|
||||||
@@ -89,6 +91,7 @@ int MAIN(int argc, char **argv)
|
|||||||
char *infile,*outfile,*prog;
|
char *infile,*outfile,*prog;
|
||||||
int print_certs=0,text=0,noout=0;
|
int print_certs=0,text=0,noout=0;
|
||||||
int ret=0;
|
int ret=0;
|
||||||
|
char *engine=NULL;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
@@ -132,6 +135,11 @@ int MAIN(int argc, char **argv)
|
|||||||
text=1;
|
text=1;
|
||||||
else if (strcmp(*argv,"-print_certs") == 0)
|
else if (strcmp(*argv,"-print_certs") == 0)
|
||||||
print_certs=1;
|
print_certs=1;
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine= *(++argv);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
||||||
@@ -154,11 +162,30 @@ bad:
|
|||||||
BIO_printf(bio_err," -print_certs print any certs or crl in the input\n");
|
BIO_printf(bio_err," -print_certs print any certs or crl in the input\n");
|
||||||
BIO_printf(bio_err," -text print full details of certificates\n");
|
BIO_printf(bio_err," -text print full details of certificates\n");
|
||||||
BIO_printf(bio_err," -noout don't output encoded data\n");
|
BIO_printf(bio_err," -noout don't output encoded data\n");
|
||||||
|
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
||||||
EXIT(1);
|
EXIT(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
in=BIO_new(BIO_s_file());
|
in=BIO_new(BIO_s_file());
|
||||||
out=BIO_new(BIO_s_file());
|
out=BIO_new(BIO_s_file());
|
||||||
if ((in == NULL) || (out == NULL))
|
if ((in == NULL) || (out == NULL))
|
||||||
@@ -196,15 +223,7 @@ bad:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL)
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
if (BIO_write_filename(out,outfile) <= 0)
|
||||||
@@ -288,6 +307,6 @@ bad:
|
|||||||
end:
|
end:
|
||||||
if (p7 != NULL) PKCS7_free(p7);
|
if (p7 != NULL) PKCS7_free(p7);
|
||||||
if (in != NULL) BIO_free(in);
|
if (in != NULL) BIO_free(in);
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (out != NULL) BIO_free(out);
|
||||||
EXIT(ret);
|
EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|||||||
45
apps/pkcs8.c
45
apps/pkcs8.c
@@ -62,6 +62,7 @@
|
|||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
#include <openssl/pkcs12.h>
|
#include <openssl/pkcs12.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#include "apps.h"
|
#include "apps.h"
|
||||||
#define PROG pkcs8_main
|
#define PROG pkcs8_main
|
||||||
@@ -70,6 +71,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
char **args, *infile = NULL, *outfile = NULL;
|
char **args, *infile = NULL, *outfile = NULL;
|
||||||
char *passargin = NULL, *passargout = NULL;
|
char *passargin = NULL, *passargout = NULL;
|
||||||
BIO *in = NULL, *out = NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
@@ -85,9 +87,13 @@ int MAIN(int argc, char **argv)
|
|||||||
EVP_PKEY *pkey;
|
EVP_PKEY *pkey;
|
||||||
char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL;
|
char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL;
|
||||||
int badarg = 0;
|
int badarg = 0;
|
||||||
|
char *engine=NULL;
|
||||||
|
|
||||||
if (bio_err == NULL) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
|
if (bio_err == NULL) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
|
||||||
|
|
||||||
informat=FORMAT_PEM;
|
informat=FORMAT_PEM;
|
||||||
outformat=FORMAT_PEM;
|
outformat=FORMAT_PEM;
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
OpenSSL_add_all_algorithms();
|
OpenSSL_add_all_algorithms();
|
||||||
args = argv + 1;
|
args = argv + 1;
|
||||||
@@ -138,6 +144,11 @@ int MAIN(int argc, char **argv)
|
|||||||
if (!args[1]) goto bad;
|
if (!args[1]) goto bad;
|
||||||
passargout= *(++args);
|
passargout= *(++args);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*args,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (!args[1]) goto bad;
|
||||||
|
engine= *(++args);
|
||||||
|
}
|
||||||
else if (!strcmp (*args, "-in")) {
|
else if (!strcmp (*args, "-in")) {
|
||||||
if (args[1]) {
|
if (args[1]) {
|
||||||
args++;
|
args++;
|
||||||
@@ -170,9 +181,28 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO_printf(bio_err, "-nocrypt use or expect unencrypted private key\n");
|
BIO_printf(bio_err, "-nocrypt use or expect unencrypted private key\n");
|
||||||
BIO_printf(bio_err, "-v2 alg use PKCS#5 v2.0 and cipher \"alg\"\n");
|
BIO_printf(bio_err, "-v2 alg use PKCS#5 v2.0 and cipher \"alg\"\n");
|
||||||
BIO_printf(bio_err, "-v1 obj use PKCS#5 v1.5 and cipher \"alg\"\n");
|
BIO_printf(bio_err, "-v1 obj use PKCS#5 v1.5 and cipher \"alg\"\n");
|
||||||
|
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
|
if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
|
||||||
BIO_printf(bio_err, "Error getting passwords\n");
|
BIO_printf(bio_err, "Error getting passwords\n");
|
||||||
return (1);
|
return (1);
|
||||||
@@ -194,15 +224,8 @@ int MAIN(int argc, char **argv)
|
|||||||
"Can't open output file %s\n", outfile);
|
"Can't open output file %s\n", outfile);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
} else {
|
} else out = BIO_new_fp (stdout, BIO_NOCLOSE);
|
||||||
out = BIO_new_fp (stdout, BIO_NOCLOSE);
|
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
if (topk8) {
|
if (topk8) {
|
||||||
if(informat == FORMAT_PEM)
|
if(informat == FORMAT_PEM)
|
||||||
pkey = PEM_read_bio_PrivateKey(in, NULL, NULL, passin);
|
pkey = PEM_read_bio_PrivateKey(in, NULL, NULL, passin);
|
||||||
@@ -260,7 +283,7 @@ int MAIN(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
PKCS8_PRIV_KEY_INFO_free (p8inf);
|
PKCS8_PRIV_KEY_INFO_free (p8inf);
|
||||||
EVP_PKEY_free(pkey);
|
EVP_PKEY_free(pkey);
|
||||||
BIO_free_all(out);
|
BIO_free(out);
|
||||||
if(passin) OPENSSL_free(passin);
|
if(passin) OPENSSL_free(passin);
|
||||||
if(passout) OPENSSL_free(passout);
|
if(passout) OPENSSL_free(passout);
|
||||||
return (0);
|
return (0);
|
||||||
@@ -343,7 +366,7 @@ int MAIN(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
EVP_PKEY_free(pkey);
|
EVP_PKEY_free(pkey);
|
||||||
BIO_free_all(out);
|
BIO_free(out);
|
||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
if(passin) OPENSSL_free(passin);
|
if(passin) OPENSSL_free(passin);
|
||||||
if(passout) OPENSSL_free(passout);
|
if(passout) OPENSSL_free(passout);
|
||||||
|
|||||||
37
apps/rand.c
37
apps/rand.c
@@ -9,6 +9,7 @@
|
|||||||
#include <openssl/bio.h>
|
#include <openssl/bio.h>
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
#include <openssl/rand.h>
|
#include <openssl/rand.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG rand_main
|
#define PROG rand_main
|
||||||
@@ -23,6 +24,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
int i, r, ret = 1;
|
int i, r, ret = 1;
|
||||||
int badopt;
|
int badopt;
|
||||||
char *outfile = NULL;
|
char *outfile = NULL;
|
||||||
@@ -30,6 +32,7 @@ int MAIN(int argc, char **argv)
|
|||||||
int base64 = 0;
|
int base64 = 0;
|
||||||
BIO *out = NULL;
|
BIO *out = NULL;
|
||||||
int num = -1;
|
int num = -1;
|
||||||
|
char *engine=NULL;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
@@ -48,6 +51,13 @@ int MAIN(int argc, char **argv)
|
|||||||
else
|
else
|
||||||
badopt = 1;
|
badopt = 1;
|
||||||
}
|
}
|
||||||
|
if (strcmp(argv[i], "-engine") == 0)
|
||||||
|
{
|
||||||
|
if ((argv[i+1] != NULL) && (engine == NULL))
|
||||||
|
engine = argv[++i];
|
||||||
|
else
|
||||||
|
badopt = 1;
|
||||||
|
}
|
||||||
else if (strcmp(argv[i], "-rand") == 0)
|
else if (strcmp(argv[i], "-rand") == 0)
|
||||||
{
|
{
|
||||||
if ((argv[i+1] != NULL) && (inrand == NULL))
|
if ((argv[i+1] != NULL) && (inrand == NULL))
|
||||||
@@ -85,11 +95,30 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO_printf(bio_err, "Usage: rand [options] num\n");
|
BIO_printf(bio_err, "Usage: rand [options] num\n");
|
||||||
BIO_printf(bio_err, "where options are\n");
|
BIO_printf(bio_err, "where options are\n");
|
||||||
BIO_printf(bio_err, "-out file - write to file\n");
|
BIO_printf(bio_err, "-out file - write to file\n");
|
||||||
|
BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n");
|
||||||
BIO_printf(bio_err, "-rand file%cfile%c... - seed PRNG from files\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
BIO_printf(bio_err, "-rand file%cfile%c... - seed PRNG from files\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
||||||
BIO_printf(bio_err, "-base64 - encode output\n");
|
BIO_printf(bio_err, "-base64 - encode output\n");
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
app_RAND_load_file(NULL, bio_err, (inrand != NULL));
|
app_RAND_load_file(NULL, bio_err, (inrand != NULL));
|
||||||
if (inrand != NULL)
|
if (inrand != NULL)
|
||||||
BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
|
BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
|
||||||
@@ -101,15 +130,7 @@ int MAIN(int argc, char **argv)
|
|||||||
if (outfile != NULL)
|
if (outfile != NULL)
|
||||||
r = BIO_write_filename(out, outfile);
|
r = BIO_write_filename(out, outfile);
|
||||||
else
|
else
|
||||||
{
|
|
||||||
r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
|
r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
if (r <= 0)
|
if (r <= 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
|||||||
58
apps/req.c
58
apps/req.c
@@ -73,6 +73,7 @@
|
|||||||
#include <openssl/x509v3.h>
|
#include <openssl/x509v3.h>
|
||||||
#include <openssl/objects.h>
|
#include <openssl/objects.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#define SECTION "req"
|
#define SECTION "req"
|
||||||
|
|
||||||
@@ -140,6 +141,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
#ifndef NO_DSA
|
#ifndef NO_DSA
|
||||||
DSA *dsa_params=NULL;
|
DSA *dsa_params=NULL;
|
||||||
#endif
|
#endif
|
||||||
@@ -152,6 +154,7 @@ int MAIN(int argc, char **argv)
|
|||||||
int informat,outformat,verify=0,noout=0,text=0,keyform=FORMAT_PEM;
|
int informat,outformat,verify=0,noout=0,text=0,keyform=FORMAT_PEM;
|
||||||
int nodes=0,kludge=0,newhdr=0;
|
int nodes=0,kludge=0,newhdr=0;
|
||||||
char *infile,*outfile,*prog,*keyfile=NULL,*template=NULL,*keyout=NULL;
|
char *infile,*outfile,*prog,*keyfile=NULL,*template=NULL,*keyout=NULL;
|
||||||
|
char *engine=NULL;
|
||||||
char *extensions = NULL;
|
char *extensions = NULL;
|
||||||
char *req_exts = NULL;
|
char *req_exts = NULL;
|
||||||
EVP_CIPHER *cipher=NULL;
|
EVP_CIPHER *cipher=NULL;
|
||||||
@@ -195,6 +198,11 @@ int MAIN(int argc, char **argv)
|
|||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
outformat=str2fmt(*(++argv));
|
outformat=str2fmt(*(++argv));
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine= *(++argv);
|
||||||
|
}
|
||||||
else if (strcmp(*argv,"-key") == 0)
|
else if (strcmp(*argv,"-key") == 0)
|
||||||
{
|
{
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
@@ -375,6 +383,7 @@ bad:
|
|||||||
BIO_printf(bio_err," -verify verify signature on REQ\n");
|
BIO_printf(bio_err," -verify verify signature on REQ\n");
|
||||||
BIO_printf(bio_err," -modulus RSA modulus\n");
|
BIO_printf(bio_err," -modulus RSA modulus\n");
|
||||||
BIO_printf(bio_err," -nodes don't encrypt the output key\n");
|
BIO_printf(bio_err," -nodes don't encrypt the output key\n");
|
||||||
|
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
||||||
BIO_printf(bio_err," -key file use the private key contained in file\n");
|
BIO_printf(bio_err," -key file use the private key contained in file\n");
|
||||||
BIO_printf(bio_err," -keyform arg key file format\n");
|
BIO_printf(bio_err," -keyform arg key file format\n");
|
||||||
BIO_printf(bio_err," -keyout arg file to send the key to\n");
|
BIO_printf(bio_err," -keyout arg file to send the key to\n");
|
||||||
@@ -522,7 +531,36 @@ bad:
|
|||||||
if ((in == NULL) || (out == NULL))
|
if ((in == NULL) || (out == NULL))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
if (keyfile != NULL)
|
if (keyfile != NULL)
|
||||||
|
{
|
||||||
|
if (keyform == FORMAT_ENGINE)
|
||||||
|
{
|
||||||
|
if (!e)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"no engine specified\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
pkey = ENGINE_load_private_key(e, keyfile, NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
if (BIO_read_filename(in,keyfile) <= 0)
|
if (BIO_read_filename(in,keyfile) <= 0)
|
||||||
{
|
{
|
||||||
@@ -534,13 +572,15 @@ bad:
|
|||||||
pkey=d2i_PrivateKey_bio(in,NULL);
|
pkey=d2i_PrivateKey_bio(in,NULL);
|
||||||
else if (keyform == FORMAT_PEM)
|
else if (keyform == FORMAT_PEM)
|
||||||
{
|
{
|
||||||
pkey=PEM_read_bio_PrivateKey(in,NULL,NULL,passin);
|
pkey=PEM_read_bio_PrivateKey(in,NULL,NULL,
|
||||||
|
passin);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"bad input format specified for X509 request\n");
|
BIO_printf(bio_err,"bad input format specified for X509 request\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (pkey == NULL)
|
if (pkey == NULL)
|
||||||
{
|
{
|
||||||
@@ -609,12 +649,6 @@ bad:
|
|||||||
{
|
{
|
||||||
BIO_printf(bio_err,"writing new private key to stdout\n");
|
BIO_printf(bio_err,"writing new private key to stdout\n");
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -810,15 +844,7 @@ loop:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL)
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((keyout != NULL) && (strcmp(outfile,keyout) == 0))
|
if ((keyout != NULL) && (strcmp(outfile,keyout) == 0))
|
||||||
@@ -904,7 +930,7 @@ end:
|
|||||||
}
|
}
|
||||||
if ((req_conf != NULL) && (req_conf != config)) CONF_free(req_conf);
|
if ((req_conf != NULL) && (req_conf != config)) CONF_free(req_conf);
|
||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
BIO_free_all(out);
|
BIO_free(out);
|
||||||
EVP_PKEY_free(pkey);
|
EVP_PKEY_free(pkey);
|
||||||
X509_REQ_free(req);
|
X509_REQ_free(req);
|
||||||
X509_free(x509ss);
|
X509_free(x509ss);
|
||||||
|
|||||||
37
apps/rsa.c
37
apps/rsa.c
@@ -68,6 +68,7 @@
|
|||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG rsa_main
|
#define PROG rsa_main
|
||||||
@@ -90,6 +91,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
int ret=1;
|
int ret=1;
|
||||||
RSA *rsa=NULL;
|
RSA *rsa=NULL;
|
||||||
int i,badops=0, sgckey=0;
|
int i,badops=0, sgckey=0;
|
||||||
@@ -100,6 +102,7 @@ int MAIN(int argc, char **argv)
|
|||||||
char *infile,*outfile,*prog;
|
char *infile,*outfile,*prog;
|
||||||
char *passargin = NULL, *passargout = NULL;
|
char *passargin = NULL, *passargout = NULL;
|
||||||
char *passin = NULL, *passout = NULL;
|
char *passin = NULL, *passout = NULL;
|
||||||
|
char *engine=NULL;
|
||||||
int modulus=0;
|
int modulus=0;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
@@ -148,6 +151,11 @@ int MAIN(int argc, char **argv)
|
|||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
passargout= *(++argv);
|
passargout= *(++argv);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine= *(++argv);
|
||||||
|
}
|
||||||
else if (strcmp(*argv,"-sgckey") == 0)
|
else if (strcmp(*argv,"-sgckey") == 0)
|
||||||
sgckey=1;
|
sgckey=1;
|
||||||
else if (strcmp(*argv,"-pubin") == 0)
|
else if (strcmp(*argv,"-pubin") == 0)
|
||||||
@@ -195,11 +203,30 @@ bad:
|
|||||||
BIO_printf(bio_err," -check verify key consistency\n");
|
BIO_printf(bio_err," -check verify key consistency\n");
|
||||||
BIO_printf(bio_err," -pubin expect a public key in input file\n");
|
BIO_printf(bio_err," -pubin expect a public key in input file\n");
|
||||||
BIO_printf(bio_err," -pubout output a public key\n");
|
BIO_printf(bio_err," -pubout output a public key\n");
|
||||||
|
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
|
if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
|
||||||
BIO_printf(bio_err, "Error getting passwords\n");
|
BIO_printf(bio_err, "Error getting passwords\n");
|
||||||
goto end;
|
goto end;
|
||||||
@@ -278,15 +305,7 @@ bad:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL)
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
if (BIO_write_filename(out,outfile) <= 0)
|
||||||
@@ -385,7 +404,7 @@ bad:
|
|||||||
ret=0;
|
ret=0;
|
||||||
end:
|
end:
|
||||||
if(in != NULL) BIO_free(in);
|
if(in != NULL) BIO_free(in);
|
||||||
if(out != NULL) BIO_free_all(out);
|
if(out != NULL) BIO_free(out);
|
||||||
if(rsa != NULL) RSA_free(rsa);
|
if(rsa != NULL) RSA_free(rsa);
|
||||||
if(passin) OPENSSL_free(passin);
|
if(passin) OPENSSL_free(passin);
|
||||||
if(passout) OPENSSL_free(passout);
|
if(passout) OPENSSL_free(passout);
|
||||||
|
|||||||
@@ -59,6 +59,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#define RSA_SIGN 1
|
#define RSA_SIGN 1
|
||||||
#define RSA_VERIFY 2
|
#define RSA_VERIFY 2
|
||||||
@@ -79,6 +80,7 @@ int MAIN(int argc, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
BIO *in = NULL, *out = NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
char *infile = NULL, *outfile = NULL;
|
char *infile = NULL, *outfile = NULL;
|
||||||
char *keyfile = NULL;
|
char *keyfile = NULL;
|
||||||
@@ -92,6 +94,7 @@ int MAIN(int argc, char **argv)
|
|||||||
unsigned char *rsa_in = NULL, *rsa_out = NULL, pad;
|
unsigned char *rsa_in = NULL, *rsa_out = NULL, pad;
|
||||||
int rsa_inlen, rsa_outlen = 0;
|
int rsa_inlen, rsa_outlen = 0;
|
||||||
int keysize;
|
int keysize;
|
||||||
|
char *engine=NULL;
|
||||||
|
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
|
|
||||||
@@ -114,6 +117,9 @@ int MAIN(int argc, char **argv)
|
|||||||
} else if(!strcmp(*argv, "-inkey")) {
|
} else if(!strcmp(*argv, "-inkey")) {
|
||||||
if (--argc < 1) badarg = 1;
|
if (--argc < 1) badarg = 1;
|
||||||
keyfile = *(++argv);
|
keyfile = *(++argv);
|
||||||
|
} else if(!strcmp(*argv, "-engine")) {
|
||||||
|
if (--argc < 1) badarg = 1;
|
||||||
|
engine = *(++argv);
|
||||||
} else if(!strcmp(*argv, "-pubin")) {
|
} else if(!strcmp(*argv, "-pubin")) {
|
||||||
key_type = KEY_PUBKEY;
|
key_type = KEY_PUBKEY;
|
||||||
} else if(!strcmp(*argv, "-certin")) {
|
} else if(!strcmp(*argv, "-certin")) {
|
||||||
@@ -148,6 +154,24 @@ int MAIN(int argc, char **argv)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
/* FIXME: seed PRNG only if needed */
|
/* FIXME: seed PRNG only if needed */
|
||||||
app_RAND_load_file(NULL, bio_err, 0);
|
app_RAND_load_file(NULL, bio_err, 0);
|
||||||
|
|
||||||
@@ -198,15 +222,7 @@ int MAIN(int argc, char **argv)
|
|||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
} else {
|
} else out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
keysize = RSA_size(rsa);
|
keysize = RSA_size(rsa);
|
||||||
|
|
||||||
@@ -263,7 +279,7 @@ int MAIN(int argc, char **argv)
|
|||||||
end:
|
end:
|
||||||
RSA_free(rsa);
|
RSA_free(rsa);
|
||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
BIO_free_all(out);
|
BIO_free(out);
|
||||||
if(rsa_in) OPENSSL_free(rsa_in);
|
if(rsa_in) OPENSSL_free(rsa_in);
|
||||||
if(rsa_out) OPENSSL_free(rsa_out);
|
if(rsa_out) OPENSSL_free(rsa_out);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -277,6 +293,7 @@ static void usage()
|
|||||||
BIO_printf(bio_err, "-inkey file input key\n");
|
BIO_printf(bio_err, "-inkey file input key\n");
|
||||||
BIO_printf(bio_err, "-pubin input is an RSA public\n");
|
BIO_printf(bio_err, "-pubin input is an RSA public\n");
|
||||||
BIO_printf(bio_err, "-certin input is a certificate carrying an RSA public key\n");
|
BIO_printf(bio_err, "-certin input is a certificate carrying an RSA public key\n");
|
||||||
|
BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n");
|
||||||
BIO_printf(bio_err, "-ssl use SSL v2 padding\n");
|
BIO_printf(bio_err, "-ssl use SSL v2 padding\n");
|
||||||
BIO_printf(bio_err, "-raw use no padding\n");
|
BIO_printf(bio_err, "-raw use no padding\n");
|
||||||
BIO_printf(bio_err, "-pkcs use PKCS#1 v1.5 padding (default)\n");
|
BIO_printf(bio_err, "-pkcs use PKCS#1 v1.5 padding (default)\n");
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ typedef unsigned int u_int;
|
|||||||
#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
#include "s_apps.h"
|
#include "s_apps.h"
|
||||||
|
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
@@ -152,6 +153,7 @@ static void sc_usage(void)
|
|||||||
BIO_printf(bio_err," -bugs - Switch on all SSL implementation bug workarounds\n");
|
BIO_printf(bio_err," -bugs - Switch on all SSL implementation bug workarounds\n");
|
||||||
BIO_printf(bio_err," -cipher - preferred cipher to use, use the 'openssl ciphers'\n");
|
BIO_printf(bio_err," -cipher - preferred cipher to use, use the 'openssl ciphers'\n");
|
||||||
BIO_printf(bio_err," command to see what is available\n");
|
BIO_printf(bio_err," command to see what is available\n");
|
||||||
|
BIO_printf(bio_err," -engine id - Initialise and use the specified engine\n");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,6 +181,8 @@ int MAIN(int argc, char **argv)
|
|||||||
int prexit = 0;
|
int prexit = 0;
|
||||||
SSL_METHOD *meth=NULL;
|
SSL_METHOD *meth=NULL;
|
||||||
BIO *sbio;
|
BIO *sbio;
|
||||||
|
char *engine_id=NULL;
|
||||||
|
ENGINE *e=NULL;
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
#endif
|
#endif
|
||||||
@@ -316,6 +320,11 @@ int MAIN(int argc, char **argv)
|
|||||||
else if (strcmp(*argv,"-nbio") == 0)
|
else if (strcmp(*argv,"-nbio") == 0)
|
||||||
{ c_nbio=1; }
|
{ c_nbio=1; }
|
||||||
#endif
|
#endif
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine_id = *(++argv);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
||||||
@@ -349,6 +358,30 @@ bad:
|
|||||||
|
|
||||||
OpenSSL_add_ssl_algorithms();
|
OpenSSL_add_ssl_algorithms();
|
||||||
SSL_load_error_strings();
|
SSL_load_error_strings();
|
||||||
|
|
||||||
|
if (engine_id != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine_id)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (c_debug)
|
||||||
|
{
|
||||||
|
ENGINE_ctrl(e, ENGINE_CTRL_SET_LOGSTREAM,
|
||||||
|
0, bio_err, 0);
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine_id);
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
ctx=SSL_CTX_new(meth);
|
ctx=SSL_CTX_new(meth);
|
||||||
if (ctx == NULL)
|
if (ctx == NULL)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ typedef unsigned int u_int;
|
|||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
#include "s_apps.h"
|
#include "s_apps.h"
|
||||||
|
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
@@ -176,6 +177,7 @@ static int s_debug=0;
|
|||||||
static int s_quiet=0;
|
static int s_quiet=0;
|
||||||
|
|
||||||
static int hack=0;
|
static int hack=0;
|
||||||
|
static char *engine_id=NULL;
|
||||||
|
|
||||||
#ifdef MONOLITH
|
#ifdef MONOLITH
|
||||||
static void s_server_init(void)
|
static void s_server_init(void)
|
||||||
@@ -198,6 +200,7 @@ static void s_server_init(void)
|
|||||||
s_debug=0;
|
s_debug=0;
|
||||||
s_quiet=0;
|
s_quiet=0;
|
||||||
hack=0;
|
hack=0;
|
||||||
|
engine_id=NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -242,6 +245,7 @@ static void sv_usage(void)
|
|||||||
BIO_printf(bio_err," -bugs - Turn on SSL bug compatibility\n");
|
BIO_printf(bio_err," -bugs - Turn on SSL bug compatibility\n");
|
||||||
BIO_printf(bio_err," -www - Respond to a 'GET /' with a status page\n");
|
BIO_printf(bio_err," -www - Respond to a 'GET /' with a status page\n");
|
||||||
BIO_printf(bio_err," -WWW - Respond to a 'GET /<path> HTTP/1.0' with file ./<path>\n");
|
BIO_printf(bio_err," -WWW - Respond to a 'GET /<path> HTTP/1.0' with file ./<path>\n");
|
||||||
|
BIO_printf(bio_err," -engine id - Initialise and use the specified engine\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int local_argc=0;
|
static int local_argc=0;
|
||||||
@@ -411,6 +415,7 @@ int MAIN(int argc, char *argv[])
|
|||||||
int no_tmp_rsa=0,no_dhe=0,nocert=0;
|
int no_tmp_rsa=0,no_dhe=0,nocert=0;
|
||||||
int state=0;
|
int state=0;
|
||||||
SSL_METHOD *meth=NULL;
|
SSL_METHOD *meth=NULL;
|
||||||
|
ENGINE *e=NULL;
|
||||||
#ifndef NO_DH
|
#ifndef NO_DH
|
||||||
DH *dh=NULL;
|
DH *dh=NULL;
|
||||||
#endif
|
#endif
|
||||||
@@ -565,6 +570,11 @@ int MAIN(int argc, char *argv[])
|
|||||||
else if (strcmp(*argv,"-tls1") == 0)
|
else if (strcmp(*argv,"-tls1") == 0)
|
||||||
{ meth=TLSv1_server_method(); }
|
{ meth=TLSv1_server_method(); }
|
||||||
#endif
|
#endif
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine_id= *(++argv);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
||||||
@@ -609,6 +619,29 @@ bad:
|
|||||||
SSL_load_error_strings();
|
SSL_load_error_strings();
|
||||||
OpenSSL_add_ssl_algorithms();
|
OpenSSL_add_ssl_algorithms();
|
||||||
|
|
||||||
|
if (engine_id != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine_id)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (s_debug)
|
||||||
|
{
|
||||||
|
ENGINE_ctrl(e, ENGINE_CTRL_SET_LOGSTREAM,
|
||||||
|
0, bio_err, 0);
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine_id);
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
ctx=SSL_CTX_new(meth);
|
ctx=SSL_CTX_new(meth);
|
||||||
if (ctx == NULL)
|
if (ctx == NULL)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -209,11 +209,9 @@ static int init_client_ip(int *sock, unsigned char ip[4], int port)
|
|||||||
s=socket(AF_INET,SOCK_STREAM,SOCKET_PROTOCOL);
|
s=socket(AF_INET,SOCK_STREAM,SOCKET_PROTOCOL);
|
||||||
if (s == INVALID_SOCKET) { perror("socket"); return(0); }
|
if (s == INVALID_SOCKET) { perror("socket"); return(0); }
|
||||||
|
|
||||||
#ifndef MPE
|
|
||||||
i=0;
|
i=0;
|
||||||
i=setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(char *)&i,sizeof(i));
|
i=setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(char *)&i,sizeof(i));
|
||||||
if (i < 0) { perror("keepalive"); return(0); }
|
if (i < 0) { perror("keepalive"); return(0); }
|
||||||
#endif
|
|
||||||
|
|
||||||
if (connect(s,(struct sockaddr *)&them,sizeof(them)) == -1)
|
if (connect(s,(struct sockaddr *)&them,sizeof(them)) == -1)
|
||||||
{ close(s); perror("connect"); return(0); }
|
{ close(s); perror("connect"); return(0); }
|
||||||
|
|||||||
@@ -206,15 +206,7 @@ bad:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL)
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
if (BIO_write_filename(out,outfile) <= 0)
|
||||||
@@ -270,7 +262,7 @@ bad:
|
|||||||
}
|
}
|
||||||
ret=0;
|
ret=0;
|
||||||
end:
|
end:
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (out != NULL) BIO_free(out);
|
||||||
if (x != NULL) SSL_SESSION_free(x);
|
if (x != NULL) SSL_SESSION_free(x);
|
||||||
EXIT(ret);
|
EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|||||||
41
apps/smime.c
41
apps/smime.c
@@ -64,6 +64,7 @@
|
|||||||
#include <openssl/crypto.h>
|
#include <openssl/crypto.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG smime_main
|
#define PROG smime_main
|
||||||
@@ -81,6 +82,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
int operation = 0;
|
int operation = 0;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
char **args;
|
char **args;
|
||||||
@@ -103,8 +105,9 @@ int MAIN(int argc, char **argv)
|
|||||||
char *inrand = NULL;
|
char *inrand = NULL;
|
||||||
int need_rand = 0;
|
int need_rand = 0;
|
||||||
int informat = FORMAT_SMIME, outformat = FORMAT_SMIME;
|
int informat = FORMAT_SMIME, outformat = FORMAT_SMIME;
|
||||||
args = argv + 1;
|
char *engine=NULL;
|
||||||
|
|
||||||
|
args = argv + 1;
|
||||||
ret = 1;
|
ret = 1;
|
||||||
|
|
||||||
while (!badarg && *args && *args[0] == '-') {
|
while (!badarg && *args && *args[0] == '-') {
|
||||||
@@ -153,6 +156,11 @@ int MAIN(int argc, char **argv)
|
|||||||
inrand = *args;
|
inrand = *args;
|
||||||
} else badarg = 1;
|
} else badarg = 1;
|
||||||
need_rand = 1;
|
need_rand = 1;
|
||||||
|
} else if (!strcmp(*args,"-engine")) {
|
||||||
|
if (args[1]) {
|
||||||
|
args++;
|
||||||
|
engine = *args;
|
||||||
|
} else badarg = 1;
|
||||||
} else if (!strcmp(*args,"-passin")) {
|
} else if (!strcmp(*args,"-passin")) {
|
||||||
if (args[1]) {
|
if (args[1]) {
|
||||||
args++;
|
args++;
|
||||||
@@ -290,6 +298,7 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO_printf (bio_err, "-text include or delete text MIME headers\n");
|
BIO_printf (bio_err, "-text include or delete text MIME headers\n");
|
||||||
BIO_printf (bio_err, "-CApath dir trusted certificates directory\n");
|
BIO_printf (bio_err, "-CApath dir trusted certificates directory\n");
|
||||||
BIO_printf (bio_err, "-CAfile file trusted certificates file\n");
|
BIO_printf (bio_err, "-CAfile file trusted certificates file\n");
|
||||||
|
BIO_printf (bio_err, "-engine e use engine e, possibly a hardware device.\n");
|
||||||
BIO_printf(bio_err, "-rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
BIO_printf(bio_err, "-rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
||||||
BIO_printf(bio_err, " load the file (or the files in the directory) into\n");
|
BIO_printf(bio_err, " load the file (or the files in the directory) into\n");
|
||||||
BIO_printf(bio_err, " the random number generator\n");
|
BIO_printf(bio_err, " the random number generator\n");
|
||||||
@@ -297,6 +306,24 @@ int MAIN(int argc, char **argv)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
|
if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
|
||||||
BIO_printf(bio_err, "Error getting password\n");
|
BIO_printf(bio_err, "Error getting password\n");
|
||||||
goto end;
|
goto end;
|
||||||
@@ -393,15 +420,7 @@ int MAIN(int argc, char **argv)
|
|||||||
"Can't open output file %s\n", outfile);
|
"Can't open output file %s\n", outfile);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
} else {
|
} else out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
if(operation == SMIME_VERIFY) {
|
if(operation == SMIME_VERIFY) {
|
||||||
if(!(store = setup_verify(CAfile, CApath))) goto end;
|
if(!(store = setup_verify(CAfile, CApath))) goto end;
|
||||||
@@ -498,7 +517,7 @@ end:
|
|||||||
PKCS7_free(p7);
|
PKCS7_free(p7);
|
||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
BIO_free(indata);
|
BIO_free(indata);
|
||||||
BIO_free_all(out);
|
BIO_free(out);
|
||||||
if(passin) OPENSSL_free(passin);
|
if(passin) OPENSSL_free(passin);
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|||||||
136
apps/speed.c
136
apps/speed.c
@@ -81,13 +81,14 @@
|
|||||||
#include <openssl/crypto.h>
|
#include <openssl/crypto.h>
|
||||||
#include <openssl/rand.h>
|
#include <openssl/rand.h>
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#if defined(__FreeBSD__)
|
#if defined(__FreeBSD__)
|
||||||
# define USE_TOD
|
# define USE_TOD
|
||||||
#elif !defined(MSDOS) && (!defined(VMS) || defined(__DECC))
|
#elif !defined(MSDOS) && (!defined(VMS) || defined(__DECC))
|
||||||
# define TIMES
|
# define TIMES
|
||||||
#endif
|
#endif
|
||||||
#if !defined(_UNICOS) && !defined(__OpenBSD__) && !defined(sgi) && !defined(__FreeBSD__) && !(defined(__bsdi) || defined(__bsdi__)) && !defined(_AIX) && !defined(MPE)
|
#if !defined(_UNICOS)
|
||||||
# define TIMEB
|
# define TIMEB
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -310,6 +311,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e;
|
||||||
unsigned char *buf=NULL,*buf2=NULL;
|
unsigned char *buf=NULL,*buf2=NULL;
|
||||||
int mret=1;
|
int mret=1;
|
||||||
#define ALGOR_NUM 15
|
#define ALGOR_NUM 15
|
||||||
@@ -318,7 +320,7 @@ int MAIN(int argc, char **argv)
|
|||||||
#define DSA_NUM 3
|
#define DSA_NUM 3
|
||||||
long count,rsa_count;
|
long count,rsa_count;
|
||||||
int i,j,k;
|
int i,j,k;
|
||||||
unsigned rsa_num;
|
unsigned rsa_num,rsa_num2;
|
||||||
#ifndef NO_MD2
|
#ifndef NO_MD2
|
||||||
unsigned char md2[MD2_DIGEST_LENGTH];
|
unsigned char md2[MD2_DIGEST_LENGTH];
|
||||||
#endif
|
#endif
|
||||||
@@ -470,6 +472,37 @@ int MAIN(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
if ((argc > 0) && (strcmp(*argv,"-elapsed") == 0))
|
if ((argc > 0) && (strcmp(*argv,"-elapsed") == 0))
|
||||||
usertime = 0;
|
usertime = 0;
|
||||||
|
else
|
||||||
|
if ((argc > 0) && (strcmp(*argv,"-engine") == 0))
|
||||||
|
{
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
|
if(argc == 0)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"no engine given\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if((e = ENGINE_by_id(*argv)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
*argv);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", *argv);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
/* It will be increased again further down. We just
|
||||||
|
don't want speed to confuse an engine with an
|
||||||
|
algorithm, especially when none is given (which
|
||||||
|
means all of them should be run) */
|
||||||
|
j--;
|
||||||
|
}
|
||||||
|
else
|
||||||
#ifndef NO_MD2
|
#ifndef NO_MD2
|
||||||
if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1;
|
if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1;
|
||||||
else
|
else
|
||||||
@@ -517,7 +550,7 @@ int MAIN(int argc, char **argv)
|
|||||||
#ifdef RSAref
|
#ifdef RSAref
|
||||||
if (strcmp(*argv,"rsaref") == 0)
|
if (strcmp(*argv,"rsaref") == 0)
|
||||||
{
|
{
|
||||||
RSA_set_default_method(RSA_PKCS1_RSAref());
|
RSA_set_default_openssl_method(RSA_PKCS1_RSAref());
|
||||||
j--;
|
j--;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -525,7 +558,7 @@ int MAIN(int argc, char **argv)
|
|||||||
#ifndef RSA_NULL
|
#ifndef RSA_NULL
|
||||||
if (strcmp(*argv,"openssl") == 0)
|
if (strcmp(*argv,"openssl") == 0)
|
||||||
{
|
{
|
||||||
RSA_set_default_method(RSA_PKCS1_SSLeay());
|
RSA_set_default_openssl_method(RSA_PKCS1_SSLeay());
|
||||||
j--;
|
j--;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -670,11 +703,12 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO_printf(bio_err,"\n");
|
BIO_printf(bio_err,"\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef TIMES
|
|
||||||
BIO_printf(bio_err,"\n");
|
BIO_printf(bio_err,"\n");
|
||||||
BIO_printf(bio_err,"Available options:\n");
|
BIO_printf(bio_err,"Available options:\n");
|
||||||
|
#ifdef TIMES
|
||||||
BIO_printf(bio_err,"-elapsed measure time in real time instead of CPU user time.\n");
|
BIO_printf(bio_err,"-elapsed measure time in real time instead of CPU user time.\n");
|
||||||
#endif
|
#endif
|
||||||
|
BIO_printf(bio_err,"-engine e use engine e, possibly a hardware device.\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
argc--;
|
argc--;
|
||||||
@@ -1133,73 +1167,49 @@ int MAIN(int argc, char **argv)
|
|||||||
int ret;
|
int ret;
|
||||||
if (!rsa_doit[j]) continue;
|
if (!rsa_doit[j]) continue;
|
||||||
ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]);
|
ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]);
|
||||||
if (ret == 0)
|
pkey_print_message("private","rsa",rsa_c[j][0],rsa_bits[j],
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"RSA sign failure. No RSA sign will be done.\n");
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
rsa_count=1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pkey_print_message("private","rsa",
|
|
||||||
rsa_c[j][0],rsa_bits[j],
|
|
||||||
RSA_SECONDS);
|
RSA_SECONDS);
|
||||||
/* RSA_blinding_on(rsa_key[j],NULL); */
|
/* RSA_blinding_on(rsa_key[j],NULL); */
|
||||||
Time_F(START,usertime);
|
Time_F(START,usertime);
|
||||||
for (count=0,run=1; COND(rsa_c[j][0]); count++)
|
for (count=0,run=1; COND(rsa_c[j][0]); count++)
|
||||||
{
|
{
|
||||||
ret=RSA_sign(NID_md5_sha1, buf,36, buf2,
|
ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num,
|
||||||
&rsa_num, rsa_key[j]);
|
rsa_key[j]);
|
||||||
if (ret == 0)
|
if (ret <= 0)
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,
|
BIO_printf(bio_err,"RSA private encrypt failure\n");
|
||||||
"RSA sign failure\n");
|
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
count=1;
|
count=1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
d=Time_F(STOP,usertime);
|
d=Time_F(STOP,usertime);
|
||||||
BIO_printf(bio_err,
|
BIO_printf(bio_err,"%ld %d bit private RSA's in %.2fs\n",
|
||||||
"%ld %d bit private RSA's in %.2fs\n",
|
|
||||||
count,rsa_bits[j],d);
|
count,rsa_bits[j],d);
|
||||||
rsa_results[j][0]=d/(double)count;
|
rsa_results[j][0]=d/(double)count;
|
||||||
rsa_count=count;
|
rsa_count=count;
|
||||||
}
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]);
|
ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]);
|
||||||
if (ret <= 0)
|
pkey_print_message("public","rsa",rsa_c[j][1],rsa_bits[j],
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"RSA verify failure. No RSA verify will be done.\n");
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
dsa_doit[j] = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pkey_print_message("public","rsa",
|
|
||||||
rsa_c[j][1],rsa_bits[j],
|
|
||||||
RSA_SECONDS);
|
RSA_SECONDS);
|
||||||
Time_F(START,usertime);
|
Time_F(START,usertime);
|
||||||
for (count=0,run=1; COND(rsa_c[j][1]); count++)
|
for (count=0,run=1; COND(rsa_c[j][1]); count++)
|
||||||
{
|
{
|
||||||
ret=RSA_verify(NID_md5_sha1, buf,36, buf2,
|
ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num,
|
||||||
rsa_num, rsa_key[j]);
|
rsa_key[j]);
|
||||||
if (ret == 0)
|
if (ret <= 0)
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,
|
BIO_printf(bio_err,"RSA verify failure\n");
|
||||||
"RSA verify failure\n");
|
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
count=1;
|
count=1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
d=Time_F(STOP,usertime);
|
d=Time_F(STOP,usertime);
|
||||||
BIO_printf(bio_err,
|
BIO_printf(bio_err,"%ld %d bit public RSA's in %.2fs\n",
|
||||||
"%ld %d bit public RSA's in %.2fs\n",
|
|
||||||
count,rsa_bits[j],d);
|
count,rsa_bits[j],d);
|
||||||
rsa_results[j][1]=d/(double)count;
|
rsa_results[j][1]=d/(double)count;
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (rsa_count <= 1)
|
if (rsa_count <= 1)
|
||||||
@@ -1221,33 +1231,22 @@ int MAIN(int argc, char **argv)
|
|||||||
for (j=0; j<DSA_NUM; j++)
|
for (j=0; j<DSA_NUM; j++)
|
||||||
{
|
{
|
||||||
unsigned int kk;
|
unsigned int kk;
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (!dsa_doit[j]) continue;
|
if (!dsa_doit[j]) continue;
|
||||||
DSA_generate_key(dsa_key[j]);
|
DSA_generate_key(dsa_key[j]);
|
||||||
/* DSA_sign_setup(dsa_key[j],NULL); */
|
/* DSA_sign_setup(dsa_key[j],NULL); */
|
||||||
ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
|
rsa_num=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
|
||||||
&kk,dsa_key[j]);
|
&kk,dsa_key[j]);
|
||||||
if (ret == 0)
|
pkey_print_message("sign","dsa",dsa_c[j][0],dsa_bits[j],
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"DSA sign failure. No DSA sign will be done.\n");
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
rsa_count=1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pkey_print_message("sign","dsa",
|
|
||||||
dsa_c[j][0],dsa_bits[j],
|
|
||||||
DSA_SECONDS);
|
DSA_SECONDS);
|
||||||
Time_F(START,usertime);
|
Time_F(START,usertime);
|
||||||
for (count=0,run=1; COND(dsa_c[j][0]); count++)
|
for (count=0,run=1; COND(dsa_c[j][0]); count++)
|
||||||
{
|
{
|
||||||
ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
|
rsa_num=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
|
||||||
&kk,dsa_key[j]);
|
&kk,dsa_key[j]);
|
||||||
if (ret == 0)
|
if (rsa_num == 0)
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,
|
BIO_printf(bio_err,"DSA sign failure\n");
|
||||||
"DSA sign failure\n");
|
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
count=1;
|
count=1;
|
||||||
break;
|
break;
|
||||||
@@ -1258,30 +1257,19 @@ int MAIN(int argc, char **argv)
|
|||||||
count,dsa_bits[j],d);
|
count,dsa_bits[j],d);
|
||||||
dsa_results[j][0]=d/(double)count;
|
dsa_results[j][0]=d/(double)count;
|
||||||
rsa_count=count;
|
rsa_count=count;
|
||||||
}
|
|
||||||
|
|
||||||
ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
|
rsa_num2=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
|
||||||
kk,dsa_key[j]);
|
kk,dsa_key[j]);
|
||||||
if (ret <= 0)
|
pkey_print_message("verify","dsa",dsa_c[j][1],dsa_bits[j],
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"DSA verify failure. No DSA verify will be done.\n");
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
dsa_doit[j] = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pkey_print_message("verify","dsa",
|
|
||||||
dsa_c[j][1],dsa_bits[j],
|
|
||||||
DSA_SECONDS);
|
DSA_SECONDS);
|
||||||
Time_F(START,usertime);
|
Time_F(START,usertime);
|
||||||
for (count=0,run=1; COND(dsa_c[j][1]); count++)
|
for (count=0,run=1; COND(dsa_c[j][1]); count++)
|
||||||
{
|
{
|
||||||
ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
|
rsa_num2=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
|
||||||
kk,dsa_key[j]);
|
kk,dsa_key[j]);
|
||||||
if (ret <= 0)
|
if (rsa_num2 == 0)
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,
|
BIO_printf(bio_err,"DSA verify failure\n");
|
||||||
"DSA verify failure\n");
|
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
count=1;
|
count=1;
|
||||||
break;
|
break;
|
||||||
@@ -1291,7 +1279,6 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO_printf(bio_err,"%ld %d bit DSA verify in %.2fs\n",
|
BIO_printf(bio_err,"%ld %d bit DSA verify in %.2fs\n",
|
||||||
count,dsa_bits[j],d);
|
count,dsa_bits[j],d);
|
||||||
dsa_results[j][1]=d/(double)count;
|
dsa_results[j][1]=d/(double)count;
|
||||||
}
|
|
||||||
|
|
||||||
if (rsa_count <= 1)
|
if (rsa_count <= 1)
|
||||||
{
|
{
|
||||||
@@ -1379,6 +1366,7 @@ int MAIN(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
mret=0;
|
mret=0;
|
||||||
end:
|
end:
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
if (buf != NULL) OPENSSL_free(buf);
|
if (buf != NULL) OPENSSL_free(buf);
|
||||||
if (buf2 != NULL) OPENSSL_free(buf2);
|
if (buf2 != NULL) OPENSSL_free(buf2);
|
||||||
#ifndef NO_RSA
|
#ifndef NO_RSA
|
||||||
|
|||||||
49
apps/spkac.c
49
apps/spkac.c
@@ -69,6 +69,7 @@
|
|||||||
#include <openssl/lhash.h>
|
#include <openssl/lhash.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG spkac_main
|
#define PROG spkac_main
|
||||||
@@ -81,6 +82,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
int i,badops=0, ret = 1;
|
int i,badops=0, ret = 1;
|
||||||
BIO *in = NULL,*out = NULL, *key = NULL;
|
BIO *in = NULL,*out = NULL, *key = NULL;
|
||||||
int verify=0,noout=0,pubkey=0;
|
int verify=0,noout=0,pubkey=0;
|
||||||
@@ -91,6 +93,7 @@ int MAIN(int argc, char **argv)
|
|||||||
LHASH *conf = NULL;
|
LHASH *conf = NULL;
|
||||||
NETSCAPE_SPKI *spki = NULL;
|
NETSCAPE_SPKI *spki = NULL;
|
||||||
EVP_PKEY *pkey = NULL;
|
EVP_PKEY *pkey = NULL;
|
||||||
|
char *engine=NULL;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
@@ -136,6 +139,11 @@ int MAIN(int argc, char **argv)
|
|||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
spksect= *(++argv);
|
spksect= *(++argv);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine= *(++argv);
|
||||||
|
}
|
||||||
else if (strcmp(*argv,"-noout") == 0)
|
else if (strcmp(*argv,"-noout") == 0)
|
||||||
noout=1;
|
noout=1;
|
||||||
else if (strcmp(*argv,"-pubkey") == 0)
|
else if (strcmp(*argv,"-pubkey") == 0)
|
||||||
@@ -161,6 +169,7 @@ bad:
|
|||||||
BIO_printf(bio_err," -noout don't print SPKAC\n");
|
BIO_printf(bio_err," -noout don't print SPKAC\n");
|
||||||
BIO_printf(bio_err," -pubkey output public key\n");
|
BIO_printf(bio_err," -pubkey output public key\n");
|
||||||
BIO_printf(bio_err," -verify verify SPKAC signature\n");
|
BIO_printf(bio_err," -verify verify SPKAC signature\n");
|
||||||
|
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,6 +179,24 @@ bad:
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
if(keyfile) {
|
if(keyfile) {
|
||||||
if(strcmp(keyfile, "-")) key = BIO_new_file(keyfile, "r");
|
if(strcmp(keyfile, "-")) key = BIO_new_file(keyfile, "r");
|
||||||
else key = BIO_new_fp(stdin, BIO_NOCLOSE);
|
else key = BIO_new_fp(stdin, BIO_NOCLOSE);
|
||||||
@@ -192,15 +219,7 @@ bad:
|
|||||||
spkstr = NETSCAPE_SPKI_b64_encode(spki);
|
spkstr = NETSCAPE_SPKI_b64_encode(spki);
|
||||||
|
|
||||||
if (outfile) out = BIO_new_file(outfile, "w");
|
if (outfile) out = BIO_new_file(outfile, "w");
|
||||||
else {
|
else out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!out) {
|
if(!out) {
|
||||||
BIO_printf(bio_err, "Error opening output file\n");
|
BIO_printf(bio_err, "Error opening output file\n");
|
||||||
@@ -249,15 +268,7 @@ bad:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (outfile) out = BIO_new_file(outfile, "w");
|
if (outfile) out = BIO_new_file(outfile, "w");
|
||||||
else {
|
else out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!out) {
|
if(!out) {
|
||||||
BIO_printf(bio_err, "Error opening output file\n");
|
BIO_printf(bio_err, "Error opening output file\n");
|
||||||
@@ -284,7 +295,7 @@ end:
|
|||||||
CONF_free(conf);
|
CONF_free(conf);
|
||||||
NETSCAPE_SPKI_free(spki);
|
NETSCAPE_SPKI_free(spki);
|
||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
BIO_free_all(out);
|
BIO_free(out);
|
||||||
BIO_free(key);
|
BIO_free(key);
|
||||||
EVP_PKEY_free(pkey);
|
EVP_PKEY_free(pkey);
|
||||||
if(passin) OPENSSL_free(passin);
|
if(passin) OPENSSL_free(passin);
|
||||||
|
|||||||
@@ -65,6 +65,7 @@
|
|||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/x509v3.h>
|
#include <openssl/x509v3.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG verify_main
|
#define PROG verify_main
|
||||||
@@ -78,6 +79,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
int i,ret=1;
|
int i,ret=1;
|
||||||
int purpose = -1;
|
int purpose = -1;
|
||||||
char *CApath=NULL,*CAfile=NULL;
|
char *CApath=NULL,*CAfile=NULL;
|
||||||
@@ -85,6 +87,7 @@ int MAIN(int argc, char **argv)
|
|||||||
STACK_OF(X509) *untrusted = NULL, *trusted = NULL;
|
STACK_OF(X509) *untrusted = NULL, *trusted = NULL;
|
||||||
X509_STORE *cert_ctx=NULL;
|
X509_STORE *cert_ctx=NULL;
|
||||||
X509_LOOKUP *lookup=NULL;
|
X509_LOOKUP *lookup=NULL;
|
||||||
|
char *engine=NULL;
|
||||||
|
|
||||||
cert_ctx=X509_STORE_new();
|
cert_ctx=X509_STORE_new();
|
||||||
if (cert_ctx == NULL) goto end;
|
if (cert_ctx == NULL) goto end;
|
||||||
@@ -137,6 +140,11 @@ int MAIN(int argc, char **argv)
|
|||||||
if (argc-- < 1) goto end;
|
if (argc-- < 1) goto end;
|
||||||
trustfile= *(++argv);
|
trustfile= *(++argv);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto end;
|
||||||
|
engine= *(++argv);
|
||||||
|
}
|
||||||
else if (strcmp(*argv,"-help") == 0)
|
else if (strcmp(*argv,"-help") == 0)
|
||||||
goto end;
|
goto end;
|
||||||
else if (strcmp(*argv,"-issuer_checks") == 0)
|
else if (strcmp(*argv,"-issuer_checks") == 0)
|
||||||
@@ -154,6 +162,24 @@ int MAIN(int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_file());
|
lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_file());
|
||||||
if (lookup == NULL) abort();
|
if (lookup == NULL) abort();
|
||||||
if (CAfile) {
|
if (CAfile) {
|
||||||
@@ -201,7 +227,7 @@ int MAIN(int argc, char **argv)
|
|||||||
ret=0;
|
ret=0;
|
||||||
end:
|
end:
|
||||||
if (ret == 1) {
|
if (ret == 1) {
|
||||||
BIO_printf(bio_err,"usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] cert1 cert2 ...\n");
|
BIO_printf(bio_err,"usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-engine e] cert1 cert2 ...\n");
|
||||||
BIO_printf(bio_err,"recognized usages:\n");
|
BIO_printf(bio_err,"recognized usages:\n");
|
||||||
for(i = 0; i < X509_PURPOSE_get_count(); i++) {
|
for(i = 0; i < X509_PURPOSE_get_count(); i++) {
|
||||||
X509_PURPOSE *ptmp;
|
X509_PURPOSE *ptmp;
|
||||||
|
|||||||
45
apps/x509.c
45
apps/x509.c
@@ -73,6 +73,7 @@
|
|||||||
#include <openssl/x509v3.h>
|
#include <openssl/x509v3.h>
|
||||||
#include <openssl/objects.h>
|
#include <openssl/objects.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG x509_main
|
#define PROG x509_main
|
||||||
@@ -129,6 +130,7 @@ static char *x509_usage[]={
|
|||||||
" -extensions - section from config file with X509V3 extensions to add\n",
|
" -extensions - section from config file with X509V3 extensions to add\n",
|
||||||
" -clrext - delete extensions before signing and input certificate\n",
|
" -clrext - delete extensions before signing and input certificate\n",
|
||||||
" -nameopt arg - various certificate name options\n",
|
" -nameopt arg - various certificate name options\n",
|
||||||
|
" -engine e - use engine e, possibly a hardware device.\n",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -145,6 +147,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
int ret=1;
|
int ret=1;
|
||||||
X509_REQ *req=NULL;
|
X509_REQ *req=NULL;
|
||||||
X509 *x=NULL,*xca=NULL;
|
X509 *x=NULL,*xca=NULL;
|
||||||
@@ -175,6 +178,7 @@ int MAIN(int argc, char **argv)
|
|||||||
int need_rand = 0;
|
int need_rand = 0;
|
||||||
int checkend=0,checkoffset=0;
|
int checkend=0,checkoffset=0;
|
||||||
unsigned long nmflag = 0;
|
unsigned long nmflag = 0;
|
||||||
|
char *engine=NULL;
|
||||||
|
|
||||||
reqfile=0;
|
reqfile=0;
|
||||||
|
|
||||||
@@ -183,12 +187,6 @@ int MAIN(int argc, char **argv)
|
|||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
|
bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
|
||||||
STDout=BIO_new_fp(stdout,BIO_NOCLOSE);
|
STDout=BIO_new_fp(stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
STDout = BIO_push(tmpbio, STDout);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
informat=FORMAT_PEM;
|
informat=FORMAT_PEM;
|
||||||
outformat=FORMAT_PEM;
|
outformat=FORMAT_PEM;
|
||||||
@@ -337,6 +335,11 @@ int MAIN(int argc, char **argv)
|
|||||||
alias= *(++argv);
|
alias= *(++argv);
|
||||||
trustout = 1;
|
trustout = 1;
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*argv,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine= *(++argv);
|
||||||
|
}
|
||||||
else if (strcmp(*argv,"-C") == 0)
|
else if (strcmp(*argv,"-C") == 0)
|
||||||
C= ++num;
|
C= ++num;
|
||||||
else if (strcmp(*argv,"-email") == 0)
|
else if (strcmp(*argv,"-email") == 0)
|
||||||
@@ -420,6 +423,24 @@ bad:
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engine != NULL)
|
||||||
|
{
|
||||||
|
if((e = ENGINE_by_id(engine)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"invalid engine \"%s\"\n",
|
||||||
|
engine);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"can't use that engine\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
|
||||||
|
/* Free our "structural" reference. */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
if (need_rand)
|
if (need_rand)
|
||||||
app_RAND_load_file(NULL, bio_err, 0);
|
app_RAND_load_file(NULL, bio_err, 0);
|
||||||
|
|
||||||
@@ -582,15 +603,7 @@ bad:
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
if (outfile == NULL)
|
if (outfile == NULL)
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
#ifdef VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
if (BIO_write_filename(out,outfile) <= 0)
|
||||||
@@ -947,8 +960,8 @@ end:
|
|||||||
app_RAND_write_file(NULL, bio_err);
|
app_RAND_write_file(NULL, bio_err);
|
||||||
OBJ_cleanup();
|
OBJ_cleanup();
|
||||||
CONF_free(extconf);
|
CONF_free(extconf);
|
||||||
BIO_free_all(out);
|
BIO_free(out);
|
||||||
BIO_free_all(STDout);
|
BIO_free(STDout);
|
||||||
X509_STORE_free(ctx);
|
X509_STORE_free(ctx);
|
||||||
X509_REQ_free(req);
|
X509_REQ_free(req);
|
||||||
X509_free(x);
|
X509_free(x);
|
||||||
|
|||||||
33
config
33
config
@@ -71,10 +71,6 @@ fi
|
|||||||
# Now we simply scan though... In most cases, the SYSTEM info is enough
|
# Now we simply scan though... In most cases, the SYSTEM info is enough
|
||||||
#
|
#
|
||||||
case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
|
case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
|
||||||
MPE/iX:*)
|
|
||||||
MACHINE=`echo "$MACHINE" | sed -e 's/-/_/g'`
|
|
||||||
echo "parisc-hp-MPE/iX"; exit 0
|
|
||||||
;;
|
|
||||||
A/UX:*)
|
A/UX:*)
|
||||||
echo "m68k-apple-aux3"; exit 0
|
echo "m68k-apple-aux3"; exit 0
|
||||||
;;
|
;;
|
||||||
@@ -251,10 +247,6 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
|
|||||||
echo "${MACHINE}-v11-${SYSTEM}"; exit 0;
|
echo "${MACHINE}-v11-${SYSTEM}"; exit 0;
|
||||||
;;
|
;;
|
||||||
|
|
||||||
NEWS-OS:4.*)
|
|
||||||
echo "mips-sony-newsos4"; exit 0;
|
|
||||||
;;
|
|
||||||
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -478,15 +470,30 @@ case "$GUESSOS" in
|
|||||||
# these are all covered by the catchall below
|
# these are all covered by the catchall below
|
||||||
# *-aix) OUT="aix-$CC" ;;
|
# *-aix) OUT="aix-$CC" ;;
|
||||||
# *-dgux) OUT="dgux" ;;
|
# *-dgux) OUT="dgux" ;;
|
||||||
mips-sony-newsos4) OUT="newsos4-gcc" ;;
|
|
||||||
*) OUT=`echo $GUESSOS | awk -F- '{print $3}'`;;
|
*) OUT=`echo $GUESSOS | awk -F- '{print $3}'`;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# NB: This atalla support has been superceded by the ENGINE support
|
||||||
|
# That contains its own header and definitions anyway. Support can
|
||||||
|
# be enabled or disabled on any supported platform without external
|
||||||
|
# headers, eg. by adding the "hw-atalla" switch to ./config or
|
||||||
|
# perl Configure
|
||||||
|
#
|
||||||
# See whether we can compile Atalla support
|
# See whether we can compile Atalla support
|
||||||
if [ -f /usr/include/atasi.h ]
|
#if [ -f /usr/include/atasi.h ]
|
||||||
then
|
#then
|
||||||
options="$options -DATALLA"
|
# options="$options -DATALLA"
|
||||||
fi
|
#fi
|
||||||
|
|
||||||
|
#get some basic shared lib support (behnke@trustcenter.de)
|
||||||
|
case "$OUT" in
|
||||||
|
solaris-*-gcc)
|
||||||
|
if [ "$SHARED" = "true" ]
|
||||||
|
then
|
||||||
|
options="$options -DPIC -fPIC"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
# gcc < 2.8 does not support -mcpu=ultrasparc
|
# gcc < 2.8 does not support -mcpu=ultrasparc
|
||||||
if [ "$OUT" = solaris-sparcv9-gcc -a $GCCVER -lt 28 ]
|
if [ "$OUT" = solaris-sparcv9-gcc -a $GCCVER -lt 28 ]
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ LIBS=
|
|||||||
|
|
||||||
SDIRS= md2 md5 sha mdc2 hmac ripemd \
|
SDIRS= md2 md5 sha mdc2 hmac ripemd \
|
||||||
des rc2 rc4 rc5 idea bf cast \
|
des rc2 rc4 rc5 idea bf cast \
|
||||||
bn rsa dsa dh dso \
|
bn rsa dsa dh dso engine \
|
||||||
buffer bio stack lhash rand err objects \
|
buffer bio stack lhash rand err objects \
|
||||||
evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp
|
evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp
|
||||||
|
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ STACK *d2i_ASN1_SET(STACK **a, unsigned char **pp, long length,
|
|||||||
STACK *ret=NULL;
|
STACK *ret=NULL;
|
||||||
|
|
||||||
if ((a == NULL) || ((*a) == NULL))
|
if ((a == NULL) || ((*a) == NULL))
|
||||||
{ if ((ret=sk_new_null()) == NULL) goto err; }
|
{ if ((ret=sk_new(NULL)) == NULL) goto err; }
|
||||||
else
|
else
|
||||||
ret=(*a);
|
ret=(*a);
|
||||||
|
|
||||||
|
|||||||
@@ -27,13 +27,11 @@ LIBSRC= bio_lib.c bio_cb.c bio_err.c \
|
|||||||
bss_file.c bss_sock.c bss_conn.c \
|
bss_file.c bss_sock.c bss_conn.c \
|
||||||
bf_null.c bf_buff.c b_print.c b_dump.c \
|
bf_null.c bf_buff.c b_print.c b_dump.c \
|
||||||
b_sock.c bss_acpt.c bf_nbio.c bss_log.c bss_bio.c
|
b_sock.c bss_acpt.c bf_nbio.c bss_log.c bss_bio.c
|
||||||
# bf_lbuf.c
|
|
||||||
LIBOBJ= bio_lib.o bio_cb.o bio_err.o \
|
LIBOBJ= bio_lib.o bio_cb.o bio_err.o \
|
||||||
bss_mem.o bss_null.o bss_fd.o \
|
bss_mem.o bss_null.o bss_fd.o \
|
||||||
bss_file.o bss_sock.o bss_conn.o \
|
bss_file.o bss_sock.o bss_conn.o \
|
||||||
bf_null.o bf_buff.o b_print.o b_dump.o \
|
bf_null.o bf_buff.o b_print.o b_dump.o \
|
||||||
b_sock.o bss_acpt.o bf_nbio.o bss_log.o bss_bio.o
|
b_sock.o bss_acpt.o bf_nbio.o bss_log.o bss_bio.o
|
||||||
# bf_lbuf.o
|
|
||||||
|
|
||||||
SRC= $(LIBSRC)
|
SRC= $(LIBSRC)
|
||||||
|
|
||||||
|
|||||||
@@ -1,397 +0,0 @@
|
|||||||
/* crypto/bio/bf_buff.c */
|
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This package is an SSL implementation written
|
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
|
||||||
*
|
|
||||||
* This library is free for commercial and non-commercial use as long as
|
|
||||||
* the following conditions are aheared to. The following conditions
|
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
|
||||||
* included with this distribution is covered by the same copyright terms
|
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
|
||||||
* the code are not to be removed.
|
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
|
||||||
* as the author of the parts of the library used.
|
|
||||||
* This can be in the form of a textual message at program startup or
|
|
||||||
* in documentation (online or textual) provided with the package.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. All advertising materials mentioning features or use of this software
|
|
||||||
* must display the following acknowledgement:
|
|
||||||
* "This product includes cryptographic software written by
|
|
||||||
* Eric Young (eay@cryptsoft.com)"
|
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
|
||||||
* being used are not cryptographic related :-).
|
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
* SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
* The licence and distribution terms for any publically available version or
|
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
|
||||||
* copied and put under another distribution licence
|
|
||||||
* [including the GNU Public Licence.]
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include "cryptlib.h"
|
|
||||||
#include <openssl/bio.h>
|
|
||||||
#include <openssl/evp.h>
|
|
||||||
|
|
||||||
static int linebuffer_write(BIO *h, const char *buf,int num);
|
|
||||||
static int linebuffer_read(BIO *h, char *buf, int size);
|
|
||||||
static int linebuffer_puts(BIO *h, const char *str);
|
|
||||||
static int linebuffer_gets(BIO *h, char *str, int size);
|
|
||||||
static long linebuffer_ctrl(BIO *h, int cmd, long arg1, void *arg2);
|
|
||||||
static int linebuffer_new(BIO *h);
|
|
||||||
static int linebuffer_free(BIO *data);
|
|
||||||
static long linebuffer_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp);
|
|
||||||
|
|
||||||
/* A 10k maximum should be enough for most purposes */
|
|
||||||
#define DEFAULT_LINEBUFFER_SIZE 1024*10
|
|
||||||
|
|
||||||
/* #define DEBUG */
|
|
||||||
|
|
||||||
static BIO_METHOD methods_linebuffer=
|
|
||||||
{
|
|
||||||
BIO_TYPE_LINEBUFFER,
|
|
||||||
"linebuffer",
|
|
||||||
linebuffer_write,
|
|
||||||
linebuffer_read,
|
|
||||||
linebuffer_puts,
|
|
||||||
linebuffer_gets,
|
|
||||||
linebuffer_ctrl,
|
|
||||||
linebuffer_new,
|
|
||||||
linebuffer_free,
|
|
||||||
linebuffer_callback_ctrl,
|
|
||||||
};
|
|
||||||
|
|
||||||
BIO_METHOD *BIO_f_linebuffer(void)
|
|
||||||
{
|
|
||||||
return(&methods_linebuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef struct bio_linebuffer_ctx_struct
|
|
||||||
{
|
|
||||||
char *obuf; /* the output char array */
|
|
||||||
int obuf_size; /* how big is the output buffer */
|
|
||||||
int obuf_len; /* how many bytes are in it */
|
|
||||||
} BIO_LINEBUFFER_CTX;
|
|
||||||
|
|
||||||
static int linebuffer_new(BIO *bi)
|
|
||||||
{
|
|
||||||
BIO_LINEBUFFER_CTX *ctx;
|
|
||||||
|
|
||||||
ctx=(BIO_LINEBUFFER_CTX *)OPENSSL_malloc(sizeof(BIO_LINEBUFFER_CTX));
|
|
||||||
if (ctx == NULL) return(0);
|
|
||||||
ctx->obuf=(char *)OPENSSL_malloc(DEFAULT_LINEBUFFER_SIZE);
|
|
||||||
if (ctx->obuf == NULL) { OPENSSL_free(ctx); return(0); }
|
|
||||||
ctx->obuf_size=DEFAULT_LINEBUFFER_SIZE;
|
|
||||||
ctx->obuf_len=0;
|
|
||||||
|
|
||||||
bi->init=1;
|
|
||||||
bi->ptr=(char *)ctx;
|
|
||||||
bi->flags=0;
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int linebuffer_free(BIO *a)
|
|
||||||
{
|
|
||||||
BIO_LINEBUFFER_CTX *b;
|
|
||||||
|
|
||||||
if (a == NULL) return(0);
|
|
||||||
b=(BIO_LINEBUFFER_CTX *)a->ptr;
|
|
||||||
if (b->obuf != NULL) OPENSSL_free(b->obuf);
|
|
||||||
OPENSSL_free(a->ptr);
|
|
||||||
a->ptr=NULL;
|
|
||||||
a->init=0;
|
|
||||||
a->flags=0;
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int linebuffer_read(BIO *b, char *out, int outl)
|
|
||||||
{
|
|
||||||
int ret=0;
|
|
||||||
|
|
||||||
if (out == NULL) return(0);
|
|
||||||
if (b->next_bio == NULL) return(0);
|
|
||||||
ret=BIO_read(b->next_bio,out,outl);
|
|
||||||
BIO_clear_retry_flags(b);
|
|
||||||
BIO_copy_next_retry(b);
|
|
||||||
return(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int linebuffer_write(BIO *b, const char *in, int inl)
|
|
||||||
{
|
|
||||||
int i,num=0,foundnl;
|
|
||||||
BIO_LINEBUFFER_CTX *ctx;
|
|
||||||
|
|
||||||
if ((in == NULL) || (inl <= 0)) return(0);
|
|
||||||
ctx=(BIO_LINEBUFFER_CTX *)b->ptr;
|
|
||||||
if ((ctx == NULL) || (b->next_bio == NULL)) return(0);
|
|
||||||
|
|
||||||
BIO_clear_retry_flags(b);
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
const char *p;
|
|
||||||
|
|
||||||
for(p = in; p < in + inl && *p != '\n'; p++)
|
|
||||||
;
|
|
||||||
if (*p == '\n')
|
|
||||||
{
|
|
||||||
p++;
|
|
||||||
foundnl = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
foundnl = 0;
|
|
||||||
|
|
||||||
/* If a NL was found and we already have text in the save
|
|
||||||
buffer, concatenate them and write */
|
|
||||||
while ((foundnl || p - in > ctx->obuf_size - ctx->obuf_len)
|
|
||||||
&& ctx->obuf_len > 0)
|
|
||||||
{
|
|
||||||
int orig_olen = ctx->obuf_len;
|
|
||||||
|
|
||||||
i = ctx->obuf_size - ctx->obuf_len;
|
|
||||||
if (p - in > 0)
|
|
||||||
{
|
|
||||||
if (i >= p - in)
|
|
||||||
{
|
|
||||||
memcpy(&(ctx->obuf[ctx->obuf_len]),
|
|
||||||
in,p - in);
|
|
||||||
ctx->obuf_len += p - in;
|
|
||||||
inl -= p - in;
|
|
||||||
num += p - in;
|
|
||||||
in = p;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memcpy(&(ctx->obuf[ctx->obuf_len]),
|
|
||||||
in,i);
|
|
||||||
ctx->obuf_len += i;
|
|
||||||
inl -= i;
|
|
||||||
in += i;
|
|
||||||
num += i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
BIO_write(b->next_bio, "<*<", 3);
|
|
||||||
#endif
|
|
||||||
i=BIO_write(b->next_bio,
|
|
||||||
ctx->obuf, ctx->obuf_len);
|
|
||||||
if (i <= 0)
|
|
||||||
{
|
|
||||||
ctx->obuf_len = orig_olen;
|
|
||||||
BIO_copy_next_retry(b);
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
BIO_write(b->next_bio, ">*>", 3);
|
|
||||||
#endif
|
|
||||||
if (i < 0) return((num > 0)?num:i);
|
|
||||||
if (i == 0) return(num);
|
|
||||||
}
|
|
||||||
#ifdef DEBUG
|
|
||||||
BIO_write(b->next_bio, ">*>", 3);
|
|
||||||
#endif
|
|
||||||
if (i < ctx->obuf_len)
|
|
||||||
memmove(ctx->obuf, ctx->obuf + i,
|
|
||||||
ctx->obuf_len - i);
|
|
||||||
ctx->obuf_len-=i;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Now that the save buffer is emptied, let's write the input
|
|
||||||
buffer if a NL was found and there is anything to write. */
|
|
||||||
if ((foundnl || p - in > ctx->obuf_size) && p - in > 0)
|
|
||||||
{
|
|
||||||
#ifdef DEBUG
|
|
||||||
BIO_write(b->next_bio, "<*<", 3);
|
|
||||||
#endif
|
|
||||||
i=BIO_write(b->next_bio,in,p - in);
|
|
||||||
if (i <= 0)
|
|
||||||
{
|
|
||||||
BIO_copy_next_retry(b);
|
|
||||||
#ifdef DEBUG
|
|
||||||
BIO_write(b->next_bio, ">*>", 3);
|
|
||||||
#endif
|
|
||||||
if (i < 0) return((num > 0)?num:i);
|
|
||||||
if (i == 0) return(num);
|
|
||||||
}
|
|
||||||
#ifdef DEBUG
|
|
||||||
BIO_write(b->next_bio, ">*>", 3);
|
|
||||||
#endif
|
|
||||||
num+=i;
|
|
||||||
in+=i;
|
|
||||||
inl-=i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while(foundnl && inl > 0);
|
|
||||||
/* We've written as much as we can. The rest of the input buffer, if
|
|
||||||
any, is text that doesn't and with a NL and therefore needs to be
|
|
||||||
saved for the next trip. */
|
|
||||||
if (inl > 0)
|
|
||||||
{
|
|
||||||
memcpy(&(ctx->obuf[ctx->obuf_len]), in, inl);
|
|
||||||
ctx->obuf_len += inl;
|
|
||||||
num += inl;
|
|
||||||
}
|
|
||||||
return num;
|
|
||||||
}
|
|
||||||
|
|
||||||
static long linebuffer_ctrl(BIO *b, int cmd, long num, void *ptr)
|
|
||||||
{
|
|
||||||
BIO *dbio;
|
|
||||||
BIO_LINEBUFFER_CTX *ctx;
|
|
||||||
long ret=1;
|
|
||||||
char *p;
|
|
||||||
int r;
|
|
||||||
int obs;
|
|
||||||
|
|
||||||
ctx=(BIO_LINEBUFFER_CTX *)b->ptr;
|
|
||||||
|
|
||||||
switch (cmd)
|
|
||||||
{
|
|
||||||
case BIO_CTRL_RESET:
|
|
||||||
ctx->obuf_len=0;
|
|
||||||
if (b->next_bio == NULL) return(0);
|
|
||||||
ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
|
|
||||||
break;
|
|
||||||
case BIO_CTRL_INFO:
|
|
||||||
ret=(long)ctx->obuf_len;
|
|
||||||
break;
|
|
||||||
case BIO_CTRL_WPENDING:
|
|
||||||
ret=(long)ctx->obuf_len;
|
|
||||||
if (ret == 0)
|
|
||||||
{
|
|
||||||
if (b->next_bio == NULL) return(0);
|
|
||||||
ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case BIO_C_SET_BUFF_SIZE:
|
|
||||||
obs=(int)num;
|
|
||||||
p=ctx->obuf;
|
|
||||||
if ((obs > DEFAULT_LINEBUFFER_SIZE) && (obs != ctx->obuf_size))
|
|
||||||
{
|
|
||||||
p=(char *)OPENSSL_malloc((int)num);
|
|
||||||
if (p == NULL)
|
|
||||||
goto malloc_error;
|
|
||||||
}
|
|
||||||
if (ctx->obuf != p)
|
|
||||||
{
|
|
||||||
if (ctx->obuf_len > obs)
|
|
||||||
{
|
|
||||||
ctx->obuf_len = obs;
|
|
||||||
}
|
|
||||||
memcpy(p, ctx->obuf, ctx->obuf_len);
|
|
||||||
OPENSSL_free(ctx->obuf);
|
|
||||||
ctx->obuf=p;
|
|
||||||
ctx->obuf_size=obs;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case BIO_C_DO_STATE_MACHINE:
|
|
||||||
if (b->next_bio == NULL) return(0);
|
|
||||||
BIO_clear_retry_flags(b);
|
|
||||||
ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
|
|
||||||
BIO_copy_next_retry(b);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BIO_CTRL_FLUSH:
|
|
||||||
if (b->next_bio == NULL) return(0);
|
|
||||||
if (ctx->obuf_len <= 0)
|
|
||||||
{
|
|
||||||
ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
BIO_clear_retry_flags(b);
|
|
||||||
if (ctx->obuf_len > 0)
|
|
||||||
{
|
|
||||||
r=BIO_write(b->next_bio,
|
|
||||||
ctx->obuf, ctx->obuf_len);
|
|
||||||
#if 0
|
|
||||||
fprintf(stderr,"FLUSH %3d -> %3d\n",ctx->obuf_len,r);
|
|
||||||
#endif
|
|
||||||
BIO_copy_next_retry(b);
|
|
||||||
if (r <= 0) return((long)r);
|
|
||||||
if (r < ctx->obuf_len)
|
|
||||||
memmove(ctx->obuf, ctx->obuf + r,
|
|
||||||
ctx->obuf_len - r);
|
|
||||||
ctx->obuf_len-=r;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ctx->obuf_len=0;
|
|
||||||
ret=1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
|
|
||||||
break;
|
|
||||||
case BIO_CTRL_DUP:
|
|
||||||
dbio=(BIO *)ptr;
|
|
||||||
if ( !BIO_set_write_buffer_size(dbio,ctx->obuf_size))
|
|
||||||
ret=0;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if (b->next_bio == NULL) return(0);
|
|
||||||
ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return(ret);
|
|
||||||
malloc_error:
|
|
||||||
BIOerr(BIO_F_LINEBUFFER_CTRL,ERR_R_MALLOC_FAILURE);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static long linebuffer_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp)
|
|
||||||
{
|
|
||||||
long ret=1;
|
|
||||||
|
|
||||||
if (b->next_bio == NULL) return(0);
|
|
||||||
switch (cmd)
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
ret=BIO_callback_ctrl(b->next_bio,cmd,fp);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int linebuffer_gets(BIO *b, char *buf, int size)
|
|
||||||
{
|
|
||||||
if (b->next_bio == NULL) return(0);
|
|
||||||
return(BIO_gets(b->next_bio,buf,size));
|
|
||||||
}
|
|
||||||
|
|
||||||
static int linebuffer_puts(BIO *b, const char *str)
|
|
||||||
{
|
|
||||||
return(linebuffer_write(b,str,strlen(str)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -91,7 +91,6 @@ extern "C" {
|
|||||||
#define BIO_TYPE_NULL_FILTER (17|0x0200)
|
#define BIO_TYPE_NULL_FILTER (17|0x0200)
|
||||||
#define BIO_TYPE_BER (18|0x0200) /* BER -> bin filter */
|
#define BIO_TYPE_BER (18|0x0200) /* BER -> bin filter */
|
||||||
#define BIO_TYPE_BIO (19|0x0400) /* (half a) BIO pair */
|
#define BIO_TYPE_BIO (19|0x0400) /* (half a) BIO pair */
|
||||||
#define BIO_TYPE_LINEBUFFER (20|0x0200) /* filter */
|
|
||||||
|
|
||||||
#define BIO_TYPE_DESCRIPTOR 0x0100 /* socket, fd, connect or accept */
|
#define BIO_TYPE_DESCRIPTOR 0x0100 /* socket, fd, connect or accept */
|
||||||
#define BIO_TYPE_FILTER 0x0200
|
#define BIO_TYPE_FILTER 0x0200
|
||||||
@@ -475,7 +474,6 @@ size_t BIO_ctrl_wpending(BIO *b);
|
|||||||
#define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL)
|
#define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL)
|
||||||
#define BIO_make_bio_pair(b1,b2) (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2)
|
#define BIO_make_bio_pair(b1,b2) (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2)
|
||||||
#define BIO_destroy_bio_pair(b) (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL)
|
#define BIO_destroy_bio_pair(b) (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL)
|
||||||
#define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL)
|
|
||||||
/* macros with inappropriate type -- but ...pending macros use int too: */
|
/* macros with inappropriate type -- but ...pending macros use int too: */
|
||||||
#define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL)
|
#define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL)
|
||||||
#define BIO_get_read_request(b) (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL)
|
#define BIO_get_read_request(b) (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL)
|
||||||
@@ -555,9 +553,6 @@ BIO_METHOD *BIO_s_bio(void);
|
|||||||
BIO_METHOD *BIO_s_null(void);
|
BIO_METHOD *BIO_s_null(void);
|
||||||
BIO_METHOD *BIO_f_null(void);
|
BIO_METHOD *BIO_f_null(void);
|
||||||
BIO_METHOD *BIO_f_buffer(void);
|
BIO_METHOD *BIO_f_buffer(void);
|
||||||
#ifdef VMS
|
|
||||||
BIO_METHOD *BIO_f_linebuffer(void);
|
|
||||||
#endif
|
|
||||||
BIO_METHOD *BIO_f_nbio_test(void);
|
BIO_METHOD *BIO_f_nbio_test(void);
|
||||||
/* BIO_METHOD *BIO_f_ber(void); */
|
/* BIO_METHOD *BIO_f_ber(void); */
|
||||||
|
|
||||||
@@ -644,7 +639,6 @@ int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args);
|
|||||||
#define BIO_F_CONN_CTRL 127
|
#define BIO_F_CONN_CTRL 127
|
||||||
#define BIO_F_CONN_STATE 115
|
#define BIO_F_CONN_STATE 115
|
||||||
#define BIO_F_FILE_CTRL 116
|
#define BIO_F_FILE_CTRL 116
|
||||||
#define BIO_F_LINEBUFFER_CTRL 129
|
|
||||||
#define BIO_F_MEM_READ 128
|
#define BIO_F_MEM_READ 128
|
||||||
#define BIO_F_MEM_WRITE 117
|
#define BIO_F_MEM_WRITE 117
|
||||||
#define BIO_F_SSL_NEW 118
|
#define BIO_F_SSL_NEW 118
|
||||||
|
|||||||
@@ -91,7 +91,6 @@ static ERR_STRING_DATA BIO_str_functs[]=
|
|||||||
{ERR_PACK(0,BIO_F_CONN_CTRL,0), "CONN_CTRL"},
|
{ERR_PACK(0,BIO_F_CONN_CTRL,0), "CONN_CTRL"},
|
||||||
{ERR_PACK(0,BIO_F_CONN_STATE,0), "CONN_STATE"},
|
{ERR_PACK(0,BIO_F_CONN_STATE,0), "CONN_STATE"},
|
||||||
{ERR_PACK(0,BIO_F_FILE_CTRL,0), "FILE_CTRL"},
|
{ERR_PACK(0,BIO_F_FILE_CTRL,0), "FILE_CTRL"},
|
||||||
{ERR_PACK(0,BIO_F_LINEBUFFER_CTRL,0), "LINEBUFFER_CTRL"},
|
|
||||||
{ERR_PACK(0,BIO_F_MEM_READ,0), "MEM_READ"},
|
{ERR_PACK(0,BIO_F_MEM_READ,0), "MEM_READ"},
|
||||||
{ERR_PACK(0,BIO_F_MEM_WRITE,0), "MEM_WRITE"},
|
{ERR_PACK(0,BIO_F_MEM_WRITE,0), "MEM_WRITE"},
|
||||||
{ERR_PACK(0,BIO_F_SSL_NEW,0), "SSL_new"},
|
{ERR_PACK(0,BIO_F_SSL_NEW,0), "SSL_new"},
|
||||||
|
|||||||
@@ -236,7 +236,7 @@ static int conn_state(BIO *b, BIO_CONNECT *c)
|
|||||||
}
|
}
|
||||||
c->state=BIO_CONN_S_CONNECT;
|
c->state=BIO_CONN_S_CONNECT;
|
||||||
|
|
||||||
#if defined(SO_KEEPALIVE) && !defined(MPE)
|
#ifdef SO_KEEPALIVE
|
||||||
i=1;
|
i=1;
|
||||||
i=setsockopt(b->num,SOL_SOCKET,SO_KEEPALIVE,(char *)&i,sizeof(i));
|
i=setsockopt(b->num,SOL_SOCKET,SO_KEEPALIVE,(char *)&i,sizeof(i));
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ On the 2 alpha C compilers I had access to, it was not possible to do
|
|||||||
were 64 bits). So the hand assember gives access to the 128 bit result and
|
were 64 bits). So the hand assember gives access to the 128 bit result and
|
||||||
a 2 times speedup :-).
|
a 2 times speedup :-).
|
||||||
|
|
||||||
There are 3 versions of assember for the HP PA-RISC.
|
There are 2 versions of assember for the HP PA-RISC.
|
||||||
|
pa-risc.s is the origional one which works fine.
|
||||||
pa-risc.s is the origional one which works fine and generated using gcc :-)
|
pa-risc2.s is a new version that often generates warnings but if the
|
||||||
|
tests pass, it gives performance that is over 2 times faster than
|
||||||
pa-risc2W.s and pa-risc2.s are 64 and 32-bit PA-RISC 2.0 implementations
|
pa-risc.s.
|
||||||
by Chris Ruemmler from HP (with some help from the HP C compiler).
|
Both were generated using gcc :-)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,416 +0,0 @@
|
|||||||
.SPACE $PRIVATE$
|
|
||||||
.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
|
|
||||||
.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
|
|
||||||
.SPACE $TEXT$
|
|
||||||
.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
|
|
||||||
.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
|
|
||||||
.IMPORT $global$,DATA
|
|
||||||
.IMPORT $$dyncall,MILLICODE
|
|
||||||
; gcc_compiled.:
|
|
||||||
.SPACE $TEXT$
|
|
||||||
.SUBSPA $CODE$
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
.EXPORT bn_mul_add_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR
|
|
||||||
bn_mul_add_words
|
|
||||||
.PROC
|
|
||||||
.CALLINFO FRAME=64,CALLS,SAVE_RP,ENTRY_GR=4
|
|
||||||
.ENTRY
|
|
||||||
stw %r2,-20(0,%r30)
|
|
||||||
stwm %r4,64(0,%r30)
|
|
||||||
copy %r24,%r31
|
|
||||||
stw %r3,-60(0,%r30)
|
|
||||||
ldi 0,%r20
|
|
||||||
ldo 12(%r26),%r2
|
|
||||||
stw %r23,-16(0,%r30)
|
|
||||||
copy %r25,%r3
|
|
||||||
ldo 12(%r3),%r1
|
|
||||||
fldws -16(0,%r30),%fr8L
|
|
||||||
L$0010
|
|
||||||
copy %r20,%r25
|
|
||||||
ldi 0,%r24
|
|
||||||
fldws 0(0,%r3),%fr9L
|
|
||||||
ldw 0(0,%r26),%r19
|
|
||||||
xmpyu %fr8L,%fr9L,%fr9
|
|
||||||
fstds %fr9,-16(0,%r30)
|
|
||||||
copy %r19,%r23
|
|
||||||
ldw -16(0,%r30),%r28
|
|
||||||
ldw -12(0,%r30),%r29
|
|
||||||
ldi 0,%r22
|
|
||||||
add %r23,%r29,%r29
|
|
||||||
addc %r22,%r28,%r28
|
|
||||||
add %r25,%r29,%r29
|
|
||||||
addc %r24,%r28,%r28
|
|
||||||
copy %r28,%r21
|
|
||||||
ldi 0,%r20
|
|
||||||
copy %r21,%r20
|
|
||||||
addib,= -1,%r31,L$0011
|
|
||||||
stw %r29,0(0,%r26)
|
|
||||||
copy %r20,%r25
|
|
||||||
ldi 0,%r24
|
|
||||||
fldws -8(0,%r1),%fr9L
|
|
||||||
ldw -8(0,%r2),%r19
|
|
||||||
xmpyu %fr8L,%fr9L,%fr9
|
|
||||||
fstds %fr9,-16(0,%r30)
|
|
||||||
copy %r19,%r23
|
|
||||||
ldw -16(0,%r30),%r28
|
|
||||||
ldw -12(0,%r30),%r29
|
|
||||||
ldi 0,%r22
|
|
||||||
add %r23,%r29,%r29
|
|
||||||
addc %r22,%r28,%r28
|
|
||||||
add %r25,%r29,%r29
|
|
||||||
addc %r24,%r28,%r28
|
|
||||||
copy %r28,%r21
|
|
||||||
ldi 0,%r20
|
|
||||||
copy %r21,%r20
|
|
||||||
addib,= -1,%r31,L$0011
|
|
||||||
stw %r29,-8(0,%r2)
|
|
||||||
copy %r20,%r25
|
|
||||||
ldi 0,%r24
|
|
||||||
fldws -4(0,%r1),%fr9L
|
|
||||||
ldw -4(0,%r2),%r19
|
|
||||||
xmpyu %fr8L,%fr9L,%fr9
|
|
||||||
fstds %fr9,-16(0,%r30)
|
|
||||||
copy %r19,%r23
|
|
||||||
ldw -16(0,%r30),%r28
|
|
||||||
ldw -12(0,%r30),%r29
|
|
||||||
ldi 0,%r22
|
|
||||||
add %r23,%r29,%r29
|
|
||||||
addc %r22,%r28,%r28
|
|
||||||
add %r25,%r29,%r29
|
|
||||||
addc %r24,%r28,%r28
|
|
||||||
copy %r28,%r21
|
|
||||||
ldi 0,%r20
|
|
||||||
copy %r21,%r20
|
|
||||||
addib,= -1,%r31,L$0011
|
|
||||||
stw %r29,-4(0,%r2)
|
|
||||||
copy %r20,%r25
|
|
||||||
ldi 0,%r24
|
|
||||||
fldws 0(0,%r1),%fr9L
|
|
||||||
ldw 0(0,%r2),%r19
|
|
||||||
xmpyu %fr8L,%fr9L,%fr9
|
|
||||||
fstds %fr9,-16(0,%r30)
|
|
||||||
copy %r19,%r23
|
|
||||||
ldw -16(0,%r30),%r28
|
|
||||||
ldw -12(0,%r30),%r29
|
|
||||||
ldi 0,%r22
|
|
||||||
add %r23,%r29,%r29
|
|
||||||
addc %r22,%r28,%r28
|
|
||||||
add %r25,%r29,%r29
|
|
||||||
addc %r24,%r28,%r28
|
|
||||||
copy %r28,%r21
|
|
||||||
ldi 0,%r20
|
|
||||||
copy %r21,%r20
|
|
||||||
addib,= -1,%r31,L$0011
|
|
||||||
stw %r29,0(0,%r2)
|
|
||||||
ldo 16(%r1),%r1
|
|
||||||
ldo 16(%r3),%r3
|
|
||||||
ldo 16(%r2),%r2
|
|
||||||
bl L$0010,0
|
|
||||||
ldo 16(%r26),%r26
|
|
||||||
L$0011
|
|
||||||
copy %r20,%r28
|
|
||||||
ldw -84(0,%r30),%r2
|
|
||||||
ldw -60(0,%r30),%r3
|
|
||||||
bv 0(%r2)
|
|
||||||
ldwm -64(0,%r30),%r4
|
|
||||||
.EXIT
|
|
||||||
.PROCEND
|
|
||||||
.align 4
|
|
||||||
.EXPORT bn_mul_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR
|
|
||||||
bn_mul_words
|
|
||||||
.PROC
|
|
||||||
.CALLINFO FRAME=64,CALLS,SAVE_RP,ENTRY_GR=3
|
|
||||||
.ENTRY
|
|
||||||
stw %r2,-20(0,%r30)
|
|
||||||
copy %r25,%r2
|
|
||||||
stwm %r4,64(0,%r30)
|
|
||||||
copy %r24,%r19
|
|
||||||
ldi 0,%r28
|
|
||||||
stw %r23,-16(0,%r30)
|
|
||||||
ldo 12(%r26),%r31
|
|
||||||
ldo 12(%r2),%r29
|
|
||||||
fldws -16(0,%r30),%fr8L
|
|
||||||
L$0026
|
|
||||||
fldws 0(0,%r2),%fr9L
|
|
||||||
xmpyu %fr8L,%fr9L,%fr9
|
|
||||||
fstds %fr9,-16(0,%r30)
|
|
||||||
copy %r28,%r21
|
|
||||||
ldi 0,%r20
|
|
||||||
ldw -16(0,%r30),%r24
|
|
||||||
ldw -12(0,%r30),%r25
|
|
||||||
add %r21,%r25,%r25
|
|
||||||
addc %r20,%r24,%r24
|
|
||||||
copy %r24,%r23
|
|
||||||
ldi 0,%r22
|
|
||||||
copy %r23,%r28
|
|
||||||
addib,= -1,%r19,L$0027
|
|
||||||
stw %r25,0(0,%r26)
|
|
||||||
fldws -8(0,%r29),%fr9L
|
|
||||||
xmpyu %fr8L,%fr9L,%fr9
|
|
||||||
fstds %fr9,-16(0,%r30)
|
|
||||||
copy %r28,%r21
|
|
||||||
ldi 0,%r20
|
|
||||||
ldw -16(0,%r30),%r24
|
|
||||||
ldw -12(0,%r30),%r25
|
|
||||||
add %r21,%r25,%r25
|
|
||||||
addc %r20,%r24,%r24
|
|
||||||
copy %r24,%r23
|
|
||||||
ldi 0,%r22
|
|
||||||
copy %r23,%r28
|
|
||||||
addib,= -1,%r19,L$0027
|
|
||||||
stw %r25,-8(0,%r31)
|
|
||||||
fldws -4(0,%r29),%fr9L
|
|
||||||
xmpyu %fr8L,%fr9L,%fr9
|
|
||||||
fstds %fr9,-16(0,%r30)
|
|
||||||
copy %r28,%r21
|
|
||||||
ldi 0,%r20
|
|
||||||
ldw -16(0,%r30),%r24
|
|
||||||
ldw -12(0,%r30),%r25
|
|
||||||
add %r21,%r25,%r25
|
|
||||||
addc %r20,%r24,%r24
|
|
||||||
copy %r24,%r23
|
|
||||||
ldi 0,%r22
|
|
||||||
copy %r23,%r28
|
|
||||||
addib,= -1,%r19,L$0027
|
|
||||||
stw %r25,-4(0,%r31)
|
|
||||||
fldws 0(0,%r29),%fr9L
|
|
||||||
xmpyu %fr8L,%fr9L,%fr9
|
|
||||||
fstds %fr9,-16(0,%r30)
|
|
||||||
copy %r28,%r21
|
|
||||||
ldi 0,%r20
|
|
||||||
ldw -16(0,%r30),%r24
|
|
||||||
ldw -12(0,%r30),%r25
|
|
||||||
add %r21,%r25,%r25
|
|
||||||
addc %r20,%r24,%r24
|
|
||||||
copy %r24,%r23
|
|
||||||
ldi 0,%r22
|
|
||||||
copy %r23,%r28
|
|
||||||
addib,= -1,%r19,L$0027
|
|
||||||
stw %r25,0(0,%r31)
|
|
||||||
ldo 16(%r29),%r29
|
|
||||||
ldo 16(%r2),%r2
|
|
||||||
ldo 16(%r31),%r31
|
|
||||||
bl L$0026,0
|
|
||||||
ldo 16(%r26),%r26
|
|
||||||
L$0027
|
|
||||||
ldw -84(0,%r30),%r2
|
|
||||||
bv 0(%r2)
|
|
||||||
ldwm -64(0,%r30),%r4
|
|
||||||
.EXIT
|
|
||||||
.PROCEND
|
|
||||||
.align 4
|
|
||||||
.EXPORT bn_sqr_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR
|
|
||||||
bn_sqr_words
|
|
||||||
.PROC
|
|
||||||
.CALLINFO FRAME=0,NO_CALLS
|
|
||||||
.ENTRY
|
|
||||||
ldo 28(%r26),%r19
|
|
||||||
ldo 12(%r25),%r28
|
|
||||||
L$0042
|
|
||||||
fldws 0(0,%r25),%fr8L
|
|
||||||
fldws 0(0,%r25),%fr8R
|
|
||||||
xmpyu %fr8L,%fr8R,%fr8
|
|
||||||
fstds %fr8,-16(0,%r30)
|
|
||||||
ldw -16(0,%r30),%r22
|
|
||||||
ldw -12(0,%r30),%r23
|
|
||||||
stw %r23,0(0,%r26)
|
|
||||||
copy %r22,%r21
|
|
||||||
ldi 0,%r20
|
|
||||||
addib,= -1,%r24,L$0049
|
|
||||||
stw %r21,-24(0,%r19)
|
|
||||||
fldws -8(0,%r28),%fr8L
|
|
||||||
fldws -8(0,%r28),%fr8R
|
|
||||||
xmpyu %fr8L,%fr8R,%fr8
|
|
||||||
fstds %fr8,-16(0,%r30)
|
|
||||||
ldw -16(0,%r30),%r22
|
|
||||||
ldw -12(0,%r30),%r23
|
|
||||||
stw %r23,-20(0,%r19)
|
|
||||||
copy %r22,%r21
|
|
||||||
ldi 0,%r20
|
|
||||||
addib,= -1,%r24,L$0049
|
|
||||||
stw %r21,-16(0,%r19)
|
|
||||||
fldws -4(0,%r28),%fr8L
|
|
||||||
fldws -4(0,%r28),%fr8R
|
|
||||||
xmpyu %fr8L,%fr8R,%fr8
|
|
||||||
fstds %fr8,-16(0,%r30)
|
|
||||||
ldw -16(0,%r30),%r22
|
|
||||||
ldw -12(0,%r30),%r23
|
|
||||||
stw %r23,-12(0,%r19)
|
|
||||||
copy %r22,%r21
|
|
||||||
ldi 0,%r20
|
|
||||||
addib,= -1,%r24,L$0049
|
|
||||||
stw %r21,-8(0,%r19)
|
|
||||||
fldws 0(0,%r28),%fr8L
|
|
||||||
fldws 0(0,%r28),%fr8R
|
|
||||||
xmpyu %fr8L,%fr8R,%fr8
|
|
||||||
fstds %fr8,-16(0,%r30)
|
|
||||||
ldw -16(0,%r30),%r22
|
|
||||||
ldw -12(0,%r30),%r23
|
|
||||||
stw %r23,-4(0,%r19)
|
|
||||||
copy %r22,%r21
|
|
||||||
ldi 0,%r20
|
|
||||||
addib,= -1,%r24,L$0049
|
|
||||||
stw %r21,0(0,%r19)
|
|
||||||
ldo 16(%r28),%r28
|
|
||||||
ldo 16(%r25),%r25
|
|
||||||
ldo 32(%r19),%r19
|
|
||||||
bl L$0042,0
|
|
||||||
ldo 32(%r26),%r26
|
|
||||||
L$0049
|
|
||||||
bv,n 0(%r2)
|
|
||||||
.EXIT
|
|
||||||
.PROCEND
|
|
||||||
.IMPORT BN_num_bits_word,CODE
|
|
||||||
.IMPORT fprintf,CODE
|
|
||||||
.IMPORT __iob,DATA
|
|
||||||
.SPACE $TEXT$
|
|
||||||
.SUBSPA $LIT$
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
L$C0000
|
|
||||||
.STRING "Division would overflow (%d)\x0a\x00"
|
|
||||||
.IMPORT abort,CODE
|
|
||||||
.SPACE $TEXT$
|
|
||||||
.SUBSPA $CODE$
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
.EXPORT bn_div64,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,RTNVAL=GR
|
|
||||||
bn_div64
|
|
||||||
.PROC
|
|
||||||
.CALLINFO FRAME=128,CALLS,SAVE_RP,ENTRY_GR=8
|
|
||||||
.ENTRY
|
|
||||||
stw %r2,-20(0,%r30)
|
|
||||||
stwm %r8,128(0,%r30)
|
|
||||||
stw %r7,-124(0,%r30)
|
|
||||||
stw %r4,-112(0,%r30)
|
|
||||||
stw %r3,-108(0,%r30)
|
|
||||||
copy %r26,%r3
|
|
||||||
copy %r25,%r4
|
|
||||||
stw %r6,-120(0,%r30)
|
|
||||||
ldi 0,%r7
|
|
||||||
stw %r5,-116(0,%r30)
|
|
||||||
movb,<> %r24,%r5,L$0051
|
|
||||||
ldi 2,%r6
|
|
||||||
bl L$0068,0
|
|
||||||
ldi -1,%r28
|
|
||||||
L$0051
|
|
||||||
.CALL ARGW0=GR
|
|
||||||
bl BN_num_bits_word,%r2
|
|
||||||
copy %r5,%r26
|
|
||||||
copy %r28,%r24
|
|
||||||
ldi 32,%r19
|
|
||||||
comb,= %r19,%r24,L$0052
|
|
||||||
subi 31,%r24,%r19
|
|
||||||
mtsar %r19
|
|
||||||
zvdepi 1,32,%r19
|
|
||||||
comb,>>= %r19,%r3,L$0052
|
|
||||||
addil LR'__iob-$global$+32,%r27
|
|
||||||
ldo RR'__iob-$global$+32(%r1),%r26
|
|
||||||
ldil LR'L$C0000,%r25
|
|
||||||
.CALL ARGW0=GR,ARGW1=GR,ARGW2=GR
|
|
||||||
bl fprintf,%r2
|
|
||||||
ldo RR'L$C0000(%r25),%r25
|
|
||||||
.CALL
|
|
||||||
bl abort,%r2
|
|
||||||
nop
|
|
||||||
L$0052
|
|
||||||
comb,>> %r5,%r3,L$0053
|
|
||||||
subi 32,%r24,%r24
|
|
||||||
sub %r3,%r5,%r3
|
|
||||||
L$0053
|
|
||||||
comib,= 0,%r24,L$0054
|
|
||||||
subi 31,%r24,%r19
|
|
||||||
mtsar %r19
|
|
||||||
zvdep %r5,32,%r5
|
|
||||||
zvdep %r3,32,%r21
|
|
||||||
subi 32,%r24,%r20
|
|
||||||
mtsar %r20
|
|
||||||
vshd 0,%r4,%r20
|
|
||||||
or %r21,%r20,%r3
|
|
||||||
mtsar %r19
|
|
||||||
zvdep %r4,32,%r4
|
|
||||||
L$0054
|
|
||||||
extru %r5,15,16,%r23
|
|
||||||
extru %r5,31,16,%r28
|
|
||||||
L$0055
|
|
||||||
extru %r3,15,16,%r19
|
|
||||||
comb,<> %r23,%r19,L$0058
|
|
||||||
copy %r3,%r26
|
|
||||||
bl L$0059,0
|
|
||||||
zdepi -1,31,16,%r29
|
|
||||||
L$0058
|
|
||||||
.IMPORT $$divU,MILLICODE
|
|
||||||
bl $$divU,%r31
|
|
||||||
copy %r23,%r25
|
|
||||||
L$0059
|
|
||||||
stw %r29,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10L
|
|
||||||
stw %r28,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
stw %r23,-16(0,%r30)
|
|
||||||
xmpyu %fr10L,%fr10R,%fr8
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
xmpyu %fr10L,%fr10R,%fr9
|
|
||||||
ldw -16(0,%r30),%r8
|
|
||||||
fstws %fr9R,-16(0,%r30)
|
|
||||||
copy %r8,%r22
|
|
||||||
ldw -16(0,%r30),%r8
|
|
||||||
extru %r4,15,16,%r24
|
|
||||||
copy %r8,%r21
|
|
||||||
L$0060
|
|
||||||
sub %r3,%r21,%r20
|
|
||||||
copy %r20,%r19
|
|
||||||
depi 0,31,16,%r19
|
|
||||||
comib,<> 0,%r19,L$0061
|
|
||||||
zdep %r20,15,16,%r19
|
|
||||||
addl %r19,%r24,%r19
|
|
||||||
comb,>>= %r19,%r22,L$0061
|
|
||||||
sub %r22,%r28,%r22
|
|
||||||
sub %r21,%r23,%r21
|
|
||||||
bl L$0060,0
|
|
||||||
ldo -1(%r29),%r29
|
|
||||||
L$0061
|
|
||||||
stw %r29,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10L
|
|
||||||
stw %r28,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
xmpyu %fr10L,%fr10R,%fr8
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
ldw -16(0,%r30),%r8
|
|
||||||
stw %r23,-16(0,%r30)
|
|
||||||
fldws -16(0,%r30),%fr10R
|
|
||||||
copy %r8,%r19
|
|
||||||
xmpyu %fr10L,%fr10R,%fr8
|
|
||||||
fstws %fr8R,-16(0,%r30)
|
|
||||||
extru %r19,15,16,%r20
|
|
||||||
ldw -16(0,%r30),%r8
|
|
||||||
zdep %r19,15,16,%r19
|
|
||||||
addl %r8,%r20,%r20
|
|
||||||
comclr,<<= %r19,%r4,0
|
|
||||||
addi 1,%r20,%r20
|
|
||||||
comb,<<= %r20,%r3,L$0066
|
|
||||||
sub %r4,%r19,%r4
|
|
||||||
addl %r3,%r5,%r3
|
|
||||||
ldo -1(%r29),%r29
|
|
||||||
L$0066
|
|
||||||
addib,= -1,%r6,L$0056
|
|
||||||
sub %r3,%r20,%r3
|
|
||||||
zdep %r29,15,16,%r7
|
|
||||||
shd %r3,%r4,16,%r3
|
|
||||||
bl L$0055,0
|
|
||||||
zdep %r4,15,16,%r4
|
|
||||||
L$0056
|
|
||||||
or %r7,%r29,%r28
|
|
||||||
L$0068
|
|
||||||
ldw -148(0,%r30),%r2
|
|
||||||
ldw -124(0,%r30),%r7
|
|
||||||
ldw -120(0,%r30),%r6
|
|
||||||
ldw -116(0,%r30),%r5
|
|
||||||
ldw -112(0,%r30),%r4
|
|
||||||
ldw -108(0,%r30),%r3
|
|
||||||
bv 0(%r2)
|
|
||||||
ldwm -128(0,%r30),%r8
|
|
||||||
.EXIT
|
|
||||||
.PROCEND
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -113,13 +113,6 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "cryptlib.h"
|
#include "cryptlib.h"
|
||||||
#include "bn_lcl.h"
|
#include "bn_lcl.h"
|
||||||
#ifdef ATALLA
|
|
||||||
# include <alloca.h>
|
|
||||||
# include <atasi.h>
|
|
||||||
# include <assert.h>
|
|
||||||
# include <dlfcn.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#define TABLE_SIZE 32
|
#define TABLE_SIZE 32
|
||||||
|
|
||||||
@@ -183,174 +176,6 @@ err:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef ATALLA
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This routine will dynamically check for the existance of an Atalla AXL-200
|
|
||||||
* SSL accelerator module. If one is found, the variable
|
|
||||||
* asi_accelerator_present is set to 1 and the function pointers
|
|
||||||
* ptr_ASI_xxxxxx above will be initialized to corresponding ASI API calls.
|
|
||||||
*/
|
|
||||||
typedef int tfnASI_GetPerformanceStatistics(int reset_flag,
|
|
||||||
unsigned int *ret_buf);
|
|
||||||
typedef int tfnASI_GetHardwareConfig(long card_num, unsigned int *ret_buf);
|
|
||||||
typedef int tfnASI_RSAPrivateKeyOpFn(RSAPrivateKey * rsaKey,
|
|
||||||
unsigned char *output,
|
|
||||||
unsigned char *input,
|
|
||||||
unsigned int modulus_len);
|
|
||||||
|
|
||||||
static tfnASI_GetHardwareConfig *ptr_ASI_GetHardwareConfig;
|
|
||||||
static tfnASI_RSAPrivateKeyOpFn *ptr_ASI_RSAPrivateKeyOpFn;
|
|
||||||
static tfnASI_GetPerformanceStatistics *ptr_ASI_GetPerformanceStatistics;
|
|
||||||
static int asi_accelerator_present;
|
|
||||||
static int tried_atalla;
|
|
||||||
|
|
||||||
void atalla_initialize_accelerator_handle(void)
|
|
||||||
{
|
|
||||||
void *dl_handle;
|
|
||||||
int status;
|
|
||||||
unsigned int config_buf[1024];
|
|
||||||
static int tested;
|
|
||||||
|
|
||||||
if(tested)
|
|
||||||
return;
|
|
||||||
|
|
||||||
tested=1;
|
|
||||||
|
|
||||||
bzero((void *)config_buf, 1024);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check to see if the library is present on the system
|
|
||||||
*/
|
|
||||||
dl_handle = dlopen("atasi.so", RTLD_NOW);
|
|
||||||
if (dl_handle == (void *) NULL)
|
|
||||||
{
|
|
||||||
/* printf("atasi.so library is not present on the system\n");
|
|
||||||
printf("No HW acceleration available\n");*/
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The library is present. Now we'll check to insure that the
|
|
||||||
* LDM is up and running. First we'll get the address of the
|
|
||||||
* function in the atasi library that we need to see if the
|
|
||||||
* LDM is operating.
|
|
||||||
*/
|
|
||||||
|
|
||||||
ptr_ASI_GetHardwareConfig =
|
|
||||||
(tfnASI_GetHardwareConfig *)dlsym(dl_handle,"ASI_GetHardwareConfig");
|
|
||||||
|
|
||||||
if (ptr_ASI_GetHardwareConfig)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* We found the call, now we'll get our config
|
|
||||||
* status. If we get a non 0 result, the LDM is not
|
|
||||||
* running and we cannot use the Atalla ASI *
|
|
||||||
* library.
|
|
||||||
*/
|
|
||||||
status = (*ptr_ASI_GetHardwareConfig)(0L, config_buf);
|
|
||||||
if (status != 0)
|
|
||||||
{
|
|
||||||
printf("atasi.so library is present but not initialized\n");
|
|
||||||
printf("No HW acceleration available\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* printf("We found the library, but not the function. Very Strange!\n");*/
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* It looks like we have acceleration capabilities. Load up the
|
|
||||||
* pointers to our ASI API calls.
|
|
||||||
*/
|
|
||||||
ptr_ASI_RSAPrivateKeyOpFn=
|
|
||||||
(tfnASI_RSAPrivateKeyOpFn *)dlsym(dl_handle, "ASI_RSAPrivateKeyOpFn");
|
|
||||||
if (ptr_ASI_RSAPrivateKeyOpFn == NULL)
|
|
||||||
{
|
|
||||||
/* printf("We found the library, but no RSA function. Very Strange!\n");*/
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ptr_ASI_GetPerformanceStatistics =
|
|
||||||
(tfnASI_GetPerformanceStatistics *)dlsym(dl_handle, "ASI_GetPerformanceStatistics");
|
|
||||||
if (ptr_ASI_GetPerformanceStatistics == NULL)
|
|
||||||
{
|
|
||||||
/* printf("We found the library, but no stat function. Very Strange!\n");*/
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Indicate that acceleration is available
|
|
||||||
*/
|
|
||||||
asi_accelerator_present = 1;
|
|
||||||
|
|
||||||
/* printf("This system has acceleration!\n");*/
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* make sure this only gets called once when bn_mod_exp calls bn_mod_exp_mont */
|
|
||||||
int BN_mod_exp_atalla(BIGNUM *r, BIGNUM *a, const BIGNUM *p, const BIGNUM *m)
|
|
||||||
{
|
|
||||||
unsigned char *abin;
|
|
||||||
unsigned char *pbin;
|
|
||||||
unsigned char *mbin;
|
|
||||||
unsigned char *rbin;
|
|
||||||
int an,pn,mn,ret;
|
|
||||||
RSAPrivateKey keydata;
|
|
||||||
|
|
||||||
atalla_initialize_accelerator_handle();
|
|
||||||
if(!asi_accelerator_present)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
|
|
||||||
/* We should be able to run without size testing */
|
|
||||||
# define ASIZE 128
|
|
||||||
an=BN_num_bytes(a);
|
|
||||||
pn=BN_num_bytes(p);
|
|
||||||
mn=BN_num_bytes(m);
|
|
||||||
|
|
||||||
if(an <= ASIZE && pn <= ASIZE && mn <= ASIZE)
|
|
||||||
{
|
|
||||||
int size=mn;
|
|
||||||
|
|
||||||
assert(an <= mn);
|
|
||||||
abin=alloca(size);
|
|
||||||
memset(abin,'\0',mn);
|
|
||||||
BN_bn2bin(a,abin+size-an);
|
|
||||||
|
|
||||||
pbin=alloca(pn);
|
|
||||||
BN_bn2bin(p,pbin);
|
|
||||||
|
|
||||||
mbin=alloca(size);
|
|
||||||
memset(mbin,'\0',mn);
|
|
||||||
BN_bn2bin(m,mbin+size-mn);
|
|
||||||
|
|
||||||
rbin=alloca(size);
|
|
||||||
|
|
||||||
memset(&keydata,'\0',sizeof keydata);
|
|
||||||
keydata.privateExponent.data=pbin;
|
|
||||||
keydata.privateExponent.len=pn;
|
|
||||||
keydata.modulus.data=mbin;
|
|
||||||
keydata.modulus.len=size;
|
|
||||||
|
|
||||||
ret=(*ptr_ASI_RSAPrivateKeyOpFn)(&keydata,rbin,abin,keydata.modulus.len);
|
|
||||||
/*fprintf(stderr,"!%s\n",BN_bn2hex(a));*/
|
|
||||||
if(!ret)
|
|
||||||
{
|
|
||||||
BN_bin2bn(rbin,keydata.modulus.len,r);
|
|
||||||
/*fprintf(stderr,"?%s\n",BN_bn2hex(r));*/
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif /* def ATALLA */
|
|
||||||
|
|
||||||
|
|
||||||
int BN_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p, const BIGNUM *m,
|
int BN_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p, const BIGNUM *m,
|
||||||
BN_CTX *ctx)
|
BN_CTX *ctx)
|
||||||
{
|
{
|
||||||
@@ -360,13 +185,6 @@ int BN_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p, const BIGNUM *m,
|
|||||||
bn_check_top(p);
|
bn_check_top(p);
|
||||||
bn_check_top(m);
|
bn_check_top(m);
|
||||||
|
|
||||||
#ifdef ATALLA
|
|
||||||
if(BN_mod_exp_atalla(r,a,p,m))
|
|
||||||
return 1;
|
|
||||||
/* If it fails, try the other methods (but don't try atalla again) */
|
|
||||||
tried_atalla=1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef MONT_MUL_MOD
|
#ifdef MONT_MUL_MOD
|
||||||
/* I have finally been able to take out this pre-condition of
|
/* I have finally been able to take out this pre-condition of
|
||||||
* the top bit being set. It was caused by an error in BN_div
|
* the top bit being set. It was caused by an error in BN_div
|
||||||
@@ -392,10 +210,6 @@ int BN_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p, const BIGNUM *m,
|
|||||||
{ ret=BN_mod_exp_simple(r,a,p,m,ctx); }
|
{ ret=BN_mod_exp_simple(r,a,p,m,ctx); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ATALLA
|
|
||||||
tried_atalla=0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -525,12 +339,6 @@ int BN_mod_exp_mont(BIGNUM *rr, BIGNUM *a, const BIGNUM *p,
|
|||||||
bn_check_top(p);
|
bn_check_top(p);
|
||||||
bn_check_top(m);
|
bn_check_top(m);
|
||||||
|
|
||||||
#ifdef ATALLA
|
|
||||||
if(!tried_atalla && BN_mod_exp_atalla(rr,a,p,m))
|
|
||||||
return 1;
|
|
||||||
/* If it fails, try the other methods */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!(m->d[0] & 1))
|
if (!(m->d[0] & 1))
|
||||||
{
|
{
|
||||||
BNerr(BN_F_BN_MOD_EXP_MONT,BN_R_CALLED_WITH_EVEN_MODULUS);
|
BNerr(BN_F_BN_MOD_EXP_MONT,BN_R_CALLED_WITH_EVEN_MODULUS);
|
||||||
@@ -693,19 +501,6 @@ int BN_mod_exp_mont_word(BIGNUM *rr, BN_ULONG a, const BIGNUM *p,
|
|||||||
t = BN_CTX_get(ctx);
|
t = BN_CTX_get(ctx);
|
||||||
if (d == NULL || r == NULL || t == NULL) goto err;
|
if (d == NULL || r == NULL || t == NULL) goto err;
|
||||||
|
|
||||||
#ifdef ATALLA
|
|
||||||
if (!tried_atalla)
|
|
||||||
{
|
|
||||||
BN_set_word(t, a);
|
|
||||||
if (BN_mod_exp_atalla(rr, t, p, m))
|
|
||||||
{
|
|
||||||
BN_CTX_end(ctx);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* If it fails, try the other methods */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (in_mont != NULL)
|
if (in_mont != NULL)
|
||||||
mont=in_mont;
|
mont=in_mont;
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -85,7 +85,16 @@ int BN_mod_mul_montgomery(BIGNUM *r, BIGNUM *a, BIGNUM *b,
|
|||||||
|
|
||||||
if (a == b)
|
if (a == b)
|
||||||
{
|
{
|
||||||
|
#if 1
|
||||||
|
bn_wexpand(tmp,a->top*2);
|
||||||
|
bn_wexpand(tmp2,a->top*4);
|
||||||
|
bn_sqr_recursive(tmp->d,a->d,a->top,tmp2->d);
|
||||||
|
tmp->top=a->top*2;
|
||||||
|
if (tmp->top > 0 && tmp->d[tmp->top-1] == 0)
|
||||||
|
tmp->top--;
|
||||||
|
#else
|
||||||
if (!BN_sqr(tmp,a,ctx)) goto err;
|
if (!BN_sqr(tmp,a,ctx)) goto err;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -181,7 +190,6 @@ int BN_from_montgomery(BIGNUM *ret, BIGNUM *a, BN_MONT_CTX *mont,
|
|||||||
#if 0
|
#if 0
|
||||||
BN_rshift(ret,r,mont->ri);
|
BN_rshift(ret,r,mont->ri);
|
||||||
#else
|
#else
|
||||||
ret->neg = r->neg;
|
|
||||||
x=ri;
|
x=ri;
|
||||||
rp=ret->d;
|
rp=ret->d;
|
||||||
ap= &(r->d[x]);
|
ap= &(r->d[x]);
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ void bn_sqr_normal(BN_ULONG *r, BN_ULONG *a, int n, BN_ULONG *tmp)
|
|||||||
|
|
||||||
#ifdef BN_RECURSION
|
#ifdef BN_RECURSION
|
||||||
/* r is 2*n words in size,
|
/* r is 2*n words in size,
|
||||||
* a and b are both n words in size. (There's not actually a 'b' here ...)
|
* a and b are both n words in size.
|
||||||
* n must be a power of 2.
|
* n must be a power of 2.
|
||||||
* We multiply and return the result.
|
* We multiply and return the result.
|
||||||
* t must be 2*n words in size
|
* t must be 2*n words in size
|
||||||
|
|||||||
@@ -100,7 +100,8 @@ static const char* lock_names[CRYPTO_NUM_LOCKS] =
|
|||||||
"debug_malloc2",
|
"debug_malloc2",
|
||||||
"dso",
|
"dso",
|
||||||
"dynlock",
|
"dynlock",
|
||||||
#if CRYPTO_NUM_LOCKS != 28
|
"engine",
|
||||||
|
#if CRYPTO_NUM_LOCKS != 29
|
||||||
# error "Inconsistency between crypto.h and cryptlib.c"
|
# error "Inconsistency between crypto.h and cryptlib.c"
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ $! Define The Different Encryption Types.
|
|||||||
$!
|
$!
|
||||||
$ ENCRYPT_TYPES = "Basic,MD2,MD4,MD5,SHA,MDC2,HMAC,RIPEMD,"+ -
|
$ ENCRYPT_TYPES = "Basic,MD2,MD4,MD5,SHA,MDC2,HMAC,RIPEMD,"+ -
|
||||||
"DES,RC2,RC4,RC5,IDEA,BF,CAST,"+ -
|
"DES,RC2,RC4,RC5,IDEA,BF,CAST,"+ -
|
||||||
"BN,RSA,DSA,DH,DSO,"+ -
|
"BN,RSA,DSA,DH,DSO,ENGINE,"+ -
|
||||||
"BUFFER,BIO,STACK,LHASH,RAND,ERR,OBJECTS,"+ -
|
"BUFFER,BIO,STACK,LHASH,RAND,ERR,OBJECTS,"+ -
|
||||||
"EVP,EVP_2,ASN1,ASN1_2,PEM,X509,X509V3,"+ -
|
"EVP,EVP_2,ASN1,ASN1_2,PEM,X509,X509V3,"+ -
|
||||||
"CONF,TXT_DB,PKCS7,PKCS12,COMP"
|
"CONF,TXT_DB,PKCS7,PKCS12,COMP"
|
||||||
@@ -204,15 +204,15 @@ $ LIB_RSA = "rsa_eay,rsa_gen,rsa_lib,rsa_sign,rsa_saos,rsa_err,"+ -
|
|||||||
"rsa_pk1,rsa_ssl,rsa_none,rsa_oaep,rsa_chk,rsa_null"
|
"rsa_pk1,rsa_ssl,rsa_none,rsa_oaep,rsa_chk,rsa_null"
|
||||||
$ LIB_DSA = "dsa_gen,dsa_key,dsa_lib,dsa_asn1,dsa_vrf,dsa_sign,dsa_err,dsa_ossl"
|
$ LIB_DSA = "dsa_gen,dsa_key,dsa_lib,dsa_asn1,dsa_vrf,dsa_sign,dsa_err,dsa_ossl"
|
||||||
$ LIB_DH = "dh_gen,dh_key,dh_lib,dh_check,dh_err"
|
$ LIB_DH = "dh_gen,dh_key,dh_lib,dh_check,dh_err"
|
||||||
$ LIB_DSO = "dso_dl,dso_dlfcn,dso_err,dso_lib,dso_null,"+ -
|
$ LIB_DSO = "dso_err,dso_lib,dso_null,dso_openssl" ! + ",dso_vms"
|
||||||
"dso_openssl,dso_win32,dso_vms"
|
$ LIB_ENGINE = "engine_err,engine_lib,engine_list,engine_openssl,"+ -
|
||||||
|
"hw_atalla,hw_cswift,hw_ncipher"
|
||||||
$ LIB_BUFFER = "buffer,buf_err"
|
$ LIB_BUFFER = "buffer,buf_err"
|
||||||
$ LIB_BIO = "bio_lib,bio_cb,bio_err,"+ -
|
$ LIB_BIO = "bio_lib,bio_cb,bio_err,"+ -
|
||||||
"bss_mem,bss_null,bss_fd,"+ -
|
"bss_mem,bss_null,bss_fd,"+ -
|
||||||
"bss_file,bss_sock,bss_conn,"+ -
|
"bss_file,bss_sock,bss_conn,"+ -
|
||||||
"bf_null,bf_buff,b_print,b_dump,"+ -
|
"bf_null,bf_buff,b_print,b_dump,"+ -
|
||||||
"b_sock,bss_acpt,bf_nbio,bss_rtcp,bss_bio,bss_log,"+ -
|
"b_sock,bss_acpt,bf_nbio,bss_rtcp,bss_bio,bss_log"
|
||||||
"bf_lbuf"
|
|
||||||
$ LIB_STACK = "stack"
|
$ LIB_STACK = "stack"
|
||||||
$ LIB_LHASH = "lhash,lh_stats"
|
$ LIB_LHASH = "lhash,lh_stats"
|
||||||
$ LIB_RAND = "md_rand,randfile,rand_lib,rand_err,rand_egd,rand_win"
|
$ LIB_RAND = "md_rand,randfile,rand_lib,rand_err,rand_egd,rand_win"
|
||||||
@@ -1138,7 +1138,7 @@ $ ENDIF
|
|||||||
$!
|
$!
|
||||||
$! Set Up Initial CC Definitions, Possibly With User Ones
|
$! Set Up Initial CC Definitions, Possibly With User Ones
|
||||||
$!
|
$!
|
||||||
$ CCDEFS = "VMS=1,TCPIP_TYPE_''P5',DSO_VMS"
|
$ CCDEFS = "VMS=1,TCPIP_TYPE_''P5'"
|
||||||
$ IF F$TRNLNM("OPENSSL_NO_ASM") THEN CCDEFS = CCDEFS + ",NO_ASM"
|
$ IF F$TRNLNM("OPENSSL_NO_ASM") THEN CCDEFS = CCDEFS + ",NO_ASM"
|
||||||
$ IF F$TRNLNM("OPENSSL_NO_RSA") THEN CCDEFS = CCDEFS + ",NO_RSA"
|
$ IF F$TRNLNM("OPENSSL_NO_RSA") THEN CCDEFS = CCDEFS + ",NO_RSA"
|
||||||
$ IF F$TRNLNM("OPENSSL_NO_DSA") THEN CCDEFS = CCDEFS + ",NO_DSA"
|
$ IF F$TRNLNM("OPENSSL_NO_DSA") THEN CCDEFS = CCDEFS + ",NO_DSA"
|
||||||
@@ -1194,7 +1194,9 @@ $ CC = "CC"
|
|||||||
$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
|
$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
|
||||||
THEN CC = "CC/DECC"
|
THEN CC = "CC/DECC"
|
||||||
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
|
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
|
||||||
"/NOLIST/PREFIX=ALL/INCLUDE=SYS$DISK:[]" + CCEXTRAFLAGS
|
"/NOLIST/PREFIX=ALL" + -
|
||||||
|
"/INCLUDE=(SYS$DISK:[],SYS$DISK:[.ENGINE.VENDOR_DEFNS])" + -
|
||||||
|
CCEXTRAFLAGS
|
||||||
$!
|
$!
|
||||||
$! Define The Linker Options File Name.
|
$! Define The Linker Options File Name.
|
||||||
$!
|
$!
|
||||||
@@ -1226,7 +1228,8 @@ $ WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
|
|||||||
$ EXIT
|
$ EXIT
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
|
$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
|
||||||
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST/INCLUDE=SYS$DISK:[]" + -
|
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
|
||||||
|
"/INCLUDE=(SYS$DISK:[],SYS$DISK:[.ENGINE.VENDOR_DEFNS])" + -
|
||||||
CCEXTRAFLAGS
|
CCEXTRAFLAGS
|
||||||
$ CCDEFS = """VAXC""," + CCDEFS
|
$ CCDEFS = """VAXC""," + CCDEFS
|
||||||
$!
|
$!
|
||||||
@@ -1258,7 +1261,8 @@ $!
|
|||||||
$! Use GNU C...
|
$! Use GNU C...
|
||||||
$!
|
$!
|
||||||
$ CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
|
$ CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
|
||||||
"/INCLUDE=SYS$DISK:[]" + CCEXTRAFLAGS
|
"/INCLUDE=(SYS$DISK:[],SYS$DISK:[.ENGINE.VENDOR_DEFNS])" + -
|
||||||
|
CCEXTRAFLAGS
|
||||||
$!
|
$!
|
||||||
$! Define The Linker Options File Name.
|
$! Define The Linker Options File Name.
|
||||||
$!
|
$!
|
||||||
|
|||||||
@@ -122,7 +122,8 @@ extern "C" {
|
|||||||
#define CRYPTO_LOCK_MALLOC2 25
|
#define CRYPTO_LOCK_MALLOC2 25
|
||||||
#define CRYPTO_LOCK_DSO 26
|
#define CRYPTO_LOCK_DSO 26
|
||||||
#define CRYPTO_LOCK_DYNLOCK 27
|
#define CRYPTO_LOCK_DYNLOCK 27
|
||||||
#define CRYPTO_NUM_LOCKS 28
|
#define CRYPTO_LOCK_ENGINE 28
|
||||||
|
#define CRYPTO_NUM_LOCKS 29
|
||||||
|
|
||||||
#define CRYPTO_LOCK 1
|
#define CRYPTO_LOCK 1
|
||||||
#define CRYPTO_UNLOCK 2
|
#define CRYPTO_UNLOCK 2
|
||||||
|
|||||||
@@ -271,9 +271,7 @@ int des_read_pw(char *buf, char *buff, int size, const char *prompt,
|
|||||||
#elif defined(MAC_OS_pre_X)
|
#elif defined(MAC_OS_pre_X)
|
||||||
tty=stdin;
|
tty=stdin;
|
||||||
#else
|
#else
|
||||||
#ifndef MPE
|
|
||||||
if ((tty=fopen("/dev/tty","r")) == NULL)
|
if ((tty=fopen("/dev/tty","r")) == NULL)
|
||||||
#endif
|
|
||||||
tty=stdin;
|
tty=stdin;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -314,12 +312,8 @@ int des_read_pw(char *buf, char *buff, int size, const char *prompt,
|
|||||||
|
|
||||||
#if defined(TTY_set) && !defined(VMS)
|
#if defined(TTY_set) && !defined(VMS)
|
||||||
if (is_a_tty && (TTY_set(fileno(tty),&tty_new) == -1))
|
if (is_a_tty && (TTY_set(fileno(tty),&tty_new) == -1))
|
||||||
#ifdef MPE
|
|
||||||
; /* MPE lies -- echo really has been disabled */
|
|
||||||
#else
|
|
||||||
return(-1);
|
return(-1);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
#ifdef VMS
|
#ifdef VMS
|
||||||
tty_new[0] = tty_orig[0];
|
tty_new[0] = tty_orig[0];
|
||||||
tty_new[1] = tty_orig[1] | TT$M_NOECHO;
|
tty_new[1] = tty_orig[1] | TT$M_NOECHO;
|
||||||
|
|||||||
@@ -100,19 +100,39 @@ dh_gen.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
|
|||||||
dh_gen.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
|
dh_gen.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
|
||||||
dh_gen.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
dh_gen.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||||
dh_gen.o: ../cryptlib.h
|
dh_gen.o: ../cryptlib.h
|
||||||
dh_key.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
|
dh_key.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||||
dh_key.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
|
dh_key.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
|
||||||
dh_key.o: ../../include/openssl/dh.h ../../include/openssl/e_os.h
|
dh_key.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
|
||||||
dh_key.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
dh_key.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
|
||||||
dh_key.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
|
dh_key.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
||||||
|
dh_key.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
|
||||||
|
dh_key.o: ../../include/openssl/engine.h ../../include/openssl/err.h
|
||||||
|
dh_key.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
|
||||||
|
dh_key.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
|
||||||
|
dh_key.o: ../../include/openssl/md4.h ../../include/openssl/md5.h
|
||||||
|
dh_key.o: ../../include/openssl/mdc2.h ../../include/openssl/obj_mac.h
|
||||||
|
dh_key.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
|
||||||
dh_key.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
|
dh_key.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
|
||||||
dh_key.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
|
dh_key.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
|
||||||
|
dh_key.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
|
||||||
|
dh_key.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||||
|
dh_key.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||||
dh_key.o: ../../include/openssl/symhacks.h ../cryptlib.h
|
dh_key.o: ../../include/openssl/symhacks.h ../cryptlib.h
|
||||||
dh_lib.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
|
dh_lib.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||||
dh_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
|
dh_lib.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
|
||||||
dh_lib.o: ../../include/openssl/dh.h ../../include/openssl/e_os.h
|
dh_lib.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
|
||||||
dh_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
dh_lib.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
|
||||||
dh_lib.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
|
dh_lib.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
||||||
dh_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
|
dh_lib.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
|
||||||
dh_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
dh_lib.o: ../../include/openssl/engine.h ../../include/openssl/err.h
|
||||||
dh_lib.o: ../cryptlib.h
|
dh_lib.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
|
||||||
|
dh_lib.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
|
||||||
|
dh_lib.o: ../../include/openssl/md4.h ../../include/openssl/md5.h
|
||||||
|
dh_lib.o: ../../include/openssl/mdc2.h ../../include/openssl/obj_mac.h
|
||||||
|
dh_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
|
||||||
|
dh_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
|
||||||
|
dh_lib.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
|
||||||
|
dh_lib.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
|
||||||
|
dh_lib.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||||
|
dh_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||||
|
dh_lib.o: ../../include/openssl/symhacks.h ../cryptlib.h
|
||||||
|
|||||||
@@ -115,7 +115,11 @@ struct dh_st
|
|||||||
|
|
||||||
int references;
|
int references;
|
||||||
CRYPTO_EX_DATA ex_data;
|
CRYPTO_EX_DATA ex_data;
|
||||||
|
#if 0
|
||||||
DH_METHOD *meth;
|
DH_METHOD *meth;
|
||||||
|
#else
|
||||||
|
struct engine_st *engine;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DH_GENERATOR_2 2
|
#define DH_GENERATOR_2 2
|
||||||
@@ -150,10 +154,15 @@ struct dh_st
|
|||||||
|
|
||||||
DH_METHOD *DH_OpenSSL(void);
|
DH_METHOD *DH_OpenSSL(void);
|
||||||
|
|
||||||
void DH_set_default_method(DH_METHOD *meth);
|
void DH_set_default_openssl_method(DH_METHOD *meth);
|
||||||
DH_METHOD *DH_get_default_method(void);
|
DH_METHOD *DH_get_default_openssl_method(void);
|
||||||
|
#if 0
|
||||||
DH_METHOD *DH_set_method(DH *dh, DH_METHOD *meth);
|
DH_METHOD *DH_set_method(DH *dh, DH_METHOD *meth);
|
||||||
DH *DH_new_method(DH_METHOD *meth);
|
DH *DH_new_method(DH_METHOD *meth);
|
||||||
|
#else
|
||||||
|
int DH_set_method(DH *dh, struct engine_st *engine);
|
||||||
|
DH *DH_new_method(struct engine_st *engine);
|
||||||
|
#endif
|
||||||
|
|
||||||
DH * DH_new(void);
|
DH * DH_new(void);
|
||||||
void DH_free(DH *dh);
|
void DH_free(DH *dh);
|
||||||
|
|||||||
@@ -61,6 +61,7 @@
|
|||||||
#include <openssl/bn.h>
|
#include <openssl/bn.h>
|
||||||
#include <openssl/rand.h>
|
#include <openssl/rand.h>
|
||||||
#include <openssl/dh.h>
|
#include <openssl/dh.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
static int generate_key(DH *dh);
|
static int generate_key(DH *dh);
|
||||||
static int compute_key(unsigned char *key, BIGNUM *pub_key, DH *dh);
|
static int compute_key(unsigned char *key, BIGNUM *pub_key, DH *dh);
|
||||||
@@ -72,12 +73,12 @@ static int dh_finish(DH *dh);
|
|||||||
|
|
||||||
int DH_generate_key(DH *dh)
|
int DH_generate_key(DH *dh)
|
||||||
{
|
{
|
||||||
return dh->meth->generate_key(dh);
|
return ENGINE_get_DH(dh->engine)->generate_key(dh);
|
||||||
}
|
}
|
||||||
|
|
||||||
int DH_compute_key(unsigned char *key, BIGNUM *pub_key, DH *dh)
|
int DH_compute_key(unsigned char *key, BIGNUM *pub_key, DH *dh)
|
||||||
{
|
{
|
||||||
return dh->meth->compute_key(key, pub_key, dh);
|
return ENGINE_get_DH(dh->engine)->compute_key(key, pub_key, dh);
|
||||||
}
|
}
|
||||||
|
|
||||||
static DH_METHOD dh_ossl = {
|
static DH_METHOD dh_ossl = {
|
||||||
@@ -137,7 +138,8 @@ static int generate_key(DH *dh)
|
|||||||
}
|
}
|
||||||
mont=(BN_MONT_CTX *)dh->method_mont_p;
|
mont=(BN_MONT_CTX *)dh->method_mont_p;
|
||||||
|
|
||||||
if (!dh->meth->bn_mod_exp(dh, pub_key,dh->g,priv_key,dh->p,&ctx,mont))
|
if (!ENGINE_get_DH(dh->engine)->bn_mod_exp(dh, pub_key, dh->g,
|
||||||
|
priv_key,dh->p,&ctx,mont))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
dh->pub_key=pub_key;
|
dh->pub_key=pub_key;
|
||||||
@@ -177,7 +179,8 @@ static int compute_key(unsigned char *key, BIGNUM *pub_key, DH *dh)
|
|||||||
}
|
}
|
||||||
|
|
||||||
mont=(BN_MONT_CTX *)dh->method_mont_p;
|
mont=(BN_MONT_CTX *)dh->method_mont_p;
|
||||||
if (!dh->meth->bn_mod_exp(dh, tmp,pub_key,dh->priv_key,dh->p,&ctx,mont))
|
if (!ENGINE_get_DH(dh->engine)->bn_mod_exp(dh, tmp, pub_key,
|
||||||
|
dh->priv_key,dh->p,&ctx,mont))
|
||||||
{
|
{
|
||||||
DHerr(DH_F_DH_COMPUTE_KEY,ERR_R_BN_LIB);
|
DHerr(DH_F_DH_COMPUTE_KEY,ERR_R_BN_LIB);
|
||||||
goto err;
|
goto err;
|
||||||
|
|||||||
@@ -60,6 +60,7 @@
|
|||||||
#include "cryptlib.h"
|
#include "cryptlib.h"
|
||||||
#include <openssl/bn.h>
|
#include <openssl/bn.h>
|
||||||
#include <openssl/dh.h>
|
#include <openssl/dh.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
const char *DH_version="Diffie-Hellman" OPENSSL_VERSION_PTEXT;
|
const char *DH_version="Diffie-Hellman" OPENSSL_VERSION_PTEXT;
|
||||||
|
|
||||||
@@ -67,17 +68,32 @@ static DH_METHOD *default_DH_method;
|
|||||||
static int dh_meth_num = 0;
|
static int dh_meth_num = 0;
|
||||||
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dh_meth = NULL;
|
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dh_meth = NULL;
|
||||||
|
|
||||||
void DH_set_default_method(DH_METHOD *meth)
|
void DH_set_default_openssl_method(DH_METHOD *meth)
|
||||||
{
|
{
|
||||||
|
ENGINE *e;
|
||||||
|
/* We'll need to notify the "openssl" ENGINE of this
|
||||||
|
* change too. We won't bother locking things down at
|
||||||
|
* our end as there was never any locking in these
|
||||||
|
* functions! */
|
||||||
|
if(default_DH_method != meth)
|
||||||
|
{
|
||||||
default_DH_method = meth;
|
default_DH_method = meth;
|
||||||
|
e = ENGINE_by_id("openssl");
|
||||||
|
if(e)
|
||||||
|
{
|
||||||
|
ENGINE_set_DH(e, meth);
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DH_METHOD *DH_get_default_method(void)
|
DH_METHOD *DH_get_default_openssl_method(void)
|
||||||
{
|
{
|
||||||
if(!default_DH_method) default_DH_method = DH_OpenSSL();
|
if(!default_DH_method) default_DH_method = DH_OpenSSL();
|
||||||
return default_DH_method;
|
return default_DH_method;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
DH_METHOD *DH_set_method(DH *dh, DH_METHOD *meth)
|
DH_METHOD *DH_set_method(DH *dh, DH_METHOD *meth)
|
||||||
{
|
{
|
||||||
DH_METHOD *mtmp;
|
DH_METHOD *mtmp;
|
||||||
@@ -87,14 +103,37 @@ DH_METHOD *DH_set_method(DH *dh, DH_METHOD *meth)
|
|||||||
if (meth->init) meth->init(dh);
|
if (meth->init) meth->init(dh);
|
||||||
return mtmp;
|
return mtmp;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
int DH_set_method(DH *dh, ENGINE *engine)
|
||||||
|
{
|
||||||
|
ENGINE *mtmp;
|
||||||
|
DH_METHOD *meth;
|
||||||
|
mtmp = dh->engine;
|
||||||
|
meth = ENGINE_get_DH(mtmp);
|
||||||
|
if (!ENGINE_init(engine))
|
||||||
|
return 0;
|
||||||
|
if (meth->finish) meth->finish(dh);
|
||||||
|
dh->engine= engine;
|
||||||
|
meth = ENGINE_get_DH(engine);
|
||||||
|
if (meth->init) meth->init(dh);
|
||||||
|
/* SHOULD ERROR CHECK THIS!!! */
|
||||||
|
ENGINE_finish(mtmp);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
DH *DH_new(void)
|
DH *DH_new(void)
|
||||||
{
|
{
|
||||||
return DH_new_method(NULL);
|
return DH_new_method(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
DH *DH_new_method(DH_METHOD *meth)
|
DH *DH_new_method(DH_METHOD *meth)
|
||||||
|
#else
|
||||||
|
DH *DH_new_method(ENGINE *engine)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
|
DH_METHOD *meth;
|
||||||
DH *ret;
|
DH *ret;
|
||||||
ret=(DH *)OPENSSL_malloc(sizeof(DH));
|
ret=(DH *)OPENSSL_malloc(sizeof(DH));
|
||||||
|
|
||||||
@@ -103,8 +142,17 @@ DH *DH_new_method(DH_METHOD *meth)
|
|||||||
DHerr(DH_F_DH_NEW,ERR_R_MALLOC_FAILURE);
|
DHerr(DH_F_DH_NEW,ERR_R_MALLOC_FAILURE);
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
if(meth) ret->meth = meth;
|
if(engine)
|
||||||
else ret->meth = DH_get_default_method();
|
ret->engine = engine;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if((ret->engine=ENGINE_get_default_DH()) == NULL)
|
||||||
|
{
|
||||||
|
OPENSSL_free(ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
meth = ENGINE_get_DH(ret->engine);
|
||||||
ret->pad=0;
|
ret->pad=0;
|
||||||
ret->version=0;
|
ret->version=0;
|
||||||
ret->p=NULL;
|
ret->p=NULL;
|
||||||
@@ -119,8 +167,8 @@ DH *DH_new_method(DH_METHOD *meth)
|
|||||||
ret->counter = NULL;
|
ret->counter = NULL;
|
||||||
ret->method_mont_p=NULL;
|
ret->method_mont_p=NULL;
|
||||||
ret->references = 1;
|
ret->references = 1;
|
||||||
ret->flags=ret->meth->flags;
|
ret->flags=meth->flags;
|
||||||
if ((ret->meth->init != NULL) && !ret->meth->init(ret))
|
if ((meth->init != NULL) && !meth->init(ret))
|
||||||
{
|
{
|
||||||
OPENSSL_free(ret);
|
OPENSSL_free(ret);
|
||||||
ret=NULL;
|
ret=NULL;
|
||||||
@@ -132,6 +180,7 @@ DH *DH_new_method(DH_METHOD *meth)
|
|||||||
|
|
||||||
void DH_free(DH *r)
|
void DH_free(DH *r)
|
||||||
{
|
{
|
||||||
|
DH_METHOD *meth;
|
||||||
int i;
|
int i;
|
||||||
if(r == NULL) return;
|
if(r == NULL) return;
|
||||||
i = CRYPTO_add(&r->references, -1, CRYPTO_LOCK_DH);
|
i = CRYPTO_add(&r->references, -1, CRYPTO_LOCK_DH);
|
||||||
@@ -149,7 +198,9 @@ void DH_free(DH *r)
|
|||||||
|
|
||||||
CRYPTO_free_ex_data(dh_meth, r, &r->ex_data);
|
CRYPTO_free_ex_data(dh_meth, r, &r->ex_data);
|
||||||
|
|
||||||
if(r->meth->finish) r->meth->finish(r);
|
meth = ENGINE_get_DH(r->engine);
|
||||||
|
if(meth->finish) meth->finish(r);
|
||||||
|
ENGINE_finish(r->engine);
|
||||||
|
|
||||||
if (r->p != NULL) BN_clear_free(r->p);
|
if (r->p != NULL) BN_clear_free(r->p);
|
||||||
if (r->g != NULL) BN_clear_free(r->g);
|
if (r->g != NULL) BN_clear_free(r->g);
|
||||||
|
|||||||
@@ -115,39 +115,75 @@ dsa_key.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
|
|||||||
dsa_key.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
dsa_key.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||||
dsa_key.o: ../../include/openssl/symhacks.h ../cryptlib.h
|
dsa_key.o: ../../include/openssl/symhacks.h ../cryptlib.h
|
||||||
dsa_lib.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
dsa_lib.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||||
dsa_lib.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
|
dsa_lib.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
|
||||||
dsa_lib.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
|
dsa_lib.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
|
||||||
dsa_lib.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
|
dsa_lib.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
|
||||||
dsa_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
dsa_lib.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
||||||
dsa_lib.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
|
dsa_lib.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
|
||||||
dsa_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
|
dsa_lib.o: ../../include/openssl/engine.h ../../include/openssl/err.h
|
||||||
dsa_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
dsa_lib.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
|
||||||
dsa_lib.o: ../cryptlib.h
|
dsa_lib.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
|
||||||
|
dsa_lib.o: ../../include/openssl/md4.h ../../include/openssl/md5.h
|
||||||
|
dsa_lib.o: ../../include/openssl/mdc2.h ../../include/openssl/obj_mac.h
|
||||||
|
dsa_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
|
||||||
|
dsa_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
|
||||||
|
dsa_lib.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
|
||||||
|
dsa_lib.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
|
||||||
|
dsa_lib.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||||
|
dsa_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||||
|
dsa_lib.o: ../../include/openssl/symhacks.h ../cryptlib.h
|
||||||
dsa_ossl.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
dsa_ossl.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||||
dsa_ossl.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
|
dsa_ossl.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
|
||||||
dsa_ossl.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
|
dsa_ossl.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
|
||||||
dsa_ossl.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
|
dsa_ossl.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
|
||||||
dsa_ossl.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
dsa_ossl.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
||||||
dsa_ossl.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
|
dsa_ossl.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
|
||||||
|
dsa_ossl.o: ../../include/openssl/engine.h ../../include/openssl/err.h
|
||||||
|
dsa_ossl.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
|
||||||
|
dsa_ossl.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
|
||||||
|
dsa_ossl.o: ../../include/openssl/md4.h ../../include/openssl/md5.h
|
||||||
|
dsa_ossl.o: ../../include/openssl/mdc2.h ../../include/openssl/obj_mac.h
|
||||||
|
dsa_ossl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
|
||||||
dsa_ossl.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
|
dsa_ossl.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
|
||||||
dsa_ossl.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
|
dsa_ossl.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
|
||||||
|
dsa_ossl.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
|
||||||
|
dsa_ossl.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||||
|
dsa_ossl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||||
dsa_ossl.o: ../../include/openssl/symhacks.h ../cryptlib.h
|
dsa_ossl.o: ../../include/openssl/symhacks.h ../cryptlib.h
|
||||||
dsa_sign.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
dsa_sign.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||||
dsa_sign.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
|
dsa_sign.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
|
||||||
dsa_sign.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
|
dsa_sign.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
|
||||||
dsa_sign.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
|
dsa_sign.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
|
||||||
dsa_sign.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
dsa_sign.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
||||||
dsa_sign.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
|
dsa_sign.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
|
||||||
|
dsa_sign.o: ../../include/openssl/engine.h ../../include/openssl/err.h
|
||||||
|
dsa_sign.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
|
||||||
|
dsa_sign.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
|
||||||
|
dsa_sign.o: ../../include/openssl/md4.h ../../include/openssl/md5.h
|
||||||
|
dsa_sign.o: ../../include/openssl/mdc2.h ../../include/openssl/obj_mac.h
|
||||||
|
dsa_sign.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
|
||||||
dsa_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
|
dsa_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
|
||||||
dsa_sign.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
|
dsa_sign.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
|
||||||
|
dsa_sign.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
|
||||||
|
dsa_sign.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||||
|
dsa_sign.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||||
dsa_sign.o: ../../include/openssl/symhacks.h ../cryptlib.h
|
dsa_sign.o: ../../include/openssl/symhacks.h ../cryptlib.h
|
||||||
dsa_vrf.o: ../../include/openssl/asn1.h ../../include/openssl/asn1_mac.h
|
dsa_vrf.o: ../../include/openssl/asn1.h ../../include/openssl/asn1_mac.h
|
||||||
dsa_vrf.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
|
dsa_vrf.o: ../../include/openssl/bio.h ../../include/openssl/blowfish.h
|
||||||
dsa_vrf.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
|
dsa_vrf.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
|
||||||
dsa_vrf.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
dsa_vrf.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h
|
||||||
dsa_vrf.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
|
dsa_vrf.o: ../../include/openssl/des.h ../../include/openssl/dh.h
|
||||||
dsa_vrf.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
|
dsa_vrf.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
|
||||||
|
dsa_vrf.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h
|
||||||
|
dsa_vrf.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||||
|
dsa_vrf.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h
|
||||||
|
dsa_vrf.o: ../../include/openssl/md2.h ../../include/openssl/md4.h
|
||||||
|
dsa_vrf.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
|
||||||
|
dsa_vrf.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||||
dsa_vrf.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
dsa_vrf.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||||
dsa_vrf.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
|
dsa_vrf.o: ../../include/openssl/rand.h ../../include/openssl/rc2.h
|
||||||
|
dsa_vrf.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h
|
||||||
|
dsa_vrf.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
|
||||||
|
dsa_vrf.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||||
dsa_vrf.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
dsa_vrf.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||||
dsa_vrf.o: ../cryptlib.h
|
dsa_vrf.o: ../cryptlib.h
|
||||||
|
|||||||
@@ -133,7 +133,11 @@ struct dsa_st
|
|||||||
char *method_mont_p;
|
char *method_mont_p;
|
||||||
int references;
|
int references;
|
||||||
CRYPTO_EX_DATA ex_data;
|
CRYPTO_EX_DATA ex_data;
|
||||||
|
#if 0
|
||||||
DSA_METHOD *meth;
|
DSA_METHOD *meth;
|
||||||
|
#else
|
||||||
|
struct engine_st *engine;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DSAparams_dup(x) (DSA *)ASN1_dup((int (*)())i2d_DSAparams, \
|
#define DSAparams_dup(x) (DSA *)ASN1_dup((int (*)())i2d_DSAparams, \
|
||||||
@@ -159,12 +163,20 @@ int DSA_do_verify(const unsigned char *dgst,int dgst_len,
|
|||||||
|
|
||||||
DSA_METHOD *DSA_OpenSSL(void);
|
DSA_METHOD *DSA_OpenSSL(void);
|
||||||
|
|
||||||
void DSA_set_default_method(DSA_METHOD *);
|
void DSA_set_default_openssl_method(DSA_METHOD *);
|
||||||
DSA_METHOD *DSA_get_default_method(void);
|
DSA_METHOD *DSA_get_default_openssl_method(void);
|
||||||
|
#if 0
|
||||||
DSA_METHOD *DSA_set_method(DSA *dsa, DSA_METHOD *);
|
DSA_METHOD *DSA_set_method(DSA *dsa, DSA_METHOD *);
|
||||||
|
#else
|
||||||
|
int DSA_set_method(DSA *dsa, struct engine_st *engine);
|
||||||
|
#endif
|
||||||
|
|
||||||
DSA * DSA_new(void);
|
DSA * DSA_new(void);
|
||||||
|
#if 0
|
||||||
DSA * DSA_new_method(DSA_METHOD *meth);
|
DSA * DSA_new_method(DSA_METHOD *meth);
|
||||||
|
#else
|
||||||
|
DSA * DSA_new_method(struct engine_st *engine);
|
||||||
|
#endif
|
||||||
int DSA_size(DSA *);
|
int DSA_size(DSA *);
|
||||||
/* next 4 return -1 on error */
|
/* next 4 return -1 on error */
|
||||||
int DSA_sign_setup( DSA *dsa,BN_CTX *ctx_in,BIGNUM **kinvp,BIGNUM **rp);
|
int DSA_sign_setup( DSA *dsa,BN_CTX *ctx_in,BIGNUM **kinvp,BIGNUM **rp);
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ int DSA_generate_key(DSA *dsa)
|
|||||||
i=BN_num_bits(dsa->q);
|
i=BN_num_bits(dsa->q);
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (!BN_rand(priv_key,i,0,0))
|
if (!BN_rand(priv_key,i,1,0))
|
||||||
goto err;
|
goto err;
|
||||||
if (BN_cmp(priv_key,dsa->q) >= 0)
|
if (BN_cmp(priv_key,dsa->q) >= 0)
|
||||||
BN_sub(priv_key,priv_key,dsa->q);
|
BN_sub(priv_key,priv_key,dsa->q);
|
||||||
|
|||||||
@@ -63,6 +63,7 @@
|
|||||||
#include <openssl/bn.h>
|
#include <openssl/bn.h>
|
||||||
#include <openssl/dsa.h>
|
#include <openssl/dsa.h>
|
||||||
#include <openssl/asn1.h>
|
#include <openssl/asn1.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
const char *DSA_version="DSA" OPENSSL_VERSION_PTEXT;
|
const char *DSA_version="DSA" OPENSSL_VERSION_PTEXT;
|
||||||
|
|
||||||
@@ -70,12 +71,26 @@ static DSA_METHOD *default_DSA_method;
|
|||||||
static int dsa_meth_num = 0;
|
static int dsa_meth_num = 0;
|
||||||
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dsa_meth = NULL;
|
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dsa_meth = NULL;
|
||||||
|
|
||||||
void DSA_set_default_method(DSA_METHOD *meth)
|
void DSA_set_default_openssl_method(DSA_METHOD *meth)
|
||||||
{
|
{
|
||||||
|
ENGINE *e;
|
||||||
|
/* We'll need to notify the "openssl" ENGINE of this
|
||||||
|
* change too. We won't bother locking things down at
|
||||||
|
* our end as there was never any locking in these
|
||||||
|
* functions! */
|
||||||
|
if(default_DSA_method != meth)
|
||||||
|
{
|
||||||
default_DSA_method = meth;
|
default_DSA_method = meth;
|
||||||
|
e = ENGINE_by_id("openssl");
|
||||||
|
if(e)
|
||||||
|
{
|
||||||
|
ENGINE_set_DSA(e, meth);
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DSA_METHOD *DSA_get_default_method(void)
|
DSA_METHOD *DSA_get_default_openssl_method(void)
|
||||||
{
|
{
|
||||||
if(!default_DSA_method) default_DSA_method = DSA_OpenSSL();
|
if(!default_DSA_method) default_DSA_method = DSA_OpenSSL();
|
||||||
return default_DSA_method;
|
return default_DSA_method;
|
||||||
@@ -86,6 +101,7 @@ DSA *DSA_new(void)
|
|||||||
return DSA_new_method(NULL);
|
return DSA_new_method(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
DSA_METHOD *DSA_set_method(DSA *dsa, DSA_METHOD *meth)
|
DSA_METHOD *DSA_set_method(DSA *dsa, DSA_METHOD *meth)
|
||||||
{
|
{
|
||||||
DSA_METHOD *mtmp;
|
DSA_METHOD *mtmp;
|
||||||
@@ -95,10 +111,33 @@ DSA_METHOD *DSA_set_method(DSA *dsa, DSA_METHOD *meth)
|
|||||||
if (meth->init) meth->init(dsa);
|
if (meth->init) meth->init(dsa);
|
||||||
return mtmp;
|
return mtmp;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
int DSA_set_method(DSA *dsa, ENGINE *engine)
|
||||||
DSA *DSA_new_method(DSA_METHOD *meth)
|
|
||||||
{
|
{
|
||||||
|
ENGINE *mtmp;
|
||||||
|
DSA_METHOD *meth;
|
||||||
|
mtmp = dsa->engine;
|
||||||
|
meth = ENGINE_get_DSA(mtmp);
|
||||||
|
if (!ENGINE_init(engine))
|
||||||
|
return 0;
|
||||||
|
if (meth->finish) meth->finish(dsa);
|
||||||
|
dsa->engine = engine;
|
||||||
|
meth = ENGINE_get_DSA(engine);
|
||||||
|
if (meth->init) meth->init(dsa);
|
||||||
|
/* SHOULD ERROR CHECK THIS!!! */
|
||||||
|
ENGINE_finish(mtmp);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
DSA *DSA_new_method(DSA_METHOD *meth)
|
||||||
|
#else
|
||||||
|
DSA *DSA_new_method(ENGINE *engine)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
DSA_METHOD *meth;
|
||||||
DSA *ret;
|
DSA *ret;
|
||||||
|
|
||||||
ret=(DSA *)OPENSSL_malloc(sizeof(DSA));
|
ret=(DSA *)OPENSSL_malloc(sizeof(DSA));
|
||||||
@@ -107,8 +146,17 @@ DSA *DSA_new_method(DSA_METHOD *meth)
|
|||||||
DSAerr(DSA_F_DSA_NEW,ERR_R_MALLOC_FAILURE);
|
DSAerr(DSA_F_DSA_NEW,ERR_R_MALLOC_FAILURE);
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
if(meth) ret->meth = meth;
|
if(engine)
|
||||||
else ret->meth = DSA_get_default_method();
|
ret->engine = engine;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if((ret->engine=ENGINE_get_default_DSA()) == NULL)
|
||||||
|
{
|
||||||
|
OPENSSL_free(ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
meth = ENGINE_get_DSA(ret->engine);
|
||||||
ret->pad=0;
|
ret->pad=0;
|
||||||
ret->version=0;
|
ret->version=0;
|
||||||
ret->write_params=1;
|
ret->write_params=1;
|
||||||
@@ -124,8 +172,8 @@ DSA *DSA_new_method(DSA_METHOD *meth)
|
|||||||
ret->method_mont_p=NULL;
|
ret->method_mont_p=NULL;
|
||||||
|
|
||||||
ret->references=1;
|
ret->references=1;
|
||||||
ret->flags=ret->meth->flags;
|
ret->flags=meth->flags;
|
||||||
if ((ret->meth->init != NULL) && !ret->meth->init(ret))
|
if ((meth->init != NULL) && !meth->init(ret))
|
||||||
{
|
{
|
||||||
OPENSSL_free(ret);
|
OPENSSL_free(ret);
|
||||||
ret=NULL;
|
ret=NULL;
|
||||||
@@ -138,6 +186,7 @@ DSA *DSA_new_method(DSA_METHOD *meth)
|
|||||||
|
|
||||||
void DSA_free(DSA *r)
|
void DSA_free(DSA *r)
|
||||||
{
|
{
|
||||||
|
DSA_METHOD *meth;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (r == NULL) return;
|
if (r == NULL) return;
|
||||||
@@ -157,7 +206,9 @@ void DSA_free(DSA *r)
|
|||||||
|
|
||||||
CRYPTO_free_ex_data(dsa_meth, r, &r->ex_data);
|
CRYPTO_free_ex_data(dsa_meth, r, &r->ex_data);
|
||||||
|
|
||||||
if(r->meth->finish) r->meth->finish(r);
|
meth = ENGINE_get_DSA(r->engine);
|
||||||
|
if(meth->finish) meth->finish(r);
|
||||||
|
ENGINE_finish(r->engine);
|
||||||
|
|
||||||
if (r->p != NULL) BN_clear_free(r->p);
|
if (r->p != NULL) BN_clear_free(r->p);
|
||||||
if (r->q != NULL) BN_clear_free(r->q);
|
if (r->q != NULL) BN_clear_free(r->q);
|
||||||
|
|||||||
@@ -64,6 +64,7 @@
|
|||||||
#include <openssl/dsa.h>
|
#include <openssl/dsa.h>
|
||||||
#include <openssl/rand.h>
|
#include <openssl/rand.h>
|
||||||
#include <openssl/asn1.h>
|
#include <openssl/asn1.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa);
|
static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa);
|
||||||
static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp);
|
static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp);
|
||||||
@@ -181,7 +182,7 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)
|
|||||||
/* Get random k */
|
/* Get random k */
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (!BN_rand(&k, BN_num_bits(dsa->q), 0, 0)) goto err;
|
if (!BN_rand(&k, BN_num_bits(dsa->q), 1, 0)) goto err;
|
||||||
if (BN_cmp(&k,dsa->q) >= 0)
|
if (BN_cmp(&k,dsa->q) >= 0)
|
||||||
BN_sub(&k,&k,dsa->q);
|
BN_sub(&k,&k,dsa->q);
|
||||||
if (!BN_is_zero(&k)) break;
|
if (!BN_is_zero(&k)) break;
|
||||||
@@ -195,7 +196,7 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Compute r = (g^k mod p) mod q */
|
/* Compute r = (g^k mod p) mod q */
|
||||||
if (!dsa->meth->bn_mod_exp(dsa, r,dsa->g,&k,dsa->p,ctx,
|
if (!ENGINE_get_DSA(dsa->engine)->bn_mod_exp(dsa, r,dsa->g,&k,dsa->p,ctx,
|
||||||
(BN_MONT_CTX *)dsa->method_mont_p)) goto err;
|
(BN_MONT_CTX *)dsa->method_mont_p)) goto err;
|
||||||
if (!BN_mod(r,r,dsa->q,ctx)) goto err;
|
if (!BN_mod(r,r,dsa->q,ctx)) goto err;
|
||||||
|
|
||||||
@@ -273,7 +274,7 @@ static int dsa_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig,
|
|||||||
if (!BN_mod(&u1,&u1,dsa->q,ctx)) goto err;
|
if (!BN_mod(&u1,&u1,dsa->q,ctx)) goto err;
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
if (!dsa->meth->dsa_mod_exp(dsa, &t1,dsa->g,&u1,dsa->pub_key,&u2,
|
if (!ENGINE_get_DSA(dsa->engine)->dsa_mod_exp(dsa, &t1,dsa->g,&u1,dsa->pub_key,&u2,
|
||||||
dsa->p,ctx,mont)) goto err;
|
dsa->p,ctx,mont)) goto err;
|
||||||
/* BN_copy(&u1,&t1); */
|
/* BN_copy(&u1,&t1); */
|
||||||
/* let u1 = u1 mod q */
|
/* let u1 = u1 mod q */
|
||||||
|
|||||||
@@ -64,10 +64,11 @@
|
|||||||
#include <openssl/dsa.h>
|
#include <openssl/dsa.h>
|
||||||
#include <openssl/rand.h>
|
#include <openssl/rand.h>
|
||||||
#include <openssl/asn1.h>
|
#include <openssl/asn1.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
DSA_SIG * DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa)
|
DSA_SIG * DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa)
|
||||||
{
|
{
|
||||||
return dsa->meth->dsa_do_sign(dgst, dlen, dsa);
|
return ENGINE_get_DSA(dsa->engine)->dsa_do_sign(dgst, dlen, dsa);
|
||||||
}
|
}
|
||||||
|
|
||||||
int DSA_sign(int type, const unsigned char *dgst, int dlen, unsigned char *sig,
|
int DSA_sign(int type, const unsigned char *dgst, int dlen, unsigned char *sig,
|
||||||
@@ -87,6 +88,6 @@ int DSA_sign(int type, const unsigned char *dgst, int dlen, unsigned char *sig,
|
|||||||
|
|
||||||
int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)
|
int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)
|
||||||
{
|
{
|
||||||
return dsa->meth->dsa_sign_setup(dsa, ctx_in, kinvp, rp);
|
return ENGINE_get_DSA(dsa->engine)->dsa_sign_setup(dsa, ctx_in, kinvp, rp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -65,11 +65,12 @@
|
|||||||
#include <openssl/rand.h>
|
#include <openssl/rand.h>
|
||||||
#include <openssl/asn1.h>
|
#include <openssl/asn1.h>
|
||||||
#include <openssl/asn1_mac.h>
|
#include <openssl/asn1_mac.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
int DSA_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig,
|
int DSA_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig,
|
||||||
DSA *dsa)
|
DSA *dsa)
|
||||||
{
|
{
|
||||||
return dsa->meth->dsa_do_verify(dgst, dgst_len, sig, dsa);
|
return ENGINE_get_DSA(dsa->engine)->dsa_do_verify(dgst, dgst_len, sig, dsa);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* data has already been hashed (probably with SHA or SHA-1). */
|
/* data has already been hashed (probably with SHA or SHA-1). */
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ APPS=
|
|||||||
|
|
||||||
LIB=$(TOP)/libcrypto.a
|
LIB=$(TOP)/libcrypto.a
|
||||||
LIBSRC= dso_dl.c dso_dlfcn.c dso_err.c dso_lib.c dso_null.c \
|
LIBSRC= dso_dl.c dso_dlfcn.c dso_err.c dso_lib.c dso_null.c \
|
||||||
dso_openssl.c dso_win32.c dso_vms.c
|
dso_openssl.c dso_win32.c
|
||||||
LIBOBJ= dso_dl.o dso_dlfcn.o dso_err.o dso_lib.o dso_null.o \
|
LIBOBJ= dso_dl.o dso_dlfcn.o dso_err.o dso_lib.o dso_null.o \
|
||||||
dso_openssl.o dso_win32.o dso_vms.o
|
dso_openssl.o dso_win32.o
|
||||||
|
|
||||||
SRC= $(LIBSRC)
|
SRC= $(LIBSRC)
|
||||||
|
|
||||||
@@ -123,13 +123,6 @@ dso_openssl.o: ../../include/openssl/opensslconf.h
|
|||||||
dso_openssl.o: ../../include/openssl/opensslv.h
|
dso_openssl.o: ../../include/openssl/opensslv.h
|
||||||
dso_openssl.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
|
dso_openssl.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
|
||||||
dso_openssl.o: ../../include/openssl/symhacks.h ../cryptlib.h
|
dso_openssl.o: ../../include/openssl/symhacks.h ../cryptlib.h
|
||||||
dso_vms.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
|
|
||||||
dso_vms.o: ../../include/openssl/crypto.h ../../include/openssl/dso.h
|
|
||||||
dso_vms.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
|
|
||||||
dso_vms.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
|
|
||||||
dso_vms.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
|
||||||
dso_vms.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
|
|
||||||
dso_vms.o: ../../include/openssl/symhacks.h ../cryptlib.h
|
|
||||||
dso_win32.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
|
dso_win32.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
|
||||||
dso_win32.o: ../../include/openssl/crypto.h ../../include/openssl/dso.h
|
dso_win32.o: ../../include/openssl/crypto.h ../../include/openssl/dso.h
|
||||||
dso_win32.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
|
dso_win32.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
|
||||||
|
|||||||
@@ -80,12 +80,6 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
#define DSO_FLAG_NAME_TRANSLATION 0x01
|
#define DSO_FLAG_NAME_TRANSLATION 0x01
|
||||||
|
|
||||||
/* The following flag controls the translation of symbol names to upper
|
|
||||||
* case. This is currently only being implemented for OpenVMS.
|
|
||||||
*/
|
|
||||||
#define DSO_FLAG_UPCASE_SYMBOL 0x02
|
|
||||||
|
|
||||||
|
|
||||||
typedef void (*DSO_FUNC_TYPE)(void);
|
typedef void (*DSO_FUNC_TYPE)(void);
|
||||||
|
|
||||||
typedef struct dso_st DSO;
|
typedef struct dso_st DSO;
|
||||||
@@ -191,9 +185,6 @@ DSO_METHOD *DSO_METHOD_dl(void);
|
|||||||
/* If WIN32 is defined, use DLLs. If not, return NULL. */
|
/* If WIN32 is defined, use DLLs. If not, return NULL. */
|
||||||
DSO_METHOD *DSO_METHOD_win32(void);
|
DSO_METHOD *DSO_METHOD_win32(void);
|
||||||
|
|
||||||
/* If VMS is defined, use shared images. If not, return NULL. */
|
|
||||||
DSO_METHOD *DSO_METHOD_vms(void);
|
|
||||||
|
|
||||||
void ERR_load_DSO_strings(void);
|
void ERR_load_DSO_strings(void);
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
/* BEGIN ERROR CODES */
|
||||||
@@ -221,10 +212,6 @@ void ERR_load_DSO_strings(void);
|
|||||||
#define DSO_F_DSO_LOAD 114
|
#define DSO_F_DSO_LOAD 114
|
||||||
#define DSO_F_DSO_NEW_METHOD 115
|
#define DSO_F_DSO_NEW_METHOD 115
|
||||||
#define DSO_F_DSO_UP 116
|
#define DSO_F_DSO_UP 116
|
||||||
#define DSO_F_VMS_BIND_VAR 122
|
|
||||||
#define DSO_F_VMS_CTRL 123
|
|
||||||
#define DSO_F_VMS_LOAD 124
|
|
||||||
#define DSO_F_VMS_UNLOAD 125
|
|
||||||
#define DSO_F_WIN32_BIND_FUNC 117
|
#define DSO_F_WIN32_BIND_FUNC 117
|
||||||
#define DSO_F_WIN32_BIND_VAR 118
|
#define DSO_F_WIN32_BIND_VAR 118
|
||||||
#define DSO_F_WIN32_CTRL 119
|
#define DSO_F_WIN32_CTRL 119
|
||||||
@@ -233,7 +220,6 @@ void ERR_load_DSO_strings(void);
|
|||||||
|
|
||||||
/* Reason codes. */
|
/* Reason codes. */
|
||||||
#define DSO_R_CTRL_FAILED 100
|
#define DSO_R_CTRL_FAILED 100
|
||||||
#define DSO_R_FILENAME_TOO_BIG 109
|
|
||||||
#define DSO_R_FINISH_FAILED 101
|
#define DSO_R_FINISH_FAILED 101
|
||||||
#define DSO_R_LOAD_FAILED 102
|
#define DSO_R_LOAD_FAILED 102
|
||||||
#define DSO_R_NULL_HANDLE 103
|
#define DSO_R_NULL_HANDLE 103
|
||||||
|
|||||||
@@ -83,10 +83,6 @@ static ERR_STRING_DATA DSO_str_functs[]=
|
|||||||
{ERR_PACK(0,DSO_F_DSO_LOAD,0), "DSO_load"},
|
{ERR_PACK(0,DSO_F_DSO_LOAD,0), "DSO_load"},
|
||||||
{ERR_PACK(0,DSO_F_DSO_NEW_METHOD,0), "DSO_new_method"},
|
{ERR_PACK(0,DSO_F_DSO_NEW_METHOD,0), "DSO_new_method"},
|
||||||
{ERR_PACK(0,DSO_F_DSO_UP,0), "DSO_up"},
|
{ERR_PACK(0,DSO_F_DSO_UP,0), "DSO_up"},
|
||||||
{ERR_PACK(0,DSO_F_VMS_BIND_VAR,0), "VMS_BIND_VAR"},
|
|
||||||
{ERR_PACK(0,DSO_F_VMS_CTRL,0), "VMS_CTRL"},
|
|
||||||
{ERR_PACK(0,DSO_F_VMS_LOAD,0), "VMS_LOAD"},
|
|
||||||
{ERR_PACK(0,DSO_F_VMS_UNLOAD,0), "VMS_UNLOAD"},
|
|
||||||
{ERR_PACK(0,DSO_F_WIN32_BIND_FUNC,0), "WIN32_BIND_FUNC"},
|
{ERR_PACK(0,DSO_F_WIN32_BIND_FUNC,0), "WIN32_BIND_FUNC"},
|
||||||
{ERR_PACK(0,DSO_F_WIN32_BIND_VAR,0), "WIN32_BIND_VAR"},
|
{ERR_PACK(0,DSO_F_WIN32_BIND_VAR,0), "WIN32_BIND_VAR"},
|
||||||
{ERR_PACK(0,DSO_F_WIN32_CTRL,0), "WIN32_CTRL"},
|
{ERR_PACK(0,DSO_F_WIN32_CTRL,0), "WIN32_CTRL"},
|
||||||
@@ -98,7 +94,6 @@ static ERR_STRING_DATA DSO_str_functs[]=
|
|||||||
static ERR_STRING_DATA DSO_str_reasons[]=
|
static ERR_STRING_DATA DSO_str_reasons[]=
|
||||||
{
|
{
|
||||||
{DSO_R_CTRL_FAILED ,"control command failed"},
|
{DSO_R_CTRL_FAILED ,"control command failed"},
|
||||||
{DSO_R_FILENAME_TOO_BIG ,"filename too big"},
|
|
||||||
{DSO_R_FINISH_FAILED ,"cleanup method function failed"},
|
{DSO_R_FINISH_FAILED ,"cleanup method function failed"},
|
||||||
{DSO_R_LOAD_FAILED ,"could not load the shared library"},
|
{DSO_R_LOAD_FAILED ,"could not load the shared library"},
|
||||||
{DSO_R_NULL_HANDLE ,"a null shared library handle was used"},
|
{DSO_R_NULL_HANDLE ,"a null shared library handle was used"},
|
||||||
|
|||||||
@@ -107,8 +107,8 @@ DSO *DSO_new_method(DSO_METHOD *meth)
|
|||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
memset(ret, 0, sizeof(DSO));
|
memset(ret, 0, sizeof(DSO));
|
||||||
ret->meth_data = sk_new_null();
|
ret->meth_data = sk_new(NULL);
|
||||||
if((ret->meth_data = sk_new_null()) == NULL)
|
if((ret->meth_data = sk_new(NULL)) == NULL)
|
||||||
{
|
{
|
||||||
/* sk_new doesn't generate any errors so we do */
|
/* sk_new doesn't generate any errors so we do */
|
||||||
DSOerr(DSO_F_DSO_NEW_METHOD,ERR_R_MALLOC_FAILURE);
|
DSOerr(DSO_F_DSO_NEW_METHOD,ERR_R_MALLOC_FAILURE);
|
||||||
|
|||||||
@@ -72,8 +72,6 @@ DSO_METHOD *DSO_METHOD_openssl(void)
|
|||||||
return(DSO_METHOD_dl());
|
return(DSO_METHOD_dl());
|
||||||
#elif defined(DSO_WIN32)
|
#elif defined(DSO_WIN32)
|
||||||
return(DSO_METHOD_win32());
|
return(DSO_METHOD_win32());
|
||||||
#elif defined(DSO_VMS)
|
|
||||||
return(DSO_METHOD_vms());
|
|
||||||
#else
|
#else
|
||||||
return(DSO_METHOD_null());
|
return(DSO_METHOD_null());
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,371 +0,0 @@
|
|||||||
/* dso_vms.c */
|
|
||||||
/* Written by Richard Levitte (richard@levitte.org) for the OpenSSL
|
|
||||||
* project 2000.
|
|
||||||
*/
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 2000 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* licensing@OpenSSL.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#ifdef VMS
|
|
||||||
#pragma message disable DOLLARID
|
|
||||||
#include <lib$routines.h>
|
|
||||||
#include <libfisdef.h>
|
|
||||||
#include <stsdef.h>
|
|
||||||
#include <descrip.h>
|
|
||||||
#include <starlet.h>
|
|
||||||
#endif
|
|
||||||
#include "cryptlib.h"
|
|
||||||
#include <openssl/dso.h>
|
|
||||||
|
|
||||||
#ifndef VMS
|
|
||||||
DSO_METHOD *DSO_METHOD_vms(void)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
#pragma message disable DOLLARID
|
|
||||||
|
|
||||||
static int vms_load(DSO *dso, const char *filename);
|
|
||||||
static int vms_unload(DSO *dso);
|
|
||||||
static void *vms_bind_var(DSO *dso, const char *symname);
|
|
||||||
static DSO_FUNC_TYPE vms_bind_func(DSO *dso, const char *symname);
|
|
||||||
#if 0
|
|
||||||
static int vms_unbind_var(DSO *dso, char *symname, void *symptr);
|
|
||||||
static int vms_unbind_func(DSO *dso, char *symname, DSO_FUNC_TYPE symptr);
|
|
||||||
static int vms_init(DSO *dso);
|
|
||||||
static int vms_finish(DSO *dso);
|
|
||||||
#endif
|
|
||||||
static long vms_ctrl(DSO *dso, int cmd, long larg, void *parg);
|
|
||||||
|
|
||||||
static DSO_METHOD dso_meth_vms = {
|
|
||||||
"OpenSSL 'VMS' shared library method",
|
|
||||||
vms_load,
|
|
||||||
NULL, /* unload */
|
|
||||||
vms_bind_var,
|
|
||||||
vms_bind_func,
|
|
||||||
/* For now, "unbind" doesn't exist */
|
|
||||||
#if 0
|
|
||||||
NULL, /* unbind_var */
|
|
||||||
NULL, /* unbind_func */
|
|
||||||
#endif
|
|
||||||
vms_ctrl,
|
|
||||||
NULL, /* init */
|
|
||||||
NULL /* finish */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* On VMS, the only "handle" is the file name. LIB$FIND_IMAGE_SYMBOL depends
|
|
||||||
* on the reference to the file name being the same for all calls regarding
|
|
||||||
* one shared image, so we'll just store it in an instance of the following
|
|
||||||
* structure and put a pointer to that instance in the meth_data stack.
|
|
||||||
*/
|
|
||||||
typedef struct dso_internal_st
|
|
||||||
{
|
|
||||||
/* This should contain the name only, no directory,
|
|
||||||
* no extension, nothing but a name. */
|
|
||||||
struct dsc$descriptor_s filename_dsc;
|
|
||||||
char filename[FILENAME_MAX+1];
|
|
||||||
/* This contains whatever is not in filename, if needed.
|
|
||||||
* Normally not defined. */
|
|
||||||
struct dsc$descriptor_s imagename_dsc;
|
|
||||||
char imagename[FILENAME_MAX+1];
|
|
||||||
} DSO_VMS_INTERNAL;
|
|
||||||
|
|
||||||
|
|
||||||
DSO_METHOD *DSO_METHOD_vms(void)
|
|
||||||
{
|
|
||||||
return(&dso_meth_vms);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int vms_load(DSO *dso, const char *filename)
|
|
||||||
{
|
|
||||||
DSO_VMS_INTERNAL *p;
|
|
||||||
const char *sp1, *sp2; /* Search result */
|
|
||||||
|
|
||||||
/* A file specification may look like this:
|
|
||||||
*
|
|
||||||
* node::dev:[dir-spec]name.type;ver
|
|
||||||
*
|
|
||||||
* or (for compatibility with TOPS-20):
|
|
||||||
*
|
|
||||||
* node::dev:<dir-spec>name.type;ver
|
|
||||||
*
|
|
||||||
* and the dir-spec uses '.' as separator. Also, a dir-spec
|
|
||||||
* may consist of several parts, with mixed use of [] and <>:
|
|
||||||
*
|
|
||||||
* [dir1.]<dir2>
|
|
||||||
*
|
|
||||||
* We need to split the file specification into the name and
|
|
||||||
* the rest (both before and after the name itself).
|
|
||||||
*/
|
|
||||||
/* Start with trying to find the end of a dir-spec, and save the
|
|
||||||
position of the byte after in sp1 */
|
|
||||||
sp1 = strrchr(filename, ']');
|
|
||||||
sp2 = strrchr(filename, '>');
|
|
||||||
if (sp1 == NULL) sp1 = sp2;
|
|
||||||
if (sp2 != NULL && sp2 > sp1) sp1 = sp2;
|
|
||||||
if (sp1 == NULL) sp1 = strrchr(filename, ':');
|
|
||||||
if (sp1 == NULL)
|
|
||||||
sp1 = filename;
|
|
||||||
else
|
|
||||||
sp1++; /* The byte after the found character */
|
|
||||||
/* Now, let's see if there's a type, and save the position in sp2 */
|
|
||||||
sp2 = strchr(sp1, '.');
|
|
||||||
/* If we found it, that's where we'll cut. Otherwise, look for a
|
|
||||||
version number and save the position in sp2 */
|
|
||||||
if (sp2 == NULL) sp2 = strchr(sp1, ';');
|
|
||||||
/* If there was still nothing to find, set sp2 to point at the end of
|
|
||||||
the string */
|
|
||||||
if (sp2 == NULL) sp2 = sp1 + strlen(sp1);
|
|
||||||
|
|
||||||
/* Check that we won't get buffer overflows */
|
|
||||||
if (sp2 - sp1 > FILENAME_MAX
|
|
||||||
|| (sp1 - filename) + strlen(sp2) > FILENAME_MAX)
|
|
||||||
{
|
|
||||||
DSOerr(DSO_F_VMS_LOAD,DSO_R_FILENAME_TOO_BIG);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
p = (DSO_VMS_INTERNAL *)OPENSSL_malloc(sizeof(DSO_VMS_INTERNAL));
|
|
||||||
if(p == NULL)
|
|
||||||
{
|
|
||||||
DSOerr(DSO_F_VMS_LOAD,ERR_R_MALLOC_FAILURE);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
strncpy(p->filename, sp1, sp2-sp1);
|
|
||||||
p->filename[sp2-sp1] = '\0';
|
|
||||||
|
|
||||||
strncpy(p->imagename, filename, sp1-filename);
|
|
||||||
p->imagename[sp1-filename] = '\0';
|
|
||||||
strcat(p->imagename, sp2);
|
|
||||||
|
|
||||||
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->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;
|
|
||||||
|
|
||||||
if(!sk_push(dso->meth_data, (char *)p))
|
|
||||||
{
|
|
||||||
DSOerr(DSO_F_VMS_LOAD,DSO_R_STACK_ERROR);
|
|
||||||
OPENSSL_free(p);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Note that this doesn't actually unload the shared image, as there is no
|
|
||||||
* such thing in VMS. Next time it get loaded again, a new copy will
|
|
||||||
* actually be loaded.
|
|
||||||
*/
|
|
||||||
static int vms_unload(DSO *dso)
|
|
||||||
{
|
|
||||||
DSO_VMS_INTERNAL *p;
|
|
||||||
if(dso == NULL)
|
|
||||||
{
|
|
||||||
DSOerr(DSO_F_VMS_UNLOAD,ERR_R_PASSED_NULL_PARAMETER);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
if(sk_num(dso->meth_data) < 1)
|
|
||||||
return(1);
|
|
||||||
p = (DSO_VMS_INTERNAL *)sk_pop(dso->meth_data);
|
|
||||||
if(p == NULL)
|
|
||||||
{
|
|
||||||
DSOerr(DSO_F_VMS_UNLOAD,DSO_R_NULL_HANDLE);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
/* Cleanup */
|
|
||||||
OPENSSL_free(p);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We must do this in a separate function because of the way the exception
|
|
||||||
handler works (it makes this function return */
|
|
||||||
static int do_find_symbol(DSO_VMS_INTERNAL *ptr,
|
|
||||||
struct dsc$descriptor_s *symname_dsc, void **sym,
|
|
||||||
unsigned long flags)
|
|
||||||
{
|
|
||||||
/* Make sure that signals are caught and returned instead of
|
|
||||||
aborting the program. The exception handler gets unestablished
|
|
||||||
automatically on return from this function. */
|
|
||||||
lib$establish(lib$sig_to_ret);
|
|
||||||
|
|
||||||
if(ptr->imagename_dsc.dsc$w_length)
|
|
||||||
return lib$find_image_symbol(&ptr->filename_dsc,
|
|
||||||
symname_dsc, sym,
|
|
||||||
&ptr->imagename_dsc, flags);
|
|
||||||
else
|
|
||||||
return lib$find_image_symbol(&ptr->filename_dsc,
|
|
||||||
symname_dsc, sym,
|
|
||||||
0, flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
void vms_bind_sym(DSO *dso, const char *symname, void **sym)
|
|
||||||
{
|
|
||||||
DSO_VMS_INTERNAL *ptr;
|
|
||||||
int status;
|
|
||||||
int flags = LIB$M_FIS_MIXEDCASE;
|
|
||||||
struct dsc$descriptor_s symname_dsc;
|
|
||||||
*sym = NULL;
|
|
||||||
|
|
||||||
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 */
|
|
||||||
|
|
||||||
if((dso == NULL) || (symname == NULL))
|
|
||||||
{
|
|
||||||
DSOerr(DSO_F_VMS_BIND_VAR,ERR_R_PASSED_NULL_PARAMETER);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(sk_num(dso->meth_data) < 1)
|
|
||||||
{
|
|
||||||
DSOerr(DSO_F_VMS_BIND_VAR,DSO_R_STACK_ERROR);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ptr = (DSO_VMS_INTERNAL *)sk_value(dso->meth_data,
|
|
||||||
sk_num(dso->meth_data) - 1);
|
|
||||||
if(ptr == NULL)
|
|
||||||
{
|
|
||||||
DSOerr(DSO_F_VMS_BIND_VAR,DSO_R_NULL_HANDLE);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(dso->flags & DSO_FLAG_UPCASE_SYMBOL) flags = 0;
|
|
||||||
|
|
||||||
status = do_find_symbol(ptr, &symname_dsc, sym, flags);
|
|
||||||
|
|
||||||
if(!$VMS_STATUS_SUCCESS(status))
|
|
||||||
{
|
|
||||||
unsigned short length;
|
|
||||||
char errstring[257];
|
|
||||||
struct dsc$descriptor_s errstring_dsc;
|
|
||||||
|
|
||||||
errstring_dsc.dsc$w_length = sizeof(errstring);
|
|
||||||
errstring_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
|
|
||||||
errstring_dsc.dsc$b_class = DSC$K_CLASS_S;
|
|
||||||
errstring_dsc.dsc$a_pointer = errstring;
|
|
||||||
|
|
||||||
*sym = NULL;
|
|
||||||
|
|
||||||
status = sys$getmsg(status, &length, &errstring_dsc, 1, 0);
|
|
||||||
|
|
||||||
if (!$VMS_STATUS_SUCCESS(status))
|
|
||||||
lib$signal(status); /* This is really bad. Abort! */
|
|
||||||
else
|
|
||||||
{
|
|
||||||
errstring[length] = '\0';
|
|
||||||
|
|
||||||
DSOerr(DSO_F_VMS_BIND_VAR,DSO_R_SYM_FAILURE);
|
|
||||||
if (ptr->imagename_dsc.dsc$w_length)
|
|
||||||
ERR_add_error_data(9,
|
|
||||||
"Symbol ", symname,
|
|
||||||
" in ", ptr->filename,
|
|
||||||
" (", ptr->imagename, ")",
|
|
||||||
": ", errstring);
|
|
||||||
else
|
|
||||||
ERR_add_error_data(6,
|
|
||||||
"Symbol ", symname,
|
|
||||||
" in ", ptr->filename,
|
|
||||||
": ", errstring);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void *vms_bind_var(DSO *dso, const char *symname)
|
|
||||||
{
|
|
||||||
void *sym = 0;
|
|
||||||
vms_bind_sym(dso, symname, &sym);
|
|
||||||
return sym;
|
|
||||||
}
|
|
||||||
|
|
||||||
static DSO_FUNC_TYPE vms_bind_func(DSO *dso, const char *symname)
|
|
||||||
{
|
|
||||||
DSO_FUNC_TYPE sym = 0;
|
|
||||||
vms_bind_sym(dso, symname, (void **)&sym);
|
|
||||||
return sym;
|
|
||||||
}
|
|
||||||
|
|
||||||
static long vms_ctrl(DSO *dso, int cmd, long larg, void *parg)
|
|
||||||
{
|
|
||||||
if(dso == NULL)
|
|
||||||
{
|
|
||||||
DSOerr(DSO_F_VMS_CTRL,ERR_R_PASSED_NULL_PARAMETER);
|
|
||||||
return(-1);
|
|
||||||
}
|
|
||||||
switch(cmd)
|
|
||||||
{
|
|
||||||
case DSO_CTRL_GET_FLAGS:
|
|
||||||
return dso->flags;
|
|
||||||
case DSO_CTRL_SET_FLAGS:
|
|
||||||
dso->flags = (int)larg;
|
|
||||||
return(0);
|
|
||||||
case DSO_CTRL_OR_FLAGS:
|
|
||||||
dso->flags |= (int)larg;
|
|
||||||
return(0);
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
DSOerr(DSO_F_VMS_CTRL,DSO_R_UNKNOWN_COMMAND);
|
|
||||||
return(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* VMS */
|
|
||||||
2
crypto/engine/.cvsignore
Normal file
2
crypto/engine/.cvsignore
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
lib
|
||||||
|
Makefile.save
|
||||||
220
crypto/engine/Makefile.ssl
Normal file
220
crypto/engine/Makefile.ssl
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
#
|
||||||
|
# OpenSSL/crypto/engine/Makefile
|
||||||
|
#
|
||||||
|
|
||||||
|
DIR= engine
|
||||||
|
TOP= ../..
|
||||||
|
CC= cc
|
||||||
|
INCLUDES= -I.. -I../../include
|
||||||
|
CFLAG=-g
|
||||||
|
INSTALL_PREFIX=
|
||||||
|
OPENSSLDIR= /usr/local/ssl
|
||||||
|
INSTALLTOP=/usr/local/ssl
|
||||||
|
MAKE= make -f Makefile.ssl
|
||||||
|
MAKEDEPEND= $(TOP)/util/domd $(TOP)
|
||||||
|
MAKEFILE= Makefile.ssl
|
||||||
|
AR= ar r
|
||||||
|
|
||||||
|
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||||
|
|
||||||
|
GENERAL=Makefile
|
||||||
|
TEST= enginetest.c
|
||||||
|
APPS=
|
||||||
|
|
||||||
|
LIB=$(TOP)/libcrypto.a
|
||||||
|
LIBSRC= engine_err.c engine_lib.c engine_list.c engine_openssl.c \
|
||||||
|
hw_atalla.c hw_cswift.c hw_ncipher.c
|
||||||
|
LIBOBJ= engine_err.o engine_lib.o engine_list.o engine_openssl.o \
|
||||||
|
hw_atalla.o hw_cswift.o hw_ncipher.o
|
||||||
|
|
||||||
|
SRC= $(LIBSRC)
|
||||||
|
|
||||||
|
EXHEADER= engine.h
|
||||||
|
HEADER= $(EXHEADER)
|
||||||
|
|
||||||
|
ALL= $(GENERAL) $(SRC) $(HEADER)
|
||||||
|
|
||||||
|
top:
|
||||||
|
(cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all)
|
||||||
|
|
||||||
|
all: lib
|
||||||
|
|
||||||
|
lib: $(LIBOBJ)
|
||||||
|
$(AR) $(LIB) $(LIBOBJ)
|
||||||
|
$(RANLIB) $(LIB)
|
||||||
|
@touch lib
|
||||||
|
|
||||||
|
files:
|
||||||
|
$(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
|
||||||
|
|
||||||
|
links:
|
||||||
|
@$(TOP)/util/point.sh Makefile.ssl Makefile
|
||||||
|
@$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
|
||||||
|
@$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
|
||||||
|
@$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
|
||||||
|
|
||||||
|
install:
|
||||||
|
@for i in $(EXHEADER) ; \
|
||||||
|
do \
|
||||||
|
(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
|
||||||
|
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
|
||||||
|
done;
|
||||||
|
|
||||||
|
tags:
|
||||||
|
ctags $(SRC)
|
||||||
|
|
||||||
|
tests:
|
||||||
|
|
||||||
|
lint:
|
||||||
|
lint -DLINT $(INCLUDES) $(SRC)>fluff
|
||||||
|
|
||||||
|
depend:
|
||||||
|
$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
|
||||||
|
|
||||||
|
dclean:
|
||||||
|
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
|
||||||
|
mv -f Makefile.new $(MAKEFILE)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
|
||||||
|
|
||||||
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
|
engine_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||||
|
engine_err.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
|
||||||
|
engine_err.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h
|
||||||
|
engine_err.o: ../../include/openssl/des.h ../../include/openssl/dh.h
|
||||||
|
engine_err.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
|
||||||
|
engine_err.o: ../../include/openssl/engine.h ../../include/openssl/err.h
|
||||||
|
engine_err.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
|
||||||
|
engine_err.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
|
||||||
|
engine_err.o: ../../include/openssl/md4.h ../../include/openssl/md5.h
|
||||||
|
engine_err.o: ../../include/openssl/mdc2.h ../../include/openssl/obj_mac.h
|
||||||
|
engine_err.o: ../../include/openssl/objects.h
|
||||||
|
engine_err.o: ../../include/openssl/opensslconf.h
|
||||||
|
engine_err.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
|
||||||
|
engine_err.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
|
||||||
|
engine_err.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
|
||||||
|
engine_err.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||||
|
engine_err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||||
|
engine_err.o: ../../include/openssl/symhacks.h
|
||||||
|
engine_lib.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||||
|
engine_lib.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
|
||||||
|
engine_lib.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
|
||||||
|
engine_lib.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
|
||||||
|
engine_lib.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
||||||
|
engine_lib.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
|
||||||
|
engine_lib.o: ../../include/openssl/engine.h ../../include/openssl/err.h
|
||||||
|
engine_lib.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
|
||||||
|
engine_lib.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
|
||||||
|
engine_lib.o: ../../include/openssl/md4.h ../../include/openssl/md5.h
|
||||||
|
engine_lib.o: ../../include/openssl/mdc2.h ../../include/openssl/obj_mac.h
|
||||||
|
engine_lib.o: ../../include/openssl/objects.h
|
||||||
|
engine_lib.o: ../../include/openssl/opensslconf.h
|
||||||
|
engine_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
|
||||||
|
engine_lib.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
|
||||||
|
engine_lib.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
|
||||||
|
engine_lib.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||||
|
engine_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||||
|
engine_lib.o: ../../include/openssl/symhacks.h ../cryptlib.h engine_int.h
|
||||||
|
engine_list.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||||
|
engine_list.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
|
||||||
|
engine_list.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
|
||||||
|
engine_list.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
|
||||||
|
engine_list.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
||||||
|
engine_list.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
|
||||||
|
engine_list.o: ../../include/openssl/engine.h ../../include/openssl/err.h
|
||||||
|
engine_list.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
|
||||||
|
engine_list.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
|
||||||
|
engine_list.o: ../../include/openssl/md4.h ../../include/openssl/md5.h
|
||||||
|
engine_list.o: ../../include/openssl/mdc2.h ../../include/openssl/obj_mac.h
|
||||||
|
engine_list.o: ../../include/openssl/objects.h
|
||||||
|
engine_list.o: ../../include/openssl/opensslconf.h
|
||||||
|
engine_list.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
|
||||||
|
engine_list.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
|
||||||
|
engine_list.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
|
||||||
|
engine_list.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||||
|
engine_list.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||||
|
engine_list.o: ../../include/openssl/symhacks.h ../cryptlib.h engine_int.h
|
||||||
|
engine_openssl.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||||
|
engine_openssl.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
|
||||||
|
engine_openssl.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
|
||||||
|
engine_openssl.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
|
||||||
|
engine_openssl.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
||||||
|
engine_openssl.o: ../../include/openssl/dso.h ../../include/openssl/e_os.h
|
||||||
|
engine_openssl.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h
|
||||||
|
engine_openssl.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||||
|
engine_openssl.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h
|
||||||
|
engine_openssl.o: ../../include/openssl/md2.h ../../include/openssl/md4.h
|
||||||
|
engine_openssl.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
|
||||||
|
engine_openssl.o: ../../include/openssl/obj_mac.h
|
||||||
|
engine_openssl.o: ../../include/openssl/objects.h
|
||||||
|
engine_openssl.o: ../../include/openssl/opensslconf.h
|
||||||
|
engine_openssl.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
|
||||||
|
engine_openssl.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
|
||||||
|
engine_openssl.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
|
||||||
|
engine_openssl.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||||
|
engine_openssl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||||
|
engine_openssl.o: ../../include/openssl/symhacks.h ../cryptlib.h engine_int.h
|
||||||
|
hw_atalla.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||||
|
hw_atalla.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
|
||||||
|
hw_atalla.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
|
||||||
|
hw_atalla.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
|
||||||
|
hw_atalla.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
||||||
|
hw_atalla.o: ../../include/openssl/dso.h ../../include/openssl/e_os.h
|
||||||
|
hw_atalla.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h
|
||||||
|
hw_atalla.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||||
|
hw_atalla.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h
|
||||||
|
hw_atalla.o: ../../include/openssl/md2.h ../../include/openssl/md4.h
|
||||||
|
hw_atalla.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
|
||||||
|
hw_atalla.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||||
|
hw_atalla.o: ../../include/openssl/opensslconf.h
|
||||||
|
hw_atalla.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
|
||||||
|
hw_atalla.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
|
||||||
|
hw_atalla.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
|
||||||
|
hw_atalla.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||||
|
hw_atalla.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||||
|
hw_atalla.o: ../../include/openssl/symhacks.h ../cryptlib.h engine_int.h
|
||||||
|
hw_atalla.o: vendor_defns/atalla.h
|
||||||
|
hw_cswift.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||||
|
hw_cswift.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
|
||||||
|
hw_cswift.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
|
||||||
|
hw_cswift.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
|
||||||
|
hw_cswift.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
||||||
|
hw_cswift.o: ../../include/openssl/dso.h ../../include/openssl/e_os.h
|
||||||
|
hw_cswift.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h
|
||||||
|
hw_cswift.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||||
|
hw_cswift.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h
|
||||||
|
hw_cswift.o: ../../include/openssl/md2.h ../../include/openssl/md4.h
|
||||||
|
hw_cswift.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
|
||||||
|
hw_cswift.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||||
|
hw_cswift.o: ../../include/openssl/opensslconf.h
|
||||||
|
hw_cswift.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
|
||||||
|
hw_cswift.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
|
||||||
|
hw_cswift.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
|
||||||
|
hw_cswift.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||||
|
hw_cswift.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||||
|
hw_cswift.o: ../../include/openssl/symhacks.h ../cryptlib.h engine_int.h
|
||||||
|
hw_cswift.o: vendor_defns/cswift.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/dso.h ../../include/openssl/e_os.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/md2.h ../../include/openssl/md4.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/opensslconf.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/opensslv.h ../../include/openssl/pem.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/rand.h ../../include/openssl/rc2.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||||
|
hw_ncipher.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
|
||||||
|
hw_ncipher.o: ../cryptlib.h engine_int.h vendor_defns/hwcryptohook.h
|
||||||
278
crypto/engine/README
Normal file
278
crypto/engine/README
Normal file
@@ -0,0 +1,278 @@
|
|||||||
|
NOTES, THOUGHTS, and EVERYTHING
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
(1) Concurrency and locking ... I made a change to the ENGINE_free code
|
||||||
|
because I spotted a potential hold-up in proceedings (doing too
|
||||||
|
much inside a lock including calling a callback), there may be
|
||||||
|
other bits like this. What do the speed/optimisation freaks think
|
||||||
|
of this aspect of the code and design? There's lots of locking for
|
||||||
|
manipulation functions and I need that to keep things nice and
|
||||||
|
solid, but this manipulation is mostly (de)initialisation, I would
|
||||||
|
think that most run-time locking is purely in the ENGINE_init and
|
||||||
|
ENGINE_finish calls that might be made when getting handles for
|
||||||
|
RSA (and friends') structures. These would be mostly reference
|
||||||
|
count operations as the functional references should always be 1
|
||||||
|
or greater at run-time to prevent init/deinit thrashing.
|
||||||
|
|
||||||
|
(2) nCipher support, via the HWCryptoHook API, is now in the code.
|
||||||
|
Apparently this hasn't been tested too much yet, but it looks
|
||||||
|
good. :-) Atalla support has been added too, but shares a lot in
|
||||||
|
common with Ben's original hooks in bn_exp.c (although it has been
|
||||||
|
ENGINE-ified, and error handling wrapped around it) and it's also
|
||||||
|
had some low-volume testing, so it should be usable.
|
||||||
|
|
||||||
|
(3) Of more concern, we need to work out (a) how to put together usable
|
||||||
|
RAND_METHODs for units that just have one "get n or less random
|
||||||
|
bytes" function, (b) we also need to determine how to hook the code
|
||||||
|
in crypto/rand/ to use the ENGINE defaults in a way similar to what
|
||||||
|
has been done in crypto/rsa/, crypto/dsa/, etc.
|
||||||
|
|
||||||
|
(4) ENGINE should really grow to encompass more than 3 public key
|
||||||
|
algorithms and randomness gathering. The structure/data level of
|
||||||
|
the engine code is hidden from code outside the crypto/engine/
|
||||||
|
directory so change shouldn't be too viral. More important though
|
||||||
|
is how things should evolve ... this needs thought and discussion.
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------==*==-----------------------------------
|
||||||
|
|
||||||
|
More notes 2000-08-01
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Geoff Thorpe, who designed the engine part, wrote a pretty good description
|
||||||
|
of the thoughts he had when he built it, good enough to include verbatim here
|
||||||
|
(with his permission) -- Richard Levitte
|
||||||
|
|
||||||
|
|
||||||
|
Date: Tue, 1 Aug 2000 16:54:08 +0100 (BST)
|
||||||
|
From: Geoff Thorpe
|
||||||
|
Subject: Re: The thoughts to merge BRANCH_engine into the main trunk are
|
||||||
|
emerging
|
||||||
|
|
||||||
|
Hi there,
|
||||||
|
|
||||||
|
I'm going to try and do some justice to this, but I'm a little short on
|
||||||
|
time and the there is an endless amount that could be discussed on this
|
||||||
|
subject. sigh ... please bear with me :-)
|
||||||
|
|
||||||
|
> The changes in BRANCH_engine dig deep into the core of OpenSSL, for example
|
||||||
|
> into the RSA and RAND routines, adding a level of indirection which is needed
|
||||||
|
> to keep the abstraction, as far as I understand. It would be a good thing if
|
||||||
|
> those who do play with those things took a look at the changes that have been
|
||||||
|
> done in the branch and say out loud how much (or hopefully little) we've made
|
||||||
|
> fools of ourselves.
|
||||||
|
|
||||||
|
The point here is that the code that has emerged in the BRANCH_engine
|
||||||
|
branch was based on some initial requirements of mine that I went in and
|
||||||
|
addressed, and Richard has picked up the ball and run with it too. It
|
||||||
|
would be really useful to get some review of the approach we've taken, but
|
||||||
|
first I think I need to describe as best I can the reasons behind what has
|
||||||
|
been done so far, in particular what issues we have tried to address when
|
||||||
|
doing this, and what issues we have intentionally (or necessarily) tried
|
||||||
|
to avoid.
|
||||||
|
|
||||||
|
methods, engines, and evps
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
There has been some dicussion, particularly with Steve, about where this
|
||||||
|
ENGINE stuff might fit into the conceptual picture as/when we start to
|
||||||
|
abstract algorithms a little bit to make the library more extensible. In
|
||||||
|
particular, it would desirable to have algorithms (symmetric, hash, pkc,
|
||||||
|
etc) abstracted in some way that allows them to be just objects sitting in
|
||||||
|
a list (or database) ... it'll just happen that the "DSA" object doesn't
|
||||||
|
support encryption whereas the "RSA" object does. This requires a lot of
|
||||||
|
consideration to begin to know how to tackle it; in particular how
|
||||||
|
encapsulated should these things be? If the objects also understand their
|
||||||
|
own ASN1 encodings and what-not, then it would for example be possible to
|
||||||
|
add support for elliptic-curve DSA in as a new algorithm and automatically
|
||||||
|
have ECC-DSA certificates supported in SSL applications. Possible, but not
|
||||||
|
easy. :-)
|
||||||
|
|
||||||
|
Whatever, it seems that the way to go (if I've grok'd Steve's comments on
|
||||||
|
this in the past) is to amalgamate these things in EVP as is already done
|
||||||
|
(I think) for ciphers or hashes (Steve, please correct/elaborate). I
|
||||||
|
certainly think something should be done in this direction because right
|
||||||
|
now we have different source directories, types, functions, and methods
|
||||||
|
for each algorithm - even when conceptually they are very much different
|
||||||
|
feathers of the same bird. (This is certainly all true for the public-key
|
||||||
|
stuff, and may be partially true for the other parts.)
|
||||||
|
|
||||||
|
ENGINE was *not* conceived as a way of solving this, far from it. Nor was
|
||||||
|
it conceived as a way of replacing the various "***_METHOD"s. It was
|
||||||
|
conceived as an abstraction of a sort of "virtual crypto device". If we
|
||||||
|
lived in a world where "EVP_ALGO"s (or something like them) encapsulated
|
||||||
|
particular algorithms like RSA,DSA,MD5,RC4,etc, and "***_METHOD"s
|
||||||
|
encapsulated interfaces to algorithms (eg. some algo's might support a
|
||||||
|
PKC_METHOD, a HASH_METHOD, or a CIPHER_METHOD, who knows?), then I would
|
||||||
|
think that ENGINE would encapsulate an implementation of arbitrarily many
|
||||||
|
of those algorithms - perhaps as alternatives to existing algorithms
|
||||||
|
and/or perhaps as new previously unimplemented algorithms. An ENGINE could
|
||||||
|
be used to contain an alternative software implementation, a wrapper for a
|
||||||
|
hardware acceleration and/or key-management unit, a comms-wrapper for
|
||||||
|
distributing cryptographic operations to remote machines, or any other
|
||||||
|
"devices" your imagination can dream up.
|
||||||
|
|
||||||
|
However, what has been done in the ENGINE branch so far is nothing more
|
||||||
|
than starting to get our toes wet. I had a couple of self-imposed
|
||||||
|
requirements when putting the initial abstraction together, and I may have
|
||||||
|
already posed these in one form or another on the list, but briefly;
|
||||||
|
|
||||||
|
(i) only bother with public key algorithms for now, and maybe RAND too
|
||||||
|
(motivated by the need to get hardware support going and the fact
|
||||||
|
this was a comparitively easy subset to address to begin with).
|
||||||
|
|
||||||
|
(ii) don't change (if at all possible) the existing crypto code, ie. the
|
||||||
|
implementations, the way the ***_METHODs work, etc.
|
||||||
|
|
||||||
|
(iii) ensure that if no function from the ENGINE code is ever called then
|
||||||
|
things work the way they always did, and there is no memory
|
||||||
|
allocation (otherwise the failure to cleanup would be a problem -
|
||||||
|
this is part of the reason no STACKs were used, the other part of
|
||||||
|
the reason being I found them inappropriate).
|
||||||
|
|
||||||
|
(iv) ensure that all the built-in crypto was encapsulated by one of
|
||||||
|
these "ENGINE"s and that this engine was automatically selected as
|
||||||
|
the default.
|
||||||
|
|
||||||
|
(v) provide the minimum hooking possible in the existing crypto code
|
||||||
|
so that global functions (eg. RSA_public_encrypt) do not need any
|
||||||
|
extra parameter, yet will use whatever the current default ENGINE
|
||||||
|
for that RSA key is, and that the default can be set "per-key"
|
||||||
|
and globally (new keys will assume the global default, and keys
|
||||||
|
without their own default will be operated on using the global
|
||||||
|
default). NB: Try and make (v) conflict as little as possible with
|
||||||
|
(ii). :-)
|
||||||
|
|
||||||
|
(vi) wrap the ENGINE code up in duct tape so you can't even see the
|
||||||
|
corners. Ie. expose no structures at all, just black-box pointers.
|
||||||
|
|
||||||
|
(v) maintain internally a list of ENGINEs on which a calling
|
||||||
|
application can iterate, interrogate, etc. Allow a calling
|
||||||
|
application to hook in new ENGINEs, remove ENGINEs from the list,
|
||||||
|
and enforce uniqueness within the global list of each ENGINE's
|
||||||
|
"unique id".
|
||||||
|
|
||||||
|
(vi) keep reference counts for everything - eg. this includes storing a
|
||||||
|
reference inside each RSA structure to the ENGINE that it uses.
|
||||||
|
This is freed when the RSA structure is destroyed, or has its
|
||||||
|
ENGINE explicitly changed. The net effect needs to be that at any
|
||||||
|
time, it is deterministic to know whether an ENGINE is in use or
|
||||||
|
can be safely removed (or unloaded in the case of the other type
|
||||||
|
of reference) without invalidating function pointers that may or
|
||||||
|
may not be used indavertently in the future. This was actually
|
||||||
|
one of the biggest problems to overcome in the existing OpenSSL
|
||||||
|
code - implementations had always been assumed to be ever-present,
|
||||||
|
so there was no trivial way to get round this.
|
||||||
|
|
||||||
|
(vii) distinguish between structural references and functional
|
||||||
|
references.
|
||||||
|
|
||||||
|
A *little* detail
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
While my mind is on it; I'll illustrate the bit in item (vii). This idea
|
||||||
|
turned out to be very handy - the ENGINEs themselves need to be operated
|
||||||
|
on and manipulated simply as objects without necessarily trying to
|
||||||
|
"enable" them for use. Eg. most host machines will not have the necessary
|
||||||
|
hardware or software to support all the engines one might compile into
|
||||||
|
OpenSSL, yet it needs to be possible to iterate across the ENGINEs,
|
||||||
|
querying their names, properties, etc - all happening in a thread-safe
|
||||||
|
manner that uses reference counts (if you imagine two threads iterating
|
||||||
|
through a list and one thread removing the ENGINE the other is currently
|
||||||
|
looking at - you can see the gotcha waiting to happen). For all of this,
|
||||||
|
*structural references* are used and operate much like the other reference
|
||||||
|
counts in OpenSSL.
|
||||||
|
|
||||||
|
The other kind of reference count is for *functional* references - these
|
||||||
|
indicate a reference on which the caller can actually assume the
|
||||||
|
particular ENGINE to be initialised and usable to perform the operations
|
||||||
|
it implements. Any increment or decrement of the functional reference
|
||||||
|
count automatically invokes a corresponding change in the structural
|
||||||
|
reference count, as it is fairly obvious that a functional reference is a
|
||||||
|
restricted case of a structural reference. So struct_ref >= funct_ref at
|
||||||
|
all times. NB: functional references are usually obtained by a call to
|
||||||
|
ENGINE_init(), but can also be created implicitly by calls that require a
|
||||||
|
new functional reference to be created, eg. ENGINE_set_default(). Either
|
||||||
|
way the only time the underlying ENGINE's "init" function is really called
|
||||||
|
is when the (functional) reference count increases to 1, similarly the
|
||||||
|
underlying "finish" handler is only called as the count goes down to 0.
|
||||||
|
The effect of this, for example, is that if you set the default ENGINE for
|
||||||
|
RSA operations to be "cswift", then its functional reference count will
|
||||||
|
already be at least 1 so the CryptoSwift shared-library and the card will
|
||||||
|
stay loaded and initialised until such time as all RSA keys using the
|
||||||
|
cswift ENGINE are changed or destroyed and the default ENGINE for RSA
|
||||||
|
operations has been changed. This prevents repeated thrashing of init and
|
||||||
|
finish handling if the count keeps getting down as far as zero.
|
||||||
|
|
||||||
|
Otherwise, the way the ENGINE code has been put together I think pretty
|
||||||
|
much reflects the above points. The reason for the ENGINE structure having
|
||||||
|
individual RSA_METHOD, DSA_METHOD, etc pointers is simply that it was the
|
||||||
|
easiest way to go about things for now, to hook it all into the raw
|
||||||
|
RSA,DSA,etc code, and I was trying to the keep the structure invisible
|
||||||
|
anyway so that the way this is internally managed could be easily changed
|
||||||
|
later on when we start to work out what's to be done about these other
|
||||||
|
abstractions.
|
||||||
|
|
||||||
|
Down the line, if some EVP-based technique emerges for adequately
|
||||||
|
encapsulating algorithms and all their various bits and pieces, then I can
|
||||||
|
imagine that "ENGINE" would turn into a reference-counting database of
|
||||||
|
these EVP things, of which the default "openssl" ENGINE would be the
|
||||||
|
library's own object database of pre-built software implemented algorithms
|
||||||
|
(and such). It would also be cool to see the idea of "METHOD"s detached
|
||||||
|
from the algorithms themselves ... so RSA, DSA, ElGamal, etc can all
|
||||||
|
expose essentially the same METHOD (aka interface), which would include
|
||||||
|
any querying/flagging stuff to identify what the algorithm can/can't do,
|
||||||
|
its name, and other stuff like max/min block sizes, key sizes, etc. This
|
||||||
|
would result in ENGINE similarly detaching its internal database of
|
||||||
|
algorithm implementations from the function definitions that return
|
||||||
|
interfaces to them. I think ...
|
||||||
|
|
||||||
|
As for DSOs etc. Well the DSO code is pretty handy (but could be made much
|
||||||
|
more so) for loading vendor's driver-libraries and talking to them in some
|
||||||
|
generic way, but right now there's still big problems associated with
|
||||||
|
actually putting OpenSSL code (ie. new ENGINEs, or anything else for that
|
||||||
|
matter) in dynamically loadable libraries. These problems won't go away in
|
||||||
|
a hurry so I don't think we should expect to have any kind of
|
||||||
|
shared-library extensions any time soon - but solving the problems is a
|
||||||
|
good thing to aim for, and would as a side-effect probably help make
|
||||||
|
OpenSSL more usable as a shared-library itself (looking at the things
|
||||||
|
needed to do this will show you why).
|
||||||
|
|
||||||
|
One of the problems is that if you look at any of the ENGINE
|
||||||
|
implementations, eg. hw_cswift.c or hw_ncipher.c, you'll see how it needs
|
||||||
|
a variety of functionality and definitions from various areas of OpenSSL,
|
||||||
|
including crypto/bn/, crypto/err/, crypto/ itself (locking for example),
|
||||||
|
crypto/dso/, crypto/engine/, crypto/rsa, etc etc etc. So if similar code
|
||||||
|
were to be suctioned off into shared libraries, the shared libraries would
|
||||||
|
either have to duplicate all the definitions and code and avoid loader
|
||||||
|
conflicts, or OpenSSL would have to somehow expose all that functionality
|
||||||
|
to the shared-library. If this isn't a big enough problem, the issue of
|
||||||
|
binary compatibility will be - anyone writing Apache modules can tell you
|
||||||
|
that (Ralf? Ben? :-). However, I don't think OpenSSL would need to be
|
||||||
|
quite so forgiving as Apache should be, so OpenSSL could simply tell its
|
||||||
|
version to the DSO and leave the DSO with the problem of deciding whether
|
||||||
|
to proceed or bail out for fear of binary incompatibilities.
|
||||||
|
|
||||||
|
Certainly one thing that would go a long way to addressing this is to
|
||||||
|
embark on a bit of an opaqueness mission. I've set the ENGINE code up with
|
||||||
|
this in mind - it's so draconian that even to declare your own ENGINE, you
|
||||||
|
have to get the engine code to create the underlying ENGINE structure, and
|
||||||
|
then feed in the new ENGINE's function/method pointers through various
|
||||||
|
"set" functions. The more of the code that takes on such a black-box
|
||||||
|
approach, the more of the code that will be (a) easy to expose to shared
|
||||||
|
libraries that need it, and (b) easy to expose to applications wanting to
|
||||||
|
use OpenSSL itself as a shared-library. From my own explorations in
|
||||||
|
OpenSSL, the biggest leviathan I've seen that is a problem in this respect
|
||||||
|
is the BIGNUM code. Trying to "expose" the bignum code through any kind of
|
||||||
|
organised "METHODs", let alone do all the necessary bignum operations
|
||||||
|
solely through functions rather than direct access to the structures and
|
||||||
|
macros, will be a massive pain in the "r"s.
|
||||||
|
|
||||||
|
Anyway, I'm done for now - hope it was readable. Thoughts?
|
||||||
|
|
||||||
|
Cheers,
|
||||||
|
Geoff
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------==*==-----------------------------------
|
||||||
|
|
||||||
397
crypto/engine/engine.h
Normal file
397
crypto/engine/engine.h
Normal file
@@ -0,0 +1,397 @@
|
|||||||
|
/* openssl/engine.h */
|
||||||
|
/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
|
||||||
|
* project 2000.
|
||||||
|
*/
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. All advertising materials mentioning features or use of this
|
||||||
|
* software must display the following acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||||
|
* endorse or promote products derived from this software without
|
||||||
|
* prior written permission. For written permission, please contact
|
||||||
|
* licensing@OpenSSL.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "OpenSSL"
|
||||||
|
* nor may "OpenSSL" appear in their names without prior written
|
||||||
|
* permission of the OpenSSL Project.
|
||||||
|
*
|
||||||
|
* 6. Redistributions of any form whatsoever must retain the following
|
||||||
|
* acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||||
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This product includes cryptographic software written by Eric Young
|
||||||
|
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||||
|
* Hudson (tjh@cryptsoft.com).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef HEADER_ENGINE_H
|
||||||
|
#define HEADER_ENGINE_H
|
||||||
|
|
||||||
|
#include <openssl/bn.h>
|
||||||
|
#include <openssl/rsa.h>
|
||||||
|
#include <openssl/dsa.h>
|
||||||
|
#include <openssl/dh.h>
|
||||||
|
#include <openssl/rand.h>
|
||||||
|
#include <openssl/evp.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* These flags are used to control combinations of algorithm (methods)
|
||||||
|
* by bitwise "OR"ing. */
|
||||||
|
#define ENGINE_METHOD_RSA (unsigned int)0x0001
|
||||||
|
#define ENGINE_METHOD_DSA (unsigned int)0x0002
|
||||||
|
#define ENGINE_METHOD_DH (unsigned int)0x0004
|
||||||
|
#define ENGINE_METHOD_RAND (unsigned int)0x0008
|
||||||
|
#define ENGINE_METHOD_BN_MOD_EXP (unsigned int)0x0010
|
||||||
|
#define ENGINE_METHOD_BN_MOD_EXP_CRT (unsigned int)0x0020
|
||||||
|
/* Obvious all-or-nothing cases. */
|
||||||
|
#define ENGINE_METHOD_ALL (unsigned int)0xFFFF
|
||||||
|
#define ENGINE_METHOD_NONE (unsigned int)0x0000
|
||||||
|
|
||||||
|
/* These flags are used to tell the ctrl function what should be done.
|
||||||
|
* All command numbers are shared between all engines, even if some don't
|
||||||
|
* make sense to some engines. In such a case, they do nothing but return
|
||||||
|
* the error ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED. */
|
||||||
|
#define ENGINE_CTRL_SET_LOGSTREAM 1
|
||||||
|
#define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2
|
||||||
|
/* Flags specific to the nCipher "chil" engine */
|
||||||
|
#define ENGINE_CTRL_CHIL_SET_FORKCHECK 100
|
||||||
|
/* Depending on the value of the (long)i argument, this sets or
|
||||||
|
* unsets the SimpleForkCheck flag in the CHIL API to enable or
|
||||||
|
* disable checking and workarounds for applications that fork().
|
||||||
|
*/
|
||||||
|
#define ENGINE_CTRL_CHIL_NO_LOCKING 101
|
||||||
|
/* This prevents the initialisation function from providing mutex
|
||||||
|
* callbacks to the nCipher library. */
|
||||||
|
|
||||||
|
/* As we're missing a BIGNUM_METHOD, we need a couple of locally
|
||||||
|
* defined function types that engines can implement. */
|
||||||
|
|
||||||
|
#ifndef HEADER_ENGINE_INT_H
|
||||||
|
/* mod_exp operation, calculates; r = a ^ p mod m
|
||||||
|
* NB: ctx can be NULL, but if supplied, the implementation may use
|
||||||
|
* it if it wishes. */
|
||||||
|
typedef int (*BN_MOD_EXP)(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *m, BN_CTX *ctx);
|
||||||
|
|
||||||
|
/* private key operation for RSA, provided seperately in case other
|
||||||
|
* RSA implementations wish to use it. */
|
||||||
|
typedef int (*BN_MOD_EXP_CRT)(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *q, const BIGNUM *dmp1, const BIGNUM *dmq1,
|
||||||
|
const BIGNUM *iqmp, BN_CTX *ctx);
|
||||||
|
|
||||||
|
/* Generic function pointer */
|
||||||
|
typedef void (*ENGINE_GEN_FUNC_PTR)();
|
||||||
|
/* Generic function pointer taking no arguments */
|
||||||
|
typedef void (*ENGINE_GEN_INT_FUNC_PTR)(void);
|
||||||
|
/* Specific control function pointer */
|
||||||
|
typedef int (*ENGINE_CTRL_FUNC_PTR)(int cmd, long i, void *p, void (*f)());
|
||||||
|
|
||||||
|
/* The list of "engine" types is a static array of (const ENGINE*)
|
||||||
|
* pointers (not dynamic because static is fine for now and we otherwise
|
||||||
|
* have to hook an appropriate load/unload function in to initialise and
|
||||||
|
* cleanup). */
|
||||||
|
typedef struct engine_st ENGINE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* STRUCTURE functions ... all of these functions deal with pointers to
|
||||||
|
* ENGINE structures where the pointers have a "structural reference".
|
||||||
|
* This means that their reference is to allow access to the structure
|
||||||
|
* but it does not imply that the structure is functional. To simply
|
||||||
|
* increment or decrement the structural reference count, use ENGINE_new
|
||||||
|
* and ENGINE_free. NB: This is not required when iterating using
|
||||||
|
* ENGINE_get_next as it will automatically decrement the structural
|
||||||
|
* reference count of the "current" ENGINE and increment the structural
|
||||||
|
* reference count of the ENGINE it returns (unless it is NULL). */
|
||||||
|
|
||||||
|
/* Get the first/last "ENGINE" type available. */
|
||||||
|
ENGINE *ENGINE_get_first(void);
|
||||||
|
ENGINE *ENGINE_get_last(void);
|
||||||
|
/* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */
|
||||||
|
ENGINE *ENGINE_get_next(ENGINE *e);
|
||||||
|
ENGINE *ENGINE_get_prev(ENGINE *e);
|
||||||
|
/* Add another "ENGINE" type into the array. */
|
||||||
|
int ENGINE_add(ENGINE *e);
|
||||||
|
/* Remove an existing "ENGINE" type from the array. */
|
||||||
|
int ENGINE_remove(ENGINE *e);
|
||||||
|
/* Retrieve an engine from the list by its unique "id" value. */
|
||||||
|
ENGINE *ENGINE_by_id(const char *id);
|
||||||
|
|
||||||
|
/* These functions are useful for manufacturing new ENGINE
|
||||||
|
* structures. They don't address reference counting at all -
|
||||||
|
* one uses them to populate an ENGINE structure with personalised
|
||||||
|
* implementations of things prior to using it directly or adding
|
||||||
|
* it to the builtin ENGINE list in OpenSSL. These are also here
|
||||||
|
* so that the ENGINE structure doesn't have to be exposed and
|
||||||
|
* break binary compatibility!
|
||||||
|
*
|
||||||
|
* NB: I'm changing ENGINE_new to force the ENGINE structure to
|
||||||
|
* be allocated from within OpenSSL. See the comment for
|
||||||
|
* ENGINE_get_struct_size().
|
||||||
|
*/
|
||||||
|
#if 0
|
||||||
|
ENGINE *ENGINE_new(ENGINE *e);
|
||||||
|
#else
|
||||||
|
ENGINE *ENGINE_new(void);
|
||||||
|
#endif
|
||||||
|
int ENGINE_free(ENGINE *e);
|
||||||
|
int ENGINE_set_id(ENGINE *e, const char *id);
|
||||||
|
int ENGINE_set_name(ENGINE *e, const char *name);
|
||||||
|
int ENGINE_set_RSA(ENGINE *e, RSA_METHOD *rsa_meth);
|
||||||
|
int ENGINE_set_DSA(ENGINE *e, DSA_METHOD *dsa_meth);
|
||||||
|
int ENGINE_set_DH(ENGINE *e, DH_METHOD *dh_meth);
|
||||||
|
int ENGINE_set_RAND(ENGINE *e, RAND_METHOD *rand_meth);
|
||||||
|
int ENGINE_set_BN_mod_exp(ENGINE *e, BN_MOD_EXP bn_mod_exp);
|
||||||
|
int ENGINE_set_BN_mod_exp_crt(ENGINE *e, BN_MOD_EXP_CRT bn_mod_exp_crt);
|
||||||
|
int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f);
|
||||||
|
int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f);
|
||||||
|
int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f);
|
||||||
|
|
||||||
|
/* These return values from within the ENGINE structure. These can
|
||||||
|
* be useful with functional references as well as structural
|
||||||
|
* references - it depends which you obtained. Using the result
|
||||||
|
* for functional purposes if you only obtained a structural
|
||||||
|
* reference may be problematic! */
|
||||||
|
const char *ENGINE_get_id(ENGINE *e);
|
||||||
|
const char *ENGINE_get_name(ENGINE *e);
|
||||||
|
RSA_METHOD *ENGINE_get_RSA(ENGINE *e);
|
||||||
|
DSA_METHOD *ENGINE_get_DSA(ENGINE *e);
|
||||||
|
DH_METHOD *ENGINE_get_DH(ENGINE *e);
|
||||||
|
RAND_METHOD *ENGINE_get_RAND(ENGINE *e);
|
||||||
|
BN_MOD_EXP ENGINE_get_BN_mod_exp(ENGINE *e);
|
||||||
|
BN_MOD_EXP_CRT ENGINE_get_BN_mod_exp_crt(ENGINE *e);
|
||||||
|
ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(ENGINE *e);
|
||||||
|
ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(ENGINE *e);
|
||||||
|
ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(ENGINE *e);
|
||||||
|
|
||||||
|
/* ENGINE_new is normally passed a NULL in the first parameter because
|
||||||
|
* the calling code doesn't have access to the definition of the ENGINE
|
||||||
|
* structure (for good reason). However, if the caller wishes to use
|
||||||
|
* its own memory allocation or use a static array, the following call
|
||||||
|
* should be used to check the amount of memory the ENGINE structure
|
||||||
|
* will occupy. This will make the code more future-proof.
|
||||||
|
*
|
||||||
|
* NB: I'm "#if 0"-ing this out because it's better to force the use of
|
||||||
|
* internally allocated memory. See similar change in ENGINE_new().
|
||||||
|
*/
|
||||||
|
#if 0
|
||||||
|
int ENGINE_get_struct_size(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* FUNCTIONAL functions. These functions deal with ENGINE structures
|
||||||
|
* that have (or will) be initialised for use. Broadly speaking, the
|
||||||
|
* structural functions are useful for iterating the list of available
|
||||||
|
* engine types, creating new engine types, and other "list" operations.
|
||||||
|
* These functions actually deal with ENGINEs that are to be used. As
|
||||||
|
* such these functions can fail (if applicable) when particular
|
||||||
|
* engines are unavailable - eg. if a hardware accelerator is not
|
||||||
|
* attached or not functioning correctly. Each ENGINE has 2 reference
|
||||||
|
* counts; structural and functional. Every time a functional reference
|
||||||
|
* is obtained or released, a corresponding structural reference is
|
||||||
|
* automatically obtained or released too. */
|
||||||
|
|
||||||
|
/* Initialise a engine type for use (or up its reference count if it's
|
||||||
|
* already in use). This will fail if the engine is not currently
|
||||||
|
* operational and cannot initialise. */
|
||||||
|
int ENGINE_init(ENGINE *e);
|
||||||
|
/* Free a functional reference to a engine type. This does not require
|
||||||
|
* a corresponding call to ENGINE_free as it also releases a structural
|
||||||
|
* reference. */
|
||||||
|
int ENGINE_finish(ENGINE *e);
|
||||||
|
/* Send control parametrised commands to the engine. The possibilities
|
||||||
|
* to send down an integer, a pointer to data or a function pointer are
|
||||||
|
* provided. Any of the parameters may or may not be NULL, depending
|
||||||
|
* on the command number */
|
||||||
|
/* WARNING: This is currently experimental and may change radically! */
|
||||||
|
int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)());
|
||||||
|
|
||||||
|
/* The following functions handle keys that are stored in some secondary
|
||||||
|
* location, handled by the engine. The storage may be on a card or
|
||||||
|
* whatever. */
|
||||||
|
EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id,
|
||||||
|
const char *passphrase);
|
||||||
|
EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id,
|
||||||
|
const char *passphrase);
|
||||||
|
|
||||||
|
/* This returns a pointer for the current ENGINE structure that
|
||||||
|
* is (by default) performing any RSA operations. The value returned
|
||||||
|
* is an incremented reference, so it should be free'd (ENGINE_finish)
|
||||||
|
* before it is discarded. */
|
||||||
|
ENGINE *ENGINE_get_default_RSA(void);
|
||||||
|
/* Same for the other "methods" */
|
||||||
|
ENGINE *ENGINE_get_default_DSA(void);
|
||||||
|
ENGINE *ENGINE_get_default_DH(void);
|
||||||
|
ENGINE *ENGINE_get_default_RAND(void);
|
||||||
|
ENGINE *ENGINE_get_default_BN_mod_exp(void);
|
||||||
|
ENGINE *ENGINE_get_default_BN_mod_exp_crt(void);
|
||||||
|
|
||||||
|
/* This sets a new default ENGINE structure for performing RSA
|
||||||
|
* operations. If the result is non-zero (success) then the ENGINE
|
||||||
|
* structure will have had its reference count up'd so the caller
|
||||||
|
* should still free their own reference 'e'. */
|
||||||
|
int ENGINE_set_default_RSA(ENGINE *e);
|
||||||
|
/* Same for the other "methods" */
|
||||||
|
int ENGINE_set_default_DSA(ENGINE *e);
|
||||||
|
int ENGINE_set_default_DH(ENGINE *e);
|
||||||
|
int ENGINE_set_default_RAND(ENGINE *e);
|
||||||
|
int ENGINE_set_default_BN_mod_exp(ENGINE *e);
|
||||||
|
int ENGINE_set_default_BN_mod_exp_crt(ENGINE *e);
|
||||||
|
|
||||||
|
/* The combination "set" - the flags are bitwise "OR"d from the
|
||||||
|
* ENGINE_METHOD_*** defines above. */
|
||||||
|
int ENGINE_set_default(ENGINE *e, unsigned int flags);
|
||||||
|
|
||||||
|
/* Obligatory error function. */
|
||||||
|
void ERR_load_ENGINE_strings(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Error codes for all engine functions. NB: We use "generic"
|
||||||
|
* function names instead of per-implementation ones because this
|
||||||
|
* levels the playing field for externally implemented bootstrapped
|
||||||
|
* support code. As the filename and line number is included, it's
|
||||||
|
* more important to indicate the type of function, so that
|
||||||
|
* bootstrapped code (that can't easily add its own errors in) can
|
||||||
|
* use the same error codes too.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* BEGIN ERROR CODES */
|
||||||
|
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
||||||
|
* made after this point may be overwritten when the script is next run.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Error codes for the ENGINE functions. */
|
||||||
|
|
||||||
|
/* Function codes. */
|
||||||
|
#define ENGINE_F_ATALLA_FINISH 135
|
||||||
|
#define ENGINE_F_ATALLA_INIT 136
|
||||||
|
#define ENGINE_F_ATALLA_MOD_EXP 137
|
||||||
|
#define ENGINE_F_ATALLA_RSA_MOD_EXP 138
|
||||||
|
#define ENGINE_F_CSWIFT_DSA_SIGN 133
|
||||||
|
#define ENGINE_F_CSWIFT_DSA_VERIFY 134
|
||||||
|
#define ENGINE_F_CSWIFT_FINISH 100
|
||||||
|
#define ENGINE_F_CSWIFT_INIT 101
|
||||||
|
#define ENGINE_F_CSWIFT_MOD_EXP 102
|
||||||
|
#define ENGINE_F_CSWIFT_MOD_EXP_CRT 103
|
||||||
|
#define ENGINE_F_CSWIFT_RSA_MOD_EXP 104
|
||||||
|
#define ENGINE_F_ENGINE_ADD 105
|
||||||
|
#define ENGINE_F_ENGINE_BY_ID 106
|
||||||
|
#define ENGINE_F_ENGINE_CTRL 142
|
||||||
|
#define ENGINE_F_ENGINE_FINISH 107
|
||||||
|
#define ENGINE_F_ENGINE_FREE 108
|
||||||
|
#define ENGINE_F_ENGINE_GET_BN_MOD_EXP 109
|
||||||
|
#define ENGINE_F_ENGINE_GET_BN_MOD_EXP_CRT 110
|
||||||
|
#define ENGINE_F_ENGINE_GET_CTRL_FUNCTION 144
|
||||||
|
#define ENGINE_F_ENGINE_GET_DH 111
|
||||||
|
#define ENGINE_F_ENGINE_GET_DSA 112
|
||||||
|
#define ENGINE_F_ENGINE_GET_FINISH_FUNCTION 145
|
||||||
|
#define ENGINE_F_ENGINE_GET_ID 113
|
||||||
|
#define ENGINE_F_ENGINE_GET_INIT_FUNCTION 146
|
||||||
|
#define ENGINE_F_ENGINE_GET_NAME 114
|
||||||
|
#define ENGINE_F_ENGINE_GET_NEXT 115
|
||||||
|
#define ENGINE_F_ENGINE_GET_PREV 116
|
||||||
|
#define ENGINE_F_ENGINE_GET_RAND 117
|
||||||
|
#define ENGINE_F_ENGINE_GET_RSA 118
|
||||||
|
#define ENGINE_F_ENGINE_INIT 119
|
||||||
|
#define ENGINE_F_ENGINE_LIST_ADD 120
|
||||||
|
#define ENGINE_F_ENGINE_LIST_REMOVE 121
|
||||||
|
#define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150
|
||||||
|
#define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151
|
||||||
|
#define ENGINE_F_ENGINE_NEW 122
|
||||||
|
#define ENGINE_F_ENGINE_REMOVE 123
|
||||||
|
#define ENGINE_F_ENGINE_SET_BN_MOD_EXP 124
|
||||||
|
#define ENGINE_F_ENGINE_SET_BN_MOD_EXP_CRT 125
|
||||||
|
#define ENGINE_F_ENGINE_SET_CTRL_FUNCTION 147
|
||||||
|
#define ENGINE_F_ENGINE_SET_DEFAULT_TYPE 126
|
||||||
|
#define ENGINE_F_ENGINE_SET_DH 127
|
||||||
|
#define ENGINE_F_ENGINE_SET_DSA 128
|
||||||
|
#define ENGINE_F_ENGINE_SET_FINISH_FUNCTION 148
|
||||||
|
#define ENGINE_F_ENGINE_SET_ID 129
|
||||||
|
#define ENGINE_F_ENGINE_SET_INIT_FUNCTION 149
|
||||||
|
#define ENGINE_F_ENGINE_SET_NAME 130
|
||||||
|
#define ENGINE_F_ENGINE_SET_RAND 131
|
||||||
|
#define ENGINE_F_ENGINE_SET_RSA 132
|
||||||
|
#define ENGINE_F_ENGINE_UNLOAD_KEY 152
|
||||||
|
#define ENGINE_F_HWCRHK_CTRL 143
|
||||||
|
#define ENGINE_F_HWCRHK_FINISH 135
|
||||||
|
#define ENGINE_F_HWCRHK_GET_PASS 155
|
||||||
|
#define ENGINE_F_HWCRHK_INIT 136
|
||||||
|
#define ENGINE_F_HWCRHK_LOAD_PRIVKEY 153
|
||||||
|
#define ENGINE_F_HWCRHK_LOAD_PUBKEY 154
|
||||||
|
#define ENGINE_F_HWCRHK_MOD_EXP 137
|
||||||
|
#define ENGINE_F_HWCRHK_MOD_EXP_CRT 138
|
||||||
|
#define ENGINE_F_HWCRHK_RAND_BYTES 139
|
||||||
|
#define ENGINE_F_HWCRHK_RSA_MOD_EXP 140
|
||||||
|
#define ENGINE_F_LOG_MESSAGE 141
|
||||||
|
|
||||||
|
/* Reason codes. */
|
||||||
|
#define ENGINE_R_ALREADY_LOADED 100
|
||||||
|
#define ENGINE_R_BIO_WAS_FREED 121
|
||||||
|
#define ENGINE_R_BN_CTX_FULL 101
|
||||||
|
#define ENGINE_R_BN_EXPAND_FAIL 102
|
||||||
|
#define ENGINE_R_CHIL_ERROR 123
|
||||||
|
#define ENGINE_R_CONFLICTING_ENGINE_ID 103
|
||||||
|
#define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED 119
|
||||||
|
#define ENGINE_R_DSO_FAILURE 104
|
||||||
|
#define ENGINE_R_ENGINE_IS_NOT_IN_LIST 105
|
||||||
|
#define ENGINE_R_FAILED_LOADING_PRIVATE_KEY 128
|
||||||
|
#define ENGINE_R_FAILED_LOADING_PUBLIC_KEY 129
|
||||||
|
#define ENGINE_R_FINISH_FAILED 106
|
||||||
|
#define ENGINE_R_GET_HANDLE_FAILED 107
|
||||||
|
#define ENGINE_R_ID_OR_NAME_MISSING 108
|
||||||
|
#define ENGINE_R_INIT_FAILED 109
|
||||||
|
#define ENGINE_R_INTERNAL_LIST_ERROR 110
|
||||||
|
#define ENGINE_R_MISSING_KEY_COMPONENTS 111
|
||||||
|
#define ENGINE_R_NOT_INITIALISED 117
|
||||||
|
#define ENGINE_R_NOT_LOADED 112
|
||||||
|
#define ENGINE_R_NO_CALLBACK 127
|
||||||
|
#define ENGINE_R_NO_CONTROL_FUNCTION 120
|
||||||
|
#define ENGINE_R_NO_KEY 124
|
||||||
|
#define ENGINE_R_NO_LOAD_FUNCTION 125
|
||||||
|
#define ENGINE_R_NO_REFERENCE 130
|
||||||
|
#define ENGINE_R_NO_SUCH_ENGINE 116
|
||||||
|
#define ENGINE_R_NO_UNLOAD_FUNCTION 126
|
||||||
|
#define ENGINE_R_PROVIDE_PARAMETERS 113
|
||||||
|
#define ENGINE_R_REQUEST_FAILED 114
|
||||||
|
#define ENGINE_R_REQUEST_FALLBACK 118
|
||||||
|
#define ENGINE_R_SIZE_TOO_LARGE_OR_TOO_SMALL 122
|
||||||
|
#define ENGINE_R_UNIT_FAILURE 115
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
183
crypto/engine/engine_err.c
Normal file
183
crypto/engine/engine_err.c
Normal file
@@ -0,0 +1,183 @@
|
|||||||
|
/* crypto/engine/engine_err.c */
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright (c) 1999 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).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* NOTE: this file was auto generated by the mkerr.pl script: any changes
|
||||||
|
* made to it will be overwritten when the script next updates this file,
|
||||||
|
* only reason strings will be preserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <openssl/err.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
|
/* BEGIN ERROR CODES */
|
||||||
|
#ifndef NO_ERR
|
||||||
|
static ERR_STRING_DATA ENGINE_str_functs[]=
|
||||||
|
{
|
||||||
|
{ERR_PACK(0,ENGINE_F_ATALLA_FINISH,0), "ATALLA_FINISH"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ATALLA_INIT,0), "ATALLA_INIT"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ATALLA_MOD_EXP,0), "ATALLA_MOD_EXP"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ATALLA_RSA_MOD_EXP,0), "ATALLA_RSA_MOD_EXP"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_CSWIFT_DSA_SIGN,0), "CSWIFT_DSA_SIGN"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_CSWIFT_DSA_VERIFY,0), "CSWIFT_DSA_VERIFY"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_CSWIFT_FINISH,0), "CSWIFT_FINISH"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_CSWIFT_INIT,0), "CSWIFT_INIT"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_CSWIFT_MOD_EXP,0), "CSWIFT_MOD_EXP"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_CSWIFT_MOD_EXP_CRT,0), "CSWIFT_MOD_EXP_CRT"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_CSWIFT_RSA_MOD_EXP,0), "CSWIFT_RSA_MOD_EXP"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_ADD,0), "ENGINE_add"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_BY_ID,0), "ENGINE_by_id"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_CTRL,0), "ENGINE_ctrl"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_FINISH,0), "ENGINE_finish"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_FREE,0), "ENGINE_free"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_GET_BN_MOD_EXP,0), "ENGINE_get_BN_mod_exp"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_GET_BN_MOD_EXP_CRT,0), "ENGINE_get_BN_mod_exp_crt"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_GET_CTRL_FUNCTION,0), "ENGINE_get_ctrl_function"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_GET_DH,0), "ENGINE_get_DH"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_GET_DSA,0), "ENGINE_get_DSA"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_GET_FINISH_FUNCTION,0), "ENGINE_get_finish_function"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_GET_ID,0), "ENGINE_get_id"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_GET_INIT_FUNCTION,0), "ENGINE_get_init_function"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_GET_NAME,0), "ENGINE_get_name"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_GET_NEXT,0), "ENGINE_get_next"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_GET_PREV,0), "ENGINE_get_prev"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_GET_RAND,0), "ENGINE_get_RAND"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_GET_RSA,0), "ENGINE_get_RSA"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_INIT,0), "ENGINE_init"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_LIST_ADD,0), "ENGINE_LIST_ADD"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_LIST_REMOVE,0), "ENGINE_LIST_REMOVE"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_LOAD_PRIVATE_KEY,0), "ENGINE_load_private_key"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_LOAD_PUBLIC_KEY,0), "ENGINE_load_public_key"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_NEW,0), "ENGINE_new"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_REMOVE,0), "ENGINE_remove"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_SET_BN_MOD_EXP,0), "ENGINE_set_BN_mod_exp"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_SET_BN_MOD_EXP_CRT,0), "ENGINE_set_BN_mod_exp_crt"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_SET_CTRL_FUNCTION,0), "ENGINE_set_ctrl_function"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_SET_DEFAULT_TYPE,0), "ENGINE_SET_DEFAULT_TYPE"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_SET_DH,0), "ENGINE_set_DH"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_SET_DSA,0), "ENGINE_set_DSA"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_SET_FINISH_FUNCTION,0), "ENGINE_set_finish_function"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_SET_ID,0), "ENGINE_set_id"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_SET_INIT_FUNCTION,0), "ENGINE_set_init_function"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_SET_NAME,0), "ENGINE_set_name"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_SET_RAND,0), "ENGINE_set_RAND"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_SET_RSA,0), "ENGINE_set_RSA"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_ENGINE_UNLOAD_KEY,0), "ENGINE_UNLOAD_KEY"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_HWCRHK_CTRL,0), "HWCRHK_CTRL"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_HWCRHK_FINISH,0), "HWCRHK_FINISH"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_HWCRHK_GET_PASS,0), "HWCRHK_GET_PASS"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_HWCRHK_INIT,0), "HWCRHK_INIT"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_HWCRHK_LOAD_PRIVKEY,0), "HWCRHK_LOAD_PRIVKEY"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_HWCRHK_LOAD_PUBKEY,0), "HWCRHK_LOAD_PUBKEY"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_HWCRHK_MOD_EXP,0), "HWCRHK_MOD_EXP"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_HWCRHK_MOD_EXP_CRT,0), "HWCRHK_MOD_EXP_CRT"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_HWCRHK_RAND_BYTES,0), "HWCRHK_RAND_BYTES"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_HWCRHK_RSA_MOD_EXP,0), "HWCRHK_RSA_MOD_EXP"},
|
||||||
|
{ERR_PACK(0,ENGINE_F_LOG_MESSAGE,0), "LOG_MESSAGE"},
|
||||||
|
{0,NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
static ERR_STRING_DATA ENGINE_str_reasons[]=
|
||||||
|
{
|
||||||
|
{ENGINE_R_ALREADY_LOADED ,"already loaded"},
|
||||||
|
{ENGINE_R_BIO_WAS_FREED ,"bio was freed"},
|
||||||
|
{ENGINE_R_BN_CTX_FULL ,"BN_CTX full"},
|
||||||
|
{ENGINE_R_BN_EXPAND_FAIL ,"bn_expand fail"},
|
||||||
|
{ENGINE_R_CHIL_ERROR ,"chil error"},
|
||||||
|
{ENGINE_R_CONFLICTING_ENGINE_ID ,"conflicting engine id"},
|
||||||
|
{ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED ,"ctrl command not implemented"},
|
||||||
|
{ENGINE_R_DSO_FAILURE ,"DSO failure"},
|
||||||
|
{ENGINE_R_ENGINE_IS_NOT_IN_LIST ,"engine is not in the list"},
|
||||||
|
{ENGINE_R_FAILED_LOADING_PRIVATE_KEY ,"failed loading private key"},
|
||||||
|
{ENGINE_R_FAILED_LOADING_PUBLIC_KEY ,"failed loading public key"},
|
||||||
|
{ENGINE_R_FINISH_FAILED ,"finish failed"},
|
||||||
|
{ENGINE_R_GET_HANDLE_FAILED ,"could not obtain hardware handle"},
|
||||||
|
{ENGINE_R_ID_OR_NAME_MISSING ,"'id' or 'name' missing"},
|
||||||
|
{ENGINE_R_INIT_FAILED ,"init failed"},
|
||||||
|
{ENGINE_R_INTERNAL_LIST_ERROR ,"internal list error"},
|
||||||
|
{ENGINE_R_MISSING_KEY_COMPONENTS ,"missing key components"},
|
||||||
|
{ENGINE_R_NOT_INITIALISED ,"not initialised"},
|
||||||
|
{ENGINE_R_NOT_LOADED ,"not loaded"},
|
||||||
|
{ENGINE_R_NO_CALLBACK ,"no callback"},
|
||||||
|
{ENGINE_R_NO_CONTROL_FUNCTION ,"no control function"},
|
||||||
|
{ENGINE_R_NO_KEY ,"no key"},
|
||||||
|
{ENGINE_R_NO_LOAD_FUNCTION ,"no load function"},
|
||||||
|
{ENGINE_R_NO_REFERENCE ,"no reference"},
|
||||||
|
{ENGINE_R_NO_SUCH_ENGINE ,"no such engine"},
|
||||||
|
{ENGINE_R_NO_UNLOAD_FUNCTION ,"no unload function"},
|
||||||
|
{ENGINE_R_PROVIDE_PARAMETERS ,"provide parameters"},
|
||||||
|
{ENGINE_R_REQUEST_FAILED ,"request failed"},
|
||||||
|
{ENGINE_R_REQUEST_FALLBACK ,"request fallback"},
|
||||||
|
{ENGINE_R_SIZE_TOO_LARGE_OR_TOO_SMALL ,"size too large or too small"},
|
||||||
|
{ENGINE_R_UNIT_FAILURE ,"unit failure"},
|
||||||
|
{0,NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void ERR_load_ENGINE_strings(void)
|
||||||
|
{
|
||||||
|
static int init=1;
|
||||||
|
|
||||||
|
if (init)
|
||||||
|
{
|
||||||
|
init=0;
|
||||||
|
#ifndef NO_ERR
|
||||||
|
ERR_load_strings(ERR_LIB_ENGINE,ENGINE_str_functs);
|
||||||
|
ERR_load_strings(ERR_LIB_ENGINE,ENGINE_str_reasons);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
160
crypto/engine/engine_int.h
Normal file
160
crypto/engine/engine_int.h
Normal file
@@ -0,0 +1,160 @@
|
|||||||
|
/* crypto/engine/engine_int.h */
|
||||||
|
/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
|
||||||
|
* project 2000.
|
||||||
|
*/
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. All advertising materials mentioning features or use of this
|
||||||
|
* software must display the following acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||||
|
* endorse or promote products derived from this software without
|
||||||
|
* prior written permission. For written permission, please contact
|
||||||
|
* licensing@OpenSSL.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "OpenSSL"
|
||||||
|
* nor may "OpenSSL" appear in their names without prior written
|
||||||
|
* permission of the OpenSSL Project.
|
||||||
|
*
|
||||||
|
* 6. Redistributions of any form whatsoever must retain the following
|
||||||
|
* acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||||
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This product includes cryptographic software written by Eric Young
|
||||||
|
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||||
|
* Hudson (tjh@cryptsoft.com).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef HEADER_ENGINE_INT_H
|
||||||
|
#define HEADER_ENGINE_INT_H
|
||||||
|
|
||||||
|
#include <openssl/rsa.h>
|
||||||
|
#include <openssl/dsa.h>
|
||||||
|
#include <openssl/dh.h>
|
||||||
|
#include <openssl/rand.h>
|
||||||
|
#include <openssl/bn.h>
|
||||||
|
#include <openssl/evp.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Bitwise OR-able values for the "flags" variable in ENGINE. */
|
||||||
|
#define ENGINE_FLAGS_MALLOCED 0x0001
|
||||||
|
|
||||||
|
#ifndef HEADER_ENGINE_H
|
||||||
|
/* Regrettably, we need to reproduce the "BN" function types here
|
||||||
|
* because there is no such "BIGNUM_METHOD" as there is with RSA,
|
||||||
|
* DSA, etc. We do this so that we don't have a case where engine.h
|
||||||
|
* and engine_int.h conflict with each other. */
|
||||||
|
typedef int (*BN_MOD_EXP)(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *m, BN_CTX *ctx);
|
||||||
|
|
||||||
|
/* private key operation for RSA, provided seperately in case other
|
||||||
|
* RSA implementations wish to use it. */
|
||||||
|
typedef int (*BN_MOD_EXP_CRT)(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *q, const BIGNUM *dmp1, const BIGNUM *dmq1,
|
||||||
|
const BIGNUM *iqmp, BN_CTX *ctx);
|
||||||
|
|
||||||
|
/* Generic function pointer */
|
||||||
|
typedef int (*ENGINE_GEN_FUNC_PTR)();
|
||||||
|
/* Generic function pointer taking no arguments */
|
||||||
|
typedef int (*ENGINE_GEN_INT_FUNC_PTR)(void);
|
||||||
|
/* Specific control function pointer */
|
||||||
|
typedef int (*ENGINE_CTRL_FUNC_PTR)(int cmd, long i, void *p, void (*f)());
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This is a structure for storing implementations of various crypto
|
||||||
|
* algorithms and functions. */
|
||||||
|
typedef struct engine_st
|
||||||
|
{
|
||||||
|
const char *id;
|
||||||
|
const char *name;
|
||||||
|
RSA_METHOD *rsa_meth;
|
||||||
|
DSA_METHOD *dsa_meth;
|
||||||
|
DH_METHOD *dh_meth;
|
||||||
|
RAND_METHOD *rand_meth;
|
||||||
|
BN_MOD_EXP bn_mod_exp;
|
||||||
|
BN_MOD_EXP_CRT bn_mod_exp_crt;
|
||||||
|
int (*init)(void);
|
||||||
|
int (*finish)(void);
|
||||||
|
int (*ctrl)(int cmd, long i, void *p, void (*f)());
|
||||||
|
EVP_PKEY *(*load_privkey)(const char *key_id, const char *passphrase);
|
||||||
|
EVP_PKEY *(*load_pubkey)(const char *key_id, const char *passphrase);
|
||||||
|
int flags;
|
||||||
|
/* reference count on the structure itself */
|
||||||
|
int struct_ref;
|
||||||
|
/* reference count on usability of the engine type. NB: This
|
||||||
|
* controls the loading and initialisation of any functionlity
|
||||||
|
* required by this engine, whereas the previous count is
|
||||||
|
* simply to cope with (de)allocation of this structure. Hence,
|
||||||
|
* running_ref <= struct_ref at all times. */
|
||||||
|
int funct_ref;
|
||||||
|
/* Used to maintain the linked-list of engines. */
|
||||||
|
struct engine_st *prev;
|
||||||
|
struct engine_st *next;
|
||||||
|
} ENGINE;
|
||||||
|
|
||||||
|
/* BUILT-IN ENGINES. (these functions are only ever called once and
|
||||||
|
* do not return references - they are purely for bootstrapping). */
|
||||||
|
|
||||||
|
/* Returns a structure of software only methods (the default). */
|
||||||
|
ENGINE *ENGINE_openssl();
|
||||||
|
|
||||||
|
#ifndef NO_HW
|
||||||
|
|
||||||
|
#ifndef NO_HW_CSWIFT
|
||||||
|
/* Returns a structure of cswift methods ... NB: This can exist and be
|
||||||
|
* "used" even on non-cswift systems because the "init" will fail if the
|
||||||
|
* card/library are not found. */
|
||||||
|
ENGINE *ENGINE_cswift();
|
||||||
|
#endif /* !NO_HW_CSWIFT */
|
||||||
|
|
||||||
|
#ifndef NO_HW_NCIPHER
|
||||||
|
ENGINE *ENGINE_ncipher();
|
||||||
|
#endif /* !NO_HW_NCIPHER */
|
||||||
|
|
||||||
|
#ifndef NO_HW_ATALLA
|
||||||
|
/* Returns a structure of atalla methods. */
|
||||||
|
ENGINE *ENGINE_atalla();
|
||||||
|
#endif /* !NO_HW_ATALLA */
|
||||||
|
|
||||||
|
#endif /* !NO_HW */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* HEADER_ENGINE_INT_H */
|
||||||
488
crypto/engine/engine_lib.c
Normal file
488
crypto/engine/engine_lib.c
Normal file
@@ -0,0 +1,488 @@
|
|||||||
|
/* crypto/engine/engine_lib.c */
|
||||||
|
/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
|
||||||
|
* project 2000.
|
||||||
|
*/
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. All advertising materials mentioning features or use of this
|
||||||
|
* software must display the following acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||||
|
* endorse or promote products derived from this software without
|
||||||
|
* prior written permission. For written permission, please contact
|
||||||
|
* licensing@OpenSSL.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "OpenSSL"
|
||||||
|
* nor may "OpenSSL" appear in their names without prior written
|
||||||
|
* permission of the OpenSSL Project.
|
||||||
|
*
|
||||||
|
* 6. Redistributions of any form whatsoever must retain the following
|
||||||
|
* acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||||
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This product includes cryptographic software written by Eric Young
|
||||||
|
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||||
|
* Hudson (tjh@cryptsoft.com).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <openssl/crypto.h>
|
||||||
|
#include "cryptlib.h"
|
||||||
|
#include "engine_int.h"
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
|
/* These pointers each have their own "functional reference" when they
|
||||||
|
* are non-NULL. Similarly, when they are retrieved by a call to
|
||||||
|
* ENGINE_get_default_[RSA|DSA|...] the returned pointer is also a
|
||||||
|
* reference and the caller is responsible for freeing that when they
|
||||||
|
* are finished with it (with a call to ENGINE_finish() *NOT* just
|
||||||
|
* ENGINE_free()!!!!!!). */
|
||||||
|
static ENGINE *engine_def_rsa = NULL;
|
||||||
|
static ENGINE *engine_def_dsa = NULL;
|
||||||
|
static ENGINE *engine_def_dh = NULL;
|
||||||
|
static ENGINE *engine_def_rand = NULL;
|
||||||
|
static ENGINE *engine_def_bn_mod_exp = NULL;
|
||||||
|
static ENGINE *engine_def_bn_mod_exp_crt = NULL;
|
||||||
|
/* A static "once-only" flag used to control if/when the above were
|
||||||
|
* initialised to suitable start-up defaults. */
|
||||||
|
static int engine_def_flag = 0;
|
||||||
|
|
||||||
|
/* This is used in certain static utility functions to save code
|
||||||
|
* repetition for per-algorithm functions. */
|
||||||
|
typedef enum {
|
||||||
|
ENGINE_TYPE_RSA,
|
||||||
|
ENGINE_TYPE_DSA,
|
||||||
|
ENGINE_TYPE_DH,
|
||||||
|
ENGINE_TYPE_RAND,
|
||||||
|
ENGINE_TYPE_BN_MOD_EXP,
|
||||||
|
ENGINE_TYPE_BN_MOD_EXP_CRT
|
||||||
|
} ENGINE_TYPE;
|
||||||
|
|
||||||
|
static void engine_def_check_util(ENGINE **def, ENGINE *val)
|
||||||
|
{
|
||||||
|
*def = val;
|
||||||
|
val->struct_ref++;
|
||||||
|
val->funct_ref++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* In a slight break with convention - this static function must be
|
||||||
|
* called *outside* any locking of CRYPTO_LOCK_ENGINE. */
|
||||||
|
static void engine_def_check(void)
|
||||||
|
{
|
||||||
|
ENGINE *e;
|
||||||
|
if(engine_def_flag)
|
||||||
|
return;
|
||||||
|
e = ENGINE_get_first();
|
||||||
|
if(e == NULL)
|
||||||
|
/* The list is empty ... not much we can do! */
|
||||||
|
return;
|
||||||
|
/* We have a structural reference, see if getting a functional
|
||||||
|
* reference is possible. This is done to cope with init errors
|
||||||
|
* in the engine - the following locked code does a bunch of
|
||||||
|
* manual "ENGINE_init"s which do *not* allow such an init
|
||||||
|
* error so this is worth doing. */
|
||||||
|
if(ENGINE_init(e))
|
||||||
|
{
|
||||||
|
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
||||||
|
/* Doing another check here prevents an obvious race
|
||||||
|
* condition because the whole function itself cannot
|
||||||
|
* be locked. */
|
||||||
|
if(engine_def_flag)
|
||||||
|
goto skip_set_defaults;
|
||||||
|
/* OK, we got a functional reference, so we get one each
|
||||||
|
* for the defaults too. */
|
||||||
|
engine_def_check_util(&engine_def_rsa, e);
|
||||||
|
engine_def_check_util(&engine_def_dsa, e);
|
||||||
|
engine_def_check_util(&engine_def_dh, e);
|
||||||
|
engine_def_check_util(&engine_def_rand, e);
|
||||||
|
engine_def_check_util(&engine_def_bn_mod_exp, e);
|
||||||
|
engine_def_check_util(&engine_def_bn_mod_exp_crt, e);
|
||||||
|
engine_def_flag = 1;
|
||||||
|
skip_set_defaults:
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
/* The "if" needs to be balanced out. */
|
||||||
|
ENGINE_finish(e);
|
||||||
|
}
|
||||||
|
/* We need to balance out the fact we obtained a structural
|
||||||
|
* reference to begin with from ENGINE_get_first(). */
|
||||||
|
ENGINE_free(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initialise a engine type for use (or up its functional reference count
|
||||||
|
* if it's already in use). */
|
||||||
|
int ENGINE_init(ENGINE *e)
|
||||||
|
{
|
||||||
|
int to_return = 1;
|
||||||
|
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_INIT,ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
||||||
|
if((e->funct_ref == 0) && e->init)
|
||||||
|
/* This is the first functional reference and the engine
|
||||||
|
* requires initialisation so we do it now. */
|
||||||
|
to_return = e->init();
|
||||||
|
if(to_return)
|
||||||
|
{
|
||||||
|
/* OK, we return a functional reference which is also a
|
||||||
|
* structural reference. */
|
||||||
|
e->struct_ref++;
|
||||||
|
e->funct_ref++;
|
||||||
|
}
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
return to_return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Free a functional reference to a engine type */
|
||||||
|
int ENGINE_finish(ENGINE *e)
|
||||||
|
{
|
||||||
|
int to_return = 1;
|
||||||
|
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_FINISH,ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
||||||
|
if((e->funct_ref == 1) && e->finish)
|
||||||
|
#if 0
|
||||||
|
/* This is the last functional reference and the engine
|
||||||
|
* requires cleanup so we do it now. */
|
||||||
|
to_return = e->finish();
|
||||||
|
if(to_return)
|
||||||
|
{
|
||||||
|
/* Cleanup the functional reference which is also a
|
||||||
|
* structural reference. */
|
||||||
|
e->struct_ref--;
|
||||||
|
e->funct_ref--;
|
||||||
|
}
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
#else
|
||||||
|
/* I'm going to deliberately do a convoluted version of this
|
||||||
|
* piece of code because we don't want "finish" functions
|
||||||
|
* being called inside a locked block of code, if at all
|
||||||
|
* possible. I'd rather have this call take an extra couple
|
||||||
|
* of ticks than have throughput serialised on a externally-
|
||||||
|
* provided callback function that may conceivably never come
|
||||||
|
* back. :-( */
|
||||||
|
{
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
/* CODE ALERT: This *IS* supposed to be "=" and NOT "==" :-) */
|
||||||
|
if((to_return = e->finish()))
|
||||||
|
{
|
||||||
|
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
||||||
|
/* Cleanup the functional reference which is also a
|
||||||
|
* structural reference. */
|
||||||
|
e->struct_ref--;
|
||||||
|
e->funct_ref--;
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
#endif
|
||||||
|
return to_return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id,
|
||||||
|
const char *passphrase)
|
||||||
|
{
|
||||||
|
EVP_PKEY *pkey;
|
||||||
|
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
||||||
|
if(e->funct_ref == 0)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY,
|
||||||
|
ENGINE_R_NOT_INITIALISED);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (!e->load_privkey)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY,
|
||||||
|
ENGINE_R_NO_LOAD_FUNCTION);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
pkey = e->load_privkey(key_id, passphrase);
|
||||||
|
if (!pkey)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY,
|
||||||
|
ENGINE_R_FAILED_LOADING_PRIVATE_KEY);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return pkey;
|
||||||
|
}
|
||||||
|
|
||||||
|
EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id,
|
||||||
|
const char *passphrase)
|
||||||
|
{
|
||||||
|
EVP_PKEY *pkey;
|
||||||
|
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
||||||
|
if(e->funct_ref == 0)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY,
|
||||||
|
ENGINE_R_NOT_INITIALISED);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (!e->load_pubkey)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY,
|
||||||
|
ENGINE_R_NO_LOAD_FUNCTION);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
pkey = e->load_pubkey(key_id, passphrase);
|
||||||
|
if (!pkey)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY,
|
||||||
|
ENGINE_R_FAILED_LOADING_PUBLIC_KEY);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return pkey;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initialise a engine type for use (or up its functional reference count
|
||||||
|
* if it's already in use). */
|
||||||
|
int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)())
|
||||||
|
{
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_CTRL,ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
||||||
|
if(e->struct_ref == 0)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_CTRL,ENGINE_R_NO_REFERENCE);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (!e->ctrl)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_CTRL,ENGINE_R_NO_CONTROL_FUNCTION);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
return e->ctrl(cmd, i, p, f);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ENGINE *engine_get_default_type(ENGINE_TYPE t)
|
||||||
|
{
|
||||||
|
ENGINE *ret = NULL;
|
||||||
|
|
||||||
|
/* engine_def_check is lean and mean and won't replace any
|
||||||
|
* prior default engines ... so we must ensure that it is always
|
||||||
|
* the first function to get to touch the default values. */
|
||||||
|
engine_def_check();
|
||||||
|
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
||||||
|
switch(t)
|
||||||
|
{
|
||||||
|
case ENGINE_TYPE_RSA:
|
||||||
|
ret = engine_def_rsa; break;
|
||||||
|
case ENGINE_TYPE_DSA:
|
||||||
|
ret = engine_def_dsa; break;
|
||||||
|
case ENGINE_TYPE_DH:
|
||||||
|
ret = engine_def_dh; break;
|
||||||
|
case ENGINE_TYPE_RAND:
|
||||||
|
ret = engine_def_rand; break;
|
||||||
|
case ENGINE_TYPE_BN_MOD_EXP:
|
||||||
|
ret = engine_def_bn_mod_exp; break;
|
||||||
|
case ENGINE_TYPE_BN_MOD_EXP_CRT:
|
||||||
|
ret = engine_def_bn_mod_exp_crt; break;
|
||||||
|
}
|
||||||
|
/* Unforunately we can't do this work outside the lock with a
|
||||||
|
* call to ENGINE_init() because that would leave a race
|
||||||
|
* condition open. */
|
||||||
|
if(ret)
|
||||||
|
{
|
||||||
|
ret->struct_ref++;
|
||||||
|
ret->funct_ref++;
|
||||||
|
}
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ENGINE *ENGINE_get_default_RSA(void)
|
||||||
|
{
|
||||||
|
return engine_get_default_type(ENGINE_TYPE_RSA);
|
||||||
|
}
|
||||||
|
|
||||||
|
ENGINE *ENGINE_get_default_DSA(void)
|
||||||
|
{
|
||||||
|
return engine_get_default_type(ENGINE_TYPE_DSA);
|
||||||
|
}
|
||||||
|
|
||||||
|
ENGINE *ENGINE_get_default_DH(void)
|
||||||
|
{
|
||||||
|
return engine_get_default_type(ENGINE_TYPE_DH);
|
||||||
|
}
|
||||||
|
|
||||||
|
ENGINE *ENGINE_get_default_RAND(void)
|
||||||
|
{
|
||||||
|
return engine_get_default_type(ENGINE_TYPE_RAND);
|
||||||
|
}
|
||||||
|
|
||||||
|
ENGINE *ENGINE_get_default_BN_mod_exp(void)
|
||||||
|
{
|
||||||
|
return engine_get_default_type(ENGINE_TYPE_BN_MOD_EXP);
|
||||||
|
}
|
||||||
|
|
||||||
|
ENGINE *ENGINE_get_default_BN_mod_exp_crt(void)
|
||||||
|
{
|
||||||
|
return engine_get_default_type(ENGINE_TYPE_BN_MOD_EXP_CRT);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int engine_set_default_type(ENGINE_TYPE t, ENGINE *e)
|
||||||
|
{
|
||||||
|
ENGINE *old = NULL;
|
||||||
|
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_SET_DEFAULT_TYPE,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/* engine_def_check is lean and mean and won't replace any
|
||||||
|
* prior default engines ... so we must ensure that it is always
|
||||||
|
* the first function to get to touch the default values. */
|
||||||
|
engine_def_check();
|
||||||
|
/* Attempt to get a functional reference (we need one anyway, but
|
||||||
|
* also, 'e' may be just a structural reference being passed in so
|
||||||
|
* this call may actually be the first). */
|
||||||
|
if(!ENGINE_init(e))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_SET_DEFAULT_TYPE,
|
||||||
|
ENGINE_R_INIT_FAILED);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
||||||
|
switch(t)
|
||||||
|
{
|
||||||
|
case ENGINE_TYPE_RSA:
|
||||||
|
old = engine_def_rsa;
|
||||||
|
engine_def_rsa = e; break;
|
||||||
|
case ENGINE_TYPE_DSA:
|
||||||
|
old = engine_def_dsa;
|
||||||
|
engine_def_dsa = e; break;
|
||||||
|
case ENGINE_TYPE_DH:
|
||||||
|
old = engine_def_dh;
|
||||||
|
engine_def_dh = e; break;
|
||||||
|
case ENGINE_TYPE_RAND:
|
||||||
|
old = engine_def_rand;
|
||||||
|
engine_def_rand = e; break;
|
||||||
|
case ENGINE_TYPE_BN_MOD_EXP:
|
||||||
|
old = engine_def_bn_mod_exp;
|
||||||
|
engine_def_bn_mod_exp = e; break;
|
||||||
|
case ENGINE_TYPE_BN_MOD_EXP_CRT:
|
||||||
|
old = engine_def_bn_mod_exp_crt;
|
||||||
|
engine_def_bn_mod_exp_crt = e; break;
|
||||||
|
}
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
/* If we've replaced a previous value, then we need to remove the
|
||||||
|
* functional reference we had. */
|
||||||
|
if(old && !ENGINE_finish(old))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_SET_DEFAULT_TYPE,
|
||||||
|
ENGINE_R_FINISH_FAILED);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_default_RSA(ENGINE *e)
|
||||||
|
{
|
||||||
|
return engine_set_default_type(ENGINE_TYPE_RSA, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_default_DSA(ENGINE *e)
|
||||||
|
{
|
||||||
|
return engine_set_default_type(ENGINE_TYPE_DSA, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_default_DH(ENGINE *e)
|
||||||
|
{
|
||||||
|
return engine_set_default_type(ENGINE_TYPE_DH, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_default_RAND(ENGINE *e)
|
||||||
|
{
|
||||||
|
return engine_set_default_type(ENGINE_TYPE_RAND, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_default_BN_mod_exp(ENGINE *e)
|
||||||
|
{
|
||||||
|
return engine_set_default_type(ENGINE_TYPE_BN_MOD_EXP, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_default_BN_mod_exp_crt(ENGINE *e)
|
||||||
|
{
|
||||||
|
return engine_set_default_type(ENGINE_TYPE_BN_MOD_EXP_CRT, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_default(ENGINE *e, unsigned int flags)
|
||||||
|
{
|
||||||
|
if((flags & ENGINE_METHOD_RSA) && e->rsa_meth &&
|
||||||
|
!ENGINE_set_default_RSA(e))
|
||||||
|
return 0;
|
||||||
|
if((flags & ENGINE_METHOD_DSA) && e->dsa_meth &&
|
||||||
|
!ENGINE_set_default_DSA(e))
|
||||||
|
return 0;
|
||||||
|
if((flags & ENGINE_METHOD_DH) && e->dh_meth &&
|
||||||
|
!ENGINE_set_default_DH(e))
|
||||||
|
return 0;
|
||||||
|
if((flags & ENGINE_METHOD_RAND) && e->rand_meth &&
|
||||||
|
!ENGINE_set_default_RAND(e))
|
||||||
|
return 0;
|
||||||
|
if((flags & ENGINE_METHOD_BN_MOD_EXP) && e->bn_mod_exp &&
|
||||||
|
!ENGINE_set_default_BN_mod_exp(e))
|
||||||
|
return 0;
|
||||||
|
if((flags & ENGINE_METHOD_BN_MOD_EXP_CRT) && e->bn_mod_exp_crt &&
|
||||||
|
!ENGINE_set_default_BN_mod_exp_crt(e))
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
675
crypto/engine/engine_list.c
Normal file
675
crypto/engine/engine_list.c
Normal file
@@ -0,0 +1,675 @@
|
|||||||
|
/* crypto/engine/engine_list.c */
|
||||||
|
/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
|
||||||
|
* project 2000.
|
||||||
|
*/
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. All advertising materials mentioning features or use of this
|
||||||
|
* software must display the following acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||||
|
* endorse or promote products derived from this software without
|
||||||
|
* prior written permission. For written permission, please contact
|
||||||
|
* licensing@OpenSSL.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "OpenSSL"
|
||||||
|
* nor may "OpenSSL" appear in their names without prior written
|
||||||
|
* permission of the OpenSSL Project.
|
||||||
|
*
|
||||||
|
* 6. Redistributions of any form whatsoever must retain the following
|
||||||
|
* acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||||
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This product includes cryptographic software written by Eric Young
|
||||||
|
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||||
|
* Hudson (tjh@cryptsoft.com).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <openssl/crypto.h>
|
||||||
|
#include "cryptlib.h"
|
||||||
|
#include "engine_int.h"
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
|
/* The linked-list of pointers to engine types. engine_list_head
|
||||||
|
* incorporates an implicit structural reference but engine_list_tail
|
||||||
|
* does not - the latter is a computational niceity and only points
|
||||||
|
* to something that is already pointed to by its predecessor in the
|
||||||
|
* list (or engine_list_head itself). In the same way, the use of the
|
||||||
|
* "prev" pointer in each ENGINE is to save excessive list iteration,
|
||||||
|
* it doesn't correspond to an extra structural reference. Hence,
|
||||||
|
* engine_list_head, and each non-null "next" pointer account for
|
||||||
|
* the list itself assuming exactly 1 structural reference on each
|
||||||
|
* list member. */
|
||||||
|
static ENGINE *engine_list_head = NULL;
|
||||||
|
static ENGINE *engine_list_tail = NULL;
|
||||||
|
/* A boolean switch, used to ensure we only initialise once. This
|
||||||
|
* is needed because the engine list may genuinely become empty during
|
||||||
|
* use (so we can't use engine_list_head as an indicator for example. */
|
||||||
|
static int engine_list_flag = 0;
|
||||||
|
|
||||||
|
/* These static functions starting with a lower case "engine_" always
|
||||||
|
* take place when CRYPTO_LOCK_ENGINE has been locked up. */
|
||||||
|
static int engine_list_add(ENGINE *e)
|
||||||
|
{
|
||||||
|
int conflict = 0;
|
||||||
|
ENGINE *iterator = NULL;
|
||||||
|
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_LIST_ADD,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
iterator = engine_list_head;
|
||||||
|
while(iterator && !conflict)
|
||||||
|
{
|
||||||
|
conflict = (strcmp(iterator->id, e->id) == 0);
|
||||||
|
iterator = iterator->next;
|
||||||
|
}
|
||||||
|
if(conflict)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_LIST_ADD,
|
||||||
|
ENGINE_R_CONFLICTING_ENGINE_ID);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(engine_list_head == NULL)
|
||||||
|
{
|
||||||
|
/* We are adding to an empty list. */
|
||||||
|
if(engine_list_tail)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_LIST_ADD,
|
||||||
|
ENGINE_R_INTERNAL_LIST_ERROR);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
engine_list_head = e;
|
||||||
|
e->prev = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* We are adding to the tail of an existing list. */
|
||||||
|
if((engine_list_tail == NULL) ||
|
||||||
|
(engine_list_tail->next != NULL))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_LIST_ADD,
|
||||||
|
ENGINE_R_INTERNAL_LIST_ERROR);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
engine_list_tail->next = e;
|
||||||
|
e->prev = engine_list_tail;
|
||||||
|
}
|
||||||
|
/* Having the engine in the list assumes a structural
|
||||||
|
* reference. */
|
||||||
|
e->struct_ref++;
|
||||||
|
/* However it came to be, e is the last item in the list. */
|
||||||
|
engine_list_tail = e;
|
||||||
|
e->next = NULL;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int engine_list_remove(ENGINE *e)
|
||||||
|
{
|
||||||
|
ENGINE *iterator;
|
||||||
|
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_LIST_REMOVE,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/* We need to check that e is in our linked list! */
|
||||||
|
iterator = engine_list_head;
|
||||||
|
while(iterator && (iterator != e))
|
||||||
|
iterator = iterator->next;
|
||||||
|
if(iterator == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_LIST_REMOVE,
|
||||||
|
ENGINE_R_ENGINE_IS_NOT_IN_LIST);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/* un-link e from the chain. */
|
||||||
|
if(e->next)
|
||||||
|
e->next->prev = e->prev;
|
||||||
|
if(e->prev)
|
||||||
|
e->prev->next = e->next;
|
||||||
|
/* Correct our head/tail if necessary. */
|
||||||
|
if(engine_list_head == e)
|
||||||
|
engine_list_head = e->next;
|
||||||
|
if(engine_list_tail == e)
|
||||||
|
engine_list_tail = e->prev;
|
||||||
|
/* remove our structural reference. */
|
||||||
|
e->struct_ref--;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This check always takes place with CRYPTO_LOCK_ENGINE locked up
|
||||||
|
* so we're synchronised, but we can't call anything that tries to
|
||||||
|
* lock it again! :-) NB: For convenience (and code-clarity) we
|
||||||
|
* don't output errors for failures of the engine_list_add function
|
||||||
|
* as it will generate errors itself. */
|
||||||
|
static int engine_internal_check(void)
|
||||||
|
{
|
||||||
|
if(engine_list_flag)
|
||||||
|
return 1;
|
||||||
|
/* This is our first time up, we need to populate the list
|
||||||
|
* with our statically compiled-in engines. */
|
||||||
|
if(!engine_list_add(ENGINE_openssl()))
|
||||||
|
return 0;
|
||||||
|
#ifndef NO_HW
|
||||||
|
#ifndef NO_HW_CSWIFT
|
||||||
|
if(!engine_list_add(ENGINE_cswift()))
|
||||||
|
return 0;
|
||||||
|
#endif /* !NO_HW_CSWIFT */
|
||||||
|
#ifndef NO_HW_NCIPHER
|
||||||
|
if(!engine_list_add(ENGINE_ncipher()))
|
||||||
|
return 0;
|
||||||
|
#endif /* !NO_HW_NCIPHER */
|
||||||
|
#ifndef NO_HW_ATALLA
|
||||||
|
if(!engine_list_add(ENGINE_atalla()))
|
||||||
|
return 0;
|
||||||
|
#endif /* !NO_HW_ATALLA */
|
||||||
|
#endif /* !NO_HW */
|
||||||
|
engine_list_flag = 1;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the first/last "ENGINE" type available. */
|
||||||
|
ENGINE *ENGINE_get_first(void)
|
||||||
|
{
|
||||||
|
ENGINE *ret = NULL;
|
||||||
|
|
||||||
|
CRYPTO_r_lock(CRYPTO_LOCK_ENGINE);
|
||||||
|
if(engine_internal_check())
|
||||||
|
{
|
||||||
|
ret = engine_list_head;
|
||||||
|
if(ret)
|
||||||
|
ret->struct_ref++;
|
||||||
|
}
|
||||||
|
CRYPTO_r_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
ENGINE *ENGINE_get_last(void)
|
||||||
|
{
|
||||||
|
ENGINE *ret = NULL;
|
||||||
|
|
||||||
|
CRYPTO_r_lock(CRYPTO_LOCK_ENGINE);
|
||||||
|
if(engine_internal_check())
|
||||||
|
{
|
||||||
|
ret = engine_list_tail;
|
||||||
|
if(ret)
|
||||||
|
ret->struct_ref++;
|
||||||
|
}
|
||||||
|
CRYPTO_r_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */
|
||||||
|
ENGINE *ENGINE_get_next(ENGINE *e)
|
||||||
|
{
|
||||||
|
ENGINE *ret = NULL;
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_GET_NEXT,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
CRYPTO_r_lock(CRYPTO_LOCK_ENGINE);
|
||||||
|
ret = e->next;
|
||||||
|
e->struct_ref--;
|
||||||
|
if(ret)
|
||||||
|
ret->struct_ref++;
|
||||||
|
CRYPTO_r_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
ENGINE *ENGINE_get_prev(ENGINE *e)
|
||||||
|
{
|
||||||
|
ENGINE *ret = NULL;
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_GET_PREV,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
CRYPTO_r_lock(CRYPTO_LOCK_ENGINE);
|
||||||
|
ret = e->prev;
|
||||||
|
e->struct_ref--;
|
||||||
|
if(ret)
|
||||||
|
ret->struct_ref++;
|
||||||
|
CRYPTO_r_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add another "ENGINE" type into the list. */
|
||||||
|
int ENGINE_add(ENGINE *e)
|
||||||
|
{
|
||||||
|
int to_return = 1;
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_ADD,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if((e->id == NULL) || (e->name == NULL))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_ADD,
|
||||||
|
ENGINE_R_ID_OR_NAME_MISSING);
|
||||||
|
}
|
||||||
|
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
||||||
|
if(!engine_internal_check() || !engine_list_add(e))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_ADD,
|
||||||
|
ENGINE_R_INTERNAL_LIST_ERROR);
|
||||||
|
to_return = 0;
|
||||||
|
}
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
return to_return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove an existing "ENGINE" type from the array. */
|
||||||
|
int ENGINE_remove(ENGINE *e)
|
||||||
|
{
|
||||||
|
int to_return = 1;
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_REMOVE,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
||||||
|
if(!engine_internal_check() || !engine_list_remove(e))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_REMOVE,
|
||||||
|
ENGINE_R_INTERNAL_LIST_ERROR);
|
||||||
|
to_return = 0;
|
||||||
|
}
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
return to_return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ENGINE *ENGINE_by_id(const char *id)
|
||||||
|
{
|
||||||
|
ENGINE *iterator = NULL;
|
||||||
|
if(id == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_BY_ID,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
CRYPTO_r_lock(CRYPTO_LOCK_ENGINE);
|
||||||
|
if(!engine_internal_check())
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_BY_ID,
|
||||||
|
ENGINE_R_INTERNAL_LIST_ERROR);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
iterator = engine_list_head;
|
||||||
|
while(iterator && (strcmp(id, iterator->id) != 0))
|
||||||
|
iterator = iterator->next;
|
||||||
|
if(iterator)
|
||||||
|
/* We need to return a structural reference */
|
||||||
|
iterator->struct_ref++;
|
||||||
|
}
|
||||||
|
CRYPTO_r_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
|
if(iterator == NULL)
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_BY_ID,
|
||||||
|
ENGINE_R_NO_SUCH_ENGINE);
|
||||||
|
return iterator;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* As per the comments in engine.h, it is generally better all round
|
||||||
|
* if the ENGINE structure is allocated within this framework. */
|
||||||
|
#if 0
|
||||||
|
int ENGINE_get_struct_size(void)
|
||||||
|
{
|
||||||
|
return sizeof(ENGINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
ENGINE *ENGINE_new(ENGINE *e)
|
||||||
|
{
|
||||||
|
ENGINE *ret;
|
||||||
|
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ret = (ENGINE *)(OPENSSL_malloc(sizeof(ENGINE));
|
||||||
|
if(ret == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_NEW,
|
||||||
|
ERR_R_MALLOC_FAILURE);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ret = e;
|
||||||
|
memset(ret, 0, sizeof(ENGINE));
|
||||||
|
if(e)
|
||||||
|
ret->flags = ENGINE_FLAGS_MALLOCED;
|
||||||
|
ret->struct_ref = 1;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
ENGINE *ENGINE_new(void)
|
||||||
|
{
|
||||||
|
ENGINE *ret;
|
||||||
|
|
||||||
|
ret = (ENGINE *)OPENSSL_malloc(sizeof(ENGINE));
|
||||||
|
if(ret == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_NEW, ERR_R_MALLOC_FAILURE);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
memset(ret, 0, sizeof(ENGINE));
|
||||||
|
ret->flags = ENGINE_FLAGS_MALLOCED;
|
||||||
|
ret->struct_ref = 1;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int ENGINE_free(ENGINE *e)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_FREE,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
i = CRYPTO_add(&e->struct_ref,-1,CRYPTO_LOCK_ENGINE);
|
||||||
|
#ifdef REF_PRINT
|
||||||
|
REF_PRINT("ENGINE",e);
|
||||||
|
#endif
|
||||||
|
if (i > 0) return 1;
|
||||||
|
#ifdef REF_CHECK
|
||||||
|
if (i < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr,"ENGINE_free, bad reference count\n");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if(e->flags & ENGINE_FLAGS_MALLOCED)
|
||||||
|
OPENSSL_free(e);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_id(ENGINE *e, const char *id)
|
||||||
|
{
|
||||||
|
if((e == NULL) || (id == NULL))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_SET_ID,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
e->id = id;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_name(ENGINE *e, const char *name)
|
||||||
|
{
|
||||||
|
if((e == NULL) || (name == NULL))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_SET_NAME,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
e->name = name;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_RSA(ENGINE *e, RSA_METHOD *rsa_meth)
|
||||||
|
{
|
||||||
|
if((e == NULL) || (rsa_meth == NULL))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_SET_RSA,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
e->rsa_meth = rsa_meth;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_DSA(ENGINE *e, DSA_METHOD *dsa_meth)
|
||||||
|
{
|
||||||
|
if((e == NULL) || (dsa_meth == NULL))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_SET_DSA,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
e->dsa_meth = dsa_meth;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_DH(ENGINE *e, DH_METHOD *dh_meth)
|
||||||
|
{
|
||||||
|
if((e == NULL) || (dh_meth == NULL))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_SET_DH,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
e->dh_meth = dh_meth;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_RAND(ENGINE *e, RAND_METHOD *rand_meth)
|
||||||
|
{
|
||||||
|
if((e == NULL) || (rand_meth == NULL))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_SET_RAND,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
e->rand_meth = rand_meth;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_BN_mod_exp(ENGINE *e, BN_MOD_EXP bn_mod_exp)
|
||||||
|
{
|
||||||
|
if((e == NULL) || (bn_mod_exp == NULL))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_SET_BN_MOD_EXP,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
e->bn_mod_exp = bn_mod_exp;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_BN_mod_exp_crt(ENGINE *e, BN_MOD_EXP_CRT bn_mod_exp_crt)
|
||||||
|
{
|
||||||
|
if((e == NULL) || (bn_mod_exp_crt == NULL))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_SET_BN_MOD_EXP_CRT,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
e->bn_mod_exp_crt = bn_mod_exp_crt;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f)
|
||||||
|
{
|
||||||
|
if((e == NULL) || (init_f == NULL))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_SET_INIT_FUNCTION,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
e->init = init_f;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f)
|
||||||
|
{
|
||||||
|
if((e == NULL) || (finish_f == NULL))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_SET_FINISH_FUNCTION,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
e->finish = finish_f;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f)
|
||||||
|
{
|
||||||
|
if((e == NULL) || (ctrl_f == NULL))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_SET_CTRL_FUNCTION,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
e->ctrl = ctrl_f;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *ENGINE_get_id(ENGINE *e)
|
||||||
|
{
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_GET_ID,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return e->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *ENGINE_get_name(ENGINE *e)
|
||||||
|
{
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_GET_NAME,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return e->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
RSA_METHOD *ENGINE_get_RSA(ENGINE *e)
|
||||||
|
{
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_GET_RSA,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return e->rsa_meth;
|
||||||
|
}
|
||||||
|
|
||||||
|
DSA_METHOD *ENGINE_get_DSA(ENGINE *e)
|
||||||
|
{
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_GET_DSA,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return e->dsa_meth;
|
||||||
|
}
|
||||||
|
|
||||||
|
DH_METHOD *ENGINE_get_DH(ENGINE *e)
|
||||||
|
{
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_GET_DH,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return e->dh_meth;
|
||||||
|
}
|
||||||
|
|
||||||
|
RAND_METHOD *ENGINE_get_RAND(ENGINE *e)
|
||||||
|
{
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_GET_RAND,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return e->rand_meth;
|
||||||
|
}
|
||||||
|
|
||||||
|
BN_MOD_EXP ENGINE_get_BN_mod_exp(ENGINE *e)
|
||||||
|
{
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_GET_BN_MOD_EXP,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return e->bn_mod_exp;
|
||||||
|
}
|
||||||
|
|
||||||
|
BN_MOD_EXP_CRT ENGINE_get_BN_mod_exp_crt(ENGINE *e)
|
||||||
|
{
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_GET_BN_MOD_EXP_CRT,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return e->bn_mod_exp_crt;
|
||||||
|
}
|
||||||
|
|
||||||
|
ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(ENGINE *e)
|
||||||
|
{
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_GET_INIT_FUNCTION,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return e->init;
|
||||||
|
}
|
||||||
|
|
||||||
|
ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(ENGINE *e)
|
||||||
|
{
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_GET_FINISH_FUNCTION,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return e->finish;
|
||||||
|
}
|
||||||
|
|
||||||
|
ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(ENGINE *e)
|
||||||
|
{
|
||||||
|
if(e == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ENGINE_GET_CTRL_FUNCTION,
|
||||||
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return e->ctrl;
|
||||||
|
}
|
||||||
|
|
||||||
174
crypto/engine/engine_openssl.c
Normal file
174
crypto/engine/engine_openssl.c
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
/* crypto/engine/engine_openssl.c */
|
||||||
|
/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
|
||||||
|
* project 2000.
|
||||||
|
*/
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. All advertising materials mentioning features or use of this
|
||||||
|
* software must display the following acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||||
|
* endorse or promote products derived from this software without
|
||||||
|
* prior written permission. For written permission, please contact
|
||||||
|
* licensing@OpenSSL.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "OpenSSL"
|
||||||
|
* nor may "OpenSSL" appear in their names without prior written
|
||||||
|
* permission of the OpenSSL Project.
|
||||||
|
*
|
||||||
|
* 6. Redistributions of any form whatsoever must retain the following
|
||||||
|
* acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||||
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This product includes cryptographic software written by Eric Young
|
||||||
|
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||||
|
* Hudson (tjh@cryptsoft.com).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <openssl/crypto.h>
|
||||||
|
#include "cryptlib.h"
|
||||||
|
#include "engine_int.h"
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
#include <openssl/dso.h>
|
||||||
|
#include <openssl/rsa.h>
|
||||||
|
#include <openssl/dsa.h>
|
||||||
|
#include <openssl/dh.h>
|
||||||
|
#include <openssl/rand.h>
|
||||||
|
#include <openssl/bn.h>
|
||||||
|
|
||||||
|
/* This is the only function we need to implement as OpenSSL
|
||||||
|
* doesn't have a native CRT mod_exp. Perhaps this should be
|
||||||
|
* BN_mod_exp_crt and moved into crypto/bn/ ?? ... dunno. */
|
||||||
|
static int openssl_mod_exp_crt(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *q, const BIGNUM *dmp1, const BIGNUM *dmq1,
|
||||||
|
const BIGNUM *iqmp, BN_CTX *ctx);
|
||||||
|
|
||||||
|
/* The ENGINE structure that can be pointed to. */
|
||||||
|
static ENGINE engine_openssl =
|
||||||
|
{
|
||||||
|
"openssl",
|
||||||
|
"Software default engine support",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL, /* these methods are "stolen" in ENGINE_openssl() */
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
openssl_mod_exp_crt,
|
||||||
|
NULL, /* no init() */
|
||||||
|
NULL, /* no finish() */
|
||||||
|
NULL, /* no ctrl() */
|
||||||
|
NULL, /* no load_privkey() */
|
||||||
|
NULL, /* no load_pubkey() */
|
||||||
|
0, /* no flags */
|
||||||
|
0, 0, /* no references. */
|
||||||
|
NULL, NULL /* unlinked */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* As this is only ever called once, there's no need for locking
|
||||||
|
* (indeed - the lock will already be held by our caller!!!) */
|
||||||
|
ENGINE *ENGINE_openssl()
|
||||||
|
{
|
||||||
|
/* We need to populate our structure with the software pointers
|
||||||
|
* that we want to steal. */
|
||||||
|
engine_openssl.rsa_meth = RSA_get_default_openssl_method();
|
||||||
|
engine_openssl.dsa_meth = DSA_get_default_openssl_method();
|
||||||
|
engine_openssl.dh_meth = DH_get_default_openssl_method();
|
||||||
|
engine_openssl.rand_meth = RAND_SSLeay();
|
||||||
|
engine_openssl.bn_mod_exp = BN_mod_exp;
|
||||||
|
return &engine_openssl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Chinese Remainder Theorem, taken and adapted from rsa_eay.c */
|
||||||
|
static int openssl_mod_exp_crt(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *q, const BIGNUM *dmp1,
|
||||||
|
const BIGNUM *dmq1, const BIGNUM *iqmp, BN_CTX *ctx)
|
||||||
|
{
|
||||||
|
BIGNUM r1,m1;
|
||||||
|
int ret=0;
|
||||||
|
BN_CTX *bn_ctx;
|
||||||
|
BIGNUM *temp_bn = NULL;
|
||||||
|
|
||||||
|
if (ctx)
|
||||||
|
bn_ctx = ctx;
|
||||||
|
else
|
||||||
|
if ((bn_ctx=BN_CTX_new()) == NULL) goto err;
|
||||||
|
BN_init(&m1);
|
||||||
|
BN_init(&r1);
|
||||||
|
/* BN_mul() cannot accept const BIGNUMs so I use the BN_CTX
|
||||||
|
* to duplicate what I need. <sigh> */
|
||||||
|
if ((temp_bn = BN_CTX_get(bn_ctx)) == NULL) goto err;
|
||||||
|
if (!BN_copy(temp_bn, iqmp)) goto err;
|
||||||
|
|
||||||
|
if (!BN_mod(&r1, a, q, bn_ctx)) goto err;
|
||||||
|
if (!engine_openssl.bn_mod_exp(&m1, &r1, dmq1, q, bn_ctx))
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
if (!BN_mod(&r1, a, p, bn_ctx)) goto err;
|
||||||
|
if (!engine_openssl.bn_mod_exp(r, &r1, dmp1, p, bn_ctx))
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
if (!BN_sub(r, r, &m1)) goto err;
|
||||||
|
/* This will help stop the size of r0 increasing, which does
|
||||||
|
* affect the multiply if it optimised for a power of 2 size */
|
||||||
|
if (r->neg)
|
||||||
|
if (!BN_add(r, r, p)) goto err;
|
||||||
|
|
||||||
|
if (!BN_mul(&r1, r, temp_bn, bn_ctx)) goto err;
|
||||||
|
if (!BN_mod(r, &r1, p, bn_ctx)) goto err;
|
||||||
|
/* If p < q it is occasionally possible for the correction of
|
||||||
|
* adding 'p' if r is negative above to leave the result still
|
||||||
|
* negative. This can break the private key operations: the following
|
||||||
|
* second correction should *always* correct this rare occurrence.
|
||||||
|
* This will *never* happen with OpenSSL generated keys because
|
||||||
|
* they ensure p > q [steve]
|
||||||
|
*/
|
||||||
|
if (r->neg)
|
||||||
|
if (!BN_add(r, r, p)) goto err;
|
||||||
|
/* Again, BN_mul() will need non-const values. */
|
||||||
|
if (!BN_copy(temp_bn, q)) goto err;
|
||||||
|
if (!BN_mul(&r1, r, temp_bn, bn_ctx)) goto err;
|
||||||
|
if (!BN_add(r, &r1, &m1)) goto err;
|
||||||
|
|
||||||
|
ret=1;
|
||||||
|
err:
|
||||||
|
BN_clear_free(&m1);
|
||||||
|
BN_clear_free(&r1);
|
||||||
|
if (temp_bn)
|
||||||
|
bn_ctx->tos--;
|
||||||
|
if (!ctx)
|
||||||
|
BN_CTX_free(bn_ctx);
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
251
crypto/engine/enginetest.c
Normal file
251
crypto/engine/enginetest.c
Normal file
@@ -0,0 +1,251 @@
|
|||||||
|
/* crypto/engine/enginetest.c */
|
||||||
|
/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
|
||||||
|
* project 2000.
|
||||||
|
*/
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. All advertising materials mentioning features or use of this
|
||||||
|
* software must display the following acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||||
|
* endorse or promote products derived from this software without
|
||||||
|
* prior written permission. For written permission, please contact
|
||||||
|
* licensing@OpenSSL.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "OpenSSL"
|
||||||
|
* nor may "OpenSSL" appear in their names without prior written
|
||||||
|
* permission of the OpenSSL Project.
|
||||||
|
*
|
||||||
|
* 6. Redistributions of any form whatsoever must retain the following
|
||||||
|
* acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||||
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This product includes cryptographic software written by Eric Young
|
||||||
|
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||||
|
* Hudson (tjh@cryptsoft.com).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
#include <openssl/err.h>
|
||||||
|
|
||||||
|
static void display_engine_list()
|
||||||
|
{
|
||||||
|
ENGINE *h;
|
||||||
|
int loop;
|
||||||
|
|
||||||
|
h = ENGINE_get_first();
|
||||||
|
loop = 0;
|
||||||
|
printf("listing available engine types\n");
|
||||||
|
while(h)
|
||||||
|
{
|
||||||
|
printf("engine %i, id = \"%s\", name = \"%s\"\n",
|
||||||
|
loop++, ENGINE_get_id(h), ENGINE_get_name(h));
|
||||||
|
h = ENGINE_get_next(h);
|
||||||
|
}
|
||||||
|
printf("end of list\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
ENGINE *block[512];
|
||||||
|
char buf[256];
|
||||||
|
const char *id, *name;
|
||||||
|
ENGINE *ptr;
|
||||||
|
int loop;
|
||||||
|
int to_return = 1;
|
||||||
|
ENGINE *new_h1 = NULL;
|
||||||
|
ENGINE *new_h2 = NULL;
|
||||||
|
ENGINE *new_h3 = NULL;
|
||||||
|
ENGINE *new_h4 = NULL;
|
||||||
|
|
||||||
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
|
memset(block, 0, 512 * sizeof(ENGINE *));
|
||||||
|
if(((new_h1 = ENGINE_new()) == NULL) ||
|
||||||
|
!ENGINE_set_id(new_h1, "test_id0") ||
|
||||||
|
!ENGINE_set_name(new_h1, "First test item") ||
|
||||||
|
((new_h2 = ENGINE_new()) == NULL) ||
|
||||||
|
!ENGINE_set_id(new_h2, "test_id1") ||
|
||||||
|
!ENGINE_set_name(new_h2, "Second test item") ||
|
||||||
|
((new_h3 = ENGINE_new()) == NULL) ||
|
||||||
|
!ENGINE_set_id(new_h3, "test_id2") ||
|
||||||
|
!ENGINE_set_name(new_h3, "Third test item") ||
|
||||||
|
((new_h4 = ENGINE_new()) == NULL) ||
|
||||||
|
!ENGINE_set_id(new_h4, "test_id3") ||
|
||||||
|
!ENGINE_set_name(new_h4, "Fourth test item"))
|
||||||
|
{
|
||||||
|
printf("Couldn't set up test ENGINE structures\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
printf("\nenginetest beginning\n\n");
|
||||||
|
display_engine_list();
|
||||||
|
if(!ENGINE_add(new_h1))
|
||||||
|
{
|
||||||
|
printf("Add failed!\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
display_engine_list();
|
||||||
|
ptr = ENGINE_get_first();
|
||||||
|
if(!ENGINE_remove(ptr))
|
||||||
|
{
|
||||||
|
printf("Remove failed!\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
display_engine_list();
|
||||||
|
if(!ENGINE_add(new_h3) || !ENGINE_add(new_h2))
|
||||||
|
{
|
||||||
|
printf("Add failed!\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
display_engine_list();
|
||||||
|
if(!ENGINE_remove(new_h2))
|
||||||
|
{
|
||||||
|
printf("Remove failed!\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
display_engine_list();
|
||||||
|
if(!ENGINE_add(new_h4))
|
||||||
|
{
|
||||||
|
printf("Add failed!\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
display_engine_list();
|
||||||
|
if(ENGINE_add(new_h3))
|
||||||
|
{
|
||||||
|
printf("Add *should* have failed but didn't!\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("Add that should fail did.\n");
|
||||||
|
ERR_clear_error();
|
||||||
|
if(ENGINE_remove(new_h2))
|
||||||
|
{
|
||||||
|
printf("Remove *should* have failed but didn't!\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("Remove that should fail did.\n");
|
||||||
|
if(!ENGINE_remove(new_h1))
|
||||||
|
{
|
||||||
|
printf("Remove failed!\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
display_engine_list();
|
||||||
|
if(!ENGINE_remove(new_h3))
|
||||||
|
{
|
||||||
|
printf("Remove failed!\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
display_engine_list();
|
||||||
|
if(!ENGINE_remove(new_h4))
|
||||||
|
{
|
||||||
|
printf("Remove failed!\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
display_engine_list();
|
||||||
|
/* Depending on whether there's any hardware support compiled
|
||||||
|
* in, this remove may be destined to fail. */
|
||||||
|
ptr = ENGINE_get_first();
|
||||||
|
if(ptr)
|
||||||
|
if(!ENGINE_remove(ptr))
|
||||||
|
printf("Remove failed!i - probably no hardware "
|
||||||
|
"support present.\n");
|
||||||
|
display_engine_list();
|
||||||
|
if(!ENGINE_add(new_h1) || !ENGINE_remove(new_h1))
|
||||||
|
{
|
||||||
|
printf("Couldn't add and remove to an empty list!\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("Successfully added and removed to an empty list!\n");
|
||||||
|
printf("About to beef up the engine-type list\n");
|
||||||
|
for(loop = 0; loop < 512; loop++)
|
||||||
|
{
|
||||||
|
sprintf(buf, "id%i", loop);
|
||||||
|
id = strdup(buf);
|
||||||
|
sprintf(buf, "Fake engine type %i", loop);
|
||||||
|
name = strdup(buf);
|
||||||
|
if(((block[loop] = ENGINE_new()) == NULL) ||
|
||||||
|
!ENGINE_set_id(block[loop], id) ||
|
||||||
|
!ENGINE_set_name(block[loop], name))
|
||||||
|
{
|
||||||
|
printf("Couldn't create block of ENGINE structures.\n"
|
||||||
|
"I'll probably also core-dump now, damn.\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(loop = 0; loop < 512; loop++)
|
||||||
|
{
|
||||||
|
if(!ENGINE_add(block[loop]))
|
||||||
|
{
|
||||||
|
printf("\nAdding stopped at %i, (%s,%s)\n",
|
||||||
|
loop, ENGINE_get_id(block[loop]),
|
||||||
|
ENGINE_get_name(block[loop]));
|
||||||
|
goto cleanup_loop;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("."); fflush(stdout);
|
||||||
|
}
|
||||||
|
cleanup_loop:
|
||||||
|
printf("\nAbout to empty the engine-type list\n");
|
||||||
|
while((ptr = ENGINE_get_first()) != NULL)
|
||||||
|
{
|
||||||
|
if(!ENGINE_remove(ptr))
|
||||||
|
{
|
||||||
|
printf("\nRemove failed!\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
printf("."); fflush(stdout);
|
||||||
|
}
|
||||||
|
for(loop = 0; loop < 512; loop++)
|
||||||
|
{
|
||||||
|
free((char *)(ENGINE_get_id(block[loop])));
|
||||||
|
free((char *)(ENGINE_get_name(block[loop])));
|
||||||
|
}
|
||||||
|
printf("\nTests completed happily\n");
|
||||||
|
to_return = 0;
|
||||||
|
end:
|
||||||
|
if(to_return)
|
||||||
|
ERR_print_errors_fp(stderr);
|
||||||
|
if(new_h1) ENGINE_free(new_h1);
|
||||||
|
if(new_h2) ENGINE_free(new_h2);
|
||||||
|
if(new_h3) ENGINE_free(new_h3);
|
||||||
|
if(new_h4) ENGINE_free(new_h4);
|
||||||
|
for(loop = 0; loop < 512; loop++)
|
||||||
|
if(block[loop])
|
||||||
|
ENGINE_free(block[loop]);
|
||||||
|
return to_return;
|
||||||
|
}
|
||||||
444
crypto/engine/hw_atalla.c
Normal file
444
crypto/engine/hw_atalla.c
Normal file
@@ -0,0 +1,444 @@
|
|||||||
|
/* crypto/engine/hw_atalla.c */
|
||||||
|
/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
|
||||||
|
* project 2000.
|
||||||
|
*/
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. All advertising materials mentioning features or use of this
|
||||||
|
* software must display the following acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||||
|
* endorse or promote products derived from this software without
|
||||||
|
* prior written permission. For written permission, please contact
|
||||||
|
* licensing@OpenSSL.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "OpenSSL"
|
||||||
|
* nor may "OpenSSL" appear in their names without prior written
|
||||||
|
* permission of the OpenSSL Project.
|
||||||
|
*
|
||||||
|
* 6. Redistributions of any form whatsoever must retain the following
|
||||||
|
* acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||||
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This product includes cryptographic software written by Eric Young
|
||||||
|
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||||
|
* Hudson (tjh@cryptsoft.com).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <openssl/crypto.h>
|
||||||
|
#include "cryptlib.h"
|
||||||
|
#include <openssl/dso.h>
|
||||||
|
#include "engine_int.h"
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
|
#ifndef NO_HW
|
||||||
|
#ifndef NO_HW_ATALLA
|
||||||
|
|
||||||
|
#ifdef FLAT_INC
|
||||||
|
#include "atalla.h"
|
||||||
|
#else
|
||||||
|
#include "vendor_defns/atalla.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int atalla_init(void);
|
||||||
|
static int atalla_finish(void);
|
||||||
|
|
||||||
|
/* BIGNUM stuff */
|
||||||
|
static int atalla_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *m, BN_CTX *ctx);
|
||||||
|
|
||||||
|
/* RSA stuff */
|
||||||
|
static int atalla_rsa_mod_exp(BIGNUM *r0, BIGNUM *I, RSA *rsa);
|
||||||
|
/* This function is aliased to mod_exp (with the mont stuff dropped). */
|
||||||
|
static int atalla_mod_exp_mont(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
|
||||||
|
|
||||||
|
/* DSA stuff */
|
||||||
|
static int atalla_dsa_mod_exp(DSA *dsa, BIGNUM *rr, BIGNUM *a1,
|
||||||
|
BIGNUM *p1, BIGNUM *a2, BIGNUM *p2, BIGNUM *m,
|
||||||
|
BN_CTX *ctx, BN_MONT_CTX *in_mont);
|
||||||
|
static int atalla_mod_exp_dsa(DSA *dsa, BIGNUM *r, BIGNUM *a,
|
||||||
|
const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx,
|
||||||
|
BN_MONT_CTX *m_ctx);
|
||||||
|
|
||||||
|
/* DH stuff */
|
||||||
|
/* This function is alised to mod_exp (with the DH and mont dropped). */
|
||||||
|
static int atalla_mod_exp_dh(DH *dh, BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
|
||||||
|
|
||||||
|
|
||||||
|
/* Our internal RSA_METHOD that we provide pointers to */
|
||||||
|
static RSA_METHOD atalla_rsa =
|
||||||
|
{
|
||||||
|
"Atalla RSA method",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
atalla_rsa_mod_exp,
|
||||||
|
atalla_mod_exp_mont,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Our internal DSA_METHOD that we provide pointers to */
|
||||||
|
static DSA_METHOD atalla_dsa =
|
||||||
|
{
|
||||||
|
"Atalla DSA method",
|
||||||
|
NULL, /* dsa_do_sign */
|
||||||
|
NULL, /* dsa_sign_setup */
|
||||||
|
NULL, /* dsa_do_verify */
|
||||||
|
atalla_dsa_mod_exp, /* dsa_mod_exp */
|
||||||
|
atalla_mod_exp_dsa, /* bn_mod_exp */
|
||||||
|
NULL, /* init */
|
||||||
|
NULL, /* finish */
|
||||||
|
0, /* flags */
|
||||||
|
NULL /* app_data */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Our internal DH_METHOD that we provide pointers to */
|
||||||
|
static DH_METHOD atalla_dh =
|
||||||
|
{
|
||||||
|
"Atalla DH method",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
atalla_mod_exp_dh,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Our ENGINE structure. */
|
||||||
|
static ENGINE engine_atalla =
|
||||||
|
{
|
||||||
|
"atalla",
|
||||||
|
"Atalla hardware engine support",
|
||||||
|
&atalla_rsa,
|
||||||
|
&atalla_dsa,
|
||||||
|
&atalla_dh,
|
||||||
|
NULL,
|
||||||
|
atalla_mod_exp,
|
||||||
|
NULL,
|
||||||
|
atalla_init,
|
||||||
|
atalla_finish,
|
||||||
|
NULL, /* no ctrl() */
|
||||||
|
NULL, /* no load_privkey() */
|
||||||
|
NULL, /* no load_pubkey() */
|
||||||
|
0, /* no flags */
|
||||||
|
0, 0, /* no references */
|
||||||
|
NULL, NULL /* unlinked */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* As this is only ever called once, there's no need for locking
|
||||||
|
* (indeed - the lock will already be held by our caller!!!) */
|
||||||
|
ENGINE *ENGINE_atalla()
|
||||||
|
{
|
||||||
|
RSA_METHOD *meth1;
|
||||||
|
DSA_METHOD *meth2;
|
||||||
|
DH_METHOD *meth3;
|
||||||
|
|
||||||
|
/* We know that the "PKCS1_SSLeay()" functions hook properly
|
||||||
|
* to the atalla-specific mod_exp and mod_exp_crt so we use
|
||||||
|
* those functions. NB: We don't use ENGINE_openssl() or
|
||||||
|
* anything "more generic" because something like the RSAref
|
||||||
|
* code may not hook properly, and if you own one of these
|
||||||
|
* cards then you have the right to do RSA operations on it
|
||||||
|
* anyway! */
|
||||||
|
meth1 = RSA_PKCS1_SSLeay();
|
||||||
|
atalla_rsa.rsa_pub_enc = meth1->rsa_pub_enc;
|
||||||
|
atalla_rsa.rsa_pub_dec = meth1->rsa_pub_dec;
|
||||||
|
atalla_rsa.rsa_priv_enc = meth1->rsa_priv_enc;
|
||||||
|
atalla_rsa.rsa_priv_dec = meth1->rsa_priv_dec;
|
||||||
|
|
||||||
|
/* Use the DSA_OpenSSL() method and just hook the mod_exp-ish
|
||||||
|
* bits. */
|
||||||
|
meth2 = DSA_OpenSSL();
|
||||||
|
atalla_dsa.dsa_do_sign = meth2->dsa_do_sign;
|
||||||
|
atalla_dsa.dsa_sign_setup = meth2->dsa_sign_setup;
|
||||||
|
atalla_dsa.dsa_do_verify = meth2->dsa_do_verify;
|
||||||
|
|
||||||
|
/* Much the same for Diffie-Hellman */
|
||||||
|
meth3 = DH_OpenSSL();
|
||||||
|
atalla_dh.generate_key = meth3->generate_key;
|
||||||
|
atalla_dh.compute_key = meth3->compute_key;
|
||||||
|
return &engine_atalla;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This is a process-global DSO handle used for loading and unloading
|
||||||
|
* the Atalla library. NB: This is only set (or unset) during an
|
||||||
|
* init() or finish() call (reference counts permitting) and they're
|
||||||
|
* operating with global locks, so this should be thread-safe
|
||||||
|
* implicitly. */
|
||||||
|
static DSO *atalla_dso = NULL;
|
||||||
|
|
||||||
|
/* These are the function pointers that are (un)set when the library has
|
||||||
|
* successfully (un)loaded. */
|
||||||
|
static tfnASI_GetHardwareConfig *p_Atalla_GetHardwareConfig = NULL;
|
||||||
|
static tfnASI_RSAPrivateKeyOpFn *p_Atalla_RSAPrivateKeyOpFn = NULL;
|
||||||
|
static tfnASI_GetPerformanceStatistics *p_Atalla_GetPerformanceStatistics = NULL;
|
||||||
|
|
||||||
|
/* (de)initialisation functions. */
|
||||||
|
static int atalla_init()
|
||||||
|
{
|
||||||
|
tfnASI_GetHardwareConfig *p1;
|
||||||
|
tfnASI_RSAPrivateKeyOpFn *p2;
|
||||||
|
tfnASI_GetPerformanceStatistics *p3;
|
||||||
|
/* Not sure of the origin of this magic value, but Ben's code had it
|
||||||
|
* and it seemed to have been working for a few people. :-) */
|
||||||
|
unsigned int config_buf[1024];
|
||||||
|
|
||||||
|
if(atalla_dso != NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ATALLA_INIT,ENGINE_R_ALREADY_LOADED);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Attempt to load libatasi.so/atasi.dll/whatever. Needs to be
|
||||||
|
* changed unfortunately because the Atalla drivers don't have
|
||||||
|
* standard library names that can be platform-translated well. */
|
||||||
|
/* TODO: Work out how to actually map to the names the Atalla
|
||||||
|
* drivers really use - for now a symbollic link needs to be
|
||||||
|
* created on the host system from libatasi.so to atasi.so on
|
||||||
|
* unix variants. */
|
||||||
|
atalla_dso = DSO_load(NULL, ATALLA_LIBNAME, NULL,
|
||||||
|
DSO_FLAG_NAME_TRANSLATION);
|
||||||
|
if(atalla_dso == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ATALLA_INIT,ENGINE_R_DSO_FAILURE);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if(!(p1 = (tfnASI_GetHardwareConfig *)DSO_bind_func(
|
||||||
|
atalla_dso, ATALLA_F1)) ||
|
||||||
|
!(p2 = (tfnASI_RSAPrivateKeyOpFn *)DSO_bind_func(
|
||||||
|
atalla_dso, ATALLA_F2)) ||
|
||||||
|
!(p3 = (tfnASI_GetPerformanceStatistics *)DSO_bind_func(
|
||||||
|
atalla_dso, ATALLA_F3)))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ATALLA_INIT,ENGINE_R_DSO_FAILURE);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Copy the pointers */
|
||||||
|
p_Atalla_GetHardwareConfig = p1;
|
||||||
|
p_Atalla_RSAPrivateKeyOpFn = p2;
|
||||||
|
p_Atalla_GetPerformanceStatistics = p3;
|
||||||
|
/* Perform a basic test to see if there's actually any unit
|
||||||
|
* running. */
|
||||||
|
if(p1(0L, config_buf) != 0)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ATALLA_INIT,ENGINE_R_UNIT_FAILURE);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Everything's fine. */
|
||||||
|
return 1;
|
||||||
|
err:
|
||||||
|
if(atalla_dso)
|
||||||
|
DSO_free(atalla_dso);
|
||||||
|
p_Atalla_GetHardwareConfig = NULL;
|
||||||
|
p_Atalla_RSAPrivateKeyOpFn = NULL;
|
||||||
|
p_Atalla_GetPerformanceStatistics = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int atalla_finish()
|
||||||
|
{
|
||||||
|
if(atalla_dso == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ATALLA_FINISH,ENGINE_R_NOT_LOADED);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(!DSO_free(atalla_dso))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ATALLA_FINISH,ENGINE_R_DSO_FAILURE);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
atalla_dso = NULL;
|
||||||
|
p_Atalla_GetHardwareConfig = NULL;
|
||||||
|
p_Atalla_RSAPrivateKeyOpFn = NULL;
|
||||||
|
p_Atalla_GetPerformanceStatistics = NULL;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int atalla_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *m, BN_CTX *ctx)
|
||||||
|
{
|
||||||
|
/* I need somewhere to store temporary serialised values for
|
||||||
|
* use with the Atalla API calls. A neat cheat - I'll use
|
||||||
|
* BIGNUMs from the BN_CTX but access their arrays directly as
|
||||||
|
* byte arrays <grin>. This way I don't have to clean anything
|
||||||
|
* up. */
|
||||||
|
BIGNUM *modulus;
|
||||||
|
BIGNUM *exponent;
|
||||||
|
BIGNUM *argument;
|
||||||
|
BIGNUM *result;
|
||||||
|
RSAPrivateKey keydata;
|
||||||
|
int to_return, numbytes;
|
||||||
|
|
||||||
|
modulus = exponent = argument = result = NULL;
|
||||||
|
to_return = 0; /* expect failure */
|
||||||
|
|
||||||
|
if(!atalla_dso)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ATALLA_MOD_EXP,ENGINE_R_NOT_LOADED);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Prepare the params */
|
||||||
|
modulus = BN_CTX_get(ctx);
|
||||||
|
exponent = BN_CTX_get(ctx);
|
||||||
|
argument = BN_CTX_get(ctx);
|
||||||
|
result = BN_CTX_get(ctx);
|
||||||
|
if(!modulus || !exponent || !argument || !result)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ATALLA_MOD_EXP,ENGINE_R_BN_CTX_FULL);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if(!bn_wexpand(modulus, m->top) || !bn_wexpand(exponent, m->top) ||
|
||||||
|
!bn_wexpand(argument, m->top) || !bn_wexpand(result, m->top))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ATALLA_MOD_EXP,ENGINE_R_BN_EXPAND_FAIL);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Prepare the key-data */
|
||||||
|
memset(&keydata, 0,sizeof keydata);
|
||||||
|
numbytes = BN_num_bytes(m);
|
||||||
|
memset(exponent->d, 0, numbytes);
|
||||||
|
memset(modulus->d, 0, numbytes);
|
||||||
|
BN_bn2bin(p, (unsigned char *)exponent->d + numbytes - BN_num_bytes(p));
|
||||||
|
BN_bn2bin(m, (unsigned char *)modulus->d + numbytes - BN_num_bytes(m));
|
||||||
|
keydata.privateExponent.data = (unsigned char *)exponent->d;
|
||||||
|
keydata.privateExponent.len = numbytes;
|
||||||
|
keydata.modulus.data = (unsigned char *)modulus->d;
|
||||||
|
keydata.modulus.len = numbytes;
|
||||||
|
/* Prepare the argument */
|
||||||
|
memset(argument->d, 0, numbytes);
|
||||||
|
memset(result->d, 0, numbytes);
|
||||||
|
BN_bn2bin(a, (unsigned char *)argument->d + numbytes - BN_num_bytes(a));
|
||||||
|
/* Perform the operation */
|
||||||
|
if(p_Atalla_RSAPrivateKeyOpFn(&keydata, (unsigned char *)result->d,
|
||||||
|
(unsigned char *)argument->d,
|
||||||
|
keydata.modulus.len) != 0)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ATALLA_MOD_EXP,ENGINE_R_REQUEST_FAILED);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Convert the response */
|
||||||
|
BN_bin2bn((unsigned char *)result->d, numbytes, r);
|
||||||
|
to_return = 1;
|
||||||
|
err:
|
||||||
|
if(modulus) ctx->tos--;
|
||||||
|
if(exponent) ctx->tos--;
|
||||||
|
if(argument) ctx->tos--;
|
||||||
|
if(result) ctx->tos--;
|
||||||
|
return to_return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int atalla_rsa_mod_exp(BIGNUM *r0, BIGNUM *I, RSA *rsa)
|
||||||
|
{
|
||||||
|
BN_CTX *ctx = NULL;
|
||||||
|
int to_return = 0;
|
||||||
|
|
||||||
|
if(!atalla_dso)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ATALLA_RSA_MOD_EXP,ENGINE_R_NOT_LOADED);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if((ctx = BN_CTX_new()) == NULL)
|
||||||
|
goto err;
|
||||||
|
if(!rsa->d || !rsa->n)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_ATALLA_RSA_MOD_EXP,ENGINE_R_MISSING_KEY_COMPONENTS);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
to_return = atalla_mod_exp(r0, I, rsa->d, rsa->n, ctx);
|
||||||
|
err:
|
||||||
|
if(ctx)
|
||||||
|
BN_CTX_free(ctx);
|
||||||
|
return to_return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This code was liberated and adapted from the commented-out code in
|
||||||
|
* dsa_ossl.c. Because of the unoptimised form of the Atalla acceleration
|
||||||
|
* (it doesn't have a CRT form for RSA), this function means that an
|
||||||
|
* Atalla system running with a DSA server certificate can handshake
|
||||||
|
* around 5 or 6 times faster/more than an equivalent system running with
|
||||||
|
* RSA. Just check out the "signs" statistics from the RSA and DSA parts
|
||||||
|
* of "openssl speed -engine atalla dsa1024 rsa1024". */
|
||||||
|
static int atalla_dsa_mod_exp(DSA *dsa, BIGNUM *rr, BIGNUM *a1,
|
||||||
|
BIGNUM *p1, BIGNUM *a2, BIGNUM *p2, BIGNUM *m,
|
||||||
|
BN_CTX *ctx, BN_MONT_CTX *in_mont)
|
||||||
|
{
|
||||||
|
BIGNUM t;
|
||||||
|
int to_return = 0;
|
||||||
|
|
||||||
|
BN_init(&t);
|
||||||
|
/* let rr = a1 ^ p1 mod m */
|
||||||
|
if (!atalla_mod_exp(rr,a1,p1,m,ctx)) goto end;
|
||||||
|
/* let t = a2 ^ p2 mod m */
|
||||||
|
if (!atalla_mod_exp(&t,a2,p2,m,ctx)) goto end;
|
||||||
|
/* let rr = rr * t mod m */
|
||||||
|
if (!BN_mod_mul(rr,rr,&t,m,ctx)) goto end;
|
||||||
|
to_return = 1;
|
||||||
|
end:
|
||||||
|
BN_free(&t);
|
||||||
|
return to_return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int atalla_mod_exp_dsa(DSA *dsa, BIGNUM *r, BIGNUM *a,
|
||||||
|
const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx,
|
||||||
|
BN_MONT_CTX *m_ctx)
|
||||||
|
{
|
||||||
|
return atalla_mod_exp(r, a, p, m, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This function is aliased to mod_exp (with the mont stuff dropped). */
|
||||||
|
static int atalla_mod_exp_mont(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)
|
||||||
|
{
|
||||||
|
return atalla_mod_exp(r, a, p, m, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This function is aliased to mod_exp (with the dh and mont dropped). */
|
||||||
|
static int atalla_mod_exp_dh(DH *dh, BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)
|
||||||
|
{
|
||||||
|
return atalla_mod_exp(r, a, p, m, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* !NO_HW_ATALLA */
|
||||||
|
#endif /* !NO_HW */
|
||||||
807
crypto/engine/hw_cswift.c
Normal file
807
crypto/engine/hw_cswift.c
Normal file
@@ -0,0 +1,807 @@
|
|||||||
|
/* crypto/engine/hw_cswift.c */
|
||||||
|
/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
|
||||||
|
* project 2000.
|
||||||
|
*/
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. All advertising materials mentioning features or use of this
|
||||||
|
* software must display the following acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||||
|
* endorse or promote products derived from this software without
|
||||||
|
* prior written permission. For written permission, please contact
|
||||||
|
* licensing@OpenSSL.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "OpenSSL"
|
||||||
|
* nor may "OpenSSL" appear in their names without prior written
|
||||||
|
* permission of the OpenSSL Project.
|
||||||
|
*
|
||||||
|
* 6. Redistributions of any form whatsoever must retain the following
|
||||||
|
* acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||||
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This product includes cryptographic software written by Eric Young
|
||||||
|
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||||
|
* Hudson (tjh@cryptsoft.com).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <openssl/crypto.h>
|
||||||
|
#include "cryptlib.h"
|
||||||
|
#include <openssl/dso.h>
|
||||||
|
#include "engine_int.h"
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
|
||||||
|
#ifndef NO_HW
|
||||||
|
#ifndef NO_HW_CSWIFT
|
||||||
|
|
||||||
|
/* Attribution notice: Rainbow have generously allowed me to reproduce
|
||||||
|
* the necessary definitions here from their API. This means the support
|
||||||
|
* can build independently of whether application builders have the
|
||||||
|
* API or hardware. This will allow developers to easily produce software
|
||||||
|
* that has latent hardware support for any users that have accelerators
|
||||||
|
* installed, without the developers themselves needing anything extra.
|
||||||
|
*
|
||||||
|
* I have only clipped the parts from the CryptoSwift header files that
|
||||||
|
* are (or seem) relevant to the CryptoSwift support code. This is
|
||||||
|
* simply to keep the file sizes reasonable.
|
||||||
|
* [Geoff]
|
||||||
|
*/
|
||||||
|
#ifdef FLAT_INC
|
||||||
|
#include "cswift.h"
|
||||||
|
#else
|
||||||
|
#include "vendor_defns/cswift.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int cswift_init(void);
|
||||||
|
static int cswift_finish(void);
|
||||||
|
|
||||||
|
/* BIGNUM stuff */
|
||||||
|
static int cswift_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *m, BN_CTX *ctx);
|
||||||
|
static int cswift_mod_exp_crt(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *q, const BIGNUM *dmp1, const BIGNUM *dmq1,
|
||||||
|
const BIGNUM *iqmp, BN_CTX *ctx);
|
||||||
|
|
||||||
|
/* RSA stuff */
|
||||||
|
static int cswift_rsa_mod_exp(BIGNUM *r0, BIGNUM *I, RSA *rsa);
|
||||||
|
/* This function is aliased to mod_exp (with the mont stuff dropped). */
|
||||||
|
static int cswift_mod_exp_mont(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
|
||||||
|
|
||||||
|
/* DSA stuff */
|
||||||
|
static DSA_SIG *cswift_dsa_sign(const unsigned char *dgst, int dlen, DSA *dsa);
|
||||||
|
static int cswift_dsa_verify(const unsigned char *dgst, int dgst_len,
|
||||||
|
DSA_SIG *sig, DSA *dsa);
|
||||||
|
|
||||||
|
/* DH stuff */
|
||||||
|
/* This function is alised to mod_exp (with the DH and mont dropped). */
|
||||||
|
static int cswift_mod_exp_dh(DH *dh, BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
|
||||||
|
|
||||||
|
|
||||||
|
/* Our internal RSA_METHOD that we provide pointers to */
|
||||||
|
static RSA_METHOD cswift_rsa =
|
||||||
|
{
|
||||||
|
"CryptoSwift RSA method",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
cswift_rsa_mod_exp,
|
||||||
|
cswift_mod_exp_mont,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Our internal DSA_METHOD that we provide pointers to */
|
||||||
|
static DSA_METHOD cswift_dsa =
|
||||||
|
{
|
||||||
|
"CryptoSwift DSA method",
|
||||||
|
cswift_dsa_sign,
|
||||||
|
NULL, /* dsa_sign_setup */
|
||||||
|
cswift_dsa_verify,
|
||||||
|
NULL, /* dsa_mod_exp */
|
||||||
|
NULL, /* bn_mod_exp */
|
||||||
|
NULL, /* init */
|
||||||
|
NULL, /* finish */
|
||||||
|
0, /* flags */
|
||||||
|
NULL /* app_data */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Our internal DH_METHOD that we provide pointers to */
|
||||||
|
static DH_METHOD cswift_dh =
|
||||||
|
{
|
||||||
|
"CryptoSwift DH method",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
cswift_mod_exp_dh,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Our ENGINE structure. */
|
||||||
|
static ENGINE engine_cswift =
|
||||||
|
{
|
||||||
|
"cswift",
|
||||||
|
"CryptoSwift hardware engine support",
|
||||||
|
&cswift_rsa,
|
||||||
|
&cswift_dsa,
|
||||||
|
&cswift_dh,
|
||||||
|
NULL,
|
||||||
|
cswift_mod_exp,
|
||||||
|
cswift_mod_exp_crt,
|
||||||
|
cswift_init,
|
||||||
|
cswift_finish,
|
||||||
|
NULL, /* no ctrl() */
|
||||||
|
NULL, /* no load_privkey() */
|
||||||
|
NULL, /* no load_pubkey() */
|
||||||
|
0, /* no flags */
|
||||||
|
0, 0, /* no references */
|
||||||
|
NULL, NULL /* unlinked */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* As this is only ever called once, there's no need for locking
|
||||||
|
* (indeed - the lock will already be held by our caller!!!) */
|
||||||
|
ENGINE *ENGINE_cswift()
|
||||||
|
{
|
||||||
|
RSA_METHOD *meth1;
|
||||||
|
DH_METHOD *meth2;
|
||||||
|
|
||||||
|
/* We know that the "PKCS1_SSLeay()" functions hook properly
|
||||||
|
* to the cswift-specific mod_exp and mod_exp_crt so we use
|
||||||
|
* those functions. NB: We don't use ENGINE_openssl() or
|
||||||
|
* anything "more generic" because something like the RSAref
|
||||||
|
* code may not hook properly, and if you own one of these
|
||||||
|
* cards then you have the right to do RSA operations on it
|
||||||
|
* anyway! */
|
||||||
|
meth1 = RSA_PKCS1_SSLeay();
|
||||||
|
cswift_rsa.rsa_pub_enc = meth1->rsa_pub_enc;
|
||||||
|
cswift_rsa.rsa_pub_dec = meth1->rsa_pub_dec;
|
||||||
|
cswift_rsa.rsa_priv_enc = meth1->rsa_priv_enc;
|
||||||
|
cswift_rsa.rsa_priv_dec = meth1->rsa_priv_dec;
|
||||||
|
|
||||||
|
/* Much the same for Diffie-Hellman */
|
||||||
|
meth2 = DH_OpenSSL();
|
||||||
|
cswift_dh.generate_key = meth2->generate_key;
|
||||||
|
cswift_dh.compute_key = meth2->compute_key;
|
||||||
|
return &engine_cswift;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This is a process-global DSO handle used for loading and unloading
|
||||||
|
* the CryptoSwift library. NB: This is only set (or unset) during an
|
||||||
|
* init() or finish() call (reference counts permitting) and they're
|
||||||
|
* operating with global locks, so this should be thread-safe
|
||||||
|
* implicitly. */
|
||||||
|
static DSO *cswift_dso = NULL;
|
||||||
|
|
||||||
|
/* These are the function pointers that are (un)set when the library has
|
||||||
|
* successfully (un)loaded. */
|
||||||
|
t_swAcquireAccContext *p_CSwift_AcquireAccContext = NULL;
|
||||||
|
t_swAttachKeyParam *p_CSwift_AttachKeyParam = NULL;
|
||||||
|
t_swSimpleRequest *p_CSwift_SimpleRequest = NULL;
|
||||||
|
t_swReleaseAccContext *p_CSwift_ReleaseAccContext = NULL;
|
||||||
|
|
||||||
|
/* Used in the DSO operations. */
|
||||||
|
static const char *CSWIFT_LIBNAME = "swift";
|
||||||
|
static const char *CSWIFT_F1 = "swAcquireAccContext";
|
||||||
|
static const char *CSWIFT_F2 = "swAttachKeyParam";
|
||||||
|
static const char *CSWIFT_F3 = "swSimpleRequest";
|
||||||
|
static const char *CSWIFT_F4 = "swReleaseAccContext";
|
||||||
|
|
||||||
|
|
||||||
|
/* CryptoSwift library functions and mechanics - these are used by the
|
||||||
|
* higher-level functions further down. NB: As and where there's no
|
||||||
|
* error checking, take a look lower down where these functions are
|
||||||
|
* called, the checking and error handling is probably down there. */
|
||||||
|
|
||||||
|
/* utility function to obtain a context */
|
||||||
|
static int get_context(SW_CONTEXT_HANDLE *hac)
|
||||||
|
{
|
||||||
|
SW_STATUS status;
|
||||||
|
|
||||||
|
status = p_CSwift_AcquireAccContext(hac);
|
||||||
|
if(status != SW_OK)
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* similarly to release one. */
|
||||||
|
static void release_context(SW_CONTEXT_HANDLE hac)
|
||||||
|
{
|
||||||
|
p_CSwift_ReleaseAccContext(hac);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (de)initialisation functions. */
|
||||||
|
static int cswift_init()
|
||||||
|
{
|
||||||
|
SW_CONTEXT_HANDLE hac;
|
||||||
|
t_swAcquireAccContext *p1;
|
||||||
|
t_swAttachKeyParam *p2;
|
||||||
|
t_swSimpleRequest *p3;
|
||||||
|
t_swReleaseAccContext *p4;
|
||||||
|
|
||||||
|
if(cswift_dso != NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_INIT,ENGINE_R_ALREADY_LOADED);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Attempt to load libswift.so/swift.dll/whatever. */
|
||||||
|
cswift_dso = DSO_load(NULL, CSWIFT_LIBNAME, NULL,
|
||||||
|
DSO_FLAG_NAME_TRANSLATION);
|
||||||
|
if(cswift_dso == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_INIT,ENGINE_R_DSO_FAILURE);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if(!(p1 = (t_swAcquireAccContext *)
|
||||||
|
DSO_bind_func(cswift_dso, CSWIFT_F1)) ||
|
||||||
|
!(p2 = (t_swAttachKeyParam *)
|
||||||
|
DSO_bind_func(cswift_dso, CSWIFT_F2)) ||
|
||||||
|
!(p3 = (t_swSimpleRequest *)
|
||||||
|
DSO_bind_func(cswift_dso, CSWIFT_F3)) ||
|
||||||
|
!(p4 = (t_swReleaseAccContext *)
|
||||||
|
DSO_bind_func(cswift_dso, CSWIFT_F4)))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_INIT,ENGINE_R_DSO_FAILURE);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Copy the pointers */
|
||||||
|
p_CSwift_AcquireAccContext = p1;
|
||||||
|
p_CSwift_AttachKeyParam = p2;
|
||||||
|
p_CSwift_SimpleRequest = p3;
|
||||||
|
p_CSwift_ReleaseAccContext = p4;
|
||||||
|
/* Try and get a context - if not, we may have a DSO but no
|
||||||
|
* accelerator! */
|
||||||
|
if(!get_context(&hac))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_INIT,ENGINE_R_UNIT_FAILURE);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
release_context(hac);
|
||||||
|
/* Everything's fine. */
|
||||||
|
return 1;
|
||||||
|
err:
|
||||||
|
if(cswift_dso)
|
||||||
|
DSO_free(cswift_dso);
|
||||||
|
p_CSwift_AcquireAccContext = NULL;
|
||||||
|
p_CSwift_AttachKeyParam = NULL;
|
||||||
|
p_CSwift_SimpleRequest = NULL;
|
||||||
|
p_CSwift_ReleaseAccContext = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cswift_finish()
|
||||||
|
{
|
||||||
|
if(cswift_dso == NULL)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_FINISH,ENGINE_R_NOT_LOADED);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(!DSO_free(cswift_dso))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_FINISH,ENGINE_R_DSO_FAILURE);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
cswift_dso = NULL;
|
||||||
|
p_CSwift_AcquireAccContext = NULL;
|
||||||
|
p_CSwift_AttachKeyParam = NULL;
|
||||||
|
p_CSwift_SimpleRequest = NULL;
|
||||||
|
p_CSwift_ReleaseAccContext = NULL;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Un petit mod_exp */
|
||||||
|
static int cswift_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *m, BN_CTX *ctx)
|
||||||
|
{
|
||||||
|
/* I need somewhere to store temporary serialised values for
|
||||||
|
* use with the CryptoSwift API calls. A neat cheat - I'll use
|
||||||
|
* BIGNUMs from the BN_CTX but access their arrays directly as
|
||||||
|
* byte arrays <grin>. This way I don't have to clean anything
|
||||||
|
* up. */
|
||||||
|
BIGNUM *modulus;
|
||||||
|
BIGNUM *exponent;
|
||||||
|
BIGNUM *argument;
|
||||||
|
BIGNUM *result;
|
||||||
|
SW_STATUS sw_status;
|
||||||
|
SW_LARGENUMBER arg, res;
|
||||||
|
SW_PARAM sw_param;
|
||||||
|
SW_CONTEXT_HANDLE hac;
|
||||||
|
int to_return, acquired;
|
||||||
|
|
||||||
|
modulus = exponent = argument = result = NULL;
|
||||||
|
to_return = 0; /* expect failure */
|
||||||
|
acquired = 0;
|
||||||
|
|
||||||
|
if(!get_context(&hac))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_MOD_EXP,ENGINE_R_GET_HANDLE_FAILED);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
acquired = 1;
|
||||||
|
/* Prepare the params */
|
||||||
|
modulus = BN_CTX_get(ctx);
|
||||||
|
exponent = BN_CTX_get(ctx);
|
||||||
|
argument = BN_CTX_get(ctx);
|
||||||
|
result = BN_CTX_get(ctx);
|
||||||
|
if(!modulus || !exponent || !argument || !result)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_MOD_EXP,ENGINE_R_BN_CTX_FULL);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if(!bn_wexpand(modulus, m->top) || !bn_wexpand(exponent, p->top) ||
|
||||||
|
!bn_wexpand(argument, a->top) || !bn_wexpand(result, m->top))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_MOD_EXP,ENGINE_R_BN_EXPAND_FAIL);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
sw_param.type = SW_ALG_EXP;
|
||||||
|
sw_param.up.exp.modulus.nbytes = BN_bn2bin(m,
|
||||||
|
(unsigned char *)modulus->d);
|
||||||
|
sw_param.up.exp.modulus.value = (unsigned char *)modulus->d;
|
||||||
|
sw_param.up.exp.exponent.nbytes = BN_bn2bin(p,
|
||||||
|
(unsigned char *)exponent->d);
|
||||||
|
sw_param.up.exp.exponent.value = (unsigned char *)exponent->d;
|
||||||
|
/* Attach the key params */
|
||||||
|
sw_status = p_CSwift_AttachKeyParam(hac, &sw_param);
|
||||||
|
switch(sw_status)
|
||||||
|
{
|
||||||
|
case SW_OK:
|
||||||
|
break;
|
||||||
|
case SW_ERR_INPUT_SIZE:
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_MOD_EXP,
|
||||||
|
ENGINE_R_SIZE_TOO_LARGE_OR_TOO_SMALL);
|
||||||
|
goto err;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
char tmpbuf[20];
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_MOD_EXP,ENGINE_R_REQUEST_FAILED);
|
||||||
|
sprintf(tmpbuf, "%ld", sw_status);
|
||||||
|
ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
|
||||||
|
}
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Prepare the argument and response */
|
||||||
|
arg.nbytes = BN_bn2bin(a, (unsigned char *)argument->d);
|
||||||
|
arg.value = (unsigned char *)argument->d;
|
||||||
|
res.nbytes = BN_num_bytes(m);
|
||||||
|
memset(result->d, 0, res.nbytes);
|
||||||
|
res.value = (unsigned char *)result->d;
|
||||||
|
/* Perform the operation */
|
||||||
|
if((sw_status = p_CSwift_SimpleRequest(hac, SW_CMD_MODEXP, &arg, 1,
|
||||||
|
&res, 1)) != SW_OK)
|
||||||
|
{
|
||||||
|
char tmpbuf[20];
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_MOD_EXP,ENGINE_R_REQUEST_FAILED);
|
||||||
|
sprintf(tmpbuf, "%ld", sw_status);
|
||||||
|
ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Convert the response */
|
||||||
|
BN_bin2bn((unsigned char *)result->d, res.nbytes, r);
|
||||||
|
to_return = 1;
|
||||||
|
err:
|
||||||
|
if(acquired)
|
||||||
|
release_context(hac);
|
||||||
|
if(modulus) ctx->tos--;
|
||||||
|
if(exponent) ctx->tos--;
|
||||||
|
if(argument) ctx->tos--;
|
||||||
|
if(result) ctx->tos--;
|
||||||
|
return to_return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Un petit mod_exp chinois */
|
||||||
|
static int cswift_mod_exp_crt(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *q, const BIGNUM *dmp1,
|
||||||
|
const BIGNUM *dmq1, const BIGNUM *iqmp, BN_CTX *ctx)
|
||||||
|
{
|
||||||
|
SW_STATUS sw_status;
|
||||||
|
SW_LARGENUMBER arg, res;
|
||||||
|
SW_PARAM sw_param;
|
||||||
|
SW_CONTEXT_HANDLE hac;
|
||||||
|
BIGNUM *rsa_p = NULL;
|
||||||
|
BIGNUM *rsa_q = NULL;
|
||||||
|
BIGNUM *rsa_dmp1 = NULL;
|
||||||
|
BIGNUM *rsa_dmq1 = NULL;
|
||||||
|
BIGNUM *rsa_iqmp = NULL;
|
||||||
|
BIGNUM *argument = NULL;
|
||||||
|
BIGNUM *result = NULL;
|
||||||
|
int to_return = 0; /* expect failure */
|
||||||
|
int acquired = 0;
|
||||||
|
|
||||||
|
if(!get_context(&hac))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_MOD_EXP_CRT,ENGINE_R_GET_HANDLE_FAILED);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
acquired = 1;
|
||||||
|
/* Prepare the params */
|
||||||
|
rsa_p = BN_CTX_get(ctx);
|
||||||
|
rsa_q = BN_CTX_get(ctx);
|
||||||
|
rsa_dmp1 = BN_CTX_get(ctx);
|
||||||
|
rsa_dmq1 = BN_CTX_get(ctx);
|
||||||
|
rsa_iqmp = BN_CTX_get(ctx);
|
||||||
|
argument = BN_CTX_get(ctx);
|
||||||
|
result = BN_CTX_get(ctx);
|
||||||
|
if(!rsa_p || !rsa_q || !rsa_dmp1 || !rsa_dmq1 || !rsa_iqmp ||
|
||||||
|
!argument || !result)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_MOD_EXP_CRT,ENGINE_R_BN_CTX_FULL);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if(!bn_wexpand(rsa_p, p->top) || !bn_wexpand(rsa_q, q->top) ||
|
||||||
|
!bn_wexpand(rsa_dmp1, dmp1->top) ||
|
||||||
|
!bn_wexpand(rsa_dmq1, dmq1->top) ||
|
||||||
|
!bn_wexpand(rsa_iqmp, iqmp->top) ||
|
||||||
|
!bn_wexpand(argument, a->top) ||
|
||||||
|
!bn_wexpand(result, p->top + q->top))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_MOD_EXP_CRT,ENGINE_R_BN_EXPAND_FAIL);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
sw_param.type = SW_ALG_CRT;
|
||||||
|
sw_param.up.crt.p.nbytes = BN_bn2bin(p, (unsigned char *)rsa_p->d);
|
||||||
|
sw_param.up.crt.p.value = (unsigned char *)rsa_p->d;
|
||||||
|
sw_param.up.crt.q.nbytes = BN_bn2bin(q, (unsigned char *)rsa_q->d);
|
||||||
|
sw_param.up.crt.q.value = (unsigned char *)rsa_q->d;
|
||||||
|
sw_param.up.crt.dmp1.nbytes = BN_bn2bin(dmp1,
|
||||||
|
(unsigned char *)rsa_dmp1->d);
|
||||||
|
sw_param.up.crt.dmp1.value = (unsigned char *)rsa_dmp1->d;
|
||||||
|
sw_param.up.crt.dmq1.nbytes = BN_bn2bin(dmq1,
|
||||||
|
(unsigned char *)rsa_dmq1->d);
|
||||||
|
sw_param.up.crt.dmq1.value = (unsigned char *)rsa_dmq1->d;
|
||||||
|
sw_param.up.crt.iqmp.nbytes = BN_bn2bin(iqmp,
|
||||||
|
(unsigned char *)rsa_iqmp->d);
|
||||||
|
sw_param.up.crt.iqmp.value = (unsigned char *)rsa_iqmp->d;
|
||||||
|
/* Attach the key params */
|
||||||
|
sw_status = p_CSwift_AttachKeyParam(hac, &sw_param);
|
||||||
|
switch(sw_status)
|
||||||
|
{
|
||||||
|
case SW_OK:
|
||||||
|
break;
|
||||||
|
case SW_ERR_INPUT_SIZE:
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_MOD_EXP_CRT,
|
||||||
|
ENGINE_R_SIZE_TOO_LARGE_OR_TOO_SMALL);
|
||||||
|
goto err;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
char tmpbuf[20];
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_MOD_EXP_CRT,ENGINE_R_REQUEST_FAILED);
|
||||||
|
sprintf(tmpbuf, "%ld", sw_status);
|
||||||
|
ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
|
||||||
|
}
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Prepare the argument and response */
|
||||||
|
arg.nbytes = BN_bn2bin(a, (unsigned char *)argument->d);
|
||||||
|
arg.value = (unsigned char *)argument->d;
|
||||||
|
res.nbytes = 2 * BN_num_bytes(p);
|
||||||
|
memset(result->d, 0, res.nbytes);
|
||||||
|
res.value = (unsigned char *)result->d;
|
||||||
|
/* Perform the operation */
|
||||||
|
if((sw_status = p_CSwift_SimpleRequest(hac, SW_CMD_MODEXP_CRT, &arg, 1,
|
||||||
|
&res, 1)) != SW_OK)
|
||||||
|
{
|
||||||
|
char tmpbuf[20];
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_MOD_EXP_CRT,ENGINE_R_REQUEST_FAILED);
|
||||||
|
sprintf(tmpbuf, "%ld", sw_status);
|
||||||
|
ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Convert the response */
|
||||||
|
BN_bin2bn((unsigned char *)result->d, res.nbytes, r);
|
||||||
|
to_return = 1;
|
||||||
|
err:
|
||||||
|
if(acquired)
|
||||||
|
release_context(hac);
|
||||||
|
if(rsa_p) ctx->tos--;
|
||||||
|
if(rsa_q) ctx->tos--;
|
||||||
|
if(rsa_dmp1) ctx->tos--;
|
||||||
|
if(rsa_dmq1) ctx->tos--;
|
||||||
|
if(rsa_iqmp) ctx->tos--;
|
||||||
|
if(argument) ctx->tos--;
|
||||||
|
if(result) ctx->tos--;
|
||||||
|
return to_return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cswift_rsa_mod_exp(BIGNUM *r0, BIGNUM *I, RSA *rsa)
|
||||||
|
{
|
||||||
|
BN_CTX *ctx;
|
||||||
|
int to_return = 0;
|
||||||
|
|
||||||
|
if((ctx = BN_CTX_new()) == NULL)
|
||||||
|
goto err;
|
||||||
|
if(!rsa->p || !rsa->q || !rsa->dmp1 || !rsa->dmq1 || !rsa->iqmp)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_RSA_MOD_EXP,ENGINE_R_MISSING_KEY_COMPONENTS);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
to_return = cswift_mod_exp_crt(r0, I, rsa->p, rsa->q, rsa->dmp1,
|
||||||
|
rsa->dmq1, rsa->iqmp, ctx);
|
||||||
|
err:
|
||||||
|
if(ctx)
|
||||||
|
BN_CTX_free(ctx);
|
||||||
|
return to_return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This function is aliased to mod_exp (with the mont stuff dropped). */
|
||||||
|
static int cswift_mod_exp_mont(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)
|
||||||
|
{
|
||||||
|
return cswift_mod_exp(r, a, p, m, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
static DSA_SIG *cswift_dsa_sign(const unsigned char *dgst, int dlen, DSA *dsa)
|
||||||
|
{
|
||||||
|
SW_CONTEXT_HANDLE hac;
|
||||||
|
SW_PARAM sw_param;
|
||||||
|
SW_STATUS sw_status;
|
||||||
|
SW_LARGENUMBER arg, res;
|
||||||
|
unsigned char *ptr;
|
||||||
|
BN_CTX *ctx;
|
||||||
|
BIGNUM *dsa_p = NULL;
|
||||||
|
BIGNUM *dsa_q = NULL;
|
||||||
|
BIGNUM *dsa_g = NULL;
|
||||||
|
BIGNUM *dsa_key = NULL;
|
||||||
|
BIGNUM *result = NULL;
|
||||||
|
DSA_SIG *to_return = NULL;
|
||||||
|
int acquired = 0;
|
||||||
|
|
||||||
|
if((ctx = BN_CTX_new()) == NULL)
|
||||||
|
goto err;
|
||||||
|
if(!get_context(&hac))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_DSA_SIGN,ENGINE_R_GET_HANDLE_FAILED);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
acquired = 1;
|
||||||
|
/* Prepare the params */
|
||||||
|
dsa_p = BN_CTX_get(ctx);
|
||||||
|
dsa_q = BN_CTX_get(ctx);
|
||||||
|
dsa_g = BN_CTX_get(ctx);
|
||||||
|
dsa_key = BN_CTX_get(ctx);
|
||||||
|
result = BN_CTX_get(ctx);
|
||||||
|
if(!dsa_p || !dsa_q || !dsa_g || !dsa_key || !result)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_DSA_SIGN,ENGINE_R_BN_CTX_FULL);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if(!bn_wexpand(dsa_p, dsa->p->top) ||
|
||||||
|
!bn_wexpand(dsa_q, dsa->q->top) ||
|
||||||
|
!bn_wexpand(dsa_g, dsa->g->top) ||
|
||||||
|
!bn_wexpand(dsa_key, dsa->priv_key->top) ||
|
||||||
|
!bn_wexpand(result, dsa->p->top))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_DSA_SIGN,ENGINE_R_BN_EXPAND_FAIL);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
sw_param.type = SW_ALG_DSA;
|
||||||
|
sw_param.up.dsa.p.nbytes = BN_bn2bin(dsa->p,
|
||||||
|
(unsigned char *)dsa_p->d);
|
||||||
|
sw_param.up.dsa.p.value = (unsigned char *)dsa_p->d;
|
||||||
|
sw_param.up.dsa.q.nbytes = BN_bn2bin(dsa->q,
|
||||||
|
(unsigned char *)dsa_q->d);
|
||||||
|
sw_param.up.dsa.q.value = (unsigned char *)dsa_q->d;
|
||||||
|
sw_param.up.dsa.g.nbytes = BN_bn2bin(dsa->g,
|
||||||
|
(unsigned char *)dsa_g->d);
|
||||||
|
sw_param.up.dsa.g.value = (unsigned char *)dsa_g->d;
|
||||||
|
sw_param.up.dsa.key.nbytes = BN_bn2bin(dsa->priv_key,
|
||||||
|
(unsigned char *)dsa_key->d);
|
||||||
|
sw_param.up.dsa.key.value = (unsigned char *)dsa_key->d;
|
||||||
|
/* Attach the key params */
|
||||||
|
sw_status = p_CSwift_AttachKeyParam(hac, &sw_param);
|
||||||
|
switch(sw_status)
|
||||||
|
{
|
||||||
|
case SW_OK:
|
||||||
|
break;
|
||||||
|
case SW_ERR_INPUT_SIZE:
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_DSA_SIGN,
|
||||||
|
ENGINE_R_SIZE_TOO_LARGE_OR_TOO_SMALL);
|
||||||
|
goto err;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
char tmpbuf[20];
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_DSA_SIGN,ENGINE_R_REQUEST_FAILED);
|
||||||
|
sprintf(tmpbuf, "%ld", sw_status);
|
||||||
|
ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
|
||||||
|
}
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Prepare the argument and response */
|
||||||
|
arg.nbytes = dlen;
|
||||||
|
arg.value = (unsigned char *)dgst;
|
||||||
|
res.nbytes = BN_num_bytes(dsa->p);
|
||||||
|
memset(result->d, 0, res.nbytes);
|
||||||
|
res.value = (unsigned char *)result->d;
|
||||||
|
/* Perform the operation */
|
||||||
|
sw_status = p_CSwift_SimpleRequest(hac, SW_CMD_DSS_SIGN, &arg, 1,
|
||||||
|
&res, 1);
|
||||||
|
if(sw_status != SW_OK)
|
||||||
|
{
|
||||||
|
char tmpbuf[20];
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_DSA_SIGN,ENGINE_R_REQUEST_FAILED);
|
||||||
|
sprintf(tmpbuf, "%ld", sw_status);
|
||||||
|
ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Convert the response */
|
||||||
|
ptr = (unsigned char *)result->d;
|
||||||
|
if((to_return = DSA_SIG_new()) == NULL)
|
||||||
|
goto err;
|
||||||
|
to_return->r = BN_bin2bn((unsigned char *)result->d, 20, NULL);
|
||||||
|
to_return->s = BN_bin2bn((unsigned char *)result->d + 20, 20, NULL);
|
||||||
|
|
||||||
|
err:
|
||||||
|
if(acquired)
|
||||||
|
release_context(hac);
|
||||||
|
if(dsa_p) ctx->tos--;
|
||||||
|
if(dsa_q) ctx->tos--;
|
||||||
|
if(dsa_g) ctx->tos--;
|
||||||
|
if(dsa_key) ctx->tos--;
|
||||||
|
if(result) ctx->tos--;
|
||||||
|
if(ctx)
|
||||||
|
BN_CTX_free(ctx);
|
||||||
|
return to_return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cswift_dsa_verify(const unsigned char *dgst, int dgst_len,
|
||||||
|
DSA_SIG *sig, DSA *dsa)
|
||||||
|
{
|
||||||
|
SW_CONTEXT_HANDLE hac;
|
||||||
|
SW_PARAM sw_param;
|
||||||
|
SW_STATUS sw_status;
|
||||||
|
SW_LARGENUMBER arg[2], res;
|
||||||
|
unsigned long sig_result;
|
||||||
|
BN_CTX *ctx;
|
||||||
|
BIGNUM *dsa_p = NULL;
|
||||||
|
BIGNUM *dsa_q = NULL;
|
||||||
|
BIGNUM *dsa_g = NULL;
|
||||||
|
BIGNUM *dsa_key = NULL;
|
||||||
|
BIGNUM *argument = NULL;
|
||||||
|
int to_return = -1;
|
||||||
|
int acquired = 0;
|
||||||
|
|
||||||
|
if((ctx = BN_CTX_new()) == NULL)
|
||||||
|
goto err;
|
||||||
|
if(!get_context(&hac))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_DSA_VERIFY,ENGINE_R_GET_HANDLE_FAILED);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
acquired = 1;
|
||||||
|
/* Prepare the params */
|
||||||
|
dsa_p = BN_CTX_get(ctx);
|
||||||
|
dsa_q = BN_CTX_get(ctx);
|
||||||
|
dsa_g = BN_CTX_get(ctx);
|
||||||
|
dsa_key = BN_CTX_get(ctx);
|
||||||
|
argument = BN_CTX_get(ctx);
|
||||||
|
if(!dsa_p || !dsa_q || !dsa_g || !dsa_key || !argument)
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_DSA_VERIFY,ENGINE_R_BN_CTX_FULL);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if(!bn_wexpand(dsa_p, dsa->p->top) ||
|
||||||
|
!bn_wexpand(dsa_q, dsa->q->top) ||
|
||||||
|
!bn_wexpand(dsa_g, dsa->g->top) ||
|
||||||
|
!bn_wexpand(dsa_key, dsa->pub_key->top) ||
|
||||||
|
!bn_wexpand(argument, 40))
|
||||||
|
{
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_DSA_VERIFY,ENGINE_R_BN_EXPAND_FAIL);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
sw_param.type = SW_ALG_DSA;
|
||||||
|
sw_param.up.dsa.p.nbytes = BN_bn2bin(dsa->p,
|
||||||
|
(unsigned char *)dsa_p->d);
|
||||||
|
sw_param.up.dsa.p.value = (unsigned char *)dsa_p->d;
|
||||||
|
sw_param.up.dsa.q.nbytes = BN_bn2bin(dsa->q,
|
||||||
|
(unsigned char *)dsa_q->d);
|
||||||
|
sw_param.up.dsa.q.value = (unsigned char *)dsa_q->d;
|
||||||
|
sw_param.up.dsa.g.nbytes = BN_bn2bin(dsa->g,
|
||||||
|
(unsigned char *)dsa_g->d);
|
||||||
|
sw_param.up.dsa.g.value = (unsigned char *)dsa_g->d;
|
||||||
|
sw_param.up.dsa.key.nbytes = BN_bn2bin(dsa->pub_key,
|
||||||
|
(unsigned char *)dsa_key->d);
|
||||||
|
sw_param.up.dsa.key.value = (unsigned char *)dsa_key->d;
|
||||||
|
/* Attach the key params */
|
||||||
|
sw_status = p_CSwift_AttachKeyParam(hac, &sw_param);
|
||||||
|
switch(sw_status)
|
||||||
|
{
|
||||||
|
case SW_OK:
|
||||||
|
break;
|
||||||
|
case SW_ERR_INPUT_SIZE:
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_DSA_VERIFY,
|
||||||
|
ENGINE_R_SIZE_TOO_LARGE_OR_TOO_SMALL);
|
||||||
|
goto err;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
char tmpbuf[20];
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_DSA_VERIFY,ENGINE_R_REQUEST_FAILED);
|
||||||
|
sprintf(tmpbuf, "%ld", sw_status);
|
||||||
|
ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
|
||||||
|
}
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Prepare the argument and response */
|
||||||
|
arg[0].nbytes = dgst_len;
|
||||||
|
arg[0].value = (unsigned char *)dgst;
|
||||||
|
arg[1].nbytes = 40;
|
||||||
|
arg[1].value = (unsigned char *)argument->d;
|
||||||
|
memset(arg[1].value, 0, 40);
|
||||||
|
BN_bn2bin(sig->r, arg[1].value + 20 - BN_num_bytes(sig->r));
|
||||||
|
BN_bn2bin(sig->s, arg[1].value + 40 - BN_num_bytes(sig->s));
|
||||||
|
res.nbytes = 4; /* unsigned long */
|
||||||
|
res.value = (unsigned char *)(&sig_result);
|
||||||
|
/* Perform the operation */
|
||||||
|
sw_status = p_CSwift_SimpleRequest(hac, SW_CMD_DSS_VERIFY, arg, 2,
|
||||||
|
&res, 1);
|
||||||
|
if(sw_status != SW_OK)
|
||||||
|
{
|
||||||
|
char tmpbuf[20];
|
||||||
|
ENGINEerr(ENGINE_F_CSWIFT_DSA_VERIFY,ENGINE_R_REQUEST_FAILED);
|
||||||
|
sprintf(tmpbuf, "%ld", sw_status);
|
||||||
|
ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Convert the response */
|
||||||
|
to_return = ((sig_result == 0) ? 0 : 1);
|
||||||
|
|
||||||
|
err:
|
||||||
|
if(acquired)
|
||||||
|
release_context(hac);
|
||||||
|
if(dsa_p) ctx->tos--;
|
||||||
|
if(dsa_q) ctx->tos--;
|
||||||
|
if(dsa_g) ctx->tos--;
|
||||||
|
if(dsa_key) ctx->tos--;
|
||||||
|
if(argument) ctx->tos--;
|
||||||
|
if(ctx)
|
||||||
|
BN_CTX_free(ctx);
|
||||||
|
return to_return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This function is aliased to mod_exp (with the dh and mont dropped). */
|
||||||
|
static int cswift_mod_exp_dh(DH *dh, BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||||
|
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)
|
||||||
|
{
|
||||||
|
return cswift_mod_exp(r, a, p, m, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* !NO_HW_CSWIFT */
|
||||||
|
#endif /* !NO_HW */
|
||||||
1019
crypto/engine/hw_ncipher.c
Normal file
1019
crypto/engine/hw_ncipher.c
Normal file
File diff suppressed because it is too large
Load Diff
61
crypto/engine/vendor_defns/atalla.h
Normal file
61
crypto/engine/vendor_defns/atalla.h
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
/* This header declares the necessary definitions for using the exponentiation
|
||||||
|
* acceleration capabilities of Atalla cards. The only cryptographic operation
|
||||||
|
* is performed by "ASI_RSAPrivateKeyOpFn" and this takes a structure that
|
||||||
|
* defines an "RSA private key". However, it is really only performing a
|
||||||
|
* regular mod_exp using the supplied modulus and exponent - no CRT form is
|
||||||
|
* being used. Hence, it is a generic mod_exp function in disguise, and we use
|
||||||
|
* it as such.
|
||||||
|
*
|
||||||
|
* Thanks to the people at Atalla for letting me know these definitions are
|
||||||
|
* fine and that they can be reproduced here.
|
||||||
|
*
|
||||||
|
* Geoff.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct ItemStr
|
||||||
|
{
|
||||||
|
unsigned char *data;
|
||||||
|
int len;
|
||||||
|
} Item;
|
||||||
|
|
||||||
|
typedef struct RSAPrivateKeyStr
|
||||||
|
{
|
||||||
|
void *reserved;
|
||||||
|
Item version;
|
||||||
|
Item modulus;
|
||||||
|
Item publicExponent;
|
||||||
|
Item privateExponent;
|
||||||
|
Item prime[2];
|
||||||
|
Item exponent[2];
|
||||||
|
Item coefficient;
|
||||||
|
} RSAPrivateKey;
|
||||||
|
|
||||||
|
/* Predeclare the function pointer types that we dynamically load from the DSO.
|
||||||
|
* These use the same names and form that Ben's original support code had (in
|
||||||
|
* crypto/bn/bn_exp.c) unless of course I've inadvertently changed the style
|
||||||
|
* somewhere along the way!
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef int tfnASI_GetPerformanceStatistics(int reset_flag,
|
||||||
|
unsigned int *ret_buf);
|
||||||
|
|
||||||
|
typedef int tfnASI_GetHardwareConfig(long card_num, unsigned int *ret_buf);
|
||||||
|
|
||||||
|
typedef int tfnASI_RSAPrivateKeyOpFn(RSAPrivateKey * rsaKey,
|
||||||
|
unsigned char *output,
|
||||||
|
unsigned char *input,
|
||||||
|
unsigned int modulus_len);
|
||||||
|
|
||||||
|
/* These are the static string constants for the DSO file name and the function
|
||||||
|
* symbol names to bind to. Regrettably, the DSO name on *nix appears to be
|
||||||
|
* "atasi.so" rather than something more consistent like "libatasi.so". At the
|
||||||
|
* time of writing, I'm not sure what the file name on win32 is but clearly
|
||||||
|
* native name translation is not possible (eg libatasi.so on *nix, and
|
||||||
|
* atasi.dll on win32). For the purposes of testing, I have created a symbollic
|
||||||
|
* link called "libatasi.so" so that we can use native name-translation - a
|
||||||
|
* better solution will be needed. */
|
||||||
|
static const char *ATALLA_LIBNAME = "atasi";
|
||||||
|
static const char *ATALLA_F1 = "ASI_GetHardwareConfig";
|
||||||
|
static const char *ATALLA_F2 = "ASI_RSAPrivateKeyOpFn";
|
||||||
|
static const char *ATALLA_F3 = "ASI_GetPerformanceStatistics";
|
||||||
|
|
||||||
213
crypto/engine/vendor_defns/cswift.h
Normal file
213
crypto/engine/vendor_defns/cswift.h
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
/* Attribution notice: Rainbow have generously allowed me to reproduce
|
||||||
|
* the necessary definitions here from their API. This means the support
|
||||||
|
* can build independently of whether application builders have the
|
||||||
|
* API or hardware. This will allow developers to easily produce software
|
||||||
|
* that has latent hardware support for any users that have accelertors
|
||||||
|
* installed, without the developers themselves needing anything extra.
|
||||||
|
*
|
||||||
|
* I have only clipped the parts from the CryptoSwift header files that
|
||||||
|
* are (or seem) relevant to the CryptoSwift support code. This is
|
||||||
|
* simply to keep the file sizes reasonable.
|
||||||
|
* [Geoff]
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* NB: These type widths do *not* seem right in general, in particular
|
||||||
|
* they're not terribly friendly to 64-bit architectures (unsigned long)
|
||||||
|
* will be 64-bit on IA-64 for a start. I'm leaving these alone as they
|
||||||
|
* agree with Rainbow's API and this will only be called into question
|
||||||
|
* on platforms with Rainbow support anyway! ;-) */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
typedef long SW_STATUS; /* status */
|
||||||
|
typedef unsigned char SW_BYTE; /* 8 bit byte */
|
||||||
|
typedef unsigned short SW_U16; /* 16 bit number */
|
||||||
|
#if defined(_IRIX)
|
||||||
|
#include <sgidefs.h>
|
||||||
|
typedef __uint32_t SW_U32;
|
||||||
|
#else
|
||||||
|
typedef unsigned long SW_U32; /* 32 bit integer */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(WIN32)
|
||||||
|
typedef struct _SW_U64 {
|
||||||
|
SW_U32 low32;
|
||||||
|
SW_U32 high32;
|
||||||
|
} SW_U64; /* 64 bit integer */
|
||||||
|
#elif defined(MAC)
|
||||||
|
typedef longlong SW_U64
|
||||||
|
#else /* Unix variants */
|
||||||
|
typedef struct _SW_U64 {
|
||||||
|
SW_U32 low32;
|
||||||
|
SW_U32 high32;
|
||||||
|
} SW_U64; /* 64 bit integer */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* status codes */
|
||||||
|
#define SW_OK (0L)
|
||||||
|
#define SW_ERR_BASE (-10000L)
|
||||||
|
#define SW_ERR_NO_CARD (SW_ERR_BASE-1) /* The Card is not present */
|
||||||
|
#define SW_ERR_CARD_NOT_READY (SW_ERR_BASE-2) /* The card has not powered */
|
||||||
|
/* up yet */
|
||||||
|
#define SW_ERR_TIME_OUT (SW_ERR_BASE-3) /* Execution of a command */
|
||||||
|
/* time out */
|
||||||
|
#define SW_ERR_NO_EXECUTE (SW_ERR_BASE-4) /* The Card failed to */
|
||||||
|
/* execute the command */
|
||||||
|
#define SW_ERR_INPUT_NULL_PTR (SW_ERR_BASE-5) /* a required pointer is */
|
||||||
|
/* NULL */
|
||||||
|
#define SW_ERR_INPUT_SIZE (SW_ERR_BASE-6) /* size is invalid, too */
|
||||||
|
/* small, too large. */
|
||||||
|
#define SW_ERR_INVALID_HANDLE (SW_ERR_BASE-7) /* Invalid SW_ACC_CONTEXT */
|
||||||
|
/* handle */
|
||||||
|
#define SW_ERR_PENDING (SW_ERR_BASE-8) /* A request is already out- */
|
||||||
|
/* standing at this */
|
||||||
|
/* context handle */
|
||||||
|
#define SW_ERR_AVAILABLE (SW_ERR_BASE-9) /* A result is available. */
|
||||||
|
#define SW_ERR_NO_PENDING (SW_ERR_BASE-10)/* No request is pending. */
|
||||||
|
#define SW_ERR_NO_MEMORY (SW_ERR_BASE-11)/* Not enough memory */
|
||||||
|
#define SW_ERR_BAD_ALGORITHM (SW_ERR_BASE-12)/* Invalid algorithm type */
|
||||||
|
/* in SW_PARAM structure */
|
||||||
|
#define SW_ERR_MISSING_KEY (SW_ERR_BASE-13)/* No key is associated with */
|
||||||
|
/* context. */
|
||||||
|
/* swAttachKeyParam() is */
|
||||||
|
/* not called. */
|
||||||
|
#define SW_ERR_KEY_CMD_MISMATCH \
|
||||||
|
(SW_ERR_BASE-14)/* Cannot perform requested */
|
||||||
|
/* SW_COMMAND_CODE since */
|
||||||
|
/* key attached via */
|
||||||
|
/* swAttachKeyParam() */
|
||||||
|
/* cannot be used for this*/
|
||||||
|
/* SW_COMMAND_CODE. */
|
||||||
|
#define SW_ERR_NOT_IMPLEMENTED \
|
||||||
|
(SW_ERR_BASE-15)/* Not implemented */
|
||||||
|
#define SW_ERR_BAD_COMMAND (SW_ERR_BASE-16)/* Bad command code */
|
||||||
|
#define SW_ERR_BAD_ITEM_SIZE (SW_ERR_BASE-17)/* too small or too large in */
|
||||||
|
/* the "initems" or */
|
||||||
|
/* "outitems". */
|
||||||
|
#define SW_ERR_BAD_ACCNUM (SW_ERR_BASE-18)/* Bad accelerator number */
|
||||||
|
#define SW_ERR_SELFTEST_FAIL (SW_ERR_BASE-19)/* At least one of the self */
|
||||||
|
/* test fail, look at the */
|
||||||
|
/* selfTestBitmap in */
|
||||||
|
/* SW_ACCELERATOR_INFO for*/
|
||||||
|
/* details. */
|
||||||
|
#define SW_ERR_MISALIGN (SW_ERR_BASE-20)/* Certain alogrithms require*/
|
||||||
|
/* key materials aligned */
|
||||||
|
/* in certain order, e.g. */
|
||||||
|
/* 128 bit for CRT */
|
||||||
|
#define SW_ERR_OUTPUT_NULL_PTR \
|
||||||
|
(SW_ERR_BASE-21)/* a required pointer is */
|
||||||
|
/* NULL */
|
||||||
|
#define SW_ERR_OUTPUT_SIZE \
|
||||||
|
(SW_ERR_BASE-22)/* size is invalid, too */
|
||||||
|
/* small, too large. */
|
||||||
|
#define SW_ERR_FIRMWARE_CHECKSUM \
|
||||||
|
(SW_ERR_BASE-23)/* firmware checksum mismatch*/
|
||||||
|
/* download failed. */
|
||||||
|
#define SW_ERR_UNKNOWN_FIRMWARE \
|
||||||
|
(SW_ERR_BASE-24)/* unknown firmware error */
|
||||||
|
#define SW_ERR_INTERRUPT (SW_ERR_BASE-25)/* request is abort when */
|
||||||
|
/* it's waiting to be */
|
||||||
|
/* completed. */
|
||||||
|
#define SW_ERR_NVWRITE_FAIL (SW_ERR_BASE-26)/* error in writing to Non- */
|
||||||
|
/* volatile memory */
|
||||||
|
#define SW_ERR_NVWRITE_RANGE (SW_ERR_BASE-27)/* out of range error in */
|
||||||
|
/* writing to NV memory */
|
||||||
|
#define SW_ERR_RNG_ERROR (SW_ERR_BASE-28)/* Random Number Generation */
|
||||||
|
/* failure */
|
||||||
|
#define SW_ERR_DSS_FAILURE (SW_ERR_BASE-29)/* DSS Sign or Verify failure*/
|
||||||
|
#define SW_ERR_MODEXP_FAILURE (SW_ERR_BASE-30)/* Failure in various math */
|
||||||
|
/* calculations */
|
||||||
|
#define SW_ERR_ONBOARD_MEMORY (SW_ERR_BASE-31)/* Error in accessing on - */
|
||||||
|
/* board memory */
|
||||||
|
#define SW_ERR_FIRMWARE_VERSION \
|
||||||
|
(SW_ERR_BASE-32)/* Wrong version in firmware */
|
||||||
|
/* update */
|
||||||
|
#define SW_ERR_ZERO_WORKING_ACCELERATOR \
|
||||||
|
(SW_ERR_BASE-44)/* All accelerators are bad */
|
||||||
|
|
||||||
|
|
||||||
|
/* algorithm type */
|
||||||
|
#define SW_ALG_CRT 1
|
||||||
|
#define SW_ALG_EXP 2
|
||||||
|
#define SW_ALG_DSA 3
|
||||||
|
#define SW_ALG_NVDATA 4
|
||||||
|
|
||||||
|
/* command code */
|
||||||
|
#define SW_CMD_MODEXP_CRT 1 /* perform Modular Exponentiation using */
|
||||||
|
/* Chinese Remainder Theorem (CRT) */
|
||||||
|
#define SW_CMD_MODEXP 2 /* perform Modular Exponentiation */
|
||||||
|
#define SW_CMD_DSS_SIGN 3 /* perform DSS sign */
|
||||||
|
#define SW_CMD_DSS_VERIFY 4 /* perform DSS verify */
|
||||||
|
#define SW_CMD_RAND 5 /* perform random number generation */
|
||||||
|
#define SW_CMD_NVREAD 6 /* perform read to nonvolatile RAM */
|
||||||
|
#define SW_CMD_NVWRITE 7 /* perform write to nonvolatile RAM */
|
||||||
|
|
||||||
|
typedef SW_U32 SW_ALGTYPE; /* alogrithm type */
|
||||||
|
typedef SW_U32 SW_STATE; /* state */
|
||||||
|
typedef SW_U32 SW_COMMAND_CODE; /* command code */
|
||||||
|
typedef SW_U32 SW_COMMAND_BITMAP[4]; /* bitmap */
|
||||||
|
|
||||||
|
typedef struct _SW_LARGENUMBER {
|
||||||
|
SW_U32 nbytes; /* number of bytes in the buffer "value" */
|
||||||
|
SW_BYTE* value; /* the large integer as a string of */
|
||||||
|
/* bytes in network (big endian) order */
|
||||||
|
} SW_LARGENUMBER;
|
||||||
|
|
||||||
|
typedef struct _SW_CRT {
|
||||||
|
SW_LARGENUMBER p; /* prime number p */
|
||||||
|
SW_LARGENUMBER q; /* prime number q */
|
||||||
|
SW_LARGENUMBER dmp1; /* exponent1 */
|
||||||
|
SW_LARGENUMBER dmq1; /* exponent2 */
|
||||||
|
SW_LARGENUMBER iqmp; /* CRT coefficient */
|
||||||
|
} SW_CRT;
|
||||||
|
|
||||||
|
typedef struct _SW_EXP {
|
||||||
|
SW_LARGENUMBER modulus; /* modulus */
|
||||||
|
SW_LARGENUMBER exponent;/* exponent */
|
||||||
|
} SW_EXP;
|
||||||
|
|
||||||
|
typedef struct _SW_DSA {
|
||||||
|
SW_LARGENUMBER p; /* */
|
||||||
|
SW_LARGENUMBER q; /* */
|
||||||
|
SW_LARGENUMBER g; /* */
|
||||||
|
SW_LARGENUMBER key; /* private/public key */
|
||||||
|
} SW_DSA;
|
||||||
|
|
||||||
|
typedef struct _SW_NVDATA {
|
||||||
|
SW_U32 accnum; /* accelerator board number */
|
||||||
|
SW_U32 offset; /* offset in byte */
|
||||||
|
} SW_NVDATA;
|
||||||
|
|
||||||
|
typedef struct _SW_PARAM {
|
||||||
|
SW_ALGTYPE type; /* type of the alogrithm */
|
||||||
|
union {
|
||||||
|
SW_CRT crt;
|
||||||
|
SW_EXP exp;
|
||||||
|
SW_DSA dsa;
|
||||||
|
SW_NVDATA nvdata;
|
||||||
|
} up;
|
||||||
|
} SW_PARAM;
|
||||||
|
|
||||||
|
typedef SW_U32 SW_CONTEXT_HANDLE; /* opaque context handle */
|
||||||
|
|
||||||
|
|
||||||
|
/* Now the OpenSSL bits, these function types are the for the function
|
||||||
|
* pointers that will bound into the Rainbow shared libraries. */
|
||||||
|
typedef SW_STATUS t_swAcquireAccContext(SW_CONTEXT_HANDLE *hac);
|
||||||
|
typedef SW_STATUS t_swAttachKeyParam(SW_CONTEXT_HANDLE hac,
|
||||||
|
SW_PARAM *key_params);
|
||||||
|
typedef SW_STATUS t_swSimpleRequest(SW_CONTEXT_HANDLE hac,
|
||||||
|
SW_COMMAND_CODE cmd,
|
||||||
|
SW_LARGENUMBER pin[],
|
||||||
|
SW_U32 pin_count,
|
||||||
|
SW_LARGENUMBER pout[],
|
||||||
|
SW_U32 pout_count);
|
||||||
|
typedef SW_STATUS t_swReleaseAccContext(SW_CONTEXT_HANDLE hac);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
476
crypto/engine/vendor_defns/hwcryptohook.h
Normal file
476
crypto/engine/vendor_defns/hwcryptohook.h
Normal file
@@ -0,0 +1,476 @@
|
|||||||
|
/*
|
||||||
|
* ModExp / RSA (with/without KM) plugin API
|
||||||
|
*
|
||||||
|
* The application will load a dynamic library which
|
||||||
|
* exports entrypoint(s) defined in this file.
|
||||||
|
*
|
||||||
|
* This set of entrypoints provides only a multithreaded,
|
||||||
|
* synchronous-within-each-thread, facility.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* This file is Copyright 1998-1999 nCipher Corporation Limited.
|
||||||
|
*
|
||||||
|
* This file is provided for your information and assistance. You are
|
||||||
|
* permitted to copy it verbatim, to use it to create compatible
|
||||||
|
* software, and for review and comment. However, you may not
|
||||||
|
* distribute changed versions or other derivative works. All other
|
||||||
|
* rights are reserved.
|
||||||
|
*
|
||||||
|
* IN NO EVENT SHALL NCIPHER CORPORATION LIMITED (`NCIPHER') AND/OR
|
||||||
|
* ANY OTHER AUTHORS OR DISTRIBUTORS OF THIS FILE BE LIABLE for any
|
||||||
|
* damages arising directly or indirectly from this file, its use or
|
||||||
|
* this licence. Without prejudice to the generality of the
|
||||||
|
* foregoing: all liability shall be excluded for direct, indirect,
|
||||||
|
* special, incidental, consequential or other damages or any loss of
|
||||||
|
* profits, business, revenue goodwill or anticipated savings;
|
||||||
|
* liability shall be excluded even if nCipher or anyone else has been
|
||||||
|
* advised of the possibility of damage. In any event, if the
|
||||||
|
* exclusion of liability is not effective, the liability of nCipher
|
||||||
|
* or any author or distributor shall be limited to the lesser of the
|
||||||
|
* price paid and 1,000 pounds sterling. This licence only fails to
|
||||||
|
* exclude or limit liability for death or personal injury arising out
|
||||||
|
* of negligence, and only to the extent that such an exclusion or
|
||||||
|
* limitation is not effective.
|
||||||
|
*
|
||||||
|
* NCIPHER AND THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ALL
|
||||||
|
* AND ANY WARRANTIES (WHETHER EXPRESS OR IMPLIED), including, but not
|
||||||
|
* limited to, any implied warranties of merchantability, fitness for
|
||||||
|
* a particular purpose, satisfactory quality, and/or non-infringement
|
||||||
|
* of any third party rights.
|
||||||
|
*
|
||||||
|
* US Government use: This software and documentation is Commercial
|
||||||
|
* Computer Software and Computer Software Documentation, as defined in
|
||||||
|
* sub-paragraphs (a)(1) and (a)(5) of DFAR 252.227-7014, "Rights in
|
||||||
|
* Noncommercial Computer Software and Noncommercial Computer Software
|
||||||
|
* Documentation." Use, duplication or disclosure by the Government is
|
||||||
|
* subject to the terms and conditions specified here.
|
||||||
|
*
|
||||||
|
* By using or distributing this file you will be accepting these
|
||||||
|
* terms and conditions, including the limitation of liability and
|
||||||
|
* lack of warranty. If you do not wish to accept these terms and
|
||||||
|
* conditions, DO NOT USE THE FILE.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* The actual dynamically loadable plugin, and the library files for
|
||||||
|
* static linking, which are also provided in this distribution, are
|
||||||
|
* not covered by the licence described above. You should have
|
||||||
|
* received a separate licence with terms and conditions for these
|
||||||
|
* library files; if you received the library files without a licence,
|
||||||
|
* please contact nCipher.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* $Id: hwcryptohook.h,v 1.1.2.1 2000/06/13 16:19:53 levitte Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef HWCRYPTOHOOK_H
|
||||||
|
#define HWCRYPTOHOOK_H
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifndef HWCRYPTOHOOK_DECLARE_APPTYPES
|
||||||
|
#define HWCRYPTOHOOK_DECLARE_APPTYPES 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define HWCRYPTOHOOK_ERROR_FAILED -1
|
||||||
|
#define HWCRYPTOHOOK_ERROR_FALLBACK -2
|
||||||
|
#define HWCRYPTOHOOK_ERROR_MPISIZE -3
|
||||||
|
|
||||||
|
#if HWCRYPTOHOOK_DECLARE_APPTYPES
|
||||||
|
|
||||||
|
/* These structs are defined by the application and opaque to the
|
||||||
|
* crypto plugin. The application may define these as it sees fit.
|
||||||
|
* Default declarations are provided here, but the application may
|
||||||
|
* #define HWCRYPTOHOOK_DECLARE_APPTYPES 0
|
||||||
|
* to prevent these declarations, and instead provide its own
|
||||||
|
* declarations of these types. (Pointers to them must still be
|
||||||
|
* ordinary pointers to structs or unions, or the resulting combined
|
||||||
|
* program will have a type inconsistency.)
|
||||||
|
*/
|
||||||
|
typedef struct HWCryptoHook_MutexValue HWCryptoHook_Mutex;
|
||||||
|
typedef struct HWCryptoHook_CondVarValue HWCryptoHook_CondVar;
|
||||||
|
typedef struct HWCryptoHook_PassphraseContextValue HWCryptoHook_PassphraseContext;
|
||||||
|
typedef struct HWCryptoHook_CallerContextValue HWCryptoHook_CallerContext;
|
||||||
|
|
||||||
|
#endif /* HWCRYPTOHOOK_DECLARE_APPTYPES */
|
||||||
|
|
||||||
|
/* These next two structs are opaque to the application. The crypto
|
||||||
|
* plugin will return pointers to them; the caller simply manipulates
|
||||||
|
* the pointers.
|
||||||
|
*/
|
||||||
|
typedef struct HWCryptoHook_Context *HWCryptoHook_ContextHandle;
|
||||||
|
typedef struct HWCryptoHook_RSAKey *HWCryptoHook_RSAKeyHandle;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *buf;
|
||||||
|
size_t size;
|
||||||
|
} HWCryptoHook_ErrMsgBuf;
|
||||||
|
/* Used for error reporting. When a HWCryptoHook function fails it
|
||||||
|
* will return a sentinel value (0 for pointer-valued functions, or a
|
||||||
|
* negative number, usually HWCRYPTOHOOK_ERROR_FAILED, for
|
||||||
|
* integer-valued ones). It will, if an ErrMsgBuf is passed, also put
|
||||||
|
* an error message there.
|
||||||
|
*
|
||||||
|
* size is the size of the buffer. When the buffer is filled, it will
|
||||||
|
* always be null-terminated. If you pass 0 buf buf you must pass 0
|
||||||
|
* for size, and nothing will be recorded (just as if you passed 0 for
|
||||||
|
* the struct pointer). Size will not be modified when an error is
|
||||||
|
* recorded. The buffer is always null-terminated even if there is an
|
||||||
|
* overrun.
|
||||||
|
*
|
||||||
|
* The contents of the buffer are not defined if there is no error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct HWCryptoHook_MPIStruct {
|
||||||
|
unsigned char *buf;
|
||||||
|
size_t size;
|
||||||
|
} HWCryptoHook_MPI;
|
||||||
|
/* When one of these is returned, a pointer is passed to the function.
|
||||||
|
* At call, size is the space available. Afterwards it is updated.
|
||||||
|
* buf (the pointer) is not updated. size is in bytes and may be
|
||||||
|
* zero, but must be a multiple of the limb size. Zero limbs at the
|
||||||
|
* MS end are not permitted.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define HWCryptoHook_InitFlags_FallbackModExp 0x0002UL
|
||||||
|
#define HWCryptoHook_InitFlags_FallbackRSAImmed 0x0004UL
|
||||||
|
/* Enable requesting fallback to software in case of problems with the
|
||||||
|
* hardware support. This indicates to the crypto provider that the
|
||||||
|
* application is prepared to fall back to software operation if the
|
||||||
|
* ModExp* or RSAImmed* functions return HWCRYPTOHOOK_ERROR_FALLBACK.
|
||||||
|
* Without this flag those calls will never return
|
||||||
|
* HWCRYPTOHOOK_ERROR_FALLBACK. The flag will also cause the crypto
|
||||||
|
* provider to avoid repeatedly attempting to contact dead hardware
|
||||||
|
* within a short interval, if appropriate.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define HWCryptoHook_InitFlags_SimpleForkCheck 0x0010UL
|
||||||
|
/* Without _SimpleForkCheck the library is allowed to assume that the
|
||||||
|
* application will not fork and call the library in the child(ren).
|
||||||
|
*
|
||||||
|
* When it is specified, this is allowed. However, after a fork
|
||||||
|
* neither parent nor child may unload any loaded keys or call
|
||||||
|
* _Finish. Instead, they should call exit (or die with a signal)
|
||||||
|
* without calling _Finish. After all the children have died the
|
||||||
|
* parent may unload keys or call _Finish.
|
||||||
|
*
|
||||||
|
* This flag only has any effect on UN*X platforms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned long flags;
|
||||||
|
void *logstream; /* usually a FILE*. See below. */
|
||||||
|
|
||||||
|
size_t limbsize; /* bignum format - size of radix type, must be power of 2 */
|
||||||
|
int mslimbfirst; /* 0 or 1 */
|
||||||
|
int msbytefirst; /* 0 or 1; -1 = native */
|
||||||
|
|
||||||
|
/* All the callback functions should return 0 on success, or a
|
||||||
|
* nonzero integer (whose value will be visible in the error message
|
||||||
|
* put in the buffer passed to the call).
|
||||||
|
*
|
||||||
|
* If a callback is not available pass a null function pointer.
|
||||||
|
*
|
||||||
|
* The callbacks may not call down again into the crypto plugin.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* For thread-safety. Set everything to 0 if you promise only to be
|
||||||
|
* singlethreaded. maxsimultaneous is the number of calls to
|
||||||
|
* ModExp[Crt]/RSAImmed{Priv,Pub}/RSA. If you don't know what to
|
||||||
|
* put there then say 0 and the hook library will use a default.
|
||||||
|
*
|
||||||
|
* maxmutexes is a small limit on the number of simultaneous mutexes
|
||||||
|
* which will be requested by the library. If there is no small
|
||||||
|
* limit, set it to 0. If the crypto plugin cannot create the
|
||||||
|
* advertised number of mutexes the calls to its functions may fail.
|
||||||
|
* If a low number of mutexes is advertised the plugin will try to
|
||||||
|
* do the best it can. Making larger numbers of mutexes available
|
||||||
|
* may improve performance and parallelism by reducing contention
|
||||||
|
* over critical sections. Unavailability of any mutexes, implying
|
||||||
|
* single-threaded operation, should be indicated by the setting
|
||||||
|
* mutex_init et al to 0.
|
||||||
|
*/
|
||||||
|
int maxmutexes;
|
||||||
|
int maxsimultaneous;
|
||||||
|
size_t mutexsize;
|
||||||
|
int (*mutex_init)(HWCryptoHook_Mutex*, HWCryptoHook_CallerContext *cactx);
|
||||||
|
int (*mutex_acquire)(HWCryptoHook_Mutex*);
|
||||||
|
void (*mutex_release)(HWCryptoHook_Mutex*);
|
||||||
|
void (*mutex_destroy)(HWCryptoHook_Mutex*);
|
||||||
|
|
||||||
|
/* For greater efficiency, can use condition vars internally for
|
||||||
|
* synchronisation. In this case maxsimultaneous is ignored, but
|
||||||
|
* the other mutex stuff must be available. In singlethreaded
|
||||||
|
* programs, set everything to 0.
|
||||||
|
*/
|
||||||
|
size_t condvarsize;
|
||||||
|
int (*condvar_init)(HWCryptoHook_CondVar*, HWCryptoHook_CallerContext *cactx);
|
||||||
|
int (*condvar_wait)(HWCryptoHook_CondVar*, HWCryptoHook_Mutex*);
|
||||||
|
void (*condvar_signal)(HWCryptoHook_CondVar*);
|
||||||
|
void (*condvar_broadcast)(HWCryptoHook_CondVar*);
|
||||||
|
void (*condvar_destroy)(HWCryptoHook_CondVar*);
|
||||||
|
|
||||||
|
/* The semantics of acquiring and releasing mutexes and broadcasting
|
||||||
|
* and waiting on condition variables are expected to be those from
|
||||||
|
* POSIX threads (pthreads). The mutexes may be (in pthread-speak)
|
||||||
|
* fast mutexes, recursive mutexes, or nonrecursive ones.
|
||||||
|
*
|
||||||
|
* The _release/_signal/_broadcast and _destroy functions must
|
||||||
|
* always succeed when given a valid argument; if they are given an
|
||||||
|
* invalid argument then the program (crypto plugin + application)
|
||||||
|
* has an internal error, and they should abort the program.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int (*getpassphrase)(const char *prompt_info,
|
||||||
|
int *len_io, char *buf,
|
||||||
|
HWCryptoHook_PassphraseContext *ppctx,
|
||||||
|
HWCryptoHook_CallerContext *cactx);
|
||||||
|
/* Passphrases and the prompt_info, if they contain high-bit-set
|
||||||
|
* characters, are UTF-8. The prompt_info may be a null pointer if
|
||||||
|
* no prompt information is available (it should not be an empty
|
||||||
|
* string). It will not contain text like `enter passphrase';
|
||||||
|
* instead it might say something like `Operator Card for John
|
||||||
|
* Smith' or `SmartCard in nFast Module #1, Slot #1'.
|
||||||
|
*
|
||||||
|
* buf points to a buffer in which to return the passphrase; on
|
||||||
|
* entry *len_io is the length of the buffer. It should be updated
|
||||||
|
* by the callback. The returned passphrase should not be
|
||||||
|
* null-terminated by the callback.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int (*getphystoken)(const char *prompt_info,
|
||||||
|
const char *wrong_info,
|
||||||
|
HWCryptoHook_PassphraseContext *ppctx,
|
||||||
|
HWCryptoHook_CallerContext *cactx);
|
||||||
|
/* Requests that the human user physically insert a different
|
||||||
|
* smartcard, DataKey, etc. The plugin should check whether the
|
||||||
|
* currently inserted token(s) are appropriate, and if they are it
|
||||||
|
* should not make this call.
|
||||||
|
*
|
||||||
|
* prompt_info is as before. wrong_info is a description of the
|
||||||
|
* currently inserted token(s) so that the user is told what
|
||||||
|
* something is. wrong_info, like prompt_info, may be null, but
|
||||||
|
* should not be an empty string. Its contents should be
|
||||||
|
* syntactically similar to that of prompt_info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Note that a single LoadKey operation might cause several calls to
|
||||||
|
* getpassphrase and/or requestphystoken. If requestphystoken is
|
||||||
|
* not provided (ie, a null pointer is passed) then the plugin may
|
||||||
|
* not support loading keys for which authorisation by several cards
|
||||||
|
* is required. If getpassphrase is not provided then cards with
|
||||||
|
* passphrases may not be supported.
|
||||||
|
*
|
||||||
|
* getpassphrase and getphystoken do not need to check that the
|
||||||
|
* passphrase has been entered correctly or the correct token
|
||||||
|
* inserted; the crypto plugin will do that. If this is not the
|
||||||
|
* case then the crypto plugin is responsible for calling these
|
||||||
|
* routines again as appropriate until the correct token(s) and
|
||||||
|
* passphrase(s) are supplied as required, or until any retry limits
|
||||||
|
* implemented by the crypto plugin are reached.
|
||||||
|
*
|
||||||
|
* In either case, the application must allow the user to say `no'
|
||||||
|
* or `cancel' to indicate that they do not know the passphrase or
|
||||||
|
* have the appropriate token; this should cause the callback to
|
||||||
|
* return nonzero indicating error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void (*logmessage)(void *logstream, const char *message);
|
||||||
|
/* A log message will be generated at least every time something goes
|
||||||
|
* wrong and an ErrMsgBuf is filled in (or would be if one was
|
||||||
|
* provided). Other diagnostic information may be written there too,
|
||||||
|
* including more detailed reasons for errors which are reported in an
|
||||||
|
* ErrMsgBuf.
|
||||||
|
*
|
||||||
|
* When a log message is generated, this callback is called. It
|
||||||
|
* should write a message to the relevant logging arrangements.
|
||||||
|
*
|
||||||
|
* The message string passed will be null-terminated and may be of arbitrary
|
||||||
|
* length. It will not be prefixed by the time and date, nor by the
|
||||||
|
* name of the library that is generating it - if this is required,
|
||||||
|
* the logmessage callback must do it. The message will not have a
|
||||||
|
* trailing newline (though it may contain internal newlines).
|
||||||
|
*
|
||||||
|
* If a null pointer is passed for logmessage a default function is
|
||||||
|
* used. The default function treats logstream as a FILE* which has
|
||||||
|
* been converted to a void*. If logstream is 0 it does nothing.
|
||||||
|
* Otherwise it prepends the date and time and library name and
|
||||||
|
* writes the message to logstream. Each line will be prefixed by a
|
||||||
|
* descriptive string containing the date, time and identity of the
|
||||||
|
* crypto plugin. Errors on the logstream are not reported
|
||||||
|
* anywhere, and the default function doesn't flush the stream, so
|
||||||
|
* the application must set the buffering how it wants it.
|
||||||
|
*
|
||||||
|
* The crypto plugin may also provide a facility to have copies of
|
||||||
|
* log messages sent elsewhere, and or for adjusting the verbosity
|
||||||
|
* of the log messages; any such facilities will be configured by
|
||||||
|
* external means.
|
||||||
|
*/
|
||||||
|
|
||||||
|
} HWCryptoHook_InitInfo;
|
||||||
|
|
||||||
|
typedef
|
||||||
|
HWCryptoHook_ContextHandle HWCryptoHook_Init_t(const HWCryptoHook_InitInfo *initinfo,
|
||||||
|
size_t initinfosize,
|
||||||
|
HWCryptoHook_ErrMsgBuf *errors,
|
||||||
|
HWCryptoHook_CallerContext *cactx);
|
||||||
|
extern HWCryptoHook_Init_t HWCryptoHook_Init;
|
||||||
|
|
||||||
|
/* Caller should set initinfosize to the size of the HWCryptoHook struct,
|
||||||
|
* so it can be extended later.
|
||||||
|
*
|
||||||
|
* On success, a message for display or logging by the server,
|
||||||
|
* including the name and version number of the plugin, will be filled
|
||||||
|
* in into *errors; on failure *errors is used for error handling, as
|
||||||
|
* usual.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* All these functions return 0 on success, HWCRYPTOHOOK_ERROR_FAILED
|
||||||
|
* on most failures. HWCRYPTOHOOK_ERROR_MPISIZE means at least one of
|
||||||
|
* the output MPI buffer(s) was too small; the sizes of all have been
|
||||||
|
* set to the desired size (and for those where the buffer was large
|
||||||
|
* enough, the value may have been copied in), and no error message
|
||||||
|
* has been recorded.
|
||||||
|
*
|
||||||
|
* You may pass 0 for the errors struct. In any case, unless you set
|
||||||
|
* _NoStderr at init time then messages may be reported to stderr.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* The RSAImmed* functions (and key managed RSA) only work with
|
||||||
|
* modules which have an RSA patent licence - currently that means KM
|
||||||
|
* units; the ModExp* ones work with all modules, so you need a patent
|
||||||
|
* licence in the software in the US.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef
|
||||||
|
void HWCryptoHook_Finish_t(HWCryptoHook_ContextHandle hwctx);
|
||||||
|
extern HWCryptoHook_Finish_t HWCryptoHook_Finish;
|
||||||
|
/* You must not have any calls going or keys loaded when you call this. */
|
||||||
|
|
||||||
|
typedef
|
||||||
|
int HWCryptoHook_RandomBytes_t(HWCryptoHook_ContextHandle hwctx,
|
||||||
|
unsigned char *buf, size_t len,
|
||||||
|
const HWCryptoHook_ErrMsgBuf *errors);
|
||||||
|
extern HWCryptoHook_RandomBytes_t HWCryptoHook_RandomBytes;
|
||||||
|
|
||||||
|
typedef
|
||||||
|
int HWCryptoHook_ModExp_t(HWCryptoHook_ContextHandle hwctx,
|
||||||
|
HWCryptoHook_MPI a,
|
||||||
|
HWCryptoHook_MPI p,
|
||||||
|
HWCryptoHook_MPI n,
|
||||||
|
HWCryptoHook_MPI *r,
|
||||||
|
const HWCryptoHook_ErrMsgBuf *errors);
|
||||||
|
extern HWCryptoHook_ModExp_t HWCryptoHook_ModExp;
|
||||||
|
|
||||||
|
typedef
|
||||||
|
int HWCryptoHook_RSAImmedPub_t(HWCryptoHook_ContextHandle hwctx,
|
||||||
|
HWCryptoHook_MPI m,
|
||||||
|
HWCryptoHook_MPI e,
|
||||||
|
HWCryptoHook_MPI n,
|
||||||
|
HWCryptoHook_MPI *r,
|
||||||
|
const HWCryptoHook_ErrMsgBuf *errors);
|
||||||
|
extern HWCryptoHook_RSAImmedPub_t HWCryptoHook_RSAImmedPub;
|
||||||
|
|
||||||
|
typedef
|
||||||
|
int HWCryptoHook_ModExpCRT_t(HWCryptoHook_ContextHandle hwctx,
|
||||||
|
HWCryptoHook_MPI a,
|
||||||
|
HWCryptoHook_MPI p,
|
||||||
|
HWCryptoHook_MPI q,
|
||||||
|
HWCryptoHook_MPI dmp1,
|
||||||
|
HWCryptoHook_MPI dmq1,
|
||||||
|
HWCryptoHook_MPI iqmp,
|
||||||
|
HWCryptoHook_MPI *r,
|
||||||
|
const HWCryptoHook_ErrMsgBuf *errors);
|
||||||
|
extern HWCryptoHook_ModExpCRT_t HWCryptoHook_ModExpCRT;
|
||||||
|
|
||||||
|
typedef
|
||||||
|
int HWCryptoHook_RSAImmedPriv_t(HWCryptoHook_ContextHandle hwctx,
|
||||||
|
HWCryptoHook_MPI m,
|
||||||
|
HWCryptoHook_MPI p,
|
||||||
|
HWCryptoHook_MPI q,
|
||||||
|
HWCryptoHook_MPI dmp1,
|
||||||
|
HWCryptoHook_MPI dmq1,
|
||||||
|
HWCryptoHook_MPI iqmp,
|
||||||
|
HWCryptoHook_MPI *r,
|
||||||
|
const HWCryptoHook_ErrMsgBuf *errors);
|
||||||
|
extern HWCryptoHook_RSAImmedPriv_t HWCryptoHook_RSAImmedPriv;
|
||||||
|
|
||||||
|
/* The RSAImmed* and ModExp* functions may return E_FAILED or
|
||||||
|
* E_FALLBACK for failure.
|
||||||
|
*
|
||||||
|
* E_FAILED means the failure is permanent and definite and there
|
||||||
|
* should be no attempt to fall back to software. (Eg, for some
|
||||||
|
* applications, which support only the acceleration-only
|
||||||
|
* functions, the `key material' may actually be an encoded key
|
||||||
|
* identifier, and doing the operation in software would give wrong
|
||||||
|
* answers.)
|
||||||
|
*
|
||||||
|
* E_FALLBACK means that doing the computation in software would seem
|
||||||
|
* reasonable. If an application pays attention to this and is
|
||||||
|
* able to fall back, it should also set the Fallback init flags.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef
|
||||||
|
int HWCryptoHook_RSALoadKey_t(HWCryptoHook_ContextHandle hwctx,
|
||||||
|
const char *key_ident,
|
||||||
|
HWCryptoHook_RSAKeyHandle *keyhandle_r,
|
||||||
|
const HWCryptoHook_ErrMsgBuf *errors,
|
||||||
|
HWCryptoHook_PassphraseContext *ppctx);
|
||||||
|
extern HWCryptoHook_RSALoadKey_t HWCryptoHook_RSALoadKey;
|
||||||
|
/* The key_ident is a null-terminated string configured by the
|
||||||
|
* user via the application's usual configuration mechanisms.
|
||||||
|
* It is provided to the user by the crypto provider's key management
|
||||||
|
* system. The user must be able to enter at least any string of between
|
||||||
|
* 1 and 1023 characters inclusive, consisting of printable 7-bit
|
||||||
|
* ASCII characters. The provider should avoid using
|
||||||
|
* any characters except alphanumerics and the punctuation
|
||||||
|
* characters _ - + . / @ ~ (the user is expected to be able
|
||||||
|
* to enter these without quoting). The string may be case-sensitive.
|
||||||
|
* The application may allow the user to enter other NULL-terminated strings,
|
||||||
|
* and the provider must cope (returning an error if the string is not
|
||||||
|
* valid).
|
||||||
|
*
|
||||||
|
* If the key does not exist, it is _not_ an error - in that case,
|
||||||
|
* keyhandle_r will be set to 0 instead of to a key handle.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef
|
||||||
|
int HWCryptoHook_RSAGetPublicKey_t(HWCryptoHook_RSAKeyHandle k,
|
||||||
|
HWCryptoHook_MPI *n,
|
||||||
|
HWCryptoHook_MPI *e,
|
||||||
|
const HWCryptoHook_ErrMsgBuf *errors);
|
||||||
|
extern HWCryptoHook_RSAGetPublicKey_t HWCryptoHook_RSAGetPublicKey;
|
||||||
|
/* The crypto plugin will not store certificates.
|
||||||
|
*
|
||||||
|
* Although this function for acquiring the public key value is
|
||||||
|
* provided, it is not the purpose of this API to deal fully with the
|
||||||
|
* handling of the public key.
|
||||||
|
*
|
||||||
|
* It is expected that the crypto supplier's key generation program
|
||||||
|
* will provide general facilities for producing X.509
|
||||||
|
* self-certificates and certificate requests in PEM format. These
|
||||||
|
* will be given to the user so that they can configure them in the
|
||||||
|
* application, send them to CAs, or whatever.
|
||||||
|
*
|
||||||
|
* In case this kind of certificate handling is not appropriate, the
|
||||||
|
* crypto supplier's key generation program should be able to be
|
||||||
|
* configured not to generate such a self-certificate or certificate
|
||||||
|
* request. Then the application will need to do all of this, and
|
||||||
|
* will need to store and handle the public key and certificates
|
||||||
|
* itself.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef
|
||||||
|
int HWCryptoHook_RSAUnloadKey_t(HWCryptoHook_RSAKeyHandle k,
|
||||||
|
const HWCryptoHook_ErrMsgBuf *errors);
|
||||||
|
extern HWCryptoHook_RSAUnloadKey_t HWCryptoHook_RSAUnloadKey;
|
||||||
|
/* Might fail due to locking problems, or other serious internal problems. */
|
||||||
|
|
||||||
|
typedef
|
||||||
|
int HWCryptoHook_RSA_t(HWCryptoHook_MPI m,
|
||||||
|
HWCryptoHook_RSAKeyHandle k,
|
||||||
|
HWCryptoHook_MPI *r,
|
||||||
|
const HWCryptoHook_ErrMsgBuf *errors);
|
||||||
|
extern HWCryptoHook_RSA_t HWCryptoHook_RSA;
|
||||||
|
|
||||||
|
#endif /*HWCRYPTOHOOK_H*/
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user