diff options
author | Benjamin Kaduk <bkaduk@akamai.com> | 2018-01-17 11:55:29 -0600 |
---|---|---|
committer | Benjamin Kaduk <bkaduk@akamai.com> | 2018-01-25 12:05:57 -0600 |
commit | fd5e1a8c4a77f28759048200cac3bc388f0ee067 (patch) | |
tree | 9bc73b223b92007d9a12c361c78c37c4d80c4608 /ssl/ssl_locl.h | |
parent | f55e99f7dd7e88d9758d2f8baf57a30a8c6e429d (diff) |
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)
Diffstat (limited to 'ssl/ssl_locl.h')
-rw-r--r-- | ssl/ssl_locl.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/ssl/ssl_locl.h b/ssl/ssl_locl.h index 369361c2a7..8d948fb479 100644 --- a/ssl/ssl_locl.h +++ b/ssl/ssl_locl.h @@ -2445,6 +2445,8 @@ __owur int tls_use_ticket(SSL *s); void ssl_set_sig_mask(uint32_t *pmask_a, SSL *s, int op); __owur int tls1_set_sigalgs_list(CERT *c, const char *str, int client); +__owur int tls1_set_raw_sigalgs(CERT *c, const uint16_t *psigs, size_t salglen, + int client); __owur int tls1_set_sigalgs(CERT *c, const int *salg, size_t salglen, int client); int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain, |