| Index: openssl/ssl/s3_clnt.c
|
| diff --git a/openssl/ssl/s3_clnt.c b/openssl/ssl/s3_clnt.c
|
| index edbf6d0b88bf0c2329e7d33b8ad110c2ac8f93d3..1c2731ffb5e71e5a4eb2442d398c955125fe7849 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;
|
| + s->ctx->channel_id_cb(s, &key);
|
| + if (key != NULL)
|
| + {
|
| + s->tlsext_channel_id_private = 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;
|
|
|