Compare commits
214 Commits
main
...
OpenSSL_1_
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c90c41f09d | ||
![]() |
c47b636a2c | ||
![]() |
7200b39ecd | ||
![]() |
84c95826de | ||
![]() |
63819e6f00 | ||
![]() |
8206dba75c | ||
![]() |
528ef87850 | ||
![]() |
9004c53107 | ||
![]() |
f47f99f295 | ||
![]() |
00f473b3cc | ||
![]() |
356de7146e | ||
![]() |
9eab925395 | ||
![]() |
22d89c501e | ||
![]() |
c06916db9f | ||
![]() |
ef7545a3e6 | ||
![]() |
fecb4ff331 | ||
![]() |
2a4adf19c8 | ||
![]() |
44c854ddb9 | ||
![]() |
47091035f1 | ||
![]() |
f3d51d7740 | ||
![]() |
70d3b4b653 | ||
![]() |
2fb94e4861 | ||
![]() |
1b84893905 | ||
![]() |
68b5330040 | ||
![]() |
da7ae62abd | ||
![]() |
f53337b89c | ||
![]() |
f70a5895e3 | ||
![]() |
d41bbd0db5 | ||
![]() |
49956294fc | ||
![]() |
48373e55d1 | ||
![]() |
42369021ed | ||
![]() |
b00fe7ce18 | ||
![]() |
872e3fd502 | ||
![]() |
c11ada6c99 | ||
![]() |
8f0968850b | ||
![]() |
0b96f60a56 | ||
![]() |
ab06ff6bee | ||
![]() |
bba8456e65 | ||
![]() |
b493a05720 | ||
![]() |
c2a8133d1c | ||
![]() |
e935440ad7 | ||
![]() |
8eaf563c41 | ||
![]() |
80d7e6b039 | ||
![]() |
9c44e33230 | ||
![]() |
b86f3197b7 | ||
![]() |
0875c00584 | ||
![]() |
dd3a770e07 | ||
![]() |
64763ce09b | ||
![]() |
2fffc29bd1 | ||
![]() |
d2650c3a4a | ||
![]() |
b5bd966ea4 | ||
![]() |
e71f7786e3 | ||
![]() |
e3b95e6b24 | ||
![]() |
658eeec7cd | ||
![]() |
e1c3d65f08 | ||
![]() |
2e4abe2ce2 | ||
![]() |
ea294bb50e | ||
![]() |
b58ea0b941 | ||
![]() |
16067fe5fd | ||
![]() |
f2e9070f26 | ||
![]() |
fe8629e1a5 | ||
![]() |
2a12eff4b2 | ||
![]() |
b680fef061 | ||
![]() |
7f7414e054 | ||
![]() |
8b9db484ed | ||
![]() |
f59f2fcbff | ||
![]() |
419a530194 | ||
![]() |
69a8901eb1 | ||
![]() |
2bcd08e691 | ||
![]() |
167d692925 | ||
![]() |
025ee1dbde | ||
![]() |
dce7b92d0b | ||
![]() |
db886c2a2b | ||
![]() |
4d43129446 | ||
![]() |
92107f8150 | ||
![]() |
e82d6a2019 | ||
![]() |
4e5755cd85 | ||
![]() |
dda8dcd2c0 | ||
![]() |
16646b0018 | ||
![]() |
320881c25c | ||
![]() |
1d23fb382e | ||
![]() |
c4f1942a76 | ||
![]() |
38c42c6eea | ||
![]() |
51eb247d0f | ||
![]() |
8d22673a62 | ||
![]() |
3622d3743e | ||
![]() |
fbbf28e7c2 | ||
![]() |
f5dac77c06 | ||
![]() |
067d72a082 | ||
![]() |
ac0f3f506a | ||
![]() |
f819147028 | ||
![]() |
a530963f05 | ||
![]() |
bc5a53f5e9 | ||
![]() |
83382fb9d5 | ||
![]() |
0674370017 | ||
![]() |
2f91cb2c5e | ||
![]() |
acb25c2327 | ||
![]() |
2d842a90f8 | ||
![]() |
80705bfc50 | ||
![]() |
2a8692311d | ||
![]() |
7d0ed89d57 | ||
![]() |
0912fae6ce | ||
![]() |
0bb2154ee9 | ||
![]() |
c9355e20c3 | ||
![]() |
6545372c24 | ||
![]() |
17f8412983 | ||
![]() |
d48df9a91b | ||
![]() |
65448fd0d3 | ||
![]() |
a677c87b7b | ||
![]() |
f8a123b4a2 | ||
![]() |
c64beae686 | ||
![]() |
99ef8323e4 | ||
![]() |
2668c58969 | ||
![]() |
5ae3168a77 | ||
![]() |
559579659c | ||
![]() |
2dd74160cc | ||
![]() |
2adf63272c | ||
![]() |
fb5a0fb8f1 | ||
![]() |
c222de16ce | ||
![]() |
19091ac236 | ||
![]() |
2fcf251d3d | ||
![]() |
dab5848cd9 | ||
![]() |
a02f0f3d69 | ||
![]() |
e69d49364e | ||
![]() |
38921f0abf | ||
![]() |
d76ce84c92 | ||
![]() |
c3c7a0d26e | ||
![]() |
d06bc800f2 | ||
![]() |
a01dc637bd | ||
![]() |
3bbbe757ea | ||
![]() |
76474e519f | ||
![]() |
420f572d49 | ||
![]() |
6d65d44b95 | ||
![]() |
91e1ff77a0 | ||
![]() |
c8e60ec8fa | ||
![]() |
e840570207 | ||
![]() |
077527f19e | ||
![]() |
00daa2e6c6 | ||
![]() |
000f221d60 | ||
![]() |
579a605494 | ||
![]() |
fa29ebd7ed | ||
![]() |
3360999046 | ||
![]() |
0b965e59cb | ||
![]() |
1684846f54 | ||
![]() |
dde6d9520c | ||
![]() |
f9a772b743 | ||
![]() |
0d6f7dbb50 | ||
![]() |
994a1ea900 | ||
![]() |
e5d1fd38d1 | ||
![]() |
a330ed26be | ||
![]() |
ca0a86c89d | ||
![]() |
1cf7bbce48 | ||
![]() |
4cdde22432 | ||
![]() |
a28cee6efe | ||
![]() |
1977bafba4 | ||
![]() |
3c96907f2b | ||
![]() |
2d96a30dc7 | ||
![]() |
c09d1df7d3 | ||
![]() |
c20dd45477 | ||
![]() |
abb320463d | ||
![]() |
ada3f8b5d3 | ||
![]() |
6172561597 | ||
![]() |
368b64d6dd | ||
![]() |
4ed0ca2b3e | ||
![]() |
a92f98c630 | ||
![]() |
4385b556b4 | ||
![]() |
5e7c9519b8 | ||
![]() |
ef02492908 | ||
![]() |
86d5f9ba4f | ||
![]() |
febcec6254 | ||
![]() |
f07cb1ce8e | ||
![]() |
b3c17a4805 | ||
![]() |
7b83fe34c0 | ||
![]() |
e0b1c57ae0 | ||
![]() |
6806b06d21 | ||
![]() |
0af0e9d747 | ||
![]() |
2191b3ba44 | ||
![]() |
73020a945b | ||
![]() |
9c2d0cd11c | ||
![]() |
0ef9b9c7bf | ||
![]() |
c14c6e996d | ||
![]() |
51381cd4ed | ||
![]() |
8c9ab050e5 | ||
![]() |
b6996c7849 | ||
![]() |
2c23b0716e | ||
![]() |
f548a0e4d5 | ||
![]() |
a404f63f92 | ||
![]() |
b54f50d277 | ||
![]() |
10ba241909 | ||
![]() |
1f238b1c4a | ||
![]() |
ef85bf8c2b | ||
![]() |
cbfccdb729 | ||
![]() |
94111aa401 | ||
![]() |
eec48070a1 | ||
![]() |
eebe668174 | ||
![]() |
8a15a4a7b4 | ||
![]() |
19057003f1 | ||
![]() |
031648d4ce | ||
![]() |
02bee340a2 | ||
![]() |
f6f2f68a05 | ||
![]() |
982d68a0c0 | ||
![]() |
7585a86a76 | ||
![]() |
73190f1b46 | ||
![]() |
6673ac592a | ||
![]() |
59aa655b53 | ||
![]() |
c4c99b4961 | ||
![]() |
ccbbcddd5f | ||
![]() |
65d82478d8 | ||
![]() |
02a6518a02 | ||
![]() |
a79053511b | ||
![]() |
eb56eb2279 | ||
![]() |
d40f6d4a02 | ||
![]() |
943ae0951a | ||
![]() |
999eeaba14 |
25
ACKNOWLEDGMENTS
Normal file
25
ACKNOWLEDGMENTS
Normal file
@ -0,0 +1,25 @@
|
||||
The OpenSSL project depends on volunteer efforts and financial support from
|
||||
the end user community. That support comes in the form of donations and paid
|
||||
sponsorships, software support contracts, paid consulting services
|
||||
and commissioned software development.
|
||||
|
||||
Since all these activities support the continued development and improvement
|
||||
of OpenSSL we consider all these clients and customers as sponsors of the
|
||||
OpenSSL project.
|
||||
|
||||
We would like to identify and thank the following such sponsors for their past
|
||||
or current significant support of the OpenSSL project:
|
||||
|
||||
Very significant support:
|
||||
|
||||
OpenGear: www.opengear.com
|
||||
|
||||
Significant support:
|
||||
|
||||
PSW Group: www.psw.net
|
||||
|
||||
Please note that we ask permission to identify sponsors and that some sponsors
|
||||
we consider eligible for inclusion here have requested to remain anonymous.
|
||||
|
||||
Additional sponsorship or financial support is always welcome: for more
|
||||
information please contact the OpenSSL Software Foundation.
|
213
CHANGES
213
CHANGES
@ -2,9 +2,120 @@
|
||||
OpenSSL CHANGES
|
||||
_______________
|
||||
|
||||
Changes between 1.0.0a and 1.0.0b [xx XXX xxxx]
|
||||
Changes between 1.0.0e and 1.0.0f [4 Jan 2012]
|
||||
|
||||
*)
|
||||
*) Nadhem Alfardan and Kenny Paterson have discovered an extension
|
||||
of the Vaudenay padding oracle attack on CBC mode encryption
|
||||
which enables an efficient plaintext recovery attack against
|
||||
the OpenSSL implementation of DTLS. Their attack exploits timing
|
||||
differences arising during decryption processing. A research
|
||||
paper describing this attack can be found at:
|
||||
http://www.isg.rhul.ac.uk/~kp/dtls.pdf
|
||||
Thanks go to Nadhem Alfardan and Kenny Paterson of the Information
|
||||
Security Group at Royal Holloway, University of London
|
||||
(www.isg.rhul.ac.uk) for discovering this flaw and to Robin Seggelmann
|
||||
<seggelmann@fh-muenster.de> and Michael Tuexen <tuexen@fh-muenster.de>
|
||||
for preparing the fix. (CVE-2011-4108)
|
||||
[Robin Seggelmann, Michael Tuexen]
|
||||
|
||||
*) Clear bytes used for block padding of SSL 3.0 records.
|
||||
(CVE-2011-4576)
|
||||
[Adam Langley (Google)]
|
||||
|
||||
*) Only allow one SGC handshake restart for SSL/TLS. (CVE-2011-4619)
|
||||
[Adam Langley (Google)]
|
||||
|
||||
*) Check parameters are not NULL in GOST ENGINE. (CVE-2012-0027)
|
||||
[Andrey Kulikov <amdeich@gmail.com>]
|
||||
|
||||
*) Prevent malformed RFC3779 data triggering an assertion failure.
|
||||
Thanks to Andrew Chi, BBN Technologies, for discovering the flaw
|
||||
and Rob Austein <sra@hactrn.net> for fixing it. (CVE-2011-4577)
|
||||
[Rob Austein <sra@hactrn.net>]
|
||||
|
||||
*) Improved PRNG seeding for VOS.
|
||||
[Paul Green <Paul.Green@stratus.com>]
|
||||
|
||||
*) Fix ssl_ciph.c set-up race.
|
||||
[Adam Langley (Google)]
|
||||
|
||||
*) Fix spurious failures in ecdsatest.c.
|
||||
[Emilia Käsper (Google)]
|
||||
|
||||
*) Fix the BIO_f_buffer() implementation (which was mixing different
|
||||
interpretations of the '..._len' fields).
|
||||
[Adam Langley (Google)]
|
||||
|
||||
*) Fix handling of BN_BLINDING: now BN_BLINDING_invert_ex (rather than
|
||||
BN_BLINDING_invert_ex) calls BN_BLINDING_update, ensuring that concurrent
|
||||
threads won't reuse the same blinding coefficients.
|
||||
|
||||
This also avoids the need to obtain the CRYPTO_LOCK_RSA_BLINDING
|
||||
lock to call BN_BLINDING_invert_ex, and avoids one use of
|
||||
BN_BLINDING_update for each BN_BLINDING structure (previously,
|
||||
the last update always remained unused).
|
||||
[Emilia Käsper (Google)]
|
||||
|
||||
*) In ssl3_clear, preserve s3->init_extra along with s3->rbuf.
|
||||
[Bob Buckholz (Google)]
|
||||
|
||||
Changes between 1.0.0d and 1.0.0e [6 Sep 2011]
|
||||
|
||||
*) Fix bug where CRLs with nextUpdate in the past are sometimes accepted
|
||||
by initialising X509_STORE_CTX properly. (CVE-2011-3207)
|
||||
[Kaspar Brand <ossl@velox.ch>]
|
||||
|
||||
*) Fix SSL memory handling for (EC)DH ciphersuites, in particular
|
||||
for multi-threaded use of ECDH. (CVE-2011-3210)
|
||||
[Adam Langley (Google)]
|
||||
|
||||
*) Fix x509_name_ex_d2i memory leak on bad inputs.
|
||||
[Bodo Moeller]
|
||||
|
||||
*) Remove hard coded ecdsaWithSHA1 signature tests in ssl code and check
|
||||
signature public key algorithm by using OID xref utilities instead.
|
||||
Before this you could only use some ECC ciphersuites with SHA1 only.
|
||||
[Steve Henson]
|
||||
|
||||
*) Add protection against ECDSA timing attacks as mentioned in the paper
|
||||
by Billy Bob Brumley and Nicola Tuveri, see:
|
||||
|
||||
http://eprint.iacr.org/2011/232.pdf
|
||||
|
||||
[Billy Bob Brumley and Nicola Tuveri]
|
||||
|
||||
Changes between 1.0.0c and 1.0.0d [8 Feb 2011]
|
||||
|
||||
*) Fix parsing of OCSP stapling ClientHello extension. CVE-2011-0014
|
||||
[Neel Mehta, Adam Langley, Bodo Moeller (Google)]
|
||||
|
||||
*) Fix bug in string printing code: if *any* escaping is enabled we must
|
||||
escape the escape character (backslash) or the resulting string is
|
||||
ambiguous.
|
||||
[Steve Henson]
|
||||
|
||||
Changes between 1.0.0b and 1.0.0c [2 Dec 2010]
|
||||
|
||||
*) Disable code workaround for ancient and obsolete Netscape browsers
|
||||
and servers: an attacker can use it in a ciphersuite downgrade attack.
|
||||
Thanks to Martin Rex for discovering this bug. CVE-2010-4180
|
||||
[Steve Henson]
|
||||
|
||||
*) Fixed J-PAKE implementation error, originally discovered by
|
||||
Sebastien Martini, further info and confirmation from Stefan
|
||||
Arentz and Feng Hao. Note that this fix is a security fix. CVE-2010-4252
|
||||
[Ben Laurie]
|
||||
|
||||
Changes between 1.0.0a and 1.0.0b [16 Nov 2010]
|
||||
|
||||
*) Fix extension code to avoid race conditions which can result in a buffer
|
||||
overrun vulnerability: resumed sessions must not be modified as they can
|
||||
be shared by multiple threads. CVE-2010-3864
|
||||
[Steve Henson]
|
||||
|
||||
*) Fix WIN32 build system to correctly link an ENGINE directory into
|
||||
a DLL.
|
||||
[Steve Henson]
|
||||
|
||||
Changes between 1.0.0 and 1.0.0a [01 Jun 2010]
|
||||
|
||||
@ -853,7 +964,93 @@
|
||||
*) Change 'Configure' script to enable Camellia by default.
|
||||
[NTT]
|
||||
|
||||
Changes between 0.9.8n and 0.9.8o [xx XXX xxxx]
|
||||
Changes between 0.9.8r and 0.9.8s [xx XXX xxxx]
|
||||
|
||||
*) Fix ssl_ciph.c set-up race.
|
||||
[Adam Langley (Google)]
|
||||
|
||||
*) Fix spurious failures in ecdsatest.c.
|
||||
[Emilia Käsper (Google)]
|
||||
|
||||
*) Fix the BIO_f_buffer() implementation (which was mixing different
|
||||
interpretations of the '..._len' fields).
|
||||
[Adam Langley (Google)]
|
||||
|
||||
*) Fix handling of BN_BLINDING: now BN_BLINDING_invert_ex (rather than
|
||||
BN_BLINDING_invert_ex) calls BN_BLINDING_update, ensuring that concurrent
|
||||
threads won't reuse the same blinding coefficients.
|
||||
|
||||
This also avoids the need to obtain the CRYPTO_LOCK_RSA_BLINDING
|
||||
lock to call BN_BLINDING_invert_ex, and avoids one use of
|
||||
BN_BLINDING_update for each BN_BLINDING structure (previously,
|
||||
the last update always remained unused).
|
||||
[Emilia Käsper (Google)]
|
||||
|
||||
*) Fix SSL memory handling for (EC)DH ciphersuites, in particular
|
||||
for multi-threaded use of ECDH.
|
||||
[Adam Langley (Google)]
|
||||
|
||||
*) Fix x509_name_ex_d2i memory leak on bad inputs.
|
||||
[Bodo Moeller]
|
||||
|
||||
*) Add protection against ECDSA timing attacks as mentioned in the paper
|
||||
by Billy Bob Brumley and Nicola Tuveri, see:
|
||||
|
||||
http://eprint.iacr.org/2011/232.pdf
|
||||
|
||||
[Billy Bob Brumley and Nicola Tuveri]
|
||||
|
||||
Changes between 0.9.8q and 0.9.8r [8 Feb 2011]
|
||||
|
||||
*) Fix parsing of OCSP stapling ClientHello extension. CVE-2011-0014
|
||||
[Neel Mehta, Adam Langley, Bodo Moeller (Google)]
|
||||
|
||||
*) Fix bug in string printing code: if *any* escaping is enabled we must
|
||||
escape the escape character (backslash) or the resulting string is
|
||||
ambiguous.
|
||||
[Steve Henson]
|
||||
|
||||
Changes between 0.9.8p and 0.9.8q [2 Dec 2010]
|
||||
|
||||
*) Disable code workaround for ancient and obsolete Netscape browsers
|
||||
and servers: an attacker can use it in a ciphersuite downgrade attack.
|
||||
Thanks to Martin Rex for discovering this bug. CVE-2010-4180
|
||||
[Steve Henson]
|
||||
|
||||
*) Fixed J-PAKE implementation error, originally discovered by
|
||||
Sebastien Martini, further info and confirmation from Stefan
|
||||
Arentz and Feng Hao. Note that this fix is a security fix. CVE-2010-4252
|
||||
[Ben Laurie]
|
||||
|
||||
Changes between 0.9.8o and 0.9.8p [16 Nov 2010]
|
||||
|
||||
*) Fix extension code to avoid race conditions which can result in a buffer
|
||||
overrun vulnerability: resumed sessions must not be modified as they can
|
||||
be shared by multiple threads. CVE-2010-3864
|
||||
[Steve Henson]
|
||||
|
||||
*) Fix for double free bug in ssl/s3_clnt.c CVE-2010-2939
|
||||
[Steve Henson]
|
||||
|
||||
*) Don't reencode certificate when calculating signature: cache and use
|
||||
the original encoding instead. This makes signature verification of
|
||||
some broken encodings work correctly.
|
||||
[Steve Henson]
|
||||
|
||||
*) ec2_GF2m_simple_mul bugfix: compute correct result if the output EC_POINT
|
||||
is also one of the inputs.
|
||||
[Emilia Käsper <emilia.kasper@esat.kuleuven.be> (Google)]
|
||||
|
||||
*) Don't repeatedly append PBE algorithms to table if they already exist.
|
||||
Sort table on each new add. This effectively makes the table read only
|
||||
after all algorithms are added and subsequent calls to PKCS12_pbe_add
|
||||
etc are non-op.
|
||||
[Steve Henson]
|
||||
|
||||
Changes between 0.9.8n and 0.9.8o [01 Jun 2010]
|
||||
|
||||
[NB: OpenSSL 0.9.8o and later 0.9.8 patch levels were released after
|
||||
OpenSSL 1.0.0.]
|
||||
|
||||
*) Correct a typo in the CMS ASN1 module which can result in invalid memory
|
||||
access or freeing data twice (CVE-2010-0742)
|
||||
@ -864,6 +1061,12 @@
|
||||
SSL_library_init and not OpenSSL_add_all_algorithms() will fail.
|
||||
[Steve Henson]
|
||||
|
||||
*) VMS fixes:
|
||||
Reduce copying into .apps and .test in makevms.com
|
||||
Don't try to use blank CA certificate in CA.com
|
||||
Allow use of C files from original directories in maketests.com
|
||||
[Steven M. Schweda" <sms@antinode.info>]
|
||||
|
||||
Changes between 0.9.8m and 0.9.8n [24 Mar 2010]
|
||||
|
||||
*) When rejecting SSL/TLS records due to an incorrect version number, never
|
||||
@ -872,8 +1075,8 @@
|
||||
- OpenSSL 0.9.8f if 'short' is longer than 16 bits,
|
||||
the previous behavior could result in a read attempt at NULL when
|
||||
receiving specific incorrect SSL/TLS records once record payload
|
||||
protection is active. (CVE-2010-####)
|
||||
[Bodo Moeller, Adam Langley]
|
||||
protection is active. (CVE-2010-0740)
|
||||
[Bodo Moeller, Adam Langley <agl@chromium.org>]
|
||||
|
||||
*) Fix for CVE-2010-0433 where some kerberos enabled versions of OpenSSL
|
||||
could be crashed if the relevant tables were not present (e.g. chrooted).
|
||||
|
21
Configure
21
Configure
@ -196,8 +196,8 @@ my %table=(
|
||||
"cc", "cc:-O::(unknown)::::::",
|
||||
|
||||
####VOS Configurations
|
||||
"vos-gcc","gcc:-O3 -Wall -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
|
||||
"debug-vos-gcc","gcc:-O0 -g -Wall -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
|
||||
"vos-gcc","gcc:-O3 -Wall -DOPENSSL_SYSNAME_VOS -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
|
||||
"debug-vos-gcc","gcc:-O0 -g -Wall -DOPENSSL_SYSNAME_VOS -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
|
||||
|
||||
#### Solaris x86 with GNU C setups
|
||||
# -DOPENSSL_NO_INLINE_ASM switches off inline assembler. We have to do it
|
||||
@ -492,6 +492,8 @@ my %table=(
|
||||
# Win64 targets, WIN64I denotes IA-64 and WIN64A - AMD64
|
||||
"VC-WIN64I","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ias:win32",
|
||||
"VC-WIN64A","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64A::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:x86_64cpuid.o:bn_asm.o x86_64-mont.o::aes-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o:auto:win32",
|
||||
"debug-VC-WIN64I","cl:-W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ias:win32",
|
||||
"debug-VC-WIN64A","cl:-W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64A::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:x86_64cpuid.o:bn_asm.o x86_64-mont.o::aes-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o:auto:win32",
|
||||
# x86 Win32 target defaults to ANSI API, if you want UNICODE, complement
|
||||
# 'perl Configure VC-WIN32' with '-DUNICODE -D_UNICODE'
|
||||
"VC-WIN32","cl:-W3 -WX -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32",
|
||||
@ -551,7 +553,7 @@ my %table=(
|
||||
"darwin64-ppc-cc","cc:-arch ppc64 -O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc64_asm}:osx64:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
|
||||
"darwin-i386-cc","cc:-arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
|
||||
"debug-darwin-i386-cc","cc:-arch i386 -g3 -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
|
||||
"darwin64-x86_64-cc","cc:-arch x86_64 -O3 -DL_ENDIAN -DMD32_REG_T=int -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
|
||||
"darwin64-x86_64-cc","cc:-arch x86_64 -O3 -DL_ENDIAN -DMD32_REG_T=int -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
|
||||
"debug-darwin-ppc-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DB_ENDIAN -g -Wall -O::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
|
||||
|
||||
##### A/UX
|
||||
@ -583,6 +585,7 @@ my %table=(
|
||||
);
|
||||
|
||||
my @MK1MF_Builds=qw(VC-WIN64I VC-WIN64A
|
||||
debug-VC-WIN64I debug-VC-WIN64A
|
||||
VC-NT VC-CE VC-WIN32 debug-VC-WIN32
|
||||
BC-32
|
||||
netware-clib netware-clib-bsdsock
|
||||
@ -1093,6 +1096,12 @@ my $ar = $ENV{'AR'} || "ar";
|
||||
my $arflags = $fields[$idx_arflags];
|
||||
my $multilib = $fields[$idx_multilib];
|
||||
|
||||
# if $prefix/lib$multilib is not an existing directory, then
|
||||
# assume that it's not searched by linker automatically, in
|
||||
# which case adding $multilib suffix causes more grief than
|
||||
# we're ready to tolerate, so don't...
|
||||
$multilib="" if !-d "$prefix/lib$multilib";
|
||||
|
||||
$libdir="lib$multilib" if $libdir eq "";
|
||||
|
||||
$cflags = "$cflags$exp_cflags";
|
||||
@ -1102,6 +1111,12 @@ my ($prelflags,$postlflags)=split('%',$lflags);
|
||||
if (defined($postlflags)) { $lflags=$postlflags; }
|
||||
else { $lflags=$prelflags; undef $prelflags; }
|
||||
|
||||
if ($target =~ /^mingw/ && `$cc --target-help 2>&1` !~ m/\-mno\-cygwin/m)
|
||||
{
|
||||
$cflags =~ s/\-mno\-cygwin\s*//;
|
||||
$shared_ldflag =~ s/\-mno\-cygwin\s*//;
|
||||
}
|
||||
|
||||
my $no_shared_warn=0;
|
||||
my $no_user_cflags=0;
|
||||
|
||||
|
53
FAQ
53
FAQ
@ -52,6 +52,9 @@ OpenSSL - Frequently Asked Questions
|
||||
* Why does the OpenSSL test suite fail in sha512t on x86 CPU?
|
||||
* Why does compiler fail to compile sha512.c?
|
||||
* Test suite still fails, what to do?
|
||||
* I think I've found a bug, what should I do?
|
||||
* I'm SURE I've found a bug, how do I report it?
|
||||
* I've found a security issue, how do I report it?
|
||||
|
||||
[PROG] Questions about programming with OpenSSL
|
||||
|
||||
@ -79,7 +82,7 @@ OpenSSL - Frequently Asked Questions
|
||||
* Which is the current version of OpenSSL?
|
||||
|
||||
The current version is available from <URL: http://www.openssl.org>.
|
||||
OpenSSL 1.0.0a was released on Jun 1st, 2010.
|
||||
OpenSSL 1.0.0f was released on Jan 4th, 2012.
|
||||
|
||||
In addition to the current stable release, you can also access daily
|
||||
snapshots of the OpenSSL development version at <URL:
|
||||
@ -131,7 +134,7 @@ OpenSSL. Information on the OpenSSL mailing lists is available from
|
||||
* Where can I get a compiled version of OpenSSL?
|
||||
|
||||
You can finder pointers to binary distributions in
|
||||
http://www.openssl.org/related/binaries.html .
|
||||
<URL: http://www.openssl.org/related/binaries.html> .
|
||||
|
||||
Some applications that use OpenSSL are distributed in binary form.
|
||||
When using such an application, you don't need to install OpenSSL
|
||||
@ -463,7 +466,7 @@ administrators.
|
||||
Other projects do have other policies so you can for example extract the CA
|
||||
bundle used by Mozilla and/or modssl as described in this article:
|
||||
|
||||
http://www.mail-archive.com/modssl-users@modssl.org/msg16980.html
|
||||
<URL: http://www.mail-archive.com/modssl-users@modssl.org/msg16980.html>
|
||||
|
||||
|
||||
[BUILD] =======================================================================
|
||||
@ -505,7 +508,7 @@ when you run the test suite (using "make test"). The message returned is
|
||||
"bc: 1 not implemented".
|
||||
|
||||
The best way to deal with this is to find another implementation of bc
|
||||
and compile/install it. GNU bc (see http://www.gnu.org/software/software.html
|
||||
and compile/install it. GNU bc (see <URL: http://www.gnu.org/software/software.html>
|
||||
for download instructions) can be safely used, for example.
|
||||
|
||||
|
||||
@ -516,7 +519,7 @@ that the OpenSSL bntest throws at it. This gets triggered when you run the
|
||||
test suite (using "make test"). The message returned is "bc: stack empty".
|
||||
|
||||
The best way to deal with this is to find another implementation of bc
|
||||
and compile/install it. GNU bc (see http://www.gnu.org/software/software.html
|
||||
and compile/install it. GNU bc (see <URL: http://www.gnu.org/software/software.html>
|
||||
for download instructions) can be safely used, for example.
|
||||
|
||||
|
||||
@ -709,6 +712,46 @@ never make sense, and tend to emerge when you least expect them. In order
|
||||
to identify one, drop optimization level, e.g. by editing CFLAG line in
|
||||
top-level Makefile, recompile and re-run the test.
|
||||
|
||||
* I think I've found a bug, what should I do?
|
||||
|
||||
If you are a new user then it is quite likely you haven't found a bug and
|
||||
something is happening you aren't familiar with. Check this FAQ, the associated
|
||||
documentation and the mailing lists for similar queries. If you are still
|
||||
unsure whether it is a bug or not submit a query to the openssl-users mailing
|
||||
list.
|
||||
|
||||
|
||||
* I'm SURE I've found a bug, how do I report it?
|
||||
|
||||
Bug reports with no security implications should be sent to the request
|
||||
tracker. This can be done by mailing the report to <rt@openssl.org> (or its
|
||||
alias <openssl-bugs@openssl.org>), please note that messages sent to the
|
||||
request tracker also appear in the public openssl-dev mailing list.
|
||||
|
||||
The report should be in plain text. Any patches should be sent as
|
||||
plain text attachments because some mailers corrupt patches sent inline.
|
||||
If your issue affects multiple versions of OpenSSL check any patches apply
|
||||
cleanly and, if possible include patches to each affected version.
|
||||
|
||||
The report should be given a meaningful subject line briefly summarising the
|
||||
issue. Just "bug in OpenSSL" or "bug in OpenSSL 0.9.8n" is not very helpful.
|
||||
|
||||
By sending reports to the request tracker the bug can then be given a priority
|
||||
and assigned to the appropriate maintainer. The history of discussions can be
|
||||
accessed and if the issue has been addressed or a reason why not. If patches
|
||||
are only sent to openssl-dev they can be mislaid if a team member has to
|
||||
wade through months of old messages to review the discussion.
|
||||
|
||||
See also <URL: http://www.openssl.org/support/rt.html>
|
||||
|
||||
|
||||
* I've found a security issue, how do I report it?
|
||||
|
||||
If you think your bug has security implications then please send it to
|
||||
openssl-security@openssl.org if you don't get a prompt reply at least
|
||||
acknowledging receipt then resend or mail it directly to one of the
|
||||
more active team members (e.g. Steve).
|
||||
|
||||
[PROG] ========================================================================
|
||||
|
||||
* Is OpenSSL thread-safe?
|
||||
|
52
INSTALL.VMS
52
INSTALL.VMS
@ -71,7 +71,7 @@ the top to understand how to use them. However, if you want to
|
||||
compile all you can get, the simplest is to use MAKEVMS.COM in the top
|
||||
directory. The syntax is the following:
|
||||
|
||||
@MAKEVMS <option> <rsaref-p> <debug-p> [<compiler>]
|
||||
@MAKEVMS <option> <bits> <debug-p> [<compiler>]
|
||||
|
||||
<option> must be one of the following:
|
||||
|
||||
@ -87,24 +87,11 @@ directory. The syntax is the following:
|
||||
TEST Just build the "[.xxx.EXE.TEST]" test programs for OpenSSL.
|
||||
APPS Just build the "[.xxx.EXE.APPS]" application programs for OpenSSL.
|
||||
|
||||
<rsaref-p> must be one of the following:
|
||||
<bits> must be one of the following:
|
||||
|
||||
RSAREF compile using the RSAREF Library
|
||||
NORSAREF compile without using RSAREF
|
||||
|
||||
Note 0: The RSAREF library IS NO LONGER NEEDED. The RSA patent
|
||||
expires September 20, 2000, and RSA Security chose to make
|
||||
the algorithm public domain two weeks before that.
|
||||
|
||||
Note 1: If you still want to use RSAREF, the library is NOT INCLUDED
|
||||
and you have to download it. RSA Security doesn't carry it
|
||||
any more, but there are a number of places where you can find
|
||||
it. You have to get the ".tar-Z" file as the ".zip" file
|
||||
doesn't have the directory structure stored. You have to
|
||||
extract the file into the [.RSAREF] directory as that is where
|
||||
the scripts will look for the files.
|
||||
|
||||
Note 2: I have never done this, so I've no idea if it works or not.
|
||||
"" compile using default pointer size
|
||||
32 compile using 32 bit pointer size
|
||||
64 compile using 64 bit pointer size
|
||||
|
||||
<debug-p> must be one of the following:
|
||||
|
||||
@ -117,12 +104,13 @@ Note 2: I have never done this, so I've no idea if it works or not.
|
||||
GNUC For GNU C.
|
||||
|
||||
|
||||
You will find the crypto library in [.xxx.EXE.CRYPTO], called LIBCRYPTO.OLB,
|
||||
where xxx is VAX or AXP. You will find the SSL library in [.xxx.EXE.SSL],
|
||||
named LIBSSL.OLB, and you will find a bunch of useful programs in
|
||||
[.xxx.EXE.APPS]. However, these shouldn't be used right off unless it's
|
||||
just to test them. For production use, make sure you install first, see
|
||||
Installation below.
|
||||
You will find the crypto library in [.xxx.EXE.CRYPTO] (where xxx is VAX,
|
||||
ALPHA or IA64), called SSL_LIBCRYPTO32.OLB or SSL_LIBCRYPTO.OLB depending
|
||||
on how it was built. You will find the SSL library in [.xxx.EXE.SSL],
|
||||
named SSL_LIBSSL32.OLB or SSL_LIBSSL.OLB, and you will find a bunch of
|
||||
useful programs in [.xxx.EXE.APPS]. However, these shouldn't be used
|
||||
right off unless it's just to test them. For production use, make sure
|
||||
you install first, see Installation below.
|
||||
|
||||
Note 1: Some programs in this package require a TCP/IP library.
|
||||
|
||||
@ -170,12 +158,14 @@ Installation:
|
||||
|
||||
Installation is easy, just do the following:
|
||||
|
||||
@INSTALL <root>
|
||||
@INSTALL <root> <bits>
|
||||
|
||||
<root> is the directory in which everything will be installed,
|
||||
subdirectories, libraries, header files, programs and startup command
|
||||
procedures.
|
||||
|
||||
<bits> works the same way as for MAKEVMS.COM
|
||||
|
||||
N.B.: INSTALL.COM builds a new directory structure, different from
|
||||
the directory tree where you have now build OpenSSL.
|
||||
|
||||
@ -196,6 +186,10 @@ following command procedures:
|
||||
sets up the symbols to the applications. Should be called
|
||||
from for example SYS$MANAGER:SYLOGIN.COM
|
||||
|
||||
OPENSSL_UNDO.COM
|
||||
|
||||
deassigns the logical names created with OPENSSL_STARTUP.COM.
|
||||
|
||||
The logical names that are set up are the following:
|
||||
|
||||
SSLROOT a dotted concealed logical name pointing at the
|
||||
@ -203,7 +197,6 @@ The logical names that are set up are the following:
|
||||
|
||||
SSLCERTS Initially an empty directory, this is the default
|
||||
location for certificate files.
|
||||
SSLMISC Various scripts.
|
||||
SSLPRIVATE Initially an empty directory, this is the default
|
||||
location for private key files.
|
||||
|
||||
@ -211,8 +204,9 @@ The logical names that are set up are the following:
|
||||
programs.
|
||||
SSLINCLUDE Contains the header files needed if you want to
|
||||
compile programs with libcrypto or libssl.
|
||||
SSLLIB Contains the OpenSSL library files (LIBCRYPTO.OLB
|
||||
and LIBSSL.OLB) themselves.
|
||||
SSLLIB Contains the OpenSSL library files themselves:
|
||||
- SSL_LIBCRYPTO32.OLB and SSL_LIBSSL32.OLB or
|
||||
- SSL_LIBCRYPTO.OLB and SSL_LIBSSL.OLB
|
||||
|
||||
OPENSSL Same as SSLINCLUDE. This is because the standard
|
||||
way to include OpenSSL header files from version
|
||||
@ -296,4 +290,4 @@ have any ideas.
|
||||
|
||||
--
|
||||
Richard Levitte <richard@levitte.org>
|
||||
2000-02-27
|
||||
2000-02-27, 2011-03-18
|
||||
|
22
INSTALL.W32
22
INSTALL.W32
@ -185,6 +185,15 @@
|
||||
required. Run the installers and do whatever magic they say it takes
|
||||
to start MSYS bash shell with GNU tools on its PATH.
|
||||
|
||||
N.B. Since source tar-ball can contain symbolic links, it's essential
|
||||
that you use accompanying MSYS tar to unpack the source. It will
|
||||
either handle them in one way or another or fail to extract them,
|
||||
which does the trick too. Latter means that you may safely ignore all
|
||||
"cannot create symlink" messages, as they will be "re-created" at
|
||||
configure stage by copying corresponding files. Alternative programs
|
||||
were observed to create empty files instead, which results in build
|
||||
failure.
|
||||
|
||||
* Compile OpenSSL:
|
||||
|
||||
$ ./config
|
||||
@ -297,7 +306,18 @@
|
||||
desktop, which is not available to service processes. The toolkit is
|
||||
designed to detect in which context it's currently executed, GUI,
|
||||
console app or service, and act accordingly, namely whether or not to
|
||||
actually make GUI calls.
|
||||
actually make GUI calls. Additionally those who wish to
|
||||
/DELAYLOAD:GDI32.DLL and /DELAYLOAD:USER32.DLL and actually keep them
|
||||
off service process should consider implementing and exporting from
|
||||
.exe image in question own _OPENSSL_isservice not relying on USER32.DLL.
|
||||
E.g., on Windows Vista and later you could:
|
||||
|
||||
__declspec(dllexport) __cdecl BOOL _OPENSSL_isservice(void)
|
||||
{ DWORD sess;
|
||||
if (ProcessIdToSessionId(GetCurrentProcessId(),&sess))
|
||||
return sess==0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
If you link with OpenSSL .DLLs, then you're expected to include into
|
||||
your application code small "shim" snippet, which provides glue between
|
||||
|
2
LICENSE
2
LICENSE
@ -12,7 +12,7 @@
|
||||
---------------
|
||||
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1998-2008 The OpenSSL Project. All rights reserved.
|
||||
* Copyright (c) 1998-2011 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
|
||||
|
@ -135,7 +135,7 @@ LINK_SO_A_VIA_O= \
|
||||
ALL=$$ALLSYMSFLAGS; ALLSYMSFLAGS=; NOALLSYMSFLAGS=; \
|
||||
( $(SET_X); \
|
||||
ld $(LDFLAGS) -r -o lib$(LIBNAME).o $$ALL lib$(LIBNAME).a $(LIBEXTRAS) ); \
|
||||
$(LINK_SO) && rm -f $(LIBNAME).o
|
||||
$(LINK_SO) && rm -f lib$(LIBNAME).o
|
||||
|
||||
LINK_SO_A_UNPACKED= \
|
||||
UNPACKDIR=link_tmp.$$$$; rm -rf $$UNPACKDIR; mkdir $$UNPACKDIR; \
|
||||
@ -207,17 +207,29 @@ link_app.bsd:
|
||||
fi; $(LINK_APP)
|
||||
|
||||
# For Darwin AKA Mac OS/X (dyld)
|
||||
# link_o.darwin produces .so, because we let it use dso_dlfcn module,
|
||||
# which has .so extension hard-coded. One can argue that one should
|
||||
# develop special dso module for MacOS X. At least manual encourages
|
||||
# to use native NSModule(3) API and refers to dlfcn as termporary hack.
|
||||
# Originally link_o.darwin produced .so, because it was hard-coded
|
||||
# in dso_dlfcn module. At later point dso_dlfcn switched to .dylib
|
||||
# extension in order to allow for run-time linking with vendor-
|
||||
# supplied shared libraries such as libz, so that link_o.darwin had
|
||||
# to be harmonized with it. This caused minor controversy, because
|
||||
# it was believed that dlopen can't be used to dynamically load
|
||||
# .dylib-s, only so called bundle modules (ones linked with -bundle
|
||||
# flag). The belief seems to be originating from pre-10.4 release,
|
||||
# where dlfcn functionality was emulated by dlcompat add-on. In
|
||||
# 10.4 dlopen was rewritten as native part of dyld and is documented
|
||||
# to be capable of loading both dynamic libraries and bundles. In
|
||||
# order to provide compatibility with pre-10.4 dlopen, modules are
|
||||
# linked with -bundle flag, which makes .dylib extension misleading.
|
||||
# It works, because dlopen is [and always was] extension-agnostic.
|
||||
# Alternative to this heuristic approach is to develop specific
|
||||
# MacOS X dso module relying on whichever "native" dyld interface.
|
||||
link_o.darwin:
|
||||
@ $(CALC_VERSIONS); \
|
||||
SHLIB=lib$(LIBNAME); \
|
||||
SHLIB_SUFFIX=.so; \
|
||||
SHLIB_SUFFIX=.dylib; \
|
||||
ALLSYMSFLAGS='-all_load'; \
|
||||
NOALLSYMSFLAGS=''; \
|
||||
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS)"; \
|
||||
SHAREDFLAGS="$(CFLAGS) `echo $(SHARED_LDFLAGS) | sed s/dynamiclib/bundle/`"; \
|
||||
if [ -n "$(LIBVERSION)" ]; then \
|
||||
SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \
|
||||
fi; \
|
||||
|
49
NEWS
49
NEWS
@ -5,12 +5,46 @@
|
||||
This file gives a brief overview of the major changes between each OpenSSL
|
||||
release. For more details please read the CHANGES file.
|
||||
|
||||
Major changes between OpenSSL 1.0.0e and OpenSSL 1.0.0f:
|
||||
|
||||
o Fix for DTLS plaintext recovery attack CVE-2011-4108
|
||||
o Clear block padding bytes of SSL 3.0 records CVE-2011-4576
|
||||
o Only allow one SGC handshake restart for SSL/TLS CVE-2011-4619
|
||||
o Check parameters are not NULL in GOST ENGINE CVE-2012-0027
|
||||
o Check for malformed RFC3779 data CVE-2011-4577
|
||||
|
||||
Major changes between OpenSSL 1.0.0d and OpenSSL 1.0.0e:
|
||||
|
||||
o Fix for CRL vulnerability issue CVE-2011-3207
|
||||
o Fix for ECDH crashes CVE-2011-3210
|
||||
o Protection against EC timing attacks.
|
||||
o Support ECDH ciphersuites for certificates using SHA2 algorithms.
|
||||
o Various DTLS fixes.
|
||||
|
||||
Major changes between OpenSSL 1.0.0c and OpenSSL 1.0.0d:
|
||||
|
||||
o Fix for security issue CVE-2011-0014
|
||||
|
||||
Major changes between OpenSSL 1.0.0b and OpenSSL 1.0.0c:
|
||||
|
||||
o Fix for security issue CVE-2010-4180
|
||||
o Fix for CVE-2010-4252
|
||||
o Fix mishandling of absent EC point format extension.
|
||||
o Fix various platform compilation issues.
|
||||
o Corrected fix for security issue CVE-2010-3864.
|
||||
|
||||
Major changes between OpenSSL 1.0.0a and OpenSSL 1.0.0b:
|
||||
|
||||
o Fix for security issue CVE-2010-3864.
|
||||
o Fix for CVE-2010-2939
|
||||
o Fix WIN32 build system for GOST ENGINE.
|
||||
|
||||
Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a:
|
||||
|
||||
o Fix for security issue CVE-2010-1633.
|
||||
o GOST MAC and CFB fixes.
|
||||
|
||||
Major changes between OpenSSL 0.9.8n and OpenSSL 1.0:
|
||||
Major changes between OpenSSL 0.9.8n and OpenSSL 1.0.0:
|
||||
|
||||
o RFC3280 path validation: sufficient to process PKITS tests.
|
||||
o Integrated support for PVK files and keyblobs.
|
||||
@ -33,6 +67,19 @@
|
||||
o Opaque PRF Input TLS extension support.
|
||||
o Updated time routines to avoid OS limitations.
|
||||
|
||||
Major changes between OpenSSL 0.9.8q and OpenSSL 0.9.8r:
|
||||
|
||||
o Fix for security issue CVE-2011-0014
|
||||
|
||||
Major changes between OpenSSL 0.9.8p and OpenSSL 0.9.8q:
|
||||
|
||||
o Fix for security issue CVE-2010-4180
|
||||
o Fix for CVE-2010-4252
|
||||
|
||||
Major changes between OpenSSL 0.9.8o and OpenSSL 0.9.8p:
|
||||
|
||||
o Fix for security issue CVE-2010-3864.
|
||||
|
||||
Major changes between OpenSSL 0.9.8n and OpenSSL 0.9.8o:
|
||||
|
||||
o Fix for security issue CVE-2010-0742.
|
||||
|
4
PROBLEMS
4
PROBLEMS
@ -36,7 +36,9 @@ may differ on your machine.
|
||||
|
||||
|
||||
As long as Apple doesn't fix the problem with ld, this problem building
|
||||
OpenSSL will remain as is.
|
||||
OpenSSL will remain as is. Well, the problem was addressed in 0.9.8f by
|
||||
passing -Wl,-search_paths_first, but it's unknown if the flag was
|
||||
supported from the initial MacOS X release.
|
||||
|
||||
|
||||
* Parallell make leads to errors
|
||||
|
4
README
4
README
@ -1,7 +1,7 @@
|
||||
|
||||
OpenSSL 1.0.0b-dev
|
||||
OpenSSL 1.0.0f 4 Jan 2012
|
||||
|
||||
Copyright (c) 1998-2010 The OpenSSL Project
|
||||
Copyright (c) 1998-2011 The OpenSSL Project
|
||||
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
|
||||
All rights reserved.
|
||||
|
||||
|
12
STATUS
12
STATUS
@ -1,12 +1,22 @@
|
||||
|
||||
OpenSSL STATUS Last modified at
|
||||
______________ $Date: 2010/06/01 13:31:36 $
|
||||
______________ $Date: 2012/01/04 17:01:30 $
|
||||
|
||||
DEVELOPMENT STATE
|
||||
|
||||
o OpenSSL 1.1.0: Under development...
|
||||
o OpenSSL 1.0.1: Under development...
|
||||
o OpenSSL 1.0.0f: Released on January 4th, 2012
|
||||
o OpenSSL 1.0.0e: Released on September 6th, 2011
|
||||
o OpenSSL 1.0.0d: Released on February 8nd, 2011
|
||||
o OpenSSL 1.0.0c: Released on December 2nd, 2010
|
||||
o OpenSSL 1.0.0b: Released on November 16th, 2010
|
||||
o OpenSSL 1.0.0a: Released on June 1st, 2010
|
||||
o OpenSSL 1.0.0: Released on March 29th, 2010
|
||||
o OpenSSL 0.9.8r: Released on February 8nd, 2011
|
||||
o OpenSSL 0.9.8q: Released on December 2nd, 2010
|
||||
o OpenSSL 0.9.8p: Released on November 16th, 2010
|
||||
o OpenSSL 0.9.8o: Released on June 1st, 2010
|
||||
o OpenSSL 0.9.8n: Released on March 24th, 2010
|
||||
o OpenSSL 0.9.8m: Released on February 25th, 2010
|
||||
o OpenSSL 0.9.8l: Released on November 5th, 2009
|
||||
|
68
TABLE
68
TABLE
@ -1287,7 +1287,7 @@ $bf_obj =
|
||||
$md5_obj = md5-x86_64.o
|
||||
$sha1_obj = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
|
||||
$cast_obj =
|
||||
$rc4_obj = rc4-x86_64.o
|
||||
$rc4_obj =
|
||||
$rmd160_obj =
|
||||
$rc5_obj =
|
||||
$wp_obj = wp-x86_64.o
|
||||
@ -1426,6 +1426,68 @@ $ranlib =
|
||||
$arflags =
|
||||
$multilib =
|
||||
|
||||
*** debug-VC-WIN64A
|
||||
$cc = cl
|
||||
$cflags = -W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE
|
||||
$unistd =
|
||||
$thread_cflag =
|
||||
$sys_id = WIN64A
|
||||
$lflags =
|
||||
$bn_ops = SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN
|
||||
$cpuid_obj = x86_64cpuid.o
|
||||
$bn_obj = bn_asm.o x86_64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes-x86_64.o
|
||||
$bf_obj =
|
||||
$md5_obj = md5-x86_64.o
|
||||
$sha1_obj = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
|
||||
$cast_obj =
|
||||
$rc4_obj = rc4-x86_64.o
|
||||
$rmd160_obj =
|
||||
$rc5_obj =
|
||||
$wp_obj = wp-x86_64.o
|
||||
$cmll_obj = cmll-x86_64.o cmll_misc.o
|
||||
$perlasm_scheme = auto
|
||||
$dso_scheme = win32
|
||||
$shared_target=
|
||||
$shared_cflag =
|
||||
$shared_ldflag =
|
||||
$shared_extension =
|
||||
$ranlib =
|
||||
$arflags =
|
||||
$multilib =
|
||||
|
||||
*** debug-VC-WIN64I
|
||||
$cc = cl
|
||||
$cflags = -W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE
|
||||
$unistd =
|
||||
$thread_cflag =
|
||||
$sys_id = WIN64I
|
||||
$lflags =
|
||||
$bn_ops = SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN
|
||||
$cpuid_obj = ia64cpuid.o
|
||||
$bn_obj = ia64.o
|
||||
$des_obj =
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ia64.o
|
||||
$bf_obj =
|
||||
$md5_obj = md5-ia64.o
|
||||
$sha1_obj = sha1-ia64.o sha256-ia64.o sha512-ia64.o
|
||||
$cast_obj =
|
||||
$rc4_obj =
|
||||
$rmd160_obj =
|
||||
$rc5_obj =
|
||||
$wp_obj =
|
||||
$cmll_obj =
|
||||
$perlasm_scheme = ias
|
||||
$dso_scheme = win32
|
||||
$shared_target=
|
||||
$shared_cflag =
|
||||
$shared_ldflag =
|
||||
$shared_extension =
|
||||
$ranlib =
|
||||
$arflags =
|
||||
$multilib =
|
||||
|
||||
*** debug-ben
|
||||
$cc = gcc
|
||||
$cflags = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DDEBUG_UNUSED -O2 -pedantic -Wall -Wshadow -Werror -pipe
|
||||
@ -2420,7 +2482,7 @@ $multilib =
|
||||
|
||||
*** debug-vos-gcc
|
||||
$cc = gcc
|
||||
$cflags = -O0 -g -Wall -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG
|
||||
$cflags = -O0 -g -Wall -DOPENSSL_SYSNAME_VOS -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG
|
||||
$unistd =
|
||||
$thread_cflag = (unknown)
|
||||
$sys_id = VOS
|
||||
@ -5241,7 +5303,7 @@ $multilib =
|
||||
|
||||
*** vos-gcc
|
||||
$cc = gcc
|
||||
$cflags = -O3 -Wall -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN
|
||||
$cflags = -O3 -Wall -DOPENSSL_SYSNAME_VOS -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN
|
||||
$unistd =
|
||||
$thread_cflag = (unknown)
|
||||
$sys_id = VOS
|
||||
|
67
VMS/install-vms.com
Executable file
67
VMS/install-vms.com
Executable file
@ -0,0 +1,67 @@
|
||||
$! install-vms.com -- Installs the files in a given directory tree
|
||||
$!
|
||||
$! Author: Richard Levitte <richard@levitte.org>
|
||||
$! Time of creation: 23-MAY-1998 19:22
|
||||
$!
|
||||
$! P1 root of the directory tree
|
||||
$!
|
||||
$!
|
||||
$! Announce/identify.
|
||||
$!
|
||||
$ proc = f$environment( "procedure")
|
||||
$ write sys$output "@@@ "+ -
|
||||
f$parse( proc, , , "name")+ f$parse( proc, , , "type")
|
||||
$!
|
||||
$ on error then goto tidy
|
||||
$ on control_c then goto tidy
|
||||
$!
|
||||
$ if p1 .eqs. ""
|
||||
$ then
|
||||
$ write sys$output "First argument missing."
|
||||
$ write sys$output -
|
||||
"Should be the directory where you want things installed."
|
||||
$ exit
|
||||
$ endif
|
||||
$
|
||||
$ if (f$getsyi( "cpu") .lt. 128)
|
||||
$ then
|
||||
$ arch = "VAX"
|
||||
$ else
|
||||
$ arch = f$edit( f$getsyi( "arch_name"), "upcase")
|
||||
$ if (arch .eqs. "") then arch = "UNK"
|
||||
$ endif
|
||||
$
|
||||
$ root = f$parse( P1, "[]A.;0", , , "SYNTAX_ONLY, NO_CONCEAL")- "A.;0"
|
||||
$ root_dev = f$parse( root, , , "device", "syntax_only")
|
||||
$ root_dir = f$parse( root, , , "directory", "syntax_only") - -
|
||||
"[000000." - "][" - "[" - "]"
|
||||
$ root = root_dev + "[" + root_dir
|
||||
$
|
||||
$ define /nolog wrk_sslroot 'root'.] /translation_attributes = concealed
|
||||
$ define /nolog wrk_sslinclude wrk_sslroot:[include]
|
||||
$
|
||||
$ if f$parse( "wrk_sslroot:[000000]") .eqs. "" then -
|
||||
create /directory /log wrk_sslroot:[000000]
|
||||
$ if f$parse( "wrk_sslinclude:") .eqs. "" then -
|
||||
create /directory /log wrk_sslinclude:
|
||||
$ if f$parse( "wrk_sslroot:[vms]") .eqs. "" then -
|
||||
create /directory /log wrk_sslroot:[vms]
|
||||
$!
|
||||
$ copy /log /protection = world:re openssl_startup.com wrk_sslroot:[vms]
|
||||
$ copy /log /protection = world:re openssl_undo.com wrk_sslroot:[vms]
|
||||
$ copy /log /protection = world:re openssl_utils.com wrk_sslroot:[vms]
|
||||
$!
|
||||
$ tidy:
|
||||
$!
|
||||
$ call deass wrk_sslroot
|
||||
$ call deass wrk_sslinclude
|
||||
$!
|
||||
$ exit
|
||||
$!
|
||||
$ deass: subroutine
|
||||
$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
|
||||
$ then
|
||||
$ deassign /process 'p1'
|
||||
$ endif
|
||||
$ endsubroutine
|
||||
$!
|
@ -1,79 +0,0 @@
|
||||
$! INSTALL.COM -- Installs the files in a given directory tree
|
||||
$!
|
||||
$! Author: Richard Levitte <richard@levitte.org>
|
||||
$! Time of creation: 23-MAY-1998 19:22
|
||||
$!
|
||||
$! P1 root of the directory tree
|
||||
$!
|
||||
$ IF P1 .EQS. ""
|
||||
$ THEN
|
||||
$ WRITE SYS$OUTPUT "First argument missing."
|
||||
$ WRITE SYS$OUTPUT "Should be the directory where you want things installed."
|
||||
$ EXIT
|
||||
$ ENDIF
|
||||
$
|
||||
$ IF (F$GETSYI("CPU").LT.128)
|
||||
$ THEN
|
||||
$ ARCH := VAX
|
||||
$ ELSE
|
||||
$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
|
||||
$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
|
||||
$ ENDIF
|
||||
$
|
||||
$ ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
|
||||
$ ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
|
||||
$ ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
|
||||
- "[000000." - "][" - "[" - "]"
|
||||
$ ROOT = ROOT_DEV + "[" + ROOT_DIR
|
||||
$
|
||||
$ DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
|
||||
$ DEFINE/NOLOG WRK_SSLINCLUDE WRK_SSLROOT:[INCLUDE]
|
||||
$
|
||||
$ IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
|
||||
CREATE/DIR/LOG WRK_SSLROOT:[000000]
|
||||
$ IF F$PARSE("WRK_SSLINCLUDE:") .EQS. "" THEN -
|
||||
CREATE/DIR/LOG WRK_SSLINCLUDE:
|
||||
$ IF F$PARSE("WRK_SSLROOT:[VMS]") .EQS. "" THEN -
|
||||
CREATE/DIR/LOG WRK_SSLROOT:[VMS]
|
||||
$
|
||||
$ IF F$SEARCH("WRK_SSLINCLUDE:vms_idhacks.h") .NES. "" THEN -
|
||||
DELETE WRK_SSLINCLUDE:vms_idhacks.h;*
|
||||
$
|
||||
$ OPEN/WRITE SF WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM
|
||||
$ WRITE SYS$OUTPUT "%OPEN-I-CREATED, ",F$SEARCH("WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM")," created."
|
||||
$ WRITE SF "$! Startup file for Openssl"
|
||||
$ WRITE SF "$!"
|
||||
$ WRITE SF "$! Do not edit this file, as it will be regenerated during next installation."
|
||||
$ WRITE SF "$! Instead, add or change SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"
|
||||
$ WRITE SF "$!"
|
||||
$ WRITE SF "$! P1 a qualifier to DEFINE. For example ""/SYSTEM"" to get the logical names"
|
||||
$ WRITE SF "$! defined in the system logical name table."
|
||||
$ WRITE SF "$!"
|
||||
$ WRITE SF "$ IF (F$GETSYI(""CPU"").LT.128)"
|
||||
$ WRITE SF "$ THEN"
|
||||
$ WRITE SF "$ ARCH := VAX"
|
||||
$ WRITE SF "$ ELSE"
|
||||
$ WRITE SF "$ ARCH = F$EDIT( F$GETSYI( ""ARCH_NAME""), ""UPCASE"")"
|
||||
$ WRITE SF "$ IF (ARCH .EQS. """") THEN ARCH = ""UNK"""
|
||||
$ WRITE SF "$ ENDIF"
|
||||
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLROOT ",ROOT,".] /TRANS=CONC"
|
||||
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLLIB SSLROOT:['ARCH'_LIB]"
|
||||
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLINCLUDE SSLROOT:[INCLUDE]"
|
||||
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLEXE SSLROOT:['ARCH'_EXE]"
|
||||
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLCERTS SSLROOT:[CERTS]"
|
||||
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLPRIVATE SSLROOT:[PRIVATE]"
|
||||
$ WRITE SF "$"
|
||||
$ WRITE SF "$! This is program can include <openssl/{foo}.h>"
|
||||
$ WRITE SF "$ DEFINE/NOLOG'P1 OPENSSL SSLINCLUDE:"
|
||||
$ WRITE SF "$"
|
||||
$ WRITE SF "$ IF F$SEARCH(""SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"") .NES."""" THEN -"
|
||||
$ WRITE SF " @SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"
|
||||
$ WRITE SF "$"
|
||||
$ WRITE SF "$ EXIT"
|
||||
$ CLOSE SF
|
||||
$ SET FILE/PROT=WORLD:RE WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM
|
||||
$
|
||||
$ COPY OPENSSL_UTILS.COM WRK_SSLROOT:[VMS]/LOG
|
||||
$ SET FILE/PROT=WORLD:RE WRK_SSLROOT:[VMS]OPENSSL_UTILS.COM
|
||||
$
|
||||
$ EXIT
|
261
VMS/mkshared.com
261
VMS/mkshared.com
@ -1,85 +1,166 @@
|
||||
$! MKSHARED.COM -- script to created shareable images on VMS
|
||||
$! MKSHARED.COM -- Create shareable images.
|
||||
$!
|
||||
$! No command line parameters. This should be run at the start of the source
|
||||
$! tree (the same directory where one finds INSTALL.VMS).
|
||||
$! P1: "64" for 64-bit pointers.
|
||||
$!
|
||||
$! Input: [.UTIL]LIBEAY.NUM,[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB
|
||||
$! [.UTIL]SSLEAY.NUM,[.xxx.EXE.SSL]LIBSSL.OLB
|
||||
$! Output: [.xxx.EXE.CRYPTO]LIBCRYPTO.OPT,.MAP,.EXE
|
||||
$! [.xxx.EXE.SSL]LIBSSL.OPT,.MAP,.EXE
|
||||
$! P2: Zlib object library path (optional).
|
||||
$!
|
||||
$! Input: [.UTIL]LIBEAY.NUM,[.xxx.EXE.CRYPTO]SSL_LIBCRYPTO[32].OLB
|
||||
$! [.UTIL]SSLEAY.NUM,[.xxx.EXE.SSL]SSL_LIBSSL[32].OLB
|
||||
$! [.CRYPTO.xxx]OPENSSLCONF.H
|
||||
$! Output: [.xxx.EXE.CRYPTO]SSL_LIBCRYPTO_SHR[32].OPT,.MAP,.EXE
|
||||
$! [.xxx.EXE.SSL]SSL_LIBSSL_SRH[32].OPT,.MAP,.EXE
|
||||
$!
|
||||
$! So far, tests have only been made on VMS for Alpha. VAX will come in time.
|
||||
$! ===========================================================================
|
||||
$
|
||||
$!
|
||||
$! Announce/identify.
|
||||
$!
|
||||
$ proc = f$environment( "procedure")
|
||||
$ write sys$output "@@@ "+ -
|
||||
f$parse( proc, , , "name")+ f$parse( proc, , , "type")
|
||||
$!
|
||||
$! Save the original default device:[directory].
|
||||
$!
|
||||
$ def_orig = f$environment( "default")
|
||||
$ on error then goto tidy
|
||||
$ on control_c then goto tidy
|
||||
$!
|
||||
$! SET DEFAULT to the main kit directory.
|
||||
$!
|
||||
$ proc = f$environment("procedure")
|
||||
$ proc = f$parse( "A.;", proc)- "A.;"
|
||||
$ set default 'proc'
|
||||
$ set default [-]
|
||||
$!
|
||||
$! ----- Prepare info for processing: version number and file info
|
||||
$ gosub read_version_info
|
||||
$ if libver .eqs. ""
|
||||
$ then
|
||||
$ write sys$error "ERROR: Couldn't find any library version info..."
|
||||
$ exit
|
||||
$ go to tidy:
|
||||
$ endif
|
||||
$
|
||||
$ if (f$getsyi("cpu").lt.128)
|
||||
$ if (f$getsyi("cpu") .lt. 128)
|
||||
$ then
|
||||
$ arch := VAX
|
||||
$ else
|
||||
$ arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
|
||||
$ if (arch .eqs. "") then arch = "UNK"
|
||||
$ endif
|
||||
$
|
||||
$ if arch .nes. "VAX"
|
||||
$ then
|
||||
$ arch_vax = 0
|
||||
$ libid = "Crypto"
|
||||
$ libnum = "[.UTIL]LIBEAY.NUM"
|
||||
$ libdir = "[.''ARCH'.EXE.CRYPTO]"
|
||||
$ libolb = "''libdir'LIBCRYPTO.OLB"
|
||||
$ libopt = "''libdir'LIBCRYPTO.OPT"
|
||||
$ libmap = "''libdir'LIBCRYPTO.MAP"
|
||||
$ libgoal= "''libdir'LIBCRYPTO.EXE"
|
||||
$ libref = ""
|
||||
$ gosub create_nonvax_shr
|
||||
$ libid = "SSL"
|
||||
$ libnum = "[.UTIL]SSLEAY.NUM"
|
||||
$ libdir = "[.''ARCH'.EXE.SSL]"
|
||||
$ libolb = "''libdir'LIBSSL.OLB"
|
||||
$ libopt = "''libdir'LIBSSL.OPT"
|
||||
$ libmap = "''libdir'LIBSSL.MAP"
|
||||
$ libgoal= "''libdir'LIBSSL.EXE"
|
||||
$ libref = "[.''ARCH'.EXE.CRYPTO]LIBCRYPTO.EXE"
|
||||
$ gosub create_nonvax_shr
|
||||
$ else
|
||||
$ arch_vax = 1
|
||||
$ arch = "VAX"
|
||||
$ else
|
||||
$ arch_vax = 0
|
||||
$ arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
|
||||
$ if (arch .eqs. "") then arch = "UNK"
|
||||
$ endif
|
||||
$!
|
||||
$ archd = arch
|
||||
$ lib32 = "32"
|
||||
$ shr = "SHR32"
|
||||
$!
|
||||
$ if (p1 .nes. "")
|
||||
$ then
|
||||
$ if (p1 .eqs. "64")
|
||||
$ then
|
||||
$ archd = arch+ "_64"
|
||||
$ lib32 = ""
|
||||
$ shr = "SHR"
|
||||
$ else
|
||||
$ if (p1 .nes. "32")
|
||||
$ then
|
||||
$ write sys$output "Second argument invalid."
|
||||
$ write sys$output "It should be "32", "64", or nothing."
|
||||
$ exit
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$!
|
||||
$! ----- Prepare info for processing: disabled algorithms info
|
||||
$ gosub read_disabled_algorithms_info
|
||||
$!
|
||||
$ ZLIB = p2
|
||||
$ zlib_lib = ""
|
||||
$ if (ZLIB .nes. "")
|
||||
$ then
|
||||
$ file2 = f$parse( ZLIB, "libz.olb", , , "syntax_only")
|
||||
$ if (f$search( file2) .eqs. "")
|
||||
$ then
|
||||
$ write sys$output ""
|
||||
$ write sys$output "The Option ", ZLIB, " Is Invalid."
|
||||
$ write sys$output " Can't find library: ''file2'"
|
||||
$ write sys$output ""
|
||||
$ goto tidy
|
||||
$ endif
|
||||
$ zlib_lib = ", ''file2' /library"
|
||||
$ endif
|
||||
$!
|
||||
$ if (arch_vax)
|
||||
$ then
|
||||
$ libtit = "CRYPTO_TRANSFER_VECTOR"
|
||||
$ libid = "Crypto"
|
||||
$ libnum = "[.UTIL]LIBEAY.NUM"
|
||||
$ libdir = "[.''ARCH'.EXE.CRYPTO]"
|
||||
$ libmar = "''libdir'LIBCRYPTO.MAR"
|
||||
$ libolb = "''libdir'LIBCRYPTO.OLB"
|
||||
$ libopt = "''libdir'LIBCRYPTO.OPT"
|
||||
$ libobj = "''libdir'LIBCRYPTO.OBJ"
|
||||
$ libmap = "''libdir'LIBCRYPTO.MAP"
|
||||
$ libgoal= "''libdir'LIBCRYPTO.EXE"
|
||||
$ libdir = "[.''ARCHD'.EXE.CRYPTO]"
|
||||
$ libmar = "''libdir'SSL_LIBCRYPTO_''shr'.MAR"
|
||||
$ libolb = "''libdir'SSL_LIBCRYPTO''lib32'.OLB"
|
||||
$ libopt = "''libdir'SSL_LIBCRYPTO_''shr'.OPT"
|
||||
$ libobj = "''libdir'SSL_LIBCRYPTO_''shr'.OBJ"
|
||||
$ libmap = "''libdir'SSL_LIBCRYPTO_''shr'.MAP"
|
||||
$ libgoal= "''libdir'SSL_LIBCRYPTO_''shr'.EXE"
|
||||
$ libref = ""
|
||||
$ libvec = "LIBCRYPTO"
|
||||
$ gosub create_vax_shr
|
||||
$ if f$search( libolb) .nes. "" then gosub create_vax_shr
|
||||
$ libtit = "SSL_TRANSFER_VECTOR"
|
||||
$ libid = "SSL"
|
||||
$ libnum = "[.UTIL]SSLEAY.NUM"
|
||||
$ libdir = "[.''ARCH'.EXE.SSL]"
|
||||
$ libmar = "''libdir'LIBSSL.MAR"
|
||||
$ libolb = "''libdir'LIBSSL.OLB"
|
||||
$ libopt = "''libdir'LIBSSL.OPT"
|
||||
$ libobj = "''libdir'LIBSSL.OBJ"
|
||||
$ libmap = "''libdir'LIBSSL.MAP"
|
||||
$ libgoal= "''libdir'LIBSSL.EXE"
|
||||
$ libref = "[.''ARCH'.EXE.CRYPTO]LIBCRYPTO.EXE"
|
||||
$ libdir = "[.''ARCHD'.EXE.SSL]"
|
||||
$ libmar = "''libdir'SSL_LIBSSL_''shr'.MAR"
|
||||
$ libolb = "''libdir'SSL_LIBSSL''lib32'.OLB"
|
||||
$ libopt = "''libdir'SSL_LIBSSL_''shr'.OPT"
|
||||
$ libobj = "''libdir'SSL_LIBSSL_''shr'.OBJ"
|
||||
$ libmap = "''libdir'SSL_LIBSSL_''shr'.MAP"
|
||||
$ libgoal= "''libdir'SSL_LIBSSL_''shr'.EXE"
|
||||
$ libref = "[.''ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO_''shr'.EXE"
|
||||
$ libvec = "LIBSSL"
|
||||
$ gosub create_vax_shr
|
||||
$ if f$search( libolb) .nes. "" then gosub create_vax_shr
|
||||
$ else
|
||||
$ libid = "Crypto"
|
||||
$ libnum = "[.UTIL]LIBEAY.NUM"
|
||||
$ libdir = "[.''ARCHD'.EXE.CRYPTO]"
|
||||
$ libolb = "''libdir'SSL_LIBCRYPTO''lib32'.OLB"
|
||||
$ libopt = "''libdir'SSL_LIBCRYPTO_''shr'.OPT"
|
||||
$ libmap = "''libdir'SSL_LIBCRYPTO_''shr'.MAP"
|
||||
$ libgoal= "''libdir'SSL_LIBCRYPTO_''shr'.EXE"
|
||||
$ libref = ""
|
||||
$ if f$search( libolb) .nes. "" then gosub create_nonvax_shr
|
||||
$ libid = "SSL"
|
||||
$ libnum = "[.UTIL]SSLEAY.NUM"
|
||||
$ libdir = "[.''ARCHD'.EXE.SSL]"
|
||||
$ libolb = "''libdir'SSL_LIBSSL''lib32'.OLB"
|
||||
$ libopt = "''libdir'SSL_LIBSSL_''shr'.OPT"
|
||||
$ libmap = "''libdir'SSL_LIBSSL_''shr'.MAP"
|
||||
$ libgoal= "''libdir'SSL_LIBSSL_''shr'.EXE"
|
||||
$ libref = "[.''ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO_''shr'.EXE"
|
||||
$ if f$search( libolb) .nes. "" then gosub create_nonvax_shr
|
||||
$ endif
|
||||
$!
|
||||
$ tidy:
|
||||
$!
|
||||
$! Close any open files.
|
||||
$!
|
||||
$ if (f$trnlnm( "libnum", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
|
||||
close libnum
|
||||
$!
|
||||
$ if (f$trnlnm( "mar", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
|
||||
close mar
|
||||
$!
|
||||
$ if (f$trnlnm( "opt", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
|
||||
close opt
|
||||
$!
|
||||
$ if (f$trnlnm( "vf", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
|
||||
close vf
|
||||
$!
|
||||
$! Restore the original default device:[directory].
|
||||
$!
|
||||
$ set default 'def_orig'
|
||||
$ exit
|
||||
$
|
||||
$! ----- Soubroutines to build the shareable libraries
|
||||
$! ----- Subroutines to build the shareable libraries
|
||||
$! For each supported architecture, there's a main shareable library
|
||||
$! creator, which is called from the main code above.
|
||||
$! The creator will define a number of variables to tell the next levels of
|
||||
@ -111,9 +192,9 @@ $! ----- Subroutines for non-VAX
|
||||
$! -----
|
||||
$! The creator routine
|
||||
$ create_nonvax_shr:
|
||||
$ open/write opt 'libopt'
|
||||
$ open /write opt 'libopt'
|
||||
$ write opt "identification=""",libid," ",libverstr,""""
|
||||
$ write opt libolb,"/lib"
|
||||
$ write opt libolb, " /library"
|
||||
$ if libref .nes. "" then write opt libref,"/SHARE"
|
||||
$ write opt "SYMBOL_VECTOR=(-"
|
||||
$ libfirstentry := true
|
||||
@ -124,7 +205,8 @@ $ gosub read_func_num
|
||||
$ write opt ")"
|
||||
$ write opt "GSMATCH=",libvmatch,",",libver
|
||||
$ close opt
|
||||
$ link/map='libmap'/full/share='libgoal' 'libopt'/option
|
||||
$ link /map = 'libmap' /full /share = 'libgoal' 'libopt' /options -
|
||||
'zlib_lib'
|
||||
$ return
|
||||
$
|
||||
$! The record writer routine
|
||||
@ -158,7 +240,7 @@ $! ----- Subroutines for VAX
|
||||
$! -----
|
||||
$! The creator routine
|
||||
$ create_vax_shr:
|
||||
$ open/write mar 'libmar'
|
||||
$ open /write mar 'libmar'
|
||||
$ type sys$input:/out=mar:
|
||||
;
|
||||
; Transfer vector for VAX shareable image
|
||||
@ -193,10 +275,10 @@ $! libwriter := write_vax_vtransfer_entry
|
||||
$! gosub read_func_num
|
||||
$ write mar " .END"
|
||||
$ close mar
|
||||
$ open/write opt 'libopt'
|
||||
$ open /write opt 'libopt'
|
||||
$ write opt "identification=""",libid," ",libverstr,""""
|
||||
$ write opt libobj
|
||||
$ write opt libolb,"/lib"
|
||||
$ write opt libolb, " /library"
|
||||
$ if libref .nes. "" then write opt libref,"/SHARE"
|
||||
$ type sys$input:/out=opt:
|
||||
!
|
||||
@ -215,7 +297,8 @@ $ libwriter := write_vax_psect_attr
|
||||
$ gosub read_func_num
|
||||
$ close opt
|
||||
$ macro/obj='libobj' 'libmar'
|
||||
$ link/map='libmap'/full/share='libgoal' 'libopt'/option
|
||||
$ link /map = 'libmap' /full /share = 'libgoal' 'libopt' /options -
|
||||
'zlib_lib'
|
||||
$ return
|
||||
$
|
||||
$! The record writer routine for VAX functions
|
||||
@ -237,9 +320,9 @@ $ return
|
||||
$
|
||||
$! ----- Common subroutines
|
||||
$! -----
|
||||
$! The .num file reader. This one has great responsability.
|
||||
$! The .num file reader. This one has great responsibility.
|
||||
$ read_func_num:
|
||||
$ open libnum 'libnum'
|
||||
$ open /read libnum 'libnum'
|
||||
$ goto read_nums
|
||||
$
|
||||
$ read_nums:
|
||||
@ -247,27 +330,30 @@ $ libentrynum=0
|
||||
$ liblastentry:=false
|
||||
$ entrycount=0
|
||||
$ loop:
|
||||
$ read/end=loop_end/err=loop_end libnum line
|
||||
$ entrynum=f$int(f$element(1," ",f$edit(line,"COMPRESS,TRIM")))
|
||||
$ entryinfo=f$element(2," ",f$edit(line,"COMPRESS,TRIM"))
|
||||
$ curentry=f$element(0," ",f$edit(line,"COMPRESS,TRIM"))
|
||||
$ info_exist=f$element(0,":",entryinfo)
|
||||
$ info_platforms=","+f$element(1,":",entryinfo)+","
|
||||
$ info_kind=f$element(2,":",entryinfo)
|
||||
$ info_algorithms=","+f$element(3,":",entryinfo)+","
|
||||
$ read /end=loop_end /err=loop_end libnum line
|
||||
$ lin = f$edit( line, "COMPRESS,TRIM")
|
||||
$! Skip a "#" comment line.
|
||||
$ if (f$extract( 0, 1, lin) .eqs. "#") then goto loop
|
||||
$ entrynum = f$int(f$element( 1, " ", lin))
|
||||
$ entryinfo = f$element( 2, " ", lin)
|
||||
$ curentry = f$element( 0, " ", lin)
|
||||
$ info_exist = f$element( 0, ":", entryinfo)
|
||||
$ info_platforms = ","+ f$element(1, ":", entryinfo)+ ","
|
||||
$ info_kind = f$element( 2, ":", entryinfo)
|
||||
$ info_algorithms = ","+ f$element( 3, ":", entryinfo)+ ","
|
||||
$ if info_exist .eqs. "NOEXIST" then goto loop
|
||||
$ truesum = 0
|
||||
$ falsesum = 0
|
||||
$ negatives = 1
|
||||
$ plat_i = 0
|
||||
$ loop1:
|
||||
$ plat_entry = f$element(plat_i,",",info_platforms)
|
||||
$ plat_entry = f$element( plat_i, ",", info_platforms)
|
||||
$ plat_i = plat_i + 1
|
||||
$ if plat_entry .eqs. "" then goto loop1
|
||||
$ if plat_entry .nes. ","
|
||||
$ then
|
||||
$ if f$extract(0,1,plat_entry) .nes. "!" then negatives = 0
|
||||
$ if f$getsyi("CPU") .lt. 128
|
||||
$ if (arch_vax)
|
||||
$ then
|
||||
$ if plat_entry .eqs. "EXPORT_VAR_AS_FUNCTION" then -
|
||||
$ truesum = truesum + 1
|
||||
@ -276,6 +362,7 @@ $ falsesum = falsesum + 1
|
||||
$ endif
|
||||
$!
|
||||
$ if ((plat_entry .eqs. "VMS") .or. -
|
||||
((plat_entry .eqs. "ZLIB") .and. (ZLIB .nes. "")) .or. -
|
||||
(arch_vax .and. (plat_entry .eqs. "VMSVAX"))) then -
|
||||
truesum = truesum + 1
|
||||
$!
|
||||
@ -301,8 +388,7 @@ $ alg_i = alg_i + 1
|
||||
$ if alg_entry .eqs. "" then goto loop2
|
||||
$ if alg_entry .nes. ","
|
||||
$ then
|
||||
$ if alg_entry .eqs. "KRB5" then goto loop ! Special for now
|
||||
$ if alg_entry .eqs. "STATIC_ENGINE" then goto loop ! Special for now
|
||||
$ if disabled_algorithms - ("," + alg_entry + ",") .nes disabled_algorithms then goto loop
|
||||
$ if f$trnlnm("OPENSSL_NO_"+alg_entry) .nes. "" then goto loop
|
||||
$ goto loop2
|
||||
$ endif
|
||||
@ -345,7 +431,7 @@ $
|
||||
$! The version number reader
|
||||
$ read_version_info:
|
||||
$ libver = ""
|
||||
$ open/read vf [.CRYPTO]OPENSSLV.H
|
||||
$ open /read vf [.CRYPTO]OPENSSLV.H
|
||||
$ loop_rvi:
|
||||
$ read/err=endloop_rvi/end=endloop_rvi vf rvi_line
|
||||
$ if rvi_line - "SHLIB_VERSION_NUMBER """ .eqs. rvi_line then -
|
||||
@ -369,3 +455,22 @@ $ endif
|
||||
$ endloop_rvi:
|
||||
$ close vf
|
||||
$ return
|
||||
$
|
||||
$! The disabled algorithms reader
|
||||
$ read_disabled_algorithms_info:
|
||||
$ disabled_algorithms = ","
|
||||
$ open /read cf [.CRYPTO.'ARCH']OPENSSLCONF.H
|
||||
$ loop_rci:
|
||||
$ read/err=endloop_rci/end=endloop_rci cf rci_line
|
||||
$ rci_line = f$edit(rci_line,"TRIM,COMPRESS")
|
||||
$ rci_ei = 0
|
||||
$ if f$extract(0,9,rci_line) .eqs. "# define " then rci_ei = 2
|
||||
$ if f$extract(0,8,rci_line) .eqs. "#define " then rci_ei = 1
|
||||
$ if rci_ei .eq. 0 then goto loop_rci
|
||||
$ rci_e = f$element(rci_ei," ",rci_line)
|
||||
$ if f$extract(0,11,rci_e) .nes. "OPENSSL_NO_" then goto loop_rci
|
||||
$ disabled_algorithms = disabled_algorithms + f$extract(11,999,rci_e) + ","
|
||||
$ goto loop_rci
|
||||
$ endloop_rci:
|
||||
$ close cf
|
||||
$ return
|
||||
|
108
VMS/openssl_startup.com
Executable file
108
VMS/openssl_startup.com
Executable file
@ -0,0 +1,108 @@
|
||||
$!
|
||||
$! Startup file for OpenSSL 1.x.
|
||||
$!
|
||||
$! 2011-03-05 SMS.
|
||||
$!
|
||||
$! This procedure must reside in the OpenSSL installation directory.
|
||||
$! It will fail if it is copied to a different location.
|
||||
$!
|
||||
$! P1 qualifier(s) for DEFINE. For example, "/SYSTEM" to get the
|
||||
$! logical names defined in the system logical name table.
|
||||
$!
|
||||
$! P2 "64", to use executables which were built with 64-bit pointers.
|
||||
$!
|
||||
$! Good (default) and bad status values.
|
||||
$!
|
||||
$ status = %x00010001 ! RMS$_NORMAL, normal successful completion.
|
||||
$ rms_e_fnf = %x00018292 ! RMS$_FNF, file not found.
|
||||
$!
|
||||
$! Prepare for problems.
|
||||
$!
|
||||
$ orig_dev_dir = f$environment( "DEFAULT")
|
||||
$ on control_y then goto clean_up
|
||||
$ on error then goto clean_up
|
||||
$!
|
||||
$! Determine hardware architecture.
|
||||
$!
|
||||
$ if (f$getsyi( "cpu") .lt. 128)
|
||||
$ then
|
||||
$ arch_name = "VAX"
|
||||
$ else
|
||||
$ arch_name = f$edit( f$getsyi( "arch_name"), "upcase")
|
||||
$ if (arch_name .eqs. "") then arch_name = "UNK"
|
||||
$ endif
|
||||
$!
|
||||
$ if (p2 .eqs. "64")
|
||||
$ then
|
||||
$ arch_name_exe = arch_name+ "_64"
|
||||
$ else
|
||||
$ arch_name_exe = arch_name
|
||||
$ endif
|
||||
$!
|
||||
$! Derive the OpenSSL installation device:[directory] from the location
|
||||
$! of this command procedure.
|
||||
$!
|
||||
$ proc = f$environment( "procedure")
|
||||
$ proc_dev_dir = f$parse( "A.;", proc, , , "no_conceal") - "A.;"
|
||||
$ proc_dev = f$parse( proc_dev_dir, , , "device", "syntax_only")
|
||||
$ proc_dir = f$parse( proc_dev_dir, , , "directory", "syntax_only") - -
|
||||
".][000000"- "[000000."- "]["- "["- "]"
|
||||
$ proc_dev_dir = proc_dev+ "["+ proc_dir+ "]"
|
||||
$ set default 'proc_dev_dir'
|
||||
$ set default [-]
|
||||
$ ossl_dev_dir = f$environment( "default")
|
||||
$!
|
||||
$! Check existence of expected directories (to see if this procedure has
|
||||
$! been moved away from its proper place).
|
||||
$!
|
||||
$ if ((f$search( "certs.dir;1") .eqs. "") .or. -
|
||||
(f$search( "include.dir;1") .eqs. "") .or. -
|
||||
(f$search( "private.dir;1") .eqs. "") .or. -
|
||||
(f$search( "vms.dir;1") .eqs. ""))
|
||||
$ then
|
||||
$ write sys$output -
|
||||
" Can't find expected common OpenSSL directories in:"
|
||||
$ write sys$output " ''ossl_dev_dir'"
|
||||
$ status = rms_e_fnf
|
||||
$ goto clean_up
|
||||
$ endif
|
||||
$!
|
||||
$ if ((f$search( "''arch_name_exe'_exe.dir;1") .eqs. "") .or. -
|
||||
(f$search( "''arch_name'_lib.dir;1") .eqs. ""))
|
||||
$ then
|
||||
$ write sys$output -
|
||||
" Can't find expected architecture-specific OpenSSL directories in:"
|
||||
$ write sys$output " ''ossl_dev_dir'"
|
||||
$ status = rms_e_fnf
|
||||
$ goto clean_up
|
||||
$ endif
|
||||
$!
|
||||
$! All seems well (enough). Define the OpenSSL logical names.
|
||||
$!
|
||||
$ ossl_root = ossl_dev_dir- "]"+ ".]"
|
||||
$ define /translation_attributes = concealed /nolog'p1 SSLROOT 'ossl_root'
|
||||
$ define /nolog 'p1' SSLCERTS sslroot:[certs]
|
||||
$ define /nolog 'p1' SSLINCLUDE sslroot:[include]
|
||||
$ define /nolog 'p1' SSLPRIVATE sslroot:[private]
|
||||
$ define /nolog 'p1' SSLEXE sslroot:['arch_name_exe'_exe]
|
||||
$ define /nolog 'p1' SSLLIB sslroot:['arch_name'_lib]
|
||||
$!
|
||||
$! Defining OPENSSL lets a C program use "#include <openssl/{foo}.h>":
|
||||
$ define /nolog 'p1' OPENSSL SSLINCLUDE:
|
||||
$!
|
||||
$! Run a site-specific procedure, if it exists.
|
||||
$!
|
||||
$ if f$search( "sslroot:[vms]openssl_systartup.com") .nes."" then -
|
||||
@ sslroot:[vms]openssl_systartup.com
|
||||
$!
|
||||
$! Restore the original default dev:[dir] (if known).
|
||||
$!
|
||||
$ clean_up:
|
||||
$!
|
||||
$ if (f$type( orig_dev_dir) .nes. "")
|
||||
$ then
|
||||
$ set default 'orig_dev_dir'
|
||||
$ endif
|
||||
$!
|
||||
$ EXIT 'status'
|
||||
$!
|
20
VMS/openssl_undo.com
Executable file
20
VMS/openssl_undo.com
Executable file
@ -0,0 +1,20 @@
|
||||
$!
|
||||
$! Deassign OpenSSL logical names.
|
||||
$!
|
||||
$ call deass "OPENSSL" "''p1'"
|
||||
$ call deass "SSLCERTS" "''p1'"
|
||||
$ call deass "SSLEXE" "''p1'"
|
||||
$ call deass "SSLINCLUDE" "''p1'"
|
||||
$ call deass "SSLLIB" "''p1'"
|
||||
$ call deass "SSLPRIVATE" "''p1'"
|
||||
$ call deass "SSLROOT" "''p1'"
|
||||
$!
|
||||
$ exit
|
||||
$!
|
||||
$deass: subroutine
|
||||
$ if (f$trnlnm( p1) .nes. "")
|
||||
$ then
|
||||
$ deassign 'p2' 'p1'
|
||||
$ endif
|
||||
$ endsubroutine
|
||||
$!
|
98
apps/CA.com
98
apps/CA.com
@ -37,14 +37,25 @@ $ VERIFY = openssl + " verify"
|
||||
$ X509 = openssl + " x509"
|
||||
$ PKCS12 = openssl + " pkcs12"
|
||||
$ echo = "write sys$Output"
|
||||
$ RET = 1
|
||||
$!
|
||||
$ s = F$PARSE(F$ENVIRONMENT("DEFAULT"),"[]") - "].;"
|
||||
$ CATOP := 's'.demoCA
|
||||
$ CAKEY := ]cakey.pem
|
||||
$ CACERT := ]cacert.pem
|
||||
$! 2010-12-20 SMS.
|
||||
$! Use a concealed logical name to reduce command line lengths, to
|
||||
$! avoid DCL errors on VAX:
|
||||
$! %DCL-W-TKNOVF, command element is too long - shorten
|
||||
$! (Path segments like "openssl-1_0_1-stable-SNAP-20101217" accumulate
|
||||
$! quickly.)
|
||||
$!
|
||||
$ CATOP = F$PARSE( F$ENVIRONMENT( "DEFAULT"), "[]")- "].;"+ ".demoCA.]"
|
||||
$ define /translation_attributes = concealed CATOP 'CATOP'
|
||||
$!
|
||||
$ on error then goto clean_up
|
||||
$ on control_y then goto clean_up
|
||||
$!
|
||||
$ CAKEY = "CATOP:[private]cakey.pem"
|
||||
$ CACERT = "CATOP:[000000]cacert.pem"
|
||||
$
|
||||
$ __INPUT := SYS$COMMAND
|
||||
$ RET = 1
|
||||
$!
|
||||
$ i = 1
|
||||
$opt_loop:
|
||||
@ -55,7 +66,7 @@ $
|
||||
$ IF (prog_opt .EQS. "?" .OR. prog_opt .EQS. "-h" .OR. prog_opt .EQS. "-help")
|
||||
$ THEN
|
||||
$ echo "usage: CA -newcert|-newreq|-newca|-sign|-verify"
|
||||
$ exit
|
||||
$ goto clean_up
|
||||
$ ENDIF
|
||||
$!
|
||||
$ IF (prog_opt .EQS. "-input")
|
||||
@ -69,7 +80,7 @@ $!
|
||||
$ IF (prog_opt .EQS. "-newcert")
|
||||
$ THEN
|
||||
$ ! Create a certificate.
|
||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
||||
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||
$ REQ -new -x509 -keyout newreq.pem -out newreq.pem 'DAYS'
|
||||
$ RET=$STATUS
|
||||
$ echo "Certificate (and private key) is in newreq.pem"
|
||||
@ -79,7 +90,7 @@ $!
|
||||
$ IF (prog_opt .EQS. "-newreq")
|
||||
$ THEN
|
||||
$ ! Create a certificate request
|
||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
||||
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||
$ REQ -new -keyout newreq.pem -out newreq.pem 'DAYS'
|
||||
$ RET=$STATUS
|
||||
$ echo "Request (and private key) is in newreq.pem"
|
||||
@ -90,41 +101,40 @@ $ IF (prog_opt .EQS. "-newca")
|
||||
$ THEN
|
||||
$ ! If explicitly asked for or it doesn't exist then setup the directory
|
||||
$ ! structure that Eric likes to manage things.
|
||||
$ IF F$SEARCH(CATOP+"]serial.") .EQS. ""
|
||||
$ IF F$SEARCH( "CATOP:[000000]serial.") .EQS. ""
|
||||
$ THEN
|
||||
$ CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP']
|
||||
$ CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.certs]
|
||||
$ CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.crl]
|
||||
$ CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.newcerts]
|
||||
$ CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.private]
|
||||
$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[000000]
|
||||
$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[certs]
|
||||
$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[crl]
|
||||
$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[newcerts]
|
||||
$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[private]
|
||||
$
|
||||
$ OPEN /WRITE ser_file 'CATOP']serial.
|
||||
$ OPEN /WRITE ser_file CATOP:[000000]serial.
|
||||
$ WRITE ser_file "01"
|
||||
$ CLOSE ser_file
|
||||
$ APPEND/NEW NL: 'CATOP']index.txt
|
||||
$ APPEND /NEW_VERSION NL: CATOP:[000000]index.txt
|
||||
$
|
||||
$ ! The following is to make sure access() doesn't get confused. It
|
||||
$ ! really needs one file in the directory to give correct answers...
|
||||
$ COPY NLA0: 'CATOP'.certs].;
|
||||
$ COPY NLA0: 'CATOP'.crl].;
|
||||
$ COPY NLA0: 'CATOP'.newcerts].;
|
||||
$ COPY NLA0: 'CATOP'.private].;
|
||||
$ COPY NLA0: CATOP:[certs].;
|
||||
$ COPY NLA0: CATOP:[crl].;
|
||||
$ COPY NLA0: CATOP:[newcerts].;
|
||||
$ COPY NLA0: CATOP:[private].;
|
||||
$ ENDIF
|
||||
$!
|
||||
$ IF F$SEARCH(CATOP+".private"+CAKEY) .EQS. ""
|
||||
$ IF F$SEARCH( CAKEY) .EQS. ""
|
||||
$ THEN
|
||||
$ READ '__INPUT' FILE -
|
||||
/PROMPT="CA certificate filename (or enter to create)"
|
||||
/PROMPT="CA certificate filename (or enter to create): "
|
||||
$ IF (FILE .NES. "") .AND. (F$SEARCH(FILE) .NES. "")
|
||||
$ THEN
|
||||
$ COPY 'FILE' 'CATOP'.private'CAKEY'
|
||||
$ RET=$STATUS
|
||||
$ COPY 'FILE' 'CAKEY'
|
||||
$ RET=$STATUS
|
||||
$ ELSE
|
||||
$ echo "Making CA certificate ..."
|
||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
||||
$ REQ -new -x509 -keyout 'CATOP'.private'CAKEY' -
|
||||
-out 'CATOP''CACERT' 'DAYS'
|
||||
$ RET=$STATUS
|
||||
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||
$ REQ -new -x509 -keyout 'CAKEY' -out 'CACERT' 'DAYS'
|
||||
$ RET=$STATUS
|
||||
$ ENDIF
|
||||
$ ENDIF
|
||||
$ GOTO opt_loop_continue
|
||||
@ -135,16 +145,16 @@ $ THEN
|
||||
$ i = i + 1
|
||||
$ cname = P'i'
|
||||
$ IF cname .EQS. "" THEN cname = "My certificate"
|
||||
$ PKCS12 -in newcert.pem -inkey newreq.pem -certfile 'CATOP''CACERT -
|
||||
-out newcert.p12 -export -name "''cname'"
|
||||
$ PKCS12 -in newcert.pem -inkey newreq.pem -certfile 'CACERT' -
|
||||
-out newcert.p12 -export -name "''cname'"
|
||||
$ RET=$STATUS
|
||||
$ exit RET
|
||||
$ goto clean_up
|
||||
$ ENDIF
|
||||
$!
|
||||
$ IF (prog_opt .EQS. "-xsign")
|
||||
$ THEN
|
||||
$!
|
||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
||||
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||
$ CA -policy policy_anything -infiles newreq.pem
|
||||
$ RET=$STATUS
|
||||
$ GOTO opt_loop_continue
|
||||
@ -153,7 +163,7 @@ $!
|
||||
$ IF ((prog_opt .EQS. "-sign") .OR. (prog_opt .EQS. "-signreq"))
|
||||
$ THEN
|
||||
$!
|
||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
||||
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||
$ CA -policy policy_anything -out newcert.pem -infiles newreq.pem
|
||||
$ RET=$STATUS
|
||||
$ type newcert.pem
|
||||
@ -165,9 +175,9 @@ $ IF (prog_opt .EQS. "-signcert")
|
||||
$ THEN
|
||||
$!
|
||||
$ echo "Cert passphrase will be requested twice - bug?"
|
||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
||||
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||
$ X509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem
|
||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
||||
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||
$ CA -policy policy_anything -out newcert.pem -infiles tmp.pem
|
||||
y
|
||||
y
|
||||
@ -182,17 +192,17 @@ $!
|
||||
$ i = i + 1
|
||||
$ IF (p'i' .EQS. "")
|
||||
$ THEN
|
||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
||||
$ VERIFY "-CAfile" 'CATOP''CACERT' newcert.pem
|
||||
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||
$ VERIFY "-CAfile" 'CACERT' newcert.pem
|
||||
$ ELSE
|
||||
$ j = i
|
||||
$ verify_opt_loop:
|
||||
$ IF j .GT. 8 THEN GOTO verify_opt_loop_end
|
||||
$ IF p'j' .NES. ""
|
||||
$ THEN
|
||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
||||
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||
$ __tmp = p'j'
|
||||
$ VERIFY "-CAfile" 'CATOP''CACERT' '__tmp'
|
||||
$ VERIFY "-CAfile" 'CACERT' '__tmp'
|
||||
$ tmp=$STATUS
|
||||
$ IF tmp .NE. 0 THEN RET=tmp
|
||||
$ ENDIF
|
||||
@ -208,8 +218,8 @@ $ IF (prog_opt .NES. "")
|
||||
$ THEN
|
||||
$!
|
||||
$ echo "Unknown argument ''prog_opt'"
|
||||
$
|
||||
$ EXIT 3
|
||||
$ RET = 3
|
||||
$ goto clean_up
|
||||
$ ENDIF
|
||||
$
|
||||
$opt_loop_continue:
|
||||
@ -217,4 +227,10 @@ $ i = i + 1
|
||||
$ GOTO opt_loop
|
||||
$
|
||||
$opt_loop_end:
|
||||
$!
|
||||
$clean_up:
|
||||
$!
|
||||
$ if f$trnlnm( "CATOP", "LNM$PROCESS") .nes. "" then -
|
||||
deassign /process CATOP
|
||||
$!
|
||||
$ EXIT 'RET'
|
||||
|
@ -257,6 +257,8 @@ int args_from_file(char *file, int *argc, char **argv[])
|
||||
|
||||
int str2fmt(char *s)
|
||||
{
|
||||
if (s == NULL)
|
||||
return FORMAT_UNDEF;
|
||||
if ((*s == 'D') || (*s == 'd'))
|
||||
return(FORMAT_ASN1);
|
||||
else if ((*s == 'T') || (*s == 't'))
|
||||
@ -796,7 +798,9 @@ X509 *load_cert(BIO *err, const char *file, int format,
|
||||
if (file == NULL)
|
||||
{
|
||||
#ifdef _IONBF
|
||||
# ifndef OPENSSL_NO_SETVBUF_IONBF
|
||||
setvbuf(stdin, NULL, _IONBF, 0);
|
||||
# endif /* ndef OPENSSL_NO_SETVBUF_IONBF */
|
||||
#endif
|
||||
BIO_set_fp(cert,stdin,BIO_NOCLOSE);
|
||||
}
|
||||
@ -897,7 +901,9 @@ EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
|
||||
if (file == NULL && maybe_stdin)
|
||||
{
|
||||
#ifdef _IONBF
|
||||
# ifndef OPENSSL_NO_SETVBUF_IONBF
|
||||
setvbuf(stdin, NULL, _IONBF, 0);
|
||||
# endif /* ndef OPENSSL_NO_SETVBUF_IONBF */
|
||||
#endif
|
||||
BIO_set_fp(key,stdin,BIO_NOCLOSE);
|
||||
}
|
||||
@ -986,7 +992,9 @@ EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin,
|
||||
if (file == NULL && maybe_stdin)
|
||||
{
|
||||
#ifdef _IONBF
|
||||
# ifndef OPENSSL_NO_SETVBUF_IONBF
|
||||
setvbuf(stdin, NULL, _IONBF, 0);
|
||||
# endif /* ndef OPENSSL_NO_SETVBUF_IONBF */
|
||||
#endif
|
||||
BIO_set_fp(key,stdin,BIO_NOCLOSE);
|
||||
}
|
||||
|
@ -408,6 +408,7 @@ static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf)
|
||||
|
||||
atyp = ASN1_generate_nconf(genstr, cnf);
|
||||
NCONF_free(cnf);
|
||||
cnf = NULL;
|
||||
|
||||
if (!atyp)
|
||||
return -1;
|
||||
|
@ -618,7 +618,7 @@ int MAIN(int argc, char **argv)
|
||||
BIO_printf (bio_err, "-certsout file certificate output file\n");
|
||||
BIO_printf (bio_err, "-signer file signer certificate file\n");
|
||||
BIO_printf (bio_err, "-recip file recipient certificate file for decryption\n");
|
||||
BIO_printf (bio_err, "-skeyid use subject key identifier\n");
|
||||
BIO_printf (bio_err, "-keyid use subject key identifier\n");
|
||||
BIO_printf (bio_err, "-in file input file\n");
|
||||
BIO_printf (bio_err, "-inform arg input format SMIME (default), PEM or DER\n");
|
||||
BIO_printf (bio_err, "-inkey file input private key (if not signer or recipient)\n");
|
||||
|
@ -393,8 +393,10 @@ bad:
|
||||
|
||||
if (inf == NULL)
|
||||
{
|
||||
#ifndef OPENSSL_NO_SETVBUF_IONBF
|
||||
if (bufsize != NULL)
|
||||
setvbuf(stdin, (char *)NULL, _IONBF, 0);
|
||||
#endif /* ndef OPENSSL_NO_SETVBUF_IONBF */
|
||||
BIO_set_fp(in,stdin,BIO_NOCLOSE);
|
||||
}
|
||||
else
|
||||
@ -447,8 +449,10 @@ bad:
|
||||
if (outf == NULL)
|
||||
{
|
||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||
#ifndef OPENSSL_NO_SETVBUF_IONBF
|
||||
if (bufsize != NULL)
|
||||
setvbuf(stdout, (char *)NULL, _IONBF, 0);
|
||||
#endif /* ndef OPENSSL_NO_SETVBUF_IONBF */
|
||||
#ifdef OPENSSL_SYS_VMS
|
||||
{
|
||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||
|
107
apps/install-apps.com
Executable file
107
apps/install-apps.com
Executable file
@ -0,0 +1,107 @@
|
||||
$! INSTALL.COM -- Installs the files in a given directory tree
|
||||
$!
|
||||
$! Author: Richard Levitte <richard@levitte.org>
|
||||
$! Time of creation: 22-MAY-1998 10:13
|
||||
$!
|
||||
$! P1 root of the directory tree
|
||||
$! P2 "64" for 64-bit pointers.
|
||||
$!
|
||||
$!
|
||||
$! Announce/identify.
|
||||
$!
|
||||
$ proc = f$environment( "procedure")
|
||||
$ write sys$output "@@@ "+ -
|
||||
f$parse( proc, , , "name")+ f$parse( proc, , , "type")
|
||||
$!
|
||||
$ on error then goto tidy
|
||||
$ on control_c then goto tidy
|
||||
$!
|
||||
$ if (p1 .eqs. "")
|
||||
$ then
|
||||
$ write sys$output "First argument missing."
|
||||
$ write sys$output -
|
||||
"It should be the directory where you want things installed."
|
||||
$ exit
|
||||
$ endif
|
||||
$!
|
||||
$ if (f$getsyi("cpu") .lt. 128)
|
||||
$ then
|
||||
$ arch = "VAX"
|
||||
$ else
|
||||
$ arch = f$edit( f$getsyi( "arch_name"), "upcase")
|
||||
$ if (arch .eqs. "") then arch = "UNK"
|
||||
$ endif
|
||||
$!
|
||||
$ archd = arch
|
||||
$!
|
||||
$ if (p2 .nes. "")
|
||||
$ then
|
||||
$ if (p2 .eqs. "64")
|
||||
$ then
|
||||
$ archd = arch+ "_64"
|
||||
$ else
|
||||
$ if (p2 .nes. "32")
|
||||
$ then
|
||||
$ write sys$output "Second argument invalid."
|
||||
$ write sys$output "It should be "32", "64", or nothing."
|
||||
$ exit
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$!
|
||||
$ root = f$parse( p1, "[]A.;0", , , "syntax_only, no_conceal") - "A.;0"
|
||||
$ root_dev = f$parse(root,,,"device","syntax_only")
|
||||
$ root_dir = f$parse(root,,,"directory","syntax_only") - -
|
||||
"[000000." - "][" - "[" - "]"
|
||||
$ root = root_dev + "[" + root_dir
|
||||
$!
|
||||
$ define /nolog wrk_sslroot 'root'.] /trans=conc
|
||||
$ define /nolog wrk_sslxexe wrk_sslroot:['archd'_exe]
|
||||
$!
|
||||
$ if f$parse("wrk_sslroot:[000000]") .eqs. "" then -
|
||||
create /directory /log wrk_sslroot:[000000]
|
||||
$ if f$parse("wrk_sslxexe:") .eqs. "" then -
|
||||
create /directory /log wrk_sslxexe:
|
||||
$!
|
||||
$ exe := openssl
|
||||
$!
|
||||
$ exe_dir := [-.'archd'.exe.apps]
|
||||
$!
|
||||
$! Executables.
|
||||
$!
|
||||
$ i = 0
|
||||
$ loop_exe:
|
||||
$ e = f$edit(f$element( i, ",", exe), "trim")
|
||||
$ i = i + 1
|
||||
$ if e .eqs. "," then goto loop_exe_end
|
||||
$ set noon
|
||||
$ file = exe_dir+ e+ ".exe"
|
||||
$ if f$search( file) .nes. ""
|
||||
$ then
|
||||
$ copy /protection = w:re 'file' wrk_sslxexe: /log
|
||||
$ endif
|
||||
$ set on
|
||||
$ goto loop_exe
|
||||
$ loop_exe_end:
|
||||
$!
|
||||
$! Miscellaneous.
|
||||
$!
|
||||
$ set noon
|
||||
$ copy /protection = w:re ca.com wrk_sslxexe:ca.com /log
|
||||
$ copy /protection = w:re openssl-vms.cnf wrk_sslroot:[000000]openssl.cnf /log
|
||||
$ set on
|
||||
$!
|
||||
$ tidy:
|
||||
$!
|
||||
$ call deass wrk_sslroot
|
||||
$ call deass wrk_sslxexe
|
||||
$!
|
||||
$ exit
|
||||
$!
|
||||
$ deass: subroutine
|
||||
$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
|
||||
$ then
|
||||
$ deassign /process 'p1'
|
||||
$ endif
|
||||
$ endsubroutine
|
||||
$!
|
@ -1,65 +0,0 @@
|
||||
$! INSTALL.COM -- Installs the files in a given directory tree
|
||||
$!
|
||||
$! Author: Richard Levitte <richard@levitte.org>
|
||||
$! Time of creation: 22-MAY-1998 10:13
|
||||
$!
|
||||
$! P1 root of the directory tree
|
||||
$!
|
||||
$
|
||||
$ IF P1 .EQS. ""
|
||||
$ THEN
|
||||
$ WRITE SYS$OUTPUT "First argument missing."
|
||||
$ WRITE SYS$OUTPUT -
|
||||
"Should be the directory where you want things installed."
|
||||
$ EXIT
|
||||
$ ENDIF
|
||||
$
|
||||
$ IF (F$GETSYI("CPU").LT.128)
|
||||
$ THEN
|
||||
$ ARCH := VAX
|
||||
$ ELSE
|
||||
$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
|
||||
$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
|
||||
$ ENDIF
|
||||
$
|
||||
$ ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
|
||||
$ ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
|
||||
$ ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
|
||||
- "[000000." - "][" - "[" - "]"
|
||||
$ ROOT = ROOT_DEV + "[" + ROOT_DIR
|
||||
$
|
||||
$ DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
|
||||
$ DEFINE/NOLOG WRK_SSLEXE WRK_SSLROOT:['ARCH'_EXE]
|
||||
$
|
||||
$ IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
|
||||
CREATE/DIR/LOG WRK_SSLROOT:[000000]
|
||||
$ IF F$PARSE("WRK_SSLEXE:") .EQS. "" THEN -
|
||||
CREATE/DIR/LOG WRK_SSLEXE:
|
||||
$
|
||||
$ EXE := openssl
|
||||
$
|
||||
$ EXE_DIR := [-.'ARCH'.EXE.APPS]
|
||||
$
|
||||
$ I = 0
|
||||
$ LOOP_EXE:
|
||||
$ E = F$EDIT(F$ELEMENT(I, ",", EXE),"TRIM")
|
||||
$ I = I + 1
|
||||
$ IF E .EQS. "," THEN GOTO LOOP_EXE_END
|
||||
$ SET NOON
|
||||
$ IF F$SEARCH(EXE_DIR+E+".EXE") .NES. ""
|
||||
$ THEN
|
||||
$ COPY 'EXE_DIR''E'.EXE WRK_SSLEXE:'E'.EXE/log
|
||||
$ SET FILE/PROT=W:RE WRK_SSLEXE:'E'.EXE
|
||||
$ ENDIF
|
||||
$ SET ON
|
||||
$ GOTO LOOP_EXE
|
||||
$ LOOP_EXE_END:
|
||||
$
|
||||
$ SET NOON
|
||||
$ COPY CA.COM WRK_SSLEXE:CA.COM/LOG
|
||||
$ SET FILE/PROT=W:RE WRK_SSLEXE:CA.COM
|
||||
$ COPY OPENSSL-VMS.CNF WRK_SSLROOT:[000000]OPENSSL.CNF/LOG
|
||||
$ SET FILE/PROT=W:R WRK_SSLROOT:[000000]OPENSSL.CNF
|
||||
$ SET ON
|
||||
$
|
||||
$ EXIT
|
@ -39,11 +39,35 @@ $! P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
|
||||
$!
|
||||
$! P5, if defined, sets a choice of programs to compile.
|
||||
$!
|
||||
$! P6, if defined, specifies the C pointer size. Ignored on VAX.
|
||||
$! ("64=ARGV" gives more efficient code with HP C V7.3 or newer.)
|
||||
$! Supported values are:
|
||||
$!
|
||||
$! "" Compile with default (/NOPOINTER_SIZE)
|
||||
$! 32 Compile with /POINTER_SIZE=32 (SHORT)
|
||||
$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV])
|
||||
$! (Automatically select ARGV if compiler supports it.)
|
||||
$! 64= Compile with /POINTER_SIZE=64 (LONG).
|
||||
$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV).
|
||||
$!
|
||||
$! P7, if defined, specifies a directory where ZLIB files (zlib.h,
|
||||
$! libz.olb) may be found. Optionally, a non-default object library
|
||||
$! name may be included ("dev:[dir]libz_64.olb", for example).
|
||||
$!
|
||||
$!
|
||||
$! Announce/identify.
|
||||
$!
|
||||
$ proc = f$environment( "procedure")
|
||||
$ write sys$output "@@@ "+ -
|
||||
f$parse( proc, , , "name")+ f$parse( proc, , , "type")
|
||||
$!
|
||||
$ on control_c then goto exit
|
||||
$!
|
||||
$! Define A TCP/IP Library That We Will Need To Link To.
|
||||
$! (That Is, If We Need To Link To One.)
|
||||
$!
|
||||
$ TCPIP_LIB = ""
|
||||
$ ZLIB_LIB = ""
|
||||
$!
|
||||
$! Check What Architecture We Are Using.
|
||||
$!
|
||||
@ -67,37 +91,53 @@ $! End The Architecture Check.
|
||||
$!
|
||||
$ ENDIF
|
||||
$!
|
||||
$ ARCHD = ARCH
|
||||
$ LIB32 = "32"
|
||||
$ OPT_FILE = ""
|
||||
$ POINTER_SIZE = ""
|
||||
$!
|
||||
$! Define what programs should be compiled
|
||||
$!
|
||||
$ PROGRAMS := OPENSSL
|
||||
$!
|
||||
$! Define The CRYPTO Library.
|
||||
$!
|
||||
$ CRYPTO_LIB := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]LIBCRYPTO.OLB
|
||||
$!
|
||||
$! Define The SSL Library.
|
||||
$!
|
||||
$ SSL_LIB := SYS$DISK:[-.'ARCH'.EXE.SSL]LIBSSL.OLB
|
||||
$!
|
||||
$! Define The OBJ Directory.
|
||||
$!
|
||||
$ OBJ_DIR := SYS$DISK:[-.'ARCH'.OBJ.APPS]
|
||||
$!
|
||||
$! Define The EXE Directory.
|
||||
$!
|
||||
$ EXE_DIR := SYS$DISK:[-.'ARCH'.EXE.APPS]
|
||||
$!
|
||||
$! Check To Make Sure We Have Valid Command Line Parameters.
|
||||
$!
|
||||
$ GOSUB CHECK_OPTIONS
|
||||
$!
|
||||
$! Define The CRYPTO Library.
|
||||
$!
|
||||
$ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB
|
||||
$!
|
||||
$! Define The SSL Library.
|
||||
$!
|
||||
$ SSL_LIB := SYS$DISK:[-.'ARCHD'.EXE.SSL]SSL_LIBSSL'LIB32'.OLB
|
||||
$!
|
||||
$! Define The OBJ and EXE Directories.
|
||||
$!
|
||||
$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.APPS]
|
||||
$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.APPS]
|
||||
$!
|
||||
$! Specify the destination directory in any /MAP option.
|
||||
$!
|
||||
$ if (LINKMAP .eqs. "MAP")
|
||||
$ then
|
||||
$ LINKMAP = LINKMAP+ "=''EXE_DIR'"
|
||||
$ endif
|
||||
$!
|
||||
$! Add the location prefix to the linker options file name.
|
||||
$!
|
||||
$ if (OPT_FILE .nes. "")
|
||||
$ then
|
||||
$ OPT_FILE = EXE_DIR+ OPT_FILE
|
||||
$ endif
|
||||
$!
|
||||
$! Initialise logical names and such
|
||||
$!
|
||||
$ GOSUB INITIALISE
|
||||
$!
|
||||
$! Tell The User What Kind of Machine We Run On.
|
||||
$!
|
||||
$ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine."
|
||||
$ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'"
|
||||
$!
|
||||
$! Check To See If The OBJ Directory Exists.
|
||||
$!
|
||||
@ -145,6 +185,9 @@ $ LIB_OPENSSL = "VERIFY,ASN1PARS,REQ,DGST,DH,DHPARAM,ENC,PASSWD,GENDH,ERRSTR,"+-
|
||||
"S_TIME,APPS,S_CB,S_SOCKET,APP_RAND,VERSION,SESS_ID,"+-
|
||||
"CIPHERS,NSEQ,PKCS12,PKCS8,PKEY,PKEYPARAM,PKEYUTL,"+ -
|
||||
"SPKAC,SMIME,CMS,RAND,ENGINE,OCSP,PRIME,TS"
|
||||
$!
|
||||
$ LIB_OPENSSL = LIB_OPENSSL+ ",VMS_DECC_INIT"
|
||||
$!
|
||||
$ TCPIP_PROGRAMS = ",,"
|
||||
$ IF COMPILER .EQS. "VAXC" THEN -
|
||||
TCPIP_PROGRAMS = ",OPENSSL,"
|
||||
@ -202,7 +245,7 @@ $ LIB_COUNTER = -1
|
||||
$!
|
||||
$! Create a .OPT file for the object files
|
||||
$!
|
||||
$ OPEN/WRITE OBJECTS 'EXE_DIR''CURRENT_APP'.OPT
|
||||
$ OPEN /WRITE OBJECTS 'EXE_DIR''CURRENT_APP'.OPT
|
||||
$!
|
||||
$! Top Of The File Loop.
|
||||
$!
|
||||
@ -289,34 +332,18 @@ $ GOTO NEXT_APP
|
||||
$ ENDIF
|
||||
$!
|
||||
$! Link The Program.
|
||||
$! Check To See If We Are To Link With A Specific TCP/IP Library.
|
||||
$!
|
||||
$ ON WARNING THEN GOTO NEXT_APP
|
||||
$!
|
||||
$ IF (TCPIP_LIB.NES."")
|
||||
$ THEN
|
||||
$!
|
||||
$! Don't Link With The RSAREF Routines And TCP/IP Library.
|
||||
$!
|
||||
$ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
|
||||
'EXE_DIR''CURRENT_APP'.OPT/OPTION, -
|
||||
'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
|
||||
'TCPIP_LIB','OPT_FILE'/OPTION
|
||||
$!
|
||||
$! Else...
|
||||
$!
|
||||
$ ELSE
|
||||
$!
|
||||
$! Don't Link With The RSAREF Routines And Link With A TCP/IP Library.
|
||||
$!
|
||||
$ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
|
||||
'EXE_DIR''CURRENT_APP'.OPT/OPTION, -
|
||||
'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
|
||||
'OPT_FILE'/OPTION
|
||||
$!
|
||||
$! End The TCP/IP Library Check.
|
||||
$!
|
||||
$ ENDIF
|
||||
$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' /EXE='EXE_FILE' -
|
||||
'EXE_DIR''CURRENT_APP'.OPT /OPTIONS, -
|
||||
'SSL_LIB' /LIBRARY, -
|
||||
'CRYPTO_LIB' /LIBRARY -
|
||||
'TCPIP_LIB' -
|
||||
'ZLIB_LIB' -
|
||||
,'OPT_FILE' /OPTIONS
|
||||
$!
|
||||
$! Go Back And Do It Again.
|
||||
$!
|
||||
@ -351,7 +378,7 @@ $!
|
||||
$ CREATE 'OPT_FILE'
|
||||
$DECK
|
||||
!
|
||||
! Default System Options File To Link Agianst
|
||||
! Default System Options File To Link Against
|
||||
! The Sharable VAX C Runtime Library.
|
||||
!
|
||||
SYS$SHARE:VAXCRTL.EXE/SHARE
|
||||
@ -380,7 +407,7 @@ $!
|
||||
$ CREATE 'OPT_FILE'
|
||||
$DECK
|
||||
!
|
||||
! Default System Options File To Link Agianst
|
||||
! Default System Options File To Link Against
|
||||
! The Sharable C Runtime Library.
|
||||
!
|
||||
GNU_CC:[000000]GCCLIB/LIBRARY
|
||||
@ -415,7 +442,7 @@ $!
|
||||
$ CREATE 'OPT_FILE'
|
||||
$DECK
|
||||
!
|
||||
! Default System Options File To Link Agianst
|
||||
! Default System Options File To Link Against
|
||||
! The Sharable DEC C Runtime Library.
|
||||
!
|
||||
SYS$SHARE:DECC$SHR.EXE/SHARE
|
||||
@ -430,7 +457,7 @@ $!
|
||||
$ CREATE 'OPT_FILE'
|
||||
$DECK
|
||||
!
|
||||
! Default System Options File For non-VAX To Link Agianst
|
||||
! Default System Options File For non-VAX To Link Against
|
||||
! The Sharable C Runtime Library.
|
||||
!
|
||||
SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
|
||||
@ -514,14 +541,15 @@ $!
|
||||
$ IF (P1.EQS."NODEBUG")
|
||||
$ THEN
|
||||
$!
|
||||
$! P1 Is NODEBUG, So Compile Without Debugger Information.
|
||||
$! P1 Is NODEBUG, So Compile Without Debugger Information.
|
||||
$!
|
||||
$ DEBUGGER = "NODEBUG"
|
||||
$ TRACEBACK = "NOTRACEBACK"
|
||||
$ GCC_OPTIMIZE = "OPTIMIZE"
|
||||
$ CC_OPTIMIZE = "OPTIMIZE"
|
||||
$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
|
||||
$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
|
||||
$ DEBUGGER = "NODEBUG"
|
||||
$ LINKMAP = "NOMAP"
|
||||
$ TRACEBACK = "NOTRACEBACK"
|
||||
$ GCC_OPTIMIZE = "OPTIMIZE"
|
||||
$ CC_OPTIMIZE = "OPTIMIZE"
|
||||
$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
|
||||
$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
|
||||
$!
|
||||
$! Else...
|
||||
$!
|
||||
@ -535,6 +563,7 @@ $!
|
||||
$! Compile With Debugger Information.
|
||||
$!
|
||||
$ DEBUGGER = "DEBUG"
|
||||
$ LINKMAP = "MAP"
|
||||
$ TRACEBACK = "TRACEBACK"
|
||||
$ GCC_OPTIMIZE = "NOOPTIMIZE"
|
||||
$ CC_OPTIMIZE = "NOOPTIMIZE"
|
||||
@ -542,7 +571,7 @@ $ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
|
||||
$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
|
||||
$ ELSE
|
||||
$!
|
||||
$! Tell The User Entered An Invalid Option..
|
||||
$! Tell The User Entered An Invalid Option.
|
||||
$!
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:"
|
||||
@ -563,6 +592,87 @@ $! End The P1 Check.
|
||||
$!
|
||||
$ ENDIF
|
||||
$!
|
||||
$! Check P6 (POINTER_SIZE).
|
||||
$!
|
||||
$ IF (P6 .NES. "") .AND. (ARCH .NES. "VAX")
|
||||
$ THEN
|
||||
$!
|
||||
$ IF (P6 .EQS. "32")
|
||||
$ THEN
|
||||
$ POINTER_SIZE = " /POINTER_SIZE=32"
|
||||
$ ELSE
|
||||
$ POINTER_SIZE = F$EDIT( P6, "COLLAPSE, UPCASE")
|
||||
$ IF ((POINTER_SIZE .EQS. "64") .OR. -
|
||||
(POINTER_SIZE .EQS. "64=") .OR. -
|
||||
(POINTER_SIZE .EQS. "64=ARGV"))
|
||||
$ THEN
|
||||
$ ARCHD = ARCH+ "_64"
|
||||
$ LIB32 = ""
|
||||
$ IF (F$EXTRACT( 2, 1, POINTER_SIZE) .EQS. "=")
|
||||
$ THEN
|
||||
$! Explicit user choice: "64" or "64=ARGV".
|
||||
$ IF (POINTER_SIZE .EQS. "64=") THEN POINTER_SIZE = "64"
|
||||
$ ELSE
|
||||
$ SET NOON
|
||||
$ DEFINE /USER_MODE SYS$OUTPUT NL:
|
||||
$ DEFINE /USER_MODE SYS$ERROR NL:
|
||||
$ CC /NOLIST /NOOBJECT /POINTER_SIZE=64=ARGV NL:
|
||||
$ IF ($STATUS .AND. %X0FFF0000) .EQ. %X00030000
|
||||
$ THEN
|
||||
$ ! If we got here, it means DCL complained like this:
|
||||
$ ! %DCL-W-NOVALU, value not allowed - remove value specification
|
||||
$ ! \64=\
|
||||
$ !
|
||||
$ ! If the compiler was run, logicals defined in /USER would
|
||||
$ ! have been deassigned automatically. However, when DCL
|
||||
$ ! complains, they aren't, so we do it here (it might be
|
||||
$ ! unnecessary, but just in case there will be another error
|
||||
$ ! message further on that we don't want to miss)
|
||||
$ DEASSIGN /USER_MODE SYS$ERROR
|
||||
$ DEASSIGN /USER_MODE SYS$OUTPUT
|
||||
$ ELSE
|
||||
$ POINTER_SIZE = POINTER_SIZE + "=ARGV"
|
||||
$ ENDIF
|
||||
$ SET ON
|
||||
$ ENDIF
|
||||
$ POINTER_SIZE = " /POINTER_SIZE=''POINTER_SIZE'"
|
||||
$!
|
||||
$ ELSE
|
||||
$!
|
||||
$! Tell The User Entered An Invalid Option.
|
||||
$!
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$ WRITE SYS$OUTPUT "The Option ", P6, -
|
||||
" Is Invalid. The Valid Options Are:"
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$ WRITE SYS$OUTPUT -
|
||||
" """" : Compile with default (short) pointers."
|
||||
$ WRITE SYS$OUTPUT -
|
||||
" 32 : Compile with 32-bit (short) pointers."
|
||||
$ WRITE SYS$OUTPUT -
|
||||
" 64 : Compile with 64-bit (long) pointers (auto ARGV)."
|
||||
$ WRITE SYS$OUTPUT -
|
||||
" 64= : Compile with 64-bit (long) pointers (no ARGV)."
|
||||
$ WRITE SYS$OUTPUT -
|
||||
" 64=ARGV : Compile with 64-bit (long) pointers (ARGV)."
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$!
|
||||
$! Time To EXIT.
|
||||
$!
|
||||
$ EXIT
|
||||
$!
|
||||
$ ENDIF
|
||||
$!
|
||||
$ ENDIF
|
||||
$!
|
||||
$! End The P6 (POINTER_SIZE) Check.
|
||||
$!
|
||||
$ ENDIF
|
||||
$!
|
||||
$! Set basic C compiler /INCLUDE directories.
|
||||
$!
|
||||
$ CC_INCLUDES = "SYS$DISK:[-],SYS$DISK:[-.CRYPTO]"
|
||||
$!
|
||||
$! Check To See If P2 Is Blank.
|
||||
$!
|
||||
$ IF (P2.EQS."")
|
||||
@ -663,11 +773,64 @@ $ CCDEFS = "MONOLITH"
|
||||
$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
|
||||
$ CCEXTRAFLAGS = ""
|
||||
$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
|
||||
$ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
|
||||
$ CCDISABLEWARNINGS = "" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
|
||||
$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
|
||||
CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
|
||||
$!
|
||||
$! Check To See If The User Entered A Valid Paramter.
|
||||
$! Check To See If We Have A ZLIB Option.
|
||||
$!
|
||||
$ ZLIB = P7
|
||||
$ IF (ZLIB .NES. "")
|
||||
$ THEN
|
||||
$!
|
||||
$! Check for expected ZLIB files.
|
||||
$!
|
||||
$ err = 0
|
||||
$ file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
|
||||
$ if (f$search( file1) .eqs. "")
|
||||
$ then
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
|
||||
$ WRITE SYS$OUTPUT " Can't find header: ''file1'"
|
||||
$ err = 1
|
||||
$ endif
|
||||
$ file1 = f$parse( "A.;", ZLIB)- "A.;"
|
||||
$!
|
||||
$ file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
|
||||
$ if (f$search( file2) .eqs. "")
|
||||
$ then
|
||||
$ if (err .eq. 0)
|
||||
$ then
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
|
||||
$ endif
|
||||
$ WRITE SYS$OUTPUT " Can't find library: ''file2'"
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$ err = err+ 2
|
||||
$ endif
|
||||
$ if (err .eq. 1)
|
||||
$ then
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$ endif
|
||||
$!
|
||||
$ if (err .ne. 0)
|
||||
$ then
|
||||
$ EXIT
|
||||
$ endif
|
||||
$!
|
||||
$ CCDEFS = """ZLIB=1"", "+ CCDEFS
|
||||
$ CC_INCLUDES = CC_INCLUDES+ ", "+ file1
|
||||
$ ZLIB_LIB = ", ''file2' /library"
|
||||
$!
|
||||
$! Print info
|
||||
$!
|
||||
$ WRITE SYS$OUTPUT "ZLIB library spec: ", file2
|
||||
$!
|
||||
$! End The ZLIB Check.
|
||||
$!
|
||||
$ ENDIF
|
||||
$!
|
||||
$! Check To See If The User Entered A Valid Parameter.
|
||||
$!
|
||||
$ IF (P2.EQS."VAXC").OR.(P2.EQS."DECC").OR.(P2.EQS."GNUC")
|
||||
$ THEN
|
||||
@ -690,13 +853,13 @@ $!
|
||||
$ CC = "CC"
|
||||
$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
|
||||
THEN CC = "CC/DECC"
|
||||
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
|
||||
"/NOLIST/PREFIX=ALL" + -
|
||||
"/INCLUDE=(SYS$DISK:[-],SYS$DISK:[-.CRYPTO])" + CCEXTRAFLAGS
|
||||
$ CC = CC + " /''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ -
|
||||
"''POINTER_SIZE' /NOLIST /PREFIX=ALL" + -
|
||||
" /INCLUDE=(''CC_INCLUDES') " + CCEXTRAFLAGS
|
||||
$!
|
||||
$! Define The Linker Options File Name.
|
||||
$!
|
||||
$ OPT_FILE = "''EXE_DIR'VAX_DECC_OPTIONS.OPT"
|
||||
$ OPT_FILE = "VAX_DECC_OPTIONS.OPT"
|
||||
$!
|
||||
$! End DECC Check.
|
||||
$!
|
||||
@ -724,7 +887,7 @@ $ EXIT
|
||||
$ ENDIF
|
||||
$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
|
||||
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
|
||||
"/INCLUDE=(SYS$DISK:[-],SYS$DISK:[-.CRYPTO])" + CCEXTRAFLAGS
|
||||
"/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
|
||||
$ CCDEFS = CCDEFS + ",""VAXC"""
|
||||
$!
|
||||
$! Define <sys> As SYS$COMMON:[SYSLIB]
|
||||
@ -733,7 +896,7 @@ $ DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
|
||||
$!
|
||||
$! Define The Linker Options File Name.
|
||||
$!
|
||||
$ OPT_FILE = "''EXE_DIR'VAX_VAXC_OPTIONS.OPT"
|
||||
$ OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
|
||||
$!
|
||||
$! End VAXC Check
|
||||
$!
|
||||
@ -756,11 +919,11 @@ $! Use GNU C...
|
||||
$!
|
||||
$ IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC
|
||||
$ CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
|
||||
"/INCLUDE=(SYS$DISK:[-],SYS$DISK:[-.CRYPTO])" + CCEXTRAFLAGS
|
||||
"/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
|
||||
$!
|
||||
$! Define The Linker Options File Name.
|
||||
$!
|
||||
$ OPT_FILE = "''EXE_DIR'VAX_GNUC_OPTIONS.OPT"
|
||||
$ OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
|
||||
$!
|
||||
$! End The GNU C Check.
|
||||
$!
|
||||
@ -802,7 +965,7 @@ $ THEN
|
||||
$!
|
||||
$! Set the library to use SOCKETSHR
|
||||
$!
|
||||
$ TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT"
|
||||
$ TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
|
||||
$!
|
||||
$! Done with SOCKETSHR
|
||||
$!
|
||||
@ -828,13 +991,13 @@ $ THEN
|
||||
$!
|
||||
$! Set the library to use UCX.
|
||||
$!
|
||||
$ TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT/OPT"
|
||||
$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
|
||||
$ IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
|
||||
$ THEN
|
||||
$ TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT"
|
||||
$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
|
||||
$ ELSE
|
||||
$ IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
|
||||
TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT/OPT"
|
||||
TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
|
||||
$ ENDIF
|
||||
$!
|
||||
$! Done with UCX
|
||||
@ -848,7 +1011,7 @@ $ THEN
|
||||
$!
|
||||
$! Set the library to use TCPIP.
|
||||
$!
|
||||
$ TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT"
|
||||
$ TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
|
||||
$!
|
||||
$! Done with TCPIP
|
||||
$!
|
||||
@ -873,7 +1036,7 @@ $ CCDEFS = CCDEFS + ",TCPIP_TYPE_''P3'"
|
||||
$!
|
||||
$! Print info
|
||||
$!
|
||||
$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB
|
||||
$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
|
||||
$!
|
||||
$! Else The User Entered An Invalid Argument.
|
||||
$!
|
||||
@ -903,13 +1066,13 @@ $ IF COMPILER .EQS. "DECC"
|
||||
$ THEN
|
||||
$ IF CCDISABLEWARNINGS .NES. ""
|
||||
$ THEN
|
||||
$ CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
|
||||
$ CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
|
||||
$ ENDIF
|
||||
$ ELSE
|
||||
$ CCDISABLEWARNINGS = ""
|
||||
$ ENDIF
|
||||
$ CC2 = CC + "/DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS
|
||||
$ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
|
||||
$ CC2 = CC + " /DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS
|
||||
$ CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
|
||||
$!
|
||||
$! Show user the result
|
||||
$!
|
||||
@ -975,7 +1138,7 @@ $ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
|
||||
$!
|
||||
$! Set up the logical name OPENSSL to point at the include directory
|
||||
$!
|
||||
$ DEFINE OPENSSL/NOLOG '__INCLUDE'
|
||||
$ DEFINE OPENSSL /NOLOG '__INCLUDE'
|
||||
$!
|
||||
$! Done
|
||||
$!
|
||||
@ -983,15 +1146,24 @@ $ RETURN
|
||||
$!
|
||||
$ CLEANUP:
|
||||
$!
|
||||
$! Restore the logical name OPENSSL if it had a value
|
||||
$! Restore the saved logical name OPENSSL, if it had a value.
|
||||
$!
|
||||
$ IF __SAVE_OPENSSL .EQS. ""
|
||||
$ THEN
|
||||
$ DEASSIGN OPENSSL
|
||||
$ ELSE
|
||||
$ DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL'
|
||||
$ ENDIF
|
||||
$ if (f$type( __SAVE_OPENSSL) .nes. "")
|
||||
$ then
|
||||
$ IF __SAVE_OPENSSL .EQS. ""
|
||||
$ THEN
|
||||
$ DEASSIGN OPENSSL
|
||||
$ ELSE
|
||||
$ DEFINE /NOLOG OPENSSL '__SAVE_OPENSSL'
|
||||
$ ENDIF
|
||||
$ endif
|
||||
$!
|
||||
$! Close any open files.
|
||||
$!
|
||||
$ if (f$trnlnm( "objects", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
|
||||
close objects
|
||||
$!
|
||||
$! Done
|
||||
$!
|
||||
$ RETURN
|
||||
$!
|
||||
|
@ -145,7 +145,7 @@ localityName = Locality Name (eg, city)
|
||||
organizationalUnitName = Organizational Unit Name (eg, section)
|
||||
#organizationalUnitName_default =
|
||||
|
||||
commonName = Common Name (eg, YOUR name)
|
||||
commonName = Common Name (e.g. server FQDN or YOUR name)
|
||||
commonName_max = 64
|
||||
|
||||
emailAddress = Email Address
|
||||
|
@ -212,8 +212,13 @@ static void lock_dbg_cb(int mode, int type, const char *file, int line)
|
||||
}
|
||||
}
|
||||
|
||||
#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64)
|
||||
# define ARGV _Argv
|
||||
#else
|
||||
# define ARGV Argv
|
||||
#endif
|
||||
|
||||
int main(int Argc, char *Argv[])
|
||||
int main(int Argc, char *ARGV[])
|
||||
{
|
||||
ARGS arg;
|
||||
#define PROG_NAME_SIZE 39
|
||||
@ -228,6 +233,54 @@ int main(int Argc, char *Argv[])
|
||||
LHASH_OF(FUNCTION) *prog=NULL;
|
||||
long errline;
|
||||
|
||||
#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64)
|
||||
/* 2011-03-22 SMS.
|
||||
* If we have 32-bit pointers everywhere, then we're safe, and
|
||||
* we bypass this mess, as on non-VMS systems. (See ARGV,
|
||||
* above.)
|
||||
* Problem 1: Compaq/HP C before V7.3 always used 32-bit
|
||||
* pointers for argv[].
|
||||
* Fix 1: For a 32-bit argv[], when we're using 64-bit pointers
|
||||
* everywhere else, we always allocate and use a 64-bit
|
||||
* duplicate of argv[].
|
||||
* Problem 2: Compaq/HP C V7.3 (Alpha, IA64) before ECO1 failed
|
||||
* to NULL-terminate a 64-bit argv[]. (As this was written, the
|
||||
* compiler ECO was available only on IA64.)
|
||||
* Fix 2: Unless advised not to (VMS_TRUST_ARGV), we test a
|
||||
* 64-bit argv[argc] for NULL, and, if necessary, use a
|
||||
* (properly) NULL-terminated (64-bit) duplicate of argv[].
|
||||
* The same code is used in either case to duplicate argv[].
|
||||
* Some of these decisions could be handled in preprocessing,
|
||||
* but the code tends to get even uglier, and the penalty for
|
||||
* deciding at compile- or run-time is tiny.
|
||||
*/
|
||||
char **Argv = NULL;
|
||||
int free_Argv = 0;
|
||||
|
||||
if ((sizeof( _Argv) < 8) /* 32-bit argv[]. */
|
||||
# if !defined( VMS_TRUST_ARGV)
|
||||
|| (_Argv[ Argc] != NULL) /* Untrusted argv[argc] not NULL. */
|
||||
# endif
|
||||
)
|
||||
{
|
||||
int i;
|
||||
Argv = OPENSSL_malloc( (Argc+ 1)* sizeof( char *));
|
||||
if (Argv == NULL)
|
||||
{ ret = -1; goto end; }
|
||||
for(i = 0; i < Argc; i++)
|
||||
Argv[i] = _Argv[i];
|
||||
Argv[ Argc] = NULL; /* Certain NULL termination. */
|
||||
free_Argv = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Use the known-good 32-bit argv[] (which needs the
|
||||
* type cast to satisfy the compiler), or the trusted or
|
||||
* tested-good 64-bit argv[] as-is. */
|
||||
Argv = (char **)_Argv;
|
||||
}
|
||||
#endif /* defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64) */
|
||||
|
||||
arg.data=NULL;
|
||||
arg.count=0;
|
||||
|
||||
@ -373,6 +426,13 @@ end:
|
||||
BIO_free(bio_err);
|
||||
bio_err=NULL;
|
||||
}
|
||||
#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64)
|
||||
/* Free any duplicate Argv[] storage. */
|
||||
if (free_Argv)
|
||||
{
|
||||
OPENSSL_free(Argv);
|
||||
}
|
||||
#endif
|
||||
OPENSSL_EXIT(ret);
|
||||
}
|
||||
|
||||
|
@ -145,7 +145,7 @@ localityName = Locality Name (eg, city)
|
||||
organizationalUnitName = Organizational Unit Name (eg, section)
|
||||
#organizationalUnitName_default =
|
||||
|
||||
commonName = Common Name (eg, YOUR name)
|
||||
commonName = Common Name (e.g. server FQDN or YOUR name)
|
||||
commonName_max = 64
|
||||
|
||||
emailAddress = Email Address
|
||||
|
@ -647,7 +647,7 @@ int MAIN(int argc, char **argv)
|
||||
|
||||
if (!twopass) BUF_strlcpy(macpass, pass, sizeof macpass);
|
||||
|
||||
if (options & INFO) BIO_printf (bio_err, "MAC Iteration %ld\n", p12->mac->iter ? ASN1_INTEGER_get (p12->mac->iter) : 1);
|
||||
if ((options & INFO) && p12->mac) BIO_printf (bio_err, "MAC Iteration %ld\n", p12->mac->iter ? ASN1_INTEGER_get (p12->mac->iter) : 1);
|
||||
if(macver) {
|
||||
#ifdef CRYPTO_MDEBUG
|
||||
CRYPTO_push_info("verify MAC");
|
||||
|
@ -119,17 +119,17 @@ int MAIN(int argc, char **argv)
|
||||
if (!strcmp(*argv,"-in"))
|
||||
{
|
||||
if (--argc < 1) badarg = 1;
|
||||
infile= *(++argv);
|
||||
else infile= *(++argv);
|
||||
}
|
||||
else if (!strcmp(*argv,"-out"))
|
||||
{
|
||||
if (--argc < 1) badarg = 1;
|
||||
outfile= *(++argv);
|
||||
else outfile= *(++argv);
|
||||
}
|
||||
else if (!strcmp(*argv,"-sigfile"))
|
||||
{
|
||||
if (--argc < 1) badarg = 1;
|
||||
sigfile= *(++argv);
|
||||
else sigfile= *(++argv);
|
||||
}
|
||||
else if(!strcmp(*argv, "-inkey"))
|
||||
{
|
||||
@ -159,17 +159,17 @@ int MAIN(int argc, char **argv)
|
||||
else if (!strcmp(*argv,"-passin"))
|
||||
{
|
||||
if (--argc < 1) badarg = 1;
|
||||
passargin= *(++argv);
|
||||
else passargin= *(++argv);
|
||||
}
|
||||
else if (strcmp(*argv,"-peerform") == 0)
|
||||
{
|
||||
if (--argc < 1) badarg = 1;
|
||||
peerform=str2fmt(*(++argv));
|
||||
else peerform=str2fmt(*(++argv));
|
||||
}
|
||||
else if (strcmp(*argv,"-keyform") == 0)
|
||||
{
|
||||
if (--argc < 1) badarg = 1;
|
||||
keyform=str2fmt(*(++argv));
|
||||
else keyform=str2fmt(*(++argv));
|
||||
}
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
else if(!strcmp(*argv, "-engine"))
|
||||
|
@ -406,6 +406,7 @@ redoit:
|
||||
if (ret == INVALID_SOCKET)
|
||||
{
|
||||
#if defined(OPENSSL_SYS_WINDOWS) || (defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK))
|
||||
int i;
|
||||
i=WSAGetLastError();
|
||||
BIO_printf(bio_err,"accept error %d\n",i);
|
||||
#else
|
||||
|
@ -1230,7 +1230,8 @@ int MAIN(int argc, char **argv)
|
||||
count*=2;
|
||||
Time_F(START);
|
||||
for (it=count; it; it--)
|
||||
DES_ecb_encrypt(buf_as_des_cblock,buf_as_des_cblock,
|
||||
DES_ecb_encrypt((DES_cblock *)buf,
|
||||
(DES_cblock *)buf,
|
||||
&sch,DES_ENCRYPT);
|
||||
d=Time_F(STOP);
|
||||
} while (d <3);
|
||||
@ -2702,6 +2703,7 @@ static int do_multi(int multi)
|
||||
else
|
||||
rsa_results[k][1]=d;
|
||||
}
|
||||
#ifndef OPENSSL_NO_DSA
|
||||
else if(!strncmp(buf,"+F3:",4))
|
||||
{
|
||||
int k;
|
||||
@ -2723,6 +2725,7 @@ static int do_multi(int multi)
|
||||
else
|
||||
dsa_results[k][1]=d;
|
||||
}
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_ECDSA
|
||||
else if(!strncmp(buf,"+F4:",4))
|
||||
{
|
||||
|
188
apps/vms_decc_init.c
Executable file
188
apps/vms_decc_init.c
Executable file
@ -0,0 +1,188 @@
|
||||
#if defined( __VMS) && !defined( OPENSSL_NO_DECC_INIT) && \
|
||||
defined( __DECC) && !defined( __VAX) && (__CRTL_VER >= 70301000)
|
||||
# define USE_DECC_INIT 1
|
||||
#endif
|
||||
|
||||
#ifdef USE_DECC_INIT
|
||||
|
||||
/*
|
||||
* 2010-04-26 SMS.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* decc_init()
|
||||
*
|
||||
* On non-VAX systems, uses LIB$INITIALIZE to set a collection of C
|
||||
* RTL features without using the DECC$* logical name method.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unixlib.h>
|
||||
|
||||
|
||||
/* Global storage. */
|
||||
|
||||
/* Flag to sense if decc_init() was called. */
|
||||
|
||||
int decc_init_done = -1;
|
||||
|
||||
|
||||
/* Structure to hold a DECC$* feature name and its desired value. */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *name;
|
||||
int value;
|
||||
} decc_feat_t;
|
||||
|
||||
|
||||
/* Array of DECC$* feature names and their desired values.
|
||||
* Note: DECC$ARGV_PARSE_STYLE is the urgent one.
|
||||
*/
|
||||
|
||||
decc_feat_t decc_feat_array[] =
|
||||
{
|
||||
/* Preserve command-line case with SET PROCESS/PARSE_STYLE=EXTENDED */
|
||||
{ "DECC$ARGV_PARSE_STYLE", 1 },
|
||||
|
||||
/* Preserve case for file names on ODS5 disks. */
|
||||
{ "DECC$EFS_CASE_PRESERVE", 1 },
|
||||
|
||||
/* Enable multiple dots (and most characters) in ODS5 file names,
|
||||
* while preserving VMS-ness of ";version".
|
||||
*/
|
||||
{ "DECC$EFS_CHARSET", 1 },
|
||||
|
||||
/* List terminator. */
|
||||
{ (char *)NULL, 0 }
|
||||
};
|
||||
|
||||
|
||||
/* LIB$INITIALIZE initialization function. */
|
||||
|
||||
static void decc_init( void)
|
||||
{
|
||||
char *openssl_debug_decc_init;
|
||||
int verbose = 0;
|
||||
int feat_index;
|
||||
int feat_value;
|
||||
int feat_value_max;
|
||||
int feat_value_min;
|
||||
int i;
|
||||
int sts;
|
||||
|
||||
/* Get debug option. */
|
||||
openssl_debug_decc_init = getenv( "OPENSSL_DEBUG_DECC_INIT");
|
||||
if (openssl_debug_decc_init != NULL)
|
||||
{
|
||||
verbose = strtol( openssl_debug_decc_init, NULL, 10);
|
||||
if (verbose <= 0)
|
||||
{
|
||||
verbose = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Set the global flag to indicate that LIB$INITIALIZE worked. */
|
||||
decc_init_done = 1;
|
||||
|
||||
/* Loop through all items in the decc_feat_array[]. */
|
||||
|
||||
for (i = 0; decc_feat_array[ i].name != NULL; i++)
|
||||
{
|
||||
/* Get the feature index. */
|
||||
feat_index = decc$feature_get_index( decc_feat_array[ i].name);
|
||||
if (feat_index >= 0)
|
||||
{
|
||||
/* Valid item. Collect its properties. */
|
||||
feat_value = decc$feature_get_value( feat_index, 1);
|
||||
feat_value_min = decc$feature_get_value( feat_index, 2);
|
||||
feat_value_max = decc$feature_get_value( feat_index, 3);
|
||||
|
||||
/* Check the validity of our desired value. */
|
||||
if ((decc_feat_array[ i].value >= feat_value_min) &&
|
||||
(decc_feat_array[ i].value <= feat_value_max))
|
||||
{
|
||||
/* Valid value. Set it if necessary. */
|
||||
if (feat_value != decc_feat_array[ i].value)
|
||||
{
|
||||
sts = decc$feature_set_value( feat_index,
|
||||
1,
|
||||
decc_feat_array[ i].value);
|
||||
|
||||
if (verbose > 1)
|
||||
{
|
||||
fprintf( stderr, " %s = %d, sts = %d.\n",
|
||||
decc_feat_array[ i].name,
|
||||
decc_feat_array[ i].value,
|
||||
sts);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Invalid DECC feature value. */
|
||||
fprintf( stderr,
|
||||
" INVALID DECC$FEATURE VALUE, %d: %d <= %s <= %d.\n",
|
||||
feat_value,
|
||||
feat_value_min, decc_feat_array[ i].name, feat_value_max);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Invalid DECC feature name. */
|
||||
fprintf( stderr,
|
||||
" UNKNOWN DECC$FEATURE: %s.\n", decc_feat_array[ i].name);
|
||||
}
|
||||
}
|
||||
|
||||
if (verbose > 0)
|
||||
{
|
||||
fprintf( stderr, " DECC_INIT complete.\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* Get "decc_init()" into a valid, loaded LIB$INITIALIZE PSECT. */
|
||||
|
||||
#pragma nostandard
|
||||
|
||||
/* Establish the LIB$INITIALIZE PSECTs, with proper alignment and
|
||||
* other attributes. Note that "nopic" is significant only on VAX.
|
||||
*/
|
||||
#pragma extern_model save
|
||||
|
||||
#if __INITIAL_POINTER_SIZE == 64
|
||||
# define PSECT_ALIGN 3
|
||||
#else
|
||||
# define PSECT_ALIGN 2
|
||||
#endif
|
||||
|
||||
#pragma extern_model strict_refdef "LIB$INITIALIZ" PSECT_ALIGN, nopic, nowrt
|
||||
const int spare[ 8] = { 0 };
|
||||
|
||||
#pragma extern_model strict_refdef "LIB$INITIALIZE" PSECT_ALIGN, nopic, nowrt
|
||||
void (*const x_decc_init)() = decc_init;
|
||||
|
||||
#pragma extern_model restore
|
||||
|
||||
/* Fake reference to ensure loading the LIB$INITIALIZE PSECT. */
|
||||
|
||||
#pragma extern_model save
|
||||
|
||||
int LIB$INITIALIZE( void);
|
||||
|
||||
#pragma extern_model strict_refdef
|
||||
int dmy_lib$initialize = (int) LIB$INITIALIZE;
|
||||
|
||||
#pragma extern_model restore
|
||||
|
||||
#pragma standard
|
||||
|
||||
#else /* def USE_DECC_INIT */
|
||||
|
||||
/* Dummy code to avoid a %CC-W-EMPTYFILE complaint. */
|
||||
int decc_init_dummy( void);
|
||||
|
||||
#endif /* def USE_DECC_INIT */
|
@ -987,7 +987,7 @@ bad:
|
||||
else
|
||||
{
|
||||
pk=load_key(bio_err,
|
||||
keyfile, FORMAT_PEM, 0,
|
||||
keyfile, keyformat, 0,
|
||||
passin, e, "request key");
|
||||
if (pk == NULL) goto end;
|
||||
}
|
||||
|
4
config
4
config
@ -825,6 +825,10 @@ esac
|
||||
# options="$options -DATALLA"
|
||||
#fi
|
||||
|
||||
($CC -Wa,--help -c -o /dev/null -x assembler /dev/null 2>&1 | \
|
||||
grep \\--noexecstack) 2>&1 > /dev/null && \
|
||||
options="$options -Wa,--noexecstack"
|
||||
|
||||
# gcc < 2.8 does not support -march=ultrasparc
|
||||
if [ "$OUT" = solaris-sparcv9-gcc -a $GCCVER -lt 28 ]
|
||||
then
|
||||
|
@ -40,22 +40,18 @@
|
||||
#ifndef LPDIR_H
|
||||
#include "LPdir.h"
|
||||
#endif
|
||||
#include "vms_rms.h"
|
||||
|
||||
/* Because some compiler options hide this macor */
|
||||
/* Some compiler options hide EVMSERR. */
|
||||
#ifndef EVMSERR
|
||||
#define EVMSERR 65535 /* error for non-translatable VMS errors */
|
||||
# define EVMSERR 65535 /* error for non-translatable VMS errors */
|
||||
#endif
|
||||
|
||||
struct LP_dir_context_st
|
||||
{
|
||||
unsigned long VMS_context;
|
||||
#ifdef NAML$C_MAXRSS
|
||||
char filespec[NAML$C_MAXRSS+1];
|
||||
char result[NAML$C_MAXRSS+1];
|
||||
#else
|
||||
char filespec[256];
|
||||
char result[256];
|
||||
#endif
|
||||
char filespec[ NAMX_MAXRSS+ 1];
|
||||
char result[ NAMX_MAXRSS+ 1];
|
||||
struct dsc$descriptor_d filespec_dsc;
|
||||
struct dsc$descriptor_d result_dsc;
|
||||
};
|
||||
@ -66,6 +62,16 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)
|
||||
char *p, *r;
|
||||
size_t l;
|
||||
unsigned long flags = 0;
|
||||
|
||||
/* Arrange 32-bit pointer to (copied) string storage, if needed. */
|
||||
#if __INITIAL_POINTER_SIZE == 64
|
||||
# pragma pointer_size save
|
||||
# pragma pointer_size 32
|
||||
char *ctx_filespec_32p;
|
||||
# pragma pointer_size restore
|
||||
char ctx_filespec_32[ NAMX_MAXRSS+ 1];
|
||||
#endif /* __INITIAL_POINTER_SIZE == 64 */
|
||||
|
||||
#ifdef NAML$C_MAXRSS
|
||||
flags |= LIB$M_FIL_LONG_NAMES;
|
||||
#endif
|
||||
@ -93,13 +99,7 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)
|
||||
|
||||
filespeclen += 4; /* "*.*;" */
|
||||
|
||||
if (filespeclen >
|
||||
#ifdef NAML$C_MAXRSS
|
||||
NAML$C_MAXRSS
|
||||
#else
|
||||
255
|
||||
#endif
|
||||
)
|
||||
if (filespeclen > NAMX_MAXRSS)
|
||||
{
|
||||
errno = ENAMETOOLONG;
|
||||
return 0;
|
||||
@ -115,14 +115,21 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)
|
||||
|
||||
strcpy((*ctx)->filespec,directory);
|
||||
strcat((*ctx)->filespec,"*.*;");
|
||||
|
||||
/* Arrange 32-bit pointer to (copied) string storage, if needed. */
|
||||
#if __INITIAL_POINTER_SIZE == 64
|
||||
# define CTX_FILESPEC ctx_filespec_32p
|
||||
/* Copy the file name to storage with a 32-bit pointer. */
|
||||
ctx_filespec_32p = ctx_filespec_32;
|
||||
strcpy( ctx_filespec_32p, (*ctx)->filespec);
|
||||
#else /* __INITIAL_POINTER_SIZE == 64 */
|
||||
# define CTX_FILESPEC (*ctx)->filespec
|
||||
#endif /* __INITIAL_POINTER_SIZE == 64 [else] */
|
||||
|
||||
(*ctx)->filespec_dsc.dsc$w_length = filespeclen;
|
||||
(*ctx)->filespec_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
|
||||
(*ctx)->filespec_dsc.dsc$b_class = DSC$K_CLASS_S;
|
||||
(*ctx)->filespec_dsc.dsc$a_pointer = (*ctx)->filespec;
|
||||
(*ctx)->result_dsc.dsc$w_length = 0;
|
||||
(*ctx)->result_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
|
||||
(*ctx)->result_dsc.dsc$b_class = DSC$K_CLASS_D;
|
||||
(*ctx)->result_dsc.dsc$a_pointer = 0;
|
||||
(*ctx)->filespec_dsc.dsc$a_pointer = CTX_FILESPEC;
|
||||
}
|
||||
|
||||
(*ctx)->result_dsc.dsc$w_length = 0;
|
||||
|
@ -74,7 +74,9 @@ x86_64cpuid.s: x86_64cpuid.pl
|
||||
$(PERL) x86_64cpuid.pl $(PERLASM_SCHEME) > $@
|
||||
ia64cpuid.s: ia64cpuid.S
|
||||
$(CC) $(CFLAGS) -E ia64cpuid.S > $@
|
||||
ppccpuid.s: ppccpuid.pl; $(PERL) ppccpuid.pl $(PERLASM_SCHEME) $@
|
||||
ppccpuid.s: ppccpuid.pl; $(PERL) ppccpuid.pl $(PERLASM_SCHEME) $@
|
||||
alphacpuid.s: alphacpuid.pl
|
||||
$(PERL) $< | $(CC) -E - | tee $@ > /dev/null
|
||||
|
||||
testapps:
|
||||
[ -z "$(THIS)" ] || ( if echo $(SDIRS) | fgrep ' des '; \
|
||||
|
@ -85,9 +85,9 @@ int AES_wrap_key(AES_KEY *key, const unsigned char *iv,
|
||||
A[7] ^= (unsigned char)(t & 0xff);
|
||||
if (t > 0xff)
|
||||
{
|
||||
A[6] ^= (unsigned char)((t & 0xff) >> 8);
|
||||
A[5] ^= (unsigned char)((t & 0xff) >> 16);
|
||||
A[4] ^= (unsigned char)((t & 0xff) >> 24);
|
||||
A[6] ^= (unsigned char)((t >> 8) & 0xff);
|
||||
A[5] ^= (unsigned char)((t >> 16) & 0xff);
|
||||
A[4] ^= (unsigned char)((t >> 24) & 0xff);
|
||||
}
|
||||
memcpy(R, B + 8, 8);
|
||||
}
|
||||
@ -119,9 +119,9 @@ int AES_unwrap_key(AES_KEY *key, const unsigned char *iv,
|
||||
A[7] ^= (unsigned char)(t & 0xff);
|
||||
if (t > 0xff)
|
||||
{
|
||||
A[6] ^= (unsigned char)((t & 0xff) >> 8);
|
||||
A[5] ^= (unsigned char)((t & 0xff) >> 16);
|
||||
A[4] ^= (unsigned char)((t & 0xff) >> 24);
|
||||
A[6] ^= (unsigned char)((t >> 8) & 0xff);
|
||||
A[5] ^= (unsigned char)((t >> 16) & 0xff);
|
||||
A[4] ^= (unsigned char)((t >> 24) & 0xff);
|
||||
}
|
||||
memcpy(B + 8, R, 8);
|
||||
AES_decrypt(B, B, key);
|
||||
|
@ -16,12 +16,20 @@
|
||||
# allows to merge logical or arithmetic operation with shift or rotate
|
||||
# in one instruction and emit combined result every cycle. The module
|
||||
# is endian-neutral. The performance is ~42 cycles/byte for 128-bit
|
||||
# key.
|
||||
# key [on single-issue Xscale PXA250 core].
|
||||
|
||||
# May 2007.
|
||||
#
|
||||
# AES_set_[en|de]crypt_key is added.
|
||||
|
||||
# July 2010.
|
||||
#
|
||||
# Rescheduling for dual-issue pipeline resulted in 12% improvement on
|
||||
# Cortex A8 core and ~25 cycles per byte processed with 128-bit key.
|
||||
|
||||
while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {}
|
||||
open STDOUT,">$output";
|
||||
|
||||
$s0="r0";
|
||||
$s1="r1";
|
||||
$s2="r2";
|
||||
@ -164,24 +172,24 @@ AES_encrypt:
|
||||
ldrb $t2,[$rounds,#1]
|
||||
ldrb $t3,[$rounds,#0]
|
||||
orr $s0,$s0,$t1,lsl#8
|
||||
orr $s0,$s0,$t2,lsl#16
|
||||
orr $s0,$s0,$t3,lsl#24
|
||||
ldrb $s1,[$rounds,#7]
|
||||
orr $s0,$s0,$t2,lsl#16
|
||||
ldrb $t1,[$rounds,#6]
|
||||
orr $s0,$s0,$t3,lsl#24
|
||||
ldrb $t2,[$rounds,#5]
|
||||
ldrb $t3,[$rounds,#4]
|
||||
orr $s1,$s1,$t1,lsl#8
|
||||
orr $s1,$s1,$t2,lsl#16
|
||||
orr $s1,$s1,$t3,lsl#24
|
||||
ldrb $s2,[$rounds,#11]
|
||||
orr $s1,$s1,$t2,lsl#16
|
||||
ldrb $t1,[$rounds,#10]
|
||||
orr $s1,$s1,$t3,lsl#24
|
||||
ldrb $t2,[$rounds,#9]
|
||||
ldrb $t3,[$rounds,#8]
|
||||
orr $s2,$s2,$t1,lsl#8
|
||||
orr $s2,$s2,$t2,lsl#16
|
||||
orr $s2,$s2,$t3,lsl#24
|
||||
ldrb $s3,[$rounds,#15]
|
||||
orr $s2,$s2,$t2,lsl#16
|
||||
ldrb $t1,[$rounds,#14]
|
||||
orr $s2,$s2,$t3,lsl#24
|
||||
ldrb $t2,[$rounds,#13]
|
||||
ldrb $t3,[$rounds,#12]
|
||||
orr $s3,$s3,$t1,lsl#8
|
||||
@ -196,24 +204,24 @@ AES_encrypt:
|
||||
mov $t3,$s0,lsr#8
|
||||
strb $t1,[$rounds,#0]
|
||||
strb $t2,[$rounds,#1]
|
||||
strb $t3,[$rounds,#2]
|
||||
strb $s0,[$rounds,#3]
|
||||
mov $t1,$s1,lsr#24
|
||||
strb $t3,[$rounds,#2]
|
||||
mov $t2,$s1,lsr#16
|
||||
strb $s0,[$rounds,#3]
|
||||
mov $t3,$s1,lsr#8
|
||||
strb $t1,[$rounds,#4]
|
||||
strb $t2,[$rounds,#5]
|
||||
strb $t3,[$rounds,#6]
|
||||
strb $s1,[$rounds,#7]
|
||||
mov $t1,$s2,lsr#24
|
||||
strb $t3,[$rounds,#6]
|
||||
mov $t2,$s2,lsr#16
|
||||
strb $s1,[$rounds,#7]
|
||||
mov $t3,$s2,lsr#8
|
||||
strb $t1,[$rounds,#8]
|
||||
strb $t2,[$rounds,#9]
|
||||
strb $t3,[$rounds,#10]
|
||||
strb $s2,[$rounds,#11]
|
||||
mov $t1,$s3,lsr#24
|
||||
strb $t3,[$rounds,#10]
|
||||
mov $t2,$s3,lsr#16
|
||||
strb $s2,[$rounds,#11]
|
||||
mov $t3,$s3,lsr#8
|
||||
strb $t1,[$rounds,#12]
|
||||
strb $t2,[$rounds,#13]
|
||||
@ -230,141 +238,137 @@ AES_encrypt:
|
||||
.align 2
|
||||
_armv4_AES_encrypt:
|
||||
str lr,[sp,#-4]! @ push lr
|
||||
ldr $t1,[$key],#16
|
||||
ldr $t2,[$key,#-12]
|
||||
ldr $t3,[$key,#-8]
|
||||
ldr $i1,[$key,#-4]
|
||||
ldr $rounds,[$key,#240-16]
|
||||
ldmia $key!,{$t1-$i1}
|
||||
eor $s0,$s0,$t1
|
||||
ldr $rounds,[$key,#240-16]
|
||||
eor $s1,$s1,$t2
|
||||
eor $s2,$s2,$t3
|
||||
eor $s3,$s3,$i1
|
||||
sub $rounds,$rounds,#1
|
||||
mov lr,#255
|
||||
|
||||
.Lenc_loop:
|
||||
and $i1,lr,$s0
|
||||
and $i2,lr,$s0,lsr#8
|
||||
and $i3,lr,$s0,lsr#16
|
||||
and $i1,lr,$s0
|
||||
mov $s0,$s0,lsr#24
|
||||
.Lenc_loop:
|
||||
ldr $t1,[$tbl,$i1,lsl#2] @ Te3[s0>>0]
|
||||
ldr $s0,[$tbl,$s0,lsl#2] @ Te0[s0>>24]
|
||||
ldr $t2,[$tbl,$i2,lsl#2] @ Te2[s0>>8]
|
||||
ldr $t3,[$tbl,$i3,lsl#2] @ Te1[s0>>16]
|
||||
|
||||
and $i1,lr,$s1,lsr#16 @ i0
|
||||
ldr $t2,[$tbl,$i2,lsl#2] @ Te2[s0>>8]
|
||||
and $i2,lr,$s1
|
||||
ldr $t3,[$tbl,$i3,lsl#2] @ Te1[s0>>16]
|
||||
and $i3,lr,$s1,lsr#8
|
||||
ldr $s0,[$tbl,$s0,lsl#2] @ Te0[s0>>24]
|
||||
mov $s1,$s1,lsr#24
|
||||
|
||||
ldr $i1,[$tbl,$i1,lsl#2] @ Te1[s1>>16]
|
||||
ldr $s1,[$tbl,$s1,lsl#2] @ Te0[s1>>24]
|
||||
ldr $i2,[$tbl,$i2,lsl#2] @ Te3[s1>>0]
|
||||
ldr $i3,[$tbl,$i3,lsl#2] @ Te2[s1>>8]
|
||||
eor $s0,$s0,$i1,ror#8
|
||||
eor $s1,$s1,$t1,ror#24
|
||||
eor $t2,$t2,$i2,ror#8
|
||||
eor $t3,$t3,$i3,ror#8
|
||||
|
||||
ldr $s1,[$tbl,$s1,lsl#2] @ Te0[s1>>24]
|
||||
and $i1,lr,$s2,lsr#8 @ i0
|
||||
eor $t2,$t2,$i2,ror#8
|
||||
and $i2,lr,$s2,lsr#16 @ i1
|
||||
eor $t3,$t3,$i3,ror#8
|
||||
and $i3,lr,$s2
|
||||
mov $s2,$s2,lsr#24
|
||||
eor $s1,$s1,$t1,ror#24
|
||||
ldr $i1,[$tbl,$i1,lsl#2] @ Te2[s2>>8]
|
||||
mov $s2,$s2,lsr#24
|
||||
|
||||
ldr $i2,[$tbl,$i2,lsl#2] @ Te1[s2>>16]
|
||||
ldr $s2,[$tbl,$s2,lsl#2] @ Te0[s2>>24]
|
||||
ldr $i3,[$tbl,$i3,lsl#2] @ Te3[s2>>0]
|
||||
eor $s0,$s0,$i1,ror#16
|
||||
eor $s1,$s1,$i2,ror#8
|
||||
eor $s2,$s2,$t2,ror#16
|
||||
eor $t3,$t3,$i3,ror#16
|
||||
|
||||
ldr $s2,[$tbl,$s2,lsl#2] @ Te0[s2>>24]
|
||||
and $i1,lr,$s3 @ i0
|
||||
eor $s1,$s1,$i2,ror#8
|
||||
and $i2,lr,$s3,lsr#8 @ i1
|
||||
eor $t3,$t3,$i3,ror#16
|
||||
and $i3,lr,$s3,lsr#16 @ i2
|
||||
mov $s3,$s3,lsr#24
|
||||
eor $s2,$s2,$t2,ror#16
|
||||
ldr $i1,[$tbl,$i1,lsl#2] @ Te3[s3>>0]
|
||||
mov $s3,$s3,lsr#24
|
||||
|
||||
ldr $i2,[$tbl,$i2,lsl#2] @ Te2[s3>>8]
|
||||
ldr $i3,[$tbl,$i3,lsl#2] @ Te1[s3>>16]
|
||||
ldr $s3,[$tbl,$s3,lsl#2] @ Te0[s3>>24]
|
||||
eor $s0,$s0,$i1,ror#24
|
||||
ldr $s3,[$tbl,$s3,lsl#2] @ Te0[s3>>24]
|
||||
eor $s1,$s1,$i2,ror#16
|
||||
ldr $i1,[$key],#16
|
||||
eor $s2,$s2,$i3,ror#8
|
||||
ldr $t1,[$key,#-12]
|
||||
eor $s3,$s3,$t3,ror#8
|
||||
|
||||
ldr $t1,[$key],#16
|
||||
ldr $t2,[$key,#-12]
|
||||
ldr $t3,[$key,#-8]
|
||||
ldr $i1,[$key,#-4]
|
||||
eor $s0,$s0,$t1
|
||||
eor $s1,$s1,$t2
|
||||
eor $s2,$s2,$t3
|
||||
eor $s3,$s3,$i1
|
||||
ldr $t2,[$key,#-8]
|
||||
eor $s0,$s0,$i1
|
||||
ldr $t3,[$key,#-4]
|
||||
and $i1,lr,$s0
|
||||
eor $s1,$s1,$t1
|
||||
and $i2,lr,$s0,lsr#8
|
||||
eor $s2,$s2,$t2
|
||||
and $i3,lr,$s0,lsr#16
|
||||
eor $s3,$s3,$t3
|
||||
mov $s0,$s0,lsr#24
|
||||
|
||||
subs $rounds,$rounds,#1
|
||||
bne .Lenc_loop
|
||||
|
||||
add $tbl,$tbl,#2
|
||||
|
||||
and $i1,lr,$s0
|
||||
and $i2,lr,$s0,lsr#8
|
||||
and $i3,lr,$s0,lsr#16
|
||||
mov $s0,$s0,lsr#24
|
||||
ldrb $t1,[$tbl,$i1,lsl#2] @ Te4[s0>>0]
|
||||
ldrb $s0,[$tbl,$s0,lsl#2] @ Te4[s0>>24]
|
||||
ldrb $t2,[$tbl,$i2,lsl#2] @ Te4[s0>>8]
|
||||
ldrb $t3,[$tbl,$i3,lsl#2] @ Te4[s0>>16]
|
||||
|
||||
and $i1,lr,$s1,lsr#16 @ i0
|
||||
ldrb $t2,[$tbl,$i2,lsl#2] @ Te4[s0>>8]
|
||||
and $i2,lr,$s1
|
||||
ldrb $t3,[$tbl,$i3,lsl#2] @ Te4[s0>>16]
|
||||
and $i3,lr,$s1,lsr#8
|
||||
ldrb $s0,[$tbl,$s0,lsl#2] @ Te4[s0>>24]
|
||||
mov $s1,$s1,lsr#24
|
||||
|
||||
ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s1>>16]
|
||||
ldrb $s1,[$tbl,$s1,lsl#2] @ Te4[s1>>24]
|
||||
ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s1>>0]
|
||||
ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s1>>8]
|
||||
eor $s0,$i1,$s0,lsl#8
|
||||
eor $s1,$t1,$s1,lsl#24
|
||||
eor $t2,$i2,$t2,lsl#8
|
||||
eor $t3,$i3,$t3,lsl#8
|
||||
|
||||
ldrb $s1,[$tbl,$s1,lsl#2] @ Te4[s1>>24]
|
||||
and $i1,lr,$s2,lsr#8 @ i0
|
||||
eor $t2,$i2,$t2,lsl#8
|
||||
and $i2,lr,$s2,lsr#16 @ i1
|
||||
eor $t3,$i3,$t3,lsl#8
|
||||
and $i3,lr,$s2
|
||||
mov $s2,$s2,lsr#24
|
||||
eor $s1,$t1,$s1,lsl#24
|
||||
ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s2>>8]
|
||||
mov $s2,$s2,lsr#24
|
||||
|
||||
ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s2>>16]
|
||||
ldrb $s2,[$tbl,$s2,lsl#2] @ Te4[s2>>24]
|
||||
ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s2>>0]
|
||||
eor $s0,$i1,$s0,lsl#8
|
||||
eor $s1,$s1,$i2,lsl#16
|
||||
eor $s2,$t2,$s2,lsl#24
|
||||
eor $t3,$i3,$t3,lsl#8
|
||||
|
||||
ldrb $s2,[$tbl,$s2,lsl#2] @ Te4[s2>>24]
|
||||
and $i1,lr,$s3 @ i0
|
||||
eor $s1,$s1,$i2,lsl#16
|
||||
and $i2,lr,$s3,lsr#8 @ i1
|
||||
eor $t3,$i3,$t3,lsl#8
|
||||
and $i3,lr,$s3,lsr#16 @ i2
|
||||
mov $s3,$s3,lsr#24
|
||||
eor $s2,$t2,$s2,lsl#24
|
||||
ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s3>>0]
|
||||
mov $s3,$s3,lsr#24
|
||||
|
||||
ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s3>>8]
|
||||
ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s3>>16]
|
||||
ldrb $s3,[$tbl,$s3,lsl#2] @ Te4[s3>>24]
|
||||
eor $s0,$i1,$s0,lsl#8
|
||||
ldrb $s3,[$tbl,$s3,lsl#2] @ Te4[s3>>24]
|
||||
ldr $i1,[$key,#0]
|
||||
eor $s1,$s1,$i2,lsl#8
|
||||
ldr $t1,[$key,#4]
|
||||
eor $s2,$s2,$i3,lsl#16
|
||||
ldr $t2,[$key,#8]
|
||||
eor $s3,$t3,$s3,lsl#24
|
||||
ldr $t3,[$key,#12]
|
||||
|
||||
ldr lr,[sp],#4 @ pop lr
|
||||
ldr $t1,[$key,#0]
|
||||
ldr $t2,[$key,#4]
|
||||
ldr $t3,[$key,#8]
|
||||
ldr $i1,[$key,#12]
|
||||
eor $s0,$s0,$t1
|
||||
eor $s1,$s1,$t2
|
||||
eor $s2,$s2,$t3
|
||||
eor $s3,$s3,$i1
|
||||
eor $s0,$s0,$i1
|
||||
eor $s1,$s1,$t1
|
||||
eor $s2,$s2,$t2
|
||||
eor $s3,$s3,$t3
|
||||
|
||||
sub $tbl,$tbl,#2
|
||||
mov pc,lr @ return
|
||||
ldr pc,[sp],#4 @ pop and return
|
||||
.size _armv4_AES_encrypt,.-_armv4_AES_encrypt
|
||||
|
||||
.global AES_set_encrypt_key
|
||||
@ -399,31 +403,31 @@ AES_set_encrypt_key:
|
||||
ldrb $t2,[$rounds,#1]
|
||||
ldrb $t3,[$rounds,#0]
|
||||
orr $s0,$s0,$t1,lsl#8
|
||||
orr $s0,$s0,$t2,lsl#16
|
||||
orr $s0,$s0,$t3,lsl#24
|
||||
ldrb $s1,[$rounds,#7]
|
||||
orr $s0,$s0,$t2,lsl#16
|
||||
ldrb $t1,[$rounds,#6]
|
||||
orr $s0,$s0,$t3,lsl#24
|
||||
ldrb $t2,[$rounds,#5]
|
||||
ldrb $t3,[$rounds,#4]
|
||||
orr $s1,$s1,$t1,lsl#8
|
||||
orr $s1,$s1,$t2,lsl#16
|
||||
orr $s1,$s1,$t3,lsl#24
|
||||
ldrb $s2,[$rounds,#11]
|
||||
orr $s1,$s1,$t2,lsl#16
|
||||
ldrb $t1,[$rounds,#10]
|
||||
orr $s1,$s1,$t3,lsl#24
|
||||
ldrb $t2,[$rounds,#9]
|
||||
ldrb $t3,[$rounds,#8]
|
||||
orr $s2,$s2,$t1,lsl#8
|
||||
orr $s2,$s2,$t2,lsl#16
|
||||
orr $s2,$s2,$t3,lsl#24
|
||||
ldrb $s3,[$rounds,#15]
|
||||
orr $s2,$s2,$t2,lsl#16
|
||||
ldrb $t1,[$rounds,#14]
|
||||
orr $s2,$s2,$t3,lsl#24
|
||||
ldrb $t2,[$rounds,#13]
|
||||
ldrb $t3,[$rounds,#12]
|
||||
orr $s3,$s3,$t1,lsl#8
|
||||
orr $s3,$s3,$t2,lsl#16
|
||||
orr $s3,$s3,$t3,lsl#24
|
||||
str $s0,[$key],#16
|
||||
orr $s3,$s3,$t2,lsl#16
|
||||
str $s1,[$key,#-12]
|
||||
orr $s3,$s3,$t3,lsl#24
|
||||
str $s2,[$key,#-8]
|
||||
str $s3,[$key,#-4]
|
||||
|
||||
@ -437,27 +441,26 @@ AES_set_encrypt_key:
|
||||
.L128_loop:
|
||||
and $t2,lr,$s3,lsr#24
|
||||
and $i1,lr,$s3,lsr#16
|
||||
and $i2,lr,$s3,lsr#8
|
||||
and $i3,lr,$s3
|
||||
ldrb $t2,[$tbl,$t2]
|
||||
and $i2,lr,$s3,lsr#8
|
||||
ldrb $i1,[$tbl,$i1]
|
||||
and $i3,lr,$s3
|
||||
ldrb $i2,[$tbl,$i2]
|
||||
ldrb $i3,[$tbl,$i3]
|
||||
ldr $t1,[$t3],#4 @ rcon[i++]
|
||||
orr $t2,$t2,$i1,lsl#24
|
||||
ldrb $i3,[$tbl,$i3]
|
||||
orr $t2,$t2,$i2,lsl#16
|
||||
ldr $t1,[$t3],#4 @ rcon[i++]
|
||||
orr $t2,$t2,$i3,lsl#8
|
||||
eor $t2,$t2,$t1
|
||||
eor $s0,$s0,$t2 @ rk[4]=rk[0]^...
|
||||
eor $s1,$s1,$s0 @ rk[5]=rk[1]^rk[4]
|
||||
eor $s2,$s2,$s1 @ rk[6]=rk[2]^rk[5]
|
||||
eor $s3,$s3,$s2 @ rk[7]=rk[3]^rk[6]
|
||||
str $s0,[$key],#16
|
||||
eor $s2,$s2,$s1 @ rk[6]=rk[2]^rk[5]
|
||||
str $s1,[$key,#-12]
|
||||
eor $s3,$s3,$s2 @ rk[7]=rk[3]^rk[6]
|
||||
str $s2,[$key,#-8]
|
||||
str $s3,[$key,#-4]
|
||||
|
||||
subs $rounds,$rounds,#1
|
||||
str $s3,[$key,#-4]
|
||||
bne .L128_loop
|
||||
sub r2,$key,#176
|
||||
b .Ldone
|
||||
@ -468,16 +471,16 @@ AES_set_encrypt_key:
|
||||
ldrb $t2,[$rounds,#17]
|
||||
ldrb $t3,[$rounds,#16]
|
||||
orr $i2,$i2,$t1,lsl#8
|
||||
orr $i2,$i2,$t2,lsl#16
|
||||
orr $i2,$i2,$t3,lsl#24
|
||||
ldrb $i3,[$rounds,#23]
|
||||
orr $i2,$i2,$t2,lsl#16
|
||||
ldrb $t1,[$rounds,#22]
|
||||
orr $i2,$i2,$t3,lsl#24
|
||||
ldrb $t2,[$rounds,#21]
|
||||
ldrb $t3,[$rounds,#20]
|
||||
orr $i3,$i3,$t1,lsl#8
|
||||
orr $i3,$i3,$t2,lsl#16
|
||||
orr $i3,$i3,$t3,lsl#24
|
||||
str $i2,[$key],#8
|
||||
orr $i3,$i3,$t3,lsl#24
|
||||
str $i3,[$key,#-4]
|
||||
|
||||
teq lr,#192
|
||||
@ -491,27 +494,26 @@ AES_set_encrypt_key:
|
||||
.L192_loop:
|
||||
and $t2,lr,$i3,lsr#24
|
||||
and $i1,lr,$i3,lsr#16
|
||||
and $i2,lr,$i3,lsr#8
|
||||
and $i3,lr,$i3
|
||||
ldrb $t2,[$tbl,$t2]
|
||||
and $i2,lr,$i3,lsr#8
|
||||
ldrb $i1,[$tbl,$i1]
|
||||
and $i3,lr,$i3
|
||||
ldrb $i2,[$tbl,$i2]
|
||||
ldrb $i3,[$tbl,$i3]
|
||||
ldr $t1,[$t3],#4 @ rcon[i++]
|
||||
orr $t2,$t2,$i1,lsl#24
|
||||
ldrb $i3,[$tbl,$i3]
|
||||
orr $t2,$t2,$i2,lsl#16
|
||||
ldr $t1,[$t3],#4 @ rcon[i++]
|
||||
orr $t2,$t2,$i3,lsl#8
|
||||
eor $i3,$t2,$t1
|
||||
eor $s0,$s0,$i3 @ rk[6]=rk[0]^...
|
||||
eor $s1,$s1,$s0 @ rk[7]=rk[1]^rk[6]
|
||||
eor $s2,$s2,$s1 @ rk[8]=rk[2]^rk[7]
|
||||
eor $s3,$s3,$s2 @ rk[9]=rk[3]^rk[8]
|
||||
str $s0,[$key],#24
|
||||
eor $s2,$s2,$s1 @ rk[8]=rk[2]^rk[7]
|
||||
str $s1,[$key,#-20]
|
||||
eor $s3,$s3,$s2 @ rk[9]=rk[3]^rk[8]
|
||||
str $s2,[$key,#-16]
|
||||
str $s3,[$key,#-12]
|
||||
|
||||
subs $rounds,$rounds,#1
|
||||
str $s3,[$key,#-12]
|
||||
subeq r2,$key,#216
|
||||
beq .Ldone
|
||||
|
||||
@ -529,16 +531,16 @@ AES_set_encrypt_key:
|
||||
ldrb $t2,[$rounds,#25]
|
||||
ldrb $t3,[$rounds,#24]
|
||||
orr $i2,$i2,$t1,lsl#8
|
||||
orr $i2,$i2,$t2,lsl#16
|
||||
orr $i2,$i2,$t3,lsl#24
|
||||
ldrb $i3,[$rounds,#31]
|
||||
orr $i2,$i2,$t2,lsl#16
|
||||
ldrb $t1,[$rounds,#30]
|
||||
orr $i2,$i2,$t3,lsl#24
|
||||
ldrb $t2,[$rounds,#29]
|
||||
ldrb $t3,[$rounds,#28]
|
||||
orr $i3,$i3,$t1,lsl#8
|
||||
orr $i3,$i3,$t2,lsl#16
|
||||
orr $i3,$i3,$t3,lsl#24
|
||||
str $i2,[$key],#8
|
||||
orr $i3,$i3,$t3,lsl#24
|
||||
str $i3,[$key,#-4]
|
||||
|
||||
mov $rounds,#14
|
||||
@ -550,52 +552,51 @@ AES_set_encrypt_key:
|
||||
.L256_loop:
|
||||
and $t2,lr,$i3,lsr#24
|
||||
and $i1,lr,$i3,lsr#16
|
||||
and $i2,lr,$i3,lsr#8
|
||||
and $i3,lr,$i3
|
||||
ldrb $t2,[$tbl,$t2]
|
||||
and $i2,lr,$i3,lsr#8
|
||||
ldrb $i1,[$tbl,$i1]
|
||||
and $i3,lr,$i3
|
||||
ldrb $i2,[$tbl,$i2]
|
||||
ldrb $i3,[$tbl,$i3]
|
||||
ldr $t1,[$t3],#4 @ rcon[i++]
|
||||
orr $t2,$t2,$i1,lsl#24
|
||||
ldrb $i3,[$tbl,$i3]
|
||||
orr $t2,$t2,$i2,lsl#16
|
||||
ldr $t1,[$t3],#4 @ rcon[i++]
|
||||
orr $t2,$t2,$i3,lsl#8
|
||||
eor $i3,$t2,$t1
|
||||
eor $s0,$s0,$i3 @ rk[8]=rk[0]^...
|
||||
eor $s1,$s1,$s0 @ rk[9]=rk[1]^rk[8]
|
||||
eor $s2,$s2,$s1 @ rk[10]=rk[2]^rk[9]
|
||||
eor $s3,$s3,$s2 @ rk[11]=rk[3]^rk[10]
|
||||
str $s0,[$key],#32
|
||||
eor $s2,$s2,$s1 @ rk[10]=rk[2]^rk[9]
|
||||
str $s1,[$key,#-28]
|
||||
eor $s3,$s3,$s2 @ rk[11]=rk[3]^rk[10]
|
||||
str $s2,[$key,#-24]
|
||||
str $s3,[$key,#-20]
|
||||
|
||||
subs $rounds,$rounds,#1
|
||||
str $s3,[$key,#-20]
|
||||
subeq r2,$key,#256
|
||||
beq .Ldone
|
||||
|
||||
and $t2,lr,$s3
|
||||
and $i1,lr,$s3,lsr#8
|
||||
and $i2,lr,$s3,lsr#16
|
||||
and $i3,lr,$s3,lsr#24
|
||||
ldrb $t2,[$tbl,$t2]
|
||||
and $i2,lr,$s3,lsr#16
|
||||
ldrb $i1,[$tbl,$i1]
|
||||
and $i3,lr,$s3,lsr#24
|
||||
ldrb $i2,[$tbl,$i2]
|
||||
ldrb $i3,[$tbl,$i3]
|
||||
orr $t2,$t2,$i1,lsl#8
|
||||
ldrb $i3,[$tbl,$i3]
|
||||
orr $t2,$t2,$i2,lsl#16
|
||||
ldr $t1,[$key,#-48]
|
||||
orr $t2,$t2,$i3,lsl#24
|
||||
|
||||
ldr $t1,[$key,#-48]
|
||||
ldr $i1,[$key,#-44]
|
||||
ldr $i2,[$key,#-40]
|
||||
ldr $i3,[$key,#-36]
|
||||
eor $t1,$t1,$t2 @ rk[12]=rk[4]^...
|
||||
ldr $i3,[$key,#-36]
|
||||
eor $i1,$i1,$t1 @ rk[13]=rk[5]^rk[12]
|
||||
eor $i2,$i2,$i1 @ rk[14]=rk[6]^rk[13]
|
||||
eor $i3,$i3,$i2 @ rk[15]=rk[7]^rk[14]
|
||||
str $t1,[$key,#-16]
|
||||
eor $i2,$i2,$i1 @ rk[14]=rk[6]^rk[13]
|
||||
str $i1,[$key,#-12]
|
||||
eor $i3,$i3,$i2 @ rk[15]=rk[7]^rk[14]
|
||||
str $i2,[$key,#-8]
|
||||
str $i3,[$key,#-4]
|
||||
b .L256_loop
|
||||
@ -816,24 +817,24 @@ AES_decrypt:
|
||||
ldrb $t2,[$rounds,#1]
|
||||
ldrb $t3,[$rounds,#0]
|
||||
orr $s0,$s0,$t1,lsl#8
|
||||
orr $s0,$s0,$t2,lsl#16
|
||||
orr $s0,$s0,$t3,lsl#24
|
||||
ldrb $s1,[$rounds,#7]
|
||||
orr $s0,$s0,$t2,lsl#16
|
||||
ldrb $t1,[$rounds,#6]
|
||||
orr $s0,$s0,$t3,lsl#24
|
||||
ldrb $t2,[$rounds,#5]
|
||||
ldrb $t3,[$rounds,#4]
|
||||
orr $s1,$s1,$t1,lsl#8
|
||||
orr $s1,$s1,$t2,lsl#16
|
||||
orr $s1,$s1,$t3,lsl#24
|
||||
ldrb $s2,[$rounds,#11]
|
||||
orr $s1,$s1,$t2,lsl#16
|
||||
ldrb $t1,[$rounds,#10]
|
||||
orr $s1,$s1,$t3,lsl#24
|
||||
ldrb $t2,[$rounds,#9]
|
||||
ldrb $t3,[$rounds,#8]
|
||||
orr $s2,$s2,$t1,lsl#8
|
||||
orr $s2,$s2,$t2,lsl#16
|
||||
orr $s2,$s2,$t3,lsl#24
|
||||
ldrb $s3,[$rounds,#15]
|
||||
orr $s2,$s2,$t2,lsl#16
|
||||
ldrb $t1,[$rounds,#14]
|
||||
orr $s2,$s2,$t3,lsl#24
|
||||
ldrb $t2,[$rounds,#13]
|
||||
ldrb $t3,[$rounds,#12]
|
||||
orr $s3,$s3,$t1,lsl#8
|
||||
@ -848,24 +849,24 @@ AES_decrypt:
|
||||
mov $t3,$s0,lsr#8
|
||||
strb $t1,[$rounds,#0]
|
||||
strb $t2,[$rounds,#1]
|
||||
strb $t3,[$rounds,#2]
|
||||
strb $s0,[$rounds,#3]
|
||||
mov $t1,$s1,lsr#24
|
||||
strb $t3,[$rounds,#2]
|
||||
mov $t2,$s1,lsr#16
|
||||
strb $s0,[$rounds,#3]
|
||||
mov $t3,$s1,lsr#8
|
||||
strb $t1,[$rounds,#4]
|
||||
strb $t2,[$rounds,#5]
|
||||
strb $t3,[$rounds,#6]
|
||||
strb $s1,[$rounds,#7]
|
||||
mov $t1,$s2,lsr#24
|
||||
strb $t3,[$rounds,#6]
|
||||
mov $t2,$s2,lsr#16
|
||||
strb $s1,[$rounds,#7]
|
||||
mov $t3,$s2,lsr#8
|
||||
strb $t1,[$rounds,#8]
|
||||
strb $t2,[$rounds,#9]
|
||||
strb $t3,[$rounds,#10]
|
||||
strb $s2,[$rounds,#11]
|
||||
mov $t1,$s3,lsr#24
|
||||
strb $t3,[$rounds,#10]
|
||||
mov $t2,$s3,lsr#16
|
||||
strb $s2,[$rounds,#11]
|
||||
mov $t3,$s3,lsr#8
|
||||
strb $t1,[$rounds,#12]
|
||||
strb $t2,[$rounds,#13]
|
||||
@ -882,146 +883,143 @@ AES_decrypt:
|
||||
.align 2
|
||||
_armv4_AES_decrypt:
|
||||
str lr,[sp,#-4]! @ push lr
|
||||
ldr $t1,[$key],#16
|
||||
ldr $t2,[$key,#-12]
|
||||
ldr $t3,[$key,#-8]
|
||||
ldr $i1,[$key,#-4]
|
||||
ldr $rounds,[$key,#240-16]
|
||||
ldmia $key!,{$t1-$i1}
|
||||
eor $s0,$s0,$t1
|
||||
ldr $rounds,[$key,#240-16]
|
||||
eor $s1,$s1,$t2
|
||||
eor $s2,$s2,$t3
|
||||
eor $s3,$s3,$i1
|
||||
sub $rounds,$rounds,#1
|
||||
mov lr,#255
|
||||
|
||||
.Ldec_loop:
|
||||
and $i1,lr,$s0,lsr#16
|
||||
and $i2,lr,$s0,lsr#8
|
||||
and $i3,lr,$s0
|
||||
mov $s0,$s0,lsr#24
|
||||
.Ldec_loop:
|
||||
ldr $t1,[$tbl,$i1,lsl#2] @ Td1[s0>>16]
|
||||
ldr $s0,[$tbl,$s0,lsl#2] @ Td0[s0>>24]
|
||||
ldr $t2,[$tbl,$i2,lsl#2] @ Td2[s0>>8]
|
||||
ldr $t3,[$tbl,$i3,lsl#2] @ Td3[s0>>0]
|
||||
|
||||
and $i1,lr,$s1 @ i0
|
||||
ldr $t2,[$tbl,$i2,lsl#2] @ Td2[s0>>8]
|
||||
and $i2,lr,$s1,lsr#16
|
||||
ldr $t3,[$tbl,$i3,lsl#2] @ Td3[s0>>0]
|
||||
and $i3,lr,$s1,lsr#8
|
||||
ldr $s0,[$tbl,$s0,lsl#2] @ Td0[s0>>24]
|
||||
mov $s1,$s1,lsr#24
|
||||
|
||||
ldr $i1,[$tbl,$i1,lsl#2] @ Td3[s1>>0]
|
||||
ldr $s1,[$tbl,$s1,lsl#2] @ Td0[s1>>24]
|
||||
ldr $i2,[$tbl,$i2,lsl#2] @ Td1[s1>>16]
|
||||
ldr $i3,[$tbl,$i3,lsl#2] @ Td2[s1>>8]
|
||||
eor $s0,$s0,$i1,ror#24
|
||||
eor $s1,$s1,$t1,ror#8
|
||||
eor $t2,$i2,$t2,ror#8
|
||||
eor $t3,$i3,$t3,ror#8
|
||||
|
||||
ldr $s1,[$tbl,$s1,lsl#2] @ Td0[s1>>24]
|
||||
and $i1,lr,$s2,lsr#8 @ i0
|
||||
eor $t2,$i2,$t2,ror#8
|
||||
and $i2,lr,$s2 @ i1
|
||||
eor $t3,$i3,$t3,ror#8
|
||||
and $i3,lr,$s2,lsr#16
|
||||
mov $s2,$s2,lsr#24
|
||||
eor $s1,$s1,$t1,ror#8
|
||||
ldr $i1,[$tbl,$i1,lsl#2] @ Td2[s2>>8]
|
||||
mov $s2,$s2,lsr#24
|
||||
|
||||
ldr $i2,[$tbl,$i2,lsl#2] @ Td3[s2>>0]
|
||||
ldr $s2,[$tbl,$s2,lsl#2] @ Td0[s2>>24]
|
||||
ldr $i3,[$tbl,$i3,lsl#2] @ Td1[s2>>16]
|
||||
eor $s0,$s0,$i1,ror#16
|
||||
eor $s1,$s1,$i2,ror#24
|
||||
eor $s2,$s2,$t2,ror#8
|
||||
eor $t3,$i3,$t3,ror#8
|
||||
|
||||
ldr $s2,[$tbl,$s2,lsl#2] @ Td0[s2>>24]
|
||||
and $i1,lr,$s3,lsr#16 @ i0
|
||||
eor $s1,$s1,$i2,ror#24
|
||||
and $i2,lr,$s3,lsr#8 @ i1
|
||||
eor $t3,$i3,$t3,ror#8
|
||||
and $i3,lr,$s3 @ i2
|
||||
mov $s3,$s3,lsr#24
|
||||
eor $s2,$s2,$t2,ror#8
|
||||
ldr $i1,[$tbl,$i1,lsl#2] @ Td1[s3>>16]
|
||||
mov $s3,$s3,lsr#24
|
||||
|
||||
ldr $i2,[$tbl,$i2,lsl#2] @ Td2[s3>>8]
|
||||
ldr $i3,[$tbl,$i3,lsl#2] @ Td3[s3>>0]
|
||||
ldr $s3,[$tbl,$s3,lsl#2] @ Td0[s3>>24]
|
||||
eor $s0,$s0,$i1,ror#8
|
||||
ldr $s3,[$tbl,$s3,lsl#2] @ Td0[s3>>24]
|
||||
eor $s1,$s1,$i2,ror#16
|
||||
eor $s2,$s2,$i3,ror#24
|
||||
ldr $i1,[$key],#16
|
||||
eor $s3,$s3,$t3,ror#8
|
||||
|
||||
ldr $t1,[$key],#16
|
||||
ldr $t2,[$key,#-12]
|
||||
ldr $t3,[$key,#-8]
|
||||
ldr $i1,[$key,#-4]
|
||||
eor $s0,$s0,$t1
|
||||
eor $s1,$s1,$t2
|
||||
eor $s2,$s2,$t3
|
||||
eor $s3,$s3,$i1
|
||||
ldr $t1,[$key,#-12]
|
||||
ldr $t2,[$key,#-8]
|
||||
eor $s0,$s0,$i1
|
||||
ldr $t3,[$key,#-4]
|
||||
and $i1,lr,$s0,lsr#16
|
||||
eor $s1,$s1,$t1
|
||||
and $i2,lr,$s0,lsr#8
|
||||
eor $s2,$s2,$t2
|
||||
and $i3,lr,$s0
|
||||
eor $s3,$s3,$t3
|
||||
mov $s0,$s0,lsr#24
|
||||
|
||||
subs $rounds,$rounds,#1
|
||||
bne .Ldec_loop
|
||||
|
||||
add $tbl,$tbl,#1024
|
||||
|
||||
ldr $t1,[$tbl,#0] @ prefetch Td4
|
||||
ldr $t2,[$tbl,#32]
|
||||
ldr $t3,[$tbl,#64]
|
||||
ldr $i1,[$tbl,#96]
|
||||
ldr $i2,[$tbl,#128]
|
||||
ldr $i3,[$tbl,#160]
|
||||
ldr $t1,[$tbl,#192]
|
||||
ldr $t2,[$tbl,#224]
|
||||
ldr $t2,[$tbl,#0] @ prefetch Td4
|
||||
ldr $t3,[$tbl,#32]
|
||||
ldr $t1,[$tbl,#64]
|
||||
ldr $t2,[$tbl,#96]
|
||||
ldr $t3,[$tbl,#128]
|
||||
ldr $t1,[$tbl,#160]
|
||||
ldr $t2,[$tbl,#192]
|
||||
ldr $t3,[$tbl,#224]
|
||||
|
||||
and $i1,lr,$s0,lsr#16
|
||||
and $i2,lr,$s0,lsr#8
|
||||
and $i3,lr,$s0
|
||||
ldrb $s0,[$tbl,$s0,lsr#24] @ Td4[s0>>24]
|
||||
ldrb $s0,[$tbl,$s0] @ Td4[s0>>24]
|
||||
ldrb $t1,[$tbl,$i1] @ Td4[s0>>16]
|
||||
ldrb $t2,[$tbl,$i2] @ Td4[s0>>8]
|
||||
ldrb $t3,[$tbl,$i3] @ Td4[s0>>0]
|
||||
|
||||
and $i1,lr,$s1 @ i0
|
||||
ldrb $t2,[$tbl,$i2] @ Td4[s0>>8]
|
||||
and $i2,lr,$s1,lsr#16
|
||||
ldrb $t3,[$tbl,$i3] @ Td4[s0>>0]
|
||||
and $i3,lr,$s1,lsr#8
|
||||
|
||||
ldrb $i1,[$tbl,$i1] @ Td4[s1>>0]
|
||||
ldrb $s1,[$tbl,$s1,lsr#24] @ Td4[s1>>24]
|
||||
ldrb $i2,[$tbl,$i2] @ Td4[s1>>16]
|
||||
ldrb $i3,[$tbl,$i3] @ Td4[s1>>8]
|
||||
eor $s0,$i1,$s0,lsl#24
|
||||
ldrb $i3,[$tbl,$i3] @ Td4[s1>>8]
|
||||
eor $s1,$t1,$s1,lsl#8
|
||||
eor $t2,$t2,$i2,lsl#8
|
||||
eor $t3,$t3,$i3,lsl#8
|
||||
|
||||
and $i1,lr,$s2,lsr#8 @ i0
|
||||
eor $t2,$t2,$i2,lsl#8
|
||||
and $i2,lr,$s2 @ i1
|
||||
and $i3,lr,$s2,lsr#16
|
||||
eor $t3,$t3,$i3,lsl#8
|
||||
ldrb $i1,[$tbl,$i1] @ Td4[s2>>8]
|
||||
and $i3,lr,$s2,lsr#16
|
||||
|
||||
ldrb $i2,[$tbl,$i2] @ Td4[s2>>0]
|
||||
ldrb $s2,[$tbl,$s2,lsr#24] @ Td4[s2>>24]
|
||||
ldrb $i3,[$tbl,$i3] @ Td4[s2>>16]
|
||||
eor $s0,$s0,$i1,lsl#8
|
||||
ldrb $i3,[$tbl,$i3] @ Td4[s2>>16]
|
||||
eor $s1,$i2,$s1,lsl#16
|
||||
eor $s2,$t2,$s2,lsl#16
|
||||
eor $t3,$t3,$i3,lsl#16
|
||||
|
||||
and $i1,lr,$s3,lsr#16 @ i0
|
||||
eor $s2,$t2,$s2,lsl#16
|
||||
and $i2,lr,$s3,lsr#8 @ i1
|
||||
and $i3,lr,$s3 @ i2
|
||||
eor $t3,$t3,$i3,lsl#16
|
||||
ldrb $i1,[$tbl,$i1] @ Td4[s3>>16]
|
||||
and $i3,lr,$s3 @ i2
|
||||
|
||||
ldrb $i2,[$tbl,$i2] @ Td4[s3>>8]
|
||||
ldrb $i3,[$tbl,$i3] @ Td4[s3>>0]
|
||||
ldrb $s3,[$tbl,$s3,lsr#24] @ Td4[s3>>24]
|
||||
eor $s0,$s0,$i1,lsl#16
|
||||
ldr $i1,[$key,#0]
|
||||
eor $s1,$s1,$i2,lsl#8
|
||||
ldr $t1,[$key,#4]
|
||||
eor $s2,$i3,$s2,lsl#8
|
||||
ldr $t2,[$key,#8]
|
||||
eor $s3,$t3,$s3,lsl#24
|
||||
ldr $t3,[$key,#12]
|
||||
|
||||
ldr lr,[sp],#4 @ pop lr
|
||||
ldr $t1,[$key,#0]
|
||||
ldr $t2,[$key,#4]
|
||||
ldr $t3,[$key,#8]
|
||||
ldr $i1,[$key,#12]
|
||||
eor $s0,$s0,$t1
|
||||
eor $s1,$s1,$t2
|
||||
eor $s2,$s2,$t3
|
||||
eor $s3,$s3,$i1
|
||||
eor $s0,$s0,$i1
|
||||
eor $s1,$s1,$t1
|
||||
eor $s2,$s2,$t2
|
||||
eor $s3,$s3,$t3
|
||||
|
||||
sub $tbl,$tbl,#1024
|
||||
mov pc,lr @ return
|
||||
ldr pc,[sp],#4 @ pop and return
|
||||
.size _armv4_AES_decrypt,.-_armv4_AES_decrypt
|
||||
.asciz "AES for ARMv4, CRYPTOGAMS by <appro\@openssl.org>"
|
||||
.align 2
|
||||
@ -1029,3 +1027,4 @@ ___
|
||||
|
||||
$code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm; # make it possible to compile with -march=armv4
|
||||
print $code;
|
||||
close STDOUT; # enforce flush
|
||||
|
@ -1,3 +1,5 @@
|
||||
#!/usr/bin/env perl
|
||||
print <<'___';
|
||||
.text
|
||||
|
||||
.set noat
|
||||
@ -68,9 +70,9 @@ OPENSSL_wipe_cpu:
|
||||
OPENSSL_atomic_add:
|
||||
.frame $30,0,$26
|
||||
.prologue 0
|
||||
1: ldl_l $0,($16)
|
||||
1: ldl_l $0,0($16)
|
||||
addl $0,$17,$1
|
||||
stl_c $1,($16)
|
||||
stl_c $1,0($16)
|
||||
beq $1,1b
|
||||
addl $0,$17,$0
|
||||
ret ($26)
|
||||
@ -97,19 +99,19 @@ OPENSSL_cleanse:
|
||||
beq $0,.Laligned
|
||||
|
||||
.Little:
|
||||
subq $0,8,$0
|
||||
ldq_u $1,0($16)
|
||||
mov $16,$2
|
||||
.Lalign:
|
||||
mskbl $1,$16,$1
|
||||
lda $16,1($16)
|
||||
subq $17,1,$17
|
||||
subq $0,1,$0
|
||||
addq $0,1,$0
|
||||
beq $17,.Lout
|
||||
bne $0,.Lalign
|
||||
.Lout: stq_u $1,0($2)
|
||||
beq $17,.Ldone
|
||||
bic $17,7,$at
|
||||
mov $17,$0
|
||||
beq $at,.Little
|
||||
|
||||
.Laligned:
|
||||
@ -118,8 +120,7 @@ OPENSSL_cleanse:
|
||||
lda $16,8($16)
|
||||
bic $17,7,$at
|
||||
bne $at,.Laligned
|
||||
beq $17,.Ldone
|
||||
mov $17,$0
|
||||
br .Little
|
||||
bne $17,.Little
|
||||
.Ldone: ret ($26)
|
||||
.end OPENSSL_cleanse
|
||||
___
|
@ -139,7 +139,7 @@ int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num)
|
||||
ASN1err(ASN1_F_A2D_ASN1_OBJECT,ASN1_R_INVALID_DIGIT);
|
||||
goto err;
|
||||
}
|
||||
if (!use_bn && l > (ULONG_MAX / 10L))
|
||||
if (!use_bn && l >= ((ULONG_MAX - 80) / 10L))
|
||||
{
|
||||
use_bn = 1;
|
||||
if (!bl)
|
||||
@ -293,7 +293,7 @@ ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp,
|
||||
/* Sanity check OID encoding: can't have leading 0x80 in
|
||||
* subidentifiers, see: X.690 8.19.2
|
||||
*/
|
||||
for (i = 0, p = *pp + 1; i < len - 1; i++, p++)
|
||||
for (i = 0, p = *pp; i < len; i++, p++)
|
||||
{
|
||||
if (*p == 0x80 && (!i || !(p[-1] & 0x80)))
|
||||
{
|
||||
|
@ -74,6 +74,11 @@
|
||||
|
||||
#define CHARTYPE_BS_ESC (ASN1_STRFLGS_ESC_2253 | CHARTYPE_FIRST_ESC_2253 | CHARTYPE_LAST_ESC_2253)
|
||||
|
||||
#define ESC_FLAGS (ASN1_STRFLGS_ESC_2253 | \
|
||||
ASN1_STRFLGS_ESC_QUOTE | \
|
||||
ASN1_STRFLGS_ESC_CTRL | \
|
||||
ASN1_STRFLGS_ESC_MSB)
|
||||
|
||||
|
||||
/* Three IO functions for sending data to memory, a BIO and
|
||||
* and a FILE pointer.
|
||||
@ -148,6 +153,13 @@ static int do_esc_char(unsigned long c, unsigned char flags, char *do_quotes, ch
|
||||
if(!io_ch(arg, tmphex, 3)) return -1;
|
||||
return 3;
|
||||
}
|
||||
/* If we get this far and do any escaping at all must escape
|
||||
* the escape character itself: backslash.
|
||||
*/
|
||||
if (chtmp == '\\' && flags & ESC_FLAGS) {
|
||||
if(!io_ch(arg, "\\\\", 2)) return -1;
|
||||
return 2;
|
||||
}
|
||||
if(!io_ch(arg, &chtmp, 1)) return -1;
|
||||
return 1;
|
||||
}
|
||||
@ -292,11 +304,6 @@ static const signed char tag2nbyte[] = {
|
||||
4, -1, 2 /* 28-30 */
|
||||
};
|
||||
|
||||
#define ESC_FLAGS (ASN1_STRFLGS_ESC_2253 | \
|
||||
ASN1_STRFLGS_ESC_QUOTE | \
|
||||
ASN1_STRFLGS_ESC_CTRL | \
|
||||
ASN1_STRFLGS_ESC_MSB)
|
||||
|
||||
/* This is the main function, print out an
|
||||
* ASN1_STRING taking note of various escape
|
||||
* and display options. Returns number of
|
||||
|
@ -95,7 +95,7 @@ unsigned long ASN1_STRING_get_default_mask(void)
|
||||
* default: the default value, Printable, T61, BMP.
|
||||
*/
|
||||
|
||||
int ASN1_STRING_set_default_mask_asc(char *p)
|
||||
int ASN1_STRING_set_default_mask_asc(const char *p)
|
||||
{
|
||||
unsigned long mask;
|
||||
char *end;
|
||||
|
@ -172,7 +172,6 @@ static const EVP_PKEY_ASN1_METHOD *pkey_asn1_find(int type)
|
||||
const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type)
|
||||
{
|
||||
const EVP_PKEY_ASN1_METHOD *t;
|
||||
ENGINE *e;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
@ -184,6 +183,7 @@ const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type)
|
||||
if (pe)
|
||||
{
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
ENGINE *e;
|
||||
/* type will contain the final unaliased type */
|
||||
e = ENGINE_get_pkey_asn1_meth_engine(type);
|
||||
if (e)
|
||||
|
@ -1067,7 +1067,7 @@ ASN1_STRING *ASN1_pack_string(void *obj, i2d_of_void *i2d,
|
||||
ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_OCTET_STRING **oct);
|
||||
|
||||
void ASN1_STRING_set_default_mask(unsigned long mask);
|
||||
int ASN1_STRING_set_default_mask_asc(char *p);
|
||||
int ASN1_STRING_set_default_mask_asc(const char *p);
|
||||
unsigned long ASN1_STRING_get_default_mask(void);
|
||||
int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len,
|
||||
int inform, unsigned long mask);
|
||||
|
@ -57,9 +57,6 @@
|
||||
#include <openssl/bio.h>
|
||||
#include <openssl/err.h>
|
||||
|
||||
#ifndef OPENSSL_SYSNAME_NETWARE
|
||||
#include <memory.h>
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
|
||||
/* Experimental NDEF ASN1 BIO support routines */
|
||||
|
@ -214,7 +214,9 @@ static int x509_name_ex_d2i(ASN1_VALUE **val,
|
||||
*val = nm.a;
|
||||
*in = p;
|
||||
return ret;
|
||||
err:
|
||||
err:
|
||||
if (nm.x != NULL)
|
||||
X509_NAME_free(nm.x);
|
||||
ASN1err(ASN1_F_X509_NAME_EX_D2I, ERR_R_NESTED_ASN1_ERROR);
|
||||
return 0;
|
||||
}
|
||||
@ -464,7 +466,8 @@ static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in)
|
||||
}
|
||||
else
|
||||
{
|
||||
*to++ = tolower(*from++);
|
||||
*to++ = tolower(*from);
|
||||
from++;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
@ -63,7 +63,7 @@
|
||||
#include <openssl/x509.h>
|
||||
#include <openssl/x509v3.h>
|
||||
|
||||
ASN1_SEQUENCE(X509_CINF) = {
|
||||
ASN1_SEQUENCE_enc(X509_CINF, enc, 0) = {
|
||||
ASN1_EXP_OPT(X509_CINF, version, ASN1_INTEGER, 0),
|
||||
ASN1_SIMPLE(X509_CINF, serialNumber, ASN1_INTEGER),
|
||||
ASN1_SIMPLE(X509_CINF, signature, X509_ALGOR),
|
||||
@ -74,7 +74,7 @@ ASN1_SEQUENCE(X509_CINF) = {
|
||||
ASN1_IMP_OPT(X509_CINF, issuerUID, ASN1_BIT_STRING, 1),
|
||||
ASN1_IMP_OPT(X509_CINF, subjectUID, ASN1_BIT_STRING, 2),
|
||||
ASN1_EXP_SEQUENCE_OF_OPT(X509_CINF, extensions, X509_EXTENSION, 3)
|
||||
} ASN1_SEQUENCE_END(X509_CINF)
|
||||
} ASN1_SEQUENCE_END_enc(X509_CINF, X509_CINF)
|
||||
|
||||
IMPLEMENT_ASN1_FUNCTIONS(X509_CINF)
|
||||
/* X509 top level structure needs a bit of customisation */
|
||||
|
@ -551,7 +551,30 @@ int BIO_socket_ioctl(int fd, long type, void *arg)
|
||||
#ifdef __DJGPP__
|
||||
i=ioctlsocket(fd,type,(char *)arg);
|
||||
#else
|
||||
i=ioctlsocket(fd,type,arg);
|
||||
# if defined(OPENSSL_SYS_VMS)
|
||||
/* 2011-02-18 SMS.
|
||||
* VMS ioctl() can't tolerate a 64-bit "void *arg", but we
|
||||
* observe that all the consumers pass in an "unsigned long *",
|
||||
* so we arrange a local copy with a short pointer, and use
|
||||
* that, instead.
|
||||
*/
|
||||
# if __INITIAL_POINTER_SIZE == 64
|
||||
# define ARG arg_32p
|
||||
# pragma pointer_size save
|
||||
# pragma pointer_size 32
|
||||
unsigned long arg_32;
|
||||
unsigned long *arg_32p;
|
||||
# pragma pointer_size restore
|
||||
arg_32p = &arg_32;
|
||||
arg_32 = *((unsigned long *) arg);
|
||||
# else /* __INITIAL_POINTER_SIZE == 64 */
|
||||
# define ARG arg
|
||||
# endif /* __INITIAL_POINTER_SIZE == 64 [else] */
|
||||
# else /* defined(OPENSSL_SYS_VMS) */
|
||||
# define ARG arg
|
||||
# endif /* defined(OPENSSL_SYS_VMS) [else] */
|
||||
|
||||
i=ioctlsocket(fd,type,ARG);
|
||||
#endif /* __DJGPP__ */
|
||||
if (i < 0)
|
||||
SYSerr(SYS_F_IOCTLSOCKET,get_last_socket_error());
|
||||
@ -660,6 +683,7 @@ int BIO_get_accept_socket(char *host, int bind_mode)
|
||||
* note that commonly IPv6 wildchard socket can service
|
||||
* IPv4 connections just as well... */
|
||||
memset(&hint,0,sizeof(hint));
|
||||
hint.ai_flags = AI_PASSIVE;
|
||||
if (h)
|
||||
{
|
||||
if (strchr(h,':'))
|
||||
@ -672,7 +696,10 @@ int BIO_get_accept_socket(char *host, int bind_mode)
|
||||
#endif
|
||||
}
|
||||
else if (h[0]=='*' && h[1]=='\0')
|
||||
{
|
||||
hint.ai_family = AF_INET;
|
||||
h=NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if ((*p_getaddrinfo.f)(h,p,&hint,&res)) break;
|
||||
|
@ -209,7 +209,7 @@ start:
|
||||
/* add to buffer and return */
|
||||
if (i >= inl)
|
||||
{
|
||||
memcpy(&(ctx->obuf[ctx->obuf_len]),in,inl);
|
||||
memcpy(&(ctx->obuf[ctx->obuf_off+ctx->obuf_len]),in,inl);
|
||||
ctx->obuf_len+=inl;
|
||||
return(num+inl);
|
||||
}
|
||||
@ -219,7 +219,7 @@ start:
|
||||
{
|
||||
if (i > 0) /* lets fill it up if we can */
|
||||
{
|
||||
memcpy(&(ctx->obuf[ctx->obuf_len]),in,i);
|
||||
memcpy(&(ctx->obuf[ctx->obuf_off+ctx->obuf_len]),in,i);
|
||||
in+=i;
|
||||
inl-=i;
|
||||
num+=i;
|
||||
@ -294,9 +294,9 @@ static long buffer_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||
case BIO_C_GET_BUFF_NUM_LINES:
|
||||
ret=0;
|
||||
p1=ctx->ibuf;
|
||||
for (i=ctx->ibuf_off; i<ctx->ibuf_len; i++)
|
||||
for (i=0; i<ctx->ibuf_len; i++)
|
||||
{
|
||||
if (p1[i] == '\n') ret++;
|
||||
if (p1[ctx->ibuf_off + i] == '\n') ret++;
|
||||
}
|
||||
break;
|
||||
case BIO_CTRL_WPENDING:
|
||||
@ -399,17 +399,18 @@ static long buffer_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||
for (;;)
|
||||
{
|
||||
BIO_clear_retry_flags(b);
|
||||
if (ctx->obuf_len > ctx->obuf_off)
|
||||
if (ctx->obuf_len > 0)
|
||||
{
|
||||
r=BIO_write(b->next_bio,
|
||||
&(ctx->obuf[ctx->obuf_off]),
|
||||
ctx->obuf_len-ctx->obuf_off);
|
||||
ctx->obuf_len);
|
||||
#if 0
|
||||
fprintf(stderr,"FLUSH [%3d] %3d -> %3d\n",ctx->obuf_off,ctx->obuf_len-ctx->obuf_off,r);
|
||||
fprintf(stderr,"FLUSH [%3d] %3d -> %3d\n",ctx->obuf_off,ctx->obuf_len,r);
|
||||
#endif
|
||||
BIO_copy_next_retry(b);
|
||||
if (r <= 0) return((long)r);
|
||||
ctx->obuf_off+=r;
|
||||
ctx->obuf_len-=r;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -306,6 +306,15 @@ DECLARE_STACK_OF(BIO)
|
||||
|
||||
typedef struct bio_f_buffer_ctx_struct
|
||||
{
|
||||
/* Buffers are setup like this:
|
||||
*
|
||||
* <---------------------- size ----------------------->
|
||||
* +---------------------------------------------------+
|
||||
* | consumed | remaining | free space |
|
||||
* +---------------------------------------------------+
|
||||
* <-- off --><------- len ------->
|
||||
*/
|
||||
|
||||
/* BIO *bio; */ /* this is now in the BIO struct */
|
||||
int ibuf_size; /* how big is the input buffer */
|
||||
int obuf_size; /* how big is the output buffer */
|
||||
|
@ -57,7 +57,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef OPENSSL_NO_DGRAM
|
||||
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
@ -65,6 +64,7 @@
|
||||
#include "cryptlib.h"
|
||||
|
||||
#include <openssl/bio.h>
|
||||
#ifndef OPENSSL_NO_DGRAM
|
||||
|
||||
#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS)
|
||||
#include <sys/timeb.h>
|
||||
@ -308,7 +308,6 @@ static int dgram_read(BIO *b, char *out, int outl)
|
||||
OPENSSL_assert(sa.len.s<=sizeof(sa.peer));
|
||||
sa.len.i = (int)sa.len.s;
|
||||
}
|
||||
dgram_reset_rcv_timeout(b);
|
||||
|
||||
if ( ! data->connected && ret >= 0)
|
||||
BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, &sa.peer);
|
||||
@ -322,6 +321,8 @@ static int dgram_read(BIO *b, char *out, int outl)
|
||||
data->_errno = get_last_socket_error();
|
||||
}
|
||||
}
|
||||
|
||||
dgram_reset_rcv_timeout(b);
|
||||
}
|
||||
return(ret);
|
||||
}
|
||||
@ -340,7 +341,7 @@ static int dgram_write(BIO *b, const char *in, int inl)
|
||||
|
||||
if (data->peer.sa.sa_family == AF_INET)
|
||||
peerlen = sizeof(data->peer.sa_in);
|
||||
#if OPENSSL_USE_IVP6
|
||||
#if OPENSSL_USE_IPV6
|
||||
else if (data->peer.sa.sa_family == AF_INET6)
|
||||
peerlen = sizeof(data->peer.sa_in6);
|
||||
#endif
|
||||
@ -745,9 +746,13 @@ static int BIO_dgram_should_retry(int i)
|
||||
{
|
||||
err=get_last_socket_error();
|
||||
|
||||
#if defined(OPENSSL_SYS_WINDOWS) && 0 /* more microsoft stupidity? perhaps not? Ben 4/1/99 */
|
||||
if ((i == -1) && (err == 0))
|
||||
return(1);
|
||||
#if defined(OPENSSL_SYS_WINDOWS)
|
||||
/* If the socket return value (i) is -1
|
||||
* and err is unexpectedly 0 at this point,
|
||||
* the error code was overwritten by
|
||||
* another system call before this error
|
||||
* handling is called.
|
||||
*/
|
||||
#endif
|
||||
|
||||
return(BIO_dgram_non_fatal_error(err));
|
||||
@ -810,7 +815,6 @@ int BIO_dgram_non_fatal_error(int err)
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void get_current_time(struct timeval *t)
|
||||
{
|
||||
@ -828,3 +832,5 @@ static void get_current_time(struct timeval *t)
|
||||
gettimeofday(t, NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -123,6 +123,7 @@ BIO *BIO_new_file(const char *filename, const char *mode)
|
||||
|
||||
#if defined(_WIN32) && defined(CP_UTF8)
|
||||
int sz, len_0 = (int)strlen(filename)+1;
|
||||
DWORD flags;
|
||||
|
||||
/*
|
||||
* Basically there are three cases to cover: a) filename is
|
||||
@ -136,17 +137,22 @@ BIO *BIO_new_file(const char *filename, const char *mode)
|
||||
* ERROR_NO_UNICODE_TRANSLATION, in which case we fall
|
||||
* back to fopen...
|
||||
*/
|
||||
if ((sz=MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,
|
||||
if ((sz=MultiByteToWideChar(CP_UTF8,(flags=MB_ERR_INVALID_CHARS),
|
||||
filename,len_0,NULL,0))>0 ||
|
||||
(GetLastError()==ERROR_INVALID_FLAGS &&
|
||||
(sz=MultiByteToWideChar(CP_UTF8,(flags=0),
|
||||
filename,len_0,NULL,0))>0)
|
||||
)
|
||||
{
|
||||
WCHAR wmode[8];
|
||||
WCHAR *wfilename = _alloca(sz*sizeof(WCHAR));
|
||||
|
||||
if (MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,
|
||||
if (MultiByteToWideChar(CP_UTF8,flags,
|
||||
filename,len_0,wfilename,sz) &&
|
||||
MultiByteToWideChar(CP_UTF8,0,mode,strlen(mode)+1,
|
||||
wmode,sizeof(wmode)/sizeof(wmode[0])) &&
|
||||
(file=_wfopen(wfilename,wmode))==NULL && errno==ENOENT
|
||||
(file=_wfopen(wfilename,wmode))==NULL &&
|
||||
(errno==ENOENT || errno==EBADF)
|
||||
) /* UTF-8 decode succeeded, but no file, filename
|
||||
* could still have been locale-ized... */
|
||||
file = fopen(filename,mode);
|
||||
|
@ -75,6 +75,15 @@
|
||||
# include <descrip.h>
|
||||
# include <lib$routines.h>
|
||||
# include <starlet.h>
|
||||
/* Some compiler options may mask the declaration of "_malloc32". */
|
||||
# if __INITIAL_POINTER_SIZE && defined _ANSI_C_SOURCE
|
||||
# if __INITIAL_POINTER_SIZE == 64
|
||||
# pragma pointer_size save
|
||||
# pragma pointer_size 32
|
||||
void * _malloc32 (__size_t);
|
||||
# pragma pointer_size restore
|
||||
# endif /* __INITIAL_POINTER_SIZE == 64 */
|
||||
# endif /* __INITIAL_POINTER_SIZE && defined _ANSI_C_SOURCE */
|
||||
#elif defined(__ultrix)
|
||||
# include <sys/syslog.h>
|
||||
#elif defined(OPENSSL_SYS_NETWARE)
|
||||
@ -300,7 +309,24 @@ static void xopenlog(BIO* bp, char* name, int level)
|
||||
static void xsyslog(BIO *bp, int priority, const char *string)
|
||||
{
|
||||
struct dsc$descriptor_s opc_dsc;
|
||||
|
||||
/* Arrange 32-bit pointer to opcdef buffer and malloc(), if needed. */
|
||||
#if __INITIAL_POINTER_SIZE == 64
|
||||
# pragma pointer_size save
|
||||
# pragma pointer_size 32
|
||||
# define OPCDEF_TYPE __char_ptr32
|
||||
# define OPCDEF_MALLOC _malloc32
|
||||
#else /* __INITIAL_POINTER_SIZE == 64 */
|
||||
# define OPCDEF_TYPE char *
|
||||
# define OPCDEF_MALLOC OPENSSL_malloc
|
||||
#endif /* __INITIAL_POINTER_SIZE == 64 [else] */
|
||||
|
||||
struct opcdef *opcdef_p;
|
||||
|
||||
#if __INITIAL_POINTER_SIZE == 64
|
||||
# pragma pointer_size restore
|
||||
#endif /* __INITIAL_POINTER_SIZE == 64 */
|
||||
|
||||
char buf[10240];
|
||||
unsigned int len;
|
||||
struct dsc$descriptor_s buf_dsc;
|
||||
@ -326,8 +352,8 @@ static void xsyslog(BIO *bp, int priority, const char *string)
|
||||
|
||||
lib$sys_fao(&fao_cmd, &len, &buf_dsc, priority_tag, string);
|
||||
|
||||
/* we know there's an 8 byte header. That's documented */
|
||||
opcdef_p = (struct opcdef *) OPENSSL_malloc(8 + len);
|
||||
/* We know there's an 8-byte header. That's documented. */
|
||||
opcdef_p = OPCDEF_MALLOC( 8+ len);
|
||||
opcdef_p->opc$b_ms_type = OPC$_RQ_RQST;
|
||||
memcpy(opcdef_p->opc$z_ms_target_classes, &VMS_OPC_target, 3);
|
||||
opcdef_p->opc$l_ms_rqstid = 0;
|
||||
@ -335,7 +361,7 @@ static void xsyslog(BIO *bp, int priority, const char *string)
|
||||
|
||||
opc_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
|
||||
opc_dsc.dsc$b_class = DSC$K_CLASS_S;
|
||||
opc_dsc.dsc$a_pointer = (char *)opcdef_p;
|
||||
opc_dsc.dsc$a_pointer = (OPCDEF_TYPE) opcdef_p;
|
||||
opc_dsc.dsc$w_length = len + 8;
|
||||
|
||||
sys$sndopr(opc_dsc, 0);
|
||||
|
@ -41,8 +41,12 @@ $j="s4";
|
||||
$m1="s5";
|
||||
|
||||
$code=<<___;
|
||||
#ifdef __linux__
|
||||
#include <asm/regdef.h>
|
||||
#else
|
||||
#include <asm.h>
|
||||
#include <regdef.h>
|
||||
#endif
|
||||
|
||||
.text
|
||||
|
||||
@ -76,7 +80,7 @@ bn_mul_mont:
|
||||
ldq $aj,8($ap)
|
||||
subq sp,AT,sp
|
||||
ldq $bi,0($bp) # bp[0]
|
||||
mov -4096,AT
|
||||
lda AT,-4096(zero) # mov -4096,AT
|
||||
ldq $n0,0($n0)
|
||||
and sp,AT,sp
|
||||
|
||||
@ -106,9 +110,9 @@ bn_mul_mont:
|
||||
.align 4
|
||||
.L1st:
|
||||
.set noreorder
|
||||
ldq $aj,($aj)
|
||||
ldq $aj,0($aj)
|
||||
addl $j,1,$j
|
||||
ldq $nj,($nj)
|
||||
ldq $nj,0($nj)
|
||||
lda $tp,8($tp)
|
||||
|
||||
addq $alo,$hi0,$lo0
|
||||
@ -159,12 +163,12 @@ bn_mul_mont:
|
||||
.align 4
|
||||
.Louter:
|
||||
s8addq $i,$bp,$bi
|
||||
ldq $hi0,($ap)
|
||||
ldq $hi0,0($ap)
|
||||
ldq $aj,8($ap)
|
||||
ldq $bi,($bi)
|
||||
ldq $hi1,($np)
|
||||
ldq $bi,0($bi)
|
||||
ldq $hi1,0($np)
|
||||
ldq $nj,8($np)
|
||||
ldq $tj,(sp)
|
||||
ldq $tj,0(sp)
|
||||
|
||||
mulq $hi0,$bi,$lo0
|
||||
umulh $hi0,$bi,$hi0
|
||||
@ -195,10 +199,10 @@ bn_mul_mont:
|
||||
.set noreorder
|
||||
ldq $tj,8($tp) #L0
|
||||
nop #U1
|
||||
ldq $aj,($aj) #L1
|
||||
ldq $aj,0($aj) #L1
|
||||
s8addq $j,$np,$nj #U0
|
||||
|
||||
ldq $nj,($nj) #L0
|
||||
ldq $nj,0($nj) #L0
|
||||
nop #U1
|
||||
addq $alo,$hi0,$lo0 #L1
|
||||
lda $tp,8($tp)
|
||||
@ -247,7 +251,7 @@ bn_mul_mont:
|
||||
addq $hi1,v0,$hi1
|
||||
|
||||
addq $hi1,$hi0,$lo1
|
||||
stq $j,($tp)
|
||||
stq $j,0($tp)
|
||||
cmpult $lo1,$hi0,$hi1
|
||||
addq $lo1,$tj,$lo1
|
||||
cmpult $lo1,$tj,AT
|
||||
@ -265,8 +269,8 @@ bn_mul_mont:
|
||||
mov 0,$hi0 # clear borrow bit
|
||||
|
||||
.align 4
|
||||
.Lsub: ldq $lo0,($tp)
|
||||
ldq $lo1,($np)
|
||||
.Lsub: ldq $lo0,0($tp)
|
||||
ldq $lo1,0($np)
|
||||
lda $tp,8($tp)
|
||||
lda $np,8($np)
|
||||
subq $lo0,$lo1,$lo1 # tp[i]-np[i]
|
||||
@ -274,7 +278,7 @@ bn_mul_mont:
|
||||
subq $lo1,$hi0,$lo0
|
||||
cmpult $lo1,$lo0,$hi0
|
||||
or $hi0,AT,$hi0
|
||||
stq $lo0,($rp)
|
||||
stq $lo0,0($rp)
|
||||
cmpult $tp,$tj,v0
|
||||
lda $rp,8($rp)
|
||||
bne v0,.Lsub
|
||||
@ -288,7 +292,7 @@ bn_mul_mont:
|
||||
bis $bp,$ap,$ap # ap=borrow?tp:rp
|
||||
|
||||
.align 4
|
||||
.Lcopy: ldq $aj,($ap) # copy or in-place refresh
|
||||
.Lcopy: ldq $aj,0($ap) # copy or in-place refresh
|
||||
lda $tp,8($tp)
|
||||
lda $rp,8($rp)
|
||||
lda $ap,8($ap)
|
||||
@ -309,8 +313,8 @@ bn_mul_mont:
|
||||
lda sp,48(sp)
|
||||
ret (ra)
|
||||
.end bn_mul_mont
|
||||
.rdata
|
||||
.asciiz "Montgomery Multiplication for Alpha, CRYPTOGAMS by <appro\@openssl.org>"
|
||||
.ascii "Montgomery Multiplication for Alpha, CRYPTOGAMS by <appro\@openssl.org>"
|
||||
.align 2
|
||||
___
|
||||
|
||||
print $code;
|
||||
|
@ -949,7 +949,7 @@ $data=<<EOF;
|
||||
addze r11,r0
|
||||
#mul_add_c(a[3],b[2],c3,c1,c2);
|
||||
$LD r6,`3*$BNSZ`(r4)
|
||||
$LD r7,`2*$BNSZ`(r4)
|
||||
$LD r7,`2*$BNSZ`(r5)
|
||||
$UMULL r8,r6,r7
|
||||
$UMULH r9,r6,r7
|
||||
addc r12,r8,r12
|
||||
|
@ -69,8 +69,8 @@ bn_mul_mont:
|
||||
cghi $num,16 #
|
||||
lghi %r2,0 #
|
||||
blr %r14 # if($num<16) return 0;
|
||||
cghi $num,128 #
|
||||
bhr %r14 # if($num>128) return 0;
|
||||
cghi $num,96 #
|
||||
bhr %r14 # if($num>96) return 0;
|
||||
|
||||
stmg %r3,%r15,24($sp)
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
.ident "s390x.S, version 1.0"
|
||||
.ident "s390x.S, version 1.1"
|
||||
// ====================================================================
|
||||
// Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
|
||||
// project.
|
||||
@ -24,67 +24,67 @@ bn_mul_add_words:
|
||||
bler %r14 // if (len<=0) return 0;
|
||||
|
||||
stmg %r6,%r10,48(%r15)
|
||||
lghi %r10,3
|
||||
lghi %r8,0 // carry = 0
|
||||
srag %r10,%r4,2 // cnt=len/4
|
||||
jz .Loop1_madd
|
||||
nr %r10,%r4 // len%4
|
||||
sra %r4,2 // cnt=len/4
|
||||
jz .Loop1_madd // carry is incidentally cleared if branch taken
|
||||
algr zero,zero // clear carry
|
||||
|
||||
.Loop4_madd:
|
||||
lg %r7,0(%r2,%r3) // ap[i]
|
||||
mlgr %r6,%r5 // *=w
|
||||
algr %r7,%r8 // +=carry
|
||||
alcgr %r7,%r8 // +=carry
|
||||
alcgr %r6,zero
|
||||
alg %r7,0(%r2,%r1) // +=rp[i]
|
||||
alcgr %r6,zero
|
||||
stg %r7,0(%r2,%r1) // rp[i]=
|
||||
|
||||
lg %r9,8(%r2,%r3)
|
||||
mlgr %r8,%r5
|
||||
algr %r9,%r6
|
||||
alcgr %r9,%r6
|
||||
alcgr %r8,zero
|
||||
alg %r9,8(%r2,%r1)
|
||||
alcgr %r8,zero
|
||||
stg %r9,8(%r2,%r1)
|
||||
|
||||
lg %r7,16(%r2,%r3)
|
||||
mlgr %r6,%r5
|
||||
algr %r7,%r8
|
||||
alcgr %r7,%r8
|
||||
alcgr %r6,zero
|
||||
alg %r7,16(%r2,%r1)
|
||||
alcgr %r6,zero
|
||||
stg %r7,16(%r2,%r1)
|
||||
|
||||
lg %r9,24(%r2,%r3)
|
||||
mlgr %r8,%r5
|
||||
algr %r9,%r6
|
||||
alcgr %r9,%r6
|
||||
alcgr %r8,zero
|
||||
alg %r9,24(%r2,%r1)
|
||||
alcgr %r8,zero
|
||||
stg %r9,24(%r2,%r1)
|
||||
|
||||
la %r2,32(%r2) // i+=4
|
||||
brct %r10,.Loop4_madd
|
||||
brct %r4,.Loop4_madd
|
||||
|
||||
lghi %r10,3
|
||||
nr %r4,%r10 // cnt=len%4
|
||||
jz .Lend_madd
|
||||
la %r10,1(%r10) // see if len%4 is zero ...
|
||||
brct %r10,.Loop1_madd // without touching condition code:-)
|
||||
|
||||
.Lend_madd:
|
||||
alcgr %r8,zero // collect carry bit
|
||||
lgr %r2,%r8
|
||||
lmg %r6,%r10,48(%r15)
|
||||
br %r14
|
||||
|
||||
.Loop1_madd:
|
||||
lg %r7,0(%r2,%r3) // ap[i]
|
||||
mlgr %r6,%r5 // *=w
|
||||
algr %r7,%r8 // +=carry
|
||||
alcgr %r7,%r8 // +=carry
|
||||
alcgr %r6,zero
|
||||
alg %r7,0(%r2,%r1) // +=rp[i]
|
||||
alcgr %r6,zero
|
||||
stg %r7,0(%r2,%r1) // rp[i]=
|
||||
|
||||
lgr %r8,%r6
|
||||
la %r2,8(%r2) // i++
|
||||
brct %r4,.Loop1_madd
|
||||
brct %r10,.Loop1_madd
|
||||
|
||||
.Lend_madd:
|
||||
lgr %r2,%r8
|
||||
lmg %r6,%r10,48(%r15)
|
||||
br %r14
|
||||
j .Lend_madd
|
||||
.size bn_mul_add_words,.-bn_mul_add_words
|
||||
|
||||
// BN_ULONG bn_mul_words(BN_ULONG *r2,BN_ULONG *r3,int r4,BN_ULONG r5);
|
||||
@ -99,57 +99,57 @@ bn_mul_words:
|
||||
bler %r14 // if (len<=0) return 0;
|
||||
|
||||
stmg %r6,%r10,48(%r15)
|
||||
lghi %r10,3
|
||||
lghi %r8,0 // carry = 0
|
||||
srag %r10,%r4,2 // cnt=len/4
|
||||
jz .Loop1_mul
|
||||
nr %r10,%r4 // len%4
|
||||
sra %r4,2 // cnt=len/4
|
||||
jz .Loop1_mul // carry is incidentally cleared if branch taken
|
||||
algr zero,zero // clear carry
|
||||
|
||||
.Loop4_mul:
|
||||
lg %r7,0(%r2,%r3) // ap[i]
|
||||
mlgr %r6,%r5 // *=w
|
||||
algr %r7,%r8 // +=carry
|
||||
alcgr %r6,zero
|
||||
alcgr %r7,%r8 // +=carry
|
||||
stg %r7,0(%r2,%r1) // rp[i]=
|
||||
|
||||
lg %r9,8(%r2,%r3)
|
||||
mlgr %r8,%r5
|
||||
algr %r9,%r6
|
||||
alcgr %r8,zero
|
||||
alcgr %r9,%r6
|
||||
stg %r9,8(%r2,%r1)
|
||||
|
||||
lg %r7,16(%r2,%r3)
|
||||
mlgr %r6,%r5
|
||||
algr %r7,%r8
|
||||
alcgr %r6,zero
|
||||
alcgr %r7,%r8
|
||||
stg %r7,16(%r2,%r1)
|
||||
|
||||
lg %r9,24(%r2,%r3)
|
||||
mlgr %r8,%r5
|
||||
algr %r9,%r6
|
||||
alcgr %r8,zero
|
||||
alcgr %r9,%r6
|
||||
stg %r9,24(%r2,%r1)
|
||||
|
||||
la %r2,32(%r2) // i+=4
|
||||
brct %r10,.Loop4_mul
|
||||
brct %r4,.Loop4_mul
|
||||
|
||||
lghi %r10,3
|
||||
nr %r4,%r10 // cnt=len%4
|
||||
jz .Lend_mul
|
||||
la %r10,1(%r10) // see if len%4 is zero ...
|
||||
brct %r10,.Loop1_mul // without touching condition code:-)
|
||||
|
||||
.Lend_mul:
|
||||
alcgr %r8,zero // collect carry bit
|
||||
lgr %r2,%r8
|
||||
lmg %r6,%r10,48(%r15)
|
||||
br %r14
|
||||
|
||||
.Loop1_mul:
|
||||
lg %r7,0(%r2,%r3) // ap[i]
|
||||
mlgr %r6,%r5 // *=w
|
||||
algr %r7,%r8 // +=carry
|
||||
alcgr %r6,zero
|
||||
alcgr %r7,%r8 // +=carry
|
||||
stg %r7,0(%r2,%r1) // rp[i]=
|
||||
|
||||
lgr %r8,%r6
|
||||
la %r2,8(%r2) // i++
|
||||
brct %r4,.Loop1_mul
|
||||
brct %r10,.Loop1_mul
|
||||
|
||||
.Lend_mul:
|
||||
lgr %r2,%r8
|
||||
lmg %r6,%r10,48(%r15)
|
||||
br %r14
|
||||
j .Lend_mul
|
||||
.size bn_mul_words,.-bn_mul_words
|
||||
|
||||
// void bn_sqr_words(BN_ULONG *r2,BN_ULONG *r2,int r4)
|
||||
|
@ -527,8 +527,10 @@ $sbit=$num;
|
||||
&jle (&label("sqradd"));
|
||||
|
||||
&mov ($carry,"edx");
|
||||
&lea ("edx",&DWP(0,$sbit,"edx",2));
|
||||
&add ("edx","edx");
|
||||
&shr ($carry,31);
|
||||
&add ("edx",$sbit);
|
||||
&adc ($carry,0);
|
||||
&set_label("sqrlast");
|
||||
&mov ($word,$_n0);
|
||||
&mov ($inp,$_np);
|
||||
|
@ -253,6 +253,24 @@ extern "C" {
|
||||
#define BN_HEX_FMT2 "%08X"
|
||||
#endif
|
||||
|
||||
/* 2011-02-22 SMS.
|
||||
* In various places, a size_t variable or a type cast to size_t was
|
||||
* used to perform integer-only operations on pointers. This failed on
|
||||
* VMS with 64-bit pointers (CC /POINTER_SIZE = 64) because size_t is
|
||||
* still only 32 bits. What's needed in these cases is an integer type
|
||||
* with the same size as a pointer, which size_t is not certain to be.
|
||||
* The only fix here is VMS-specific.
|
||||
*/
|
||||
#if defined(OPENSSL_SYS_VMS)
|
||||
# if __INITIAL_POINTER_SIZE == 64
|
||||
# define PTR_SIZE_INT long long
|
||||
# else /* __INITIAL_POINTER_SIZE == 64 */
|
||||
# define PTR_SIZE_INT int
|
||||
# endif /* __INITIAL_POINTER_SIZE == 64 [else] */
|
||||
#else /* defined(OPENSSL_SYS_VMS) */
|
||||
# define PTR_SIZE_INT size_t
|
||||
#endif /* defined(OPENSSL_SYS_VMS) [else] */
|
||||
|
||||
#define BN_DEFAULT_BITS 1280
|
||||
|
||||
#define BN_FLG_MALLOCED 0x01
|
||||
|
@ -126,7 +126,7 @@ struct bn_blinding_st
|
||||
* used only by crypto/rsa/rsa_eay.c, rsa_lib.c */
|
||||
#endif
|
||||
CRYPTO_THREADID tid;
|
||||
unsigned int counter;
|
||||
int counter;
|
||||
unsigned long flags;
|
||||
BN_MONT_CTX *m_ctx;
|
||||
int (*bn_mod_exp)(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
||||
@ -160,7 +160,10 @@ BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod)
|
||||
if (BN_get_flags(mod, BN_FLG_CONSTTIME) != 0)
|
||||
BN_set_flags(ret->mod, BN_FLG_CONSTTIME);
|
||||
|
||||
ret->counter = BN_BLINDING_COUNTER;
|
||||
/* Set the counter to the special value -1
|
||||
* to indicate that this is never-used fresh blinding
|
||||
* that does not need updating before first use. */
|
||||
ret->counter = -1;
|
||||
CRYPTO_THREADID_current(&ret->tid);
|
||||
return(ret);
|
||||
err:
|
||||
@ -190,7 +193,10 @@ int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx)
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (--(b->counter) == 0 && b->e != NULL &&
|
||||
if (b->counter == -1)
|
||||
b->counter = 0;
|
||||
|
||||
if (++b->counter == BN_BLINDING_COUNTER && b->e != NULL &&
|
||||
!(b->flags & BN_BLINDING_NO_RECREATE))
|
||||
{
|
||||
/* re-create blinding parameters */
|
||||
@ -205,8 +211,8 @@ int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx)
|
||||
|
||||
ret=1;
|
||||
err:
|
||||
if (b->counter == 0)
|
||||
b->counter = BN_BLINDING_COUNTER;
|
||||
if (b->counter == BN_BLINDING_COUNTER)
|
||||
b->counter = 0;
|
||||
return(ret);
|
||||
}
|
||||
|
||||
@ -227,6 +233,12 @@ int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *ctx)
|
||||
return(0);
|
||||
}
|
||||
|
||||
if (b->counter == -1)
|
||||
/* Fresh blinding, doesn't need updating. */
|
||||
b->counter = 0;
|
||||
else if (!BN_BLINDING_update(b,ctx))
|
||||
return(0);
|
||||
|
||||
if (r != NULL)
|
||||
{
|
||||
if (!BN_copy(r, b->Ai)) ret=0;
|
||||
@ -247,22 +259,19 @@ int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, BN_CTX *ct
|
||||
int ret;
|
||||
|
||||
bn_check_top(n);
|
||||
if ((b->A == NULL) || (b->Ai == NULL))
|
||||
{
|
||||
BNerr(BN_F_BN_BLINDING_INVERT_EX,BN_R_NOT_INITIALIZED);
|
||||
return(0);
|
||||
}
|
||||
|
||||
if (r != NULL)
|
||||
ret = BN_mod_mul(n, n, r, b->mod, ctx);
|
||||
else
|
||||
ret = BN_mod_mul(n, n, b->Ai, b->mod, ctx);
|
||||
|
||||
if (ret >= 0)
|
||||
{
|
||||
if (!BN_BLINDING_update(b,ctx))
|
||||
if (b->Ai == NULL)
|
||||
{
|
||||
BNerr(BN_F_BN_BLINDING_INVERT_EX,BN_R_NOT_INITIALIZED);
|
||||
return(0);
|
||||
}
|
||||
ret = BN_mod_mul(n, n, b->Ai, b->mod, ctx);
|
||||
}
|
||||
|
||||
bn_check_top(n);
|
||||
return(ret);
|
||||
}
|
||||
|
@ -301,7 +301,8 @@ int BN_mod_exp2_mont(BIGNUM *rr, const BIGNUM *a1, const BIGNUM *p1,
|
||||
r_is_one = 0;
|
||||
}
|
||||
}
|
||||
BN_from_montgomery(rr,r,mont,ctx);
|
||||
if (!BN_from_montgomery(rr,r,mont,ctx))
|
||||
goto err;
|
||||
ret=1;
|
||||
err:
|
||||
if ((in_mont == NULL) && (mont != NULL)) BN_MONT_CTX_free(mont);
|
||||
|
@ -545,6 +545,7 @@ int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
|
||||
{
|
||||
while (!BN_is_odd(u))
|
||||
{
|
||||
if (BN_is_zero(u)) goto err;
|
||||
if (!BN_rshift1(u, u)) goto err;
|
||||
if (BN_is_odd(b))
|
||||
{
|
||||
|
@ -277,7 +277,7 @@ static int BN_from_montgomery_word(BIGNUM *ret, BIGNUM *r, BN_MONT_CTX *mont)
|
||||
m1|=m2; /* (al!=ri) */
|
||||
m1|=(0-(size_t)v); /* (al!=ri || v) */
|
||||
m1&=~m2; /* (al!=ri || v) && !al>ri */
|
||||
nrp=(BN_ULONG *)(((size_t)rp&~m1)|((size_t)ap&m1));
|
||||
nrp=(BN_ULONG *)(((PTR_SIZE_INT)rp&~m1)|((PTR_SIZE_INT)ap&m1));
|
||||
}
|
||||
|
||||
/* 'i<ri' is chosen to eliminate dependency on input data, even
|
||||
|
@ -354,7 +354,7 @@ int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
|
||||
buf[BN_NIST_192_TOP],
|
||||
c_d[BN_NIST_192_TOP],
|
||||
*res;
|
||||
size_t mask;
|
||||
PTR_SIZE_INT mask;
|
||||
static const BIGNUM _bignum_nist_p_192_sqr = {
|
||||
(BN_ULONG *)_nist_p_192_sqr,
|
||||
sizeof(_nist_p_192_sqr)/sizeof(_nist_p_192_sqr[0]),
|
||||
@ -405,9 +405,10 @@ int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
|
||||
* 'tmp=result-modulus; if (!carry || !borrow) result=tmp;'
|
||||
* this is what happens below, but without explicit if:-) a.
|
||||
*/
|
||||
mask = 0-(size_t)bn_sub_words(c_d,r_d,_nist_p_192[0],BN_NIST_192_TOP);
|
||||
mask &= 0-(size_t)carry;
|
||||
res = (BN_ULONG *)(((size_t)c_d&~mask) | ((size_t)r_d&mask));
|
||||
mask = 0-(PTR_SIZE_INT)bn_sub_words(c_d,r_d,_nist_p_192[0],BN_NIST_192_TOP);
|
||||
mask &= 0-(PTR_SIZE_INT)carry;
|
||||
res = (BN_ULONG *)
|
||||
(((PTR_SIZE_INT)c_d&~mask) | ((PTR_SIZE_INT)r_d&mask));
|
||||
nist_cp_bn(r_d, res, BN_NIST_192_TOP);
|
||||
r->top = BN_NIST_192_TOP;
|
||||
bn_correct_top(r);
|
||||
@ -438,8 +439,8 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
|
||||
buf[BN_NIST_224_TOP],
|
||||
c_d[BN_NIST_224_TOP],
|
||||
*res;
|
||||
size_t mask;
|
||||
union { bn_addsub_f f; size_t p; } u;
|
||||
PTR_SIZE_INT mask;
|
||||
union { bn_addsub_f f; PTR_SIZE_INT p; } u;
|
||||
static const BIGNUM _bignum_nist_p_224_sqr = {
|
||||
(BN_ULONG *)_nist_p_224_sqr,
|
||||
sizeof(_nist_p_224_sqr)/sizeof(_nist_p_224_sqr[0]),
|
||||
@ -510,16 +511,18 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
|
||||
* to be compared to the modulus and conditionally
|
||||
* adjusted by *subtracting* the latter. */
|
||||
carry = (int)bn_add_words(r_d,r_d,_nist_p_224[-carry-1],BN_NIST_224_TOP);
|
||||
mask = 0-(size_t)carry;
|
||||
u.p = ((size_t)bn_sub_words&mask) | ((size_t)bn_add_words&~mask);
|
||||
mask = 0-(PTR_SIZE_INT)carry;
|
||||
u.p = ((PTR_SIZE_INT)bn_sub_words&mask) |
|
||||
((PTR_SIZE_INT)bn_add_words&~mask);
|
||||
}
|
||||
else
|
||||
carry = 1;
|
||||
|
||||
/* otherwise it's effectively same as in BN_nist_mod_192... */
|
||||
mask = 0-(size_t)(*u.f)(c_d,r_d,_nist_p_224[0],BN_NIST_224_TOP);
|
||||
mask &= 0-(size_t)carry;
|
||||
res = (BN_ULONG *)(((size_t)c_d&~mask) | ((size_t)r_d&mask));
|
||||
mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_224[0],BN_NIST_224_TOP);
|
||||
mask &= 0-(PTR_SIZE_INT)carry;
|
||||
res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) |
|
||||
((PTR_SIZE_INT)r_d&mask));
|
||||
nist_cp_bn(r_d, res, BN_NIST_224_TOP);
|
||||
r->top = BN_NIST_224_TOP;
|
||||
bn_correct_top(r);
|
||||
@ -549,8 +552,8 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
|
||||
buf[BN_NIST_256_TOP],
|
||||
c_d[BN_NIST_256_TOP],
|
||||
*res;
|
||||
size_t mask;
|
||||
union { bn_addsub_f f; size_t p; } u;
|
||||
PTR_SIZE_INT mask;
|
||||
union { bn_addsub_f f; PTR_SIZE_INT p; } u;
|
||||
static const BIGNUM _bignum_nist_p_256_sqr = {
|
||||
(BN_ULONG *)_nist_p_256_sqr,
|
||||
sizeof(_nist_p_256_sqr)/sizeof(_nist_p_256_sqr[0]),
|
||||
@ -629,15 +632,17 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
|
||||
else if (carry < 0)
|
||||
{
|
||||
carry = (int)bn_add_words(r_d,r_d,_nist_p_256[-carry-1],BN_NIST_256_TOP);
|
||||
mask = 0-(size_t)carry;
|
||||
u.p = ((size_t)bn_sub_words&mask) | ((size_t)bn_add_words&~mask);
|
||||
mask = 0-(PTR_SIZE_INT)carry;
|
||||
u.p = ((PTR_SIZE_INT)bn_sub_words&mask) |
|
||||
((PTR_SIZE_INT)bn_add_words&~mask);
|
||||
}
|
||||
else
|
||||
carry = 1;
|
||||
|
||||
mask = 0-(size_t)(*u.f)(c_d,r_d,_nist_p_256[0],BN_NIST_256_TOP);
|
||||
mask &= 0-(size_t)carry;
|
||||
res = (BN_ULONG *)(((size_t)c_d&~mask) | ((size_t)r_d&mask));
|
||||
mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_256[0],BN_NIST_256_TOP);
|
||||
mask &= 0-(PTR_SIZE_INT)carry;
|
||||
res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) |
|
||||
((PTR_SIZE_INT)r_d&mask));
|
||||
nist_cp_bn(r_d, res, BN_NIST_256_TOP);
|
||||
r->top = BN_NIST_256_TOP;
|
||||
bn_correct_top(r);
|
||||
@ -671,8 +676,8 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
|
||||
buf[BN_NIST_384_TOP],
|
||||
c_d[BN_NIST_384_TOP],
|
||||
*res;
|
||||
size_t mask;
|
||||
union { bn_addsub_f f; size_t p; } u;
|
||||
PTR_SIZE_INT mask;
|
||||
union { bn_addsub_f f; PTR_SIZE_INT p; } u;
|
||||
static const BIGNUM _bignum_nist_p_384_sqr = {
|
||||
(BN_ULONG *)_nist_p_384_sqr,
|
||||
sizeof(_nist_p_384_sqr)/sizeof(_nist_p_384_sqr[0]),
|
||||
@ -754,15 +759,17 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
|
||||
else if (carry < 0)
|
||||
{
|
||||
carry = (int)bn_add_words(r_d,r_d,_nist_p_384[-carry-1],BN_NIST_384_TOP);
|
||||
mask = 0-(size_t)carry;
|
||||
u.p = ((size_t)bn_sub_words&mask) | ((size_t)bn_add_words&~mask);
|
||||
mask = 0-(PTR_SIZE_INT)carry;
|
||||
u.p = ((PTR_SIZE_INT)bn_sub_words&mask) |
|
||||
((PTR_SIZE_INT)bn_add_words&~mask);
|
||||
}
|
||||
else
|
||||
carry = 1;
|
||||
|
||||
mask = 0-(size_t)(*u.f)(c_d,r_d,_nist_p_384[0],BN_NIST_384_TOP);
|
||||
mask &= 0-(size_t)carry;
|
||||
res = (BN_ULONG *)(((size_t)c_d&~mask) | ((size_t)r_d&mask));
|
||||
mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_384[0],BN_NIST_384_TOP);
|
||||
mask &= 0-(PTR_SIZE_INT)carry;
|
||||
res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) |
|
||||
((PTR_SIZE_INT)r_d&mask));
|
||||
nist_cp_bn(r_d, res, BN_NIST_384_TOP);
|
||||
r->top = BN_NIST_384_TOP;
|
||||
bn_correct_top(r);
|
||||
@ -781,7 +788,7 @@ int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
|
||||
BN_ULONG *r_d, *a_d = a->d,
|
||||
t_d[BN_NIST_521_TOP],
|
||||
val,tmp,*res;
|
||||
size_t mask;
|
||||
PTR_SIZE_INT mask;
|
||||
static const BIGNUM _bignum_nist_p_521_sqr = {
|
||||
(BN_ULONG *)_nist_p_521_sqr,
|
||||
sizeof(_nist_p_521_sqr)/sizeof(_nist_p_521_sqr[0]),
|
||||
@ -826,8 +833,9 @@ int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
|
||||
r_d[i] &= BN_NIST_521_TOP_MASK;
|
||||
|
||||
bn_add_words(r_d,r_d,t_d,BN_NIST_521_TOP);
|
||||
mask = 0-(size_t)bn_sub_words(t_d,r_d,_nist_p_521,BN_NIST_521_TOP);
|
||||
res = (BN_ULONG *)(((size_t)t_d&~mask) | ((size_t)r_d&mask));
|
||||
mask = 0-(PTR_SIZE_INT)bn_sub_words(t_d,r_d,_nist_p_521,BN_NIST_521_TOP);
|
||||
res = (BN_ULONG *)(((PTR_SIZE_INT)t_d&~mask) |
|
||||
((PTR_SIZE_INT)r_d&mask));
|
||||
nist_cp_bn(r_d,res,BN_NIST_521_TOP);
|
||||
r->top = BN_NIST_521_TOP;
|
||||
bn_correct_top(r);
|
||||
|
@ -46,7 +46,7 @@ static int rle_expand_block(COMP_CTX *ctx, unsigned char *out,
|
||||
{
|
||||
int i;
|
||||
|
||||
if (olen < (ilen-1))
|
||||
if (ilen == 0 || olen < (ilen-1))
|
||||
{
|
||||
/* ZZZZZZZZZZZZZZZZZZZZZZ */
|
||||
return(-1);
|
||||
@ -59,4 +59,3 @@ static int rle_expand_block(COMP_CTX *ctx, unsigned char *out,
|
||||
}
|
||||
return(ilen-1);
|
||||
}
|
||||
|
||||
|
@ -64,6 +64,7 @@
|
||||
#endif
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <openssl/conf.h>
|
||||
#include <openssl/conf_api.h>
|
||||
|
@ -731,7 +731,6 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
|
||||
case DLL_THREAD_ATTACH:
|
||||
break;
|
||||
case DLL_THREAD_DETACH:
|
||||
ERR_remove_state(0);
|
||||
break;
|
||||
case DLL_PROCESS_DETACH:
|
||||
break;
|
||||
@ -743,6 +742,16 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
#include <tchar.h>
|
||||
#include <signal.h>
|
||||
#ifdef __WATCOMC__
|
||||
#if defined(_UNICODE) || defined(__UNICODE__)
|
||||
#define _vsntprintf _vsnwprintf
|
||||
#else
|
||||
#define _vsntprintf _vsnprintf
|
||||
#endif
|
||||
#endif
|
||||
#ifdef _MSC_VER
|
||||
#define alloca _alloca
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333
|
||||
int OPENSSL_isservice(void)
|
||||
@ -773,11 +782,7 @@ int OPENSSL_isservice(void)
|
||||
|
||||
if (len>512) return -1; /* paranoia */
|
||||
len++,len&=~1; /* paranoia */
|
||||
#ifdef _MSC_VER
|
||||
name=(WCHAR *)_alloca(len+sizeof(WCHAR));
|
||||
#else
|
||||
name=(WCHAR *)alloca(len+sizeof(WCHAR));
|
||||
#endif
|
||||
if (!GetUserObjectInformationW (h,UOI_NAME,name,len,&len))
|
||||
return -1;
|
||||
|
||||
@ -822,11 +827,7 @@ void OPENSSL_showfatal (const char *fmta,...)
|
||||
size_t len_0=strlen(fmta)+1,i;
|
||||
WCHAR *fmtw;
|
||||
|
||||
#ifdef _MSC_VER
|
||||
fmtw = (WCHAR *)_alloca (len_0*sizeof(WCHAR));
|
||||
#else
|
||||
fmtw = (WCHAR *)alloca (len_0*sizeof(WCHAR));
|
||||
#endif
|
||||
fmtw = (WCHAR *)alloca(len_0*sizeof(WCHAR));
|
||||
if (fmtw == NULL) { fmt=(const TCHAR *)L"no stack?"; break; }
|
||||
|
||||
#ifndef OPENSSL_NO_MULTIBYTE
|
||||
|
@ -47,11 +47,33 @@ $! P6, if defined, sets a choice of crypto methods to compile.
|
||||
$! WARNING: this should only be done to recompile some part of an already
|
||||
$! fully compiled library.
|
||||
$!
|
||||
$! P7, if defined, specifies the C pointer size. Ignored on VAX.
|
||||
$! ("64=ARGV" gives more efficient code with HP C V7.3 or newer.)
|
||||
$! Supported values are:
|
||||
$!
|
||||
$! "" Compile with default (/NOPOINTER_SIZE)
|
||||
$! 32 Compile with /POINTER_SIZE=32 (SHORT)
|
||||
$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV]).
|
||||
$! (Automatically select ARGV if compiler supports it.)
|
||||
$! 64= Compile with /POINTER_SIZE=64 (LONG).
|
||||
$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV).
|
||||
$!
|
||||
$! P8, if defined, specifies a directory where ZLIB files (zlib.h,
|
||||
$! libz.olb) may be found. Optionally, a non-default object library
|
||||
$! name may be included ("dev:[dir]libz_64.olb", for example).
|
||||
$!
|
||||
$!
|
||||
$! Announce/identify.
|
||||
$!
|
||||
$ proc = f$environment( "procedure")
|
||||
$ write sys$output "@@@ "+ -
|
||||
f$parse( proc, , , "name")+ f$parse( proc, , , "type")
|
||||
$!
|
||||
$! Define A TCP/IP Library That We Will Need To Link To.
|
||||
$! (That Is, If We Need To Link To One.)
|
||||
$!
|
||||
$ TCPIP_LIB = ""
|
||||
$ ZLIB_LIB = ""
|
||||
$!
|
||||
$! Check Which Architecture We Are Using.
|
||||
$!
|
||||
@ -75,6 +97,11 @@ $! End The Architecture Check.
|
||||
$!
|
||||
$ ENDIF
|
||||
$!
|
||||
$ ARCHD = ARCH
|
||||
$ LIB32 = "32"
|
||||
$ OPT_FILE = ""
|
||||
$ POINTER_SIZE = ""
|
||||
$!
|
||||
$! Define The Different Encryption Types.
|
||||
$! NOTE: Some might think this list ugly. However, it's made this way to
|
||||
$! reflect the SDIRS variable in [-]Makefile.org as closely as possible,
|
||||
@ -91,25 +118,37 @@ $ ENCRYPT_TYPES = "Basic,"+ -
|
||||
"EVP,EVP_2,EVP_3,ASN1,ASN1_2,PEM,X509,X509V3,"+ -
|
||||
"CONF,TXT_DB,PKCS7,PKCS12,COMP,OCSP,UI,KRB5,"+ -
|
||||
"STORE,CMS,PQUEUE,TS,JPAKE"
|
||||
$! Define The OBJ Directory.
|
||||
$!
|
||||
$ OBJ_DIR := SYS$DISK:[-.'ARCH'.OBJ.CRYPTO]
|
||||
$!
|
||||
$! Define The EXE Directory.
|
||||
$!
|
||||
$ EXE_DIR := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]
|
||||
$!
|
||||
$! Check To Make Sure We Have Valid Command Line Parameters.
|
||||
$!
|
||||
$ GOSUB CHECK_OPTIONS
|
||||
$!
|
||||
$! Define The OBJ and EXE Directories.
|
||||
$!
|
||||
$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.CRYPTO]
|
||||
$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]
|
||||
$!
|
||||
$! Specify the destination directory in any /MAP option.
|
||||
$!
|
||||
$ if (LINKMAP .eqs. "MAP")
|
||||
$ then
|
||||
$ LINKMAP = LINKMAP+ "=''EXE_DIR'"
|
||||
$ endif
|
||||
$!
|
||||
$! Add the location prefix to the linker options file name.
|
||||
$!
|
||||
$ if (OPT_FILE .nes. "")
|
||||
$ then
|
||||
$ OPT_FILE = EXE_DIR+ OPT_FILE
|
||||
$ endif
|
||||
$!
|
||||
$! Initialise logical names and such
|
||||
$!
|
||||
$ GOSUB INITIALISE
|
||||
$!
|
||||
$! Tell The User What Kind of Machine We Run On.
|
||||
$!
|
||||
$ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine."
|
||||
$ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'"
|
||||
$!
|
||||
$!
|
||||
$! Check To See If The Architecture Specific OBJ Directory Exists.
|
||||
@ -140,11 +179,11 @@ $ ENDIF
|
||||
$!
|
||||
$! Define The Library Name.
|
||||
$!
|
||||
$ LIB_NAME := 'EXE_DIR'LIBCRYPTO.OLB
|
||||
$ LIB_NAME := 'EXE_DIR'SSL_LIBCRYPTO'LIB32'.OLB
|
||||
$!
|
||||
$! Define The CRYPTO-LIB We Are To Use.
|
||||
$!
|
||||
$ CRYPTO_LIB := 'EXE_DIR'LIBCRYPTO.OLB
|
||||
$ CRYPTO_LIB := 'EXE_DIR'SSL_LIBCRYPTO'LIB32'.OLB
|
||||
$!
|
||||
$! Check To See If We Already Have A "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" Library...
|
||||
$!
|
||||
@ -193,7 +232,7 @@ $ LIB_CAST = "c_skey,c_ecb,c_enc,c_cfb64,c_ofb64"
|
||||
$ LIB_CAMELLIA = "camellia,cmll_misc,cmll_ecb,cmll_cbc,cmll_ofb,"+ -
|
||||
"cmll_cfb,cmll_ctr"
|
||||
$ LIB_SEED = "seed,seed_ecb,seed_cbc,seed_cfb,seed_ofb"
|
||||
$ LIB_MODES = "cbc128,ctr128,cfb128,ofb128"
|
||||
$ LIB_MODES = "cbc128,ctr128,cts128,cfb128,ofb128"
|
||||
$ LIB_BN_ASM = "[.asm]vms.mar,vms-helper"
|
||||
$ IF F$TRNLNM("OPENSSL_NO_ASM") .OR. ARCH .NES. "VAX" THEN -
|
||||
LIB_BN_ASM = "bn_asm"
|
||||
@ -301,15 +340,23 @@ $ LIB_JPAKE = "jpake,jpake_err"
|
||||
$!
|
||||
$! Setup exceptional compilations
|
||||
$!
|
||||
$ ! Add definitions for no threads on OpenVMS 7.1 and higher
|
||||
$ CC3_SHOWN = 0
|
||||
$ CC4_SHOWN = 0
|
||||
$ CC5_SHOWN = 0
|
||||
$ CC6_SHOWN = 0
|
||||
$!
|
||||
$! The following lists must have leading and trailing commas, and no
|
||||
$! embedded spaces. (They are scanned for ",name,".)
|
||||
$!
|
||||
$ ! Add definitions for no threads on OpenVMS 7.1 and higher.
|
||||
$ COMPILEWITH_CC3 = ",bss_rtcp,"
|
||||
$ ! Disable the DOLLARID warning
|
||||
$ COMPILEWITH_CC4 = ",a_utctm,bss_log,o_time,o_dir"
|
||||
$ ! Disable disjoint optimization
|
||||
$ ! Disable the DOLLARID warning. Not needed with /STANDARD=RELAXED.
|
||||
$ COMPILEWITH_CC4 = "" !!! ",a_utctm,bss_log,o_time,o_dir,"
|
||||
$ ! Disable disjoint optimization on VAX with DECC.
|
||||
$ COMPILEWITH_CC5 = ",md2_dgst,md4_dgst,md5_dgst,mdc2dgst," + -
|
||||
"seed,sha_dgst,sha1dgst,rmd_dgst,bf_enc,"
|
||||
$ ! Disable the MIXLINKAGE warning
|
||||
$ COMPILEWITH_CC6 = ",enc_read,set_key,"
|
||||
$ ! Disable the MIXLINKAGE warning.
|
||||
$ COMPILEWITH_CC6 = "" !!! ",enc_read,set_key,"
|
||||
$!
|
||||
$! Figure Out What Other Modules We Are To Build.
|
||||
$!
|
||||
@ -515,31 +562,60 @@ $ WRITE SYS$OUTPUT "Compiling The ",FILE_NAME," File. (",BUILDALL,",",STATE,"
|
||||
$ ENDIF
|
||||
$ IF (MODULE_NAME.NES."")
|
||||
$ THEN
|
||||
$ WRITE SYS$OUTPUT " ",FILE_NAME,""
|
||||
$ WRITE SYS$OUTPUT " ",FILE_NAME,""
|
||||
$ ENDIF
|
||||
$!
|
||||
$! Compile The File.
|
||||
$!
|
||||
$ ON ERROR THEN GOTO NEXT_FILE
|
||||
$ FILE_NAME0 = F$ELEMENT(0,".",FILE_NAME)
|
||||
$ FILE_NAME0 = ","+ F$ELEMENT(0,".",FILE_NAME)+ ","
|
||||
$ IF FILE_NAME - ".mar" .NES. FILE_NAME
|
||||
$ THEN
|
||||
$ MACRO/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
|
||||
$ ELSE
|
||||
$ IF COMPILEWITH_CC3 - FILE_NAME0 .NES. COMPILEWITH_CC3
|
||||
$ THEN
|
||||
$ write sys$output " \Using special rule (3)"
|
||||
$ if (.not. CC3_SHOWN)
|
||||
$ then
|
||||
$ CC3_SHOWN = 1
|
||||
$ x = " "+ CC3
|
||||
$ write /symbol sys$output x
|
||||
$ endif
|
||||
$ CC3/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
|
||||
$ ELSE
|
||||
$ IF COMPILEWITH_CC4 - FILE_NAME0 .NES. COMPILEWITH_CC4
|
||||
$ THEN
|
||||
$ write /symbol sys$output " \Using special rule (4)"
|
||||
$ if (.not. CC4_SHOWN)
|
||||
$ then
|
||||
$ CC4_SHOWN = 1
|
||||
$ x = " "+ CC4
|
||||
$ write /symbol sys$output x
|
||||
$ endif
|
||||
$ CC4/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
|
||||
$ ELSE
|
||||
$ IF COMPILEWITH_CC5 - FILE_NAME0 .NES. COMPILEWITH_CC5
|
||||
$ IF CC5_DIFFERENT .AND. -
|
||||
(COMPILEWITH_CC5 - FILE_NAME0 .NES. COMPILEWITH_CC5)
|
||||
$ THEN
|
||||
$ write sys$output " \Using special rule (5)"
|
||||
$ if (.not. CC5_SHOWN)
|
||||
$ then
|
||||
$ CC5_SHOWN = 1
|
||||
$ x = " "+ CC5
|
||||
$ write /symbol sys$output x
|
||||
$ endif
|
||||
$ CC5/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
|
||||
$ ELSE
|
||||
$ IF COMPILEWITH_CC6 - FILE_NAME0 .NES. COMPILEWITH_CC6
|
||||
$ THEN
|
||||
$ write sys$output " \Using special rule (6)"
|
||||
$ if (.not. CC6_SHOWN)
|
||||
$ then
|
||||
$ CC6_SHOWN = 1
|
||||
$ x = " "+ CC6
|
||||
$ write /symbol sys$output x
|
||||
$ endif
|
||||
$ CC6/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
|
||||
$ ELSE
|
||||
$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
|
||||
@ -586,38 +662,22 @@ $! SHOW SYMBOL APPLICATION*
|
||||
$!
|
||||
$! Tell the user what happens
|
||||
$!
|
||||
$ WRITE SYS$OUTPUT " ",APPLICATION,".exe"
|
||||
$ WRITE SYS$OUTPUT " ",APPLICATION,".exe"
|
||||
$!
|
||||
$! Link The Program.
|
||||
$!
|
||||
$ ON ERROR THEN GOTO NEXT_APPLICATION
|
||||
$!
|
||||
$! Check To See If We Are To Link With A Specific TCP/IP Library.
|
||||
$! Link With A TCP/IP Library.
|
||||
$!
|
||||
$ IF (TCPIP_LIB.NES."")
|
||||
$ THEN
|
||||
$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' -
|
||||
/EXE='EXE_DIR''APPLICATION'.EXE -
|
||||
'OBJ_DIR''APPLICATION_OBJECTS', -
|
||||
'CRYPTO_LIB'/LIBRARY -
|
||||
'TCPIP_LIB' -
|
||||
'ZLIB_LIB' -
|
||||
,'OPT_FILE' /OPTIONS
|
||||
$!
|
||||
$! Link With A TCP/IP Library.
|
||||
$!
|
||||
$ LINK/'DEBUGGER'/'TRACEBACK'/EXE='EXE_DIR''APPLICATION'.EXE -
|
||||
'OBJ_DIR''APPLICATION_OBJECTS', -
|
||||
'CRYPTO_LIB'/LIBRARY, -
|
||||
'TCPIP_LIB','OPT_FILE'/OPTION
|
||||
$!
|
||||
$! Else...
|
||||
$!
|
||||
$ ELSE
|
||||
$!
|
||||
$! Don't Link With A TCP/IP Library.
|
||||
$!
|
||||
$ LINK/'DEBUGGER'/'TRACEBACK'/EXE='EXE_DIR''APPLICATION'.EXE -
|
||||
'OBJ_DIR''APPLICATION_OBJECTS',-
|
||||
'CRYPTO_LIB'/LIBRARY, -
|
||||
'OPT_FILE'/OPTION
|
||||
$!
|
||||
$! End The TCP/IP Library Check.
|
||||
$!
|
||||
$ ENDIF
|
||||
$ GOTO NEXT_APPLICATION
|
||||
$ APPLICATION_DONE:
|
||||
$ ENDIF
|
||||
@ -656,7 +716,7 @@ $!
|
||||
$ CREATE 'OPT_FILE'
|
||||
$DECK
|
||||
!
|
||||
! Default System Options File To Link Agianst
|
||||
! Default System Options File To Link Against
|
||||
! The Sharable VAX C Runtime Library.
|
||||
!
|
||||
SYS$SHARE:VAXCRTL.EXE/SHARE
|
||||
@ -685,7 +745,7 @@ $!
|
||||
$ CREATE 'OPT_FILE'
|
||||
$DECK
|
||||
!
|
||||
! Default System Options File To Link Agianst
|
||||
! Default System Options File To Link Against
|
||||
! The Sharable C Runtime Library.
|
||||
!
|
||||
GNU_CC:[000000]GCCLIB/LIBRARY
|
||||
@ -720,7 +780,7 @@ $!
|
||||
$ CREATE 'OPT_FILE'
|
||||
$DECK
|
||||
!
|
||||
! Default System Options File To Link Agianst
|
||||
! Default System Options File To Link Against
|
||||
! The Sharable DEC C Runtime Library.
|
||||
!
|
||||
SYS$SHARE:DECC$SHR.EXE/SHARE
|
||||
@ -735,7 +795,7 @@ $!
|
||||
$ CREATE 'OPT_FILE'
|
||||
$DECK
|
||||
!
|
||||
! Default System Options File For non-VAX To Link Agianst
|
||||
! Default System Options File For non-VAX To Link Against
|
||||
! The Sharable C Runtime Library.
|
||||
!
|
||||
SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
|
||||
@ -803,8 +863,8 @@ $ WRITE SYS$OUTPUT " APPS : To Compile Just The [.xxx.EXE.CRYPTO]*.E
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$ WRITE SYS$OUTPUT " Where 'xxx' Stands For:"
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$ WRITE SYS$OUTPUT " ALPHA : Alpha Architecture."
|
||||
$ WRITE SYS$OUTPUT " IA64 : IA64 Architecture."
|
||||
$ WRITE SYS$OUTPUT " ALPHA[64]: Alpha Architecture."
|
||||
$ WRITE SYS$OUTPUT " IA64[64] : IA64 Architecture."
|
||||
$ WRITE SYS$OUTPUT " VAX : VAX Architecture."
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$!
|
||||
@ -825,15 +885,16 @@ $!
|
||||
$ IF (P2.EQS."NODEBUG")
|
||||
$ THEN
|
||||
$!
|
||||
$! P2 Is NODEBUG, So Compile Without The Debugger Information.
|
||||
$! P2 Is NODEBUG, So Compile Without The Debugger Information.
|
||||
$!
|
||||
$ DEBUGGER = "NODEBUG"
|
||||
$ TRACEBACK = "NOTRACEBACK"
|
||||
$ GCC_OPTIMIZE = "OPTIMIZE"
|
||||
$ CC_OPTIMIZE = "OPTIMIZE"
|
||||
$ MACRO_OPTIMIZE = "OPTIMIZE"
|
||||
$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
|
||||
$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
|
||||
$ DEBUGGER = "NODEBUG"
|
||||
$ LINKMAP = "NOMAP"
|
||||
$ TRACEBACK = "NOTRACEBACK"
|
||||
$ GCC_OPTIMIZE = "OPTIMIZE"
|
||||
$ CC_OPTIMIZE = "OPTIMIZE"
|
||||
$ MACRO_OPTIMIZE = "OPTIMIZE"
|
||||
$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
|
||||
$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
|
||||
$ ELSE
|
||||
$!
|
||||
$! Check To See If We Are To Compile With Debugger Information.
|
||||
@ -844,6 +905,7 @@ $!
|
||||
$! Compile With Debugger Information.
|
||||
$!
|
||||
$ DEBUGGER = "DEBUG"
|
||||
$ LINKMAP = "MAP"
|
||||
$ TRACEBACK = "TRACEBACK"
|
||||
$ GCC_OPTIMIZE = "NOOPTIMIZE"
|
||||
$ CC_OPTIMIZE = "NOOPTIMIZE"
|
||||
@ -852,7 +914,7 @@ $ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
|
||||
$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
|
||||
$ ELSE
|
||||
$!
|
||||
$! They Entered An Invalid Option..
|
||||
$! They Entered An Invalid Option.
|
||||
$!
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$ WRITE SYS$OUTPUT "The Option ",P2," Is Invalid. The Valid Options Are:"
|
||||
@ -907,6 +969,60 @@ $! End The P5 Check.
|
||||
$!
|
||||
$ ENDIF
|
||||
$!
|
||||
$! Check P7 (POINTER_SIZE).
|
||||
$!
|
||||
$ IF (P7 .NES. "") .AND. (ARCH .NES. "VAX")
|
||||
$ THEN
|
||||
$!
|
||||
$ IF (P7 .EQS. "32")
|
||||
$ THEN
|
||||
$ POINTER_SIZE = " /POINTER_SIZE=32"
|
||||
$ ELSE
|
||||
$ POINTER_SIZE = F$EDIT( P7, "COLLAPSE, UPCASE")
|
||||
$ IF ((POINTER_SIZE .EQS. "64") .OR. -
|
||||
(POINTER_SIZE .EQS. "64=") .OR. -
|
||||
(POINTER_SIZE .EQS. "64=ARGV"))
|
||||
$ THEN
|
||||
$ ARCHD = ARCH+ "_64"
|
||||
$ LIB32 = ""
|
||||
$ POINTER_SIZE = " /POINTER_SIZE=64"
|
||||
$ ELSE
|
||||
$!
|
||||
$! Tell The User Entered An Invalid Option.
|
||||
$!
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$ WRITE SYS$OUTPUT "The Option ", P7, -
|
||||
" Is Invalid. The Valid Options Are:"
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$ WRITE SYS$OUTPUT -
|
||||
" """" : Compile with default (short) pointers."
|
||||
$ WRITE SYS$OUTPUT -
|
||||
" 32 : Compile with 32-bit (short) pointers."
|
||||
$ WRITE SYS$OUTPUT -
|
||||
" 64 : Compile with 64-bit (long) pointers (auto ARGV)."
|
||||
$ WRITE SYS$OUTPUT -
|
||||
" 64= : Compile with 64-bit (long) pointers (no ARGV)."
|
||||
$ WRITE SYS$OUTPUT -
|
||||
" 64=ARGV : Compile with 64-bit (long) pointers (ARGV)."
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$!
|
||||
$! Time To EXIT.
|
||||
$!
|
||||
$ EXIT
|
||||
$!
|
||||
$ ENDIF
|
||||
$!
|
||||
$ ENDIF
|
||||
$!
|
||||
$! End The P7 (POINTER_SIZE) Check.
|
||||
$!
|
||||
$ ENDIF
|
||||
$!
|
||||
$! Set basic C compiler /INCLUDE directories.
|
||||
$!
|
||||
$ CC_INCLUDES = "SYS$DISK:[.''ARCHD'],SYS$DISK:[],SYS$DISK:[-],"+ -
|
||||
"SYS$DISK:[.ENGINE.VENDOR_DEFNS],SYS$DISK:[.EVP],SYS$DISK:[.ASN1]"
|
||||
$!
|
||||
$! Check To See If P3 Is Blank.
|
||||
$!
|
||||
$ IF (P3.EQS."")
|
||||
@ -1007,11 +1123,64 @@ $ CCDEFS = "TCPIP_TYPE_''P4',DSO_VMS"
|
||||
$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
|
||||
$ CCEXTRAFLAGS = ""
|
||||
$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
|
||||
$ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
|
||||
$ CCDISABLEWARNINGS = "" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
|
||||
$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
|
||||
CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
|
||||
$!
|
||||
$! Check To See If The User Entered A Valid Paramter.
|
||||
$! Check To See If We Have A ZLIB Option.
|
||||
$!
|
||||
$ ZLIB = P8
|
||||
$ IF (ZLIB .NES. "")
|
||||
$ THEN
|
||||
$!
|
||||
$! Check for expected ZLIB files.
|
||||
$!
|
||||
$ err = 0
|
||||
$ file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
|
||||
$ if (f$search( file1) .eqs. "")
|
||||
$ then
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
|
||||
$ WRITE SYS$OUTPUT " Can't find header: ''file1'"
|
||||
$ err = 1
|
||||
$ endif
|
||||
$ file1 = f$parse( "A.;", ZLIB)- "A.;"
|
||||
$!
|
||||
$ file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
|
||||
$ if (f$search( file2) .eqs. "")
|
||||
$ then
|
||||
$ if (err .eq. 0)
|
||||
$ then
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
|
||||
$ endif
|
||||
$ WRITE SYS$OUTPUT " Can't find library: ''file2'"
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$ err = err+ 2
|
||||
$ endif
|
||||
$ if (err .eq. 1)
|
||||
$ then
|
||||
$ WRITE SYS$OUTPUT ""
|
||||
$ endif
|
||||
$!
|
||||
$ if (err .ne. 0)
|
||||
$ then
|
||||
$ EXIT
|
||||
$ endif
|
||||
$!
|
||||
$ CCDEFS = """ZLIB=1"", "+ CCDEFS
|
||||
$ CC_INCLUDES = CC_INCLUDES+ ", "+ file1
|
||||
$ ZLIB_LIB = ", ''file2' /library"
|
||||
$!
|
||||
$! Print info
|
||||
$!
|
||||
$ WRITE SYS$OUTPUT "ZLIB library spec: ", file2
|
||||
$!
|
||||
$! End The ZLIB Check.
|
||||
$!
|
||||
$ ENDIF
|
||||
$!
|
||||
$! Check To See If The User Entered A Valid Parameter.
|
||||
$!
|
||||
$ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC")
|
||||
$ THEN
|
||||
@ -1034,14 +1203,14 @@ $!
|
||||
$ CC = "CC"
|
||||
$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
|
||||
THEN CC = "CC/DECC"
|
||||
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
|
||||
"/NOLIST/PREFIX=ALL" + -
|
||||
"/INCLUDE=(SYS$DISK:[],SYS$DISK:[._''ARCH'],SYS$DISK:[-],SYS$DISK:[.ENGINE.VENDOR_DEFNS],SYS$DISK:[.EVP],SYS$DISK:[.ASN1])" + -
|
||||
CCEXTRAFLAGS
|
||||
$ CC = CC + " /''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ -
|
||||
"''POINTER_SIZE' /NOLIST /PREFIX=ALL" + -
|
||||
" /INCLUDE=(''CC_INCLUDES')"+ -
|
||||
CCEXTRAFLAGS
|
||||
$!
|
||||
$! Define The Linker Options File Name.
|
||||
$!
|
||||
$ OPT_FILE = "''EXE_DIR'VAX_DECC_OPTIONS.OPT"
|
||||
$ OPT_FILE = "VAX_DECC_OPTIONS.OPT"
|
||||
$!
|
||||
$! End DECC Check.
|
||||
$!
|
||||
@ -1070,7 +1239,7 @@ $ EXIT
|
||||
$ ENDIF
|
||||
$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
|
||||
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
|
||||
"/INCLUDE=(SYS$DISK:[],SYS$DISK:[._''ARCH'],SYS$DISK:[-],SYS$DISK:[.ENGINE.VENDOR_DEFNS],SYS$DISK:[.EVP],SYS$DISK:[.ASN1])" + -
|
||||
"/INCLUDE=(''CC_INCLUDES')"+ -
|
||||
CCEXTRAFLAGS
|
||||
$ CCDEFS = """VAXC""," + CCDEFS
|
||||
$!
|
||||
@ -1080,7 +1249,7 @@ $ DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
|
||||
$!
|
||||
$! Define The Linker Options File Name.
|
||||
$!
|
||||
$ OPT_FILE = "''EXE_DIR'VAX_VAXC_OPTIONS.OPT"
|
||||
$ OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
|
||||
$!
|
||||
$! End VAXC Check
|
||||
$!
|
||||
@ -1102,12 +1271,12 @@ $!
|
||||
$! Use GNU C...
|
||||
$!
|
||||
$ CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
|
||||
"/INCLUDE=(SYS$DISK:[],SYS$DISK:[._''ARCH'],SYS$DISK:[-],SYS$DISK:[.ENGINE.VENDOR_DEFNS],SYS$DISK:[.EVP],SYS$DISK:[.ASN1])" + -
|
||||
"/INCLUDE=(''CC_INCLUDES')"+ -
|
||||
CCEXTRAFLAGS
|
||||
$!
|
||||
$! Define The Linker Options File Name.
|
||||
$!
|
||||
$ OPT_FILE = "''EXE_DIR'VAX_GNUC_OPTIONS.OPT"
|
||||
$ OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
|
||||
$!
|
||||
$! End The GNU C Check.
|
||||
$!
|
||||
@ -1128,22 +1297,24 @@ $ CC6DISABLEWARNINGS = "MIXLINKAGE"
|
||||
$ ELSE
|
||||
$ CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID"
|
||||
$ CC6DISABLEWARNINGS = CCDISABLEWARNINGS + ",MIXLINKAGE"
|
||||
$ CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
|
||||
$ CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
|
||||
$ ENDIF
|
||||
$ CC4DISABLEWARNINGS = "/WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
|
||||
$ CC6DISABLEWARNINGS = "/WARNING=(DISABLE=(" + CC6DISABLEWARNINGS + "))"
|
||||
$ CC4DISABLEWARNINGS = " /WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
|
||||
$ CC6DISABLEWARNINGS = " /WARNING=(DISABLE=(" + CC6DISABLEWARNINGS + "))"
|
||||
$ ELSE
|
||||
$ CCDISABLEWARNINGS = ""
|
||||
$ CC4DISABLEWARNINGS = ""
|
||||
$ CC6DISABLEWARNINGS = ""
|
||||
$ ENDIF
|
||||
$ CC3 = CC + "/DEFINE=(" + CCDEFS + ISSEVEN + ")" + CCDISABLEWARNINGS
|
||||
$ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
|
||||
$ CC3 = CC + " /DEFINE=(" + CCDEFS + ISSEVEN + ")" + CCDISABLEWARNINGS
|
||||
$ CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
|
||||
$ IF ARCH .EQS. "VAX" .AND. COMPILER .EQS. "DECC" .AND. P2 .NES. "DEBUG"
|
||||
$ THEN
|
||||
$ CC5 = CC + "/OPTIMIZE=NODISJOINT"
|
||||
$ CC5 = CC + " /OPTIMIZE=NODISJOINT"
|
||||
$ CC5_DIFFERENT = 1
|
||||
$ ELSE
|
||||
$ CC5 = CC + "/NOOPTIMIZE"
|
||||
$ CC5 = CC
|
||||
$ CC5_DIFFERENT = 0
|
||||
$ ENDIF
|
||||
$ CC4 = CC - CCDISABLEWARNINGS + CC4DISABLEWARNINGS
|
||||
$ CC6 = CC - CCDISABLEWARNINGS + CC6DISABLEWARNINGS
|
||||
@ -1196,7 +1367,7 @@ $ THEN
|
||||
$!
|
||||
$! Set the library to use SOCKETSHR
|
||||
$!
|
||||
$ TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT"
|
||||
$ TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
|
||||
$!
|
||||
$! Done with SOCKETSHR
|
||||
$!
|
||||
@ -1222,13 +1393,13 @@ $ THEN
|
||||
$!
|
||||
$! Set the library to use UCX.
|
||||
$!
|
||||
$ TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT/OPT"
|
||||
$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
|
||||
$ IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
|
||||
$ THEN
|
||||
$ TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT"
|
||||
$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
|
||||
$ ELSE
|
||||
$ IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
|
||||
TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT/OPT"
|
||||
TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
|
||||
$ ENDIF
|
||||
$!
|
||||
$! Done with UCX
|
||||
@ -1242,7 +1413,7 @@ $ THEN
|
||||
$!
|
||||
$! Set the library to use TCPIP (post UCX).
|
||||
$!
|
||||
$ TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT"
|
||||
$ TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
|
||||
$!
|
||||
$! Done with TCPIP
|
||||
$!
|
||||
@ -1263,7 +1434,7 @@ $ ENDIF
|
||||
$!
|
||||
$! Print info
|
||||
$!
|
||||
$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB
|
||||
$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
|
||||
$!
|
||||
$! Else The User Entered An Invalid Argument.
|
||||
$!
|
||||
|
@ -148,15 +148,6 @@ static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa)
|
||||
|
||||
s=BN_new();
|
||||
if (s == NULL) goto err;
|
||||
|
||||
/* reject a excessive digest length (currently at most
|
||||
* dsa-with-SHA256 is supported) */
|
||||
if (dlen > SHA256_DIGEST_LENGTH)
|
||||
{
|
||||
reason=DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE;
|
||||
goto err;
|
||||
}
|
||||
|
||||
ctx=BN_CTX_new();
|
||||
if (ctx == NULL) goto err;
|
||||
|
||||
@ -185,7 +176,7 @@ static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa)
|
||||
if (!BN_mod_mul(&xr,dsa->priv_key,r,dsa->q,ctx)) goto err;/* s = xr */
|
||||
if (!BN_add(s, &xr, &m)) goto err; /* s = m + xr */
|
||||
if (BN_cmp(s,dsa->q) > 0)
|
||||
BN_sub(s,s,dsa->q);
|
||||
if (!BN_sub(s,s,dsa->q)) goto err;
|
||||
if (!BN_mod_mul(s,s,kinv,dsa->q,ctx)) goto err;
|
||||
|
||||
ret=DSA_SIG_new();
|
||||
@ -325,15 +316,6 @@ static int dsa_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig,
|
||||
DSAerr(DSA_F_DSA_DO_VERIFY,DSA_R_MODULUS_TOO_LARGE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* reject a excessive digest length (currently at most
|
||||
* dsa-with-SHA256 is supported) */
|
||||
if (dgst_len > SHA256_DIGEST_LENGTH)
|
||||
{
|
||||
DSAerr(DSA_F_DSA_DO_VERIFY,DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
BN_init(&u1);
|
||||
BN_init(&u2);
|
||||
BN_init(&t1);
|
||||
|
@ -187,6 +187,7 @@ static int pkey_dsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
|
||||
case EVP_PKEY_CTRL_MD:
|
||||
if (EVP_MD_type((const EVP_MD *)p2) != NID_sha1 &&
|
||||
EVP_MD_type((const EVP_MD *)p2) != NID_dsa &&
|
||||
EVP_MD_type((const EVP_MD *)p2) != NID_dsaWithSHA &&
|
||||
EVP_MD_type((const EVP_MD *)p2) != NID_sha224 &&
|
||||
EVP_MD_type((const EVP_MD *)p2) != NID_sha256)
|
||||
{
|
||||
|
@ -85,6 +85,7 @@ DSO_METHOD *DSO_METHOD_dlfcn(void)
|
||||
# define HAVE_DLINFO 1
|
||||
# if defined(_AIX) || defined(__CYGWIN__) || \
|
||||
defined(__SCO_VERSION__) || defined(_SCO_ELF) || \
|
||||
(defined(__osf__) && !defined(RTLD_NEXT)) || \
|
||||
(defined(__OpenBSD__) && !defined(RTLD_SELF))
|
||||
# undef HAVE_DLINFO
|
||||
# endif
|
||||
|
@ -68,8 +68,20 @@
|
||||
#include <stsdef.h>
|
||||
#include <descrip.h>
|
||||
#include <starlet.h>
|
||||
#include "vms_rms.h"
|
||||
#endif
|
||||
|
||||
/* Some compiler options may mask the declaration of "_malloc32". */
|
||||
#if __INITIAL_POINTER_SIZE && defined _ANSI_C_SOURCE
|
||||
# if __INITIAL_POINTER_SIZE == 64
|
||||
# pragma pointer_size save
|
||||
# pragma pointer_size 32
|
||||
void * _malloc32 (__size_t);
|
||||
# pragma pointer_size restore
|
||||
# endif /* __INITIAL_POINTER_SIZE == 64 */
|
||||
#endif /* __INITIAL_POINTER_SIZE && defined _ANSI_C_SOURCE */
|
||||
|
||||
|
||||
#ifndef OPENSSL_SYS_VMS
|
||||
DSO_METHOD *DSO_METHOD_vms(void)
|
||||
{
|
||||
@ -121,14 +133,13 @@ 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];
|
||||
char filename[ NAMX_MAXRSS+ 1];
|
||||
/* This contains whatever is not in filename, if needed.
|
||||
* Normally not defined. */
|
||||
struct dsc$descriptor_s imagename_dsc;
|
||||
char imagename[FILENAME_MAX+1];
|
||||
char imagename[ NAMX_MAXRSS+ 1];
|
||||
} DSO_VMS_INTERNAL;
|
||||
|
||||
|
||||
DSO_METHOD *DSO_METHOD_vms(void)
|
||||
{
|
||||
return(&dso_meth_vms);
|
||||
@ -139,7 +150,22 @@ static int vms_load(DSO *dso)
|
||||
void *ptr = NULL;
|
||||
/* See applicable comments in dso_dl.c */
|
||||
char *filename = DSO_convert_filename(dso, NULL);
|
||||
DSO_VMS_INTERNAL *p;
|
||||
|
||||
/* Ensure 32-bit pointer for "p", and appropriate malloc() function. */
|
||||
#if __INITIAL_POINTER_SIZE == 64
|
||||
# define DSO_MALLOC _malloc32
|
||||
# pragma pointer_size save
|
||||
# pragma pointer_size 32
|
||||
#else /* __INITIAL_POINTER_SIZE == 64 */
|
||||
# define DSO_MALLOC OPENSSL_malloc
|
||||
#endif /* __INITIAL_POINTER_SIZE == 64 [else] */
|
||||
|
||||
DSO_VMS_INTERNAL *p = NULL;
|
||||
|
||||
#if __INITIAL_POINTER_SIZE == 64
|
||||
# pragma pointer_size restore
|
||||
#endif /* __INITIAL_POINTER_SIZE == 64 */
|
||||
|
||||
const char *sp1, *sp2; /* Search result */
|
||||
|
||||
if(filename == NULL)
|
||||
@ -192,7 +218,7 @@ static int vms_load(DSO *dso)
|
||||
goto err;
|
||||
}
|
||||
|
||||
p = (DSO_VMS_INTERNAL *)OPENSSL_malloc(sizeof(DSO_VMS_INTERNAL));
|
||||
p = DSO_MALLOC(sizeof(DSO_VMS_INTERNAL));
|
||||
if(p == NULL)
|
||||
{
|
||||
DSOerr(DSO_F_VMS_LOAD,ERR_R_MALLOC_FAILURE);
|
||||
@ -290,18 +316,38 @@ void vms_bind_sym(DSO *dso, const char *symname, void **sym)
|
||||
int flags = 0;
|
||||
#endif
|
||||
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 */
|
||||
/* Arrange 32-bit pointer to (copied) string storage, if needed. */
|
||||
#if __INITIAL_POINTER_SIZE == 64
|
||||
# define SYMNAME symname_32p
|
||||
# pragma pointer_size save
|
||||
# pragma pointer_size 32
|
||||
char *symname_32p;
|
||||
# pragma pointer_size restore
|
||||
char symname_32[ NAMX_MAXRSS+ 1];
|
||||
#else /* __INITIAL_POINTER_SIZE == 64 */
|
||||
# define SYMNAME ((char *) symname)
|
||||
#endif /* __INITIAL_POINTER_SIZE == 64 [else] */
|
||||
|
||||
*sym = NULL;
|
||||
|
||||
if((dso == NULL) || (symname == NULL))
|
||||
{
|
||||
DSOerr(DSO_F_VMS_BIND_SYM,ERR_R_PASSED_NULL_PARAMETER);
|
||||
return;
|
||||
}
|
||||
|
||||
#if __INITIAL_POINTER_SIZE == 64
|
||||
/* Copy the symbol name to storage with a 32-bit pointer. */
|
||||
symname_32p = symname_32;
|
||||
strcpy( symname_32p, symname);
|
||||
#endif /* __INITIAL_POINTER_SIZE == 64 [else] */
|
||||
|
||||
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 = SYMNAME;
|
||||
|
||||
if(sk_void_num(dso->meth_data) < 1)
|
||||
{
|
||||
DSOerr(DSO_F_VMS_BIND_SYM,DSO_R_STACK_ERROR);
|
||||
@ -372,64 +418,60 @@ static DSO_FUNC_TYPE vms_bind_func(DSO *dso, const char *symname)
|
||||
return sym;
|
||||
}
|
||||
|
||||
|
||||
static char *vms_merger(DSO *dso, const char *filespec1, const char *filespec2)
|
||||
{
|
||||
int status;
|
||||
int filespec1len, filespec2len;
|
||||
struct FAB fab;
|
||||
#ifdef NAML$C_MAXRSS
|
||||
struct NAML nam;
|
||||
char esa[NAML$C_MAXRSS];
|
||||
#else
|
||||
struct NAM nam;
|
||||
char esa[NAM$C_MAXRSS];
|
||||
#endif
|
||||
struct NAMX_STRUCT nam;
|
||||
char esa[ NAMX_MAXRSS+ 1];
|
||||
char *merged;
|
||||
|
||||
/* Arrange 32-bit pointer to (copied) string storage, if needed. */
|
||||
#if __INITIAL_POINTER_SIZE == 64
|
||||
# define FILESPEC1 filespec1_32p;
|
||||
# define FILESPEC2 filespec2_32p;
|
||||
# pragma pointer_size save
|
||||
# pragma pointer_size 32
|
||||
char *filespec1_32p;
|
||||
char *filespec2_32p;
|
||||
# pragma pointer_size restore
|
||||
char filespec1_32[ NAMX_MAXRSS+ 1];
|
||||
char filespec2_32[ NAMX_MAXRSS+ 1];
|
||||
#else /* __INITIAL_POINTER_SIZE == 64 */
|
||||
# define FILESPEC1 ((char *) filespec1)
|
||||
# define FILESPEC2 ((char *) filespec2)
|
||||
#endif /* __INITIAL_POINTER_SIZE == 64 [else] */
|
||||
|
||||
if (!filespec1) filespec1 = "";
|
||||
if (!filespec2) filespec2 = "";
|
||||
filespec1len = strlen(filespec1);
|
||||
filespec2len = strlen(filespec2);
|
||||
|
||||
fab = cc$rms_fab;
|
||||
#ifdef NAML$C_MAXRSS
|
||||
nam = cc$rms_naml;
|
||||
#else
|
||||
nam = cc$rms_nam;
|
||||
#endif
|
||||
#if __INITIAL_POINTER_SIZE == 64
|
||||
/* Copy the file names to storage with a 32-bit pointer. */
|
||||
filespec1_32p = filespec1_32;
|
||||
filespec2_32p = filespec2_32;
|
||||
strcpy( filespec1_32p, filespec1);
|
||||
strcpy( filespec2_32p, filespec2);
|
||||
#endif /* __INITIAL_POINTER_SIZE == 64 [else] */
|
||||
|
||||
fab.fab$l_fna = (char *)filespec1;
|
||||
fab.fab$b_fns = filespec1len;
|
||||
fab.fab$l_dna = (char *)filespec2;
|
||||
fab.fab$b_dns = filespec2len;
|
||||
#ifdef NAML$C_MAXRSS
|
||||
if (filespec1len > NAM$C_MAXRSS)
|
||||
{
|
||||
fab.fab$l_fna = 0;
|
||||
fab.fab$b_fns = 0;
|
||||
nam.naml$l_long_filename = (char *)filespec1;
|
||||
nam.naml$l_long_filename_size = filespec1len;
|
||||
}
|
||||
if (filespec2len > NAM$C_MAXRSS)
|
||||
{
|
||||
fab.fab$l_dna = 0;
|
||||
fab.fab$b_dns = 0;
|
||||
nam.naml$l_long_defname = (char *)filespec2;
|
||||
nam.naml$l_long_defname_size = filespec2len;
|
||||
}
|
||||
nam.naml$l_esa = esa;
|
||||
nam.naml$b_ess = NAM$C_MAXRSS;
|
||||
nam.naml$l_long_expand = esa;
|
||||
nam.naml$l_long_expand_alloc = sizeof(esa);
|
||||
nam.naml$b_nop = NAM$M_SYNCHK | NAM$M_PWD;
|
||||
nam.naml$v_no_short_upcase = 1;
|
||||
fab.fab$l_naml = &nam;
|
||||
#else
|
||||
nam.nam$l_esa = esa;
|
||||
nam.nam$b_ess = NAM$C_MAXRSS;
|
||||
nam.nam$b_nop = NAM$M_SYNCHK | NAM$M_PWD;
|
||||
fab.fab$l_nam = &nam;
|
||||
#endif
|
||||
fab = cc$rms_fab;
|
||||
nam = CC_RMS_NAMX;
|
||||
|
||||
FAB_OR_NAML( fab, nam).FAB_OR_NAML_FNA = FILESPEC1;
|
||||
FAB_OR_NAML( fab, nam).FAB_OR_NAML_FNS = filespec1len;
|
||||
FAB_OR_NAML( fab, nam).FAB_OR_NAML_DNA = FILESPEC2;
|
||||
FAB_OR_NAML( fab, nam).FAB_OR_NAML_DNS = filespec2len;
|
||||
NAMX_DNA_FNA_SET( fab)
|
||||
|
||||
nam.NAMX_ESA = esa;
|
||||
nam.NAMX_ESS = NAMX_MAXRSS;
|
||||
nam.NAMX_NOP = NAM$M_SYNCHK | NAM$M_PWD;
|
||||
SET_NAMX_NO_SHORT_UPCASE( nam);
|
||||
|
||||
fab.FAB_NAMX = &nam;
|
||||
|
||||
status = sys$parse(&fab, 0, 0);
|
||||
|
||||
@ -460,33 +502,12 @@ static char *vms_merger(DSO *dso, const char *filespec1, const char *filespec2)
|
||||
}
|
||||
return(NULL);
|
||||
}
|
||||
#ifdef NAML$C_MAXRSS
|
||||
if (nam.naml$l_long_expand_size)
|
||||
{
|
||||
merged = OPENSSL_malloc(nam.naml$l_long_expand_size + 1);
|
||||
if(!merged)
|
||||
goto malloc_err;
|
||||
strncpy(merged, nam.naml$l_long_expand,
|
||||
nam.naml$l_long_expand_size);
|
||||
merged[nam.naml$l_long_expand_size] = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
merged = OPENSSL_malloc(nam.naml$b_esl + 1);
|
||||
if(!merged)
|
||||
goto malloc_err;
|
||||
strncpy(merged, nam.naml$l_esa,
|
||||
nam.naml$b_esl);
|
||||
merged[nam.naml$b_esl] = '\0';
|
||||
}
|
||||
#else
|
||||
merged = OPENSSL_malloc(nam.nam$b_esl + 1);
|
||||
|
||||
merged = OPENSSL_malloc( nam.NAMX_ESL+ 1);
|
||||
if(!merged)
|
||||
goto malloc_err;
|
||||
strncpy(merged, nam.nam$l_esa,
|
||||
nam.nam$b_esl);
|
||||
merged[nam.nam$b_esl] = '\0';
|
||||
#endif
|
||||
strncpy( merged, nam.NAMX_ESA, nam.NAMX_ESL);
|
||||
merged[ nam.NAMX_ESL] = '\0';
|
||||
return(merged);
|
||||
malloc_err:
|
||||
DSOerr(DSO_F_VMS_MERGER,
|
||||
|
@ -319,6 +319,7 @@ int ec_GF2m_simple_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar,
|
||||
int ret = 0;
|
||||
size_t i;
|
||||
EC_POINT *p=NULL;
|
||||
EC_POINT *acc = NULL;
|
||||
|
||||
if (ctx == NULL)
|
||||
{
|
||||
@ -338,15 +339,16 @@ int ec_GF2m_simple_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar,
|
||||
}
|
||||
|
||||
if ((p = EC_POINT_new(group)) == NULL) goto err;
|
||||
if ((acc = EC_POINT_new(group)) == NULL) goto err;
|
||||
|
||||
if (!EC_POINT_set_to_infinity(group, r)) goto err;
|
||||
if (!EC_POINT_set_to_infinity(group, acc)) goto err;
|
||||
|
||||
if (scalar)
|
||||
{
|
||||
if (!ec_GF2m_montgomery_point_multiply(group, p, scalar, group->generator, ctx)) goto err;
|
||||
if (BN_is_negative(scalar))
|
||||
if (!group->meth->invert(group, p, ctx)) goto err;
|
||||
if (!group->meth->add(group, r, r, p, ctx)) goto err;
|
||||
if (!group->meth->add(group, acc, acc, p, ctx)) goto err;
|
||||
}
|
||||
|
||||
for (i = 0; i < num; i++)
|
||||
@ -354,13 +356,16 @@ int ec_GF2m_simple_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar,
|
||||
if (!ec_GF2m_montgomery_point_multiply(group, p, scalars[i], points[i], ctx)) goto err;
|
||||
if (BN_is_negative(scalars[i]))
|
||||
if (!group->meth->invert(group, p, ctx)) goto err;
|
||||
if (!group->meth->add(group, r, r, p, ctx)) goto err;
|
||||
if (!group->meth->add(group, acc, acc, p, ctx)) goto err;
|
||||
}
|
||||
|
||||
if (!EC_POINT_copy(r, acc)) goto err;
|
||||
|
||||
ret = 1;
|
||||
|
||||
err:
|
||||
if (p) EC_POINT_free(p);
|
||||
if (acc) EC_POINT_free(acc);
|
||||
if (new_ctx != NULL)
|
||||
BN_CTX_free(new_ctx);
|
||||
return ret;
|
||||
|
@ -887,7 +887,7 @@ int ec_GF2m_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_
|
||||
field_sqr = group->meth->field_sqr;
|
||||
|
||||
/* only support affine coordinates */
|
||||
if (!point->Z_is_one) goto err;
|
||||
if (!point->Z_is_one) return -1;
|
||||
|
||||
if (ctx == NULL)
|
||||
{
|
||||
@ -938,6 +938,9 @@ int ec_GF2m_simple_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT
|
||||
return EC_POINT_is_at_infinity(group, b) ? 0 : 1;
|
||||
}
|
||||
|
||||
if (EC_POINT_is_at_infinity(group, b))
|
||||
return 1;
|
||||
|
||||
if (a->Z_is_one && b->Z_is_one)
|
||||
{
|
||||
return ((BN_cmp(&a->X, &b->X) == 0) && BN_cmp(&a->Y, &b->Y) == 0) ? 0 : 1;
|
||||
|
@ -305,6 +305,12 @@ int EC_KEY_check_key(const EC_KEY *eckey)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (EC_POINT_is_at_infinity(eckey->group, eckey->pub_key))
|
||||
{
|
||||
ECerr(EC_F_EC_KEY_CHECK_KEY, EC_R_POINT_AT_INFINITY);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if ((ctx = BN_CTX_new()) == NULL)
|
||||
goto err;
|
||||
if ((point = EC_POINT_new(eckey->group)) == NULL)
|
||||
|
@ -169,11 +169,13 @@ static void ec_pre_comp_clear_free(void *pre_)
|
||||
EC_POINT **p;
|
||||
|
||||
for (p = pre->points; *p != NULL; p++)
|
||||
{
|
||||
EC_POINT_clear_free(*p);
|
||||
OPENSSL_cleanse(pre->points, sizeof pre->points);
|
||||
OPENSSL_cleanse(p, sizeof *p);
|
||||
}
|
||||
OPENSSL_free(pre->points);
|
||||
}
|
||||
OPENSSL_cleanse(pre, sizeof pre);
|
||||
OPENSSL_cleanse(pre, sizeof *pre);
|
||||
OPENSSL_free(pre);
|
||||
}
|
||||
|
||||
|
@ -1407,6 +1407,9 @@ int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *
|
||||
return EC_POINT_is_at_infinity(group, b) ? 0 : 1;
|
||||
}
|
||||
|
||||
if (EC_POINT_is_at_infinity(group, b))
|
||||
return 1;
|
||||
|
||||
if (a->Z_is_one && b->Z_is_one)
|
||||
{
|
||||
return ((BN_cmp(&a->X, &b->X) == 0) && BN_cmp(&a->Y, &b->Y) == 0) ? 0 : 1;
|
||||
|
@ -168,8 +168,7 @@ int fbytes(unsigned char *buf, int num)
|
||||
return 0;
|
||||
}
|
||||
fbytes_counter ++;
|
||||
ret = BN_bn2bin(tmp, buf);
|
||||
if (ret == 0 || ret != num)
|
||||
if (num != BN_num_bytes(tmp) || !BN_bn2bin(tmp, buf))
|
||||
ret = 0;
|
||||
else
|
||||
ret = 1;
|
||||
@ -287,9 +286,12 @@ int test_builtin(BIO *out)
|
||||
size_t crv_len = 0, n = 0;
|
||||
EC_KEY *eckey = NULL, *wrong_eckey = NULL;
|
||||
EC_GROUP *group;
|
||||
ECDSA_SIG *ecdsa_sig = NULL;
|
||||
unsigned char digest[20], wrong_digest[20];
|
||||
unsigned char *signature = NULL;
|
||||
unsigned int sig_len;
|
||||
unsigned char *sig_ptr;
|
||||
unsigned char *raw_buf = NULL;
|
||||
unsigned int sig_len, degree, r_len, s_len, bn_len, buf_len;
|
||||
int nid, ret = 0;
|
||||
|
||||
/* fill digest values with some random data */
|
||||
@ -339,7 +341,8 @@ int test_builtin(BIO *out)
|
||||
if (EC_KEY_set_group(eckey, group) == 0)
|
||||
goto builtin_err;
|
||||
EC_GROUP_free(group);
|
||||
if (EC_GROUP_get_degree(EC_KEY_get0_group(eckey)) < 160)
|
||||
degree = EC_GROUP_get_degree(EC_KEY_get0_group(eckey));
|
||||
if (degree < 160)
|
||||
/* drop the curve */
|
||||
{
|
||||
EC_KEY_free(eckey);
|
||||
@ -415,26 +418,89 @@ int test_builtin(BIO *out)
|
||||
}
|
||||
BIO_printf(out, ".");
|
||||
(void)BIO_flush(out);
|
||||
/* modify a single byte of the signature */
|
||||
offset = signature[10] % sig_len;
|
||||
dirt = signature[11];
|
||||
signature[offset] ^= dirt ? dirt : 1;
|
||||
/* wrong length */
|
||||
if (ECDSA_verify(0, digest, 20, signature, sig_len - 1,
|
||||
eckey) == 1)
|
||||
{
|
||||
BIO_printf(out, " failed\n");
|
||||
goto builtin_err;
|
||||
}
|
||||
BIO_printf(out, ".");
|
||||
(void)BIO_flush(out);
|
||||
|
||||
/* Modify a single byte of the signature: to ensure we don't
|
||||
* garble the ASN1 structure, we read the raw signature and
|
||||
* modify a byte in one of the bignums directly. */
|
||||
sig_ptr = signature;
|
||||
if ((ecdsa_sig = d2i_ECDSA_SIG(NULL, &sig_ptr, sig_len)) == NULL)
|
||||
{
|
||||
BIO_printf(out, " failed\n");
|
||||
goto builtin_err;
|
||||
}
|
||||
|
||||
/* Store the two BIGNUMs in raw_buf. */
|
||||
r_len = BN_num_bytes(ecdsa_sig->r);
|
||||
s_len = BN_num_bytes(ecdsa_sig->s);
|
||||
bn_len = (degree + 7) / 8;
|
||||
if ((r_len > bn_len) || (s_len > bn_len))
|
||||
{
|
||||
BIO_printf(out, " failed\n");
|
||||
goto builtin_err;
|
||||
}
|
||||
buf_len = 2 * bn_len;
|
||||
if ((raw_buf = OPENSSL_malloc(buf_len)) == NULL)
|
||||
goto builtin_err;
|
||||
/* Pad the bignums with leading zeroes. */
|
||||
memset(raw_buf, 0, buf_len);
|
||||
BN_bn2bin(ecdsa_sig->r, raw_buf + bn_len - r_len);
|
||||
BN_bn2bin(ecdsa_sig->s, raw_buf + buf_len - s_len);
|
||||
|
||||
/* Modify a single byte in the buffer. */
|
||||
offset = raw_buf[10] % buf_len;
|
||||
dirt = raw_buf[11] ? raw_buf[11] : 1;
|
||||
raw_buf[offset] ^= dirt;
|
||||
/* Now read the BIGNUMs back in from raw_buf. */
|
||||
if ((BN_bin2bn(raw_buf, bn_len, ecdsa_sig->r) == NULL) ||
|
||||
(BN_bin2bn(raw_buf + bn_len, bn_len, ecdsa_sig->s) == NULL))
|
||||
goto builtin_err;
|
||||
|
||||
sig_ptr = signature;
|
||||
sig_len = i2d_ECDSA_SIG(ecdsa_sig, &sig_ptr);
|
||||
if (ECDSA_verify(0, digest, 20, signature, sig_len, eckey) == 1)
|
||||
{
|
||||
BIO_printf(out, " failed\n");
|
||||
goto builtin_err;
|
||||
}
|
||||
/* Sanity check: undo the modification and verify signature. */
|
||||
raw_buf[offset] ^= dirt;
|
||||
if ((BN_bin2bn(raw_buf, bn_len, ecdsa_sig->r) == NULL) ||
|
||||
(BN_bin2bn(raw_buf + bn_len, bn_len, ecdsa_sig->s) == NULL))
|
||||
goto builtin_err;
|
||||
|
||||
sig_ptr = signature;
|
||||
sig_len = i2d_ECDSA_SIG(ecdsa_sig, &sig_ptr);
|
||||
if (ECDSA_verify(0, digest, 20, signature, sig_len, eckey) != 1)
|
||||
{
|
||||
BIO_printf(out, " failed\n");
|
||||
goto builtin_err;
|
||||
}
|
||||
BIO_printf(out, ".");
|
||||
(void)BIO_flush(out);
|
||||
|
||||
BIO_printf(out, " ok\n");
|
||||
/* cleanup */
|
||||
/* clean bogus errors */
|
||||
ERR_clear_error();
|
||||
OPENSSL_free(signature);
|
||||
signature = NULL;
|
||||
EC_KEY_free(eckey);
|
||||
eckey = NULL;
|
||||
EC_KEY_free(wrong_eckey);
|
||||
wrong_eckey = NULL;
|
||||
ECDSA_SIG_free(ecdsa_sig);
|
||||
ecdsa_sig = NULL;
|
||||
OPENSSL_free(raw_buf);
|
||||
raw_buf = NULL;
|
||||
}
|
||||
|
||||
ret = 1;
|
||||
@ -443,8 +509,12 @@ builtin_err:
|
||||
EC_KEY_free(eckey);
|
||||
if (wrong_eckey)
|
||||
EC_KEY_free(wrong_eckey);
|
||||
if (ecdsa_sig)
|
||||
ECDSA_SIG_free(ecdsa_sig);
|
||||
if (signature)
|
||||
OPENSSL_free(signature);
|
||||
if (raw_buf)
|
||||
OPENSSL_free(raw_buf);
|
||||
if (curves)
|
||||
OPENSSL_free(curves);
|
||||
|
||||
|
@ -144,6 +144,14 @@ static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp,
|
||||
}
|
||||
while (BN_is_zero(k));
|
||||
|
||||
/* We do not want timing information to leak the length of k,
|
||||
* so we compute G*k using an equivalent scalar of fixed
|
||||
* bit-length. */
|
||||
|
||||
if (!BN_add(k, k, order)) goto err;
|
||||
if (BN_num_bits(k) <= BN_num_bits(order))
|
||||
if (!BN_add(k, k, order)) goto err;
|
||||
|
||||
/* compute r the x-coordinate of generator * k */
|
||||
if (!EC_POINT_mul(group, tmp_point, k, NULL, NULL, ctx))
|
||||
{
|
||||
|
@ -677,6 +677,7 @@ typedef struct st_dynamic_fns {
|
||||
* can be fully instantiated with IMPLEMENT_DYNAMIC_CHECK_FN(). */
|
||||
typedef unsigned long (*dynamic_v_check_fn)(unsigned long ossl_version);
|
||||
#define IMPLEMENT_DYNAMIC_CHECK_FN() \
|
||||
OPENSSL_EXPORT unsigned long v_check(unsigned long v); \
|
||||
OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \
|
||||
if(v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \
|
||||
return 0; }
|
||||
@ -699,6 +700,8 @@ typedef unsigned long (*dynamic_v_check_fn)(unsigned long ossl_version);
|
||||
typedef int (*dynamic_bind_engine)(ENGINE *e, const char *id,
|
||||
const dynamic_fns *fns);
|
||||
#define IMPLEMENT_DYNAMIC_BIND_FN(fn) \
|
||||
OPENSSL_EXPORT \
|
||||
int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \
|
||||
OPENSSL_EXPORT \
|
||||
int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { \
|
||||
if(ENGINE_get_static_state() == fns->static_state) goto skip_cbs; \
|
||||
|
@ -204,6 +204,7 @@ skip_to_init:
|
||||
case EVP_CIPH_OFB_MODE:
|
||||
|
||||
ctx->num = 0;
|
||||
/* fall-through */
|
||||
|
||||
case EVP_CIPH_CBC_MODE:
|
||||
|
||||
|
@ -435,6 +435,7 @@ int main(int argc,char **argv)
|
||||
EXIT(3);
|
||||
}
|
||||
}
|
||||
fclose(f);
|
||||
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
ENGINE_cleanup();
|
||||
|
@ -137,7 +137,7 @@ int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen)
|
||||
sctx = 0;
|
||||
if (sigret)
|
||||
{
|
||||
MS_STATIC EVP_MD_CTX tmp_ctx;
|
||||
EVP_MD_CTX tmp_ctx;
|
||||
unsigned char md[EVP_MAX_MD_SIZE];
|
||||
unsigned int mdlen;
|
||||
EVP_MD_CTX_init(&tmp_ctx);
|
||||
@ -173,7 +173,7 @@ int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen)
|
||||
|
||||
int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, unsigned char *sig, size_t siglen)
|
||||
{
|
||||
MS_STATIC EVP_MD_CTX tmp_ctx;
|
||||
EVP_MD_CTX tmp_ctx;
|
||||
unsigned char md[EVP_MAX_MD_SIZE];
|
||||
int r;
|
||||
unsigned int mdlen;
|
||||
|
@ -411,7 +411,10 @@ void EVP_PKEY_free(EVP_PKEY *x)
|
||||
static void EVP_PKEY_free_it(EVP_PKEY *x)
|
||||
{
|
||||
if (x->ameth && x->ameth->pkey_free)
|
||||
{
|
||||
x->ameth->pkey_free(x);
|
||||
x->pkey.ptr = NULL;
|
||||
}
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
if (x->engine)
|
||||
{
|
||||
|
@ -81,7 +81,7 @@ int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, unsigned int *siglen,
|
||||
unsigned char m[EVP_MAX_MD_SIZE];
|
||||
unsigned int m_len;
|
||||
int i,ok=0,v;
|
||||
MS_STATIC EVP_MD_CTX tmp_ctx;
|
||||
EVP_MD_CTX tmp_ctx;
|
||||
|
||||
*siglen=0;
|
||||
EVP_MD_CTX_init(&tmp_ctx);
|
||||
|
@ -68,7 +68,7 @@ int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf,
|
||||
unsigned char m[EVP_MAX_MD_SIZE];
|
||||
unsigned int m_len;
|
||||
int i,ok=0,v;
|
||||
MS_STATIC EVP_MD_CTX tmp_ctx;
|
||||
EVP_MD_CTX tmp_ctx;
|
||||
|
||||
EVP_MD_CTX_init(&tmp_ctx);
|
||||
EVP_MD_CTX_copy_ex(&tmp_ctx,ctx);
|
||||
|
@ -134,6 +134,8 @@ static EVP_PKEY_CTX *int_ctx_new(EVP_PKEY *pkey, ENGINE *e, int id)
|
||||
id = pkey->ameth->pkey_id;
|
||||
}
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
if (pkey && pkey->engine)
|
||||
e = pkey->engine;
|
||||
/* Try to find an ENGINE which implements this method */
|
||||
if (e)
|
||||
{
|
||||
|
@ -147,6 +147,8 @@ static int int_update(EVP_MD_CTX *ctx,const void *data,size_t count)
|
||||
|
||||
static int hmac_signctx_init(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx)
|
||||
{
|
||||
HMAC_PKEY_CTX *hctx = ctx->data;
|
||||
HMAC_CTX_set_flags(&hctx->ctx, mctx->flags & ~EVP_MD_CTX_FLAG_NO_INIT);
|
||||
EVP_MD_CTX_set_flags(mctx, EVP_MD_CTX_FLAG_NO_INIT);
|
||||
mctx->update = int_update;
|
||||
return 1;
|
||||
|
196
crypto/install-crypto.com
Executable file
196
crypto/install-crypto.com
Executable file
@ -0,0 +1,196 @@
|
||||
$! INSTALL.COM -- Installs the files in a given directory tree
|
||||
$!
|
||||
$! Author: Richard Levitte <richard@levitte.org>
|
||||
$! Time of creation: 22-MAY-1998 10:13
|
||||
$!
|
||||
$! Changes by Zoltan Arpadffy <zoli@polarhome.com>
|
||||
$!
|
||||
$! P1 root of the directory tree
|
||||
$! P2 "64" for 64-bit pointers.
|
||||
$!
|
||||
$!
|
||||
$! Announce/identify.
|
||||
$!
|
||||
$ proc = f$environment( "procedure")
|
||||
$ write sys$output "@@@ "+ -
|
||||
f$parse( proc, , , "name")+ f$parse( proc, , , "type")
|
||||
$!
|
||||
$ on error then goto tidy
|
||||
$ on control_c then goto tidy
|
||||
$!
|
||||
$ if (p1 .eqs. "")
|
||||
$ then
|
||||
$ write sys$output "First argument missing."
|
||||
$ write sys$output -
|
||||
"It should be the directory where you want things installed."
|
||||
$ exit
|
||||
$ endif
|
||||
$!
|
||||
$ if (f$getsyi( "cpu") .lt. 128)
|
||||
$ then
|
||||
$ arch = "VAX"
|
||||
$ else
|
||||
$ arch = f$edit( f$getsyi( "arch_name"), "upcase")
|
||||
$ if (arch .eqs. "") then arch = "UNK"
|
||||
$ endif
|
||||
$!
|
||||
$ archd = arch
|
||||
$ lib32 = "32"
|
||||
$ shr = "_SHR32"
|
||||
$!
|
||||
$ if (p2 .nes. "")
|
||||
$ then
|
||||
$ if (p2 .eqs. "64")
|
||||
$ then
|
||||
$ archd = arch+ "_64"
|
||||
$ lib32 = ""
|
||||
$ shr = "_SHR"
|
||||
$ else
|
||||
$ if (p2 .nes. "32")
|
||||
$ then
|
||||
$ write sys$output "Second argument invalid."
|
||||
$ write sys$output "It should be "32", "64", or nothing."
|
||||
$ exit
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$!
|
||||
$ root = f$parse( p1, "[]A.;0", , , "syntax_only, no_conceal") - "A.;0"
|
||||
$ root_dev = f$parse( root, , , "device", "syntax_only")
|
||||
$ root_dir = f$parse( root, , , "directory", "syntax_only") - -
|
||||
"[000000." - "][" - "[" - "]"
|
||||
$ root = root_dev + "[" + root_dir
|
||||
$!
|
||||
$ define /nolog wrk_sslroot 'root'.] /trans=conc
|
||||
$ define /nolog wrk_sslinclude wrk_sslroot:[include]
|
||||
$ define /nolog wrk_sslxlib wrk_sslroot:['arch'_lib]
|
||||
$!
|
||||
$ if f$parse("wrk_sslroot:[000000]") .eqs. "" then -
|
||||
create /directory /log wrk_sslroot:[000000]
|
||||
$ if f$parse("wrk_sslinclude:") .eqs. "" then -
|
||||
create /directory /log wrk_sslinclude:
|
||||
$ if f$parse("wrk_sslxlib:") .eqs. "" then -
|
||||
create /directory /log wrk_sslxlib:
|
||||
$!
|
||||
$ sdirs := , -
|
||||
'archd', -
|
||||
objects, -
|
||||
md2, md4, md5, sha, mdc2, hmac, ripemd, whrlpool, -
|
||||
des, aes, rc2, rc4, rc5, idea, bf, cast, camellia, seed, -
|
||||
bn, ec, rsa, dsa, ecdsa, dh, ecdh, dso, engine, -
|
||||
buffer, bio, stack, lhash, rand, err, -
|
||||
evp, asn1, pem, x509, x509v3, conf, txt_db, pkcs7, pkcs12, comp, ocsp, -
|
||||
ui, krb5, -
|
||||
store, cms, pqueue, ts, jpake
|
||||
$!
|
||||
$ exheader_ := crypto.h, opensslv.h, ebcdic.h, symhacks.h, ossl_typ.h
|
||||
$ exheader_'archd' := opensslconf.h
|
||||
$ exheader_objects := objects.h, obj_mac.h
|
||||
$ exheader_md2 := md2.h
|
||||
$ exheader_md4 := md4.h
|
||||
$ exheader_md5 := md5.h
|
||||
$ exheader_sha := sha.h
|
||||
$ exheader_mdc2 := mdc2.h
|
||||
$ exheader_hmac := hmac.h
|
||||
$ exheader_ripemd := ripemd.h
|
||||
$ exheader_whrlpool := whrlpool.h
|
||||
$ exheader_des := des.h, des_old.h
|
||||
$ exheader_aes := aes.h
|
||||
$ exheader_rc2 := rc2.h
|
||||
$ exheader_rc4 := rc4.h
|
||||
$ exheader_rc5 := rc5.h
|
||||
$ exheader_idea := idea.h
|
||||
$ exheader_bf := blowfish.h
|
||||
$ exheader_cast := cast.h
|
||||
$ exheader_camellia := camellia.h
|
||||
$ exheader_seed := seed.h
|
||||
$ exheader_modes := modes.h
|
||||
$ exheader_bn := bn.h
|
||||
$ exheader_ec := ec.h
|
||||
$ exheader_rsa := rsa.h
|
||||
$ exheader_dsa := dsa.h
|
||||
$ exheader_ecdsa := ecdsa.h
|
||||
$ exheader_dh := dh.h
|
||||
$ exheader_ecdh := ecdh.h
|
||||
$ exheader_dso := dso.h
|
||||
$ exheader_engine := engine.h
|
||||
$ exheader_buffer := buffer.h
|
||||
$ exheader_bio := bio.h
|
||||
$ exheader_stack := stack.h, safestack.h
|
||||
$ exheader_lhash := lhash.h
|
||||
$ exheader_rand := rand.h
|
||||
$ exheader_err := err.h
|
||||
$ exheader_evp := evp.h
|
||||
$ exheader_asn1 := asn1.h, asn1_mac.h, asn1t.h
|
||||
$ exheader_pem := pem.h, pem2.h
|
||||
$ exheader_x509 := x509.h, x509_vfy.h
|
||||
$ exheader_x509v3 := x509v3.h
|
||||
$ exheader_conf := conf.h, conf_api.h
|
||||
$ exheader_txt_db := txt_db.h
|
||||
$ exheader_pkcs7 := pkcs7.h
|
||||
$ exheader_pkcs12 := pkcs12.h
|
||||
$ exheader_comp := comp.h
|
||||
$ exheader_ocsp := ocsp.h
|
||||
$ exheader_ui := ui.h, ui_compat.h
|
||||
$ exheader_krb5 := krb5_asn.h
|
||||
$! exheader_store := store.h, str_compat.h
|
||||
$ exheader_store := store.h
|
||||
$ exheader_cms := cms.h
|
||||
$ exheader_pqueue := pqueue.h
|
||||
$ exheader_ts := ts.h
|
||||
$ exheader_jpake := jpake.h
|
||||
$ libs := ssl_libcrypto
|
||||
$!
|
||||
$ exe_dir := [-.'archd'.exe.crypto]
|
||||
$!
|
||||
$! Header files.
|
||||
$!
|
||||
$ i = 0
|
||||
$ loop_sdirs:
|
||||
$ d = f$edit( f$element( i, ",", sdirs), "trim")
|
||||
$ i = i + 1
|
||||
$ if d .eqs. "," then goto loop_sdirs_end
|
||||
$ tmp = exheader_'d'
|
||||
$ if (d .nes. "") then d = "."+ d
|
||||
$ copy /protection = w:re ['d']'tmp' wrk_sslinclude: /log
|
||||
$ goto loop_sdirs
|
||||
$ loop_sdirs_end:
|
||||
$!
|
||||
$! Object libraries, shareable images.
|
||||
$!
|
||||
$ i = 0
|
||||
$ loop_lib:
|
||||
$ e = f$edit( f$element( i, ",", libs), "trim")
|
||||
$ i = i + 1
|
||||
$ if e .eqs. "," then goto loop_lib_end
|
||||
$ set noon
|
||||
$ file = exe_dir+ e+ lib32+ ".olb"
|
||||
$ if f$search( file) .nes. ""
|
||||
$ then
|
||||
$ copy /protection = w:re 'file' wrk_sslxlib: /log
|
||||
$ endif
|
||||
$!
|
||||
$ file = exe_dir+ e+ shr+ ".exe"
|
||||
$ if f$search( file) .nes. ""
|
||||
$ then
|
||||
$ copy /protection = w:re 'file' wrk_sslxlib: /log
|
||||
$ endif
|
||||
$ set on
|
||||
$ goto loop_lib
|
||||
$ loop_lib_end:
|
||||
$!
|
||||
$ tidy:
|
||||
$!
|
||||
$ call deass wrk_sslroot
|
||||
$ call deass wrk_sslinclude
|
||||
$ call deass wrk_sslxlib
|
||||
$!
|
||||
$ exit
|
||||
$!
|
||||
$ deass: subroutine
|
||||
$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
|
||||
$ then
|
||||
$ deassign /process 'p1'
|
||||
$ endif
|
||||
$ endsubroutine
|
||||
$!
|
@ -1,155 +0,0 @@
|
||||
$! INSTALL.COM -- Installs the files in a given directory tree
|
||||
$!
|
||||
$! Author: Richard Levitte <richard@levitte.org>
|
||||
$! Time of creation: 22-MAY-1998 10:13
|
||||
$!
|
||||
$! Changes by Zoltan Arpadffy <zoli@polarhome.com>
|
||||
$!
|
||||
$! P1 root of the directory tree
|
||||
$!
|
||||
$ IF P1 .EQS. ""
|
||||
$ THEN
|
||||
$ WRITE SYS$OUTPUT "First argument missing."
|
||||
$ WRITE SYS$OUTPUT -
|
||||
"It should be the directory where you want things installed."
|
||||
$ EXIT
|
||||
$ ENDIF
|
||||
$
|
||||
$ IF (F$GETSYI("CPU").LT.128)
|
||||
$ THEN
|
||||
$ ARCH := VAX
|
||||
$ ELSE
|
||||
$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
|
||||
$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
|
||||
$ ENDIF
|
||||
$
|
||||
$ ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
|
||||
$ ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
|
||||
$ ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
|
||||
- "[000000." - "][" - "[" - "]"
|
||||
$ ROOT = ROOT_DEV + "[" + ROOT_DIR
|
||||
$
|
||||
$ DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
|
||||
$ DEFINE/NOLOG WRK_SSLLIB WRK_SSLROOT:['ARCH'_LIB]
|
||||
$ DEFINE/NOLOG WRK_SSLINCLUDE WRK_SSLROOT:[INCLUDE]
|
||||
$
|
||||
$ IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
|
||||
CREATE/DIR/LOG WRK_SSLROOT:[000000]
|
||||
$ IF F$PARSE("WRK_SSLLIB:") .EQS. "" THEN -
|
||||
CREATE/DIR/LOG WRK_SSLLIB:
|
||||
$ IF F$PARSE("WRK_SSLINCLUDE:") .EQS. "" THEN -
|
||||
CREATE/DIR/LOG WRK_SSLINCLUDE:
|
||||
$
|
||||
$ SDIRS := ,-
|
||||
_'ARCH',-
|
||||
OBJECTS,-
|
||||
MD2,MD4,MD5,SHA,MDC2,HMAC,RIPEMD,WHRLPOOL,-
|
||||
DES,AES,RC2,RC4,RC5,IDEA,BF,CAST,CAMELLIA,SEED,-
|
||||
BN,EC,RSA,DSA,ECDSA,DH,ECDH,DSO,ENGINE,-
|
||||
BUFFER,BIO,STACK,LHASH,RAND,ERR,-
|
||||
EVP,ASN1,PEM,X509,X509V3,CONF,TXT_DB,PKCS7,PKCS12,COMP,OCSP,-
|
||||
UI,KRB5,-
|
||||
STORE,CMS,PQUEUE,TS,JPAKE
|
||||
$ EXHEADER_ := crypto.h,opensslv.h,ebcdic.h,symhacks.h,ossl_typ.h
|
||||
$ EXHEADER__'ARCH' := opensslconf.h
|
||||
$ EXHEADER_OBJECTS := objects.h,obj_mac.h
|
||||
$ EXHEADER_MD2 := md2.h
|
||||
$ EXHEADER_MD4 := md4.h
|
||||
$ EXHEADER_MD5 := md5.h
|
||||
$ EXHEADER_SHA := sha.h
|
||||
$ EXHEADER_MDC2 := mdc2.h
|
||||
$ EXHEADER_HMAC := hmac.h
|
||||
$ EXHEADER_RIPEMD := ripemd.h
|
||||
$ EXHEADER_WHRLPOOL := whrlpool.h
|
||||
$ EXHEADER_DES := des.h,des_old.h
|
||||
$ EXHEADER_AES := aes.h
|
||||
$ EXHEADER_RC2 := rc2.h
|
||||
$ EXHEADER_RC4 := rc4.h
|
||||
$ EXHEADER_RC5 := rc5.h
|
||||
$ EXHEADER_IDEA := idea.h
|
||||
$ EXHEADER_BF := blowfish.h
|
||||
$ EXHEADER_CAST := cast.h
|
||||
$ EXHEADER_CAMELLIA := camellia.h
|
||||
$ EXHEADER_SEED := seed.h
|
||||
$ EXHEADER_MODES := modes.h
|
||||
$ EXHEADER_BN := bn.h
|
||||
$ EXHEADER_EC := ec.h
|
||||
$ EXHEADER_RSA := rsa.h
|
||||
$ EXHEADER_DSA := dsa.h
|
||||
$ EXHEADER_ECDSA := ecdsa.h
|
||||
$ EXHEADER_DH := dh.h
|
||||
$ EXHEADER_ECDH := ecdh.h
|
||||
$ EXHEADER_DSO := dso.h
|
||||
$ EXHEADER_ENGINE := engine.h
|
||||
$ EXHEADER_BUFFER := buffer.h
|
||||
$ EXHEADER_BIO := bio.h
|
||||
$ EXHEADER_STACK := stack.h,safestack.h
|
||||
$ EXHEADER_LHASH := lhash.h
|
||||
$ EXHEADER_RAND := rand.h
|
||||
$ EXHEADER_ERR := err.h
|
||||
$ EXHEADER_EVP := evp.h
|
||||
$ EXHEADER_ASN1 := asn1.h,asn1_mac.h,asn1t.h
|
||||
$ EXHEADER_PEM := pem.h,pem2.h
|
||||
$ EXHEADER_X509 := x509.h,x509_vfy.h
|
||||
$ EXHEADER_X509V3 := x509v3.h
|
||||
$ EXHEADER_CONF := conf.h,conf_api.h
|
||||
$ EXHEADER_TXT_DB := txt_db.h
|
||||
$ EXHEADER_PKCS7 := pkcs7.h
|
||||
$ EXHEADER_PKCS12 := pkcs12.h
|
||||
$ EXHEADER_COMP := comp.h
|
||||
$ EXHEADER_OCSP := ocsp.h
|
||||
$ EXHEADER_UI := ui.h,ui_compat.h
|
||||
$ EXHEADER_KRB5 := krb5_asn.h
|
||||
$! EXHEADER_STORE := store.h,str_compat.h
|
||||
$ EXHEADER_STORE := store.h
|
||||
$ EXHEADER_CMS := cms.h
|
||||
$ EXHEADER_PQUEUE := pqueue.h
|
||||
$ EXHEADER_TS := ts.h
|
||||
$ EXHEADER_JPAKE := jpake.h
|
||||
$ LIBS := LIBCRYPTO
|
||||
$
|
||||
$ EXE_DIR := [-.'ARCH'.EXE.CRYPTO]
|
||||
$
|
||||
$ I = 0
|
||||
$ LOOP_SDIRS:
|
||||
$ D = F$EDIT(F$ELEMENT(I, ",", SDIRS),"TRIM")
|
||||
$ I = I + 1
|
||||
$ IF D .EQS. "," THEN GOTO LOOP_SDIRS_END
|
||||
$ tmp = EXHEADER_'D'
|
||||
$ IF D .EQS. ""
|
||||
$ THEN
|
||||
$ COPY 'tmp' WRK_SSLINCLUDE: /LOG
|
||||
$ ELSE
|
||||
$ IF D .EQS. "_''ARCH'"
|
||||
$ THEN
|
||||
$ COPY [-.'ARCH'.CRYPTO]'tmp' WRK_SSLINCLUDE: /LOG
|
||||
$ ELSE
|
||||
$ COPY [.'D']'tmp' WRK_SSLINCLUDE: /LOG
|
||||
$ ENDIF
|
||||
$ ENDIF
|
||||
$ SET FILE/PROT=WORLD:RE WRK_SSLINCLUDE:'tmp'
|
||||
$ GOTO LOOP_SDIRS
|
||||
$ LOOP_SDIRS_END:
|
||||
$
|
||||
$ I = 0
|
||||
$ LOOP_LIB:
|
||||
$ E = F$EDIT(F$ELEMENT(I, ",", LIBS),"TRIM")
|
||||
$ I = I + 1
|
||||
$ IF E .EQS. "," THEN GOTO LOOP_LIB_END
|
||||
$ SET NOON
|
||||
$ IF F$SEARCH(EXE_DIR+E+".OLB") .NES. ""
|
||||
$ THEN
|
||||
$ COPY 'EXE_DIR''E'.OLB WRK_SSLLIB:'E'.OLB/log
|
||||
$ SET FILE/PROT=W:RE WRK_SSLLIB:'E'.OLB
|
||||
$ ENDIF
|
||||
$ ! Preparing for the time when we have shareable images
|
||||
$ IF F$SEARCH(EXE_DIR+E+".EXE") .NES. ""
|
||||
$ THEN
|
||||
$ COPY 'EXE_DIR''E'.EXE WRK_SSLLIB:'E'.EXE/log
|
||||
$ SET FILE/PROT=W:RE WRK_SSLLIB:'E'.EXE
|
||||
$ ENDIF
|
||||
$ SET ON
|
||||
$ GOTO LOOP_LIB
|
||||
$ LOOP_LIB_END:
|
||||
$
|
||||
$ EXIT
|
@ -282,8 +282,37 @@ int JPAKE_STEP1_generate(JPAKE_STEP1 *send, JPAKE_CTX *ctx)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* g^x is a legal value */
|
||||
static int is_legal(const BIGNUM *gx, const JPAKE_CTX *ctx)
|
||||
{
|
||||
BIGNUM *t;
|
||||
int res;
|
||||
|
||||
if(BN_is_negative(gx) || BN_is_zero(gx) || BN_cmp(gx, ctx->p.p) >= 0)
|
||||
return 0;
|
||||
|
||||
t = BN_new();
|
||||
BN_mod_exp(t, gx, ctx->p.q, ctx->p.p, ctx->ctx);
|
||||
res = BN_is_one(t);
|
||||
BN_free(t);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
int JPAKE_STEP1_process(JPAKE_CTX *ctx, const JPAKE_STEP1 *received)
|
||||
{
|
||||
if(!is_legal(received->p1.gx, ctx))
|
||||
{
|
||||
JPAKEerr(JPAKE_F_JPAKE_STEP1_PROCESS, JPAKE_R_G_TO_THE_X3_IS_NOT_LEGAL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(!is_legal(received->p2.gx, ctx))
|
||||
{
|
||||
JPAKEerr(JPAKE_F_JPAKE_STEP1_PROCESS, JPAKE_R_G_TO_THE_X4_IS_NOT_LEGAL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* verify their ZKP(xc) */
|
||||
if(!verify_zkp(&received->p1, ctx->p.g, ctx))
|
||||
{
|
||||
|
@ -115,6 +115,8 @@ void ERR_load_JPAKE_strings(void);
|
||||
#define JPAKE_F_VERIFY_ZKP 100
|
||||
|
||||
/* Reason codes. */
|
||||
#define JPAKE_R_G_TO_THE_X3_IS_NOT_LEGAL 108
|
||||
#define JPAKE_R_G_TO_THE_X4_IS_NOT_LEGAL 109
|
||||
#define JPAKE_R_G_TO_THE_X4_IS_ONE 105
|
||||
#define JPAKE_R_HASH_OF_HASH_OF_KEY_MISMATCH 106
|
||||
#define JPAKE_R_HASH_OF_KEY_MISMATCH 107
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* crypto/jpake/jpake_err.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1999-2008 The OpenSSL Project. All rights reserved.
|
||||
* Copyright (c) 1999-2010 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
|
||||
@ -80,6 +80,8 @@ static ERR_STRING_DATA JPAKE_str_functs[]=
|
||||
|
||||
static ERR_STRING_DATA JPAKE_str_reasons[]=
|
||||
{
|
||||
{ERR_REASON(JPAKE_R_G_TO_THE_X3_IS_NOT_LEGAL),"g to the x3 is not legal"},
|
||||
{ERR_REASON(JPAKE_R_G_TO_THE_X4_IS_NOT_LEGAL),"g to the x4 is not legal"},
|
||||
{ERR_REASON(JPAKE_R_G_TO_THE_X4_IS_ONE) ,"g to the x4 is one"},
|
||||
{ERR_REASON(JPAKE_R_HASH_OF_HASH_OF_KEY_MISMATCH),"hash of hash of key mismatch"},
|
||||
{ERR_REASON(JPAKE_R_HASH_OF_KEY_MISMATCH),"hash of key mismatch"},
|
||||
|
@ -165,7 +165,7 @@
|
||||
asm ( \
|
||||
"roll %1,%0" \
|
||||
: "=r"(ret) \
|
||||
: "I"(n), "0"(a) \
|
||||
: "I"(n), "0"((unsigned int)(a)) \
|
||||
: "cc"); \
|
||||
ret; \
|
||||
})
|
||||
@ -383,6 +383,7 @@ int HASH_FINAL (unsigned char *md, HASH_CTX *c)
|
||||
}
|
||||
|
||||
#ifndef MD32_REG_T
|
||||
#if defined(__alpha) || defined(__sparcv9) || defined(__mips)
|
||||
#define MD32_REG_T long
|
||||
/*
|
||||
* This comment was originaly written for MD5, which is why it
|
||||
@ -400,9 +401,15 @@ int HASH_FINAL (unsigned char *md, HASH_CTX *c)
|
||||
* Well, to be honest it should say that this *prevents*
|
||||
* performance degradation.
|
||||
* <appro@fy.chalmers.se>
|
||||
* Apparently there're LP64 compilers that generate better
|
||||
* code if A-D are declared int. Most notably GCC-x86_64
|
||||
* generates better code.
|
||||
*/
|
||||
#else
|
||||
/*
|
||||
* Above is not absolute and there are LP64 compilers that
|
||||
* generate better code if MD32_REG_T is defined int. The above
|
||||
* pre-processor condition reflects the circumstances under which
|
||||
* the conclusion was made and is subject to further extension.
|
||||
* <appro@fy.chalmers.se>
|
||||
*/
|
||||
#define MD32_REG_T int
|
||||
#endif
|
||||
#endif
|
||||
|
@ -64,12 +64,18 @@
|
||||
#include "o_time.h"
|
||||
|
||||
#ifdef OPENSSL_SYS_VMS
|
||||
# include <libdtdef.h>
|
||||
# include <lib$routines.h>
|
||||
# include <lnmdef.h>
|
||||
# include <starlet.h>
|
||||
# include <descrip.h>
|
||||
# include <stdlib.h>
|
||||
# if __CRTL_VER >= 70000000 && \
|
||||
(defined _POSIX_C_SOURCE || !defined _ANSI_C_SOURCE)
|
||||
# define VMS_GMTIME_OK
|
||||
# endif
|
||||
# ifndef VMS_GMTIME_OK
|
||||
# include <libdtdef.h>
|
||||
# include <lib$routines.h>
|
||||
# include <lnmdef.h>
|
||||
# include <starlet.h>
|
||||
# include <descrip.h>
|
||||
# include <stdlib.h>
|
||||
# endif /* ndef VMS_GMTIME_OK */
|
||||
#endif
|
||||
|
||||
struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result)
|
||||
@ -81,7 +87,7 @@ struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result)
|
||||
so we don't even look at the return value */
|
||||
gmtime_r(timer,result);
|
||||
ts = result;
|
||||
#elif !defined(OPENSSL_SYS_VMS)
|
||||
#elif !defined(OPENSSL_SYS_VMS) || defined(VMS_GMTIME_OK)
|
||||
ts = gmtime(timer);
|
||||
if (ts == NULL)
|
||||
return NULL;
|
||||
@ -89,7 +95,7 @@ struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result)
|
||||
memcpy(result, ts, sizeof(struct tm));
|
||||
ts = result;
|
||||
#endif
|
||||
#ifdef OPENSSL_SYS_VMS
|
||||
#if defined( OPENSSL_SYS_VMS) && !defined( VMS_GMTIME_OK)
|
||||
if (ts == NULL)
|
||||
{
|
||||
static $DESCRIPTOR(tabnam,"LNM$DCL_LOGICAL");
|
||||
|
@ -397,11 +397,12 @@ int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx)
|
||||
|
||||
|
||||
case OHS_ASN1_HEADER:
|
||||
/* Now reading ASN1 header: can read at least 6 bytes which
|
||||
* is more than enough for any valid ASN1 SEQUENCE header
|
||||
/* Now reading ASN1 header: can read at least 2 bytes which
|
||||
* is enough for ASN1 SEQUENCE header and either length field
|
||||
* or at least the length of the length field.
|
||||
*/
|
||||
n = BIO_get_mem_data(rctx->mem, &p);
|
||||
if (n < 6)
|
||||
if (n < 2)
|
||||
goto next_io;
|
||||
|
||||
/* Check it is an ASN1 SEQUENCE */
|
||||
@ -414,6 +415,11 @@ int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx)
|
||||
/* Check out length field */
|
||||
if (*p & 0x80)
|
||||
{
|
||||
/* If MSB set on initial length octet we can now
|
||||
* always read 6 octets: make sure we have them.
|
||||
*/
|
||||
if (n < 6)
|
||||
goto next_io;
|
||||
n = *p & 0x7F;
|
||||
/* Not NDEF or excessive length */
|
||||
if (!n || (n > 4))
|
||||
|
@ -170,14 +170,14 @@ int OCSP_parse_url(char *url, char **phost, char **pport, char **ppath, int *pss
|
||||
|
||||
char *host, *port;
|
||||
|
||||
/* dup the buffer since we are going to mess with it */
|
||||
buf = BUF_strdup(url);
|
||||
if (!buf) goto mem_err;
|
||||
|
||||
*phost = NULL;
|
||||
*pport = NULL;
|
||||
*ppath = NULL;
|
||||
|
||||
/* dup the buffer since we are going to mess with it */
|
||||
buf = BUF_strdup(url);
|
||||
if (!buf) goto mem_err;
|
||||
|
||||
/* Check for initial colon */
|
||||
p = strchr(buf, ':');
|
||||
|
||||
|
@ -25,11 +25,11 @@
|
||||
* (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for
|
||||
* major minor fix final patch/beta)
|
||||
*/
|
||||
#define OPENSSL_VERSION_NUMBER 0x10000020
|
||||
#define OPENSSL_VERSION_NUMBER 0x1000006fL
|
||||
#ifdef OPENSSL_FIPS
|
||||
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.0b-fips-dev xx XXX xxxx"
|
||||
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.0f-fips 4 Jan 2012"
|
||||
#else
|
||||
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.0b-dev x XXX xxxx"
|
||||
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.0f 4 Jan 2012"
|
||||
#endif
|
||||
#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user