summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_tlsext.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/ssl_tlsext.c')
-rw-r--r--src/lib/libssl/ssl_tlsext.c69
1 files changed, 68 insertions, 1 deletions
diff --git a/src/lib/libssl/ssl_tlsext.c b/src/lib/libssl/ssl_tlsext.c
index 1813d46f41..9db2d1ab41 100644
--- a/src/lib/libssl/ssl_tlsext.c
+++ b/src/lib/libssl/ssl_tlsext.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_tlsext.c,v 1.7 2017/08/12 21:17:03 doug Exp $ */ 1/* $OpenBSD: ssl_tlsext.c,v 1.8 2017/08/12 21:47:59 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org>
4 * Copyright (c) 2017 Doug Hogan <doug@openbsd.org> 4 * Copyright (c) 2017 Doug Hogan <doug@openbsd.org>
@@ -361,6 +361,64 @@ tlsext_ri_serverhello_parse(SSL *s, CBS *cbs, int *alert)
361} 361}
362 362
363/* 363/*
364 * Signature Algorithms - RFC 5246 section 7.4.1.4.1.
365 */
366int
367tlsext_sigalgs_clienthello_needs(SSL *s)
368{
369 return (TLS1_get_client_version(s) >= TLS1_2_VERSION);
370}
371
372int
373tlsext_sigalgs_clienthello_build(SSL *s, CBB *cbb)
374{
375 unsigned char *sigalgs_data;
376 size_t sigalgs_len;
377 CBB sigalgs;
378
379 tls12_get_req_sig_algs(s, &sigalgs_data, &sigalgs_len);
380
381 if (!CBB_add_u16_length_prefixed(cbb, &sigalgs))
382 return 0;
383 if (!CBB_add_bytes(&sigalgs, sigalgs_data, sigalgs_len))
384 return 0;
385 if (!CBB_flush(cbb))
386 return 0;
387
388 return 1;
389}
390
391int
392tlsext_sigalgs_clienthello_parse(SSL *s, CBS *cbs, int *alert)
393{
394 CBS sigalgs;
395
396 if (!CBS_get_u16_length_prefixed(cbs, &sigalgs))
397 return 0;
398
399 return tls1_process_sigalgs(s, &sigalgs);
400}
401
402int
403tlsext_sigalgs_serverhello_needs(SSL *s)
404{
405 return 0;
406}
407
408int
409tlsext_sigalgs_serverhello_build(SSL *s, CBB *cbb)
410{
411 return 0;
412}
413
414int
415tlsext_sigalgs_serverhello_parse(SSL *s, CBS *cbs, int *alert)
416{
417 /* As per the RFC, servers must not send this extension. */
418 return 0;
419}
420
421/*
364 * Server Name Indication - RFC 6066, section 3. 422 * Server Name Indication - RFC 6066, section 3.
365 */ 423 */
366int 424int
@@ -673,6 +731,15 @@ static struct tls_extension tls_extensions[] = {
673 .serverhello_build = tlsext_sessionticket_serverhello_build, 731 .serverhello_build = tlsext_sessionticket_serverhello_build,
674 .serverhello_parse = tlsext_sessionticket_serverhello_parse, 732 .serverhello_parse = tlsext_sessionticket_serverhello_parse,
675 }, 733 },
734 {
735 .type = TLSEXT_TYPE_signature_algorithms,
736 .clienthello_needs = tlsext_sigalgs_clienthello_needs,
737 .clienthello_build = tlsext_sigalgs_clienthello_build,
738 .clienthello_parse = tlsext_sigalgs_clienthello_parse,
739 .serverhello_needs = tlsext_sigalgs_serverhello_needs,
740 .serverhello_build = tlsext_sigalgs_serverhello_build,
741 .serverhello_parse = tlsext_sigalgs_serverhello_parse,
742 },
676}; 743};
677 744
678#define N_TLS_EXTENSIONS (sizeof(tls_extensions) / sizeof(*tls_extensions)) 745#define N_TLS_EXTENSIONS (sizeof(tls_extensions) / sizeof(*tls_extensions))