| OLD | NEW |
| (Empty) |
| 1 diff -urN android-openssl.orig/openssl.config android-openssl/openssl.config | |
| 2 --- android-openssl.orig/openssl.config 2013-10-28 13:39:11.618121779 -0400 | |
| 3 +++ android-openssl/openssl.config 2013-10-28 14:40:32.642178484 -0400 | |
| 4 @@ -992,6 +992,7 @@ | |
| 5 handshake_cutthrough.patch \ | |
| 6 jsse.patch \ | |
| 7 channelid.patch \ | |
| 8 +channelidchromium.patch \ | |
| 9 eng_dyn_dirs.patch \ | |
| 10 fix_clang_build.patch \ | |
| 11 x509_hash_name_algorithm_change.patch \ | |
| 12 diff -urN android-openssl.orig/patches/channelidchromium.patch android-openssl/p
atches/channelidchromium.patch | |
| 13 --- android-openssl.orig/patches/channelidchromium.patch 1969-12-31 19:00
:00.000000000 -0500 | |
| 14 +++ android-openssl/patches/channelidchromium.patch 2013-10-28 14:34:42.9455
88394 -0400 | |
| 15 @@ -0,0 +1,264 @@ | |
| 16 +diff -burN android-openssl.orig/crypto/bio/bio.h android-openssl/crypto/bio/bio
.h | |
| 17 +--- android-openssl.orig/crypto/bio/bio.h 2013-02-11 16:26:04.000000000 +0
100 | |
| 18 ++++ android-openssl/crypto/bio/bio.h 2013-10-22 18:22:42.080337200 +0200 | |
| 19 +@@ -266,6 +266,9 @@ | |
| 20 + #define BIO_RR_CONNECT 0x02 | |
| 21 + /* Returned from the accept BIO when an accept would have blocked */ | |
| 22 + #define BIO_RR_ACCEPT 0x03 | |
| 23 ++/* Returned from the SSL bio when the channel id retrieval code cannot find th
e | |
| 24 ++ * private key. */ | |
| 25 ++#define BIO_RR_SSL_CHANNEL_ID_LOOKUP 0x04 | |
| 26 + | |
| 27 + /* These are passed by the BIO callback */ | |
| 28 + #define BIO_CB_FREE 0x01 | |
| 29 +diff -burN android-openssl.orig/include/openssl/bio.h android-openssl/include/o
penssl/bio.h | |
| 30 +--- android-openssl.orig/include/openssl/bio.h 2013-10-22 18:20:42.249270230 +0
200 | |
| 31 ++++ android-openssl/include/openssl/bio.h 2013-10-22 18:22:42.080337200 +0
200 | |
| 32 +@@ -266,6 +266,9 @@ | |
| 33 + #define BIO_RR_CONNECT 0x02 | |
| 34 + /* Returned from the accept BIO when an accept would have blocked */ | |
| 35 + #define BIO_RR_ACCEPT 0x03 | |
| 36 ++/* Returned from the SSL bio when the channel id retrieval code cannot find th
e | |
| 37 ++ * private key. */ | |
| 38 ++#define BIO_RR_SSL_CHANNEL_ID_LOOKUP 0x04 | |
| 39 + | |
| 40 + /* These are passed by the BIO callback */ | |
| 41 + #define BIO_CB_FREE 0x01 | |
| 42 +diff -burN android-openssl.orig/include/openssl/ssl.h android-openssl/include/o
penssl/ssl.h | |
| 43 +--- android-openssl.orig/include/openssl/ssl.h 2013-10-22 18:20:42.259270320 +0
200 | |
| 44 ++++ android-openssl/include/openssl/ssl.h 2013-10-22 18:24:14.771162612 +0
200 | |
| 45 +@@ -848,6 +848,9 @@ | |
| 46 + /* get client cert callback */ | |
| 47 + int (*client_cert_cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey); | |
| 48 + | |
| 49 ++ /* get channel id callback */ | |
| 50 ++ void (*channel_id_cb)(SSL *ssl, EVP_PKEY **pkey); | |
| 51 ++ | |
| 52 + /* cookie generate callback */ | |
| 53 + int (*app_gen_cookie_cb)(SSL *ssl, unsigned char *cookie, | |
| 54 + unsigned int *cookie_len); | |
| 55 +@@ -1043,6 +1046,8 @@ | |
| 56 + void (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(const SSL *ssl,int type,int va
l); | |
| 57 + void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, int (*client_cert_cb)(SSL *ssl,
X509 **x509, EVP_PKEY **pkey)); | |
| 58 + int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL *ssl, X509 **x509, EVP_PKE
Y **pkey); | |
| 59 ++void SSL_CTX_set_channel_id_cb(SSL_CTX *ctx, void (*channel_id_cb)(SSL *ssl, E
VP_PKEY **pkey)); | |
| 60 ++void (*SSL_CTX_get_channel_id_cb(SSL_CTX *ctx))(SSL *ssl, EVP_PKEY **pkey); | |
| 61 + #ifndef OPENSSL_NO_ENGINE | |
| 62 + int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); | |
| 63 + #endif | |
| 64 +@@ -1104,12 +1109,14 @@ | |
| 65 + #define SSL_WRITING 2 | |
| 66 + #define SSL_READING 3 | |
| 67 + #define SSL_X509_LOOKUP 4 | |
| 68 ++#define SSL_CHANNEL_ID_LOOKUP 5 | |
| 69 + | |
| 70 + /* These will only be used when doing non-blocking IO */ | |
| 71 + #define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) | |
| 72 + #define SSL_want_read(s) (SSL_want(s) == SSL_READING) | |
| 73 + #define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) | |
| 74 + #define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) | |
| 75 ++#define SSL_want_channel_id_lookup(s) (SSL_want(s) == SSL_CHANNEL_ID_LOOKUP) | |
| 76 + | |
| 77 + #define SSL_MAC_FLAG_READ_MAC_STREAM 1 | |
| 78 + #define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 | |
| 79 +@@ -1535,6 +1542,7 @@ | |
| 80 + #define SSL_ERROR_ZERO_RETURN 6 | |
| 81 + #define SSL_ERROR_WANT_CONNECT 7 | |
| 82 + #define SSL_ERROR_WANT_ACCEPT 8 | |
| 83 ++#define SSL_ERROR_WANT_CHANNEL_ID_LOOKUP 9 | |
| 84 + | |
| 85 + #define SSL_CTRL_NEED_TMP_RSA 1 | |
| 86 + #define SSL_CTRL_SET_TMP_RSA 2 | |
| 87 +@@ -1672,10 +1680,11 @@ | |
| 88 + #define SSL_set_tmp_ecdh(ssl,ecdh) \ | |
| 89 + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh) | |
| 90 + | |
| 91 +-/* SSL_enable_tls_channel_id configures a TLS server to accept TLS client | |
| 92 +- * IDs from clients. Returns 1 on success. */ | |
| 93 +-#define SSL_enable_tls_channel_id(ctx) \ | |
| 94 +- SSL_ctrl(ctx,SSL_CTRL_CHANNEL_ID,0,NULL) | |
| 95 ++/* SSL_enable_tls_channel_id either configures a TLS server to accept TLS clie
nt | |
| 96 ++ * IDs from clients, or configure a client to send TLS client IDs to server. | |
| 97 ++ * Returns 1 on success. */ | |
| 98 ++#define SSL_enable_tls_channel_id(s) \ | |
| 99 ++ SSL_ctrl(s,SSL_CTRL_CHANNEL_ID,0,NULL) | |
| 100 + /* SSL_set1_tls_channel_id configures a TLS client to send a TLS Channel ID to | |
| 101 + * compatible servers. private_key must be a P-256 EVP_PKEY*. Returns 1 on | |
| 102 + * success. */ | |
| 103 +diff -burN android-openssl.orig/ssl/bio_ssl.c android-openssl/ssl/bio_ssl.c | |
| 104 +--- android-openssl.orig/ssl/bio_ssl.c 2013-02-11 16:26:04.000000000 +0100 | |
| 105 ++++ android-openssl/ssl/bio_ssl.c 2013-10-22 18:22:42.090337290 +0200 | |
| 106 +@@ -206,6 +206,10 @@ | |
| 107 + BIO_set_retry_special(b); | |
| 108 + retry_reason=BIO_RR_SSL_X509_LOOKUP; | |
| 109 + break; | |
| 110 ++ case SSL_ERROR_WANT_CHANNEL_ID_LOOKUP: | |
| 111 ++ BIO_set_retry_special(b); | |
| 112 ++ retry_reason=BIO_RR_SSL_CHANNEL_ID_LOOKUP; | |
| 113 ++ break; | |
| 114 + case SSL_ERROR_WANT_ACCEPT: | |
| 115 + BIO_set_retry_special(b); | |
| 116 + retry_reason=BIO_RR_ACCEPT; | |
| 117 +@@ -280,6 +284,10 @@ | |
| 118 + BIO_set_retry_special(b); | |
| 119 + retry_reason=BIO_RR_SSL_X509_LOOKUP; | |
| 120 + break; | |
| 121 ++ case SSL_ERROR_WANT_CHANNEL_ID_LOOKUP: | |
| 122 ++ BIO_set_retry_special(b); | |
| 123 ++ retry_reason=BIO_RR_SSL_CHANNEL_ID_LOOKUP; | |
| 124 ++ break; | |
| 125 + case SSL_ERROR_WANT_CONNECT: | |
| 126 + BIO_set_retry_special(b); | |
| 127 + retry_reason=BIO_RR_CONNECT; | |
| 128 +diff -burN android-openssl.orig/ssl/s3_clnt.c android-openssl/ssl/s3_clnt.c | |
| 129 +--- android-openssl.orig/ssl/s3_clnt.c 2013-10-22 18:20:40.289252781 +0200 | |
| 130 ++++ android-openssl/ssl/s3_clnt.c 2013-10-22 18:22:42.090337290 +0200 | |
| 131 +@@ -3414,6 +3414,22 @@ | |
| 132 + if (s->state != SSL3_ST_CW_CHANNEL_ID_A) | |
| 133 + return ssl3_do_write(s, SSL3_RT_HANDSHAKE); | |
| 134 + | |
| 135 ++ if (!s->tlsext_channel_id_private && s->ctx->channel_id_cb) | |
| 136 ++ { | |
| 137 ++ EVP_PKEY *key = NULL; | |
| 138 ++ s->ctx->channel_id_cb(s, &key); | |
| 139 ++ if (key != NULL) | |
| 140 ++ { | |
| 141 ++ s->tlsext_channel_id_private = key; | |
| 142 ++ } | |
| 143 ++ } | |
| 144 ++ if (!s->tlsext_channel_id_private) | |
| 145 ++ { | |
| 146 ++ s->rwstate=SSL_CHANNEL_ID_LOOKUP; | |
| 147 ++ return (-1); | |
| 148 ++ } | |
| 149 ++ s->rwstate=SSL_NOTHING; | |
| 150 ++ | |
| 151 + d = (unsigned char *)s->init_buf->data; | |
| 152 + *(d++)=SSL3_MT_ENCRYPTED_EXTENSIONS; | |
| 153 + l2n3(2 + 2 + TLSEXT_CHANNEL_ID_SIZE, d); | |
| 154 +diff -burN android-openssl.orig/ssl/s3_lib.c android-openssl/ssl/s3_lib.c | |
| 155 +--- android-openssl.orig/ssl/s3_lib.c 2013-10-22 18:20:40.289252781 +0200 | |
| 156 ++++ android-openssl/ssl/s3_lib.c 2013-10-22 18:22:42.090337290 +0200 | |
| 157 +@@ -3358,8 +3358,6 @@ | |
| 158 + break; | |
| 159 + #endif | |
| 160 + case SSL_CTRL_CHANNEL_ID: | |
| 161 +- if (!s->server) | |
| 162 +- break; | |
| 163 + s->tlsext_channel_id_enabled = 1; | |
| 164 + ret = 1; | |
| 165 + break; | |
| 166 +@@ -3375,7 +3373,7 @@ | |
| 167 + } | |
| 168 + if (s->tlsext_channel_id_private) | |
| 169 + EVP_PKEY_free(s->tlsext_channel_id_private); | |
| 170 +- s->tlsext_channel_id_private = (EVP_PKEY*) parg; | |
| 171 ++ s->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg); | |
| 172 + ret = 1; | |
| 173 + break; | |
| 174 + | |
| 175 +@@ -3690,7 +3688,7 @@ | |
| 176 + } | |
| 177 + if (ctx->tlsext_channel_id_private) | |
| 178 + EVP_PKEY_free(ctx->tlsext_channel_id_private); | |
| 179 +- ctx->tlsext_channel_id_private = (EVP_PKEY*) parg; | |
| 180 ++ ctx->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg); | |
| 181 + break; | |
| 182 + | |
| 183 + default: | |
| 184 +diff -burN android-openssl.orig/ssl/ssl.h android-openssl/ssl/ssl.h | |
| 185 +--- android-openssl.orig/ssl/ssl.h 2013-10-22 18:20:40.299252871 +0200 | |
| 186 ++++ android-openssl/ssl/ssl.h 2013-10-22 18:24:24.121245879 +0200 | |
| 187 +@@ -848,6 +848,9 @@ | |
| 188 + /* get client cert callback */ | |
| 189 + int (*client_cert_cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey); | |
| 190 + | |
| 191 ++ /* get channel id callback */ | |
| 192 ++ void (*channel_id_cb)(SSL *ssl, EVP_PKEY **pkey); | |
| 193 ++ | |
| 194 + /* cookie generate callback */ | |
| 195 + int (*app_gen_cookie_cb)(SSL *ssl, unsigned char *cookie, | |
| 196 + unsigned int *cookie_len); | |
| 197 +@@ -1043,6 +1046,8 @@ | |
| 198 + void (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(const SSL *ssl,int type,int va
l); | |
| 199 + void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, int (*client_cert_cb)(SSL *ssl,
X509 **x509, EVP_PKEY **pkey)); | |
| 200 + int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL *ssl, X509 **x509, EVP_PKE
Y **pkey); | |
| 201 ++void SSL_CTX_set_channel_id_cb(SSL_CTX *ctx, void (*channel_id_cb)(SSL *ssl, E
VP_PKEY **pkey)); | |
| 202 ++void (*SSL_CTX_get_channel_id_cb(SSL_CTX *ctx))(SSL *ssl, EVP_PKEY **pkey); | |
| 203 + #ifndef OPENSSL_NO_ENGINE | |
| 204 + int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); | |
| 205 + #endif | |
| 206 +@@ -1104,12 +1109,14 @@ | |
| 207 + #define SSL_WRITING 2 | |
| 208 + #define SSL_READING 3 | |
| 209 + #define SSL_X509_LOOKUP 4 | |
| 210 ++#define SSL_CHANNEL_ID_LOOKUP 5 | |
| 211 + | |
| 212 + /* These will only be used when doing non-blocking IO */ | |
| 213 + #define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) | |
| 214 + #define SSL_want_read(s) (SSL_want(s) == SSL_READING) | |
| 215 + #define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) | |
| 216 + #define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) | |
| 217 ++#define SSL_want_channel_id_lookup(s) (SSL_want(s) == SSL_CHANNEL_ID_LOOKUP) | |
| 218 + | |
| 219 + #define SSL_MAC_FLAG_READ_MAC_STREAM 1 | |
| 220 + #define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 | |
| 221 +@@ -1535,6 +1542,7 @@ | |
| 222 + #define SSL_ERROR_ZERO_RETURN 6 | |
| 223 + #define SSL_ERROR_WANT_CONNECT 7 | |
| 224 + #define SSL_ERROR_WANT_ACCEPT 8 | |
| 225 ++#define SSL_ERROR_WANT_CHANNEL_ID_LOOKUP 9 | |
| 226 + | |
| 227 + #define SSL_CTRL_NEED_TMP_RSA 1 | |
| 228 + #define SSL_CTRL_SET_TMP_RSA 2 | |
| 229 +@@ -1672,10 +1680,11 @@ | |
| 230 + #define SSL_set_tmp_ecdh(ssl,ecdh) \ | |
| 231 + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh) | |
| 232 + | |
| 233 +-/* SSL_enable_tls_channel_id configures a TLS server to accept TLS client | |
| 234 +- * IDs from clients. Returns 1 on success. */ | |
| 235 +-#define SSL_enable_tls_channel_id(ctx) \ | |
| 236 +- SSL_ctrl(ctx,SSL_CTRL_CHANNEL_ID,0,NULL) | |
| 237 ++/* SSL_enable_tls_channel_id either configures a TLS server to accept TLS clie
nt | |
| 238 ++ * IDs from clients, or configure a client to send TLS client IDs to server. | |
| 239 ++ * Returns 1 on success. */ | |
| 240 ++#define SSL_enable_tls_channel_id(s) \ | |
| 241 ++ SSL_ctrl(s,SSL_CTRL_CHANNEL_ID,0,NULL) | |
| 242 + /* SSL_set1_tls_channel_id configures a TLS client to send a TLS Channel ID to | |
| 243 + * compatible servers. private_key must be a P-256 EVP_PKEY*. Returns 1 on | |
| 244 + * success. */ | |
| 245 +diff -burN android-openssl.orig/ssl/ssl_lib.c android-openssl/ssl/ssl_lib.c | |
| 246 +--- android-openssl.orig/ssl/ssl_lib.c 2013-10-22 18:20:40.299252871 +0200 | |
| 247 ++++ android-openssl/ssl/ssl_lib.c 2013-10-22 18:22:42.090337290 +0200 | |
| 248 +@@ -2561,6 +2561,10 @@ | |
| 249 + { | |
| 250 + return(SSL_ERROR_WANT_X509_LOOKUP); | |
| 251 + } | |
| 252 ++ if ((i < 0) && SSL_want_channel_id_lookup(s)) | |
| 253 ++ { | |
| 254 ++ return(SSL_ERROR_WANT_CHANNEL_ID_LOOKUP); | |
| 255 ++ } | |
| 256 + | |
| 257 + if (i == 0) | |
| 258 + { | |
| 259 +diff -burN android-openssl.orig/ssl/ssl_sess.c android-openssl/ssl/ssl_sess.c | |
| 260 +--- android-openssl.orig/ssl/ssl_sess.c 2013-10-22 18:20:40.289252781 +0
200 | |
| 261 ++++ android-openssl/ssl/ssl_sess.c 2013-10-22 18:22:42.090337290 +0200 | |
| 262 +@@ -1132,6 +1132,17 @@ | |
| 263 + return ctx->client_cert_cb; | |
| 264 + } | |
| 265 + | |
| 266 ++void SSL_CTX_set_channel_id_cb(SSL_CTX *ctx, | |
| 267 ++ void (*cb)(SSL *ssl, EVP_PKEY **pkey)) | |
| 268 ++ { | |
| 269 ++ ctx->channel_id_cb=cb; | |
| 270 ++ } | |
| 271 ++ | |
| 272 ++void (*SSL_CTX_get_channel_id_cb(SSL_CTX *ctx))(SSL * ssl, EVP_PKEY **pkey) | |
| 273 ++ { | |
| 274 ++ return ctx->channel_id_cb; | |
| 275 ++ } | |
| 276 ++ | |
| 277 + #ifndef OPENSSL_NO_ENGINE | |
| 278 + int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e) | |
| 279 + { | |
| OLD | NEW |