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; |