| OLD | NEW |
| 1 From 68d651bb679cd9da8f162774c5dcf40aad5ae3f1 Mon Sep 17 00:00:00 2001 | 1 diff -up a/src/net/third_party/nss/ssl/ssl.h b/src/net/third_party/nss/ssl/ssl.h |
| 2 From: Adam Langley <agl@chromium.org> | 2 --- a/src/net/third_party/nss/ssl/ssl.h»2012-02-29 14:41:25.755295547 -0800 |
| 3 Date: Mon, 3 Oct 2011 12:25:10 -0400 | 3 +++ b/src/net/third_party/nss/ssl/ssl.h»2012-02-29 16:45:47.368569394 -0800 |
| 4 Subject: [PATCH] origin_bound_certs.patch | 4 @@ -168,6 +168,7 @@ SSL_IMPORT PRFileDesc *SSL_ImportFD(PRFi |
| 5 | 5 */ |
| 6 --- | 6 #define SSL_CBC_RANDOM_IV 23 |
| 7 mozilla/security/nss/lib/ssl/ssl.h | 1 + | 7 #define SSL_ENABLE_OCSP_STAPLING 24 /* Request OCSP stapling (client) */ |
| 8 mozilla/security/nss/lib/ssl/ssl3ext.c | 82 +++++++++++++++++++++++++++++++- | |
| 9 mozilla/security/nss/lib/ssl/sslimpl.h | 7 +++ | |
| 10 mozilla/security/nss/lib/ssl/sslsock.c | 13 +++++- | |
| 11 mozilla/security/nss/lib/ssl/sslt.h | 5 +- | |
| 12 5 files changed, 104 insertions(+), 4 deletions(-) | |
| 13 | |
| 14 diff --git a/mozilla/security/nss/lib/ssl/ssl.h b/mozilla/security/nss/lib/ssl/s
sl.h | |
| 15 index c32438d..1115fa9 100644 | |
| 16 --- a/mozilla/security/nss/lib/ssl/ssl.h | |
| 17 +++ b/mozilla/security/nss/lib/ssl/ssl.h | |
| 18 @@ -142,6 +142,7 @@ SSL_IMPORT PRFileDesc *SSL_ImportFD(PRFileDesc *model, PRFil
eDesc *fd); | |
| 19 #define SSL_ENABLE_OCSP_STAPLING 23 /* Request OCSP stapling (client) */ | |
| 20 #define SSL_ENABLE_CACHED_INFO 24 /* Enable TLS cached information */ | |
| 21 /* extension, off by default. */ | |
| 22 +#define SSL_ENABLE_OB_CERTS 25 /* Enable origin bound certs. */ | 8 +#define SSL_ENABLE_OB_CERTS 25 /* Enable origin bound certs. */ |
| 23 | 9 |
| 24 #ifdef SSL_DEPRECATED_FUNCTION | 10 #ifdef SSL_DEPRECATED_FUNCTION |
| 25 /* Old deprecated function names */ | 11 /* Old deprecated function names */ |
| 26 diff --git a/mozilla/security/nss/lib/ssl/ssl3ext.c b/mozilla/security/nss/lib/s
sl/ssl3ext.c | 12 diff -up a/src/net/third_party/nss/ssl/ssl3ext.c b/src/net/third_party/nss/ssl/s
sl3ext.c |
| 27 index 17898fb..887344b 100644 | 13 --- a/src/net/third_party/nss/ssl/ssl3ext.c» 2012-02-28 20:34:50.114663722 -0
800 |
| 28 --- a/mozilla/security/nss/lib/ssl/ssl3ext.c | 14 +++ b/src/net/third_party/nss/ssl/ssl3ext.c» 2012-02-29 17:05:21.684414824 -0
800 |
| 29 +++ b/mozilla/security/nss/lib/ssl/ssl3ext.c | 15 @@ -242,6 +242,7 @@ static const ssl3HelloExtensionHandler c |
| 30 @@ -237,6 +237,7 @@ static const ssl3HelloExtensionHandler clientHelloHandlers[]
= { | 16 { ssl_session_ticket_xtn, &ssl3_ServerHandleSessionTicketXtn }, |
| 31 { ssl_renegotiation_info_xtn, &ssl3_HandleRenegotiationInfoXtn }, | 17 { ssl_renegotiation_info_xtn, &ssl3_HandleRenegotiationInfoXtn }, |
| 32 { ssl_next_proto_neg_xtn, &ssl3_ServerHandleNextProtoNegoXtn }, | 18 { ssl_next_proto_nego_xtn, &ssl3_ServerHandleNextProtoNegoXtn }, |
| 33 { ssl_cached_info_xtn, &ssl3_ServerHandleCachedInfoXtn }, | |
| 34 + { ssl_ob_cert_xtn, &ssl3_ServerHandleOBCertXtn }, | 19 + { ssl_ob_cert_xtn, &ssl3_ServerHandleOBCertXtn }, |
| 35 { -1, NULL } | 20 { -1, NULL } |
| 36 }; | 21 }; |
| 37 | 22 |
| 38 @@ -250,6 +251,7 @@ static const ssl3HelloExtensionHandler serverHelloHandlersTL
S[] = { | 23 @@ -254,6 +255,7 @@ static const ssl3HelloExtensionHandler s |
| 39 { ssl_next_proto_neg_xtn, &ssl3_ClientHandleNextProtoNegoXtn }, | 24 { ssl_renegotiation_info_xtn, &ssl3_HandleRenegotiationInfoXtn }, |
| 40 { ssl_cached_info_xtn, &ssl3_ClientHandleCachedInfoXtn }, | 25 { ssl_next_proto_nego_xtn, &ssl3_ClientHandleNextProtoNegoXtn }, |
| 41 { ssl_cert_status_xtn, &ssl3_ClientHandleStatusRequestXtn }, | 26 { ssl_cert_status_xtn, &ssl3_ClientHandleStatusRequestXtn }, |
| 42 + { ssl_ob_cert_xtn, &ssl3_ClientHandleOBCertXtn }, | 27 + { ssl_ob_cert_xtn, &ssl3_ClientHandleOBCertXtn }, |
| 43 { -1, NULL } | 28 { -1, NULL } |
| 44 }; | 29 }; |
| 45 | 30 |
| 46 @@ -275,7 +277,8 @@ ssl3HelloExtensionSender clientHelloSendersTLS[SSL_MAX_EXTEN
SIONS] = { | 31 @@ -278,7 +280,8 @@ ssl3HelloExtensionSender clientHelloSend |
| 32 #endif |
| 47 { ssl_session_ticket_xtn, &ssl3_SendSessionTicketXtn }, | 33 { ssl_session_ticket_xtn, &ssl3_SendSessionTicketXtn }, |
| 48 { ssl_next_proto_neg_xtn, &ssl3_ClientSendNextProtoNegoXtn }, | 34 { ssl_next_proto_nego_xtn, &ssl3_ClientSendNextProtoNegoXtn }, |
| 49 { ssl_cached_info_xtn, &ssl3_ClientSendCachedInfoXtn }, | |
| 50 - { ssl_cert_status_xtn, &ssl3_ClientSendStatusRequestXtn } | 35 - { ssl_cert_status_xtn, &ssl3_ClientSendStatusRequestXtn } |
| 51 + { ssl_cert_status_xtn, &ssl3_ClientSendStatusRequestXtn }, | 36 + { ssl_cert_status_xtn, &ssl3_ClientSendStatusRequestXtn }, |
| 52 + { ssl_ob_cert_xtn, &ssl3_SendOBCertXtn } | 37 + { ssl_ob_cert_xtn, &ssl3_SendOBCertXtn } |
| 53 /* any extra entries will appear as { 0, NULL } */ | 38 /* any extra entries will appear as { 0, NULL } */ |
| 54 }; | 39 }; |
| 55 | 40 |
| 56 @@ -1973,3 +1976,80 @@ ssl3_HandleRenegotiationInfoXtn(sslSocket *ss, PRUint16 e
x_type, SECItem *data) | 41 @@ -1723,3 +1726,80 @@ ssl3_HandleRenegotiationInfoXtn(sslSocke |
| 57 return rv; | 42 return rv; |
| 58 } | 43 } |
| 59 | 44 |
| 60 +/* This sender is used by both the client and server. */ | 45 +/* This sender is used by both the client and server. */ |
| 61 +PRInt32 | 46 +PRInt32 |
| 62 +ssl3_SendOBCertXtn(sslSocket * ss, PRBool append, | 47 +ssl3_SendOBCertXtn(sslSocket * ss, PRBool append, |
| 63 + PRUint32 maxBytes) | 48 + PRUint32 maxBytes) |
| 64 +{ | 49 +{ |
| 65 + SECStatus rv; | 50 + SECStatus rv; |
| 66 + PRUint32 extension_length; | 51 + PRUint32 extension_length; |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 + | 112 + |
| 128 + /* The echoed extension must be empty. */ | 113 + /* The echoed extension must be empty. */ |
| 129 + if (data->len != 0) | 114 + if (data->len != 0) |
| 130 + return SECFailure; | 115 + return SECFailure; |
| 131 + | 116 + |
| 132 + /* Keep track of negotiated extensions. */ | 117 + /* Keep track of negotiated extensions. */ |
| 133 + ss->xtnData.negotiated[ss->xtnData.numNegotiated++] = ex_type; | 118 + ss->xtnData.negotiated[ss->xtnData.numNegotiated++] = ex_type; |
| 134 + | 119 + |
| 135 + return SECSuccess; | 120 + return SECSuccess; |
| 136 +} | 121 +} |
| 137 diff --git a/mozilla/security/nss/lib/ssl/sslimpl.h b/mozilla/security/nss/lib/s
sl/sslimpl.h | 122 diff -up a/src/net/third_party/nss/ssl/sslimpl.h b/src/net/third_party/nss/ssl/s
slimpl.h |
| 138 index f1e9a3e..973a3c9 100644 | 123 --- a/src/net/third_party/nss/ssl/sslimpl.h» 2012-02-28 20:34:50.114663722 -0
800 |
| 139 --- a/mozilla/security/nss/lib/ssl/sslimpl.h | 124 +++ b/src/net/third_party/nss/ssl/sslimpl.h» 2012-02-29 16:57:21.097919853 -0
800 |
| 140 +++ b/mozilla/security/nss/lib/ssl/sslimpl.h | 125 @@ -349,6 +349,7 @@ typedef struct sslOptionsStr { |
| 141 @@ -341,6 +341,7 @@ typedef struct sslOptionsStr { | |
| 142 unsigned int enableFalseStart : 1; /* 23 */ | 126 unsigned int enableFalseStart : 1; /* 23 */ |
| 143 unsigned int enableOCSPStapling : 1; /* 24 */ | 127 unsigned int cbcRandomIV : 1; /* 24 */ |
| 144 unsigned int enableCachedInfo : 1; /* 25 */ | 128 unsigned int enableOCSPStapling : 1; /* 25 */ |
| 145 + unsigned int enableOBCerts : 1; /* 26 */ | 129 + unsigned int enableOBCerts : 1; /* 26 */ |
| 146 } sslOptions; | 130 } sslOptions; |
| 147 | 131 |
| 148 typedef enum { sslHandshakingUndetermined = 0, | 132 typedef enum { sslHandshakingUndetermined = 0, |
| 149 @@ -1547,10 +1548,14 @@ extern SECStatus ssl3_ClientHandleCachedInfoXtn(sslSocke
t *ss, | 133 @@ -1563,8 +1564,12 @@ extern SECStatus ssl3_ClientHandleSessio |
| 150 PRUint16 ex_type, SECItem *data); | 134 PRUint16 ex_type, SECItem *data); |
| 151 extern SECStatus ssl3_ClientHandleStatusRequestXtn(sslSocket *ss, | 135 extern SECStatus ssl3_ClientHandleStatusRequestXtn(sslSocket *ss, |
| 152 PRUint16 ex_type, SECItem *data); | 136 PRUint16 ex_type, SECItem *data); |
| 153 +extern SECStatus ssl3_ClientHandleOBCertXtn(sslSocket *ss, | 137 +extern SECStatus ssl3_ClientHandleOBCertXtn(sslSocket *ss, |
| 154 + PRUint16 ex_type, SECItem *data); | 138 + PRUint16 ex_type, SECItem *data); |
| 155 extern SECStatus ssl3_ServerHandleSessionTicketXtn(sslSocket *ss, | 139 extern SECStatus ssl3_ServerHandleSessionTicketXtn(sslSocket *ss, |
| 156 PRUint16 ex_type, SECItem *data); | 140 PRUint16 ex_type, SECItem *data); |
| 157 extern SECStatus ssl3_ServerHandleNextProtoNegoXtn(sslSocket *ss, | |
| 158 PRUint16 ex_type, SECItem *data); | |
| 159 +extern SECStatus ssl3_ServerHandleOBCertXtn(sslSocket *ss, | 141 +extern SECStatus ssl3_ServerHandleOBCertXtn(sslSocket *ss, |
| 160 + PRUint16 ex_type, SECItem *data); | 142 + PRUint16 ex_type, SECItem *data); |
| 161 | 143 |
| 162 /* ClientHello and ServerHello extension senders. | 144 /* ClientHello and ServerHello extension senders. |
| 163 * Note that not all extension senders are exposed here; only those that | 145 * Note that not all extension senders are exposed here; only those that |
| 164 @@ -1570,6 +1575,8 @@ extern PRInt32 ssl3_ClientSendCachedInfoXtn(sslSocket *ss,
PRBool append, | 146 @@ -1580,6 +1585,8 @@ extern PRInt32 ssl3_ClientSendStatusRequ |
| 147 */ |
| 148 extern PRInt32 ssl3_SendServerNameXtn(sslSocket *ss, PRBool append, |
| 165 PRUint32 maxBytes); | 149 PRUint32 maxBytes); |
| 166 extern PRInt32 ssl3_ServerSendCachedInfoXtn(sslSocket *ss, PRBool append, | |
| 167 PRUint32 maxBytes); | |
| 168 +extern PRInt32 ssl3_SendOBCertXtn(sslSocket *ss, PRBool append, | 150 +extern PRInt32 ssl3_SendOBCertXtn(sslSocket *ss, PRBool append, |
| 169 + PRUint32 maxBytes); | 151 + PRUint32 maxBytes); |
| 170 | 152 |
| 171 /* Assigns new cert, cert chain and keys to ss->serverCerts | 153 /* Assigns new cert, cert chain and keys to ss->serverCerts |
| 172 * struct. If certChain is NULL, tries to find one. Aborts if | 154 * struct. If certChain is NULL, tries to find one. Aborts if |
| 173 diff --git a/mozilla/security/nss/lib/ssl/sslsock.c b/mozilla/security/nss/lib/s
sl/sslsock.c | 155 diff -up a/src/net/third_party/nss/ssl/sslsock.c b/src/net/third_party/nss/ssl/s
slsock.c |
| 174 index 11b53da..7d12bfe 100644 | 156 --- a/src/net/third_party/nss/ssl/sslsock.c» 2012-02-29 14:41:25.755295547 -0
800 |
| 175 --- a/mozilla/security/nss/lib/ssl/sslsock.c | 157 +++ b/src/net/third_party/nss/ssl/sslsock.c» 2012-02-29 17:03:16.272715683 -0
800 |
| 176 +++ b/mozilla/security/nss/lib/ssl/sslsock.c | |
| 177 @@ -187,6 +187,7 @@ static sslOptions ssl_defaults = { | 158 @@ -187,6 +187,7 @@ static sslOptions ssl_defaults = { |
| 178 PR_FALSE, /* enableFalseStart */ | 159 PR_FALSE, /* enableFalseStart */ |
| 160 PR_TRUE, /* cbcRandomIV */ |
| 179 PR_FALSE, /* enableOCSPStapling */ | 161 PR_FALSE, /* enableOCSPStapling */ |
| 180 PR_FALSE, /* enableCachedInfo */ | |
| 181 + PR_FALSE, /* enableOBCerts */ | 162 + PR_FALSE, /* enableOBCerts */ |
| 182 }; | 163 }; |
| 183 | 164 |
| 184 sslSessionIDLookupFunc ssl_sid_lookup; | 165 sslSessionIDLookupFunc ssl_sid_lookup; |
| 185 @@ -748,6 +749,10 @@ SSL_OptionSet(PRFileDesc *fd, PRInt32 which, PRBool on) | 166 @@ -750,6 +751,10 @@ SSL_OptionSet(PRFileDesc *fd, PRInt32 wh |
| 186 » ss->opt.enableCachedInfo = on; | 167 » ss->opt.enableOCSPStapling = on; |
| 187 break; | 168 break; |
| 188 | 169 |
| 189 + case SSL_ENABLE_OB_CERTS: | 170 + case SSL_ENABLE_OB_CERTS: |
| 190 + ss->opt.enableOBCerts = on; | 171 + ss->opt.enableOBCerts = on; |
| 191 + break; | 172 + break; |
| 192 + | 173 + |
| 193 default: | 174 default: |
| 194 PORT_SetError(SEC_ERROR_INVALID_ARGS); | 175 PORT_SetError(SEC_ERROR_INVALID_ARGS); |
| 195 rv = SECFailure; | 176 rv = SECFailure; |
| 196 @@ -813,7 +818,8 @@ SSL_OptionGet(PRFileDesc *fd, PRInt32 which, PRBool *pOn) | 177 @@ -816,6 +821,7 @@ SSL_OptionGet(PRFileDesc *fd, PRInt32 wh |
| 197 on = ss->opt.requireSafeNegotiation; break; | |
| 198 case SSL_ENABLE_FALSE_START: on = ss->opt.enableFalseStart; break; | 178 case SSL_ENABLE_FALSE_START: on = ss->opt.enableFalseStart; break; |
| 179 case SSL_CBC_RANDOM_IV: on = ss->opt.cbcRandomIV; break; |
| 199 case SSL_ENABLE_OCSP_STAPLING: on = ss->opt.enableOCSPStapling; break; | 180 case SSL_ENABLE_OCSP_STAPLING: on = ss->opt.enableOCSPStapling; break; |
| 200 - case SSL_ENABLE_CACHED_INFO: on = ss->opt.enableCachedInfo; break; | |
| 201 + case SSL_ENABLE_CACHED_INFO: on = ss->opt.enableCachedInfo; break; | |
| 202 + case SSL_ENABLE_OB_CERTS: on = ss->opt.enableOBCerts; break; | 181 + case SSL_ENABLE_OB_CERTS: on = ss->opt.enableOBCerts; break; |
| 203 | 182 |
| 204 default: | 183 default: |
| 205 PORT_SetError(SEC_ERROR_INVALID_ARGS); | 184 PORT_SetError(SEC_ERROR_INVALID_ARGS); |
| 206 @@ -869,6 +875,7 @@ SSL_OptionGetDefault(PRInt32 which, PRBool *pOn) | 185 @@ -873,6 +879,7 @@ SSL_OptionGetDefault(PRInt32 which, PRBo |
| 186 case SSL_ENABLE_OCSP_STAPLING: |
| 207 on = ssl_defaults.enableOCSPStapling; | 187 on = ssl_defaults.enableOCSPStapling; |
| 208 break; | 188 break; |
| 209 case SSL_ENABLE_CACHED_INFO: on = ssl_defaults.enableCachedInfo; break; | |
| 210 + case SSL_ENABLE_OB_CERTS: on = ssl_defaults.enableOBCerts; break; | 189 + case SSL_ENABLE_OB_CERTS: on = ssl_defaults.enableOBCerts; break; |
| 211 | 190 |
| 212 default: | 191 default: |
| 213 PORT_SetError(SEC_ERROR_INVALID_ARGS); | 192 PORT_SetError(SEC_ERROR_INVALID_ARGS); |
| 214 @@ -1024,6 +1031,10 @@ SSL_OptionSetDefault(PRInt32 which, PRBool on) | 193 @@ -1036,6 +1043,10 @@ SSL_OptionSetDefault(PRInt32 which, PRBo |
| 215 » ssl_defaults.enableCachedInfo = on; | 194 » ssl_defaults.enableOCSPStapling = on; |
| 216 break; | 195 break; |
| 217 | 196 |
| 218 + case SSL_ENABLE_OB_CERTS: | 197 + case SSL_ENABLE_OB_CERTS: |
| 219 + ssl_defaults.enableOBCerts = on; | 198 + ssl_defaults.enableOBCerts = on; |
| 220 + break; | 199 + break; |
| 221 + | 200 + |
| 222 default: | 201 default: |
| 223 PORT_SetError(SEC_ERROR_INVALID_ARGS); | 202 PORT_SetError(SEC_ERROR_INVALID_ARGS); |
| 224 return SECFailure; | 203 return SECFailure; |
| 225 diff --git a/mozilla/security/nss/lib/ssl/sslt.h b/mozilla/security/nss/lib/ssl/
sslt.h | 204 diff -up a/src/net/third_party/nss/ssl/sslt.h b/src/net/third_party/nss/ssl/sslt
.h |
| 226 index bca7496..5f852fe 100644 | 205 --- a/src/net/third_party/nss/ssl/sslt.h» 2012-02-28 19:26:04.057351342 -0
800 |
| 227 --- a/mozilla/security/nss/lib/ssl/sslt.h | 206 +++ b/src/net/third_party/nss/ssl/sslt.h» 2012-02-29 17:05:03.744171015 -0
800 |
| 228 +++ b/mozilla/security/nss/lib/ssl/sslt.h | 207 @@ -205,9 +205,10 @@ typedef enum { |
| 229 @@ -206,9 +206,10 @@ typedef enum { | 208 #endif |
| 230 ssl_session_ticket_xtn = 35, | 209 ssl_session_ticket_xtn = 35, |
| 231 ssl_next_proto_neg_xtn = 13172, | 210 ssl_next_proto_nego_xtn = 13172, |
| 232 ssl_cached_info_xtn = 13173, | |
| 233 - ssl_renegotiation_info_xtn = 0xff01 /* experimental number */ | 211 - ssl_renegotiation_info_xtn = 0xff01 /* experimental number */ |
| 234 + ssl_renegotiation_info_xtn = 0xff01, /* experimental number */ | 212 + ssl_renegotiation_info_xtn = 0xff01, /* experimental number */ |
| 235 + ssl_ob_cert_xtn = 13175 /* experimental number */ | 213 + ssl_ob_cert_xtn = 13175 /* experimental number */ |
| 236 } SSLExtensionType; | 214 } SSLExtensionType; |
| 237 | 215 |
| 238 -#define SSL_MAX_EXTENSIONS 8 | 216 -#define SSL_MAX_EXTENSIONS 7 |
| 239 +#define SSL_MAX_EXTENSIONS 9 | 217 +#define SSL_MAX_EXTENSIONS 8 |
| 240 | 218 |
| 241 #endif /* __sslt_h_ */ | 219 #endif /* __sslt_h_ */ |
| OLD | NEW |