openssl.git
5 years agoMove SM2 algos to SM2 specific PKEY method
Jack Lloyd [Mon, 18 Jun 2018 19:51:56 +0000 (15:51 -0400)]
Move SM2 algos to SM2 specific PKEY method

Use EVP_PKEY_set_alias_type to access

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

5 years agoAdd EVP_PKEY_set_alias_type
Jack Lloyd [Mon, 18 Jun 2018 19:49:15 +0000 (15:49 -0400)]
Add EVP_PKEY_set_alias_type

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

5 years agoConvert our own check of OPENSSL_NO_DEPRECATED
Richard Levitte [Tue, 12 Jun 2018 16:31:57 +0000 (18:31 +0200)]
Convert our own check of OPENSSL_NO_DEPRECATED

... to the check OPENSSL_API_COMPAT < 0x10100000L, to correspond with
how it's declared.

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

5 years agoConfigure option 'no-deprecated' means '-DOPENSSL_API_COMPAT=0x10100000L'
Richard Levitte [Tue, 12 Jun 2018 16:26:37 +0000 (18:26 +0200)]
Configure option 'no-deprecated' means '-DOPENSSL_API_COMPAT=0x10100000L'

(that is, until 1.2.0 comes along)

Since we allow future deprecation (and that shouldn't be affected
by 'no-deprecated'), we need to distinguish what to have deprecated
on the value of OPENSSL_API_COMPAT, not the existence of
OPENSSL_NO_DEPRECATED.

Note that the macro OPENSSL_NO_DEPRECATED still exists, in case
someone still uses it.

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

5 years agoec/asm/ecp_nistz256-avx2.pl: harmonize clang version detection.
Andy Polyakov [Sat, 16 Jun 2018 14:25:40 +0000 (16:25 +0200)]
ec/asm/ecp_nistz256-avx2.pl: harmonize clang version detection.

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

5 years ago{chacha|poly1305}/asm/*-x64.pl: harmonize clang version detection.
Andy Polyakov [Sat, 16 Jun 2018 14:24:55 +0000 (16:24 +0200)]
{chacha|poly1305}/asm/*-x64.pl: harmonize clang version detection.

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

5 years agosha/asm/sha{1|256}-586.pl: harmonize clang version detection.
Andy Polyakov [Sat, 16 Jun 2018 14:23:34 +0000 (16:23 +0200)]
sha/asm/sha{1|256}-586.pl: harmonize clang version detection.

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

5 years agobn/asm/rsaz-avx2.pl: harmonize clang version detection.
Andy Polyakov [Sat, 16 Jun 2018 14:22:19 +0000 (16:22 +0200)]
bn/asm/rsaz-avx2.pl: harmonize clang version detection.

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

5 years agoFix error number clash
Matt Caswell [Mon, 18 Jun 2018 12:13:20 +0000 (13:13 +0100)]
Fix error number clash

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

5 years agoadd cast in test/x509aux.c preventing compiler warning for VC-WIN64A architecture
David von Oheimb [Thu, 10 May 2018 19:15:56 +0000 (21:15 +0200)]
add cast in test/x509aux.c preventing compiler warning for VC-WIN64A architecture

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

5 years agoadd 'unsupported cipher mode' diagnostics to evp_lib.c and genpkey.c
David von Oheimb [Thu, 10 May 2018 19:14:12 +0000 (21:14 +0200)]
add 'unsupported cipher mode' diagnostics to evp_lib.c and genpkey.c

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

5 years agoremove needless and misleading malloc failure error messages of PKCS12_SAFEBAG_create...
David von Oheimb [Thu, 10 May 2018 19:10:03 +0000 (21:10 +0200)]
remove needless and misleading malloc failure error messages of PKCS12_SAFEBAG_create_pkcs8_encrypt

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

5 years agoRAND_POOL: Add missing implementations for djgpp
Dr. Matthias St. Pierre [Tue, 5 Jun 2018 21:22:06 +0000 (23:22 +0200)]
RAND_POOL: Add missing implementations for djgpp

Calling the functions rand_pool_add_{additional,nonce}_data()
in crypto/rand/rand_lib.c with no implementation for djgpp/MSDOS
causees unresolved symbols when linking with djgpp.

Reported and fixed by Gisle Vanem

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

5 years agoRepair broken C syntax (missing close parens) in a manual page.
Eric S. Raymond [Fri, 15 Jun 2018 00:16:45 +0000 (20:16 -0400)]
Repair broken C syntax (missing close parens) in a manual page.

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/6491)

5 years agoUpdate certificates in demos/bio, demos/cms, demos/smime
David Cooper [Thu, 14 Jun 2018 23:10:30 +0000 (09:10 +1000)]
Update certificates in demos/bio, demos/cms, demos/smime

This commit replaces the certificates in demos/bio with new certificates that don't expire until 2118.
The same certificates appear in both demos/smime and demos/cms. This commit copies the new certificates and keys from demos/smime to demos/cms.
This PR Fixes #6412 by updating cacert.pem and signer.pem in the openssl/demos/smime/ directory. It also updates all of the keys with longer key lengths.

Reviewed-by: Paul Dale <paul.dale@oracle.com>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6483)

5 years agobn/bn_exp.c: harmonize all code paths with last commit.
Andy Polyakov [Wed, 13 Jun 2018 12:00:04 +0000 (14:00 +0200)]
bn/bn_exp.c: harmonize all code paths with last commit.

848113a30b431c2fe21ae8de2a366b9b6146fb92 added mitigation for a
side-channel attack. This commit extends approach to all code
paths for consistency.

[It also removes redundant white spaces introduced in last commit.]

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

5 years agoConfigurations/10-main.conf: improve Makefile readability on AIX and Solaris.
Andy Polyakov [Wed, 13 Jun 2018 09:10:27 +0000 (11:10 +0200)]
Configurations/10-main.conf: improve Makefile readability on AIX and Solaris.

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

5 years agoConfigurations/10-main.conf: move hpux-shared flags to hpux-common.
Andy Polyakov [Wed, 13 Jun 2018 08:57:51 +0000 (10:57 +0200)]
Configurations/10-main.conf: move hpux-shared flags to hpux-common.

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

5 years agoFix manpage problems
Eric S. Raymond [Tue, 12 Jun 2018 19:46:50 +0000 (21:46 +0200)]
Fix manpage problems

CLA: trivial

Reviewed-by: Kurt Roeckx <kurt@roeckx.be>
Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
GH: #6472

5 years agoAdd blinding to an ECDSA signature
Matt Caswell [Fri, 25 May 2018 11:10:13 +0000 (12:10 +0100)]
Add blinding to an ECDSA signature

Keegan Ryan (NCC Group) has demonstrated a side channel attack on an
ECDSA signature operation. During signing the signer calculates:

s:= k^-1 * (m + r * priv_key) mod order

The addition operation above provides a sufficient signal for a
flush+reload attack to derive the private key given sufficient signature
operations.

As a mitigation (based on a suggestion from Keegan) we add blinding to
the operation so that:

s := k^-1 * blind^-1 (blind * m + blind * r * priv_key) mod order

Since this attack is a localhost side channel only no CVE is assigned.

Reviewed-by: Rich Salz <rsalz@openssl.org>
5 years agoConfigurations/10-main.conf: replace -bexpall with explicit list on AIX.
Andy Polyakov [Mon, 11 Jun 2018 10:50:25 +0000 (12:50 +0200)]
Configurations/10-main.conf: replace -bexpall with explicit list on AIX.

[omit even -b:SRE, as it's implied by -G flag.]

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

5 years agoConfigurations/10-main.conf: AIX configs unification.
Andy Polyakov [Mon, 11 Jun 2018 10:43:50 +0000 (12:43 +0200)]
Configurations/10-main.conf: AIX configs unification.

Add aix-common template that covers even aix-shared from shared-info.pl,
add -bsymbolic to shared_ldflags.

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

5 years agoConfigure: add shared() to facilitate shared-specific flags.
Andy Polyakov [Mon, 11 Jun 2018 10:22:29 +0000 (12:22 +0200)]
Configure: add shared() to facilitate shared-specific flags.

This allows to specify flags specific to shared build, e.g.
'bin_lflags => shared("-Wl,-bsvr4")'.

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

5 years agoConfigurations/10-main.conf: reinstate soname on Solaris.
Andy Polyakov [Sun, 10 Jun 2018 16:06:15 +0000 (18:06 +0200)]
Configurations/10-main.conf: reinstate soname on Solaris.

The flag was apparently omitted in switch from Makefile.shared to
shared-info.pl. Do put it back! And in the process move all
solaris-shared flags from shared-info.pl to solaris-common.

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

5 years agodoc/man7/passphrase-encoding.pod: Make consistent
Richard Levitte [Tue, 12 Jun 2018 22:29:48 +0000 (00:29 +0200)]
doc/man7/passphrase-encoding.pod: Make consistent

The man name didn't match the file name, and some places had
'password' instead of 'pass phrase'.

Fixes #6474

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

5 years agoDocument return value of X509_add_ext
Viktor Dukhovni [Tue, 12 Jun 2018 15:51:53 +0000 (11:51 -0400)]
Document return value of X509_add_ext

and also X509_delete_ext()

Reviewed-by: Matt Caswell <matt@openssl.org>
5 years agoDeprecate DSA_sign_setup() in the documentation
Nicola Tuveri [Tue, 12 Jun 2018 01:27:28 +0000 (04:27 +0300)]
Deprecate DSA_sign_setup() in the documentation

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

5 years agoMake ck_errf.pl ignore commented out error generation
Richard Levitte [Tue, 12 Jun 2018 07:27:18 +0000 (09:27 +0200)]
Make ck_errf.pl ignore commented out error generation

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

5 years ago.travis.yml: give make update exit code meaning again
Richard Levitte [Tue, 12 Jun 2018 06:57:43 +0000 (08:57 +0200)]
.travis.yml: give make update exit code meaning again

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

5 years agomake errors: use the new util/ck_errf.pl options
Richard Levitte [Tue, 12 Jun 2018 06:56:21 +0000 (08:56 +0200)]
make errors: use the new util/ck_errf.pl options

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

5 years agoutil/ck_errf.pl: add functionality that brings it closer to util/mkerr.pl
Richard Levitte [Tue, 12 Jun 2018 06:53:14 +0000 (08:53 +0200)]
util/ck_errf.pl: add functionality that brings it closer to util/mkerr.pl

There was no option to give other config files than the default
crypto/err/openssl.ec, and yet it tried to check the errors generated
in engines (and failing, of course).

Also added the same '-internal' option as util/mkerr.pl.

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

5 years agoReject excessively large primes in DH key generation.
Guido Vranken [Mon, 11 Jun 2018 17:38:54 +0000 (19:38 +0200)]
Reject excessively large primes in DH key generation.

CVE-2018-0732

Signed-off-by: Guido Vranken <guidovranken@gmail.com>
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6457)

5 years agoutil/ck_errf.pl: add detection of unknown libcrypto and libssl libs
Richard Levitte [Mon, 11 Jun 2018 14:26:19 +0000 (16:26 +0200)]
util/ck_errf.pl: add detection of unknown libcrypto and libssl libs

The list of known libs are readily available in crypto/err/openssl.ec,
so lets use it to figure out if all error function codes belong to
known libs.

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

5 years agoexport data_dir of Test.pm, which was forgotten in #5928
David von Oheimb [Mon, 11 Jun 2018 09:02:57 +0000 (11:02 +0200)]
export data_dir of Test.pm, which was forgotten in #5928

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

5 years agoRemodel the if sequence for handling alerts
Matt Caswell [Fri, 8 Jun 2018 16:18:03 +0000 (17:18 +0100)]
Remodel the if sequence for handling alerts

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

5 years agoDon't send a warning alert in TLSv1.3
Matt Caswell [Fri, 18 May 2018 08:08:19 +0000 (09:08 +0100)]
Don't send a warning alert in TLSv1.3

TLSv1.3 ignores the alert level, so we should suppress sending of
warning only alerts.

Fixes #6211

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

5 years agoFix TLSv1.3 alert handling
Matt Caswell [Fri, 18 May 2018 08:07:42 +0000 (09:07 +0100)]
Fix TLSv1.3 alert handling

In TLSv1.3 we should ignore the severity level of an alert according to
the spec.

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

5 years agoVMS: have mkdef.pl parse lettered versions properly
Richard Levitte [Mon, 11 Jun 2018 08:33:09 +0000 (10:33 +0200)]
VMS: have mkdef.pl parse lettered versions properly

Fixes #6449

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

(cherry picked from commit 9a236d5a7158d38b933656cacc31dfd4ff4fcc08)

5 years agoAdd support for RSA-PSS to X509_certificate_type()
Todd Short [Wed, 6 Jun 2018 21:28:13 +0000 (17:28 -0400)]
Add support for RSA-PSS to X509_certificate_type()

Reviewed-by: Paul Dale <paul.dale@oracle.com>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6430)

5 years agobn/asm/sparcv9-mont.pl: iron another glitch in squaring code path.
Andy Polyakov [Fri, 8 Jun 2018 13:02:39 +0000 (15:02 +0200)]
bn/asm/sparcv9-mont.pl: iron another glitch in squaring code path.

This module is used only with odd input lengths, i.e. not used in normal
PKI cases, on contemporary processors. The problem was "illuminated" by
fuzzing tests.

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

5 years agorand/rand_unix.c: bypass DSO_global_lookup on ELF systems.
Andy Polyakov [Fri, 8 Jun 2018 09:38:22 +0000 (11:38 +0200)]
rand/rand_unix.c: bypass DSO_global_lookup on ELF systems.

If built with no-dso, syscall_random remains "blind" to getentropy.
Since it's possible to detect symbol availability on ELF-based systems
without involving DSO module, bypass it.

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Kurt Roeckx <kurt@roeckx.be>
(Merged from https://github.com/openssl/openssl/pull/6436)

5 years agorand/rand_unix.c: omit error from DSO_global_lookup.
Andy Polyakov [Fri, 8 Jun 2018 09:03:32 +0000 (11:03 +0200)]
rand/rand_unix.c: omit error from DSO_global_lookup.

If built with no-dso, DSO_global_lookup leaves "unsupported" message
in error queue. Since there is a fall-back code, it's unnecessary
distraction.

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Kurt Roeckx <kurt@roeckx.be>
(Merged from https://github.com/openssl/openssl/pull/6436)

5 years agoNew GOST identificators
Dmitry Belyavskiy [Fri, 8 Jun 2018 13:14:16 +0000 (09:14 -0400)]
New GOST identificators

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

5 years agoDocumentation for missing s_client/s_server options
Dmitry Belyavskiy [Wed, 9 May 2018 15:30:41 +0000 (18:30 +0300)]
Documentation for missing s_client/s_server options

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

5 years agoFix no-ec
Matt Caswell [Fri, 8 Jun 2018 10:20:34 +0000 (11:20 +0100)]
Fix no-ec

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

5 years agoConfigurations/*.conf: ios targets face-lift.
Andy Polyakov [Sun, 3 Jun 2018 18:47:54 +0000 (20:47 +0200)]
Configurations/*.conf: ios targets face-lift.

Move ios targets to 15-ios.conf and modernize by deploying xcrun.
This excuses user from looking for paths and setting environment
variables. [Thanks to @0neday for hint.]

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

5 years agomodes/ocb128.c: Reset nonce-dependent variables on setiv
Mingtao Yang [Wed, 6 Jun 2018 16:34:18 +0000 (09:34 -0700)]
modes/ocb128.c: Reset nonce-dependent variables on setiv

Upon a call to CRYPTO_ocb128_setiv, either directly on an OCB_CTX or
indirectly with EVP_CTRL_AEAD_SET_IVLEN, reset the nonce-dependent
variables in the OCB_CTX.

Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/6420)

5 years agochacha/asm/chacha-ppc.pl: fix big-endian build.
Andy Polyakov [Thu, 7 Jun 2018 12:04:34 +0000 (14:04 +0200)]
chacha/asm/chacha-ppc.pl: fix big-endian build.

It's kind of a "brown-bag" bug, as I did recognize the problem and
verified an ad-hoc solution, but failed to follow up with cross-checks
prior filing previous merge request.

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

5 years agoAdd a test for the raw private/public key getters
Matt Caswell [Fri, 1 Jun 2018 14:06:52 +0000 (15:06 +0100)]
Add a test for the raw private/public key getters

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

5 years agoAdd function for setting the EVP_PKEY_ASN1_METHOD raw key getter functions
Matt Caswell [Fri, 1 Jun 2018 13:30:50 +0000 (14:30 +0100)]
Add function for setting the EVP_PKEY_ASN1_METHOD raw key getter functions

EVP_PKEY_asn1_set_get_priv_key() and EVP_PKEY_asn1_set_get_pub_key()

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

5 years agoDocument the raw key getter functions
Matt Caswell [Fri, 1 Jun 2018 13:14:09 +0000 (14:14 +0100)]
Document the raw key getter functions

EVP_PKEY_get_raw_private_key() and EVP_PKEY_get_raw_public_key()

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

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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

5 years 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

5 years 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

5 years 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

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)

5 years 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)