diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2014-08-10 12:08:08 +0100 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2014-08-28 18:09:05 +0100 |
commit | 0a4fe37fc6248e5efadcda34015eff122e01b1db (patch) | |
tree | ecc261ba3f2b21e6de4fb984535403c6668c0a3f /ssl/ssl_locl.h | |
parent | da67a0ae3462f6c6447ed841a9ec514077244b02 (diff) |
Custom extension revision.
Use the same structure for client and server custom extensions.
Add utility functions in new file t1_ext.c.
Use new utility functions to handle custom server and client extensions
and remove a lot of code duplication.
Reviewed-by: Emilia Käsper <emilia@openssl.org>
(cherry picked from commit ecf4d660902dcef6e0afc51d52926f00d409ee6b)
Conflicts:
ssl/ssl_lib.c
ssl/ssl_locl.h
ssl/t1_lib.c
Diffstat (limited to 'ssl/ssl_locl.h')
-rw-r--r-- | ssl/ssl_locl.h | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/ssl/ssl_locl.h b/ssl/ssl_locl.h index 655bca1231..f9a67b3832 100644 --- a/ssl/ssl_locl.h +++ b/ssl/ssl_locl.h @@ -528,17 +528,15 @@ typedef struct cert_pkey_st typedef struct { unsigned short ext_type; - custom_cli_ext_first_cb_fn fn1; - custom_cli_ext_second_cb_fn fn2; + custom_ext_add_cb add_cb; + custom_ext_parse_cb parse_cb; void *arg; -} custom_cli_ext_record; +} custom_ext_method; typedef struct { - unsigned short ext_type; - custom_srv_ext_first_cb_fn fn1; - custom_srv_ext_second_cb_fn fn2; - void *arg; -} custom_srv_ext_record; + custom_ext_method *meths; + size_t meths_count; +} custom_ext_methods; typedef struct cert_st { @@ -635,11 +633,9 @@ typedef struct cert_st unsigned char *ciphers_raw; size_t ciphers_rawlen; - /* Arrays containing the callbacks for custom TLS Extensions. */ - custom_cli_ext_record *custom_cli_ext_records; - size_t custom_cli_ext_records_count; - custom_srv_ext_record *custom_srv_ext_records; - size_t custom_srv_ext_records_count; + /* Custom extension methods for server and client */ + custom_ext_methods cli_ext; + custom_ext_methods srv_ext; int references; /* >1 only if SSL_copy_session_id is used */ } CERT; @@ -1382,6 +1378,21 @@ void tls_fips_digest_extra( int srp_verify_server_param(SSL *s, int *al); +/* t1_ext.c */ + +int custom_ext_parse(SSL *s, int server, + unsigned short ext_type, + const unsigned char *ext_data, + unsigned short ext_size, + int *al); +int custom_ext_add(SSL *s, int server, + unsigned char **pret, + unsigned char *limit, + int *al); + +int custom_exts_copy(custom_ext_methods *dst, const custom_ext_methods *src); +void custom_exts_free(custom_ext_methods *exts); + #else #define ssl_init_wbio_buffer SSL_test_functions()->p_ssl_init_wbio_buffer |