openssl.git
2 years agoRemove the file r160test.c
Matt Caswell [Tue, 28 Feb 2017 13:23:37 +0000 (13:23 +0000)]
Remove the file r160test.c

It is empty and is not compiled

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

2 years agoRemove wp_test.c: exactly the same tests are in evptests.txt
Dr. Stephen Henson [Tue, 28 Feb 2017 14:18:27 +0000 (14:18 +0000)]
Remove wp_test.c: exactly the same tests are in evptests.txt

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

2 years agoRemove dead code in bn
Matt Caswell [Tue, 28 Feb 2017 10:08:51 +0000 (10:08 +0000)]
Remove dead code in bn

There are a number of symbols in bn which are internal only and never used
by anything. They should be removed.

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

2 years agoRemove some #if 0 code in ssl, crypto/bio
Todd Short [Tue, 28 Feb 2017 14:04:29 +0000 (09:04 -0500)]
Remove some #if 0 code in ssl, crypto/bio

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

2 years agoCode health: Stop using timeb.h / ftime() (VMS only)
Richard Levitte [Tue, 28 Feb 2017 13:07:08 +0000 (14:07 +0100)]
Code health: Stop using timeb.h / ftime() (VMS only)

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

2 years agoCode health: Remove obvious VAX C fixups
Richard Levitte [Tue, 28 Feb 2017 13:06:14 +0000 (14:06 +0100)]
Code health: Remove obvious VAX C fixups

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

2 years agoMore Configure cleanup. Remove
Emilia Kasper [Tue, 28 Feb 2017 13:54:07 +0000 (14:54 +0100)]
More Configure cleanup. Remove
- util/incore
- util/fipslink.pl
- the unused "baseaddr" configure switch

Reviewed-by: Stephen Henson <steve@openssl.org>
2 years agoClean up references to FIPS
Emilia Kasper [Tue, 28 Feb 2017 11:30:28 +0000 (12:30 +0100)]
Clean up references to FIPS

This removes the fips configure option. This option is broken as the
required FIPS code is not available.

FIPS_mode() and FIPS_mode_set() are retained for compatibility, but
FIPS_mode() always returns 0, and FIPS_mode_set() can only be used to
turn FIPS mode off.

Reviewed-by: Stephen Henson <steve@openssl.org>
2 years agoRemove BN_DEBUG_TRIX
Emilia Kasper [Tue, 28 Feb 2017 12:25:06 +0000 (13:25 +0100)]
Remove BN_DEBUG_TRIX

Reviewed-by: Rich Salz <rsalz@openssl.org>
2 years agoRemove debugging leftovers in apps/opt.c
Emilia Kasper [Tue, 28 Feb 2017 10:47:10 +0000 (11:47 +0100)]
Remove debugging leftovers in apps/opt.c

Reviewed-by: Stephen Henson <steve@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
2 years agoAvoid buffer underflow in evp_test.
Pauli [Mon, 27 Feb 2017 04:26:16 +0000 (14:26 +1000)]
Avoid buffer underflow in evp_test.

The second loop in the remove_space function doesn't check for walking
back off of the start of the string while setting white space to 0.

This fix exits this loop once the pointer is before the (updated) beginning
of the string.

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

2 years agoRemove unnecessary memset after PR #2583 avoids accessing
Bernd Edlinger [Mon, 13 Feb 2017 12:21:34 +0000 (13:21 +0100)]
Remove unnecessary memset after PR #2583 avoids accessing
the uninitialized session_id now.

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

2 years agoMove the CHIL engine to demos/engines
Richard Levitte [Tue, 28 Feb 2017 13:47:55 +0000 (14:47 +0100)]
Move the CHIL engine to demos/engines

Moving out of the way, Makefile to be added

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

2 years agoRemove some dead code from libssl
Matt Caswell [Tue, 28 Feb 2017 10:52:09 +0000 (10:52 +0000)]
Remove some dead code from libssl

There are a small number of functions in libssl that are internal only
and never used by anything.

Reviewed-by: Emilia Käsper <emilia@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/2770)

2 years agoCode cleanup: remove the VMS specific reimplementation of gmtime
Richard Levitte [Tue, 28 Feb 2017 07:15:31 +0000 (08:15 +0100)]
Code cleanup: remove the VMS specific reimplementation of gmtime

This reimplementation was necessary before VMS C V7.1.  Since that's
the minimum version we support in this OpenSSL version, the
reimplementation is no longer needed.

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

2 years agoRemove dead code in crypto/pkcs7
Emilia Kasper [Tue, 28 Feb 2017 10:37:22 +0000 (11:37 +0100)]
Remove dead code in crypto/pkcs7

Reviewed-by: Stephen Henson <steve@openssl.org>
2 years agoRemove methtest.c
Emilia Kasper [Tue, 28 Feb 2017 10:33:38 +0000 (11:33 +0100)]
Remove methtest.c

This file tests code that doesn't exist.

Reviewed-by: Stephen Henson <steve@openssl.org>
2 years agoRemove ancient demoCA directory
Dr. Stephen Henson [Tue, 28 Feb 2017 05:17:11 +0000 (05:17 +0000)]
Remove ancient demoCA directory

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

2 years agoRenumber to avoid a error code clash
Richard Levitte [Mon, 27 Feb 2017 22:34:29 +0000 (23:34 +0100)]
Renumber to avoid a error code clash

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

2 years agoTrace support for TLS 1.3 certificate request message
Dr. Stephen Henson [Wed, 22 Feb 2017 17:26:04 +0000 (17:26 +0000)]
Trace support for TLS 1.3 certificate request message

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

2 years agoInitial incomplete TLS 1.3 certificate request support.
Dr. Stephen Henson [Wed, 22 Feb 2017 17:26:44 +0000 (17:26 +0000)]
Initial incomplete TLS 1.3 certificate request support.

This adds partial support for TLS 1.3 certificate request message.

The request context and extensions are currently ignored on receive
and set to zero length on send.

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

2 years agoAdjust the default value of the private key size
Adrian Vollmer [Mon, 27 Feb 2017 14:51:21 +0000 (15:51 +0100)]
Adjust the default value of the private key size

...in the man page to reflect the actual default (2048 instead of 512)

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

2 years agopoly1305/asm/poly1305-x86_64.pl: minor AVX512 optimization.
Andy Polyakov [Sat, 25 Feb 2017 17:37:24 +0000 (18:37 +0100)]
poly1305/asm/poly1305-x86_64.pl: minor AVX512 optimization.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2 years agocrypto/x86_64cpuid.pl: add CFI annotations.
Andy Polyakov [Sat, 25 Feb 2017 21:17:21 +0000 (22:17 +0100)]
crypto/x86_64cpuid.pl: add CFI annotations.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2 years agowhrlpool/asm/wp-x86_64.pl: add CFI annotations.
Andy Polyakov [Sat, 25 Feb 2017 21:16:57 +0000 (22:16 +0100)]
whrlpool/asm/wp-x86_64.pl: add CFI annotations.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2 years agocamellia/asm/cmll-x86_64.pl: add CFI annotations.
Andy Polyakov [Sat, 25 Feb 2017 21:16:38 +0000 (22:16 +0100)]
camellia/asm/cmll-x86_64.pl: add CFI annotations.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2 years agopoly1305/asm/poly1305-x86_64.pl: add CFI annotations.
Andy Polyakov [Sat, 25 Feb 2017 18:37:02 +0000 (19:37 +0100)]
poly1305/asm/poly1305-x86_64.pl: add CFI annotations.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2 years agochacha/asm/chacha-x86_64.pl: add CFI annotations.
Andy Polyakov [Sat, 25 Feb 2017 18:36:43 +0000 (19:36 +0100)]
chacha/asm/chacha-x86_64.pl: add CFI annotations.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2 years agoAdd missing blank lines and cosmetic improvements
Dr. Stephen Henson [Sun, 26 Feb 2017 16:04:31 +0000 (16:04 +0000)]
Add missing blank lines and cosmetic improvements

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

2 years agoTLS 1.3 support for ssl_print_ticket()
Dr. Stephen Henson [Sun, 26 Feb 2017 13:40:03 +0000 (13:40 +0000)]
TLS 1.3 support for ssl_print_ticket()

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

2 years agoprint out alpn extension
Dr. Stephen Henson [Sun, 26 Feb 2017 03:14:53 +0000 (03:14 +0000)]
print out alpn extension

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

2 years agoAdd ffdhe groups to trace output
Dr. Stephen Henson [Sun, 26 Feb 2017 01:16:30 +0000 (01:16 +0000)]
Add ffdhe groups to trace output

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

2 years agoPrint numerical value of named roups
Dr. Stephen Henson [Wed, 22 Feb 2017 17:25:17 +0000 (17:25 +0000)]
Print numerical value of named roups

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

2 years agoAdd entry for PSK extension
Dr. Stephen Henson [Wed, 22 Feb 2017 17:24:42 +0000 (17:24 +0000)]
Add entry for PSK extension

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

2 years agoAdd trace entries for remaining TLS 1.3 ciphersuites
Dr. Stephen Henson [Wed, 22 Feb 2017 17:24:18 +0000 (17:24 +0000)]
Add trace entries for remaining TLS 1.3 ciphersuites

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

2 years agoPrint signature type to out, not bio_err
Dr. Stephen Henson [Tue, 21 Feb 2017 18:43:46 +0000 (18:43 +0000)]
Print signature type to out, not bio_err

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

2 years agoAdd a null UI method
Richard Levitte [Sat, 25 Feb 2017 23:17:43 +0000 (00:17 +0100)]
Add a null UI method

There are cases when, if you pass a NULL UI_METHOD, the called
function will use an internal default.  This is well and good, but
there may be cases when this is undesirable and one would rather send
in a UI that does absolutely nothing (sort of a /dev/null).  UI_null()
is the UI_METHOD for this purpose.

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

2 years agopoly1305/asm/poly1305-x86_64.pl: add VPMADD52 code path.
Andy Polyakov [Thu, 29 Dec 2016 23:00:16 +0000 (00:00 +0100)]
poly1305/asm/poly1305-x86_64.pl: add VPMADD52 code path.

This is initial and minimal single-block implementation.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2 years agopoly1305/asm/poly1305-x86_64.pl: switch to vpermdd in table expansion.
Andy Polyakov [Sun, 25 Dec 2016 12:10:00 +0000 (13:10 +0100)]
poly1305/asm/poly1305-x86_64.pl: switch to vpermdd in table expansion.

Effectively it's minor size optimization, 5-6% per affected subroutine.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2 years agopoly1305/asm/poly1305-x86_64.pl: optimize AVX512 code path.
Andy Polyakov [Sun, 25 Dec 2016 12:05:35 +0000 (13:05 +0100)]
poly1305/asm/poly1305-x86_64.pl: optimize AVX512 code path.

On pre-Skylake best optimization strategy was balancing port-specific
instructions, while on Skylake minimizing the sheer amount appears
more sensible.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2 years agoAdd tests for SHA1 and EC point compression
Dr. Stephen Henson [Sat, 25 Feb 2017 00:40:55 +0000 (00:40 +0000)]
Add tests for SHA1 and EC point compression

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

2 years agoFor TLS 1.3 reject SHA1 TLS signatures
Dr. Stephen Henson [Sat, 25 Feb 2017 00:25:04 +0000 (00:25 +0000)]
For TLS 1.3 reject SHA1 TLS signatures

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

2 years agoReject compressed point format with TLS 1.3
Dr. Stephen Henson [Fri, 24 Feb 2017 20:43:02 +0000 (20:43 +0000)]
Reject compressed point format with TLS 1.3

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

2 years agoEC certificate with compression point
Dr. Stephen Henson [Fri, 24 Feb 2017 17:29:59 +0000 (17:29 +0000)]
EC certificate with compression point

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

2 years agoAdd SuiteB support to tls_choose_sigalg()
Dr. Stephen Henson [Fri, 24 Feb 2017 16:39:57 +0000 (16:39 +0000)]
Add SuiteB support to tls_choose_sigalg()

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

2 years agoAdd Suite B tests
Dr. Stephen Henson [Fri, 24 Feb 2017 15:47:54 +0000 (15:47 +0000)]
Add Suite B tests

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

2 years agoAdd P-384 root and P-384, P-256 EE certificates.
Dr. Stephen Henson [Sat, 18 Feb 2017 13:38:37 +0000 (13:38 +0000)]
Add P-384 root and P-384, P-256 EE certificates.

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

2 years agoX509 time: tighten validation per RFC 5280
Emilia Kasper [Fri, 17 Feb 2017 18:00:15 +0000 (19:00 +0100)]
X509 time: tighten validation per RFC 5280

- Reject fractional seconds
- Reject offsets
- Check that the date/time digits are in valid range.
- Add documentation for X509_cmp_time

GH issue 2620

Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
2 years ago.travis.yml: introduce concept of "extended tests"
Andy Polyakov [Mon, 6 Feb 2017 10:14:05 +0000 (11:14 +0100)]
.travis.yml: introduce concept of "extended tests"

Since CI is engaged on per merge request basis, it can be wasteful to
run each request through all the tests, especially those resource
consuming. Idea is to mark most of tests as "extended" and provide a
way to opt-in by marking last commit with [extended tests] tag. It's
still not as optimal as one could wish, as decision to skip a test
still requires machine time, and it's taken in configured environment,
i.e. with updates and additional packages installed...

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

2 years ago.travis.yml: make package pulls conditional.
Andy Polyakov [Thu, 26 Jan 2017 00:02:43 +0000 (01:02 +0100)]
.travis.yml: make package pulls conditional.

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

2 years agoAdd -Wundef to --strict-warnings options.
Bernd Edlinger [Thu, 23 Feb 2017 13:52:23 +0000 (14:52 +0100)]
Add -Wundef to --strict-warnings options.

Avoid a -Wundef warning in refcount.h
Avoid a -Wundef warning in o_str.c
Avoid a -Wundef warning in testutil.h
Include internal/cryptlib.h before openssl/stack.h
to avoid use of undefined symbol OPENSSL_API_COMPAT.

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

2 years agoTidy up certificate type handling.
Dr. Stephen Henson [Thu, 23 Feb 2017 22:12:28 +0000 (22:12 +0000)]
Tidy up certificate type handling.

The certificate types used to be held in a fixed length array or (if
it was too long) a malloced buffer. This was done to retain binary
compatibility. The code can be simplified now SSL is opaque by always
using a malloced buffer.

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

2 years agoIncrease the size of the stack buffer to prevent an overflow.
Pauli [Thu, 23 Feb 2017 03:46:01 +0000 (13:46 +1000)]
Increase the size of the stack buffer to prevent an overflow.

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

2 years agoFix potential memory leak in ASN1_TIME_to_generalizedtime()
Todd Short [Fri, 17 Feb 2017 16:36:13 +0000 (11:36 -0500)]
Fix potential memory leak in ASN1_TIME_to_generalizedtime()

If ret is allocated, it may be leaked on error.

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

2 years agoFix duplicate error codes
Kurt Roeckx [Thu, 23 Feb 2017 22:10:01 +0000 (23:10 +0100)]
Fix duplicate error codes

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

2 years agoImplement SSL_read_ex() and SSL_write_ex() as documented.
Kurt Roeckx [Sat, 19 Nov 2016 19:15:35 +0000 (20:15 +0100)]
Implement SSL_read_ex() and SSL_write_ex() as documented.

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
GH: #1964

2 years agoAdd an sslapitest for early callback
Benjamin Kaduk [Mon, 13 Feb 2017 18:42:43 +0000 (12:42 -0600)]
Add an sslapitest for early callback

Make sure that we can stop handshake processing and resume it later.
Also check that the cipher list and compression methods are sane.
Unfortunately, we don't have the client-side APIs needed to force
a specific (known) session ID to be sent in the ClientHello, so
that accessor cannot be tested here.

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

2 years agoLet test handshakes stop on certain errors
Benjamin Kaduk [Mon, 13 Feb 2017 21:10:54 +0000 (15:10 -0600)]
Let test handshakes stop on certain errors

Certain callback APIs allow the callback to request async processing
by trickling a particular error value up the stack to the application
as an error return from the handshake function.  In those cases,
SSL_want() returns a code specific to the type of async processing
needed.

The create_ssl_connection() helper function for the tests is very
helpful for several things, including creating API tests.  However,
it does not currently let us test the async processing functionality
of these callback interfaces, because the special SSL error codes
are treated as generic errors and the helper continues to loop until
it reaches its maximum iteration count.

Add a new parameter, 'want', that indicates an expected/desired
special SSL error code, so that the helper will terminate when
either side reports that error, giving control back to the calling
function and allowing the test to proceed.

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

2 years agoUse correct variable in test diagnostic
Benjamin Kaduk [Mon, 13 Feb 2017 20:14:06 +0000 (14:14 -0600)]
Use correct variable in test diagnostic

create_ssl_connection() prints out the results if SSL_accept() and/or
SSL_connect() fail, but was reusing the client return value when printing
about SSL_accept() failures.

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

2 years agoAdopt test to changed behavior
Benjamin Kaduk [Thu, 9 Feb 2017 23:21:42 +0000 (17:21 -0600)]
Adopt test to changed behavior

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

2 years agoTests for SSL early callback
Benjamin Kaduk [Tue, 31 Jan 2017 22:06:30 +0000 (16:06 -0600)]
Tests for SSL early callback

Plumb things through in the same place as the SNI callback, since
we recommend that the early callback replace (and supplement) the
SNI callback, and add a few test cases.

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

2 years agoAdd SSL_CTX early callback
Benjamin Kaduk [Mon, 23 Jan 2017 23:03:16 +0000 (17:03 -0600)]
Add SSL_CTX early callback

Provide a callback interface that gives the application the ability
to adjust the nascent SSL object at the earliest stage of ClientHello
processing, immediately after extensions have been collected but
before they have been processed.

This is akin to BoringSSL's "select_certificate_cb" (though it is not
API compatible), and as the name indicates, one major use is to examine
the supplied server name indication and select what certificate to
present to the client.  However, it can also be used to make more
sweeping configuration changes to the SSL object according to the
selected server identity and configuration.  That may include adjusting
the permitted TLS versions, swapping out the SSL_CTX object (as is
traditionally done in a tlsext_servername_callback), changing the
server's cipher list, and more.

We also wish to allow an early callback to indicate that it needs to perform
additional work asynchronously and resume processing later.  To that effect,
refactor the second half of tls_process_client_hello() into a subroutine to be
called at the post-processing stage (including the early callback itself), to
allow the callback to result in remaining in the same work stage for a later
call to succeed.  This requires allocating for and storing the CLIENTHELLO_MSG
in the SSL object to be preserved across such calls, but the storage is
reclaimed after ClientHello processing finishes.

Information about the CliehtHello is available to the callback by means of
accessor functions that can only be used from the early callback.  This allows
extensions to make use of the existing internal parsing machinery without
exposing structure internals (e.g., of PACKET), so that applications do not
have to write fragile parsing code.

Applications are encouraged to utilize an early callback and not use
a servername_callback, in order to avoid unexpected behavior that
occurs due to the relative order of processing between things like
session resumption and the historical servername callback.

Also tidy up nearby style by removing unnecessary braces around one-line
conditional bodies.

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

2 years agoPrepare for WORK_MORE_C
Benjamin Kaduk [Mon, 6 Feb 2017 21:33:28 +0000 (15:33 -0600)]
Prepare for WORK_MORE_C

Add the new enum value and case statements as appropriate.

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

2 years agoTests for SSL_bytes_to_cipher_list()
Benjamin Kaduk [Mon, 30 Jan 2017 18:59:59 +0000 (12:59 -0600)]
Tests for SSL_bytes_to_cipher_list()

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

2 years agoRefactor SSL_bytes_to_cipher_list()
Benjamin Kaduk [Tue, 31 Jan 2017 01:20:14 +0000 (19:20 -0600)]
Refactor SSL_bytes_to_cipher_list()

Split off the portions that mutate the SSL object into a separate
function that the state machine calls, so that the public API can
be a pure function.  (It still needs the SSL parameter in order
to determine what SSL_METHOD's get_cipher_by_char() routine to use,
though.)

Instead of returning the stack of ciphers (functionality that was
not used internally), require using the output parameter, and add
a separate output parameter for the SCSVs contained in the supplied
octets, if desired.  This lets us move to the standard return value
convention.  Also make both output stacks optional parameters.

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

2 years agoExport SSL_bytes_to_cipher_list()
Benjamin Kaduk [Mon, 30 Jan 2017 17:24:17 +0000 (11:24 -0600)]
Export SSL_bytes_to_cipher_list()

Move ssl_bytes_to_cipher_list() to ssl_lib.c and create a public
wrapper around it.  This lets application early callbacks easily get
SSL_CIPHER objects from the raw ciphers bytes without having to
reimplement the parsing code.  In particular, they do not need to
know the details of the sslv2 format ClientHello's ciphersuite
specifications.

Document the new public function, including the arguably buggy behavior
of modifying the supplied SSL object.  On the face of it, such a function
should be able to be pure, just a direct translation of wire octets to
internal data structures.

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

2 years agoLet ssl_get_cipher_by_char yield not-valid ciphers
Benjamin Kaduk [Mon, 6 Feb 2017 17:30:16 +0000 (11:30 -0600)]
Let ssl_get_cipher_by_char yield not-valid ciphers

Now that we have made SCSVs into more of a first-class object, provide
a way for the bytes-to-SSL_CIPHER conversion to actually return them.
Add a flag 'all' to ssl_get_cipher_by_char to indicate that we want
all the known ciphers, not just the ones valid for encryption.  This will,
in practice, let the caller retrieve the SCSVs.

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

2 years agoAdd more first-class support for SCSVS
Benjamin Kaduk [Fri, 3 Feb 2017 23:17:21 +0000 (17:17 -0600)]
Add more first-class support for SCSVS

Just as we have a table of ssl3_ciphers, add a table of ssl3_scsvs, to contain
SSL_CIPHER objects for these non-valid ciphers.  This will allow for unified
handling of such indicators, especially as we are preparing to pass them around
between functions.

Since the 'valid' field is not set for the SCSVs, they should not be used
for anything requiring a cryptographic cipher (as opposed to something
being stuck in a cipher-shaped hole in the TLS wire protocol).

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

2 years agoMove CLIENTHELLO_MSG up in the header
Benjamin Kaduk [Mon, 23 Jan 2017 23:00:47 +0000 (17:00 -0600)]
Move CLIENTHELLO_MSG up in the header

We'll be adding a field of this type to struct ssl_st in a subsequent
commit, and need the type definition to be in scope already.
Also move up the RAW_EXTENSION definition that it depends on.

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

2 years agoStore the number of extensions in CLIENTHELLO_MSG
Benjamin Kaduk [Mon, 23 Jan 2017 22:59:23 +0000 (16:59 -0600)]
Store the number of extensions in CLIENTHELLO_MSG

Keep track of the length of the pre_proc_exts array.

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

2 years agooutput number of exts from tls_collect_extensions()
Benjamin Kaduk [Mon, 23 Jan 2017 22:56:43 +0000 (16:56 -0600)]
output number of exts from tls_collect_extensions()

Modify the API of tls_collect_extensions() to be able to output the number of
extensions that are known (i.e., the length of its 'res' output).  This number
can never be zero on a successful return due to the builtin extensions list,
but use a separate output variable so as to not overload the return value
semantics.

Having this value easily available will give consumers a way to avoid repeating
the calculation.

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

2 years agoCheck for the presence of _WIN32 rather than its value.
Richard Levitte [Thu, 23 Feb 2017 13:41:20 +0000 (14:41 +0100)]
Check for the presence of _WIN32 rather than its value.

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

2 years agoIn apps/rehash.c, decorate the inclusion of internal/o_dir.h for VMS
Richard Levitte [Thu, 23 Feb 2017 12:45:00 +0000 (13:45 +0100)]
In apps/rehash.c, decorate the inclusion of internal/o_dir.h for VMS

The library files are built with symbol names as is, while the
application is built with the default uppercase-all-symbols mode.
That's fine for public APIs, because we have __DECC_INCLUDE_PROLOGUE.H
and __DECC_INCLUDE_EPILOGUE.H automatically telling the compiler how
to treat the public header files.  However, we don't have the same
setup for internal library APIs, since they are usually only used by
the libraries.

Because apps/rehash.c uses a library internal header file, we have to
surround that inclusion with the same kind of pragmas found in
__DECC_INCLUDE_PROLOGUE.H and __DECC_INCLUDE_EPILOGUE.H, or we get
unresolved symbols when building no-shared.

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

2 years agoAdd a test case that tests more of the cipher modes.
Pauli [Wed, 22 Feb 2017 22:34:32 +0000 (08:34 +1000)]
Add a test case that tests more of the cipher modes.

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

2 years agoOn VMS, massage the fetch file names to remove the generation number
Richard Levitte [Thu, 23 Feb 2017 00:45:04 +0000 (01:45 +0100)]
On VMS, massage the fetch file names to remove the generation number

The generation number is ';nnn' at the end of the file name fetched
with readdir().  Because rehash checks for specific extensions and
doesn't expect an additional generation number, the easiest is to
massage the received file name early by simply removing the generation
number.

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

2 years agoLet the output from 'openssl enc -ciphers' go to stdout
Richard Levitte [Wed, 22 Feb 2017 23:11:18 +0000 (00:11 +0100)]
Let the output from 'openssl enc -ciphers' go to stdout

Also, don't exit with an error code

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

2 years agoFix typo, should be && rather than &
Richard Levitte [Wed, 22 Feb 2017 20:06:27 +0000 (21:06 +0100)]
Fix typo, should be && rather than &

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

2 years agoRemove -Wno-parentheses-equality from gcc --strict-warnings options.
Bernd Edlinger [Wed, 22 Feb 2017 11:19:31 +0000 (12:19 +0100)]
Remove -Wno-parentheses-equality from gcc --strict-warnings options.
There has never been any gcc option of that kind.

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

2 years agoFix typo, missing ||
Richard Levitte [Wed, 22 Feb 2017 18:50:33 +0000 (19:50 +0100)]
Fix typo, missing ||

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

2 years agoIterate over EC_GROUP's poly array in a safe way
Rich Salz [Wed, 22 Feb 2017 18:11:08 +0000 (13:11 -0500)]
Iterate over EC_GROUP's poly array in a safe way

Prevent that memory beyond the last element is accessed if every element
of group->poly[] is non-zero

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

2 years agoMake "openssl rehash" work on VMS 8.3 and up
Richard Levitte [Wed, 22 Feb 2017 15:48:55 +0000 (16:48 +0100)]
Make "openssl rehash" work on VMS 8.3 and up

A spelling error prevented it from building correctly.
Furthermore, we need to be more careful when to add a / at the end
of the dirname and when not.

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

2 years agoHave the directory reader use the Unix API on VMS
Richard Levitte [Wed, 22 Feb 2017 17:12:04 +0000 (18:12 +0100)]
Have the directory reader use the Unix API on VMS

opendir(), readdir() and closedir() have been available on VMS since
version 7.0.

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

2 years agoapps/req.c: flag "-new" is implied by "-precert"
Rob Percival [Fri, 13 Jan 2017 19:10:26 +0000 (19:10 +0000)]
apps/req.c: flag "-new" is implied by "-precert"

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

2 years agoChange CA.pl flag from --newprecert to --precert
Rob Percival [Fri, 13 Jan 2017 19:06:03 +0000 (19:06 +0000)]
Change CA.pl flag from --newprecert to --precert

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

2 years agoDocumentation for the -precert flag for "openssl req"
Rob Percival [Thu, 10 Mar 2016 20:32:16 +0000 (20:32 +0000)]
Documentation for the -precert flag for "openssl req"

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

2 years agoBasic test for "openssl req -precert" via apps/CA.pl
Rob Percival [Thu, 10 Mar 2016 20:26:34 +0000 (20:26 +0000)]
Basic test for "openssl req -precert" via apps/CA.pl

TODO(robpercival): Should actually test that the output certificate
contains the poison extension.

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

2 years agoAdds a "-precert" flag to "openssl req" for creating pre-certificates
Rob Percival [Thu, 10 Mar 2016 19:15:13 +0000 (19:15 +0000)]
Adds a "-precert" flag to "openssl req" for creating pre-certificates

This makes it a little easier to create a pre-certificate.

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

2 years agoAdd some more consistency checks in tls_decrypt_ticket.
Bernd Edlinger [Wed, 22 Feb 2017 10:59:44 +0000 (11:59 +0100)]
Add some more consistency checks in tls_decrypt_ticket.

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

2 years agoCorrect the no-dh and no-dsa fix
Richard Levitte [Wed, 22 Feb 2017 00:49:50 +0000 (01:49 +0100)]
Correct the no-dh and no-dsa fix

The condition wasn't quite right

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

2 years agoFix i2d_SSL_SESSION pp output parameter should point to end of asn1 data.
Bernd Edlinger [Mon, 13 Feb 2017 12:03:52 +0000 (13:03 +0100)]
Fix i2d_SSL_SESSION pp output parameter should point to end of asn1 data.

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

2 years agoappveyor.yml: engage VC-WIN64A-masm.
Andy Polyakov [Sun, 19 Feb 2017 21:11:29 +0000 (22:11 +0100)]
appveyor.yml: engage VC-WIN64A-masm.

One of the reasons for why masm/ml64 is not [fully] supported is that
it's problematic to support multiple versions. But latest one usually
works and/or it's lesser problem to make it work. So idea here is to
have a "whistle" when it breaks, so that problems can be evaluated as
they emerge. It's kind of "best effort" thing, as opposite to "full
support".

Reviewed-by: Richard Levitte <levitte@openssl.org>
2 years agoFix memory leak in pkcs12 -export
Dmitry Belyavskiy [Sat, 18 Feb 2017 17:43:01 +0000 (20:43 +0300)]
Fix memory leak in pkcs12 -export

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

2 years agoFix some more memory leaks with TXT_DB_insert.
Bernd Edlinger [Sun, 19 Feb 2017 19:13:45 +0000 (20:13 +0100)]
Fix some more memory leaks with TXT_DB_insert.

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

2 years agoFix a few memleaks in TXT_DB.
Bernd Edlinger [Sun, 19 Feb 2017 17:12:03 +0000 (18:12 +0100)]
Fix a few memleaks in TXT_DB.

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

2 years agoProvided support for the -nameopt flag in s_client, s_server and s_time
Dmitry Belyavskiy [Tue, 21 Feb 2017 11:22:55 +0000 (14:22 +0300)]
Provided support for the -nameopt flag in s_client, s_server and s_time
commands.

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

2 years agoPrevent OOB in SRP base64 code.
Rich Salz [Tue, 21 Feb 2017 18:07:13 +0000 (13:07 -0500)]
Prevent OOB in SRP base64 code.

Change size comparison from > (GT) to >= (GTE) to ensure an additional
byte of output buffer, to prevent OOB reads/writes later in the function
Reject input strings larger than 2GB
Detect invalid output buffer size and return early

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

2 years agoUpdate client, server and x509 fuzz corpus
Kurt Roeckx [Sun, 19 Feb 2017 15:53:50 +0000 (16:53 +0100)]
Update client, server and x509 fuzz corpus

Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
GH: #2682

2 years agoCheck validity, not just signing for all certificates
Dr. Stephen Henson [Sun, 19 Feb 2017 21:16:46 +0000 (21:16 +0000)]
Check validity, not just signing for all certificates

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

2 years agoAdd no siglags test for ECDSA certificate
Dr. Stephen Henson [Sun, 19 Feb 2017 18:55:26 +0000 (18:55 +0000)]
Add no siglags test for ECDSA certificate

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

2 years agoSet default validity flags.
Dr. Stephen Henson [Sun, 19 Feb 2017 18:47:16 +0000 (18:47 +0000)]
Set default validity flags.

Set default validity flags if signature algorithms extension
is not present. Preserve flags when checking chains.

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