Chromium Code Reviews| Index: openssl/ssl/s3_clnt.c |
| diff --git a/openssl/ssl/s3_clnt.c b/openssl/ssl/s3_clnt.c |
| index edbf6d0b88bf0c2329e7d33b8ad110c2ac8f93d3..251207229c416ee1603288070677cdb5d5c2e58d 100644 |
| --- a/openssl/ssl/s3_clnt.c |
| +++ b/openssl/ssl/s3_clnt.c |
| @@ -3414,12 +3414,21 @@ int ssl3_send_channel_id(SSL *s) |
| if (s->state != SSL3_ST_CW_CHANNEL_ID_A) |
| return ssl3_do_write(s, SSL3_RT_HANDSHAKE); |
| - if (s->tlsext_channel_id_private == NULL) |
| - { |
| - s->rwstate=SSL_CHANNEL_ID_LOOKUP; |
| - return (-1); |
| - } |
| - s->rwstate=SSL_NOTHING; |
| + if (!s->tlsext_channel_id_private && s->ctx->channel_id_cb) |
| + { |
| + EVP_PKEY* key = NULL; |
|
agl
2013/10/22 20:00:17
* on the right in OpenSSL.
|
| + s->ctx->channel_id_cb(s, &key); |
| + if (key != NULL) |
| + { |
| + s->tlsext_channel_id_private = EVP_PKEY_dup(key); |
| + } |
| + } |
| + if (!s->tlsext_channel_id_private) |
| + { |
| + s->rwstate=SSL_CHANNEL_ID_LOOKUP; |
| + return (-1); |
| + } |
| + s->rwstate=SSL_NOTHING; |
| d = (unsigned char *)s->init_buf->data; |
| *(d++)=SSL3_MT_ENCRYPTED_EXTENSIONS; |