Adding HelloRetryRequest.
[Tests added by davidben.]
Change-Id: I0d54a4f8b8fe91b348ff22658d95340cdb48b089
Reviewed-on: https://boringssl-review.googlesource.com/8850
Reviewed-by: Steven Valdez <svaldez@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
diff --git a/ssl/internal.h b/ssl/internal.h
index eb8b879..0401791 100644
--- a/ssl/internal.h
+++ b/ssl/internal.h
@@ -873,6 +873,11 @@
SSL_ECDH_CTX *groups;
size_t groups_len;
+ /* retry_group is the group ID selected by the server in HelloRetryRequest. */
+ uint16_t retry_group;
+ /* key_share_bytes is the value of the previously sent KeyShare extension. */
+ uint8_t *key_share_bytes;
+ size_t key_share_bytes_len;
uint8_t *public_key;
size_t public_key_len;
@@ -882,6 +887,8 @@
SSL_HANDSHAKE *ssl_handshake_new(enum ssl_hs_wait_t (*do_handshake)(SSL *ssl));
+void ssl_handshake_clear_groups(SSL_HANDSHAKE *hs);
+
/* ssl_handshake_free releases all memory associated with |hs|. */
void ssl_handshake_free(SSL_HANDSHAKE *hs);
@@ -910,11 +917,14 @@
int ext_key_share_parse_serverhello(SSL *ssl, uint8_t **out_secret,
size_t *out_secret_len, uint8_t *out_alert,
CBS *contents);
-int ext_key_share_parse_clienthello(SSL *ssl, uint8_t **out_secret,
+int ext_key_share_parse_clienthello(SSL *ssl,
+ int *out_found, uint8_t **out_secret,
size_t *out_secret_len, uint8_t *out_alert,
CBS *contents);
int ext_key_share_add_serverhello(SSL *ssl, CBB *out);
+int ssl_add_client_hello_body(SSL *ssl, CBB *body);
+
/* SSLKEYLOGFILE functions. */
@@ -1228,6 +1238,9 @@
STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *ssl);
int ssl_verify_alarm_type(long type);
+int ssl_write_client_cipher_list(SSL *ssl, CBB *out, uint16_t min_version,
+ uint16_t max_version);
+
int ssl3_get_finished(SSL *ssl);
int ssl3_send_change_cipher_spec(SSL *ssl);
void ssl3_cleanup_key_block(SSL *ssl);
@@ -1331,6 +1344,13 @@
char ssl_early_callback_init(struct ssl_early_callback_ctx *ctx);
+/* tls1_get_grouplist sets |*out_group_ids| and |*out_group_ids_len| to the
+ * list of allowed group IDs. If |get_peer_groups| is non-zero, return the
+ * peer's group list. Otherwise, return the preferred list. */
+void tls1_get_grouplist(SSL *ssl, int get_peer_groups,
+ const uint16_t **out_group_ids,
+ size_t *out_group_ids_len);
+
/* tls1_check_group_id returns one if |group_id| is consistent with both our
* and the peer's group preferences. Note: if called as the client, only our
* preferences are checked; the peer (the server) does not send preferences. */