Propagate TLS 1.3 sigalgs through tls1_set_sigalgs()
authorBenjamin Kaduk <bkaduk@akamai.com>
Wed, 17 Jan 2018 17:55:29 +0000 (11:55 -0600)
committerBenjamin Kaduk <bkaduk@akamai.com>
Thu, 25 Jan 2018 18:05:57 +0000 (12:05 -0600)
commitfd5e1a8c4a77f28759048200cac3bc388f0ee067
tree9bc73b223b92007d9a12c361c78c37c4d80c4608
parentf55e99f7dd7e88d9758d2f8baf57a30a8c6e429d
Propagate TLS 1.3 sigalgs through tls1_set_sigalgs()

Our historical SSL{,_CTX}_set_sigalgs() APIs take an array of
NID pairs (hash and signature), and our parser for manually
specifying unified sigalgs (that do not necessarily correspond
to an actual signature+hash pair) was transiting via (the implementation
of) this historical API.  The TLS 1.3 draft-23 has introduced
signature schemes that have identical signature type and hash type,
differing only in the (RSA) public key OID, which prevents
the rsa_pss_pss_* schemes from being properly identified and
sent on the wire.

To fix the issue, parse sigalg strings directly into SIGALG_LOOKUP
objects, and pass around an array of uint16 wire protocol values
instead of NID pairs.  The old interface is retained for API
compatibility but will become less and less useful with time.

Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/5068)
ssl/ssl_locl.h
ssl/t1_lib.c