openssl.git
18 months agoAdd support getting raw private/public keys
Matt Caswell [Fri, 1 Jun 2018 11:22:28 +0000 (12:22 +0100)]
Add support getting raw private/public keys

Only applies to algorithms that support it. Both raw private and public
keys can be obtained for X25519, Ed25519, X448, Ed448. Raw private keys
only can be obtained for HMAC, Poly1305 and SipHash

Fixes #6259

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Tim Hudson <tjh@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6394)

18 months agoDo not free a session before calling the remove_session_cb
Marcus Huewe [Fri, 11 May 2018 10:24:56 +0000 (12:24 +0200)]
Do not free a session before calling the remove_session_cb

If the remove_session_cb accesses the session's data (for instance,
via SSL_SESSION_get_protocol_version), a potential use after free
can occur. For this, consider the following scenario when adding
a new session via SSL_CTX_add_session:

- The session cache is full
  (SSL_CTX_sess_number(ctx) > SSL_CTX_sess_get_cache_size(ctx))
- Only the session cache has a reference to ctx->session_cache_tail
  (that is, ctx->session_cache_tail->references == 1)

Since the cache is full, remove_session_lock is called to remove
ctx->session_cache_tail from the cache. That is, it
SSL_SESSION_free()s the session, which free()s the data. Afterwards,
the free()d session is passed to the remove_session_cb. If the callback
accesses the session's data, we have a use after free.

The free before calling the callback behavior was introduced in
commit e4612d02c53cccd24fa97b08fc01250d1238cca1 ("Remove sessions
from external cache, even if internal cache not used.").

CLA: trivial

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6222)

18 months agoDocument UTF-8 expectation for pass phrases passed to OSSL_STORE
Richard Levitte [Tue, 5 Jun 2018 13:58:43 +0000 (15:58 +0200)]
Document UTF-8 expectation for pass phrases passed to OSSL_STORE

After some discussion, it was concluded that the better idea is to
stipulate that the pass phrases passed to the OSSL_STORE API are
expected to be UTF-8 encoded, and that all objects made accessible
through OSSL_STORE URIs should adhere to this expectation (at the
discretion of the loaders).

Email ref:
https://mta.openssl.org/pipermail/openssl-project/2018-June/000771.html

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6416)

18 months agoReformulate the if condition in tls_process_new_session_ticket
Matt Caswell [Thu, 7 Jun 2018 09:00:44 +0000 (10:00 +0100)]
Reformulate the if condition in tls_process_new_session_ticket

Improves readability

Reviewed-by: Andy Polyakov <appro@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6415)

18 months agoDon't store the ticket nonce in the session
Matt Caswell [Tue, 5 Jun 2018 11:23:28 +0000 (12:23 +0100)]
Don't store the ticket nonce in the session

We generate the secrets based on the nonce immediately so there is no
need to keep the nonce.

Reviewed-by: Andy Polyakov <appro@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6415)

18 months agoFix TLSv1.3 ticket nonces
Matt Caswell [Fri, 1 Jun 2018 15:52:34 +0000 (16:52 +0100)]
Fix TLSv1.3 ticket nonces

All tickets on a connection need to have a unique nonce. When this was
originally implemented we only ever sent one ticket on the conneciton so
this didn't matter. We were just using the value 0. Now we can get multiple
tickets to we need to start doing the ticket nonce properly.

Fixes #6387

Reviewed-by: Andy Polyakov <appro@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6415)

18 months agoFix EAP-FAST
Matt Caswell [Wed, 6 Jun 2018 10:54:32 +0000 (11:54 +0100)]
Fix EAP-FAST

Commit 61fb59238d broke EAP-FAST support. This fixes it.

Fixes #6395

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6428)

18 months agoFix no-dsa
Matt Caswell [Wed, 6 Jun 2018 08:51:12 +0000 (09:51 +0100)]
Fix no-dsa

Broken by 0336df2fa.

Reviewed-by: Tim Hudson <tjh@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6427)

18 months agocrypto/ppccap.c: wire new ChaCha20_ctr32_vsx.
Andy Polyakov [Tue, 5 Jun 2018 18:00:46 +0000 (20:00 +0200)]
crypto/ppccap.c: wire new ChaCha20_ctr32_vsx.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6419)

18 months agochacha/asm/chacha-ppc.pl: improve performance by 40/80% on POWER8/9.
Andy Polyakov [Tue, 5 Jun 2018 17:59:19 +0000 (19:59 +0200)]
chacha/asm/chacha-ppc.pl: improve performance by 40/80% on POWER8/9.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6419)

18 months agoperlasm/ppc-xlate.pl: add vmrg[eo]w instructions.
Andy Polyakov [Tue, 5 Jun 2018 17:57:42 +0000 (19:57 +0200)]
perlasm/ppc-xlate.pl: add vmrg[eo]w instructions.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6419)

18 months agosha/asm/sha512p8-ppc.pl: fix build on Mac OS X.
Andy Polyakov [Tue, 5 Jun 2018 17:55:55 +0000 (19:55 +0200)]
sha/asm/sha512p8-ppc.pl: fix build on Mac OS X.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6419)

18 months agoIssue warnings for large DSA and RSA keys
Georg Schmidt [Wed, 30 May 2018 23:42:39 +0000 (01:42 +0200)]
Issue warnings for large DSA and RSA keys

Issue a warning when generating DSA or RSA keys of size greater than
OPENSSL_DSA_MAX_MODULUS_BITS resp. OPENSSL_RSA_MAX_MODULUS_BITS.

Reviewed-by: Paul Dale <paul.dale@oracle.com>
Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/6380)

18 months agoImprove wording
Rich Salz [Tue, 5 Jun 2018 15:17:59 +0000 (11:17 -0400)]
Improve wording

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6413)

18 months agocrypto/sm2/sm2_za.c: include internal/numbers.h
Richard Levitte [Tue, 5 Jun 2018 07:37:14 +0000 (09:37 +0200)]
crypto/sm2/sm2_za.c: include internal/numbers.h

Needed for the platforms that don't define UINT16_MAX.

Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6414)

18 months agoRebuild error codes
Matt Caswell [Thu, 31 May 2018 15:30:33 +0000 (16:30 +0100)]
Rebuild error codes

There were a large number of error codes that were unused (probably a
copy&paste from somewhere else). Since these have never been made public
we should remove then and rebuild the error codes.

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6386)

18 months agoUse lowercase for internal SM2 symbols
Matt Caswell [Thu, 31 May 2018 14:53:30 +0000 (15:53 +0100)]
Use lowercase for internal SM2 symbols

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6386)

18 months agoRemove non-existant functions from libcrypto.num
Matt Caswell [Thu, 31 May 2018 14:38:36 +0000 (15:38 +0100)]
Remove non-existant functions from libcrypto.num

These were never made public so can just be deleted.

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6386)

18 months agoMore more on SM2 error codes and tidy up
Matt Caswell [Thu, 31 May 2018 13:43:14 +0000 (14:43 +0100)]
More more on SM2 error codes and tidy up

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6386)

18 months agoImprove use of the test framework in the SM2 internal tests
Matt Caswell [Thu, 31 May 2018 12:49:47 +0000 (13:49 +0100)]
Improve use of the test framework in the SM2 internal tests

Also general clean up of those tests

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6386)

18 months agoFurther work on SM2 error codes
Matt Caswell [Thu, 31 May 2018 12:10:12 +0000 (13:10 +0100)]
Further work on SM2 error codes

Also does some reformatting to tidy things up

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6386)

18 months agoAdd test recipes for internal SM2 tests
Matt Caswell [Thu, 31 May 2018 12:09:39 +0000 (13:09 +0100)]
Add test recipes for internal SM2 tests

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6386)

18 months agoSet SM2 error codes
Jack Lloyd [Thu, 17 May 2018 20:08:33 +0000 (16:08 -0400)]
Set SM2 error codes

Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6386)

18 months agoMake SM2 functions private
Jack Lloyd [Fri, 6 Apr 2018 13:45:41 +0000 (09:45 -0400)]
Make SM2 functions private

Address issue #5670

Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6386)

18 months agosha/asm/sha512p8-ppc.pl: improve POWER9 performance by ~10%.
Andy Polyakov [Sat, 2 Jun 2018 13:25:50 +0000 (15:25 +0200)]
sha/asm/sha512p8-ppc.pl: improve POWER9 performance by ~10%.

Biggest part, ~7%, of improvement resulted from omitting constants'
table index increment in each round. And minor part from rescheduling
instructions. Apparently POWER9 (and POWER8) manage to dispatch
instructions more efficiently if they are laid down as if they have
no latency...

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6406)

18 months agochacha/asm/chacha-ppc.pl: improve POWER8 performance by 15%.
Andy Polyakov [Sat, 2 Jun 2018 12:14:28 +0000 (14:14 +0200)]
chacha/asm/chacha-ppc.pl: improve POWER8 performance by 15%.

This comes at cost of minor 2.5% regression on G4, which is reasonable
trade-off. [Further improve compliance with ABI requirements.]

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6406)

18 months agoPPC assembly pack: correct POWER9 results.
Andy Polyakov [Sat, 2 Jun 2018 12:03:27 +0000 (14:03 +0200)]
PPC assembly pack: correct POWER9 results.

As it turns out originally published results were skewed by "turbo"
mode. VM apparently remains oblivious to dynamic frequency scaling,
and reports that processor operates at "base" frequency at all times.
While actual frequency gets increased under load.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6406)

18 months ago{arm64|x86_64}cpuid.pl: add special 16-byte case to OPENSSL_memcmp.
Andy Polyakov [Sun, 20 May 2018 10:13:16 +0000 (12:13 +0200)]
{arm64|x86_64}cpuid.pl: add special 16-byte case to OPENSSL_memcmp.

OPENSSL_memcmp is a must in GCM decrypt and general-purpose loop takes
quite a portion of execution time for short inputs, more than GHASH for
few-byte inputs according to profiler. Special 16-byte case takes it off
top five list in profiler output.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6312)

18 months agomodes/gcm128.c: coalesce calls to GHASH.
Andy Polyakov [Sun, 20 May 2018 10:02:39 +0000 (12:02 +0200)]
modes/gcm128.c: coalesce calls to GHASH.

On contemporary platforms assembly GHASH processes multiple blocks
faster than one by one. For TLS payloads shorter than 16 bytes, e.g.
alerts, it's possible to reduce hashing operation to single call.
And for block lengths not divisible by 16 - fold two final calls to
one. Improvement is most noticeable with "reptoline", because call to
assembly GHASH is indirect.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6312)

18 months agoevp/e_aes.c: replace calls to one-liners with references in GCM.
Andy Polyakov [Sun, 20 May 2018 09:54:24 +0000 (11:54 +0200)]
evp/e_aes.c: replace calls to one-liners with references in GCM.

Even though calls can be viewed as styling improvement, they do come
with cost. It's not big cost and shows only on short inputs, but it is
measurable, 2-3% on some platforms.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6312)

18 months agoFix checking the return value of getentropy()
Kurt Roeckx [Sat, 2 Jun 2018 16:15:32 +0000 (18:15 +0200)]
Fix checking the return value of getentropy()

Reviewed-by: Andy Polyakov <appro@openssl.org>
GH: #6405

18 months agoRemove support for calling getrandom(), we now always call getentropy()
Kurt Roeckx [Sat, 2 Jun 2018 15:54:29 +0000 (17:54 +0200)]
Remove support for calling getrandom(), we now always call getentropy()

Only Linux and FreeBSD provide getrandom(), but they both also provide
getentropy() since the same version and we already tried to call that.

Reviewed-by: Andy Polyakov <appro@openssl.org>
GH: #6405

18 months agoLook up availability of getentropy() at runtime.
Kurt Roeckx [Sat, 2 Jun 2018 15:50:16 +0000 (17:50 +0200)]
Look up availability of getentropy() at runtime.

This will actually support most OSs, and at least adds support for
Solaris and OSX

Fixes: #6403
Reviewed-by: Andy Polyakov <appro@openssl.org>
GH: #6405

18 months agoAdd support for KERN_ARND to get random bytes on NetBSD
Kurt Roeckx [Sat, 2 Jun 2018 13:22:13 +0000 (15:22 +0200)]
Add support for KERN_ARND to get random bytes on NetBSD

Reviewed-by: Andy Polyakov <appro@openssl.org>
GH: #6405

18 months agoDocument failure return for ECDSA_SIG_new
Ken Goldman [Sat, 2 Jun 2018 20:17:32 +0000 (16:17 -0400)]
Document failure return for ECDSA_SIG_new

ECDSA_SIG_new() returns NULL on error.

Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6398)

18 months agoMake OS/X more explicit, to avoid questions
Rich Salz [Sat, 2 Jun 2018 18:57:34 +0000 (14:57 -0400)]
Make OS/X more explicit, to avoid questions

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6404)

18 months agoSTORE: split off the description of the 'file' scheme loader
Richard Levitte [Thu, 24 May 2018 18:44:45 +0000 (20:44 +0200)]
STORE: split off the description of the 'file' scheme loader

This includes a quick recommendation on how to name loader docmentation.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6350)

18 months agoENGINE_pkey_asn1_find_str(): don't assume an engine implements ASN1 method
Richard Levitte [Thu, 31 May 2018 09:12:34 +0000 (11:12 +0200)]
ENGINE_pkey_asn1_find_str(): don't assume an engine implements ASN1 method

Just because an engine implements algorithm methods, that doesn't mean
it also implements the ASN1 method.  Therefore, be careful when looking
for an ASN1 method among all engines, don't try to use one that doesn't
exist.

Fixes #6381

Reviewed-by: Tim Hudson <tjh@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6383)

(cherry picked from commit 1ac3cd6277f880fac4df313702d5e3b3814e56e2)
(cherry picked from commit 13b578ada3106a4ce9b836f167ee520539f5fa8f)

18 months agoDon't call setsockopt with an invalid fd
Matt Caswell [Tue, 29 May 2018 15:09:02 +0000 (16:09 +0100)]
Don't call setsockopt with an invalid fd

This is probably a "should not happen" scenario, but better check anyway.
Found by Coverity.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6373)

18 months agoFix a memory leak in an error path
Matt Caswell [Tue, 29 May 2018 15:05:10 +0000 (16:05 +0100)]
Fix a memory leak in an error path

Found by Coverity

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6373)

18 months agoFree a variable
Matt Caswell [Tue, 29 May 2018 15:01:30 +0000 (16:01 +0100)]
Free a variable

Fix a memory leak in storeutl.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6373)

18 months agoFree a variable on an error path
Matt Caswell [Tue, 29 May 2018 14:59:25 +0000 (15:59 +0100)]
Free a variable on an error path

Issue found by Coverity.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6373)

18 months agoOnly set TCP_NODELAY if the protocol is TCP
Matt Caswell [Tue, 29 May 2018 14:58:47 +0000 (15:58 +0100)]
Only set TCP_NODELAY if the protocol is TCP

This doesn't apply if we're doing DTLS, or using UNIX domain sockets.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6373)

18 months agoEVP_MD_size() can return an error
Matt Caswell [Tue, 29 May 2018 15:27:25 +0000 (16:27 +0100)]
EVP_MD_size() can return an error

Fix some instances where we weren't checking the error return.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6373)

18 months agoRemove some logically dead code
Matt Caswell [Tue, 29 May 2018 13:55:45 +0000 (14:55 +0100)]
Remove some logically dead code

Found by coverity. This is an artifact left over from the original
decaf import which generated the source code for different curves. For
curve 448 this is dead.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6373)

18 months agoRemove some logically dead code
Matt Caswell [Tue, 29 May 2018 13:33:12 +0000 (14:33 +0100)]
Remove some logically dead code

Issues found by Coverity

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6373)

18 months agoapps: when the 'compat' nameopt has been set, leave it be
Richard Levitte [Thu, 31 May 2018 04:51:25 +0000 (06:51 +0200)]
apps: when the 'compat' nameopt has been set, leave it be

XN_FLAG_COMPAT has a unique property, its zero for value.  This means
it needs special treatment; if it has been set (which can only be
determined indirectly) and set alone (*), no other flags should be
set.

(*) if any other nameopt flag has been set by the user, compatibility
mode is blown away.

Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6382)

18 months agoReduce minimal out length in CRYPTO_128_unwrap_pad
Yihong Wang [Wed, 16 May 2018 06:34:28 +0000 (23:34 -0700)]
Reduce minimal out length in CRYPTO_128_unwrap_pad

In `aes_wrap_cipher()`, the minimal out buff length is `(inlen - 8)`.
Since it calls `CRYPTO_128_unwrap_pad()` underneath, it makes sense to
reduce the minimal out length in `CRYPTO_128_unwrap_pad()` to align to
its caller.

Signed-off-by: Yihong Wang <yh.wang@ibm.com>
Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6266)

18 months agobn/bn_exp.c: mitigation of the One-and-Done side-channel attack.
User [Wed, 16 May 2018 17:59:36 +0000 (13:59 -0400)]
bn/bn_exp.c: mitigation of the One-and-Done side-channel attack.

The One&Done attack, which is described in a paper to appear in the
USENIX Security'18 conference, uses EM emanations to recover the values
of the bits that are obtained using BN_is_bit_set while constructing
the value of the window in BN_mod_exp_consttime. The EM signal changes
slightly depending on the value of the bit, and since the lookup of a
bit is surrounded by highly regular execution (constant-time Montgomery
multiplications) the attack is able to isolate the (very brief) part of
the signal that changes depending on the bit. Although the change is
slight, the attack recovers it successfully >90% of the time on several
phones and IoT devices (all with ARM processors with clock rates around
1GHz), so after only one RSA decryption more than 90% of the bits in
d_p and d_q are recovered correctly, which enables rapid recovery of
the full RSA key using an algorithm (also described in the paper) that
modifies the branch-and-prune approach for a situation in which the
exponents' bits are recovered with errors, i.e. where we do not know
a priori which bits are correctly recovered.

The mitigation for the attack is relatively simple - all the bits of
the window are obtained at once, along with other bits so that an
entire integer's worth of bits are obtained together using masking and
shifts, without unnecessarily considering each bit in isolation. This
improves performance somewhat (one call to bn_get_bits is faster than
several calls to BN_is_bit_set), so the attacker now gets one signal
snippet per window (rather than one per bit) in which the signal is
affected by all bits in the integer (rather than just the one bit).

Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6276)

18 months agochacha/asm/chacha-ppc.pl: optimize AltiVec/VMX code path.
Andy Polyakov [Sun, 27 May 2018 12:04:48 +0000 (14:04 +0200)]
chacha/asm/chacha-ppc.pl: optimize AltiVec/VMX code path.

32-bit vector rotate instruction was defined from beginning, it
not being used from the start must be a brain-slip...

Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6363)

18 months agoperlasm/ppc-xlate.pl: add new instructions and clean up.
Andy Polyakov [Sun, 27 May 2018 12:03:00 +0000 (14:03 +0200)]
perlasm/ppc-xlate.pl: add new instructions and clean up.

Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6363)

18 months agoapps/speed.c: address asan failure with small -bytes and large -misalign.
Andy Polyakov [Mon, 21 May 2018 12:26:54 +0000 (14:26 +0200)]
apps/speed.c: address asan failure with small -bytes and large -misalign.

Reviewed-by: Tim Hudson <tjh@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6311)

18 months agoapps/speed.c: add -aead flag.
Andy Polyakov [Sat, 19 May 2018 13:43:11 +0000 (15:43 +0200)]
apps/speed.c: add -aead flag.

Goal is to exercise AEAD ciphers in TLS-like sequence, i.e. 13-byte
AAD followed by payload. Update doc/man1/speed.pod accordingly.

[While we are at it, address even some styling and readability issues.]

Reviewed-by: Tim Hudson <tjh@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6311)

18 months agoapps/speed.c: clean up SIGARM handling.
Andy Polyakov [Sat, 19 May 2018 13:53:29 +0000 (15:53 +0200)]
apps/speed.c: clean up SIGARM handling.

Reviewed-by: Tim Hudson <tjh@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6311)

18 months agoOSSL_STORE: don't test file: URIs on Mingw
Richard Levitte [Wed, 30 May 2018 12:25:46 +0000 (14:25 +0200)]
OSSL_STORE: don't test file: URIs on Mingw

Under a mingw shell, the command line path conversion either mangles
file: URIs to something useless (file;C:\...) or not at all (which
can't be opened by the Windows C RTL unless we're really lucky), so we
simply skip testing them in that environment.

Fixes #6369

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6376)

18 months agoAdd APIs for custom X509_LOOKUP_METHOD creation
Mingtao Yang [Fri, 9 Feb 2018 18:23:18 +0000 (10:23 -0800)]
Add APIs for custom X509_LOOKUP_METHOD creation

OpenSSL 1.1.0 made the X509_LOOKUP_METHOD structure opaque, so
applications that were previously able to define a custom lookup method
are not able to be ported.

This commit adds getters and setters for each of the current fields of
X509_LOOKUP_METHOD, along with getters and setters on several associated
opaque types (such as X509_LOOKUP and X509_OBJECT).

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6152)

18 months agoText description of GOST signature algorithms
Dmitry Belyavskiy [Thu, 3 May 2018 15:31:47 +0000 (18:31 +0300)]
Text description of GOST signature algorithms

Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6168)

18 months agoSend GOST SignatureAlgorithms when TLS 1.2 in use
Dmitry Belyavskiy [Thu, 3 May 2018 15:31:01 +0000 (18:31 +0300)]
Send GOST SignatureAlgorithms when TLS 1.2 in use

Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6168)

18 months agoBugfix: GOST2012 certificates for GOST ciphersuites were broken.
Dmitry Belyavskiy [Thu, 3 May 2018 14:25:48 +0000 (17:25 +0300)]
Bugfix: GOST2012 certificates for GOST ciphersuites were broken.

Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6168)

18 months agoReplace strdup() with OPENSSL_strdup()
Todd Short [Tue, 22 May 2018 14:48:04 +0000 (10:48 -0400)]
Replace strdup() with OPENSSL_strdup()

It's freed with OPENSSL_free()

Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6331)

18 months agoFix no-sm2 with clang
Todd Short [Fri, 18 May 2018 18:54:01 +0000 (14:54 -0400)]
Fix no-sm2 with clang

Return immediately upon discovery of bad message digest.

Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6298)

18 months agoTest that a ^ 0 mod -1 is always 0
Matt Caswell [Thu, 24 May 2018 15:13:43 +0000 (16:13 +0100)]
Test that a ^ 0 mod -1 is always 0

Check all functions that do this.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6355)

18 months agoThe result of a ^ 0 mod -1 is 0 not 1
Matt Caswell [Thu, 24 May 2018 15:12:52 +0000 (16:12 +0100)]
The result of a ^ 0 mod -1 is 0 not 1

Thanks to Guido Vranken and OSSFuzz for finding this issue.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6355)

18 months agoUpdate the "Connected Commands" section of s_client/s_server docs
Matt Caswell [Tue, 22 May 2018 14:18:01 +0000 (15:18 +0100)]
Update the "Connected Commands" section of s_client/s_server docs

Fixes #6307

Reviewed-by: Kurt Roeckx <kurt@roeckx.be>
(Merged from https://github.com/openssl/openssl/pull/6330)

18 months agoPrepare for 1.1.1-pre8-dev
Matt Caswell [Tue, 29 May 2018 12:22:05 +0000 (13:22 +0100)]
Prepare for 1.1.1-pre8-dev

Reviewed-by: Richard Levitte <levitte@openssl.org>
18 months agoPrepare for 1.1.1-pre7 release OpenSSL_1_1_1-pre7
Matt Caswell [Tue, 29 May 2018 12:20:01 +0000 (13:20 +0100)]
Prepare for 1.1.1-pre7 release

Reviewed-by: Richard Levitte <levitte@openssl.org>
18 months agoUpdate copyright year
Matt Caswell [Tue, 29 May 2018 12:07:08 +0000 (13:07 +0100)]
Update copyright year

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6371)

18 months agoECDSA_SIG: restore doc comments which were deleted accidentally
Dr. Matthias St. Pierre [Mon, 28 May 2018 20:46:21 +0000 (22:46 +0200)]
ECDSA_SIG: restore doc comments which were deleted accidentally

amends 0396401d1c3f

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6366)

18 months agoECDSA_SIG: add simple getters for commonly used struct members
Dr. Matthias St. Pierre [Sun, 27 May 2018 07:08:08 +0000 (09:08 +0200)]
ECDSA_SIG: add simple getters for commonly used struct members

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6290)

18 months agoRSA: add simple getters for commonly used struct members
Dr. Matthias St. Pierre [Sun, 27 May 2018 07:01:28 +0000 (09:01 +0200)]
RSA: add simple getters for commonly used struct members

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6290)

18 months agoDSA: add simple getters for commonly used struct members
Dr. Matthias St. Pierre [Sun, 27 May 2018 06:57:55 +0000 (08:57 +0200)]
DSA: add simple getters for commonly used struct members

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6290)

18 months agoDH: fix: add simple getters for commonly used struct members
Dr. Matthias St. Pierre [Sun, 27 May 2018 07:07:07 +0000 (09:07 +0200)]
DH: fix: add simple getters for commonly used struct members

amends 6db7fadf0975

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6290)

18 months agoutil/libcrypto.num: fix symbol collision between 1.1.0 and master
Dr. Matthias St. Pierre [Wed, 16 May 2018 20:53:41 +0000 (22:53 +0200)]
util/libcrypto.num: fix symbol collision between 1.1.0 and master

In commit 6decf9436f7, fourteen public symbols were removed from
util/libcrypto.num on the master branch and the following symbols
renumbered. Unfortunately, the symbols `OCSP_resp_get0_signer` and
`X509_get0_authority_key_id` were not adjusted accordingly on the
OpenSSL_1_1_0-stable branch. This commit fixes the collision by
doing a 'double swap'.

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6278)

18 months agoTry to work around ubuntu gcc-5 ubsan build failure
Bernd Edlinger [Sat, 26 May 2018 15:08:03 +0000 (17:08 +0200)]
Try to work around ubuntu gcc-5 ubsan build failure

[extended tests]

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6360)

18 months agoImprove the example getpass() implementation to show an error return
Nick Mathewson [Thu, 24 May 2018 19:23:15 +0000 (15:23 -0400)]
Improve the example getpass() implementation to show an error return

Also, modernize the code, so that it isn't trying to store a size_t
into an int, and then check the int's sign. :/

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6271)

18 months agoUpdate documentation for PEM callback: error is now -1.
Nick Mathewson [Wed, 16 May 2018 15:07:48 +0000 (11:07 -0400)]
Update documentation for PEM callback: error is now -1.

In previous versions of OpenSSL, the documentation for PEM_read_*
said:

   The callback B<must> return the number of characters in the
   passphrase or 0 if an error occurred.

But since c82c3462267afdbbaa5, 0 is now treated as a non-error
return value.  Applications that want to indicate an error need to
return -1 instead.

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6271)

18 months agoFix array bounds violation in ssl_session_dup
Bernd Edlinger [Fri, 25 May 2018 06:06:55 +0000 (08:06 +0200)]
Fix array bounds violation in ssl_session_dup

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6353)

18 months agoAdd a sanity check on the length of pkeyutl inputs
Matt Caswell [Thu, 17 May 2018 11:53:07 +0000 (12:53 +0100)]
Add a sanity check on the length of pkeyutl inputs

When signing or verifying a file using pkeyutl the input is supposed to
be a hash. Some algorithms sanity check the length of the input, while
others don't and silently truncate. To avoid accidents we check that the
length of the input looks sane.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6284)

18 months agoRevert "Support EVP_PKEY_sign() and EVP_PKEY_verify() for EdDSA"
Matt Caswell [Thu, 17 May 2018 10:18:01 +0000 (11:18 +0100)]
Revert "Support EVP_PKEY_sign() and EVP_PKEY_verify() for EdDSA"

This reverts commit a6f5b1163452a36da1c8378eab3f29ae234e5c7f.

The EVP_PKEY_sign() function is intended for pre-hashed input which is
not supported by our EdDSA implementation.

See the discussion in PR 5880

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6284)

18 months agoImprove compatibility of point and curve checks
Matt Caswell [Mon, 21 May 2018 14:24:56 +0000 (15:24 +0100)]
Improve compatibility of point and curve checks

We check that the curve name associated with the point is the same as that
for the curve.

Fixes #6302

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6323)

18 months agoSave and restore the Windows error around TlsGetValue.
David Benjamin [Sun, 20 May 2018 21:24:30 +0000 (17:24 -0400)]
Save and restore the Windows error around TlsGetValue.

TlsGetValue clears the last error even on success, so that callers may
distinguish it successfully returning NULL or failing. This error-mangling
behavior interferes with the caller's use of GetLastError. In particular
SSL_get_error queries the error queue to determine whether the caller should
look at the OS's errors. To avoid destroying state, save and restore the
Windows error.

Fixes #6299.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6316)

18 months agoUse OPENSSL_EC_EXPLICIT_CURVE constant.
David Benjamin [Sun, 20 May 2018 18:37:06 +0000 (14:37 -0400)]
Use OPENSSL_EC_EXPLICIT_CURVE constant.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6314)

18 months agoFix explicit EC curve encoding.
David Benjamin [Sun, 20 May 2018 18:33:49 +0000 (14:33 -0400)]
Fix explicit EC curve encoding.

Per SEC 1, the curve coefficients must be padded up to size. See C.2's
definition of Curve, C.1's definition of FieldElement, and 2.3.5's definition
of how to encode the field elements in http://www.secg.org/sec1-v2.pdf.

This comes up for P-521, where b needs a leading zero.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6314)

18 months agoSkip CN DNS name constraint checks when not needed
Viktor Dukhovni [Tue, 22 May 2018 05:09:25 +0000 (01:09 -0400)]
Skip CN DNS name constraint checks when not needed

Only check the CN against DNS name contraints if the
`X509_CHECK_FLAG_NEVER_CHECK_SUBJECT` flag is not set, and either the
certificate has no DNS subject alternative names or the
`X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT` flag is set.

Add pertinent documentation, and touch up some stale text about
name checks and DANE.

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tim Hudson <tjh@openssl.org>
18 months agoLimit scope of CN name constraints
Viktor Dukhovni [Wed, 16 May 2018 03:41:20 +0000 (23:41 -0400)]
Limit scope of CN name constraints

Don't apply DNS name constraints to the subject CN when there's a
least one DNS-ID subjectAlternativeName.

Don't apply DNS name constraints to subject CN's that are sufficiently
unlike DNS names.  Checked name must have at least two labels, with
all labels non-empty, no trailing '.' and all hyphens must be
internal in each label.  In addition to the usual LDH characters,
we also allow "_", since some sites use these for hostnames despite
all the standards.

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tim Hudson <tjh@openssl.org>
18 months agoUse the client app traffic secret for PHA Finished message
Matt Caswell [Fri, 18 May 2018 16:33:19 +0000 (17:33 +0100)]
Use the client app traffic secret for PHA Finished message

The TLSv1.3 spec requires us to use the client application traffic secret
during generation of the Finished message following a post handshake
authentication.

Fixes #6263

Reviewed-by: Ben Kaduk <kaduk@mit.edu>
(Merged from https://github.com/openssl/openssl/pull/6297)

18 months agoINSTALL: Provide better documentation for enable-ec_nistp_64_gcc_128
Richard Levitte [Tue, 22 May 2018 21:09:01 +0000 (23:09 +0200)]
INSTALL: Provide better documentation for enable-ec_nistp_64_gcc_128

Reviewed-by: Andy Polyakov <appro@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6328)

18 months agoBetter error code when lacking __SIZEOF_INT128__
Richard Levitte [Tue, 22 May 2018 11:57:29 +0000 (13:57 +0200)]
Better error code when lacking __SIZEOF_INT128__

Fixes #6327

Reviewed-by: Andy Polyakov <appro@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6328)

18 months agoFix no-ec, no-tls1_3 and no-tls
Matt Caswell [Mon, 21 May 2018 09:46:58 +0000 (10:46 +0100)]
Fix no-ec, no-tls1_3 and no-tls

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6321)

18 months agoEnable SSL_MODE_AUTO_RETRY by default
Kurt Roeckx [Tue, 15 May 2018 17:01:41 +0000 (19:01 +0200)]
Enable SSL_MODE_AUTO_RETRY by default

Because TLS 1.3 sends more non-application data records some clients run
into problems because they don't expect SSL_read() to return and set
SSL_ERROR_WANT_READ after processing it.

This can cause problems for clients that use blocking I/O and use
select() to see if data is available. It can be cleared using
SSL_CTX_clear_mode().

Reviewed-by: Matt Caswell <matt@openssl.org>
GH: #6260

18 months agoFix no-ec in combination with no-dh
Matt Caswell [Mon, 21 May 2018 11:20:18 +0000 (12:20 +0100)]
Fix no-ec in combination with no-dh

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6321)

18 months agossl/ssl_txt: fix NULL-check
Tilman Keskinöz [Thu, 17 May 2018 11:04:31 +0000 (13:04 +0200)]
ssl/ssl_txt: fix NULL-check

NULL-check for cipher is redundant, instead check if cipher->name is NULL

While here fix formatting of BIO_printf calls as suggested by Andy Polyakov.

CLA: trivial

Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6282)

18 months agoapps/s_socket.c: address rare TLSProxy failures on Windows.
Andy Polyakov [Sun, 20 May 2018 21:03:47 +0000 (23:03 +0200)]
apps/s_socket.c: address rare TLSProxy failures on Windows.

Reviewed-by: Rich Salz <rsalz@openssl.org>
18 months agoCheck malloc failure via app_malloc
Rich Salz [Mon, 21 May 2018 14:28:16 +0000 (10:28 -0400)]
Check malloc failure via app_malloc

Thanks to GitHUb user murugesandins for reporting this.

Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6322)

18 months agoDon't cache stateless tickets in TLSv1.3
Matt Caswell [Fri, 18 May 2018 10:31:31 +0000 (11:31 +0100)]
Don't cache stateless tickets in TLSv1.3

In TLSv1.2 and below we always cache new sessions by default on the server
side in the internal cache (even when we're using session tickets). This is
in order to support resumption from a session id.

In TLSv1.3 there is no session id. It is only possible to resume using the
ticket. Therefore, in the default case,  there is no point in caching the
session in the internal store.

There is still a reason to call the external cache new session callback
because applications may be using the callbacks just to know about when
sessions are created (and not necessarily implementing a full cache). If
the application also implements the remove session callback then we are
forced to also store it in the internal cache so that we can create
timeout events. Otherwise the external cache could just fill up
indefinitely.

This mostly addresses the issue described in #5628. That issue also proposes
having an option to not create full stateless tickets when using the
internal cache. That aspect hasn't been addressed yet.

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Ben Kaduk <kaduk@mit.edu>
(Merged from https://github.com/openssl/openssl/pull/6293)

18 months agoFix undefined behaviour in X509_NAME_cmp()
Matt Caswell [Wed, 16 May 2018 10:59:47 +0000 (11:59 +0100)]
Fix undefined behaviour in X509_NAME_cmp()

If the lengths of both names is 0 then don't attempt to do a memcmp.

Issue reported by Simon Friedberger, Robert Merget and Juraj Somorovsky.

Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/6291)

18 months agoWindows: don't install __DECC_*.H
Richard Levitte [Sat, 19 May 2018 05:09:19 +0000 (07:09 +0200)]
Windows: don't install __DECC_*.H

This adds the possibility to exclude files by regexp in util/copy.pl

Partial fix for #3254

Reviewed-by: Tim Hudson <tjh@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6303)

18 months agoQuiet pod2html warnings
Richard Levitte [Sat, 19 May 2018 05:22:10 +0000 (07:22 +0200)]
Quiet pod2html warnings

--quiet stops warnings of this sort:

    Cannot find "BIO_read_ex" in podpath: cannot find suitable replacement path, cannot resolve link

We know what causes these warnings, it's perfectly innocuous, and we
don't want to hear it any more.

Partial fix for #3254

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6304)

18 months agoFix no-srtp build warnings
Todd Short [Mon, 14 May 2018 14:41:06 +0000 (10:41 -0400)]
Fix no-srtp build warnings

Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6255)

18 months agoRestore check of |*xn| against |name| in X509_NAME_set
Richard Levitte [Thu, 17 May 2018 07:53:14 +0000 (09:53 +0200)]
Restore check of |*xn| against |name| in X509_NAME_set

A previous change of this function introduced a fragility when the
destination happens to be the same as the source.  Such alias isn't
recommended, but could still happen, for example in this kind of code:

    X509_NAME *subject = X509_get_issuer_name(x);

    /* ... some code passes ... */

    X509_set_issuer_name(x, subject);

Fixes #4710

Reviewed-by: Andy Polyakov <appro@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6280)