summaryrefslogtreecommitdiff
path: root/src/lib/libssl/t1_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/t1_lib.c')
-rw-r--r--src/lib/libssl/t1_lib.c63
1 files changed, 13 insertions, 50 deletions
diff --git a/src/lib/libssl/t1_lib.c b/src/lib/libssl/t1_lib.c
index 63d401c337..e27a7d1a59 100644
--- a/src/lib/libssl/t1_lib.c
+++ b/src/lib/libssl/t1_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: t1_lib.c,v 1.129 2017/08/12 21:17:03 doug Exp $ */ 1/* $OpenBSD: t1_lib.c,v 1.130 2017/08/12 21:47:59 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -654,14 +654,11 @@ static unsigned char tls12_sigalgs[] = {
654 TLSEXT_hash_sha1, TLSEXT_signature_ecdsa, 654 TLSEXT_hash_sha1, TLSEXT_signature_ecdsa,
655}; 655};
656 656
657int 657void
658tls12_get_req_sig_algs(SSL *s, unsigned char *p) 658tls12_get_req_sig_algs(SSL *s, unsigned char **sigalgs, size_t *sigalgs_len)
659{ 659{
660 size_t slen = sizeof(tls12_sigalgs); 660 *sigalgs = tls12_sigalgs;
661 661 *sigalgs_len = sizeof(tls12_sigalgs);
662 if (p)
663 memcpy(p, tls12_sigalgs, slen);
664 return (int)slen;
665} 662}
666 663
667unsigned char * 664unsigned char *
@@ -690,17 +687,6 @@ ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned char *limit)
690 return NULL; 687 return NULL;
691 ret += len; 688 ret += len;
692 689
693 if (TLS1_get_client_version(s) >= TLS1_2_VERSION) {
694 if ((size_t)(limit - ret) < sizeof(tls12_sigalgs) + 6)
695 return NULL;
696
697 s2n(TLSEXT_TYPE_signature_algorithms, ret);
698 s2n(sizeof(tls12_sigalgs) + 2, ret);
699 s2n(sizeof(tls12_sigalgs), ret);
700 memcpy(ret, tls12_sigalgs, sizeof(tls12_sigalgs));
701 ret += sizeof(tls12_sigalgs);
702 }
703
704 if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp && 690 if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp &&
705 s->version != DTLS1_VERSION) { 691 s->version != DTLS1_VERSION) {
706 int i; 692 int i;
@@ -991,7 +977,6 @@ ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
991 unsigned short len; 977 unsigned short len;
992 unsigned char *data = *p; 978 unsigned char *data = *p;
993 unsigned char *end = d + n; 979 unsigned char *end = d + n;
994 int sigalg_seen = 0;
995 CBS cbs; 980 CBS cbs;
996 981
997 s->internal->servername_done = 0; 982 s->internal->servername_done = 0;
@@ -1026,24 +1011,7 @@ ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
1026 if (!tlsext_clienthello_parse_one(s, &cbs, type, al)) 1011 if (!tlsext_clienthello_parse_one(s, &cbs, type, al))
1027 return 0; 1012 return 0;
1028 1013
1029 if (type == TLSEXT_TYPE_signature_algorithms) { 1014 if (type == TLSEXT_TYPE_status_request &&
1030 int dsize;
1031 if (sigalg_seen || size < 2) {
1032 *al = SSL_AD_DECODE_ERROR;
1033 return 0;
1034 }
1035 sigalg_seen = 1;
1036 n2s(data, dsize);
1037 size -= 2;
1038 if (dsize != size || dsize & 1) {
1039 *al = SSL_AD_DECODE_ERROR;
1040 return 0;
1041 }
1042 if (!tls1_process_sigalgs(s, data, dsize)) {
1043 *al = SSL_AD_DECODE_ERROR;
1044 return 0;
1045 }
1046 } else if (type == TLSEXT_TYPE_status_request &&
1047 s->version != DTLS1_VERSION) { 1015 s->version != DTLS1_VERSION) {
1048 1016
1049 if (size < 5) { 1017 if (size < 5) {
@@ -1830,36 +1798,30 @@ tls12_get_hash(unsigned char hash_alg)
1830/* Set preferred digest for each key type */ 1798/* Set preferred digest for each key type */
1831 1799
1832int 1800int
1833tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize) 1801tls1_process_sigalgs(SSL *s, CBS *cbs)
1834{ 1802{
1835 int idx;
1836 const EVP_MD *md; 1803 const EVP_MD *md;
1837 CERT *c = s->cert; 1804 CERT *c = s->cert;
1838 CBS cbs; 1805 int idx;
1839 1806
1840 /* Extension ignored for inappropriate versions */ 1807 /* Extension ignored for inappropriate versions */
1841 if (!SSL_USE_SIGALGS(s)) 1808 if (!SSL_USE_SIGALGS(s))
1842 return 1; 1809 return 1;
1843 1810
1844 /* Should never happen */ 1811 /* Should never happen */
1845 if (!c || dsize < 0) 1812 if (c == NULL)
1846 return 0; 1813 return 0;
1847 1814
1848 CBS_init(&cbs, data, dsize);
1849
1850 c->pkeys[SSL_PKEY_RSA_SIGN].digest = NULL; 1815 c->pkeys[SSL_PKEY_RSA_SIGN].digest = NULL;
1851 c->pkeys[SSL_PKEY_RSA_ENC].digest = NULL; 1816 c->pkeys[SSL_PKEY_RSA_ENC].digest = NULL;
1852 c->pkeys[SSL_PKEY_ECC].digest = NULL; 1817 c->pkeys[SSL_PKEY_ECC].digest = NULL;
1853 c->pkeys[SSL_PKEY_GOST01].digest = NULL; 1818 c->pkeys[SSL_PKEY_GOST01].digest = NULL;
1854 1819
1855 while (CBS_len(&cbs) > 0) { 1820 while (CBS_len(cbs) > 0) {
1856 uint8_t hash_alg, sig_alg; 1821 uint8_t hash_alg, sig_alg;
1857 1822
1858 if (!CBS_get_u8(&cbs, &hash_alg) || 1823 if (!CBS_get_u8(cbs, &hash_alg) || !CBS_get_u8(cbs, &sig_alg))
1859 !CBS_get_u8(&cbs, &sig_alg)) {
1860 /* Should never happen */
1861 return 0; 1824 return 0;
1862 }
1863 1825
1864 switch (sig_alg) { 1826 switch (sig_alg) {
1865 case TLSEXT_signature_rsa: 1827 case TLSEXT_signature_rsa:
@@ -1888,7 +1850,8 @@ tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize)
1888 1850
1889 } 1851 }
1890 1852
1891 /* Set any remaining keys to default values. NOTE: if alg is not 1853 /*
1854 * Set any remaining keys to default values. NOTE: if alg is not
1892 * supported it stays as NULL. 1855 * supported it stays as NULL.
1893 */ 1856 */
1894 if (!c->pkeys[SSL_PKEY_RSA_SIGN].digest) { 1857 if (!c->pkeys[SSL_PKEY_RSA_SIGN].digest) {