diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libssl/s3_both.c | 668 | ||||
| -rw-r--r-- | src/lib/libssl/s3_cbc.c | 445 | ||||
| -rw-r--r-- | src/lib/libssl/s3_lib.c | 5293 | ||||
| -rw-r--r-- | src/lib/libssl/s3_pkt.c | 1223 | ||||
| -rw-r--r-- | src/lib/libssl/src/ssl/s3_both.c | 668 | ||||
| -rw-r--r-- | src/lib/libssl/src/ssl/s3_cbc.c | 445 | ||||
| -rw-r--r-- | src/lib/libssl/src/ssl/s3_enc.c | 932 | ||||
| -rw-r--r-- | src/lib/libssl/src/ssl/s3_lib.c | 5293 | ||||
| -rw-r--r-- | src/lib/libssl/src/ssl/s3_meth.c | 18 | ||||
| -rw-r--r-- | src/lib/libssl/src/ssl/s3_pkt.c | 1223 |
10 files changed, 7852 insertions, 8356 deletions
diff --git a/src/lib/libssl/s3_both.c b/src/lib/libssl/s3_both.c index 77f825af31..b2fd5c6f80 100644 --- a/src/lib/libssl/s3_both.c +++ b/src/lib/libssl/s3_both.c | |||
| @@ -125,82 +125,81 @@ | |||
| 125 | #include <openssl/x509.h> | 125 | #include <openssl/x509.h> |
| 126 | 126 | ||
| 127 | /* send s->init_buf in records of type 'type' (SSL3_RT_HANDSHAKE or SSL3_RT_CHANGE_CIPHER_SPEC) */ | 127 | /* send s->init_buf in records of type 'type' (SSL3_RT_HANDSHAKE or SSL3_RT_CHANGE_CIPHER_SPEC) */ |
| 128 | int ssl3_do_write(SSL *s, int type) | 128 | int |
| 129 | { | 129 | ssl3_do_write(SSL *s, int type) |
| 130 | { | ||
| 130 | int ret; | 131 | int ret; |
| 131 | 132 | ||
| 132 | ret=ssl3_write_bytes(s,type,&s->init_buf->data[s->init_off], | 133 | ret = ssl3_write_bytes(s, type, &s->init_buf->data[s->init_off], |
| 133 | s->init_num); | 134 | s->init_num); |
| 134 | if (ret < 0) return(-1); | 135 | if (ret < 0) |
| 136 | return (-1); | ||
| 135 | if (type == SSL3_RT_HANDSHAKE) | 137 | if (type == SSL3_RT_HANDSHAKE) |
| 136 | /* should not be done for 'Hello Request's, but in that case | 138 | /* should not be done for 'Hello Request's, but in that case |
| 137 | * we'll ignore the result anyway */ | 139 | * we'll ignore the result anyway */ |
| 138 | ssl3_finish_mac(s,(unsigned char *)&s->init_buf->data[s->init_off],ret); | 140 | ssl3_finish_mac(s,(unsigned char *)&s->init_buf->data[s->init_off], ret); |
| 139 | 141 | ||
| 140 | if (ret == s->init_num) | 142 | if (ret == s->init_num) { |
| 141 | { | ||
| 142 | if (s->msg_callback) | 143 | if (s->msg_callback) |
| 143 | s->msg_callback(1, s->version, type, s->init_buf->data, (size_t)(s->init_off + s->init_num), s, s->msg_callback_arg); | 144 | s->msg_callback(1, s->version, type, s->init_buf->data, (size_t)(s->init_off + s->init_num), s, s->msg_callback_arg); |
| 144 | return(1); | 145 | return (1); |
| 145 | } | ||
| 146 | s->init_off+=ret; | ||
| 147 | s->init_num-=ret; | ||
| 148 | return(0); | ||
| 149 | } | 146 | } |
| 147 | s->init_off += ret; | ||
| 148 | s->init_num -= ret; | ||
| 149 | return (0); | ||
| 150 | } | ||
| 150 | 151 | ||
| 151 | int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen) | 152 | int |
| 152 | { | 153 | ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen) |
| 153 | unsigned char *p,*d; | 154 | { |
| 155 | unsigned char *p, *d; | ||
| 154 | int i; | 156 | int i; |
| 155 | unsigned long l; | 157 | unsigned long l; |
| 156 | 158 | ||
| 157 | if (s->state == a) | 159 | if (s->state == a) { |
| 158 | { | 160 | d = (unsigned char *)s->init_buf->data; |
| 159 | d=(unsigned char *)s->init_buf->data; | 161 | p = &(d[4]); |
| 160 | p= &(d[4]); | ||
| 161 | 162 | ||
| 162 | i=s->method->ssl3_enc->final_finish_mac(s, | 163 | i = s->method->ssl3_enc->final_finish_mac(s, |
| 163 | sender,slen,s->s3->tmp.finish_md); | 164 | sender, slen, s->s3->tmp.finish_md); |
| 164 | if (i == 0) | 165 | if (i == 0) |
| 165 | return 0; | 166 | return 0; |
| 166 | s->s3->tmp.finish_md_len = i; | 167 | s->s3->tmp.finish_md_len = i; |
| 167 | memcpy(p, s->s3->tmp.finish_md, i); | 168 | memcpy(p, s->s3->tmp.finish_md, i); |
| 168 | p+=i; | 169 | p += i; |
| 169 | l=i; | 170 | l = i; |
| 170 | 171 | ||
| 171 | /* Copy the finished so we can use it for | 172 | /* Copy the finished so we can use it for |
| 172 | renegotiation checks */ | 173 | renegotiation checks */ |
| 173 | if(s->type == SSL_ST_CONNECT) | 174 | if (s->type == SSL_ST_CONNECT) { |
| 174 | { | 175 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); |
| 175 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | 176 | memcpy(s->s3->previous_client_finished, |
| 176 | memcpy(s->s3->previous_client_finished, | 177 | s->s3->tmp.finish_md, i); |
| 177 | s->s3->tmp.finish_md, i); | 178 | s->s3->previous_client_finished_len = i; |
| 178 | s->s3->previous_client_finished_len=i; | 179 | } else { |
| 179 | } | 180 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); |
| 180 | else | 181 | memcpy(s->s3->previous_server_finished, |
| 181 | { | 182 | s->s3->tmp.finish_md, i); |
| 182 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | 183 | s->s3->previous_server_finished_len = i; |
| 183 | memcpy(s->s3->previous_server_finished, | ||
| 184 | s->s3->tmp.finish_md, i); | ||
| 185 | s->s3->previous_server_finished_len=i; | ||
| 186 | } | ||
| 187 | |||
| 188 | *(d++)=SSL3_MT_FINISHED; | ||
| 189 | l2n3(l,d); | ||
| 190 | s->init_num=(int)l+4; | ||
| 191 | s->init_off=0; | ||
| 192 | |||
| 193 | s->state=b; | ||
| 194 | } | 184 | } |
| 195 | 185 | ||
| 196 | /* SSL3_ST_SEND_xxxxxx_HELLO_B */ | 186 | *(d++) = SSL3_MT_FINISHED; |
| 197 | return(ssl3_do_write(s,SSL3_RT_HANDSHAKE)); | 187 | l2n3(l, d); |
| 188 | s->init_num = (int)l + 4; | ||
| 189 | s->init_off = 0; | ||
| 190 | |||
| 191 | s->state = b; | ||
| 198 | } | 192 | } |
| 199 | 193 | ||
| 194 | /* SSL3_ST_SEND_xxxxxx_HELLO_B */ | ||
| 195 | return (ssl3_do_write(s, SSL3_RT_HANDSHAKE)); | ||
| 196 | } | ||
| 197 | |||
| 200 | #ifndef OPENSSL_NO_NEXTPROTONEG | 198 | #ifndef OPENSSL_NO_NEXTPROTONEG |
| 201 | /* ssl3_take_mac calculates the Finished MAC for the handshakes messages seen to far. */ | 199 | /* ssl3_take_mac calculates the Finished MAC for the handshakes messages seen to far. */ |
| 202 | static void ssl3_take_mac(SSL *s) | 200 | static void |
| 203 | { | 201 | ssl3_take_mac(SSL *s) |
| 202 | { | ||
| 204 | const char *sender; | 203 | const char *sender; |
| 205 | int slen; | 204 | int slen; |
| 206 | /* If no new cipher setup return immediately: other functions will | 205 | /* If no new cipher setup return immediately: other functions will |
| @@ -208,25 +207,23 @@ static void ssl3_take_mac(SSL *s) | |||
| 208 | */ | 207 | */ |
| 209 | if (s->s3->tmp.new_cipher == NULL) | 208 | if (s->s3->tmp.new_cipher == NULL) |
| 210 | return; | 209 | return; |
| 211 | if (s->state & SSL_ST_CONNECT) | 210 | if (s->state & SSL_ST_CONNECT) { |
| 212 | { | 211 | sender = s->method->ssl3_enc->server_finished_label; |
| 213 | sender=s->method->ssl3_enc->server_finished_label; | 212 | slen = s->method->ssl3_enc->server_finished_label_len; |
| 214 | slen=s->method->ssl3_enc->server_finished_label_len; | 213 | } else { |
| 215 | } | 214 | sender = s->method->ssl3_enc->client_finished_label; |
| 216 | else | 215 | slen = s->method->ssl3_enc->client_finished_label_len; |
| 217 | { | 216 | } |
| 218 | sender=s->method->ssl3_enc->client_finished_label; | ||
| 219 | slen=s->method->ssl3_enc->client_finished_label_len; | ||
| 220 | } | ||
| 221 | 217 | ||
| 222 | s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s, | 218 | s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s, |
| 223 | sender,slen,s->s3->tmp.peer_finish_md); | 219 | sender, slen, s->s3->tmp.peer_finish_md); |
| 224 | } | 220 | } |
| 225 | #endif | 221 | #endif |
| 226 | 222 | ||
| 227 | int ssl3_get_finished(SSL *s, int a, int b) | 223 | int |
| 228 | { | 224 | ssl3_get_finished(SSL *s, int a, int b) |
| 229 | int al,i,ok; | 225 | { |
| 226 | int al, i, ok; | ||
| 230 | long n; | 227 | long n; |
| 231 | unsigned char *p; | 228 | unsigned char *p; |
| 232 | 229 | ||
| @@ -236,64 +233,55 @@ int ssl3_get_finished(SSL *s, int a, int b) | |||
| 236 | */ | 233 | */ |
| 237 | #endif | 234 | #endif |
| 238 | 235 | ||
| 239 | n=s->method->ssl_get_message(s, | 236 | n = s->method->ssl_get_message(s, a, b, SSL3_MT_FINISHED, |
| 240 | a, | 237 | 64, /* should actually be 36+4 :-) */ &ok); |
| 241 | b, | ||
| 242 | SSL3_MT_FINISHED, | ||
| 243 | 64, /* should actually be 36+4 :-) */ | ||
| 244 | &ok); | ||
| 245 | 238 | ||
| 246 | if (!ok) return((int)n); | 239 | if (!ok) |
| 240 | return ((int)n); | ||
| 247 | 241 | ||
| 248 | /* If this occurs, we have missed a message */ | 242 | /* If this occurs, we have missed a message */ |
| 249 | if (!s->s3->change_cipher_spec) | 243 | if (!s->s3->change_cipher_spec) { |
| 250 | { | 244 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 251 | al=SSL_AD_UNEXPECTED_MESSAGE; | 245 | SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_GOT_A_FIN_BEFORE_A_CCS); |
| 252 | SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_GOT_A_FIN_BEFORE_A_CCS); | ||
| 253 | goto f_err; | 246 | goto f_err; |
| 254 | } | 247 | } |
| 255 | s->s3->change_cipher_spec=0; | 248 | s->s3->change_cipher_spec = 0; |
| 256 | 249 | ||
| 257 | p = (unsigned char *)s->init_msg; | 250 | p = (unsigned char *)s->init_msg; |
| 258 | i = s->s3->tmp.peer_finish_md_len; | 251 | i = s->s3->tmp.peer_finish_md_len; |
| 259 | 252 | ||
| 260 | if (i != n) | 253 | if (i != n) { |
| 261 | { | 254 | al = SSL_AD_DECODE_ERROR; |
| 262 | al=SSL_AD_DECODE_ERROR; | 255 | SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_BAD_DIGEST_LENGTH); |
| 263 | SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_BAD_DIGEST_LENGTH); | ||
| 264 | goto f_err; | 256 | goto f_err; |
| 265 | } | 257 | } |
| 266 | 258 | ||
| 267 | if (CRYPTO_memcmp(p, s->s3->tmp.peer_finish_md, i) != 0) | 259 | if (CRYPTO_memcmp(p, s->s3->tmp.peer_finish_md, i) != 0) { |
| 268 | { | 260 | al = SSL_AD_DECRYPT_ERROR; |
| 269 | al=SSL_AD_DECRYPT_ERROR; | 261 | SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_DIGEST_CHECK_FAILED); |
| 270 | SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_DIGEST_CHECK_FAILED); | ||
| 271 | goto f_err; | 262 | goto f_err; |
| 272 | } | 263 | } |
| 273 | 264 | ||
| 274 | /* Copy the finished so we can use it for | 265 | /* Copy the finished so we can use it for |
| 275 | renegotiation checks */ | 266 | renegotiation checks */ |
| 276 | if(s->type == SSL_ST_ACCEPT) | 267 | if (s->type == SSL_ST_ACCEPT) { |
| 277 | { | 268 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); |
| 278 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | 269 | memcpy(s->s3->previous_client_finished, |
| 279 | memcpy(s->s3->previous_client_finished, | 270 | s->s3->tmp.peer_finish_md, i); |
| 280 | s->s3->tmp.peer_finish_md, i); | 271 | s->s3->previous_client_finished_len = i; |
| 281 | s->s3->previous_client_finished_len=i; | 272 | } else { |
| 282 | } | 273 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); |
| 283 | else | 274 | memcpy(s->s3->previous_server_finished, |
| 284 | { | 275 | s->s3->tmp.peer_finish_md, i); |
| 285 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | 276 | s->s3->previous_server_finished_len = i; |
| 286 | memcpy(s->s3->previous_server_finished, | ||
| 287 | s->s3->tmp.peer_finish_md, i); | ||
| 288 | s->s3->previous_server_finished_len=i; | ||
| 289 | } | ||
| 290 | |||
| 291 | return(1); | ||
| 292 | f_err: | ||
| 293 | ssl3_send_alert(s,SSL3_AL_FATAL,al); | ||
| 294 | return(0); | ||
| 295 | } | 277 | } |
| 296 | 278 | ||
| 279 | return (1); | ||
| 280 | f_err: | ||
| 281 | ssl3_send_alert(s, SSL3_AL_FATAL, al); | ||
| 282 | return (0); | ||
| 283 | } | ||
| 284 | |||
| 297 | /* for these 2 messages, we need to | 285 | /* for these 2 messages, we need to |
| 298 | * ssl->enc_read_ctx re-init | 286 | * ssl->enc_read_ctx re-init |
| 299 | * ssl->s3->read_sequence zero | 287 | * ssl->s3->read_sequence zero |
| @@ -302,48 +290,49 @@ f_err: | |||
| 302 | * ssl->session->read_compression assign | 290 | * ssl->session->read_compression assign |
| 303 | * ssl->session->read_hash assign | 291 | * ssl->session->read_hash assign |
| 304 | */ | 292 | */ |
| 305 | int ssl3_send_change_cipher_spec(SSL *s, int a, int b) | 293 | int |
| 306 | { | 294 | ssl3_send_change_cipher_spec(SSL *s, int a, int b) |
| 295 | { | ||
| 307 | unsigned char *p; | 296 | unsigned char *p; |
| 308 | 297 | ||
| 309 | if (s->state == a) | 298 | if (s->state == a) { |
| 310 | { | 299 | p = (unsigned char *)s->init_buf->data; |
| 311 | p=(unsigned char *)s->init_buf->data; | 300 | *p = SSL3_MT_CCS; |
| 312 | *p=SSL3_MT_CCS; | 301 | s->init_num = 1; |
| 313 | s->init_num=1; | 302 | s->init_off = 0; |
| 314 | s->init_off=0; | ||
| 315 | 303 | ||
| 316 | s->state=b; | 304 | s->state = b; |
| 317 | } | 305 | } |
| 318 | 306 | ||
| 319 | /* SSL3_ST_CW_CHANGE_B */ | 307 | /* SSL3_ST_CW_CHANGE_B */ |
| 320 | return(ssl3_do_write(s,SSL3_RT_CHANGE_CIPHER_SPEC)); | 308 | return (ssl3_do_write(s, SSL3_RT_CHANGE_CIPHER_SPEC)); |
| 321 | } | 309 | } |
| 322 | 310 | ||
| 323 | static int ssl3_add_cert_to_buf(BUF_MEM *buf, unsigned long *l, X509 *x) | 311 | static int |
| 324 | { | 312 | ssl3_add_cert_to_buf(BUF_MEM *buf, unsigned long *l, X509 *x) |
| 313 | { | ||
| 325 | int n; | 314 | int n; |
| 326 | unsigned char *p; | 315 | unsigned char *p; |
| 327 | 316 | ||
| 328 | n=i2d_X509(x,NULL); | 317 | n = i2d_X509(x, NULL); |
| 329 | if (!BUF_MEM_grow_clean(buf,(int)(n+(*l)+3))) | 318 | if (!BUF_MEM_grow_clean(buf,(int)(n + (*l) + 3))) { |
| 330 | { | 319 | SSLerr(SSL_F_SSL3_ADD_CERT_TO_BUF, ERR_R_BUF_LIB); |
| 331 | SSLerr(SSL_F_SSL3_ADD_CERT_TO_BUF,ERR_R_BUF_LIB); | 320 | return (-1); |
| 332 | return(-1); | ||
| 333 | } | ||
| 334 | p=(unsigned char *)&(buf->data[*l]); | ||
| 335 | l2n3(n,p); | ||
| 336 | i2d_X509(x,&p); | ||
| 337 | *l+=n+3; | ||
| 338 | |||
| 339 | return(0); | ||
| 340 | } | 321 | } |
| 322 | p = (unsigned char *)&(buf->data[*l]); | ||
| 323 | l2n3(n, p); | ||
| 324 | i2d_X509(x, &p); | ||
| 325 | *l += n + 3; | ||
| 341 | 326 | ||
| 342 | unsigned long ssl3_output_cert_chain(SSL *s, X509 *x) | 327 | return (0); |
| 343 | { | 328 | } |
| 329 | |||
| 330 | unsigned long | ||
| 331 | ssl3_output_cert_chain(SSL *s, X509 *x) | ||
| 332 | { | ||
| 344 | unsigned char *p; | 333 | unsigned char *p; |
| 345 | int i; | 334 | int i; |
| 346 | unsigned long l=7; | 335 | unsigned long l = 7; |
| 347 | BUF_MEM *buf; | 336 | BUF_MEM *buf; |
| 348 | int no_chain; | 337 | int no_chain; |
| 349 | 338 | ||
| @@ -353,111 +342,99 @@ unsigned long ssl3_output_cert_chain(SSL *s, X509 *x) | |||
| 353 | no_chain = 0; | 342 | no_chain = 0; |
| 354 | 343 | ||
| 355 | /* TLSv1 sends a chain with nothing in it, instead of an alert */ | 344 | /* TLSv1 sends a chain with nothing in it, instead of an alert */ |
| 356 | buf=s->init_buf; | 345 | buf = s->init_buf; |
| 357 | if (!BUF_MEM_grow_clean(buf,10)) | 346 | if (!BUF_MEM_grow_clean(buf, 10)) { |
| 358 | { | 347 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN, ERR_R_BUF_LIB); |
| 359 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_BUF_LIB); | 348 | return (0); |
| 360 | return(0); | 349 | } |
| 361 | } | 350 | if (x != NULL) { |
| 362 | if (x != NULL) | 351 | if (no_chain) { |
| 363 | { | ||
| 364 | if (no_chain) | ||
| 365 | { | ||
| 366 | if (ssl3_add_cert_to_buf(buf, &l, x)) | 352 | if (ssl3_add_cert_to_buf(buf, &l, x)) |
| 367 | return(0); | 353 | return (0); |
| 368 | } | 354 | } else { |
| 369 | else | ||
| 370 | { | ||
| 371 | X509_STORE_CTX xs_ctx; | 355 | X509_STORE_CTX xs_ctx; |
| 372 | 356 | ||
| 373 | if (!X509_STORE_CTX_init(&xs_ctx,s->ctx->cert_store,x,NULL)) | 357 | if (!X509_STORE_CTX_init(&xs_ctx, s->ctx->cert_store, x, NULL)) { |
| 374 | { | 358 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN, ERR_R_X509_LIB); |
| 375 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_X509_LIB); | 359 | return (0); |
| 376 | return(0); | 360 | } |
| 377 | } | ||
| 378 | X509_verify_cert(&xs_ctx); | 361 | X509_verify_cert(&xs_ctx); |
| 379 | /* Don't leave errors in the queue */ | 362 | /* Don't leave errors in the queue */ |
| 380 | ERR_clear_error(); | 363 | ERR_clear_error(); |
| 381 | for (i=0; i < sk_X509_num(xs_ctx.chain); i++) | 364 | for (i = 0; i < sk_X509_num(xs_ctx.chain); i++) { |
| 382 | { | ||
| 383 | x = sk_X509_value(xs_ctx.chain, i); | 365 | x = sk_X509_value(xs_ctx.chain, i); |
| 384 | 366 | ||
| 385 | if (ssl3_add_cert_to_buf(buf, &l, x)) | 367 | if (ssl3_add_cert_to_buf(buf, &l, x)) { |
| 386 | { | ||
| 387 | X509_STORE_CTX_cleanup(&xs_ctx); | 368 | X509_STORE_CTX_cleanup(&xs_ctx); |
| 388 | return 0; | 369 | return 0; |
| 389 | } | ||
| 390 | } | 370 | } |
| 391 | X509_STORE_CTX_cleanup(&xs_ctx); | ||
| 392 | } | 371 | } |
| 372 | X509_STORE_CTX_cleanup(&xs_ctx); | ||
| 393 | } | 373 | } |
| 374 | } | ||
| 394 | /* Thawte special :-) */ | 375 | /* Thawte special :-) */ |
| 395 | for (i=0; i<sk_X509_num(s->ctx->extra_certs); i++) | 376 | for (i = 0; i < sk_X509_num(s->ctx->extra_certs); i++) { |
| 396 | { | 377 | x = sk_X509_value(s->ctx->extra_certs, i); |
| 397 | x=sk_X509_value(s->ctx->extra_certs,i); | ||
| 398 | if (ssl3_add_cert_to_buf(buf, &l, x)) | 378 | if (ssl3_add_cert_to_buf(buf, &l, x)) |
| 399 | return(0); | 379 | return (0); |
| 400 | } | ||
| 401 | |||
| 402 | l-=7; | ||
| 403 | p=(unsigned char *)&(buf->data[4]); | ||
| 404 | l2n3(l,p); | ||
| 405 | l+=3; | ||
| 406 | p=(unsigned char *)&(buf->data[0]); | ||
| 407 | *(p++)=SSL3_MT_CERTIFICATE; | ||
| 408 | l2n3(l,p); | ||
| 409 | l+=4; | ||
| 410 | return(l); | ||
| 411 | } | 380 | } |
| 412 | 381 | ||
| 382 | l -= 7; | ||
| 383 | p = (unsigned char *)&(buf->data[4]); | ||
| 384 | l2n3(l, p); | ||
| 385 | l += 3; | ||
| 386 | p = (unsigned char *)&(buf->data[0]); | ||
| 387 | *(p++) = SSL3_MT_CERTIFICATE; | ||
| 388 | l2n3(l, p); | ||
| 389 | l += 4; | ||
| 390 | return (l); | ||
| 391 | } | ||
| 392 | |||
| 413 | /* Obtain handshake message of message type 'mt' (any if mt == -1), | 393 | /* Obtain handshake message of message type 'mt' (any if mt == -1), |
| 414 | * maximum acceptable body length 'max'. | 394 | * maximum acceptable body length 'max'. |
| 415 | * The first four bytes (msg_type and length) are read in state 'st1', | 395 | * The first four bytes (msg_type and length) are read in state 'st1', |
| 416 | * the body is read in state 'stn'. | 396 | * the body is read in state 'stn'. |
| 417 | */ | 397 | */ |
| 418 | long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | 398 | long |
| 419 | { | 399 | ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) |
| 400 | { | ||
| 420 | unsigned char *p; | 401 | unsigned char *p; |
| 421 | unsigned long l; | 402 | unsigned long l; |
| 422 | long n; | 403 | long n; |
| 423 | int i,al; | 404 | int i, al; |
| 424 | 405 | ||
| 425 | if (s->s3->tmp.reuse_message) | 406 | if (s->s3->tmp.reuse_message) { |
| 426 | { | 407 | s->s3->tmp.reuse_message = 0; |
| 427 | s->s3->tmp.reuse_message=0; | 408 | if ((mt >= 0) && (s->s3->tmp.message_type != mt)) { |
| 428 | if ((mt >= 0) && (s->s3->tmp.message_type != mt)) | 409 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 429 | { | 410 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); |
| 430 | al=SSL_AD_UNEXPECTED_MESSAGE; | ||
| 431 | SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_UNEXPECTED_MESSAGE); | ||
| 432 | goto f_err; | 411 | goto f_err; |
| 433 | } | 412 | } |
| 434 | *ok=1; | 413 | *ok = 1; |
| 435 | s->init_msg = s->init_buf->data + 4; | 414 | s->init_msg = s->init_buf->data + 4; |
| 436 | s->init_num = (int)s->s3->tmp.message_size; | 415 | s->init_num = (int)s->s3->tmp.message_size; |
| 437 | return s->init_num; | 416 | return s->init_num; |
| 438 | } | 417 | } |
| 439 | 418 | ||
| 440 | p=(unsigned char *)s->init_buf->data; | 419 | p = (unsigned char *)s->init_buf->data; |
| 441 | 420 | ||
| 442 | if (s->state == st1) /* s->init_num < 4 */ | 421 | if (s->state == st1) /* s->init_num < 4 */ |
| 443 | { | 422 | { |
| 444 | int skip_message; | 423 | int skip_message; |
| 445 | 424 | ||
| 446 | do | 425 | do { |
| 447 | { | 426 | while (s->init_num < 4) { |
| 448 | while (s->init_num < 4) | 427 | i = s->method->ssl_read_bytes(s, |
| 449 | { | 428 | SSL3_RT_HANDSHAKE, &p[s->init_num], |
| 450 | i=s->method->ssl_read_bytes(s,SSL3_RT_HANDSHAKE, | 429 | 4 - s->init_num, 0); |
| 451 | &p[s->init_num],4 - s->init_num, 0); | 430 | if (i <= 0) { |
| 452 | if (i <= 0) | 431 | s->rwstate = SSL_READING; |
| 453 | { | ||
| 454 | s->rwstate=SSL_READING; | ||
| 455 | *ok = 0; | 432 | *ok = 0; |
| 456 | return i; | 433 | return i; |
| 457 | } | ||
| 458 | s->init_num+=i; | ||
| 459 | } | 434 | } |
| 460 | 435 | s->init_num += i; | |
| 436 | } | ||
| 437 | |||
| 461 | skip_message = 0; | 438 | skip_message = 0; |
| 462 | if (!s->server) | 439 | if (!s->server) |
| 463 | if (p[0] == SSL3_MT_HELLO_REQUEST) | 440 | if (p[0] == SSL3_MT_HELLO_REQUEST) |
| @@ -465,79 +442,72 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
| 465 | * we are doing a handshake anyway now, so ignore them | 442 | * we are doing a handshake anyway now, so ignore them |
| 466 | * if their format is correct. Does not count for | 443 | * if their format is correct. Does not count for |
| 467 | * 'Finished' MAC. */ | 444 | * 'Finished' MAC. */ |
| 468 | if (p[1] == 0 && p[2] == 0 &&p[3] == 0) | 445 | if (p[1] == 0 && p[2] == 0 &&p[3] == 0) { |
| 469 | { | 446 | s->init_num = 0; |
| 470 | s->init_num = 0; | 447 | skip_message = 1; |
| 471 | skip_message = 1; | 448 | |
| 472 | 449 | if (s->msg_callback) | |
| 473 | if (s->msg_callback) | 450 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, 4, s, s->msg_callback_arg); |
| 474 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, 4, s, s->msg_callback_arg); | ||
| 475 | } | ||
| 476 | } | 451 | } |
| 452 | } | ||
| 477 | while (skip_message); | 453 | while (skip_message); |
| 478 | 454 | ||
| 479 | /* s->init_num == 4 */ | 455 | /* s->init_num == 4 */ |
| 480 | 456 | ||
| 481 | if ((mt >= 0) && (*p != mt)) | 457 | if ((mt >= 0) && (*p != mt)) { |
| 482 | { | 458 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 483 | al=SSL_AD_UNEXPECTED_MESSAGE; | 459 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); |
| 484 | SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_UNEXPECTED_MESSAGE); | ||
| 485 | goto f_err; | 460 | goto f_err; |
| 486 | } | 461 | } |
| 487 | if ((mt < 0) && (*p == SSL3_MT_CLIENT_HELLO) && | 462 | if ((mt < 0) && (*p == SSL3_MT_CLIENT_HELLO) && |
| 488 | (st1 == SSL3_ST_SR_CERT_A) && | 463 | (st1 == SSL3_ST_SR_CERT_A) && (stn == SSL3_ST_SR_CERT_B)) { |
| 489 | (stn == SSL3_ST_SR_CERT_B)) | ||
| 490 | { | ||
| 491 | /* At this point we have got an MS SGC second client | 464 | /* At this point we have got an MS SGC second client |
| 492 | * hello (maybe we should always allow the client to | 465 | * hello (maybe we should always allow the client to |
| 493 | * start a new handshake?). We need to restart the mac. | 466 | * start a new handshake?). We need to restart the mac. |
| 494 | * Don't increment {num,total}_renegotiations because | 467 | * Don't increment {num,total}_renegotiations because |
| 495 | * we have not completed the handshake. */ | 468 | * we have not completed the handshake. */ |
| 496 | ssl3_init_finished_mac(s); | 469 | ssl3_init_finished_mac(s); |
| 497 | } | 470 | } |
| 498 | 471 | ||
| 499 | s->s3->tmp.message_type= *(p++); | 472 | s->s3->tmp.message_type= *(p++); |
| 500 | 473 | ||
| 501 | n2l3(p,l); | 474 | n2l3(p, l); |
| 502 | if (l > (unsigned long)max) | 475 | if (l > (unsigned long)max) { |
| 503 | { | 476 | al = SSL_AD_ILLEGAL_PARAMETER; |
| 504 | al=SSL_AD_ILLEGAL_PARAMETER; | 477 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_EXCESSIVE_MESSAGE_SIZE); |
| 505 | SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_EXCESSIVE_MESSAGE_SIZE); | ||
| 506 | goto f_err; | 478 | goto f_err; |
| 507 | } | 479 | } |
| 508 | if (l > (INT_MAX-4)) /* BUF_MEM_grow takes an 'int' parameter */ | 480 | if (l > (INT_MAX-4)) /* BUF_MEM_grow takes an 'int' parameter */ |
| 509 | { | 481 | { |
| 510 | al=SSL_AD_ILLEGAL_PARAMETER; | 482 | al = SSL_AD_ILLEGAL_PARAMETER; |
| 511 | SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_EXCESSIVE_MESSAGE_SIZE); | 483 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_EXCESSIVE_MESSAGE_SIZE); |
| 512 | goto f_err; | 484 | goto f_err; |
| 513 | } | 485 | } |
| 514 | if (l && !BUF_MEM_grow_clean(s->init_buf,(int)l+4)) | 486 | if (l && !BUF_MEM_grow_clean(s->init_buf,(int)l + 4)) { |
| 515 | { | 487 | SSLerr(SSL_F_SSL3_GET_MESSAGE, ERR_R_BUF_LIB); |
| 516 | SSLerr(SSL_F_SSL3_GET_MESSAGE,ERR_R_BUF_LIB); | ||
| 517 | goto err; | 488 | goto err; |
| 518 | } | 489 | } |
| 519 | s->s3->tmp.message_size=l; | 490 | s->s3->tmp.message_size = l; |
| 520 | s->state=stn; | 491 | s->state = stn; |
| 521 | 492 | ||
| 522 | s->init_msg = s->init_buf->data + 4; | 493 | s->init_msg = s->init_buf->data + 4; |
| 523 | s->init_num = 0; | 494 | s->init_num = 0; |
| 524 | } | 495 | } |
| 525 | 496 | ||
| 526 | /* next state (stn) */ | 497 | /* next state (stn) */ |
| 527 | p = s->init_msg; | 498 | p = s->init_msg; |
| 528 | n = s->s3->tmp.message_size - s->init_num; | 499 | n = s->s3->tmp.message_size - s->init_num; |
| 529 | while (n > 0) | 500 | while (n > 0) { |
| 530 | { | 501 | i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, |
| 531 | i=s->method->ssl_read_bytes(s,SSL3_RT_HANDSHAKE,&p[s->init_num],n,0); | 502 | &p[s->init_num], n, 0); |
| 532 | if (i <= 0) | 503 | if (i <= 0) { |
| 533 | { | 504 | s->rwstate = SSL_READING; |
| 534 | s->rwstate=SSL_READING; | ||
| 535 | *ok = 0; | 505 | *ok = 0; |
| 536 | return i; | 506 | return i; |
| 537 | } | 507 | } |
| 538 | s->init_num += i; | 508 | s->init_num += i; |
| 539 | n -= i; | 509 | n -= i; |
| 540 | } | 510 | } |
| 541 | 511 | ||
| 542 | #ifndef OPENSSL_NO_NEXTPROTONEG | 512 | #ifndef OPENSSL_NO_NEXTPROTONEG |
| 543 | /* If receiving Finished, record MAC of prior handshake messages for | 513 | /* If receiving Finished, record MAC of prior handshake messages for |
| @@ -550,64 +520,60 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
| 550 | ssl3_finish_mac(s, (unsigned char *)s->init_buf->data, s->init_num + 4); | 520 | ssl3_finish_mac(s, (unsigned char *)s->init_buf->data, s->init_num + 4); |
| 551 | if (s->msg_callback) | 521 | if (s->msg_callback) |
| 552 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->init_buf->data, (size_t)s->init_num + 4, s, s->msg_callback_arg); | 522 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->init_buf->data, (size_t)s->init_num + 4, s, s->msg_callback_arg); |
| 553 | *ok=1; | 523 | *ok = 1; |
| 554 | return s->init_num; | 524 | return s->init_num; |
| 555 | f_err: | 525 | f_err: |
| 556 | ssl3_send_alert(s,SSL3_AL_FATAL,al); | 526 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
| 557 | err: | 527 | err: |
| 558 | *ok=0; | 528 | *ok = 0; |
| 559 | return(-1); | 529 | return (-1); |
| 560 | } | 530 | } |
| 561 | 531 | ||
| 562 | int ssl_cert_type(X509 *x, EVP_PKEY *pkey) | 532 | int |
| 563 | { | 533 | ssl_cert_type(X509 *x, EVP_PKEY *pkey) |
| 534 | { | ||
| 564 | EVP_PKEY *pk; | 535 | EVP_PKEY *pk; |
| 565 | int ret= -1,i; | 536 | int ret = -1, i; |
| 566 | 537 | ||
| 567 | if (pkey == NULL) | 538 | if (pkey == NULL) |
| 568 | pk=X509_get_pubkey(x); | 539 | pk = X509_get_pubkey(x); |
| 569 | else | 540 | else |
| 570 | pk=pkey; | 541 | pk = pkey; |
| 571 | if (pk == NULL) goto err; | 542 | if (pk == NULL) |
| 572 | 543 | goto err; | |
| 573 | i=pk->type; | 544 | |
| 574 | if (i == EVP_PKEY_RSA) | 545 | i = pk->type; |
| 575 | { | 546 | if (i == EVP_PKEY_RSA) { |
| 576 | ret=SSL_PKEY_RSA_ENC; | 547 | ret = SSL_PKEY_RSA_ENC; |
| 577 | } | 548 | } else if (i == EVP_PKEY_DSA) { |
| 578 | else if (i == EVP_PKEY_DSA) | 549 | ret = SSL_PKEY_DSA_SIGN; |
| 579 | { | 550 | } |
| 580 | ret=SSL_PKEY_DSA_SIGN; | ||
| 581 | } | ||
| 582 | #ifndef OPENSSL_NO_EC | 551 | #ifndef OPENSSL_NO_EC |
| 583 | else if (i == EVP_PKEY_EC) | 552 | else if (i == EVP_PKEY_EC) { |
| 584 | { | ||
| 585 | ret = SSL_PKEY_ECC; | 553 | ret = SSL_PKEY_ECC; |
| 586 | } | 554 | } |
| 587 | #endif | 555 | #endif |
| 588 | else if (i == NID_id_GostR3410_94 || i == NID_id_GostR3410_94_cc) | 556 | else if (i == NID_id_GostR3410_94 || i == NID_id_GostR3410_94_cc) { |
| 589 | { | ||
| 590 | ret = SSL_PKEY_GOST94; | 557 | ret = SSL_PKEY_GOST94; |
| 591 | } | 558 | } else if (i == NID_id_GostR3410_2001 || i == NID_id_GostR3410_2001_cc) { |
| 592 | else if (i == NID_id_GostR3410_2001 || i == NID_id_GostR3410_2001_cc) | ||
| 593 | { | ||
| 594 | ret = SSL_PKEY_GOST01; | 559 | ret = SSL_PKEY_GOST01; |
| 595 | } | ||
| 596 | err: | ||
| 597 | if(!pkey) EVP_PKEY_free(pk); | ||
| 598 | return(ret); | ||
| 599 | } | 560 | } |
| 561 | err: | ||
| 562 | if (!pkey) | ||
| 563 | EVP_PKEY_free(pk); | ||
| 564 | return (ret); | ||
| 565 | } | ||
| 600 | 566 | ||
| 601 | int ssl_verify_alarm_type(long type) | 567 | int |
| 602 | { | 568 | ssl_verify_alarm_type(long type) |
| 569 | { | ||
| 603 | int al; | 570 | int al; |
| 604 | 571 | ||
| 605 | switch(type) | 572 | switch (type) { |
| 606 | { | ||
| 607 | case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: | 573 | case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: |
| 608 | case X509_V_ERR_UNABLE_TO_GET_CRL: | 574 | case X509_V_ERR_UNABLE_TO_GET_CRL: |
| 609 | case X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER: | 575 | case X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER: |
| 610 | al=SSL_AD_UNKNOWN_CA; | 576 | al = SSL_AD_UNKNOWN_CA; |
| 611 | break; | 577 | break; |
| 612 | case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: | 578 | case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: |
| 613 | case X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: | 579 | case X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: |
| @@ -620,21 +586,21 @@ int ssl_verify_alarm_type(long type) | |||
| 620 | case X509_V_ERR_CRL_NOT_YET_VALID: | 586 | case X509_V_ERR_CRL_NOT_YET_VALID: |
| 621 | case X509_V_ERR_CERT_UNTRUSTED: | 587 | case X509_V_ERR_CERT_UNTRUSTED: |
| 622 | case X509_V_ERR_CERT_REJECTED: | 588 | case X509_V_ERR_CERT_REJECTED: |
| 623 | al=SSL_AD_BAD_CERTIFICATE; | 589 | al = SSL_AD_BAD_CERTIFICATE; |
| 624 | break; | 590 | break; |
| 625 | case X509_V_ERR_CERT_SIGNATURE_FAILURE: | 591 | case X509_V_ERR_CERT_SIGNATURE_FAILURE: |
| 626 | case X509_V_ERR_CRL_SIGNATURE_FAILURE: | 592 | case X509_V_ERR_CRL_SIGNATURE_FAILURE: |
| 627 | al=SSL_AD_DECRYPT_ERROR; | 593 | al = SSL_AD_DECRYPT_ERROR; |
| 628 | break; | 594 | break; |
| 629 | case X509_V_ERR_CERT_HAS_EXPIRED: | 595 | case X509_V_ERR_CERT_HAS_EXPIRED: |
| 630 | case X509_V_ERR_CRL_HAS_EXPIRED: | 596 | case X509_V_ERR_CRL_HAS_EXPIRED: |
| 631 | al=SSL_AD_CERTIFICATE_EXPIRED; | 597 | al = SSL_AD_CERTIFICATE_EXPIRED; |
| 632 | break; | 598 | break; |
| 633 | case X509_V_ERR_CERT_REVOKED: | 599 | case X509_V_ERR_CERT_REVOKED: |
| 634 | al=SSL_AD_CERTIFICATE_REVOKED; | 600 | al = SSL_AD_CERTIFICATE_REVOKED; |
| 635 | break; | 601 | break; |
| 636 | case X509_V_ERR_OUT_OF_MEM: | 602 | case X509_V_ERR_OUT_OF_MEM: |
| 637 | al=SSL_AD_INTERNAL_ERROR; | 603 | al = SSL_AD_INTERNAL_ERROR; |
| 638 | break; | 604 | break; |
| 639 | case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: | 605 | case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: |
| 640 | case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: | 606 | case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: |
| @@ -643,20 +609,20 @@ int ssl_verify_alarm_type(long type) | |||
| 643 | case X509_V_ERR_CERT_CHAIN_TOO_LONG: | 609 | case X509_V_ERR_CERT_CHAIN_TOO_LONG: |
| 644 | case X509_V_ERR_PATH_LENGTH_EXCEEDED: | 610 | case X509_V_ERR_PATH_LENGTH_EXCEEDED: |
| 645 | case X509_V_ERR_INVALID_CA: | 611 | case X509_V_ERR_INVALID_CA: |
| 646 | al=SSL_AD_UNKNOWN_CA; | 612 | al = SSL_AD_UNKNOWN_CA; |
| 647 | break; | 613 | break; |
| 648 | case X509_V_ERR_APPLICATION_VERIFICATION: | 614 | case X509_V_ERR_APPLICATION_VERIFICATION: |
| 649 | al=SSL_AD_HANDSHAKE_FAILURE; | 615 | al = SSL_AD_HANDSHAKE_FAILURE; |
| 650 | break; | 616 | break; |
| 651 | case X509_V_ERR_INVALID_PURPOSE: | 617 | case X509_V_ERR_INVALID_PURPOSE: |
| 652 | al=SSL_AD_UNSUPPORTED_CERTIFICATE; | 618 | al = SSL_AD_UNSUPPORTED_CERTIFICATE; |
| 653 | break; | 619 | break; |
| 654 | default: | 620 | default: |
| 655 | al=SSL_AD_CERTIFICATE_UNKNOWN; | 621 | al = SSL_AD_CERTIFICATE_UNKNOWN; |
| 656 | break; | 622 | break; |
| 657 | } | ||
| 658 | return(al); | ||
| 659 | } | 623 | } |
| 624 | return (al); | ||
| 625 | } | ||
| 660 | 626 | ||
| 661 | #ifndef OPENSSL_NO_BUF_FREELISTS | 627 | #ifndef OPENSSL_NO_BUF_FREELISTS |
| 662 | /* On some platforms, malloc() performance is bad enough that you can't just | 628 | /* On some platforms, malloc() performance is bad enough that you can't just |
| @@ -680,7 +646,7 @@ int ssl_verify_alarm_type(long type) | |||
| 680 | */ | 646 | */ |
| 681 | static void * | 647 | static void * |
| 682 | freelist_extract(SSL_CTX *ctx, int for_read, int sz) | 648 | freelist_extract(SSL_CTX *ctx, int for_read, int sz) |
| 683 | { | 649 | { |
| 684 | SSL3_BUF_FREELIST *list; | 650 | SSL3_BUF_FREELIST *list; |
| 685 | SSL3_BUF_FREELIST_ENTRY *ent = NULL; | 651 | SSL3_BUF_FREELIST_ENTRY *ent = NULL; |
| 686 | void *result = NULL; | 652 | void *result = NULL; |
| @@ -689,13 +655,12 @@ freelist_extract(SSL_CTX *ctx, int for_read, int sz) | |||
| 689 | list = for_read ? ctx->rbuf_freelist : ctx->wbuf_freelist; | 655 | list = for_read ? ctx->rbuf_freelist : ctx->wbuf_freelist; |
| 690 | if (list != NULL && sz == (int)list->chunklen) | 656 | if (list != NULL && sz == (int)list->chunklen) |
| 691 | ent = list->head; | 657 | ent = list->head; |
| 692 | if (ent != NULL) | 658 | if (ent != NULL) { |
| 693 | { | ||
| 694 | list->head = ent->next; | 659 | list->head = ent->next; |
| 695 | result = ent; | 660 | result = ent; |
| 696 | if (--list->len == 0) | 661 | if (--list->len == 0) |
| 697 | list->chunklen = 0; | 662 | list->chunklen = 0; |
| 698 | } | 663 | } |
| 699 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 664 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); |
| 700 | if (!result) | 665 | if (!result) |
| 701 | result = OPENSSL_malloc(sz); | 666 | result = OPENSSL_malloc(sz); |
| @@ -704,80 +669,76 @@ freelist_extract(SSL_CTX *ctx, int for_read, int sz) | |||
| 704 | 669 | ||
| 705 | static void | 670 | static void |
| 706 | freelist_insert(SSL_CTX *ctx, int for_read, size_t sz, void *mem) | 671 | freelist_insert(SSL_CTX *ctx, int for_read, size_t sz, void *mem) |
| 707 | { | 672 | { |
| 708 | SSL3_BUF_FREELIST *list; | 673 | SSL3_BUF_FREELIST *list; |
| 709 | SSL3_BUF_FREELIST_ENTRY *ent; | 674 | SSL3_BUF_FREELIST_ENTRY *ent; |
| 710 | 675 | ||
| 711 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 676 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
| 712 | list = for_read ? ctx->rbuf_freelist : ctx->wbuf_freelist; | 677 | list = for_read ? ctx->rbuf_freelist : ctx->wbuf_freelist; |
| 713 | if (list != NULL && | 678 | if (list != NULL && (sz == list->chunklen || list->chunklen == 0) && |
| 714 | (sz == list->chunklen || list->chunklen == 0) && | 679 | list->len < ctx->freelist_max_len && sz >= sizeof(*ent)) { |
| 715 | list->len < ctx->freelist_max_len && | ||
| 716 | sz >= sizeof(*ent)) | ||
| 717 | { | ||
| 718 | list->chunklen = sz; | 680 | list->chunklen = sz; |
| 719 | ent = mem; | 681 | ent = mem; |
| 720 | ent->next = list->head; | 682 | ent->next = list->head; |
| 721 | list->head = ent; | 683 | list->head = ent; |
| 722 | ++list->len; | 684 | ++list->len; |
| 723 | mem = NULL; | 685 | mem = NULL; |
| 724 | } | 686 | } |
| 725 | 687 | ||
| 726 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 688 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); |
| 727 | if (mem) | 689 | if (mem) |
| 728 | OPENSSL_free(mem); | 690 | OPENSSL_free(mem); |
| 729 | } | 691 | } |
| 730 | #else | 692 | #else |
| 731 | #define freelist_extract(c,fr,sz) OPENSSL_malloc(sz) | 693 | #define freelist_extract(c,fr,sz) OPENSSL_malloc(sz) |
| 732 | #define freelist_insert(c,fr,sz,m) OPENSSL_free(m) | 694 | #define freelist_insert(c,fr,sz,m) OPENSSL_free(m) |
| 733 | #endif | 695 | #endif |
| 734 | 696 | ||
| 735 | int ssl3_setup_read_buffer(SSL *s) | 697 | int |
| 736 | { | 698 | ssl3_setup_read_buffer(SSL *s) |
| 699 | { | ||
| 737 | unsigned char *p; | 700 | unsigned char *p; |
| 738 | size_t len,align=0,headerlen; | 701 | size_t len, align = 0, headerlen; |
| 739 | 702 | ||
| 740 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) | 703 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) |
| 741 | headerlen = DTLS1_RT_HEADER_LENGTH; | 704 | headerlen = DTLS1_RT_HEADER_LENGTH; |
| 742 | else | 705 | else |
| 743 | headerlen = SSL3_RT_HEADER_LENGTH; | 706 | headerlen = SSL3_RT_HEADER_LENGTH; |
| 744 | 707 | ||
| 745 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 708 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
| 746 | align = (-SSL3_RT_HEADER_LENGTH)&(SSL3_ALIGN_PAYLOAD-1); | 709 | align = (-SSL3_RT_HEADER_LENGTH)&(SSL3_ALIGN_PAYLOAD - 1); |
| 747 | #endif | 710 | #endif |
| 748 | 711 | ||
| 749 | if (s->s3->rbuf.buf == NULL) | 712 | if (s->s3->rbuf.buf == NULL) { |
| 750 | { | 713 | len = SSL3_RT_MAX_PLAIN_LENGTH + |
| 751 | len = SSL3_RT_MAX_PLAIN_LENGTH | 714 | SSL3_RT_MAX_ENCRYPTED_OVERHEAD + headerlen + align; |
| 752 | + SSL3_RT_MAX_ENCRYPTED_OVERHEAD | 715 | if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) { |
| 753 | + headerlen + align; | ||
| 754 | if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) | ||
| 755 | { | ||
| 756 | s->s3->init_extra = 1; | 716 | s->s3->init_extra = 1; |
| 757 | len += SSL3_RT_MAX_EXTRA; | 717 | len += SSL3_RT_MAX_EXTRA; |
| 758 | } | 718 | } |
| 759 | #ifndef OPENSSL_NO_COMP | 719 | #ifndef OPENSSL_NO_COMP |
| 760 | if (!(s->options & SSL_OP_NO_COMPRESSION)) | 720 | if (!(s->options & SSL_OP_NO_COMPRESSION)) |
| 761 | len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; | 721 | len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; |
| 762 | #endif | 722 | #endif |
| 763 | if ((p=freelist_extract(s->ctx, 1, len)) == NULL) | 723 | if ((p = freelist_extract(s->ctx, 1, len)) == NULL) |
| 764 | goto err; | 724 | goto err; |
| 765 | s->s3->rbuf.buf = p; | 725 | s->s3->rbuf.buf = p; |
| 766 | s->s3->rbuf.len = len; | 726 | s->s3->rbuf.len = len; |
| 767 | } | 727 | } |
| 768 | 728 | ||
| 769 | s->packet= &(s->s3->rbuf.buf[0]); | 729 | s->packet = &(s->s3->rbuf.buf[0]); |
| 770 | return 1; | 730 | return 1; |
| 771 | 731 | ||
| 772 | err: | 732 | err: |
| 773 | SSLerr(SSL_F_SSL3_SETUP_READ_BUFFER,ERR_R_MALLOC_FAILURE); | 733 | SSLerr(SSL_F_SSL3_SETUP_READ_BUFFER, ERR_R_MALLOC_FAILURE); |
| 774 | return 0; | 734 | return 0; |
| 775 | } | 735 | } |
| 776 | 736 | ||
| 777 | int ssl3_setup_write_buffer(SSL *s) | 737 | int |
| 778 | { | 738 | ssl3_setup_write_buffer(SSL *s) |
| 739 | { | ||
| 779 | unsigned char *p; | 740 | unsigned char *p; |
| 780 | size_t len,align=0,headerlen; | 741 | size_t len, align = 0, headerlen; |
| 781 | 742 | ||
| 782 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) | 743 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) |
| 783 | headerlen = DTLS1_RT_HEADER_LENGTH + 1; | 744 | headerlen = DTLS1_RT_HEADER_LENGTH + 1; |
| @@ -785,62 +746,61 @@ int ssl3_setup_write_buffer(SSL *s) | |||
| 785 | headerlen = SSL3_RT_HEADER_LENGTH; | 746 | headerlen = SSL3_RT_HEADER_LENGTH; |
| 786 | 747 | ||
| 787 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 748 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
| 788 | align = (-SSL3_RT_HEADER_LENGTH)&(SSL3_ALIGN_PAYLOAD-1); | 749 | align = (-SSL3_RT_HEADER_LENGTH)&(SSL3_ALIGN_PAYLOAD - 1); |
| 789 | #endif | 750 | #endif |
| 790 | 751 | ||
| 791 | if (s->s3->wbuf.buf == NULL) | 752 | if (s->s3->wbuf.buf == NULL) { |
| 792 | { | 753 | len = s->max_send_fragment + |
| 793 | len = s->max_send_fragment | 754 | SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD + headerlen + align; |
| 794 | + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD | ||
| 795 | + headerlen + align; | ||
| 796 | #ifndef OPENSSL_NO_COMP | 755 | #ifndef OPENSSL_NO_COMP |
| 797 | if (!(s->options & SSL_OP_NO_COMPRESSION)) | 756 | if (!(s->options & SSL_OP_NO_COMPRESSION)) |
| 798 | len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; | 757 | len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; |
| 799 | #endif | 758 | #endif |
| 800 | if (!(s->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)) | 759 | if (!(s->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)) |
| 801 | len += headerlen + align | 760 | len += headerlen + align + |
| 802 | + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD; | 761 | SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD; |
| 803 | 762 | ||
| 804 | if ((p=freelist_extract(s->ctx, 0, len)) == NULL) | 763 | if ((p = freelist_extract(s->ctx, 0, len)) == NULL) |
| 805 | goto err; | 764 | goto err; |
| 806 | s->s3->wbuf.buf = p; | 765 | s->s3->wbuf.buf = p; |
| 807 | s->s3->wbuf.len = len; | 766 | s->s3->wbuf.len = len; |
| 808 | } | 767 | } |
| 809 | 768 | ||
| 810 | return 1; | 769 | return 1; |
| 811 | 770 | ||
| 812 | err: | 771 | err: |
| 813 | SSLerr(SSL_F_SSL3_SETUP_WRITE_BUFFER,ERR_R_MALLOC_FAILURE); | 772 | SSLerr(SSL_F_SSL3_SETUP_WRITE_BUFFER, ERR_R_MALLOC_FAILURE); |
| 814 | return 0; | 773 | return 0; |
| 815 | } | 774 | } |
| 816 | 775 | ||
| 817 | 776 | ||
| 818 | int ssl3_setup_buffers(SSL *s) | 777 | int |
| 819 | { | 778 | ssl3_setup_buffers(SSL *s) |
| 779 | { | ||
| 820 | if (!ssl3_setup_read_buffer(s)) | 780 | if (!ssl3_setup_read_buffer(s)) |
| 821 | return 0; | 781 | return 0; |
| 822 | if (!ssl3_setup_write_buffer(s)) | 782 | if (!ssl3_setup_write_buffer(s)) |
| 823 | return 0; | 783 | return 0; |
| 824 | return 1; | 784 | return 1; |
| 825 | } | 785 | } |
| 826 | 786 | ||
| 827 | int ssl3_release_write_buffer(SSL *s) | 787 | int |
| 828 | { | 788 | ssl3_release_write_buffer(SSL *s) |
| 829 | if (s->s3->wbuf.buf != NULL) | 789 | { |
| 830 | { | 790 | if (s->s3->wbuf.buf != NULL) { |
| 831 | freelist_insert(s->ctx, 0, s->s3->wbuf.len, s->s3->wbuf.buf); | 791 | freelist_insert(s->ctx, 0, s->s3->wbuf.len, s->s3->wbuf.buf); |
| 832 | s->s3->wbuf.buf = NULL; | 792 | s->s3->wbuf.buf = NULL; |
| 833 | } | ||
| 834 | return 1; | ||
| 835 | } | 793 | } |
| 794 | return 1; | ||
| 795 | } | ||
| 836 | 796 | ||
| 837 | int ssl3_release_read_buffer(SSL *s) | 797 | int |
| 838 | { | 798 | ssl3_release_read_buffer(SSL *s) |
| 839 | if (s->s3->rbuf.buf != NULL) | 799 | { |
| 840 | { | 800 | if (s->s3->rbuf.buf != NULL) { |
| 841 | freelist_insert(s->ctx, 1, s->s3->rbuf.len, s->s3->rbuf.buf); | 801 | freelist_insert(s->ctx, 1, s->s3->rbuf.len, s->s3->rbuf.buf); |
| 842 | s->s3->rbuf.buf = NULL; | 802 | s->s3->rbuf.buf = NULL; |
| 843 | } | ||
| 844 | return 1; | ||
| 845 | } | 803 | } |
| 804 | return 1; | ||
| 805 | } | ||
| 846 | 806 | ||
diff --git a/src/lib/libssl/s3_cbc.c b/src/lib/libssl/s3_cbc.c index 443a31e746..d6cc9b4771 100644 --- a/src/lib/libssl/s3_cbc.c +++ b/src/lib/libssl/s3_cbc.c | |||
| @@ -73,30 +73,33 @@ | |||
| 73 | * bits. They use the fact that arithmetic shift shifts-in the sign bit. | 73 | * bits. They use the fact that arithmetic shift shifts-in the sign bit. |
| 74 | * However, this is not ensured by the C standard so you may need to replace | 74 | * However, this is not ensured by the C standard so you may need to replace |
| 75 | * them with something else on odd CPUs. */ | 75 | * them with something else on odd CPUs. */ |
| 76 | #define DUPLICATE_MSB_TO_ALL(x) ( (unsigned)( (int)(x) >> (sizeof(int)*8-1) ) ) | 76 | #define DUPLICATE_MSB_TO_ALL(x) ((unsigned)((int)(x) >> (sizeof(int) * 8 - 1))) |
| 77 | #define DUPLICATE_MSB_TO_ALL_8(x) ((unsigned char)(DUPLICATE_MSB_TO_ALL(x))) | 77 | #define DUPLICATE_MSB_TO_ALL_8(x) ((unsigned char)(DUPLICATE_MSB_TO_ALL(x))) |
| 78 | 78 | ||
| 79 | /* constant_time_lt returns 0xff if a<b and 0x00 otherwise. */ | 79 | /* constant_time_lt returns 0xff if a<b and 0x00 otherwise. */ |
| 80 | static unsigned constant_time_lt(unsigned a, unsigned b) | 80 | static unsigned |
| 81 | { | 81 | constant_time_lt(unsigned a, unsigned b) |
| 82 | { | ||
| 82 | a -= b; | 83 | a -= b; |
| 83 | return DUPLICATE_MSB_TO_ALL(a); | 84 | return DUPLICATE_MSB_TO_ALL(a); |
| 84 | } | 85 | } |
| 85 | 86 | ||
| 86 | /* constant_time_ge returns 0xff if a>=b and 0x00 otherwise. */ | 87 | /* constant_time_ge returns 0xff if a>=b and 0x00 otherwise. */ |
| 87 | static unsigned constant_time_ge(unsigned a, unsigned b) | 88 | static unsigned |
| 88 | { | 89 | constant_time_ge(unsigned a, unsigned b) |
| 90 | { | ||
| 89 | a -= b; | 91 | a -= b; |
| 90 | return DUPLICATE_MSB_TO_ALL(~a); | 92 | return DUPLICATE_MSB_TO_ALL(~a); |
| 91 | } | 93 | } |
| 92 | 94 | ||
| 93 | /* constant_time_eq_8 returns 0xff if a==b and 0x00 otherwise. */ | 95 | /* constant_time_eq_8 returns 0xff if a==b and 0x00 otherwise. */ |
| 94 | static unsigned char constant_time_eq_8(unsigned a, unsigned b) | 96 | static unsigned char |
| 95 | { | 97 | constant_time_eq_8(unsigned a, unsigned b) |
| 98 | { | ||
| 96 | unsigned c = a ^ b; | 99 | unsigned c = a ^ b; |
| 97 | c--; | 100 | c--; |
| 98 | return DUPLICATE_MSB_TO_ALL_8(c); | 101 | return DUPLICATE_MSB_TO_ALL_8(c); |
| 99 | } | 102 | } |
| 100 | 103 | ||
| 101 | /* ssl3_cbc_remove_padding removes padding from the decrypted, SSLv3, CBC | 104 | /* ssl3_cbc_remove_padding removes padding from the decrypted, SSLv3, CBC |
| 102 | * record in |rec| by updating |rec->length| in constant time. | 105 | * record in |rec| by updating |rec->length| in constant time. |
| @@ -106,11 +109,10 @@ static unsigned char constant_time_eq_8(unsigned a, unsigned b) | |||
| 106 | * 0: (in non-constant time) if the record is publicly invalid. | 109 | * 0: (in non-constant time) if the record is publicly invalid. |
| 107 | * 1: if the padding was valid | 110 | * 1: if the padding was valid |
| 108 | * -1: otherwise. */ | 111 | * -1: otherwise. */ |
| 109 | int ssl3_cbc_remove_padding(const SSL* s, | 112 | int |
| 110 | SSL3_RECORD *rec, | 113 | ssl3_cbc_remove_padding(const SSL* s, SSL3_RECORD *rec, unsigned block_size, |
| 111 | unsigned block_size, | 114 | unsigned mac_size) |
| 112 | unsigned mac_size) | 115 | { |
| 113 | { | ||
| 114 | unsigned padding_length, good; | 116 | unsigned padding_length, good; |
| 115 | const unsigned overhead = 1 /* padding length byte */ + mac_size; | 117 | const unsigned overhead = 1 /* padding length byte */ + mac_size; |
| 116 | 118 | ||
| @@ -119,13 +121,13 @@ int ssl3_cbc_remove_padding(const SSL* s, | |||
| 119 | if (overhead > rec->length) | 121 | if (overhead > rec->length) |
| 120 | return 0; | 122 | return 0; |
| 121 | 123 | ||
| 122 | padding_length = rec->data[rec->length-1]; | 124 | padding_length = rec->data[rec->length - 1]; |
| 123 | good = constant_time_ge(rec->length, padding_length+overhead); | 125 | good = constant_time_ge(rec->length, padding_length + overhead); |
| 124 | /* SSLv3 requires that the padding is minimal. */ | 126 | /* SSLv3 requires that the padding is minimal. */ |
| 125 | good &= constant_time_ge(block_size, padding_length+1); | 127 | good &= constant_time_ge(block_size, padding_length + 1); |
| 126 | padding_length = good & (padding_length+1); | 128 | padding_length = good & (padding_length + 1); |
| 127 | rec->length -= padding_length; | 129 | rec->length -= padding_length; |
| 128 | rec->type |= padding_length<<8; /* kludge: pass padding length */ | 130 | rec->type |= padding_length << 8; /* kludge: pass padding length */ |
| 129 | return (int)((good & 1) | (~good & -1)); | 131 | return (int)((good & 1) | (~good & -1)); |
| 130 | } | 132 | } |
| 131 | 133 | ||
| @@ -140,16 +142,14 @@ int ssl3_cbc_remove_padding(const SSL* s, | |||
| 140 | * 0: (in non-constant time) if the record is publicly invalid. | 142 | * 0: (in non-constant time) if the record is publicly invalid. |
| 141 | * 1: if the padding was valid | 143 | * 1: if the padding was valid |
| 142 | * -1: otherwise. */ | 144 | * -1: otherwise. */ |
| 143 | int tls1_cbc_remove_padding(const SSL* s, | 145 | int |
| 144 | SSL3_RECORD *rec, | 146 | tls1_cbc_remove_padding(const SSL* s, SSL3_RECORD *rec, unsigned block_size, |
| 145 | unsigned block_size, | 147 | unsigned mac_size) |
| 146 | unsigned mac_size) | 148 | { |
| 147 | { | ||
| 148 | unsigned padding_length, good, to_check, i; | 149 | unsigned padding_length, good, to_check, i; |
| 149 | const unsigned overhead = 1 /* padding length byte */ + mac_size; | 150 | const unsigned overhead = 1 /* padding length byte */ + mac_size; |
| 150 | /* Check if version requires explicit IV */ | 151 | /* Check if version requires explicit IV */ |
| 151 | if (s->version >= TLS1_1_VERSION || s->version == DTLS1_BAD_VER) | 152 | if (s->version >= TLS1_1_VERSION || s->version == DTLS1_BAD_VER) { |
| 152 | { | ||
| 153 | /* These lengths are all public so we can test them in | 153 | /* These lengths are all public so we can test them in |
| 154 | * non-constant time. | 154 | * non-constant time. |
| 155 | */ | 155 | */ |
| @@ -159,40 +159,35 @@ int tls1_cbc_remove_padding(const SSL* s, | |||
| 159 | rec->data += block_size; | 159 | rec->data += block_size; |
| 160 | rec->input += block_size; | 160 | rec->input += block_size; |
| 161 | rec->length -= block_size; | 161 | rec->length -= block_size; |
| 162 | } | 162 | } else if (overhead > rec->length) |
| 163 | else if (overhead > rec->length) | ||
| 164 | return 0; | 163 | return 0; |
| 165 | 164 | ||
| 166 | padding_length = rec->data[rec->length-1]; | 165 | padding_length = rec->data[rec->length - 1]; |
| 167 | 166 | ||
| 168 | /* NB: if compression is in operation the first packet may not be of | 167 | /* NB: if compression is in operation the first packet may not be of |
| 169 | * even length so the padding bug check cannot be performed. This bug | 168 | * even length so the padding bug check cannot be performed. This bug |
| 170 | * workaround has been around since SSLeay so hopefully it is either | 169 | * workaround has been around since SSLeay so hopefully it is either |
| 171 | * fixed now or no buggy implementation supports compression [steve] | 170 | * fixed now or no buggy implementation supports compression [steve] |
| 172 | */ | 171 | */ |
| 173 | if ( (s->options&SSL_OP_TLS_BLOCK_PADDING_BUG) && !s->expand) | 172 | if ((s->options & SSL_OP_TLS_BLOCK_PADDING_BUG) && !s->expand) { |
| 174 | { | ||
| 175 | /* First packet is even in size, so check */ | 173 | /* First packet is even in size, so check */ |
| 176 | if ((memcmp(s->s3->read_sequence, "\0\0\0\0\0\0\0\0",8) == 0) && | 174 | if ((memcmp(s->s3->read_sequence, "\0\0\0\0\0\0\0\0", 8) == 0) && |
| 177 | !(padding_length & 1)) | 175 | !(padding_length & 1)) { |
| 178 | { | ||
| 179 | s->s3->flags|=TLS1_FLAGS_TLS_PADDING_BUG; | 176 | s->s3->flags|=TLS1_FLAGS_TLS_PADDING_BUG; |
| 180 | } | 177 | } |
| 181 | if ((s->s3->flags & TLS1_FLAGS_TLS_PADDING_BUG) && | 178 | if ((s->s3->flags & TLS1_FLAGS_TLS_PADDING_BUG) && |
| 182 | padding_length > 0) | 179 | padding_length > 0) { |
| 183 | { | ||
| 184 | padding_length--; | 180 | padding_length--; |
| 185 | } | ||
| 186 | } | 181 | } |
| 182 | } | ||
| 187 | 183 | ||
| 188 | if (EVP_CIPHER_flags(s->enc_read_ctx->cipher)&EVP_CIPH_FLAG_AEAD_CIPHER) | 184 | if (EVP_CIPHER_flags(s->enc_read_ctx->cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) { |
| 189 | { | ||
| 190 | /* padding is already verified */ | 185 | /* padding is already verified */ |
| 191 | rec->length -= padding_length + 1; | 186 | rec->length -= padding_length + 1; |
| 192 | return 1; | 187 | return 1; |
| 193 | } | 188 | } |
| 194 | 189 | ||
| 195 | good = constant_time_ge(rec->length, overhead+padding_length); | 190 | good = constant_time_ge(rec->length, overhead + padding_length); |
| 196 | /* The padding consists of a length byte at the end of the record and | 191 | /* The padding consists of a length byte at the end of the record and |
| 197 | * then that many bytes of padding, all with the same value as the | 192 | * then that many bytes of padding, all with the same value as the |
| 198 | * length byte. Thus, with the length byte included, there are i+1 | 193 | * length byte. Thus, with the length byte included, there are i+1 |
| @@ -203,17 +198,16 @@ int tls1_cbc_remove_padding(const SSL* s, | |||
| 203 | * amount of padding possible. (Again, the length of the record is | 198 | * amount of padding possible. (Again, the length of the record is |
| 204 | * public information so we can use it.) */ | 199 | * public information so we can use it.) */ |
| 205 | to_check = 255; /* maximum amount of padding. */ | 200 | to_check = 255; /* maximum amount of padding. */ |
| 206 | if (to_check > rec->length-1) | 201 | if (to_check > rec->length - 1) |
| 207 | to_check = rec->length-1; | 202 | to_check = rec->length - 1; |
| 208 | 203 | ||
| 209 | for (i = 0; i < to_check; i++) | 204 | for (i = 0; i < to_check; i++) { |
| 210 | { | ||
| 211 | unsigned char mask = constant_time_ge(padding_length, i); | 205 | unsigned char mask = constant_time_ge(padding_length, i); |
| 212 | unsigned char b = rec->data[rec->length-1-i]; | 206 | unsigned char b = rec->data[rec->length - 1 - i]; |
| 213 | /* The final |padding_length+1| bytes should all have the value | 207 | /* The final |padding_length+1| bytes should all have the value |
| 214 | * |padding_length|. Therefore the XOR should be zero. */ | 208 | * |padding_length|. Therefore the XOR should be zero. */ |
| 215 | good &= ~(mask&(padding_length ^ b)); | 209 | good &= ~(mask&(padding_length ^ b)); |
| 216 | } | 210 | } |
| 217 | 211 | ||
| 218 | /* If any of the final |padding_length+1| bytes had the wrong value, | 212 | /* If any of the final |padding_length+1| bytes had the wrong value, |
| 219 | * one or more of the lower eight bits of |good| will be cleared. We | 213 | * one or more of the lower eight bits of |good| will be cleared. We |
| @@ -222,15 +216,15 @@ int tls1_cbc_remove_padding(const SSL* s, | |||
| 222 | good &= good >> 4; | 216 | good &= good >> 4; |
| 223 | good &= good >> 2; | 217 | good &= good >> 2; |
| 224 | good &= good >> 1; | 218 | good &= good >> 1; |
| 225 | good <<= sizeof(good)*8-1; | 219 | good <<= sizeof(good)*8 - 1; |
| 226 | good = DUPLICATE_MSB_TO_ALL(good); | 220 | good = DUPLICATE_MSB_TO_ALL(good); |
| 227 | 221 | ||
| 228 | padding_length = good & (padding_length+1); | 222 | padding_length = good & (padding_length + 1); |
| 229 | rec->length -= padding_length; | 223 | rec->length -= padding_length; |
| 230 | rec->type |= padding_length<<8; /* kludge: pass padding length */ | 224 | rec->type |= padding_length<<8; /* kludge: pass padding length */ |
| 231 | 225 | ||
| 232 | return (int)((good & 1) | (~good & -1)); | 226 | return (int)((good & 1) | (~good & -1)); |
| 233 | } | 227 | } |
| 234 | 228 | ||
| 235 | /* ssl3_cbc_copy_mac copies |md_size| bytes from the end of |rec| to |out| in | 229 | /* ssl3_cbc_copy_mac copies |md_size| bytes from the end of |rec| to |out| in |
| 236 | * constant time (independent of the concrete value of rec->length, which may | 230 | * constant time (independent of the concrete value of rec->length, which may |
| @@ -251,12 +245,12 @@ int tls1_cbc_remove_padding(const SSL* s, | |||
| 251 | */ | 245 | */ |
| 252 | #define CBC_MAC_ROTATE_IN_PLACE | 246 | #define CBC_MAC_ROTATE_IN_PLACE |
| 253 | 247 | ||
| 254 | void ssl3_cbc_copy_mac(unsigned char* out, | 248 | void |
| 255 | const SSL3_RECORD *rec, | 249 | ssl3_cbc_copy_mac(unsigned char* out, const SSL3_RECORD *rec, |
| 256 | unsigned md_size,unsigned orig_len) | 250 | unsigned md_size, unsigned orig_len) |
| 257 | { | 251 | { |
| 258 | #if defined(CBC_MAC_ROTATE_IN_PLACE) | 252 | #if defined(CBC_MAC_ROTATE_IN_PLACE) |
| 259 | unsigned char rotated_mac_buf[64+EVP_MAX_MD_SIZE]; | 253 | unsigned char rotated_mac_buf[64 + EVP_MAX_MD_SIZE]; |
| 260 | unsigned char *rotated_mac; | 254 | unsigned char *rotated_mac; |
| 261 | #else | 255 | #else |
| 262 | unsigned char rotated_mac[EVP_MAX_MD_SIZE]; | 256 | unsigned char rotated_mac[EVP_MAX_MD_SIZE]; |
| @@ -276,7 +270,7 @@ void ssl3_cbc_copy_mac(unsigned char* out, | |||
| 276 | OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE); | 270 | OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE); |
| 277 | 271 | ||
| 278 | #if defined(CBC_MAC_ROTATE_IN_PLACE) | 272 | #if defined(CBC_MAC_ROTATE_IN_PLACE) |
| 279 | rotated_mac = rotated_mac_buf + ((0-(size_t)rotated_mac_buf)&63); | 273 | rotated_mac = rotated_mac_buf + ((0 - (size_t)rotated_mac_buf)&63); |
| 280 | #endif | 274 | #endif |
| 281 | 275 | ||
| 282 | /* This information is public so it's safe to branch based on it. */ | 276 | /* This information is public so it's safe to branch based on it. */ |
| @@ -290,42 +284,39 @@ void ssl3_cbc_copy_mac(unsigned char* out, | |||
| 290 | * figure out that it can remove div_spoiler as that would require it | 284 | * figure out that it can remove div_spoiler as that would require it |
| 291 | * to prove that md_size is always even, which I hope is beyond it. */ | 285 | * to prove that md_size is always even, which I hope is beyond it. */ |
| 292 | div_spoiler = md_size >> 1; | 286 | div_spoiler = md_size >> 1; |
| 293 | div_spoiler <<= (sizeof(div_spoiler)-1)*8; | 287 | div_spoiler <<= (sizeof(div_spoiler) - 1) * 8; |
| 294 | rotate_offset = (div_spoiler + mac_start - scan_start) % md_size; | 288 | rotate_offset = (div_spoiler + mac_start - scan_start) % md_size; |
| 295 | 289 | ||
| 296 | memset(rotated_mac, 0, md_size); | 290 | memset(rotated_mac, 0, md_size); |
| 297 | for (i = scan_start, j = 0; i < orig_len; i++) | 291 | for (i = scan_start, j = 0; i < orig_len; i++) { |
| 298 | { | ||
| 299 | unsigned char mac_started = constant_time_ge(i, mac_start); | 292 | unsigned char mac_started = constant_time_ge(i, mac_start); |
| 300 | unsigned char mac_ended = constant_time_ge(i, mac_end); | 293 | unsigned char mac_ended = constant_time_ge(i, mac_end); |
| 301 | unsigned char b = rec->data[i]; | 294 | unsigned char b = rec->data[i]; |
| 302 | rotated_mac[j++] |= b & mac_started & ~mac_ended; | 295 | rotated_mac[j++] |= b & mac_started & ~mac_ended; |
| 303 | j &= constant_time_lt(j,md_size); | 296 | j &= constant_time_lt(j, md_size); |
| 304 | } | 297 | } |
| 305 | 298 | ||
| 306 | /* Now rotate the MAC */ | 299 | /* Now rotate the MAC */ |
| 307 | #if defined(CBC_MAC_ROTATE_IN_PLACE) | 300 | #if defined(CBC_MAC_ROTATE_IN_PLACE) |
| 308 | j = 0; | 301 | j = 0; |
| 309 | for (i = 0; i < md_size; i++) | 302 | for (i = 0; i < md_size; i++) { |
| 310 | { | ||
| 311 | /* in case cache-line is 32 bytes, touch second line */ | 303 | /* in case cache-line is 32 bytes, touch second line */ |
| 312 | ((volatile unsigned char *)rotated_mac)[rotate_offset^32]; | 304 | ((volatile unsigned char *)rotated_mac)[rotate_offset^32]; |
| 313 | out[j++] = rotated_mac[rotate_offset++]; | 305 | out[j++] = rotated_mac[rotate_offset++]; |
| 314 | rotate_offset &= constant_time_lt(rotate_offset,md_size); | 306 | rotate_offset &= constant_time_lt(rotate_offset, md_size); |
| 315 | } | 307 | } |
| 316 | #else | 308 | #else |
| 317 | memset(out, 0, md_size); | 309 | memset(out, 0, md_size); |
| 318 | rotate_offset = md_size - rotate_offset; | 310 | rotate_offset = md_size - rotate_offset; |
| 319 | rotate_offset &= constant_time_lt(rotate_offset,md_size); | 311 | rotate_offset &= constant_time_lt(rotate_offset, md_size); |
| 320 | for (i = 0; i < md_size; i++) | 312 | for (i = 0; i < md_size; i++) { |
| 321 | { | ||
| 322 | for (j = 0; j < md_size; j++) | 313 | for (j = 0; j < md_size; j++) |
| 323 | out[j] |= rotated_mac[i] & constant_time_eq_8(j, rotate_offset); | 314 | out[j] |= rotated_mac[i] & constant_time_eq_8(j, rotate_offset); |
| 324 | rotate_offset++; | 315 | rotate_offset++; |
| 325 | rotate_offset &= constant_time_lt(rotate_offset,md_size); | 316 | rotate_offset &= constant_time_lt(rotate_offset, md_size); |
| 326 | } | ||
| 327 | #endif | ||
| 328 | } | 317 | } |
| 318 | #endif | ||
| 319 | } | ||
| 329 | 320 | ||
| 330 | /* u32toLE serialises an unsigned, 32-bit number (n) as four bytes at (p) in | 321 | /* u32toLE serialises an unsigned, 32-bit number (n) as four bytes at (p) in |
| 331 | * little-endian order. The value of p is advanced by four. */ | 322 | * little-endian order. The value of p is advanced by four. */ |
| @@ -338,81 +329,83 @@ void ssl3_cbc_copy_mac(unsigned char* out, | |||
| 338 | /* These functions serialize the state of a hash and thus perform the standard | 329 | /* These functions serialize the state of a hash and thus perform the standard |
| 339 | * "final" operation without adding the padding and length that such a function | 330 | * "final" operation without adding the padding and length that such a function |
| 340 | * typically does. */ | 331 | * typically does. */ |
| 341 | static void tls1_md5_final_raw(void* ctx, unsigned char *md_out) | 332 | static void |
| 342 | { | 333 | tls1_md5_final_raw(void* ctx, unsigned char *md_out) |
| 334 | { | ||
| 343 | MD5_CTX *md5 = ctx; | 335 | MD5_CTX *md5 = ctx; |
| 344 | u32toLE(md5->A, md_out); | 336 | u32toLE(md5->A, md_out); |
| 345 | u32toLE(md5->B, md_out); | 337 | u32toLE(md5->B, md_out); |
| 346 | u32toLE(md5->C, md_out); | 338 | u32toLE(md5->C, md_out); |
| 347 | u32toLE(md5->D, md_out); | 339 | u32toLE(md5->D, md_out); |
| 348 | } | 340 | } |
| 349 | 341 | ||
| 350 | static void tls1_sha1_final_raw(void* ctx, unsigned char *md_out) | 342 | static void |
| 351 | { | 343 | tls1_sha1_final_raw(void* ctx, unsigned char *md_out) |
| 344 | { | ||
| 352 | SHA_CTX *sha1 = ctx; | 345 | SHA_CTX *sha1 = ctx; |
| 353 | l2n(sha1->h0, md_out); | 346 | l2n(sha1->h0, md_out); |
| 354 | l2n(sha1->h1, md_out); | 347 | l2n(sha1->h1, md_out); |
| 355 | l2n(sha1->h2, md_out); | 348 | l2n(sha1->h2, md_out); |
| 356 | l2n(sha1->h3, md_out); | 349 | l2n(sha1->h3, md_out); |
| 357 | l2n(sha1->h4, md_out); | 350 | l2n(sha1->h4, md_out); |
| 358 | } | 351 | } |
| 359 | #define LARGEST_DIGEST_CTX SHA_CTX | 352 | #define LARGEST_DIGEST_CTX SHA_CTX |
| 360 | 353 | ||
| 361 | #ifndef OPENSSL_NO_SHA256 | 354 | #ifndef OPENSSL_NO_SHA256 |
| 362 | static void tls1_sha256_final_raw(void* ctx, unsigned char *md_out) | 355 | static void |
| 363 | { | 356 | tls1_sha256_final_raw(void* ctx, unsigned char *md_out) |
| 357 | { | ||
| 364 | SHA256_CTX *sha256 = ctx; | 358 | SHA256_CTX *sha256 = ctx; |
| 365 | unsigned i; | 359 | unsigned i; |
| 366 | 360 | ||
| 367 | for (i = 0; i < 8; i++) | 361 | for (i = 0; i < 8; i++) { |
| 368 | { | ||
| 369 | l2n(sha256->h[i], md_out); | 362 | l2n(sha256->h[i], md_out); |
| 370 | } | ||
| 371 | } | 363 | } |
| 364 | } | ||
| 372 | #undef LARGEST_DIGEST_CTX | 365 | #undef LARGEST_DIGEST_CTX |
| 373 | #define LARGEST_DIGEST_CTX SHA256_CTX | 366 | #define LARGEST_DIGEST_CTX SHA256_CTX |
| 374 | #endif | 367 | #endif |
| 375 | 368 | ||
| 376 | #ifndef OPENSSL_NO_SHA512 | 369 | #ifndef OPENSSL_NO_SHA512 |
| 377 | static void tls1_sha512_final_raw(void* ctx, unsigned char *md_out) | 370 | static void |
| 378 | { | 371 | tls1_sha512_final_raw(void* ctx, unsigned char *md_out) |
| 372 | { | ||
| 379 | SHA512_CTX *sha512 = ctx; | 373 | SHA512_CTX *sha512 = ctx; |
| 380 | unsigned i; | 374 | unsigned i; |
| 381 | 375 | ||
| 382 | for (i = 0; i < 8; i++) | 376 | for (i = 0; i < 8; i++) { |
| 383 | { | ||
| 384 | l2n8(sha512->h[i], md_out); | 377 | l2n8(sha512->h[i], md_out); |
| 385 | } | ||
| 386 | } | 378 | } |
| 379 | } | ||
| 387 | #undef LARGEST_DIGEST_CTX | 380 | #undef LARGEST_DIGEST_CTX |
| 388 | #define LARGEST_DIGEST_CTX SHA512_CTX | 381 | #define LARGEST_DIGEST_CTX SHA512_CTX |
| 389 | #endif | 382 | #endif |
| 390 | 383 | ||
| 391 | /* ssl3_cbc_record_digest_supported returns 1 iff |ctx| uses a hash function | 384 | /* ssl3_cbc_record_digest_supported returns 1 iff |ctx| uses a hash function |
| 392 | * which ssl3_cbc_digest_record supports. */ | 385 | * which ssl3_cbc_digest_record supports. */ |
| 393 | char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx) | 386 | char |
| 394 | { | 387 | ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx) |
| 388 | { | ||
| 395 | #ifdef OPENSSL_FIPS | 389 | #ifdef OPENSSL_FIPS |
| 396 | if (FIPS_mode()) | 390 | if (FIPS_mode()) |
| 397 | return 0; | 391 | return 0; |
| 398 | #endif | 392 | #endif |
| 399 | switch (EVP_MD_CTX_type(ctx)) | 393 | switch (EVP_MD_CTX_type(ctx)) { |
| 400 | { | 394 | case NID_md5: |
| 401 | case NID_md5: | 395 | case NID_sha1: |
| 402 | case NID_sha1: | ||
| 403 | #ifndef OPENSSL_NO_SHA256 | 396 | #ifndef OPENSSL_NO_SHA256 |
| 404 | case NID_sha224: | 397 | case NID_sha224: |
| 405 | case NID_sha256: | 398 | case NID_sha256: |
| 406 | #endif | 399 | #endif |
| 407 | #ifndef OPENSSL_NO_SHA512 | 400 | #ifndef OPENSSL_NO_SHA512 |
| 408 | case NID_sha384: | 401 | case NID_sha384: |
| 409 | case NID_sha512: | 402 | case NID_sha512: |
| 410 | #endif | 403 | #endif |
| 411 | return 1; | 404 | return 1; |
| 412 | default: | 405 | default: |
| 413 | return 0; | 406 | return 0; |
| 414 | } | ||
| 415 | } | 407 | } |
| 408 | } | ||
| 416 | 409 | ||
| 417 | /* ssl3_cbc_digest_record computes the MAC of a decrypted, padded SSLv3/TLS | 410 | /* ssl3_cbc_digest_record computes the MAC of a decrypted, padded SSLv3/TLS |
| 418 | * record. | 411 | * record. |
| @@ -433,26 +426,21 @@ char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx) | |||
| 433 | * functions, above, we know that data_plus_mac_size is large enough to contain | 426 | * functions, above, we know that data_plus_mac_size is large enough to contain |
| 434 | * a padding byte and MAC. (If the padding was invalid, it might contain the | 427 | * a padding byte and MAC. (If the padding was invalid, it might contain the |
| 435 | * padding too. ) */ | 428 | * padding too. ) */ |
| 436 | void ssl3_cbc_digest_record( | 429 | void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, unsigned char* md_out, |
| 437 | const EVP_MD_CTX *ctx, | 430 | size_t* md_out_size, const unsigned char header[13], |
| 438 | unsigned char* md_out, | 431 | const unsigned char *data, size_t data_plus_mac_size, |
| 439 | size_t* md_out_size, | 432 | size_t data_plus_mac_plus_padding_size, const unsigned char *mac_secret, |
| 440 | const unsigned char header[13], | 433 | unsigned mac_secret_length, char is_sslv3) |
| 441 | const unsigned char *data, | 434 | { |
| 442 | size_t data_plus_mac_size, | ||
| 443 | size_t data_plus_mac_plus_padding_size, | ||
| 444 | const unsigned char *mac_secret, | ||
| 445 | unsigned mac_secret_length, | ||
| 446 | char is_sslv3) | ||
| 447 | { | ||
| 448 | union { double align; | 435 | union { double align; |
| 449 | unsigned char c[sizeof(LARGEST_DIGEST_CTX)]; } md_state; | 436 | unsigned char c[sizeof(LARGEST_DIGEST_CTX)]; |
| 437 | } md_state; | ||
| 450 | void (*md_final_raw)(void *ctx, unsigned char *md_out); | 438 | void (*md_final_raw)(void *ctx, unsigned char *md_out); |
| 451 | void (*md_transform)(void *ctx, const unsigned char *block); | 439 | void (*md_transform)(void *ctx, const unsigned char *block); |
| 452 | unsigned md_size, md_block_size = 64; | 440 | unsigned md_size, md_block_size = 64; |
| 453 | unsigned sslv3_pad_length = 40, header_length, variance_blocks, | 441 | unsigned sslv3_pad_length = 40, header_length, variance_blocks, |
| 454 | len, max_mac_bytes, num_blocks, | 442 | len, max_mac_bytes, num_blocks, |
| 455 | num_starting_blocks, k, mac_end_offset, c, index_a, index_b; | 443 | num_starting_blocks, k, mac_end_offset, c, index_a, index_b; |
| 456 | unsigned int bits; /* at most 18 bits */ | 444 | unsigned int bits; /* at most 18 bits */ |
| 457 | unsigned char length_bytes[MAX_HASH_BIT_COUNT_BYTES]; | 445 | unsigned char length_bytes[MAX_HASH_BIT_COUNT_BYTES]; |
| 458 | /* hmac_pad is the masked HMAC key. */ | 446 | /* hmac_pad is the masked HMAC key. */ |
| @@ -470,78 +458,74 @@ void ssl3_cbc_digest_record( | |||
| 470 | * many possible overflows later in this function. */ | 458 | * many possible overflows later in this function. */ |
| 471 | OPENSSL_assert(data_plus_mac_plus_padding_size < 1024*1024); | 459 | OPENSSL_assert(data_plus_mac_plus_padding_size < 1024*1024); |
| 472 | 460 | ||
| 473 | switch (EVP_MD_CTX_type(ctx)) | 461 | switch (EVP_MD_CTX_type(ctx)) { |
| 474 | { | 462 | case NID_md5: |
| 475 | case NID_md5: | 463 | MD5_Init((MD5_CTX*)md_state.c); |
| 476 | MD5_Init((MD5_CTX*)md_state.c); | 464 | md_final_raw = tls1_md5_final_raw; |
| 477 | md_final_raw = tls1_md5_final_raw; | 465 | md_transform = (void(*)(void *ctx, const unsigned char *block)) MD5_Transform; |
| 478 | md_transform = (void(*)(void *ctx, const unsigned char *block)) MD5_Transform; | 466 | md_size = 16; |
| 479 | md_size = 16; | 467 | sslv3_pad_length = 48; |
| 480 | sslv3_pad_length = 48; | 468 | length_is_big_endian = 0; |
| 481 | length_is_big_endian = 0; | 469 | break; |
| 482 | break; | 470 | case NID_sha1: |
| 483 | case NID_sha1: | 471 | SHA1_Init((SHA_CTX*)md_state.c); |
| 484 | SHA1_Init((SHA_CTX*)md_state.c); | 472 | md_final_raw = tls1_sha1_final_raw; |
| 485 | md_final_raw = tls1_sha1_final_raw; | 473 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA1_Transform; |
| 486 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA1_Transform; | 474 | md_size = 20; |
| 487 | md_size = 20; | 475 | break; |
| 488 | break; | ||
| 489 | #ifndef OPENSSL_NO_SHA256 | 476 | #ifndef OPENSSL_NO_SHA256 |
| 490 | case NID_sha224: | 477 | case NID_sha224: |
| 491 | SHA224_Init((SHA256_CTX*)md_state.c); | 478 | SHA224_Init((SHA256_CTX*)md_state.c); |
| 492 | md_final_raw = tls1_sha256_final_raw; | 479 | md_final_raw = tls1_sha256_final_raw; |
| 493 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform; | 480 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform; |
| 494 | md_size = 224/8; | 481 | md_size = 224/8; |
| 495 | break; | 482 | break; |
| 496 | case NID_sha256: | 483 | case NID_sha256: |
| 497 | SHA256_Init((SHA256_CTX*)md_state.c); | 484 | SHA256_Init((SHA256_CTX*)md_state.c); |
| 498 | md_final_raw = tls1_sha256_final_raw; | 485 | md_final_raw = tls1_sha256_final_raw; |
| 499 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform; | 486 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform; |
| 500 | md_size = 32; | 487 | md_size = 32; |
| 501 | break; | 488 | break; |
| 502 | #endif | 489 | #endif |
| 503 | #ifndef OPENSSL_NO_SHA512 | 490 | #ifndef OPENSSL_NO_SHA512 |
| 504 | case NID_sha384: | 491 | case NID_sha384: |
| 505 | SHA384_Init((SHA512_CTX*)md_state.c); | 492 | SHA384_Init((SHA512_CTX*)md_state.c); |
| 506 | md_final_raw = tls1_sha512_final_raw; | 493 | md_final_raw = tls1_sha512_final_raw; |
| 507 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform; | 494 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform; |
| 508 | md_size = 384/8; | 495 | md_size = 384/8; |
| 509 | md_block_size = 128; | 496 | md_block_size = 128; |
| 510 | md_length_size = 16; | 497 | md_length_size = 16; |
| 511 | break; | 498 | break; |
| 512 | case NID_sha512: | 499 | case NID_sha512: |
| 513 | SHA512_Init((SHA512_CTX*)md_state.c); | 500 | SHA512_Init((SHA512_CTX*)md_state.c); |
| 514 | md_final_raw = tls1_sha512_final_raw; | 501 | md_final_raw = tls1_sha512_final_raw; |
| 515 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform; | 502 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform; |
| 516 | md_size = 64; | 503 | md_size = 64; |
| 517 | md_block_size = 128; | 504 | md_block_size = 128; |
| 518 | md_length_size = 16; | 505 | md_length_size = 16; |
| 519 | break; | 506 | break; |
| 520 | #endif | 507 | #endif |
| 521 | default: | 508 | default: |
| 522 | /* ssl3_cbc_record_digest_supported should have been | 509 | /* ssl3_cbc_record_digest_supported should have been |
| 523 | * called first to check that the hash function is | 510 | * called first to check that the hash function is |
| 524 | * supported. */ | 511 | * supported. */ |
| 525 | OPENSSL_assert(0); | 512 | OPENSSL_assert(0); |
| 526 | if (md_out_size) | 513 | if (md_out_size) |
| 527 | *md_out_size = -1; | 514 | *md_out_size = -1; |
| 528 | return; | 515 | return; |
| 529 | } | 516 | } |
| 530 | 517 | ||
| 531 | OPENSSL_assert(md_length_size <= MAX_HASH_BIT_COUNT_BYTES); | 518 | OPENSSL_assert(md_length_size <= MAX_HASH_BIT_COUNT_BYTES); |
| 532 | OPENSSL_assert(md_block_size <= MAX_HASH_BLOCK_SIZE); | 519 | OPENSSL_assert(md_block_size <= MAX_HASH_BLOCK_SIZE); |
| 533 | OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE); | 520 | OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE); |
| 534 | 521 | ||
| 535 | header_length = 13; | 522 | header_length = 13; |
| 536 | if (is_sslv3) | 523 | if (is_sslv3) { |
| 537 | { | 524 | header_length = mac_secret_length + sslv3_pad_length + |
| 538 | header_length = | 525 | 8 /* sequence number */ + |
| 539 | mac_secret_length + | 526 | 1 /* record type */ + |
| 540 | sslv3_pad_length + | 527 | 2 /* record length */; |
| 541 | 8 /* sequence number */ + | 528 | } |
| 542 | 1 /* record type */ + | ||
| 543 | 2 /* record length */; | ||
| 544 | } | ||
| 545 | 529 | ||
| 546 | /* variance_blocks is the number of blocks of the hash that we have to | 530 | /* variance_blocks is the number of blocks of the hash that we have to |
| 547 | * calculate in constant time because they could be altered by the | 531 | * calculate in constant time because they could be altered by the |
| @@ -597,15 +581,13 @@ void ssl3_cbc_digest_record( | |||
| 597 | 581 | ||
| 598 | /* For SSLv3, if we're going to have any starting blocks then we need | 582 | /* For SSLv3, if we're going to have any starting blocks then we need |
| 599 | * at least two because the header is larger than a single block. */ | 583 | * at least two because the header is larger than a single block. */ |
| 600 | if (num_blocks > variance_blocks + (is_sslv3 ? 1 : 0)) | 584 | if (num_blocks > variance_blocks + (is_sslv3 ? 1 : 0)) { |
| 601 | { | ||
| 602 | num_starting_blocks = num_blocks - variance_blocks; | 585 | num_starting_blocks = num_blocks - variance_blocks; |
| 603 | k = md_block_size*num_starting_blocks; | 586 | k = md_block_size*num_starting_blocks; |
| 604 | } | 587 | } |
| 605 | 588 | ||
| 606 | bits = 8*mac_end_offset; | 589 | bits = 8*mac_end_offset; |
| 607 | if (!is_sslv3) | 590 | if (!is_sslv3) { |
| 608 | { | ||
| 609 | /* Compute the initial HMAC block. For SSLv3, the padding and | 591 | /* Compute the initial HMAC block. For SSLv3, the padding and |
| 610 | * secret bytes are included in |header| because they take more | 592 | * secret bytes are included in |header| because they take more |
| 611 | * than a single block. */ | 593 | * than a single block. */ |
| @@ -617,51 +599,44 @@ void ssl3_cbc_digest_record( | |||
| 617 | hmac_pad[i] ^= 0x36; | 599 | hmac_pad[i] ^= 0x36; |
| 618 | 600 | ||
| 619 | md_transform(md_state.c, hmac_pad); | 601 | md_transform(md_state.c, hmac_pad); |
| 620 | } | 602 | } |
| 621 | 603 | ||
| 622 | if (length_is_big_endian) | 604 | if (length_is_big_endian) { |
| 623 | { | 605 | memset(length_bytes, 0, md_length_size - 4); |
| 624 | memset(length_bytes,0,md_length_size-4); | 606 | length_bytes[md_length_size - 4] = (unsigned char)(bits >> 24); |
| 625 | length_bytes[md_length_size-4] = (unsigned char)(bits>>24); | 607 | length_bytes[md_length_size - 3] = (unsigned char)(bits >> 16); |
| 626 | length_bytes[md_length_size-3] = (unsigned char)(bits>>16); | 608 | length_bytes[md_length_size - 2] = (unsigned char)(bits >> 8); |
| 627 | length_bytes[md_length_size-2] = (unsigned char)(bits>>8); | 609 | length_bytes[md_length_size - 1] = (unsigned char)bits; |
| 628 | length_bytes[md_length_size-1] = (unsigned char)bits; | 610 | } else { |
| 629 | } | 611 | memset(length_bytes, 0, md_length_size); |
| 630 | else | 612 | length_bytes[md_length_size - 5] = (unsigned char)(bits >> 24); |
| 631 | { | 613 | length_bytes[md_length_size - 6] = (unsigned char)(bits >> 16); |
| 632 | memset(length_bytes,0,md_length_size); | 614 | length_bytes[md_length_size - 7] = (unsigned char)(bits >> 8); |
| 633 | length_bytes[md_length_size-5] = (unsigned char)(bits>>24); | 615 | length_bytes[md_length_size - 8] = (unsigned char)bits; |
| 634 | length_bytes[md_length_size-6] = (unsigned char)(bits>>16); | 616 | } |
| 635 | length_bytes[md_length_size-7] = (unsigned char)(bits>>8); | ||
| 636 | length_bytes[md_length_size-8] = (unsigned char)bits; | ||
| 637 | } | ||
| 638 | 617 | ||
| 639 | if (k > 0) | 618 | if (k > 0) { |
| 640 | { | 619 | if (is_sslv3) { |
| 641 | if (is_sslv3) | ||
| 642 | { | ||
| 643 | /* The SSLv3 header is larger than a single block. | 620 | /* The SSLv3 header is larger than a single block. |
| 644 | * overhang is the number of bytes beyond a single | 621 | * overhang is the number of bytes beyond a single |
| 645 | * block that the header consumes: either 7 bytes | 622 | * block that the header consumes: either 7 bytes |
| 646 | * (SHA1) or 11 bytes (MD5). */ | 623 | * (SHA1) or 11 bytes (MD5). */ |
| 647 | unsigned overhang = header_length-md_block_size; | 624 | unsigned overhang = header_length - md_block_size; |
| 648 | md_transform(md_state.c, header); | 625 | md_transform(md_state.c, header); |
| 649 | memcpy(first_block, header + md_block_size, overhang); | 626 | memcpy(first_block, header + md_block_size, overhang); |
| 650 | memcpy(first_block + overhang, data, md_block_size-overhang); | 627 | memcpy(first_block + overhang, data, md_block_size - overhang); |
| 651 | md_transform(md_state.c, first_block); | 628 | md_transform(md_state.c, first_block); |
| 652 | for (i = 1; i < k/md_block_size - 1; i++) | 629 | for (i = 1; i < k/md_block_size - 1; i++) |
| 653 | md_transform(md_state.c, data + md_block_size*i - overhang); | 630 | md_transform(md_state.c, data + md_block_size*i - overhang); |
| 654 | } | 631 | } else { |
| 655 | else | ||
| 656 | { | ||
| 657 | /* k is a multiple of md_block_size. */ | 632 | /* k is a multiple of md_block_size. */ |
| 658 | memcpy(first_block, header, 13); | 633 | memcpy(first_block, header, 13); |
| 659 | memcpy(first_block+13, data, md_block_size-13); | 634 | memcpy(first_block + 13, data, md_block_size - 13); |
| 660 | md_transform(md_state.c, first_block); | 635 | md_transform(md_state.c, first_block); |
| 661 | for (i = 1; i < k/md_block_size; i++) | 636 | for (i = 1; i < k/md_block_size; i++) |
| 662 | md_transform(md_state.c, data + md_block_size*i - 13); | 637 | md_transform(md_state.c, data + md_block_size*i - 13); |
| 663 | } | ||
| 664 | } | 638 | } |
| 639 | } | ||
| 665 | 640 | ||
| 666 | memset(mac_out, 0, sizeof(mac_out)); | 641 | memset(mac_out, 0, sizeof(mac_out)); |
| 667 | 642 | ||
| @@ -669,22 +644,20 @@ void ssl3_cbc_digest_record( | |||
| 669 | * it in constant time. If the |i==index_a| then we'll include the 0x80 | 644 | * it in constant time. If the |i==index_a| then we'll include the 0x80 |
| 670 | * bytes and zero pad etc. For each block we selectively copy it, in | 645 | * bytes and zero pad etc. For each block we selectively copy it, in |
| 671 | * constant time, to |mac_out|. */ | 646 | * constant time, to |mac_out|. */ |
| 672 | for (i = num_starting_blocks; i <= num_starting_blocks+variance_blocks; i++) | 647 | for (i = num_starting_blocks; i <= num_starting_blocks + variance_blocks; i++) { |
| 673 | { | ||
| 674 | unsigned char block[MAX_HASH_BLOCK_SIZE]; | 648 | unsigned char block[MAX_HASH_BLOCK_SIZE]; |
| 675 | unsigned char is_block_a = constant_time_eq_8(i, index_a); | 649 | unsigned char is_block_a = constant_time_eq_8(i, index_a); |
| 676 | unsigned char is_block_b = constant_time_eq_8(i, index_b); | 650 | unsigned char is_block_b = constant_time_eq_8(i, index_b); |
| 677 | for (j = 0; j < md_block_size; j++) | 651 | for (j = 0; j < md_block_size; j++) { |
| 678 | { | ||
| 679 | unsigned char b = 0, is_past_c, is_past_cp1; | 652 | unsigned char b = 0, is_past_c, is_past_cp1; |
| 680 | if (k < header_length) | 653 | if (k < header_length) |
| 681 | b = header[k]; | 654 | b = header[k]; |
| 682 | else if (k < data_plus_mac_plus_padding_size + header_length) | 655 | else if (k < data_plus_mac_plus_padding_size + header_length) |
| 683 | b = data[k-header_length]; | 656 | b = data[k - header_length]; |
| 684 | k++; | 657 | k++; |
| 685 | 658 | ||
| 686 | is_past_c = is_block_a & constant_time_ge(j, c); | 659 | is_past_c = is_block_a & constant_time_ge(j, c); |
| 687 | is_past_cp1 = is_block_a & constant_time_ge(j, c+1); | 660 | is_past_cp1 = is_block_a & constant_time_ge(j, c + 1); |
| 688 | /* If this is the block containing the end of the | 661 | /* If this is the block containing the end of the |
| 689 | * application data, and we are at the offset for the | 662 | * application data, and we are at the offset for the |
| 690 | * 0x80 value, then overwrite b with 0x80. */ | 663 | * 0x80 value, then overwrite b with 0x80. */ |
| @@ -701,46 +674,42 @@ void ssl3_cbc_digest_record( | |||
| 701 | 674 | ||
| 702 | /* The final bytes of one of the blocks contains the | 675 | /* The final bytes of one of the blocks contains the |
| 703 | * length. */ | 676 | * length. */ |
| 704 | if (j >= md_block_size - md_length_size) | 677 | if (j >= md_block_size - md_length_size) { |
| 705 | { | ||
| 706 | /* If this is index_b, write a length byte. */ | 678 | /* If this is index_b, write a length byte. */ |
| 707 | b = (b&~is_block_b) | (is_block_b&length_bytes[j-(md_block_size-md_length_size)]); | 679 | b = (b&~is_block_b) | (is_block_b&length_bytes[j - (md_block_size - md_length_size)]); |
| 708 | } | ||
| 709 | block[j] = b; | ||
| 710 | } | 680 | } |
| 681 | block[j] = b; | ||
| 682 | } | ||
| 711 | 683 | ||
| 712 | md_transform(md_state.c, block); | 684 | md_transform(md_state.c, block); |
| 713 | md_final_raw(md_state.c, block); | 685 | md_final_raw(md_state.c, block); |
| 714 | /* If this is index_b, copy the hash value to |mac_out|. */ | 686 | /* If this is index_b, copy the hash value to |mac_out|. */ |
| 715 | for (j = 0; j < md_size; j++) | 687 | for (j = 0; j < md_size; j++) |
| 716 | mac_out[j] |= block[j]&is_block_b; | 688 | mac_out[j] |= block[j]&is_block_b; |
| 717 | } | 689 | } |
| 718 | 690 | ||
| 719 | EVP_MD_CTX_init(&md_ctx); | 691 | EVP_MD_CTX_init(&md_ctx); |
| 720 | EVP_DigestInit_ex(&md_ctx, ctx->digest, NULL /* engine */); | 692 | EVP_DigestInit_ex(&md_ctx, ctx->digest, NULL /* engine */); |
| 721 | if (is_sslv3) | 693 | if (is_sslv3) { |
| 722 | { | ||
| 723 | /* We repurpose |hmac_pad| to contain the SSLv3 pad2 block. */ | 694 | /* We repurpose |hmac_pad| to contain the SSLv3 pad2 block. */ |
| 724 | memset(hmac_pad, 0x5c, sslv3_pad_length); | 695 | memset(hmac_pad, 0x5c, sslv3_pad_length); |
| 725 | 696 | ||
| 726 | EVP_DigestUpdate(&md_ctx, mac_secret, mac_secret_length); | 697 | EVP_DigestUpdate(&md_ctx, mac_secret, mac_secret_length); |
| 727 | EVP_DigestUpdate(&md_ctx, hmac_pad, sslv3_pad_length); | 698 | EVP_DigestUpdate(&md_ctx, hmac_pad, sslv3_pad_length); |
| 728 | EVP_DigestUpdate(&md_ctx, mac_out, md_size); | 699 | EVP_DigestUpdate(&md_ctx, mac_out, md_size); |
| 729 | } | 700 | } else { |
| 730 | else | ||
| 731 | { | ||
| 732 | /* Complete the HMAC in the standard manner. */ | 701 | /* Complete the HMAC in the standard manner. */ |
| 733 | for (i = 0; i < md_block_size; i++) | 702 | for (i = 0; i < md_block_size; i++) |
| 734 | hmac_pad[i] ^= 0x6a; | 703 | hmac_pad[i] ^= 0x6a; |
| 735 | 704 | ||
| 736 | EVP_DigestUpdate(&md_ctx, hmac_pad, md_block_size); | 705 | EVP_DigestUpdate(&md_ctx, hmac_pad, md_block_size); |
| 737 | EVP_DigestUpdate(&md_ctx, mac_out, md_size); | 706 | EVP_DigestUpdate(&md_ctx, mac_out, md_size); |
| 738 | } | 707 | } |
| 739 | EVP_DigestFinal(&md_ctx, md_out, &md_out_size_u); | 708 | EVP_DigestFinal(&md_ctx, md_out, &md_out_size_u); |
| 740 | if (md_out_size) | 709 | if (md_out_size) |
| 741 | *md_out_size = md_out_size_u; | 710 | *md_out_size = md_out_size_u; |
| 742 | EVP_MD_CTX_cleanup(&md_ctx); | 711 | EVP_MD_CTX_cleanup(&md_ctx); |
| 743 | } | 712 | } |
| 744 | 713 | ||
| 745 | #ifdef OPENSSL_FIPS | 714 | #ifdef OPENSSL_FIPS |
| 746 | 715 | ||
| @@ -749,10 +718,10 @@ void ssl3_cbc_digest_record( | |||
| 749 | * by digesting additional data. | 718 | * by digesting additional data. |
| 750 | */ | 719 | */ |
| 751 | 720 | ||
| 752 | void tls_fips_digest_extra( | 721 | void tls_fips_digest_extra(const EVP_CIPHER_CTX *cipher_ctx, |
| 753 | const EVP_CIPHER_CTX *cipher_ctx, EVP_MD_CTX *mac_ctx, | 722 | EVP_MD_CTX *mac_ctx, const unsigned char *data, size_t data_len, |
| 754 | const unsigned char *data, size_t data_len, size_t orig_len) | 723 | size_t orig_len) |
| 755 | { | 724 | { |
| 756 | size_t block_size, digest_pad, blocks_data, blocks_orig; | 725 | size_t block_size, digest_pad, blocks_data, blocks_orig; |
| 757 | if (EVP_CIPHER_CTX_mode(cipher_ctx) != EVP_CIPH_CBC_MODE) | 726 | if (EVP_CIPHER_CTX_mode(cipher_ctx) != EVP_CIPH_CBC_MODE) |
| 758 | return; | 727 | return; |
| @@ -785,6 +754,6 @@ void tls_fips_digest_extra( | |||
| 785 | * length TLS buffer. | 754 | * length TLS buffer. |
| 786 | */ | 755 | */ |
| 787 | EVP_DigestSignUpdate(mac_ctx, data, | 756 | EVP_DigestSignUpdate(mac_ctx, data, |
| 788 | (blocks_orig - blocks_data + 1) * block_size); | 757 | (blocks_orig - blocks_data + 1) * block_size); |
| 789 | } | 758 | } |
| 790 | #endif | 759 | #endif |
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index fd1e7b80d8..926071fffa 100644 --- a/src/lib/libssl/s3_lib.c +++ b/src/lib/libssl/s3_lib.c | |||
| @@ -164,496 +164,496 @@ | |||
| 164 | 164 | ||
| 165 | const char ssl3_version_str[]="SSLv3" OPENSSL_VERSION_PTEXT; | 165 | const char ssl3_version_str[]="SSLv3" OPENSSL_VERSION_PTEXT; |
| 166 | 166 | ||
| 167 | #define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER)) | 167 | #define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers) / sizeof(SSL_CIPHER)) |
| 168 | 168 | ||
| 169 | /* list of available SSLv3 ciphers (sorted by id) */ | 169 | /* list of available SSLv3 ciphers (sorted by id) */ |
| 170 | OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | 170 | OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = { |
| 171 | 171 | ||
| 172 | /* The RSA ciphers */ | 172 | /* The RSA ciphers */ |
| 173 | /* Cipher 01 */ | 173 | /* Cipher 01 */ |
| 174 | { | 174 | { |
| 175 | 1, | 175 | 1, |
| 176 | SSL3_TXT_RSA_NULL_MD5, | 176 | SSL3_TXT_RSA_NULL_MD5, |
| 177 | SSL3_CK_RSA_NULL_MD5, | 177 | SSL3_CK_RSA_NULL_MD5, |
| 178 | SSL_kRSA, | 178 | SSL_kRSA, |
| 179 | SSL_aRSA, | 179 | SSL_aRSA, |
| 180 | SSL_eNULL, | 180 | SSL_eNULL, |
| 181 | SSL_MD5, | 181 | SSL_MD5, |
| 182 | SSL_SSLV3, | 182 | SSL_SSLV3, |
| 183 | SSL_NOT_EXP|SSL_STRONG_NONE, | 183 | SSL_NOT_EXP|SSL_STRONG_NONE, |
| 184 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 184 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 185 | 0, | 185 | 0, |
| 186 | 0, | 186 | 0, |
| 187 | }, | 187 | }, |
| 188 | 188 | ||
| 189 | /* Cipher 02 */ | 189 | /* Cipher 02 */ |
| 190 | { | 190 | { |
| 191 | 1, | 191 | 1, |
| 192 | SSL3_TXT_RSA_NULL_SHA, | 192 | SSL3_TXT_RSA_NULL_SHA, |
| 193 | SSL3_CK_RSA_NULL_SHA, | 193 | SSL3_CK_RSA_NULL_SHA, |
| 194 | SSL_kRSA, | 194 | SSL_kRSA, |
| 195 | SSL_aRSA, | 195 | SSL_aRSA, |
| 196 | SSL_eNULL, | 196 | SSL_eNULL, |
| 197 | SSL_SHA1, | 197 | SSL_SHA1, |
| 198 | SSL_SSLV3, | 198 | SSL_SSLV3, |
| 199 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 199 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
| 200 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 200 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 201 | 0, | 201 | 0, |
| 202 | 0, | 202 | 0, |
| 203 | }, | 203 | }, |
| 204 | 204 | ||
| 205 | /* Cipher 03 */ | 205 | /* Cipher 03 */ |
| 206 | { | 206 | { |
| 207 | 1, | 207 | 1, |
| 208 | SSL3_TXT_RSA_RC4_40_MD5, | 208 | SSL3_TXT_RSA_RC4_40_MD5, |
| 209 | SSL3_CK_RSA_RC4_40_MD5, | 209 | SSL3_CK_RSA_RC4_40_MD5, |
| 210 | SSL_kRSA, | 210 | SSL_kRSA, |
| 211 | SSL_aRSA, | 211 | SSL_aRSA, |
| 212 | SSL_RC4, | 212 | SSL_RC4, |
| 213 | SSL_MD5, | 213 | SSL_MD5, |
| 214 | SSL_SSLV3, | 214 | SSL_SSLV3, |
| 215 | SSL_EXPORT|SSL_EXP40, | 215 | SSL_EXPORT|SSL_EXP40, |
| 216 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 216 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 217 | 40, | 217 | 40, |
| 218 | 128, | 218 | 128, |
| 219 | }, | 219 | }, |
| 220 | 220 | ||
| 221 | /* Cipher 04 */ | 221 | /* Cipher 04 */ |
| 222 | { | 222 | { |
| 223 | 1, | 223 | 1, |
| 224 | SSL3_TXT_RSA_RC4_128_MD5, | 224 | SSL3_TXT_RSA_RC4_128_MD5, |
| 225 | SSL3_CK_RSA_RC4_128_MD5, | 225 | SSL3_CK_RSA_RC4_128_MD5, |
| 226 | SSL_kRSA, | 226 | SSL_kRSA, |
| 227 | SSL_aRSA, | 227 | SSL_aRSA, |
| 228 | SSL_RC4, | 228 | SSL_RC4, |
| 229 | SSL_MD5, | 229 | SSL_MD5, |
| 230 | SSL_SSLV3, | 230 | SSL_SSLV3, |
| 231 | SSL_NOT_EXP|SSL_MEDIUM, | 231 | SSL_NOT_EXP|SSL_MEDIUM, |
| 232 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 232 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 233 | 128, | 233 | 128, |
| 234 | 128, | 234 | 128, |
| 235 | }, | 235 | }, |
| 236 | 236 | ||
| 237 | /* Cipher 05 */ | 237 | /* Cipher 05 */ |
| 238 | { | 238 | { |
| 239 | 1, | 239 | 1, |
| 240 | SSL3_TXT_RSA_RC4_128_SHA, | 240 | SSL3_TXT_RSA_RC4_128_SHA, |
| 241 | SSL3_CK_RSA_RC4_128_SHA, | 241 | SSL3_CK_RSA_RC4_128_SHA, |
| 242 | SSL_kRSA, | 242 | SSL_kRSA, |
| 243 | SSL_aRSA, | 243 | SSL_aRSA, |
| 244 | SSL_RC4, | 244 | SSL_RC4, |
| 245 | SSL_SHA1, | 245 | SSL_SHA1, |
| 246 | SSL_SSLV3, | 246 | SSL_SSLV3, |
| 247 | SSL_NOT_EXP|SSL_MEDIUM, | 247 | SSL_NOT_EXP|SSL_MEDIUM, |
| 248 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 248 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 249 | 128, | 249 | 128, |
| 250 | 128, | 250 | 128, |
| 251 | }, | 251 | }, |
| 252 | 252 | ||
| 253 | /* Cipher 06 */ | 253 | /* Cipher 06 */ |
| 254 | { | 254 | { |
| 255 | 1, | 255 | 1, |
| 256 | SSL3_TXT_RSA_RC2_40_MD5, | 256 | SSL3_TXT_RSA_RC2_40_MD5, |
| 257 | SSL3_CK_RSA_RC2_40_MD5, | 257 | SSL3_CK_RSA_RC2_40_MD5, |
| 258 | SSL_kRSA, | 258 | SSL_kRSA, |
| 259 | SSL_aRSA, | 259 | SSL_aRSA, |
| 260 | SSL_RC2, | 260 | SSL_RC2, |
| 261 | SSL_MD5, | 261 | SSL_MD5, |
| 262 | SSL_SSLV3, | 262 | SSL_SSLV3, |
| 263 | SSL_EXPORT|SSL_EXP40, | 263 | SSL_EXPORT|SSL_EXP40, |
| 264 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 264 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 265 | 40, | 265 | 40, |
| 266 | 128, | 266 | 128, |
| 267 | }, | 267 | }, |
| 268 | 268 | ||
| 269 | /* Cipher 07 */ | 269 | /* Cipher 07 */ |
| 270 | #ifndef OPENSSL_NO_IDEA | 270 | #ifndef OPENSSL_NO_IDEA |
| 271 | { | 271 | { |
| 272 | 1, | 272 | 1, |
| 273 | SSL3_TXT_RSA_IDEA_128_SHA, | 273 | SSL3_TXT_RSA_IDEA_128_SHA, |
| 274 | SSL3_CK_RSA_IDEA_128_SHA, | 274 | SSL3_CK_RSA_IDEA_128_SHA, |
| 275 | SSL_kRSA, | 275 | SSL_kRSA, |
| 276 | SSL_aRSA, | 276 | SSL_aRSA, |
| 277 | SSL_IDEA, | 277 | SSL_IDEA, |
| 278 | SSL_SHA1, | 278 | SSL_SHA1, |
| 279 | SSL_SSLV3, | 279 | SSL_SSLV3, |
| 280 | SSL_NOT_EXP|SSL_MEDIUM, | 280 | SSL_NOT_EXP|SSL_MEDIUM, |
| 281 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 281 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 282 | 128, | 282 | 128, |
| 283 | 128, | 283 | 128, |
| 284 | }, | 284 | }, |
| 285 | #endif | 285 | #endif |
| 286 | 286 | ||
| 287 | /* Cipher 08 */ | 287 | /* Cipher 08 */ |
| 288 | { | 288 | { |
| 289 | 1, | 289 | 1, |
| 290 | SSL3_TXT_RSA_DES_40_CBC_SHA, | 290 | SSL3_TXT_RSA_DES_40_CBC_SHA, |
| 291 | SSL3_CK_RSA_DES_40_CBC_SHA, | 291 | SSL3_CK_RSA_DES_40_CBC_SHA, |
| 292 | SSL_kRSA, | 292 | SSL_kRSA, |
| 293 | SSL_aRSA, | 293 | SSL_aRSA, |
| 294 | SSL_DES, | 294 | SSL_DES, |
| 295 | SSL_SHA1, | 295 | SSL_SHA1, |
| 296 | SSL_SSLV3, | 296 | SSL_SSLV3, |
| 297 | SSL_EXPORT|SSL_EXP40, | 297 | SSL_EXPORT|SSL_EXP40, |
| 298 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 298 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 299 | 40, | 299 | 40, |
| 300 | 56, | 300 | 56, |
| 301 | }, | 301 | }, |
| 302 | 302 | ||
| 303 | /* Cipher 09 */ | 303 | /* Cipher 09 */ |
| 304 | { | 304 | { |
| 305 | 1, | 305 | 1, |
| 306 | SSL3_TXT_RSA_DES_64_CBC_SHA, | 306 | SSL3_TXT_RSA_DES_64_CBC_SHA, |
| 307 | SSL3_CK_RSA_DES_64_CBC_SHA, | 307 | SSL3_CK_RSA_DES_64_CBC_SHA, |
| 308 | SSL_kRSA, | 308 | SSL_kRSA, |
| 309 | SSL_aRSA, | 309 | SSL_aRSA, |
| 310 | SSL_DES, | 310 | SSL_DES, |
| 311 | SSL_SHA1, | 311 | SSL_SHA1, |
| 312 | SSL_SSLV3, | 312 | SSL_SSLV3, |
| 313 | SSL_NOT_EXP|SSL_LOW, | 313 | SSL_NOT_EXP|SSL_LOW, |
| 314 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 314 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 315 | 56, | 315 | 56, |
| 316 | 56, | 316 | 56, |
| 317 | }, | 317 | }, |
| 318 | 318 | ||
| 319 | /* Cipher 0A */ | 319 | /* Cipher 0A */ |
| 320 | { | 320 | { |
| 321 | 1, | 321 | 1, |
| 322 | SSL3_TXT_RSA_DES_192_CBC3_SHA, | 322 | SSL3_TXT_RSA_DES_192_CBC3_SHA, |
| 323 | SSL3_CK_RSA_DES_192_CBC3_SHA, | 323 | SSL3_CK_RSA_DES_192_CBC3_SHA, |
| 324 | SSL_kRSA, | 324 | SSL_kRSA, |
| 325 | SSL_aRSA, | 325 | SSL_aRSA, |
| 326 | SSL_3DES, | 326 | SSL_3DES, |
| 327 | SSL_SHA1, | 327 | SSL_SHA1, |
| 328 | SSL_SSLV3, | 328 | SSL_SSLV3, |
| 329 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 329 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 330 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 330 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 331 | 168, | 331 | 168, |
| 332 | 168, | 332 | 168, |
| 333 | }, | 333 | }, |
| 334 | 334 | ||
| 335 | /* The DH ciphers */ | 335 | /* The DH ciphers */ |
| 336 | /* Cipher 0B */ | 336 | /* Cipher 0B */ |
| 337 | { | 337 | { |
| 338 | 0, | 338 | 0, |
| 339 | SSL3_TXT_DH_DSS_DES_40_CBC_SHA, | 339 | SSL3_TXT_DH_DSS_DES_40_CBC_SHA, |
| 340 | SSL3_CK_DH_DSS_DES_40_CBC_SHA, | 340 | SSL3_CK_DH_DSS_DES_40_CBC_SHA, |
| 341 | SSL_kDHd, | 341 | SSL_kDHd, |
| 342 | SSL_aDH, | 342 | SSL_aDH, |
| 343 | SSL_DES, | 343 | SSL_DES, |
| 344 | SSL_SHA1, | 344 | SSL_SHA1, |
| 345 | SSL_SSLV3, | 345 | SSL_SSLV3, |
| 346 | SSL_EXPORT|SSL_EXP40, | 346 | SSL_EXPORT|SSL_EXP40, |
| 347 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 347 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 348 | 40, | 348 | 40, |
| 349 | 56, | 349 | 56, |
| 350 | }, | 350 | }, |
| 351 | 351 | ||
| 352 | /* Cipher 0C */ | 352 | /* Cipher 0C */ |
| 353 | { | 353 | { |
| 354 | 0, /* not implemented (non-ephemeral DH) */ | 354 | 0, /* not implemented (non-ephemeral DH) */ |
| 355 | SSL3_TXT_DH_DSS_DES_64_CBC_SHA, | 355 | SSL3_TXT_DH_DSS_DES_64_CBC_SHA, |
| 356 | SSL3_CK_DH_DSS_DES_64_CBC_SHA, | 356 | SSL3_CK_DH_DSS_DES_64_CBC_SHA, |
| 357 | SSL_kDHd, | 357 | SSL_kDHd, |
| 358 | SSL_aDH, | 358 | SSL_aDH, |
| 359 | SSL_DES, | 359 | SSL_DES, |
| 360 | SSL_SHA1, | 360 | SSL_SHA1, |
| 361 | SSL_SSLV3, | 361 | SSL_SSLV3, |
| 362 | SSL_NOT_EXP|SSL_LOW, | 362 | SSL_NOT_EXP|SSL_LOW, |
| 363 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 363 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 364 | 56, | 364 | 56, |
| 365 | 56, | 365 | 56, |
| 366 | }, | 366 | }, |
| 367 | 367 | ||
| 368 | /* Cipher 0D */ | 368 | /* Cipher 0D */ |
| 369 | { | 369 | { |
| 370 | 0, /* not implemented (non-ephemeral DH) */ | 370 | 0, /* not implemented (non-ephemeral DH) */ |
| 371 | SSL3_TXT_DH_DSS_DES_192_CBC3_SHA, | 371 | SSL3_TXT_DH_DSS_DES_192_CBC3_SHA, |
| 372 | SSL3_CK_DH_DSS_DES_192_CBC3_SHA, | 372 | SSL3_CK_DH_DSS_DES_192_CBC3_SHA, |
| 373 | SSL_kDHd, | 373 | SSL_kDHd, |
| 374 | SSL_aDH, | 374 | SSL_aDH, |
| 375 | SSL_3DES, | 375 | SSL_3DES, |
| 376 | SSL_SHA1, | 376 | SSL_SHA1, |
| 377 | SSL_SSLV3, | 377 | SSL_SSLV3, |
| 378 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 378 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 379 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 379 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 380 | 168, | 380 | 168, |
| 381 | 168, | 381 | 168, |
| 382 | }, | 382 | }, |
| 383 | 383 | ||
| 384 | /* Cipher 0E */ | 384 | /* Cipher 0E */ |
| 385 | { | 385 | { |
| 386 | 0, /* not implemented (non-ephemeral DH) */ | 386 | 0, /* not implemented (non-ephemeral DH) */ |
| 387 | SSL3_TXT_DH_RSA_DES_40_CBC_SHA, | 387 | SSL3_TXT_DH_RSA_DES_40_CBC_SHA, |
| 388 | SSL3_CK_DH_RSA_DES_40_CBC_SHA, | 388 | SSL3_CK_DH_RSA_DES_40_CBC_SHA, |
| 389 | SSL_kDHr, | 389 | SSL_kDHr, |
| 390 | SSL_aDH, | 390 | SSL_aDH, |
| 391 | SSL_DES, | 391 | SSL_DES, |
| 392 | SSL_SHA1, | 392 | SSL_SHA1, |
| 393 | SSL_SSLV3, | 393 | SSL_SSLV3, |
| 394 | SSL_EXPORT|SSL_EXP40, | 394 | SSL_EXPORT|SSL_EXP40, |
| 395 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 395 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 396 | 40, | 396 | 40, |
| 397 | 56, | 397 | 56, |
| 398 | }, | 398 | }, |
| 399 | 399 | ||
| 400 | /* Cipher 0F */ | 400 | /* Cipher 0F */ |
| 401 | { | 401 | { |
| 402 | 0, /* not implemented (non-ephemeral DH) */ | 402 | 0, /* not implemented (non-ephemeral DH) */ |
| 403 | SSL3_TXT_DH_RSA_DES_64_CBC_SHA, | 403 | SSL3_TXT_DH_RSA_DES_64_CBC_SHA, |
| 404 | SSL3_CK_DH_RSA_DES_64_CBC_SHA, | 404 | SSL3_CK_DH_RSA_DES_64_CBC_SHA, |
| 405 | SSL_kDHr, | 405 | SSL_kDHr, |
| 406 | SSL_aDH, | 406 | SSL_aDH, |
| 407 | SSL_DES, | 407 | SSL_DES, |
| 408 | SSL_SHA1, | 408 | SSL_SHA1, |
| 409 | SSL_SSLV3, | 409 | SSL_SSLV3, |
| 410 | SSL_NOT_EXP|SSL_LOW, | 410 | SSL_NOT_EXP|SSL_LOW, |
| 411 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 411 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 412 | 56, | 412 | 56, |
| 413 | 56, | 413 | 56, |
| 414 | }, | 414 | }, |
| 415 | 415 | ||
| 416 | /* Cipher 10 */ | 416 | /* Cipher 10 */ |
| 417 | { | 417 | { |
| 418 | 0, /* not implemented (non-ephemeral DH) */ | 418 | 0, /* not implemented (non-ephemeral DH) */ |
| 419 | SSL3_TXT_DH_RSA_DES_192_CBC3_SHA, | 419 | SSL3_TXT_DH_RSA_DES_192_CBC3_SHA, |
| 420 | SSL3_CK_DH_RSA_DES_192_CBC3_SHA, | 420 | SSL3_CK_DH_RSA_DES_192_CBC3_SHA, |
| 421 | SSL_kDHr, | 421 | SSL_kDHr, |
| 422 | SSL_aDH, | 422 | SSL_aDH, |
| 423 | SSL_3DES, | 423 | SSL_3DES, |
| 424 | SSL_SHA1, | 424 | SSL_SHA1, |
| 425 | SSL_SSLV3, | 425 | SSL_SSLV3, |
| 426 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 426 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 427 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 427 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 428 | 168, | 428 | 168, |
| 429 | 168, | 429 | 168, |
| 430 | }, | 430 | }, |
| 431 | 431 | ||
| 432 | /* The Ephemeral DH ciphers */ | 432 | /* The Ephemeral DH ciphers */ |
| 433 | /* Cipher 11 */ | 433 | /* Cipher 11 */ |
| 434 | { | 434 | { |
| 435 | 1, | 435 | 1, |
| 436 | SSL3_TXT_EDH_DSS_DES_40_CBC_SHA, | 436 | SSL3_TXT_EDH_DSS_DES_40_CBC_SHA, |
| 437 | SSL3_CK_EDH_DSS_DES_40_CBC_SHA, | 437 | SSL3_CK_EDH_DSS_DES_40_CBC_SHA, |
| 438 | SSL_kEDH, | 438 | SSL_kEDH, |
| 439 | SSL_aDSS, | 439 | SSL_aDSS, |
| 440 | SSL_DES, | 440 | SSL_DES, |
| 441 | SSL_SHA1, | 441 | SSL_SHA1, |
| 442 | SSL_SSLV3, | 442 | SSL_SSLV3, |
| 443 | SSL_EXPORT|SSL_EXP40, | 443 | SSL_EXPORT|SSL_EXP40, |
| 444 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 444 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 445 | 40, | 445 | 40, |
| 446 | 56, | 446 | 56, |
| 447 | }, | 447 | }, |
| 448 | 448 | ||
| 449 | /* Cipher 12 */ | 449 | /* Cipher 12 */ |
| 450 | { | 450 | { |
| 451 | 1, | 451 | 1, |
| 452 | SSL3_TXT_EDH_DSS_DES_64_CBC_SHA, | 452 | SSL3_TXT_EDH_DSS_DES_64_CBC_SHA, |
| 453 | SSL3_CK_EDH_DSS_DES_64_CBC_SHA, | 453 | SSL3_CK_EDH_DSS_DES_64_CBC_SHA, |
| 454 | SSL_kEDH, | 454 | SSL_kEDH, |
| 455 | SSL_aDSS, | 455 | SSL_aDSS, |
| 456 | SSL_DES, | 456 | SSL_DES, |
| 457 | SSL_SHA1, | 457 | SSL_SHA1, |
| 458 | SSL_SSLV3, | 458 | SSL_SSLV3, |
| 459 | SSL_NOT_EXP|SSL_LOW, | 459 | SSL_NOT_EXP|SSL_LOW, |
| 460 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 460 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 461 | 56, | 461 | 56, |
| 462 | 56, | 462 | 56, |
| 463 | }, | 463 | }, |
| 464 | 464 | ||
| 465 | /* Cipher 13 */ | 465 | /* Cipher 13 */ |
| 466 | { | 466 | { |
| 467 | 1, | 467 | 1, |
| 468 | SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA, | 468 | SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA, |
| 469 | SSL3_CK_EDH_DSS_DES_192_CBC3_SHA, | 469 | SSL3_CK_EDH_DSS_DES_192_CBC3_SHA, |
| 470 | SSL_kEDH, | 470 | SSL_kEDH, |
| 471 | SSL_aDSS, | 471 | SSL_aDSS, |
| 472 | SSL_3DES, | 472 | SSL_3DES, |
| 473 | SSL_SHA1, | 473 | SSL_SHA1, |
| 474 | SSL_SSLV3, | 474 | SSL_SSLV3, |
| 475 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 475 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 476 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 476 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 477 | 168, | 477 | 168, |
| 478 | 168, | 478 | 168, |
| 479 | }, | 479 | }, |
| 480 | 480 | ||
| 481 | /* Cipher 14 */ | 481 | /* Cipher 14 */ |
| 482 | { | 482 | { |
| 483 | 1, | 483 | 1, |
| 484 | SSL3_TXT_EDH_RSA_DES_40_CBC_SHA, | 484 | SSL3_TXT_EDH_RSA_DES_40_CBC_SHA, |
| 485 | SSL3_CK_EDH_RSA_DES_40_CBC_SHA, | 485 | SSL3_CK_EDH_RSA_DES_40_CBC_SHA, |
| 486 | SSL_kEDH, | 486 | SSL_kEDH, |
| 487 | SSL_aRSA, | 487 | SSL_aRSA, |
| 488 | SSL_DES, | 488 | SSL_DES, |
| 489 | SSL_SHA1, | 489 | SSL_SHA1, |
| 490 | SSL_SSLV3, | 490 | SSL_SSLV3, |
| 491 | SSL_EXPORT|SSL_EXP40, | 491 | SSL_EXPORT|SSL_EXP40, |
| 492 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 492 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 493 | 40, | 493 | 40, |
| 494 | 56, | 494 | 56, |
| 495 | }, | 495 | }, |
| 496 | 496 | ||
| 497 | /* Cipher 15 */ | 497 | /* Cipher 15 */ |
| 498 | { | 498 | { |
| 499 | 1, | 499 | 1, |
| 500 | SSL3_TXT_EDH_RSA_DES_64_CBC_SHA, | 500 | SSL3_TXT_EDH_RSA_DES_64_CBC_SHA, |
| 501 | SSL3_CK_EDH_RSA_DES_64_CBC_SHA, | 501 | SSL3_CK_EDH_RSA_DES_64_CBC_SHA, |
| 502 | SSL_kEDH, | 502 | SSL_kEDH, |
| 503 | SSL_aRSA, | 503 | SSL_aRSA, |
| 504 | SSL_DES, | 504 | SSL_DES, |
| 505 | SSL_SHA1, | 505 | SSL_SHA1, |
| 506 | SSL_SSLV3, | 506 | SSL_SSLV3, |
| 507 | SSL_NOT_EXP|SSL_LOW, | 507 | SSL_NOT_EXP|SSL_LOW, |
| 508 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 508 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 509 | 56, | 509 | 56, |
| 510 | 56, | 510 | 56, |
| 511 | }, | 511 | }, |
| 512 | 512 | ||
| 513 | /* Cipher 16 */ | 513 | /* Cipher 16 */ |
| 514 | { | 514 | { |
| 515 | 1, | 515 | 1, |
| 516 | SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA, | 516 | SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA, |
| 517 | SSL3_CK_EDH_RSA_DES_192_CBC3_SHA, | 517 | SSL3_CK_EDH_RSA_DES_192_CBC3_SHA, |
| 518 | SSL_kEDH, | 518 | SSL_kEDH, |
| 519 | SSL_aRSA, | 519 | SSL_aRSA, |
| 520 | SSL_3DES, | 520 | SSL_3DES, |
| 521 | SSL_SHA1, | 521 | SSL_SHA1, |
| 522 | SSL_SSLV3, | 522 | SSL_SSLV3, |
| 523 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 523 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 524 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 524 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 525 | 168, | 525 | 168, |
| 526 | 168, | 526 | 168, |
| 527 | }, | 527 | }, |
| 528 | 528 | ||
| 529 | /* Cipher 17 */ | 529 | /* Cipher 17 */ |
| 530 | { | 530 | { |
| 531 | 1, | 531 | 1, |
| 532 | SSL3_TXT_ADH_RC4_40_MD5, | 532 | SSL3_TXT_ADH_RC4_40_MD5, |
| 533 | SSL3_CK_ADH_RC4_40_MD5, | 533 | SSL3_CK_ADH_RC4_40_MD5, |
| 534 | SSL_kEDH, | 534 | SSL_kEDH, |
| 535 | SSL_aNULL, | 535 | SSL_aNULL, |
| 536 | SSL_RC4, | 536 | SSL_RC4, |
| 537 | SSL_MD5, | 537 | SSL_MD5, |
| 538 | SSL_SSLV3, | 538 | SSL_SSLV3, |
| 539 | SSL_EXPORT|SSL_EXP40, | 539 | SSL_EXPORT|SSL_EXP40, |
| 540 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 540 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 541 | 40, | 541 | 40, |
| 542 | 128, | 542 | 128, |
| 543 | }, | 543 | }, |
| 544 | 544 | ||
| 545 | /* Cipher 18 */ | 545 | /* Cipher 18 */ |
| 546 | { | 546 | { |
| 547 | 1, | 547 | 1, |
| 548 | SSL3_TXT_ADH_RC4_128_MD5, | 548 | SSL3_TXT_ADH_RC4_128_MD5, |
| 549 | SSL3_CK_ADH_RC4_128_MD5, | 549 | SSL3_CK_ADH_RC4_128_MD5, |
| 550 | SSL_kEDH, | 550 | SSL_kEDH, |
| 551 | SSL_aNULL, | 551 | SSL_aNULL, |
| 552 | SSL_RC4, | 552 | SSL_RC4, |
| 553 | SSL_MD5, | 553 | SSL_MD5, |
| 554 | SSL_SSLV3, | 554 | SSL_SSLV3, |
| 555 | SSL_NOT_EXP|SSL_MEDIUM, | 555 | SSL_NOT_EXP|SSL_MEDIUM, |
| 556 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 556 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 557 | 128, | 557 | 128, |
| 558 | 128, | 558 | 128, |
| 559 | }, | 559 | }, |
| 560 | 560 | ||
| 561 | /* Cipher 19 */ | 561 | /* Cipher 19 */ |
| 562 | { | 562 | { |
| 563 | 1, | 563 | 1, |
| 564 | SSL3_TXT_ADH_DES_40_CBC_SHA, | 564 | SSL3_TXT_ADH_DES_40_CBC_SHA, |
| 565 | SSL3_CK_ADH_DES_40_CBC_SHA, | 565 | SSL3_CK_ADH_DES_40_CBC_SHA, |
| 566 | SSL_kEDH, | 566 | SSL_kEDH, |
| 567 | SSL_aNULL, | 567 | SSL_aNULL, |
| 568 | SSL_DES, | 568 | SSL_DES, |
| 569 | SSL_SHA1, | 569 | SSL_SHA1, |
| 570 | SSL_SSLV3, | 570 | SSL_SSLV3, |
| 571 | SSL_EXPORT|SSL_EXP40, | 571 | SSL_EXPORT|SSL_EXP40, |
| 572 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 572 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 573 | 40, | 573 | 40, |
| 574 | 128, | 574 | 128, |
| 575 | }, | 575 | }, |
| 576 | 576 | ||
| 577 | /* Cipher 1A */ | 577 | /* Cipher 1A */ |
| 578 | { | 578 | { |
| 579 | 1, | 579 | 1, |
| 580 | SSL3_TXT_ADH_DES_64_CBC_SHA, | 580 | SSL3_TXT_ADH_DES_64_CBC_SHA, |
| 581 | SSL3_CK_ADH_DES_64_CBC_SHA, | 581 | SSL3_CK_ADH_DES_64_CBC_SHA, |
| 582 | SSL_kEDH, | 582 | SSL_kEDH, |
| 583 | SSL_aNULL, | 583 | SSL_aNULL, |
| 584 | SSL_DES, | 584 | SSL_DES, |
| 585 | SSL_SHA1, | 585 | SSL_SHA1, |
| 586 | SSL_SSLV3, | 586 | SSL_SSLV3, |
| 587 | SSL_NOT_EXP|SSL_LOW, | 587 | SSL_NOT_EXP|SSL_LOW, |
| 588 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 588 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 589 | 56, | 589 | 56, |
| 590 | 56, | 590 | 56, |
| 591 | }, | 591 | }, |
| 592 | 592 | ||
| 593 | /* Cipher 1B */ | 593 | /* Cipher 1B */ |
| 594 | { | 594 | { |
| 595 | 1, | 595 | 1, |
| 596 | SSL3_TXT_ADH_DES_192_CBC_SHA, | 596 | SSL3_TXT_ADH_DES_192_CBC_SHA, |
| 597 | SSL3_CK_ADH_DES_192_CBC_SHA, | 597 | SSL3_CK_ADH_DES_192_CBC_SHA, |
| 598 | SSL_kEDH, | 598 | SSL_kEDH, |
| 599 | SSL_aNULL, | 599 | SSL_aNULL, |
| 600 | SSL_3DES, | 600 | SSL_3DES, |
| 601 | SSL_SHA1, | 601 | SSL_SHA1, |
| 602 | SSL_SSLV3, | 602 | SSL_SSLV3, |
| 603 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 603 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 604 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 604 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 605 | 168, | 605 | 168, |
| 606 | 168, | 606 | 168, |
| 607 | }, | 607 | }, |
| 608 | 608 | ||
| 609 | /* Fortezza ciphersuite from SSL 3.0 spec */ | 609 | /* Fortezza ciphersuite from SSL 3.0 spec */ |
| 610 | #if 0 | 610 | #if 0 |
| 611 | /* Cipher 1C */ | 611 | /* Cipher 1C */ |
| 612 | { | 612 | { |
| 613 | 0, | 613 | 0, |
| 614 | SSL3_TXT_FZA_DMS_NULL_SHA, | 614 | SSL3_TXT_FZA_DMS_NULL_SHA, |
| 615 | SSL3_CK_FZA_DMS_NULL_SHA, | 615 | SSL3_CK_FZA_DMS_NULL_SHA, |
| 616 | SSL_kFZA, | 616 | SSL_kFZA, |
| 617 | SSL_aFZA, | 617 | SSL_aFZA, |
| 618 | SSL_eNULL, | 618 | SSL_eNULL, |
| 619 | SSL_SHA1, | 619 | SSL_SHA1, |
| 620 | SSL_SSLV3, | 620 | SSL_SSLV3, |
| 621 | SSL_NOT_EXP|SSL_STRONG_NONE, | 621 | SSL_NOT_EXP|SSL_STRONG_NONE, |
| 622 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 622 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 623 | 0, | 623 | 0, |
| 624 | 0, | 624 | 0, |
| 625 | }, | 625 | }, |
| 626 | 626 | ||
| 627 | /* Cipher 1D */ | 627 | /* Cipher 1D */ |
| 628 | { | 628 | { |
| 629 | 0, | 629 | 0, |
| 630 | SSL3_TXT_FZA_DMS_FZA_SHA, | 630 | SSL3_TXT_FZA_DMS_FZA_SHA, |
| 631 | SSL3_CK_FZA_DMS_FZA_SHA, | 631 | SSL3_CK_FZA_DMS_FZA_SHA, |
| 632 | SSL_kFZA, | 632 | SSL_kFZA, |
| 633 | SSL_aFZA, | 633 | SSL_aFZA, |
| 634 | SSL_eFZA, | 634 | SSL_eFZA, |
| 635 | SSL_SHA1, | 635 | SSL_SHA1, |
| 636 | SSL_SSLV3, | 636 | SSL_SSLV3, |
| 637 | SSL_NOT_EXP|SSL_STRONG_NONE, | 637 | SSL_NOT_EXP|SSL_STRONG_NONE, |
| 638 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 638 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 639 | 0, | 639 | 0, |
| 640 | 0, | 640 | 0, |
| 641 | }, | 641 | }, |
| 642 | 642 | ||
| 643 | /* Cipher 1E */ | 643 | /* Cipher 1E */ |
| 644 | { | 644 | { |
| 645 | 0, | 645 | 0, |
| 646 | SSL3_TXT_FZA_DMS_RC4_SHA, | 646 | SSL3_TXT_FZA_DMS_RC4_SHA, |
| 647 | SSL3_CK_FZA_DMS_RC4_SHA, | 647 | SSL3_CK_FZA_DMS_RC4_SHA, |
| 648 | SSL_kFZA, | 648 | SSL_kFZA, |
| 649 | SSL_aFZA, | 649 | SSL_aFZA, |
| 650 | SSL_RC4, | 650 | SSL_RC4, |
| 651 | SSL_SHA1, | 651 | SSL_SHA1, |
| 652 | SSL_SSLV3, | 652 | SSL_SSLV3, |
| 653 | SSL_NOT_EXP|SSL_MEDIUM, | 653 | SSL_NOT_EXP|SSL_MEDIUM, |
| 654 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 654 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 655 | 128, | 655 | 128, |
| 656 | 128, | 656 | 128, |
| 657 | }, | 657 | }, |
| 658 | #endif | 658 | #endif |
| 659 | 659 | ||
| @@ -661,511 +661,511 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
| 661 | /* The Kerberos ciphers*/ | 661 | /* The Kerberos ciphers*/ |
| 662 | /* Cipher 1E */ | 662 | /* Cipher 1E */ |
| 663 | { | 663 | { |
| 664 | 1, | 664 | 1, |
| 665 | SSL3_TXT_KRB5_DES_64_CBC_SHA, | 665 | SSL3_TXT_KRB5_DES_64_CBC_SHA, |
| 666 | SSL3_CK_KRB5_DES_64_CBC_SHA, | 666 | SSL3_CK_KRB5_DES_64_CBC_SHA, |
| 667 | SSL_kKRB5, | 667 | SSL_kKRB5, |
| 668 | SSL_aKRB5, | 668 | SSL_aKRB5, |
| 669 | SSL_DES, | 669 | SSL_DES, |
| 670 | SSL_SHA1, | 670 | SSL_SHA1, |
| 671 | SSL_SSLV3, | 671 | SSL_SSLV3, |
| 672 | SSL_NOT_EXP|SSL_LOW, | 672 | SSL_NOT_EXP|SSL_LOW, |
| 673 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 673 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 674 | 56, | 674 | 56, |
| 675 | 56, | 675 | 56, |
| 676 | }, | 676 | }, |
| 677 | 677 | ||
| 678 | /* Cipher 1F */ | 678 | /* Cipher 1F */ |
| 679 | { | 679 | { |
| 680 | 1, | 680 | 1, |
| 681 | SSL3_TXT_KRB5_DES_192_CBC3_SHA, | 681 | SSL3_TXT_KRB5_DES_192_CBC3_SHA, |
| 682 | SSL3_CK_KRB5_DES_192_CBC3_SHA, | 682 | SSL3_CK_KRB5_DES_192_CBC3_SHA, |
| 683 | SSL_kKRB5, | 683 | SSL_kKRB5, |
| 684 | SSL_aKRB5, | 684 | SSL_aKRB5, |
| 685 | SSL_3DES, | 685 | SSL_3DES, |
| 686 | SSL_SHA1, | 686 | SSL_SHA1, |
| 687 | SSL_SSLV3, | 687 | SSL_SSLV3, |
| 688 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 688 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 689 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 689 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 690 | 168, | 690 | 168, |
| 691 | 168, | 691 | 168, |
| 692 | }, | 692 | }, |
| 693 | 693 | ||
| 694 | /* Cipher 20 */ | 694 | /* Cipher 20 */ |
| 695 | { | 695 | { |
| 696 | 1, | 696 | 1, |
| 697 | SSL3_TXT_KRB5_RC4_128_SHA, | 697 | SSL3_TXT_KRB5_RC4_128_SHA, |
| 698 | SSL3_CK_KRB5_RC4_128_SHA, | 698 | SSL3_CK_KRB5_RC4_128_SHA, |
| 699 | SSL_kKRB5, | 699 | SSL_kKRB5, |
| 700 | SSL_aKRB5, | 700 | SSL_aKRB5, |
| 701 | SSL_RC4, | 701 | SSL_RC4, |
| 702 | SSL_SHA1, | 702 | SSL_SHA1, |
| 703 | SSL_SSLV3, | 703 | SSL_SSLV3, |
| 704 | SSL_NOT_EXP|SSL_MEDIUM, | 704 | SSL_NOT_EXP|SSL_MEDIUM, |
| 705 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 705 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 706 | 128, | 706 | 128, |
| 707 | 128, | 707 | 128, |
| 708 | }, | 708 | }, |
| 709 | 709 | ||
| 710 | /* Cipher 21 */ | 710 | /* Cipher 21 */ |
| 711 | { | 711 | { |
| 712 | 1, | 712 | 1, |
| 713 | SSL3_TXT_KRB5_IDEA_128_CBC_SHA, | 713 | SSL3_TXT_KRB5_IDEA_128_CBC_SHA, |
| 714 | SSL3_CK_KRB5_IDEA_128_CBC_SHA, | 714 | SSL3_CK_KRB5_IDEA_128_CBC_SHA, |
| 715 | SSL_kKRB5, | 715 | SSL_kKRB5, |
| 716 | SSL_aKRB5, | 716 | SSL_aKRB5, |
| 717 | SSL_IDEA, | 717 | SSL_IDEA, |
| 718 | SSL_SHA1, | 718 | SSL_SHA1, |
| 719 | SSL_SSLV3, | 719 | SSL_SSLV3, |
| 720 | SSL_NOT_EXP|SSL_MEDIUM, | 720 | SSL_NOT_EXP|SSL_MEDIUM, |
| 721 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 721 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 722 | 128, | 722 | 128, |
| 723 | 128, | 723 | 128, |
| 724 | }, | 724 | }, |
| 725 | 725 | ||
| 726 | /* Cipher 22 */ | 726 | /* Cipher 22 */ |
| 727 | { | 727 | { |
| 728 | 1, | 728 | 1, |
| 729 | SSL3_TXT_KRB5_DES_64_CBC_MD5, | 729 | SSL3_TXT_KRB5_DES_64_CBC_MD5, |
| 730 | SSL3_CK_KRB5_DES_64_CBC_MD5, | 730 | SSL3_CK_KRB5_DES_64_CBC_MD5, |
| 731 | SSL_kKRB5, | 731 | SSL_kKRB5, |
| 732 | SSL_aKRB5, | 732 | SSL_aKRB5, |
| 733 | SSL_DES, | 733 | SSL_DES, |
| 734 | SSL_MD5, | 734 | SSL_MD5, |
| 735 | SSL_SSLV3, | 735 | SSL_SSLV3, |
| 736 | SSL_NOT_EXP|SSL_LOW, | 736 | SSL_NOT_EXP|SSL_LOW, |
| 737 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 737 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 738 | 56, | 738 | 56, |
| 739 | 56, | 739 | 56, |
| 740 | }, | 740 | }, |
| 741 | 741 | ||
| 742 | /* Cipher 23 */ | 742 | /* Cipher 23 */ |
| 743 | { | 743 | { |
| 744 | 1, | 744 | 1, |
| 745 | SSL3_TXT_KRB5_DES_192_CBC3_MD5, | 745 | SSL3_TXT_KRB5_DES_192_CBC3_MD5, |
| 746 | SSL3_CK_KRB5_DES_192_CBC3_MD5, | 746 | SSL3_CK_KRB5_DES_192_CBC3_MD5, |
| 747 | SSL_kKRB5, | 747 | SSL_kKRB5, |
| 748 | SSL_aKRB5, | 748 | SSL_aKRB5, |
| 749 | SSL_3DES, | 749 | SSL_3DES, |
| 750 | SSL_MD5, | 750 | SSL_MD5, |
| 751 | SSL_SSLV3, | 751 | SSL_SSLV3, |
| 752 | SSL_NOT_EXP|SSL_HIGH, | 752 | SSL_NOT_EXP|SSL_HIGH, |
| 753 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 753 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 754 | 168, | 754 | 168, |
| 755 | 168, | 755 | 168, |
| 756 | }, | 756 | }, |
| 757 | 757 | ||
| 758 | /* Cipher 24 */ | 758 | /* Cipher 24 */ |
| 759 | { | 759 | { |
| 760 | 1, | 760 | 1, |
| 761 | SSL3_TXT_KRB5_RC4_128_MD5, | 761 | SSL3_TXT_KRB5_RC4_128_MD5, |
| 762 | SSL3_CK_KRB5_RC4_128_MD5, | 762 | SSL3_CK_KRB5_RC4_128_MD5, |
| 763 | SSL_kKRB5, | 763 | SSL_kKRB5, |
| 764 | SSL_aKRB5, | 764 | SSL_aKRB5, |
| 765 | SSL_RC4, | 765 | SSL_RC4, |
| 766 | SSL_MD5, | 766 | SSL_MD5, |
| 767 | SSL_SSLV3, | 767 | SSL_SSLV3, |
| 768 | SSL_NOT_EXP|SSL_MEDIUM, | 768 | SSL_NOT_EXP|SSL_MEDIUM, |
| 769 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 769 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 770 | 128, | 770 | 128, |
| 771 | 128, | 771 | 128, |
| 772 | }, | 772 | }, |
| 773 | 773 | ||
| 774 | /* Cipher 25 */ | 774 | /* Cipher 25 */ |
| 775 | { | 775 | { |
| 776 | 1, | 776 | 1, |
| 777 | SSL3_TXT_KRB5_IDEA_128_CBC_MD5, | 777 | SSL3_TXT_KRB5_IDEA_128_CBC_MD5, |
| 778 | SSL3_CK_KRB5_IDEA_128_CBC_MD5, | 778 | SSL3_CK_KRB5_IDEA_128_CBC_MD5, |
| 779 | SSL_kKRB5, | 779 | SSL_kKRB5, |
| 780 | SSL_aKRB5, | 780 | SSL_aKRB5, |
| 781 | SSL_IDEA, | 781 | SSL_IDEA, |
| 782 | SSL_MD5, | 782 | SSL_MD5, |
| 783 | SSL_SSLV3, | 783 | SSL_SSLV3, |
| 784 | SSL_NOT_EXP|SSL_MEDIUM, | 784 | SSL_NOT_EXP|SSL_MEDIUM, |
| 785 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 785 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 786 | 128, | 786 | 128, |
| 787 | 128, | 787 | 128, |
| 788 | }, | 788 | }, |
| 789 | 789 | ||
| 790 | /* Cipher 26 */ | 790 | /* Cipher 26 */ |
| 791 | { | 791 | { |
| 792 | 1, | 792 | 1, |
| 793 | SSL3_TXT_KRB5_DES_40_CBC_SHA, | 793 | SSL3_TXT_KRB5_DES_40_CBC_SHA, |
| 794 | SSL3_CK_KRB5_DES_40_CBC_SHA, | 794 | SSL3_CK_KRB5_DES_40_CBC_SHA, |
| 795 | SSL_kKRB5, | 795 | SSL_kKRB5, |
| 796 | SSL_aKRB5, | 796 | SSL_aKRB5, |
| 797 | SSL_DES, | 797 | SSL_DES, |
| 798 | SSL_SHA1, | 798 | SSL_SHA1, |
| 799 | SSL_SSLV3, | 799 | SSL_SSLV3, |
| 800 | SSL_EXPORT|SSL_EXP40, | 800 | SSL_EXPORT|SSL_EXP40, |
| 801 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 801 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 802 | 40, | 802 | 40, |
| 803 | 56, | 803 | 56, |
| 804 | }, | 804 | }, |
| 805 | 805 | ||
| 806 | /* Cipher 27 */ | 806 | /* Cipher 27 */ |
| 807 | { | 807 | { |
| 808 | 1, | 808 | 1, |
| 809 | SSL3_TXT_KRB5_RC2_40_CBC_SHA, | 809 | SSL3_TXT_KRB5_RC2_40_CBC_SHA, |
| 810 | SSL3_CK_KRB5_RC2_40_CBC_SHA, | 810 | SSL3_CK_KRB5_RC2_40_CBC_SHA, |
| 811 | SSL_kKRB5, | 811 | SSL_kKRB5, |
| 812 | SSL_aKRB5, | 812 | SSL_aKRB5, |
| 813 | SSL_RC2, | 813 | SSL_RC2, |
| 814 | SSL_SHA1, | 814 | SSL_SHA1, |
| 815 | SSL_SSLV3, | 815 | SSL_SSLV3, |
| 816 | SSL_EXPORT|SSL_EXP40, | 816 | SSL_EXPORT|SSL_EXP40, |
| 817 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 817 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 818 | 40, | 818 | 40, |
| 819 | 128, | 819 | 128, |
| 820 | }, | 820 | }, |
| 821 | 821 | ||
| 822 | /* Cipher 28 */ | 822 | /* Cipher 28 */ |
| 823 | { | 823 | { |
| 824 | 1, | 824 | 1, |
| 825 | SSL3_TXT_KRB5_RC4_40_SHA, | 825 | SSL3_TXT_KRB5_RC4_40_SHA, |
| 826 | SSL3_CK_KRB5_RC4_40_SHA, | 826 | SSL3_CK_KRB5_RC4_40_SHA, |
| 827 | SSL_kKRB5, | 827 | SSL_kKRB5, |
| 828 | SSL_aKRB5, | 828 | SSL_aKRB5, |
| 829 | SSL_RC4, | 829 | SSL_RC4, |
| 830 | SSL_SHA1, | 830 | SSL_SHA1, |
| 831 | SSL_SSLV3, | 831 | SSL_SSLV3, |
| 832 | SSL_EXPORT|SSL_EXP40, | 832 | SSL_EXPORT|SSL_EXP40, |
| 833 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 833 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 834 | 40, | 834 | 40, |
| 835 | 128, | 835 | 128, |
| 836 | }, | 836 | }, |
| 837 | 837 | ||
| 838 | /* Cipher 29 */ | 838 | /* Cipher 29 */ |
| 839 | { | 839 | { |
| 840 | 1, | 840 | 1, |
| 841 | SSL3_TXT_KRB5_DES_40_CBC_MD5, | 841 | SSL3_TXT_KRB5_DES_40_CBC_MD5, |
| 842 | SSL3_CK_KRB5_DES_40_CBC_MD5, | 842 | SSL3_CK_KRB5_DES_40_CBC_MD5, |
| 843 | SSL_kKRB5, | 843 | SSL_kKRB5, |
| 844 | SSL_aKRB5, | 844 | SSL_aKRB5, |
| 845 | SSL_DES, | 845 | SSL_DES, |
| 846 | SSL_MD5, | 846 | SSL_MD5, |
| 847 | SSL_SSLV3, | 847 | SSL_SSLV3, |
| 848 | SSL_EXPORT|SSL_EXP40, | 848 | SSL_EXPORT|SSL_EXP40, |
| 849 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 849 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 850 | 40, | 850 | 40, |
| 851 | 56, | 851 | 56, |
| 852 | }, | 852 | }, |
| 853 | 853 | ||
| 854 | /* Cipher 2A */ | 854 | /* Cipher 2A */ |
| 855 | { | 855 | { |
| 856 | 1, | 856 | 1, |
| 857 | SSL3_TXT_KRB5_RC2_40_CBC_MD5, | 857 | SSL3_TXT_KRB5_RC2_40_CBC_MD5, |
| 858 | SSL3_CK_KRB5_RC2_40_CBC_MD5, | 858 | SSL3_CK_KRB5_RC2_40_CBC_MD5, |
| 859 | SSL_kKRB5, | 859 | SSL_kKRB5, |
| 860 | SSL_aKRB5, | 860 | SSL_aKRB5, |
| 861 | SSL_RC2, | 861 | SSL_RC2, |
| 862 | SSL_MD5, | 862 | SSL_MD5, |
| 863 | SSL_SSLV3, | 863 | SSL_SSLV3, |
| 864 | SSL_EXPORT|SSL_EXP40, | 864 | SSL_EXPORT|SSL_EXP40, |
| 865 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 865 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 866 | 40, | 866 | 40, |
| 867 | 128, | 867 | 128, |
| 868 | }, | 868 | }, |
| 869 | 869 | ||
| 870 | /* Cipher 2B */ | 870 | /* Cipher 2B */ |
| 871 | { | 871 | { |
| 872 | 1, | 872 | 1, |
| 873 | SSL3_TXT_KRB5_RC4_40_MD5, | 873 | SSL3_TXT_KRB5_RC4_40_MD5, |
| 874 | SSL3_CK_KRB5_RC4_40_MD5, | 874 | SSL3_CK_KRB5_RC4_40_MD5, |
| 875 | SSL_kKRB5, | 875 | SSL_kKRB5, |
| 876 | SSL_aKRB5, | 876 | SSL_aKRB5, |
| 877 | SSL_RC4, | 877 | SSL_RC4, |
| 878 | SSL_MD5, | 878 | SSL_MD5, |
| 879 | SSL_SSLV3, | 879 | SSL_SSLV3, |
| 880 | SSL_EXPORT|SSL_EXP40, | 880 | SSL_EXPORT|SSL_EXP40, |
| 881 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 881 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 882 | 40, | 882 | 40, |
| 883 | 128, | 883 | 128, |
| 884 | }, | 884 | }, |
| 885 | #endif /* OPENSSL_NO_KRB5 */ | 885 | #endif /* OPENSSL_NO_KRB5 */ |
| 886 | 886 | ||
| 887 | /* New AES ciphersuites */ | 887 | /* New AES ciphersuites */ |
| 888 | /* Cipher 2F */ | 888 | /* Cipher 2F */ |
| 889 | { | 889 | { |
| 890 | 1, | 890 | 1, |
| 891 | TLS1_TXT_RSA_WITH_AES_128_SHA, | 891 | TLS1_TXT_RSA_WITH_AES_128_SHA, |
| 892 | TLS1_CK_RSA_WITH_AES_128_SHA, | 892 | TLS1_CK_RSA_WITH_AES_128_SHA, |
| 893 | SSL_kRSA, | 893 | SSL_kRSA, |
| 894 | SSL_aRSA, | 894 | SSL_aRSA, |
| 895 | SSL_AES128, | 895 | SSL_AES128, |
| 896 | SSL_SHA1, | 896 | SSL_SHA1, |
| 897 | SSL_TLSV1, | 897 | SSL_TLSV1, |
| 898 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 898 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 899 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 899 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 900 | 128, | 900 | 128, |
| 901 | 128, | 901 | 128, |
| 902 | }, | 902 | }, |
| 903 | /* Cipher 30 */ | 903 | /* Cipher 30 */ |
| 904 | { | 904 | { |
| 905 | 0, | 905 | 0, |
| 906 | TLS1_TXT_DH_DSS_WITH_AES_128_SHA, | 906 | TLS1_TXT_DH_DSS_WITH_AES_128_SHA, |
| 907 | TLS1_CK_DH_DSS_WITH_AES_128_SHA, | 907 | TLS1_CK_DH_DSS_WITH_AES_128_SHA, |
| 908 | SSL_kDHd, | 908 | SSL_kDHd, |
| 909 | SSL_aDH, | 909 | SSL_aDH, |
| 910 | SSL_AES128, | 910 | SSL_AES128, |
| 911 | SSL_SHA1, | 911 | SSL_SHA1, |
| 912 | SSL_TLSV1, | 912 | SSL_TLSV1, |
| 913 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 913 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 914 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 914 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 915 | 128, | 915 | 128, |
| 916 | 128, | 916 | 128, |
| 917 | }, | 917 | }, |
| 918 | /* Cipher 31 */ | 918 | /* Cipher 31 */ |
| 919 | { | 919 | { |
| 920 | 0, | 920 | 0, |
| 921 | TLS1_TXT_DH_RSA_WITH_AES_128_SHA, | 921 | TLS1_TXT_DH_RSA_WITH_AES_128_SHA, |
| 922 | TLS1_CK_DH_RSA_WITH_AES_128_SHA, | 922 | TLS1_CK_DH_RSA_WITH_AES_128_SHA, |
| 923 | SSL_kDHr, | 923 | SSL_kDHr, |
| 924 | SSL_aDH, | 924 | SSL_aDH, |
| 925 | SSL_AES128, | 925 | SSL_AES128, |
| 926 | SSL_SHA1, | 926 | SSL_SHA1, |
| 927 | SSL_TLSV1, | 927 | SSL_TLSV1, |
| 928 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 928 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 929 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 929 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 930 | 128, | 930 | 128, |
| 931 | 128, | 931 | 128, |
| 932 | }, | 932 | }, |
| 933 | /* Cipher 32 */ | 933 | /* Cipher 32 */ |
| 934 | { | 934 | { |
| 935 | 1, | 935 | 1, |
| 936 | TLS1_TXT_DHE_DSS_WITH_AES_128_SHA, | 936 | TLS1_TXT_DHE_DSS_WITH_AES_128_SHA, |
| 937 | TLS1_CK_DHE_DSS_WITH_AES_128_SHA, | 937 | TLS1_CK_DHE_DSS_WITH_AES_128_SHA, |
| 938 | SSL_kEDH, | 938 | SSL_kEDH, |
| 939 | SSL_aDSS, | 939 | SSL_aDSS, |
| 940 | SSL_AES128, | 940 | SSL_AES128, |
| 941 | SSL_SHA1, | 941 | SSL_SHA1, |
| 942 | SSL_TLSV1, | 942 | SSL_TLSV1, |
| 943 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 943 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 944 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 944 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 945 | 128, | 945 | 128, |
| 946 | 128, | 946 | 128, |
| 947 | }, | 947 | }, |
| 948 | /* Cipher 33 */ | 948 | /* Cipher 33 */ |
| 949 | { | 949 | { |
| 950 | 1, | 950 | 1, |
| 951 | TLS1_TXT_DHE_RSA_WITH_AES_128_SHA, | 951 | TLS1_TXT_DHE_RSA_WITH_AES_128_SHA, |
| 952 | TLS1_CK_DHE_RSA_WITH_AES_128_SHA, | 952 | TLS1_CK_DHE_RSA_WITH_AES_128_SHA, |
| 953 | SSL_kEDH, | 953 | SSL_kEDH, |
| 954 | SSL_aRSA, | 954 | SSL_aRSA, |
| 955 | SSL_AES128, | 955 | SSL_AES128, |
| 956 | SSL_SHA1, | 956 | SSL_SHA1, |
| 957 | SSL_TLSV1, | 957 | SSL_TLSV1, |
| 958 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 958 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 959 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 959 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 960 | 128, | 960 | 128, |
| 961 | 128, | 961 | 128, |
| 962 | }, | 962 | }, |
| 963 | /* Cipher 34 */ | 963 | /* Cipher 34 */ |
| 964 | { | 964 | { |
| 965 | 1, | 965 | 1, |
| 966 | TLS1_TXT_ADH_WITH_AES_128_SHA, | 966 | TLS1_TXT_ADH_WITH_AES_128_SHA, |
| 967 | TLS1_CK_ADH_WITH_AES_128_SHA, | 967 | TLS1_CK_ADH_WITH_AES_128_SHA, |
| 968 | SSL_kEDH, | 968 | SSL_kEDH, |
| 969 | SSL_aNULL, | 969 | SSL_aNULL, |
| 970 | SSL_AES128, | 970 | SSL_AES128, |
| 971 | SSL_SHA1, | 971 | SSL_SHA1, |
| 972 | SSL_TLSV1, | 972 | SSL_TLSV1, |
| 973 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 973 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 974 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 974 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 975 | 128, | 975 | 128, |
| 976 | 128, | 976 | 128, |
| 977 | }, | 977 | }, |
| 978 | 978 | ||
| 979 | /* Cipher 35 */ | 979 | /* Cipher 35 */ |
| 980 | { | 980 | { |
| 981 | 1, | 981 | 1, |
| 982 | TLS1_TXT_RSA_WITH_AES_256_SHA, | 982 | TLS1_TXT_RSA_WITH_AES_256_SHA, |
| 983 | TLS1_CK_RSA_WITH_AES_256_SHA, | 983 | TLS1_CK_RSA_WITH_AES_256_SHA, |
| 984 | SSL_kRSA, | 984 | SSL_kRSA, |
| 985 | SSL_aRSA, | 985 | SSL_aRSA, |
| 986 | SSL_AES256, | 986 | SSL_AES256, |
| 987 | SSL_SHA1, | 987 | SSL_SHA1, |
| 988 | SSL_TLSV1, | 988 | SSL_TLSV1, |
| 989 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 989 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 990 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 990 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 991 | 256, | 991 | 256, |
| 992 | 256, | 992 | 256, |
| 993 | }, | 993 | }, |
| 994 | /* Cipher 36 */ | 994 | /* Cipher 36 */ |
| 995 | { | 995 | { |
| 996 | 0, | 996 | 0, |
| 997 | TLS1_TXT_DH_DSS_WITH_AES_256_SHA, | 997 | TLS1_TXT_DH_DSS_WITH_AES_256_SHA, |
| 998 | TLS1_CK_DH_DSS_WITH_AES_256_SHA, | 998 | TLS1_CK_DH_DSS_WITH_AES_256_SHA, |
| 999 | SSL_kDHd, | 999 | SSL_kDHd, |
| 1000 | SSL_aDH, | 1000 | SSL_aDH, |
| 1001 | SSL_AES256, | 1001 | SSL_AES256, |
| 1002 | SSL_SHA1, | 1002 | SSL_SHA1, |
| 1003 | SSL_TLSV1, | 1003 | SSL_TLSV1, |
| 1004 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1004 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1005 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1005 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1006 | 256, | 1006 | 256, |
| 1007 | 256, | 1007 | 256, |
| 1008 | }, | 1008 | }, |
| 1009 | 1009 | ||
| 1010 | /* Cipher 37 */ | 1010 | /* Cipher 37 */ |
| 1011 | { | 1011 | { |
| 1012 | 0, /* not implemented (non-ephemeral DH) */ | 1012 | 0, /* not implemented (non-ephemeral DH) */ |
| 1013 | TLS1_TXT_DH_RSA_WITH_AES_256_SHA, | 1013 | TLS1_TXT_DH_RSA_WITH_AES_256_SHA, |
| 1014 | TLS1_CK_DH_RSA_WITH_AES_256_SHA, | 1014 | TLS1_CK_DH_RSA_WITH_AES_256_SHA, |
| 1015 | SSL_kDHr, | 1015 | SSL_kDHr, |
| 1016 | SSL_aDH, | 1016 | SSL_aDH, |
| 1017 | SSL_AES256, | 1017 | SSL_AES256, |
| 1018 | SSL_SHA1, | 1018 | SSL_SHA1, |
| 1019 | SSL_TLSV1, | 1019 | SSL_TLSV1, |
| 1020 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1020 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1021 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1021 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1022 | 256, | 1022 | 256, |
| 1023 | 256, | 1023 | 256, |
| 1024 | }, | 1024 | }, |
| 1025 | 1025 | ||
| 1026 | /* Cipher 38 */ | 1026 | /* Cipher 38 */ |
| 1027 | { | 1027 | { |
| 1028 | 1, | 1028 | 1, |
| 1029 | TLS1_TXT_DHE_DSS_WITH_AES_256_SHA, | 1029 | TLS1_TXT_DHE_DSS_WITH_AES_256_SHA, |
| 1030 | TLS1_CK_DHE_DSS_WITH_AES_256_SHA, | 1030 | TLS1_CK_DHE_DSS_WITH_AES_256_SHA, |
| 1031 | SSL_kEDH, | 1031 | SSL_kEDH, |
| 1032 | SSL_aDSS, | 1032 | SSL_aDSS, |
| 1033 | SSL_AES256, | 1033 | SSL_AES256, |
| 1034 | SSL_SHA1, | 1034 | SSL_SHA1, |
| 1035 | SSL_TLSV1, | 1035 | SSL_TLSV1, |
| 1036 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1036 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1037 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1037 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1038 | 256, | 1038 | 256, |
| 1039 | 256, | 1039 | 256, |
| 1040 | }, | 1040 | }, |
| 1041 | 1041 | ||
| 1042 | /* Cipher 39 */ | 1042 | /* Cipher 39 */ |
| 1043 | { | 1043 | { |
| 1044 | 1, | 1044 | 1, |
| 1045 | TLS1_TXT_DHE_RSA_WITH_AES_256_SHA, | 1045 | TLS1_TXT_DHE_RSA_WITH_AES_256_SHA, |
| 1046 | TLS1_CK_DHE_RSA_WITH_AES_256_SHA, | 1046 | TLS1_CK_DHE_RSA_WITH_AES_256_SHA, |
| 1047 | SSL_kEDH, | 1047 | SSL_kEDH, |
| 1048 | SSL_aRSA, | 1048 | SSL_aRSA, |
| 1049 | SSL_AES256, | 1049 | SSL_AES256, |
| 1050 | SSL_SHA1, | 1050 | SSL_SHA1, |
| 1051 | SSL_TLSV1, | 1051 | SSL_TLSV1, |
| 1052 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1052 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1053 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1053 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1054 | 256, | 1054 | 256, |
| 1055 | 256, | 1055 | 256, |
| 1056 | }, | 1056 | }, |
| 1057 | 1057 | ||
| 1058 | /* Cipher 3A */ | 1058 | /* Cipher 3A */ |
| 1059 | { | 1059 | { |
| 1060 | 1, | 1060 | 1, |
| 1061 | TLS1_TXT_ADH_WITH_AES_256_SHA, | 1061 | TLS1_TXT_ADH_WITH_AES_256_SHA, |
| 1062 | TLS1_CK_ADH_WITH_AES_256_SHA, | 1062 | TLS1_CK_ADH_WITH_AES_256_SHA, |
| 1063 | SSL_kEDH, | 1063 | SSL_kEDH, |
| 1064 | SSL_aNULL, | 1064 | SSL_aNULL, |
| 1065 | SSL_AES256, | 1065 | SSL_AES256, |
| 1066 | SSL_SHA1, | 1066 | SSL_SHA1, |
| 1067 | SSL_TLSV1, | 1067 | SSL_TLSV1, |
| 1068 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1068 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1069 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1069 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1070 | 256, | 1070 | 256, |
| 1071 | 256, | 1071 | 256, |
| 1072 | }, | 1072 | }, |
| 1073 | 1073 | ||
| 1074 | /* TLS v1.2 ciphersuites */ | 1074 | /* TLS v1.2 ciphersuites */ |
| 1075 | /* Cipher 3B */ | 1075 | /* Cipher 3B */ |
| 1076 | { | 1076 | { |
| 1077 | 1, | 1077 | 1, |
| 1078 | TLS1_TXT_RSA_WITH_NULL_SHA256, | 1078 | TLS1_TXT_RSA_WITH_NULL_SHA256, |
| 1079 | TLS1_CK_RSA_WITH_NULL_SHA256, | 1079 | TLS1_CK_RSA_WITH_NULL_SHA256, |
| 1080 | SSL_kRSA, | 1080 | SSL_kRSA, |
| 1081 | SSL_aRSA, | 1081 | SSL_aRSA, |
| 1082 | SSL_eNULL, | 1082 | SSL_eNULL, |
| 1083 | SSL_SHA256, | 1083 | SSL_SHA256, |
| 1084 | SSL_TLSV1_2, | 1084 | SSL_TLSV1_2, |
| 1085 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 1085 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
| 1086 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1086 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1087 | 0, | 1087 | 0, |
| 1088 | 0, | 1088 | 0, |
| 1089 | }, | 1089 | }, |
| 1090 | 1090 | ||
| 1091 | /* Cipher 3C */ | 1091 | /* Cipher 3C */ |
| 1092 | { | 1092 | { |
| 1093 | 1, | 1093 | 1, |
| 1094 | TLS1_TXT_RSA_WITH_AES_128_SHA256, | 1094 | TLS1_TXT_RSA_WITH_AES_128_SHA256, |
| 1095 | TLS1_CK_RSA_WITH_AES_128_SHA256, | 1095 | TLS1_CK_RSA_WITH_AES_128_SHA256, |
| 1096 | SSL_kRSA, | 1096 | SSL_kRSA, |
| 1097 | SSL_aRSA, | 1097 | SSL_aRSA, |
| 1098 | SSL_AES128, | 1098 | SSL_AES128, |
| 1099 | SSL_SHA256, | 1099 | SSL_SHA256, |
| 1100 | SSL_TLSV1_2, | 1100 | SSL_TLSV1_2, |
| 1101 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1101 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1102 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1102 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1103 | 128, | 1103 | 128, |
| 1104 | 128, | 1104 | 128, |
| 1105 | }, | 1105 | }, |
| 1106 | 1106 | ||
| 1107 | /* Cipher 3D */ | 1107 | /* Cipher 3D */ |
| 1108 | { | 1108 | { |
| 1109 | 1, | 1109 | 1, |
| 1110 | TLS1_TXT_RSA_WITH_AES_256_SHA256, | 1110 | TLS1_TXT_RSA_WITH_AES_256_SHA256, |
| 1111 | TLS1_CK_RSA_WITH_AES_256_SHA256, | 1111 | TLS1_CK_RSA_WITH_AES_256_SHA256, |
| 1112 | SSL_kRSA, | 1112 | SSL_kRSA, |
| 1113 | SSL_aRSA, | 1113 | SSL_aRSA, |
| 1114 | SSL_AES256, | 1114 | SSL_AES256, |
| 1115 | SSL_SHA256, | 1115 | SSL_SHA256, |
| 1116 | SSL_TLSV1_2, | 1116 | SSL_TLSV1_2, |
| 1117 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1117 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1118 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1118 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1119 | 256, | 1119 | 256, |
| 1120 | 256, | 1120 | 256, |
| 1121 | }, | 1121 | }, |
| 1122 | 1122 | ||
| 1123 | /* Cipher 3E */ | 1123 | /* Cipher 3E */ |
| 1124 | { | 1124 | { |
| 1125 | 0, /* not implemented (non-ephemeral DH) */ | 1125 | 0, /* not implemented (non-ephemeral DH) */ |
| 1126 | TLS1_TXT_DH_DSS_WITH_AES_128_SHA256, | 1126 | TLS1_TXT_DH_DSS_WITH_AES_128_SHA256, |
| 1127 | TLS1_CK_DH_DSS_WITH_AES_128_SHA256, | 1127 | TLS1_CK_DH_DSS_WITH_AES_128_SHA256, |
| 1128 | SSL_kDHd, | 1128 | SSL_kDHd, |
| 1129 | SSL_aDH, | 1129 | SSL_aDH, |
| 1130 | SSL_AES128, | 1130 | SSL_AES128, |
| 1131 | SSL_SHA256, | 1131 | SSL_SHA256, |
| 1132 | SSL_TLSV1_2, | 1132 | SSL_TLSV1_2, |
| 1133 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1133 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1134 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1134 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1135 | 128, | 1135 | 128, |
| 1136 | 128, | 1136 | 128, |
| 1137 | }, | 1137 | }, |
| 1138 | 1138 | ||
| 1139 | /* Cipher 3F */ | 1139 | /* Cipher 3F */ |
| 1140 | { | 1140 | { |
| 1141 | 0, /* not implemented (non-ephemeral DH) */ | 1141 | 0, /* not implemented (non-ephemeral DH) */ |
| 1142 | TLS1_TXT_DH_RSA_WITH_AES_128_SHA256, | 1142 | TLS1_TXT_DH_RSA_WITH_AES_128_SHA256, |
| 1143 | TLS1_CK_DH_RSA_WITH_AES_128_SHA256, | 1143 | TLS1_CK_DH_RSA_WITH_AES_128_SHA256, |
| 1144 | SSL_kDHr, | 1144 | SSL_kDHr, |
| 1145 | SSL_aDH, | 1145 | SSL_aDH, |
| 1146 | SSL_AES128, | 1146 | SSL_AES128, |
| 1147 | SSL_SHA256, | 1147 | SSL_SHA256, |
| 1148 | SSL_TLSV1_2, | 1148 | SSL_TLSV1_2, |
| 1149 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1149 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1150 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1150 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1151 | 128, | 1151 | 128, |
| 1152 | 128, | 1152 | 128, |
| 1153 | }, | 1153 | }, |
| 1154 | 1154 | ||
| 1155 | /* Cipher 40 */ | 1155 | /* Cipher 40 */ |
| 1156 | { | 1156 | { |
| 1157 | 1, | 1157 | 1, |
| 1158 | TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256, | 1158 | TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256, |
| 1159 | TLS1_CK_DHE_DSS_WITH_AES_128_SHA256, | 1159 | TLS1_CK_DHE_DSS_WITH_AES_128_SHA256, |
| 1160 | SSL_kEDH, | 1160 | SSL_kEDH, |
| 1161 | SSL_aDSS, | 1161 | SSL_aDSS, |
| 1162 | SSL_AES128, | 1162 | SSL_AES128, |
| 1163 | SSL_SHA256, | 1163 | SSL_SHA256, |
| 1164 | SSL_TLSV1_2, | 1164 | SSL_TLSV1_2, |
| 1165 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1165 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1166 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1166 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1167 | 128, | 1167 | 128, |
| 1168 | 128, | 1168 | 128, |
| 1169 | }, | 1169 | }, |
| 1170 | 1170 | ||
| 1171 | #ifndef OPENSSL_NO_CAMELLIA | 1171 | #ifndef OPENSSL_NO_CAMELLIA |
| @@ -1173,98 +1173,98 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
| 1173 | 1173 | ||
| 1174 | /* Cipher 41 */ | 1174 | /* Cipher 41 */ |
| 1175 | { | 1175 | { |
| 1176 | 1, | 1176 | 1, |
| 1177 | TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1177 | TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA, |
| 1178 | TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1178 | TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA, |
| 1179 | SSL_kRSA, | 1179 | SSL_kRSA, |
| 1180 | SSL_aRSA, | 1180 | SSL_aRSA, |
| 1181 | SSL_CAMELLIA128, | 1181 | SSL_CAMELLIA128, |
| 1182 | SSL_SHA1, | 1182 | SSL_SHA1, |
| 1183 | SSL_TLSV1, | 1183 | SSL_TLSV1, |
| 1184 | SSL_NOT_EXP|SSL_HIGH, | 1184 | SSL_NOT_EXP|SSL_HIGH, |
| 1185 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1185 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1186 | 128, | 1186 | 128, |
| 1187 | 128, | 1187 | 128, |
| 1188 | }, | 1188 | }, |
| 1189 | 1189 | ||
| 1190 | /* Cipher 42 */ | 1190 | /* Cipher 42 */ |
| 1191 | { | 1191 | { |
| 1192 | 0, /* not implemented (non-ephemeral DH) */ | 1192 | 0, /* not implemented (non-ephemeral DH) */ |
| 1193 | TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, | 1193 | TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, |
| 1194 | TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, | 1194 | TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, |
| 1195 | SSL_kDHd, | 1195 | SSL_kDHd, |
| 1196 | SSL_aDH, | 1196 | SSL_aDH, |
| 1197 | SSL_CAMELLIA128, | 1197 | SSL_CAMELLIA128, |
| 1198 | SSL_SHA1, | 1198 | SSL_SHA1, |
| 1199 | SSL_TLSV1, | 1199 | SSL_TLSV1, |
| 1200 | SSL_NOT_EXP|SSL_HIGH, | 1200 | SSL_NOT_EXP|SSL_HIGH, |
| 1201 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1201 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1202 | 128, | 1202 | 128, |
| 1203 | 128, | 1203 | 128, |
| 1204 | }, | 1204 | }, |
| 1205 | 1205 | ||
| 1206 | /* Cipher 43 */ | 1206 | /* Cipher 43 */ |
| 1207 | { | 1207 | { |
| 1208 | 0, /* not implemented (non-ephemeral DH) */ | 1208 | 0, /* not implemented (non-ephemeral DH) */ |
| 1209 | TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1209 | TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, |
| 1210 | TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1210 | TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, |
| 1211 | SSL_kDHr, | 1211 | SSL_kDHr, |
| 1212 | SSL_aDH, | 1212 | SSL_aDH, |
| 1213 | SSL_CAMELLIA128, | 1213 | SSL_CAMELLIA128, |
| 1214 | SSL_SHA1, | 1214 | SSL_SHA1, |
| 1215 | SSL_TLSV1, | 1215 | SSL_TLSV1, |
| 1216 | SSL_NOT_EXP|SSL_HIGH, | 1216 | SSL_NOT_EXP|SSL_HIGH, |
| 1217 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1217 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1218 | 128, | 1218 | 128, |
| 1219 | 128, | 1219 | 128, |
| 1220 | }, | 1220 | }, |
| 1221 | 1221 | ||
| 1222 | /* Cipher 44 */ | 1222 | /* Cipher 44 */ |
| 1223 | { | 1223 | { |
| 1224 | 1, | 1224 | 1, |
| 1225 | TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, | 1225 | TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, |
| 1226 | TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, | 1226 | TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, |
| 1227 | SSL_kEDH, | 1227 | SSL_kEDH, |
| 1228 | SSL_aDSS, | 1228 | SSL_aDSS, |
| 1229 | SSL_CAMELLIA128, | 1229 | SSL_CAMELLIA128, |
| 1230 | SSL_SHA1, | 1230 | SSL_SHA1, |
| 1231 | SSL_TLSV1, | 1231 | SSL_TLSV1, |
| 1232 | SSL_NOT_EXP|SSL_HIGH, | 1232 | SSL_NOT_EXP|SSL_HIGH, |
| 1233 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1233 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1234 | 128, | 1234 | 128, |
| 1235 | 128, | 1235 | 128, |
| 1236 | }, | 1236 | }, |
| 1237 | 1237 | ||
| 1238 | /* Cipher 45 */ | 1238 | /* Cipher 45 */ |
| 1239 | { | 1239 | { |
| 1240 | 1, | 1240 | 1, |
| 1241 | TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1241 | TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, |
| 1242 | TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1242 | TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, |
| 1243 | SSL_kEDH, | 1243 | SSL_kEDH, |
| 1244 | SSL_aRSA, | 1244 | SSL_aRSA, |
| 1245 | SSL_CAMELLIA128, | 1245 | SSL_CAMELLIA128, |
| 1246 | SSL_SHA1, | 1246 | SSL_SHA1, |
| 1247 | SSL_TLSV1, | 1247 | SSL_TLSV1, |
| 1248 | SSL_NOT_EXP|SSL_HIGH, | 1248 | SSL_NOT_EXP|SSL_HIGH, |
| 1249 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1249 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1250 | 128, | 1250 | 128, |
| 1251 | 128, | 1251 | 128, |
| 1252 | }, | 1252 | }, |
| 1253 | 1253 | ||
| 1254 | /* Cipher 46 */ | 1254 | /* Cipher 46 */ |
| 1255 | { | 1255 | { |
| 1256 | 1, | 1256 | 1, |
| 1257 | TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA, | 1257 | TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA, |
| 1258 | TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA, | 1258 | TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA, |
| 1259 | SSL_kEDH, | 1259 | SSL_kEDH, |
| 1260 | SSL_aNULL, | 1260 | SSL_aNULL, |
| 1261 | SSL_CAMELLIA128, | 1261 | SSL_CAMELLIA128, |
| 1262 | SSL_SHA1, | 1262 | SSL_SHA1, |
| 1263 | SSL_TLSV1, | 1263 | SSL_TLSV1, |
| 1264 | SSL_NOT_EXP|SSL_HIGH, | 1264 | SSL_NOT_EXP|SSL_HIGH, |
| 1265 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1265 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1266 | 128, | 1266 | 128, |
| 1267 | 128, | 1267 | 128, |
| 1268 | }, | 1268 | }, |
| 1269 | #endif /* OPENSSL_NO_CAMELLIA */ | 1269 | #endif /* OPENSSL_NO_CAMELLIA */ |
| 1270 | 1270 | ||
| @@ -1273,288 +1273,288 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
| 1273 | #if 0 | 1273 | #if 0 |
| 1274 | /* Cipher 60 */ | 1274 | /* Cipher 60 */ |
| 1275 | { | 1275 | { |
| 1276 | 1, | 1276 | 1, |
| 1277 | TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5, | 1277 | TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5, |
| 1278 | TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5, | 1278 | TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5, |
| 1279 | SSL_kRSA, | 1279 | SSL_kRSA, |
| 1280 | SSL_aRSA, | 1280 | SSL_aRSA, |
| 1281 | SSL_RC4, | 1281 | SSL_RC4, |
| 1282 | SSL_MD5, | 1282 | SSL_MD5, |
| 1283 | SSL_TLSV1, | 1283 | SSL_TLSV1, |
| 1284 | SSL_EXPORT|SSL_EXP56, | 1284 | SSL_EXPORT|SSL_EXP56, |
| 1285 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1285 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1286 | 56, | 1286 | 56, |
| 1287 | 128, | 1287 | 128, |
| 1288 | }, | 1288 | }, |
| 1289 | 1289 | ||
| 1290 | /* Cipher 61 */ | 1290 | /* Cipher 61 */ |
| 1291 | { | 1291 | { |
| 1292 | 1, | 1292 | 1, |
| 1293 | TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, | 1293 | TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, |
| 1294 | TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, | 1294 | TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, |
| 1295 | SSL_kRSA, | 1295 | SSL_kRSA, |
| 1296 | SSL_aRSA, | 1296 | SSL_aRSA, |
| 1297 | SSL_RC2, | 1297 | SSL_RC2, |
| 1298 | SSL_MD5, | 1298 | SSL_MD5, |
| 1299 | SSL_TLSV1, | 1299 | SSL_TLSV1, |
| 1300 | SSL_EXPORT|SSL_EXP56, | 1300 | SSL_EXPORT|SSL_EXP56, |
| 1301 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1301 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1302 | 56, | 1302 | 56, |
| 1303 | 128, | 1303 | 128, |
| 1304 | }, | 1304 | }, |
| 1305 | #endif | 1305 | #endif |
| 1306 | 1306 | ||
| 1307 | /* Cipher 62 */ | 1307 | /* Cipher 62 */ |
| 1308 | { | 1308 | { |
| 1309 | 1, | 1309 | 1, |
| 1310 | TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA, | 1310 | TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA, |
| 1311 | TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA, | 1311 | TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA, |
| 1312 | SSL_kRSA, | 1312 | SSL_kRSA, |
| 1313 | SSL_aRSA, | 1313 | SSL_aRSA, |
| 1314 | SSL_DES, | 1314 | SSL_DES, |
| 1315 | SSL_SHA1, | 1315 | SSL_SHA1, |
| 1316 | SSL_TLSV1, | 1316 | SSL_TLSV1, |
| 1317 | SSL_EXPORT|SSL_EXP56, | 1317 | SSL_EXPORT|SSL_EXP56, |
| 1318 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1318 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1319 | 56, | 1319 | 56, |
| 1320 | 56, | 1320 | 56, |
| 1321 | }, | 1321 | }, |
| 1322 | 1322 | ||
| 1323 | /* Cipher 63 */ | 1323 | /* Cipher 63 */ |
| 1324 | { | 1324 | { |
| 1325 | 1, | 1325 | 1, |
| 1326 | TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, | 1326 | TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, |
| 1327 | TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, | 1327 | TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, |
| 1328 | SSL_kEDH, | 1328 | SSL_kEDH, |
| 1329 | SSL_aDSS, | 1329 | SSL_aDSS, |
| 1330 | SSL_DES, | 1330 | SSL_DES, |
| 1331 | SSL_SHA1, | 1331 | SSL_SHA1, |
| 1332 | SSL_TLSV1, | 1332 | SSL_TLSV1, |
| 1333 | SSL_EXPORT|SSL_EXP56, | 1333 | SSL_EXPORT|SSL_EXP56, |
| 1334 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1334 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1335 | 56, | 1335 | 56, |
| 1336 | 56, | 1336 | 56, |
| 1337 | }, | 1337 | }, |
| 1338 | 1338 | ||
| 1339 | /* Cipher 64 */ | 1339 | /* Cipher 64 */ |
| 1340 | { | 1340 | { |
| 1341 | 1, | 1341 | 1, |
| 1342 | TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA, | 1342 | TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA, |
| 1343 | TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA, | 1343 | TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA, |
| 1344 | SSL_kRSA, | 1344 | SSL_kRSA, |
| 1345 | SSL_aRSA, | 1345 | SSL_aRSA, |
| 1346 | SSL_RC4, | 1346 | SSL_RC4, |
| 1347 | SSL_SHA1, | 1347 | SSL_SHA1, |
| 1348 | SSL_TLSV1, | 1348 | SSL_TLSV1, |
| 1349 | SSL_EXPORT|SSL_EXP56, | 1349 | SSL_EXPORT|SSL_EXP56, |
| 1350 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1350 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1351 | 56, | 1351 | 56, |
| 1352 | 128, | 1352 | 128, |
| 1353 | }, | 1353 | }, |
| 1354 | 1354 | ||
| 1355 | /* Cipher 65 */ | 1355 | /* Cipher 65 */ |
| 1356 | { | 1356 | { |
| 1357 | 1, | 1357 | 1, |
| 1358 | TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, | 1358 | TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, |
| 1359 | TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, | 1359 | TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, |
| 1360 | SSL_kEDH, | 1360 | SSL_kEDH, |
| 1361 | SSL_aDSS, | 1361 | SSL_aDSS, |
| 1362 | SSL_RC4, | 1362 | SSL_RC4, |
| 1363 | SSL_SHA1, | 1363 | SSL_SHA1, |
| 1364 | SSL_TLSV1, | 1364 | SSL_TLSV1, |
| 1365 | SSL_EXPORT|SSL_EXP56, | 1365 | SSL_EXPORT|SSL_EXP56, |
| 1366 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1366 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1367 | 56, | 1367 | 56, |
| 1368 | 128, | 1368 | 128, |
| 1369 | }, | 1369 | }, |
| 1370 | 1370 | ||
| 1371 | /* Cipher 66 */ | 1371 | /* Cipher 66 */ |
| 1372 | { | 1372 | { |
| 1373 | 1, | 1373 | 1, |
| 1374 | TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA, | 1374 | TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA, |
| 1375 | TLS1_CK_DHE_DSS_WITH_RC4_128_SHA, | 1375 | TLS1_CK_DHE_DSS_WITH_RC4_128_SHA, |
| 1376 | SSL_kEDH, | 1376 | SSL_kEDH, |
| 1377 | SSL_aDSS, | 1377 | SSL_aDSS, |
| 1378 | SSL_RC4, | 1378 | SSL_RC4, |
| 1379 | SSL_SHA1, | 1379 | SSL_SHA1, |
| 1380 | SSL_TLSV1, | 1380 | SSL_TLSV1, |
| 1381 | SSL_NOT_EXP|SSL_MEDIUM, | 1381 | SSL_NOT_EXP|SSL_MEDIUM, |
| 1382 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1382 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1383 | 128, | 1383 | 128, |
| 1384 | 128, | 1384 | 128, |
| 1385 | }, | 1385 | }, |
| 1386 | #endif | 1386 | #endif |
| 1387 | 1387 | ||
| 1388 | /* TLS v1.2 ciphersuites */ | 1388 | /* TLS v1.2 ciphersuites */ |
| 1389 | /* Cipher 67 */ | 1389 | /* Cipher 67 */ |
| 1390 | { | 1390 | { |
| 1391 | 1, | 1391 | 1, |
| 1392 | TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256, | 1392 | TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256, |
| 1393 | TLS1_CK_DHE_RSA_WITH_AES_128_SHA256, | 1393 | TLS1_CK_DHE_RSA_WITH_AES_128_SHA256, |
| 1394 | SSL_kEDH, | 1394 | SSL_kEDH, |
| 1395 | SSL_aRSA, | 1395 | SSL_aRSA, |
| 1396 | SSL_AES128, | 1396 | SSL_AES128, |
| 1397 | SSL_SHA256, | 1397 | SSL_SHA256, |
| 1398 | SSL_TLSV1_2, | 1398 | SSL_TLSV1_2, |
| 1399 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1399 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1400 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1400 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1401 | 128, | 1401 | 128, |
| 1402 | 128, | 1402 | 128, |
| 1403 | }, | 1403 | }, |
| 1404 | 1404 | ||
| 1405 | /* Cipher 68 */ | 1405 | /* Cipher 68 */ |
| 1406 | { | 1406 | { |
| 1407 | 0, /* not implemented (non-ephemeral DH) */ | 1407 | 0, /* not implemented (non-ephemeral DH) */ |
| 1408 | TLS1_TXT_DH_DSS_WITH_AES_256_SHA256, | 1408 | TLS1_TXT_DH_DSS_WITH_AES_256_SHA256, |
| 1409 | TLS1_CK_DH_DSS_WITH_AES_256_SHA256, | 1409 | TLS1_CK_DH_DSS_WITH_AES_256_SHA256, |
| 1410 | SSL_kDHd, | 1410 | SSL_kDHd, |
| 1411 | SSL_aDH, | 1411 | SSL_aDH, |
| 1412 | SSL_AES256, | 1412 | SSL_AES256, |
| 1413 | SSL_SHA256, | 1413 | SSL_SHA256, |
| 1414 | SSL_TLSV1_2, | 1414 | SSL_TLSV1_2, |
| 1415 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1415 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1416 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1416 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1417 | 256, | 1417 | 256, |
| 1418 | 256, | 1418 | 256, |
| 1419 | }, | 1419 | }, |
| 1420 | 1420 | ||
| 1421 | /* Cipher 69 */ | 1421 | /* Cipher 69 */ |
| 1422 | { | 1422 | { |
| 1423 | 0, /* not implemented (non-ephemeral DH) */ | 1423 | 0, /* not implemented (non-ephemeral DH) */ |
| 1424 | TLS1_TXT_DH_RSA_WITH_AES_256_SHA256, | 1424 | TLS1_TXT_DH_RSA_WITH_AES_256_SHA256, |
| 1425 | TLS1_CK_DH_RSA_WITH_AES_256_SHA256, | 1425 | TLS1_CK_DH_RSA_WITH_AES_256_SHA256, |
| 1426 | SSL_kDHr, | 1426 | SSL_kDHr, |
| 1427 | SSL_aDH, | 1427 | SSL_aDH, |
| 1428 | SSL_AES256, | 1428 | SSL_AES256, |
| 1429 | SSL_SHA256, | 1429 | SSL_SHA256, |
| 1430 | SSL_TLSV1_2, | 1430 | SSL_TLSV1_2, |
| 1431 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1431 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1432 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1432 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1433 | 256, | 1433 | 256, |
| 1434 | 256, | 1434 | 256, |
| 1435 | }, | 1435 | }, |
| 1436 | 1436 | ||
| 1437 | /* Cipher 6A */ | 1437 | /* Cipher 6A */ |
| 1438 | { | 1438 | { |
| 1439 | 1, | 1439 | 1, |
| 1440 | TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256, | 1440 | TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256, |
| 1441 | TLS1_CK_DHE_DSS_WITH_AES_256_SHA256, | 1441 | TLS1_CK_DHE_DSS_WITH_AES_256_SHA256, |
| 1442 | SSL_kEDH, | 1442 | SSL_kEDH, |
| 1443 | SSL_aDSS, | 1443 | SSL_aDSS, |
| 1444 | SSL_AES256, | 1444 | SSL_AES256, |
| 1445 | SSL_SHA256, | 1445 | SSL_SHA256, |
| 1446 | SSL_TLSV1_2, | 1446 | SSL_TLSV1_2, |
| 1447 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1447 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1448 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1448 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1449 | 256, | 1449 | 256, |
| 1450 | 256, | 1450 | 256, |
| 1451 | }, | 1451 | }, |
| 1452 | 1452 | ||
| 1453 | /* Cipher 6B */ | 1453 | /* Cipher 6B */ |
| 1454 | { | 1454 | { |
| 1455 | 1, | 1455 | 1, |
| 1456 | TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256, | 1456 | TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256, |
| 1457 | TLS1_CK_DHE_RSA_WITH_AES_256_SHA256, | 1457 | TLS1_CK_DHE_RSA_WITH_AES_256_SHA256, |
| 1458 | SSL_kEDH, | 1458 | SSL_kEDH, |
| 1459 | SSL_aRSA, | 1459 | SSL_aRSA, |
| 1460 | SSL_AES256, | 1460 | SSL_AES256, |
| 1461 | SSL_SHA256, | 1461 | SSL_SHA256, |
| 1462 | SSL_TLSV1_2, | 1462 | SSL_TLSV1_2, |
| 1463 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1463 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1464 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1464 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1465 | 256, | 1465 | 256, |
| 1466 | 256, | 1466 | 256, |
| 1467 | }, | 1467 | }, |
| 1468 | 1468 | ||
| 1469 | /* Cipher 6C */ | 1469 | /* Cipher 6C */ |
| 1470 | { | 1470 | { |
| 1471 | 1, | 1471 | 1, |
| 1472 | TLS1_TXT_ADH_WITH_AES_128_SHA256, | 1472 | TLS1_TXT_ADH_WITH_AES_128_SHA256, |
| 1473 | TLS1_CK_ADH_WITH_AES_128_SHA256, | 1473 | TLS1_CK_ADH_WITH_AES_128_SHA256, |
| 1474 | SSL_kEDH, | 1474 | SSL_kEDH, |
| 1475 | SSL_aNULL, | 1475 | SSL_aNULL, |
| 1476 | SSL_AES128, | 1476 | SSL_AES128, |
| 1477 | SSL_SHA256, | 1477 | SSL_SHA256, |
| 1478 | SSL_TLSV1_2, | 1478 | SSL_TLSV1_2, |
| 1479 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1479 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1480 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1480 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1481 | 128, | 1481 | 128, |
| 1482 | 128, | 1482 | 128, |
| 1483 | }, | 1483 | }, |
| 1484 | 1484 | ||
| 1485 | /* Cipher 6D */ | 1485 | /* Cipher 6D */ |
| 1486 | { | 1486 | { |
| 1487 | 1, | 1487 | 1, |
| 1488 | TLS1_TXT_ADH_WITH_AES_256_SHA256, | 1488 | TLS1_TXT_ADH_WITH_AES_256_SHA256, |
| 1489 | TLS1_CK_ADH_WITH_AES_256_SHA256, | 1489 | TLS1_CK_ADH_WITH_AES_256_SHA256, |
| 1490 | SSL_kEDH, | 1490 | SSL_kEDH, |
| 1491 | SSL_aNULL, | 1491 | SSL_aNULL, |
| 1492 | SSL_AES256, | 1492 | SSL_AES256, |
| 1493 | SSL_SHA256, | 1493 | SSL_SHA256, |
| 1494 | SSL_TLSV1_2, | 1494 | SSL_TLSV1_2, |
| 1495 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1495 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1496 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1496 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1497 | 256, | 1497 | 256, |
| 1498 | 256, | 1498 | 256, |
| 1499 | }, | 1499 | }, |
| 1500 | 1500 | ||
| 1501 | /* GOST Ciphersuites */ | 1501 | /* GOST Ciphersuites */ |
| 1502 | 1502 | ||
| 1503 | { | 1503 | { |
| 1504 | 1, | 1504 | 1, |
| 1505 | "GOST94-GOST89-GOST89", | 1505 | "GOST94-GOST89-GOST89", |
| 1506 | 0x3000080, | 1506 | 0x3000080, |
| 1507 | SSL_kGOST, | 1507 | SSL_kGOST, |
| 1508 | SSL_aGOST94, | 1508 | SSL_aGOST94, |
| 1509 | SSL_eGOST2814789CNT, | 1509 | SSL_eGOST2814789CNT, |
| 1510 | SSL_GOST89MAC, | 1510 | SSL_GOST89MAC, |
| 1511 | SSL_TLSV1, | 1511 | SSL_TLSV1, |
| 1512 | SSL_NOT_EXP|SSL_HIGH, | 1512 | SSL_NOT_EXP|SSL_HIGH, |
| 1513 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC, | 1513 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC, |
| 1514 | 256, | 1514 | 256, |
| 1515 | 256 | 1515 | 256 |
| 1516 | }, | 1516 | }, |
| 1517 | { | 1517 | { |
| 1518 | 1, | 1518 | 1, |
| 1519 | "GOST2001-GOST89-GOST89", | 1519 | "GOST2001-GOST89-GOST89", |
| 1520 | 0x3000081, | 1520 | 0x3000081, |
| 1521 | SSL_kGOST, | 1521 | SSL_kGOST, |
| 1522 | SSL_aGOST01, | 1522 | SSL_aGOST01, |
| 1523 | SSL_eGOST2814789CNT, | 1523 | SSL_eGOST2814789CNT, |
| 1524 | SSL_GOST89MAC, | 1524 | SSL_GOST89MAC, |
| 1525 | SSL_TLSV1, | 1525 | SSL_TLSV1, |
| 1526 | SSL_NOT_EXP|SSL_HIGH, | 1526 | SSL_NOT_EXP|SSL_HIGH, |
| 1527 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC, | 1527 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC, |
| 1528 | 256, | 1528 | 256, |
| 1529 | 256 | 1529 | 256 |
| 1530 | }, | 1530 | }, |
| 1531 | { | 1531 | { |
| 1532 | 1, | 1532 | 1, |
| 1533 | "GOST94-NULL-GOST94", | 1533 | "GOST94-NULL-GOST94", |
| 1534 | 0x3000082, | 1534 | 0x3000082, |
| 1535 | SSL_kGOST, | 1535 | SSL_kGOST, |
| 1536 | SSL_aGOST94, | 1536 | SSL_aGOST94, |
| 1537 | SSL_eNULL, | 1537 | SSL_eNULL, |
| 1538 | SSL_GOST94, | 1538 | SSL_GOST94, |
| 1539 | SSL_TLSV1, | 1539 | SSL_TLSV1, |
| 1540 | SSL_NOT_EXP|SSL_STRONG_NONE, | 1540 | SSL_NOT_EXP|SSL_STRONG_NONE, |
| 1541 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94, | 1541 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94, |
| 1542 | 0, | 1542 | 0, |
| 1543 | 0 | 1543 | 0 |
| 1544 | }, | 1544 | }, |
| 1545 | { | 1545 | { |
| 1546 | 1, | 1546 | 1, |
| 1547 | "GOST2001-NULL-GOST94", | 1547 | "GOST2001-NULL-GOST94", |
| 1548 | 0x3000083, | 1548 | 0x3000083, |
| 1549 | SSL_kGOST, | 1549 | SSL_kGOST, |
| 1550 | SSL_aGOST01, | 1550 | SSL_aGOST01, |
| 1551 | SSL_eNULL, | 1551 | SSL_eNULL, |
| 1552 | SSL_GOST94, | 1552 | SSL_GOST94, |
| 1553 | SSL_TLSV1, | 1553 | SSL_TLSV1, |
| 1554 | SSL_NOT_EXP|SSL_STRONG_NONE, | 1554 | SSL_NOT_EXP|SSL_STRONG_NONE, |
| 1555 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94, | 1555 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94, |
| 1556 | 0, | 1556 | 0, |
| 1557 | 0 | 1557 | 0 |
| 1558 | }, | 1558 | }, |
| 1559 | 1559 | ||
| 1560 | #ifndef OPENSSL_NO_CAMELLIA | 1560 | #ifndef OPENSSL_NO_CAMELLIA |
| @@ -1562,163 +1562,163 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
| 1562 | 1562 | ||
| 1563 | /* Cipher 84 */ | 1563 | /* Cipher 84 */ |
| 1564 | { | 1564 | { |
| 1565 | 1, | 1565 | 1, |
| 1566 | TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1566 | TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA, |
| 1567 | TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1567 | TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA, |
| 1568 | SSL_kRSA, | 1568 | SSL_kRSA, |
| 1569 | SSL_aRSA, | 1569 | SSL_aRSA, |
| 1570 | SSL_CAMELLIA256, | 1570 | SSL_CAMELLIA256, |
| 1571 | SSL_SHA1, | 1571 | SSL_SHA1, |
| 1572 | SSL_TLSV1, | 1572 | SSL_TLSV1, |
| 1573 | SSL_NOT_EXP|SSL_HIGH, | 1573 | SSL_NOT_EXP|SSL_HIGH, |
| 1574 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1574 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1575 | 256, | 1575 | 256, |
| 1576 | 256, | 1576 | 256, |
| 1577 | }, | 1577 | }, |
| 1578 | /* Cipher 85 */ | 1578 | /* Cipher 85 */ |
| 1579 | { | 1579 | { |
| 1580 | 0, /* not implemented (non-ephemeral DH) */ | 1580 | 0, /* not implemented (non-ephemeral DH) */ |
| 1581 | TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, | 1581 | TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, |
| 1582 | TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, | 1582 | TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, |
| 1583 | SSL_kDHd, | 1583 | SSL_kDHd, |
| 1584 | SSL_aDH, | 1584 | SSL_aDH, |
| 1585 | SSL_CAMELLIA256, | 1585 | SSL_CAMELLIA256, |
| 1586 | SSL_SHA1, | 1586 | SSL_SHA1, |
| 1587 | SSL_TLSV1, | 1587 | SSL_TLSV1, |
| 1588 | SSL_NOT_EXP|SSL_HIGH, | 1588 | SSL_NOT_EXP|SSL_HIGH, |
| 1589 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1589 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1590 | 256, | 1590 | 256, |
| 1591 | 256, | 1591 | 256, |
| 1592 | }, | 1592 | }, |
| 1593 | 1593 | ||
| 1594 | /* Cipher 86 */ | 1594 | /* Cipher 86 */ |
| 1595 | { | 1595 | { |
| 1596 | 0, /* not implemented (non-ephemeral DH) */ | 1596 | 0, /* not implemented (non-ephemeral DH) */ |
| 1597 | TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1597 | TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, |
| 1598 | TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1598 | TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, |
| 1599 | SSL_kDHr, | 1599 | SSL_kDHr, |
| 1600 | SSL_aDH, | 1600 | SSL_aDH, |
| 1601 | SSL_CAMELLIA256, | 1601 | SSL_CAMELLIA256, |
| 1602 | SSL_SHA1, | 1602 | SSL_SHA1, |
| 1603 | SSL_TLSV1, | 1603 | SSL_TLSV1, |
| 1604 | SSL_NOT_EXP|SSL_HIGH, | 1604 | SSL_NOT_EXP|SSL_HIGH, |
| 1605 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1605 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1606 | 256, | 1606 | 256, |
| 1607 | 256, | 1607 | 256, |
| 1608 | }, | 1608 | }, |
| 1609 | 1609 | ||
| 1610 | /* Cipher 87 */ | 1610 | /* Cipher 87 */ |
| 1611 | { | 1611 | { |
| 1612 | 1, | 1612 | 1, |
| 1613 | TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, | 1613 | TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, |
| 1614 | TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, | 1614 | TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, |
| 1615 | SSL_kEDH, | 1615 | SSL_kEDH, |
| 1616 | SSL_aDSS, | 1616 | SSL_aDSS, |
| 1617 | SSL_CAMELLIA256, | 1617 | SSL_CAMELLIA256, |
| 1618 | SSL_SHA1, | 1618 | SSL_SHA1, |
| 1619 | SSL_TLSV1, | 1619 | SSL_TLSV1, |
| 1620 | SSL_NOT_EXP|SSL_HIGH, | 1620 | SSL_NOT_EXP|SSL_HIGH, |
| 1621 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1621 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1622 | 256, | 1622 | 256, |
| 1623 | 256, | 1623 | 256, |
| 1624 | }, | 1624 | }, |
| 1625 | 1625 | ||
| 1626 | /* Cipher 88 */ | 1626 | /* Cipher 88 */ |
| 1627 | { | 1627 | { |
| 1628 | 1, | 1628 | 1, |
| 1629 | TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1629 | TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, |
| 1630 | TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1630 | TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, |
| 1631 | SSL_kEDH, | 1631 | SSL_kEDH, |
| 1632 | SSL_aRSA, | 1632 | SSL_aRSA, |
| 1633 | SSL_CAMELLIA256, | 1633 | SSL_CAMELLIA256, |
| 1634 | SSL_SHA1, | 1634 | SSL_SHA1, |
| 1635 | SSL_TLSV1, | 1635 | SSL_TLSV1, |
| 1636 | SSL_NOT_EXP|SSL_HIGH, | 1636 | SSL_NOT_EXP|SSL_HIGH, |
| 1637 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1637 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1638 | 256, | 1638 | 256, |
| 1639 | 256, | 1639 | 256, |
| 1640 | }, | 1640 | }, |
| 1641 | 1641 | ||
| 1642 | /* Cipher 89 */ | 1642 | /* Cipher 89 */ |
| 1643 | { | 1643 | { |
| 1644 | 1, | 1644 | 1, |
| 1645 | TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA, | 1645 | TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA, |
| 1646 | TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA, | 1646 | TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA, |
| 1647 | SSL_kEDH, | 1647 | SSL_kEDH, |
| 1648 | SSL_aNULL, | 1648 | SSL_aNULL, |
| 1649 | SSL_CAMELLIA256, | 1649 | SSL_CAMELLIA256, |
| 1650 | SSL_SHA1, | 1650 | SSL_SHA1, |
| 1651 | SSL_TLSV1, | 1651 | SSL_TLSV1, |
| 1652 | SSL_NOT_EXP|SSL_HIGH, | 1652 | SSL_NOT_EXP|SSL_HIGH, |
| 1653 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1653 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1654 | 256, | 1654 | 256, |
| 1655 | 256, | 1655 | 256, |
| 1656 | }, | 1656 | }, |
| 1657 | #endif /* OPENSSL_NO_CAMELLIA */ | 1657 | #endif /* OPENSSL_NO_CAMELLIA */ |
| 1658 | 1658 | ||
| 1659 | #ifndef OPENSSL_NO_PSK | 1659 | #ifndef OPENSSL_NO_PSK |
| 1660 | /* Cipher 8A */ | 1660 | /* Cipher 8A */ |
| 1661 | { | 1661 | { |
| 1662 | 1, | 1662 | 1, |
| 1663 | TLS1_TXT_PSK_WITH_RC4_128_SHA, | 1663 | TLS1_TXT_PSK_WITH_RC4_128_SHA, |
| 1664 | TLS1_CK_PSK_WITH_RC4_128_SHA, | 1664 | TLS1_CK_PSK_WITH_RC4_128_SHA, |
| 1665 | SSL_kPSK, | 1665 | SSL_kPSK, |
| 1666 | SSL_aPSK, | 1666 | SSL_aPSK, |
| 1667 | SSL_RC4, | 1667 | SSL_RC4, |
| 1668 | SSL_SHA1, | 1668 | SSL_SHA1, |
| 1669 | SSL_TLSV1, | 1669 | SSL_TLSV1, |
| 1670 | SSL_NOT_EXP|SSL_MEDIUM, | 1670 | SSL_NOT_EXP|SSL_MEDIUM, |
| 1671 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1671 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1672 | 128, | 1672 | 128, |
| 1673 | 128, | 1673 | 128, |
| 1674 | }, | 1674 | }, |
| 1675 | 1675 | ||
| 1676 | /* Cipher 8B */ | 1676 | /* Cipher 8B */ |
| 1677 | { | 1677 | { |
| 1678 | 1, | 1678 | 1, |
| 1679 | TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA, | 1679 | TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA, |
| 1680 | TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA, | 1680 | TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA, |
| 1681 | SSL_kPSK, | 1681 | SSL_kPSK, |
| 1682 | SSL_aPSK, | 1682 | SSL_aPSK, |
| 1683 | SSL_3DES, | 1683 | SSL_3DES, |
| 1684 | SSL_SHA1, | 1684 | SSL_SHA1, |
| 1685 | SSL_TLSV1, | 1685 | SSL_TLSV1, |
| 1686 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1686 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1687 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1687 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1688 | 168, | 1688 | 168, |
| 1689 | 168, | 1689 | 168, |
| 1690 | }, | 1690 | }, |
| 1691 | 1691 | ||
| 1692 | /* Cipher 8C */ | 1692 | /* Cipher 8C */ |
| 1693 | { | 1693 | { |
| 1694 | 1, | 1694 | 1, |
| 1695 | TLS1_TXT_PSK_WITH_AES_128_CBC_SHA, | 1695 | TLS1_TXT_PSK_WITH_AES_128_CBC_SHA, |
| 1696 | TLS1_CK_PSK_WITH_AES_128_CBC_SHA, | 1696 | TLS1_CK_PSK_WITH_AES_128_CBC_SHA, |
| 1697 | SSL_kPSK, | 1697 | SSL_kPSK, |
| 1698 | SSL_aPSK, | 1698 | SSL_aPSK, |
| 1699 | SSL_AES128, | 1699 | SSL_AES128, |
| 1700 | SSL_SHA1, | 1700 | SSL_SHA1, |
| 1701 | SSL_TLSV1, | 1701 | SSL_TLSV1, |
| 1702 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1702 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1703 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1703 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1704 | 128, | 1704 | 128, |
| 1705 | 128, | 1705 | 128, |
| 1706 | }, | 1706 | }, |
| 1707 | 1707 | ||
| 1708 | /* Cipher 8D */ | 1708 | /* Cipher 8D */ |
| 1709 | { | 1709 | { |
| 1710 | 1, | 1710 | 1, |
| 1711 | TLS1_TXT_PSK_WITH_AES_256_CBC_SHA, | 1711 | TLS1_TXT_PSK_WITH_AES_256_CBC_SHA, |
| 1712 | TLS1_CK_PSK_WITH_AES_256_CBC_SHA, | 1712 | TLS1_CK_PSK_WITH_AES_256_CBC_SHA, |
| 1713 | SSL_kPSK, | 1713 | SSL_kPSK, |
| 1714 | SSL_aPSK, | 1714 | SSL_aPSK, |
| 1715 | SSL_AES256, | 1715 | SSL_AES256, |
| 1716 | SSL_SHA1, | 1716 | SSL_SHA1, |
| 1717 | SSL_TLSV1, | 1717 | SSL_TLSV1, |
| 1718 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1718 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1719 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1719 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1720 | 256, | 1720 | 256, |
| 1721 | 256, | 1721 | 256, |
| 1722 | }, | 1722 | }, |
| 1723 | #endif /* OPENSSL_NO_PSK */ | 1723 | #endif /* OPENSSL_NO_PSK */ |
| 1724 | 1724 | ||
| @@ -1727,98 +1727,98 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
| 1727 | 1727 | ||
| 1728 | /* Cipher 96 */ | 1728 | /* Cipher 96 */ |
| 1729 | { | 1729 | { |
| 1730 | 1, | 1730 | 1, |
| 1731 | TLS1_TXT_RSA_WITH_SEED_SHA, | 1731 | TLS1_TXT_RSA_WITH_SEED_SHA, |
| 1732 | TLS1_CK_RSA_WITH_SEED_SHA, | 1732 | TLS1_CK_RSA_WITH_SEED_SHA, |
| 1733 | SSL_kRSA, | 1733 | SSL_kRSA, |
| 1734 | SSL_aRSA, | 1734 | SSL_aRSA, |
| 1735 | SSL_SEED, | 1735 | SSL_SEED, |
| 1736 | SSL_SHA1, | 1736 | SSL_SHA1, |
| 1737 | SSL_TLSV1, | 1737 | SSL_TLSV1, |
| 1738 | SSL_NOT_EXP|SSL_MEDIUM, | 1738 | SSL_NOT_EXP|SSL_MEDIUM, |
| 1739 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1739 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1740 | 128, | 1740 | 128, |
| 1741 | 128, | 1741 | 128, |
| 1742 | }, | 1742 | }, |
| 1743 | 1743 | ||
| 1744 | /* Cipher 97 */ | 1744 | /* Cipher 97 */ |
| 1745 | { | 1745 | { |
| 1746 | 0, /* not implemented (non-ephemeral DH) */ | 1746 | 0, /* not implemented (non-ephemeral DH) */ |
| 1747 | TLS1_TXT_DH_DSS_WITH_SEED_SHA, | 1747 | TLS1_TXT_DH_DSS_WITH_SEED_SHA, |
| 1748 | TLS1_CK_DH_DSS_WITH_SEED_SHA, | 1748 | TLS1_CK_DH_DSS_WITH_SEED_SHA, |
| 1749 | SSL_kDHd, | 1749 | SSL_kDHd, |
| 1750 | SSL_aDH, | 1750 | SSL_aDH, |
| 1751 | SSL_SEED, | 1751 | SSL_SEED, |
| 1752 | SSL_SHA1, | 1752 | SSL_SHA1, |
| 1753 | SSL_TLSV1, | 1753 | SSL_TLSV1, |
| 1754 | SSL_NOT_EXP|SSL_MEDIUM, | 1754 | SSL_NOT_EXP|SSL_MEDIUM, |
| 1755 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1755 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1756 | 128, | 1756 | 128, |
| 1757 | 128, | 1757 | 128, |
| 1758 | }, | 1758 | }, |
| 1759 | 1759 | ||
| 1760 | /* Cipher 98 */ | 1760 | /* Cipher 98 */ |
| 1761 | { | 1761 | { |
| 1762 | 0, /* not implemented (non-ephemeral DH) */ | 1762 | 0, /* not implemented (non-ephemeral DH) */ |
| 1763 | TLS1_TXT_DH_RSA_WITH_SEED_SHA, | 1763 | TLS1_TXT_DH_RSA_WITH_SEED_SHA, |
| 1764 | TLS1_CK_DH_RSA_WITH_SEED_SHA, | 1764 | TLS1_CK_DH_RSA_WITH_SEED_SHA, |
| 1765 | SSL_kDHr, | 1765 | SSL_kDHr, |
| 1766 | SSL_aDH, | 1766 | SSL_aDH, |
| 1767 | SSL_SEED, | 1767 | SSL_SEED, |
| 1768 | SSL_SHA1, | 1768 | SSL_SHA1, |
| 1769 | SSL_TLSV1, | 1769 | SSL_TLSV1, |
| 1770 | SSL_NOT_EXP|SSL_MEDIUM, | 1770 | SSL_NOT_EXP|SSL_MEDIUM, |
| 1771 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1771 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1772 | 128, | 1772 | 128, |
| 1773 | 128, | 1773 | 128, |
| 1774 | }, | 1774 | }, |
| 1775 | 1775 | ||
| 1776 | /* Cipher 99 */ | 1776 | /* Cipher 99 */ |
| 1777 | { | 1777 | { |
| 1778 | 1, | 1778 | 1, |
| 1779 | TLS1_TXT_DHE_DSS_WITH_SEED_SHA, | 1779 | TLS1_TXT_DHE_DSS_WITH_SEED_SHA, |
| 1780 | TLS1_CK_DHE_DSS_WITH_SEED_SHA, | 1780 | TLS1_CK_DHE_DSS_WITH_SEED_SHA, |
| 1781 | SSL_kEDH, | 1781 | SSL_kEDH, |
| 1782 | SSL_aDSS, | 1782 | SSL_aDSS, |
| 1783 | SSL_SEED, | 1783 | SSL_SEED, |
| 1784 | SSL_SHA1, | 1784 | SSL_SHA1, |
| 1785 | SSL_TLSV1, | 1785 | SSL_TLSV1, |
| 1786 | SSL_NOT_EXP|SSL_MEDIUM, | 1786 | SSL_NOT_EXP|SSL_MEDIUM, |
| 1787 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1787 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1788 | 128, | 1788 | 128, |
| 1789 | 128, | 1789 | 128, |
| 1790 | }, | 1790 | }, |
| 1791 | 1791 | ||
| 1792 | /* Cipher 9A */ | 1792 | /* Cipher 9A */ |
| 1793 | { | 1793 | { |
| 1794 | 1, | 1794 | 1, |
| 1795 | TLS1_TXT_DHE_RSA_WITH_SEED_SHA, | 1795 | TLS1_TXT_DHE_RSA_WITH_SEED_SHA, |
| 1796 | TLS1_CK_DHE_RSA_WITH_SEED_SHA, | 1796 | TLS1_CK_DHE_RSA_WITH_SEED_SHA, |
| 1797 | SSL_kEDH, | 1797 | SSL_kEDH, |
| 1798 | SSL_aRSA, | 1798 | SSL_aRSA, |
| 1799 | SSL_SEED, | 1799 | SSL_SEED, |
| 1800 | SSL_SHA1, | 1800 | SSL_SHA1, |
| 1801 | SSL_TLSV1, | 1801 | SSL_TLSV1, |
| 1802 | SSL_NOT_EXP|SSL_MEDIUM, | 1802 | SSL_NOT_EXP|SSL_MEDIUM, |
| 1803 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1803 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1804 | 128, | 1804 | 128, |
| 1805 | 128, | 1805 | 128, |
| 1806 | }, | 1806 | }, |
| 1807 | 1807 | ||
| 1808 | /* Cipher 9B */ | 1808 | /* Cipher 9B */ |
| 1809 | { | 1809 | { |
| 1810 | 1, | 1810 | 1, |
| 1811 | TLS1_TXT_ADH_WITH_SEED_SHA, | 1811 | TLS1_TXT_ADH_WITH_SEED_SHA, |
| 1812 | TLS1_CK_ADH_WITH_SEED_SHA, | 1812 | TLS1_CK_ADH_WITH_SEED_SHA, |
| 1813 | SSL_kEDH, | 1813 | SSL_kEDH, |
| 1814 | SSL_aNULL, | 1814 | SSL_aNULL, |
| 1815 | SSL_SEED, | 1815 | SSL_SEED, |
| 1816 | SSL_SHA1, | 1816 | SSL_SHA1, |
| 1817 | SSL_TLSV1, | 1817 | SSL_TLSV1, |
| 1818 | SSL_NOT_EXP|SSL_MEDIUM, | 1818 | SSL_NOT_EXP|SSL_MEDIUM, |
| 1819 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1819 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1820 | 128, | 1820 | 128, |
| 1821 | 128, | 1821 | 128, |
| 1822 | }, | 1822 | }, |
| 1823 | 1823 | ||
| 1824 | #endif /* OPENSSL_NO_SEED */ | 1824 | #endif /* OPENSSL_NO_SEED */ |
| @@ -1827,741 +1827,741 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
| 1827 | 1827 | ||
| 1828 | /* Cipher 9C */ | 1828 | /* Cipher 9C */ |
| 1829 | { | 1829 | { |
| 1830 | 1, | 1830 | 1, |
| 1831 | TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256, | 1831 | TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256, |
| 1832 | TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, | 1832 | TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, |
| 1833 | SSL_kRSA, | 1833 | SSL_kRSA, |
| 1834 | SSL_aRSA, | 1834 | SSL_aRSA, |
| 1835 | SSL_AES128GCM, | 1835 | SSL_AES128GCM, |
| 1836 | SSL_AEAD, | 1836 | SSL_AEAD, |
| 1837 | SSL_TLSV1_2, | 1837 | SSL_TLSV1_2, |
| 1838 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1838 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1839 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1839 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 1840 | 128, | 1840 | 128, |
| 1841 | 128, | 1841 | 128, |
| 1842 | }, | 1842 | }, |
| 1843 | 1843 | ||
| 1844 | /* Cipher 9D */ | 1844 | /* Cipher 9D */ |
| 1845 | { | 1845 | { |
| 1846 | 1, | 1846 | 1, |
| 1847 | TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384, | 1847 | TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384, |
| 1848 | TLS1_CK_RSA_WITH_AES_256_GCM_SHA384, | 1848 | TLS1_CK_RSA_WITH_AES_256_GCM_SHA384, |
| 1849 | SSL_kRSA, | 1849 | SSL_kRSA, |
| 1850 | SSL_aRSA, | 1850 | SSL_aRSA, |
| 1851 | SSL_AES256GCM, | 1851 | SSL_AES256GCM, |
| 1852 | SSL_AEAD, | 1852 | SSL_AEAD, |
| 1853 | SSL_TLSV1_2, | 1853 | SSL_TLSV1_2, |
| 1854 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1854 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1855 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1855 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 1856 | 256, | 1856 | 256, |
| 1857 | 256, | 1857 | 256, |
| 1858 | }, | 1858 | }, |
| 1859 | 1859 | ||
| 1860 | /* Cipher 9E */ | 1860 | /* Cipher 9E */ |
| 1861 | { | 1861 | { |
| 1862 | 1, | 1862 | 1, |
| 1863 | TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256, | 1863 | TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256, |
| 1864 | TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256, | 1864 | TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256, |
| 1865 | SSL_kEDH, | 1865 | SSL_kEDH, |
| 1866 | SSL_aRSA, | 1866 | SSL_aRSA, |
| 1867 | SSL_AES128GCM, | 1867 | SSL_AES128GCM, |
| 1868 | SSL_AEAD, | 1868 | SSL_AEAD, |
| 1869 | SSL_TLSV1_2, | 1869 | SSL_TLSV1_2, |
| 1870 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1870 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1871 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1871 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 1872 | 128, | 1872 | 128, |
| 1873 | 128, | 1873 | 128, |
| 1874 | }, | 1874 | }, |
| 1875 | 1875 | ||
| 1876 | /* Cipher 9F */ | 1876 | /* Cipher 9F */ |
| 1877 | { | 1877 | { |
| 1878 | 1, | 1878 | 1, |
| 1879 | TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384, | 1879 | TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384, |
| 1880 | TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384, | 1880 | TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384, |
| 1881 | SSL_kEDH, | 1881 | SSL_kEDH, |
| 1882 | SSL_aRSA, | 1882 | SSL_aRSA, |
| 1883 | SSL_AES256GCM, | 1883 | SSL_AES256GCM, |
| 1884 | SSL_AEAD, | 1884 | SSL_AEAD, |
| 1885 | SSL_TLSV1_2, | 1885 | SSL_TLSV1_2, |
| 1886 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1886 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1887 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1887 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 1888 | 256, | 1888 | 256, |
| 1889 | 256, | 1889 | 256, |
| 1890 | }, | 1890 | }, |
| 1891 | 1891 | ||
| 1892 | /* Cipher A0 */ | 1892 | /* Cipher A0 */ |
| 1893 | { | 1893 | { |
| 1894 | 0, | 1894 | 0, |
| 1895 | TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256, | 1895 | TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256, |
| 1896 | TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256, | 1896 | TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256, |
| 1897 | SSL_kDHr, | 1897 | SSL_kDHr, |
| 1898 | SSL_aDH, | 1898 | SSL_aDH, |
| 1899 | SSL_AES128GCM, | 1899 | SSL_AES128GCM, |
| 1900 | SSL_AEAD, | 1900 | SSL_AEAD, |
| 1901 | SSL_TLSV1_2, | 1901 | SSL_TLSV1_2, |
| 1902 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1902 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1903 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1903 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 1904 | 128, | 1904 | 128, |
| 1905 | 128, | 1905 | 128, |
| 1906 | }, | 1906 | }, |
| 1907 | 1907 | ||
| 1908 | /* Cipher A1 */ | 1908 | /* Cipher A1 */ |
| 1909 | { | 1909 | { |
| 1910 | 0, | 1910 | 0, |
| 1911 | TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384, | 1911 | TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384, |
| 1912 | TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384, | 1912 | TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384, |
| 1913 | SSL_kDHr, | 1913 | SSL_kDHr, |
| 1914 | SSL_aDH, | 1914 | SSL_aDH, |
| 1915 | SSL_AES256GCM, | 1915 | SSL_AES256GCM, |
| 1916 | SSL_AEAD, | 1916 | SSL_AEAD, |
| 1917 | SSL_TLSV1_2, | 1917 | SSL_TLSV1_2, |
| 1918 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1918 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1919 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1919 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 1920 | 256, | 1920 | 256, |
| 1921 | 256, | 1921 | 256, |
| 1922 | }, | 1922 | }, |
| 1923 | 1923 | ||
| 1924 | /* Cipher A2 */ | 1924 | /* Cipher A2 */ |
| 1925 | { | 1925 | { |
| 1926 | 1, | 1926 | 1, |
| 1927 | TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256, | 1927 | TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256, |
| 1928 | TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256, | 1928 | TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256, |
| 1929 | SSL_kEDH, | 1929 | SSL_kEDH, |
| 1930 | SSL_aDSS, | 1930 | SSL_aDSS, |
| 1931 | SSL_AES128GCM, | 1931 | SSL_AES128GCM, |
| 1932 | SSL_AEAD, | 1932 | SSL_AEAD, |
| 1933 | SSL_TLSV1_2, | 1933 | SSL_TLSV1_2, |
| 1934 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1934 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1935 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1935 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 1936 | 128, | 1936 | 128, |
| 1937 | 128, | 1937 | 128, |
| 1938 | }, | 1938 | }, |
| 1939 | 1939 | ||
| 1940 | /* Cipher A3 */ | 1940 | /* Cipher A3 */ |
| 1941 | { | 1941 | { |
| 1942 | 1, | 1942 | 1, |
| 1943 | TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384, | 1943 | TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384, |
| 1944 | TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384, | 1944 | TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384, |
| 1945 | SSL_kEDH, | 1945 | SSL_kEDH, |
| 1946 | SSL_aDSS, | 1946 | SSL_aDSS, |
| 1947 | SSL_AES256GCM, | 1947 | SSL_AES256GCM, |
| 1948 | SSL_AEAD, | 1948 | SSL_AEAD, |
| 1949 | SSL_TLSV1_2, | 1949 | SSL_TLSV1_2, |
| 1950 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1950 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1951 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1951 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 1952 | 256, | 1952 | 256, |
| 1953 | 256, | 1953 | 256, |
| 1954 | }, | 1954 | }, |
| 1955 | 1955 | ||
| 1956 | /* Cipher A4 */ | 1956 | /* Cipher A4 */ |
| 1957 | { | 1957 | { |
| 1958 | 0, | 1958 | 0, |
| 1959 | TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256, | 1959 | TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256, |
| 1960 | TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256, | 1960 | TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256, |
| 1961 | SSL_kDHd, | 1961 | SSL_kDHd, |
| 1962 | SSL_aDH, | 1962 | SSL_aDH, |
| 1963 | SSL_AES128GCM, | 1963 | SSL_AES128GCM, |
| 1964 | SSL_AEAD, | 1964 | SSL_AEAD, |
| 1965 | SSL_TLSV1_2, | 1965 | SSL_TLSV1_2, |
| 1966 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1966 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1967 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1967 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 1968 | 128, | 1968 | 128, |
| 1969 | 128, | 1969 | 128, |
| 1970 | }, | 1970 | }, |
| 1971 | 1971 | ||
| 1972 | /* Cipher A5 */ | 1972 | /* Cipher A5 */ |
| 1973 | { | 1973 | { |
| 1974 | 0, | 1974 | 0, |
| 1975 | TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384, | 1975 | TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384, |
| 1976 | TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384, | 1976 | TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384, |
| 1977 | SSL_kDHd, | 1977 | SSL_kDHd, |
| 1978 | SSL_aDH, | 1978 | SSL_aDH, |
| 1979 | SSL_AES256GCM, | 1979 | SSL_AES256GCM, |
| 1980 | SSL_AEAD, | 1980 | SSL_AEAD, |
| 1981 | SSL_TLSV1_2, | 1981 | SSL_TLSV1_2, |
| 1982 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1982 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1983 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1983 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 1984 | 256, | 1984 | 256, |
| 1985 | 256, | 1985 | 256, |
| 1986 | }, | 1986 | }, |
| 1987 | 1987 | ||
| 1988 | /* Cipher A6 */ | 1988 | /* Cipher A6 */ |
| 1989 | { | 1989 | { |
| 1990 | 1, | 1990 | 1, |
| 1991 | TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256, | 1991 | TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256, |
| 1992 | TLS1_CK_ADH_WITH_AES_128_GCM_SHA256, | 1992 | TLS1_CK_ADH_WITH_AES_128_GCM_SHA256, |
| 1993 | SSL_kEDH, | 1993 | SSL_kEDH, |
| 1994 | SSL_aNULL, | 1994 | SSL_aNULL, |
| 1995 | SSL_AES128GCM, | 1995 | SSL_AES128GCM, |
| 1996 | SSL_AEAD, | 1996 | SSL_AEAD, |
| 1997 | SSL_TLSV1_2, | 1997 | SSL_TLSV1_2, |
| 1998 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1998 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1999 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1999 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2000 | 128, | 2000 | 128, |
| 2001 | 128, | 2001 | 128, |
| 2002 | }, | 2002 | }, |
| 2003 | 2003 | ||
| 2004 | /* Cipher A7 */ | 2004 | /* Cipher A7 */ |
| 2005 | { | 2005 | { |
| 2006 | 1, | 2006 | 1, |
| 2007 | TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384, | 2007 | TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384, |
| 2008 | TLS1_CK_ADH_WITH_AES_256_GCM_SHA384, | 2008 | TLS1_CK_ADH_WITH_AES_256_GCM_SHA384, |
| 2009 | SSL_kEDH, | 2009 | SSL_kEDH, |
| 2010 | SSL_aNULL, | 2010 | SSL_aNULL, |
| 2011 | SSL_AES256GCM, | 2011 | SSL_AES256GCM, |
| 2012 | SSL_AEAD, | 2012 | SSL_AEAD, |
| 2013 | SSL_TLSV1_2, | 2013 | SSL_TLSV1_2, |
| 2014 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2014 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2015 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2015 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2016 | 256, | 2016 | 256, |
| 2017 | 256, | 2017 | 256, |
| 2018 | }, | 2018 | }, |
| 2019 | 2019 | ||
| 2020 | #ifndef OPENSSL_NO_ECDH | 2020 | #ifndef OPENSSL_NO_ECDH |
| 2021 | /* Cipher C001 */ | 2021 | /* Cipher C001 */ |
| 2022 | { | 2022 | { |
| 2023 | 1, | 2023 | 1, |
| 2024 | TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA, | 2024 | TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA, |
| 2025 | TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA, | 2025 | TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA, |
| 2026 | SSL_kECDHe, | 2026 | SSL_kECDHe, |
| 2027 | SSL_aECDH, | 2027 | SSL_aECDH, |
| 2028 | SSL_eNULL, | 2028 | SSL_eNULL, |
| 2029 | SSL_SHA1, | 2029 | SSL_SHA1, |
| 2030 | SSL_TLSV1, | 2030 | SSL_TLSV1, |
| 2031 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2031 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
| 2032 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2032 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2033 | 0, | 2033 | 0, |
| 2034 | 0, | 2034 | 0, |
| 2035 | }, | 2035 | }, |
| 2036 | 2036 | ||
| 2037 | /* Cipher C002 */ | 2037 | /* Cipher C002 */ |
| 2038 | { | 2038 | { |
| 2039 | 1, | 2039 | 1, |
| 2040 | TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA, | 2040 | TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA, |
| 2041 | TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA, | 2041 | TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA, |
| 2042 | SSL_kECDHe, | 2042 | SSL_kECDHe, |
| 2043 | SSL_aECDH, | 2043 | SSL_aECDH, |
| 2044 | SSL_RC4, | 2044 | SSL_RC4, |
| 2045 | SSL_SHA1, | 2045 | SSL_SHA1, |
| 2046 | SSL_TLSV1, | 2046 | SSL_TLSV1, |
| 2047 | SSL_NOT_EXP|SSL_MEDIUM, | 2047 | SSL_NOT_EXP|SSL_MEDIUM, |
| 2048 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2048 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2049 | 128, | 2049 | 128, |
| 2050 | 128, | 2050 | 128, |
| 2051 | }, | 2051 | }, |
| 2052 | 2052 | ||
| 2053 | /* Cipher C003 */ | 2053 | /* Cipher C003 */ |
| 2054 | { | 2054 | { |
| 2055 | 1, | 2055 | 1, |
| 2056 | TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, | 2056 | TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, |
| 2057 | TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, | 2057 | TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, |
| 2058 | SSL_kECDHe, | 2058 | SSL_kECDHe, |
| 2059 | SSL_aECDH, | 2059 | SSL_aECDH, |
| 2060 | SSL_3DES, | 2060 | SSL_3DES, |
| 2061 | SSL_SHA1, | 2061 | SSL_SHA1, |
| 2062 | SSL_TLSV1, | 2062 | SSL_TLSV1, |
| 2063 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2063 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2064 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2064 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2065 | 168, | 2065 | 168, |
| 2066 | 168, | 2066 | 168, |
| 2067 | }, | 2067 | }, |
| 2068 | 2068 | ||
| 2069 | /* Cipher C004 */ | 2069 | /* Cipher C004 */ |
| 2070 | { | 2070 | { |
| 2071 | 1, | 2071 | 1, |
| 2072 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA, | 2072 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA, |
| 2073 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA, | 2073 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA, |
| 2074 | SSL_kECDHe, | 2074 | SSL_kECDHe, |
| 2075 | SSL_aECDH, | 2075 | SSL_aECDH, |
| 2076 | SSL_AES128, | 2076 | SSL_AES128, |
| 2077 | SSL_SHA1, | 2077 | SSL_SHA1, |
| 2078 | SSL_TLSV1, | 2078 | SSL_TLSV1, |
| 2079 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2079 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2080 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2080 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2081 | 128, | 2081 | 128, |
| 2082 | 128, | 2082 | 128, |
| 2083 | }, | 2083 | }, |
| 2084 | 2084 | ||
| 2085 | /* Cipher C005 */ | 2085 | /* Cipher C005 */ |
| 2086 | { | 2086 | { |
| 2087 | 1, | 2087 | 1, |
| 2088 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA, | 2088 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA, |
| 2089 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA, | 2089 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA, |
| 2090 | SSL_kECDHe, | 2090 | SSL_kECDHe, |
| 2091 | SSL_aECDH, | 2091 | SSL_aECDH, |
| 2092 | SSL_AES256, | 2092 | SSL_AES256, |
| 2093 | SSL_SHA1, | 2093 | SSL_SHA1, |
| 2094 | SSL_TLSV1, | 2094 | SSL_TLSV1, |
| 2095 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2095 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2096 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2096 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2097 | 256, | 2097 | 256, |
| 2098 | 256, | 2098 | 256, |
| 2099 | }, | 2099 | }, |
| 2100 | 2100 | ||
| 2101 | /* Cipher C006 */ | 2101 | /* Cipher C006 */ |
| 2102 | { | 2102 | { |
| 2103 | 1, | 2103 | 1, |
| 2104 | TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA, | 2104 | TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA, |
| 2105 | TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA, | 2105 | TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA, |
| 2106 | SSL_kEECDH, | 2106 | SSL_kEECDH, |
| 2107 | SSL_aECDSA, | 2107 | SSL_aECDSA, |
| 2108 | SSL_eNULL, | 2108 | SSL_eNULL, |
| 2109 | SSL_SHA1, | 2109 | SSL_SHA1, |
| 2110 | SSL_TLSV1, | 2110 | SSL_TLSV1, |
| 2111 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2111 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
| 2112 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2112 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2113 | 0, | 2113 | 0, |
| 2114 | 0, | 2114 | 0, |
| 2115 | }, | 2115 | }, |
| 2116 | 2116 | ||
| 2117 | /* Cipher C007 */ | 2117 | /* Cipher C007 */ |
| 2118 | { | 2118 | { |
| 2119 | 1, | 2119 | 1, |
| 2120 | TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA, | 2120 | TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA, |
| 2121 | TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA, | 2121 | TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA, |
| 2122 | SSL_kEECDH, | 2122 | SSL_kEECDH, |
| 2123 | SSL_aECDSA, | 2123 | SSL_aECDSA, |
| 2124 | SSL_RC4, | 2124 | SSL_RC4, |
| 2125 | SSL_SHA1, | 2125 | SSL_SHA1, |
| 2126 | SSL_TLSV1, | 2126 | SSL_TLSV1, |
| 2127 | SSL_NOT_EXP|SSL_MEDIUM, | 2127 | SSL_NOT_EXP|SSL_MEDIUM, |
| 2128 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2128 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2129 | 128, | 2129 | 128, |
| 2130 | 128, | 2130 | 128, |
| 2131 | }, | 2131 | }, |
| 2132 | 2132 | ||
| 2133 | /* Cipher C008 */ | 2133 | /* Cipher C008 */ |
| 2134 | { | 2134 | { |
| 2135 | 1, | 2135 | 1, |
| 2136 | TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, | 2136 | TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, |
| 2137 | TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, | 2137 | TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, |
| 2138 | SSL_kEECDH, | 2138 | SSL_kEECDH, |
| 2139 | SSL_aECDSA, | 2139 | SSL_aECDSA, |
| 2140 | SSL_3DES, | 2140 | SSL_3DES, |
| 2141 | SSL_SHA1, | 2141 | SSL_SHA1, |
| 2142 | SSL_TLSV1, | 2142 | SSL_TLSV1, |
| 2143 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2143 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2144 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2144 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2145 | 168, | 2145 | 168, |
| 2146 | 168, | 2146 | 168, |
| 2147 | }, | 2147 | }, |
| 2148 | 2148 | ||
| 2149 | /* Cipher C009 */ | 2149 | /* Cipher C009 */ |
| 2150 | { | 2150 | { |
| 2151 | 1, | 2151 | 1, |
| 2152 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, | 2152 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, |
| 2153 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, | 2153 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, |
| 2154 | SSL_kEECDH, | 2154 | SSL_kEECDH, |
| 2155 | SSL_aECDSA, | 2155 | SSL_aECDSA, |
| 2156 | SSL_AES128, | 2156 | SSL_AES128, |
| 2157 | SSL_SHA1, | 2157 | SSL_SHA1, |
| 2158 | SSL_TLSV1, | 2158 | SSL_TLSV1, |
| 2159 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2159 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2160 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2160 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2161 | 128, | 2161 | 128, |
| 2162 | 128, | 2162 | 128, |
| 2163 | }, | 2163 | }, |
| 2164 | 2164 | ||
| 2165 | /* Cipher C00A */ | 2165 | /* Cipher C00A */ |
| 2166 | { | 2166 | { |
| 2167 | 1, | 2167 | 1, |
| 2168 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, | 2168 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, |
| 2169 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, | 2169 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, |
| 2170 | SSL_kEECDH, | 2170 | SSL_kEECDH, |
| 2171 | SSL_aECDSA, | 2171 | SSL_aECDSA, |
| 2172 | SSL_AES256, | 2172 | SSL_AES256, |
| 2173 | SSL_SHA1, | 2173 | SSL_SHA1, |
| 2174 | SSL_TLSV1, | 2174 | SSL_TLSV1, |
| 2175 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2175 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2176 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2176 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2177 | 256, | 2177 | 256, |
| 2178 | 256, | 2178 | 256, |
| 2179 | }, | 2179 | }, |
| 2180 | 2180 | ||
| 2181 | /* Cipher C00B */ | 2181 | /* Cipher C00B */ |
| 2182 | { | 2182 | { |
| 2183 | 1, | 2183 | 1, |
| 2184 | TLS1_TXT_ECDH_RSA_WITH_NULL_SHA, | 2184 | TLS1_TXT_ECDH_RSA_WITH_NULL_SHA, |
| 2185 | TLS1_CK_ECDH_RSA_WITH_NULL_SHA, | 2185 | TLS1_CK_ECDH_RSA_WITH_NULL_SHA, |
| 2186 | SSL_kECDHr, | 2186 | SSL_kECDHr, |
| 2187 | SSL_aECDH, | 2187 | SSL_aECDH, |
| 2188 | SSL_eNULL, | 2188 | SSL_eNULL, |
| 2189 | SSL_SHA1, | 2189 | SSL_SHA1, |
| 2190 | SSL_TLSV1, | 2190 | SSL_TLSV1, |
| 2191 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2191 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
| 2192 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2192 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2193 | 0, | 2193 | 0, |
| 2194 | 0, | 2194 | 0, |
| 2195 | }, | 2195 | }, |
| 2196 | 2196 | ||
| 2197 | /* Cipher C00C */ | 2197 | /* Cipher C00C */ |
| 2198 | { | 2198 | { |
| 2199 | 1, | 2199 | 1, |
| 2200 | TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA, | 2200 | TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA, |
| 2201 | TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA, | 2201 | TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA, |
| 2202 | SSL_kECDHr, | 2202 | SSL_kECDHr, |
| 2203 | SSL_aECDH, | 2203 | SSL_aECDH, |
| 2204 | SSL_RC4, | 2204 | SSL_RC4, |
| 2205 | SSL_SHA1, | 2205 | SSL_SHA1, |
| 2206 | SSL_TLSV1, | 2206 | SSL_TLSV1, |
| 2207 | SSL_NOT_EXP|SSL_MEDIUM, | 2207 | SSL_NOT_EXP|SSL_MEDIUM, |
| 2208 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2208 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2209 | 128, | 2209 | 128, |
| 2210 | 128, | 2210 | 128, |
| 2211 | }, | 2211 | }, |
| 2212 | 2212 | ||
| 2213 | /* Cipher C00D */ | 2213 | /* Cipher C00D */ |
| 2214 | { | 2214 | { |
| 2215 | 1, | 2215 | 1, |
| 2216 | TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA, | 2216 | TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA, |
| 2217 | TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA, | 2217 | TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA, |
| 2218 | SSL_kECDHr, | 2218 | SSL_kECDHr, |
| 2219 | SSL_aECDH, | 2219 | SSL_aECDH, |
| 2220 | SSL_3DES, | 2220 | SSL_3DES, |
| 2221 | SSL_SHA1, | 2221 | SSL_SHA1, |
| 2222 | SSL_TLSV1, | 2222 | SSL_TLSV1, |
| 2223 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2223 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2224 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2224 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2225 | 168, | 2225 | 168, |
| 2226 | 168, | 2226 | 168, |
| 2227 | }, | 2227 | }, |
| 2228 | 2228 | ||
| 2229 | /* Cipher C00E */ | 2229 | /* Cipher C00E */ |
| 2230 | { | 2230 | { |
| 2231 | 1, | 2231 | 1, |
| 2232 | TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA, | 2232 | TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA, |
| 2233 | TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA, | 2233 | TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA, |
| 2234 | SSL_kECDHr, | 2234 | SSL_kECDHr, |
| 2235 | SSL_aECDH, | 2235 | SSL_aECDH, |
| 2236 | SSL_AES128, | 2236 | SSL_AES128, |
| 2237 | SSL_SHA1, | 2237 | SSL_SHA1, |
| 2238 | SSL_TLSV1, | 2238 | SSL_TLSV1, |
| 2239 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2239 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2240 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2240 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2241 | 128, | 2241 | 128, |
| 2242 | 128, | 2242 | 128, |
| 2243 | }, | 2243 | }, |
| 2244 | 2244 | ||
| 2245 | /* Cipher C00F */ | 2245 | /* Cipher C00F */ |
| 2246 | { | 2246 | { |
| 2247 | 1, | 2247 | 1, |
| 2248 | TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA, | 2248 | TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA, |
| 2249 | TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA, | 2249 | TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA, |
| 2250 | SSL_kECDHr, | 2250 | SSL_kECDHr, |
| 2251 | SSL_aECDH, | 2251 | SSL_aECDH, |
| 2252 | SSL_AES256, | 2252 | SSL_AES256, |
| 2253 | SSL_SHA1, | 2253 | SSL_SHA1, |
| 2254 | SSL_TLSV1, | 2254 | SSL_TLSV1, |
| 2255 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2255 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2256 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2256 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2257 | 256, | 2257 | 256, |
| 2258 | 256, | 2258 | 256, |
| 2259 | }, | 2259 | }, |
| 2260 | 2260 | ||
| 2261 | /* Cipher C010 */ | 2261 | /* Cipher C010 */ |
| 2262 | { | 2262 | { |
| 2263 | 1, | 2263 | 1, |
| 2264 | TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA, | 2264 | TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA, |
| 2265 | TLS1_CK_ECDHE_RSA_WITH_NULL_SHA, | 2265 | TLS1_CK_ECDHE_RSA_WITH_NULL_SHA, |
| 2266 | SSL_kEECDH, | 2266 | SSL_kEECDH, |
| 2267 | SSL_aRSA, | 2267 | SSL_aRSA, |
| 2268 | SSL_eNULL, | 2268 | SSL_eNULL, |
| 2269 | SSL_SHA1, | 2269 | SSL_SHA1, |
| 2270 | SSL_TLSV1, | 2270 | SSL_TLSV1, |
| 2271 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2271 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
| 2272 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2272 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2273 | 0, | 2273 | 0, |
| 2274 | 0, | 2274 | 0, |
| 2275 | }, | 2275 | }, |
| 2276 | 2276 | ||
| 2277 | /* Cipher C011 */ | 2277 | /* Cipher C011 */ |
| 2278 | { | 2278 | { |
| 2279 | 1, | 2279 | 1, |
| 2280 | TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA, | 2280 | TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA, |
| 2281 | TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA, | 2281 | TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA, |
| 2282 | SSL_kEECDH, | 2282 | SSL_kEECDH, |
| 2283 | SSL_aRSA, | 2283 | SSL_aRSA, |
| 2284 | SSL_RC4, | 2284 | SSL_RC4, |
| 2285 | SSL_SHA1, | 2285 | SSL_SHA1, |
| 2286 | SSL_TLSV1, | 2286 | SSL_TLSV1, |
| 2287 | SSL_NOT_EXP|SSL_MEDIUM, | 2287 | SSL_NOT_EXP|SSL_MEDIUM, |
| 2288 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2288 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2289 | 128, | 2289 | 128, |
| 2290 | 128, | 2290 | 128, |
| 2291 | }, | 2291 | }, |
| 2292 | 2292 | ||
| 2293 | /* Cipher C012 */ | 2293 | /* Cipher C012 */ |
| 2294 | { | 2294 | { |
| 2295 | 1, | 2295 | 1, |
| 2296 | TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA, | 2296 | TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA, |
| 2297 | TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA, | 2297 | TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA, |
| 2298 | SSL_kEECDH, | 2298 | SSL_kEECDH, |
| 2299 | SSL_aRSA, | 2299 | SSL_aRSA, |
| 2300 | SSL_3DES, | 2300 | SSL_3DES, |
| 2301 | SSL_SHA1, | 2301 | SSL_SHA1, |
| 2302 | SSL_TLSV1, | 2302 | SSL_TLSV1, |
| 2303 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2303 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2304 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2304 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2305 | 168, | 2305 | 168, |
| 2306 | 168, | 2306 | 168, |
| 2307 | }, | 2307 | }, |
| 2308 | 2308 | ||
| 2309 | /* Cipher C013 */ | 2309 | /* Cipher C013 */ |
| 2310 | { | 2310 | { |
| 2311 | 1, | 2311 | 1, |
| 2312 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA, | 2312 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA, |
| 2313 | TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA, | 2313 | TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA, |
| 2314 | SSL_kEECDH, | 2314 | SSL_kEECDH, |
| 2315 | SSL_aRSA, | 2315 | SSL_aRSA, |
| 2316 | SSL_AES128, | 2316 | SSL_AES128, |
| 2317 | SSL_SHA1, | 2317 | SSL_SHA1, |
| 2318 | SSL_TLSV1, | 2318 | SSL_TLSV1, |
| 2319 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2319 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2320 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2320 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2321 | 128, | 2321 | 128, |
| 2322 | 128, | 2322 | 128, |
| 2323 | }, | 2323 | }, |
| 2324 | 2324 | ||
| 2325 | /* Cipher C014 */ | 2325 | /* Cipher C014 */ |
| 2326 | { | 2326 | { |
| 2327 | 1, | 2327 | 1, |
| 2328 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA, | 2328 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA, |
| 2329 | TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA, | 2329 | TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA, |
| 2330 | SSL_kEECDH, | 2330 | SSL_kEECDH, |
| 2331 | SSL_aRSA, | 2331 | SSL_aRSA, |
| 2332 | SSL_AES256, | 2332 | SSL_AES256, |
| 2333 | SSL_SHA1, | 2333 | SSL_SHA1, |
| 2334 | SSL_TLSV1, | 2334 | SSL_TLSV1, |
| 2335 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2335 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2336 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2336 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2337 | 256, | 2337 | 256, |
| 2338 | 256, | 2338 | 256, |
| 2339 | }, | 2339 | }, |
| 2340 | 2340 | ||
| 2341 | /* Cipher C015 */ | 2341 | /* Cipher C015 */ |
| 2342 | { | 2342 | { |
| 2343 | 1, | 2343 | 1, |
| 2344 | TLS1_TXT_ECDH_anon_WITH_NULL_SHA, | 2344 | TLS1_TXT_ECDH_anon_WITH_NULL_SHA, |
| 2345 | TLS1_CK_ECDH_anon_WITH_NULL_SHA, | 2345 | TLS1_CK_ECDH_anon_WITH_NULL_SHA, |
| 2346 | SSL_kEECDH, | 2346 | SSL_kEECDH, |
| 2347 | SSL_aNULL, | 2347 | SSL_aNULL, |
| 2348 | SSL_eNULL, | 2348 | SSL_eNULL, |
| 2349 | SSL_SHA1, | 2349 | SSL_SHA1, |
| 2350 | SSL_TLSV1, | 2350 | SSL_TLSV1, |
| 2351 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2351 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
| 2352 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2352 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2353 | 0, | 2353 | 0, |
| 2354 | 0, | 2354 | 0, |
| 2355 | }, | 2355 | }, |
| 2356 | 2356 | ||
| 2357 | /* Cipher C016 */ | 2357 | /* Cipher C016 */ |
| 2358 | { | 2358 | { |
| 2359 | 1, | 2359 | 1, |
| 2360 | TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA, | 2360 | TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA, |
| 2361 | TLS1_CK_ECDH_anon_WITH_RC4_128_SHA, | 2361 | TLS1_CK_ECDH_anon_WITH_RC4_128_SHA, |
| 2362 | SSL_kEECDH, | 2362 | SSL_kEECDH, |
| 2363 | SSL_aNULL, | 2363 | SSL_aNULL, |
| 2364 | SSL_RC4, | 2364 | SSL_RC4, |
| 2365 | SSL_SHA1, | 2365 | SSL_SHA1, |
| 2366 | SSL_TLSV1, | 2366 | SSL_TLSV1, |
| 2367 | SSL_NOT_EXP|SSL_MEDIUM, | 2367 | SSL_NOT_EXP|SSL_MEDIUM, |
| 2368 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2368 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2369 | 128, | 2369 | 128, |
| 2370 | 128, | 2370 | 128, |
| 2371 | }, | 2371 | }, |
| 2372 | 2372 | ||
| 2373 | /* Cipher C017 */ | 2373 | /* Cipher C017 */ |
| 2374 | { | 2374 | { |
| 2375 | 1, | 2375 | 1, |
| 2376 | TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA, | 2376 | TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA, |
| 2377 | TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA, | 2377 | TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA, |
| 2378 | SSL_kEECDH, | 2378 | SSL_kEECDH, |
| 2379 | SSL_aNULL, | 2379 | SSL_aNULL, |
| 2380 | SSL_3DES, | 2380 | SSL_3DES, |
| 2381 | SSL_SHA1, | 2381 | SSL_SHA1, |
| 2382 | SSL_TLSV1, | 2382 | SSL_TLSV1, |
| 2383 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2383 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2384 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2384 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2385 | 168, | 2385 | 168, |
| 2386 | 168, | 2386 | 168, |
| 2387 | }, | 2387 | }, |
| 2388 | 2388 | ||
| 2389 | /* Cipher C018 */ | 2389 | /* Cipher C018 */ |
| 2390 | { | 2390 | { |
| 2391 | 1, | 2391 | 1, |
| 2392 | TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA, | 2392 | TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA, |
| 2393 | TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA, | 2393 | TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA, |
| 2394 | SSL_kEECDH, | 2394 | SSL_kEECDH, |
| 2395 | SSL_aNULL, | 2395 | SSL_aNULL, |
| 2396 | SSL_AES128, | 2396 | SSL_AES128, |
| 2397 | SSL_SHA1, | 2397 | SSL_SHA1, |
| 2398 | SSL_TLSV1, | 2398 | SSL_TLSV1, |
| 2399 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2399 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2400 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2400 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2401 | 128, | 2401 | 128, |
| 2402 | 128, | 2402 | 128, |
| 2403 | }, | 2403 | }, |
| 2404 | 2404 | ||
| 2405 | /* Cipher C019 */ | 2405 | /* Cipher C019 */ |
| 2406 | { | 2406 | { |
| 2407 | 1, | 2407 | 1, |
| 2408 | TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA, | 2408 | TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA, |
| 2409 | TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA, | 2409 | TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA, |
| 2410 | SSL_kEECDH, | 2410 | SSL_kEECDH, |
| 2411 | SSL_aNULL, | 2411 | SSL_aNULL, |
| 2412 | SSL_AES256, | 2412 | SSL_AES256, |
| 2413 | SSL_SHA1, | 2413 | SSL_SHA1, |
| 2414 | SSL_TLSV1, | 2414 | SSL_TLSV1, |
| 2415 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2415 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2416 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2416 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2417 | 256, | 2417 | 256, |
| 2418 | 256, | 2418 | 256, |
| 2419 | }, | 2419 | }, |
| 2420 | #endif /* OPENSSL_NO_ECDH */ | 2420 | #endif /* OPENSSL_NO_ECDH */ |
| 2421 | 2421 | ||
| 2422 | #ifndef OPENSSL_NO_SRP | 2422 | #ifndef OPENSSL_NO_SRP |
| 2423 | /* Cipher C01A */ | 2423 | /* Cipher C01A */ |
| 2424 | { | 2424 | { |
| 2425 | 1, | 2425 | 1, |
| 2426 | TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA, | 2426 | TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA, |
| 2427 | TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA, | 2427 | TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA, |
| 2428 | SSL_kSRP, | 2428 | SSL_kSRP, |
| 2429 | SSL_aNULL, | 2429 | SSL_aNULL, |
| 2430 | SSL_3DES, | 2430 | SSL_3DES, |
| 2431 | SSL_SHA1, | 2431 | SSL_SHA1, |
| 2432 | SSL_TLSV1, | 2432 | SSL_TLSV1, |
| 2433 | SSL_NOT_EXP|SSL_HIGH, | 2433 | SSL_NOT_EXP|SSL_HIGH, |
| 2434 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2434 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2435 | 168, | 2435 | 168, |
| 2436 | 168, | 2436 | 168, |
| 2437 | }, | 2437 | }, |
| 2438 | 2438 | ||
| 2439 | /* Cipher C01B */ | 2439 | /* Cipher C01B */ |
| 2440 | { | 2440 | { |
| 2441 | 1, | 2441 | 1, |
| 2442 | TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, | 2442 | TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, |
| 2443 | TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, | 2443 | TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, |
| 2444 | SSL_kSRP, | 2444 | SSL_kSRP, |
| 2445 | SSL_aRSA, | 2445 | SSL_aRSA, |
| 2446 | SSL_3DES, | 2446 | SSL_3DES, |
| 2447 | SSL_SHA1, | 2447 | SSL_SHA1, |
| 2448 | SSL_TLSV1, | 2448 | SSL_TLSV1, |
| 2449 | SSL_NOT_EXP|SSL_HIGH, | 2449 | SSL_NOT_EXP|SSL_HIGH, |
| 2450 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2450 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2451 | 168, | 2451 | 168, |
| 2452 | 168, | 2452 | 168, |
| 2453 | }, | 2453 | }, |
| 2454 | 2454 | ||
| 2455 | /* Cipher C01C */ | 2455 | /* Cipher C01C */ |
| 2456 | { | 2456 | { |
| 2457 | 1, | 2457 | 1, |
| 2458 | TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, | 2458 | TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, |
| 2459 | TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, | 2459 | TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, |
| 2460 | SSL_kSRP, | 2460 | SSL_kSRP, |
| 2461 | SSL_aDSS, | 2461 | SSL_aDSS, |
| 2462 | SSL_3DES, | 2462 | SSL_3DES, |
| 2463 | SSL_SHA1, | 2463 | SSL_SHA1, |
| 2464 | SSL_TLSV1, | 2464 | SSL_TLSV1, |
| 2465 | SSL_NOT_EXP|SSL_HIGH, | 2465 | SSL_NOT_EXP|SSL_HIGH, |
| 2466 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2466 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2467 | 168, | 2467 | 168, |
| 2468 | 168, | 2468 | 168, |
| 2469 | }, | 2469 | }, |
| 2470 | 2470 | ||
| 2471 | /* Cipher C01D */ | 2471 | /* Cipher C01D */ |
| 2472 | { | 2472 | { |
| 2473 | 1, | 2473 | 1, |
| 2474 | TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA, | 2474 | TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA, |
| 2475 | TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA, | 2475 | TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA, |
| 2476 | SSL_kSRP, | 2476 | SSL_kSRP, |
| 2477 | SSL_aNULL, | 2477 | SSL_aNULL, |
| 2478 | SSL_AES128, | 2478 | SSL_AES128, |
| 2479 | SSL_SHA1, | 2479 | SSL_SHA1, |
| 2480 | SSL_TLSV1, | 2480 | SSL_TLSV1, |
| 2481 | SSL_NOT_EXP|SSL_HIGH, | 2481 | SSL_NOT_EXP|SSL_HIGH, |
| 2482 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2482 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2483 | 128, | 2483 | 128, |
| 2484 | 128, | 2484 | 128, |
| 2485 | }, | 2485 | }, |
| 2486 | 2486 | ||
| 2487 | /* Cipher C01E */ | 2487 | /* Cipher C01E */ |
| 2488 | { | 2488 | { |
| 2489 | 1, | 2489 | 1, |
| 2490 | TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, | 2490 | TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, |
| 2491 | TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, | 2491 | TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, |
| 2492 | SSL_kSRP, | 2492 | SSL_kSRP, |
| 2493 | SSL_aRSA, | 2493 | SSL_aRSA, |
| 2494 | SSL_AES128, | 2494 | SSL_AES128, |
| 2495 | SSL_SHA1, | 2495 | SSL_SHA1, |
| 2496 | SSL_TLSV1, | 2496 | SSL_TLSV1, |
| 2497 | SSL_NOT_EXP|SSL_HIGH, | 2497 | SSL_NOT_EXP|SSL_HIGH, |
| 2498 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2498 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2499 | 128, | 2499 | 128, |
| 2500 | 128, | 2500 | 128, |
| 2501 | }, | 2501 | }, |
| 2502 | 2502 | ||
| 2503 | /* Cipher C01F */ | 2503 | /* Cipher C01F */ |
| 2504 | { | 2504 | { |
| 2505 | 1, | 2505 | 1, |
| 2506 | TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, | 2506 | TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, |
| 2507 | TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, | 2507 | TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, |
| 2508 | SSL_kSRP, | 2508 | SSL_kSRP, |
| 2509 | SSL_aDSS, | 2509 | SSL_aDSS, |
| 2510 | SSL_AES128, | 2510 | SSL_AES128, |
| 2511 | SSL_SHA1, | 2511 | SSL_SHA1, |
| 2512 | SSL_TLSV1, | 2512 | SSL_TLSV1, |
| 2513 | SSL_NOT_EXP|SSL_HIGH, | 2513 | SSL_NOT_EXP|SSL_HIGH, |
| 2514 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2514 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2515 | 128, | 2515 | 128, |
| 2516 | 128, | 2516 | 128, |
| 2517 | }, | 2517 | }, |
| 2518 | 2518 | ||
| 2519 | /* Cipher C020 */ | 2519 | /* Cipher C020 */ |
| 2520 | { | 2520 | { |
| 2521 | 1, | 2521 | 1, |
| 2522 | TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA, | 2522 | TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA, |
| 2523 | TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA, | 2523 | TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA, |
| 2524 | SSL_kSRP, | 2524 | SSL_kSRP, |
| 2525 | SSL_aNULL, | 2525 | SSL_aNULL, |
| 2526 | SSL_AES256, | 2526 | SSL_AES256, |
| 2527 | SSL_SHA1, | 2527 | SSL_SHA1, |
| 2528 | SSL_TLSV1, | 2528 | SSL_TLSV1, |
| 2529 | SSL_NOT_EXP|SSL_HIGH, | 2529 | SSL_NOT_EXP|SSL_HIGH, |
| 2530 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2530 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2531 | 256, | 2531 | 256, |
| 2532 | 256, | 2532 | 256, |
| 2533 | }, | 2533 | }, |
| 2534 | 2534 | ||
| 2535 | /* Cipher C021 */ | 2535 | /* Cipher C021 */ |
| 2536 | { | 2536 | { |
| 2537 | 1, | 2537 | 1, |
| 2538 | TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, | 2538 | TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, |
| 2539 | TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, | 2539 | TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, |
| 2540 | SSL_kSRP, | 2540 | SSL_kSRP, |
| 2541 | SSL_aRSA, | 2541 | SSL_aRSA, |
| 2542 | SSL_AES256, | 2542 | SSL_AES256, |
| 2543 | SSL_SHA1, | 2543 | SSL_SHA1, |
| 2544 | SSL_TLSV1, | 2544 | SSL_TLSV1, |
| 2545 | SSL_NOT_EXP|SSL_HIGH, | 2545 | SSL_NOT_EXP|SSL_HIGH, |
| 2546 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2546 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2547 | 256, | 2547 | 256, |
| 2548 | 256, | 2548 | 256, |
| 2549 | }, | 2549 | }, |
| 2550 | 2550 | ||
| 2551 | /* Cipher C022 */ | 2551 | /* Cipher C022 */ |
| 2552 | { | 2552 | { |
| 2553 | 1, | 2553 | 1, |
| 2554 | TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, | 2554 | TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, |
| 2555 | TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, | 2555 | TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, |
| 2556 | SSL_kSRP, | 2556 | SSL_kSRP, |
| 2557 | SSL_aDSS, | 2557 | SSL_aDSS, |
| 2558 | SSL_AES256, | 2558 | SSL_AES256, |
| 2559 | SSL_SHA1, | 2559 | SSL_SHA1, |
| 2560 | SSL_TLSV1, | 2560 | SSL_TLSV1, |
| 2561 | SSL_NOT_EXP|SSL_HIGH, | 2561 | SSL_NOT_EXP|SSL_HIGH, |
| 2562 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2562 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2563 | 256, | 2563 | 256, |
| 2564 | 256, | 2564 | 256, |
| 2565 | }, | 2565 | }, |
| 2566 | #endif /* OPENSSL_NO_SRP */ | 2566 | #endif /* OPENSSL_NO_SRP */ |
| 2567 | #ifndef OPENSSL_NO_ECDH | 2567 | #ifndef OPENSSL_NO_ECDH |
| @@ -2570,260 +2570,260 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
| 2570 | 2570 | ||
| 2571 | /* Cipher C023 */ | 2571 | /* Cipher C023 */ |
| 2572 | { | 2572 | { |
| 2573 | 1, | 2573 | 1, |
| 2574 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256, | 2574 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256, |
| 2575 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256, | 2575 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256, |
| 2576 | SSL_kEECDH, | 2576 | SSL_kEECDH, |
| 2577 | SSL_aECDSA, | 2577 | SSL_aECDSA, |
| 2578 | SSL_AES128, | 2578 | SSL_AES128, |
| 2579 | SSL_SHA256, | 2579 | SSL_SHA256, |
| 2580 | SSL_TLSV1_2, | 2580 | SSL_TLSV1_2, |
| 2581 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2581 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2582 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2582 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2583 | 128, | 2583 | 128, |
| 2584 | 128, | 2584 | 128, |
| 2585 | }, | 2585 | }, |
| 2586 | 2586 | ||
| 2587 | /* Cipher C024 */ | 2587 | /* Cipher C024 */ |
| 2588 | { | 2588 | { |
| 2589 | 1, | 2589 | 1, |
| 2590 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384, | 2590 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384, |
| 2591 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384, | 2591 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384, |
| 2592 | SSL_kEECDH, | 2592 | SSL_kEECDH, |
| 2593 | SSL_aECDSA, | 2593 | SSL_aECDSA, |
| 2594 | SSL_AES256, | 2594 | SSL_AES256, |
| 2595 | SSL_SHA384, | 2595 | SSL_SHA384, |
| 2596 | SSL_TLSV1_2, | 2596 | SSL_TLSV1_2, |
| 2597 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2597 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2598 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2598 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2599 | 256, | 2599 | 256, |
| 2600 | 256, | 2600 | 256, |
| 2601 | }, | 2601 | }, |
| 2602 | 2602 | ||
| 2603 | /* Cipher C025 */ | 2603 | /* Cipher C025 */ |
| 2604 | { | 2604 | { |
| 2605 | 1, | 2605 | 1, |
| 2606 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256, | 2606 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256, |
| 2607 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256, | 2607 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256, |
| 2608 | SSL_kECDHe, | 2608 | SSL_kECDHe, |
| 2609 | SSL_aECDH, | 2609 | SSL_aECDH, |
| 2610 | SSL_AES128, | 2610 | SSL_AES128, |
| 2611 | SSL_SHA256, | 2611 | SSL_SHA256, |
| 2612 | SSL_TLSV1_2, | 2612 | SSL_TLSV1_2, |
| 2613 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2613 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2614 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2614 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2615 | 128, | 2615 | 128, |
| 2616 | 128, | 2616 | 128, |
| 2617 | }, | 2617 | }, |
| 2618 | 2618 | ||
| 2619 | /* Cipher C026 */ | 2619 | /* Cipher C026 */ |
| 2620 | { | 2620 | { |
| 2621 | 1, | 2621 | 1, |
| 2622 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384, | 2622 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384, |
| 2623 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384, | 2623 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384, |
| 2624 | SSL_kECDHe, | 2624 | SSL_kECDHe, |
| 2625 | SSL_aECDH, | 2625 | SSL_aECDH, |
| 2626 | SSL_AES256, | 2626 | SSL_AES256, |
| 2627 | SSL_SHA384, | 2627 | SSL_SHA384, |
| 2628 | SSL_TLSV1_2, | 2628 | SSL_TLSV1_2, |
| 2629 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2629 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2630 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2630 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2631 | 256, | 2631 | 256, |
| 2632 | 256, | 2632 | 256, |
| 2633 | }, | 2633 | }, |
| 2634 | 2634 | ||
| 2635 | /* Cipher C027 */ | 2635 | /* Cipher C027 */ |
| 2636 | { | 2636 | { |
| 2637 | 1, | 2637 | 1, |
| 2638 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256, | 2638 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256, |
| 2639 | TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256, | 2639 | TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256, |
| 2640 | SSL_kEECDH, | 2640 | SSL_kEECDH, |
| 2641 | SSL_aRSA, | 2641 | SSL_aRSA, |
| 2642 | SSL_AES128, | 2642 | SSL_AES128, |
| 2643 | SSL_SHA256, | 2643 | SSL_SHA256, |
| 2644 | SSL_TLSV1_2, | 2644 | SSL_TLSV1_2, |
| 2645 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2645 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2646 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2646 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2647 | 128, | 2647 | 128, |
| 2648 | 128, | 2648 | 128, |
| 2649 | }, | 2649 | }, |
| 2650 | 2650 | ||
| 2651 | /* Cipher C028 */ | 2651 | /* Cipher C028 */ |
| 2652 | { | 2652 | { |
| 2653 | 1, | 2653 | 1, |
| 2654 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384, | 2654 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384, |
| 2655 | TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384, | 2655 | TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384, |
| 2656 | SSL_kEECDH, | 2656 | SSL_kEECDH, |
| 2657 | SSL_aRSA, | 2657 | SSL_aRSA, |
| 2658 | SSL_AES256, | 2658 | SSL_AES256, |
| 2659 | SSL_SHA384, | 2659 | SSL_SHA384, |
| 2660 | SSL_TLSV1_2, | 2660 | SSL_TLSV1_2, |
| 2661 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2661 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2662 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2662 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2663 | 256, | 2663 | 256, |
| 2664 | 256, | 2664 | 256, |
| 2665 | }, | 2665 | }, |
| 2666 | 2666 | ||
| 2667 | /* Cipher C029 */ | 2667 | /* Cipher C029 */ |
| 2668 | { | 2668 | { |
| 2669 | 1, | 2669 | 1, |
| 2670 | TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256, | 2670 | TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256, |
| 2671 | TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256, | 2671 | TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256, |
| 2672 | SSL_kECDHr, | 2672 | SSL_kECDHr, |
| 2673 | SSL_aECDH, | 2673 | SSL_aECDH, |
| 2674 | SSL_AES128, | 2674 | SSL_AES128, |
| 2675 | SSL_SHA256, | 2675 | SSL_SHA256, |
| 2676 | SSL_TLSV1_2, | 2676 | SSL_TLSV1_2, |
| 2677 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2677 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2678 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2678 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2679 | 128, | 2679 | 128, |
| 2680 | 128, | 2680 | 128, |
| 2681 | }, | 2681 | }, |
| 2682 | 2682 | ||
| 2683 | /* Cipher C02A */ | 2683 | /* Cipher C02A */ |
| 2684 | { | 2684 | { |
| 2685 | 1, | 2685 | 1, |
| 2686 | TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384, | 2686 | TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384, |
| 2687 | TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384, | 2687 | TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384, |
| 2688 | SSL_kECDHr, | 2688 | SSL_kECDHr, |
| 2689 | SSL_aECDH, | 2689 | SSL_aECDH, |
| 2690 | SSL_AES256, | 2690 | SSL_AES256, |
| 2691 | SSL_SHA384, | 2691 | SSL_SHA384, |
| 2692 | SSL_TLSV1_2, | 2692 | SSL_TLSV1_2, |
| 2693 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2693 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2694 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2694 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2695 | 256, | 2695 | 256, |
| 2696 | 256, | 2696 | 256, |
| 2697 | }, | 2697 | }, |
| 2698 | 2698 | ||
| 2699 | /* GCM based TLS v1.2 ciphersuites from RFC5289 */ | 2699 | /* GCM based TLS v1.2 ciphersuites from RFC5289 */ |
| 2700 | 2700 | ||
| 2701 | /* Cipher C02B */ | 2701 | /* Cipher C02B */ |
| 2702 | { | 2702 | { |
| 2703 | 1, | 2703 | 1, |
| 2704 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, | 2704 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, |
| 2705 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, | 2705 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, |
| 2706 | SSL_kEECDH, | 2706 | SSL_kEECDH, |
| 2707 | SSL_aECDSA, | 2707 | SSL_aECDSA, |
| 2708 | SSL_AES128GCM, | 2708 | SSL_AES128GCM, |
| 2709 | SSL_AEAD, | 2709 | SSL_AEAD, |
| 2710 | SSL_TLSV1_2, | 2710 | SSL_TLSV1_2, |
| 2711 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2711 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2712 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2712 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2713 | 128, | 2713 | 128, |
| 2714 | 128, | 2714 | 128, |
| 2715 | }, | 2715 | }, |
| 2716 | 2716 | ||
| 2717 | /* Cipher C02C */ | 2717 | /* Cipher C02C */ |
| 2718 | { | 2718 | { |
| 2719 | 1, | 2719 | 1, |
| 2720 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, | 2720 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, |
| 2721 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, | 2721 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, |
| 2722 | SSL_kEECDH, | 2722 | SSL_kEECDH, |
| 2723 | SSL_aECDSA, | 2723 | SSL_aECDSA, |
| 2724 | SSL_AES256GCM, | 2724 | SSL_AES256GCM, |
| 2725 | SSL_AEAD, | 2725 | SSL_AEAD, |
| 2726 | SSL_TLSV1_2, | 2726 | SSL_TLSV1_2, |
| 2727 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2727 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2728 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2728 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2729 | 256, | 2729 | 256, |
| 2730 | 256, | 2730 | 256, |
| 2731 | }, | 2731 | }, |
| 2732 | 2732 | ||
| 2733 | /* Cipher C02D */ | 2733 | /* Cipher C02D */ |
| 2734 | { | 2734 | { |
| 2735 | 1, | 2735 | 1, |
| 2736 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, | 2736 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, |
| 2737 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, | 2737 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, |
| 2738 | SSL_kECDHe, | 2738 | SSL_kECDHe, |
| 2739 | SSL_aECDH, | 2739 | SSL_aECDH, |
| 2740 | SSL_AES128GCM, | 2740 | SSL_AES128GCM, |
| 2741 | SSL_AEAD, | 2741 | SSL_AEAD, |
| 2742 | SSL_TLSV1_2, | 2742 | SSL_TLSV1_2, |
| 2743 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2743 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2744 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2744 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2745 | 128, | 2745 | 128, |
| 2746 | 128, | 2746 | 128, |
| 2747 | }, | 2747 | }, |
| 2748 | 2748 | ||
| 2749 | /* Cipher C02E */ | 2749 | /* Cipher C02E */ |
| 2750 | { | 2750 | { |
| 2751 | 1, | 2751 | 1, |
| 2752 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, | 2752 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, |
| 2753 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, | 2753 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, |
| 2754 | SSL_kECDHe, | 2754 | SSL_kECDHe, |
| 2755 | SSL_aECDH, | 2755 | SSL_aECDH, |
| 2756 | SSL_AES256GCM, | 2756 | SSL_AES256GCM, |
| 2757 | SSL_AEAD, | 2757 | SSL_AEAD, |
| 2758 | SSL_TLSV1_2, | 2758 | SSL_TLSV1_2, |
| 2759 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2759 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2760 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2760 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2761 | 256, | 2761 | 256, |
| 2762 | 256, | 2762 | 256, |
| 2763 | }, | 2763 | }, |
| 2764 | 2764 | ||
| 2765 | /* Cipher C02F */ | 2765 | /* Cipher C02F */ |
| 2766 | { | 2766 | { |
| 2767 | 1, | 2767 | 1, |
| 2768 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256, | 2768 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256, |
| 2769 | TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, | 2769 | TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, |
| 2770 | SSL_kEECDH, | 2770 | SSL_kEECDH, |
| 2771 | SSL_aRSA, | 2771 | SSL_aRSA, |
| 2772 | SSL_AES128GCM, | 2772 | SSL_AES128GCM, |
| 2773 | SSL_AEAD, | 2773 | SSL_AEAD, |
| 2774 | SSL_TLSV1_2, | 2774 | SSL_TLSV1_2, |
| 2775 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2775 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2776 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2776 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2777 | 128, | 2777 | 128, |
| 2778 | 128, | 2778 | 128, |
| 2779 | }, | 2779 | }, |
| 2780 | 2780 | ||
| 2781 | /* Cipher C030 */ | 2781 | /* Cipher C030 */ |
| 2782 | { | 2782 | { |
| 2783 | 1, | 2783 | 1, |
| 2784 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384, | 2784 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384, |
| 2785 | TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384, | 2785 | TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384, |
| 2786 | SSL_kEECDH, | 2786 | SSL_kEECDH, |
| 2787 | SSL_aRSA, | 2787 | SSL_aRSA, |
| 2788 | SSL_AES256GCM, | 2788 | SSL_AES256GCM, |
| 2789 | SSL_AEAD, | 2789 | SSL_AEAD, |
| 2790 | SSL_TLSV1_2, | 2790 | SSL_TLSV1_2, |
| 2791 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2791 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2792 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2792 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2793 | 256, | 2793 | 256, |
| 2794 | 256, | 2794 | 256, |
| 2795 | }, | 2795 | }, |
| 2796 | 2796 | ||
| 2797 | /* Cipher C031 */ | 2797 | /* Cipher C031 */ |
| 2798 | { | 2798 | { |
| 2799 | 1, | 2799 | 1, |
| 2800 | TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256, | 2800 | TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256, |
| 2801 | TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256, | 2801 | TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256, |
| 2802 | SSL_kECDHr, | 2802 | SSL_kECDHr, |
| 2803 | SSL_aECDH, | 2803 | SSL_aECDH, |
| 2804 | SSL_AES128GCM, | 2804 | SSL_AES128GCM, |
| 2805 | SSL_AEAD, | 2805 | SSL_AEAD, |
| 2806 | SSL_TLSV1_2, | 2806 | SSL_TLSV1_2, |
| 2807 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2807 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2808 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2808 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2809 | 128, | 2809 | 128, |
| 2810 | 128, | 2810 | 128, |
| 2811 | }, | 2811 | }, |
| 2812 | 2812 | ||
| 2813 | /* Cipher C032 */ | 2813 | /* Cipher C032 */ |
| 2814 | { | 2814 | { |
| 2815 | 1, | 2815 | 1, |
| 2816 | TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384, | 2816 | TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384, |
| 2817 | TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384, | 2817 | TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384, |
| 2818 | SSL_kECDHr, | 2818 | SSL_kECDHr, |
| 2819 | SSL_aECDH, | 2819 | SSL_aECDH, |
| 2820 | SSL_AES256GCM, | 2820 | SSL_AES256GCM, |
| 2821 | SSL_AEAD, | 2821 | SSL_AEAD, |
| 2822 | SSL_TLSV1_2, | 2822 | SSL_TLSV1_2, |
| 2823 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2823 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2824 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2824 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2825 | 256, | 2825 | 256, |
| 2826 | 256, | 2826 | 256, |
| 2827 | }, | 2827 | }, |
| 2828 | 2828 | ||
| 2829 | #endif /* OPENSSL_NO_ECDH */ | 2829 | #endif /* OPENSSL_NO_ECDH */ |
| @@ -2832,135 +2832,141 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
| 2832 | #ifdef TEMP_GOST_TLS | 2832 | #ifdef TEMP_GOST_TLS |
| 2833 | /* Cipher FF00 */ | 2833 | /* Cipher FF00 */ |
| 2834 | { | 2834 | { |
| 2835 | 1, | 2835 | 1, |
| 2836 | "GOST-MD5", | 2836 | "GOST-MD5", |
| 2837 | 0x0300ff00, | 2837 | 0x0300ff00, |
| 2838 | SSL_kRSA, | 2838 | SSL_kRSA, |
| 2839 | SSL_aRSA, | 2839 | SSL_aRSA, |
| 2840 | SSL_eGOST2814789CNT, | 2840 | SSL_eGOST2814789CNT, |
| 2841 | SSL_MD5, | 2841 | SSL_MD5, |
| 2842 | SSL_TLSV1, | 2842 | SSL_TLSV1, |
| 2843 | SSL_NOT_EXP|SSL_HIGH, | 2843 | SSL_NOT_EXP|SSL_HIGH, |
| 2844 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2844 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2845 | 256, | 2845 | 256, |
| 2846 | 256, | 2846 | 256, |
| 2847 | }, | 2847 | }, |
| 2848 | { | 2848 | { |
| 2849 | 1, | 2849 | 1, |
| 2850 | "GOST-GOST94", | 2850 | "GOST-GOST94", |
| 2851 | 0x0300ff01, | 2851 | 0x0300ff01, |
| 2852 | SSL_kRSA, | 2852 | SSL_kRSA, |
| 2853 | SSL_aRSA, | 2853 | SSL_aRSA, |
| 2854 | SSL_eGOST2814789CNT, | 2854 | SSL_eGOST2814789CNT, |
| 2855 | SSL_GOST94, | 2855 | SSL_GOST94, |
| 2856 | SSL_TLSV1, | 2856 | SSL_TLSV1, |
| 2857 | SSL_NOT_EXP|SSL_HIGH, | 2857 | SSL_NOT_EXP|SSL_HIGH, |
| 2858 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2858 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2859 | 256, | 2859 | 256, |
| 2860 | 256 | 2860 | 256 |
| 2861 | }, | 2861 | }, |
| 2862 | { | 2862 | { |
| 2863 | 1, | 2863 | 1, |
| 2864 | "GOST-GOST89MAC", | 2864 | "GOST-GOST89MAC", |
| 2865 | 0x0300ff02, | 2865 | 0x0300ff02, |
| 2866 | SSL_kRSA, | 2866 | SSL_kRSA, |
| 2867 | SSL_aRSA, | 2867 | SSL_aRSA, |
| 2868 | SSL_eGOST2814789CNT, | 2868 | SSL_eGOST2814789CNT, |
| 2869 | SSL_GOST89MAC, | 2869 | SSL_GOST89MAC, |
| 2870 | SSL_TLSV1, | 2870 | SSL_TLSV1, |
| 2871 | SSL_NOT_EXP|SSL_HIGH, | 2871 | SSL_NOT_EXP|SSL_HIGH, |
| 2872 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2872 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2873 | 256, | 2873 | 256, |
| 2874 | 256 | 2874 | 256 |
| 2875 | }, | 2875 | }, |
| 2876 | { | 2876 | { |
| 2877 | 1, | 2877 | 1, |
| 2878 | "GOST-GOST89STREAM", | 2878 | "GOST-GOST89STREAM", |
| 2879 | 0x0300ff03, | 2879 | 0x0300ff03, |
| 2880 | SSL_kRSA, | 2880 | SSL_kRSA, |
| 2881 | SSL_aRSA, | 2881 | SSL_aRSA, |
| 2882 | SSL_eGOST2814789CNT, | 2882 | SSL_eGOST2814789CNT, |
| 2883 | SSL_GOST89MAC, | 2883 | SSL_GOST89MAC, |
| 2884 | SSL_TLSV1, | 2884 | SSL_TLSV1, |
| 2885 | SSL_NOT_EXP|SSL_HIGH, | 2885 | SSL_NOT_EXP|SSL_HIGH, |
| 2886 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF|TLS1_STREAM_MAC, | 2886 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF|TLS1_STREAM_MAC, |
| 2887 | 256, | 2887 | 256, |
| 2888 | 256 | 2888 | 256 |
| 2889 | }, | 2889 | }, |
| 2890 | #endif | 2890 | #endif |
| 2891 | 2891 | ||
| 2892 | /* end of list */ | 2892 | /* end of list */ |
| 2893 | }; | 2893 | }; |
| 2894 | 2894 | ||
| 2895 | SSL3_ENC_METHOD SSLv3_enc_data={ | 2895 | SSL3_ENC_METHOD SSLv3_enc_data = { |
| 2896 | ssl3_enc, | 2896 | ssl3_enc, |
| 2897 | n_ssl3_mac, | 2897 | n_ssl3_mac, |
| 2898 | ssl3_setup_key_block, | 2898 | ssl3_setup_key_block, |
| 2899 | ssl3_generate_master_secret, | 2899 | ssl3_generate_master_secret, |
| 2900 | ssl3_change_cipher_state, | 2900 | ssl3_change_cipher_state, |
| 2901 | ssl3_final_finish_mac, | 2901 | ssl3_final_finish_mac, |
| 2902 | MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH, | 2902 | MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH, |
| 2903 | ssl3_cert_verify_mac, | 2903 | ssl3_cert_verify_mac, |
| 2904 | SSL3_MD_CLIENT_FINISHED_CONST,4, | 2904 | SSL3_MD_CLIENT_FINISHED_CONST, 4, |
| 2905 | SSL3_MD_SERVER_FINISHED_CONST,4, | 2905 | SSL3_MD_SERVER_FINISHED_CONST, 4, |
| 2906 | ssl3_alert_code, | 2906 | ssl3_alert_code, |
| 2907 | (int (*)(SSL *, unsigned char *, size_t, const char *, | 2907 | (int (*)(SSL *, unsigned char *, size_t, const char *, |
| 2908 | size_t, const unsigned char *, size_t, | 2908 | size_t, const unsigned char *, size_t, |
| 2909 | int use_context))ssl_undefined_function, | 2909 | int use_context))ssl_undefined_function, |
| 2910 | }; | 2910 | }; |
| 2911 | 2911 | ||
| 2912 | long ssl3_default_timeout(void) | 2912 | long |
| 2913 | { | 2913 | ssl3_default_timeout(void) |
| 2914 | { | ||
| 2914 | /* 2 hours, the 24 hours mentioned in the SSLv3 spec | 2915 | /* 2 hours, the 24 hours mentioned in the SSLv3 spec |
| 2915 | * is way too long for http, the cache would over fill */ | 2916 | * is way too long for http, the cache would over fill */ |
| 2916 | return(60*60*2); | 2917 | return (60*60*2); |
| 2917 | } | 2918 | } |
| 2918 | 2919 | ||
| 2919 | int ssl3_num_ciphers(void) | 2920 | int |
| 2920 | { | 2921 | ssl3_num_ciphers(void) |
| 2921 | return(SSL3_NUM_CIPHERS); | 2922 | { |
| 2922 | } | 2923 | return (SSL3_NUM_CIPHERS); |
| 2923 | 2924 | } | |
| 2924 | const SSL_CIPHER *ssl3_get_cipher(unsigned int u) | 2925 | |
| 2925 | { | 2926 | const SSL_CIPHER |
| 2927 | *ssl3_get_cipher(unsigned int u) | ||
| 2928 | { | ||
| 2926 | if (u < SSL3_NUM_CIPHERS) | 2929 | if (u < SSL3_NUM_CIPHERS) |
| 2927 | return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u])); | 2930 | return (&(ssl3_ciphers[SSL3_NUM_CIPHERS - 1 - u])); |
| 2928 | else | 2931 | else |
| 2929 | return(NULL); | 2932 | return (NULL); |
| 2930 | } | 2933 | } |
| 2931 | 2934 | ||
| 2932 | int ssl3_pending(const SSL *s) | 2935 | int |
| 2933 | { | 2936 | ssl3_pending(const SSL *s) |
| 2937 | { | ||
| 2934 | if (s->rstate == SSL_ST_READ_BODY) | 2938 | if (s->rstate == SSL_ST_READ_BODY) |
| 2935 | return 0; | 2939 | return 0; |
| 2936 | 2940 | ||
| 2937 | return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0; | 2941 | return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0; |
| 2938 | } | 2942 | } |
| 2939 | 2943 | ||
| 2940 | int ssl3_new(SSL *s) | 2944 | int |
| 2941 | { | 2945 | ssl3_new(SSL *s) |
| 2946 | { | ||
| 2942 | SSL3_STATE *s3; | 2947 | SSL3_STATE *s3; |
| 2943 | 2948 | ||
| 2944 | if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err; | 2949 | if ((s3 = OPENSSL_malloc(sizeof *s3)) == NULL) goto err; |
| 2945 | memset(s3,0,sizeof *s3); | 2950 | memset(s3, 0, sizeof *s3); |
| 2946 | memset(s3->rrec.seq_num,0,sizeof(s3->rrec.seq_num)); | 2951 | memset(s3->rrec.seq_num, 0, sizeof(s3->rrec.seq_num)); |
| 2947 | memset(s3->wrec.seq_num,0,sizeof(s3->wrec.seq_num)); | 2952 | memset(s3->wrec.seq_num, 0, sizeof(s3->wrec.seq_num)); |
| 2948 | 2953 | ||
| 2949 | s->s3=s3; | 2954 | s->s3 = s3; |
| 2950 | 2955 | ||
| 2951 | #ifndef OPENSSL_NO_SRP | 2956 | #ifndef OPENSSL_NO_SRP |
| 2952 | SSL_SRP_CTX_init(s); | 2957 | SSL_SRP_CTX_init(s); |
| 2953 | #endif | 2958 | #endif |
| 2954 | s->method->ssl_clear(s); | 2959 | s->method->ssl_clear(s); |
| 2955 | return(1); | 2960 | return (1); |
| 2956 | err: | 2961 | err: |
| 2957 | return(0); | 2962 | return (0); |
| 2958 | } | 2963 | } |
| 2959 | 2964 | ||
| 2960 | void ssl3_free(SSL *s) | 2965 | void |
| 2961 | { | 2966 | ssl3_free(SSL *s) |
| 2962 | if(s == NULL) | 2967 | { |
| 2963 | return; | 2968 | if (s == NULL) |
| 2969 | return; | ||
| 2964 | 2970 | ||
| 2965 | #ifdef TLSEXT_TYPE_opaque_prf_input | 2971 | #ifdef TLSEXT_TYPE_opaque_prf_input |
| 2966 | if (s->s3->client_opaque_prf_input != NULL) | 2972 | if (s->s3->client_opaque_prf_input != NULL) |
| @@ -2986,22 +2992,24 @@ void ssl3_free(SSL *s) | |||
| 2986 | #endif | 2992 | #endif |
| 2987 | 2993 | ||
| 2988 | if (s->s3->tmp.ca_names != NULL) | 2994 | if (s->s3->tmp.ca_names != NULL) |
| 2989 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free); | 2995 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); |
| 2990 | if (s->s3->handshake_buffer) { | 2996 | if (s->s3->handshake_buffer) { |
| 2991 | BIO_free(s->s3->handshake_buffer); | 2997 | BIO_free(s->s3->handshake_buffer); |
| 2992 | } | 2998 | } |
| 2993 | if (s->s3->handshake_dgst) ssl3_free_digest_list(s); | 2999 | if (s->s3->handshake_dgst) |
| 3000 | ssl3_free_digest_list(s); | ||
| 2994 | #ifndef OPENSSL_NO_SRP | 3001 | #ifndef OPENSSL_NO_SRP |
| 2995 | SSL_SRP_CTX_free(s); | 3002 | SSL_SRP_CTX_free(s); |
| 2996 | #endif | 3003 | #endif |
| 2997 | OPENSSL_cleanse(s->s3,sizeof *s->s3); | 3004 | OPENSSL_cleanse(s->s3, sizeof *s->s3); |
| 2998 | OPENSSL_free(s->s3); | 3005 | OPENSSL_free(s->s3); |
| 2999 | s->s3=NULL; | 3006 | s->s3 = NULL; |
| 3000 | } | 3007 | } |
| 3001 | 3008 | ||
| 3002 | void ssl3_clear(SSL *s) | 3009 | void |
| 3003 | { | 3010 | ssl3_clear(SSL *s) |
| 3004 | unsigned char *rp,*wp; | 3011 | { |
| 3012 | unsigned char *rp, *wp; | ||
| 3005 | size_t rlen, wlen; | 3013 | size_t rlen, wlen; |
| 3006 | int init_extra; | 3014 | int init_extra; |
| 3007 | 3015 | ||
| @@ -3016,26 +3024,23 @@ void ssl3_clear(SSL *s) | |||
| 3016 | 3024 | ||
| 3017 | ssl3_cleanup_key_block(s); | 3025 | ssl3_cleanup_key_block(s); |
| 3018 | if (s->s3->tmp.ca_names != NULL) | 3026 | if (s->s3->tmp.ca_names != NULL) |
| 3019 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free); | 3027 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); |
| 3020 | 3028 | ||
| 3021 | if (s->s3->rrec.comp != NULL) | 3029 | if (s->s3->rrec.comp != NULL) { |
| 3022 | { | ||
| 3023 | OPENSSL_free(s->s3->rrec.comp); | 3030 | OPENSSL_free(s->s3->rrec.comp); |
| 3024 | s->s3->rrec.comp=NULL; | 3031 | s->s3->rrec.comp = NULL; |
| 3025 | } | 3032 | } |
| 3026 | #ifndef OPENSSL_NO_DH | 3033 | #ifndef OPENSSL_NO_DH |
| 3027 | if (s->s3->tmp.dh != NULL) | 3034 | if (s->s3->tmp.dh != NULL) { |
| 3028 | { | ||
| 3029 | DH_free(s->s3->tmp.dh); | 3035 | DH_free(s->s3->tmp.dh); |
| 3030 | s->s3->tmp.dh = NULL; | 3036 | s->s3->tmp.dh = NULL; |
| 3031 | } | 3037 | } |
| 3032 | #endif | 3038 | #endif |
| 3033 | #ifndef OPENSSL_NO_ECDH | 3039 | #ifndef OPENSSL_NO_ECDH |
| 3034 | if (s->s3->tmp.ecdh != NULL) | 3040 | if (s->s3->tmp.ecdh != NULL) { |
| 3035 | { | ||
| 3036 | EC_KEY_free(s->s3->tmp.ecdh); | 3041 | EC_KEY_free(s->s3->tmp.ecdh); |
| 3037 | s->s3->tmp.ecdh = NULL; | 3042 | s->s3->tmp.ecdh = NULL; |
| 3038 | } | 3043 | } |
| 3039 | #endif | 3044 | #endif |
| 3040 | #ifndef OPENSSL_NO_TLSEXT | 3045 | #ifndef OPENSSL_NO_TLSEXT |
| 3041 | #ifndef OPENSSL_NO_EC | 3046 | #ifndef OPENSSL_NO_EC |
| @@ -3046,7 +3051,7 @@ void ssl3_clear(SSL *s) | |||
| 3046 | rp = s->s3->rbuf.buf; | 3051 | rp = s->s3->rbuf.buf; |
| 3047 | wp = s->s3->wbuf.buf; | 3052 | wp = s->s3->wbuf.buf; |
| 3048 | rlen = s->s3->rbuf.len; | 3053 | rlen = s->s3->rbuf.len; |
| 3049 | wlen = s->s3->wbuf.len; | 3054 | wlen = s->s3->wbuf.len; |
| 3050 | init_extra = s->s3->init_extra; | 3055 | init_extra = s->s3->init_extra; |
| 3051 | if (s->s3->handshake_buffer) { | 3056 | if (s->s3->handshake_buffer) { |
| 3052 | BIO_free(s->s3->handshake_buffer); | 3057 | BIO_free(s->s3->handshake_buffer); |
| @@ -3054,104 +3059,100 @@ void ssl3_clear(SSL *s) | |||
| 3054 | } | 3059 | } |
| 3055 | if (s->s3->handshake_dgst) { | 3060 | if (s->s3->handshake_dgst) { |
| 3056 | ssl3_free_digest_list(s); | 3061 | ssl3_free_digest_list(s); |
| 3057 | } | 3062 | } |
| 3058 | memset(s->s3,0,sizeof *s->s3); | 3063 | memset(s->s3, 0, sizeof *s->s3); |
| 3059 | s->s3->rbuf.buf = rp; | 3064 | s->s3->rbuf.buf = rp; |
| 3060 | s->s3->wbuf.buf = wp; | 3065 | s->s3->wbuf.buf = wp; |
| 3061 | s->s3->rbuf.len = rlen; | 3066 | s->s3->rbuf.len = rlen; |
| 3062 | s->s3->wbuf.len = wlen; | 3067 | s->s3->wbuf.len = wlen; |
| 3063 | s->s3->init_extra = init_extra; | 3068 | s->s3->init_extra = init_extra; |
| 3064 | 3069 | ||
| 3065 | ssl_free_wbio_buffer(s); | 3070 | ssl_free_wbio_buffer(s); |
| 3066 | 3071 | ||
| 3067 | s->packet_length=0; | 3072 | s->packet_length = 0; |
| 3068 | s->s3->renegotiate=0; | 3073 | s->s3->renegotiate = 0; |
| 3069 | s->s3->total_renegotiations=0; | 3074 | s->s3->total_renegotiations = 0; |
| 3070 | s->s3->num_renegotiations=0; | 3075 | s->s3->num_renegotiations = 0; |
| 3071 | s->s3->in_read_app_data=0; | 3076 | s->s3->in_read_app_data = 0; |
| 3072 | s->version=SSL3_VERSION; | 3077 | s->version = SSL3_VERSION; |
| 3073 | 3078 | ||
| 3074 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) | 3079 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) |
| 3075 | if (s->next_proto_negotiated) | 3080 | if (s->next_proto_negotiated) { |
| 3076 | { | ||
| 3077 | OPENSSL_free(s->next_proto_negotiated); | 3081 | OPENSSL_free(s->next_proto_negotiated); |
| 3078 | s->next_proto_negotiated = NULL; | 3082 | s->next_proto_negotiated = NULL; |
| 3079 | s->next_proto_negotiated_len = 0; | 3083 | s->next_proto_negotiated_len = 0; |
| 3080 | } | ||
| 3081 | #endif | ||
| 3082 | } | 3084 | } |
| 3085 | #endif | ||
| 3086 | } | ||
| 3083 | 3087 | ||
| 3084 | #ifndef OPENSSL_NO_SRP | 3088 | #ifndef OPENSSL_NO_SRP |
| 3085 | static char * srp_password_from_info_cb(SSL *s, void *arg) | 3089 | static char * |
| 3086 | { | 3090 | srp_password_from_info_cb(SSL *s, void *arg) |
| 3087 | return BUF_strdup(s->srp_ctx.info) ; | 3091 | { |
| 3088 | } | 3092 | return BUF_strdup(s->srp_ctx.info); |
| 3093 | } | ||
| 3089 | #endif | 3094 | #endif |
| 3090 | 3095 | ||
| 3091 | long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | 3096 | long |
| 3092 | { | 3097 | ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) |
| 3093 | int ret=0; | 3098 | { |
| 3099 | int ret = 0; | ||
| 3094 | 3100 | ||
| 3095 | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) | 3101 | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) |
| 3096 | if ( | 3102 | if ( |
| 3097 | #ifndef OPENSSL_NO_RSA | 3103 | #ifndef OPENSSL_NO_RSA |
| 3098 | cmd == SSL_CTRL_SET_TMP_RSA || | 3104 | cmd == SSL_CTRL_SET_TMP_RSA || |
| 3099 | cmd == SSL_CTRL_SET_TMP_RSA_CB || | 3105 | cmd == SSL_CTRL_SET_TMP_RSA_CB || |
| 3100 | #endif | 3106 | #endif |
| 3101 | #ifndef OPENSSL_NO_DSA | 3107 | #ifndef OPENSSL_NO_DSA |
| 3102 | cmd == SSL_CTRL_SET_TMP_DH || | 3108 | cmd == SSL_CTRL_SET_TMP_DH || |
| 3103 | cmd == SSL_CTRL_SET_TMP_DH_CB || | 3109 | cmd == SSL_CTRL_SET_TMP_DH_CB || |
| 3104 | #endif | 3110 | #endif |
| 3105 | 0) | 3111 | 0) { |
| 3106 | { | 3112 | if (!ssl_cert_inst(&s->cert)) { |
| 3107 | if (!ssl_cert_inst(&s->cert)) | ||
| 3108 | { | ||
| 3109 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE); | 3113 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE); |
| 3110 | return(0); | 3114 | return (0); |
| 3111 | } | ||
| 3112 | } | 3115 | } |
| 3116 | } | ||
| 3113 | #endif | 3117 | #endif |
| 3114 | 3118 | ||
| 3115 | switch (cmd) | 3119 | switch (cmd) { |
| 3116 | { | ||
| 3117 | case SSL_CTRL_GET_SESSION_REUSED: | 3120 | case SSL_CTRL_GET_SESSION_REUSED: |
| 3118 | ret=s->hit; | 3121 | ret = s->hit; |
| 3119 | break; | 3122 | break; |
| 3120 | case SSL_CTRL_GET_CLIENT_CERT_REQUEST: | 3123 | case SSL_CTRL_GET_CLIENT_CERT_REQUEST: |
| 3121 | break; | 3124 | break; |
| 3122 | case SSL_CTRL_GET_NUM_RENEGOTIATIONS: | 3125 | case SSL_CTRL_GET_NUM_RENEGOTIATIONS: |
| 3123 | ret=s->s3->num_renegotiations; | 3126 | ret = s->s3->num_renegotiations; |
| 3124 | break; | 3127 | break; |
| 3125 | case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS: | 3128 | case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS: |
| 3126 | ret=s->s3->num_renegotiations; | 3129 | ret = s->s3->num_renegotiations; |
| 3127 | s->s3->num_renegotiations=0; | 3130 | s->s3->num_renegotiations = 0; |
| 3128 | break; | 3131 | break; |
| 3129 | case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS: | 3132 | case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS: |
| 3130 | ret=s->s3->total_renegotiations; | 3133 | ret = s->s3->total_renegotiations; |
| 3131 | break; | 3134 | break; |
| 3132 | case SSL_CTRL_GET_FLAGS: | 3135 | case SSL_CTRL_GET_FLAGS: |
| 3133 | ret=(int)(s->s3->flags); | 3136 | ret = (int)(s->s3->flags); |
| 3134 | break; | 3137 | break; |
| 3135 | #ifndef OPENSSL_NO_RSA | 3138 | #ifndef OPENSSL_NO_RSA |
| 3136 | case SSL_CTRL_NEED_TMP_RSA: | 3139 | case SSL_CTRL_NEED_TMP_RSA: |
| 3137 | if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) && | 3140 | if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) && |
| 3138 | ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || | 3141 | ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || |
| 3139 | (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8)))) | 3142 | (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512 / 8)))) |
| 3140 | ret = 1; | 3143 | ret = 1; |
| 3141 | break; | 3144 | break; |
| 3142 | case SSL_CTRL_SET_TMP_RSA: | 3145 | case SSL_CTRL_SET_TMP_RSA: |
| 3143 | { | 3146 | { |
| 3144 | RSA *rsa = (RSA *)parg; | 3147 | RSA *rsa = (RSA *)parg; |
| 3145 | if (rsa == NULL) | 3148 | if (rsa == NULL) { |
| 3146 | { | ||
| 3147 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); | 3149 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); |
| 3148 | return(ret); | 3150 | return (ret); |
| 3149 | } | 3151 | } |
| 3150 | if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) | 3152 | if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) { |
| 3151 | { | ||
| 3152 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB); | 3153 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB); |
| 3153 | return(ret); | 3154 | return (ret); |
| 3154 | } | 3155 | } |
| 3155 | if (s->cert->rsa_tmp != NULL) | 3156 | if (s->cert->rsa_tmp != NULL) |
| 3156 | RSA_free(s->cert->rsa_tmp); | 3157 | RSA_free(s->cert->rsa_tmp); |
| 3157 | s->cert->rsa_tmp = rsa; | 3158 | s->cert->rsa_tmp = rsa; |
| @@ -3160,8 +3161,8 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
| 3160 | break; | 3161 | break; |
| 3161 | case SSL_CTRL_SET_TMP_RSA_CB: | 3162 | case SSL_CTRL_SET_TMP_RSA_CB: |
| 3162 | { | 3163 | { |
| 3163 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3164 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
| 3164 | return(ret); | 3165 | return (ret); |
| 3165 | } | 3166 | } |
| 3166 | break; | 3167 | break; |
| 3167 | #endif | 3168 | #endif |
| @@ -3169,25 +3170,21 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
| 3169 | case SSL_CTRL_SET_TMP_DH: | 3170 | case SSL_CTRL_SET_TMP_DH: |
| 3170 | { | 3171 | { |
| 3171 | DH *dh = (DH *)parg; | 3172 | DH *dh = (DH *)parg; |
| 3172 | if (dh == NULL) | 3173 | if (dh == NULL) { |
| 3173 | { | ||
| 3174 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); | 3174 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); |
| 3175 | return(ret); | 3175 | return (ret); |
| 3176 | } | 3176 | } |
| 3177 | if ((dh = DHparams_dup(dh)) == NULL) | 3177 | if ((dh = DHparams_dup(dh)) == NULL) { |
| 3178 | { | ||
| 3179 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); | 3178 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); |
| 3180 | return(ret); | 3179 | return (ret); |
| 3181 | } | 3180 | } |
| 3182 | if (!(s->options & SSL_OP_SINGLE_DH_USE)) | 3181 | if (!(s->options & SSL_OP_SINGLE_DH_USE)) { |
| 3183 | { | 3182 | if (!DH_generate_key(dh)) { |
| 3184 | if (!DH_generate_key(dh)) | ||
| 3185 | { | ||
| 3186 | DH_free(dh); | 3183 | DH_free(dh); |
| 3187 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); | 3184 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); |
| 3188 | return(ret); | 3185 | return (ret); |
| 3189 | } | ||
| 3190 | } | 3186 | } |
| 3187 | } | ||
| 3191 | if (s->cert->dh_tmp != NULL) | 3188 | if (s->cert->dh_tmp != NULL) |
| 3192 | DH_free(s->cert->dh_tmp); | 3189 | DH_free(s->cert->dh_tmp); |
| 3193 | s->cert->dh_tmp = dh; | 3190 | s->cert->dh_tmp = dh; |
| @@ -3196,79 +3193,70 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
| 3196 | break; | 3193 | break; |
| 3197 | case SSL_CTRL_SET_TMP_DH_CB: | 3194 | case SSL_CTRL_SET_TMP_DH_CB: |
| 3198 | { | 3195 | { |
| 3199 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3196 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
| 3200 | return(ret); | 3197 | return (ret); |
| 3201 | } | 3198 | } |
| 3202 | break; | 3199 | break; |
| 3203 | #endif | 3200 | #endif |
| 3204 | #ifndef OPENSSL_NO_ECDH | 3201 | #ifndef OPENSSL_NO_ECDH |
| 3205 | case SSL_CTRL_SET_TMP_ECDH: | 3202 | case SSL_CTRL_SET_TMP_ECDH: |
| 3206 | { | 3203 | { |
| 3207 | EC_KEY *ecdh = NULL; | 3204 | EC_KEY *ecdh = NULL; |
| 3208 | 3205 | ||
| 3209 | if (parg == NULL) | 3206 | if (parg == NULL) { |
| 3210 | { | 3207 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); |
| 3211 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); | 3208 | return (ret); |
| 3212 | return(ret); | ||
| 3213 | } | 3209 | } |
| 3214 | if (!EC_KEY_up_ref((EC_KEY *)parg)) | 3210 | if (!EC_KEY_up_ref((EC_KEY *)parg)) { |
| 3215 | { | 3211 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_ECDH_LIB); |
| 3216 | SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB); | 3212 | return (ret); |
| 3217 | return(ret); | ||
| 3218 | } | 3213 | } |
| 3219 | ecdh = (EC_KEY *)parg; | 3214 | ecdh = (EC_KEY *)parg; |
| 3220 | if (!(s->options & SSL_OP_SINGLE_ECDH_USE)) | 3215 | if (!(s->options & SSL_OP_SINGLE_ECDH_USE)) { |
| 3221 | { | 3216 | if (!EC_KEY_generate_key(ecdh)) { |
| 3222 | if (!EC_KEY_generate_key(ecdh)) | 3217 | EC_KEY_free(ecdh); |
| 3223 | { | 3218 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_ECDH_LIB); |
| 3224 | EC_KEY_free(ecdh); | 3219 | return (ret); |
| 3225 | SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB); | ||
| 3226 | return(ret); | ||
| 3227 | } | 3220 | } |
| 3228 | } | 3221 | } |
| 3229 | if (s->cert->ecdh_tmp != NULL) | 3222 | if (s->cert->ecdh_tmp != NULL) |
| 3230 | EC_KEY_free(s->cert->ecdh_tmp); | 3223 | EC_KEY_free(s->cert->ecdh_tmp); |
| 3231 | s->cert->ecdh_tmp = ecdh; | 3224 | s->cert->ecdh_tmp = ecdh; |
| 3232 | ret = 1; | 3225 | ret = 1; |
| 3233 | } | 3226 | } |
| 3234 | break; | 3227 | break; |
| 3235 | case SSL_CTRL_SET_TMP_ECDH_CB: | 3228 | case SSL_CTRL_SET_TMP_ECDH_CB: |
| 3236 | { | 3229 | { |
| 3237 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3230 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
| 3238 | return(ret); | 3231 | return (ret); |
| 3239 | } | 3232 | } |
| 3240 | break; | 3233 | break; |
| 3241 | #endif /* !OPENSSL_NO_ECDH */ | 3234 | #endif /* !OPENSSL_NO_ECDH */ |
| 3242 | #ifndef OPENSSL_NO_TLSEXT | 3235 | #ifndef OPENSSL_NO_TLSEXT |
| 3243 | case SSL_CTRL_SET_TLSEXT_HOSTNAME: | 3236 | case SSL_CTRL_SET_TLSEXT_HOSTNAME: |
| 3244 | if (larg == TLSEXT_NAMETYPE_host_name) | 3237 | if (larg == TLSEXT_NAMETYPE_host_name) { |
| 3245 | { | 3238 | if (s->tlsext_hostname != NULL) |
| 3246 | if (s->tlsext_hostname != NULL) | ||
| 3247 | OPENSSL_free(s->tlsext_hostname); | 3239 | OPENSSL_free(s->tlsext_hostname); |
| 3248 | s->tlsext_hostname = NULL; | 3240 | s->tlsext_hostname = NULL; |
| 3249 | 3241 | ||
| 3250 | ret = 1; | 3242 | ret = 1; |
| 3251 | if (parg == NULL) | 3243 | if (parg == NULL) |
| 3252 | break; | 3244 | break; |
| 3253 | if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name) | 3245 | if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name) { |
| 3254 | { | ||
| 3255 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME); | 3246 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME); |
| 3256 | return 0; | 3247 | return 0; |
| 3257 | } | 3248 | } |
| 3258 | if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL) | 3249 | if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL) { |
| 3259 | { | ||
| 3260 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR); | 3250 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR); |
| 3261 | return 0; | 3251 | return 0; |
| 3262 | } | ||
| 3263 | } | 3252 | } |
| 3264 | else | 3253 | } else { |
| 3265 | { | ||
| 3266 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE); | 3254 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE); |
| 3267 | return 0; | 3255 | return 0; |
| 3268 | } | 3256 | } |
| 3269 | break; | 3257 | break; |
| 3270 | case SSL_CTRL_SET_TLSEXT_DEBUG_ARG: | 3258 | case SSL_CTRL_SET_TLSEXT_DEBUG_ARG: |
| 3271 | s->tlsext_debug_arg=parg; | 3259 | s->tlsext_debug_arg = parg; |
| 3272 | ret = 1; | 3260 | ret = 1; |
| 3273 | break; | 3261 | break; |
| 3274 | 3262 | ||
| @@ -3276,28 +3264,26 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
| 3276 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT: | 3264 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT: |
| 3277 | if (larg > 12288) /* actual internal limit is 2^16 for the complete hello message | 3265 | if (larg > 12288) /* actual internal limit is 2^16 for the complete hello message |
| 3278 | * (including the cert chain and everything) */ | 3266 | * (including the cert chain and everything) */ |
| 3279 | { | 3267 | { |
| 3280 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG); | 3268 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG); |
| 3281 | break; | 3269 | break; |
| 3282 | } | 3270 | } |
| 3283 | if (s->tlsext_opaque_prf_input != NULL) | 3271 | if (s->tlsext_opaque_prf_input != NULL) |
| 3284 | OPENSSL_free(s->tlsext_opaque_prf_input); | 3272 | OPENSSL_free(s->tlsext_opaque_prf_input); |
| 3285 | if ((size_t)larg == 0) | 3273 | if ((size_t)larg == 0) |
| 3286 | s->tlsext_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */ | 3274 | s->tlsext_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */ |
| 3287 | else | 3275 | else |
| 3288 | s->tlsext_opaque_prf_input = BUF_memdup(parg, (size_t)larg); | 3276 | s->tlsext_opaque_prf_input = BUF_memdup(parg, (size_t)larg); |
| 3289 | if (s->tlsext_opaque_prf_input != NULL) | 3277 | if (s->tlsext_opaque_prf_input != NULL) { |
| 3290 | { | ||
| 3291 | s->tlsext_opaque_prf_input_len = (size_t)larg; | 3278 | s->tlsext_opaque_prf_input_len = (size_t)larg; |
| 3292 | ret = 1; | 3279 | ret = 1; |
| 3293 | } | 3280 | } else |
| 3294 | else | ||
| 3295 | s->tlsext_opaque_prf_input_len = 0; | 3281 | s->tlsext_opaque_prf_input_len = 0; |
| 3296 | break; | 3282 | break; |
| 3297 | #endif | 3283 | #endif |
| 3298 | 3284 | ||
| 3299 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE: | 3285 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE: |
| 3300 | s->tlsext_status_type=larg; | 3286 | s->tlsext_status_type = larg; |
| 3301 | ret = 1; | 3287 | ret = 1; |
| 3302 | break; | 3288 | break; |
| 3303 | 3289 | ||
| @@ -3324,7 +3310,7 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
| 3324 | case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP: | 3310 | case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP: |
| 3325 | *(unsigned char **)parg = s->tlsext_ocsp_resp; | 3311 | *(unsigned char **)parg = s->tlsext_ocsp_resp; |
| 3326 | return s->tlsext_ocsp_resplen; | 3312 | return s->tlsext_ocsp_resplen; |
| 3327 | 3313 | ||
| 3328 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP: | 3314 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP: |
| 3329 | if (s->tlsext_ocsp_resp) | 3315 | if (s->tlsext_ocsp_resp) |
| 3330 | OPENSSL_free(s->tlsext_ocsp_resp); | 3316 | OPENSSL_free(s->tlsext_ocsp_resp); |
| @@ -3357,222 +3343,204 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
| 3357 | #endif /* !OPENSSL_NO_TLSEXT */ | 3343 | #endif /* !OPENSSL_NO_TLSEXT */ |
| 3358 | default: | 3344 | default: |
| 3359 | break; | 3345 | break; |
| 3360 | } | ||
| 3361 | return(ret); | ||
| 3362 | } | 3346 | } |
| 3347 | return (ret); | ||
| 3348 | } | ||
| 3363 | 3349 | ||
| 3364 | long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) | 3350 | long |
| 3365 | { | 3351 | ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) |
| 3366 | int ret=0; | 3352 | { |
| 3353 | int ret = 0; | ||
| 3367 | 3354 | ||
| 3368 | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) | 3355 | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) |
| 3369 | if ( | 3356 | if ( |
| 3370 | #ifndef OPENSSL_NO_RSA | 3357 | #ifndef OPENSSL_NO_RSA |
| 3371 | cmd == SSL_CTRL_SET_TMP_RSA_CB || | 3358 | cmd == SSL_CTRL_SET_TMP_RSA_CB || |
| 3372 | #endif | 3359 | #endif |
| 3373 | #ifndef OPENSSL_NO_DSA | 3360 | #ifndef OPENSSL_NO_DSA |
| 3374 | cmd == SSL_CTRL_SET_TMP_DH_CB || | 3361 | cmd == SSL_CTRL_SET_TMP_DH_CB || |
| 3375 | #endif | 3362 | #endif |
| 3376 | 0) | 3363 | 0) { |
| 3377 | { | 3364 | if (!ssl_cert_inst(&s->cert)) { |
| 3378 | if (!ssl_cert_inst(&s->cert)) | ||
| 3379 | { | ||
| 3380 | SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE); | 3365 | SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE); |
| 3381 | return(0); | 3366 | return (0); |
| 3382 | } | ||
| 3383 | } | 3367 | } |
| 3368 | } | ||
| 3384 | #endif | 3369 | #endif |
| 3385 | 3370 | ||
| 3386 | switch (cmd) | 3371 | switch (cmd) { |
| 3387 | { | ||
| 3388 | #ifndef OPENSSL_NO_RSA | 3372 | #ifndef OPENSSL_NO_RSA |
| 3389 | case SSL_CTRL_SET_TMP_RSA_CB: | 3373 | case SSL_CTRL_SET_TMP_RSA_CB: |
| 3390 | { | 3374 | { |
| 3391 | s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; | 3375 | s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; |
| 3392 | } | 3376 | } |
| 3393 | break; | 3377 | break; |
| 3394 | #endif | 3378 | #endif |
| 3395 | #ifndef OPENSSL_NO_DH | 3379 | #ifndef OPENSSL_NO_DH |
| 3396 | case SSL_CTRL_SET_TMP_DH_CB: | 3380 | case SSL_CTRL_SET_TMP_DH_CB: |
| 3397 | { | 3381 | { |
| 3398 | s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | 3382 | s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; |
| 3399 | } | 3383 | } |
| 3400 | break; | 3384 | break; |
| 3401 | #endif | 3385 | #endif |
| 3402 | #ifndef OPENSSL_NO_ECDH | 3386 | #ifndef OPENSSL_NO_ECDH |
| 3403 | case SSL_CTRL_SET_TMP_ECDH_CB: | 3387 | case SSL_CTRL_SET_TMP_ECDH_CB: |
| 3404 | { | 3388 | { |
| 3405 | s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; | 3389 | s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; |
| 3406 | } | 3390 | } |
| 3407 | break; | 3391 | break; |
| 3408 | #endif | 3392 | #endif |
| 3409 | #ifndef OPENSSL_NO_TLSEXT | 3393 | #ifndef OPENSSL_NO_TLSEXT |
| 3410 | case SSL_CTRL_SET_TLSEXT_DEBUG_CB: | 3394 | case SSL_CTRL_SET_TLSEXT_DEBUG_CB: |
| 3411 | s->tlsext_debug_cb=(void (*)(SSL *,int ,int, | 3395 | s->tlsext_debug_cb = (void (*)(SSL *, int , int, |
| 3412 | unsigned char *, int, void *))fp; | 3396 | unsigned char *, int, void *))fp; |
| 3413 | break; | 3397 | break; |
| 3414 | #endif | 3398 | #endif |
| 3415 | default: | 3399 | default: |
| 3416 | break; | 3400 | break; |
| 3417 | } | ||
| 3418 | return(ret); | ||
| 3419 | } | 3401 | } |
| 3402 | return (ret); | ||
| 3403 | } | ||
| 3420 | 3404 | ||
| 3421 | long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | 3405 | long |
| 3422 | { | 3406 | ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) |
| 3407 | { | ||
| 3423 | CERT *cert; | 3408 | CERT *cert; |
| 3424 | 3409 | ||
| 3425 | cert=ctx->cert; | 3410 | cert = ctx->cert; |
| 3426 | 3411 | ||
| 3427 | switch (cmd) | 3412 | switch (cmd) { |
| 3428 | { | ||
| 3429 | #ifndef OPENSSL_NO_RSA | 3413 | #ifndef OPENSSL_NO_RSA |
| 3430 | case SSL_CTRL_NEED_TMP_RSA: | 3414 | case SSL_CTRL_NEED_TMP_RSA: |
| 3431 | if ( (cert->rsa_tmp == NULL) && | 3415 | if ((cert->rsa_tmp == NULL) && |
| 3432 | ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || | 3416 | ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || |
| 3433 | (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8))) | 3417 | (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512 / 8))) |
| 3434 | ) | 3418 | ) |
| 3435 | return(1); | 3419 | return (1); |
| 3436 | else | 3420 | else |
| 3437 | return(0); | 3421 | return (0); |
| 3438 | /* break; */ | 3422 | /* break; */ |
| 3439 | case SSL_CTRL_SET_TMP_RSA: | 3423 | case SSL_CTRL_SET_TMP_RSA: |
| 3440 | { | 3424 | { |
| 3441 | RSA *rsa; | 3425 | RSA *rsa; |
| 3442 | int i; | 3426 | int i; |
| 3443 | 3427 | ||
| 3444 | rsa=(RSA *)parg; | 3428 | rsa = (RSA *)parg; |
| 3445 | i=1; | 3429 | i = 1; |
| 3446 | if (rsa == NULL) | 3430 | if (rsa == NULL) |
| 3447 | i=0; | 3431 | i = 0; |
| 3448 | else | 3432 | else { |
| 3449 | { | 3433 | if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) |
| 3450 | if ((rsa=RSAPrivateKey_dup(rsa)) == NULL) | 3434 | i = 0; |
| 3451 | i=0; | ||
| 3452 | } | 3435 | } |
| 3453 | if (!i) | 3436 | if (!i) { |
| 3454 | { | 3437 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_RSA_LIB); |
| 3455 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_RSA_LIB); | 3438 | return (0); |
| 3456 | return(0); | 3439 | } else { |
| 3457 | } | 3440 | if (cert->rsa_tmp != NULL) |
| 3458 | else | 3441 | RSA_free(cert->rsa_tmp); |
| 3459 | { | 3442 | cert->rsa_tmp = rsa; |
| 3460 | if (cert->rsa_tmp != NULL) | 3443 | return (1); |
| 3461 | RSA_free(cert->rsa_tmp); | ||
| 3462 | cert->rsa_tmp=rsa; | ||
| 3463 | return(1); | ||
| 3464 | } | 3444 | } |
| 3465 | } | 3445 | } |
| 3466 | /* break; */ | 3446 | /* break; */ |
| 3467 | case SSL_CTRL_SET_TMP_RSA_CB: | 3447 | case SSL_CTRL_SET_TMP_RSA_CB: |
| 3468 | { | 3448 | { |
| 3469 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3449 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
| 3470 | return(0); | 3450 | return (0); |
| 3471 | } | 3451 | } |
| 3472 | break; | 3452 | break; |
| 3473 | #endif | 3453 | #endif |
| 3474 | #ifndef OPENSSL_NO_DH | 3454 | #ifndef OPENSSL_NO_DH |
| 3475 | case SSL_CTRL_SET_TMP_DH: | 3455 | case SSL_CTRL_SET_TMP_DH: |
| 3476 | { | 3456 | { |
| 3477 | DH *new=NULL,*dh; | 3457 | DH *new = NULL, *dh; |
| 3478 | 3458 | ||
| 3479 | dh=(DH *)parg; | 3459 | dh = (DH *)parg; |
| 3480 | if ((new=DHparams_dup(dh)) == NULL) | 3460 | if ((new = DHparams_dup(dh)) == NULL) { |
| 3481 | { | 3461 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_DH_LIB); |
| 3482 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB); | ||
| 3483 | return 0; | ||
| 3484 | } | ||
| 3485 | if (!(ctx->options & SSL_OP_SINGLE_DH_USE)) | ||
| 3486 | { | ||
| 3487 | if (!DH_generate_key(new)) | ||
| 3488 | { | ||
| 3489 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB); | ||
| 3490 | DH_free(new); | ||
| 3491 | return 0; | 3462 | return 0; |
| 3463 | } | ||
| 3464 | if (!(ctx->options & SSL_OP_SINGLE_DH_USE)) { | ||
| 3465 | if (!DH_generate_key(new)) { | ||
| 3466 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_DH_LIB); | ||
| 3467 | DH_free(new); | ||
| 3468 | return 0; | ||
| 3492 | } | 3469 | } |
| 3493 | } | 3470 | } |
| 3494 | if (cert->dh_tmp != NULL) | 3471 | if (cert->dh_tmp != NULL) |
| 3495 | DH_free(cert->dh_tmp); | 3472 | DH_free(cert->dh_tmp); |
| 3496 | cert->dh_tmp=new; | 3473 | cert->dh_tmp = new; |
| 3497 | return 1; | 3474 | return 1; |
| 3498 | } | 3475 | } |
| 3499 | /*break; */ | 3476 | /*break; */ |
| 3500 | case SSL_CTRL_SET_TMP_DH_CB: | 3477 | case SSL_CTRL_SET_TMP_DH_CB: |
| 3501 | { | 3478 | { |
| 3502 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3479 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
| 3503 | return(0); | 3480 | return (0); |
| 3504 | } | 3481 | } |
| 3505 | break; | 3482 | break; |
| 3506 | #endif | 3483 | #endif |
| 3507 | #ifndef OPENSSL_NO_ECDH | 3484 | #ifndef OPENSSL_NO_ECDH |
| 3508 | case SSL_CTRL_SET_TMP_ECDH: | 3485 | case SSL_CTRL_SET_TMP_ECDH: |
| 3509 | { | 3486 | { |
| 3510 | EC_KEY *ecdh = NULL; | 3487 | EC_KEY *ecdh = NULL; |
| 3511 | 3488 | ||
| 3512 | if (parg == NULL) | 3489 | if (parg == NULL) { |
| 3513 | { | 3490 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_ECDH_LIB); |
| 3514 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB); | 3491 | return 0; |
| 3515 | return 0; | ||
| 3516 | } | ||
| 3517 | ecdh = EC_KEY_dup((EC_KEY *)parg); | ||
| 3518 | if (ecdh == NULL) | ||
| 3519 | { | ||
| 3520 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_EC_LIB); | ||
| 3521 | return 0; | ||
| 3522 | } | 3492 | } |
| 3523 | if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE)) | 3493 | ecdh = EC_KEY_dup((EC_KEY *)parg); |
| 3524 | { | 3494 | if (ecdh == NULL) { |
| 3525 | if (!EC_KEY_generate_key(ecdh)) | 3495 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_EC_LIB); |
| 3526 | { | ||
| 3527 | EC_KEY_free(ecdh); | ||
| 3528 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB); | ||
| 3529 | return 0; | 3496 | return 0; |
| 3497 | } | ||
| 3498 | if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE)) { | ||
| 3499 | if (!EC_KEY_generate_key(ecdh)) { | ||
| 3500 | EC_KEY_free(ecdh); | ||
| 3501 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_ECDH_LIB); | ||
| 3502 | return 0; | ||
| 3530 | } | 3503 | } |
| 3531 | } | 3504 | } |
| 3532 | 3505 | ||
| 3533 | if (cert->ecdh_tmp != NULL) | 3506 | if (cert->ecdh_tmp != NULL) { |
| 3534 | { | 3507 | EC_KEY_free(cert->ecdh_tmp); |
| 3535 | EC_KEY_free(cert->ecdh_tmp); | ||
| 3536 | } | 3508 | } |
| 3537 | cert->ecdh_tmp = ecdh; | 3509 | cert->ecdh_tmp = ecdh; |
| 3538 | return 1; | 3510 | return 1; |
| 3539 | } | 3511 | } |
| 3540 | /* break; */ | 3512 | /* break; */ |
| 3541 | case SSL_CTRL_SET_TMP_ECDH_CB: | 3513 | case SSL_CTRL_SET_TMP_ECDH_CB: |
| 3542 | { | 3514 | { |
| 3543 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3515 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
| 3544 | return(0); | 3516 | return (0); |
| 3545 | } | 3517 | } |
| 3546 | break; | 3518 | break; |
| 3547 | #endif /* !OPENSSL_NO_ECDH */ | 3519 | #endif /* !OPENSSL_NO_ECDH */ |
| 3548 | #ifndef OPENSSL_NO_TLSEXT | 3520 | #ifndef OPENSSL_NO_TLSEXT |
| 3549 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG: | 3521 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG: |
| 3550 | ctx->tlsext_servername_arg=parg; | 3522 | ctx->tlsext_servername_arg = parg; |
| 3551 | break; | 3523 | break; |
| 3552 | case SSL_CTRL_SET_TLSEXT_TICKET_KEYS: | 3524 | case SSL_CTRL_SET_TLSEXT_TICKET_KEYS: |
| 3553 | case SSL_CTRL_GET_TLSEXT_TICKET_KEYS: | 3525 | case SSL_CTRL_GET_TLSEXT_TICKET_KEYS: |
| 3554 | { | 3526 | { |
| 3555 | unsigned char *keys = parg; | 3527 | unsigned char *keys = parg; |
| 3556 | if (!keys) | 3528 | if (!keys) |
| 3557 | return 48; | 3529 | return 48; |
| 3558 | if (larg != 48) | 3530 | if (larg != 48) { |
| 3559 | { | 3531 | SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH); |
| 3560 | SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH); | 3532 | return 0; |
| 3561 | return 0; | ||
| 3562 | } | ||
| 3563 | if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) | ||
| 3564 | { | ||
| 3565 | memcpy(ctx->tlsext_tick_key_name, keys, 16); | ||
| 3566 | memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16); | ||
| 3567 | memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16); | ||
| 3568 | } | 3533 | } |
| 3569 | else | 3534 | if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) { |
| 3570 | { | 3535 | memcpy(ctx->tlsext_tick_key_name, keys, 16); |
| 3571 | memcpy(keys, ctx->tlsext_tick_key_name, 16); | 3536 | memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16); |
| 3572 | memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16); | 3537 | memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16); |
| 3573 | memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16); | 3538 | } else { |
| 3539 | memcpy(keys, ctx->tlsext_tick_key_name, 16); | ||
| 3540 | memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16); | ||
| 3541 | memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16); | ||
| 3574 | } | 3542 | } |
| 3575 | return 1; | 3543 | return 1; |
| 3576 | } | 3544 | } |
| 3577 | 3545 | ||
| 3578 | #ifdef TLSEXT_TYPE_opaque_prf_input | 3546 | #ifdef TLSEXT_TYPE_opaque_prf_input |
| @@ -3582,7 +3550,7 @@ long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
| 3582 | #endif | 3550 | #endif |
| 3583 | 3551 | ||
| 3584 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: | 3552 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: |
| 3585 | ctx->tlsext_status_arg=parg; | 3553 | ctx->tlsext_status_arg = parg; |
| 3586 | return 1; | 3554 | return 1; |
| 3587 | break; | 3555 | break; |
| 3588 | 3556 | ||
| @@ -3594,182 +3562,182 @@ long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
| 3594 | ctx->srp_ctx.login = NULL; | 3562 | ctx->srp_ctx.login = NULL; |
| 3595 | if (parg == NULL) | 3563 | if (parg == NULL) |
| 3596 | break; | 3564 | break; |
| 3597 | if (strlen((const char *)parg) > 255 || strlen((const char *)parg) < 1) | 3565 | if (strlen((const char *)parg) > 255 || strlen((const char *)parg) < 1) { |
| 3598 | { | ||
| 3599 | SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_SRP_USERNAME); | 3566 | SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_SRP_USERNAME); |
| 3600 | return 0; | 3567 | return 0; |
| 3601 | } | 3568 | } |
| 3602 | if ((ctx->srp_ctx.login = BUF_strdup((char *)parg)) == NULL) | 3569 | if ((ctx->srp_ctx.login = BUF_strdup((char *)parg)) == NULL) { |
| 3603 | { | ||
| 3604 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR); | 3570 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR); |
| 3605 | return 0; | 3571 | return 0; |
| 3606 | } | 3572 | } |
| 3607 | break; | 3573 | break; |
| 3608 | case SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD: | 3574 | case SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD: |
| 3609 | ctx->srp_ctx.SRP_give_srp_client_pwd_callback=srp_password_from_info_cb; | 3575 | ctx->srp_ctx.SRP_give_srp_client_pwd_callback = srp_password_from_info_cb; |
| 3610 | ctx->srp_ctx.info=parg; | 3576 | ctx->srp_ctx.info = parg; |
| 3611 | break; | 3577 | break; |
| 3612 | case SSL_CTRL_SET_SRP_ARG: | 3578 | case SSL_CTRL_SET_SRP_ARG: |
| 3613 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; | 3579 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; |
| 3614 | ctx->srp_ctx.SRP_cb_arg=parg; | 3580 | ctx->srp_ctx.SRP_cb_arg = parg; |
| 3615 | break; | 3581 | break; |
| 3616 | 3582 | ||
| 3617 | case SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH: | 3583 | case SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH: |
| 3618 | ctx->srp_ctx.strength=larg; | 3584 | ctx->srp_ctx.strength = larg; |
| 3619 | break; | 3585 | break; |
| 3620 | #endif | 3586 | #endif |
| 3621 | #endif /* !OPENSSL_NO_TLSEXT */ | 3587 | #endif /* !OPENSSL_NO_TLSEXT */ |
| 3622 | 3588 | ||
| 3623 | /* A Thawte special :-) */ | 3589 | /* A Thawte special :-) */ |
| 3624 | case SSL_CTRL_EXTRA_CHAIN_CERT: | 3590 | case SSL_CTRL_EXTRA_CHAIN_CERT: |
| 3625 | if (ctx->extra_certs == NULL) | 3591 | if (ctx->extra_certs == NULL) { |
| 3626 | { | 3592 | if ((ctx->extra_certs = sk_X509_new_null()) == NULL) |
| 3627 | if ((ctx->extra_certs=sk_X509_new_null()) == NULL) | 3593 | return (0); |
| 3628 | return(0); | 3594 | } |
| 3629 | } | ||
| 3630 | sk_X509_push(ctx->extra_certs,(X509 *)parg); | 3595 | sk_X509_push(ctx->extra_certs,(X509 *)parg); |
| 3631 | break; | 3596 | break; |
| 3632 | 3597 | ||
| 3633 | case SSL_CTRL_GET_EXTRA_CHAIN_CERTS: | 3598 | case SSL_CTRL_GET_EXTRA_CHAIN_CERTS: |
| 3634 | *(STACK_OF(X509) **)parg = ctx->extra_certs; | 3599 | *(STACK_OF(X509) **)parg = ctx->extra_certs; |
| 3635 | break; | 3600 | break; |
| 3636 | 3601 | ||
| 3637 | case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS: | 3602 | case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS: |
| 3638 | if (ctx->extra_certs) | 3603 | if (ctx->extra_certs) { |
| 3639 | { | ||
| 3640 | sk_X509_pop_free(ctx->extra_certs, X509_free); | 3604 | sk_X509_pop_free(ctx->extra_certs, X509_free); |
| 3641 | ctx->extra_certs = NULL; | 3605 | ctx->extra_certs = NULL; |
| 3642 | } | 3606 | } |
| 3643 | break; | 3607 | break; |
| 3644 | 3608 | ||
| 3645 | default: | 3609 | default: |
| 3646 | return(0); | 3610 | return (0); |
| 3647 | } | ||
| 3648 | return(1); | ||
| 3649 | } | 3611 | } |
| 3612 | return (1); | ||
| 3613 | } | ||
| 3650 | 3614 | ||
| 3651 | long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) | 3615 | long |
| 3652 | { | 3616 | ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) |
| 3617 | { | ||
| 3653 | CERT *cert; | 3618 | CERT *cert; |
| 3654 | 3619 | ||
| 3655 | cert=ctx->cert; | 3620 | cert = ctx->cert; |
| 3656 | 3621 | ||
| 3657 | switch (cmd) | 3622 | switch (cmd) { |
| 3658 | { | ||
| 3659 | #ifndef OPENSSL_NO_RSA | 3623 | #ifndef OPENSSL_NO_RSA |
| 3660 | case SSL_CTRL_SET_TMP_RSA_CB: | 3624 | case SSL_CTRL_SET_TMP_RSA_CB: |
| 3661 | { | 3625 | { |
| 3662 | cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; | 3626 | cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; |
| 3663 | } | 3627 | } |
| 3664 | break; | 3628 | break; |
| 3665 | #endif | 3629 | #endif |
| 3666 | #ifndef OPENSSL_NO_DH | 3630 | #ifndef OPENSSL_NO_DH |
| 3667 | case SSL_CTRL_SET_TMP_DH_CB: | 3631 | case SSL_CTRL_SET_TMP_DH_CB: |
| 3668 | { | 3632 | { |
| 3669 | cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | 3633 | cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; |
| 3670 | } | 3634 | } |
| 3671 | break; | 3635 | break; |
| 3672 | #endif | 3636 | #endif |
| 3673 | #ifndef OPENSSL_NO_ECDH | 3637 | #ifndef OPENSSL_NO_ECDH |
| 3674 | case SSL_CTRL_SET_TMP_ECDH_CB: | 3638 | case SSL_CTRL_SET_TMP_ECDH_CB: |
| 3675 | { | 3639 | { |
| 3676 | cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; | 3640 | cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; |
| 3677 | } | 3641 | } |
| 3678 | break; | 3642 | break; |
| 3679 | #endif | 3643 | #endif |
| 3680 | #ifndef OPENSSL_NO_TLSEXT | 3644 | #ifndef OPENSSL_NO_TLSEXT |
| 3681 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: | 3645 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: |
| 3682 | ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp; | 3646 | ctx->tlsext_servername_callback = (int (*)(SSL *, int *, void *))fp; |
| 3683 | break; | 3647 | break; |
| 3684 | 3648 | ||
| 3685 | #ifdef TLSEXT_TYPE_opaque_prf_input | 3649 | #ifdef TLSEXT_TYPE_opaque_prf_input |
| 3686 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB: | 3650 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB: |
| 3687 | ctx->tlsext_opaque_prf_input_callback = (int (*)(SSL *,void *, size_t, void *))fp; | 3651 | ctx->tlsext_opaque_prf_input_callback = (int (*)(SSL *, void *, size_t, void *))fp; |
| 3688 | break; | 3652 | break; |
| 3689 | #endif | 3653 | #endif |
| 3690 | 3654 | ||
| 3691 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: | 3655 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: |
| 3692 | ctx->tlsext_status_cb=(int (*)(SSL *,void *))fp; | 3656 | ctx->tlsext_status_cb = (int (*)(SSL *, void *))fp; |
| 3693 | break; | 3657 | break; |
| 3694 | 3658 | ||
| 3695 | case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB: | 3659 | case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB: |
| 3696 | ctx->tlsext_ticket_key_cb=(int (*)(SSL *,unsigned char *, | 3660 | ctx->tlsext_ticket_key_cb = (int (*)(SSL *, unsigned char *, |
| 3697 | unsigned char *, | 3661 | unsigned char *, EVP_CIPHER_CTX *, HMAC_CTX *, int))fp; |
| 3698 | EVP_CIPHER_CTX *, | ||
| 3699 | HMAC_CTX *, int))fp; | ||
| 3700 | break; | 3662 | break; |
| 3701 | 3663 | ||
| 3702 | #ifndef OPENSSL_NO_SRP | 3664 | #ifndef OPENSSL_NO_SRP |
| 3703 | case SSL_CTRL_SET_SRP_VERIFY_PARAM_CB: | 3665 | case SSL_CTRL_SET_SRP_VERIFY_PARAM_CB: |
| 3704 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; | 3666 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; |
| 3705 | ctx->srp_ctx.SRP_verify_param_callback=(int (*)(SSL *,void *))fp; | 3667 | ctx->srp_ctx.SRP_verify_param_callback = |
| 3668 | (int (*)(SSL *, void *))fp; | ||
| 3706 | break; | 3669 | break; |
| 3707 | case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB: | 3670 | case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB: |
| 3708 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; | 3671 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; |
| 3709 | ctx->srp_ctx.TLS_ext_srp_username_callback=(int (*)(SSL *,int *,void *))fp; | 3672 | ctx->srp_ctx.TLS_ext_srp_username_callback = |
| 3673 | (int (*)(SSL *, int *, void *))fp; | ||
| 3710 | break; | 3674 | break; |
| 3711 | case SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB: | 3675 | case SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB: |
| 3712 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; | 3676 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; |
| 3713 | ctx->srp_ctx.SRP_give_srp_client_pwd_callback=(char *(*)(SSL *,void *))fp; | 3677 | ctx->srp_ctx.SRP_give_srp_client_pwd_callback = |
| 3678 | (char *(*)(SSL *, void *))fp; | ||
| 3714 | break; | 3679 | break; |
| 3715 | #endif | 3680 | #endif |
| 3716 | #endif | 3681 | #endif |
| 3717 | default: | 3682 | default: |
| 3718 | return(0); | 3683 | return (0); |
| 3719 | } | ||
| 3720 | return(1); | ||
| 3721 | } | 3684 | } |
| 3685 | return (1); | ||
| 3686 | } | ||
| 3722 | 3687 | ||
| 3723 | /* This function needs to check if the ciphers required are actually | 3688 | /* This function needs to check if the ciphers required are actually |
| 3724 | * available */ | 3689 | * available */ |
| 3725 | const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p) | 3690 | const SSL_CIPHER |
| 3726 | { | 3691 | *ssl3_get_cipher_by_char(const unsigned char *p) |
| 3692 | { | ||
| 3727 | SSL_CIPHER c; | 3693 | SSL_CIPHER c; |
| 3728 | const SSL_CIPHER *cp; | 3694 | const SSL_CIPHER *cp; |
| 3729 | unsigned long id; | 3695 | unsigned long id; |
| 3730 | 3696 | ||
| 3731 | id=0x03000000L|((unsigned long)p[0]<<8L)|(unsigned long)p[1]; | 3697 | id = 0x03000000L | ((unsigned long)p[0] << 8L) | (unsigned long)p[1]; |
| 3732 | c.id=id; | 3698 | c.id = id; |
| 3733 | cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS); | 3699 | cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS); |
| 3734 | #ifdef DEBUG_PRINT_UNKNOWN_CIPHERSUITES | 3700 | #ifdef DEBUG_PRINT_UNKNOWN_CIPHERSUITES |
| 3735 | if (cp == NULL) fprintf(stderr, "Unknown cipher ID %x\n", (p[0] << 8) | p[1]); | 3701 | if (cp == NULL) |
| 3702 | fprintf(stderr, "Unknown cipher ID %x\n", (p[0] << 8) | p[1]); | ||
| 3736 | #endif | 3703 | #endif |
| 3737 | if (cp == NULL || cp->valid == 0) | 3704 | if (cp == NULL || cp->valid == 0) |
| 3738 | return NULL; | 3705 | return NULL; |
| 3739 | else | 3706 | else |
| 3740 | return cp; | 3707 | return cp; |
| 3741 | } | 3708 | } |
| 3742 | 3709 | ||
| 3743 | int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p) | 3710 | int |
| 3744 | { | 3711 | ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p) |
| 3712 | { | ||
| 3745 | long l; | 3713 | long l; |
| 3746 | 3714 | ||
| 3747 | if (p != NULL) | 3715 | if (p != NULL) { |
| 3748 | { | 3716 | l = c->id; |
| 3749 | l=c->id; | 3717 | if ((l & 0xff000000) != 0x03000000) |
| 3750 | if ((l & 0xff000000) != 0x03000000) return(0); | 3718 | return (0); |
| 3751 | p[0]=((unsigned char)(l>> 8L))&0xFF; | 3719 | p[0] = ((unsigned char)(l >> 8L)) & 0xFF; |
| 3752 | p[1]=((unsigned char)(l ))&0xFF; | 3720 | p[1] = ((unsigned char)(l)) & 0xFF; |
| 3753 | } | ||
| 3754 | return(2); | ||
| 3755 | } | 3721 | } |
| 3722 | return (2); | ||
| 3723 | } | ||
| 3756 | 3724 | ||
| 3757 | SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, | 3725 | SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, |
| 3758 | STACK_OF(SSL_CIPHER) *srvr) | 3726 | STACK_OF(SSL_CIPHER) *srvr) |
| 3759 | { | 3727 | { |
| 3760 | SSL_CIPHER *c,*ret=NULL; | 3728 | SSL_CIPHER *c, *ret = NULL; |
| 3761 | STACK_OF(SSL_CIPHER) *prio, *allow; | 3729 | STACK_OF(SSL_CIPHER) *prio, *allow; |
| 3762 | int i,ii,ok; | 3730 | int i, ii, ok; |
| 3763 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_EC) | 3731 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_EC) |
| 3764 | unsigned int j; | 3732 | unsigned int j; |
| 3765 | int ec_ok, ec_nid; | 3733 | int ec_ok, ec_nid; |
| 3766 | unsigned char ec_search1 = 0, ec_search2 = 0; | 3734 | unsigned char ec_search1 = 0, ec_search2 = 0; |
| 3767 | #endif | 3735 | #endif |
| 3768 | CERT *cert; | 3736 | CERT *cert; |
| 3769 | unsigned long alg_k,alg_a,mask_k,mask_a,emask_k,emask_a; | 3737 | unsigned long alg_k, alg_a, mask_k, mask_a, emask_k, emask_a; |
| 3770 | 3738 | ||
| 3771 | /* Let's see which ciphers we can support */ | 3739 | /* Let's see which ciphers we can support */ |
| 3772 | cert=s->cert; | 3740 | cert = s->cert; |
| 3773 | 3741 | ||
| 3774 | #if 0 | 3742 | #if 0 |
| 3775 | /* Do not set the compare functions, because this may lead to a | 3743 | /* Do not set the compare functions, because this may lead to a |
| @@ -3783,62 +3751,55 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, | |||
| 3783 | 3751 | ||
| 3784 | #ifdef CIPHER_DEBUG | 3752 | #ifdef CIPHER_DEBUG |
| 3785 | printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr); | 3753 | printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr); |
| 3786 | for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i) | 3754 | for (i = 0; i < sk_SSL_CIPHER_num(srvr); ++i) { |
| 3787 | { | 3755 | c = sk_SSL_CIPHER_value(srvr, i); |
| 3788 | c=sk_SSL_CIPHER_value(srvr,i); | 3756 | printf("%p:%s\n",(void *)c, c->name); |
| 3789 | printf("%p:%s\n",(void *)c,c->name); | 3757 | } |
| 3790 | } | ||
| 3791 | printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)clnt); | 3758 | printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)clnt); |
| 3792 | for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i) | 3759 | for (i = 0; i < sk_SSL_CIPHER_num(clnt); ++i) { |
| 3793 | { | 3760 | c = sk_SSL_CIPHER_value(clnt, i); |
| 3794 | c=sk_SSL_CIPHER_value(clnt,i); | 3761 | printf("%p:%s\n",(void *)c, c->name); |
| 3795 | printf("%p:%s\n",(void *)c,c->name); | 3762 | } |
| 3796 | } | ||
| 3797 | #endif | 3763 | #endif |
| 3798 | 3764 | ||
| 3799 | if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) | 3765 | if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) { |
| 3800 | { | ||
| 3801 | prio = srvr; | 3766 | prio = srvr; |
| 3802 | allow = clnt; | 3767 | allow = clnt; |
| 3803 | } | 3768 | } else { |
| 3804 | else | ||
| 3805 | { | ||
| 3806 | prio = clnt; | 3769 | prio = clnt; |
| 3807 | allow = srvr; | 3770 | allow = srvr; |
| 3808 | } | 3771 | } |
| 3809 | 3772 | ||
| 3810 | for (i=0; i<sk_SSL_CIPHER_num(prio); i++) | 3773 | for (i = 0; i < sk_SSL_CIPHER_num(prio); i++) { |
| 3811 | { | 3774 | c = sk_SSL_CIPHER_value(prio, i); |
| 3812 | c=sk_SSL_CIPHER_value(prio,i); | ||
| 3813 | 3775 | ||
| 3814 | /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */ | 3776 | /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */ |
| 3815 | if ((c->algorithm_ssl & SSL_TLSV1_2) && | 3777 | if ((c->algorithm_ssl & SSL_TLSV1_2) && |
| 3816 | (TLS1_get_version(s) < TLS1_2_VERSION)) | 3778 | (TLS1_get_version(s) < TLS1_2_VERSION)) |
| 3817 | continue; | 3779 | continue; |
| 3818 | 3780 | ||
| 3819 | ssl_set_cert_masks(cert,c); | 3781 | ssl_set_cert_masks(cert, c); |
| 3820 | mask_k = cert->mask_k; | 3782 | mask_k = cert->mask_k; |
| 3821 | mask_a = cert->mask_a; | 3783 | mask_a = cert->mask_a; |
| 3822 | emask_k = cert->export_mask_k; | 3784 | emask_k = cert->export_mask_k; |
| 3823 | emask_a = cert->export_mask_a; | 3785 | emask_a = cert->export_mask_a; |
| 3824 | #ifndef OPENSSL_NO_SRP | 3786 | #ifndef OPENSSL_NO_SRP |
| 3825 | mask_k=cert->mask_k | s->srp_ctx.srp_Mask; | 3787 | mask_k = cert->mask_k | s->srp_ctx.srp_Mask; |
| 3826 | emask_k=cert->export_mask_k | s->srp_ctx.srp_Mask; | 3788 | emask_k = cert->export_mask_k | s->srp_ctx.srp_Mask; |
| 3827 | #endif | 3789 | #endif |
| 3828 | 3790 | ||
| 3829 | #ifdef KSSL_DEBUG | 3791 | #ifdef KSSL_DEBUG |
| 3830 | /* printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);*/ | 3792 | /* printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);*/ |
| 3831 | #endif /* KSSL_DEBUG */ | 3793 | #endif /* KSSL_DEBUG */ |
| 3832 | 3794 | ||
| 3833 | alg_k=c->algorithm_mkey; | 3795 | alg_k = c->algorithm_mkey; |
| 3834 | alg_a=c->algorithm_auth; | 3796 | alg_a = c->algorithm_auth; |
| 3835 | 3797 | ||
| 3836 | #ifndef OPENSSL_NO_KRB5 | 3798 | #ifndef OPENSSL_NO_KRB5 |
| 3837 | if (alg_k & SSL_kKRB5) | 3799 | if (alg_k & SSL_kKRB5) { |
| 3838 | { | 3800 | if (!kssl_keytab_is_available(s->kssl_ctx) ) |
| 3839 | if ( !kssl_keytab_is_available(s->kssl_ctx) ) | 3801 | continue; |
| 3840 | continue; | 3802 | } |
| 3841 | } | ||
| 3842 | #endif /* OPENSSL_NO_KRB5 */ | 3803 | #endif /* OPENSSL_NO_KRB5 */ |
| 3843 | #ifndef OPENSSL_NO_PSK | 3804 | #ifndef OPENSSL_NO_PSK |
| 3844 | /* with PSK there must be server callback set */ | 3805 | /* with PSK there must be server callback set */ |
| @@ -3846,449 +3807,405 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, | |||
| 3846 | continue; | 3807 | continue; |
| 3847 | #endif /* OPENSSL_NO_PSK */ | 3808 | #endif /* OPENSSL_NO_PSK */ |
| 3848 | 3809 | ||
| 3849 | if (SSL_C_IS_EXPORT(c)) | 3810 | if (SSL_C_IS_EXPORT(c)) { |
| 3850 | { | ||
| 3851 | ok = (alg_k & emask_k) && (alg_a & emask_a); | 3811 | ok = (alg_k & emask_k) && (alg_a & emask_a); |
| 3852 | #ifdef CIPHER_DEBUG | 3812 | #ifdef CIPHER_DEBUG |
| 3853 | printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n",ok,alg_k,alg_a,emask_k,emask_a, | 3813 | printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n", ok, alg_k, alg_a, emask_k, emask_a, |
| 3854 | (void *)c,c->name); | 3814 | (void *)c, c->name); |
| 3855 | #endif | 3815 | #endif |
| 3856 | } | 3816 | } else { |
| 3857 | else | ||
| 3858 | { | ||
| 3859 | ok = (alg_k & mask_k) && (alg_a & mask_a); | 3817 | ok = (alg_k & mask_k) && (alg_a & mask_a); |
| 3860 | #ifdef CIPHER_DEBUG | 3818 | #ifdef CIPHER_DEBUG |
| 3861 | printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",ok,alg_k,alg_a,mask_k,mask_a,(void *)c, | 3819 | printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n", ok, alg_k, alg_a, mask_k, mask_a,(void *)c, |
| 3862 | c->name); | 3820 | c->name); |
| 3863 | #endif | 3821 | #endif |
| 3864 | } | 3822 | } |
| 3865 | 3823 | ||
| 3866 | #ifndef OPENSSL_NO_TLSEXT | 3824 | #ifndef OPENSSL_NO_TLSEXT |
| 3867 | #ifndef OPENSSL_NO_EC | 3825 | #ifndef OPENSSL_NO_EC |
| 3868 | if ( | 3826 | if ( |
| 3869 | /* if we are considering an ECC cipher suite that uses our certificate */ | 3827 | /* if we are considering an ECC cipher suite that uses our certificate */ |
| 3870 | (alg_a & SSL_aECDSA || alg_a & SSL_aECDH) | 3828 | (alg_a & SSL_aECDSA || alg_a & SSL_aECDH) |
| 3871 | /* and we have an ECC certificate */ | 3829 | /* and we have an ECC certificate */ |
| 3872 | && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL) | 3830 | && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL) |
| 3873 | /* and the client specified a Supported Point Formats extension */ | 3831 | /* and the client specified a Supported Point Formats extension */ |
| 3874 | && ((s->session->tlsext_ecpointformatlist_length > 0) && (s->session->tlsext_ecpointformatlist != NULL)) | 3832 | && ((s->session->tlsext_ecpointformatlist_length > 0) && (s->session->tlsext_ecpointformatlist != NULL)) |
| 3875 | /* and our certificate's point is compressed */ | 3833 | /* and our certificate's point is compressed */ |
| 3876 | && ( | 3834 | && ( |
| 3877 | (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info != NULL) | 3835 | (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info != NULL) |
| 3878 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key != NULL) | 3836 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key != NULL) |
| 3879 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key != NULL) | 3837 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key != NULL) |
| 3880 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data != NULL) | 3838 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data != NULL) |
| 3881 | && ( | 3839 | && ( |
| 3882 | (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED) | 3840 | (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED) |
| 3883 | || (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED + 1) | 3841 | || (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED + 1) |
| 3884 | ) | ||
| 3885 | ) | ||
| 3886 | ) | 3842 | ) |
| 3887 | { | 3843 | ) |
| 3844 | ) { | ||
| 3888 | ec_ok = 0; | 3845 | ec_ok = 0; |
| 3889 | /* if our certificate's curve is over a field type that the client does not support | 3846 | /* if our certificate's curve is over a field type that the client does not support |
| 3890 | * then do not allow this cipher suite to be negotiated */ | 3847 | * then do not allow this cipher suite to be negotiated */ |
| 3891 | if ( | 3848 | if ( |
| 3892 | (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL) | 3849 | (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL) |
| 3893 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL) | 3850 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL) |
| 3894 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL) | 3851 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL) |
| 3895 | && (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field) | 3852 | && (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field) |
| 3896 | ) | 3853 | ) { |
| 3897 | { | 3854 | for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++) { |
| 3898 | for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++) | 3855 | if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime) { |
| 3899 | { | ||
| 3900 | if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime) | ||
| 3901 | { | ||
| 3902 | ec_ok = 1; | 3856 | ec_ok = 1; |
| 3903 | break; | 3857 | break; |
| 3904 | } | ||
| 3905 | } | 3858 | } |
| 3906 | } | 3859 | } |
| 3907 | else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field) | 3860 | } else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field) { |
| 3908 | { | 3861 | for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++) { |
| 3909 | for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++) | 3862 | if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2) { |
| 3910 | { | ||
| 3911 | if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2) | ||
| 3912 | { | ||
| 3913 | ec_ok = 1; | 3863 | ec_ok = 1; |
| 3914 | break; | 3864 | break; |
| 3915 | } | ||
| 3916 | } | 3865 | } |
| 3917 | } | 3866 | } |
| 3918 | ok = ok && ec_ok; | ||
| 3919 | } | 3867 | } |
| 3868 | ok = ok && ec_ok; | ||
| 3869 | } | ||
| 3920 | if ( | 3870 | if ( |
| 3921 | /* if we are considering an ECC cipher suite that uses our certificate */ | 3871 | /* if we are considering an ECC cipher suite that uses our certificate */ |
| 3922 | (alg_a & SSL_aECDSA || alg_a & SSL_aECDH) | 3872 | (alg_a & SSL_aECDSA || alg_a & SSL_aECDH) |
| 3923 | /* and we have an ECC certificate */ | 3873 | /* and we have an ECC certificate */ |
| 3924 | && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL) | 3874 | && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL) |
| 3925 | /* and the client specified an EllipticCurves extension */ | 3875 | /* and the client specified an EllipticCurves extension */ |
| 3926 | && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL)) | 3876 | && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL)) |
| 3927 | ) | 3877 | ) { |
| 3928 | { | ||
| 3929 | ec_ok = 0; | 3878 | ec_ok = 0; |
| 3930 | if ( | 3879 | if ( |
| 3931 | (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL) | 3880 | (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL) |
| 3932 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL) | 3881 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL) |
| 3933 | ) | 3882 | ) { |
| 3934 | { | ||
| 3935 | ec_nid = EC_GROUP_get_curve_name(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group); | 3883 | ec_nid = EC_GROUP_get_curve_name(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group); |
| 3936 | if ((ec_nid == 0) | 3884 | if ((ec_nid == 0) |
| 3937 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL) | 3885 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL) |
| 3938 | ) | 3886 | ) { |
| 3939 | { | 3887 | if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field) { |
| 3940 | if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field) | ||
| 3941 | { | ||
| 3942 | ec_search1 = 0xFF; | 3888 | ec_search1 = 0xFF; |
| 3943 | ec_search2 = 0x01; | 3889 | ec_search2 = 0x01; |
| 3944 | } | 3890 | } else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field) { |
| 3945 | else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field) | ||
| 3946 | { | ||
| 3947 | ec_search1 = 0xFF; | 3891 | ec_search1 = 0xFF; |
| 3948 | ec_search2 = 0x02; | 3892 | ec_search2 = 0x02; |
| 3949 | } | ||
| 3950 | } | 3893 | } |
| 3951 | else | 3894 | } else { |
| 3952 | { | ||
| 3953 | ec_search1 = 0x00; | 3895 | ec_search1 = 0x00; |
| 3954 | ec_search2 = tls1_ec_nid2curve_id(ec_nid); | 3896 | ec_search2 = tls1_ec_nid2curve_id(ec_nid); |
| 3955 | } | 3897 | } |
| 3956 | if ((ec_search1 != 0) || (ec_search2 != 0)) | 3898 | if ((ec_search1 != 0) || (ec_search2 != 0)) { |
| 3957 | { | 3899 | for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++) { |
| 3958 | for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++) | 3900 | if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j + 1] == ec_search2)) { |
| 3959 | { | ||
| 3960 | if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j+1] == ec_search2)) | ||
| 3961 | { | ||
| 3962 | ec_ok = 1; | 3901 | ec_ok = 1; |
| 3963 | break; | 3902 | break; |
| 3964 | } | ||
| 3965 | } | 3903 | } |
| 3966 | } | 3904 | } |
| 3967 | } | 3905 | } |
| 3968 | ok = ok && ec_ok; | ||
| 3969 | } | 3906 | } |
| 3907 | ok = ok && ec_ok; | ||
| 3908 | } | ||
| 3970 | if ( | 3909 | if ( |
| 3971 | /* if we are considering an ECC cipher suite that uses an ephemeral EC key */ | 3910 | /* if we are considering an ECC cipher suite that uses an ephemeral EC key */ |
| 3972 | (alg_k & SSL_kEECDH) | 3911 | (alg_k & SSL_kEECDH) |
| 3973 | /* and we have an ephemeral EC key */ | 3912 | /* and we have an ephemeral EC key */ |
| 3974 | && (s->cert->ecdh_tmp != NULL) | 3913 | && (s->cert->ecdh_tmp != NULL) |
| 3975 | /* and the client specified an EllipticCurves extension */ | 3914 | /* and the client specified an EllipticCurves extension */ |
| 3976 | && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL)) | 3915 | && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL)) |
| 3977 | ) | 3916 | ) { |
| 3978 | { | ||
| 3979 | ec_ok = 0; | 3917 | ec_ok = 0; |
| 3980 | if (s->cert->ecdh_tmp->group != NULL) | 3918 | if (s->cert->ecdh_tmp->group != NULL) { |
| 3981 | { | ||
| 3982 | ec_nid = EC_GROUP_get_curve_name(s->cert->ecdh_tmp->group); | 3919 | ec_nid = EC_GROUP_get_curve_name(s->cert->ecdh_tmp->group); |
| 3983 | if ((ec_nid == 0) | 3920 | if ((ec_nid == 0) |
| 3984 | && (s->cert->ecdh_tmp->group->meth != NULL) | 3921 | && (s->cert->ecdh_tmp->group->meth != NULL) |
| 3985 | ) | 3922 | ) { |
| 3986 | { | 3923 | if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_prime_field) { |
| 3987 | if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_prime_field) | ||
| 3988 | { | ||
| 3989 | ec_search1 = 0xFF; | 3924 | ec_search1 = 0xFF; |
| 3990 | ec_search2 = 0x01; | 3925 | ec_search2 = 0x01; |
| 3991 | } | 3926 | } else if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_characteristic_two_field) { |
| 3992 | else if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_characteristic_two_field) | ||
| 3993 | { | ||
| 3994 | ec_search1 = 0xFF; | 3927 | ec_search1 = 0xFF; |
| 3995 | ec_search2 = 0x02; | 3928 | ec_search2 = 0x02; |
| 3996 | } | ||
| 3997 | } | 3929 | } |
| 3998 | else | 3930 | } else { |
| 3999 | { | ||
| 4000 | ec_search1 = 0x00; | 3931 | ec_search1 = 0x00; |
| 4001 | ec_search2 = tls1_ec_nid2curve_id(ec_nid); | 3932 | ec_search2 = tls1_ec_nid2curve_id(ec_nid); |
| 4002 | } | 3933 | } |
| 4003 | if ((ec_search1 != 0) || (ec_search2 != 0)) | 3934 | if ((ec_search1 != 0) || (ec_search2 != 0)) { |
| 4004 | { | 3935 | for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++) { |
| 4005 | for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++) | 3936 | if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j + 1] == ec_search2)) { |
| 4006 | { | ||
| 4007 | if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j+1] == ec_search2)) | ||
| 4008 | { | ||
| 4009 | ec_ok = 1; | 3937 | ec_ok = 1; |
| 4010 | break; | 3938 | break; |
| 4011 | } | ||
| 4012 | } | 3939 | } |
| 4013 | } | 3940 | } |
| 4014 | } | 3941 | } |
| 4015 | ok = ok && ec_ok; | ||
| 4016 | } | 3942 | } |
| 3943 | ok = ok && ec_ok; | ||
| 3944 | } | ||
| 4017 | #endif /* OPENSSL_NO_EC */ | 3945 | #endif /* OPENSSL_NO_EC */ |
| 4018 | #endif /* OPENSSL_NO_TLSEXT */ | 3946 | #endif /* OPENSSL_NO_TLSEXT */ |
| 4019 | 3947 | ||
| 4020 | if (!ok) continue; | 3948 | if (!ok) |
| 4021 | ii=sk_SSL_CIPHER_find(allow,c); | 3949 | continue; |
| 4022 | if (ii >= 0) | 3950 | ii = sk_SSL_CIPHER_find(allow, c); |
| 4023 | { | 3951 | if (ii >= 0) { |
| 4024 | #if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT) | 3952 | #if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT) |
| 4025 | if ((alg_k & SSL_kEECDH) && (alg_a & SSL_aECDSA) && s->s3->is_probably_safari) | 3953 | if ((alg_k & SSL_kEECDH) && (alg_a & SSL_aECDSA) && s->s3->is_probably_safari) { |
| 4026 | { | 3954 | if (!ret) |
| 4027 | if (!ret) ret=sk_SSL_CIPHER_value(allow,ii); | 3955 | ret = sk_SSL_CIPHER_value(allow, ii); |
| 4028 | continue; | 3956 | continue; |
| 4029 | } | 3957 | } |
| 4030 | #endif | 3958 | #endif |
| 4031 | ret=sk_SSL_CIPHER_value(allow,ii); | 3959 | ret = sk_SSL_CIPHER_value(allow, ii); |
| 4032 | break; | 3960 | break; |
| 4033 | } | ||
| 4034 | } | 3961 | } |
| 4035 | return(ret); | ||
| 4036 | } | 3962 | } |
| 3963 | return (ret); | ||
| 3964 | } | ||
| 4037 | 3965 | ||
| 4038 | int ssl3_get_req_cert_type(SSL *s, unsigned char *p) | 3966 | int |
| 4039 | { | 3967 | ssl3_get_req_cert_type(SSL *s, unsigned char *p) |
| 4040 | int ret=0; | 3968 | { |
| 3969 | int ret = 0; | ||
| 4041 | unsigned long alg_k; | 3970 | unsigned long alg_k; |
| 4042 | 3971 | ||
| 4043 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 3972 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; |
| 4044 | 3973 | ||
| 4045 | #ifndef OPENSSL_NO_GOST | 3974 | #ifndef OPENSSL_NO_GOST |
| 4046 | if (s->version >= TLS1_VERSION) | 3975 | if (s->version >= TLS1_VERSION) { |
| 4047 | { | 3976 | if (alg_k & SSL_kGOST) { |
| 4048 | if (alg_k & SSL_kGOST) | 3977 | p[ret++] = TLS_CT_GOST94_SIGN; |
| 4049 | { | 3978 | p[ret++] = TLS_CT_GOST01_SIGN; |
| 4050 | p[ret++]=TLS_CT_GOST94_SIGN; | 3979 | return (ret); |
| 4051 | p[ret++]=TLS_CT_GOST01_SIGN; | ||
| 4052 | return(ret); | ||
| 4053 | } | ||
| 4054 | } | 3980 | } |
| 3981 | } | ||
| 4055 | #endif | 3982 | #endif |
| 4056 | 3983 | ||
| 4057 | #ifndef OPENSSL_NO_DH | 3984 | #ifndef OPENSSL_NO_DH |
| 4058 | if (alg_k & (SSL_kDHr|SSL_kEDH)) | 3985 | if (alg_k & (SSL_kDHr|SSL_kEDH)) { |
| 4059 | { | ||
| 4060 | # ifndef OPENSSL_NO_RSA | 3986 | # ifndef OPENSSL_NO_RSA |
| 4061 | p[ret++]=SSL3_CT_RSA_FIXED_DH; | 3987 | p[ret++] = SSL3_CT_RSA_FIXED_DH; |
| 4062 | # endif | 3988 | # endif |
| 4063 | # ifndef OPENSSL_NO_DSA | 3989 | # ifndef OPENSSL_NO_DSA |
| 4064 | p[ret++]=SSL3_CT_DSS_FIXED_DH; | 3990 | p[ret++] = SSL3_CT_DSS_FIXED_DH; |
| 4065 | # endif | 3991 | # endif |
| 4066 | } | 3992 | } |
| 4067 | if ((s->version == SSL3_VERSION) && | 3993 | if ((s->version == SSL3_VERSION) && |
| 4068 | (alg_k & (SSL_kEDH|SSL_kDHd|SSL_kDHr))) | 3994 | (alg_k & (SSL_kEDH|SSL_kDHd|SSL_kDHr))) { |
| 4069 | { | ||
| 4070 | # ifndef OPENSSL_NO_RSA | 3995 | # ifndef OPENSSL_NO_RSA |
| 4071 | p[ret++]=SSL3_CT_RSA_EPHEMERAL_DH; | 3996 | p[ret++] = SSL3_CT_RSA_EPHEMERAL_DH; |
| 4072 | # endif | 3997 | # endif |
| 4073 | # ifndef OPENSSL_NO_DSA | 3998 | # ifndef OPENSSL_NO_DSA |
| 4074 | p[ret++]=SSL3_CT_DSS_EPHEMERAL_DH; | 3999 | p[ret++] = SSL3_CT_DSS_EPHEMERAL_DH; |
| 4075 | # endif | 4000 | # endif |
| 4076 | } | 4001 | } |
| 4077 | #endif /* !OPENSSL_NO_DH */ | 4002 | #endif /* !OPENSSL_NO_DH */ |
| 4078 | #ifndef OPENSSL_NO_RSA | 4003 | #ifndef OPENSSL_NO_RSA |
| 4079 | p[ret++]=SSL3_CT_RSA_SIGN; | 4004 | p[ret++] = SSL3_CT_RSA_SIGN; |
| 4080 | #endif | 4005 | #endif |
| 4081 | #ifndef OPENSSL_NO_DSA | 4006 | #ifndef OPENSSL_NO_DSA |
| 4082 | p[ret++]=SSL3_CT_DSS_SIGN; | 4007 | p[ret++] = SSL3_CT_DSS_SIGN; |
| 4083 | #endif | 4008 | #endif |
| 4084 | #ifndef OPENSSL_NO_ECDH | 4009 | #ifndef OPENSSL_NO_ECDH |
| 4085 | if ((alg_k & (SSL_kECDHr|SSL_kECDHe)) && (s->version >= TLS1_VERSION)) | 4010 | if ((alg_k & (SSL_kECDHr|SSL_kECDHe)) && (s->version >= TLS1_VERSION)) { |
| 4086 | { | 4011 | p[ret++] = TLS_CT_RSA_FIXED_ECDH; |
| 4087 | p[ret++]=TLS_CT_RSA_FIXED_ECDH; | 4012 | p[ret++] = TLS_CT_ECDSA_FIXED_ECDH; |
| 4088 | p[ret++]=TLS_CT_ECDSA_FIXED_ECDH; | 4013 | } |
| 4089 | } | ||
| 4090 | #endif | 4014 | #endif |
| 4091 | 4015 | ||
| 4092 | #ifndef OPENSSL_NO_ECDSA | 4016 | #ifndef OPENSSL_NO_ECDSA |
| 4093 | /* ECDSA certs can be used with RSA cipher suites as well | 4017 | /* ECDSA certs can be used with RSA cipher suites as well |
| 4094 | * so we don't need to check for SSL_kECDH or SSL_kEECDH | 4018 | * so we don't need to check for SSL_kECDH or SSL_kEECDH |
| 4095 | */ | 4019 | */ |
| 4096 | if (s->version >= TLS1_VERSION) | 4020 | if (s->version >= TLS1_VERSION) { |
| 4097 | { | 4021 | p[ret++] = TLS_CT_ECDSA_SIGN; |
| 4098 | p[ret++]=TLS_CT_ECDSA_SIGN; | ||
| 4099 | } | ||
| 4100 | #endif | ||
| 4101 | return(ret); | ||
| 4102 | } | 4022 | } |
| 4023 | #endif | ||
| 4024 | return (ret); | ||
| 4025 | } | ||
| 4103 | 4026 | ||
| 4104 | int ssl3_shutdown(SSL *s) | 4027 | int |
| 4105 | { | 4028 | ssl3_shutdown(SSL *s) |
| 4029 | { | ||
| 4106 | int ret; | 4030 | int ret; |
| 4107 | 4031 | ||
| 4108 | /* Don't do anything much if we have not done the handshake or | 4032 | /* Don't do anything much if we have not done the handshake or |
| 4109 | * we don't want to send messages :-) */ | 4033 | * we don't want to send messages :-) */ |
| 4110 | if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE)) | 4034 | if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE)) { |
| 4111 | { | 4035 | s->shutdown = (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); |
| 4112 | s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); | 4036 | return (1); |
| 4113 | return(1); | 4037 | } |
| 4114 | } | ||
| 4115 | 4038 | ||
| 4116 | if (!(s->shutdown & SSL_SENT_SHUTDOWN)) | 4039 | if (!(s->shutdown & SSL_SENT_SHUTDOWN)) { |
| 4117 | { | ||
| 4118 | s->shutdown|=SSL_SENT_SHUTDOWN; | 4040 | s->shutdown|=SSL_SENT_SHUTDOWN; |
| 4119 | #if 1 | 4041 | #if 1 |
| 4120 | ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY); | 4042 | ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_CLOSE_NOTIFY); |
| 4121 | #endif | 4043 | #endif |
| 4122 | /* our shutdown alert has been sent now, and if it still needs | 4044 | /* our shutdown alert has been sent now, and if it still needs |
| 4123 | * to be written, s->s3->alert_dispatch will be true */ | 4045 | * to be written, s->s3->alert_dispatch will be true */ |
| 4124 | if (s->s3->alert_dispatch) | 4046 | if (s->s3->alert_dispatch) |
| 4125 | return(-1); /* return WANT_WRITE */ | 4047 | return(-1); /* return WANT_WRITE */ |
| 4126 | } | 4048 | } else if (s->s3->alert_dispatch) { |
| 4127 | else if (s->s3->alert_dispatch) | ||
| 4128 | { | ||
| 4129 | /* resend it if not sent */ | 4049 | /* resend it if not sent */ |
| 4130 | #if 1 | 4050 | #if 1 |
| 4131 | ret=s->method->ssl_dispatch_alert(s); | 4051 | ret = s->method->ssl_dispatch_alert(s); |
| 4132 | if(ret == -1) | 4052 | if (ret == -1) { |
| 4133 | { | ||
| 4134 | /* we only get to return -1 here the 2nd/Nth | 4053 | /* we only get to return -1 here the 2nd/Nth |
| 4135 | * invocation, we must have already signalled | 4054 | * invocation, we must have already signalled |
| 4136 | * return 0 upon a previous invoation, | 4055 | * return 0 upon a previous invoation, |
| 4137 | * return WANT_WRITE */ | 4056 | * return WANT_WRITE */ |
| 4138 | return(ret); | 4057 | return (ret); |
| 4139 | } | ||
| 4140 | #endif | ||
| 4141 | } | 4058 | } |
| 4142 | else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) | 4059 | #endif |
| 4143 | { | 4060 | } else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) { |
| 4144 | /* If we are waiting for a close from our peer, we are closed */ | 4061 | /* If we are waiting for a close from our peer, we are closed */ |
| 4145 | s->method->ssl_read_bytes(s,0,NULL,0,0); | 4062 | s->method->ssl_read_bytes(s, 0, NULL, 0, 0); |
| 4146 | if(!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) | 4063 | if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) { |
| 4147 | { | ||
| 4148 | return(-1); /* return WANT_READ */ | 4064 | return(-1); /* return WANT_READ */ |
| 4149 | } | ||
| 4150 | } | 4065 | } |
| 4066 | } | ||
| 4151 | 4067 | ||
| 4152 | if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) && | 4068 | if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) && |
| 4153 | !s->s3->alert_dispatch) | 4069 | !s->s3->alert_dispatch) |
| 4154 | return(1); | 4070 | return (1); |
| 4155 | else | 4071 | else |
| 4156 | return(0); | 4072 | return (0); |
| 4157 | } | 4073 | } |
| 4158 | 4074 | ||
| 4159 | int ssl3_write(SSL *s, const void *buf, int len) | 4075 | int |
| 4160 | { | 4076 | ssl3_write(SSL *s, const void *buf, int len) |
| 4161 | int ret,n; | 4077 | { |
| 4078 | int ret, n; | ||
| 4162 | 4079 | ||
| 4163 | #if 0 | 4080 | #if 0 |
| 4164 | if (s->shutdown & SSL_SEND_SHUTDOWN) | 4081 | if (s->shutdown & SSL_SEND_SHUTDOWN) { |
| 4165 | { | 4082 | s->rwstate = SSL_NOTHING; |
| 4166 | s->rwstate=SSL_NOTHING; | 4083 | return (0); |
| 4167 | return(0); | 4084 | } |
| 4168 | } | ||
| 4169 | #endif | 4085 | #endif |
| 4170 | errno = 0; | 4086 | errno = 0; |
| 4171 | if (s->s3->renegotiate) ssl3_renegotiate_check(s); | 4087 | if (s->s3->renegotiate) |
| 4088 | ssl3_renegotiate_check(s); | ||
| 4172 | 4089 | ||
| 4173 | /* This is an experimental flag that sends the | 4090 | /* This is an experimental flag that sends the |
| 4174 | * last handshake message in the same packet as the first | 4091 | * last handshake message in the same packet as the first |
| 4175 | * use data - used to see if it helps the TCP protocol during | 4092 | * use data - used to see if it helps the TCP protocol during |
| 4176 | * session-id reuse */ | 4093 | * session-id reuse */ |
| 4177 | /* The second test is because the buffer may have been removed */ | 4094 | /* The second test is because the buffer may have been removed */ |
| 4178 | if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) | 4095 | if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) { |
| 4179 | { | ||
| 4180 | /* First time through, we write into the buffer */ | 4096 | /* First time through, we write into the buffer */ |
| 4181 | if (s->s3->delay_buf_pop_ret == 0) | 4097 | if (s->s3->delay_buf_pop_ret == 0) { |
| 4182 | { | 4098 | ret = ssl3_write_bytes(s, SSL3_RT_APPLICATION_DATA, |
| 4183 | ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA, | 4099 | buf, len); |
| 4184 | buf,len); | 4100 | if (ret <= 0) |
| 4185 | if (ret <= 0) return(ret); | 4101 | return (ret); |
| 4186 | 4102 | ||
| 4187 | s->s3->delay_buf_pop_ret=ret; | 4103 | s->s3->delay_buf_pop_ret = ret; |
| 4188 | } | 4104 | } |
| 4189 | 4105 | ||
| 4190 | s->rwstate=SSL_WRITING; | 4106 | s->rwstate = SSL_WRITING; |
| 4191 | n=BIO_flush(s->wbio); | 4107 | n = BIO_flush(s->wbio); |
| 4192 | if (n <= 0) return(n); | 4108 | if (n <= 0) |
| 4193 | s->rwstate=SSL_NOTHING; | 4109 | return (n); |
| 4110 | s->rwstate = SSL_NOTHING; | ||
| 4194 | 4111 | ||
| 4195 | /* We have flushed the buffer, so remove it */ | 4112 | /* We have flushed the buffer, so remove it */ |
| 4196 | ssl_free_wbio_buffer(s); | 4113 | ssl_free_wbio_buffer(s); |
| 4197 | s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER; | 4114 | s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER; |
| 4198 | 4115 | ||
| 4199 | ret=s->s3->delay_buf_pop_ret; | 4116 | ret = s->s3->delay_buf_pop_ret; |
| 4200 | s->s3->delay_buf_pop_ret=0; | 4117 | s->s3->delay_buf_pop_ret = 0; |
| 4201 | } | 4118 | } else { |
| 4202 | else | 4119 | ret = s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA, |
| 4203 | { | 4120 | buf, len); |
| 4204 | ret=s->method->ssl_write_bytes(s,SSL3_RT_APPLICATION_DATA, | 4121 | if (ret <= 0) |
| 4205 | buf,len); | 4122 | return (ret); |
| 4206 | if (ret <= 0) return(ret); | ||
| 4207 | } | ||
| 4208 | |||
| 4209 | return(ret); | ||
| 4210 | } | 4123 | } |
| 4211 | 4124 | ||
| 4212 | static int ssl3_read_internal(SSL *s, void *buf, int len, int peek) | 4125 | return (ret); |
| 4213 | { | 4126 | } |
| 4127 | |||
| 4128 | static int | ||
| 4129 | ssl3_read_internal(SSL *s, void *buf, int len, int peek) | ||
| 4130 | { | ||
| 4214 | int ret; | 4131 | int ret; |
| 4215 | 4132 | ||
| 4216 | errno = 0; | 4133 | errno = 0; |
| 4217 | if (s->s3->renegotiate) ssl3_renegotiate_check(s); | 4134 | if (s->s3->renegotiate) |
| 4218 | s->s3->in_read_app_data=1; | 4135 | ssl3_renegotiate_check(s); |
| 4219 | ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek); | 4136 | s->s3->in_read_app_data = 1; |
| 4220 | if ((ret == -1) && (s->s3->in_read_app_data == 2)) | 4137 | ret = s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len, peek); |
| 4221 | { | 4138 | if ((ret == -1) && (s->s3->in_read_app_data == 2)) { |
| 4222 | /* ssl3_read_bytes decided to call s->handshake_func, which | 4139 | /* ssl3_read_bytes decided to call s->handshake_func, which |
| 4223 | * called ssl3_read_bytes to read handshake data. | 4140 | * called ssl3_read_bytes to read handshake data. |
| 4224 | * However, ssl3_read_bytes actually found application data | 4141 | * However, ssl3_read_bytes actually found application data |
| 4225 | * and thinks that application data makes sense here; so disable | 4142 | * and thinks that application data makes sense here; so disable |
| 4226 | * handshake processing and try to read application data again. */ | 4143 | * handshake processing and try to read application data again. */ |
| 4227 | s->in_handshake++; | 4144 | s->in_handshake++; |
| 4228 | ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek); | 4145 | ret = s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len, peek); |
| 4229 | s->in_handshake--; | 4146 | s->in_handshake--; |
| 4230 | } | 4147 | } else |
| 4231 | else | 4148 | s->s3->in_read_app_data = 0; |
| 4232 | s->s3->in_read_app_data=0; | ||
| 4233 | 4149 | ||
| 4234 | return(ret); | 4150 | return (ret); |
| 4235 | } | 4151 | } |
| 4236 | 4152 | ||
| 4237 | int ssl3_read(SSL *s, void *buf, int len) | 4153 | int |
| 4238 | { | 4154 | ssl3_read(SSL *s, void *buf, int len) |
| 4155 | { | ||
| 4239 | return ssl3_read_internal(s, buf, len, 0); | 4156 | return ssl3_read_internal(s, buf, len, 0); |
| 4240 | } | 4157 | } |
| 4241 | 4158 | ||
| 4242 | int ssl3_peek(SSL *s, void *buf, int len) | 4159 | int |
| 4243 | { | 4160 | ssl3_peek(SSL *s, void *buf, int len) |
| 4161 | { | ||
| 4244 | return ssl3_read_internal(s, buf, len, 1); | 4162 | return ssl3_read_internal(s, buf, len, 1); |
| 4245 | } | 4163 | } |
| 4246 | 4164 | ||
| 4247 | int ssl3_renegotiate(SSL *s) | 4165 | int |
| 4248 | { | 4166 | ssl3_renegotiate(SSL *s) |
| 4167 | { | ||
| 4249 | if (s->handshake_func == NULL) | 4168 | if (s->handshake_func == NULL) |
| 4250 | return(1); | 4169 | return (1); |
| 4251 | 4170 | ||
| 4252 | if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) | 4171 | if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) |
| 4253 | return(0); | 4172 | return (0); |
| 4254 | 4173 | ||
| 4255 | s->s3->renegotiate=1; | 4174 | s->s3->renegotiate = 1; |
| 4256 | return(1); | 4175 | return (1); |
| 4257 | } | 4176 | } |
| 4258 | 4177 | ||
| 4259 | int ssl3_renegotiate_check(SSL *s) | 4178 | int |
| 4260 | { | 4179 | ssl3_renegotiate_check(SSL *s) |
| 4261 | int ret=0; | 4180 | { |
| 4181 | int ret = 0; | ||
| 4262 | 4182 | ||
| 4263 | if (s->s3->renegotiate) | 4183 | if (s->s3->renegotiate) { |
| 4264 | { | 4184 | if ((s->s3->rbuf.left == 0) && (s->s3->wbuf.left == 0) && |
| 4265 | if ( (s->s3->rbuf.left == 0) && | 4185 | !SSL_in_init(s)) { |
| 4266 | (s->s3->wbuf.left == 0) && | ||
| 4267 | !SSL_in_init(s)) | ||
| 4268 | { | ||
| 4269 | /* | 4186 | /* |
| 4270 | if we are the server, and we have sent a 'RENEGOTIATE' message, we | 4187 | if we are the server, and we have sent a 'RENEGOTIATE' message, we |
| 4271 | need to go to SSL_ST_ACCEPT. | 4188 | need to go to SSL_ST_ACCEPT. |
| 4272 | */ | 4189 | */ |
| 4273 | /* SSL_ST_ACCEPT */ | 4190 | /* SSL_ST_ACCEPT */ |
| 4274 | s->state=SSL_ST_RENEGOTIATE; | 4191 | s->state = SSL_ST_RENEGOTIATE; |
| 4275 | s->s3->renegotiate=0; | 4192 | s->s3->renegotiate = 0; |
| 4276 | s->s3->num_renegotiations++; | 4193 | s->s3->num_renegotiations++; |
| 4277 | s->s3->total_renegotiations++; | 4194 | s->s3->total_renegotiations++; |
| 4278 | ret=1; | 4195 | ret = 1; |
| 4279 | } | ||
| 4280 | } | 4196 | } |
| 4281 | return(ret); | ||
| 4282 | } | 4197 | } |
| 4198 | return (ret); | ||
| 4199 | } | ||
| 4283 | /* If we are using TLS v1.2 or later and default SHA1+MD5 algorithms switch | 4200 | /* If we are using TLS v1.2 or later and default SHA1+MD5 algorithms switch |
| 4284 | * to new SHA256 PRF and handshake macs | 4201 | * to new SHA256 PRF and handshake macs |
| 4285 | */ | 4202 | */ |
| 4286 | long ssl_get_algorithm2(SSL *s) | 4203 | long |
| 4287 | { | 4204 | ssl_get_algorithm2(SSL *s) |
| 4205 | { | ||
| 4288 | long alg2 = s->s3->tmp.new_cipher->algorithm2; | 4206 | long alg2 = s->s3->tmp.new_cipher->algorithm2; |
| 4289 | if (s->method->version == TLS1_2_VERSION && | 4207 | if (s->method->version == TLS1_2_VERSION && |
| 4290 | alg2 == (SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF)) | 4208 | alg2 == (SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF)) |
| 4291 | return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256; | 4209 | return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256; |
| 4292 | return alg2; | 4210 | return alg2; |
| 4293 | } | 4211 | } |
| 4294 | |||
diff --git a/src/lib/libssl/s3_pkt.c b/src/lib/libssl/s3_pkt.c index 6b55d21a3e..6c677d9f6b 100644 --- a/src/lib/libssl/s3_pkt.c +++ b/src/lib/libssl/s3_pkt.c | |||
| @@ -118,11 +118,12 @@ | |||
| 118 | #include <openssl/rand.h> | 118 | #include <openssl/rand.h> |
| 119 | 119 | ||
| 120 | static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, | 120 | static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, |
| 121 | unsigned int len, int create_empty_fragment); | 121 | unsigned int len, int create_empty_fragment); |
| 122 | static int ssl3_get_record(SSL *s); | 122 | static int ssl3_get_record(SSL *s); |
| 123 | 123 | ||
| 124 | int ssl3_read_n(SSL *s, int n, int max, int extend) | 124 | int |
| 125 | { | 125 | ssl3_read_n(SSL *s, int n, int max, int extend) |
| 126 | { | ||
| 126 | /* If extend == 0, obtain new n-byte packet; if extend == 1, increase | 127 | /* If extend == 0, obtain new n-byte packet; if extend == 1, increase |
| 127 | * packet by another n bytes. | 128 | * packet by another n bytes. |
| 128 | * The packet will be in the sub-array of s->s3->rbuf.buf specified | 129 | * The packet will be in the sub-array of s->s3->rbuf.buf specified |
| @@ -130,37 +131,35 @@ int ssl3_read_n(SSL *s, int n, int max, int extend) | |||
| 130 | * (If s->read_ahead is set, 'max' bytes may be stored in rbuf | 131 | * (If s->read_ahead is set, 'max' bytes may be stored in rbuf |
| 131 | * [plus s->packet_length bytes if extend == 1].) | 132 | * [plus s->packet_length bytes if extend == 1].) |
| 132 | */ | 133 | */ |
| 133 | int i,len,left; | 134 | int i, len, left; |
| 134 | long align=0; | 135 | long align = 0; |
| 135 | unsigned char *pkt; | 136 | unsigned char *pkt; |
| 136 | SSL3_BUFFER *rb; | 137 | SSL3_BUFFER *rb; |
| 137 | 138 | ||
| 138 | if (n <= 0) return n; | 139 | if (n <= 0) |
| 140 | return n; | ||
| 139 | 141 | ||
| 140 | rb = &(s->s3->rbuf); | 142 | rb = &(s->s3->rbuf); |
| 141 | if (rb->buf == NULL) | 143 | if (rb->buf == NULL) |
| 142 | if (!ssl3_setup_read_buffer(s)) | 144 | if (!ssl3_setup_read_buffer(s)) |
| 143 | return -1; | 145 | return -1; |
| 144 | 146 | ||
| 145 | left = rb->left; | 147 | left = rb->left; |
| 146 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 148 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
| 147 | align = (long)rb->buf + SSL3_RT_HEADER_LENGTH; | 149 | align = (long)rb->buf + SSL3_RT_HEADER_LENGTH; |
| 148 | align = (-align)&(SSL3_ALIGN_PAYLOAD-1); | 150 | align = (-align)&(SSL3_ALIGN_PAYLOAD - 1); |
| 149 | #endif | 151 | #endif |
| 150 | 152 | ||
| 151 | if (!extend) | 153 | if (!extend) { |
| 152 | { | ||
| 153 | /* start with empty packet ... */ | 154 | /* start with empty packet ... */ |
| 154 | if (left == 0) | 155 | if (left == 0) |
| 155 | rb->offset = align; | 156 | rb->offset = align; |
| 156 | else if (align != 0 && left >= SSL3_RT_HEADER_LENGTH) | 157 | else if (align != 0 && left >= SSL3_RT_HEADER_LENGTH) { |
| 157 | { | ||
| 158 | /* check if next packet length is large | 158 | /* check if next packet length is large |
| 159 | * enough to justify payload alignment... */ | 159 | * enough to justify payload alignment... */ |
| 160 | pkt = rb->buf + rb->offset; | 160 | pkt = rb->buf + rb->offset; |
| 161 | if (pkt[0] == SSL3_RT_APPLICATION_DATA | 161 | if (pkt[0] == SSL3_RT_APPLICATION_DATA |
| 162 | && (pkt[3]<<8|pkt[4]) >= 128) | 162 | && (pkt[3]<<8|pkt[4]) >= 128) { |
| 163 | { | ||
| 164 | /* Note that even if packet is corrupted | 163 | /* Note that even if packet is corrupted |
| 165 | * and its length field is insane, we can | 164 | * and its length field is insane, we can |
| 166 | * only be led to wrong decision about | 165 | * only be led to wrong decision about |
| @@ -168,109 +167,100 @@ int ssl3_read_n(SSL *s, int n, int max, int extend) | |||
| 168 | * Header values has no effect on memmove | 167 | * Header values has no effect on memmove |
| 169 | * arguments and therefore no buffer | 168 | * arguments and therefore no buffer |
| 170 | * overrun can be triggered. */ | 169 | * overrun can be triggered. */ |
| 171 | memmove (rb->buf+align,pkt,left); | 170 | memmove (rb->buf + align, pkt, left); |
| 172 | rb->offset = align; | 171 | rb->offset = align; |
| 173 | } | ||
| 174 | } | 172 | } |
| 173 | } | ||
| 175 | s->packet = rb->buf + rb->offset; | 174 | s->packet = rb->buf + rb->offset; |
| 176 | s->packet_length = 0; | 175 | s->packet_length = 0; |
| 177 | /* ... now we can act as if 'extend' was set */ | 176 | /* ... now we can act as if 'extend' was set */ |
| 178 | } | 177 | } |
| 179 | 178 | ||
| 180 | /* For DTLS/UDP reads should not span multiple packets | 179 | /* For DTLS/UDP reads should not span multiple packets |
| 181 | * because the read operation returns the whole packet | 180 | * because the read operation returns the whole packet |
| 182 | * at once (as long as it fits into the buffer). */ | 181 | * at once (as long as it fits into the buffer). */ |
| 183 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) | 182 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) { |
| 184 | { | ||
| 185 | if (left > 0 && n > left) | 183 | if (left > 0 && n > left) |
| 186 | n = left; | 184 | n = left; |
| 187 | } | 185 | } |
| 188 | 186 | ||
| 189 | /* if there is enough in the buffer from a previous read, take some */ | 187 | /* if there is enough in the buffer from a previous read, take some */ |
| 190 | if (left >= n) | 188 | if (left >= n) { |
| 191 | { | 189 | s->packet_length += n; |
| 192 | s->packet_length+=n; | 190 | rb->left = left - n; |
| 193 | rb->left=left-n; | 191 | rb->offset += n; |
| 194 | rb->offset+=n; | 192 | return (n); |
| 195 | return(n); | 193 | } |
| 196 | } | ||
| 197 | 194 | ||
| 198 | /* else we need to read more data */ | 195 | /* else we need to read more data */ |
| 199 | 196 | ||
| 200 | len = s->packet_length; | 197 | len = s->packet_length; |
| 201 | pkt = rb->buf+align; | 198 | pkt = rb->buf + align; |
| 202 | /* Move any available bytes to front of buffer: | 199 | /* Move any available bytes to front of buffer: |
| 203 | * 'len' bytes already pointed to by 'packet', | 200 | * 'len' bytes already pointed to by 'packet', |
| 204 | * 'left' extra ones at the end */ | 201 | * 'left' extra ones at the end */ |
| 205 | if (s->packet != pkt) /* len > 0 */ | 202 | if (s->packet != pkt) /* len > 0 */ |
| 206 | { | 203 | { |
| 207 | memmove(pkt, s->packet, len+left); | 204 | memmove(pkt, s->packet, len + left); |
| 208 | s->packet = pkt; | 205 | s->packet = pkt; |
| 209 | rb->offset = len + align; | 206 | rb->offset = len + align; |
| 210 | } | 207 | } |
| 211 | 208 | ||
| 212 | if (n > (int)(rb->len - rb->offset)) /* does not happen */ | 209 | if (n > (int)(rb->len - rb->offset)) /* does not happen */ |
| 213 | { | 210 | { |
| 214 | SSLerr(SSL_F_SSL3_READ_N,ERR_R_INTERNAL_ERROR); | 211 | SSLerr(SSL_F_SSL3_READ_N, ERR_R_INTERNAL_ERROR); |
| 215 | return -1; | 212 | return -1; |
| 216 | } | 213 | } |
| 217 | 214 | ||
| 218 | if (!s->read_ahead) | 215 | if (!s->read_ahead) |
| 219 | /* ignore max parameter */ | 216 | /* ignore max parameter */ |
| 220 | max = n; | 217 | max = n; |
| 221 | else | 218 | else { |
| 222 | { | ||
| 223 | if (max < n) | 219 | if (max < n) |
| 224 | max = n; | 220 | max = n; |
| 225 | if (max > (int)(rb->len - rb->offset)) | 221 | if (max > (int)(rb->len - rb->offset)) |
| 226 | max = rb->len - rb->offset; | 222 | max = rb->len - rb->offset; |
| 227 | } | 223 | } |
| 228 | 224 | ||
| 229 | while (left < n) | 225 | while (left < n) { |
| 230 | { | ||
| 231 | /* Now we have len+left bytes at the front of s->s3->rbuf.buf | 226 | /* Now we have len+left bytes at the front of s->s3->rbuf.buf |
| 232 | * and need to read in more until we have len+n (up to | 227 | * and need to read in more until we have len+n (up to |
| 233 | * len+max if possible) */ | 228 | * len+max if possible) */ |
| 234 | 229 | ||
| 235 | errno = 0; | 230 | errno = 0; |
| 236 | if (s->rbio != NULL) | 231 | if (s->rbio != NULL) { |
| 237 | { | 232 | s->rwstate = SSL_READING; |
| 238 | s->rwstate=SSL_READING; | 233 | i = BIO_read(s->rbio, pkt + len + left, max - left); |
| 239 | i=BIO_read(s->rbio,pkt+len+left, max-left); | 234 | } else { |
| 240 | } | 235 | SSLerr(SSL_F_SSL3_READ_N, SSL_R_READ_BIO_NOT_SET); |
| 241 | else | ||
| 242 | { | ||
| 243 | SSLerr(SSL_F_SSL3_READ_N,SSL_R_READ_BIO_NOT_SET); | ||
| 244 | i = -1; | 236 | i = -1; |
| 245 | } | 237 | } |
| 246 | 238 | ||
| 247 | if (i <= 0) | 239 | if (i <= 0) { |
| 248 | { | ||
| 249 | rb->left = left; | 240 | rb->left = left; |
| 250 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && | 241 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && |
| 251 | SSL_version(s) != DTLS1_VERSION && SSL_version(s) != DTLS1_BAD_VER) | 242 | SSL_version(s) != DTLS1_VERSION && SSL_version(s) != DTLS1_BAD_VER) |
| 252 | if (len+left == 0) | 243 | if (len + left == 0) |
| 253 | ssl3_release_read_buffer(s); | 244 | ssl3_release_read_buffer(s); |
| 254 | return(i); | 245 | return (i); |
| 255 | } | 246 | } |
| 256 | left+=i; | 247 | left += i; |
| 257 | /* reads should *never* span multiple packets for DTLS because | 248 | /* reads should *never* span multiple packets for DTLS because |
| 258 | * the underlying transport protocol is message oriented as opposed | 249 | * the underlying transport protocol is message oriented as opposed |
| 259 | * to byte oriented as in the TLS case. */ | 250 | * to byte oriented as in the TLS case. */ |
| 260 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) | 251 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) { |
| 261 | { | ||
| 262 | if (n > left) | 252 | if (n > left) |
| 263 | n = left; /* makes the while condition false */ | 253 | n = left; /* makes the while condition false */ |
| 264 | } | ||
| 265 | } | 254 | } |
| 255 | } | ||
| 266 | 256 | ||
| 267 | /* done reading, now the book-keeping */ | 257 | /* done reading, now the book-keeping */ |
| 268 | rb->offset += n; | 258 | rb->offset += n; |
| 269 | rb->left = left - n; | 259 | rb->left = left - n; |
| 270 | s->packet_length += n; | 260 | s->packet_length += n; |
| 271 | s->rwstate=SSL_NOTHING; | 261 | s->rwstate = SSL_NOTHING; |
| 272 | return(n); | 262 | return (n); |
| 273 | } | 263 | } |
| 274 | 264 | ||
| 275 | /* Call this to get a new input record. | 265 | /* Call this to get a new input record. |
| 276 | * It will return <= 0 if more data is needed, normally due to an error | 266 | * It will return <= 0 if more data is needed, normally due to an error |
| @@ -281,10 +271,11 @@ int ssl3_read_n(SSL *s, int n, int max, int extend) | |||
| 281 | * ssl->s3->rrec.length, - number of bytes | 271 | * ssl->s3->rrec.length, - number of bytes |
| 282 | */ | 272 | */ |
| 283 | /* used only by ssl3_read_bytes */ | 273 | /* used only by ssl3_read_bytes */ |
| 284 | static int ssl3_get_record(SSL *s) | 274 | static int |
| 285 | { | 275 | ssl3_get_record(SSL *s) |
| 286 | int ssl_major,ssl_minor,al; | 276 | { |
| 287 | int enc_err,n,i,ret= -1; | 277 | int ssl_major, ssl_minor, al; |
| 278 | int enc_err, n, i, ret = -1; | ||
| 288 | SSL3_RECORD *rr; | 279 | SSL3_RECORD *rr; |
| 289 | SSL_SESSION *sess; | 280 | SSL_SESSION *sess; |
| 290 | unsigned char *p; | 281 | unsigned char *p; |
| @@ -293,90 +284,83 @@ static int ssl3_get_record(SSL *s) | |||
| 293 | unsigned mac_size, orig_len; | 284 | unsigned mac_size, orig_len; |
| 294 | size_t extra; | 285 | size_t extra; |
| 295 | 286 | ||
| 296 | rr= &(s->s3->rrec); | 287 | rr = &(s->s3->rrec); |
| 297 | sess=s->session; | 288 | sess = s->session; |
| 298 | 289 | ||
| 299 | if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) | 290 | if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) |
| 300 | extra=SSL3_RT_MAX_EXTRA; | 291 | extra = SSL3_RT_MAX_EXTRA; |
| 301 | else | 292 | else |
| 302 | extra=0; | 293 | extra = 0; |
| 303 | if (extra && !s->s3->init_extra) | 294 | if (extra && !s->s3->init_extra) { |
| 304 | { | ||
| 305 | /* An application error: SLS_OP_MICROSOFT_BIG_SSLV3_BUFFER | 295 | /* An application error: SLS_OP_MICROSOFT_BIG_SSLV3_BUFFER |
| 306 | * set after ssl3_setup_buffers() was done */ | 296 | * set after ssl3_setup_buffers() was done */ |
| 307 | SSLerr(SSL_F_SSL3_GET_RECORD, ERR_R_INTERNAL_ERROR); | 297 | SSLerr(SSL_F_SSL3_GET_RECORD, ERR_R_INTERNAL_ERROR); |
| 308 | return -1; | 298 | return -1; |
| 309 | } | 299 | } |
| 310 | 300 | ||
| 311 | again: | 301 | again: |
| 312 | /* check if we have the header */ | 302 | /* check if we have the header */ |
| 313 | if ( (s->rstate != SSL_ST_READ_BODY) || | 303 | if ((s->rstate != SSL_ST_READ_BODY) || |
| 314 | (s->packet_length < SSL3_RT_HEADER_LENGTH)) | 304 | (s->packet_length < SSL3_RT_HEADER_LENGTH)) { |
| 315 | { | 305 | n = ssl3_read_n(s, SSL3_RT_HEADER_LENGTH, s->s3->rbuf.len, 0); |
| 316 | n=ssl3_read_n(s, SSL3_RT_HEADER_LENGTH, s->s3->rbuf.len, 0); | ||
| 317 | if (n <= 0) return(n); /* error or non-blocking */ | 306 | if (n <= 0) return(n); /* error or non-blocking */ |
| 318 | s->rstate=SSL_ST_READ_BODY; | 307 | s->rstate = SSL_ST_READ_BODY; |
| 319 | 308 | ||
| 320 | p=s->packet; | 309 | p = s->packet; |
| 321 | 310 | ||
| 322 | /* Pull apart the header into the SSL3_RECORD */ | 311 | /* Pull apart the header into the SSL3_RECORD */ |
| 323 | rr->type= *(p++); | 312 | rr->type= *(p++); |
| 324 | ssl_major= *(p++); | 313 | ssl_major= *(p++); |
| 325 | ssl_minor= *(p++); | 314 | ssl_minor= *(p++); |
| 326 | version=(ssl_major<<8)|ssl_minor; | 315 | version = (ssl_major << 8)|ssl_minor; |
| 327 | n2s(p,rr->length); | 316 | n2s(p, rr->length); |
| 328 | #if 0 | 317 | #if 0 |
| 329 | fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length); | 318 | fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length); |
| 330 | #endif | 319 | #endif |
| 331 | 320 | ||
| 332 | /* Lets check version */ | 321 | /* Lets check version */ |
| 333 | if (!s->first_packet) | 322 | if (!s->first_packet) { |
| 334 | { | 323 | if (version != s->version) { |
| 335 | if (version != s->version) | 324 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_WRONG_VERSION_NUMBER); |
| 336 | { | 325 | if ((s->version & 0xFF00) == (version & 0xFF00) && !s->enc_write_ctx && !s->write_hash) |
| 337 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_WRONG_VERSION_NUMBER); | 326 | /* Send back error using their minor version number :-) */ |
| 338 | if ((s->version & 0xFF00) == (version & 0xFF00) && !s->enc_write_ctx && !s->write_hash) | 327 | s->version = (unsigned short)version; |
| 339 | /* Send back error using their minor version number :-) */ | 328 | al = SSL_AD_PROTOCOL_VERSION; |
| 340 | s->version = (unsigned short)version; | ||
| 341 | al=SSL_AD_PROTOCOL_VERSION; | ||
| 342 | goto f_err; | 329 | goto f_err; |
| 343 | } | ||
| 344 | } | 330 | } |
| 331 | } | ||
| 345 | 332 | ||
| 346 | if ((version>>8) != SSL3_VERSION_MAJOR) | 333 | if ((version >> 8) != SSL3_VERSION_MAJOR) { |
| 347 | { | 334 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_WRONG_VERSION_NUMBER); |
| 348 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_WRONG_VERSION_NUMBER); | ||
| 349 | goto err; | 335 | goto err; |
| 350 | } | 336 | } |
| 351 | 337 | ||
| 352 | if (rr->length > s->s3->rbuf.len - SSL3_RT_HEADER_LENGTH) | 338 | if (rr->length > s->s3->rbuf.len - SSL3_RT_HEADER_LENGTH) { |
| 353 | { | 339 | al = SSL_AD_RECORD_OVERFLOW; |
| 354 | al=SSL_AD_RECORD_OVERFLOW; | 340 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_PACKET_LENGTH_TOO_LONG); |
| 355 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_PACKET_LENGTH_TOO_LONG); | ||
| 356 | goto f_err; | 341 | goto f_err; |
| 357 | } | 342 | } |
| 358 | 343 | ||
| 359 | /* now s->rstate == SSL_ST_READ_BODY */ | 344 | /* now s->rstate == SSL_ST_READ_BODY */ |
| 360 | } | 345 | } |
| 361 | 346 | ||
| 362 | /* s->rstate == SSL_ST_READ_BODY, get and decode the data */ | 347 | /* s->rstate == SSL_ST_READ_BODY, get and decode the data */ |
| 363 | 348 | ||
| 364 | if (rr->length > s->packet_length-SSL3_RT_HEADER_LENGTH) | 349 | if (rr->length > s->packet_length - SSL3_RT_HEADER_LENGTH) { |
| 365 | { | ||
| 366 | /* now s->packet_length == SSL3_RT_HEADER_LENGTH */ | 350 | /* now s->packet_length == SSL3_RT_HEADER_LENGTH */ |
| 367 | i=rr->length; | 351 | i = rr->length; |
| 368 | n=ssl3_read_n(s,i,i,1); | 352 | n = ssl3_read_n(s, i, i, 1); |
| 369 | if (n <= 0) return(n); /* error or non-blocking io */ | 353 | if (n <= 0) return(n); /* error or non-blocking io */ |
| 370 | /* now n == rr->length, | 354 | /* now n == rr->length, |
| 371 | * and s->packet_length == SSL3_RT_HEADER_LENGTH + rr->length */ | 355 | * and s->packet_length == SSL3_RT_HEADER_LENGTH + rr->length */ |
| 372 | } | 356 | } |
| 373 | 357 | ||
| 374 | s->rstate=SSL_ST_READ_HEADER; /* set state for later operations */ | 358 | s->rstate=SSL_ST_READ_HEADER; /* set state for later operations */ |
| 375 | 359 | ||
| 376 | /* At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length, | 360 | /* At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length, |
| 377 | * and we have that many bytes in s->packet | 361 | * and we have that many bytes in s->packet |
| 378 | */ | 362 | */ |
| 379 | rr->input= &(s->packet[SSL3_RT_HEADER_LENGTH]); | 363 | rr->input = &(s->packet[SSL3_RT_HEADER_LENGTH]); |
| 380 | 364 | ||
| 381 | /* ok, we can now read from 's->packet' data into 'rr' | 365 | /* ok, we can now read from 's->packet' data into 'rr' |
| 382 | * rr->input points at rr->length bytes, which | 366 | * rr->input points at rr->length bytes, which |
| @@ -389,47 +373,43 @@ fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length); | |||
| 389 | * rr->length bytes of encrypted compressed stuff. */ | 373 | * rr->length bytes of encrypted compressed stuff. */ |
| 390 | 374 | ||
| 391 | /* check is not needed I believe */ | 375 | /* check is not needed I believe */ |
| 392 | if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH+extra) | 376 | if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH + extra) { |
| 393 | { | 377 | al = SSL_AD_RECORD_OVERFLOW; |
| 394 | al=SSL_AD_RECORD_OVERFLOW; | 378 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_ENCRYPTED_LENGTH_TOO_LONG); |
| 395 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_ENCRYPTED_LENGTH_TOO_LONG); | ||
| 396 | goto f_err; | 379 | goto f_err; |
| 397 | } | 380 | } |
| 398 | 381 | ||
| 399 | /* decrypt in place in 'rr->input' */ | 382 | /* decrypt in place in 'rr->input' */ |
| 400 | rr->data=rr->input; | 383 | rr->data = rr->input; |
| 401 | 384 | ||
| 402 | enc_err = s->method->ssl3_enc->enc(s,0); | 385 | enc_err = s->method->ssl3_enc->enc(s, 0); |
| 403 | /* enc_err is: | 386 | /* enc_err is: |
| 404 | * 0: (in non-constant time) if the record is publically invalid. | 387 | * 0: (in non-constant time) if the record is publically invalid. |
| 405 | * 1: if the padding is valid | 388 | * 1: if the padding is valid |
| 406 | * -1: if the padding is invalid */ | 389 | * -1: if the padding is invalid */ |
| 407 | if (enc_err == 0) | 390 | if (enc_err == 0) { |
| 408 | { | 391 | al = SSL_AD_DECRYPTION_FAILED; |
| 409 | al=SSL_AD_DECRYPTION_FAILED; | 392 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_BLOCK_CIPHER_PAD_IS_WRONG); |
| 410 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_BLOCK_CIPHER_PAD_IS_WRONG); | ||
| 411 | goto f_err; | 393 | goto f_err; |
| 412 | } | 394 | } |
| 413 | 395 | ||
| 414 | #ifdef TLS_DEBUG | 396 | #ifdef TLS_DEBUG |
| 415 | printf("dec %d\n",rr->length); | 397 | printf("dec %d\n", rr->length); |
| 416 | { unsigned int z; for (z=0; z<rr->length; z++) printf("%02X%c",rr->data[z],((z+1)%16)?' ':'\n'); } | 398 | { unsigned int z; for (z = 0; z<rr->length; z++) printf("%02X%c", rr->data[z],((z+1)%16)?' ':'\n'); } |
| 417 | printf("\n"); | 399 | printf("\n"); |
| 418 | #endif | 400 | #endif |
| 419 | 401 | ||
| 420 | /* r->length is now the compressed data plus mac */ | 402 | /* r->length is now the compressed data plus mac */ |
| 421 | if ((sess != NULL) && | 403 | if ((sess != NULL) && (s->enc_read_ctx != NULL) && |
| 422 | (s->enc_read_ctx != NULL) && | 404 | (EVP_MD_CTX_md(s->read_hash) != NULL)) { |
| 423 | (EVP_MD_CTX_md(s->read_hash) != NULL)) | ||
| 424 | { | ||
| 425 | /* s->read_hash != NULL => mac_size != -1 */ | 405 | /* s->read_hash != NULL => mac_size != -1 */ |
| 426 | unsigned char *mac = NULL; | 406 | unsigned char *mac = NULL; |
| 427 | unsigned char mac_tmp[EVP_MAX_MD_SIZE]; | 407 | unsigned char mac_tmp[EVP_MAX_MD_SIZE]; |
| 428 | mac_size=EVP_MD_CTX_size(s->read_hash); | 408 | mac_size = EVP_MD_CTX_size(s->read_hash); |
| 429 | OPENSSL_assert(mac_size <= EVP_MAX_MD_SIZE); | 409 | OPENSSL_assert(mac_size <= EVP_MAX_MD_SIZE); |
| 430 | 410 | ||
| 431 | /* kludge: *_cbc_remove_padding passes padding length in rr->type */ | 411 | /* kludge: *_cbc_remove_padding passes padding length in rr->type */ |
| 432 | orig_len = rr->length+((unsigned int)rr->type>>8); | 412 | orig_len = rr->length + ((unsigned int)rr->type >> 8); |
| 433 | 413 | ||
| 434 | /* orig_len is the length of the record before any padding was | 414 | /* orig_len is the length of the record before any padding was |
| 435 | * removed. This is public information, as is the MAC in use, | 415 | * removed. This is public information, as is the MAC in use, |
| @@ -437,17 +417,15 @@ printf("\n"); | |||
| 437 | * amount of time if it's too short to possibly contain a MAC. | 417 | * amount of time if it's too short to possibly contain a MAC. |
| 438 | */ | 418 | */ |
| 439 | if (orig_len < mac_size || | 419 | if (orig_len < mac_size || |
| 440 | /* CBC records must have a padding length byte too. */ | 420 | /* CBC records must have a padding length byte too. */ |
| 441 | (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE && | 421 | (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE && |
| 442 | orig_len < mac_size+1)) | 422 | orig_len < mac_size + 1)) { |
| 443 | { | 423 | al = SSL_AD_DECODE_ERROR; |
| 444 | al=SSL_AD_DECODE_ERROR; | 424 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_LENGTH_TOO_SHORT); |
| 445 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_LENGTH_TOO_SHORT); | ||
| 446 | goto f_err; | 425 | goto f_err; |
| 447 | } | 426 | } |
| 448 | 427 | ||
| 449 | if (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE) | 428 | if (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE) { |
| 450 | { | ||
| 451 | /* We update the length so that the TLS header bytes | 429 | /* We update the length so that the TLS header bytes |
| 452 | * can be constructed correctly but we need to extract | 430 | * can be constructed correctly but we need to extract |
| 453 | * the MAC in constant time from within the record, | 431 | * the MAC in constant time from within the record, |
| @@ -456,60 +434,53 @@ printf("\n"); | |||
| 456 | mac = mac_tmp; | 434 | mac = mac_tmp; |
| 457 | ssl3_cbc_copy_mac(mac_tmp, rr, mac_size, orig_len); | 435 | ssl3_cbc_copy_mac(mac_tmp, rr, mac_size, orig_len); |
| 458 | rr->length -= mac_size; | 436 | rr->length -= mac_size; |
| 459 | } | 437 | } else { |
| 460 | else | ||
| 461 | { | ||
| 462 | /* In this case there's no padding, so |orig_len| | 438 | /* In this case there's no padding, so |orig_len| |
| 463 | * equals |rec->length| and we checked that there's | 439 | * equals |rec->length| and we checked that there's |
| 464 | * enough bytes for |mac_size| above. */ | 440 | * enough bytes for |mac_size| above. */ |
| 465 | rr->length -= mac_size; | 441 | rr->length -= mac_size; |
| 466 | mac = &rr->data[rr->length]; | 442 | mac = &rr->data[rr->length]; |
| 467 | } | 443 | } |
| 468 | 444 | ||
| 469 | i=s->method->ssl3_enc->mac(s,md,0 /* not send */); | 445 | i=s->method->ssl3_enc->mac(s,md,0 /* not send */); |
| 470 | if (i < 0 || mac == NULL || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0) | 446 | if (i < 0 || mac == NULL || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0) |
| 471 | enc_err = -1; | 447 | enc_err = -1; |
| 472 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+extra+mac_size) | 448 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + extra + mac_size) |
| 473 | enc_err = -1; | 449 | enc_err = -1; |
| 474 | } | 450 | } |
| 475 | 451 | ||
| 476 | if (enc_err < 0) | 452 | if (enc_err < 0) { |
| 477 | { | ||
| 478 | /* A separate 'decryption_failed' alert was introduced with TLS 1.0, | 453 | /* A separate 'decryption_failed' alert was introduced with TLS 1.0, |
| 479 | * SSL 3.0 only has 'bad_record_mac'. But unless a decryption | 454 | * SSL 3.0 only has 'bad_record_mac'. But unless a decryption |
| 480 | * failure is directly visible from the ciphertext anyway, | 455 | * failure is directly visible from the ciphertext anyway, |
| 481 | * we should not reveal which kind of error occured -- this | 456 | * we should not reveal which kind of error occured -- this |
| 482 | * might become visible to an attacker (e.g. via a logfile) */ | 457 | * might become visible to an attacker (e.g. via a logfile) */ |
| 483 | al=SSL_AD_BAD_RECORD_MAC; | 458 | al = SSL_AD_BAD_RECORD_MAC; |
| 484 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC); | 459 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC); |
| 485 | goto f_err; | 460 | goto f_err; |
| 486 | } | 461 | } |
| 487 | 462 | ||
| 488 | /* r->length is now just compressed */ | 463 | /* r->length is now just compressed */ |
| 489 | if (s->expand != NULL) | 464 | if (s->expand != NULL) { |
| 490 | { | 465 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + extra) { |
| 491 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+extra) | 466 | al = SSL_AD_RECORD_OVERFLOW; |
| 492 | { | 467 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_COMPRESSED_LENGTH_TOO_LONG); |
| 493 | al=SSL_AD_RECORD_OVERFLOW; | ||
| 494 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_COMPRESSED_LENGTH_TOO_LONG); | ||
| 495 | goto f_err; | 468 | goto f_err; |
| 496 | } | 469 | } |
| 497 | if (!ssl3_do_uncompress(s)) | 470 | if (!ssl3_do_uncompress(s)) { |
| 498 | { | 471 | al = SSL_AD_DECOMPRESSION_FAILURE; |
| 499 | al=SSL_AD_DECOMPRESSION_FAILURE; | 472 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_BAD_DECOMPRESSION); |
| 500 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_BAD_DECOMPRESSION); | ||
| 501 | goto f_err; | 473 | goto f_err; |
| 502 | } | ||
| 503 | } | 474 | } |
| 475 | } | ||
| 504 | 476 | ||
| 505 | if (rr->length > SSL3_RT_MAX_PLAIN_LENGTH+extra) | 477 | if (rr->length > SSL3_RT_MAX_PLAIN_LENGTH + extra) { |
| 506 | { | 478 | al = SSL_AD_RECORD_OVERFLOW; |
| 507 | al=SSL_AD_RECORD_OVERFLOW; | 479 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_DATA_LENGTH_TOO_LONG); |
| 508 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_DATA_LENGTH_TOO_LONG); | ||
| 509 | goto f_err; | 480 | goto f_err; |
| 510 | } | 481 | } |
| 511 | 482 | ||
| 512 | rr->off=0; | 483 | rr->off = 0; |
| 513 | /* So at this point the following is true | 484 | /* So at this point the following is true |
| 514 | * ssl->s3->rrec.type is the type of record | 485 | * ssl->s3->rrec.type is the type of record |
| 515 | * ssl->s3->rrec.length == number of bytes in record | 486 | * ssl->s3->rrec.length == number of bytes in record |
| @@ -519,178 +490,171 @@ printf("\n"); | |||
| 519 | */ | 490 | */ |
| 520 | 491 | ||
| 521 | /* we have pulled in a full packet so zero things */ | 492 | /* we have pulled in a full packet so zero things */ |
| 522 | s->packet_length=0; | 493 | s->packet_length = 0; |
| 523 | 494 | ||
| 524 | /* just read a 0 length packet */ | 495 | /* just read a 0 length packet */ |
| 525 | if (rr->length == 0) goto again; | 496 | if (rr->length == 0) |
| 497 | goto again; | ||
| 526 | 498 | ||
| 527 | #if 0 | 499 | #if 0 |
| 528 | fprintf(stderr, "Ultimate Record type=%d, Length=%d\n", rr->type, rr->length); | 500 | fprintf(stderr, "Ultimate Record type=%d, Length=%d\n", rr->type, rr->length); |
| 529 | #endif | 501 | #endif |
| 530 | 502 | ||
| 531 | return(1); | 503 | return (1); |
| 532 | 504 | ||
| 533 | f_err: | 505 | f_err: |
| 534 | ssl3_send_alert(s,SSL3_AL_FATAL,al); | 506 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
| 535 | err: | 507 | err: |
| 536 | return(ret); | 508 | return (ret); |
| 537 | } | 509 | } |
| 538 | 510 | ||
| 539 | int ssl3_do_uncompress(SSL *ssl) | 511 | int |
| 540 | { | 512 | ssl3_do_uncompress(SSL *ssl) |
| 513 | { | ||
| 541 | #ifndef OPENSSL_NO_COMP | 514 | #ifndef OPENSSL_NO_COMP |
| 542 | int i; | 515 | int i; |
| 543 | SSL3_RECORD *rr; | 516 | SSL3_RECORD *rr; |
| 544 | 517 | ||
| 545 | rr= &(ssl->s3->rrec); | 518 | rr = &(ssl->s3->rrec); |
| 546 | i=COMP_expand_block(ssl->expand,rr->comp, | 519 | i = COMP_expand_block(ssl->expand, rr->comp, |
| 547 | SSL3_RT_MAX_PLAIN_LENGTH,rr->data,(int)rr->length); | 520 | SSL3_RT_MAX_PLAIN_LENGTH, rr->data,(int)rr->length); |
| 548 | if (i < 0) | 521 | if (i < 0) |
| 549 | return(0); | 522 | return (0); |
| 550 | else | 523 | else |
| 551 | rr->length=i; | 524 | rr->length = i; |
| 552 | rr->data=rr->comp; | 525 | rr->data = rr->comp; |
| 553 | #endif | 526 | #endif |
| 554 | return(1); | 527 | return (1); |
| 555 | } | 528 | } |
| 556 | 529 | ||
| 557 | int ssl3_do_compress(SSL *ssl) | 530 | int |
| 558 | { | 531 | ssl3_do_compress(SSL *ssl) |
| 532 | { | ||
| 559 | #ifndef OPENSSL_NO_COMP | 533 | #ifndef OPENSSL_NO_COMP |
| 560 | int i; | 534 | int i; |
| 561 | SSL3_RECORD *wr; | 535 | SSL3_RECORD *wr; |
| 562 | 536 | ||
| 563 | wr= &(ssl->s3->wrec); | 537 | wr = &(ssl->s3->wrec); |
| 564 | i=COMP_compress_block(ssl->compress,wr->data, | 538 | i = COMP_compress_block(ssl->compress, wr->data, |
| 565 | SSL3_RT_MAX_COMPRESSED_LENGTH, | 539 | SSL3_RT_MAX_COMPRESSED_LENGTH, |
| 566 | wr->input,(int)wr->length); | 540 | wr->input,(int)wr->length); |
| 567 | if (i < 0) | 541 | if (i < 0) |
| 568 | return(0); | 542 | return (0); |
| 569 | else | 543 | else |
| 570 | wr->length=i; | 544 | wr->length = i; |
| 571 | 545 | ||
| 572 | wr->input=wr->data; | 546 | wr->input = wr->data; |
| 573 | #endif | 547 | #endif |
| 574 | return(1); | 548 | return (1); |
| 575 | } | 549 | } |
| 576 | 550 | ||
| 577 | /* Call this to write data in records of type 'type' | 551 | /* Call this to write data in records of type 'type' |
| 578 | * It will return <= 0 if not all data has been sent or non-blocking IO. | 552 | * It will return <= 0 if not all data has been sent or non-blocking IO. |
| 579 | */ | 553 | */ |
| 580 | int ssl3_write_bytes(SSL *s, int type, const void *buf_, int len) | 554 | int |
| 581 | { | 555 | ssl3_write_bytes(SSL *s, int type, const void *buf_, int len) |
| 582 | const unsigned char *buf=buf_; | 556 | { |
| 583 | unsigned int tot,n,nw; | 557 | const unsigned char *buf = buf_; |
| 558 | unsigned int tot, n, nw; | ||
| 584 | int i; | 559 | int i; |
| 585 | 560 | ||
| 586 | s->rwstate=SSL_NOTHING; | 561 | s->rwstate = SSL_NOTHING; |
| 587 | tot=s->s3->wnum; | 562 | tot = s->s3->wnum; |
| 588 | s->s3->wnum=0; | 563 | s->s3->wnum = 0; |
| 589 | 564 | ||
| 590 | if (SSL_in_init(s) && !s->in_handshake) | 565 | if (SSL_in_init(s) && !s->in_handshake) { |
| 591 | { | 566 | i = s->handshake_func(s); |
| 592 | i=s->handshake_func(s); | 567 | if (i < 0) |
| 593 | if (i < 0) return(i); | 568 | return (i); |
| 594 | if (i == 0) | 569 | if (i == 0) { |
| 595 | { | 570 | SSLerr(SSL_F_SSL3_WRITE_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); |
| 596 | SSLerr(SSL_F_SSL3_WRITE_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE); | ||
| 597 | return -1; | 571 | return -1; |
| 598 | } | ||
| 599 | } | 572 | } |
| 573 | } | ||
| 600 | 574 | ||
| 601 | n=(len-tot); | 575 | n = (len - tot); |
| 602 | for (;;) | 576 | for (;;) { |
| 603 | { | ||
| 604 | if (n > s->max_send_fragment) | 577 | if (n > s->max_send_fragment) |
| 605 | nw=s->max_send_fragment; | 578 | nw = s->max_send_fragment; |
| 606 | else | 579 | else |
| 607 | nw=n; | 580 | nw = n; |
| 608 | 581 | ||
| 609 | i=do_ssl3_write(s, type, &(buf[tot]), nw, 0); | 582 | i = do_ssl3_write(s, type, &(buf[tot]), nw, 0); |
| 610 | if (i <= 0) | 583 | if (i <= 0) { |
| 611 | { | 584 | s->s3->wnum = tot; |
| 612 | s->s3->wnum=tot; | ||
| 613 | return i; | 585 | return i; |
| 614 | } | 586 | } |
| 615 | 587 | ||
| 616 | if ((i == (int)n) || | 588 | if ((i == (int)n) || (type == SSL3_RT_APPLICATION_DATA && |
| 617 | (type == SSL3_RT_APPLICATION_DATA && | 589 | (s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE))) { |
| 618 | (s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE))) | ||
| 619 | { | ||
| 620 | /* next chunk of data should get another prepended empty fragment | 590 | /* next chunk of data should get another prepended empty fragment |
| 621 | * in ciphersuites with known-IV weakness: */ | 591 | * in ciphersuites with known-IV weakness: */ |
| 622 | s->s3->empty_fragment_done = 0; | 592 | s->s3->empty_fragment_done = 0; |
| 623 | |||
| 624 | return tot+i; | ||
| 625 | } | ||
| 626 | 593 | ||
| 627 | n-=i; | 594 | return tot + i; |
| 628 | tot+=i; | ||
| 629 | } | 595 | } |
| 630 | } | ||
| 631 | 596 | ||
| 632 | static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, | 597 | n -= i; |
| 633 | unsigned int len, int create_empty_fragment) | 598 | tot += i; |
| 634 | { | 599 | } |
| 635 | unsigned char *p,*plen; | 600 | } |
| 636 | int i,mac_size,clear=0; | 601 | |
| 637 | int prefix_len=0; | 602 | static int |
| 603 | do_ssl3_write(SSL *s, int type, const unsigned char *buf, | ||
| 604 | unsigned int len, int create_empty_fragment) | ||
| 605 | { | ||
| 606 | unsigned char *p, *plen; | ||
| 607 | int i, mac_size, clear = 0; | ||
| 608 | int prefix_len = 0; | ||
| 638 | int eivlen; | 609 | int eivlen; |
| 639 | long align=0; | 610 | long align = 0; |
| 640 | SSL3_RECORD *wr; | 611 | SSL3_RECORD *wr; |
| 641 | SSL3_BUFFER *wb=&(s->s3->wbuf); | 612 | SSL3_BUFFER *wb = &(s->s3->wbuf); |
| 642 | SSL_SESSION *sess; | 613 | SSL_SESSION *sess; |
| 643 | 614 | ||
| 644 | if (wb->buf == NULL) | 615 | if (wb->buf == NULL) |
| 645 | if (!ssl3_setup_write_buffer(s)) | 616 | if (!ssl3_setup_write_buffer(s)) |
| 646 | return -1; | 617 | return -1; |
| 647 | 618 | ||
| 648 | /* first check if there is a SSL3_BUFFER still being written | 619 | /* first check if there is a SSL3_BUFFER still being written |
| 649 | * out. This will happen with non blocking IO */ | 620 | * out. This will happen with non blocking IO */ |
| 650 | if (wb->left != 0) | 621 | if (wb->left != 0) |
| 651 | return(ssl3_write_pending(s,type,buf,len)); | 622 | return (ssl3_write_pending(s, type, buf, len)); |
| 652 | 623 | ||
| 653 | /* If we have an alert to send, lets send it */ | 624 | /* If we have an alert to send, lets send it */ |
| 654 | if (s->s3->alert_dispatch) | 625 | if (s->s3->alert_dispatch) { |
| 655 | { | 626 | i = s->method->ssl_dispatch_alert(s); |
| 656 | i=s->method->ssl_dispatch_alert(s); | ||
| 657 | if (i <= 0) | 627 | if (i <= 0) |
| 658 | return(i); | 628 | return (i); |
| 659 | /* if it went, fall through and send more stuff */ | 629 | /* if it went, fall through and send more stuff */ |
| 660 | } | 630 | } |
| 661 | 631 | ||
| 662 | if (len == 0 && !create_empty_fragment) | 632 | if (len == 0 && !create_empty_fragment) |
| 663 | return 0; | 633 | return 0; |
| 664 | 634 | ||
| 665 | wr= &(s->s3->wrec); | 635 | wr = &(s->s3->wrec); |
| 666 | sess=s->session; | 636 | sess = s->session; |
| 667 | 637 | ||
| 668 | if ( (sess == NULL) || | 638 | if ((sess == NULL) || (s->enc_write_ctx == NULL) || |
| 669 | (s->enc_write_ctx == NULL) || | 639 | (EVP_MD_CTX_md(s->write_hash) == NULL)) { |
| 670 | (EVP_MD_CTX_md(s->write_hash) == NULL)) | ||
| 671 | { | ||
| 672 | #if 1 | 640 | #if 1 |
| 673 | clear=s->enc_write_ctx?0:1; /* must be AEAD cipher */ | 641 | clear = s->enc_write_ctx ? 0 : 1; /* must be AEAD cipher */ |
| 674 | #else | 642 | #else |
| 675 | clear=1; | 643 | clear = 1; |
| 676 | #endif | 644 | #endif |
| 677 | mac_size=0; | 645 | mac_size = 0; |
| 678 | } | 646 | } else { |
| 679 | else | 647 | mac_size = EVP_MD_CTX_size(s->write_hash); |
| 680 | { | ||
| 681 | mac_size=EVP_MD_CTX_size(s->write_hash); | ||
| 682 | if (mac_size < 0) | 648 | if (mac_size < 0) |
| 683 | goto err; | 649 | goto err; |
| 684 | } | 650 | } |
| 685 | 651 | ||
| 686 | /* 'create_empty_fragment' is true only when this function calls itself */ | 652 | /* 'create_empty_fragment' is true only when this function calls itself */ |
| 687 | if (!clear && !create_empty_fragment && !s->s3->empty_fragment_done) | 653 | if (!clear && !create_empty_fragment && !s->s3->empty_fragment_done) { |
| 688 | { | ||
| 689 | /* countermeasure against known-IV weakness in CBC ciphersuites | 654 | /* countermeasure against known-IV weakness in CBC ciphersuites |
| 690 | * (see http://www.openssl.org/~bodo/tls-cbc.txt) */ | 655 | * (see http://www.openssl.org/~bodo/tls-cbc.txt) */ |
| 691 | 656 | ||
| 692 | if (s->s3->need_empty_fragments && type == SSL3_RT_APPLICATION_DATA) | 657 | if (s->s3->need_empty_fragments && type == SSL3_RT_APPLICATION_DATA) { |
| 693 | { | ||
| 694 | /* recursive function call with 'create_empty_fragment' set; | 658 | /* recursive function call with 'create_empty_fragment' set; |
| 695 | * this prepares and buffers the data for an empty fragment | 659 | * this prepares and buffers the data for an empty fragment |
| 696 | * (these 'prefix_len' bytes are sent out later | 660 | * (these 'prefix_len' bytes are sent out later |
| @@ -700,216 +664,195 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, | |||
| 700 | goto err; | 664 | goto err; |
| 701 | 665 | ||
| 702 | if (prefix_len > | 666 | if (prefix_len > |
| 703 | (SSL3_RT_HEADER_LENGTH + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD)) | 667 | (SSL3_RT_HEADER_LENGTH + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD)) { |
| 704 | { | ||
| 705 | /* insufficient space */ | 668 | /* insufficient space */ |
| 706 | SSLerr(SSL_F_DO_SSL3_WRITE, ERR_R_INTERNAL_ERROR); | 669 | SSLerr(SSL_F_DO_SSL3_WRITE, ERR_R_INTERNAL_ERROR); |
| 707 | goto err; | 670 | goto err; |
| 708 | } | ||
| 709 | } | 671 | } |
| 710 | |||
| 711 | s->s3->empty_fragment_done = 1; | ||
| 712 | } | 672 | } |
| 713 | 673 | ||
| 714 | if (create_empty_fragment) | 674 | s->s3->empty_fragment_done = 1; |
| 715 | { | 675 | } |
| 676 | |||
| 677 | if (create_empty_fragment) { | ||
| 716 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 678 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
| 717 | /* extra fragment would be couple of cipher blocks, | 679 | /* extra fragment would be couple of cipher blocks, |
| 718 | * which would be multiple of SSL3_ALIGN_PAYLOAD, so | 680 | * which would be multiple of SSL3_ALIGN_PAYLOAD, so |
| 719 | * if we want to align the real payload, then we can | 681 | * if we want to align the real payload, then we can |
| 720 | * just pretent we simply have two headers. */ | 682 | * just pretent we simply have two headers. */ |
| 721 | align = (long)wb->buf + 2*SSL3_RT_HEADER_LENGTH; | 683 | align = (long)wb->buf + 2*SSL3_RT_HEADER_LENGTH; |
| 722 | align = (-align)&(SSL3_ALIGN_PAYLOAD-1); | 684 | align = (-align)&(SSL3_ALIGN_PAYLOAD - 1); |
| 723 | #endif | 685 | #endif |
| 724 | p = wb->buf + align; | 686 | p = wb->buf + align; |
| 725 | wb->offset = align; | 687 | wb->offset = align; |
| 726 | } | 688 | } else if (prefix_len) { |
| 727 | else if (prefix_len) | ||
| 728 | { | ||
| 729 | p = wb->buf + wb->offset + prefix_len; | 689 | p = wb->buf + wb->offset + prefix_len; |
| 730 | } | 690 | } else { |
| 731 | else | ||
| 732 | { | ||
| 733 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 691 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
| 734 | align = (long)wb->buf + SSL3_RT_HEADER_LENGTH; | 692 | align = (long)wb->buf + SSL3_RT_HEADER_LENGTH; |
| 735 | align = (-align)&(SSL3_ALIGN_PAYLOAD-1); | 693 | align = (-align)&(SSL3_ALIGN_PAYLOAD - 1); |
| 736 | #endif | 694 | #endif |
| 737 | p = wb->buf + align; | 695 | p = wb->buf + align; |
| 738 | wb->offset = align; | 696 | wb->offset = align; |
| 739 | } | 697 | } |
| 740 | 698 | ||
| 741 | /* write the header */ | 699 | /* write the header */ |
| 742 | 700 | ||
| 743 | *(p++)=type&0xff; | 701 | *(p++) = type&0xff; |
| 744 | wr->type=type; | 702 | wr->type = type; |
| 745 | 703 | ||
| 746 | *(p++)=(s->version>>8); | 704 | *(p++) = (s->version >> 8); |
| 747 | /* Some servers hang if iniatial client hello is larger than 256 | 705 | /* Some servers hang if iniatial client hello is larger than 256 |
| 748 | * bytes and record version number > TLS 1.0 | 706 | * bytes and record version number > TLS 1.0 |
| 749 | */ | 707 | */ |
| 750 | if (s->state == SSL3_ST_CW_CLNT_HELLO_B | 708 | if (s->state == SSL3_ST_CW_CLNT_HELLO_B && !s->renegotiate && |
| 751 | && !s->renegotiate | 709 | TLS1_get_version(s) > TLS1_VERSION) |
| 752 | && TLS1_get_version(s) > TLS1_VERSION) | ||
| 753 | *(p++) = 0x1; | 710 | *(p++) = 0x1; |
| 754 | else | 711 | else |
| 755 | *(p++)=s->version&0xff; | 712 | *(p++) = s->version&0xff; |
| 756 | 713 | ||
| 757 | /* field where we are to write out packet length */ | 714 | /* field where we are to write out packet length */ |
| 758 | plen=p; | 715 | plen = p; |
| 759 | p+=2; | 716 | |
| 717 | p += 2; | ||
| 760 | /* Explicit IV length, block ciphers and TLS version 1.1 or later */ | 718 | /* Explicit IV length, block ciphers and TLS version 1.1 or later */ |
| 761 | if (s->enc_write_ctx && s->version >= TLS1_1_VERSION) | 719 | if (s->enc_write_ctx && s->version >= TLS1_1_VERSION) { |
| 762 | { | ||
| 763 | int mode = EVP_CIPHER_CTX_mode(s->enc_write_ctx); | 720 | int mode = EVP_CIPHER_CTX_mode(s->enc_write_ctx); |
| 764 | if (mode == EVP_CIPH_CBC_MODE) | 721 | if (mode == EVP_CIPH_CBC_MODE) { |
| 765 | { | ||
| 766 | eivlen = EVP_CIPHER_CTX_iv_length(s->enc_write_ctx); | 722 | eivlen = EVP_CIPHER_CTX_iv_length(s->enc_write_ctx); |
| 767 | if (eivlen <= 1) | 723 | if (eivlen <= 1) |
| 768 | eivlen = 0; | 724 | eivlen = 0; |
| 769 | } | 725 | } |
| 770 | /* Need explicit part of IV for GCM mode */ | 726 | /* Need explicit part of IV for GCM mode */ |
| 771 | else if (mode == EVP_CIPH_GCM_MODE) | 727 | else if (mode == EVP_CIPH_GCM_MODE) |
| 772 | eivlen = EVP_GCM_TLS_EXPLICIT_IV_LEN; | 728 | eivlen = EVP_GCM_TLS_EXPLICIT_IV_LEN; |
| 773 | else | 729 | else |
| 774 | eivlen = 0; | 730 | eivlen = 0; |
| 775 | } | 731 | } else |
| 776 | else | ||
| 777 | eivlen = 0; | 732 | eivlen = 0; |
| 778 | 733 | ||
| 779 | /* lets setup the record stuff. */ | 734 | /* lets setup the record stuff. */ |
| 780 | wr->data=p + eivlen; | 735 | wr->data = p + eivlen; |
| 781 | wr->length=(int)len; | 736 | wr->length = (int)len; |
| 782 | wr->input=(unsigned char *)buf; | 737 | wr->input = (unsigned char *)buf; |
| 783 | 738 | ||
| 784 | /* we now 'read' from wr->input, wr->length bytes into | 739 | /* we now 'read' from wr->input, wr->length bytes into |
| 785 | * wr->data */ | 740 | * wr->data */ |
| 786 | 741 | ||
| 787 | /* first we compress */ | 742 | /* first we compress */ |
| 788 | if (s->compress != NULL) | 743 | if (s->compress != NULL) { |
| 789 | { | 744 | if (!ssl3_do_compress(s)) { |
| 790 | if (!ssl3_do_compress(s)) | 745 | SSLerr(SSL_F_DO_SSL3_WRITE, SSL_R_COMPRESSION_FAILURE); |
| 791 | { | ||
| 792 | SSLerr(SSL_F_DO_SSL3_WRITE,SSL_R_COMPRESSION_FAILURE); | ||
| 793 | goto err; | 746 | goto err; |
| 794 | } | ||
| 795 | } | ||
| 796 | else | ||
| 797 | { | ||
| 798 | memcpy(wr->data,wr->input,wr->length); | ||
| 799 | wr->input=wr->data; | ||
| 800 | } | 747 | } |
| 748 | } else { | ||
| 749 | memcpy(wr->data, wr->input, wr->length); | ||
| 750 | wr->input = wr->data; | ||
| 751 | } | ||
| 801 | 752 | ||
| 802 | /* we should still have the output to wr->data and the input | 753 | /* we should still have the output to wr->data and the input |
| 803 | * from wr->input. Length should be wr->length. | 754 | * from wr->input. Length should be wr->length. |
| 804 | * wr->data still points in the wb->buf */ | 755 | * wr->data still points in the wb->buf */ |
| 805 | 756 | ||
| 806 | if (mac_size != 0) | 757 | if (mac_size != 0) { |
| 807 | { | 758 | if (s->method->ssl3_enc->mac(s, &(p[wr->length + eivlen]), 1) < 0) |
| 808 | if (s->method->ssl3_enc->mac(s,&(p[wr->length + eivlen]),1) < 0) | ||
| 809 | goto err; | 759 | goto err; |
| 810 | wr->length+=mac_size; | 760 | wr->length += mac_size; |
| 811 | } | 761 | } |
| 812 | 762 | ||
| 813 | wr->input=p; | 763 | wr->input = p; |
| 814 | wr->data=p; | 764 | wr->data = p; |
| 815 | 765 | ||
| 816 | if (eivlen) | 766 | if (eivlen) { |
| 817 | { | ||
| 818 | /* if (RAND_pseudo_bytes(p, eivlen) <= 0) | 767 | /* if (RAND_pseudo_bytes(p, eivlen) <= 0) |
| 819 | goto err; */ | 768 | goto err; |
| 769 | */ | ||
| 820 | wr->length += eivlen; | 770 | wr->length += eivlen; |
| 821 | } | 771 | } |
| 822 | 772 | ||
| 823 | /* ssl3_enc can only have an error on read */ | 773 | /* ssl3_enc can only have an error on read */ |
| 824 | s->method->ssl3_enc->enc(s,1); | 774 | s->method->ssl3_enc->enc(s, 1); |
| 825 | 775 | ||
| 826 | /* record length after mac and block padding */ | 776 | /* record length after mac and block padding */ |
| 827 | s2n(wr->length,plen); | 777 | s2n(wr->length, plen); |
| 828 | 778 | ||
| 829 | /* we should now have | 779 | /* we should now have |
| 830 | * wr->data pointing to the encrypted data, which is | 780 | * wr->data pointing to the encrypted data, which is |
| 831 | * wr->length long */ | 781 | * wr->length long */ |
| 832 | wr->type=type; /* not needed but helps for debugging */ | 782 | wr->type=type; /* not needed but helps for debugging */ |
| 833 | wr->length+=SSL3_RT_HEADER_LENGTH; | 783 | wr->length += SSL3_RT_HEADER_LENGTH; |
| 834 | 784 | ||
| 835 | if (create_empty_fragment) | 785 | if (create_empty_fragment) { |
| 836 | { | ||
| 837 | /* we are in a recursive call; | 786 | /* we are in a recursive call; |
| 838 | * just return the length, don't write out anything here | 787 | * just return the length, don't write out anything here |
| 839 | */ | 788 | */ |
| 840 | return wr->length; | 789 | return wr->length; |
| 841 | } | 790 | } |
| 842 | 791 | ||
| 843 | /* now let's set up wb */ | 792 | /* now let's set up wb */ |
| 844 | wb->left = prefix_len + wr->length; | 793 | wb->left = prefix_len + wr->length; |
| 845 | 794 | ||
| 846 | /* memorize arguments so that ssl3_write_pending can detect bad write retries later */ | 795 | /* memorize arguments so that ssl3_write_pending can detect bad write retries later */ |
| 847 | s->s3->wpend_tot=len; | 796 | s->s3->wpend_tot = len; |
| 848 | s->s3->wpend_buf=buf; | 797 | s->s3->wpend_buf = buf; |
| 849 | s->s3->wpend_type=type; | 798 | s->s3->wpend_type = type; |
| 850 | s->s3->wpend_ret=len; | 799 | s->s3->wpend_ret = len; |
| 851 | 800 | ||
| 852 | /* we now just need to write the buffer */ | 801 | /* we now just need to write the buffer */ |
| 853 | return ssl3_write_pending(s,type,buf,len); | 802 | return ssl3_write_pending(s, type, buf, len); |
| 854 | err: | 803 | err: |
| 855 | return -1; | 804 | return -1; |
| 856 | } | 805 | } |
| 857 | 806 | ||
| 858 | /* if s->s3->wbuf.left != 0, we need to call this */ | 807 | /* if s->s3->wbuf.left != 0, we need to call this */ |
| 859 | int ssl3_write_pending(SSL *s, int type, const unsigned char *buf, | 808 | int |
| 860 | unsigned int len) | 809 | ssl3_write_pending(SSL *s, int type, const unsigned char *buf, |
| 861 | { | 810 | unsigned int len) |
| 811 | { | ||
| 862 | int i; | 812 | int i; |
| 863 | SSL3_BUFFER *wb=&(s->s3->wbuf); | 813 | SSL3_BUFFER *wb = &(s->s3->wbuf); |
| 864 | 814 | ||
| 865 | /* XXXX */ | 815 | /* XXXX */ |
| 866 | if ((s->s3->wpend_tot > (int)len) | 816 | if ((s->s3->wpend_tot > (int)len) || ((s->s3->wpend_buf != buf) && |
| 867 | || ((s->s3->wpend_buf != buf) && | 817 | !(s->mode & SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER)) || |
| 868 | !(s->mode & SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER)) | 818 | (s->s3->wpend_type != type)) { |
| 869 | || (s->s3->wpend_type != type)) | 819 | SSLerr(SSL_F_SSL3_WRITE_PENDING, SSL_R_BAD_WRITE_RETRY); |
| 870 | { | 820 | return (-1); |
| 871 | SSLerr(SSL_F_SSL3_WRITE_PENDING,SSL_R_BAD_WRITE_RETRY); | 821 | } |
| 872 | return(-1); | ||
| 873 | } | ||
| 874 | 822 | ||
| 875 | for (;;) | 823 | for (;;) { |
| 876 | { | ||
| 877 | errno = 0; | 824 | errno = 0; |
| 878 | if (s->wbio != NULL) | 825 | if (s->wbio != NULL) { |
| 879 | { | 826 | s->rwstate = SSL_WRITING; |
| 880 | s->rwstate=SSL_WRITING; | 827 | i = BIO_write(s->wbio, |
| 881 | i=BIO_write(s->wbio, | 828 | (char *)&(wb->buf[wb->offset]), |
| 882 | (char *)&(wb->buf[wb->offset]), | 829 | (unsigned int)wb->left); |
| 883 | (unsigned int)wb->left); | 830 | } else { |
| 884 | } | 831 | SSLerr(SSL_F_SSL3_WRITE_PENDING, SSL_R_BIO_NOT_SET); |
| 885 | else | 832 | i = -1; |
| 886 | { | 833 | } |
| 887 | SSLerr(SSL_F_SSL3_WRITE_PENDING,SSL_R_BIO_NOT_SET); | 834 | if (i == wb->left) { |
| 888 | i= -1; | 835 | wb->left = 0; |
| 889 | } | 836 | wb->offset += i; |
| 890 | if (i == wb->left) | ||
| 891 | { | ||
| 892 | wb->left=0; | ||
| 893 | wb->offset+=i; | ||
| 894 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && | 837 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && |
| 895 | SSL_version(s) != DTLS1_VERSION && SSL_version(s) != DTLS1_BAD_VER) | 838 | SSL_version(s) != DTLS1_VERSION && |
| 839 | SSL_version(s) != DTLS1_BAD_VER) | ||
| 896 | ssl3_release_write_buffer(s); | 840 | ssl3_release_write_buffer(s); |
| 897 | s->rwstate=SSL_NOTHING; | 841 | s->rwstate = SSL_NOTHING; |
| 898 | return(s->s3->wpend_ret); | 842 | return (s->s3->wpend_ret); |
| 899 | } | 843 | } else if (i <= 0) { |
| 900 | else if (i <= 0) { | ||
| 901 | if (s->version == DTLS1_VERSION || | 844 | if (s->version == DTLS1_VERSION || |
| 902 | s->version == DTLS1_BAD_VER) { | 845 | s->version == DTLS1_BAD_VER) { |
| 903 | /* For DTLS, just drop it. That's kind of the whole | 846 | /* For DTLS, just drop it. That's kind of the whole |
| 904 | point in using a datagram service */ | 847 | point in using a datagram service */ |
| 905 | wb->left = 0; | 848 | wb->left = 0; |
| 906 | } | 849 | } |
| 907 | return(i); | 850 | return (i); |
| 908 | } | ||
| 909 | wb->offset+=i; | ||
| 910 | wb->left-=i; | ||
| 911 | } | 851 | } |
| 852 | wb->offset += i; | ||
| 853 | wb->left -= i; | ||
| 912 | } | 854 | } |
| 855 | } | ||
| 913 | 856 | ||
| 914 | /* Return up to 'len' payload bytes received in 'type' records. | 857 | /* Return up to 'len' payload bytes received in 'type' records. |
| 915 | * 'type' is one of the following: | 858 | * 'type' is one of the following: |
| @@ -938,39 +881,40 @@ int ssl3_write_pending(SSL *s, int type, const unsigned char *buf, | |||
| 938 | * Application data protocol | 881 | * Application data protocol |
| 939 | * none of our business | 882 | * none of our business |
| 940 | */ | 883 | */ |
| 941 | int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) | 884 | int |
| 942 | { | 885 | ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) |
| 943 | int al,i,j,ret; | 886 | { |
| 887 | int al, i, j, ret; | ||
| 944 | unsigned int n; | 888 | unsigned int n; |
| 945 | SSL3_RECORD *rr; | 889 | SSL3_RECORD *rr; |
| 946 | void (*cb)(const SSL *ssl,int type2,int val)=NULL; | 890 | void (*cb)(const SSL *ssl, int type2, int val) = NULL; |
| 947 | 891 | ||
| 948 | if (s->s3->rbuf.buf == NULL) /* Not initialized yet */ | 892 | if (s->s3->rbuf.buf == NULL) /* Not initialized yet */ |
| 949 | if (!ssl3_setup_read_buffer(s)) | 893 | if (!ssl3_setup_read_buffer(s)) |
| 950 | return(-1); | 894 | return (-1); |
| 951 | 895 | ||
| 952 | if ((type && (type != SSL3_RT_APPLICATION_DATA) && (type != SSL3_RT_HANDSHAKE) && type) || | 896 | if ((type && (type != SSL3_RT_APPLICATION_DATA) && |
| 953 | (peek && (type != SSL3_RT_APPLICATION_DATA))) | 897 | (type != SSL3_RT_HANDSHAKE) && type) || |
| 954 | { | 898 | (peek && (type != SSL3_RT_APPLICATION_DATA))) { |
| 955 | SSLerr(SSL_F_SSL3_READ_BYTES, ERR_R_INTERNAL_ERROR); | 899 | SSLerr(SSL_F_SSL3_READ_BYTES, ERR_R_INTERNAL_ERROR); |
| 956 | return -1; | 900 | return -1; |
| 957 | } | 901 | } |
| 958 | 902 | ||
| 959 | if ((type == SSL3_RT_HANDSHAKE) && (s->s3->handshake_fragment_len > 0)) | 903 | if ((type == SSL3_RT_HANDSHAKE) && (s->s3->handshake_fragment_len > 0)) |
| 960 | /* (partially) satisfy request from storage */ | 904 | /* (partially) satisfy request from storage */ |
| 961 | { | 905 | { |
| 962 | unsigned char *src = s->s3->handshake_fragment; | 906 | unsigned char *src = s->s3->handshake_fragment; |
| 963 | unsigned char *dst = buf; | 907 | unsigned char *dst = buf; |
| 964 | unsigned int k; | 908 | unsigned int k; |
| 965 | 909 | ||
| 966 | /* peek == 0 */ | 910 | /* peek == 0 */ |
| 967 | n = 0; | 911 | n = 0; |
| 968 | while ((len > 0) && (s->s3->handshake_fragment_len > 0)) | 912 | while ((len > 0) && (s->s3->handshake_fragment_len > 0)) { |
| 969 | { | ||
| 970 | *dst++ = *src++; | 913 | *dst++ = *src++; |
| 971 | len--; s->s3->handshake_fragment_len--; | 914 | len--; |
| 915 | s->s3->handshake_fragment_len--; | ||
| 972 | n++; | 916 | n++; |
| 973 | } | 917 | } |
| 974 | /* move any remaining fragment bytes: */ | 918 | /* move any remaining fragment bytes: */ |
| 975 | for (k = 0; k < s->s3->handshake_fragment_len; k++) | 919 | for (k = 0; k < s->s3->handshake_fragment_len; k++) |
| 976 | s->s3->handshake_fragment[k] = *src++; | 920 | s->s3->handshake_fragment[k] = *src++; |
| @@ -979,19 +923,18 @@ int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) | |||
| 979 | 923 | ||
| 980 | /* Now s->s3->handshake_fragment_len == 0 if type == SSL3_RT_HANDSHAKE. */ | 924 | /* Now s->s3->handshake_fragment_len == 0 if type == SSL3_RT_HANDSHAKE. */ |
| 981 | 925 | ||
| 982 | if (!s->in_handshake && SSL_in_init(s)) | 926 | if (!s->in_handshake && SSL_in_init(s)) { |
| 983 | { | ||
| 984 | /* type == SSL3_RT_APPLICATION_DATA */ | 927 | /* type == SSL3_RT_APPLICATION_DATA */ |
| 985 | i=s->handshake_func(s); | 928 | i = s->handshake_func(s); |
| 986 | if (i < 0) return(i); | 929 | if (i < 0) |
| 987 | if (i == 0) | 930 | return (i); |
| 988 | { | 931 | if (i == 0) { |
| 989 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE); | 932 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); |
| 990 | return(-1); | 933 | return (-1); |
| 991 | } | ||
| 992 | } | 934 | } |
| 935 | } | ||
| 993 | start: | 936 | start: |
| 994 | s->rwstate=SSL_NOTHING; | 937 | s->rwstate = SSL_NOTHING; |
| 995 | 938 | ||
| 996 | /* s->s3->rrec.type - is the type of record | 939 | /* s->s3->rrec.type - is the type of record |
| 997 | * s->s3->rrec.data, - data | 940 | * s->s3->rrec.data, - data |
| @@ -1000,67 +943,63 @@ start: | |||
| 1000 | rr = &(s->s3->rrec); | 943 | rr = &(s->s3->rrec); |
| 1001 | 944 | ||
| 1002 | /* get new packet if necessary */ | 945 | /* get new packet if necessary */ |
| 1003 | if ((rr->length == 0) || (s->rstate == SSL_ST_READ_BODY)) | 946 | if ((rr->length == 0) || (s->rstate == SSL_ST_READ_BODY)) { |
| 1004 | { | 947 | ret = ssl3_get_record(s); |
| 1005 | ret=ssl3_get_record(s); | 948 | if (ret <= 0) |
| 1006 | if (ret <= 0) return(ret); | 949 | return (ret); |
| 1007 | } | 950 | } |
| 1008 | 951 | ||
| 1009 | /* we now have a packet which can be read and processed */ | 952 | /* we now have a packet which can be read and processed */ |
| 1010 | 953 | ||
| 1011 | if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec, | 954 | if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec, |
| 1012 | * reset by ssl3_get_finished */ | 955 | * reset by ssl3_get_finished */ |
| 1013 | && (rr->type != SSL3_RT_HANDSHAKE)) | 956 | && (rr->type != SSL3_RT_HANDSHAKE)) { |
| 1014 | { | 957 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 1015 | al=SSL_AD_UNEXPECTED_MESSAGE; | 958 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_DATA_BETWEEN_CCS_AND_FINISHED); |
| 1016 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_DATA_BETWEEN_CCS_AND_FINISHED); | ||
| 1017 | goto f_err; | 959 | goto f_err; |
| 1018 | } | 960 | } |
| 1019 | 961 | ||
| 1020 | /* If the other end has shut down, throw anything we read away | 962 | /* If the other end has shut down, throw anything we read away |
| 1021 | * (even in 'peek' mode) */ | 963 | * (even in 'peek' mode) */ |
| 1022 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) | 964 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) { |
| 1023 | { | 965 | rr->length = 0; |
| 1024 | rr->length=0; | 966 | s->rwstate = SSL_NOTHING; |
| 1025 | s->rwstate=SSL_NOTHING; | 967 | return (0); |
| 1026 | return(0); | 968 | } |
| 1027 | } | ||
| 1028 | 969 | ||
| 1029 | 970 | ||
| 1030 | if (type == rr->type) /* SSL3_RT_APPLICATION_DATA or SSL3_RT_HANDSHAKE */ | 971 | if (type == rr->type) /* SSL3_RT_APPLICATION_DATA or SSL3_RT_HANDSHAKE */ |
| 1031 | { | 972 | { |
| 1032 | /* make sure that we are not getting application data when we | 973 | /* make sure that we are not getting application data when we |
| 1033 | * are doing a handshake for the first time */ | 974 | * are doing a handshake for the first time */ |
| 1034 | if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) && | 975 | if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) && |
| 1035 | (s->enc_read_ctx == NULL)) | 976 | (s->enc_read_ctx == NULL)) { |
| 1036 | { | 977 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 1037 | al=SSL_AD_UNEXPECTED_MESSAGE; | 978 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_APP_DATA_IN_HANDSHAKE); |
| 1038 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_APP_DATA_IN_HANDSHAKE); | ||
| 1039 | goto f_err; | 979 | goto f_err; |
| 1040 | } | 980 | } |
| 1041 | 981 | ||
| 1042 | if (len <= 0) return(len); | 982 | if (len <= 0) |
| 983 | return (len); | ||
| 1043 | 984 | ||
| 1044 | if ((unsigned int)len > rr->length) | 985 | if ((unsigned int)len > rr->length) |
| 1045 | n = rr->length; | 986 | n = rr->length; |
| 1046 | else | 987 | else |
| 1047 | n = (unsigned int)len; | 988 | n = (unsigned int)len; |
| 1048 | 989 | ||
| 1049 | memcpy(buf,&(rr->data[rr->off]),n); | 990 | memcpy(buf, &(rr->data[rr->off]), n); |
| 1050 | if (!peek) | 991 | if (!peek) { |
| 1051 | { | 992 | rr->length -= n; |
| 1052 | rr->length-=n; | 993 | rr->off += n; |
| 1053 | rr->off+=n; | 994 | if (rr->length == 0) { |
| 1054 | if (rr->length == 0) | 995 | s->rstate = SSL_ST_READ_HEADER; |
| 1055 | { | 996 | rr->off = 0; |
| 1056 | s->rstate=SSL_ST_READ_HEADER; | ||
| 1057 | rr->off=0; | ||
| 1058 | if (s->mode & SSL_MODE_RELEASE_BUFFERS) | 997 | if (s->mode & SSL_MODE_RELEASE_BUFFERS) |
| 1059 | ssl3_release_read_buffer(s); | 998 | ssl3_release_read_buffer(s); |
| 1060 | } | ||
| 1061 | } | 999 | } |
| 1062 | return(n); | ||
| 1063 | } | 1000 | } |
| 1001 | return (n); | ||
| 1002 | } | ||
| 1064 | 1003 | ||
| 1065 | 1004 | ||
| 1066 | /* If we get here, then type != rr->type; if we have a handshake | 1005 | /* If we get here, then type != rr->type; if we have a handshake |
| @@ -1069,137 +1008,122 @@ start: | |||
| 1069 | /* In case of record types for which we have 'fragment' storage, | 1008 | /* In case of record types for which we have 'fragment' storage, |
| 1070 | * fill that so that we can process the data at a fixed place. | 1009 | * fill that so that we can process the data at a fixed place. |
| 1071 | */ | 1010 | */ |
| 1072 | { | 1011 | { |
| 1073 | unsigned int dest_maxlen = 0; | 1012 | unsigned int dest_maxlen = 0; |
| 1074 | unsigned char *dest = NULL; | 1013 | unsigned char *dest = NULL; |
| 1075 | unsigned int *dest_len = NULL; | 1014 | unsigned int *dest_len = NULL; |
| 1076 | 1015 | ||
| 1077 | if (rr->type == SSL3_RT_HANDSHAKE) | 1016 | if (rr->type == SSL3_RT_HANDSHAKE) { |
| 1078 | { | ||
| 1079 | dest_maxlen = sizeof s->s3->handshake_fragment; | 1017 | dest_maxlen = sizeof s->s3->handshake_fragment; |
| 1080 | dest = s->s3->handshake_fragment; | 1018 | dest = s->s3->handshake_fragment; |
| 1081 | dest_len = &s->s3->handshake_fragment_len; | 1019 | dest_len = &s->s3->handshake_fragment_len; |
| 1082 | } | 1020 | } else if (rr->type == SSL3_RT_ALERT) { |
| 1083 | else if (rr->type == SSL3_RT_ALERT) | ||
| 1084 | { | ||
| 1085 | dest_maxlen = sizeof s->s3->alert_fragment; | 1021 | dest_maxlen = sizeof s->s3->alert_fragment; |
| 1086 | dest = s->s3->alert_fragment; | 1022 | dest = s->s3->alert_fragment; |
| 1087 | dest_len = &s->s3->alert_fragment_len; | 1023 | dest_len = &s->s3->alert_fragment_len; |
| 1088 | } | 1024 | } |
| 1089 | #ifndef OPENSSL_NO_HEARTBEATS | 1025 | #ifndef OPENSSL_NO_HEARTBEATS |
| 1090 | else if (rr->type == TLS1_RT_HEARTBEAT) | 1026 | else if (rr->type == TLS1_RT_HEARTBEAT) { |
| 1091 | { | ||
| 1092 | tls1_process_heartbeat(s); | 1027 | tls1_process_heartbeat(s); |
| 1093 | 1028 | ||
| 1094 | /* Exit and notify application to read again */ | 1029 | /* Exit and notify application to read again */ |
| 1095 | rr->length = 0; | 1030 | rr->length = 0; |
| 1096 | s->rwstate=SSL_READING; | 1031 | s->rwstate = SSL_READING; |
| 1097 | BIO_clear_retry_flags(SSL_get_rbio(s)); | 1032 | BIO_clear_retry_flags(SSL_get_rbio(s)); |
| 1098 | BIO_set_retry_read(SSL_get_rbio(s)); | 1033 | BIO_set_retry_read(SSL_get_rbio(s)); |
| 1099 | return(-1); | 1034 | return (-1); |
| 1100 | } | 1035 | } |
| 1101 | #endif | 1036 | #endif |
| 1102 | 1037 | ||
| 1103 | if (dest_maxlen > 0) | 1038 | if (dest_maxlen > 0) { |
| 1104 | { | ||
| 1105 | n = dest_maxlen - *dest_len; /* available space in 'dest' */ | 1039 | n = dest_maxlen - *dest_len; /* available space in 'dest' */ |
| 1106 | if (rr->length < n) | 1040 | if (rr->length < n) |
| 1107 | n = rr->length; /* available bytes */ | 1041 | n = rr->length; /* available bytes */ |
| 1108 | 1042 | ||
| 1109 | /* now move 'n' bytes: */ | 1043 | /* now move 'n' bytes: */ |
| 1110 | while (n-- > 0) | 1044 | while (n-- > 0) { |
| 1111 | { | ||
| 1112 | dest[(*dest_len)++] = rr->data[rr->off++]; | 1045 | dest[(*dest_len)++] = rr->data[rr->off++]; |
| 1113 | rr->length--; | 1046 | rr->length--; |
| 1114 | } | 1047 | } |
| 1115 | 1048 | ||
| 1116 | if (*dest_len < dest_maxlen) | 1049 | if (*dest_len < dest_maxlen) |
| 1117 | goto start; /* fragment was too small */ | 1050 | goto start; /* fragment was too small */ |
| 1118 | } | ||
| 1119 | } | 1051 | } |
| 1052 | } | ||
| 1120 | 1053 | ||
| 1121 | /* s->s3->handshake_fragment_len == 4 iff rr->type == SSL3_RT_HANDSHAKE; | 1054 | /* s->s3->handshake_fragment_len == 4 iff rr->type == SSL3_RT_HANDSHAKE; |
| 1122 | * s->s3->alert_fragment_len == 2 iff rr->type == SSL3_RT_ALERT. | 1055 | * s->s3->alert_fragment_len == 2 iff rr->type == SSL3_RT_ALERT. |
| 1123 | * (Possibly rr is 'empty' now, i.e. rr->length may be 0.) */ | 1056 | * (Possibly rr is 'empty' now, i.e. rr->length may be 0.) */ |
| 1124 | 1057 | ||
| 1125 | /* If we are a client, check for an incoming 'Hello Request': */ | 1058 | /* If we are a client, check for an incoming 'Hello Request': */ |
| 1126 | if ((!s->server) && | 1059 | if ((!s->server) && (s->s3->handshake_fragment_len >= 4) && |
| 1127 | (s->s3->handshake_fragment_len >= 4) && | 1060 | (s->s3->handshake_fragment[0] == SSL3_MT_HELLO_REQUEST) && |
| 1128 | (s->s3->handshake_fragment[0] == SSL3_MT_HELLO_REQUEST) && | 1061 | (s->session != NULL) && (s->session->cipher != NULL)) { |
| 1129 | (s->session != NULL) && (s->session->cipher != NULL)) | ||
| 1130 | { | ||
| 1131 | s->s3->handshake_fragment_len = 0; | 1062 | s->s3->handshake_fragment_len = 0; |
| 1132 | 1063 | ||
| 1133 | if ((s->s3->handshake_fragment[1] != 0) || | 1064 | if ((s->s3->handshake_fragment[1] != 0) || |
| 1134 | (s->s3->handshake_fragment[2] != 0) || | 1065 | (s->s3->handshake_fragment[2] != 0) || |
| 1135 | (s->s3->handshake_fragment[3] != 0)) | 1066 | (s->s3->handshake_fragment[3] != 0)) { |
| 1136 | { | 1067 | al = SSL_AD_DECODE_ERROR; |
| 1137 | al=SSL_AD_DECODE_ERROR; | 1068 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_BAD_HELLO_REQUEST); |
| 1138 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_BAD_HELLO_REQUEST); | ||
| 1139 | goto f_err; | 1069 | goto f_err; |
| 1140 | } | 1070 | } |
| 1141 | 1071 | ||
| 1142 | if (s->msg_callback) | 1072 | if (s->msg_callback) |
| 1143 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->s3->handshake_fragment, 4, s, s->msg_callback_arg); | 1073 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->s3->handshake_fragment, 4, s, s->msg_callback_arg); |
| 1144 | 1074 | ||
| 1145 | if (SSL_is_init_finished(s) && | 1075 | if (SSL_is_init_finished(s) && |
| 1146 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && | 1076 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && |
| 1147 | !s->s3->renegotiate) | 1077 | !s->s3->renegotiate) { |
| 1148 | { | ||
| 1149 | ssl3_renegotiate(s); | 1078 | ssl3_renegotiate(s); |
| 1150 | if (ssl3_renegotiate_check(s)) | 1079 | if (ssl3_renegotiate_check(s)) { |
| 1151 | { | 1080 | i = s->handshake_func(s); |
| 1152 | i=s->handshake_func(s); | 1081 | if (i < 0) |
| 1153 | if (i < 0) return(i); | 1082 | return (i); |
| 1154 | if (i == 0) | 1083 | if (i == 0) { |
| 1155 | { | 1084 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); |
| 1156 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE); | 1085 | return (-1); |
| 1157 | return(-1); | 1086 | } |
| 1158 | } | ||
| 1159 | 1087 | ||
| 1160 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) | 1088 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) { |
| 1161 | { | ||
| 1162 | if (s->s3->rbuf.left == 0) /* no read-ahead left? */ | 1089 | if (s->s3->rbuf.left == 0) /* no read-ahead left? */ |
| 1163 | { | 1090 | { |
| 1164 | BIO *bio; | 1091 | BIO *bio; |
| 1165 | /* In the case where we try to read application data, | 1092 | /* In the case where we try to read application data, |
| 1166 | * but we trigger an SSL handshake, we return -1 with | 1093 | * but we trigger an SSL handshake, we return -1 with |
| 1167 | * the retry option set. Otherwise renegotiation may | 1094 | * the retry option set. Otherwise renegotiation may |
| 1168 | * cause nasty problems in the blocking world */ | 1095 | * cause nasty problems in the blocking world */ |
| 1169 | s->rwstate=SSL_READING; | 1096 | s->rwstate = SSL_READING; |
| 1170 | bio=SSL_get_rbio(s); | 1097 | bio = SSL_get_rbio(s); |
| 1171 | BIO_clear_retry_flags(bio); | 1098 | BIO_clear_retry_flags(bio); |
| 1172 | BIO_set_retry_read(bio); | 1099 | BIO_set_retry_read(bio); |
| 1173 | return(-1); | 1100 | return (-1); |
| 1174 | } | ||
| 1175 | } | 1101 | } |
| 1176 | } | 1102 | } |
| 1177 | } | 1103 | } |
| 1104 | } | ||
| 1178 | /* we either finished a handshake or ignored the request, | 1105 | /* we either finished a handshake or ignored the request, |
| 1179 | * now try again to obtain the (application) data we were asked for */ | 1106 | * now try again to obtain the (application) data we were asked for */ |
| 1180 | goto start; | 1107 | goto start; |
| 1181 | } | 1108 | } |
| 1182 | /* If we are a server and get a client hello when renegotiation isn't | 1109 | /* If we are a server and get a client hello when renegotiation isn't |
| 1183 | * allowed send back a no renegotiation alert and carry on. | 1110 | * allowed send back a no renegotiation alert and carry on. |
| 1184 | * WARNING: experimental code, needs reviewing (steve) | 1111 | * WARNING: experimental code, needs reviewing (steve) |
| 1185 | */ | 1112 | */ |
| 1186 | if (s->server && | 1113 | if (s->server && |
| 1187 | SSL_is_init_finished(s) && | 1114 | SSL_is_init_finished(s) && |
| 1188 | !s->s3->send_connection_binding && | 1115 | !s->s3->send_connection_binding && |
| 1189 | (s->version > SSL3_VERSION) && | 1116 | (s->version > SSL3_VERSION) && |
| 1190 | (s->s3->handshake_fragment_len >= 4) && | 1117 | (s->s3->handshake_fragment_len >= 4) && |
| 1191 | (s->s3->handshake_fragment[0] == SSL3_MT_CLIENT_HELLO) && | 1118 | (s->s3->handshake_fragment[0] == SSL3_MT_CLIENT_HELLO) && |
| 1192 | (s->session != NULL) && (s->session->cipher != NULL) && | 1119 | (s->session != NULL) && (s->session->cipher != NULL) && |
| 1193 | !(s->ctx->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) | 1120 | !(s->ctx->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) { |
| 1194 | |||
| 1195 | { | ||
| 1196 | /*s->s3->handshake_fragment_len = 0;*/ | 1121 | /*s->s3->handshake_fragment_len = 0;*/ |
| 1197 | rr->length = 0; | 1122 | rr->length = 0; |
| 1198 | ssl3_send_alert(s,SSL3_AL_WARNING, SSL_AD_NO_RENEGOTIATION); | 1123 | ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_NO_RENEGOTIATION); |
| 1199 | goto start; | 1124 | goto start; |
| 1200 | } | 1125 | } |
| 1201 | if (s->s3->alert_fragment_len >= 2) | 1126 | if (s->s3->alert_fragment_len >= 2) { |
| 1202 | { | ||
| 1203 | int alert_level = s->s3->alert_fragment[0]; | 1127 | int alert_level = s->s3->alert_fragment[0]; |
| 1204 | int alert_descr = s->s3->alert_fragment[1]; | 1128 | int alert_descr = s->s3->alert_fragment[1]; |
| 1205 | 1129 | ||
| @@ -1209,24 +1133,22 @@ start: | |||
| 1209 | s->msg_callback(0, s->version, SSL3_RT_ALERT, s->s3->alert_fragment, 2, s, s->msg_callback_arg); | 1133 | s->msg_callback(0, s->version, SSL3_RT_ALERT, s->s3->alert_fragment, 2, s, s->msg_callback_arg); |
| 1210 | 1134 | ||
| 1211 | if (s->info_callback != NULL) | 1135 | if (s->info_callback != NULL) |
| 1212 | cb=s->info_callback; | 1136 | cb = s->info_callback; |
| 1213 | else if (s->ctx->info_callback != NULL) | 1137 | else if (s->ctx->info_callback != NULL) |
| 1214 | cb=s->ctx->info_callback; | 1138 | cb = s->ctx->info_callback; |
| 1215 | 1139 | ||
| 1216 | if (cb != NULL) | 1140 | if (cb != NULL) { |
| 1217 | { | ||
| 1218 | j = (alert_level << 8) | alert_descr; | 1141 | j = (alert_level << 8) | alert_descr; |
| 1219 | cb(s, SSL_CB_READ_ALERT, j); | 1142 | cb(s, SSL_CB_READ_ALERT, j); |
| 1220 | } | 1143 | } |
| 1221 | 1144 | ||
| 1222 | if (alert_level == 1) /* warning */ | 1145 | if (alert_level == 1) /* warning */ |
| 1223 | { | 1146 | { |
| 1224 | s->s3->warn_alert = alert_descr; | 1147 | s->s3->warn_alert = alert_descr; |
| 1225 | if (alert_descr == SSL_AD_CLOSE_NOTIFY) | 1148 | if (alert_descr == SSL_AD_CLOSE_NOTIFY) { |
| 1226 | { | ||
| 1227 | s->shutdown |= SSL_RECEIVED_SHUTDOWN; | 1149 | s->shutdown |= SSL_RECEIVED_SHUTDOWN; |
| 1228 | return(0); | 1150 | return (0); |
| 1229 | } | 1151 | } |
| 1230 | /* This is a warning but we receive it if we requested | 1152 | /* This is a warning but we receive it if we requested |
| 1231 | * renegotiation and the peer denied it. Terminate with | 1153 | * renegotiation and the peer denied it. Terminate with |
| 1232 | * a fatal alert because if application tried to | 1154 | * a fatal alert because if application tried to |
| @@ -1236,139 +1158,126 @@ start: | |||
| 1236 | * In future we might have a renegotiation where we | 1158 | * In future we might have a renegotiation where we |
| 1237 | * don't care if the peer refused it where we carry on. | 1159 | * don't care if the peer refused it where we carry on. |
| 1238 | */ | 1160 | */ |
| 1239 | else if (alert_descr == SSL_AD_NO_RENEGOTIATION) | 1161 | else if (alert_descr == SSL_AD_NO_RENEGOTIATION) { |
| 1240 | { | ||
| 1241 | al = SSL_AD_HANDSHAKE_FAILURE; | 1162 | al = SSL_AD_HANDSHAKE_FAILURE; |
| 1242 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_NO_RENEGOTIATION); | 1163 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_NO_RENEGOTIATION); |
| 1243 | goto f_err; | 1164 | goto f_err; |
| 1244 | } | 1165 | } |
| 1245 | #ifdef SSL_AD_MISSING_SRP_USERNAME | 1166 | #ifdef SSL_AD_MISSING_SRP_USERNAME |
| 1246 | else if (alert_descr == SSL_AD_MISSING_SRP_USERNAME) | 1167 | else if (alert_descr == SSL_AD_MISSING_SRP_USERNAME) |
| 1247 | return(0); | 1168 | return (0); |
| 1248 | #endif | 1169 | #endif |
| 1249 | } | 1170 | } else if (alert_level == 2) /* fatal */ |
| 1250 | else if (alert_level == 2) /* fatal */ | 1171 | { |
| 1251 | { | ||
| 1252 | char tmp[16]; | 1172 | char tmp[16]; |
| 1253 | 1173 | ||
| 1254 | s->rwstate=SSL_NOTHING; | 1174 | s->rwstate = SSL_NOTHING; |
| 1255 | s->s3->fatal_alert = alert_descr; | 1175 | s->s3->fatal_alert = alert_descr; |
| 1256 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_AD_REASON_OFFSET + alert_descr); | 1176 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_AD_REASON_OFFSET + alert_descr); |
| 1257 | BIO_snprintf(tmp,sizeof tmp,"%d",alert_descr); | 1177 | BIO_snprintf(tmp, sizeof tmp, "%d", alert_descr); |
| 1258 | ERR_add_error_data(2,"SSL alert number ",tmp); | 1178 | ERR_add_error_data(2, "SSL alert number ", tmp); |
| 1259 | s->shutdown|=SSL_RECEIVED_SHUTDOWN; | 1179 | s->shutdown|=SSL_RECEIVED_SHUTDOWN; |
| 1260 | SSL_CTX_remove_session(s->ctx,s->session); | 1180 | SSL_CTX_remove_session(s->ctx, s->session); |
| 1261 | return(0); | 1181 | return (0); |
| 1262 | } | 1182 | } else { |
| 1263 | else | 1183 | al = SSL_AD_ILLEGAL_PARAMETER; |
| 1264 | { | 1184 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_UNKNOWN_ALERT_TYPE); |
| 1265 | al=SSL_AD_ILLEGAL_PARAMETER; | ||
| 1266 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNKNOWN_ALERT_TYPE); | ||
| 1267 | goto f_err; | 1185 | goto f_err; |
| 1268 | } | 1186 | } |
| 1269 | 1187 | ||
| 1270 | goto start; | 1188 | goto start; |
| 1271 | } | 1189 | } |
| 1272 | 1190 | ||
| 1273 | if (s->shutdown & SSL_SENT_SHUTDOWN) /* but we have not received a shutdown */ | 1191 | if (s->shutdown & SSL_SENT_SHUTDOWN) /* but we have not received a shutdown */ |
| 1274 | { | 1192 | { |
| 1275 | s->rwstate=SSL_NOTHING; | 1193 | s->rwstate = SSL_NOTHING; |
| 1276 | rr->length=0; | 1194 | rr->length = 0; |
| 1277 | return(0); | 1195 | return (0); |
| 1278 | } | 1196 | } |
| 1279 | 1197 | ||
| 1280 | if (rr->type == SSL3_RT_CHANGE_CIPHER_SPEC) | 1198 | if (rr->type == SSL3_RT_CHANGE_CIPHER_SPEC) { |
| 1281 | { | ||
| 1282 | /* 'Change Cipher Spec' is just a single byte, so we know | 1199 | /* 'Change Cipher Spec' is just a single byte, so we know |
| 1283 | * exactly what the record payload has to look like */ | 1200 | * exactly what the record payload has to look like */ |
| 1284 | if ( (rr->length != 1) || (rr->off != 0) || | 1201 | if ((rr->length != 1) || (rr->off != 0) || |
| 1285 | (rr->data[0] != SSL3_MT_CCS)) | 1202 | (rr->data[0] != SSL3_MT_CCS)) { |
| 1286 | { | 1203 | al = SSL_AD_ILLEGAL_PARAMETER; |
| 1287 | al=SSL_AD_ILLEGAL_PARAMETER; | 1204 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_BAD_CHANGE_CIPHER_SPEC); |
| 1288 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_BAD_CHANGE_CIPHER_SPEC); | ||
| 1289 | goto f_err; | 1205 | goto f_err; |
| 1290 | } | 1206 | } |
| 1291 | 1207 | ||
| 1292 | /* Check we have a cipher to change to */ | 1208 | /* Check we have a cipher to change to */ |
| 1293 | if (s->s3->tmp.new_cipher == NULL) | 1209 | if (s->s3->tmp.new_cipher == NULL) { |
| 1294 | { | 1210 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 1295 | al=SSL_AD_UNEXPECTED_MESSAGE; | 1211 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_CCS_RECEIVED_EARLY); |
| 1296 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_CCS_RECEIVED_EARLY); | ||
| 1297 | goto f_err; | 1212 | goto f_err; |
| 1298 | } | 1213 | } |
| 1299 | 1214 | ||
| 1300 | rr->length=0; | 1215 | rr->length = 0; |
| 1301 | 1216 | ||
| 1302 | if (s->msg_callback) | 1217 | if (s->msg_callback) |
| 1303 | s->msg_callback(0, s->version, SSL3_RT_CHANGE_CIPHER_SPEC, rr->data, 1, s, s->msg_callback_arg); | 1218 | s->msg_callback(0, s->version, SSL3_RT_CHANGE_CIPHER_SPEC, rr->data, 1, s, s->msg_callback_arg); |
| 1304 | 1219 | ||
| 1305 | s->s3->change_cipher_spec=1; | 1220 | s->s3->change_cipher_spec = 1; |
| 1306 | if (!ssl3_do_change_cipher_spec(s)) | 1221 | if (!ssl3_do_change_cipher_spec(s)) |
| 1307 | goto err; | 1222 | goto err; |
| 1308 | else | 1223 | else |
| 1309 | goto start; | 1224 | goto start; |
| 1310 | } | 1225 | } |
| 1311 | 1226 | ||
| 1312 | /* Unexpected handshake message (Client Hello, or protocol violation) */ | 1227 | /* Unexpected handshake message (Client Hello, or protocol violation) */ |
| 1313 | if ((s->s3->handshake_fragment_len >= 4) && !s->in_handshake) | 1228 | if ((s->s3->handshake_fragment_len >= 4) && !s->in_handshake) { |
| 1314 | { | ||
| 1315 | if (((s->state&SSL_ST_MASK) == SSL_ST_OK) && | 1229 | if (((s->state&SSL_ST_MASK) == SSL_ST_OK) && |
| 1316 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)) | 1230 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)) { |
| 1317 | { | ||
| 1318 | #if 0 /* worked only because C operator preferences are not as expected (and | 1231 | #if 0 /* worked only because C operator preferences are not as expected (and |
| 1319 | * because this is not really needed for clients except for detecting | 1232 | * because this is not really needed for clients except for detecting |
| 1320 | * protocol violations): */ | 1233 | * protocol violations): */ |
| 1321 | s->state=SSL_ST_BEFORE|(s->server) | 1234 | s->state = SSL_ST_BEFORE | |
| 1322 | ?SSL_ST_ACCEPT | 1235 | (s->server) ? SSL_ST_ACCEPT : SSL_ST_CONNECT; |
| 1323 | :SSL_ST_CONNECT; | ||
| 1324 | #else | 1236 | #else |
| 1325 | s->state = s->server ? SSL_ST_ACCEPT : SSL_ST_CONNECT; | 1237 | s->state = s->server ? SSL_ST_ACCEPT : SSL_ST_CONNECT; |
| 1326 | #endif | 1238 | #endif |
| 1327 | s->renegotiate=1; | 1239 | s->renegotiate = 1; |
| 1328 | s->new_session=1; | 1240 | s->new_session = 1; |
| 1329 | } | 1241 | } |
| 1330 | i=s->handshake_func(s); | 1242 | i = s->handshake_func(s); |
| 1331 | if (i < 0) return(i); | 1243 | if (i < 0) |
| 1332 | if (i == 0) | 1244 | return (i); |
| 1333 | { | 1245 | if (i == 0) { |
| 1334 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE); | 1246 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); |
| 1335 | return(-1); | 1247 | return (-1); |
| 1336 | } | 1248 | } |
| 1337 | 1249 | ||
| 1338 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) | 1250 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) { |
| 1339 | { | ||
| 1340 | if (s->s3->rbuf.left == 0) /* no read-ahead left? */ | 1251 | if (s->s3->rbuf.left == 0) /* no read-ahead left? */ |
| 1341 | { | 1252 | { |
| 1342 | BIO *bio; | 1253 | BIO *bio; |
| 1343 | /* In the case where we try to read application data, | 1254 | /* In the case where we try to read application data, |
| 1344 | * but we trigger an SSL handshake, we return -1 with | 1255 | * but we trigger an SSL handshake, we return -1 with |
| 1345 | * the retry option set. Otherwise renegotiation may | 1256 | * the retry option set. Otherwise renegotiation may |
| 1346 | * cause nasty problems in the blocking world */ | 1257 | * cause nasty problems in the blocking world */ |
| 1347 | s->rwstate=SSL_READING; | 1258 | s->rwstate = SSL_READING; |
| 1348 | bio=SSL_get_rbio(s); | 1259 | bio = SSL_get_rbio(s); |
| 1349 | BIO_clear_retry_flags(bio); | 1260 | BIO_clear_retry_flags(bio); |
| 1350 | BIO_set_retry_read(bio); | 1261 | BIO_set_retry_read(bio); |
| 1351 | return(-1); | 1262 | return (-1); |
| 1352 | } | ||
| 1353 | } | 1263 | } |
| 1354 | goto start; | ||
| 1355 | } | 1264 | } |
| 1265 | goto start; | ||
| 1266 | } | ||
| 1356 | 1267 | ||
| 1357 | switch (rr->type) | 1268 | switch (rr->type) { |
| 1358 | { | ||
| 1359 | default: | 1269 | default: |
| 1360 | #ifndef OPENSSL_NO_TLS | 1270 | #ifndef OPENSSL_NO_TLS |
| 1361 | /* TLS up to v1.1 just ignores unknown message types: | 1271 | /* TLS up to v1.1 just ignores unknown message types: |
| 1362 | * TLS v1.2 give an unexpected message alert. | 1272 | * TLS v1.2 give an unexpected message alert. |
| 1363 | */ | 1273 | */ |
| 1364 | if (s->version >= TLS1_VERSION && s->version <= TLS1_1_VERSION) | 1274 | if (s->version >= TLS1_VERSION && s->version <= TLS1_1_VERSION) { |
| 1365 | { | ||
| 1366 | rr->length = 0; | 1275 | rr->length = 0; |
| 1367 | goto start; | 1276 | goto start; |
| 1368 | } | 1277 | } |
| 1369 | #endif | 1278 | #endif |
| 1370 | al=SSL_AD_UNEXPECTED_MESSAGE; | 1279 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 1371 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNEXPECTED_RECORD); | 1280 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_UNEXPECTED_RECORD); |
| 1372 | goto f_err; | 1281 | goto f_err; |
| 1373 | case SSL3_RT_CHANGE_CIPHER_SPEC: | 1282 | case SSL3_RT_CHANGE_CIPHER_SPEC: |
| 1374 | case SSL3_RT_ALERT: | 1283 | case SSL3_RT_ALERT: |
| @@ -1376,8 +1285,8 @@ start: | |||
| 1376 | /* we already handled all of these, with the possible exception | 1285 | /* we already handled all of these, with the possible exception |
| 1377 | * of SSL3_RT_HANDSHAKE when s->in_handshake is set, but that | 1286 | * of SSL3_RT_HANDSHAKE when s->in_handshake is set, but that |
| 1378 | * should not happen when type != rr->type */ | 1287 | * should not happen when type != rr->type */ |
| 1379 | al=SSL_AD_UNEXPECTED_MESSAGE; | 1288 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 1380 | SSLerr(SSL_F_SSL3_READ_BYTES,ERR_R_INTERNAL_ERROR); | 1289 | SSLerr(SSL_F_SSL3_READ_BYTES, ERR_R_INTERNAL_ERROR); |
| 1381 | goto f_err; | 1290 | goto f_err; |
| 1382 | case SSL3_RT_APPLICATION_DATA: | 1291 | case SSL3_RT_APPLICATION_DATA: |
| 1383 | /* At this point, we were expecting handshake data, | 1292 | /* At this point, we were expecting handshake data, |
| @@ -1388,123 +1297,116 @@ start: | |||
| 1388 | * we will indulge it. | 1297 | * we will indulge it. |
| 1389 | */ | 1298 | */ |
| 1390 | if (s->s3->in_read_app_data && | 1299 | if (s->s3->in_read_app_data && |
| 1391 | (s->s3->total_renegotiations != 0) && | 1300 | (s->s3->total_renegotiations != 0) && |
| 1392 | (( | 1301 | (( |
| 1393 | (s->state & SSL_ST_CONNECT) && | 1302 | (s->state & SSL_ST_CONNECT) && |
| 1394 | (s->state >= SSL3_ST_CW_CLNT_HELLO_A) && | 1303 | (s->state >= SSL3_ST_CW_CLNT_HELLO_A) && |
| 1395 | (s->state <= SSL3_ST_CR_SRVR_HELLO_A) | 1304 | (s->state <= SSL3_ST_CR_SRVR_HELLO_A) |
| 1396 | ) || ( | 1305 | ) || ( |
| 1397 | (s->state & SSL_ST_ACCEPT) && | 1306 | (s->state & SSL_ST_ACCEPT) && |
| 1398 | (s->state <= SSL3_ST_SW_HELLO_REQ_A) && | 1307 | (s->state <= SSL3_ST_SW_HELLO_REQ_A) && |
| 1399 | (s->state >= SSL3_ST_SR_CLNT_HELLO_A) | 1308 | (s->state >= SSL3_ST_SR_CLNT_HELLO_A) |
| 1400 | ) | 1309 | ) |
| 1401 | )) | 1310 | )) { |
| 1402 | { | 1311 | s->s3->in_read_app_data = 2; |
| 1403 | s->s3->in_read_app_data=2; | 1312 | return (-1); |
| 1404 | return(-1); | 1313 | } else { |
| 1405 | } | 1314 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 1406 | else | 1315 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_UNEXPECTED_RECORD); |
| 1407 | { | ||
| 1408 | al=SSL_AD_UNEXPECTED_MESSAGE; | ||
| 1409 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNEXPECTED_RECORD); | ||
| 1410 | goto f_err; | 1316 | goto f_err; |
| 1411 | } | ||
| 1412 | } | 1317 | } |
| 1318 | } | ||
| 1413 | /* not reached */ | 1319 | /* not reached */ |
| 1414 | 1320 | ||
| 1415 | f_err: | 1321 | f_err: |
| 1416 | ssl3_send_alert(s,SSL3_AL_FATAL,al); | 1322 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
| 1417 | err: | 1323 | err: |
| 1418 | return(-1); | 1324 | return (-1); |
| 1419 | } | 1325 | } |
| 1420 | 1326 | ||
| 1421 | int ssl3_do_change_cipher_spec(SSL *s) | 1327 | int |
| 1422 | { | 1328 | ssl3_do_change_cipher_spec(SSL *s) |
| 1329 | { | ||
| 1423 | int i; | 1330 | int i; |
| 1424 | const char *sender; | 1331 | const char *sender; |
| 1425 | int slen; | 1332 | int slen; |
| 1426 | 1333 | ||
| 1427 | if (s->state & SSL_ST_ACCEPT) | 1334 | if (s->state & SSL_ST_ACCEPT) |
| 1428 | i=SSL3_CHANGE_CIPHER_SERVER_READ; | 1335 | i = SSL3_CHANGE_CIPHER_SERVER_READ; |
| 1429 | else | 1336 | else |
| 1430 | i=SSL3_CHANGE_CIPHER_CLIENT_READ; | 1337 | i = SSL3_CHANGE_CIPHER_CLIENT_READ; |
| 1431 | 1338 | ||
| 1432 | if (s->s3->tmp.key_block == NULL) | 1339 | if (s->s3->tmp.key_block == NULL) { |
| 1433 | { | 1340 | if (s->session == NULL) { |
| 1434 | if (s->session == NULL) | ||
| 1435 | { | ||
| 1436 | /* might happen if dtls1_read_bytes() calls this */ | 1341 | /* might happen if dtls1_read_bytes() calls this */ |
| 1437 | SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC,SSL_R_CCS_RECEIVED_EARLY); | 1342 | SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC, SSL_R_CCS_RECEIVED_EARLY); |
| 1438 | return (0); | 1343 | return (0); |
| 1439 | } | ||
| 1440 | |||
| 1441 | s->session->cipher=s->s3->tmp.new_cipher; | ||
| 1442 | if (!s->method->ssl3_enc->setup_key_block(s)) return(0); | ||
| 1443 | } | 1344 | } |
| 1444 | 1345 | ||
| 1445 | if (!s->method->ssl3_enc->change_cipher_state(s,i)) | 1346 | s->session->cipher = s->s3->tmp.new_cipher; |
| 1446 | return(0); | 1347 | if (!s->method->ssl3_enc->setup_key_block(s)) |
| 1348 | return (0); | ||
| 1349 | } | ||
| 1350 | |||
| 1351 | if (!s->method->ssl3_enc->change_cipher_state(s, i)) | ||
| 1352 | return (0); | ||
| 1447 | 1353 | ||
| 1448 | /* we have to record the message digest at | 1354 | /* we have to record the message digest at |
| 1449 | * this point so we can get it before we read | 1355 | * this point so we can get it before we read |
| 1450 | * the finished message */ | 1356 | * the finished message */ |
| 1451 | if (s->state & SSL_ST_CONNECT) | 1357 | if (s->state & SSL_ST_CONNECT) { |
| 1452 | { | 1358 | sender = s->method->ssl3_enc->server_finished_label; |
| 1453 | sender=s->method->ssl3_enc->server_finished_label; | 1359 | slen = s->method->ssl3_enc->server_finished_label_len; |
| 1454 | slen=s->method->ssl3_enc->server_finished_label_len; | 1360 | } else { |
| 1455 | } | 1361 | sender = s->method->ssl3_enc->client_finished_label; |
| 1456 | else | 1362 | slen = s->method->ssl3_enc->client_finished_label_len; |
| 1457 | { | 1363 | } |
| 1458 | sender=s->method->ssl3_enc->client_finished_label; | ||
| 1459 | slen=s->method->ssl3_enc->client_finished_label_len; | ||
| 1460 | } | ||
| 1461 | 1364 | ||
| 1462 | i = s->method->ssl3_enc->final_finish_mac(s, | 1365 | i = s->method->ssl3_enc->final_finish_mac(s, |
| 1463 | sender,slen,s->s3->tmp.peer_finish_md); | 1366 | sender, slen, s->s3->tmp.peer_finish_md); |
| 1464 | if (i == 0) | 1367 | if (i == 0) { |
| 1465 | { | ||
| 1466 | SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC, ERR_R_INTERNAL_ERROR); | 1368 | SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC, ERR_R_INTERNAL_ERROR); |
| 1467 | return 0; | 1369 | return 0; |
| 1468 | } | 1370 | } |
| 1469 | s->s3->tmp.peer_finish_md_len = i; | 1371 | s->s3->tmp.peer_finish_md_len = i; |
| 1470 | 1372 | ||
| 1471 | return(1); | 1373 | return (1); |
| 1472 | } | 1374 | } |
| 1473 | 1375 | ||
| 1474 | int ssl3_send_alert(SSL *s, int level, int desc) | 1376 | int |
| 1475 | { | 1377 | ssl3_send_alert(SSL *s, int level, int desc) |
| 1378 | { | ||
| 1476 | /* Map tls/ssl alert value to correct one */ | 1379 | /* Map tls/ssl alert value to correct one */ |
| 1477 | desc=s->method->ssl3_enc->alert_value(desc); | 1380 | desc = s->method->ssl3_enc->alert_value(desc); |
| 1478 | if (s->version == SSL3_VERSION && desc == SSL_AD_PROTOCOL_VERSION) | 1381 | if (s->version == SSL3_VERSION && desc == SSL_AD_PROTOCOL_VERSION) |
| 1479 | desc = SSL_AD_HANDSHAKE_FAILURE; /* SSL 3.0 does not have protocol_version alerts */ | 1382 | desc = SSL_AD_HANDSHAKE_FAILURE; /* SSL 3.0 does not have protocol_version alerts */ |
| 1480 | if (desc < 0) return -1; | 1383 | if (desc < 0) |
| 1384 | return -1; | ||
| 1481 | /* If a fatal one, remove from cache */ | 1385 | /* If a fatal one, remove from cache */ |
| 1482 | if ((level == 2) && (s->session != NULL)) | 1386 | if ((level == 2) && (s->session != NULL)) |
| 1483 | SSL_CTX_remove_session(s->ctx,s->session); | 1387 | SSL_CTX_remove_session(s->ctx, s->session); |
| 1484 | 1388 | ||
| 1485 | s->s3->alert_dispatch=1; | 1389 | s->s3->alert_dispatch = 1; |
| 1486 | s->s3->send_alert[0]=level; | 1390 | s->s3->send_alert[0] = level; |
| 1487 | s->s3->send_alert[1]=desc; | 1391 | s->s3->send_alert[1] = desc; |
| 1488 | if (s->s3->wbuf.left == 0) /* data still being written out? */ | 1392 | if (s->s3->wbuf.left == 0) /* data still being written out? */ |
| 1489 | return s->method->ssl_dispatch_alert(s); | 1393 | return s->method->ssl_dispatch_alert(s); |
| 1490 | /* else data is still being written out, we will get written | 1394 | /* else data is still being written out, we will get written |
| 1491 | * some time in the future */ | 1395 | * some time in the future */ |
| 1492 | return -1; | 1396 | return -1; |
| 1493 | } | 1397 | } |
| 1494 | 1398 | ||
| 1495 | int ssl3_dispatch_alert(SSL *s) | 1399 | int |
| 1496 | { | 1400 | ssl3_dispatch_alert(SSL *s) |
| 1497 | int i,j; | 1401 | { |
| 1498 | void (*cb)(const SSL *ssl,int type,int val)=NULL; | 1402 | int i, j; |
| 1403 | void (*cb)(const SSL *ssl, int type, int val) = NULL; | ||
| 1499 | 1404 | ||
| 1500 | s->s3->alert_dispatch=0; | 1405 | s->s3->alert_dispatch = 0; |
| 1501 | i = do_ssl3_write(s, SSL3_RT_ALERT, &s->s3->send_alert[0], 2, 0); | 1406 | i = do_ssl3_write(s, SSL3_RT_ALERT, &s->s3->send_alert[0], 2, 0); |
| 1502 | if (i <= 0) | 1407 | if (i <= 0) { |
| 1503 | { | 1408 | s->s3->alert_dispatch = 1; |
| 1504 | s->s3->alert_dispatch=1; | 1409 | } else { |
| 1505 | } | ||
| 1506 | else | ||
| 1507 | { | ||
| 1508 | /* Alert sent to BIO. If it is important, flush it now. | 1410 | /* Alert sent to BIO. If it is important, flush it now. |
| 1509 | * If the message does not get sent due to non-blocking IO, | 1411 | * If the message does not get sent due to non-blocking IO, |
| 1510 | * we will not worry too much. */ | 1412 | * we will not worry too much. */ |
| @@ -1515,15 +1417,14 @@ int ssl3_dispatch_alert(SSL *s) | |||
| 1515 | s->msg_callback(1, s->version, SSL3_RT_ALERT, s->s3->send_alert, 2, s, s->msg_callback_arg); | 1417 | s->msg_callback(1, s->version, SSL3_RT_ALERT, s->s3->send_alert, 2, s, s->msg_callback_arg); |
| 1516 | 1418 | ||
| 1517 | if (s->info_callback != NULL) | 1419 | if (s->info_callback != NULL) |
| 1518 | cb=s->info_callback; | 1420 | cb = s->info_callback; |
| 1519 | else if (s->ctx->info_callback != NULL) | 1421 | else if (s->ctx->info_callback != NULL) |
| 1520 | cb=s->ctx->info_callback; | 1422 | cb = s->ctx->info_callback; |
| 1521 | 1423 | ||
| 1522 | if (cb != NULL) | 1424 | if (cb != NULL) { |
| 1523 | { | 1425 | j = (s->s3->send_alert[0]<<8)|s->s3->send_alert[1]; |
| 1524 | j=(s->s3->send_alert[0]<<8)|s->s3->send_alert[1]; | 1426 | cb(s, SSL_CB_WRITE_ALERT, j); |
| 1525 | cb(s,SSL_CB_WRITE_ALERT,j); | ||
| 1526 | } | ||
| 1527 | } | 1427 | } |
| 1528 | return(i); | ||
| 1529 | } | 1428 | } |
| 1429 | return (i); | ||
| 1430 | } | ||
diff --git a/src/lib/libssl/src/ssl/s3_both.c b/src/lib/libssl/src/ssl/s3_both.c index 77f825af31..b2fd5c6f80 100644 --- a/src/lib/libssl/src/ssl/s3_both.c +++ b/src/lib/libssl/src/ssl/s3_both.c | |||
| @@ -125,82 +125,81 @@ | |||
| 125 | #include <openssl/x509.h> | 125 | #include <openssl/x509.h> |
| 126 | 126 | ||
| 127 | /* send s->init_buf in records of type 'type' (SSL3_RT_HANDSHAKE or SSL3_RT_CHANGE_CIPHER_SPEC) */ | 127 | /* send s->init_buf in records of type 'type' (SSL3_RT_HANDSHAKE or SSL3_RT_CHANGE_CIPHER_SPEC) */ |
| 128 | int ssl3_do_write(SSL *s, int type) | 128 | int |
| 129 | { | 129 | ssl3_do_write(SSL *s, int type) |
| 130 | { | ||
| 130 | int ret; | 131 | int ret; |
| 131 | 132 | ||
| 132 | ret=ssl3_write_bytes(s,type,&s->init_buf->data[s->init_off], | 133 | ret = ssl3_write_bytes(s, type, &s->init_buf->data[s->init_off], |
| 133 | s->init_num); | 134 | s->init_num); |
| 134 | if (ret < 0) return(-1); | 135 | if (ret < 0) |
| 136 | return (-1); | ||
| 135 | if (type == SSL3_RT_HANDSHAKE) | 137 | if (type == SSL3_RT_HANDSHAKE) |
| 136 | /* should not be done for 'Hello Request's, but in that case | 138 | /* should not be done for 'Hello Request's, but in that case |
| 137 | * we'll ignore the result anyway */ | 139 | * we'll ignore the result anyway */ |
| 138 | ssl3_finish_mac(s,(unsigned char *)&s->init_buf->data[s->init_off],ret); | 140 | ssl3_finish_mac(s,(unsigned char *)&s->init_buf->data[s->init_off], ret); |
| 139 | 141 | ||
| 140 | if (ret == s->init_num) | 142 | if (ret == s->init_num) { |
| 141 | { | ||
| 142 | if (s->msg_callback) | 143 | if (s->msg_callback) |
| 143 | s->msg_callback(1, s->version, type, s->init_buf->data, (size_t)(s->init_off + s->init_num), s, s->msg_callback_arg); | 144 | s->msg_callback(1, s->version, type, s->init_buf->data, (size_t)(s->init_off + s->init_num), s, s->msg_callback_arg); |
| 144 | return(1); | 145 | return (1); |
| 145 | } | ||
| 146 | s->init_off+=ret; | ||
| 147 | s->init_num-=ret; | ||
| 148 | return(0); | ||
| 149 | } | 146 | } |
| 147 | s->init_off += ret; | ||
| 148 | s->init_num -= ret; | ||
| 149 | return (0); | ||
| 150 | } | ||
| 150 | 151 | ||
| 151 | int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen) | 152 | int |
| 152 | { | 153 | ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen) |
| 153 | unsigned char *p,*d; | 154 | { |
| 155 | unsigned char *p, *d; | ||
| 154 | int i; | 156 | int i; |
| 155 | unsigned long l; | 157 | unsigned long l; |
| 156 | 158 | ||
| 157 | if (s->state == a) | 159 | if (s->state == a) { |
| 158 | { | 160 | d = (unsigned char *)s->init_buf->data; |
| 159 | d=(unsigned char *)s->init_buf->data; | 161 | p = &(d[4]); |
| 160 | p= &(d[4]); | ||
| 161 | 162 | ||
| 162 | i=s->method->ssl3_enc->final_finish_mac(s, | 163 | i = s->method->ssl3_enc->final_finish_mac(s, |
| 163 | sender,slen,s->s3->tmp.finish_md); | 164 | sender, slen, s->s3->tmp.finish_md); |
| 164 | if (i == 0) | 165 | if (i == 0) |
| 165 | return 0; | 166 | return 0; |
| 166 | s->s3->tmp.finish_md_len = i; | 167 | s->s3->tmp.finish_md_len = i; |
| 167 | memcpy(p, s->s3->tmp.finish_md, i); | 168 | memcpy(p, s->s3->tmp.finish_md, i); |
| 168 | p+=i; | 169 | p += i; |
| 169 | l=i; | 170 | l = i; |
| 170 | 171 | ||
| 171 | /* Copy the finished so we can use it for | 172 | /* Copy the finished so we can use it for |
| 172 | renegotiation checks */ | 173 | renegotiation checks */ |
| 173 | if(s->type == SSL_ST_CONNECT) | 174 | if (s->type == SSL_ST_CONNECT) { |
| 174 | { | 175 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); |
| 175 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | 176 | memcpy(s->s3->previous_client_finished, |
| 176 | memcpy(s->s3->previous_client_finished, | 177 | s->s3->tmp.finish_md, i); |
| 177 | s->s3->tmp.finish_md, i); | 178 | s->s3->previous_client_finished_len = i; |
| 178 | s->s3->previous_client_finished_len=i; | 179 | } else { |
| 179 | } | 180 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); |
| 180 | else | 181 | memcpy(s->s3->previous_server_finished, |
| 181 | { | 182 | s->s3->tmp.finish_md, i); |
| 182 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | 183 | s->s3->previous_server_finished_len = i; |
| 183 | memcpy(s->s3->previous_server_finished, | ||
| 184 | s->s3->tmp.finish_md, i); | ||
| 185 | s->s3->previous_server_finished_len=i; | ||
| 186 | } | ||
| 187 | |||
| 188 | *(d++)=SSL3_MT_FINISHED; | ||
| 189 | l2n3(l,d); | ||
| 190 | s->init_num=(int)l+4; | ||
| 191 | s->init_off=0; | ||
| 192 | |||
| 193 | s->state=b; | ||
| 194 | } | 184 | } |
| 195 | 185 | ||
| 196 | /* SSL3_ST_SEND_xxxxxx_HELLO_B */ | 186 | *(d++) = SSL3_MT_FINISHED; |
| 197 | return(ssl3_do_write(s,SSL3_RT_HANDSHAKE)); | 187 | l2n3(l, d); |
| 188 | s->init_num = (int)l + 4; | ||
| 189 | s->init_off = 0; | ||
| 190 | |||
| 191 | s->state = b; | ||
| 198 | } | 192 | } |
| 199 | 193 | ||
| 194 | /* SSL3_ST_SEND_xxxxxx_HELLO_B */ | ||
| 195 | return (ssl3_do_write(s, SSL3_RT_HANDSHAKE)); | ||
| 196 | } | ||
| 197 | |||
| 200 | #ifndef OPENSSL_NO_NEXTPROTONEG | 198 | #ifndef OPENSSL_NO_NEXTPROTONEG |
| 201 | /* ssl3_take_mac calculates the Finished MAC for the handshakes messages seen to far. */ | 199 | /* ssl3_take_mac calculates the Finished MAC for the handshakes messages seen to far. */ |
| 202 | static void ssl3_take_mac(SSL *s) | 200 | static void |
| 203 | { | 201 | ssl3_take_mac(SSL *s) |
| 202 | { | ||
| 204 | const char *sender; | 203 | const char *sender; |
| 205 | int slen; | 204 | int slen; |
| 206 | /* If no new cipher setup return immediately: other functions will | 205 | /* If no new cipher setup return immediately: other functions will |
| @@ -208,25 +207,23 @@ static void ssl3_take_mac(SSL *s) | |||
| 208 | */ | 207 | */ |
| 209 | if (s->s3->tmp.new_cipher == NULL) | 208 | if (s->s3->tmp.new_cipher == NULL) |
| 210 | return; | 209 | return; |
| 211 | if (s->state & SSL_ST_CONNECT) | 210 | if (s->state & SSL_ST_CONNECT) { |
| 212 | { | 211 | sender = s->method->ssl3_enc->server_finished_label; |
| 213 | sender=s->method->ssl3_enc->server_finished_label; | 212 | slen = s->method->ssl3_enc->server_finished_label_len; |
| 214 | slen=s->method->ssl3_enc->server_finished_label_len; | 213 | } else { |
| 215 | } | 214 | sender = s->method->ssl3_enc->client_finished_label; |
| 216 | else | 215 | slen = s->method->ssl3_enc->client_finished_label_len; |
| 217 | { | 216 | } |
| 218 | sender=s->method->ssl3_enc->client_finished_label; | ||
| 219 | slen=s->method->ssl3_enc->client_finished_label_len; | ||
| 220 | } | ||
| 221 | 217 | ||
| 222 | s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s, | 218 | s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s, |
| 223 | sender,slen,s->s3->tmp.peer_finish_md); | 219 | sender, slen, s->s3->tmp.peer_finish_md); |
| 224 | } | 220 | } |
| 225 | #endif | 221 | #endif |
| 226 | 222 | ||
| 227 | int ssl3_get_finished(SSL *s, int a, int b) | 223 | int |
| 228 | { | 224 | ssl3_get_finished(SSL *s, int a, int b) |
| 229 | int al,i,ok; | 225 | { |
| 226 | int al, i, ok; | ||
| 230 | long n; | 227 | long n; |
| 231 | unsigned char *p; | 228 | unsigned char *p; |
| 232 | 229 | ||
| @@ -236,64 +233,55 @@ int ssl3_get_finished(SSL *s, int a, int b) | |||
| 236 | */ | 233 | */ |
| 237 | #endif | 234 | #endif |
| 238 | 235 | ||
| 239 | n=s->method->ssl_get_message(s, | 236 | n = s->method->ssl_get_message(s, a, b, SSL3_MT_FINISHED, |
| 240 | a, | 237 | 64, /* should actually be 36+4 :-) */ &ok); |
| 241 | b, | ||
| 242 | SSL3_MT_FINISHED, | ||
| 243 | 64, /* should actually be 36+4 :-) */ | ||
| 244 | &ok); | ||
| 245 | 238 | ||
| 246 | if (!ok) return((int)n); | 239 | if (!ok) |
| 240 | return ((int)n); | ||
| 247 | 241 | ||
| 248 | /* If this occurs, we have missed a message */ | 242 | /* If this occurs, we have missed a message */ |
| 249 | if (!s->s3->change_cipher_spec) | 243 | if (!s->s3->change_cipher_spec) { |
| 250 | { | 244 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 251 | al=SSL_AD_UNEXPECTED_MESSAGE; | 245 | SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_GOT_A_FIN_BEFORE_A_CCS); |
| 252 | SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_GOT_A_FIN_BEFORE_A_CCS); | ||
| 253 | goto f_err; | 246 | goto f_err; |
| 254 | } | 247 | } |
| 255 | s->s3->change_cipher_spec=0; | 248 | s->s3->change_cipher_spec = 0; |
| 256 | 249 | ||
| 257 | p = (unsigned char *)s->init_msg; | 250 | p = (unsigned char *)s->init_msg; |
| 258 | i = s->s3->tmp.peer_finish_md_len; | 251 | i = s->s3->tmp.peer_finish_md_len; |
| 259 | 252 | ||
| 260 | if (i != n) | 253 | if (i != n) { |
| 261 | { | 254 | al = SSL_AD_DECODE_ERROR; |
| 262 | al=SSL_AD_DECODE_ERROR; | 255 | SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_BAD_DIGEST_LENGTH); |
| 263 | SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_BAD_DIGEST_LENGTH); | ||
| 264 | goto f_err; | 256 | goto f_err; |
| 265 | } | 257 | } |
| 266 | 258 | ||
| 267 | if (CRYPTO_memcmp(p, s->s3->tmp.peer_finish_md, i) != 0) | 259 | if (CRYPTO_memcmp(p, s->s3->tmp.peer_finish_md, i) != 0) { |
| 268 | { | 260 | al = SSL_AD_DECRYPT_ERROR; |
| 269 | al=SSL_AD_DECRYPT_ERROR; | 261 | SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_DIGEST_CHECK_FAILED); |
| 270 | SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_DIGEST_CHECK_FAILED); | ||
| 271 | goto f_err; | 262 | goto f_err; |
| 272 | } | 263 | } |
| 273 | 264 | ||
| 274 | /* Copy the finished so we can use it for | 265 | /* Copy the finished so we can use it for |
| 275 | renegotiation checks */ | 266 | renegotiation checks */ |
| 276 | if(s->type == SSL_ST_ACCEPT) | 267 | if (s->type == SSL_ST_ACCEPT) { |
| 277 | { | 268 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); |
| 278 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | 269 | memcpy(s->s3->previous_client_finished, |
| 279 | memcpy(s->s3->previous_client_finished, | 270 | s->s3->tmp.peer_finish_md, i); |
| 280 | s->s3->tmp.peer_finish_md, i); | 271 | s->s3->previous_client_finished_len = i; |
| 281 | s->s3->previous_client_finished_len=i; | 272 | } else { |
| 282 | } | 273 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); |
| 283 | else | 274 | memcpy(s->s3->previous_server_finished, |
| 284 | { | 275 | s->s3->tmp.peer_finish_md, i); |
| 285 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | 276 | s->s3->previous_server_finished_len = i; |
| 286 | memcpy(s->s3->previous_server_finished, | ||
| 287 | s->s3->tmp.peer_finish_md, i); | ||
| 288 | s->s3->previous_server_finished_len=i; | ||
| 289 | } | ||
| 290 | |||
| 291 | return(1); | ||
| 292 | f_err: | ||
| 293 | ssl3_send_alert(s,SSL3_AL_FATAL,al); | ||
| 294 | return(0); | ||
| 295 | } | 277 | } |
| 296 | 278 | ||
| 279 | return (1); | ||
| 280 | f_err: | ||
| 281 | ssl3_send_alert(s, SSL3_AL_FATAL, al); | ||
| 282 | return (0); | ||
| 283 | } | ||
| 284 | |||
| 297 | /* for these 2 messages, we need to | 285 | /* for these 2 messages, we need to |
| 298 | * ssl->enc_read_ctx re-init | 286 | * ssl->enc_read_ctx re-init |
| 299 | * ssl->s3->read_sequence zero | 287 | * ssl->s3->read_sequence zero |
| @@ -302,48 +290,49 @@ f_err: | |||
| 302 | * ssl->session->read_compression assign | 290 | * ssl->session->read_compression assign |
| 303 | * ssl->session->read_hash assign | 291 | * ssl->session->read_hash assign |
| 304 | */ | 292 | */ |
| 305 | int ssl3_send_change_cipher_spec(SSL *s, int a, int b) | 293 | int |
| 306 | { | 294 | ssl3_send_change_cipher_spec(SSL *s, int a, int b) |
| 295 | { | ||
| 307 | unsigned char *p; | 296 | unsigned char *p; |
| 308 | 297 | ||
| 309 | if (s->state == a) | 298 | if (s->state == a) { |
| 310 | { | 299 | p = (unsigned char *)s->init_buf->data; |
| 311 | p=(unsigned char *)s->init_buf->data; | 300 | *p = SSL3_MT_CCS; |
| 312 | *p=SSL3_MT_CCS; | 301 | s->init_num = 1; |
| 313 | s->init_num=1; | 302 | s->init_off = 0; |
| 314 | s->init_off=0; | ||
| 315 | 303 | ||
| 316 | s->state=b; | 304 | s->state = b; |
| 317 | } | 305 | } |
| 318 | 306 | ||
| 319 | /* SSL3_ST_CW_CHANGE_B */ | 307 | /* SSL3_ST_CW_CHANGE_B */ |
| 320 | return(ssl3_do_write(s,SSL3_RT_CHANGE_CIPHER_SPEC)); | 308 | return (ssl3_do_write(s, SSL3_RT_CHANGE_CIPHER_SPEC)); |
| 321 | } | 309 | } |
| 322 | 310 | ||
| 323 | static int ssl3_add_cert_to_buf(BUF_MEM *buf, unsigned long *l, X509 *x) | 311 | static int |
| 324 | { | 312 | ssl3_add_cert_to_buf(BUF_MEM *buf, unsigned long *l, X509 *x) |
| 313 | { | ||
| 325 | int n; | 314 | int n; |
| 326 | unsigned char *p; | 315 | unsigned char *p; |
| 327 | 316 | ||
| 328 | n=i2d_X509(x,NULL); | 317 | n = i2d_X509(x, NULL); |
| 329 | if (!BUF_MEM_grow_clean(buf,(int)(n+(*l)+3))) | 318 | if (!BUF_MEM_grow_clean(buf,(int)(n + (*l) + 3))) { |
| 330 | { | 319 | SSLerr(SSL_F_SSL3_ADD_CERT_TO_BUF, ERR_R_BUF_LIB); |
| 331 | SSLerr(SSL_F_SSL3_ADD_CERT_TO_BUF,ERR_R_BUF_LIB); | 320 | return (-1); |
| 332 | return(-1); | ||
| 333 | } | ||
| 334 | p=(unsigned char *)&(buf->data[*l]); | ||
| 335 | l2n3(n,p); | ||
| 336 | i2d_X509(x,&p); | ||
| 337 | *l+=n+3; | ||
| 338 | |||
| 339 | return(0); | ||
| 340 | } | 321 | } |
| 322 | p = (unsigned char *)&(buf->data[*l]); | ||
| 323 | l2n3(n, p); | ||
| 324 | i2d_X509(x, &p); | ||
| 325 | *l += n + 3; | ||
| 341 | 326 | ||
| 342 | unsigned long ssl3_output_cert_chain(SSL *s, X509 *x) | 327 | return (0); |
| 343 | { | 328 | } |
| 329 | |||
| 330 | unsigned long | ||
| 331 | ssl3_output_cert_chain(SSL *s, X509 *x) | ||
| 332 | { | ||
| 344 | unsigned char *p; | 333 | unsigned char *p; |
| 345 | int i; | 334 | int i; |
| 346 | unsigned long l=7; | 335 | unsigned long l = 7; |
| 347 | BUF_MEM *buf; | 336 | BUF_MEM *buf; |
| 348 | int no_chain; | 337 | int no_chain; |
| 349 | 338 | ||
| @@ -353,111 +342,99 @@ unsigned long ssl3_output_cert_chain(SSL *s, X509 *x) | |||
| 353 | no_chain = 0; | 342 | no_chain = 0; |
| 354 | 343 | ||
| 355 | /* TLSv1 sends a chain with nothing in it, instead of an alert */ | 344 | /* TLSv1 sends a chain with nothing in it, instead of an alert */ |
| 356 | buf=s->init_buf; | 345 | buf = s->init_buf; |
| 357 | if (!BUF_MEM_grow_clean(buf,10)) | 346 | if (!BUF_MEM_grow_clean(buf, 10)) { |
| 358 | { | 347 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN, ERR_R_BUF_LIB); |
| 359 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_BUF_LIB); | 348 | return (0); |
| 360 | return(0); | 349 | } |
| 361 | } | 350 | if (x != NULL) { |
| 362 | if (x != NULL) | 351 | if (no_chain) { |
| 363 | { | ||
| 364 | if (no_chain) | ||
| 365 | { | ||
| 366 | if (ssl3_add_cert_to_buf(buf, &l, x)) | 352 | if (ssl3_add_cert_to_buf(buf, &l, x)) |
| 367 | return(0); | 353 | return (0); |
| 368 | } | 354 | } else { |
| 369 | else | ||
| 370 | { | ||
| 371 | X509_STORE_CTX xs_ctx; | 355 | X509_STORE_CTX xs_ctx; |
| 372 | 356 | ||
| 373 | if (!X509_STORE_CTX_init(&xs_ctx,s->ctx->cert_store,x,NULL)) | 357 | if (!X509_STORE_CTX_init(&xs_ctx, s->ctx->cert_store, x, NULL)) { |
| 374 | { | 358 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN, ERR_R_X509_LIB); |
| 375 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_X509_LIB); | 359 | return (0); |
| 376 | return(0); | 360 | } |
| 377 | } | ||
| 378 | X509_verify_cert(&xs_ctx); | 361 | X509_verify_cert(&xs_ctx); |
| 379 | /* Don't leave errors in the queue */ | 362 | /* Don't leave errors in the queue */ |
| 380 | ERR_clear_error(); | 363 | ERR_clear_error(); |
| 381 | for (i=0; i < sk_X509_num(xs_ctx.chain); i++) | 364 | for (i = 0; i < sk_X509_num(xs_ctx.chain); i++) { |
| 382 | { | ||
| 383 | x = sk_X509_value(xs_ctx.chain, i); | 365 | x = sk_X509_value(xs_ctx.chain, i); |
| 384 | 366 | ||
| 385 | if (ssl3_add_cert_to_buf(buf, &l, x)) | 367 | if (ssl3_add_cert_to_buf(buf, &l, x)) { |
| 386 | { | ||
| 387 | X509_STORE_CTX_cleanup(&xs_ctx); | 368 | X509_STORE_CTX_cleanup(&xs_ctx); |
| 388 | return 0; | 369 | return 0; |
| 389 | } | ||
| 390 | } | 370 | } |
| 391 | X509_STORE_CTX_cleanup(&xs_ctx); | ||
| 392 | } | 371 | } |
| 372 | X509_STORE_CTX_cleanup(&xs_ctx); | ||
| 393 | } | 373 | } |
| 374 | } | ||
| 394 | /* Thawte special :-) */ | 375 | /* Thawte special :-) */ |
| 395 | for (i=0; i<sk_X509_num(s->ctx->extra_certs); i++) | 376 | for (i = 0; i < sk_X509_num(s->ctx->extra_certs); i++) { |
| 396 | { | 377 | x = sk_X509_value(s->ctx->extra_certs, i); |
| 397 | x=sk_X509_value(s->ctx->extra_certs,i); | ||
| 398 | if (ssl3_add_cert_to_buf(buf, &l, x)) | 378 | if (ssl3_add_cert_to_buf(buf, &l, x)) |
| 399 | return(0); | 379 | return (0); |
| 400 | } | ||
| 401 | |||
| 402 | l-=7; | ||
| 403 | p=(unsigned char *)&(buf->data[4]); | ||
| 404 | l2n3(l,p); | ||
| 405 | l+=3; | ||
| 406 | p=(unsigned char *)&(buf->data[0]); | ||
| 407 | *(p++)=SSL3_MT_CERTIFICATE; | ||
| 408 | l2n3(l,p); | ||
| 409 | l+=4; | ||
| 410 | return(l); | ||
| 411 | } | 380 | } |
| 412 | 381 | ||
| 382 | l -= 7; | ||
| 383 | p = (unsigned char *)&(buf->data[4]); | ||
| 384 | l2n3(l, p); | ||
| 385 | l += 3; | ||
| 386 | p = (unsigned char *)&(buf->data[0]); | ||
| 387 | *(p++) = SSL3_MT_CERTIFICATE; | ||
| 388 | l2n3(l, p); | ||
| 389 | l += 4; | ||
| 390 | return (l); | ||
| 391 | } | ||
| 392 | |||
| 413 | /* Obtain handshake message of message type 'mt' (any if mt == -1), | 393 | /* Obtain handshake message of message type 'mt' (any if mt == -1), |
| 414 | * maximum acceptable body length 'max'. | 394 | * maximum acceptable body length 'max'. |
| 415 | * The first four bytes (msg_type and length) are read in state 'st1', | 395 | * The first four bytes (msg_type and length) are read in state 'st1', |
| 416 | * the body is read in state 'stn'. | 396 | * the body is read in state 'stn'. |
| 417 | */ | 397 | */ |
| 418 | long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | 398 | long |
| 419 | { | 399 | ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) |
| 400 | { | ||
| 420 | unsigned char *p; | 401 | unsigned char *p; |
| 421 | unsigned long l; | 402 | unsigned long l; |
| 422 | long n; | 403 | long n; |
| 423 | int i,al; | 404 | int i, al; |
| 424 | 405 | ||
| 425 | if (s->s3->tmp.reuse_message) | 406 | if (s->s3->tmp.reuse_message) { |
| 426 | { | 407 | s->s3->tmp.reuse_message = 0; |
| 427 | s->s3->tmp.reuse_message=0; | 408 | if ((mt >= 0) && (s->s3->tmp.message_type != mt)) { |
| 428 | if ((mt >= 0) && (s->s3->tmp.message_type != mt)) | 409 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 429 | { | 410 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); |
| 430 | al=SSL_AD_UNEXPECTED_MESSAGE; | ||
| 431 | SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_UNEXPECTED_MESSAGE); | ||
| 432 | goto f_err; | 411 | goto f_err; |
| 433 | } | 412 | } |
| 434 | *ok=1; | 413 | *ok = 1; |
| 435 | s->init_msg = s->init_buf->data + 4; | 414 | s->init_msg = s->init_buf->data + 4; |
| 436 | s->init_num = (int)s->s3->tmp.message_size; | 415 | s->init_num = (int)s->s3->tmp.message_size; |
| 437 | return s->init_num; | 416 | return s->init_num; |
| 438 | } | 417 | } |
| 439 | 418 | ||
| 440 | p=(unsigned char *)s->init_buf->data; | 419 | p = (unsigned char *)s->init_buf->data; |
| 441 | 420 | ||
| 442 | if (s->state == st1) /* s->init_num < 4 */ | 421 | if (s->state == st1) /* s->init_num < 4 */ |
| 443 | { | 422 | { |
| 444 | int skip_message; | 423 | int skip_message; |
| 445 | 424 | ||
| 446 | do | 425 | do { |
| 447 | { | 426 | while (s->init_num < 4) { |
| 448 | while (s->init_num < 4) | 427 | i = s->method->ssl_read_bytes(s, |
| 449 | { | 428 | SSL3_RT_HANDSHAKE, &p[s->init_num], |
| 450 | i=s->method->ssl_read_bytes(s,SSL3_RT_HANDSHAKE, | 429 | 4 - s->init_num, 0); |
| 451 | &p[s->init_num],4 - s->init_num, 0); | 430 | if (i <= 0) { |
| 452 | if (i <= 0) | 431 | s->rwstate = SSL_READING; |
| 453 | { | ||
| 454 | s->rwstate=SSL_READING; | ||
| 455 | *ok = 0; | 432 | *ok = 0; |
| 456 | return i; | 433 | return i; |
| 457 | } | ||
| 458 | s->init_num+=i; | ||
| 459 | } | 434 | } |
| 460 | 435 | s->init_num += i; | |
| 436 | } | ||
| 437 | |||
| 461 | skip_message = 0; | 438 | skip_message = 0; |
| 462 | if (!s->server) | 439 | if (!s->server) |
| 463 | if (p[0] == SSL3_MT_HELLO_REQUEST) | 440 | if (p[0] == SSL3_MT_HELLO_REQUEST) |
| @@ -465,79 +442,72 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
| 465 | * we are doing a handshake anyway now, so ignore them | 442 | * we are doing a handshake anyway now, so ignore them |
| 466 | * if their format is correct. Does not count for | 443 | * if their format is correct. Does not count for |
| 467 | * 'Finished' MAC. */ | 444 | * 'Finished' MAC. */ |
| 468 | if (p[1] == 0 && p[2] == 0 &&p[3] == 0) | 445 | if (p[1] == 0 && p[2] == 0 &&p[3] == 0) { |
| 469 | { | 446 | s->init_num = 0; |
| 470 | s->init_num = 0; | 447 | skip_message = 1; |
| 471 | skip_message = 1; | 448 | |
| 472 | 449 | if (s->msg_callback) | |
| 473 | if (s->msg_callback) | 450 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, 4, s, s->msg_callback_arg); |
| 474 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, 4, s, s->msg_callback_arg); | ||
| 475 | } | ||
| 476 | } | 451 | } |
| 452 | } | ||
| 477 | while (skip_message); | 453 | while (skip_message); |
| 478 | 454 | ||
| 479 | /* s->init_num == 4 */ | 455 | /* s->init_num == 4 */ |
| 480 | 456 | ||
| 481 | if ((mt >= 0) && (*p != mt)) | 457 | if ((mt >= 0) && (*p != mt)) { |
| 482 | { | 458 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 483 | al=SSL_AD_UNEXPECTED_MESSAGE; | 459 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); |
| 484 | SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_UNEXPECTED_MESSAGE); | ||
| 485 | goto f_err; | 460 | goto f_err; |
| 486 | } | 461 | } |
| 487 | if ((mt < 0) && (*p == SSL3_MT_CLIENT_HELLO) && | 462 | if ((mt < 0) && (*p == SSL3_MT_CLIENT_HELLO) && |
| 488 | (st1 == SSL3_ST_SR_CERT_A) && | 463 | (st1 == SSL3_ST_SR_CERT_A) && (stn == SSL3_ST_SR_CERT_B)) { |
| 489 | (stn == SSL3_ST_SR_CERT_B)) | ||
| 490 | { | ||
| 491 | /* At this point we have got an MS SGC second client | 464 | /* At this point we have got an MS SGC second client |
| 492 | * hello (maybe we should always allow the client to | 465 | * hello (maybe we should always allow the client to |
| 493 | * start a new handshake?). We need to restart the mac. | 466 | * start a new handshake?). We need to restart the mac. |
| 494 | * Don't increment {num,total}_renegotiations because | 467 | * Don't increment {num,total}_renegotiations because |
| 495 | * we have not completed the handshake. */ | 468 | * we have not completed the handshake. */ |
| 496 | ssl3_init_finished_mac(s); | 469 | ssl3_init_finished_mac(s); |
| 497 | } | 470 | } |
| 498 | 471 | ||
| 499 | s->s3->tmp.message_type= *(p++); | 472 | s->s3->tmp.message_type= *(p++); |
| 500 | 473 | ||
| 501 | n2l3(p,l); | 474 | n2l3(p, l); |
| 502 | if (l > (unsigned long)max) | 475 | if (l > (unsigned long)max) { |
| 503 | { | 476 | al = SSL_AD_ILLEGAL_PARAMETER; |
| 504 | al=SSL_AD_ILLEGAL_PARAMETER; | 477 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_EXCESSIVE_MESSAGE_SIZE); |
| 505 | SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_EXCESSIVE_MESSAGE_SIZE); | ||
| 506 | goto f_err; | 478 | goto f_err; |
| 507 | } | 479 | } |
| 508 | if (l > (INT_MAX-4)) /* BUF_MEM_grow takes an 'int' parameter */ | 480 | if (l > (INT_MAX-4)) /* BUF_MEM_grow takes an 'int' parameter */ |
| 509 | { | 481 | { |
| 510 | al=SSL_AD_ILLEGAL_PARAMETER; | 482 | al = SSL_AD_ILLEGAL_PARAMETER; |
| 511 | SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_EXCESSIVE_MESSAGE_SIZE); | 483 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_EXCESSIVE_MESSAGE_SIZE); |
| 512 | goto f_err; | 484 | goto f_err; |
| 513 | } | 485 | } |
| 514 | if (l && !BUF_MEM_grow_clean(s->init_buf,(int)l+4)) | 486 | if (l && !BUF_MEM_grow_clean(s->init_buf,(int)l + 4)) { |
| 515 | { | 487 | SSLerr(SSL_F_SSL3_GET_MESSAGE, ERR_R_BUF_LIB); |
| 516 | SSLerr(SSL_F_SSL3_GET_MESSAGE,ERR_R_BUF_LIB); | ||
| 517 | goto err; | 488 | goto err; |
| 518 | } | 489 | } |
| 519 | s->s3->tmp.message_size=l; | 490 | s->s3->tmp.message_size = l; |
| 520 | s->state=stn; | 491 | s->state = stn; |
| 521 | 492 | ||
| 522 | s->init_msg = s->init_buf->data + 4; | 493 | s->init_msg = s->init_buf->data + 4; |
| 523 | s->init_num = 0; | 494 | s->init_num = 0; |
| 524 | } | 495 | } |
| 525 | 496 | ||
| 526 | /* next state (stn) */ | 497 | /* next state (stn) */ |
| 527 | p = s->init_msg; | 498 | p = s->init_msg; |
| 528 | n = s->s3->tmp.message_size - s->init_num; | 499 | n = s->s3->tmp.message_size - s->init_num; |
| 529 | while (n > 0) | 500 | while (n > 0) { |
| 530 | { | 501 | i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, |
| 531 | i=s->method->ssl_read_bytes(s,SSL3_RT_HANDSHAKE,&p[s->init_num],n,0); | 502 | &p[s->init_num], n, 0); |
| 532 | if (i <= 0) | 503 | if (i <= 0) { |
| 533 | { | 504 | s->rwstate = SSL_READING; |
| 534 | s->rwstate=SSL_READING; | ||
| 535 | *ok = 0; | 505 | *ok = 0; |
| 536 | return i; | 506 | return i; |
| 537 | } | 507 | } |
| 538 | s->init_num += i; | 508 | s->init_num += i; |
| 539 | n -= i; | 509 | n -= i; |
| 540 | } | 510 | } |
| 541 | 511 | ||
| 542 | #ifndef OPENSSL_NO_NEXTPROTONEG | 512 | #ifndef OPENSSL_NO_NEXTPROTONEG |
| 543 | /* If receiving Finished, record MAC of prior handshake messages for | 513 | /* If receiving Finished, record MAC of prior handshake messages for |
| @@ -550,64 +520,60 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
| 550 | ssl3_finish_mac(s, (unsigned char *)s->init_buf->data, s->init_num + 4); | 520 | ssl3_finish_mac(s, (unsigned char *)s->init_buf->data, s->init_num + 4); |
| 551 | if (s->msg_callback) | 521 | if (s->msg_callback) |
| 552 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->init_buf->data, (size_t)s->init_num + 4, s, s->msg_callback_arg); | 522 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->init_buf->data, (size_t)s->init_num + 4, s, s->msg_callback_arg); |
| 553 | *ok=1; | 523 | *ok = 1; |
| 554 | return s->init_num; | 524 | return s->init_num; |
| 555 | f_err: | 525 | f_err: |
| 556 | ssl3_send_alert(s,SSL3_AL_FATAL,al); | 526 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
| 557 | err: | 527 | err: |
| 558 | *ok=0; | 528 | *ok = 0; |
| 559 | return(-1); | 529 | return (-1); |
| 560 | } | 530 | } |
| 561 | 531 | ||
| 562 | int ssl_cert_type(X509 *x, EVP_PKEY *pkey) | 532 | int |
| 563 | { | 533 | ssl_cert_type(X509 *x, EVP_PKEY *pkey) |
| 534 | { | ||
| 564 | EVP_PKEY *pk; | 535 | EVP_PKEY *pk; |
| 565 | int ret= -1,i; | 536 | int ret = -1, i; |
| 566 | 537 | ||
| 567 | if (pkey == NULL) | 538 | if (pkey == NULL) |
| 568 | pk=X509_get_pubkey(x); | 539 | pk = X509_get_pubkey(x); |
| 569 | else | 540 | else |
| 570 | pk=pkey; | 541 | pk = pkey; |
| 571 | if (pk == NULL) goto err; | 542 | if (pk == NULL) |
| 572 | 543 | goto err; | |
| 573 | i=pk->type; | 544 | |
| 574 | if (i == EVP_PKEY_RSA) | 545 | i = pk->type; |
| 575 | { | 546 | if (i == EVP_PKEY_RSA) { |
| 576 | ret=SSL_PKEY_RSA_ENC; | 547 | ret = SSL_PKEY_RSA_ENC; |
| 577 | } | 548 | } else if (i == EVP_PKEY_DSA) { |
| 578 | else if (i == EVP_PKEY_DSA) | 549 | ret = SSL_PKEY_DSA_SIGN; |
| 579 | { | 550 | } |
| 580 | ret=SSL_PKEY_DSA_SIGN; | ||
| 581 | } | ||
| 582 | #ifndef OPENSSL_NO_EC | 551 | #ifndef OPENSSL_NO_EC |
| 583 | else if (i == EVP_PKEY_EC) | 552 | else if (i == EVP_PKEY_EC) { |
| 584 | { | ||
| 585 | ret = SSL_PKEY_ECC; | 553 | ret = SSL_PKEY_ECC; |
| 586 | } | 554 | } |
| 587 | #endif | 555 | #endif |
| 588 | else if (i == NID_id_GostR3410_94 || i == NID_id_GostR3410_94_cc) | 556 | else if (i == NID_id_GostR3410_94 || i == NID_id_GostR3410_94_cc) { |
| 589 | { | ||
| 590 | ret = SSL_PKEY_GOST94; | 557 | ret = SSL_PKEY_GOST94; |
| 591 | } | 558 | } else if (i == NID_id_GostR3410_2001 || i == NID_id_GostR3410_2001_cc) { |
| 592 | else if (i == NID_id_GostR3410_2001 || i == NID_id_GostR3410_2001_cc) | ||
| 593 | { | ||
| 594 | ret = SSL_PKEY_GOST01; | 559 | ret = SSL_PKEY_GOST01; |
| 595 | } | ||
| 596 | err: | ||
| 597 | if(!pkey) EVP_PKEY_free(pk); | ||
| 598 | return(ret); | ||
| 599 | } | 560 | } |
| 561 | err: | ||
| 562 | if (!pkey) | ||
| 563 | EVP_PKEY_free(pk); | ||
| 564 | return (ret); | ||
| 565 | } | ||
| 600 | 566 | ||
| 601 | int ssl_verify_alarm_type(long type) | 567 | int |
| 602 | { | 568 | ssl_verify_alarm_type(long type) |
| 569 | { | ||
| 603 | int al; | 570 | int al; |
| 604 | 571 | ||
| 605 | switch(type) | 572 | switch (type) { |
| 606 | { | ||
| 607 | case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: | 573 | case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: |
| 608 | case X509_V_ERR_UNABLE_TO_GET_CRL: | 574 | case X509_V_ERR_UNABLE_TO_GET_CRL: |
| 609 | case X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER: | 575 | case X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER: |
| 610 | al=SSL_AD_UNKNOWN_CA; | 576 | al = SSL_AD_UNKNOWN_CA; |
| 611 | break; | 577 | break; |
| 612 | case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: | 578 | case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: |
| 613 | case X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: | 579 | case X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: |
| @@ -620,21 +586,21 @@ int ssl_verify_alarm_type(long type) | |||
| 620 | case X509_V_ERR_CRL_NOT_YET_VALID: | 586 | case X509_V_ERR_CRL_NOT_YET_VALID: |
| 621 | case X509_V_ERR_CERT_UNTRUSTED: | 587 | case X509_V_ERR_CERT_UNTRUSTED: |
| 622 | case X509_V_ERR_CERT_REJECTED: | 588 | case X509_V_ERR_CERT_REJECTED: |
| 623 | al=SSL_AD_BAD_CERTIFICATE; | 589 | al = SSL_AD_BAD_CERTIFICATE; |
| 624 | break; | 590 | break; |
| 625 | case X509_V_ERR_CERT_SIGNATURE_FAILURE: | 591 | case X509_V_ERR_CERT_SIGNATURE_FAILURE: |
| 626 | case X509_V_ERR_CRL_SIGNATURE_FAILURE: | 592 | case X509_V_ERR_CRL_SIGNATURE_FAILURE: |
| 627 | al=SSL_AD_DECRYPT_ERROR; | 593 | al = SSL_AD_DECRYPT_ERROR; |
| 628 | break; | 594 | break; |
| 629 | case X509_V_ERR_CERT_HAS_EXPIRED: | 595 | case X509_V_ERR_CERT_HAS_EXPIRED: |
| 630 | case X509_V_ERR_CRL_HAS_EXPIRED: | 596 | case X509_V_ERR_CRL_HAS_EXPIRED: |
| 631 | al=SSL_AD_CERTIFICATE_EXPIRED; | 597 | al = SSL_AD_CERTIFICATE_EXPIRED; |
| 632 | break; | 598 | break; |
| 633 | case X509_V_ERR_CERT_REVOKED: | 599 | case X509_V_ERR_CERT_REVOKED: |
| 634 | al=SSL_AD_CERTIFICATE_REVOKED; | 600 | al = SSL_AD_CERTIFICATE_REVOKED; |
| 635 | break; | 601 | break; |
| 636 | case X509_V_ERR_OUT_OF_MEM: | 602 | case X509_V_ERR_OUT_OF_MEM: |
| 637 | al=SSL_AD_INTERNAL_ERROR; | 603 | al = SSL_AD_INTERNAL_ERROR; |
| 638 | break; | 604 | break; |
| 639 | case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: | 605 | case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: |
| 640 | case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: | 606 | case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: |
| @@ -643,20 +609,20 @@ int ssl_verify_alarm_type(long type) | |||
| 643 | case X509_V_ERR_CERT_CHAIN_TOO_LONG: | 609 | case X509_V_ERR_CERT_CHAIN_TOO_LONG: |
| 644 | case X509_V_ERR_PATH_LENGTH_EXCEEDED: | 610 | case X509_V_ERR_PATH_LENGTH_EXCEEDED: |
| 645 | case X509_V_ERR_INVALID_CA: | 611 | case X509_V_ERR_INVALID_CA: |
| 646 | al=SSL_AD_UNKNOWN_CA; | 612 | al = SSL_AD_UNKNOWN_CA; |
| 647 | break; | 613 | break; |
| 648 | case X509_V_ERR_APPLICATION_VERIFICATION: | 614 | case X509_V_ERR_APPLICATION_VERIFICATION: |
| 649 | al=SSL_AD_HANDSHAKE_FAILURE; | 615 | al = SSL_AD_HANDSHAKE_FAILURE; |
| 650 | break; | 616 | break; |
| 651 | case X509_V_ERR_INVALID_PURPOSE: | 617 | case X509_V_ERR_INVALID_PURPOSE: |
| 652 | al=SSL_AD_UNSUPPORTED_CERTIFICATE; | 618 | al = SSL_AD_UNSUPPORTED_CERTIFICATE; |
| 653 | break; | 619 | break; |
| 654 | default: | 620 | default: |
| 655 | al=SSL_AD_CERTIFICATE_UNKNOWN; | 621 | al = SSL_AD_CERTIFICATE_UNKNOWN; |
| 656 | break; | 622 | break; |
| 657 | } | ||
| 658 | return(al); | ||
| 659 | } | 623 | } |
| 624 | return (al); | ||
| 625 | } | ||
| 660 | 626 | ||
| 661 | #ifndef OPENSSL_NO_BUF_FREELISTS | 627 | #ifndef OPENSSL_NO_BUF_FREELISTS |
| 662 | /* On some platforms, malloc() performance is bad enough that you can't just | 628 | /* On some platforms, malloc() performance is bad enough that you can't just |
| @@ -680,7 +646,7 @@ int ssl_verify_alarm_type(long type) | |||
| 680 | */ | 646 | */ |
| 681 | static void * | 647 | static void * |
| 682 | freelist_extract(SSL_CTX *ctx, int for_read, int sz) | 648 | freelist_extract(SSL_CTX *ctx, int for_read, int sz) |
| 683 | { | 649 | { |
| 684 | SSL3_BUF_FREELIST *list; | 650 | SSL3_BUF_FREELIST *list; |
| 685 | SSL3_BUF_FREELIST_ENTRY *ent = NULL; | 651 | SSL3_BUF_FREELIST_ENTRY *ent = NULL; |
| 686 | void *result = NULL; | 652 | void *result = NULL; |
| @@ -689,13 +655,12 @@ freelist_extract(SSL_CTX *ctx, int for_read, int sz) | |||
| 689 | list = for_read ? ctx->rbuf_freelist : ctx->wbuf_freelist; | 655 | list = for_read ? ctx->rbuf_freelist : ctx->wbuf_freelist; |
| 690 | if (list != NULL && sz == (int)list->chunklen) | 656 | if (list != NULL && sz == (int)list->chunklen) |
| 691 | ent = list->head; | 657 | ent = list->head; |
| 692 | if (ent != NULL) | 658 | if (ent != NULL) { |
| 693 | { | ||
| 694 | list->head = ent->next; | 659 | list->head = ent->next; |
| 695 | result = ent; | 660 | result = ent; |
| 696 | if (--list->len == 0) | 661 | if (--list->len == 0) |
| 697 | list->chunklen = 0; | 662 | list->chunklen = 0; |
| 698 | } | 663 | } |
| 699 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 664 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); |
| 700 | if (!result) | 665 | if (!result) |
| 701 | result = OPENSSL_malloc(sz); | 666 | result = OPENSSL_malloc(sz); |
| @@ -704,80 +669,76 @@ freelist_extract(SSL_CTX *ctx, int for_read, int sz) | |||
| 704 | 669 | ||
| 705 | static void | 670 | static void |
| 706 | freelist_insert(SSL_CTX *ctx, int for_read, size_t sz, void *mem) | 671 | freelist_insert(SSL_CTX *ctx, int for_read, size_t sz, void *mem) |
| 707 | { | 672 | { |
| 708 | SSL3_BUF_FREELIST *list; | 673 | SSL3_BUF_FREELIST *list; |
| 709 | SSL3_BUF_FREELIST_ENTRY *ent; | 674 | SSL3_BUF_FREELIST_ENTRY *ent; |
| 710 | 675 | ||
| 711 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 676 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
| 712 | list = for_read ? ctx->rbuf_freelist : ctx->wbuf_freelist; | 677 | list = for_read ? ctx->rbuf_freelist : ctx->wbuf_freelist; |
| 713 | if (list != NULL && | 678 | if (list != NULL && (sz == list->chunklen || list->chunklen == 0) && |
| 714 | (sz == list->chunklen || list->chunklen == 0) && | 679 | list->len < ctx->freelist_max_len && sz >= sizeof(*ent)) { |
| 715 | list->len < ctx->freelist_max_len && | ||
| 716 | sz >= sizeof(*ent)) | ||
| 717 | { | ||
| 718 | list->chunklen = sz; | 680 | list->chunklen = sz; |
| 719 | ent = mem; | 681 | ent = mem; |
| 720 | ent->next = list->head; | 682 | ent->next = list->head; |
| 721 | list->head = ent; | 683 | list->head = ent; |
| 722 | ++list->len; | 684 | ++list->len; |
| 723 | mem = NULL; | 685 | mem = NULL; |
| 724 | } | 686 | } |
| 725 | 687 | ||
| 726 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 688 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); |
| 727 | if (mem) | 689 | if (mem) |
| 728 | OPENSSL_free(mem); | 690 | OPENSSL_free(mem); |
| 729 | } | 691 | } |
| 730 | #else | 692 | #else |
| 731 | #define freelist_extract(c,fr,sz) OPENSSL_malloc(sz) | 693 | #define freelist_extract(c,fr,sz) OPENSSL_malloc(sz) |
| 732 | #define freelist_insert(c,fr,sz,m) OPENSSL_free(m) | 694 | #define freelist_insert(c,fr,sz,m) OPENSSL_free(m) |
| 733 | #endif | 695 | #endif |
| 734 | 696 | ||
| 735 | int ssl3_setup_read_buffer(SSL *s) | 697 | int |
| 736 | { | 698 | ssl3_setup_read_buffer(SSL *s) |
| 699 | { | ||
| 737 | unsigned char *p; | 700 | unsigned char *p; |
| 738 | size_t len,align=0,headerlen; | 701 | size_t len, align = 0, headerlen; |
| 739 | 702 | ||
| 740 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) | 703 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) |
| 741 | headerlen = DTLS1_RT_HEADER_LENGTH; | 704 | headerlen = DTLS1_RT_HEADER_LENGTH; |
| 742 | else | 705 | else |
| 743 | headerlen = SSL3_RT_HEADER_LENGTH; | 706 | headerlen = SSL3_RT_HEADER_LENGTH; |
| 744 | 707 | ||
| 745 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 708 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
| 746 | align = (-SSL3_RT_HEADER_LENGTH)&(SSL3_ALIGN_PAYLOAD-1); | 709 | align = (-SSL3_RT_HEADER_LENGTH)&(SSL3_ALIGN_PAYLOAD - 1); |
| 747 | #endif | 710 | #endif |
| 748 | 711 | ||
| 749 | if (s->s3->rbuf.buf == NULL) | 712 | if (s->s3->rbuf.buf == NULL) { |
| 750 | { | 713 | len = SSL3_RT_MAX_PLAIN_LENGTH + |
| 751 | len = SSL3_RT_MAX_PLAIN_LENGTH | 714 | SSL3_RT_MAX_ENCRYPTED_OVERHEAD + headerlen + align; |
| 752 | + SSL3_RT_MAX_ENCRYPTED_OVERHEAD | 715 | if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) { |
| 753 | + headerlen + align; | ||
| 754 | if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) | ||
| 755 | { | ||
| 756 | s->s3->init_extra = 1; | 716 | s->s3->init_extra = 1; |
| 757 | len += SSL3_RT_MAX_EXTRA; | 717 | len += SSL3_RT_MAX_EXTRA; |
| 758 | } | 718 | } |
| 759 | #ifndef OPENSSL_NO_COMP | 719 | #ifndef OPENSSL_NO_COMP |
| 760 | if (!(s->options & SSL_OP_NO_COMPRESSION)) | 720 | if (!(s->options & SSL_OP_NO_COMPRESSION)) |
| 761 | len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; | 721 | len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; |
| 762 | #endif | 722 | #endif |
| 763 | if ((p=freelist_extract(s->ctx, 1, len)) == NULL) | 723 | if ((p = freelist_extract(s->ctx, 1, len)) == NULL) |
| 764 | goto err; | 724 | goto err; |
| 765 | s->s3->rbuf.buf = p; | 725 | s->s3->rbuf.buf = p; |
| 766 | s->s3->rbuf.len = len; | 726 | s->s3->rbuf.len = len; |
| 767 | } | 727 | } |
| 768 | 728 | ||
| 769 | s->packet= &(s->s3->rbuf.buf[0]); | 729 | s->packet = &(s->s3->rbuf.buf[0]); |
| 770 | return 1; | 730 | return 1; |
| 771 | 731 | ||
| 772 | err: | 732 | err: |
| 773 | SSLerr(SSL_F_SSL3_SETUP_READ_BUFFER,ERR_R_MALLOC_FAILURE); | 733 | SSLerr(SSL_F_SSL3_SETUP_READ_BUFFER, ERR_R_MALLOC_FAILURE); |
| 774 | return 0; | 734 | return 0; |
| 775 | } | 735 | } |
| 776 | 736 | ||
| 777 | int ssl3_setup_write_buffer(SSL *s) | 737 | int |
| 778 | { | 738 | ssl3_setup_write_buffer(SSL *s) |
| 739 | { | ||
| 779 | unsigned char *p; | 740 | unsigned char *p; |
| 780 | size_t len,align=0,headerlen; | 741 | size_t len, align = 0, headerlen; |
| 781 | 742 | ||
| 782 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) | 743 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) |
| 783 | headerlen = DTLS1_RT_HEADER_LENGTH + 1; | 744 | headerlen = DTLS1_RT_HEADER_LENGTH + 1; |
| @@ -785,62 +746,61 @@ int ssl3_setup_write_buffer(SSL *s) | |||
| 785 | headerlen = SSL3_RT_HEADER_LENGTH; | 746 | headerlen = SSL3_RT_HEADER_LENGTH; |
| 786 | 747 | ||
| 787 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 748 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
| 788 | align = (-SSL3_RT_HEADER_LENGTH)&(SSL3_ALIGN_PAYLOAD-1); | 749 | align = (-SSL3_RT_HEADER_LENGTH)&(SSL3_ALIGN_PAYLOAD - 1); |
| 789 | #endif | 750 | #endif |
| 790 | 751 | ||
| 791 | if (s->s3->wbuf.buf == NULL) | 752 | if (s->s3->wbuf.buf == NULL) { |
| 792 | { | 753 | len = s->max_send_fragment + |
| 793 | len = s->max_send_fragment | 754 | SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD + headerlen + align; |
| 794 | + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD | ||
| 795 | + headerlen + align; | ||
| 796 | #ifndef OPENSSL_NO_COMP | 755 | #ifndef OPENSSL_NO_COMP |
| 797 | if (!(s->options & SSL_OP_NO_COMPRESSION)) | 756 | if (!(s->options & SSL_OP_NO_COMPRESSION)) |
| 798 | len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; | 757 | len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; |
| 799 | #endif | 758 | #endif |
| 800 | if (!(s->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)) | 759 | if (!(s->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)) |
| 801 | len += headerlen + align | 760 | len += headerlen + align + |
| 802 | + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD; | 761 | SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD; |
| 803 | 762 | ||
| 804 | if ((p=freelist_extract(s->ctx, 0, len)) == NULL) | 763 | if ((p = freelist_extract(s->ctx, 0, len)) == NULL) |
| 805 | goto err; | 764 | goto err; |
| 806 | s->s3->wbuf.buf = p; | 765 | s->s3->wbuf.buf = p; |
| 807 | s->s3->wbuf.len = len; | 766 | s->s3->wbuf.len = len; |
| 808 | } | 767 | } |
| 809 | 768 | ||
| 810 | return 1; | 769 | return 1; |
| 811 | 770 | ||
| 812 | err: | 771 | err: |
| 813 | SSLerr(SSL_F_SSL3_SETUP_WRITE_BUFFER,ERR_R_MALLOC_FAILURE); | 772 | SSLerr(SSL_F_SSL3_SETUP_WRITE_BUFFER, ERR_R_MALLOC_FAILURE); |
| 814 | return 0; | 773 | return 0; |
| 815 | } | 774 | } |
| 816 | 775 | ||
| 817 | 776 | ||
| 818 | int ssl3_setup_buffers(SSL *s) | 777 | int |
| 819 | { | 778 | ssl3_setup_buffers(SSL *s) |
| 779 | { | ||
| 820 | if (!ssl3_setup_read_buffer(s)) | 780 | if (!ssl3_setup_read_buffer(s)) |
| 821 | return 0; | 781 | return 0; |
| 822 | if (!ssl3_setup_write_buffer(s)) | 782 | if (!ssl3_setup_write_buffer(s)) |
| 823 | return 0; | 783 | return 0; |
| 824 | return 1; | 784 | return 1; |
| 825 | } | 785 | } |
| 826 | 786 | ||
| 827 | int ssl3_release_write_buffer(SSL *s) | 787 | int |
| 828 | { | 788 | ssl3_release_write_buffer(SSL *s) |
| 829 | if (s->s3->wbuf.buf != NULL) | 789 | { |
| 830 | { | 790 | if (s->s3->wbuf.buf != NULL) { |
| 831 | freelist_insert(s->ctx, 0, s->s3->wbuf.len, s->s3->wbuf.buf); | 791 | freelist_insert(s->ctx, 0, s->s3->wbuf.len, s->s3->wbuf.buf); |
| 832 | s->s3->wbuf.buf = NULL; | 792 | s->s3->wbuf.buf = NULL; |
| 833 | } | ||
| 834 | return 1; | ||
| 835 | } | 793 | } |
| 794 | return 1; | ||
| 795 | } | ||
| 836 | 796 | ||
| 837 | int ssl3_release_read_buffer(SSL *s) | 797 | int |
| 838 | { | 798 | ssl3_release_read_buffer(SSL *s) |
| 839 | if (s->s3->rbuf.buf != NULL) | 799 | { |
| 840 | { | 800 | if (s->s3->rbuf.buf != NULL) { |
| 841 | freelist_insert(s->ctx, 1, s->s3->rbuf.len, s->s3->rbuf.buf); | 801 | freelist_insert(s->ctx, 1, s->s3->rbuf.len, s->s3->rbuf.buf); |
| 842 | s->s3->rbuf.buf = NULL; | 802 | s->s3->rbuf.buf = NULL; |
| 843 | } | ||
| 844 | return 1; | ||
| 845 | } | 803 | } |
| 804 | return 1; | ||
| 805 | } | ||
| 846 | 806 | ||
diff --git a/src/lib/libssl/src/ssl/s3_cbc.c b/src/lib/libssl/src/ssl/s3_cbc.c index 443a31e746..d6cc9b4771 100644 --- a/src/lib/libssl/src/ssl/s3_cbc.c +++ b/src/lib/libssl/src/ssl/s3_cbc.c | |||
| @@ -73,30 +73,33 @@ | |||
| 73 | * bits. They use the fact that arithmetic shift shifts-in the sign bit. | 73 | * bits. They use the fact that arithmetic shift shifts-in the sign bit. |
| 74 | * However, this is not ensured by the C standard so you may need to replace | 74 | * However, this is not ensured by the C standard so you may need to replace |
| 75 | * them with something else on odd CPUs. */ | 75 | * them with something else on odd CPUs. */ |
| 76 | #define DUPLICATE_MSB_TO_ALL(x) ( (unsigned)( (int)(x) >> (sizeof(int)*8-1) ) ) | 76 | #define DUPLICATE_MSB_TO_ALL(x) ((unsigned)((int)(x) >> (sizeof(int) * 8 - 1))) |
| 77 | #define DUPLICATE_MSB_TO_ALL_8(x) ((unsigned char)(DUPLICATE_MSB_TO_ALL(x))) | 77 | #define DUPLICATE_MSB_TO_ALL_8(x) ((unsigned char)(DUPLICATE_MSB_TO_ALL(x))) |
| 78 | 78 | ||
| 79 | /* constant_time_lt returns 0xff if a<b and 0x00 otherwise. */ | 79 | /* constant_time_lt returns 0xff if a<b and 0x00 otherwise. */ |
| 80 | static unsigned constant_time_lt(unsigned a, unsigned b) | 80 | static unsigned |
| 81 | { | 81 | constant_time_lt(unsigned a, unsigned b) |
| 82 | { | ||
| 82 | a -= b; | 83 | a -= b; |
| 83 | return DUPLICATE_MSB_TO_ALL(a); | 84 | return DUPLICATE_MSB_TO_ALL(a); |
| 84 | } | 85 | } |
| 85 | 86 | ||
| 86 | /* constant_time_ge returns 0xff if a>=b and 0x00 otherwise. */ | 87 | /* constant_time_ge returns 0xff if a>=b and 0x00 otherwise. */ |
| 87 | static unsigned constant_time_ge(unsigned a, unsigned b) | 88 | static unsigned |
| 88 | { | 89 | constant_time_ge(unsigned a, unsigned b) |
| 90 | { | ||
| 89 | a -= b; | 91 | a -= b; |
| 90 | return DUPLICATE_MSB_TO_ALL(~a); | 92 | return DUPLICATE_MSB_TO_ALL(~a); |
| 91 | } | 93 | } |
| 92 | 94 | ||
| 93 | /* constant_time_eq_8 returns 0xff if a==b and 0x00 otherwise. */ | 95 | /* constant_time_eq_8 returns 0xff if a==b and 0x00 otherwise. */ |
| 94 | static unsigned char constant_time_eq_8(unsigned a, unsigned b) | 96 | static unsigned char |
| 95 | { | 97 | constant_time_eq_8(unsigned a, unsigned b) |
| 98 | { | ||
| 96 | unsigned c = a ^ b; | 99 | unsigned c = a ^ b; |
| 97 | c--; | 100 | c--; |
| 98 | return DUPLICATE_MSB_TO_ALL_8(c); | 101 | return DUPLICATE_MSB_TO_ALL_8(c); |
| 99 | } | 102 | } |
| 100 | 103 | ||
| 101 | /* ssl3_cbc_remove_padding removes padding from the decrypted, SSLv3, CBC | 104 | /* ssl3_cbc_remove_padding removes padding from the decrypted, SSLv3, CBC |
| 102 | * record in |rec| by updating |rec->length| in constant time. | 105 | * record in |rec| by updating |rec->length| in constant time. |
| @@ -106,11 +109,10 @@ static unsigned char constant_time_eq_8(unsigned a, unsigned b) | |||
| 106 | * 0: (in non-constant time) if the record is publicly invalid. | 109 | * 0: (in non-constant time) if the record is publicly invalid. |
| 107 | * 1: if the padding was valid | 110 | * 1: if the padding was valid |
| 108 | * -1: otherwise. */ | 111 | * -1: otherwise. */ |
| 109 | int ssl3_cbc_remove_padding(const SSL* s, | 112 | int |
| 110 | SSL3_RECORD *rec, | 113 | ssl3_cbc_remove_padding(const SSL* s, SSL3_RECORD *rec, unsigned block_size, |
| 111 | unsigned block_size, | 114 | unsigned mac_size) |
| 112 | unsigned mac_size) | 115 | { |
| 113 | { | ||
| 114 | unsigned padding_length, good; | 116 | unsigned padding_length, good; |
| 115 | const unsigned overhead = 1 /* padding length byte */ + mac_size; | 117 | const unsigned overhead = 1 /* padding length byte */ + mac_size; |
| 116 | 118 | ||
| @@ -119,13 +121,13 @@ int ssl3_cbc_remove_padding(const SSL* s, | |||
| 119 | if (overhead > rec->length) | 121 | if (overhead > rec->length) |
| 120 | return 0; | 122 | return 0; |
| 121 | 123 | ||
| 122 | padding_length = rec->data[rec->length-1]; | 124 | padding_length = rec->data[rec->length - 1]; |
| 123 | good = constant_time_ge(rec->length, padding_length+overhead); | 125 | good = constant_time_ge(rec->length, padding_length + overhead); |
| 124 | /* SSLv3 requires that the padding is minimal. */ | 126 | /* SSLv3 requires that the padding is minimal. */ |
| 125 | good &= constant_time_ge(block_size, padding_length+1); | 127 | good &= constant_time_ge(block_size, padding_length + 1); |
| 126 | padding_length = good & (padding_length+1); | 128 | padding_length = good & (padding_length + 1); |
| 127 | rec->length -= padding_length; | 129 | rec->length -= padding_length; |
| 128 | rec->type |= padding_length<<8; /* kludge: pass padding length */ | 130 | rec->type |= padding_length << 8; /* kludge: pass padding length */ |
| 129 | return (int)((good & 1) | (~good & -1)); | 131 | return (int)((good & 1) | (~good & -1)); |
| 130 | } | 132 | } |
| 131 | 133 | ||
| @@ -140,16 +142,14 @@ int ssl3_cbc_remove_padding(const SSL* s, | |||
| 140 | * 0: (in non-constant time) if the record is publicly invalid. | 142 | * 0: (in non-constant time) if the record is publicly invalid. |
| 141 | * 1: if the padding was valid | 143 | * 1: if the padding was valid |
| 142 | * -1: otherwise. */ | 144 | * -1: otherwise. */ |
| 143 | int tls1_cbc_remove_padding(const SSL* s, | 145 | int |
| 144 | SSL3_RECORD *rec, | 146 | tls1_cbc_remove_padding(const SSL* s, SSL3_RECORD *rec, unsigned block_size, |
| 145 | unsigned block_size, | 147 | unsigned mac_size) |
| 146 | unsigned mac_size) | 148 | { |
| 147 | { | ||
| 148 | unsigned padding_length, good, to_check, i; | 149 | unsigned padding_length, good, to_check, i; |
| 149 | const unsigned overhead = 1 /* padding length byte */ + mac_size; | 150 | const unsigned overhead = 1 /* padding length byte */ + mac_size; |
| 150 | /* Check if version requires explicit IV */ | 151 | /* Check if version requires explicit IV */ |
| 151 | if (s->version >= TLS1_1_VERSION || s->version == DTLS1_BAD_VER) | 152 | if (s->version >= TLS1_1_VERSION || s->version == DTLS1_BAD_VER) { |
| 152 | { | ||
| 153 | /* These lengths are all public so we can test them in | 153 | /* These lengths are all public so we can test them in |
| 154 | * non-constant time. | 154 | * non-constant time. |
| 155 | */ | 155 | */ |
| @@ -159,40 +159,35 @@ int tls1_cbc_remove_padding(const SSL* s, | |||
| 159 | rec->data += block_size; | 159 | rec->data += block_size; |
| 160 | rec->input += block_size; | 160 | rec->input += block_size; |
| 161 | rec->length -= block_size; | 161 | rec->length -= block_size; |
| 162 | } | 162 | } else if (overhead > rec->length) |
| 163 | else if (overhead > rec->length) | ||
| 164 | return 0; | 163 | return 0; |
| 165 | 164 | ||
| 166 | padding_length = rec->data[rec->length-1]; | 165 | padding_length = rec->data[rec->length - 1]; |
| 167 | 166 | ||
| 168 | /* NB: if compression is in operation the first packet may not be of | 167 | /* NB: if compression is in operation the first packet may not be of |
| 169 | * even length so the padding bug check cannot be performed. This bug | 168 | * even length so the padding bug check cannot be performed. This bug |
| 170 | * workaround has been around since SSLeay so hopefully it is either | 169 | * workaround has been around since SSLeay so hopefully it is either |
| 171 | * fixed now or no buggy implementation supports compression [steve] | 170 | * fixed now or no buggy implementation supports compression [steve] |
| 172 | */ | 171 | */ |
| 173 | if ( (s->options&SSL_OP_TLS_BLOCK_PADDING_BUG) && !s->expand) | 172 | if ((s->options & SSL_OP_TLS_BLOCK_PADDING_BUG) && !s->expand) { |
| 174 | { | ||
| 175 | /* First packet is even in size, so check */ | 173 | /* First packet is even in size, so check */ |
| 176 | if ((memcmp(s->s3->read_sequence, "\0\0\0\0\0\0\0\0",8) == 0) && | 174 | if ((memcmp(s->s3->read_sequence, "\0\0\0\0\0\0\0\0", 8) == 0) && |
| 177 | !(padding_length & 1)) | 175 | !(padding_length & 1)) { |
| 178 | { | ||
| 179 | s->s3->flags|=TLS1_FLAGS_TLS_PADDING_BUG; | 176 | s->s3->flags|=TLS1_FLAGS_TLS_PADDING_BUG; |
| 180 | } | 177 | } |
| 181 | if ((s->s3->flags & TLS1_FLAGS_TLS_PADDING_BUG) && | 178 | if ((s->s3->flags & TLS1_FLAGS_TLS_PADDING_BUG) && |
| 182 | padding_length > 0) | 179 | padding_length > 0) { |
| 183 | { | ||
| 184 | padding_length--; | 180 | padding_length--; |
| 185 | } | ||
| 186 | } | 181 | } |
| 182 | } | ||
| 187 | 183 | ||
| 188 | if (EVP_CIPHER_flags(s->enc_read_ctx->cipher)&EVP_CIPH_FLAG_AEAD_CIPHER) | 184 | if (EVP_CIPHER_flags(s->enc_read_ctx->cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) { |
| 189 | { | ||
| 190 | /* padding is already verified */ | 185 | /* padding is already verified */ |
| 191 | rec->length -= padding_length + 1; | 186 | rec->length -= padding_length + 1; |
| 192 | return 1; | 187 | return 1; |
| 193 | } | 188 | } |
| 194 | 189 | ||
| 195 | good = constant_time_ge(rec->length, overhead+padding_length); | 190 | good = constant_time_ge(rec->length, overhead + padding_length); |
| 196 | /* The padding consists of a length byte at the end of the record and | 191 | /* The padding consists of a length byte at the end of the record and |
| 197 | * then that many bytes of padding, all with the same value as the | 192 | * then that many bytes of padding, all with the same value as the |
| 198 | * length byte. Thus, with the length byte included, there are i+1 | 193 | * length byte. Thus, with the length byte included, there are i+1 |
| @@ -203,17 +198,16 @@ int tls1_cbc_remove_padding(const SSL* s, | |||
| 203 | * amount of padding possible. (Again, the length of the record is | 198 | * amount of padding possible. (Again, the length of the record is |
| 204 | * public information so we can use it.) */ | 199 | * public information so we can use it.) */ |
| 205 | to_check = 255; /* maximum amount of padding. */ | 200 | to_check = 255; /* maximum amount of padding. */ |
| 206 | if (to_check > rec->length-1) | 201 | if (to_check > rec->length - 1) |
| 207 | to_check = rec->length-1; | 202 | to_check = rec->length - 1; |
| 208 | 203 | ||
| 209 | for (i = 0; i < to_check; i++) | 204 | for (i = 0; i < to_check; i++) { |
| 210 | { | ||
| 211 | unsigned char mask = constant_time_ge(padding_length, i); | 205 | unsigned char mask = constant_time_ge(padding_length, i); |
| 212 | unsigned char b = rec->data[rec->length-1-i]; | 206 | unsigned char b = rec->data[rec->length - 1 - i]; |
| 213 | /* The final |padding_length+1| bytes should all have the value | 207 | /* The final |padding_length+1| bytes should all have the value |
| 214 | * |padding_length|. Therefore the XOR should be zero. */ | 208 | * |padding_length|. Therefore the XOR should be zero. */ |
| 215 | good &= ~(mask&(padding_length ^ b)); | 209 | good &= ~(mask&(padding_length ^ b)); |
| 216 | } | 210 | } |
| 217 | 211 | ||
| 218 | /* If any of the final |padding_length+1| bytes had the wrong value, | 212 | /* If any of the final |padding_length+1| bytes had the wrong value, |
| 219 | * one or more of the lower eight bits of |good| will be cleared. We | 213 | * one or more of the lower eight bits of |good| will be cleared. We |
| @@ -222,15 +216,15 @@ int tls1_cbc_remove_padding(const SSL* s, | |||
| 222 | good &= good >> 4; | 216 | good &= good >> 4; |
| 223 | good &= good >> 2; | 217 | good &= good >> 2; |
| 224 | good &= good >> 1; | 218 | good &= good >> 1; |
| 225 | good <<= sizeof(good)*8-1; | 219 | good <<= sizeof(good)*8 - 1; |
| 226 | good = DUPLICATE_MSB_TO_ALL(good); | 220 | good = DUPLICATE_MSB_TO_ALL(good); |
| 227 | 221 | ||
| 228 | padding_length = good & (padding_length+1); | 222 | padding_length = good & (padding_length + 1); |
| 229 | rec->length -= padding_length; | 223 | rec->length -= padding_length; |
| 230 | rec->type |= padding_length<<8; /* kludge: pass padding length */ | 224 | rec->type |= padding_length<<8; /* kludge: pass padding length */ |
| 231 | 225 | ||
| 232 | return (int)((good & 1) | (~good & -1)); | 226 | return (int)((good & 1) | (~good & -1)); |
| 233 | } | 227 | } |
| 234 | 228 | ||
| 235 | /* ssl3_cbc_copy_mac copies |md_size| bytes from the end of |rec| to |out| in | 229 | /* ssl3_cbc_copy_mac copies |md_size| bytes from the end of |rec| to |out| in |
| 236 | * constant time (independent of the concrete value of rec->length, which may | 230 | * constant time (independent of the concrete value of rec->length, which may |
| @@ -251,12 +245,12 @@ int tls1_cbc_remove_padding(const SSL* s, | |||
| 251 | */ | 245 | */ |
| 252 | #define CBC_MAC_ROTATE_IN_PLACE | 246 | #define CBC_MAC_ROTATE_IN_PLACE |
| 253 | 247 | ||
| 254 | void ssl3_cbc_copy_mac(unsigned char* out, | 248 | void |
| 255 | const SSL3_RECORD *rec, | 249 | ssl3_cbc_copy_mac(unsigned char* out, const SSL3_RECORD *rec, |
| 256 | unsigned md_size,unsigned orig_len) | 250 | unsigned md_size, unsigned orig_len) |
| 257 | { | 251 | { |
| 258 | #if defined(CBC_MAC_ROTATE_IN_PLACE) | 252 | #if defined(CBC_MAC_ROTATE_IN_PLACE) |
| 259 | unsigned char rotated_mac_buf[64+EVP_MAX_MD_SIZE]; | 253 | unsigned char rotated_mac_buf[64 + EVP_MAX_MD_SIZE]; |
| 260 | unsigned char *rotated_mac; | 254 | unsigned char *rotated_mac; |
| 261 | #else | 255 | #else |
| 262 | unsigned char rotated_mac[EVP_MAX_MD_SIZE]; | 256 | unsigned char rotated_mac[EVP_MAX_MD_SIZE]; |
| @@ -276,7 +270,7 @@ void ssl3_cbc_copy_mac(unsigned char* out, | |||
| 276 | OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE); | 270 | OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE); |
| 277 | 271 | ||
| 278 | #if defined(CBC_MAC_ROTATE_IN_PLACE) | 272 | #if defined(CBC_MAC_ROTATE_IN_PLACE) |
| 279 | rotated_mac = rotated_mac_buf + ((0-(size_t)rotated_mac_buf)&63); | 273 | rotated_mac = rotated_mac_buf + ((0 - (size_t)rotated_mac_buf)&63); |
| 280 | #endif | 274 | #endif |
| 281 | 275 | ||
| 282 | /* This information is public so it's safe to branch based on it. */ | 276 | /* This information is public so it's safe to branch based on it. */ |
| @@ -290,42 +284,39 @@ void ssl3_cbc_copy_mac(unsigned char* out, | |||
| 290 | * figure out that it can remove div_spoiler as that would require it | 284 | * figure out that it can remove div_spoiler as that would require it |
| 291 | * to prove that md_size is always even, which I hope is beyond it. */ | 285 | * to prove that md_size is always even, which I hope is beyond it. */ |
| 292 | div_spoiler = md_size >> 1; | 286 | div_spoiler = md_size >> 1; |
| 293 | div_spoiler <<= (sizeof(div_spoiler)-1)*8; | 287 | div_spoiler <<= (sizeof(div_spoiler) - 1) * 8; |
| 294 | rotate_offset = (div_spoiler + mac_start - scan_start) % md_size; | 288 | rotate_offset = (div_spoiler + mac_start - scan_start) % md_size; |
| 295 | 289 | ||
| 296 | memset(rotated_mac, 0, md_size); | 290 | memset(rotated_mac, 0, md_size); |
| 297 | for (i = scan_start, j = 0; i < orig_len; i++) | 291 | for (i = scan_start, j = 0; i < orig_len; i++) { |
| 298 | { | ||
| 299 | unsigned char mac_started = constant_time_ge(i, mac_start); | 292 | unsigned char mac_started = constant_time_ge(i, mac_start); |
| 300 | unsigned char mac_ended = constant_time_ge(i, mac_end); | 293 | unsigned char mac_ended = constant_time_ge(i, mac_end); |
| 301 | unsigned char b = rec->data[i]; | 294 | unsigned char b = rec->data[i]; |
| 302 | rotated_mac[j++] |= b & mac_started & ~mac_ended; | 295 | rotated_mac[j++] |= b & mac_started & ~mac_ended; |
| 303 | j &= constant_time_lt(j,md_size); | 296 | j &= constant_time_lt(j, md_size); |
| 304 | } | 297 | } |
| 305 | 298 | ||
| 306 | /* Now rotate the MAC */ | 299 | /* Now rotate the MAC */ |
| 307 | #if defined(CBC_MAC_ROTATE_IN_PLACE) | 300 | #if defined(CBC_MAC_ROTATE_IN_PLACE) |
| 308 | j = 0; | 301 | j = 0; |
| 309 | for (i = 0; i < md_size; i++) | 302 | for (i = 0; i < md_size; i++) { |
| 310 | { | ||
| 311 | /* in case cache-line is 32 bytes, touch second line */ | 303 | /* in case cache-line is 32 bytes, touch second line */ |
| 312 | ((volatile unsigned char *)rotated_mac)[rotate_offset^32]; | 304 | ((volatile unsigned char *)rotated_mac)[rotate_offset^32]; |
| 313 | out[j++] = rotated_mac[rotate_offset++]; | 305 | out[j++] = rotated_mac[rotate_offset++]; |
| 314 | rotate_offset &= constant_time_lt(rotate_offset,md_size); | 306 | rotate_offset &= constant_time_lt(rotate_offset, md_size); |
| 315 | } | 307 | } |
| 316 | #else | 308 | #else |
| 317 | memset(out, 0, md_size); | 309 | memset(out, 0, md_size); |
| 318 | rotate_offset = md_size - rotate_offset; | 310 | rotate_offset = md_size - rotate_offset; |
| 319 | rotate_offset &= constant_time_lt(rotate_offset,md_size); | 311 | rotate_offset &= constant_time_lt(rotate_offset, md_size); |
| 320 | for (i = 0; i < md_size; i++) | 312 | for (i = 0; i < md_size; i++) { |
| 321 | { | ||
| 322 | for (j = 0; j < md_size; j++) | 313 | for (j = 0; j < md_size; j++) |
| 323 | out[j] |= rotated_mac[i] & constant_time_eq_8(j, rotate_offset); | 314 | out[j] |= rotated_mac[i] & constant_time_eq_8(j, rotate_offset); |
| 324 | rotate_offset++; | 315 | rotate_offset++; |
| 325 | rotate_offset &= constant_time_lt(rotate_offset,md_size); | 316 | rotate_offset &= constant_time_lt(rotate_offset, md_size); |
| 326 | } | ||
| 327 | #endif | ||
| 328 | } | 317 | } |
| 318 | #endif | ||
| 319 | } | ||
| 329 | 320 | ||
| 330 | /* u32toLE serialises an unsigned, 32-bit number (n) as four bytes at (p) in | 321 | /* u32toLE serialises an unsigned, 32-bit number (n) as four bytes at (p) in |
| 331 | * little-endian order. The value of p is advanced by four. */ | 322 | * little-endian order. The value of p is advanced by four. */ |
| @@ -338,81 +329,83 @@ void ssl3_cbc_copy_mac(unsigned char* out, | |||
| 338 | /* These functions serialize the state of a hash and thus perform the standard | 329 | /* These functions serialize the state of a hash and thus perform the standard |
| 339 | * "final" operation without adding the padding and length that such a function | 330 | * "final" operation without adding the padding and length that such a function |
| 340 | * typically does. */ | 331 | * typically does. */ |
| 341 | static void tls1_md5_final_raw(void* ctx, unsigned char *md_out) | 332 | static void |
| 342 | { | 333 | tls1_md5_final_raw(void* ctx, unsigned char *md_out) |
| 334 | { | ||
| 343 | MD5_CTX *md5 = ctx; | 335 | MD5_CTX *md5 = ctx; |
| 344 | u32toLE(md5->A, md_out); | 336 | u32toLE(md5->A, md_out); |
| 345 | u32toLE(md5->B, md_out); | 337 | u32toLE(md5->B, md_out); |
| 346 | u32toLE(md5->C, md_out); | 338 | u32toLE(md5->C, md_out); |
| 347 | u32toLE(md5->D, md_out); | 339 | u32toLE(md5->D, md_out); |
| 348 | } | 340 | } |
| 349 | 341 | ||
| 350 | static void tls1_sha1_final_raw(void* ctx, unsigned char *md_out) | 342 | static void |
| 351 | { | 343 | tls1_sha1_final_raw(void* ctx, unsigned char *md_out) |
| 344 | { | ||
| 352 | SHA_CTX *sha1 = ctx; | 345 | SHA_CTX *sha1 = ctx; |
| 353 | l2n(sha1->h0, md_out); | 346 | l2n(sha1->h0, md_out); |
| 354 | l2n(sha1->h1, md_out); | 347 | l2n(sha1->h1, md_out); |
| 355 | l2n(sha1->h2, md_out); | 348 | l2n(sha1->h2, md_out); |
| 356 | l2n(sha1->h3, md_out); | 349 | l2n(sha1->h3, md_out); |
| 357 | l2n(sha1->h4, md_out); | 350 | l2n(sha1->h4, md_out); |
| 358 | } | 351 | } |
| 359 | #define LARGEST_DIGEST_CTX SHA_CTX | 352 | #define LARGEST_DIGEST_CTX SHA_CTX |
| 360 | 353 | ||
| 361 | #ifndef OPENSSL_NO_SHA256 | 354 | #ifndef OPENSSL_NO_SHA256 |
| 362 | static void tls1_sha256_final_raw(void* ctx, unsigned char *md_out) | 355 | static void |
| 363 | { | 356 | tls1_sha256_final_raw(void* ctx, unsigned char *md_out) |
| 357 | { | ||
| 364 | SHA256_CTX *sha256 = ctx; | 358 | SHA256_CTX *sha256 = ctx; |
| 365 | unsigned i; | 359 | unsigned i; |
| 366 | 360 | ||
| 367 | for (i = 0; i < 8; i++) | 361 | for (i = 0; i < 8; i++) { |
| 368 | { | ||
| 369 | l2n(sha256->h[i], md_out); | 362 | l2n(sha256->h[i], md_out); |
| 370 | } | ||
| 371 | } | 363 | } |
| 364 | } | ||
| 372 | #undef LARGEST_DIGEST_CTX | 365 | #undef LARGEST_DIGEST_CTX |
| 373 | #define LARGEST_DIGEST_CTX SHA256_CTX | 366 | #define LARGEST_DIGEST_CTX SHA256_CTX |
| 374 | #endif | 367 | #endif |
| 375 | 368 | ||
| 376 | #ifndef OPENSSL_NO_SHA512 | 369 | #ifndef OPENSSL_NO_SHA512 |
| 377 | static void tls1_sha512_final_raw(void* ctx, unsigned char *md_out) | 370 | static void |
| 378 | { | 371 | tls1_sha512_final_raw(void* ctx, unsigned char *md_out) |
| 372 | { | ||
| 379 | SHA512_CTX *sha512 = ctx; | 373 | SHA512_CTX *sha512 = ctx; |
| 380 | unsigned i; | 374 | unsigned i; |
| 381 | 375 | ||
| 382 | for (i = 0; i < 8; i++) | 376 | for (i = 0; i < 8; i++) { |
| 383 | { | ||
| 384 | l2n8(sha512->h[i], md_out); | 377 | l2n8(sha512->h[i], md_out); |
| 385 | } | ||
| 386 | } | 378 | } |
| 379 | } | ||
| 387 | #undef LARGEST_DIGEST_CTX | 380 | #undef LARGEST_DIGEST_CTX |
| 388 | #define LARGEST_DIGEST_CTX SHA512_CTX | 381 | #define LARGEST_DIGEST_CTX SHA512_CTX |
| 389 | #endif | 382 | #endif |
| 390 | 383 | ||
| 391 | /* ssl3_cbc_record_digest_supported returns 1 iff |ctx| uses a hash function | 384 | /* ssl3_cbc_record_digest_supported returns 1 iff |ctx| uses a hash function |
| 392 | * which ssl3_cbc_digest_record supports. */ | 385 | * which ssl3_cbc_digest_record supports. */ |
| 393 | char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx) | 386 | char |
| 394 | { | 387 | ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx) |
| 388 | { | ||
| 395 | #ifdef OPENSSL_FIPS | 389 | #ifdef OPENSSL_FIPS |
| 396 | if (FIPS_mode()) | 390 | if (FIPS_mode()) |
| 397 | return 0; | 391 | return 0; |
| 398 | #endif | 392 | #endif |
| 399 | switch (EVP_MD_CTX_type(ctx)) | 393 | switch (EVP_MD_CTX_type(ctx)) { |
| 400 | { | 394 | case NID_md5: |
| 401 | case NID_md5: | 395 | case NID_sha1: |
| 402 | case NID_sha1: | ||
| 403 | #ifndef OPENSSL_NO_SHA256 | 396 | #ifndef OPENSSL_NO_SHA256 |
| 404 | case NID_sha224: | 397 | case NID_sha224: |
| 405 | case NID_sha256: | 398 | case NID_sha256: |
| 406 | #endif | 399 | #endif |
| 407 | #ifndef OPENSSL_NO_SHA512 | 400 | #ifndef OPENSSL_NO_SHA512 |
| 408 | case NID_sha384: | 401 | case NID_sha384: |
| 409 | case NID_sha512: | 402 | case NID_sha512: |
| 410 | #endif | 403 | #endif |
| 411 | return 1; | 404 | return 1; |
| 412 | default: | 405 | default: |
| 413 | return 0; | 406 | return 0; |
| 414 | } | ||
| 415 | } | 407 | } |
| 408 | } | ||
| 416 | 409 | ||
| 417 | /* ssl3_cbc_digest_record computes the MAC of a decrypted, padded SSLv3/TLS | 410 | /* ssl3_cbc_digest_record computes the MAC of a decrypted, padded SSLv3/TLS |
| 418 | * record. | 411 | * record. |
| @@ -433,26 +426,21 @@ char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx) | |||
| 433 | * functions, above, we know that data_plus_mac_size is large enough to contain | 426 | * functions, above, we know that data_plus_mac_size is large enough to contain |
| 434 | * a padding byte and MAC. (If the padding was invalid, it might contain the | 427 | * a padding byte and MAC. (If the padding was invalid, it might contain the |
| 435 | * padding too. ) */ | 428 | * padding too. ) */ |
| 436 | void ssl3_cbc_digest_record( | 429 | void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, unsigned char* md_out, |
| 437 | const EVP_MD_CTX *ctx, | 430 | size_t* md_out_size, const unsigned char header[13], |
| 438 | unsigned char* md_out, | 431 | const unsigned char *data, size_t data_plus_mac_size, |
| 439 | size_t* md_out_size, | 432 | size_t data_plus_mac_plus_padding_size, const unsigned char *mac_secret, |
| 440 | const unsigned char header[13], | 433 | unsigned mac_secret_length, char is_sslv3) |
| 441 | const unsigned char *data, | 434 | { |
| 442 | size_t data_plus_mac_size, | ||
| 443 | size_t data_plus_mac_plus_padding_size, | ||
| 444 | const unsigned char *mac_secret, | ||
| 445 | unsigned mac_secret_length, | ||
| 446 | char is_sslv3) | ||
| 447 | { | ||
| 448 | union { double align; | 435 | union { double align; |
| 449 | unsigned char c[sizeof(LARGEST_DIGEST_CTX)]; } md_state; | 436 | unsigned char c[sizeof(LARGEST_DIGEST_CTX)]; |
| 437 | } md_state; | ||
| 450 | void (*md_final_raw)(void *ctx, unsigned char *md_out); | 438 | void (*md_final_raw)(void *ctx, unsigned char *md_out); |
| 451 | void (*md_transform)(void *ctx, const unsigned char *block); | 439 | void (*md_transform)(void *ctx, const unsigned char *block); |
| 452 | unsigned md_size, md_block_size = 64; | 440 | unsigned md_size, md_block_size = 64; |
| 453 | unsigned sslv3_pad_length = 40, header_length, variance_blocks, | 441 | unsigned sslv3_pad_length = 40, header_length, variance_blocks, |
| 454 | len, max_mac_bytes, num_blocks, | 442 | len, max_mac_bytes, num_blocks, |
| 455 | num_starting_blocks, k, mac_end_offset, c, index_a, index_b; | 443 | num_starting_blocks, k, mac_end_offset, c, index_a, index_b; |
| 456 | unsigned int bits; /* at most 18 bits */ | 444 | unsigned int bits; /* at most 18 bits */ |
| 457 | unsigned char length_bytes[MAX_HASH_BIT_COUNT_BYTES]; | 445 | unsigned char length_bytes[MAX_HASH_BIT_COUNT_BYTES]; |
| 458 | /* hmac_pad is the masked HMAC key. */ | 446 | /* hmac_pad is the masked HMAC key. */ |
| @@ -470,78 +458,74 @@ void ssl3_cbc_digest_record( | |||
| 470 | * many possible overflows later in this function. */ | 458 | * many possible overflows later in this function. */ |
| 471 | OPENSSL_assert(data_plus_mac_plus_padding_size < 1024*1024); | 459 | OPENSSL_assert(data_plus_mac_plus_padding_size < 1024*1024); |
| 472 | 460 | ||
| 473 | switch (EVP_MD_CTX_type(ctx)) | 461 | switch (EVP_MD_CTX_type(ctx)) { |
| 474 | { | 462 | case NID_md5: |
| 475 | case NID_md5: | 463 | MD5_Init((MD5_CTX*)md_state.c); |
| 476 | MD5_Init((MD5_CTX*)md_state.c); | 464 | md_final_raw = tls1_md5_final_raw; |
| 477 | md_final_raw = tls1_md5_final_raw; | 465 | md_transform = (void(*)(void *ctx, const unsigned char *block)) MD5_Transform; |
| 478 | md_transform = (void(*)(void *ctx, const unsigned char *block)) MD5_Transform; | 466 | md_size = 16; |
| 479 | md_size = 16; | 467 | sslv3_pad_length = 48; |
| 480 | sslv3_pad_length = 48; | 468 | length_is_big_endian = 0; |
| 481 | length_is_big_endian = 0; | 469 | break; |
| 482 | break; | 470 | case NID_sha1: |
| 483 | case NID_sha1: | 471 | SHA1_Init((SHA_CTX*)md_state.c); |
| 484 | SHA1_Init((SHA_CTX*)md_state.c); | 472 | md_final_raw = tls1_sha1_final_raw; |
| 485 | md_final_raw = tls1_sha1_final_raw; | 473 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA1_Transform; |
| 486 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA1_Transform; | 474 | md_size = 20; |
| 487 | md_size = 20; | 475 | break; |
| 488 | break; | ||
| 489 | #ifndef OPENSSL_NO_SHA256 | 476 | #ifndef OPENSSL_NO_SHA256 |
| 490 | case NID_sha224: | 477 | case NID_sha224: |
| 491 | SHA224_Init((SHA256_CTX*)md_state.c); | 478 | SHA224_Init((SHA256_CTX*)md_state.c); |
| 492 | md_final_raw = tls1_sha256_final_raw; | 479 | md_final_raw = tls1_sha256_final_raw; |
| 493 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform; | 480 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform; |
| 494 | md_size = 224/8; | 481 | md_size = 224/8; |
| 495 | break; | 482 | break; |
| 496 | case NID_sha256: | 483 | case NID_sha256: |
| 497 | SHA256_Init((SHA256_CTX*)md_state.c); | 484 | SHA256_Init((SHA256_CTX*)md_state.c); |
| 498 | md_final_raw = tls1_sha256_final_raw; | 485 | md_final_raw = tls1_sha256_final_raw; |
| 499 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform; | 486 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform; |
| 500 | md_size = 32; | 487 | md_size = 32; |
| 501 | break; | 488 | break; |
| 502 | #endif | 489 | #endif |
| 503 | #ifndef OPENSSL_NO_SHA512 | 490 | #ifndef OPENSSL_NO_SHA512 |
| 504 | case NID_sha384: | 491 | case NID_sha384: |
| 505 | SHA384_Init((SHA512_CTX*)md_state.c); | 492 | SHA384_Init((SHA512_CTX*)md_state.c); |
| 506 | md_final_raw = tls1_sha512_final_raw; | 493 | md_final_raw = tls1_sha512_final_raw; |
| 507 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform; | 494 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform; |
| 508 | md_size = 384/8; | 495 | md_size = 384/8; |
| 509 | md_block_size = 128; | 496 | md_block_size = 128; |
| 510 | md_length_size = 16; | 497 | md_length_size = 16; |
| 511 | break; | 498 | break; |
| 512 | case NID_sha512: | 499 | case NID_sha512: |
| 513 | SHA512_Init((SHA512_CTX*)md_state.c); | 500 | SHA512_Init((SHA512_CTX*)md_state.c); |
| 514 | md_final_raw = tls1_sha512_final_raw; | 501 | md_final_raw = tls1_sha512_final_raw; |
| 515 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform; | 502 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform; |
| 516 | md_size = 64; | 503 | md_size = 64; |
| 517 | md_block_size = 128; | 504 | md_block_size = 128; |
| 518 | md_length_size = 16; | 505 | md_length_size = 16; |
| 519 | break; | 506 | break; |
| 520 | #endif | 507 | #endif |
| 521 | default: | 508 | default: |
| 522 | /* ssl3_cbc_record_digest_supported should have been | 509 | /* ssl3_cbc_record_digest_supported should have been |
| 523 | * called first to check that the hash function is | 510 | * called first to check that the hash function is |
| 524 | * supported. */ | 511 | * supported. */ |
| 525 | OPENSSL_assert(0); | 512 | OPENSSL_assert(0); |
| 526 | if (md_out_size) | 513 | if (md_out_size) |
| 527 | *md_out_size = -1; | 514 | *md_out_size = -1; |
| 528 | return; | 515 | return; |
| 529 | } | 516 | } |
| 530 | 517 | ||
| 531 | OPENSSL_assert(md_length_size <= MAX_HASH_BIT_COUNT_BYTES); | 518 | OPENSSL_assert(md_length_size <= MAX_HASH_BIT_COUNT_BYTES); |
| 532 | OPENSSL_assert(md_block_size <= MAX_HASH_BLOCK_SIZE); | 519 | OPENSSL_assert(md_block_size <= MAX_HASH_BLOCK_SIZE); |
| 533 | OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE); | 520 | OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE); |
| 534 | 521 | ||
| 535 | header_length = 13; | 522 | header_length = 13; |
| 536 | if (is_sslv3) | 523 | if (is_sslv3) { |
| 537 | { | 524 | header_length = mac_secret_length + sslv3_pad_length + |
| 538 | header_length = | 525 | 8 /* sequence number */ + |
| 539 | mac_secret_length + | 526 | 1 /* record type */ + |
| 540 | sslv3_pad_length + | 527 | 2 /* record length */; |
| 541 | 8 /* sequence number */ + | 528 | } |
| 542 | 1 /* record type */ + | ||
| 543 | 2 /* record length */; | ||
| 544 | } | ||
| 545 | 529 | ||
| 546 | /* variance_blocks is the number of blocks of the hash that we have to | 530 | /* variance_blocks is the number of blocks of the hash that we have to |
| 547 | * calculate in constant time because they could be altered by the | 531 | * calculate in constant time because they could be altered by the |
| @@ -597,15 +581,13 @@ void ssl3_cbc_digest_record( | |||
| 597 | 581 | ||
| 598 | /* For SSLv3, if we're going to have any starting blocks then we need | 582 | /* For SSLv3, if we're going to have any starting blocks then we need |
| 599 | * at least two because the header is larger than a single block. */ | 583 | * at least two because the header is larger than a single block. */ |
| 600 | if (num_blocks > variance_blocks + (is_sslv3 ? 1 : 0)) | 584 | if (num_blocks > variance_blocks + (is_sslv3 ? 1 : 0)) { |
| 601 | { | ||
| 602 | num_starting_blocks = num_blocks - variance_blocks; | 585 | num_starting_blocks = num_blocks - variance_blocks; |
| 603 | k = md_block_size*num_starting_blocks; | 586 | k = md_block_size*num_starting_blocks; |
| 604 | } | 587 | } |
| 605 | 588 | ||
| 606 | bits = 8*mac_end_offset; | 589 | bits = 8*mac_end_offset; |
| 607 | if (!is_sslv3) | 590 | if (!is_sslv3) { |
| 608 | { | ||
| 609 | /* Compute the initial HMAC block. For SSLv3, the padding and | 591 | /* Compute the initial HMAC block. For SSLv3, the padding and |
| 610 | * secret bytes are included in |header| because they take more | 592 | * secret bytes are included in |header| because they take more |
| 611 | * than a single block. */ | 593 | * than a single block. */ |
| @@ -617,51 +599,44 @@ void ssl3_cbc_digest_record( | |||
| 617 | hmac_pad[i] ^= 0x36; | 599 | hmac_pad[i] ^= 0x36; |
| 618 | 600 | ||
| 619 | md_transform(md_state.c, hmac_pad); | 601 | md_transform(md_state.c, hmac_pad); |
| 620 | } | 602 | } |
| 621 | 603 | ||
| 622 | if (length_is_big_endian) | 604 | if (length_is_big_endian) { |
| 623 | { | 605 | memset(length_bytes, 0, md_length_size - 4); |
| 624 | memset(length_bytes,0,md_length_size-4); | 606 | length_bytes[md_length_size - 4] = (unsigned char)(bits >> 24); |
| 625 | length_bytes[md_length_size-4] = (unsigned char)(bits>>24); | 607 | length_bytes[md_length_size - 3] = (unsigned char)(bits >> 16); |
| 626 | length_bytes[md_length_size-3] = (unsigned char)(bits>>16); | 608 | length_bytes[md_length_size - 2] = (unsigned char)(bits >> 8); |
| 627 | length_bytes[md_length_size-2] = (unsigned char)(bits>>8); | 609 | length_bytes[md_length_size - 1] = (unsigned char)bits; |
| 628 | length_bytes[md_length_size-1] = (unsigned char)bits; | 610 | } else { |
| 629 | } | 611 | memset(length_bytes, 0, md_length_size); |
| 630 | else | 612 | length_bytes[md_length_size - 5] = (unsigned char)(bits >> 24); |
| 631 | { | 613 | length_bytes[md_length_size - 6] = (unsigned char)(bits >> 16); |
| 632 | memset(length_bytes,0,md_length_size); | 614 | length_bytes[md_length_size - 7] = (unsigned char)(bits >> 8); |
| 633 | length_bytes[md_length_size-5] = (unsigned char)(bits>>24); | 615 | length_bytes[md_length_size - 8] = (unsigned char)bits; |
| 634 | length_bytes[md_length_size-6] = (unsigned char)(bits>>16); | 616 | } |
| 635 | length_bytes[md_length_size-7] = (unsigned char)(bits>>8); | ||
| 636 | length_bytes[md_length_size-8] = (unsigned char)bits; | ||
| 637 | } | ||
| 638 | 617 | ||
| 639 | if (k > 0) | 618 | if (k > 0) { |
| 640 | { | 619 | if (is_sslv3) { |
| 641 | if (is_sslv3) | ||
| 642 | { | ||
| 643 | /* The SSLv3 header is larger than a single block. | 620 | /* The SSLv3 header is larger than a single block. |
| 644 | * overhang is the number of bytes beyond a single | 621 | * overhang is the number of bytes beyond a single |
| 645 | * block that the header consumes: either 7 bytes | 622 | * block that the header consumes: either 7 bytes |
| 646 | * (SHA1) or 11 bytes (MD5). */ | 623 | * (SHA1) or 11 bytes (MD5). */ |
| 647 | unsigned overhang = header_length-md_block_size; | 624 | unsigned overhang = header_length - md_block_size; |
| 648 | md_transform(md_state.c, header); | 625 | md_transform(md_state.c, header); |
| 649 | memcpy(first_block, header + md_block_size, overhang); | 626 | memcpy(first_block, header + md_block_size, overhang); |
| 650 | memcpy(first_block + overhang, data, md_block_size-overhang); | 627 | memcpy(first_block + overhang, data, md_block_size - overhang); |
| 651 | md_transform(md_state.c, first_block); | 628 | md_transform(md_state.c, first_block); |
| 652 | for (i = 1; i < k/md_block_size - 1; i++) | 629 | for (i = 1; i < k/md_block_size - 1; i++) |
| 653 | md_transform(md_state.c, data + md_block_size*i - overhang); | 630 | md_transform(md_state.c, data + md_block_size*i - overhang); |
| 654 | } | 631 | } else { |
| 655 | else | ||
| 656 | { | ||
| 657 | /* k is a multiple of md_block_size. */ | 632 | /* k is a multiple of md_block_size. */ |
| 658 | memcpy(first_block, header, 13); | 633 | memcpy(first_block, header, 13); |
| 659 | memcpy(first_block+13, data, md_block_size-13); | 634 | memcpy(first_block + 13, data, md_block_size - 13); |
| 660 | md_transform(md_state.c, first_block); | 635 | md_transform(md_state.c, first_block); |
| 661 | for (i = 1; i < k/md_block_size; i++) | 636 | for (i = 1; i < k/md_block_size; i++) |
| 662 | md_transform(md_state.c, data + md_block_size*i - 13); | 637 | md_transform(md_state.c, data + md_block_size*i - 13); |
| 663 | } | ||
| 664 | } | 638 | } |
| 639 | } | ||
| 665 | 640 | ||
| 666 | memset(mac_out, 0, sizeof(mac_out)); | 641 | memset(mac_out, 0, sizeof(mac_out)); |
| 667 | 642 | ||
| @@ -669,22 +644,20 @@ void ssl3_cbc_digest_record( | |||
| 669 | * it in constant time. If the |i==index_a| then we'll include the 0x80 | 644 | * it in constant time. If the |i==index_a| then we'll include the 0x80 |
| 670 | * bytes and zero pad etc. For each block we selectively copy it, in | 645 | * bytes and zero pad etc. For each block we selectively copy it, in |
| 671 | * constant time, to |mac_out|. */ | 646 | * constant time, to |mac_out|. */ |
| 672 | for (i = num_starting_blocks; i <= num_starting_blocks+variance_blocks; i++) | 647 | for (i = num_starting_blocks; i <= num_starting_blocks + variance_blocks; i++) { |
| 673 | { | ||
| 674 | unsigned char block[MAX_HASH_BLOCK_SIZE]; | 648 | unsigned char block[MAX_HASH_BLOCK_SIZE]; |
| 675 | unsigned char is_block_a = constant_time_eq_8(i, index_a); | 649 | unsigned char is_block_a = constant_time_eq_8(i, index_a); |
| 676 | unsigned char is_block_b = constant_time_eq_8(i, index_b); | 650 | unsigned char is_block_b = constant_time_eq_8(i, index_b); |
| 677 | for (j = 0; j < md_block_size; j++) | 651 | for (j = 0; j < md_block_size; j++) { |
| 678 | { | ||
| 679 | unsigned char b = 0, is_past_c, is_past_cp1; | 652 | unsigned char b = 0, is_past_c, is_past_cp1; |
| 680 | if (k < header_length) | 653 | if (k < header_length) |
| 681 | b = header[k]; | 654 | b = header[k]; |
| 682 | else if (k < data_plus_mac_plus_padding_size + header_length) | 655 | else if (k < data_plus_mac_plus_padding_size + header_length) |
| 683 | b = data[k-header_length]; | 656 | b = data[k - header_length]; |
| 684 | k++; | 657 | k++; |
| 685 | 658 | ||
| 686 | is_past_c = is_block_a & constant_time_ge(j, c); | 659 | is_past_c = is_block_a & constant_time_ge(j, c); |
| 687 | is_past_cp1 = is_block_a & constant_time_ge(j, c+1); | 660 | is_past_cp1 = is_block_a & constant_time_ge(j, c + 1); |
| 688 | /* If this is the block containing the end of the | 661 | /* If this is the block containing the end of the |
| 689 | * application data, and we are at the offset for the | 662 | * application data, and we are at the offset for the |
| 690 | * 0x80 value, then overwrite b with 0x80. */ | 663 | * 0x80 value, then overwrite b with 0x80. */ |
| @@ -701,46 +674,42 @@ void ssl3_cbc_digest_record( | |||
| 701 | 674 | ||
| 702 | /* The final bytes of one of the blocks contains the | 675 | /* The final bytes of one of the blocks contains the |
| 703 | * length. */ | 676 | * length. */ |
| 704 | if (j >= md_block_size - md_length_size) | 677 | if (j >= md_block_size - md_length_size) { |
| 705 | { | ||
| 706 | /* If this is index_b, write a length byte. */ | 678 | /* If this is index_b, write a length byte. */ |
| 707 | b = (b&~is_block_b) | (is_block_b&length_bytes[j-(md_block_size-md_length_size)]); | 679 | b = (b&~is_block_b) | (is_block_b&length_bytes[j - (md_block_size - md_length_size)]); |
| 708 | } | ||
| 709 | block[j] = b; | ||
| 710 | } | 680 | } |
| 681 | block[j] = b; | ||
| 682 | } | ||
| 711 | 683 | ||
| 712 | md_transform(md_state.c, block); | 684 | md_transform(md_state.c, block); |
| 713 | md_final_raw(md_state.c, block); | 685 | md_final_raw(md_state.c, block); |
| 714 | /* If this is index_b, copy the hash value to |mac_out|. */ | 686 | /* If this is index_b, copy the hash value to |mac_out|. */ |
| 715 | for (j = 0; j < md_size; j++) | 687 | for (j = 0; j < md_size; j++) |
| 716 | mac_out[j] |= block[j]&is_block_b; | 688 | mac_out[j] |= block[j]&is_block_b; |
| 717 | } | 689 | } |
| 718 | 690 | ||
| 719 | EVP_MD_CTX_init(&md_ctx); | 691 | EVP_MD_CTX_init(&md_ctx); |
| 720 | EVP_DigestInit_ex(&md_ctx, ctx->digest, NULL /* engine */); | 692 | EVP_DigestInit_ex(&md_ctx, ctx->digest, NULL /* engine */); |
| 721 | if (is_sslv3) | 693 | if (is_sslv3) { |
| 722 | { | ||
| 723 | /* We repurpose |hmac_pad| to contain the SSLv3 pad2 block. */ | 694 | /* We repurpose |hmac_pad| to contain the SSLv3 pad2 block. */ |
| 724 | memset(hmac_pad, 0x5c, sslv3_pad_length); | 695 | memset(hmac_pad, 0x5c, sslv3_pad_length); |
| 725 | 696 | ||
| 726 | EVP_DigestUpdate(&md_ctx, mac_secret, mac_secret_length); | 697 | EVP_DigestUpdate(&md_ctx, mac_secret, mac_secret_length); |
| 727 | EVP_DigestUpdate(&md_ctx, hmac_pad, sslv3_pad_length); | 698 | EVP_DigestUpdate(&md_ctx, hmac_pad, sslv3_pad_length); |
| 728 | EVP_DigestUpdate(&md_ctx, mac_out, md_size); | 699 | EVP_DigestUpdate(&md_ctx, mac_out, md_size); |
| 729 | } | 700 | } else { |
| 730 | else | ||
| 731 | { | ||
| 732 | /* Complete the HMAC in the standard manner. */ | 701 | /* Complete the HMAC in the standard manner. */ |
| 733 | for (i = 0; i < md_block_size; i++) | 702 | for (i = 0; i < md_block_size; i++) |
| 734 | hmac_pad[i] ^= 0x6a; | 703 | hmac_pad[i] ^= 0x6a; |
| 735 | 704 | ||
| 736 | EVP_DigestUpdate(&md_ctx, hmac_pad, md_block_size); | 705 | EVP_DigestUpdate(&md_ctx, hmac_pad, md_block_size); |
| 737 | EVP_DigestUpdate(&md_ctx, mac_out, md_size); | 706 | EVP_DigestUpdate(&md_ctx, mac_out, md_size); |
| 738 | } | 707 | } |
| 739 | EVP_DigestFinal(&md_ctx, md_out, &md_out_size_u); | 708 | EVP_DigestFinal(&md_ctx, md_out, &md_out_size_u); |
| 740 | if (md_out_size) | 709 | if (md_out_size) |
| 741 | *md_out_size = md_out_size_u; | 710 | *md_out_size = md_out_size_u; |
| 742 | EVP_MD_CTX_cleanup(&md_ctx); | 711 | EVP_MD_CTX_cleanup(&md_ctx); |
| 743 | } | 712 | } |
| 744 | 713 | ||
| 745 | #ifdef OPENSSL_FIPS | 714 | #ifdef OPENSSL_FIPS |
| 746 | 715 | ||
| @@ -749,10 +718,10 @@ void ssl3_cbc_digest_record( | |||
| 749 | * by digesting additional data. | 718 | * by digesting additional data. |
| 750 | */ | 719 | */ |
| 751 | 720 | ||
| 752 | void tls_fips_digest_extra( | 721 | void tls_fips_digest_extra(const EVP_CIPHER_CTX *cipher_ctx, |
| 753 | const EVP_CIPHER_CTX *cipher_ctx, EVP_MD_CTX *mac_ctx, | 722 | EVP_MD_CTX *mac_ctx, const unsigned char *data, size_t data_len, |
| 754 | const unsigned char *data, size_t data_len, size_t orig_len) | 723 | size_t orig_len) |
| 755 | { | 724 | { |
| 756 | size_t block_size, digest_pad, blocks_data, blocks_orig; | 725 | size_t block_size, digest_pad, blocks_data, blocks_orig; |
| 757 | if (EVP_CIPHER_CTX_mode(cipher_ctx) != EVP_CIPH_CBC_MODE) | 726 | if (EVP_CIPHER_CTX_mode(cipher_ctx) != EVP_CIPH_CBC_MODE) |
| 758 | return; | 727 | return; |
| @@ -785,6 +754,6 @@ void tls_fips_digest_extra( | |||
| 785 | * length TLS buffer. | 754 | * length TLS buffer. |
| 786 | */ | 755 | */ |
| 787 | EVP_DigestSignUpdate(mac_ctx, data, | 756 | EVP_DigestSignUpdate(mac_ctx, data, |
| 788 | (blocks_orig - blocks_data + 1) * block_size); | 757 | (blocks_orig - blocks_data + 1) * block_size); |
| 789 | } | 758 | } |
| 790 | #endif | 759 | #endif |
diff --git a/src/lib/libssl/src/ssl/s3_enc.c b/src/lib/libssl/src/ssl/s3_enc.c index e3cd4f062c..4536ca5995 100644 --- a/src/lib/libssl/src/ssl/s3_enc.c +++ b/src/lib/libssl/src/ssl/s3_enc.c | |||
| @@ -140,85 +140,87 @@ | |||
| 140 | #include <openssl/evp.h> | 140 | #include <openssl/evp.h> |
| 141 | #include <openssl/md5.h> | 141 | #include <openssl/md5.h> |
| 142 | 142 | ||
| 143 | static unsigned char ssl3_pad_1[48]={ | 143 | static unsigned char ssl3_pad_1[48] = { |
| 144 | 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, | 144 | 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, |
| 145 | 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, | 145 | 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, |
| 146 | 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, | 146 | 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, |
| 147 | 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, | 147 | 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, |
| 148 | 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, | 148 | 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, |
| 149 | 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36 }; | 149 | 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 |
| 150 | 150 | }; | |
| 151 | static unsigned char ssl3_pad_2[48]={ | 151 | |
| 152 | 0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c, | 152 | static unsigned char ssl3_pad_2[48] = { |
| 153 | 0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c, | 153 | 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, |
| 154 | 0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c, | 154 | 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, |
| 155 | 0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c, | 155 | 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, |
| 156 | 0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c, | 156 | 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, |
| 157 | 0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c }; | 157 | 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, |
| 158 | static int ssl3_handshake_mac(SSL *s, int md_nid, | 158 | 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c |
| 159 | const char *sender, int len, unsigned char *p); | 159 | }; |
| 160 | static int ssl3_generate_key_block(SSL *s, unsigned char *km, int num) | 160 | |
| 161 | { | 161 | static int ssl3_handshake_mac(SSL *s, int md_nid, const char *sender, |
| 162 | int len, unsigned char *p); | ||
| 163 | |||
| 164 | static int | ||
| 165 | ssl3_generate_key_block(SSL *s, unsigned char *km, int num) | ||
| 166 | { | ||
| 162 | EVP_MD_CTX m5; | 167 | EVP_MD_CTX m5; |
| 163 | EVP_MD_CTX s1; | 168 | EVP_MD_CTX s1; |
| 164 | unsigned char buf[16],smd[SHA_DIGEST_LENGTH]; | 169 | unsigned char buf[16], smd[SHA_DIGEST_LENGTH]; |
| 165 | unsigned char c='A'; | 170 | unsigned char c = 'A'; |
| 166 | unsigned int i,j,k; | 171 | unsigned int i, j, k; |
| 167 | 172 | ||
| 168 | #ifdef CHARSET_EBCDIC | 173 | #ifdef CHARSET_EBCDIC |
| 169 | c = os_toascii[c]; /*'A' in ASCII */ | 174 | c = os_toascii[c]; /*'A' in ASCII */ |
| 170 | #endif | 175 | #endif |
| 171 | k=0; | 176 | k = 0; |
| 172 | EVP_MD_CTX_init(&m5); | 177 | EVP_MD_CTX_init(&m5); |
| 173 | EVP_MD_CTX_set_flags(&m5, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); | 178 | EVP_MD_CTX_set_flags(&m5, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); |
| 174 | EVP_MD_CTX_init(&s1); | 179 | EVP_MD_CTX_init(&s1); |
| 175 | for (i=0; (int)i<num; i+=MD5_DIGEST_LENGTH) | 180 | for (i = 0; (int)i < num; i += MD5_DIGEST_LENGTH) { |
| 176 | { | ||
| 177 | k++; | 181 | k++; |
| 178 | if (k > sizeof buf) | 182 | if (k > sizeof buf) { |
| 179 | { | ||
| 180 | /* bug: 'buf' is too small for this ciphersuite */ | 183 | /* bug: 'buf' is too small for this ciphersuite */ |
| 181 | SSLerr(SSL_F_SSL3_GENERATE_KEY_BLOCK, ERR_R_INTERNAL_ERROR); | 184 | SSLerr(SSL_F_SSL3_GENERATE_KEY_BLOCK, ERR_R_INTERNAL_ERROR); |
| 182 | return 0; | 185 | return 0; |
| 183 | } | 186 | } |
| 184 | 187 | ||
| 185 | for (j=0; j<k; j++) | 188 | for (j = 0; j < k; j++) |
| 186 | buf[j]=c; | 189 | buf[j] = c; |
| 187 | c++; | 190 | c++; |
| 188 | EVP_DigestInit_ex(&s1,EVP_sha1(), NULL); | 191 | EVP_DigestInit_ex(&s1, EVP_sha1(), NULL); |
| 189 | EVP_DigestUpdate(&s1,buf,k); | 192 | EVP_DigestUpdate(&s1, buf, k); |
| 190 | EVP_DigestUpdate(&s1,s->session->master_key, | 193 | EVP_DigestUpdate(&s1, s->session->master_key, |
| 191 | s->session->master_key_length); | 194 | s->session->master_key_length); |
| 192 | EVP_DigestUpdate(&s1,s->s3->server_random,SSL3_RANDOM_SIZE); | 195 | EVP_DigestUpdate(&s1, s->s3->server_random, SSL3_RANDOM_SIZE); |
| 193 | EVP_DigestUpdate(&s1,s->s3->client_random,SSL3_RANDOM_SIZE); | 196 | EVP_DigestUpdate(&s1, s->s3->client_random, SSL3_RANDOM_SIZE); |
| 194 | EVP_DigestFinal_ex(&s1,smd,NULL); | 197 | EVP_DigestFinal_ex(&s1, smd, NULL); |
| 195 | |||
| 196 | EVP_DigestInit_ex(&m5,EVP_md5(), NULL); | ||
| 197 | EVP_DigestUpdate(&m5,s->session->master_key, | ||
| 198 | s->session->master_key_length); | ||
| 199 | EVP_DigestUpdate(&m5,smd,SHA_DIGEST_LENGTH); | ||
| 200 | if ((int)(i+MD5_DIGEST_LENGTH) > num) | ||
| 201 | { | ||
| 202 | EVP_DigestFinal_ex(&m5,smd,NULL); | ||
| 203 | memcpy(km,smd,(num-i)); | ||
| 204 | } | ||
| 205 | else | ||
| 206 | EVP_DigestFinal_ex(&m5,km,NULL); | ||
| 207 | 198 | ||
| 208 | km+=MD5_DIGEST_LENGTH; | 199 | EVP_DigestInit_ex(&m5, EVP_md5(), NULL); |
| 209 | } | 200 | EVP_DigestUpdate(&m5, s->session->master_key, |
| 210 | OPENSSL_cleanse(smd,SHA_DIGEST_LENGTH); | 201 | s->session->master_key_length); |
| 202 | EVP_DigestUpdate(&m5, smd, SHA_DIGEST_LENGTH); | ||
| 203 | if ((int)(i + MD5_DIGEST_LENGTH) > num) { | ||
| 204 | EVP_DigestFinal_ex(&m5, smd, NULL); | ||
| 205 | memcpy(km, smd,(num - i)); | ||
| 206 | } else | ||
| 207 | EVP_DigestFinal_ex(&m5, km, NULL); | ||
| 208 | |||
| 209 | km += MD5_DIGEST_LENGTH; | ||
| 210 | } | ||
| 211 | OPENSSL_cleanse(smd, SHA_DIGEST_LENGTH); | ||
| 211 | EVP_MD_CTX_cleanup(&m5); | 212 | EVP_MD_CTX_cleanup(&m5); |
| 212 | EVP_MD_CTX_cleanup(&s1); | 213 | EVP_MD_CTX_cleanup(&s1); |
| 213 | return 1; | 214 | return 1; |
| 214 | } | 215 | } |
| 215 | 216 | ||
| 216 | int ssl3_change_cipher_state(SSL *s, int which) | 217 | int |
| 217 | { | 218 | ssl3_change_cipher_state(SSL *s, int which) |
| 218 | unsigned char *p,*mac_secret; | 219 | { |
| 220 | unsigned char *p, *mac_secret; | ||
| 219 | unsigned char exp_key[EVP_MAX_KEY_LENGTH]; | 221 | unsigned char exp_key[EVP_MAX_KEY_LENGTH]; |
| 220 | unsigned char exp_iv[EVP_MAX_IV_LENGTH]; | 222 | unsigned char exp_iv[EVP_MAX_IV_LENGTH]; |
| 221 | unsigned char *ms,*key,*iv,*er1,*er2; | 223 | unsigned char *ms, *key, *iv, *er1, *er2; |
| 222 | EVP_CIPHER_CTX *dd; | 224 | EVP_CIPHER_CTX *dd; |
| 223 | const EVP_CIPHER *c; | 225 | const EVP_CIPHER *c; |
| 224 | #ifndef OPENSSL_NO_COMP | 226 | #ifndef OPENSSL_NO_COMP |
| @@ -226,167 +228,159 @@ int ssl3_change_cipher_state(SSL *s, int which) | |||
| 226 | #endif | 228 | #endif |
| 227 | const EVP_MD *m; | 229 | const EVP_MD *m; |
| 228 | EVP_MD_CTX md; | 230 | EVP_MD_CTX md; |
| 229 | int is_exp,n,i,j,k,cl; | 231 | int is_exp, n, i, j, k, cl; |
| 230 | int reuse_dd = 0; | 232 | int reuse_dd = 0; |
| 231 | 233 | ||
| 232 | is_exp=SSL_C_IS_EXPORT(s->s3->tmp.new_cipher); | 234 | is_exp = SSL_C_IS_EXPORT(s->s3->tmp.new_cipher); |
| 233 | c=s->s3->tmp.new_sym_enc; | 235 | c = s->s3->tmp.new_sym_enc; |
| 234 | m=s->s3->tmp.new_hash; | 236 | m = s->s3->tmp.new_hash; |
| 235 | /* m == NULL will lead to a crash later */ | 237 | /* m == NULL will lead to a crash later */ |
| 236 | OPENSSL_assert(m); | 238 | OPENSSL_assert(m); |
| 237 | #ifndef OPENSSL_NO_COMP | 239 | #ifndef OPENSSL_NO_COMP |
| 238 | if (s->s3->tmp.new_compression == NULL) | 240 | if (s->s3->tmp.new_compression == NULL) |
| 239 | comp=NULL; | 241 | comp = NULL; |
| 240 | else | 242 | else |
| 241 | comp=s->s3->tmp.new_compression->method; | 243 | comp = s->s3->tmp.new_compression->method; |
| 242 | #endif | 244 | #endif |
| 243 | 245 | ||
| 244 | if (which & SSL3_CC_READ) | 246 | if (which & SSL3_CC_READ) { |
| 245 | { | ||
| 246 | if (s->enc_read_ctx != NULL) | 247 | if (s->enc_read_ctx != NULL) |
| 247 | reuse_dd = 1; | 248 | reuse_dd = 1; |
| 248 | else if ((s->enc_read_ctx=OPENSSL_malloc(sizeof(EVP_CIPHER_CTX))) == NULL) | 249 | else if ((s->enc_read_ctx = OPENSSL_malloc(sizeof(EVP_CIPHER_CTX))) == NULL) |
| 249 | goto err; | 250 | goto err; |
| 250 | else | 251 | else |
| 251 | /* make sure it's intialized in case we exit later with an error */ | 252 | /* make sure it's intialized in case we exit later with an error */ |
| 252 | EVP_CIPHER_CTX_init(s->enc_read_ctx); | 253 | EVP_CIPHER_CTX_init(s->enc_read_ctx); |
| 253 | dd= s->enc_read_ctx; | 254 | dd = s->enc_read_ctx; |
| 254 | 255 | ||
| 255 | ssl_replace_hash(&s->read_hash,m); | 256 | ssl_replace_hash(&s->read_hash, m); |
| 256 | #ifndef OPENSSL_NO_COMP | 257 | #ifndef OPENSSL_NO_COMP |
| 257 | /* COMPRESS */ | 258 | /* COMPRESS */ |
| 258 | if (s->expand != NULL) | 259 | if (s->expand != NULL) { |
| 259 | { | ||
| 260 | COMP_CTX_free(s->expand); | 260 | COMP_CTX_free(s->expand); |
| 261 | s->expand=NULL; | 261 | s->expand = NULL; |
| 262 | } | 262 | } |
| 263 | if (comp != NULL) | 263 | if (comp != NULL) { |
| 264 | { | 264 | s->expand = COMP_CTX_new(comp); |
| 265 | s->expand=COMP_CTX_new(comp); | 265 | if (s->expand == NULL) { |
| 266 | if (s->expand == NULL) | 266 | SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE, SSL_R_COMPRESSION_LIBRARY_ERROR); |
| 267 | { | ||
| 268 | SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE,SSL_R_COMPRESSION_LIBRARY_ERROR); | ||
| 269 | goto err2; | 267 | goto err2; |
| 270 | } | 268 | } |
| 271 | if (s->s3->rrec.comp == NULL) | 269 | if (s->s3->rrec.comp == NULL) |
| 272 | s->s3->rrec.comp=(unsigned char *) | 270 | s->s3->rrec.comp = (unsigned char *) |
| 273 | OPENSSL_malloc(SSL3_RT_MAX_PLAIN_LENGTH); | 271 | OPENSSL_malloc(SSL3_RT_MAX_PLAIN_LENGTH); |
| 274 | if (s->s3->rrec.comp == NULL) | 272 | if (s->s3->rrec.comp == NULL) |
| 275 | goto err; | 273 | goto err; |
| 276 | } | ||
| 277 | #endif | ||
| 278 | memset(&(s->s3->read_sequence[0]),0,8); | ||
| 279 | mac_secret= &(s->s3->read_mac_secret[0]); | ||
| 280 | } | 274 | } |
| 281 | else | 275 | #endif |
| 282 | { | 276 | memset(&(s->s3->read_sequence[0]), 0, 8); |
| 277 | mac_secret = &(s->s3->read_mac_secret[0]); | ||
| 278 | } else { | ||
| 283 | if (s->enc_write_ctx != NULL) | 279 | if (s->enc_write_ctx != NULL) |
| 284 | reuse_dd = 1; | 280 | reuse_dd = 1; |
| 285 | else if ((s->enc_write_ctx=OPENSSL_malloc(sizeof(EVP_CIPHER_CTX))) == NULL) | 281 | else if ((s->enc_write_ctx = OPENSSL_malloc(sizeof(EVP_CIPHER_CTX))) == NULL) |
| 286 | goto err; | 282 | goto err; |
| 287 | else | 283 | else |
| 288 | /* make sure it's intialized in case we exit later with an error */ | 284 | /* make sure it's intialized in case we exit later with an error */ |
| 289 | EVP_CIPHER_CTX_init(s->enc_write_ctx); | 285 | EVP_CIPHER_CTX_init(s->enc_write_ctx); |
| 290 | dd= s->enc_write_ctx; | 286 | dd = s->enc_write_ctx; |
| 291 | ssl_replace_hash(&s->write_hash,m); | 287 | ssl_replace_hash(&s->write_hash, m); |
| 292 | #ifndef OPENSSL_NO_COMP | 288 | #ifndef OPENSSL_NO_COMP |
| 293 | /* COMPRESS */ | 289 | /* COMPRESS */ |
| 294 | if (s->compress != NULL) | 290 | if (s->compress != NULL) { |
| 295 | { | ||
| 296 | COMP_CTX_free(s->compress); | 291 | COMP_CTX_free(s->compress); |
| 297 | s->compress=NULL; | 292 | s->compress = NULL; |
| 298 | } | 293 | } |
| 299 | if (comp != NULL) | 294 | if (comp != NULL) { |
| 300 | { | 295 | s->compress = COMP_CTX_new(comp); |
| 301 | s->compress=COMP_CTX_new(comp); | 296 | if (s->compress == NULL) { |
| 302 | if (s->compress == NULL) | 297 | SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE, SSL_R_COMPRESSION_LIBRARY_ERROR); |
| 303 | { | ||
| 304 | SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE,SSL_R_COMPRESSION_LIBRARY_ERROR); | ||
| 305 | goto err2; | 298 | goto err2; |
| 306 | } | ||
| 307 | } | 299 | } |
| 308 | #endif | ||
| 309 | memset(&(s->s3->write_sequence[0]),0,8); | ||
| 310 | mac_secret= &(s->s3->write_mac_secret[0]); | ||
| 311 | } | 300 | } |
| 301 | #endif | ||
| 302 | memset(&(s->s3->write_sequence[0]), 0, 8); | ||
| 303 | mac_secret = &(s->s3->write_mac_secret[0]); | ||
| 304 | } | ||
| 312 | 305 | ||
| 313 | if (reuse_dd) | 306 | if (reuse_dd) |
| 314 | EVP_CIPHER_CTX_cleanup(dd); | 307 | EVP_CIPHER_CTX_cleanup(dd); |
| 315 | 308 | ||
| 316 | p=s->s3->tmp.key_block; | 309 | p = s->s3->tmp.key_block; |
| 317 | i=EVP_MD_size(m); | 310 | i = EVP_MD_size(m); |
| 318 | if (i < 0) | 311 | if (i < 0) |
| 319 | goto err2; | 312 | goto err2; |
| 320 | cl=EVP_CIPHER_key_length(c); | 313 | cl = EVP_CIPHER_key_length(c); |
| 321 | j=is_exp ? (cl < SSL_C_EXPORT_KEYLENGTH(s->s3->tmp.new_cipher) ? | 314 | j = is_exp ? (cl < SSL_C_EXPORT_KEYLENGTH(s->s3->tmp.new_cipher) ? |
| 322 | cl : SSL_C_EXPORT_KEYLENGTH(s->s3->tmp.new_cipher)) : cl; | 315 | cl : SSL_C_EXPORT_KEYLENGTH(s->s3->tmp.new_cipher)) : cl; |
| 323 | /* Was j=(is_exp)?5:EVP_CIPHER_key_length(c); */ | 316 | /* Was j=(is_exp)?5:EVP_CIPHER_key_length(c); */ |
| 324 | k=EVP_CIPHER_iv_length(c); | 317 | k = EVP_CIPHER_iv_length(c); |
| 325 | if ( (which == SSL3_CHANGE_CIPHER_CLIENT_WRITE) || | 318 | if ((which == SSL3_CHANGE_CIPHER_CLIENT_WRITE) || |
| 326 | (which == SSL3_CHANGE_CIPHER_SERVER_READ)) | 319 | (which == SSL3_CHANGE_CIPHER_SERVER_READ)) { |
| 327 | { | 320 | ms = &(p[0]); |
| 328 | ms= &(p[ 0]); n=i+i; | 321 | n = i + i; |
| 329 | key= &(p[ n]); n+=j+j; | 322 | key = &(p[n]); |
| 330 | iv= &(p[ n]); n+=k+k; | 323 | n += j + j; |
| 331 | er1= &(s->s3->client_random[0]); | 324 | iv = &(p[n]); |
| 332 | er2= &(s->s3->server_random[0]); | 325 | n += k + k; |
| 333 | } | 326 | er1 = &(s->s3->client_random[0]); |
| 334 | else | 327 | er2 = &(s->s3->server_random[0]); |
| 335 | { | 328 | } else { |
| 336 | n=i; | 329 | n = i; |
| 337 | ms= &(p[ n]); n+=i+j; | 330 | ms = &(p[n]); |
| 338 | key= &(p[ n]); n+=j+k; | 331 | n += i + j; |
| 339 | iv= &(p[ n]); n+=k; | 332 | key = &(p[n]); |
| 340 | er1= &(s->s3->server_random[0]); | 333 | n += j + k; |
| 341 | er2= &(s->s3->client_random[0]); | 334 | iv = &(p[n]); |
| 342 | } | 335 | n += k; |
| 336 | er1 = &(s->s3->server_random[0]); | ||
| 337 | er2 = &(s->s3->client_random[0]); | ||
| 338 | } | ||
| 343 | 339 | ||
| 344 | if (n > s->s3->tmp.key_block_length) | 340 | if (n > s->s3->tmp.key_block_length) { |
| 345 | { | 341 | SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE, ERR_R_INTERNAL_ERROR); |
| 346 | SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE,ERR_R_INTERNAL_ERROR); | ||
| 347 | goto err2; | 342 | goto err2; |
| 348 | } | 343 | } |
| 349 | 344 | ||
| 350 | EVP_MD_CTX_init(&md); | 345 | EVP_MD_CTX_init(&md); |
| 351 | memcpy(mac_secret,ms,i); | 346 | memcpy(mac_secret, ms, i); |
| 352 | if (is_exp) | 347 | if (is_exp) { |
| 353 | { | ||
| 354 | /* In here I set both the read and write key/iv to the | 348 | /* In here I set both the read and write key/iv to the |
| 355 | * same value since only the correct one will be used :-). | 349 | * same value since only the correct one will be used :-). |
| 356 | */ | 350 | */ |
| 357 | EVP_DigestInit_ex(&md,EVP_md5(), NULL); | 351 | EVP_DigestInit_ex(&md, EVP_md5(), NULL); |
| 358 | EVP_DigestUpdate(&md,key,j); | 352 | EVP_DigestUpdate(&md, key, j); |
| 359 | EVP_DigestUpdate(&md,er1,SSL3_RANDOM_SIZE); | 353 | EVP_DigestUpdate(&md, er1, SSL3_RANDOM_SIZE); |
| 360 | EVP_DigestUpdate(&md,er2,SSL3_RANDOM_SIZE); | 354 | EVP_DigestUpdate(&md, er2, SSL3_RANDOM_SIZE); |
| 361 | EVP_DigestFinal_ex(&md,&(exp_key[0]),NULL); | 355 | EVP_DigestFinal_ex(&md, &(exp_key[0]), NULL); |
| 362 | key= &(exp_key[0]); | 356 | key = &(exp_key[0]); |
| 363 | 357 | ||
| 364 | if (k > 0) | 358 | if (k > 0) { |
| 365 | { | 359 | EVP_DigestInit_ex(&md, EVP_md5(), NULL); |
| 366 | EVP_DigestInit_ex(&md,EVP_md5(), NULL); | 360 | EVP_DigestUpdate(&md, er1, SSL3_RANDOM_SIZE); |
| 367 | EVP_DigestUpdate(&md,er1,SSL3_RANDOM_SIZE); | 361 | EVP_DigestUpdate(&md, er2, SSL3_RANDOM_SIZE); |
| 368 | EVP_DigestUpdate(&md,er2,SSL3_RANDOM_SIZE); | 362 | EVP_DigestFinal_ex(&md, &(exp_iv[0]), NULL); |
| 369 | EVP_DigestFinal_ex(&md,&(exp_iv[0]),NULL); | 363 | iv = &(exp_iv[0]); |
| 370 | iv= &(exp_iv[0]); | ||
| 371 | } | ||
| 372 | } | 364 | } |
| 365 | } | ||
| 373 | 366 | ||
| 374 | s->session->key_arg_length=0; | 367 | s->session->key_arg_length = 0; |
| 375 | 368 | ||
| 376 | EVP_CipherInit_ex(dd,c,NULL,key,iv,(which & SSL3_CC_WRITE)); | 369 | EVP_CipherInit_ex(dd, c, NULL, key, iv,(which & SSL3_CC_WRITE)); |
| 377 | 370 | ||
| 378 | OPENSSL_cleanse(&(exp_key[0]),sizeof(exp_key)); | 371 | OPENSSL_cleanse(&(exp_key[0]), sizeof(exp_key)); |
| 379 | OPENSSL_cleanse(&(exp_iv[0]),sizeof(exp_iv)); | 372 | OPENSSL_cleanse(&(exp_iv[0]), sizeof(exp_iv)); |
| 380 | EVP_MD_CTX_cleanup(&md); | 373 | EVP_MD_CTX_cleanup(&md); |
| 381 | return(1); | 374 | return (1); |
| 382 | err: | 375 | err: |
| 383 | SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE,ERR_R_MALLOC_FAILURE); | 376 | SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE, ERR_R_MALLOC_FAILURE); |
| 384 | err2: | 377 | err2: |
| 385 | return(0); | 378 | return (0); |
| 386 | } | 379 | } |
| 387 | 380 | ||
| 388 | int ssl3_setup_key_block(SSL *s) | 381 | int |
| 389 | { | 382 | ssl3_setup_key_block(SSL *s) |
| 383 | { | ||
| 390 | unsigned char *p; | 384 | unsigned char *p; |
| 391 | const EVP_CIPHER *c; | 385 | const EVP_CIPHER *c; |
| 392 | const EVP_MD *hash; | 386 | const EVP_MD *hash; |
| @@ -395,76 +389,73 @@ int ssl3_setup_key_block(SSL *s) | |||
| 395 | SSL_COMP *comp; | 389 | SSL_COMP *comp; |
| 396 | 390 | ||
| 397 | if (s->s3->tmp.key_block_length != 0) | 391 | if (s->s3->tmp.key_block_length != 0) |
| 398 | return(1); | 392 | return (1); |
| 399 | 393 | ||
| 400 | if (!ssl_cipher_get_evp(s->session,&c,&hash,NULL,NULL,&comp)) | 394 | if (!ssl_cipher_get_evp(s->session, &c, &hash, NULL, NULL, &comp)) { |
| 401 | { | 395 | SSLerr(SSL_F_SSL3_SETUP_KEY_BLOCK, SSL_R_CIPHER_OR_HASH_UNAVAILABLE); |
| 402 | SSLerr(SSL_F_SSL3_SETUP_KEY_BLOCK,SSL_R_CIPHER_OR_HASH_UNAVAILABLE); | 396 | return (0); |
| 403 | return(0); | 397 | } |
| 404 | } | ||
| 405 | 398 | ||
| 406 | s->s3->tmp.new_sym_enc=c; | 399 | s->s3->tmp.new_sym_enc = c; |
| 407 | s->s3->tmp.new_hash=hash; | 400 | s->s3->tmp.new_hash = hash; |
| 408 | #ifdef OPENSSL_NO_COMP | 401 | #ifdef OPENSSL_NO_COMP |
| 409 | s->s3->tmp.new_compression=NULL; | 402 | s->s3->tmp.new_compression = NULL; |
| 410 | #else | 403 | #else |
| 411 | s->s3->tmp.new_compression=comp; | 404 | s->s3->tmp.new_compression = comp; |
| 412 | #endif | 405 | #endif |
| 413 | 406 | ||
| 414 | num=EVP_MD_size(hash); | 407 | num = EVP_MD_size(hash); |
| 415 | if (num < 0) | 408 | if (num < 0) |
| 416 | return 0; | 409 | return 0; |
| 417 | 410 | ||
| 418 | num=EVP_CIPHER_key_length(c)+num+EVP_CIPHER_iv_length(c); | 411 | num = EVP_CIPHER_key_length(c) + num + EVP_CIPHER_iv_length(c); |
| 419 | num*=2; | 412 | num *= 2; |
| 420 | 413 | ||
| 421 | ssl3_cleanup_key_block(s); | 414 | ssl3_cleanup_key_block(s); |
| 422 | 415 | ||
| 423 | if ((p=OPENSSL_malloc(num)) == NULL) | 416 | if ((p = OPENSSL_malloc(num)) == NULL) |
| 424 | goto err; | 417 | goto err; |
| 425 | 418 | ||
| 426 | s->s3->tmp.key_block_length=num; | 419 | s->s3->tmp.key_block_length = num; |
| 427 | s->s3->tmp.key_block=p; | 420 | s->s3->tmp.key_block = p; |
| 428 | 421 | ||
| 429 | ret = ssl3_generate_key_block(s,p,num); | 422 | ret = ssl3_generate_key_block(s, p, num); |
| 430 | 423 | ||
| 431 | if (!(s->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)) | 424 | if (!(s->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)) { |
| 432 | { | ||
| 433 | /* enable vulnerability countermeasure for CBC ciphers with | 425 | /* enable vulnerability countermeasure for CBC ciphers with |
| 434 | * known-IV problem (http://www.openssl.org/~bodo/tls-cbc.txt) | 426 | * known-IV problem (http://www.openssl.org/~bodo/tls-cbc.txt) |
| 435 | */ | 427 | */ |
| 436 | s->s3->need_empty_fragments = 1; | 428 | s->s3->need_empty_fragments = 1; |
| 437 | 429 | ||
| 438 | if (s->session->cipher != NULL) | 430 | if (s->session->cipher != NULL) { |
| 439 | { | ||
| 440 | if (s->session->cipher->algorithm_enc == SSL_eNULL) | 431 | if (s->session->cipher->algorithm_enc == SSL_eNULL) |
| 441 | s->s3->need_empty_fragments = 0; | 432 | s->s3->need_empty_fragments = 0; |
| 442 | 433 | ||
| 443 | #ifndef OPENSSL_NO_RC4 | 434 | #ifndef OPENSSL_NO_RC4 |
| 444 | if (s->session->cipher->algorithm_enc == SSL_RC4) | 435 | if (s->session->cipher->algorithm_enc == SSL_RC4) |
| 445 | s->s3->need_empty_fragments = 0; | 436 | s->s3->need_empty_fragments = 0; |
| 446 | #endif | 437 | #endif |
| 447 | } | ||
| 448 | } | 438 | } |
| 439 | } | ||
| 449 | 440 | ||
| 450 | return ret; | 441 | return ret; |
| 451 | |||
| 452 | err: | ||
| 453 | SSLerr(SSL_F_SSL3_SETUP_KEY_BLOCK,ERR_R_MALLOC_FAILURE); | ||
| 454 | return(0); | ||
| 455 | } | ||
| 456 | 442 | ||
| 457 | void ssl3_cleanup_key_block(SSL *s) | 443 | err: |
| 458 | { | 444 | SSLerr(SSL_F_SSL3_SETUP_KEY_BLOCK, ERR_R_MALLOC_FAILURE); |
| 459 | if (s->s3->tmp.key_block != NULL) | 445 | return (0); |
| 460 | { | 446 | } |
| 447 | |||
| 448 | void | ||
| 449 | ssl3_cleanup_key_block(SSL *s) | ||
| 450 | { | ||
| 451 | if (s->s3->tmp.key_block != NULL) { | ||
| 461 | OPENSSL_cleanse(s->s3->tmp.key_block, | 452 | OPENSSL_cleanse(s->s3->tmp.key_block, |
| 462 | s->s3->tmp.key_block_length); | 453 | s->s3->tmp.key_block_length); |
| 463 | OPENSSL_free(s->s3->tmp.key_block); | 454 | OPENSSL_free(s->s3->tmp.key_block); |
| 464 | s->s3->tmp.key_block=NULL; | 455 | s->s3->tmp.key_block = NULL; |
| 465 | } | ||
| 466 | s->s3->tmp.key_block_length=0; | ||
| 467 | } | 456 | } |
| 457 | s->s3->tmp.key_block_length = 0; | ||
| 458 | } | ||
| 468 | 459 | ||
| 469 | /* ssl3_enc encrypts/decrypts the record in |s->wrec| / |s->rrec|, respectively. | 460 | /* ssl3_enc encrypts/decrypts the record in |s->wrec| / |s->rrec|, respectively. |
| 470 | * | 461 | * |
| @@ -475,118 +466,114 @@ void ssl3_cleanup_key_block(SSL *s) | |||
| 475 | * -1: if the record's padding is invalid or, if sending, an internal error | 466 | * -1: if the record's padding is invalid or, if sending, an internal error |
| 476 | * occured. | 467 | * occured. |
| 477 | */ | 468 | */ |
| 478 | int ssl3_enc(SSL *s, int send) | 469 | int |
| 479 | { | 470 | ssl3_enc(SSL *s, int send) |
| 471 | { | ||
| 480 | SSL3_RECORD *rec; | 472 | SSL3_RECORD *rec; |
| 481 | EVP_CIPHER_CTX *ds; | 473 | EVP_CIPHER_CTX *ds; |
| 482 | unsigned long l; | 474 | unsigned long l; |
| 483 | int bs,i,mac_size=0; | 475 | int bs, i, mac_size = 0; |
| 484 | const EVP_CIPHER *enc; | 476 | const EVP_CIPHER *enc; |
| 485 | 477 | ||
| 486 | if (send) | 478 | if (send) { |
| 487 | { | 479 | ds = s->enc_write_ctx; |
| 488 | ds=s->enc_write_ctx; | 480 | rec = &(s->s3->wrec); |
| 489 | rec= &(s->s3->wrec); | ||
| 490 | if (s->enc_write_ctx == NULL) | 481 | if (s->enc_write_ctx == NULL) |
| 491 | enc=NULL; | 482 | enc = NULL; |
| 492 | else | 483 | else |
| 493 | enc=EVP_CIPHER_CTX_cipher(s->enc_write_ctx); | 484 | enc = EVP_CIPHER_CTX_cipher(s->enc_write_ctx); |
| 494 | } | 485 | } else { |
| 495 | else | 486 | ds = s->enc_read_ctx; |
| 496 | { | 487 | rec = &(s->s3->rrec); |
| 497 | ds=s->enc_read_ctx; | ||
| 498 | rec= &(s->s3->rrec); | ||
| 499 | if (s->enc_read_ctx == NULL) | 488 | if (s->enc_read_ctx == NULL) |
| 500 | enc=NULL; | 489 | enc = NULL; |
| 501 | else | 490 | else |
| 502 | enc=EVP_CIPHER_CTX_cipher(s->enc_read_ctx); | 491 | enc = EVP_CIPHER_CTX_cipher(s->enc_read_ctx); |
| 503 | } | 492 | } |
| 504 | 493 | ||
| 505 | if ((s->session == NULL) || (ds == NULL) || | 494 | if ((s->session == NULL) || (ds == NULL) || |
| 506 | (enc == NULL)) | 495 | (enc == NULL)) { |
| 507 | { | 496 | memmove(rec->data, rec->input, rec->length); |
| 508 | memmove(rec->data,rec->input,rec->length); | 497 | rec->input = rec->data; |
| 509 | rec->input=rec->data; | 498 | } else { |
| 510 | } | 499 | l = rec->length; |
| 511 | else | 500 | bs = EVP_CIPHER_block_size(ds->cipher); |
| 512 | { | ||
| 513 | l=rec->length; | ||
| 514 | bs=EVP_CIPHER_block_size(ds->cipher); | ||
| 515 | 501 | ||
| 516 | /* COMPRESS */ | 502 | /* COMPRESS */ |
| 517 | 503 | ||
| 518 | if ((bs != 1) && send) | 504 | if ((bs != 1) && send) { |
| 519 | { | 505 | i = bs - ((int)l % bs); |
| 520 | i=bs-((int)l%bs); | ||
| 521 | 506 | ||
| 522 | /* we need to add 'i-1' padding bytes */ | 507 | /* we need to add 'i-1' padding bytes */ |
| 523 | l+=i; | 508 | l += i; |
| 524 | /* the last of these zero bytes will be overwritten | 509 | /* the last of these zero bytes will be overwritten |
| 525 | * with the padding length. */ | 510 | * with the padding length. */ |
| 526 | memset(&rec->input[rec->length], 0, i); | 511 | memset(&rec->input[rec->length], 0, i); |
| 527 | rec->length+=i; | 512 | rec->length += i; |
| 528 | rec->input[l-1]=(i-1); | 513 | rec->input[l - 1] = (i - 1); |
| 529 | } | 514 | } |
| 530 | 515 | ||
| 531 | if (!send) | 516 | if (!send) { |
| 532 | { | 517 | if (l == 0 || l % bs != 0) |
| 533 | if (l == 0 || l%bs != 0) | ||
| 534 | return 0; | 518 | return 0; |
| 535 | /* otherwise, rec->length >= bs */ | 519 | /* otherwise, rec->length >= bs */ |
| 536 | } | 520 | } |
| 537 | 521 | ||
| 538 | EVP_Cipher(ds,rec->data,rec->input,l); | 522 | EVP_Cipher(ds, rec->data, rec->input, l); |
| 539 | 523 | ||
| 540 | if (EVP_MD_CTX_md(s->read_hash) != NULL) | 524 | if (EVP_MD_CTX_md(s->read_hash) != NULL) |
| 541 | mac_size = EVP_MD_CTX_size(s->read_hash); | 525 | mac_size = EVP_MD_CTX_size(s->read_hash); |
| 542 | if ((bs != 1) && !send) | 526 | if ((bs != 1) && !send) |
| 543 | return ssl3_cbc_remove_padding(s, rec, bs, mac_size); | 527 | return ssl3_cbc_remove_padding(s, rec, bs, mac_size); |
| 544 | } | ||
| 545 | return(1); | ||
| 546 | } | 528 | } |
| 529 | return (1); | ||
| 530 | } | ||
| 547 | 531 | ||
| 548 | void ssl3_init_finished_mac(SSL *s) | 532 | void |
| 549 | { | 533 | ssl3_init_finished_mac(SSL *s) |
| 550 | if (s->s3->handshake_buffer) BIO_free(s->s3->handshake_buffer); | 534 | { |
| 551 | if (s->s3->handshake_dgst) ssl3_free_digest_list(s); | 535 | if (s->s3->handshake_buffer) |
| 552 | s->s3->handshake_buffer=BIO_new(BIO_s_mem()); | 536 | BIO_free(s->s3->handshake_buffer); |
| 553 | (void)BIO_set_close(s->s3->handshake_buffer,BIO_CLOSE); | 537 | if (s->s3->handshake_dgst) |
| 554 | } | 538 | ssl3_free_digest_list(s); |
| 539 | s->s3->handshake_buffer = BIO_new(BIO_s_mem()); | ||
| 540 | |||
| 541 | (void)BIO_set_close(s->s3->handshake_buffer, BIO_CLOSE); | ||
| 542 | } | ||
| 555 | 543 | ||
| 556 | void ssl3_free_digest_list(SSL *s) | 544 | void |
| 557 | { | 545 | ssl3_free_digest_list(SSL *s) |
| 546 | { | ||
| 558 | int i; | 547 | int i; |
| 559 | if (!s->s3->handshake_dgst) return; | 548 | if (!s->s3->handshake_dgst) |
| 560 | for (i=0;i<SSL_MAX_DIGEST;i++) | 549 | return; |
| 561 | { | 550 | for (i = 0; i < SSL_MAX_DIGEST; i++) { |
| 562 | if (s->s3->handshake_dgst[i]) | 551 | if (s->s3->handshake_dgst[i]) |
| 563 | EVP_MD_CTX_destroy(s->s3->handshake_dgst[i]); | 552 | EVP_MD_CTX_destroy(s->s3->handshake_dgst[i]); |
| 564 | } | 553 | } |
| 565 | OPENSSL_free(s->s3->handshake_dgst); | 554 | OPENSSL_free(s->s3->handshake_dgst); |
| 566 | s->s3->handshake_dgst=NULL; | 555 | s->s3->handshake_dgst = NULL; |
| 567 | } | 556 | } |
| 568 | 557 | ||
| 569 | 558 | ||
| 570 | 559 | ||
| 571 | void ssl3_finish_mac(SSL *s, const unsigned char *buf, int len) | 560 | void |
| 572 | { | 561 | ssl3_finish_mac(SSL *s, const unsigned char *buf, int len) |
| 573 | if (s->s3->handshake_buffer && !(s->s3->flags & TLS1_FLAGS_KEEP_HANDSHAKE)) | 562 | { |
| 574 | { | 563 | if (s->s3->handshake_buffer && !(s->s3->flags & TLS1_FLAGS_KEEP_HANDSHAKE)) { |
| 575 | BIO_write (s->s3->handshake_buffer,(void *)buf,len); | 564 | BIO_write (s->s3->handshake_buffer,(void *)buf, len); |
| 576 | } | 565 | } else { |
| 577 | else | ||
| 578 | { | ||
| 579 | int i; | 566 | int i; |
| 580 | for (i=0;i< SSL_MAX_DIGEST;i++) | 567 | for (i = 0; i < SSL_MAX_DIGEST; i++) { |
| 581 | { | ||
| 582 | if (s->s3->handshake_dgst[i]!= NULL) | 568 | if (s->s3->handshake_dgst[i]!= NULL) |
| 583 | EVP_DigestUpdate(s->s3->handshake_dgst[i],buf,len); | 569 | EVP_DigestUpdate(s->s3->handshake_dgst[i], buf, len); |
| 584 | } | 570 | } |
| 585 | } | ||
| 586 | } | 571 | } |
| 572 | } | ||
| 587 | 573 | ||
| 588 | int ssl3_digest_cached_records(SSL *s) | 574 | int |
| 589 | { | 575 | ssl3_digest_cached_records(SSL *s) |
| 576 | { | ||
| 590 | int i; | 577 | int i; |
| 591 | long mask; | 578 | long mask; |
| 592 | const EVP_MD *md; | 579 | const EVP_MD *md; |
| @@ -596,152 +583,144 @@ int ssl3_digest_cached_records(SSL *s) | |||
| 596 | /* Allocate handshake_dgst array */ | 583 | /* Allocate handshake_dgst array */ |
| 597 | ssl3_free_digest_list(s); | 584 | ssl3_free_digest_list(s); |
| 598 | s->s3->handshake_dgst = OPENSSL_malloc(SSL_MAX_DIGEST * sizeof(EVP_MD_CTX *)); | 585 | s->s3->handshake_dgst = OPENSSL_malloc(SSL_MAX_DIGEST * sizeof(EVP_MD_CTX *)); |
| 599 | memset(s->s3->handshake_dgst,0,SSL_MAX_DIGEST *sizeof(EVP_MD_CTX *)); | 586 | memset(s->s3->handshake_dgst, 0, SSL_MAX_DIGEST *sizeof(EVP_MD_CTX *)); |
| 600 | hdatalen = BIO_get_mem_data(s->s3->handshake_buffer,&hdata); | 587 | hdatalen = BIO_get_mem_data(s->s3->handshake_buffer, &hdata); |
| 601 | if (hdatalen <= 0) | 588 | if (hdatalen <= 0) { |
| 602 | { | ||
| 603 | SSLerr(SSL_F_SSL3_DIGEST_CACHED_RECORDS, SSL_R_BAD_HANDSHAKE_LENGTH); | 589 | SSLerr(SSL_F_SSL3_DIGEST_CACHED_RECORDS, SSL_R_BAD_HANDSHAKE_LENGTH); |
| 604 | return 0; | 590 | return 0; |
| 605 | } | 591 | } |
| 606 | 592 | ||
| 607 | /* Loop through bitso of algorithm2 field and create MD_CTX-es */ | 593 | /* Loop through bitso of algorithm2 field and create MD_CTX-es */ |
| 608 | for (i=0;ssl_get_handshake_digest(i,&mask,&md); i++) | 594 | for (i = 0; ssl_get_handshake_digest(i, &mask, &md); i++) { |
| 609 | { | 595 | if ((mask & ssl_get_algorithm2(s)) && md) { |
| 610 | if ((mask & ssl_get_algorithm2(s)) && md) | 596 | s->s3->handshake_dgst[i] = EVP_MD_CTX_create(); |
| 611 | { | ||
| 612 | s->s3->handshake_dgst[i]=EVP_MD_CTX_create(); | ||
| 613 | #ifdef OPENSSL_FIPS | 597 | #ifdef OPENSSL_FIPS |
| 614 | if (EVP_MD_nid(md) == NID_md5) | 598 | if (EVP_MD_nid(md) == NID_md5) { |
| 615 | { | ||
| 616 | EVP_MD_CTX_set_flags(s->s3->handshake_dgst[i], | 599 | EVP_MD_CTX_set_flags(s->s3->handshake_dgst[i], |
| 617 | EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); | 600 | EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); |
| 618 | } | ||
| 619 | #endif | ||
| 620 | EVP_DigestInit_ex(s->s3->handshake_dgst[i],md,NULL); | ||
| 621 | EVP_DigestUpdate(s->s3->handshake_dgst[i],hdata,hdatalen); | ||
| 622 | } | ||
| 623 | else | ||
| 624 | { | ||
| 625 | s->s3->handshake_dgst[i]=NULL; | ||
| 626 | } | 601 | } |
| 602 | #endif | ||
| 603 | EVP_DigestInit_ex(s->s3->handshake_dgst[i], md, NULL); | ||
| 604 | EVP_DigestUpdate(s->s3->handshake_dgst[i], hdata, hdatalen); | ||
| 605 | } else { | ||
| 606 | s->s3->handshake_dgst[i] = NULL; | ||
| 627 | } | 607 | } |
| 628 | if (!(s->s3->flags & TLS1_FLAGS_KEEP_HANDSHAKE)) | 608 | } |
| 629 | { | 609 | if (!(s->s3->flags & TLS1_FLAGS_KEEP_HANDSHAKE)) { |
| 630 | /* Free handshake_buffer BIO */ | 610 | /* Free handshake_buffer BIO */ |
| 631 | BIO_free(s->s3->handshake_buffer); | 611 | BIO_free(s->s3->handshake_buffer); |
| 632 | s->s3->handshake_buffer = NULL; | 612 | s->s3->handshake_buffer = NULL; |
| 633 | } | 613 | } |
| 634 | 614 | ||
| 635 | return 1; | 615 | return 1; |
| 636 | } | 616 | } |
| 637 | 617 | ||
| 638 | int ssl3_cert_verify_mac(SSL *s, int md_nid, unsigned char *p) | 618 | int |
| 639 | { | 619 | ssl3_cert_verify_mac(SSL *s, int md_nid, unsigned char *p) |
| 640 | return(ssl3_handshake_mac(s,md_nid,NULL,0,p)); | 620 | { |
| 641 | } | 621 | return (ssl3_handshake_mac(s, md_nid, NULL, 0, p)); |
| 642 | int ssl3_final_finish_mac(SSL *s, | 622 | } |
| 643 | const char *sender, int len, unsigned char *p) | 623 | |
| 644 | { | 624 | int |
| 625 | ssl3_final_finish_mac(SSL *s, const char *sender, int len, unsigned char *p) | ||
| 626 | { | ||
| 645 | int ret; | 627 | int ret; |
| 646 | ret=ssl3_handshake_mac(s,NID_md5,sender,len,p); | 628 | ret = ssl3_handshake_mac(s, NID_md5, sender, len, p); |
| 647 | p+=ret; | 629 | p += ret; |
| 648 | ret+=ssl3_handshake_mac(s,NID_sha1,sender,len,p); | 630 | ret += ssl3_handshake_mac(s, NID_sha1, sender, len, p); |
| 649 | return(ret); | 631 | return (ret); |
| 650 | } | 632 | } |
| 651 | static int ssl3_handshake_mac(SSL *s, int md_nid, | 633 | |
| 652 | const char *sender, int len, unsigned char *p) | 634 | static int |
| 653 | { | 635 | ssl3_handshake_mac(SSL *s, int md_nid, const char *sender, int len, |
| 636 | unsigned char *p) | ||
| 637 | { | ||
| 654 | unsigned int ret; | 638 | unsigned int ret; |
| 655 | int npad,n; | 639 | int npad, n; |
| 656 | unsigned int i; | 640 | unsigned int i; |
| 657 | unsigned char md_buf[EVP_MAX_MD_SIZE]; | 641 | unsigned char md_buf[EVP_MAX_MD_SIZE]; |
| 658 | EVP_MD_CTX ctx,*d=NULL; | 642 | EVP_MD_CTX ctx, *d = NULL; |
| 659 | 643 | ||
| 660 | if (s->s3->handshake_buffer) | 644 | if (s->s3->handshake_buffer) |
| 661 | if (!ssl3_digest_cached_records(s)) | 645 | if (!ssl3_digest_cached_records(s)) |
| 662 | return 0; | 646 | return 0; |
| 663 | 647 | ||
| 664 | /* Search for digest of specified type in the handshake_dgst | 648 | /* Search for digest of specified type in the handshake_dgst |
| 665 | * array*/ | 649 | * array*/ |
| 666 | for (i=0;i<SSL_MAX_DIGEST;i++) | 650 | for (i = 0; i < SSL_MAX_DIGEST; i++) { |
| 667 | { | 651 | if (s->s3->handshake_dgst[i]&&EVP_MD_CTX_type(s->s3->handshake_dgst[i]) == md_nid) { |
| 668 | if (s->s3->handshake_dgst[i]&&EVP_MD_CTX_type(s->s3->handshake_dgst[i])==md_nid) | 652 | d = s->s3->handshake_dgst[i]; |
| 669 | { | ||
| 670 | d=s->s3->handshake_dgst[i]; | ||
| 671 | break; | 653 | break; |
| 672 | } | ||
| 673 | } | 654 | } |
| 655 | } | ||
| 674 | if (!d) { | 656 | if (!d) { |
| 675 | SSLerr(SSL_F_SSL3_HANDSHAKE_MAC,SSL_R_NO_REQUIRED_DIGEST); | 657 | SSLerr(SSL_F_SSL3_HANDSHAKE_MAC, SSL_R_NO_REQUIRED_DIGEST); |
| 676 | return 0; | 658 | return 0; |
| 677 | } | 659 | } |
| 678 | EVP_MD_CTX_init(&ctx); | 660 | EVP_MD_CTX_init(&ctx); |
| 679 | EVP_MD_CTX_set_flags(&ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); | 661 | EVP_MD_CTX_set_flags(&ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); |
| 680 | EVP_MD_CTX_copy_ex(&ctx,d); | 662 | EVP_MD_CTX_copy_ex(&ctx, d); |
| 681 | n=EVP_MD_CTX_size(&ctx); | 663 | n = EVP_MD_CTX_size(&ctx); |
| 682 | if (n < 0) | 664 | if (n < 0) |
| 683 | return 0; | 665 | return 0; |
| 684 | 666 | ||
| 685 | npad=(48/n)*n; | 667 | npad = (48/n)*n; |
| 686 | if (sender != NULL) | 668 | if (sender != NULL) |
| 687 | EVP_DigestUpdate(&ctx,sender,len); | 669 | EVP_DigestUpdate(&ctx, sender, len); |
| 688 | EVP_DigestUpdate(&ctx,s->session->master_key, | 670 | EVP_DigestUpdate(&ctx, s->session->master_key, |
| 689 | s->session->master_key_length); | 671 | s->session->master_key_length); |
| 690 | EVP_DigestUpdate(&ctx,ssl3_pad_1,npad); | 672 | EVP_DigestUpdate(&ctx, ssl3_pad_1, npad); |
| 691 | EVP_DigestFinal_ex(&ctx,md_buf,&i); | 673 | EVP_DigestFinal_ex(&ctx, md_buf, &i); |
| 692 | 674 | ||
| 693 | EVP_DigestInit_ex(&ctx,EVP_MD_CTX_md(&ctx), NULL); | 675 | EVP_DigestInit_ex(&ctx, EVP_MD_CTX_md(&ctx), NULL); |
| 694 | EVP_DigestUpdate(&ctx,s->session->master_key, | 676 | EVP_DigestUpdate(&ctx, s->session->master_key, |
| 695 | s->session->master_key_length); | 677 | s->session->master_key_length); |
| 696 | EVP_DigestUpdate(&ctx,ssl3_pad_2,npad); | 678 | EVP_DigestUpdate(&ctx, ssl3_pad_2, npad); |
| 697 | EVP_DigestUpdate(&ctx,md_buf,i); | 679 | EVP_DigestUpdate(&ctx, md_buf, i); |
| 698 | EVP_DigestFinal_ex(&ctx,p,&ret); | 680 | EVP_DigestFinal_ex(&ctx, p, &ret); |
| 699 | 681 | ||
| 700 | EVP_MD_CTX_cleanup(&ctx); | 682 | EVP_MD_CTX_cleanup(&ctx); |
| 701 | 683 | ||
| 702 | return((int)ret); | 684 | return ((int)ret); |
| 703 | } | 685 | } |
| 704 | 686 | ||
| 705 | int n_ssl3_mac(SSL *ssl, unsigned char *md, int send) | 687 | int |
| 706 | { | 688 | n_ssl3_mac(SSL *ssl, unsigned char *md, int send) |
| 689 | { | ||
| 707 | SSL3_RECORD *rec; | 690 | SSL3_RECORD *rec; |
| 708 | unsigned char *mac_sec,*seq; | 691 | unsigned char *mac_sec, *seq; |
| 709 | EVP_MD_CTX md_ctx; | 692 | EVP_MD_CTX md_ctx; |
| 710 | const EVP_MD_CTX *hash; | 693 | const EVP_MD_CTX *hash; |
| 711 | unsigned char *p,rec_char; | 694 | unsigned char *p, rec_char; |
| 712 | size_t md_size, orig_len; | 695 | size_t md_size, orig_len; |
| 713 | int npad; | 696 | int npad; |
| 714 | int t; | 697 | int t; |
| 715 | 698 | ||
| 716 | if (send) | 699 | if (send) { |
| 717 | { | 700 | rec = &(ssl->s3->wrec); |
| 718 | rec= &(ssl->s3->wrec); | 701 | mac_sec = &(ssl->s3->write_mac_secret[0]); |
| 719 | mac_sec= &(ssl->s3->write_mac_secret[0]); | 702 | seq = &(ssl->s3->write_sequence[0]); |
| 720 | seq= &(ssl->s3->write_sequence[0]); | 703 | hash = ssl->write_hash; |
| 721 | hash=ssl->write_hash; | 704 | } else { |
| 722 | } | 705 | rec = &(ssl->s3->rrec); |
| 723 | else | 706 | mac_sec = &(ssl->s3->read_mac_secret[0]); |
| 724 | { | 707 | seq = &(ssl->s3->read_sequence[0]); |
| 725 | rec= &(ssl->s3->rrec); | 708 | hash = ssl->read_hash; |
| 726 | mac_sec= &(ssl->s3->read_mac_secret[0]); | 709 | } |
| 727 | seq= &(ssl->s3->read_sequence[0]); | ||
| 728 | hash=ssl->read_hash; | ||
| 729 | } | ||
| 730 | 710 | ||
| 731 | t=EVP_MD_CTX_size(hash); | 711 | t = EVP_MD_CTX_size(hash); |
| 732 | if (t < 0) | 712 | if (t < 0) |
| 733 | return -1; | 713 | return -1; |
| 734 | md_size=t; | 714 | md_size = t; |
| 735 | npad=(48/md_size)*md_size; | 715 | npad = (48/md_size)*md_size; |
| 736 | 716 | ||
| 737 | /* kludge: ssl3_cbc_remove_padding passes padding length in rec->type */ | 717 | /* kludge: ssl3_cbc_remove_padding passes padding length in rec->type */ |
| 738 | orig_len = rec->length+md_size+((unsigned int)rec->type>>8); | 718 | orig_len = rec->length + md_size + ((unsigned int)rec->type >> 8); |
| 739 | rec->type &= 0xff; | 719 | rec->type &= 0xff; |
| 740 | 720 | ||
| 741 | if (!send && | 721 | if (!send && |
| 742 | EVP_CIPHER_CTX_mode(ssl->enc_read_ctx) == EVP_CIPH_CBC_MODE && | 722 | EVP_CIPHER_CTX_mode(ssl->enc_read_ctx) == EVP_CIPH_CBC_MODE && |
| 743 | ssl3_cbc_record_digest_supported(hash)) | 723 | ssl3_cbc_record_digest_supported(hash)) { |
| 744 | { | ||
| 745 | /* This is a CBC-encrypted record. We must avoid leaking any | 724 | /* This is a CBC-encrypted record. We must avoid leaking any |
| 746 | * timing-side channel information about how many blocks of | 725 | * timing-side channel information about how many blocks of |
| 747 | * data we are hashing because that gives an attacker a | 726 | * data we are hashing because that gives an attacker a |
| @@ -755,71 +734,68 @@ int n_ssl3_mac(SSL *ssl, unsigned char *md, int send) | |||
| 755 | * total size. */ | 734 | * total size. */ |
| 756 | unsigned char header[75]; | 735 | unsigned char header[75]; |
| 757 | unsigned j = 0; | 736 | unsigned j = 0; |
| 758 | memcpy(header+j, mac_sec, md_size); | 737 | memcpy(header + j, mac_sec, md_size); |
| 759 | j += md_size; | 738 | j += md_size; |
| 760 | memcpy(header+j, ssl3_pad_1, npad); | 739 | memcpy(header + j, ssl3_pad_1, npad); |
| 761 | j += npad; | 740 | j += npad; |
| 762 | memcpy(header+j, seq, 8); | 741 | memcpy(header + j, seq, 8); |
| 763 | j += 8; | 742 | j += 8; |
| 764 | header[j++] = rec->type; | 743 | header[j++] = rec->type; |
| 765 | header[j++] = rec->length >> 8; | 744 | header[j++] = rec->length >> 8; |
| 766 | header[j++] = rec->length & 0xff; | 745 | header[j++] = rec->length & 0xff; |
| 767 | 746 | ||
| 768 | ssl3_cbc_digest_record( | 747 | ssl3_cbc_digest_record(hash, md, &md_size, header, rec->input, |
| 769 | hash, | 748 | rec->length + md_size, orig_len, mac_sec, md_size, |
| 770 | md, &md_size, | 749 | 1 /* is SSLv3 */); |
| 771 | header, rec->input, | 750 | } else { |
| 772 | rec->length + md_size, orig_len, | ||
| 773 | mac_sec, md_size, | ||
| 774 | 1 /* is SSLv3 */); | ||
| 775 | } | ||
| 776 | else | ||
| 777 | { | ||
| 778 | unsigned int md_size_u; | 751 | unsigned int md_size_u; |
| 779 | /* Chop the digest off the end :-) */ | 752 | /* Chop the digest off the end :-) */ |
| 780 | EVP_MD_CTX_init(&md_ctx); | 753 | EVP_MD_CTX_init(&md_ctx); |
| 781 | 754 | ||
| 782 | EVP_MD_CTX_copy_ex( &md_ctx,hash); | 755 | EVP_MD_CTX_copy_ex( &md_ctx, hash); |
| 783 | EVP_DigestUpdate(&md_ctx,mac_sec,md_size); | 756 | EVP_DigestUpdate(&md_ctx, mac_sec, md_size); |
| 784 | EVP_DigestUpdate(&md_ctx,ssl3_pad_1,npad); | 757 | EVP_DigestUpdate(&md_ctx, ssl3_pad_1, npad); |
| 785 | EVP_DigestUpdate(&md_ctx,seq,8); | 758 | EVP_DigestUpdate(&md_ctx, seq, 8); |
| 786 | rec_char=rec->type; | 759 | rec_char = rec->type; |
| 787 | EVP_DigestUpdate(&md_ctx,&rec_char,1); | 760 | EVP_DigestUpdate(&md_ctx, &rec_char, 1); |
| 788 | p=md; | 761 | p = md; |
| 789 | s2n(rec->length,p); | 762 | s2n(rec->length, p); |
| 790 | EVP_DigestUpdate(&md_ctx,md,2); | 763 | EVP_DigestUpdate(&md_ctx, md, 2); |
| 791 | EVP_DigestUpdate(&md_ctx,rec->input,rec->length); | 764 | EVP_DigestUpdate(&md_ctx, rec->input, rec->length); |
| 792 | EVP_DigestFinal_ex( &md_ctx,md,NULL); | 765 | EVP_DigestFinal_ex( &md_ctx, md, NULL); |
| 793 | 766 | ||
| 794 | EVP_MD_CTX_copy_ex( &md_ctx,hash); | 767 | EVP_MD_CTX_copy_ex( &md_ctx, hash); |
| 795 | EVP_DigestUpdate(&md_ctx,mac_sec,md_size); | 768 | EVP_DigestUpdate(&md_ctx, mac_sec, md_size); |
| 796 | EVP_DigestUpdate(&md_ctx,ssl3_pad_2,npad); | 769 | EVP_DigestUpdate(&md_ctx, ssl3_pad_2, npad); |
| 797 | EVP_DigestUpdate(&md_ctx,md,md_size); | 770 | EVP_DigestUpdate(&md_ctx, md, md_size); |
| 798 | EVP_DigestFinal_ex( &md_ctx,md,&md_size_u); | 771 | EVP_DigestFinal_ex( &md_ctx, md, &md_size_u); |
| 799 | md_size = md_size_u; | 772 | md_size = md_size_u; |
| 800 | 773 | ||
| 801 | EVP_MD_CTX_cleanup(&md_ctx); | 774 | EVP_MD_CTX_cleanup(&md_ctx); |
| 802 | } | 775 | } |
| 803 | 776 | ||
| 804 | ssl3_record_sequence_update(seq); | 777 | ssl3_record_sequence_update(seq); |
| 805 | return(md_size); | 778 | return (md_size); |
| 806 | } | 779 | } |
| 807 | 780 | ||
| 808 | void ssl3_record_sequence_update(unsigned char *seq) | 781 | void |
| 809 | { | 782 | ssl3_record_sequence_update(unsigned char *seq) |
| 783 | { | ||
| 810 | int i; | 784 | int i; |
| 811 | 785 | ||
| 812 | for (i=7; i>=0; i--) | 786 | for (i = 7; i >= 0; i--) { |
| 813 | { | ||
| 814 | ++seq[i]; | 787 | ++seq[i]; |
| 815 | if (seq[i] != 0) break; | 788 | if (seq[i] != 0) |
| 816 | } | 789 | break; |
| 790 | |||
| 817 | } | 791 | } |
| 792 | } | ||
| 818 | 793 | ||
| 819 | int ssl3_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p, | 794 | int |
| 820 | int len) | 795 | ssl3_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p, |
| 821 | { | 796 | int len) |
| 822 | static const unsigned char *salt[3]={ | 797 | { |
| 798 | static const unsigned char *salt[3] = { | ||
| 823 | #ifndef CHARSET_EBCDIC | 799 | #ifndef CHARSET_EBCDIC |
| 824 | (const unsigned char *)"A", | 800 | (const unsigned char *)"A", |
| 825 | (const unsigned char *)"BB", | 801 | (const unsigned char *)"BB", |
| @@ -829,70 +805,98 @@ int ssl3_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p, | |||
| 829 | (const unsigned char *)"\x42\x42", | 805 | (const unsigned char *)"\x42\x42", |
| 830 | (const unsigned char *)"\x43\x43\x43", | 806 | (const unsigned char *)"\x43\x43\x43", |
| 831 | #endif | 807 | #endif |
| 832 | }; | 808 | }; |
| 833 | unsigned char buf[EVP_MAX_MD_SIZE]; | 809 | unsigned char buf[EVP_MAX_MD_SIZE]; |
| 834 | EVP_MD_CTX ctx; | 810 | EVP_MD_CTX ctx; |
| 835 | int i,ret=0; | 811 | int i, ret = 0; |
| 836 | unsigned int n; | 812 | unsigned int n; |
| 837 | 813 | ||
| 838 | EVP_MD_CTX_init(&ctx); | 814 | EVP_MD_CTX_init(&ctx); |
| 839 | for (i=0; i<3; i++) | 815 | for (i = 0; i < 3; i++) { |
| 840 | { | 816 | EVP_DigestInit_ex(&ctx, s->ctx->sha1, NULL); |
| 841 | EVP_DigestInit_ex(&ctx,s->ctx->sha1, NULL); | 817 | EVP_DigestUpdate(&ctx, salt[i], strlen((const char *)salt[i])); |
| 842 | EVP_DigestUpdate(&ctx,salt[i],strlen((const char *)salt[i])); | 818 | EVP_DigestUpdate(&ctx, p, len); |
| 843 | EVP_DigestUpdate(&ctx,p,len); | 819 | EVP_DigestUpdate(&ctx, &(s->s3->client_random[0]), |
| 844 | EVP_DigestUpdate(&ctx,&(s->s3->client_random[0]), | 820 | SSL3_RANDOM_SIZE); |
| 845 | SSL3_RANDOM_SIZE); | 821 | EVP_DigestUpdate(&ctx, &(s->s3->server_random[0]), |
| 846 | EVP_DigestUpdate(&ctx,&(s->s3->server_random[0]), | 822 | SSL3_RANDOM_SIZE); |
| 847 | SSL3_RANDOM_SIZE); | 823 | EVP_DigestFinal_ex(&ctx, buf, &n); |
| 848 | EVP_DigestFinal_ex(&ctx,buf,&n); | 824 | |
| 849 | 825 | EVP_DigestInit_ex(&ctx, s->ctx->md5, NULL); | |
| 850 | EVP_DigestInit_ex(&ctx,s->ctx->md5, NULL); | 826 | EVP_DigestUpdate(&ctx, p, len); |
| 851 | EVP_DigestUpdate(&ctx,p,len); | 827 | EVP_DigestUpdate(&ctx, buf, n); |
| 852 | EVP_DigestUpdate(&ctx,buf,n); | 828 | EVP_DigestFinal_ex(&ctx, out, &n); |
| 853 | EVP_DigestFinal_ex(&ctx,out,&n); | 829 | out += n; |
| 854 | out+=n; | 830 | ret += n; |
| 855 | ret+=n; | ||
| 856 | } | ||
| 857 | EVP_MD_CTX_cleanup(&ctx); | ||
| 858 | return(ret); | ||
| 859 | } | 831 | } |
| 860 | 832 | EVP_MD_CTX_cleanup(&ctx); | |
| 861 | int ssl3_alert_code(int code) | 833 | return (ret); |
| 862 | { | 834 | } |
| 863 | switch (code) | 835 | |
| 864 | { | 836 | int |
| 865 | case SSL_AD_CLOSE_NOTIFY: return(SSL3_AD_CLOSE_NOTIFY); | 837 | ssl3_alert_code(int code) |
| 866 | case SSL_AD_UNEXPECTED_MESSAGE: return(SSL3_AD_UNEXPECTED_MESSAGE); | 838 | { |
| 867 | case SSL_AD_BAD_RECORD_MAC: return(SSL3_AD_BAD_RECORD_MAC); | 839 | switch (code) { |
| 868 | case SSL_AD_DECRYPTION_FAILED: return(SSL3_AD_BAD_RECORD_MAC); | 840 | case SSL_AD_CLOSE_NOTIFY: |
| 869 | case SSL_AD_RECORD_OVERFLOW: return(SSL3_AD_BAD_RECORD_MAC); | 841 | return (SSL3_AD_CLOSE_NOTIFY); |
| 870 | case SSL_AD_DECOMPRESSION_FAILURE:return(SSL3_AD_DECOMPRESSION_FAILURE); | 842 | case SSL_AD_UNEXPECTED_MESSAGE: |
| 871 | case SSL_AD_HANDSHAKE_FAILURE: return(SSL3_AD_HANDSHAKE_FAILURE); | 843 | return (SSL3_AD_UNEXPECTED_MESSAGE); |
| 872 | case SSL_AD_NO_CERTIFICATE: return(SSL3_AD_NO_CERTIFICATE); | 844 | case SSL_AD_BAD_RECORD_MAC: |
| 873 | case SSL_AD_BAD_CERTIFICATE: return(SSL3_AD_BAD_CERTIFICATE); | 845 | return (SSL3_AD_BAD_RECORD_MAC); |
| 874 | case SSL_AD_UNSUPPORTED_CERTIFICATE:return(SSL3_AD_UNSUPPORTED_CERTIFICATE); | 846 | case SSL_AD_DECRYPTION_FAILED: |
| 875 | case SSL_AD_CERTIFICATE_REVOKED:return(SSL3_AD_CERTIFICATE_REVOKED); | 847 | return (SSL3_AD_BAD_RECORD_MAC); |
| 876 | case SSL_AD_CERTIFICATE_EXPIRED:return(SSL3_AD_CERTIFICATE_EXPIRED); | 848 | case SSL_AD_RECORD_OVERFLOW: |
| 877 | case SSL_AD_CERTIFICATE_UNKNOWN:return(SSL3_AD_CERTIFICATE_UNKNOWN); | 849 | return (SSL3_AD_BAD_RECORD_MAC); |
| 878 | case SSL_AD_ILLEGAL_PARAMETER: return(SSL3_AD_ILLEGAL_PARAMETER); | 850 | case SSL_AD_DECOMPRESSION_FAILURE: |
| 879 | case SSL_AD_UNKNOWN_CA: return(SSL3_AD_BAD_CERTIFICATE); | 851 | return (SSL3_AD_DECOMPRESSION_FAILURE); |
| 880 | case SSL_AD_ACCESS_DENIED: return(SSL3_AD_HANDSHAKE_FAILURE); | 852 | case SSL_AD_HANDSHAKE_FAILURE: |
| 881 | case SSL_AD_DECODE_ERROR: return(SSL3_AD_HANDSHAKE_FAILURE); | 853 | return (SSL3_AD_HANDSHAKE_FAILURE); |
| 882 | case SSL_AD_DECRYPT_ERROR: return(SSL3_AD_HANDSHAKE_FAILURE); | 854 | case SSL_AD_NO_CERTIFICATE: |
| 883 | case SSL_AD_EXPORT_RESTRICTION: return(SSL3_AD_HANDSHAKE_FAILURE); | 855 | return (SSL3_AD_NO_CERTIFICATE); |
| 884 | case SSL_AD_PROTOCOL_VERSION: return(SSL3_AD_HANDSHAKE_FAILURE); | 856 | case SSL_AD_BAD_CERTIFICATE: |
| 885 | case SSL_AD_INSUFFICIENT_SECURITY:return(SSL3_AD_HANDSHAKE_FAILURE); | 857 | return (SSL3_AD_BAD_CERTIFICATE); |
| 886 | case SSL_AD_INTERNAL_ERROR: return(SSL3_AD_HANDSHAKE_FAILURE); | 858 | case SSL_AD_UNSUPPORTED_CERTIFICATE: |
| 887 | case SSL_AD_USER_CANCELLED: return(SSL3_AD_HANDSHAKE_FAILURE); | 859 | return (SSL3_AD_UNSUPPORTED_CERTIFICATE); |
| 860 | case SSL_AD_CERTIFICATE_REVOKED: | ||
| 861 | return (SSL3_AD_CERTIFICATE_REVOKED); | ||
| 862 | case SSL_AD_CERTIFICATE_EXPIRED: | ||
| 863 | return (SSL3_AD_CERTIFICATE_EXPIRED); | ||
| 864 | case SSL_AD_CERTIFICATE_UNKNOWN: | ||
| 865 | return (SSL3_AD_CERTIFICATE_UNKNOWN); | ||
| 866 | case SSL_AD_ILLEGAL_PARAMETER: | ||
| 867 | return (SSL3_AD_ILLEGAL_PARAMETER); | ||
| 868 | case SSL_AD_UNKNOWN_CA: | ||
| 869 | return (SSL3_AD_BAD_CERTIFICATE); | ||
| 870 | case SSL_AD_ACCESS_DENIED: | ||
| 871 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
| 872 | case SSL_AD_DECODE_ERROR: | ||
| 873 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
| 874 | case SSL_AD_DECRYPT_ERROR: | ||
| 875 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
| 876 | case SSL_AD_EXPORT_RESTRICTION: | ||
| 877 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
| 878 | case SSL_AD_PROTOCOL_VERSION: | ||
| 879 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
| 880 | case SSL_AD_INSUFFICIENT_SECURITY: | ||
| 881 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
| 882 | case SSL_AD_INTERNAL_ERROR: | ||
| 883 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
| 884 | case SSL_AD_USER_CANCELLED: | ||
| 885 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
| 888 | case SSL_AD_NO_RENEGOTIATION: return(-1); /* Don't send it :-) */ | 886 | case SSL_AD_NO_RENEGOTIATION: return(-1); /* Don't send it :-) */ |
| 889 | case SSL_AD_UNSUPPORTED_EXTENSION: return(SSL3_AD_HANDSHAKE_FAILURE); | 887 | case SSL_AD_UNSUPPORTED_EXTENSION: |
| 890 | case SSL_AD_CERTIFICATE_UNOBTAINABLE: return(SSL3_AD_HANDSHAKE_FAILURE); | 888 | return (SSL3_AD_HANDSHAKE_FAILURE); |
| 891 | case SSL_AD_UNRECOGNIZED_NAME: return(SSL3_AD_HANDSHAKE_FAILURE); | 889 | case SSL_AD_CERTIFICATE_UNOBTAINABLE: |
| 892 | case SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE: return(SSL3_AD_HANDSHAKE_FAILURE); | 890 | return (SSL3_AD_HANDSHAKE_FAILURE); |
| 893 | case SSL_AD_BAD_CERTIFICATE_HASH_VALUE: return(SSL3_AD_HANDSHAKE_FAILURE); | 891 | case SSL_AD_UNRECOGNIZED_NAME: |
| 894 | case SSL_AD_UNKNOWN_PSK_IDENTITY:return(TLS1_AD_UNKNOWN_PSK_IDENTITY); | 892 | return (SSL3_AD_HANDSHAKE_FAILURE); |
| 895 | default: return(-1); | 893 | case SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE: |
| 896 | } | 894 | return (SSL3_AD_HANDSHAKE_FAILURE); |
| 895 | case SSL_AD_BAD_CERTIFICATE_HASH_VALUE: | ||
| 896 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
| 897 | case SSL_AD_UNKNOWN_PSK_IDENTITY: | ||
| 898 | return (TLS1_AD_UNKNOWN_PSK_IDENTITY); | ||
| 899 | default: | ||
| 900 | return (-1); | ||
| 897 | } | 901 | } |
| 898 | 902 | } | |
diff --git a/src/lib/libssl/src/ssl/s3_lib.c b/src/lib/libssl/src/ssl/s3_lib.c index fd1e7b80d8..926071fffa 100644 --- a/src/lib/libssl/src/ssl/s3_lib.c +++ b/src/lib/libssl/src/ssl/s3_lib.c | |||
| @@ -164,496 +164,496 @@ | |||
| 164 | 164 | ||
| 165 | const char ssl3_version_str[]="SSLv3" OPENSSL_VERSION_PTEXT; | 165 | const char ssl3_version_str[]="SSLv3" OPENSSL_VERSION_PTEXT; |
| 166 | 166 | ||
| 167 | #define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER)) | 167 | #define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers) / sizeof(SSL_CIPHER)) |
| 168 | 168 | ||
| 169 | /* list of available SSLv3 ciphers (sorted by id) */ | 169 | /* list of available SSLv3 ciphers (sorted by id) */ |
| 170 | OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | 170 | OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = { |
| 171 | 171 | ||
| 172 | /* The RSA ciphers */ | 172 | /* The RSA ciphers */ |
| 173 | /* Cipher 01 */ | 173 | /* Cipher 01 */ |
| 174 | { | 174 | { |
| 175 | 1, | 175 | 1, |
| 176 | SSL3_TXT_RSA_NULL_MD5, | 176 | SSL3_TXT_RSA_NULL_MD5, |
| 177 | SSL3_CK_RSA_NULL_MD5, | 177 | SSL3_CK_RSA_NULL_MD5, |
| 178 | SSL_kRSA, | 178 | SSL_kRSA, |
| 179 | SSL_aRSA, | 179 | SSL_aRSA, |
| 180 | SSL_eNULL, | 180 | SSL_eNULL, |
| 181 | SSL_MD5, | 181 | SSL_MD5, |
| 182 | SSL_SSLV3, | 182 | SSL_SSLV3, |
| 183 | SSL_NOT_EXP|SSL_STRONG_NONE, | 183 | SSL_NOT_EXP|SSL_STRONG_NONE, |
| 184 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 184 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 185 | 0, | 185 | 0, |
| 186 | 0, | 186 | 0, |
| 187 | }, | 187 | }, |
| 188 | 188 | ||
| 189 | /* Cipher 02 */ | 189 | /* Cipher 02 */ |
| 190 | { | 190 | { |
| 191 | 1, | 191 | 1, |
| 192 | SSL3_TXT_RSA_NULL_SHA, | 192 | SSL3_TXT_RSA_NULL_SHA, |
| 193 | SSL3_CK_RSA_NULL_SHA, | 193 | SSL3_CK_RSA_NULL_SHA, |
| 194 | SSL_kRSA, | 194 | SSL_kRSA, |
| 195 | SSL_aRSA, | 195 | SSL_aRSA, |
| 196 | SSL_eNULL, | 196 | SSL_eNULL, |
| 197 | SSL_SHA1, | 197 | SSL_SHA1, |
| 198 | SSL_SSLV3, | 198 | SSL_SSLV3, |
| 199 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 199 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
| 200 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 200 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 201 | 0, | 201 | 0, |
| 202 | 0, | 202 | 0, |
| 203 | }, | 203 | }, |
| 204 | 204 | ||
| 205 | /* Cipher 03 */ | 205 | /* Cipher 03 */ |
| 206 | { | 206 | { |
| 207 | 1, | 207 | 1, |
| 208 | SSL3_TXT_RSA_RC4_40_MD5, | 208 | SSL3_TXT_RSA_RC4_40_MD5, |
| 209 | SSL3_CK_RSA_RC4_40_MD5, | 209 | SSL3_CK_RSA_RC4_40_MD5, |
| 210 | SSL_kRSA, | 210 | SSL_kRSA, |
| 211 | SSL_aRSA, | 211 | SSL_aRSA, |
| 212 | SSL_RC4, | 212 | SSL_RC4, |
| 213 | SSL_MD5, | 213 | SSL_MD5, |
| 214 | SSL_SSLV3, | 214 | SSL_SSLV3, |
| 215 | SSL_EXPORT|SSL_EXP40, | 215 | SSL_EXPORT|SSL_EXP40, |
| 216 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 216 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 217 | 40, | 217 | 40, |
| 218 | 128, | 218 | 128, |
| 219 | }, | 219 | }, |
| 220 | 220 | ||
| 221 | /* Cipher 04 */ | 221 | /* Cipher 04 */ |
| 222 | { | 222 | { |
| 223 | 1, | 223 | 1, |
| 224 | SSL3_TXT_RSA_RC4_128_MD5, | 224 | SSL3_TXT_RSA_RC4_128_MD5, |
| 225 | SSL3_CK_RSA_RC4_128_MD5, | 225 | SSL3_CK_RSA_RC4_128_MD5, |
| 226 | SSL_kRSA, | 226 | SSL_kRSA, |
| 227 | SSL_aRSA, | 227 | SSL_aRSA, |
| 228 | SSL_RC4, | 228 | SSL_RC4, |
| 229 | SSL_MD5, | 229 | SSL_MD5, |
| 230 | SSL_SSLV3, | 230 | SSL_SSLV3, |
| 231 | SSL_NOT_EXP|SSL_MEDIUM, | 231 | SSL_NOT_EXP|SSL_MEDIUM, |
| 232 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 232 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 233 | 128, | 233 | 128, |
| 234 | 128, | 234 | 128, |
| 235 | }, | 235 | }, |
| 236 | 236 | ||
| 237 | /* Cipher 05 */ | 237 | /* Cipher 05 */ |
| 238 | { | 238 | { |
| 239 | 1, | 239 | 1, |
| 240 | SSL3_TXT_RSA_RC4_128_SHA, | 240 | SSL3_TXT_RSA_RC4_128_SHA, |
| 241 | SSL3_CK_RSA_RC4_128_SHA, | 241 | SSL3_CK_RSA_RC4_128_SHA, |
| 242 | SSL_kRSA, | 242 | SSL_kRSA, |
| 243 | SSL_aRSA, | 243 | SSL_aRSA, |
| 244 | SSL_RC4, | 244 | SSL_RC4, |
| 245 | SSL_SHA1, | 245 | SSL_SHA1, |
| 246 | SSL_SSLV3, | 246 | SSL_SSLV3, |
| 247 | SSL_NOT_EXP|SSL_MEDIUM, | 247 | SSL_NOT_EXP|SSL_MEDIUM, |
| 248 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 248 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 249 | 128, | 249 | 128, |
| 250 | 128, | 250 | 128, |
| 251 | }, | 251 | }, |
| 252 | 252 | ||
| 253 | /* Cipher 06 */ | 253 | /* Cipher 06 */ |
| 254 | { | 254 | { |
| 255 | 1, | 255 | 1, |
| 256 | SSL3_TXT_RSA_RC2_40_MD5, | 256 | SSL3_TXT_RSA_RC2_40_MD5, |
| 257 | SSL3_CK_RSA_RC2_40_MD5, | 257 | SSL3_CK_RSA_RC2_40_MD5, |
| 258 | SSL_kRSA, | 258 | SSL_kRSA, |
| 259 | SSL_aRSA, | 259 | SSL_aRSA, |
| 260 | SSL_RC2, | 260 | SSL_RC2, |
| 261 | SSL_MD5, | 261 | SSL_MD5, |
| 262 | SSL_SSLV3, | 262 | SSL_SSLV3, |
| 263 | SSL_EXPORT|SSL_EXP40, | 263 | SSL_EXPORT|SSL_EXP40, |
| 264 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 264 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 265 | 40, | 265 | 40, |
| 266 | 128, | 266 | 128, |
| 267 | }, | 267 | }, |
| 268 | 268 | ||
| 269 | /* Cipher 07 */ | 269 | /* Cipher 07 */ |
| 270 | #ifndef OPENSSL_NO_IDEA | 270 | #ifndef OPENSSL_NO_IDEA |
| 271 | { | 271 | { |
| 272 | 1, | 272 | 1, |
| 273 | SSL3_TXT_RSA_IDEA_128_SHA, | 273 | SSL3_TXT_RSA_IDEA_128_SHA, |
| 274 | SSL3_CK_RSA_IDEA_128_SHA, | 274 | SSL3_CK_RSA_IDEA_128_SHA, |
| 275 | SSL_kRSA, | 275 | SSL_kRSA, |
| 276 | SSL_aRSA, | 276 | SSL_aRSA, |
| 277 | SSL_IDEA, | 277 | SSL_IDEA, |
| 278 | SSL_SHA1, | 278 | SSL_SHA1, |
| 279 | SSL_SSLV3, | 279 | SSL_SSLV3, |
| 280 | SSL_NOT_EXP|SSL_MEDIUM, | 280 | SSL_NOT_EXP|SSL_MEDIUM, |
| 281 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 281 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 282 | 128, | 282 | 128, |
| 283 | 128, | 283 | 128, |
| 284 | }, | 284 | }, |
| 285 | #endif | 285 | #endif |
| 286 | 286 | ||
| 287 | /* Cipher 08 */ | 287 | /* Cipher 08 */ |
| 288 | { | 288 | { |
| 289 | 1, | 289 | 1, |
| 290 | SSL3_TXT_RSA_DES_40_CBC_SHA, | 290 | SSL3_TXT_RSA_DES_40_CBC_SHA, |
| 291 | SSL3_CK_RSA_DES_40_CBC_SHA, | 291 | SSL3_CK_RSA_DES_40_CBC_SHA, |
| 292 | SSL_kRSA, | 292 | SSL_kRSA, |
| 293 | SSL_aRSA, | 293 | SSL_aRSA, |
| 294 | SSL_DES, | 294 | SSL_DES, |
| 295 | SSL_SHA1, | 295 | SSL_SHA1, |
| 296 | SSL_SSLV3, | 296 | SSL_SSLV3, |
| 297 | SSL_EXPORT|SSL_EXP40, | 297 | SSL_EXPORT|SSL_EXP40, |
| 298 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 298 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 299 | 40, | 299 | 40, |
| 300 | 56, | 300 | 56, |
| 301 | }, | 301 | }, |
| 302 | 302 | ||
| 303 | /* Cipher 09 */ | 303 | /* Cipher 09 */ |
| 304 | { | 304 | { |
| 305 | 1, | 305 | 1, |
| 306 | SSL3_TXT_RSA_DES_64_CBC_SHA, | 306 | SSL3_TXT_RSA_DES_64_CBC_SHA, |
| 307 | SSL3_CK_RSA_DES_64_CBC_SHA, | 307 | SSL3_CK_RSA_DES_64_CBC_SHA, |
| 308 | SSL_kRSA, | 308 | SSL_kRSA, |
| 309 | SSL_aRSA, | 309 | SSL_aRSA, |
| 310 | SSL_DES, | 310 | SSL_DES, |
| 311 | SSL_SHA1, | 311 | SSL_SHA1, |
| 312 | SSL_SSLV3, | 312 | SSL_SSLV3, |
| 313 | SSL_NOT_EXP|SSL_LOW, | 313 | SSL_NOT_EXP|SSL_LOW, |
| 314 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 314 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 315 | 56, | 315 | 56, |
| 316 | 56, | 316 | 56, |
| 317 | }, | 317 | }, |
| 318 | 318 | ||
| 319 | /* Cipher 0A */ | 319 | /* Cipher 0A */ |
| 320 | { | 320 | { |
| 321 | 1, | 321 | 1, |
| 322 | SSL3_TXT_RSA_DES_192_CBC3_SHA, | 322 | SSL3_TXT_RSA_DES_192_CBC3_SHA, |
| 323 | SSL3_CK_RSA_DES_192_CBC3_SHA, | 323 | SSL3_CK_RSA_DES_192_CBC3_SHA, |
| 324 | SSL_kRSA, | 324 | SSL_kRSA, |
| 325 | SSL_aRSA, | 325 | SSL_aRSA, |
| 326 | SSL_3DES, | 326 | SSL_3DES, |
| 327 | SSL_SHA1, | 327 | SSL_SHA1, |
| 328 | SSL_SSLV3, | 328 | SSL_SSLV3, |
| 329 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 329 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 330 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 330 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 331 | 168, | 331 | 168, |
| 332 | 168, | 332 | 168, |
| 333 | }, | 333 | }, |
| 334 | 334 | ||
| 335 | /* The DH ciphers */ | 335 | /* The DH ciphers */ |
| 336 | /* Cipher 0B */ | 336 | /* Cipher 0B */ |
| 337 | { | 337 | { |
| 338 | 0, | 338 | 0, |
| 339 | SSL3_TXT_DH_DSS_DES_40_CBC_SHA, | 339 | SSL3_TXT_DH_DSS_DES_40_CBC_SHA, |
| 340 | SSL3_CK_DH_DSS_DES_40_CBC_SHA, | 340 | SSL3_CK_DH_DSS_DES_40_CBC_SHA, |
| 341 | SSL_kDHd, | 341 | SSL_kDHd, |
| 342 | SSL_aDH, | 342 | SSL_aDH, |
| 343 | SSL_DES, | 343 | SSL_DES, |
| 344 | SSL_SHA1, | 344 | SSL_SHA1, |
| 345 | SSL_SSLV3, | 345 | SSL_SSLV3, |
| 346 | SSL_EXPORT|SSL_EXP40, | 346 | SSL_EXPORT|SSL_EXP40, |
| 347 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 347 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 348 | 40, | 348 | 40, |
| 349 | 56, | 349 | 56, |
| 350 | }, | 350 | }, |
| 351 | 351 | ||
| 352 | /* Cipher 0C */ | 352 | /* Cipher 0C */ |
| 353 | { | 353 | { |
| 354 | 0, /* not implemented (non-ephemeral DH) */ | 354 | 0, /* not implemented (non-ephemeral DH) */ |
| 355 | SSL3_TXT_DH_DSS_DES_64_CBC_SHA, | 355 | SSL3_TXT_DH_DSS_DES_64_CBC_SHA, |
| 356 | SSL3_CK_DH_DSS_DES_64_CBC_SHA, | 356 | SSL3_CK_DH_DSS_DES_64_CBC_SHA, |
| 357 | SSL_kDHd, | 357 | SSL_kDHd, |
| 358 | SSL_aDH, | 358 | SSL_aDH, |
| 359 | SSL_DES, | 359 | SSL_DES, |
| 360 | SSL_SHA1, | 360 | SSL_SHA1, |
| 361 | SSL_SSLV3, | 361 | SSL_SSLV3, |
| 362 | SSL_NOT_EXP|SSL_LOW, | 362 | SSL_NOT_EXP|SSL_LOW, |
| 363 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 363 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 364 | 56, | 364 | 56, |
| 365 | 56, | 365 | 56, |
| 366 | }, | 366 | }, |
| 367 | 367 | ||
| 368 | /* Cipher 0D */ | 368 | /* Cipher 0D */ |
| 369 | { | 369 | { |
| 370 | 0, /* not implemented (non-ephemeral DH) */ | 370 | 0, /* not implemented (non-ephemeral DH) */ |
| 371 | SSL3_TXT_DH_DSS_DES_192_CBC3_SHA, | 371 | SSL3_TXT_DH_DSS_DES_192_CBC3_SHA, |
| 372 | SSL3_CK_DH_DSS_DES_192_CBC3_SHA, | 372 | SSL3_CK_DH_DSS_DES_192_CBC3_SHA, |
| 373 | SSL_kDHd, | 373 | SSL_kDHd, |
| 374 | SSL_aDH, | 374 | SSL_aDH, |
| 375 | SSL_3DES, | 375 | SSL_3DES, |
| 376 | SSL_SHA1, | 376 | SSL_SHA1, |
| 377 | SSL_SSLV3, | 377 | SSL_SSLV3, |
| 378 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 378 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 379 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 379 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 380 | 168, | 380 | 168, |
| 381 | 168, | 381 | 168, |
| 382 | }, | 382 | }, |
| 383 | 383 | ||
| 384 | /* Cipher 0E */ | 384 | /* Cipher 0E */ |
| 385 | { | 385 | { |
| 386 | 0, /* not implemented (non-ephemeral DH) */ | 386 | 0, /* not implemented (non-ephemeral DH) */ |
| 387 | SSL3_TXT_DH_RSA_DES_40_CBC_SHA, | 387 | SSL3_TXT_DH_RSA_DES_40_CBC_SHA, |
| 388 | SSL3_CK_DH_RSA_DES_40_CBC_SHA, | 388 | SSL3_CK_DH_RSA_DES_40_CBC_SHA, |
| 389 | SSL_kDHr, | 389 | SSL_kDHr, |
| 390 | SSL_aDH, | 390 | SSL_aDH, |
| 391 | SSL_DES, | 391 | SSL_DES, |
| 392 | SSL_SHA1, | 392 | SSL_SHA1, |
| 393 | SSL_SSLV3, | 393 | SSL_SSLV3, |
| 394 | SSL_EXPORT|SSL_EXP40, | 394 | SSL_EXPORT|SSL_EXP40, |
| 395 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 395 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 396 | 40, | 396 | 40, |
| 397 | 56, | 397 | 56, |
| 398 | }, | 398 | }, |
| 399 | 399 | ||
| 400 | /* Cipher 0F */ | 400 | /* Cipher 0F */ |
| 401 | { | 401 | { |
| 402 | 0, /* not implemented (non-ephemeral DH) */ | 402 | 0, /* not implemented (non-ephemeral DH) */ |
| 403 | SSL3_TXT_DH_RSA_DES_64_CBC_SHA, | 403 | SSL3_TXT_DH_RSA_DES_64_CBC_SHA, |
| 404 | SSL3_CK_DH_RSA_DES_64_CBC_SHA, | 404 | SSL3_CK_DH_RSA_DES_64_CBC_SHA, |
| 405 | SSL_kDHr, | 405 | SSL_kDHr, |
| 406 | SSL_aDH, | 406 | SSL_aDH, |
| 407 | SSL_DES, | 407 | SSL_DES, |
| 408 | SSL_SHA1, | 408 | SSL_SHA1, |
| 409 | SSL_SSLV3, | 409 | SSL_SSLV3, |
| 410 | SSL_NOT_EXP|SSL_LOW, | 410 | SSL_NOT_EXP|SSL_LOW, |
| 411 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 411 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 412 | 56, | 412 | 56, |
| 413 | 56, | 413 | 56, |
| 414 | }, | 414 | }, |
| 415 | 415 | ||
| 416 | /* Cipher 10 */ | 416 | /* Cipher 10 */ |
| 417 | { | 417 | { |
| 418 | 0, /* not implemented (non-ephemeral DH) */ | 418 | 0, /* not implemented (non-ephemeral DH) */ |
| 419 | SSL3_TXT_DH_RSA_DES_192_CBC3_SHA, | 419 | SSL3_TXT_DH_RSA_DES_192_CBC3_SHA, |
| 420 | SSL3_CK_DH_RSA_DES_192_CBC3_SHA, | 420 | SSL3_CK_DH_RSA_DES_192_CBC3_SHA, |
| 421 | SSL_kDHr, | 421 | SSL_kDHr, |
| 422 | SSL_aDH, | 422 | SSL_aDH, |
| 423 | SSL_3DES, | 423 | SSL_3DES, |
| 424 | SSL_SHA1, | 424 | SSL_SHA1, |
| 425 | SSL_SSLV3, | 425 | SSL_SSLV3, |
| 426 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 426 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 427 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 427 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 428 | 168, | 428 | 168, |
| 429 | 168, | 429 | 168, |
| 430 | }, | 430 | }, |
| 431 | 431 | ||
| 432 | /* The Ephemeral DH ciphers */ | 432 | /* The Ephemeral DH ciphers */ |
| 433 | /* Cipher 11 */ | 433 | /* Cipher 11 */ |
| 434 | { | 434 | { |
| 435 | 1, | 435 | 1, |
| 436 | SSL3_TXT_EDH_DSS_DES_40_CBC_SHA, | 436 | SSL3_TXT_EDH_DSS_DES_40_CBC_SHA, |
| 437 | SSL3_CK_EDH_DSS_DES_40_CBC_SHA, | 437 | SSL3_CK_EDH_DSS_DES_40_CBC_SHA, |
| 438 | SSL_kEDH, | 438 | SSL_kEDH, |
| 439 | SSL_aDSS, | 439 | SSL_aDSS, |
| 440 | SSL_DES, | 440 | SSL_DES, |
| 441 | SSL_SHA1, | 441 | SSL_SHA1, |
| 442 | SSL_SSLV3, | 442 | SSL_SSLV3, |
| 443 | SSL_EXPORT|SSL_EXP40, | 443 | SSL_EXPORT|SSL_EXP40, |
| 444 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 444 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 445 | 40, | 445 | 40, |
| 446 | 56, | 446 | 56, |
| 447 | }, | 447 | }, |
| 448 | 448 | ||
| 449 | /* Cipher 12 */ | 449 | /* Cipher 12 */ |
| 450 | { | 450 | { |
| 451 | 1, | 451 | 1, |
| 452 | SSL3_TXT_EDH_DSS_DES_64_CBC_SHA, | 452 | SSL3_TXT_EDH_DSS_DES_64_CBC_SHA, |
| 453 | SSL3_CK_EDH_DSS_DES_64_CBC_SHA, | 453 | SSL3_CK_EDH_DSS_DES_64_CBC_SHA, |
| 454 | SSL_kEDH, | 454 | SSL_kEDH, |
| 455 | SSL_aDSS, | 455 | SSL_aDSS, |
| 456 | SSL_DES, | 456 | SSL_DES, |
| 457 | SSL_SHA1, | 457 | SSL_SHA1, |
| 458 | SSL_SSLV3, | 458 | SSL_SSLV3, |
| 459 | SSL_NOT_EXP|SSL_LOW, | 459 | SSL_NOT_EXP|SSL_LOW, |
| 460 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 460 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 461 | 56, | 461 | 56, |
| 462 | 56, | 462 | 56, |
| 463 | }, | 463 | }, |
| 464 | 464 | ||
| 465 | /* Cipher 13 */ | 465 | /* Cipher 13 */ |
| 466 | { | 466 | { |
| 467 | 1, | 467 | 1, |
| 468 | SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA, | 468 | SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA, |
| 469 | SSL3_CK_EDH_DSS_DES_192_CBC3_SHA, | 469 | SSL3_CK_EDH_DSS_DES_192_CBC3_SHA, |
| 470 | SSL_kEDH, | 470 | SSL_kEDH, |
| 471 | SSL_aDSS, | 471 | SSL_aDSS, |
| 472 | SSL_3DES, | 472 | SSL_3DES, |
| 473 | SSL_SHA1, | 473 | SSL_SHA1, |
| 474 | SSL_SSLV3, | 474 | SSL_SSLV3, |
| 475 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 475 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 476 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 476 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 477 | 168, | 477 | 168, |
| 478 | 168, | 478 | 168, |
| 479 | }, | 479 | }, |
| 480 | 480 | ||
| 481 | /* Cipher 14 */ | 481 | /* Cipher 14 */ |
| 482 | { | 482 | { |
| 483 | 1, | 483 | 1, |
| 484 | SSL3_TXT_EDH_RSA_DES_40_CBC_SHA, | 484 | SSL3_TXT_EDH_RSA_DES_40_CBC_SHA, |
| 485 | SSL3_CK_EDH_RSA_DES_40_CBC_SHA, | 485 | SSL3_CK_EDH_RSA_DES_40_CBC_SHA, |
| 486 | SSL_kEDH, | 486 | SSL_kEDH, |
| 487 | SSL_aRSA, | 487 | SSL_aRSA, |
| 488 | SSL_DES, | 488 | SSL_DES, |
| 489 | SSL_SHA1, | 489 | SSL_SHA1, |
| 490 | SSL_SSLV3, | 490 | SSL_SSLV3, |
| 491 | SSL_EXPORT|SSL_EXP40, | 491 | SSL_EXPORT|SSL_EXP40, |
| 492 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 492 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 493 | 40, | 493 | 40, |
| 494 | 56, | 494 | 56, |
| 495 | }, | 495 | }, |
| 496 | 496 | ||
| 497 | /* Cipher 15 */ | 497 | /* Cipher 15 */ |
| 498 | { | 498 | { |
| 499 | 1, | 499 | 1, |
| 500 | SSL3_TXT_EDH_RSA_DES_64_CBC_SHA, | 500 | SSL3_TXT_EDH_RSA_DES_64_CBC_SHA, |
| 501 | SSL3_CK_EDH_RSA_DES_64_CBC_SHA, | 501 | SSL3_CK_EDH_RSA_DES_64_CBC_SHA, |
| 502 | SSL_kEDH, | 502 | SSL_kEDH, |
| 503 | SSL_aRSA, | 503 | SSL_aRSA, |
| 504 | SSL_DES, | 504 | SSL_DES, |
| 505 | SSL_SHA1, | 505 | SSL_SHA1, |
| 506 | SSL_SSLV3, | 506 | SSL_SSLV3, |
| 507 | SSL_NOT_EXP|SSL_LOW, | 507 | SSL_NOT_EXP|SSL_LOW, |
| 508 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 508 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 509 | 56, | 509 | 56, |
| 510 | 56, | 510 | 56, |
| 511 | }, | 511 | }, |
| 512 | 512 | ||
| 513 | /* Cipher 16 */ | 513 | /* Cipher 16 */ |
| 514 | { | 514 | { |
| 515 | 1, | 515 | 1, |
| 516 | SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA, | 516 | SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA, |
| 517 | SSL3_CK_EDH_RSA_DES_192_CBC3_SHA, | 517 | SSL3_CK_EDH_RSA_DES_192_CBC3_SHA, |
| 518 | SSL_kEDH, | 518 | SSL_kEDH, |
| 519 | SSL_aRSA, | 519 | SSL_aRSA, |
| 520 | SSL_3DES, | 520 | SSL_3DES, |
| 521 | SSL_SHA1, | 521 | SSL_SHA1, |
| 522 | SSL_SSLV3, | 522 | SSL_SSLV3, |
| 523 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 523 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 524 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 524 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 525 | 168, | 525 | 168, |
| 526 | 168, | 526 | 168, |
| 527 | }, | 527 | }, |
| 528 | 528 | ||
| 529 | /* Cipher 17 */ | 529 | /* Cipher 17 */ |
| 530 | { | 530 | { |
| 531 | 1, | 531 | 1, |
| 532 | SSL3_TXT_ADH_RC4_40_MD5, | 532 | SSL3_TXT_ADH_RC4_40_MD5, |
| 533 | SSL3_CK_ADH_RC4_40_MD5, | 533 | SSL3_CK_ADH_RC4_40_MD5, |
| 534 | SSL_kEDH, | 534 | SSL_kEDH, |
| 535 | SSL_aNULL, | 535 | SSL_aNULL, |
| 536 | SSL_RC4, | 536 | SSL_RC4, |
| 537 | SSL_MD5, | 537 | SSL_MD5, |
| 538 | SSL_SSLV3, | 538 | SSL_SSLV3, |
| 539 | SSL_EXPORT|SSL_EXP40, | 539 | SSL_EXPORT|SSL_EXP40, |
| 540 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 540 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 541 | 40, | 541 | 40, |
| 542 | 128, | 542 | 128, |
| 543 | }, | 543 | }, |
| 544 | 544 | ||
| 545 | /* Cipher 18 */ | 545 | /* Cipher 18 */ |
| 546 | { | 546 | { |
| 547 | 1, | 547 | 1, |
| 548 | SSL3_TXT_ADH_RC4_128_MD5, | 548 | SSL3_TXT_ADH_RC4_128_MD5, |
| 549 | SSL3_CK_ADH_RC4_128_MD5, | 549 | SSL3_CK_ADH_RC4_128_MD5, |
| 550 | SSL_kEDH, | 550 | SSL_kEDH, |
| 551 | SSL_aNULL, | 551 | SSL_aNULL, |
| 552 | SSL_RC4, | 552 | SSL_RC4, |
| 553 | SSL_MD5, | 553 | SSL_MD5, |
| 554 | SSL_SSLV3, | 554 | SSL_SSLV3, |
| 555 | SSL_NOT_EXP|SSL_MEDIUM, | 555 | SSL_NOT_EXP|SSL_MEDIUM, |
| 556 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 556 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 557 | 128, | 557 | 128, |
| 558 | 128, | 558 | 128, |
| 559 | }, | 559 | }, |
| 560 | 560 | ||
| 561 | /* Cipher 19 */ | 561 | /* Cipher 19 */ |
| 562 | { | 562 | { |
| 563 | 1, | 563 | 1, |
| 564 | SSL3_TXT_ADH_DES_40_CBC_SHA, | 564 | SSL3_TXT_ADH_DES_40_CBC_SHA, |
| 565 | SSL3_CK_ADH_DES_40_CBC_SHA, | 565 | SSL3_CK_ADH_DES_40_CBC_SHA, |
| 566 | SSL_kEDH, | 566 | SSL_kEDH, |
| 567 | SSL_aNULL, | 567 | SSL_aNULL, |
| 568 | SSL_DES, | 568 | SSL_DES, |
| 569 | SSL_SHA1, | 569 | SSL_SHA1, |
| 570 | SSL_SSLV3, | 570 | SSL_SSLV3, |
| 571 | SSL_EXPORT|SSL_EXP40, | 571 | SSL_EXPORT|SSL_EXP40, |
| 572 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 572 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 573 | 40, | 573 | 40, |
| 574 | 128, | 574 | 128, |
| 575 | }, | 575 | }, |
| 576 | 576 | ||
| 577 | /* Cipher 1A */ | 577 | /* Cipher 1A */ |
| 578 | { | 578 | { |
| 579 | 1, | 579 | 1, |
| 580 | SSL3_TXT_ADH_DES_64_CBC_SHA, | 580 | SSL3_TXT_ADH_DES_64_CBC_SHA, |
| 581 | SSL3_CK_ADH_DES_64_CBC_SHA, | 581 | SSL3_CK_ADH_DES_64_CBC_SHA, |
| 582 | SSL_kEDH, | 582 | SSL_kEDH, |
| 583 | SSL_aNULL, | 583 | SSL_aNULL, |
| 584 | SSL_DES, | 584 | SSL_DES, |
| 585 | SSL_SHA1, | 585 | SSL_SHA1, |
| 586 | SSL_SSLV3, | 586 | SSL_SSLV3, |
| 587 | SSL_NOT_EXP|SSL_LOW, | 587 | SSL_NOT_EXP|SSL_LOW, |
| 588 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 588 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 589 | 56, | 589 | 56, |
| 590 | 56, | 590 | 56, |
| 591 | }, | 591 | }, |
| 592 | 592 | ||
| 593 | /* Cipher 1B */ | 593 | /* Cipher 1B */ |
| 594 | { | 594 | { |
| 595 | 1, | 595 | 1, |
| 596 | SSL3_TXT_ADH_DES_192_CBC_SHA, | 596 | SSL3_TXT_ADH_DES_192_CBC_SHA, |
| 597 | SSL3_CK_ADH_DES_192_CBC_SHA, | 597 | SSL3_CK_ADH_DES_192_CBC_SHA, |
| 598 | SSL_kEDH, | 598 | SSL_kEDH, |
| 599 | SSL_aNULL, | 599 | SSL_aNULL, |
| 600 | SSL_3DES, | 600 | SSL_3DES, |
| 601 | SSL_SHA1, | 601 | SSL_SHA1, |
| 602 | SSL_SSLV3, | 602 | SSL_SSLV3, |
| 603 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 603 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 604 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 604 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 605 | 168, | 605 | 168, |
| 606 | 168, | 606 | 168, |
| 607 | }, | 607 | }, |
| 608 | 608 | ||
| 609 | /* Fortezza ciphersuite from SSL 3.0 spec */ | 609 | /* Fortezza ciphersuite from SSL 3.0 spec */ |
| 610 | #if 0 | 610 | #if 0 |
| 611 | /* Cipher 1C */ | 611 | /* Cipher 1C */ |
| 612 | { | 612 | { |
| 613 | 0, | 613 | 0, |
| 614 | SSL3_TXT_FZA_DMS_NULL_SHA, | 614 | SSL3_TXT_FZA_DMS_NULL_SHA, |
| 615 | SSL3_CK_FZA_DMS_NULL_SHA, | 615 | SSL3_CK_FZA_DMS_NULL_SHA, |
| 616 | SSL_kFZA, | 616 | SSL_kFZA, |
| 617 | SSL_aFZA, | 617 | SSL_aFZA, |
| 618 | SSL_eNULL, | 618 | SSL_eNULL, |
| 619 | SSL_SHA1, | 619 | SSL_SHA1, |
| 620 | SSL_SSLV3, | 620 | SSL_SSLV3, |
| 621 | SSL_NOT_EXP|SSL_STRONG_NONE, | 621 | SSL_NOT_EXP|SSL_STRONG_NONE, |
| 622 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 622 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 623 | 0, | 623 | 0, |
| 624 | 0, | 624 | 0, |
| 625 | }, | 625 | }, |
| 626 | 626 | ||
| 627 | /* Cipher 1D */ | 627 | /* Cipher 1D */ |
| 628 | { | 628 | { |
| 629 | 0, | 629 | 0, |
| 630 | SSL3_TXT_FZA_DMS_FZA_SHA, | 630 | SSL3_TXT_FZA_DMS_FZA_SHA, |
| 631 | SSL3_CK_FZA_DMS_FZA_SHA, | 631 | SSL3_CK_FZA_DMS_FZA_SHA, |
| 632 | SSL_kFZA, | 632 | SSL_kFZA, |
| 633 | SSL_aFZA, | 633 | SSL_aFZA, |
| 634 | SSL_eFZA, | 634 | SSL_eFZA, |
| 635 | SSL_SHA1, | 635 | SSL_SHA1, |
| 636 | SSL_SSLV3, | 636 | SSL_SSLV3, |
| 637 | SSL_NOT_EXP|SSL_STRONG_NONE, | 637 | SSL_NOT_EXP|SSL_STRONG_NONE, |
| 638 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 638 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 639 | 0, | 639 | 0, |
| 640 | 0, | 640 | 0, |
| 641 | }, | 641 | }, |
| 642 | 642 | ||
| 643 | /* Cipher 1E */ | 643 | /* Cipher 1E */ |
| 644 | { | 644 | { |
| 645 | 0, | 645 | 0, |
| 646 | SSL3_TXT_FZA_DMS_RC4_SHA, | 646 | SSL3_TXT_FZA_DMS_RC4_SHA, |
| 647 | SSL3_CK_FZA_DMS_RC4_SHA, | 647 | SSL3_CK_FZA_DMS_RC4_SHA, |
| 648 | SSL_kFZA, | 648 | SSL_kFZA, |
| 649 | SSL_aFZA, | 649 | SSL_aFZA, |
| 650 | SSL_RC4, | 650 | SSL_RC4, |
| 651 | SSL_SHA1, | 651 | SSL_SHA1, |
| 652 | SSL_SSLV3, | 652 | SSL_SSLV3, |
| 653 | SSL_NOT_EXP|SSL_MEDIUM, | 653 | SSL_NOT_EXP|SSL_MEDIUM, |
| 654 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 654 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 655 | 128, | 655 | 128, |
| 656 | 128, | 656 | 128, |
| 657 | }, | 657 | }, |
| 658 | #endif | 658 | #endif |
| 659 | 659 | ||
| @@ -661,511 +661,511 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
| 661 | /* The Kerberos ciphers*/ | 661 | /* The Kerberos ciphers*/ |
| 662 | /* Cipher 1E */ | 662 | /* Cipher 1E */ |
| 663 | { | 663 | { |
| 664 | 1, | 664 | 1, |
| 665 | SSL3_TXT_KRB5_DES_64_CBC_SHA, | 665 | SSL3_TXT_KRB5_DES_64_CBC_SHA, |
| 666 | SSL3_CK_KRB5_DES_64_CBC_SHA, | 666 | SSL3_CK_KRB5_DES_64_CBC_SHA, |
| 667 | SSL_kKRB5, | 667 | SSL_kKRB5, |
| 668 | SSL_aKRB5, | 668 | SSL_aKRB5, |
| 669 | SSL_DES, | 669 | SSL_DES, |
| 670 | SSL_SHA1, | 670 | SSL_SHA1, |
| 671 | SSL_SSLV3, | 671 | SSL_SSLV3, |
| 672 | SSL_NOT_EXP|SSL_LOW, | 672 | SSL_NOT_EXP|SSL_LOW, |
| 673 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 673 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 674 | 56, | 674 | 56, |
| 675 | 56, | 675 | 56, |
| 676 | }, | 676 | }, |
| 677 | 677 | ||
| 678 | /* Cipher 1F */ | 678 | /* Cipher 1F */ |
| 679 | { | 679 | { |
| 680 | 1, | 680 | 1, |
| 681 | SSL3_TXT_KRB5_DES_192_CBC3_SHA, | 681 | SSL3_TXT_KRB5_DES_192_CBC3_SHA, |
| 682 | SSL3_CK_KRB5_DES_192_CBC3_SHA, | 682 | SSL3_CK_KRB5_DES_192_CBC3_SHA, |
| 683 | SSL_kKRB5, | 683 | SSL_kKRB5, |
| 684 | SSL_aKRB5, | 684 | SSL_aKRB5, |
| 685 | SSL_3DES, | 685 | SSL_3DES, |
| 686 | SSL_SHA1, | 686 | SSL_SHA1, |
| 687 | SSL_SSLV3, | 687 | SSL_SSLV3, |
| 688 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 688 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 689 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 689 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 690 | 168, | 690 | 168, |
| 691 | 168, | 691 | 168, |
| 692 | }, | 692 | }, |
| 693 | 693 | ||
| 694 | /* Cipher 20 */ | 694 | /* Cipher 20 */ |
| 695 | { | 695 | { |
| 696 | 1, | 696 | 1, |
| 697 | SSL3_TXT_KRB5_RC4_128_SHA, | 697 | SSL3_TXT_KRB5_RC4_128_SHA, |
| 698 | SSL3_CK_KRB5_RC4_128_SHA, | 698 | SSL3_CK_KRB5_RC4_128_SHA, |
| 699 | SSL_kKRB5, | 699 | SSL_kKRB5, |
| 700 | SSL_aKRB5, | 700 | SSL_aKRB5, |
| 701 | SSL_RC4, | 701 | SSL_RC4, |
| 702 | SSL_SHA1, | 702 | SSL_SHA1, |
| 703 | SSL_SSLV3, | 703 | SSL_SSLV3, |
| 704 | SSL_NOT_EXP|SSL_MEDIUM, | 704 | SSL_NOT_EXP|SSL_MEDIUM, |
| 705 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 705 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 706 | 128, | 706 | 128, |
| 707 | 128, | 707 | 128, |
| 708 | }, | 708 | }, |
| 709 | 709 | ||
| 710 | /* Cipher 21 */ | 710 | /* Cipher 21 */ |
| 711 | { | 711 | { |
| 712 | 1, | 712 | 1, |
| 713 | SSL3_TXT_KRB5_IDEA_128_CBC_SHA, | 713 | SSL3_TXT_KRB5_IDEA_128_CBC_SHA, |
| 714 | SSL3_CK_KRB5_IDEA_128_CBC_SHA, | 714 | SSL3_CK_KRB5_IDEA_128_CBC_SHA, |
| 715 | SSL_kKRB5, | 715 | SSL_kKRB5, |
| 716 | SSL_aKRB5, | 716 | SSL_aKRB5, |
| 717 | SSL_IDEA, | 717 | SSL_IDEA, |
| 718 | SSL_SHA1, | 718 | SSL_SHA1, |
| 719 | SSL_SSLV3, | 719 | SSL_SSLV3, |
| 720 | SSL_NOT_EXP|SSL_MEDIUM, | 720 | SSL_NOT_EXP|SSL_MEDIUM, |
| 721 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 721 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 722 | 128, | 722 | 128, |
| 723 | 128, | 723 | 128, |
| 724 | }, | 724 | }, |
| 725 | 725 | ||
| 726 | /* Cipher 22 */ | 726 | /* Cipher 22 */ |
| 727 | { | 727 | { |
| 728 | 1, | 728 | 1, |
| 729 | SSL3_TXT_KRB5_DES_64_CBC_MD5, | 729 | SSL3_TXT_KRB5_DES_64_CBC_MD5, |
| 730 | SSL3_CK_KRB5_DES_64_CBC_MD5, | 730 | SSL3_CK_KRB5_DES_64_CBC_MD5, |
| 731 | SSL_kKRB5, | 731 | SSL_kKRB5, |
| 732 | SSL_aKRB5, | 732 | SSL_aKRB5, |
| 733 | SSL_DES, | 733 | SSL_DES, |
| 734 | SSL_MD5, | 734 | SSL_MD5, |
| 735 | SSL_SSLV3, | 735 | SSL_SSLV3, |
| 736 | SSL_NOT_EXP|SSL_LOW, | 736 | SSL_NOT_EXP|SSL_LOW, |
| 737 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 737 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 738 | 56, | 738 | 56, |
| 739 | 56, | 739 | 56, |
| 740 | }, | 740 | }, |
| 741 | 741 | ||
| 742 | /* Cipher 23 */ | 742 | /* Cipher 23 */ |
| 743 | { | 743 | { |
| 744 | 1, | 744 | 1, |
| 745 | SSL3_TXT_KRB5_DES_192_CBC3_MD5, | 745 | SSL3_TXT_KRB5_DES_192_CBC3_MD5, |
| 746 | SSL3_CK_KRB5_DES_192_CBC3_MD5, | 746 | SSL3_CK_KRB5_DES_192_CBC3_MD5, |
| 747 | SSL_kKRB5, | 747 | SSL_kKRB5, |
| 748 | SSL_aKRB5, | 748 | SSL_aKRB5, |
| 749 | SSL_3DES, | 749 | SSL_3DES, |
| 750 | SSL_MD5, | 750 | SSL_MD5, |
| 751 | SSL_SSLV3, | 751 | SSL_SSLV3, |
| 752 | SSL_NOT_EXP|SSL_HIGH, | 752 | SSL_NOT_EXP|SSL_HIGH, |
| 753 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 753 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 754 | 168, | 754 | 168, |
| 755 | 168, | 755 | 168, |
| 756 | }, | 756 | }, |
| 757 | 757 | ||
| 758 | /* Cipher 24 */ | 758 | /* Cipher 24 */ |
| 759 | { | 759 | { |
| 760 | 1, | 760 | 1, |
| 761 | SSL3_TXT_KRB5_RC4_128_MD5, | 761 | SSL3_TXT_KRB5_RC4_128_MD5, |
| 762 | SSL3_CK_KRB5_RC4_128_MD5, | 762 | SSL3_CK_KRB5_RC4_128_MD5, |
| 763 | SSL_kKRB5, | 763 | SSL_kKRB5, |
| 764 | SSL_aKRB5, | 764 | SSL_aKRB5, |
| 765 | SSL_RC4, | 765 | SSL_RC4, |
| 766 | SSL_MD5, | 766 | SSL_MD5, |
| 767 | SSL_SSLV3, | 767 | SSL_SSLV3, |
| 768 | SSL_NOT_EXP|SSL_MEDIUM, | 768 | SSL_NOT_EXP|SSL_MEDIUM, |
| 769 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 769 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 770 | 128, | 770 | 128, |
| 771 | 128, | 771 | 128, |
| 772 | }, | 772 | }, |
| 773 | 773 | ||
| 774 | /* Cipher 25 */ | 774 | /* Cipher 25 */ |
| 775 | { | 775 | { |
| 776 | 1, | 776 | 1, |
| 777 | SSL3_TXT_KRB5_IDEA_128_CBC_MD5, | 777 | SSL3_TXT_KRB5_IDEA_128_CBC_MD5, |
| 778 | SSL3_CK_KRB5_IDEA_128_CBC_MD5, | 778 | SSL3_CK_KRB5_IDEA_128_CBC_MD5, |
| 779 | SSL_kKRB5, | 779 | SSL_kKRB5, |
| 780 | SSL_aKRB5, | 780 | SSL_aKRB5, |
| 781 | SSL_IDEA, | 781 | SSL_IDEA, |
| 782 | SSL_MD5, | 782 | SSL_MD5, |
| 783 | SSL_SSLV3, | 783 | SSL_SSLV3, |
| 784 | SSL_NOT_EXP|SSL_MEDIUM, | 784 | SSL_NOT_EXP|SSL_MEDIUM, |
| 785 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 785 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 786 | 128, | 786 | 128, |
| 787 | 128, | 787 | 128, |
| 788 | }, | 788 | }, |
| 789 | 789 | ||
| 790 | /* Cipher 26 */ | 790 | /* Cipher 26 */ |
| 791 | { | 791 | { |
| 792 | 1, | 792 | 1, |
| 793 | SSL3_TXT_KRB5_DES_40_CBC_SHA, | 793 | SSL3_TXT_KRB5_DES_40_CBC_SHA, |
| 794 | SSL3_CK_KRB5_DES_40_CBC_SHA, | 794 | SSL3_CK_KRB5_DES_40_CBC_SHA, |
| 795 | SSL_kKRB5, | 795 | SSL_kKRB5, |
| 796 | SSL_aKRB5, | 796 | SSL_aKRB5, |
| 797 | SSL_DES, | 797 | SSL_DES, |
| 798 | SSL_SHA1, | 798 | SSL_SHA1, |
| 799 | SSL_SSLV3, | 799 | SSL_SSLV3, |
| 800 | SSL_EXPORT|SSL_EXP40, | 800 | SSL_EXPORT|SSL_EXP40, |
| 801 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 801 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 802 | 40, | 802 | 40, |
| 803 | 56, | 803 | 56, |
| 804 | }, | 804 | }, |
| 805 | 805 | ||
| 806 | /* Cipher 27 */ | 806 | /* Cipher 27 */ |
| 807 | { | 807 | { |
| 808 | 1, | 808 | 1, |
| 809 | SSL3_TXT_KRB5_RC2_40_CBC_SHA, | 809 | SSL3_TXT_KRB5_RC2_40_CBC_SHA, |
| 810 | SSL3_CK_KRB5_RC2_40_CBC_SHA, | 810 | SSL3_CK_KRB5_RC2_40_CBC_SHA, |
| 811 | SSL_kKRB5, | 811 | SSL_kKRB5, |
| 812 | SSL_aKRB5, | 812 | SSL_aKRB5, |
| 813 | SSL_RC2, | 813 | SSL_RC2, |
| 814 | SSL_SHA1, | 814 | SSL_SHA1, |
| 815 | SSL_SSLV3, | 815 | SSL_SSLV3, |
| 816 | SSL_EXPORT|SSL_EXP40, | 816 | SSL_EXPORT|SSL_EXP40, |
| 817 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 817 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 818 | 40, | 818 | 40, |
| 819 | 128, | 819 | 128, |
| 820 | }, | 820 | }, |
| 821 | 821 | ||
| 822 | /* Cipher 28 */ | 822 | /* Cipher 28 */ |
| 823 | { | 823 | { |
| 824 | 1, | 824 | 1, |
| 825 | SSL3_TXT_KRB5_RC4_40_SHA, | 825 | SSL3_TXT_KRB5_RC4_40_SHA, |
| 826 | SSL3_CK_KRB5_RC4_40_SHA, | 826 | SSL3_CK_KRB5_RC4_40_SHA, |
| 827 | SSL_kKRB5, | 827 | SSL_kKRB5, |
| 828 | SSL_aKRB5, | 828 | SSL_aKRB5, |
| 829 | SSL_RC4, | 829 | SSL_RC4, |
| 830 | SSL_SHA1, | 830 | SSL_SHA1, |
| 831 | SSL_SSLV3, | 831 | SSL_SSLV3, |
| 832 | SSL_EXPORT|SSL_EXP40, | 832 | SSL_EXPORT|SSL_EXP40, |
| 833 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 833 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 834 | 40, | 834 | 40, |
| 835 | 128, | 835 | 128, |
| 836 | }, | 836 | }, |
| 837 | 837 | ||
| 838 | /* Cipher 29 */ | 838 | /* Cipher 29 */ |
| 839 | { | 839 | { |
| 840 | 1, | 840 | 1, |
| 841 | SSL3_TXT_KRB5_DES_40_CBC_MD5, | 841 | SSL3_TXT_KRB5_DES_40_CBC_MD5, |
| 842 | SSL3_CK_KRB5_DES_40_CBC_MD5, | 842 | SSL3_CK_KRB5_DES_40_CBC_MD5, |
| 843 | SSL_kKRB5, | 843 | SSL_kKRB5, |
| 844 | SSL_aKRB5, | 844 | SSL_aKRB5, |
| 845 | SSL_DES, | 845 | SSL_DES, |
| 846 | SSL_MD5, | 846 | SSL_MD5, |
| 847 | SSL_SSLV3, | 847 | SSL_SSLV3, |
| 848 | SSL_EXPORT|SSL_EXP40, | 848 | SSL_EXPORT|SSL_EXP40, |
| 849 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 849 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 850 | 40, | 850 | 40, |
| 851 | 56, | 851 | 56, |
| 852 | }, | 852 | }, |
| 853 | 853 | ||
| 854 | /* Cipher 2A */ | 854 | /* Cipher 2A */ |
| 855 | { | 855 | { |
| 856 | 1, | 856 | 1, |
| 857 | SSL3_TXT_KRB5_RC2_40_CBC_MD5, | 857 | SSL3_TXT_KRB5_RC2_40_CBC_MD5, |
| 858 | SSL3_CK_KRB5_RC2_40_CBC_MD5, | 858 | SSL3_CK_KRB5_RC2_40_CBC_MD5, |
| 859 | SSL_kKRB5, | 859 | SSL_kKRB5, |
| 860 | SSL_aKRB5, | 860 | SSL_aKRB5, |
| 861 | SSL_RC2, | 861 | SSL_RC2, |
| 862 | SSL_MD5, | 862 | SSL_MD5, |
| 863 | SSL_SSLV3, | 863 | SSL_SSLV3, |
| 864 | SSL_EXPORT|SSL_EXP40, | 864 | SSL_EXPORT|SSL_EXP40, |
| 865 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 865 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 866 | 40, | 866 | 40, |
| 867 | 128, | 867 | 128, |
| 868 | }, | 868 | }, |
| 869 | 869 | ||
| 870 | /* Cipher 2B */ | 870 | /* Cipher 2B */ |
| 871 | { | 871 | { |
| 872 | 1, | 872 | 1, |
| 873 | SSL3_TXT_KRB5_RC4_40_MD5, | 873 | SSL3_TXT_KRB5_RC4_40_MD5, |
| 874 | SSL3_CK_KRB5_RC4_40_MD5, | 874 | SSL3_CK_KRB5_RC4_40_MD5, |
| 875 | SSL_kKRB5, | 875 | SSL_kKRB5, |
| 876 | SSL_aKRB5, | 876 | SSL_aKRB5, |
| 877 | SSL_RC4, | 877 | SSL_RC4, |
| 878 | SSL_MD5, | 878 | SSL_MD5, |
| 879 | SSL_SSLV3, | 879 | SSL_SSLV3, |
| 880 | SSL_EXPORT|SSL_EXP40, | 880 | SSL_EXPORT|SSL_EXP40, |
| 881 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 881 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 882 | 40, | 882 | 40, |
| 883 | 128, | 883 | 128, |
| 884 | }, | 884 | }, |
| 885 | #endif /* OPENSSL_NO_KRB5 */ | 885 | #endif /* OPENSSL_NO_KRB5 */ |
| 886 | 886 | ||
| 887 | /* New AES ciphersuites */ | 887 | /* New AES ciphersuites */ |
| 888 | /* Cipher 2F */ | 888 | /* Cipher 2F */ |
| 889 | { | 889 | { |
| 890 | 1, | 890 | 1, |
| 891 | TLS1_TXT_RSA_WITH_AES_128_SHA, | 891 | TLS1_TXT_RSA_WITH_AES_128_SHA, |
| 892 | TLS1_CK_RSA_WITH_AES_128_SHA, | 892 | TLS1_CK_RSA_WITH_AES_128_SHA, |
| 893 | SSL_kRSA, | 893 | SSL_kRSA, |
| 894 | SSL_aRSA, | 894 | SSL_aRSA, |
| 895 | SSL_AES128, | 895 | SSL_AES128, |
| 896 | SSL_SHA1, | 896 | SSL_SHA1, |
| 897 | SSL_TLSV1, | 897 | SSL_TLSV1, |
| 898 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 898 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 899 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 899 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 900 | 128, | 900 | 128, |
| 901 | 128, | 901 | 128, |
| 902 | }, | 902 | }, |
| 903 | /* Cipher 30 */ | 903 | /* Cipher 30 */ |
| 904 | { | 904 | { |
| 905 | 0, | 905 | 0, |
| 906 | TLS1_TXT_DH_DSS_WITH_AES_128_SHA, | 906 | TLS1_TXT_DH_DSS_WITH_AES_128_SHA, |
| 907 | TLS1_CK_DH_DSS_WITH_AES_128_SHA, | 907 | TLS1_CK_DH_DSS_WITH_AES_128_SHA, |
| 908 | SSL_kDHd, | 908 | SSL_kDHd, |
| 909 | SSL_aDH, | 909 | SSL_aDH, |
| 910 | SSL_AES128, | 910 | SSL_AES128, |
| 911 | SSL_SHA1, | 911 | SSL_SHA1, |
| 912 | SSL_TLSV1, | 912 | SSL_TLSV1, |
| 913 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 913 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 914 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 914 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 915 | 128, | 915 | 128, |
| 916 | 128, | 916 | 128, |
| 917 | }, | 917 | }, |
| 918 | /* Cipher 31 */ | 918 | /* Cipher 31 */ |
| 919 | { | 919 | { |
| 920 | 0, | 920 | 0, |
| 921 | TLS1_TXT_DH_RSA_WITH_AES_128_SHA, | 921 | TLS1_TXT_DH_RSA_WITH_AES_128_SHA, |
| 922 | TLS1_CK_DH_RSA_WITH_AES_128_SHA, | 922 | TLS1_CK_DH_RSA_WITH_AES_128_SHA, |
| 923 | SSL_kDHr, | 923 | SSL_kDHr, |
| 924 | SSL_aDH, | 924 | SSL_aDH, |
| 925 | SSL_AES128, | 925 | SSL_AES128, |
| 926 | SSL_SHA1, | 926 | SSL_SHA1, |
| 927 | SSL_TLSV1, | 927 | SSL_TLSV1, |
| 928 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 928 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 929 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 929 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 930 | 128, | 930 | 128, |
| 931 | 128, | 931 | 128, |
| 932 | }, | 932 | }, |
| 933 | /* Cipher 32 */ | 933 | /* Cipher 32 */ |
| 934 | { | 934 | { |
| 935 | 1, | 935 | 1, |
| 936 | TLS1_TXT_DHE_DSS_WITH_AES_128_SHA, | 936 | TLS1_TXT_DHE_DSS_WITH_AES_128_SHA, |
| 937 | TLS1_CK_DHE_DSS_WITH_AES_128_SHA, | 937 | TLS1_CK_DHE_DSS_WITH_AES_128_SHA, |
| 938 | SSL_kEDH, | 938 | SSL_kEDH, |
| 939 | SSL_aDSS, | 939 | SSL_aDSS, |
| 940 | SSL_AES128, | 940 | SSL_AES128, |
| 941 | SSL_SHA1, | 941 | SSL_SHA1, |
| 942 | SSL_TLSV1, | 942 | SSL_TLSV1, |
| 943 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 943 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 944 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 944 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 945 | 128, | 945 | 128, |
| 946 | 128, | 946 | 128, |
| 947 | }, | 947 | }, |
| 948 | /* Cipher 33 */ | 948 | /* Cipher 33 */ |
| 949 | { | 949 | { |
| 950 | 1, | 950 | 1, |
| 951 | TLS1_TXT_DHE_RSA_WITH_AES_128_SHA, | 951 | TLS1_TXT_DHE_RSA_WITH_AES_128_SHA, |
| 952 | TLS1_CK_DHE_RSA_WITH_AES_128_SHA, | 952 | TLS1_CK_DHE_RSA_WITH_AES_128_SHA, |
| 953 | SSL_kEDH, | 953 | SSL_kEDH, |
| 954 | SSL_aRSA, | 954 | SSL_aRSA, |
| 955 | SSL_AES128, | 955 | SSL_AES128, |
| 956 | SSL_SHA1, | 956 | SSL_SHA1, |
| 957 | SSL_TLSV1, | 957 | SSL_TLSV1, |
| 958 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 958 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 959 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 959 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 960 | 128, | 960 | 128, |
| 961 | 128, | 961 | 128, |
| 962 | }, | 962 | }, |
| 963 | /* Cipher 34 */ | 963 | /* Cipher 34 */ |
| 964 | { | 964 | { |
| 965 | 1, | 965 | 1, |
| 966 | TLS1_TXT_ADH_WITH_AES_128_SHA, | 966 | TLS1_TXT_ADH_WITH_AES_128_SHA, |
| 967 | TLS1_CK_ADH_WITH_AES_128_SHA, | 967 | TLS1_CK_ADH_WITH_AES_128_SHA, |
| 968 | SSL_kEDH, | 968 | SSL_kEDH, |
| 969 | SSL_aNULL, | 969 | SSL_aNULL, |
| 970 | SSL_AES128, | 970 | SSL_AES128, |
| 971 | SSL_SHA1, | 971 | SSL_SHA1, |
| 972 | SSL_TLSV1, | 972 | SSL_TLSV1, |
| 973 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 973 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 974 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 974 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 975 | 128, | 975 | 128, |
| 976 | 128, | 976 | 128, |
| 977 | }, | 977 | }, |
| 978 | 978 | ||
| 979 | /* Cipher 35 */ | 979 | /* Cipher 35 */ |
| 980 | { | 980 | { |
| 981 | 1, | 981 | 1, |
| 982 | TLS1_TXT_RSA_WITH_AES_256_SHA, | 982 | TLS1_TXT_RSA_WITH_AES_256_SHA, |
| 983 | TLS1_CK_RSA_WITH_AES_256_SHA, | 983 | TLS1_CK_RSA_WITH_AES_256_SHA, |
| 984 | SSL_kRSA, | 984 | SSL_kRSA, |
| 985 | SSL_aRSA, | 985 | SSL_aRSA, |
| 986 | SSL_AES256, | 986 | SSL_AES256, |
| 987 | SSL_SHA1, | 987 | SSL_SHA1, |
| 988 | SSL_TLSV1, | 988 | SSL_TLSV1, |
| 989 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 989 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 990 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 990 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 991 | 256, | 991 | 256, |
| 992 | 256, | 992 | 256, |
| 993 | }, | 993 | }, |
| 994 | /* Cipher 36 */ | 994 | /* Cipher 36 */ |
| 995 | { | 995 | { |
| 996 | 0, | 996 | 0, |
| 997 | TLS1_TXT_DH_DSS_WITH_AES_256_SHA, | 997 | TLS1_TXT_DH_DSS_WITH_AES_256_SHA, |
| 998 | TLS1_CK_DH_DSS_WITH_AES_256_SHA, | 998 | TLS1_CK_DH_DSS_WITH_AES_256_SHA, |
| 999 | SSL_kDHd, | 999 | SSL_kDHd, |
| 1000 | SSL_aDH, | 1000 | SSL_aDH, |
| 1001 | SSL_AES256, | 1001 | SSL_AES256, |
| 1002 | SSL_SHA1, | 1002 | SSL_SHA1, |
| 1003 | SSL_TLSV1, | 1003 | SSL_TLSV1, |
| 1004 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1004 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1005 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1005 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1006 | 256, | 1006 | 256, |
| 1007 | 256, | 1007 | 256, |
| 1008 | }, | 1008 | }, |
| 1009 | 1009 | ||
| 1010 | /* Cipher 37 */ | 1010 | /* Cipher 37 */ |
| 1011 | { | 1011 | { |
| 1012 | 0, /* not implemented (non-ephemeral DH) */ | 1012 | 0, /* not implemented (non-ephemeral DH) */ |
| 1013 | TLS1_TXT_DH_RSA_WITH_AES_256_SHA, | 1013 | TLS1_TXT_DH_RSA_WITH_AES_256_SHA, |
| 1014 | TLS1_CK_DH_RSA_WITH_AES_256_SHA, | 1014 | TLS1_CK_DH_RSA_WITH_AES_256_SHA, |
| 1015 | SSL_kDHr, | 1015 | SSL_kDHr, |
| 1016 | SSL_aDH, | 1016 | SSL_aDH, |
| 1017 | SSL_AES256, | 1017 | SSL_AES256, |
| 1018 | SSL_SHA1, | 1018 | SSL_SHA1, |
| 1019 | SSL_TLSV1, | 1019 | SSL_TLSV1, |
| 1020 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1020 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1021 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1021 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1022 | 256, | 1022 | 256, |
| 1023 | 256, | 1023 | 256, |
| 1024 | }, | 1024 | }, |
| 1025 | 1025 | ||
| 1026 | /* Cipher 38 */ | 1026 | /* Cipher 38 */ |
| 1027 | { | 1027 | { |
| 1028 | 1, | 1028 | 1, |
| 1029 | TLS1_TXT_DHE_DSS_WITH_AES_256_SHA, | 1029 | TLS1_TXT_DHE_DSS_WITH_AES_256_SHA, |
| 1030 | TLS1_CK_DHE_DSS_WITH_AES_256_SHA, | 1030 | TLS1_CK_DHE_DSS_WITH_AES_256_SHA, |
| 1031 | SSL_kEDH, | 1031 | SSL_kEDH, |
| 1032 | SSL_aDSS, | 1032 | SSL_aDSS, |
| 1033 | SSL_AES256, | 1033 | SSL_AES256, |
| 1034 | SSL_SHA1, | 1034 | SSL_SHA1, |
| 1035 | SSL_TLSV1, | 1035 | SSL_TLSV1, |
| 1036 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1036 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1037 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1037 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1038 | 256, | 1038 | 256, |
| 1039 | 256, | 1039 | 256, |
| 1040 | }, | 1040 | }, |
| 1041 | 1041 | ||
| 1042 | /* Cipher 39 */ | 1042 | /* Cipher 39 */ |
| 1043 | { | 1043 | { |
| 1044 | 1, | 1044 | 1, |
| 1045 | TLS1_TXT_DHE_RSA_WITH_AES_256_SHA, | 1045 | TLS1_TXT_DHE_RSA_WITH_AES_256_SHA, |
| 1046 | TLS1_CK_DHE_RSA_WITH_AES_256_SHA, | 1046 | TLS1_CK_DHE_RSA_WITH_AES_256_SHA, |
| 1047 | SSL_kEDH, | 1047 | SSL_kEDH, |
| 1048 | SSL_aRSA, | 1048 | SSL_aRSA, |
| 1049 | SSL_AES256, | 1049 | SSL_AES256, |
| 1050 | SSL_SHA1, | 1050 | SSL_SHA1, |
| 1051 | SSL_TLSV1, | 1051 | SSL_TLSV1, |
| 1052 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1052 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1053 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1053 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1054 | 256, | 1054 | 256, |
| 1055 | 256, | 1055 | 256, |
| 1056 | }, | 1056 | }, |
| 1057 | 1057 | ||
| 1058 | /* Cipher 3A */ | 1058 | /* Cipher 3A */ |
| 1059 | { | 1059 | { |
| 1060 | 1, | 1060 | 1, |
| 1061 | TLS1_TXT_ADH_WITH_AES_256_SHA, | 1061 | TLS1_TXT_ADH_WITH_AES_256_SHA, |
| 1062 | TLS1_CK_ADH_WITH_AES_256_SHA, | 1062 | TLS1_CK_ADH_WITH_AES_256_SHA, |
| 1063 | SSL_kEDH, | 1063 | SSL_kEDH, |
| 1064 | SSL_aNULL, | 1064 | SSL_aNULL, |
| 1065 | SSL_AES256, | 1065 | SSL_AES256, |
| 1066 | SSL_SHA1, | 1066 | SSL_SHA1, |
| 1067 | SSL_TLSV1, | 1067 | SSL_TLSV1, |
| 1068 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1068 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1069 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1069 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1070 | 256, | 1070 | 256, |
| 1071 | 256, | 1071 | 256, |
| 1072 | }, | 1072 | }, |
| 1073 | 1073 | ||
| 1074 | /* TLS v1.2 ciphersuites */ | 1074 | /* TLS v1.2 ciphersuites */ |
| 1075 | /* Cipher 3B */ | 1075 | /* Cipher 3B */ |
| 1076 | { | 1076 | { |
| 1077 | 1, | 1077 | 1, |
| 1078 | TLS1_TXT_RSA_WITH_NULL_SHA256, | 1078 | TLS1_TXT_RSA_WITH_NULL_SHA256, |
| 1079 | TLS1_CK_RSA_WITH_NULL_SHA256, | 1079 | TLS1_CK_RSA_WITH_NULL_SHA256, |
| 1080 | SSL_kRSA, | 1080 | SSL_kRSA, |
| 1081 | SSL_aRSA, | 1081 | SSL_aRSA, |
| 1082 | SSL_eNULL, | 1082 | SSL_eNULL, |
| 1083 | SSL_SHA256, | 1083 | SSL_SHA256, |
| 1084 | SSL_TLSV1_2, | 1084 | SSL_TLSV1_2, |
| 1085 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 1085 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
| 1086 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1086 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1087 | 0, | 1087 | 0, |
| 1088 | 0, | 1088 | 0, |
| 1089 | }, | 1089 | }, |
| 1090 | 1090 | ||
| 1091 | /* Cipher 3C */ | 1091 | /* Cipher 3C */ |
| 1092 | { | 1092 | { |
| 1093 | 1, | 1093 | 1, |
| 1094 | TLS1_TXT_RSA_WITH_AES_128_SHA256, | 1094 | TLS1_TXT_RSA_WITH_AES_128_SHA256, |
| 1095 | TLS1_CK_RSA_WITH_AES_128_SHA256, | 1095 | TLS1_CK_RSA_WITH_AES_128_SHA256, |
| 1096 | SSL_kRSA, | 1096 | SSL_kRSA, |
| 1097 | SSL_aRSA, | 1097 | SSL_aRSA, |
| 1098 | SSL_AES128, | 1098 | SSL_AES128, |
| 1099 | SSL_SHA256, | 1099 | SSL_SHA256, |
| 1100 | SSL_TLSV1_2, | 1100 | SSL_TLSV1_2, |
| 1101 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1101 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1102 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1102 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1103 | 128, | 1103 | 128, |
| 1104 | 128, | 1104 | 128, |
| 1105 | }, | 1105 | }, |
| 1106 | 1106 | ||
| 1107 | /* Cipher 3D */ | 1107 | /* Cipher 3D */ |
| 1108 | { | 1108 | { |
| 1109 | 1, | 1109 | 1, |
| 1110 | TLS1_TXT_RSA_WITH_AES_256_SHA256, | 1110 | TLS1_TXT_RSA_WITH_AES_256_SHA256, |
| 1111 | TLS1_CK_RSA_WITH_AES_256_SHA256, | 1111 | TLS1_CK_RSA_WITH_AES_256_SHA256, |
| 1112 | SSL_kRSA, | 1112 | SSL_kRSA, |
| 1113 | SSL_aRSA, | 1113 | SSL_aRSA, |
| 1114 | SSL_AES256, | 1114 | SSL_AES256, |
| 1115 | SSL_SHA256, | 1115 | SSL_SHA256, |
| 1116 | SSL_TLSV1_2, | 1116 | SSL_TLSV1_2, |
| 1117 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1117 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1118 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1118 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1119 | 256, | 1119 | 256, |
| 1120 | 256, | 1120 | 256, |
| 1121 | }, | 1121 | }, |
| 1122 | 1122 | ||
| 1123 | /* Cipher 3E */ | 1123 | /* Cipher 3E */ |
| 1124 | { | 1124 | { |
| 1125 | 0, /* not implemented (non-ephemeral DH) */ | 1125 | 0, /* not implemented (non-ephemeral DH) */ |
| 1126 | TLS1_TXT_DH_DSS_WITH_AES_128_SHA256, | 1126 | TLS1_TXT_DH_DSS_WITH_AES_128_SHA256, |
| 1127 | TLS1_CK_DH_DSS_WITH_AES_128_SHA256, | 1127 | TLS1_CK_DH_DSS_WITH_AES_128_SHA256, |
| 1128 | SSL_kDHd, | 1128 | SSL_kDHd, |
| 1129 | SSL_aDH, | 1129 | SSL_aDH, |
| 1130 | SSL_AES128, | 1130 | SSL_AES128, |
| 1131 | SSL_SHA256, | 1131 | SSL_SHA256, |
| 1132 | SSL_TLSV1_2, | 1132 | SSL_TLSV1_2, |
| 1133 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1133 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1134 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1134 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1135 | 128, | 1135 | 128, |
| 1136 | 128, | 1136 | 128, |
| 1137 | }, | 1137 | }, |
| 1138 | 1138 | ||
| 1139 | /* Cipher 3F */ | 1139 | /* Cipher 3F */ |
| 1140 | { | 1140 | { |
| 1141 | 0, /* not implemented (non-ephemeral DH) */ | 1141 | 0, /* not implemented (non-ephemeral DH) */ |
| 1142 | TLS1_TXT_DH_RSA_WITH_AES_128_SHA256, | 1142 | TLS1_TXT_DH_RSA_WITH_AES_128_SHA256, |
| 1143 | TLS1_CK_DH_RSA_WITH_AES_128_SHA256, | 1143 | TLS1_CK_DH_RSA_WITH_AES_128_SHA256, |
| 1144 | SSL_kDHr, | 1144 | SSL_kDHr, |
| 1145 | SSL_aDH, | 1145 | SSL_aDH, |
| 1146 | SSL_AES128, | 1146 | SSL_AES128, |
| 1147 | SSL_SHA256, | 1147 | SSL_SHA256, |
| 1148 | SSL_TLSV1_2, | 1148 | SSL_TLSV1_2, |
| 1149 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1149 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1150 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1150 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1151 | 128, | 1151 | 128, |
| 1152 | 128, | 1152 | 128, |
| 1153 | }, | 1153 | }, |
| 1154 | 1154 | ||
| 1155 | /* Cipher 40 */ | 1155 | /* Cipher 40 */ |
| 1156 | { | 1156 | { |
| 1157 | 1, | 1157 | 1, |
| 1158 | TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256, | 1158 | TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256, |
| 1159 | TLS1_CK_DHE_DSS_WITH_AES_128_SHA256, | 1159 | TLS1_CK_DHE_DSS_WITH_AES_128_SHA256, |
| 1160 | SSL_kEDH, | 1160 | SSL_kEDH, |
| 1161 | SSL_aDSS, | 1161 | SSL_aDSS, |
| 1162 | SSL_AES128, | 1162 | SSL_AES128, |
| 1163 | SSL_SHA256, | 1163 | SSL_SHA256, |
| 1164 | SSL_TLSV1_2, | 1164 | SSL_TLSV1_2, |
| 1165 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1165 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1166 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1166 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1167 | 128, | 1167 | 128, |
| 1168 | 128, | 1168 | 128, |
| 1169 | }, | 1169 | }, |
| 1170 | 1170 | ||
| 1171 | #ifndef OPENSSL_NO_CAMELLIA | 1171 | #ifndef OPENSSL_NO_CAMELLIA |
| @@ -1173,98 +1173,98 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
| 1173 | 1173 | ||
| 1174 | /* Cipher 41 */ | 1174 | /* Cipher 41 */ |
| 1175 | { | 1175 | { |
| 1176 | 1, | 1176 | 1, |
| 1177 | TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1177 | TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA, |
| 1178 | TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1178 | TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA, |
| 1179 | SSL_kRSA, | 1179 | SSL_kRSA, |
| 1180 | SSL_aRSA, | 1180 | SSL_aRSA, |
| 1181 | SSL_CAMELLIA128, | 1181 | SSL_CAMELLIA128, |
| 1182 | SSL_SHA1, | 1182 | SSL_SHA1, |
| 1183 | SSL_TLSV1, | 1183 | SSL_TLSV1, |
| 1184 | SSL_NOT_EXP|SSL_HIGH, | 1184 | SSL_NOT_EXP|SSL_HIGH, |
| 1185 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1185 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1186 | 128, | 1186 | 128, |
| 1187 | 128, | 1187 | 128, |
| 1188 | }, | 1188 | }, |
| 1189 | 1189 | ||
| 1190 | /* Cipher 42 */ | 1190 | /* Cipher 42 */ |
| 1191 | { | 1191 | { |
| 1192 | 0, /* not implemented (non-ephemeral DH) */ | 1192 | 0, /* not implemented (non-ephemeral DH) */ |
| 1193 | TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, | 1193 | TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, |
| 1194 | TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, | 1194 | TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, |
| 1195 | SSL_kDHd, | 1195 | SSL_kDHd, |
| 1196 | SSL_aDH, | 1196 | SSL_aDH, |
| 1197 | SSL_CAMELLIA128, | 1197 | SSL_CAMELLIA128, |
| 1198 | SSL_SHA1, | 1198 | SSL_SHA1, |
| 1199 | SSL_TLSV1, | 1199 | SSL_TLSV1, |
| 1200 | SSL_NOT_EXP|SSL_HIGH, | 1200 | SSL_NOT_EXP|SSL_HIGH, |
| 1201 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1201 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1202 | 128, | 1202 | 128, |
| 1203 | 128, | 1203 | 128, |
| 1204 | }, | 1204 | }, |
| 1205 | 1205 | ||
| 1206 | /* Cipher 43 */ | 1206 | /* Cipher 43 */ |
| 1207 | { | 1207 | { |
| 1208 | 0, /* not implemented (non-ephemeral DH) */ | 1208 | 0, /* not implemented (non-ephemeral DH) */ |
| 1209 | TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1209 | TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, |
| 1210 | TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1210 | TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, |
| 1211 | SSL_kDHr, | 1211 | SSL_kDHr, |
| 1212 | SSL_aDH, | 1212 | SSL_aDH, |
| 1213 | SSL_CAMELLIA128, | 1213 | SSL_CAMELLIA128, |
| 1214 | SSL_SHA1, | 1214 | SSL_SHA1, |
| 1215 | SSL_TLSV1, | 1215 | SSL_TLSV1, |
| 1216 | SSL_NOT_EXP|SSL_HIGH, | 1216 | SSL_NOT_EXP|SSL_HIGH, |
| 1217 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1217 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1218 | 128, | 1218 | 128, |
| 1219 | 128, | 1219 | 128, |
| 1220 | }, | 1220 | }, |
| 1221 | 1221 | ||
| 1222 | /* Cipher 44 */ | 1222 | /* Cipher 44 */ |
| 1223 | { | 1223 | { |
| 1224 | 1, | 1224 | 1, |
| 1225 | TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, | 1225 | TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, |
| 1226 | TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, | 1226 | TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, |
| 1227 | SSL_kEDH, | 1227 | SSL_kEDH, |
| 1228 | SSL_aDSS, | 1228 | SSL_aDSS, |
| 1229 | SSL_CAMELLIA128, | 1229 | SSL_CAMELLIA128, |
| 1230 | SSL_SHA1, | 1230 | SSL_SHA1, |
| 1231 | SSL_TLSV1, | 1231 | SSL_TLSV1, |
| 1232 | SSL_NOT_EXP|SSL_HIGH, | 1232 | SSL_NOT_EXP|SSL_HIGH, |
| 1233 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1233 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1234 | 128, | 1234 | 128, |
| 1235 | 128, | 1235 | 128, |
| 1236 | }, | 1236 | }, |
| 1237 | 1237 | ||
| 1238 | /* Cipher 45 */ | 1238 | /* Cipher 45 */ |
| 1239 | { | 1239 | { |
| 1240 | 1, | 1240 | 1, |
| 1241 | TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1241 | TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, |
| 1242 | TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1242 | TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, |
| 1243 | SSL_kEDH, | 1243 | SSL_kEDH, |
| 1244 | SSL_aRSA, | 1244 | SSL_aRSA, |
| 1245 | SSL_CAMELLIA128, | 1245 | SSL_CAMELLIA128, |
| 1246 | SSL_SHA1, | 1246 | SSL_SHA1, |
| 1247 | SSL_TLSV1, | 1247 | SSL_TLSV1, |
| 1248 | SSL_NOT_EXP|SSL_HIGH, | 1248 | SSL_NOT_EXP|SSL_HIGH, |
| 1249 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1249 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1250 | 128, | 1250 | 128, |
| 1251 | 128, | 1251 | 128, |
| 1252 | }, | 1252 | }, |
| 1253 | 1253 | ||
| 1254 | /* Cipher 46 */ | 1254 | /* Cipher 46 */ |
| 1255 | { | 1255 | { |
| 1256 | 1, | 1256 | 1, |
| 1257 | TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA, | 1257 | TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA, |
| 1258 | TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA, | 1258 | TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA, |
| 1259 | SSL_kEDH, | 1259 | SSL_kEDH, |
| 1260 | SSL_aNULL, | 1260 | SSL_aNULL, |
| 1261 | SSL_CAMELLIA128, | 1261 | SSL_CAMELLIA128, |
| 1262 | SSL_SHA1, | 1262 | SSL_SHA1, |
| 1263 | SSL_TLSV1, | 1263 | SSL_TLSV1, |
| 1264 | SSL_NOT_EXP|SSL_HIGH, | 1264 | SSL_NOT_EXP|SSL_HIGH, |
| 1265 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1265 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1266 | 128, | 1266 | 128, |
| 1267 | 128, | 1267 | 128, |
| 1268 | }, | 1268 | }, |
| 1269 | #endif /* OPENSSL_NO_CAMELLIA */ | 1269 | #endif /* OPENSSL_NO_CAMELLIA */ |
| 1270 | 1270 | ||
| @@ -1273,288 +1273,288 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
| 1273 | #if 0 | 1273 | #if 0 |
| 1274 | /* Cipher 60 */ | 1274 | /* Cipher 60 */ |
| 1275 | { | 1275 | { |
| 1276 | 1, | 1276 | 1, |
| 1277 | TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5, | 1277 | TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5, |
| 1278 | TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5, | 1278 | TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5, |
| 1279 | SSL_kRSA, | 1279 | SSL_kRSA, |
| 1280 | SSL_aRSA, | 1280 | SSL_aRSA, |
| 1281 | SSL_RC4, | 1281 | SSL_RC4, |
| 1282 | SSL_MD5, | 1282 | SSL_MD5, |
| 1283 | SSL_TLSV1, | 1283 | SSL_TLSV1, |
| 1284 | SSL_EXPORT|SSL_EXP56, | 1284 | SSL_EXPORT|SSL_EXP56, |
| 1285 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1285 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1286 | 56, | 1286 | 56, |
| 1287 | 128, | 1287 | 128, |
| 1288 | }, | 1288 | }, |
| 1289 | 1289 | ||
| 1290 | /* Cipher 61 */ | 1290 | /* Cipher 61 */ |
| 1291 | { | 1291 | { |
| 1292 | 1, | 1292 | 1, |
| 1293 | TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, | 1293 | TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, |
| 1294 | TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, | 1294 | TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, |
| 1295 | SSL_kRSA, | 1295 | SSL_kRSA, |
| 1296 | SSL_aRSA, | 1296 | SSL_aRSA, |
| 1297 | SSL_RC2, | 1297 | SSL_RC2, |
| 1298 | SSL_MD5, | 1298 | SSL_MD5, |
| 1299 | SSL_TLSV1, | 1299 | SSL_TLSV1, |
| 1300 | SSL_EXPORT|SSL_EXP56, | 1300 | SSL_EXPORT|SSL_EXP56, |
| 1301 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1301 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1302 | 56, | 1302 | 56, |
| 1303 | 128, | 1303 | 128, |
| 1304 | }, | 1304 | }, |
| 1305 | #endif | 1305 | #endif |
| 1306 | 1306 | ||
| 1307 | /* Cipher 62 */ | 1307 | /* Cipher 62 */ |
| 1308 | { | 1308 | { |
| 1309 | 1, | 1309 | 1, |
| 1310 | TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA, | 1310 | TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA, |
| 1311 | TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA, | 1311 | TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA, |
| 1312 | SSL_kRSA, | 1312 | SSL_kRSA, |
| 1313 | SSL_aRSA, | 1313 | SSL_aRSA, |
| 1314 | SSL_DES, | 1314 | SSL_DES, |
| 1315 | SSL_SHA1, | 1315 | SSL_SHA1, |
| 1316 | SSL_TLSV1, | 1316 | SSL_TLSV1, |
| 1317 | SSL_EXPORT|SSL_EXP56, | 1317 | SSL_EXPORT|SSL_EXP56, |
| 1318 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1318 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1319 | 56, | 1319 | 56, |
| 1320 | 56, | 1320 | 56, |
| 1321 | }, | 1321 | }, |
| 1322 | 1322 | ||
| 1323 | /* Cipher 63 */ | 1323 | /* Cipher 63 */ |
| 1324 | { | 1324 | { |
| 1325 | 1, | 1325 | 1, |
| 1326 | TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, | 1326 | TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, |
| 1327 | TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, | 1327 | TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, |
| 1328 | SSL_kEDH, | 1328 | SSL_kEDH, |
| 1329 | SSL_aDSS, | 1329 | SSL_aDSS, |
| 1330 | SSL_DES, | 1330 | SSL_DES, |
| 1331 | SSL_SHA1, | 1331 | SSL_SHA1, |
| 1332 | SSL_TLSV1, | 1332 | SSL_TLSV1, |
| 1333 | SSL_EXPORT|SSL_EXP56, | 1333 | SSL_EXPORT|SSL_EXP56, |
| 1334 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1334 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1335 | 56, | 1335 | 56, |
| 1336 | 56, | 1336 | 56, |
| 1337 | }, | 1337 | }, |
| 1338 | 1338 | ||
| 1339 | /* Cipher 64 */ | 1339 | /* Cipher 64 */ |
| 1340 | { | 1340 | { |
| 1341 | 1, | 1341 | 1, |
| 1342 | TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA, | 1342 | TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA, |
| 1343 | TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA, | 1343 | TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA, |
| 1344 | SSL_kRSA, | 1344 | SSL_kRSA, |
| 1345 | SSL_aRSA, | 1345 | SSL_aRSA, |
| 1346 | SSL_RC4, | 1346 | SSL_RC4, |
| 1347 | SSL_SHA1, | 1347 | SSL_SHA1, |
| 1348 | SSL_TLSV1, | 1348 | SSL_TLSV1, |
| 1349 | SSL_EXPORT|SSL_EXP56, | 1349 | SSL_EXPORT|SSL_EXP56, |
| 1350 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1350 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1351 | 56, | 1351 | 56, |
| 1352 | 128, | 1352 | 128, |
| 1353 | }, | 1353 | }, |
| 1354 | 1354 | ||
| 1355 | /* Cipher 65 */ | 1355 | /* Cipher 65 */ |
| 1356 | { | 1356 | { |
| 1357 | 1, | 1357 | 1, |
| 1358 | TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, | 1358 | TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, |
| 1359 | TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, | 1359 | TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, |
| 1360 | SSL_kEDH, | 1360 | SSL_kEDH, |
| 1361 | SSL_aDSS, | 1361 | SSL_aDSS, |
| 1362 | SSL_RC4, | 1362 | SSL_RC4, |
| 1363 | SSL_SHA1, | 1363 | SSL_SHA1, |
| 1364 | SSL_TLSV1, | 1364 | SSL_TLSV1, |
| 1365 | SSL_EXPORT|SSL_EXP56, | 1365 | SSL_EXPORT|SSL_EXP56, |
| 1366 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1366 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1367 | 56, | 1367 | 56, |
| 1368 | 128, | 1368 | 128, |
| 1369 | }, | 1369 | }, |
| 1370 | 1370 | ||
| 1371 | /* Cipher 66 */ | 1371 | /* Cipher 66 */ |
| 1372 | { | 1372 | { |
| 1373 | 1, | 1373 | 1, |
| 1374 | TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA, | 1374 | TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA, |
| 1375 | TLS1_CK_DHE_DSS_WITH_RC4_128_SHA, | 1375 | TLS1_CK_DHE_DSS_WITH_RC4_128_SHA, |
| 1376 | SSL_kEDH, | 1376 | SSL_kEDH, |
| 1377 | SSL_aDSS, | 1377 | SSL_aDSS, |
| 1378 | SSL_RC4, | 1378 | SSL_RC4, |
| 1379 | SSL_SHA1, | 1379 | SSL_SHA1, |
| 1380 | SSL_TLSV1, | 1380 | SSL_TLSV1, |
| 1381 | SSL_NOT_EXP|SSL_MEDIUM, | 1381 | SSL_NOT_EXP|SSL_MEDIUM, |
| 1382 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1382 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1383 | 128, | 1383 | 128, |
| 1384 | 128, | 1384 | 128, |
| 1385 | }, | 1385 | }, |
| 1386 | #endif | 1386 | #endif |
| 1387 | 1387 | ||
| 1388 | /* TLS v1.2 ciphersuites */ | 1388 | /* TLS v1.2 ciphersuites */ |
| 1389 | /* Cipher 67 */ | 1389 | /* Cipher 67 */ |
| 1390 | { | 1390 | { |
| 1391 | 1, | 1391 | 1, |
| 1392 | TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256, | 1392 | TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256, |
| 1393 | TLS1_CK_DHE_RSA_WITH_AES_128_SHA256, | 1393 | TLS1_CK_DHE_RSA_WITH_AES_128_SHA256, |
| 1394 | SSL_kEDH, | 1394 | SSL_kEDH, |
| 1395 | SSL_aRSA, | 1395 | SSL_aRSA, |
| 1396 | SSL_AES128, | 1396 | SSL_AES128, |
| 1397 | SSL_SHA256, | 1397 | SSL_SHA256, |
| 1398 | SSL_TLSV1_2, | 1398 | SSL_TLSV1_2, |
| 1399 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1399 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1400 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1400 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1401 | 128, | 1401 | 128, |
| 1402 | 128, | 1402 | 128, |
| 1403 | }, | 1403 | }, |
| 1404 | 1404 | ||
| 1405 | /* Cipher 68 */ | 1405 | /* Cipher 68 */ |
| 1406 | { | 1406 | { |
| 1407 | 0, /* not implemented (non-ephemeral DH) */ | 1407 | 0, /* not implemented (non-ephemeral DH) */ |
| 1408 | TLS1_TXT_DH_DSS_WITH_AES_256_SHA256, | 1408 | TLS1_TXT_DH_DSS_WITH_AES_256_SHA256, |
| 1409 | TLS1_CK_DH_DSS_WITH_AES_256_SHA256, | 1409 | TLS1_CK_DH_DSS_WITH_AES_256_SHA256, |
| 1410 | SSL_kDHd, | 1410 | SSL_kDHd, |
| 1411 | SSL_aDH, | 1411 | SSL_aDH, |
| 1412 | SSL_AES256, | 1412 | SSL_AES256, |
| 1413 | SSL_SHA256, | 1413 | SSL_SHA256, |
| 1414 | SSL_TLSV1_2, | 1414 | SSL_TLSV1_2, |
| 1415 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1415 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1416 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1416 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1417 | 256, | 1417 | 256, |
| 1418 | 256, | 1418 | 256, |
| 1419 | }, | 1419 | }, |
| 1420 | 1420 | ||
| 1421 | /* Cipher 69 */ | 1421 | /* Cipher 69 */ |
| 1422 | { | 1422 | { |
| 1423 | 0, /* not implemented (non-ephemeral DH) */ | 1423 | 0, /* not implemented (non-ephemeral DH) */ |
| 1424 | TLS1_TXT_DH_RSA_WITH_AES_256_SHA256, | 1424 | TLS1_TXT_DH_RSA_WITH_AES_256_SHA256, |
| 1425 | TLS1_CK_DH_RSA_WITH_AES_256_SHA256, | 1425 | TLS1_CK_DH_RSA_WITH_AES_256_SHA256, |
| 1426 | SSL_kDHr, | 1426 | SSL_kDHr, |
| 1427 | SSL_aDH, | 1427 | SSL_aDH, |
| 1428 | SSL_AES256, | 1428 | SSL_AES256, |
| 1429 | SSL_SHA256, | 1429 | SSL_SHA256, |
| 1430 | SSL_TLSV1_2, | 1430 | SSL_TLSV1_2, |
| 1431 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1431 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1432 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1432 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1433 | 256, | 1433 | 256, |
| 1434 | 256, | 1434 | 256, |
| 1435 | }, | 1435 | }, |
| 1436 | 1436 | ||
| 1437 | /* Cipher 6A */ | 1437 | /* Cipher 6A */ |
| 1438 | { | 1438 | { |
| 1439 | 1, | 1439 | 1, |
| 1440 | TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256, | 1440 | TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256, |
| 1441 | TLS1_CK_DHE_DSS_WITH_AES_256_SHA256, | 1441 | TLS1_CK_DHE_DSS_WITH_AES_256_SHA256, |
| 1442 | SSL_kEDH, | 1442 | SSL_kEDH, |
| 1443 | SSL_aDSS, | 1443 | SSL_aDSS, |
| 1444 | SSL_AES256, | 1444 | SSL_AES256, |
| 1445 | SSL_SHA256, | 1445 | SSL_SHA256, |
| 1446 | SSL_TLSV1_2, | 1446 | SSL_TLSV1_2, |
| 1447 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1447 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1448 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1448 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1449 | 256, | 1449 | 256, |
| 1450 | 256, | 1450 | 256, |
| 1451 | }, | 1451 | }, |
| 1452 | 1452 | ||
| 1453 | /* Cipher 6B */ | 1453 | /* Cipher 6B */ |
| 1454 | { | 1454 | { |
| 1455 | 1, | 1455 | 1, |
| 1456 | TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256, | 1456 | TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256, |
| 1457 | TLS1_CK_DHE_RSA_WITH_AES_256_SHA256, | 1457 | TLS1_CK_DHE_RSA_WITH_AES_256_SHA256, |
| 1458 | SSL_kEDH, | 1458 | SSL_kEDH, |
| 1459 | SSL_aRSA, | 1459 | SSL_aRSA, |
| 1460 | SSL_AES256, | 1460 | SSL_AES256, |
| 1461 | SSL_SHA256, | 1461 | SSL_SHA256, |
| 1462 | SSL_TLSV1_2, | 1462 | SSL_TLSV1_2, |
| 1463 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1463 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1464 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1464 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1465 | 256, | 1465 | 256, |
| 1466 | 256, | 1466 | 256, |
| 1467 | }, | 1467 | }, |
| 1468 | 1468 | ||
| 1469 | /* Cipher 6C */ | 1469 | /* Cipher 6C */ |
| 1470 | { | 1470 | { |
| 1471 | 1, | 1471 | 1, |
| 1472 | TLS1_TXT_ADH_WITH_AES_128_SHA256, | 1472 | TLS1_TXT_ADH_WITH_AES_128_SHA256, |
| 1473 | TLS1_CK_ADH_WITH_AES_128_SHA256, | 1473 | TLS1_CK_ADH_WITH_AES_128_SHA256, |
| 1474 | SSL_kEDH, | 1474 | SSL_kEDH, |
| 1475 | SSL_aNULL, | 1475 | SSL_aNULL, |
| 1476 | SSL_AES128, | 1476 | SSL_AES128, |
| 1477 | SSL_SHA256, | 1477 | SSL_SHA256, |
| 1478 | SSL_TLSV1_2, | 1478 | SSL_TLSV1_2, |
| 1479 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1479 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1480 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1480 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1481 | 128, | 1481 | 128, |
| 1482 | 128, | 1482 | 128, |
| 1483 | }, | 1483 | }, |
| 1484 | 1484 | ||
| 1485 | /* Cipher 6D */ | 1485 | /* Cipher 6D */ |
| 1486 | { | 1486 | { |
| 1487 | 1, | 1487 | 1, |
| 1488 | TLS1_TXT_ADH_WITH_AES_256_SHA256, | 1488 | TLS1_TXT_ADH_WITH_AES_256_SHA256, |
| 1489 | TLS1_CK_ADH_WITH_AES_256_SHA256, | 1489 | TLS1_CK_ADH_WITH_AES_256_SHA256, |
| 1490 | SSL_kEDH, | 1490 | SSL_kEDH, |
| 1491 | SSL_aNULL, | 1491 | SSL_aNULL, |
| 1492 | SSL_AES256, | 1492 | SSL_AES256, |
| 1493 | SSL_SHA256, | 1493 | SSL_SHA256, |
| 1494 | SSL_TLSV1_2, | 1494 | SSL_TLSV1_2, |
| 1495 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1495 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1496 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1496 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1497 | 256, | 1497 | 256, |
| 1498 | 256, | 1498 | 256, |
| 1499 | }, | 1499 | }, |
| 1500 | 1500 | ||
| 1501 | /* GOST Ciphersuites */ | 1501 | /* GOST Ciphersuites */ |
| 1502 | 1502 | ||
| 1503 | { | 1503 | { |
| 1504 | 1, | 1504 | 1, |
| 1505 | "GOST94-GOST89-GOST89", | 1505 | "GOST94-GOST89-GOST89", |
| 1506 | 0x3000080, | 1506 | 0x3000080, |
| 1507 | SSL_kGOST, | 1507 | SSL_kGOST, |
| 1508 | SSL_aGOST94, | 1508 | SSL_aGOST94, |
| 1509 | SSL_eGOST2814789CNT, | 1509 | SSL_eGOST2814789CNT, |
| 1510 | SSL_GOST89MAC, | 1510 | SSL_GOST89MAC, |
| 1511 | SSL_TLSV1, | 1511 | SSL_TLSV1, |
| 1512 | SSL_NOT_EXP|SSL_HIGH, | 1512 | SSL_NOT_EXP|SSL_HIGH, |
| 1513 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC, | 1513 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC, |
| 1514 | 256, | 1514 | 256, |
| 1515 | 256 | 1515 | 256 |
| 1516 | }, | 1516 | }, |
| 1517 | { | 1517 | { |
| 1518 | 1, | 1518 | 1, |
| 1519 | "GOST2001-GOST89-GOST89", | 1519 | "GOST2001-GOST89-GOST89", |
| 1520 | 0x3000081, | 1520 | 0x3000081, |
| 1521 | SSL_kGOST, | 1521 | SSL_kGOST, |
| 1522 | SSL_aGOST01, | 1522 | SSL_aGOST01, |
| 1523 | SSL_eGOST2814789CNT, | 1523 | SSL_eGOST2814789CNT, |
| 1524 | SSL_GOST89MAC, | 1524 | SSL_GOST89MAC, |
| 1525 | SSL_TLSV1, | 1525 | SSL_TLSV1, |
| 1526 | SSL_NOT_EXP|SSL_HIGH, | 1526 | SSL_NOT_EXP|SSL_HIGH, |
| 1527 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC, | 1527 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC, |
| 1528 | 256, | 1528 | 256, |
| 1529 | 256 | 1529 | 256 |
| 1530 | }, | 1530 | }, |
| 1531 | { | 1531 | { |
| 1532 | 1, | 1532 | 1, |
| 1533 | "GOST94-NULL-GOST94", | 1533 | "GOST94-NULL-GOST94", |
| 1534 | 0x3000082, | 1534 | 0x3000082, |
| 1535 | SSL_kGOST, | 1535 | SSL_kGOST, |
| 1536 | SSL_aGOST94, | 1536 | SSL_aGOST94, |
| 1537 | SSL_eNULL, | 1537 | SSL_eNULL, |
| 1538 | SSL_GOST94, | 1538 | SSL_GOST94, |
| 1539 | SSL_TLSV1, | 1539 | SSL_TLSV1, |
| 1540 | SSL_NOT_EXP|SSL_STRONG_NONE, | 1540 | SSL_NOT_EXP|SSL_STRONG_NONE, |
| 1541 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94, | 1541 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94, |
| 1542 | 0, | 1542 | 0, |
| 1543 | 0 | 1543 | 0 |
| 1544 | }, | 1544 | }, |
| 1545 | { | 1545 | { |
| 1546 | 1, | 1546 | 1, |
| 1547 | "GOST2001-NULL-GOST94", | 1547 | "GOST2001-NULL-GOST94", |
| 1548 | 0x3000083, | 1548 | 0x3000083, |
| 1549 | SSL_kGOST, | 1549 | SSL_kGOST, |
| 1550 | SSL_aGOST01, | 1550 | SSL_aGOST01, |
| 1551 | SSL_eNULL, | 1551 | SSL_eNULL, |
| 1552 | SSL_GOST94, | 1552 | SSL_GOST94, |
| 1553 | SSL_TLSV1, | 1553 | SSL_TLSV1, |
| 1554 | SSL_NOT_EXP|SSL_STRONG_NONE, | 1554 | SSL_NOT_EXP|SSL_STRONG_NONE, |
| 1555 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94, | 1555 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94, |
| 1556 | 0, | 1556 | 0, |
| 1557 | 0 | 1557 | 0 |
| 1558 | }, | 1558 | }, |
| 1559 | 1559 | ||
| 1560 | #ifndef OPENSSL_NO_CAMELLIA | 1560 | #ifndef OPENSSL_NO_CAMELLIA |
| @@ -1562,163 +1562,163 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
| 1562 | 1562 | ||
| 1563 | /* Cipher 84 */ | 1563 | /* Cipher 84 */ |
| 1564 | { | 1564 | { |
| 1565 | 1, | 1565 | 1, |
| 1566 | TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1566 | TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA, |
| 1567 | TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1567 | TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA, |
| 1568 | SSL_kRSA, | 1568 | SSL_kRSA, |
| 1569 | SSL_aRSA, | 1569 | SSL_aRSA, |
| 1570 | SSL_CAMELLIA256, | 1570 | SSL_CAMELLIA256, |
| 1571 | SSL_SHA1, | 1571 | SSL_SHA1, |
| 1572 | SSL_TLSV1, | 1572 | SSL_TLSV1, |
| 1573 | SSL_NOT_EXP|SSL_HIGH, | 1573 | SSL_NOT_EXP|SSL_HIGH, |
| 1574 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1574 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1575 | 256, | 1575 | 256, |
| 1576 | 256, | 1576 | 256, |
| 1577 | }, | 1577 | }, |
| 1578 | /* Cipher 85 */ | 1578 | /* Cipher 85 */ |
| 1579 | { | 1579 | { |
| 1580 | 0, /* not implemented (non-ephemeral DH) */ | 1580 | 0, /* not implemented (non-ephemeral DH) */ |
| 1581 | TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, | 1581 | TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, |
| 1582 | TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, | 1582 | TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, |
| 1583 | SSL_kDHd, | 1583 | SSL_kDHd, |
| 1584 | SSL_aDH, | 1584 | SSL_aDH, |
| 1585 | SSL_CAMELLIA256, | 1585 | SSL_CAMELLIA256, |
| 1586 | SSL_SHA1, | 1586 | SSL_SHA1, |
| 1587 | SSL_TLSV1, | 1587 | SSL_TLSV1, |
| 1588 | SSL_NOT_EXP|SSL_HIGH, | 1588 | SSL_NOT_EXP|SSL_HIGH, |
| 1589 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1589 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1590 | 256, | 1590 | 256, |
| 1591 | 256, | 1591 | 256, |
| 1592 | }, | 1592 | }, |
| 1593 | 1593 | ||
| 1594 | /* Cipher 86 */ | 1594 | /* Cipher 86 */ |
| 1595 | { | 1595 | { |
| 1596 | 0, /* not implemented (non-ephemeral DH) */ | 1596 | 0, /* not implemented (non-ephemeral DH) */ |
| 1597 | TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1597 | TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, |
| 1598 | TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1598 | TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, |
| 1599 | SSL_kDHr, | 1599 | SSL_kDHr, |
| 1600 | SSL_aDH, | 1600 | SSL_aDH, |
| 1601 | SSL_CAMELLIA256, | 1601 | SSL_CAMELLIA256, |
| 1602 | SSL_SHA1, | 1602 | SSL_SHA1, |
| 1603 | SSL_TLSV1, | 1603 | SSL_TLSV1, |
| 1604 | SSL_NOT_EXP|SSL_HIGH, | 1604 | SSL_NOT_EXP|SSL_HIGH, |
| 1605 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1605 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1606 | 256, | 1606 | 256, |
| 1607 | 256, | 1607 | 256, |
| 1608 | }, | 1608 | }, |
| 1609 | 1609 | ||
| 1610 | /* Cipher 87 */ | 1610 | /* Cipher 87 */ |
| 1611 | { | 1611 | { |
| 1612 | 1, | 1612 | 1, |
| 1613 | TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, | 1613 | TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, |
| 1614 | TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, | 1614 | TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, |
| 1615 | SSL_kEDH, | 1615 | SSL_kEDH, |
| 1616 | SSL_aDSS, | 1616 | SSL_aDSS, |
| 1617 | SSL_CAMELLIA256, | 1617 | SSL_CAMELLIA256, |
| 1618 | SSL_SHA1, | 1618 | SSL_SHA1, |
| 1619 | SSL_TLSV1, | 1619 | SSL_TLSV1, |
| 1620 | SSL_NOT_EXP|SSL_HIGH, | 1620 | SSL_NOT_EXP|SSL_HIGH, |
| 1621 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1621 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1622 | 256, | 1622 | 256, |
| 1623 | 256, | 1623 | 256, |
| 1624 | }, | 1624 | }, |
| 1625 | 1625 | ||
| 1626 | /* Cipher 88 */ | 1626 | /* Cipher 88 */ |
| 1627 | { | 1627 | { |
| 1628 | 1, | 1628 | 1, |
| 1629 | TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1629 | TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, |
| 1630 | TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1630 | TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, |
| 1631 | SSL_kEDH, | 1631 | SSL_kEDH, |
| 1632 | SSL_aRSA, | 1632 | SSL_aRSA, |
| 1633 | SSL_CAMELLIA256, | 1633 | SSL_CAMELLIA256, |
| 1634 | SSL_SHA1, | 1634 | SSL_SHA1, |
| 1635 | SSL_TLSV1, | 1635 | SSL_TLSV1, |
| 1636 | SSL_NOT_EXP|SSL_HIGH, | 1636 | SSL_NOT_EXP|SSL_HIGH, |
| 1637 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1637 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1638 | 256, | 1638 | 256, |
| 1639 | 256, | 1639 | 256, |
| 1640 | }, | 1640 | }, |
| 1641 | 1641 | ||
| 1642 | /* Cipher 89 */ | 1642 | /* Cipher 89 */ |
| 1643 | { | 1643 | { |
| 1644 | 1, | 1644 | 1, |
| 1645 | TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA, | 1645 | TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA, |
| 1646 | TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA, | 1646 | TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA, |
| 1647 | SSL_kEDH, | 1647 | SSL_kEDH, |
| 1648 | SSL_aNULL, | 1648 | SSL_aNULL, |
| 1649 | SSL_CAMELLIA256, | 1649 | SSL_CAMELLIA256, |
| 1650 | SSL_SHA1, | 1650 | SSL_SHA1, |
| 1651 | SSL_TLSV1, | 1651 | SSL_TLSV1, |
| 1652 | SSL_NOT_EXP|SSL_HIGH, | 1652 | SSL_NOT_EXP|SSL_HIGH, |
| 1653 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1653 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1654 | 256, | 1654 | 256, |
| 1655 | 256, | 1655 | 256, |
| 1656 | }, | 1656 | }, |
| 1657 | #endif /* OPENSSL_NO_CAMELLIA */ | 1657 | #endif /* OPENSSL_NO_CAMELLIA */ |
| 1658 | 1658 | ||
| 1659 | #ifndef OPENSSL_NO_PSK | 1659 | #ifndef OPENSSL_NO_PSK |
| 1660 | /* Cipher 8A */ | 1660 | /* Cipher 8A */ |
| 1661 | { | 1661 | { |
| 1662 | 1, | 1662 | 1, |
| 1663 | TLS1_TXT_PSK_WITH_RC4_128_SHA, | 1663 | TLS1_TXT_PSK_WITH_RC4_128_SHA, |
| 1664 | TLS1_CK_PSK_WITH_RC4_128_SHA, | 1664 | TLS1_CK_PSK_WITH_RC4_128_SHA, |
| 1665 | SSL_kPSK, | 1665 | SSL_kPSK, |
| 1666 | SSL_aPSK, | 1666 | SSL_aPSK, |
| 1667 | SSL_RC4, | 1667 | SSL_RC4, |
| 1668 | SSL_SHA1, | 1668 | SSL_SHA1, |
| 1669 | SSL_TLSV1, | 1669 | SSL_TLSV1, |
| 1670 | SSL_NOT_EXP|SSL_MEDIUM, | 1670 | SSL_NOT_EXP|SSL_MEDIUM, |
| 1671 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1671 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1672 | 128, | 1672 | 128, |
| 1673 | 128, | 1673 | 128, |
| 1674 | }, | 1674 | }, |
| 1675 | 1675 | ||
| 1676 | /* Cipher 8B */ | 1676 | /* Cipher 8B */ |
| 1677 | { | 1677 | { |
| 1678 | 1, | 1678 | 1, |
| 1679 | TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA, | 1679 | TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA, |
| 1680 | TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA, | 1680 | TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA, |
| 1681 | SSL_kPSK, | 1681 | SSL_kPSK, |
| 1682 | SSL_aPSK, | 1682 | SSL_aPSK, |
| 1683 | SSL_3DES, | 1683 | SSL_3DES, |
| 1684 | SSL_SHA1, | 1684 | SSL_SHA1, |
| 1685 | SSL_TLSV1, | 1685 | SSL_TLSV1, |
| 1686 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1686 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1687 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1687 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1688 | 168, | 1688 | 168, |
| 1689 | 168, | 1689 | 168, |
| 1690 | }, | 1690 | }, |
| 1691 | 1691 | ||
| 1692 | /* Cipher 8C */ | 1692 | /* Cipher 8C */ |
| 1693 | { | 1693 | { |
| 1694 | 1, | 1694 | 1, |
| 1695 | TLS1_TXT_PSK_WITH_AES_128_CBC_SHA, | 1695 | TLS1_TXT_PSK_WITH_AES_128_CBC_SHA, |
| 1696 | TLS1_CK_PSK_WITH_AES_128_CBC_SHA, | 1696 | TLS1_CK_PSK_WITH_AES_128_CBC_SHA, |
| 1697 | SSL_kPSK, | 1697 | SSL_kPSK, |
| 1698 | SSL_aPSK, | 1698 | SSL_aPSK, |
| 1699 | SSL_AES128, | 1699 | SSL_AES128, |
| 1700 | SSL_SHA1, | 1700 | SSL_SHA1, |
| 1701 | SSL_TLSV1, | 1701 | SSL_TLSV1, |
| 1702 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1702 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1703 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1703 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1704 | 128, | 1704 | 128, |
| 1705 | 128, | 1705 | 128, |
| 1706 | }, | 1706 | }, |
| 1707 | 1707 | ||
| 1708 | /* Cipher 8D */ | 1708 | /* Cipher 8D */ |
| 1709 | { | 1709 | { |
| 1710 | 1, | 1710 | 1, |
| 1711 | TLS1_TXT_PSK_WITH_AES_256_CBC_SHA, | 1711 | TLS1_TXT_PSK_WITH_AES_256_CBC_SHA, |
| 1712 | TLS1_CK_PSK_WITH_AES_256_CBC_SHA, | 1712 | TLS1_CK_PSK_WITH_AES_256_CBC_SHA, |
| 1713 | SSL_kPSK, | 1713 | SSL_kPSK, |
| 1714 | SSL_aPSK, | 1714 | SSL_aPSK, |
| 1715 | SSL_AES256, | 1715 | SSL_AES256, |
| 1716 | SSL_SHA1, | 1716 | SSL_SHA1, |
| 1717 | SSL_TLSV1, | 1717 | SSL_TLSV1, |
| 1718 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1718 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1719 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1719 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1720 | 256, | 1720 | 256, |
| 1721 | 256, | 1721 | 256, |
| 1722 | }, | 1722 | }, |
| 1723 | #endif /* OPENSSL_NO_PSK */ | 1723 | #endif /* OPENSSL_NO_PSK */ |
| 1724 | 1724 | ||
| @@ -1727,98 +1727,98 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
| 1727 | 1727 | ||
| 1728 | /* Cipher 96 */ | 1728 | /* Cipher 96 */ |
| 1729 | { | 1729 | { |
| 1730 | 1, | 1730 | 1, |
| 1731 | TLS1_TXT_RSA_WITH_SEED_SHA, | 1731 | TLS1_TXT_RSA_WITH_SEED_SHA, |
| 1732 | TLS1_CK_RSA_WITH_SEED_SHA, | 1732 | TLS1_CK_RSA_WITH_SEED_SHA, |
| 1733 | SSL_kRSA, | 1733 | SSL_kRSA, |
| 1734 | SSL_aRSA, | 1734 | SSL_aRSA, |
| 1735 | SSL_SEED, | 1735 | SSL_SEED, |
| 1736 | SSL_SHA1, | 1736 | SSL_SHA1, |
| 1737 | SSL_TLSV1, | 1737 | SSL_TLSV1, |
| 1738 | SSL_NOT_EXP|SSL_MEDIUM, | 1738 | SSL_NOT_EXP|SSL_MEDIUM, |
| 1739 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1739 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1740 | 128, | 1740 | 128, |
| 1741 | 128, | 1741 | 128, |
| 1742 | }, | 1742 | }, |
| 1743 | 1743 | ||
| 1744 | /* Cipher 97 */ | 1744 | /* Cipher 97 */ |
| 1745 | { | 1745 | { |
| 1746 | 0, /* not implemented (non-ephemeral DH) */ | 1746 | 0, /* not implemented (non-ephemeral DH) */ |
| 1747 | TLS1_TXT_DH_DSS_WITH_SEED_SHA, | 1747 | TLS1_TXT_DH_DSS_WITH_SEED_SHA, |
| 1748 | TLS1_CK_DH_DSS_WITH_SEED_SHA, | 1748 | TLS1_CK_DH_DSS_WITH_SEED_SHA, |
| 1749 | SSL_kDHd, | 1749 | SSL_kDHd, |
| 1750 | SSL_aDH, | 1750 | SSL_aDH, |
| 1751 | SSL_SEED, | 1751 | SSL_SEED, |
| 1752 | SSL_SHA1, | 1752 | SSL_SHA1, |
| 1753 | SSL_TLSV1, | 1753 | SSL_TLSV1, |
| 1754 | SSL_NOT_EXP|SSL_MEDIUM, | 1754 | SSL_NOT_EXP|SSL_MEDIUM, |
| 1755 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1755 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1756 | 128, | 1756 | 128, |
| 1757 | 128, | 1757 | 128, |
| 1758 | }, | 1758 | }, |
| 1759 | 1759 | ||
| 1760 | /* Cipher 98 */ | 1760 | /* Cipher 98 */ |
| 1761 | { | 1761 | { |
| 1762 | 0, /* not implemented (non-ephemeral DH) */ | 1762 | 0, /* not implemented (non-ephemeral DH) */ |
| 1763 | TLS1_TXT_DH_RSA_WITH_SEED_SHA, | 1763 | TLS1_TXT_DH_RSA_WITH_SEED_SHA, |
| 1764 | TLS1_CK_DH_RSA_WITH_SEED_SHA, | 1764 | TLS1_CK_DH_RSA_WITH_SEED_SHA, |
| 1765 | SSL_kDHr, | 1765 | SSL_kDHr, |
| 1766 | SSL_aDH, | 1766 | SSL_aDH, |
| 1767 | SSL_SEED, | 1767 | SSL_SEED, |
| 1768 | SSL_SHA1, | 1768 | SSL_SHA1, |
| 1769 | SSL_TLSV1, | 1769 | SSL_TLSV1, |
| 1770 | SSL_NOT_EXP|SSL_MEDIUM, | 1770 | SSL_NOT_EXP|SSL_MEDIUM, |
| 1771 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1771 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1772 | 128, | 1772 | 128, |
| 1773 | 128, | 1773 | 128, |
| 1774 | }, | 1774 | }, |
| 1775 | 1775 | ||
| 1776 | /* Cipher 99 */ | 1776 | /* Cipher 99 */ |
| 1777 | { | 1777 | { |
| 1778 | 1, | 1778 | 1, |
| 1779 | TLS1_TXT_DHE_DSS_WITH_SEED_SHA, | 1779 | TLS1_TXT_DHE_DSS_WITH_SEED_SHA, |
| 1780 | TLS1_CK_DHE_DSS_WITH_SEED_SHA, | 1780 | TLS1_CK_DHE_DSS_WITH_SEED_SHA, |
| 1781 | SSL_kEDH, | 1781 | SSL_kEDH, |
| 1782 | SSL_aDSS, | 1782 | SSL_aDSS, |
| 1783 | SSL_SEED, | 1783 | SSL_SEED, |
| 1784 | SSL_SHA1, | 1784 | SSL_SHA1, |
| 1785 | SSL_TLSV1, | 1785 | SSL_TLSV1, |
| 1786 | SSL_NOT_EXP|SSL_MEDIUM, | 1786 | SSL_NOT_EXP|SSL_MEDIUM, |
| 1787 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1787 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1788 | 128, | 1788 | 128, |
| 1789 | 128, | 1789 | 128, |
| 1790 | }, | 1790 | }, |
| 1791 | 1791 | ||
| 1792 | /* Cipher 9A */ | 1792 | /* Cipher 9A */ |
| 1793 | { | 1793 | { |
| 1794 | 1, | 1794 | 1, |
| 1795 | TLS1_TXT_DHE_RSA_WITH_SEED_SHA, | 1795 | TLS1_TXT_DHE_RSA_WITH_SEED_SHA, |
| 1796 | TLS1_CK_DHE_RSA_WITH_SEED_SHA, | 1796 | TLS1_CK_DHE_RSA_WITH_SEED_SHA, |
| 1797 | SSL_kEDH, | 1797 | SSL_kEDH, |
| 1798 | SSL_aRSA, | 1798 | SSL_aRSA, |
| 1799 | SSL_SEED, | 1799 | SSL_SEED, |
| 1800 | SSL_SHA1, | 1800 | SSL_SHA1, |
| 1801 | SSL_TLSV1, | 1801 | SSL_TLSV1, |
| 1802 | SSL_NOT_EXP|SSL_MEDIUM, | 1802 | SSL_NOT_EXP|SSL_MEDIUM, |
| 1803 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1803 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1804 | 128, | 1804 | 128, |
| 1805 | 128, | 1805 | 128, |
| 1806 | }, | 1806 | }, |
| 1807 | 1807 | ||
| 1808 | /* Cipher 9B */ | 1808 | /* Cipher 9B */ |
| 1809 | { | 1809 | { |
| 1810 | 1, | 1810 | 1, |
| 1811 | TLS1_TXT_ADH_WITH_SEED_SHA, | 1811 | TLS1_TXT_ADH_WITH_SEED_SHA, |
| 1812 | TLS1_CK_ADH_WITH_SEED_SHA, | 1812 | TLS1_CK_ADH_WITH_SEED_SHA, |
| 1813 | SSL_kEDH, | 1813 | SSL_kEDH, |
| 1814 | SSL_aNULL, | 1814 | SSL_aNULL, |
| 1815 | SSL_SEED, | 1815 | SSL_SEED, |
| 1816 | SSL_SHA1, | 1816 | SSL_SHA1, |
| 1817 | SSL_TLSV1, | 1817 | SSL_TLSV1, |
| 1818 | SSL_NOT_EXP|SSL_MEDIUM, | 1818 | SSL_NOT_EXP|SSL_MEDIUM, |
| 1819 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1819 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 1820 | 128, | 1820 | 128, |
| 1821 | 128, | 1821 | 128, |
| 1822 | }, | 1822 | }, |
| 1823 | 1823 | ||
| 1824 | #endif /* OPENSSL_NO_SEED */ | 1824 | #endif /* OPENSSL_NO_SEED */ |
| @@ -1827,741 +1827,741 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
| 1827 | 1827 | ||
| 1828 | /* Cipher 9C */ | 1828 | /* Cipher 9C */ |
| 1829 | { | 1829 | { |
| 1830 | 1, | 1830 | 1, |
| 1831 | TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256, | 1831 | TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256, |
| 1832 | TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, | 1832 | TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, |
| 1833 | SSL_kRSA, | 1833 | SSL_kRSA, |
| 1834 | SSL_aRSA, | 1834 | SSL_aRSA, |
| 1835 | SSL_AES128GCM, | 1835 | SSL_AES128GCM, |
| 1836 | SSL_AEAD, | 1836 | SSL_AEAD, |
| 1837 | SSL_TLSV1_2, | 1837 | SSL_TLSV1_2, |
| 1838 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1838 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1839 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1839 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 1840 | 128, | 1840 | 128, |
| 1841 | 128, | 1841 | 128, |
| 1842 | }, | 1842 | }, |
| 1843 | 1843 | ||
| 1844 | /* Cipher 9D */ | 1844 | /* Cipher 9D */ |
| 1845 | { | 1845 | { |
| 1846 | 1, | 1846 | 1, |
| 1847 | TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384, | 1847 | TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384, |
| 1848 | TLS1_CK_RSA_WITH_AES_256_GCM_SHA384, | 1848 | TLS1_CK_RSA_WITH_AES_256_GCM_SHA384, |
| 1849 | SSL_kRSA, | 1849 | SSL_kRSA, |
| 1850 | SSL_aRSA, | 1850 | SSL_aRSA, |
| 1851 | SSL_AES256GCM, | 1851 | SSL_AES256GCM, |
| 1852 | SSL_AEAD, | 1852 | SSL_AEAD, |
| 1853 | SSL_TLSV1_2, | 1853 | SSL_TLSV1_2, |
| 1854 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1854 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1855 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1855 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 1856 | 256, | 1856 | 256, |
| 1857 | 256, | 1857 | 256, |
| 1858 | }, | 1858 | }, |
| 1859 | 1859 | ||
| 1860 | /* Cipher 9E */ | 1860 | /* Cipher 9E */ |
| 1861 | { | 1861 | { |
| 1862 | 1, | 1862 | 1, |
| 1863 | TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256, | 1863 | TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256, |
| 1864 | TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256, | 1864 | TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256, |
| 1865 | SSL_kEDH, | 1865 | SSL_kEDH, |
| 1866 | SSL_aRSA, | 1866 | SSL_aRSA, |
| 1867 | SSL_AES128GCM, | 1867 | SSL_AES128GCM, |
| 1868 | SSL_AEAD, | 1868 | SSL_AEAD, |
| 1869 | SSL_TLSV1_2, | 1869 | SSL_TLSV1_2, |
| 1870 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1870 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1871 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1871 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 1872 | 128, | 1872 | 128, |
| 1873 | 128, | 1873 | 128, |
| 1874 | }, | 1874 | }, |
| 1875 | 1875 | ||
| 1876 | /* Cipher 9F */ | 1876 | /* Cipher 9F */ |
| 1877 | { | 1877 | { |
| 1878 | 1, | 1878 | 1, |
| 1879 | TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384, | 1879 | TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384, |
| 1880 | TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384, | 1880 | TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384, |
| 1881 | SSL_kEDH, | 1881 | SSL_kEDH, |
| 1882 | SSL_aRSA, | 1882 | SSL_aRSA, |
| 1883 | SSL_AES256GCM, | 1883 | SSL_AES256GCM, |
| 1884 | SSL_AEAD, | 1884 | SSL_AEAD, |
| 1885 | SSL_TLSV1_2, | 1885 | SSL_TLSV1_2, |
| 1886 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1886 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1887 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1887 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 1888 | 256, | 1888 | 256, |
| 1889 | 256, | 1889 | 256, |
| 1890 | }, | 1890 | }, |
| 1891 | 1891 | ||
| 1892 | /* Cipher A0 */ | 1892 | /* Cipher A0 */ |
| 1893 | { | 1893 | { |
| 1894 | 0, | 1894 | 0, |
| 1895 | TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256, | 1895 | TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256, |
| 1896 | TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256, | 1896 | TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256, |
| 1897 | SSL_kDHr, | 1897 | SSL_kDHr, |
| 1898 | SSL_aDH, | 1898 | SSL_aDH, |
| 1899 | SSL_AES128GCM, | 1899 | SSL_AES128GCM, |
| 1900 | SSL_AEAD, | 1900 | SSL_AEAD, |
| 1901 | SSL_TLSV1_2, | 1901 | SSL_TLSV1_2, |
| 1902 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1902 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1903 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1903 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 1904 | 128, | 1904 | 128, |
| 1905 | 128, | 1905 | 128, |
| 1906 | }, | 1906 | }, |
| 1907 | 1907 | ||
| 1908 | /* Cipher A1 */ | 1908 | /* Cipher A1 */ |
| 1909 | { | 1909 | { |
| 1910 | 0, | 1910 | 0, |
| 1911 | TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384, | 1911 | TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384, |
| 1912 | TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384, | 1912 | TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384, |
| 1913 | SSL_kDHr, | 1913 | SSL_kDHr, |
| 1914 | SSL_aDH, | 1914 | SSL_aDH, |
| 1915 | SSL_AES256GCM, | 1915 | SSL_AES256GCM, |
| 1916 | SSL_AEAD, | 1916 | SSL_AEAD, |
| 1917 | SSL_TLSV1_2, | 1917 | SSL_TLSV1_2, |
| 1918 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1918 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1919 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1919 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 1920 | 256, | 1920 | 256, |
| 1921 | 256, | 1921 | 256, |
| 1922 | }, | 1922 | }, |
| 1923 | 1923 | ||
| 1924 | /* Cipher A2 */ | 1924 | /* Cipher A2 */ |
| 1925 | { | 1925 | { |
| 1926 | 1, | 1926 | 1, |
| 1927 | TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256, | 1927 | TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256, |
| 1928 | TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256, | 1928 | TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256, |
| 1929 | SSL_kEDH, | 1929 | SSL_kEDH, |
| 1930 | SSL_aDSS, | 1930 | SSL_aDSS, |
| 1931 | SSL_AES128GCM, | 1931 | SSL_AES128GCM, |
| 1932 | SSL_AEAD, | 1932 | SSL_AEAD, |
| 1933 | SSL_TLSV1_2, | 1933 | SSL_TLSV1_2, |
| 1934 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1934 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1935 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1935 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 1936 | 128, | 1936 | 128, |
| 1937 | 128, | 1937 | 128, |
| 1938 | }, | 1938 | }, |
| 1939 | 1939 | ||
| 1940 | /* Cipher A3 */ | 1940 | /* Cipher A3 */ |
| 1941 | { | 1941 | { |
| 1942 | 1, | 1942 | 1, |
| 1943 | TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384, | 1943 | TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384, |
| 1944 | TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384, | 1944 | TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384, |
| 1945 | SSL_kEDH, | 1945 | SSL_kEDH, |
| 1946 | SSL_aDSS, | 1946 | SSL_aDSS, |
| 1947 | SSL_AES256GCM, | 1947 | SSL_AES256GCM, |
| 1948 | SSL_AEAD, | 1948 | SSL_AEAD, |
| 1949 | SSL_TLSV1_2, | 1949 | SSL_TLSV1_2, |
| 1950 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1950 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1951 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1951 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 1952 | 256, | 1952 | 256, |
| 1953 | 256, | 1953 | 256, |
| 1954 | }, | 1954 | }, |
| 1955 | 1955 | ||
| 1956 | /* Cipher A4 */ | 1956 | /* Cipher A4 */ |
| 1957 | { | 1957 | { |
| 1958 | 0, | 1958 | 0, |
| 1959 | TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256, | 1959 | TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256, |
| 1960 | TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256, | 1960 | TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256, |
| 1961 | SSL_kDHd, | 1961 | SSL_kDHd, |
| 1962 | SSL_aDH, | 1962 | SSL_aDH, |
| 1963 | SSL_AES128GCM, | 1963 | SSL_AES128GCM, |
| 1964 | SSL_AEAD, | 1964 | SSL_AEAD, |
| 1965 | SSL_TLSV1_2, | 1965 | SSL_TLSV1_2, |
| 1966 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1966 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1967 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1967 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 1968 | 128, | 1968 | 128, |
| 1969 | 128, | 1969 | 128, |
| 1970 | }, | 1970 | }, |
| 1971 | 1971 | ||
| 1972 | /* Cipher A5 */ | 1972 | /* Cipher A5 */ |
| 1973 | { | 1973 | { |
| 1974 | 0, | 1974 | 0, |
| 1975 | TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384, | 1975 | TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384, |
| 1976 | TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384, | 1976 | TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384, |
| 1977 | SSL_kDHd, | 1977 | SSL_kDHd, |
| 1978 | SSL_aDH, | 1978 | SSL_aDH, |
| 1979 | SSL_AES256GCM, | 1979 | SSL_AES256GCM, |
| 1980 | SSL_AEAD, | 1980 | SSL_AEAD, |
| 1981 | SSL_TLSV1_2, | 1981 | SSL_TLSV1_2, |
| 1982 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1982 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1983 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1983 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 1984 | 256, | 1984 | 256, |
| 1985 | 256, | 1985 | 256, |
| 1986 | }, | 1986 | }, |
| 1987 | 1987 | ||
| 1988 | /* Cipher A6 */ | 1988 | /* Cipher A6 */ |
| 1989 | { | 1989 | { |
| 1990 | 1, | 1990 | 1, |
| 1991 | TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256, | 1991 | TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256, |
| 1992 | TLS1_CK_ADH_WITH_AES_128_GCM_SHA256, | 1992 | TLS1_CK_ADH_WITH_AES_128_GCM_SHA256, |
| 1993 | SSL_kEDH, | 1993 | SSL_kEDH, |
| 1994 | SSL_aNULL, | 1994 | SSL_aNULL, |
| 1995 | SSL_AES128GCM, | 1995 | SSL_AES128GCM, |
| 1996 | SSL_AEAD, | 1996 | SSL_AEAD, |
| 1997 | SSL_TLSV1_2, | 1997 | SSL_TLSV1_2, |
| 1998 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1998 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 1999 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1999 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2000 | 128, | 2000 | 128, |
| 2001 | 128, | 2001 | 128, |
| 2002 | }, | 2002 | }, |
| 2003 | 2003 | ||
| 2004 | /* Cipher A7 */ | 2004 | /* Cipher A7 */ |
| 2005 | { | 2005 | { |
| 2006 | 1, | 2006 | 1, |
| 2007 | TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384, | 2007 | TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384, |
| 2008 | TLS1_CK_ADH_WITH_AES_256_GCM_SHA384, | 2008 | TLS1_CK_ADH_WITH_AES_256_GCM_SHA384, |
| 2009 | SSL_kEDH, | 2009 | SSL_kEDH, |
| 2010 | SSL_aNULL, | 2010 | SSL_aNULL, |
| 2011 | SSL_AES256GCM, | 2011 | SSL_AES256GCM, |
| 2012 | SSL_AEAD, | 2012 | SSL_AEAD, |
| 2013 | SSL_TLSV1_2, | 2013 | SSL_TLSV1_2, |
| 2014 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2014 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2015 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2015 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2016 | 256, | 2016 | 256, |
| 2017 | 256, | 2017 | 256, |
| 2018 | }, | 2018 | }, |
| 2019 | 2019 | ||
| 2020 | #ifndef OPENSSL_NO_ECDH | 2020 | #ifndef OPENSSL_NO_ECDH |
| 2021 | /* Cipher C001 */ | 2021 | /* Cipher C001 */ |
| 2022 | { | 2022 | { |
| 2023 | 1, | 2023 | 1, |
| 2024 | TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA, | 2024 | TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA, |
| 2025 | TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA, | 2025 | TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA, |
| 2026 | SSL_kECDHe, | 2026 | SSL_kECDHe, |
| 2027 | SSL_aECDH, | 2027 | SSL_aECDH, |
| 2028 | SSL_eNULL, | 2028 | SSL_eNULL, |
| 2029 | SSL_SHA1, | 2029 | SSL_SHA1, |
| 2030 | SSL_TLSV1, | 2030 | SSL_TLSV1, |
| 2031 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2031 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
| 2032 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2032 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2033 | 0, | 2033 | 0, |
| 2034 | 0, | 2034 | 0, |
| 2035 | }, | 2035 | }, |
| 2036 | 2036 | ||
| 2037 | /* Cipher C002 */ | 2037 | /* Cipher C002 */ |
| 2038 | { | 2038 | { |
| 2039 | 1, | 2039 | 1, |
| 2040 | TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA, | 2040 | TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA, |
| 2041 | TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA, | 2041 | TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA, |
| 2042 | SSL_kECDHe, | 2042 | SSL_kECDHe, |
| 2043 | SSL_aECDH, | 2043 | SSL_aECDH, |
| 2044 | SSL_RC4, | 2044 | SSL_RC4, |
| 2045 | SSL_SHA1, | 2045 | SSL_SHA1, |
| 2046 | SSL_TLSV1, | 2046 | SSL_TLSV1, |
| 2047 | SSL_NOT_EXP|SSL_MEDIUM, | 2047 | SSL_NOT_EXP|SSL_MEDIUM, |
| 2048 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2048 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2049 | 128, | 2049 | 128, |
| 2050 | 128, | 2050 | 128, |
| 2051 | }, | 2051 | }, |
| 2052 | 2052 | ||
| 2053 | /* Cipher C003 */ | 2053 | /* Cipher C003 */ |
| 2054 | { | 2054 | { |
| 2055 | 1, | 2055 | 1, |
| 2056 | TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, | 2056 | TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, |
| 2057 | TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, | 2057 | TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, |
| 2058 | SSL_kECDHe, | 2058 | SSL_kECDHe, |
| 2059 | SSL_aECDH, | 2059 | SSL_aECDH, |
| 2060 | SSL_3DES, | 2060 | SSL_3DES, |
| 2061 | SSL_SHA1, | 2061 | SSL_SHA1, |
| 2062 | SSL_TLSV1, | 2062 | SSL_TLSV1, |
| 2063 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2063 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2064 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2064 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2065 | 168, | 2065 | 168, |
| 2066 | 168, | 2066 | 168, |
| 2067 | }, | 2067 | }, |
| 2068 | 2068 | ||
| 2069 | /* Cipher C004 */ | 2069 | /* Cipher C004 */ |
| 2070 | { | 2070 | { |
| 2071 | 1, | 2071 | 1, |
| 2072 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA, | 2072 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA, |
| 2073 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA, | 2073 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA, |
| 2074 | SSL_kECDHe, | 2074 | SSL_kECDHe, |
| 2075 | SSL_aECDH, | 2075 | SSL_aECDH, |
| 2076 | SSL_AES128, | 2076 | SSL_AES128, |
| 2077 | SSL_SHA1, | 2077 | SSL_SHA1, |
| 2078 | SSL_TLSV1, | 2078 | SSL_TLSV1, |
| 2079 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2079 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2080 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2080 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2081 | 128, | 2081 | 128, |
| 2082 | 128, | 2082 | 128, |
| 2083 | }, | 2083 | }, |
| 2084 | 2084 | ||
| 2085 | /* Cipher C005 */ | 2085 | /* Cipher C005 */ |
| 2086 | { | 2086 | { |
| 2087 | 1, | 2087 | 1, |
| 2088 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA, | 2088 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA, |
| 2089 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA, | 2089 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA, |
| 2090 | SSL_kECDHe, | 2090 | SSL_kECDHe, |
| 2091 | SSL_aECDH, | 2091 | SSL_aECDH, |
| 2092 | SSL_AES256, | 2092 | SSL_AES256, |
| 2093 | SSL_SHA1, | 2093 | SSL_SHA1, |
| 2094 | SSL_TLSV1, | 2094 | SSL_TLSV1, |
| 2095 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2095 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2096 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2096 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2097 | 256, | 2097 | 256, |
| 2098 | 256, | 2098 | 256, |
| 2099 | }, | 2099 | }, |
| 2100 | 2100 | ||
| 2101 | /* Cipher C006 */ | 2101 | /* Cipher C006 */ |
| 2102 | { | 2102 | { |
| 2103 | 1, | 2103 | 1, |
| 2104 | TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA, | 2104 | TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA, |
| 2105 | TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA, | 2105 | TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA, |
| 2106 | SSL_kEECDH, | 2106 | SSL_kEECDH, |
| 2107 | SSL_aECDSA, | 2107 | SSL_aECDSA, |
| 2108 | SSL_eNULL, | 2108 | SSL_eNULL, |
| 2109 | SSL_SHA1, | 2109 | SSL_SHA1, |
| 2110 | SSL_TLSV1, | 2110 | SSL_TLSV1, |
| 2111 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2111 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
| 2112 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2112 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2113 | 0, | 2113 | 0, |
| 2114 | 0, | 2114 | 0, |
| 2115 | }, | 2115 | }, |
| 2116 | 2116 | ||
| 2117 | /* Cipher C007 */ | 2117 | /* Cipher C007 */ |
| 2118 | { | 2118 | { |
| 2119 | 1, | 2119 | 1, |
| 2120 | TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA, | 2120 | TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA, |
| 2121 | TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA, | 2121 | TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA, |
| 2122 | SSL_kEECDH, | 2122 | SSL_kEECDH, |
| 2123 | SSL_aECDSA, | 2123 | SSL_aECDSA, |
| 2124 | SSL_RC4, | 2124 | SSL_RC4, |
| 2125 | SSL_SHA1, | 2125 | SSL_SHA1, |
| 2126 | SSL_TLSV1, | 2126 | SSL_TLSV1, |
| 2127 | SSL_NOT_EXP|SSL_MEDIUM, | 2127 | SSL_NOT_EXP|SSL_MEDIUM, |
| 2128 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2128 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2129 | 128, | 2129 | 128, |
| 2130 | 128, | 2130 | 128, |
| 2131 | }, | 2131 | }, |
| 2132 | 2132 | ||
| 2133 | /* Cipher C008 */ | 2133 | /* Cipher C008 */ |
| 2134 | { | 2134 | { |
| 2135 | 1, | 2135 | 1, |
| 2136 | TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, | 2136 | TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, |
| 2137 | TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, | 2137 | TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, |
| 2138 | SSL_kEECDH, | 2138 | SSL_kEECDH, |
| 2139 | SSL_aECDSA, | 2139 | SSL_aECDSA, |
| 2140 | SSL_3DES, | 2140 | SSL_3DES, |
| 2141 | SSL_SHA1, | 2141 | SSL_SHA1, |
| 2142 | SSL_TLSV1, | 2142 | SSL_TLSV1, |
| 2143 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2143 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2144 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2144 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2145 | 168, | 2145 | 168, |
| 2146 | 168, | 2146 | 168, |
| 2147 | }, | 2147 | }, |
| 2148 | 2148 | ||
| 2149 | /* Cipher C009 */ | 2149 | /* Cipher C009 */ |
| 2150 | { | 2150 | { |
| 2151 | 1, | 2151 | 1, |
| 2152 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, | 2152 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, |
| 2153 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, | 2153 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, |
| 2154 | SSL_kEECDH, | 2154 | SSL_kEECDH, |
| 2155 | SSL_aECDSA, | 2155 | SSL_aECDSA, |
| 2156 | SSL_AES128, | 2156 | SSL_AES128, |
| 2157 | SSL_SHA1, | 2157 | SSL_SHA1, |
| 2158 | SSL_TLSV1, | 2158 | SSL_TLSV1, |
| 2159 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2159 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2160 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2160 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2161 | 128, | 2161 | 128, |
| 2162 | 128, | 2162 | 128, |
| 2163 | }, | 2163 | }, |
| 2164 | 2164 | ||
| 2165 | /* Cipher C00A */ | 2165 | /* Cipher C00A */ |
| 2166 | { | 2166 | { |
| 2167 | 1, | 2167 | 1, |
| 2168 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, | 2168 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, |
| 2169 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, | 2169 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, |
| 2170 | SSL_kEECDH, | 2170 | SSL_kEECDH, |
| 2171 | SSL_aECDSA, | 2171 | SSL_aECDSA, |
| 2172 | SSL_AES256, | 2172 | SSL_AES256, |
| 2173 | SSL_SHA1, | 2173 | SSL_SHA1, |
| 2174 | SSL_TLSV1, | 2174 | SSL_TLSV1, |
| 2175 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2175 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2176 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2176 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2177 | 256, | 2177 | 256, |
| 2178 | 256, | 2178 | 256, |
| 2179 | }, | 2179 | }, |
| 2180 | 2180 | ||
| 2181 | /* Cipher C00B */ | 2181 | /* Cipher C00B */ |
| 2182 | { | 2182 | { |
| 2183 | 1, | 2183 | 1, |
| 2184 | TLS1_TXT_ECDH_RSA_WITH_NULL_SHA, | 2184 | TLS1_TXT_ECDH_RSA_WITH_NULL_SHA, |
| 2185 | TLS1_CK_ECDH_RSA_WITH_NULL_SHA, | 2185 | TLS1_CK_ECDH_RSA_WITH_NULL_SHA, |
| 2186 | SSL_kECDHr, | 2186 | SSL_kECDHr, |
| 2187 | SSL_aECDH, | 2187 | SSL_aECDH, |
| 2188 | SSL_eNULL, | 2188 | SSL_eNULL, |
| 2189 | SSL_SHA1, | 2189 | SSL_SHA1, |
| 2190 | SSL_TLSV1, | 2190 | SSL_TLSV1, |
| 2191 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2191 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
| 2192 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2192 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2193 | 0, | 2193 | 0, |
| 2194 | 0, | 2194 | 0, |
| 2195 | }, | 2195 | }, |
| 2196 | 2196 | ||
| 2197 | /* Cipher C00C */ | 2197 | /* Cipher C00C */ |
| 2198 | { | 2198 | { |
| 2199 | 1, | 2199 | 1, |
| 2200 | TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA, | 2200 | TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA, |
| 2201 | TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA, | 2201 | TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA, |
| 2202 | SSL_kECDHr, | 2202 | SSL_kECDHr, |
| 2203 | SSL_aECDH, | 2203 | SSL_aECDH, |
| 2204 | SSL_RC4, | 2204 | SSL_RC4, |
| 2205 | SSL_SHA1, | 2205 | SSL_SHA1, |
| 2206 | SSL_TLSV1, | 2206 | SSL_TLSV1, |
| 2207 | SSL_NOT_EXP|SSL_MEDIUM, | 2207 | SSL_NOT_EXP|SSL_MEDIUM, |
| 2208 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2208 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2209 | 128, | 2209 | 128, |
| 2210 | 128, | 2210 | 128, |
| 2211 | }, | 2211 | }, |
| 2212 | 2212 | ||
| 2213 | /* Cipher C00D */ | 2213 | /* Cipher C00D */ |
| 2214 | { | 2214 | { |
| 2215 | 1, | 2215 | 1, |
| 2216 | TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA, | 2216 | TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA, |
| 2217 | TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA, | 2217 | TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA, |
| 2218 | SSL_kECDHr, | 2218 | SSL_kECDHr, |
| 2219 | SSL_aECDH, | 2219 | SSL_aECDH, |
| 2220 | SSL_3DES, | 2220 | SSL_3DES, |
| 2221 | SSL_SHA1, | 2221 | SSL_SHA1, |
| 2222 | SSL_TLSV1, | 2222 | SSL_TLSV1, |
| 2223 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2223 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2224 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2224 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2225 | 168, | 2225 | 168, |
| 2226 | 168, | 2226 | 168, |
| 2227 | }, | 2227 | }, |
| 2228 | 2228 | ||
| 2229 | /* Cipher C00E */ | 2229 | /* Cipher C00E */ |
| 2230 | { | 2230 | { |
| 2231 | 1, | 2231 | 1, |
| 2232 | TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA, | 2232 | TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA, |
| 2233 | TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA, | 2233 | TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA, |
| 2234 | SSL_kECDHr, | 2234 | SSL_kECDHr, |
| 2235 | SSL_aECDH, | 2235 | SSL_aECDH, |
| 2236 | SSL_AES128, | 2236 | SSL_AES128, |
| 2237 | SSL_SHA1, | 2237 | SSL_SHA1, |
| 2238 | SSL_TLSV1, | 2238 | SSL_TLSV1, |
| 2239 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2239 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2240 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2240 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2241 | 128, | 2241 | 128, |
| 2242 | 128, | 2242 | 128, |
| 2243 | }, | 2243 | }, |
| 2244 | 2244 | ||
| 2245 | /* Cipher C00F */ | 2245 | /* Cipher C00F */ |
| 2246 | { | 2246 | { |
| 2247 | 1, | 2247 | 1, |
| 2248 | TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA, | 2248 | TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA, |
| 2249 | TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA, | 2249 | TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA, |
| 2250 | SSL_kECDHr, | 2250 | SSL_kECDHr, |
| 2251 | SSL_aECDH, | 2251 | SSL_aECDH, |
| 2252 | SSL_AES256, | 2252 | SSL_AES256, |
| 2253 | SSL_SHA1, | 2253 | SSL_SHA1, |
| 2254 | SSL_TLSV1, | 2254 | SSL_TLSV1, |
| 2255 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2255 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2256 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2256 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2257 | 256, | 2257 | 256, |
| 2258 | 256, | 2258 | 256, |
| 2259 | }, | 2259 | }, |
| 2260 | 2260 | ||
| 2261 | /* Cipher C010 */ | 2261 | /* Cipher C010 */ |
| 2262 | { | 2262 | { |
| 2263 | 1, | 2263 | 1, |
| 2264 | TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA, | 2264 | TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA, |
| 2265 | TLS1_CK_ECDHE_RSA_WITH_NULL_SHA, | 2265 | TLS1_CK_ECDHE_RSA_WITH_NULL_SHA, |
| 2266 | SSL_kEECDH, | 2266 | SSL_kEECDH, |
| 2267 | SSL_aRSA, | 2267 | SSL_aRSA, |
| 2268 | SSL_eNULL, | 2268 | SSL_eNULL, |
| 2269 | SSL_SHA1, | 2269 | SSL_SHA1, |
| 2270 | SSL_TLSV1, | 2270 | SSL_TLSV1, |
| 2271 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2271 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
| 2272 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2272 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2273 | 0, | 2273 | 0, |
| 2274 | 0, | 2274 | 0, |
| 2275 | }, | 2275 | }, |
| 2276 | 2276 | ||
| 2277 | /* Cipher C011 */ | 2277 | /* Cipher C011 */ |
| 2278 | { | 2278 | { |
| 2279 | 1, | 2279 | 1, |
| 2280 | TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA, | 2280 | TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA, |
| 2281 | TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA, | 2281 | TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA, |
| 2282 | SSL_kEECDH, | 2282 | SSL_kEECDH, |
| 2283 | SSL_aRSA, | 2283 | SSL_aRSA, |
| 2284 | SSL_RC4, | 2284 | SSL_RC4, |
| 2285 | SSL_SHA1, | 2285 | SSL_SHA1, |
| 2286 | SSL_TLSV1, | 2286 | SSL_TLSV1, |
| 2287 | SSL_NOT_EXP|SSL_MEDIUM, | 2287 | SSL_NOT_EXP|SSL_MEDIUM, |
| 2288 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2288 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2289 | 128, | 2289 | 128, |
| 2290 | 128, | 2290 | 128, |
| 2291 | }, | 2291 | }, |
| 2292 | 2292 | ||
| 2293 | /* Cipher C012 */ | 2293 | /* Cipher C012 */ |
| 2294 | { | 2294 | { |
| 2295 | 1, | 2295 | 1, |
| 2296 | TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA, | 2296 | TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA, |
| 2297 | TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA, | 2297 | TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA, |
| 2298 | SSL_kEECDH, | 2298 | SSL_kEECDH, |
| 2299 | SSL_aRSA, | 2299 | SSL_aRSA, |
| 2300 | SSL_3DES, | 2300 | SSL_3DES, |
| 2301 | SSL_SHA1, | 2301 | SSL_SHA1, |
| 2302 | SSL_TLSV1, | 2302 | SSL_TLSV1, |
| 2303 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2303 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2304 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2304 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2305 | 168, | 2305 | 168, |
| 2306 | 168, | 2306 | 168, |
| 2307 | }, | 2307 | }, |
| 2308 | 2308 | ||
| 2309 | /* Cipher C013 */ | 2309 | /* Cipher C013 */ |
| 2310 | { | 2310 | { |
| 2311 | 1, | 2311 | 1, |
| 2312 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA, | 2312 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA, |
| 2313 | TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA, | 2313 | TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA, |
| 2314 | SSL_kEECDH, | 2314 | SSL_kEECDH, |
| 2315 | SSL_aRSA, | 2315 | SSL_aRSA, |
| 2316 | SSL_AES128, | 2316 | SSL_AES128, |
| 2317 | SSL_SHA1, | 2317 | SSL_SHA1, |
| 2318 | SSL_TLSV1, | 2318 | SSL_TLSV1, |
| 2319 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2319 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2320 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2320 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2321 | 128, | 2321 | 128, |
| 2322 | 128, | 2322 | 128, |
| 2323 | }, | 2323 | }, |
| 2324 | 2324 | ||
| 2325 | /* Cipher C014 */ | 2325 | /* Cipher C014 */ |
| 2326 | { | 2326 | { |
| 2327 | 1, | 2327 | 1, |
| 2328 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA, | 2328 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA, |
| 2329 | TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA, | 2329 | TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA, |
| 2330 | SSL_kEECDH, | 2330 | SSL_kEECDH, |
| 2331 | SSL_aRSA, | 2331 | SSL_aRSA, |
| 2332 | SSL_AES256, | 2332 | SSL_AES256, |
| 2333 | SSL_SHA1, | 2333 | SSL_SHA1, |
| 2334 | SSL_TLSV1, | 2334 | SSL_TLSV1, |
| 2335 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2335 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2336 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2336 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2337 | 256, | 2337 | 256, |
| 2338 | 256, | 2338 | 256, |
| 2339 | }, | 2339 | }, |
| 2340 | 2340 | ||
| 2341 | /* Cipher C015 */ | 2341 | /* Cipher C015 */ |
| 2342 | { | 2342 | { |
| 2343 | 1, | 2343 | 1, |
| 2344 | TLS1_TXT_ECDH_anon_WITH_NULL_SHA, | 2344 | TLS1_TXT_ECDH_anon_WITH_NULL_SHA, |
| 2345 | TLS1_CK_ECDH_anon_WITH_NULL_SHA, | 2345 | TLS1_CK_ECDH_anon_WITH_NULL_SHA, |
| 2346 | SSL_kEECDH, | 2346 | SSL_kEECDH, |
| 2347 | SSL_aNULL, | 2347 | SSL_aNULL, |
| 2348 | SSL_eNULL, | 2348 | SSL_eNULL, |
| 2349 | SSL_SHA1, | 2349 | SSL_SHA1, |
| 2350 | SSL_TLSV1, | 2350 | SSL_TLSV1, |
| 2351 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2351 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
| 2352 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2352 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2353 | 0, | 2353 | 0, |
| 2354 | 0, | 2354 | 0, |
| 2355 | }, | 2355 | }, |
| 2356 | 2356 | ||
| 2357 | /* Cipher C016 */ | 2357 | /* Cipher C016 */ |
| 2358 | { | 2358 | { |
| 2359 | 1, | 2359 | 1, |
| 2360 | TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA, | 2360 | TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA, |
| 2361 | TLS1_CK_ECDH_anon_WITH_RC4_128_SHA, | 2361 | TLS1_CK_ECDH_anon_WITH_RC4_128_SHA, |
| 2362 | SSL_kEECDH, | 2362 | SSL_kEECDH, |
| 2363 | SSL_aNULL, | 2363 | SSL_aNULL, |
| 2364 | SSL_RC4, | 2364 | SSL_RC4, |
| 2365 | SSL_SHA1, | 2365 | SSL_SHA1, |
| 2366 | SSL_TLSV1, | 2366 | SSL_TLSV1, |
| 2367 | SSL_NOT_EXP|SSL_MEDIUM, | 2367 | SSL_NOT_EXP|SSL_MEDIUM, |
| 2368 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2368 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2369 | 128, | 2369 | 128, |
| 2370 | 128, | 2370 | 128, |
| 2371 | }, | 2371 | }, |
| 2372 | 2372 | ||
| 2373 | /* Cipher C017 */ | 2373 | /* Cipher C017 */ |
| 2374 | { | 2374 | { |
| 2375 | 1, | 2375 | 1, |
| 2376 | TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA, | 2376 | TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA, |
| 2377 | TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA, | 2377 | TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA, |
| 2378 | SSL_kEECDH, | 2378 | SSL_kEECDH, |
| 2379 | SSL_aNULL, | 2379 | SSL_aNULL, |
| 2380 | SSL_3DES, | 2380 | SSL_3DES, |
| 2381 | SSL_SHA1, | 2381 | SSL_SHA1, |
| 2382 | SSL_TLSV1, | 2382 | SSL_TLSV1, |
| 2383 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2383 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2384 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2384 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2385 | 168, | 2385 | 168, |
| 2386 | 168, | 2386 | 168, |
| 2387 | }, | 2387 | }, |
| 2388 | 2388 | ||
| 2389 | /* Cipher C018 */ | 2389 | /* Cipher C018 */ |
| 2390 | { | 2390 | { |
| 2391 | 1, | 2391 | 1, |
| 2392 | TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA, | 2392 | TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA, |
| 2393 | TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA, | 2393 | TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA, |
| 2394 | SSL_kEECDH, | 2394 | SSL_kEECDH, |
| 2395 | SSL_aNULL, | 2395 | SSL_aNULL, |
| 2396 | SSL_AES128, | 2396 | SSL_AES128, |
| 2397 | SSL_SHA1, | 2397 | SSL_SHA1, |
| 2398 | SSL_TLSV1, | 2398 | SSL_TLSV1, |
| 2399 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2399 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2400 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2400 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2401 | 128, | 2401 | 128, |
| 2402 | 128, | 2402 | 128, |
| 2403 | }, | 2403 | }, |
| 2404 | 2404 | ||
| 2405 | /* Cipher C019 */ | 2405 | /* Cipher C019 */ |
| 2406 | { | 2406 | { |
| 2407 | 1, | 2407 | 1, |
| 2408 | TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA, | 2408 | TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA, |
| 2409 | TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA, | 2409 | TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA, |
| 2410 | SSL_kEECDH, | 2410 | SSL_kEECDH, |
| 2411 | SSL_aNULL, | 2411 | SSL_aNULL, |
| 2412 | SSL_AES256, | 2412 | SSL_AES256, |
| 2413 | SSL_SHA1, | 2413 | SSL_SHA1, |
| 2414 | SSL_TLSV1, | 2414 | SSL_TLSV1, |
| 2415 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2415 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2416 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2416 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2417 | 256, | 2417 | 256, |
| 2418 | 256, | 2418 | 256, |
| 2419 | }, | 2419 | }, |
| 2420 | #endif /* OPENSSL_NO_ECDH */ | 2420 | #endif /* OPENSSL_NO_ECDH */ |
| 2421 | 2421 | ||
| 2422 | #ifndef OPENSSL_NO_SRP | 2422 | #ifndef OPENSSL_NO_SRP |
| 2423 | /* Cipher C01A */ | 2423 | /* Cipher C01A */ |
| 2424 | { | 2424 | { |
| 2425 | 1, | 2425 | 1, |
| 2426 | TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA, | 2426 | TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA, |
| 2427 | TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA, | 2427 | TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA, |
| 2428 | SSL_kSRP, | 2428 | SSL_kSRP, |
| 2429 | SSL_aNULL, | 2429 | SSL_aNULL, |
| 2430 | SSL_3DES, | 2430 | SSL_3DES, |
| 2431 | SSL_SHA1, | 2431 | SSL_SHA1, |
| 2432 | SSL_TLSV1, | 2432 | SSL_TLSV1, |
| 2433 | SSL_NOT_EXP|SSL_HIGH, | 2433 | SSL_NOT_EXP|SSL_HIGH, |
| 2434 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2434 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2435 | 168, | 2435 | 168, |
| 2436 | 168, | 2436 | 168, |
| 2437 | }, | 2437 | }, |
| 2438 | 2438 | ||
| 2439 | /* Cipher C01B */ | 2439 | /* Cipher C01B */ |
| 2440 | { | 2440 | { |
| 2441 | 1, | 2441 | 1, |
| 2442 | TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, | 2442 | TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, |
| 2443 | TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, | 2443 | TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, |
| 2444 | SSL_kSRP, | 2444 | SSL_kSRP, |
| 2445 | SSL_aRSA, | 2445 | SSL_aRSA, |
| 2446 | SSL_3DES, | 2446 | SSL_3DES, |
| 2447 | SSL_SHA1, | 2447 | SSL_SHA1, |
| 2448 | SSL_TLSV1, | 2448 | SSL_TLSV1, |
| 2449 | SSL_NOT_EXP|SSL_HIGH, | 2449 | SSL_NOT_EXP|SSL_HIGH, |
| 2450 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2450 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2451 | 168, | 2451 | 168, |
| 2452 | 168, | 2452 | 168, |
| 2453 | }, | 2453 | }, |
| 2454 | 2454 | ||
| 2455 | /* Cipher C01C */ | 2455 | /* Cipher C01C */ |
| 2456 | { | 2456 | { |
| 2457 | 1, | 2457 | 1, |
| 2458 | TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, | 2458 | TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, |
| 2459 | TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, | 2459 | TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, |
| 2460 | SSL_kSRP, | 2460 | SSL_kSRP, |
| 2461 | SSL_aDSS, | 2461 | SSL_aDSS, |
| 2462 | SSL_3DES, | 2462 | SSL_3DES, |
| 2463 | SSL_SHA1, | 2463 | SSL_SHA1, |
| 2464 | SSL_TLSV1, | 2464 | SSL_TLSV1, |
| 2465 | SSL_NOT_EXP|SSL_HIGH, | 2465 | SSL_NOT_EXP|SSL_HIGH, |
| 2466 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2466 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2467 | 168, | 2467 | 168, |
| 2468 | 168, | 2468 | 168, |
| 2469 | }, | 2469 | }, |
| 2470 | 2470 | ||
| 2471 | /* Cipher C01D */ | 2471 | /* Cipher C01D */ |
| 2472 | { | 2472 | { |
| 2473 | 1, | 2473 | 1, |
| 2474 | TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA, | 2474 | TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA, |
| 2475 | TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA, | 2475 | TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA, |
| 2476 | SSL_kSRP, | 2476 | SSL_kSRP, |
| 2477 | SSL_aNULL, | 2477 | SSL_aNULL, |
| 2478 | SSL_AES128, | 2478 | SSL_AES128, |
| 2479 | SSL_SHA1, | 2479 | SSL_SHA1, |
| 2480 | SSL_TLSV1, | 2480 | SSL_TLSV1, |
| 2481 | SSL_NOT_EXP|SSL_HIGH, | 2481 | SSL_NOT_EXP|SSL_HIGH, |
| 2482 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2482 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2483 | 128, | 2483 | 128, |
| 2484 | 128, | 2484 | 128, |
| 2485 | }, | 2485 | }, |
| 2486 | 2486 | ||
| 2487 | /* Cipher C01E */ | 2487 | /* Cipher C01E */ |
| 2488 | { | 2488 | { |
| 2489 | 1, | 2489 | 1, |
| 2490 | TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, | 2490 | TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, |
| 2491 | TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, | 2491 | TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, |
| 2492 | SSL_kSRP, | 2492 | SSL_kSRP, |
| 2493 | SSL_aRSA, | 2493 | SSL_aRSA, |
| 2494 | SSL_AES128, | 2494 | SSL_AES128, |
| 2495 | SSL_SHA1, | 2495 | SSL_SHA1, |
| 2496 | SSL_TLSV1, | 2496 | SSL_TLSV1, |
| 2497 | SSL_NOT_EXP|SSL_HIGH, | 2497 | SSL_NOT_EXP|SSL_HIGH, |
| 2498 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2498 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2499 | 128, | 2499 | 128, |
| 2500 | 128, | 2500 | 128, |
| 2501 | }, | 2501 | }, |
| 2502 | 2502 | ||
| 2503 | /* Cipher C01F */ | 2503 | /* Cipher C01F */ |
| 2504 | { | 2504 | { |
| 2505 | 1, | 2505 | 1, |
| 2506 | TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, | 2506 | TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, |
| 2507 | TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, | 2507 | TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, |
| 2508 | SSL_kSRP, | 2508 | SSL_kSRP, |
| 2509 | SSL_aDSS, | 2509 | SSL_aDSS, |
| 2510 | SSL_AES128, | 2510 | SSL_AES128, |
| 2511 | SSL_SHA1, | 2511 | SSL_SHA1, |
| 2512 | SSL_TLSV1, | 2512 | SSL_TLSV1, |
| 2513 | SSL_NOT_EXP|SSL_HIGH, | 2513 | SSL_NOT_EXP|SSL_HIGH, |
| 2514 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2514 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2515 | 128, | 2515 | 128, |
| 2516 | 128, | 2516 | 128, |
| 2517 | }, | 2517 | }, |
| 2518 | 2518 | ||
| 2519 | /* Cipher C020 */ | 2519 | /* Cipher C020 */ |
| 2520 | { | 2520 | { |
| 2521 | 1, | 2521 | 1, |
| 2522 | TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA, | 2522 | TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA, |
| 2523 | TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA, | 2523 | TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA, |
| 2524 | SSL_kSRP, | 2524 | SSL_kSRP, |
| 2525 | SSL_aNULL, | 2525 | SSL_aNULL, |
| 2526 | SSL_AES256, | 2526 | SSL_AES256, |
| 2527 | SSL_SHA1, | 2527 | SSL_SHA1, |
| 2528 | SSL_TLSV1, | 2528 | SSL_TLSV1, |
| 2529 | SSL_NOT_EXP|SSL_HIGH, | 2529 | SSL_NOT_EXP|SSL_HIGH, |
| 2530 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2530 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2531 | 256, | 2531 | 256, |
| 2532 | 256, | 2532 | 256, |
| 2533 | }, | 2533 | }, |
| 2534 | 2534 | ||
| 2535 | /* Cipher C021 */ | 2535 | /* Cipher C021 */ |
| 2536 | { | 2536 | { |
| 2537 | 1, | 2537 | 1, |
| 2538 | TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, | 2538 | TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, |
| 2539 | TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, | 2539 | TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, |
| 2540 | SSL_kSRP, | 2540 | SSL_kSRP, |
| 2541 | SSL_aRSA, | 2541 | SSL_aRSA, |
| 2542 | SSL_AES256, | 2542 | SSL_AES256, |
| 2543 | SSL_SHA1, | 2543 | SSL_SHA1, |
| 2544 | SSL_TLSV1, | 2544 | SSL_TLSV1, |
| 2545 | SSL_NOT_EXP|SSL_HIGH, | 2545 | SSL_NOT_EXP|SSL_HIGH, |
| 2546 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2546 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2547 | 256, | 2547 | 256, |
| 2548 | 256, | 2548 | 256, |
| 2549 | }, | 2549 | }, |
| 2550 | 2550 | ||
| 2551 | /* Cipher C022 */ | 2551 | /* Cipher C022 */ |
| 2552 | { | 2552 | { |
| 2553 | 1, | 2553 | 1, |
| 2554 | TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, | 2554 | TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, |
| 2555 | TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, | 2555 | TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, |
| 2556 | SSL_kSRP, | 2556 | SSL_kSRP, |
| 2557 | SSL_aDSS, | 2557 | SSL_aDSS, |
| 2558 | SSL_AES256, | 2558 | SSL_AES256, |
| 2559 | SSL_SHA1, | 2559 | SSL_SHA1, |
| 2560 | SSL_TLSV1, | 2560 | SSL_TLSV1, |
| 2561 | SSL_NOT_EXP|SSL_HIGH, | 2561 | SSL_NOT_EXP|SSL_HIGH, |
| 2562 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2562 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2563 | 256, | 2563 | 256, |
| 2564 | 256, | 2564 | 256, |
| 2565 | }, | 2565 | }, |
| 2566 | #endif /* OPENSSL_NO_SRP */ | 2566 | #endif /* OPENSSL_NO_SRP */ |
| 2567 | #ifndef OPENSSL_NO_ECDH | 2567 | #ifndef OPENSSL_NO_ECDH |
| @@ -2570,260 +2570,260 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
| 2570 | 2570 | ||
| 2571 | /* Cipher C023 */ | 2571 | /* Cipher C023 */ |
| 2572 | { | 2572 | { |
| 2573 | 1, | 2573 | 1, |
| 2574 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256, | 2574 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256, |
| 2575 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256, | 2575 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256, |
| 2576 | SSL_kEECDH, | 2576 | SSL_kEECDH, |
| 2577 | SSL_aECDSA, | 2577 | SSL_aECDSA, |
| 2578 | SSL_AES128, | 2578 | SSL_AES128, |
| 2579 | SSL_SHA256, | 2579 | SSL_SHA256, |
| 2580 | SSL_TLSV1_2, | 2580 | SSL_TLSV1_2, |
| 2581 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2581 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2582 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2582 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2583 | 128, | 2583 | 128, |
| 2584 | 128, | 2584 | 128, |
| 2585 | }, | 2585 | }, |
| 2586 | 2586 | ||
| 2587 | /* Cipher C024 */ | 2587 | /* Cipher C024 */ |
| 2588 | { | 2588 | { |
| 2589 | 1, | 2589 | 1, |
| 2590 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384, | 2590 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384, |
| 2591 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384, | 2591 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384, |
| 2592 | SSL_kEECDH, | 2592 | SSL_kEECDH, |
| 2593 | SSL_aECDSA, | 2593 | SSL_aECDSA, |
| 2594 | SSL_AES256, | 2594 | SSL_AES256, |
| 2595 | SSL_SHA384, | 2595 | SSL_SHA384, |
| 2596 | SSL_TLSV1_2, | 2596 | SSL_TLSV1_2, |
| 2597 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2597 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2598 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2598 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2599 | 256, | 2599 | 256, |
| 2600 | 256, | 2600 | 256, |
| 2601 | }, | 2601 | }, |
| 2602 | 2602 | ||
| 2603 | /* Cipher C025 */ | 2603 | /* Cipher C025 */ |
| 2604 | { | 2604 | { |
| 2605 | 1, | 2605 | 1, |
| 2606 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256, | 2606 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256, |
| 2607 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256, | 2607 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256, |
| 2608 | SSL_kECDHe, | 2608 | SSL_kECDHe, |
| 2609 | SSL_aECDH, | 2609 | SSL_aECDH, |
| 2610 | SSL_AES128, | 2610 | SSL_AES128, |
| 2611 | SSL_SHA256, | 2611 | SSL_SHA256, |
| 2612 | SSL_TLSV1_2, | 2612 | SSL_TLSV1_2, |
| 2613 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2613 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2614 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2614 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2615 | 128, | 2615 | 128, |
| 2616 | 128, | 2616 | 128, |
| 2617 | }, | 2617 | }, |
| 2618 | 2618 | ||
| 2619 | /* Cipher C026 */ | 2619 | /* Cipher C026 */ |
| 2620 | { | 2620 | { |
| 2621 | 1, | 2621 | 1, |
| 2622 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384, | 2622 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384, |
| 2623 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384, | 2623 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384, |
| 2624 | SSL_kECDHe, | 2624 | SSL_kECDHe, |
| 2625 | SSL_aECDH, | 2625 | SSL_aECDH, |
| 2626 | SSL_AES256, | 2626 | SSL_AES256, |
| 2627 | SSL_SHA384, | 2627 | SSL_SHA384, |
| 2628 | SSL_TLSV1_2, | 2628 | SSL_TLSV1_2, |
| 2629 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2629 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2630 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2630 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2631 | 256, | 2631 | 256, |
| 2632 | 256, | 2632 | 256, |
| 2633 | }, | 2633 | }, |
| 2634 | 2634 | ||
| 2635 | /* Cipher C027 */ | 2635 | /* Cipher C027 */ |
| 2636 | { | 2636 | { |
| 2637 | 1, | 2637 | 1, |
| 2638 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256, | 2638 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256, |
| 2639 | TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256, | 2639 | TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256, |
| 2640 | SSL_kEECDH, | 2640 | SSL_kEECDH, |
| 2641 | SSL_aRSA, | 2641 | SSL_aRSA, |
| 2642 | SSL_AES128, | 2642 | SSL_AES128, |
| 2643 | SSL_SHA256, | 2643 | SSL_SHA256, |
| 2644 | SSL_TLSV1_2, | 2644 | SSL_TLSV1_2, |
| 2645 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2645 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2646 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2646 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2647 | 128, | 2647 | 128, |
| 2648 | 128, | 2648 | 128, |
| 2649 | }, | 2649 | }, |
| 2650 | 2650 | ||
| 2651 | /* Cipher C028 */ | 2651 | /* Cipher C028 */ |
| 2652 | { | 2652 | { |
| 2653 | 1, | 2653 | 1, |
| 2654 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384, | 2654 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384, |
| 2655 | TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384, | 2655 | TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384, |
| 2656 | SSL_kEECDH, | 2656 | SSL_kEECDH, |
| 2657 | SSL_aRSA, | 2657 | SSL_aRSA, |
| 2658 | SSL_AES256, | 2658 | SSL_AES256, |
| 2659 | SSL_SHA384, | 2659 | SSL_SHA384, |
| 2660 | SSL_TLSV1_2, | 2660 | SSL_TLSV1_2, |
| 2661 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2661 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2662 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2662 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2663 | 256, | 2663 | 256, |
| 2664 | 256, | 2664 | 256, |
| 2665 | }, | 2665 | }, |
| 2666 | 2666 | ||
| 2667 | /* Cipher C029 */ | 2667 | /* Cipher C029 */ |
| 2668 | { | 2668 | { |
| 2669 | 1, | 2669 | 1, |
| 2670 | TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256, | 2670 | TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256, |
| 2671 | TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256, | 2671 | TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256, |
| 2672 | SSL_kECDHr, | 2672 | SSL_kECDHr, |
| 2673 | SSL_aECDH, | 2673 | SSL_aECDH, |
| 2674 | SSL_AES128, | 2674 | SSL_AES128, |
| 2675 | SSL_SHA256, | 2675 | SSL_SHA256, |
| 2676 | SSL_TLSV1_2, | 2676 | SSL_TLSV1_2, |
| 2677 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2677 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2678 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2678 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2679 | 128, | 2679 | 128, |
| 2680 | 128, | 2680 | 128, |
| 2681 | }, | 2681 | }, |
| 2682 | 2682 | ||
| 2683 | /* Cipher C02A */ | 2683 | /* Cipher C02A */ |
| 2684 | { | 2684 | { |
| 2685 | 1, | 2685 | 1, |
| 2686 | TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384, | 2686 | TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384, |
| 2687 | TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384, | 2687 | TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384, |
| 2688 | SSL_kECDHr, | 2688 | SSL_kECDHr, |
| 2689 | SSL_aECDH, | 2689 | SSL_aECDH, |
| 2690 | SSL_AES256, | 2690 | SSL_AES256, |
| 2691 | SSL_SHA384, | 2691 | SSL_SHA384, |
| 2692 | SSL_TLSV1_2, | 2692 | SSL_TLSV1_2, |
| 2693 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2693 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2694 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2694 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2695 | 256, | 2695 | 256, |
| 2696 | 256, | 2696 | 256, |
| 2697 | }, | 2697 | }, |
| 2698 | 2698 | ||
| 2699 | /* GCM based TLS v1.2 ciphersuites from RFC5289 */ | 2699 | /* GCM based TLS v1.2 ciphersuites from RFC5289 */ |
| 2700 | 2700 | ||
| 2701 | /* Cipher C02B */ | 2701 | /* Cipher C02B */ |
| 2702 | { | 2702 | { |
| 2703 | 1, | 2703 | 1, |
| 2704 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, | 2704 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, |
| 2705 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, | 2705 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, |
| 2706 | SSL_kEECDH, | 2706 | SSL_kEECDH, |
| 2707 | SSL_aECDSA, | 2707 | SSL_aECDSA, |
| 2708 | SSL_AES128GCM, | 2708 | SSL_AES128GCM, |
| 2709 | SSL_AEAD, | 2709 | SSL_AEAD, |
| 2710 | SSL_TLSV1_2, | 2710 | SSL_TLSV1_2, |
| 2711 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2711 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2712 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2712 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2713 | 128, | 2713 | 128, |
| 2714 | 128, | 2714 | 128, |
| 2715 | }, | 2715 | }, |
| 2716 | 2716 | ||
| 2717 | /* Cipher C02C */ | 2717 | /* Cipher C02C */ |
| 2718 | { | 2718 | { |
| 2719 | 1, | 2719 | 1, |
| 2720 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, | 2720 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, |
| 2721 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, | 2721 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, |
| 2722 | SSL_kEECDH, | 2722 | SSL_kEECDH, |
| 2723 | SSL_aECDSA, | 2723 | SSL_aECDSA, |
| 2724 | SSL_AES256GCM, | 2724 | SSL_AES256GCM, |
| 2725 | SSL_AEAD, | 2725 | SSL_AEAD, |
| 2726 | SSL_TLSV1_2, | 2726 | SSL_TLSV1_2, |
| 2727 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2727 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2728 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2728 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2729 | 256, | 2729 | 256, |
| 2730 | 256, | 2730 | 256, |
| 2731 | }, | 2731 | }, |
| 2732 | 2732 | ||
| 2733 | /* Cipher C02D */ | 2733 | /* Cipher C02D */ |
| 2734 | { | 2734 | { |
| 2735 | 1, | 2735 | 1, |
| 2736 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, | 2736 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, |
| 2737 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, | 2737 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, |
| 2738 | SSL_kECDHe, | 2738 | SSL_kECDHe, |
| 2739 | SSL_aECDH, | 2739 | SSL_aECDH, |
| 2740 | SSL_AES128GCM, | 2740 | SSL_AES128GCM, |
| 2741 | SSL_AEAD, | 2741 | SSL_AEAD, |
| 2742 | SSL_TLSV1_2, | 2742 | SSL_TLSV1_2, |
| 2743 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2743 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2744 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2744 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2745 | 128, | 2745 | 128, |
| 2746 | 128, | 2746 | 128, |
| 2747 | }, | 2747 | }, |
| 2748 | 2748 | ||
| 2749 | /* Cipher C02E */ | 2749 | /* Cipher C02E */ |
| 2750 | { | 2750 | { |
| 2751 | 1, | 2751 | 1, |
| 2752 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, | 2752 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, |
| 2753 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, | 2753 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, |
| 2754 | SSL_kECDHe, | 2754 | SSL_kECDHe, |
| 2755 | SSL_aECDH, | 2755 | SSL_aECDH, |
| 2756 | SSL_AES256GCM, | 2756 | SSL_AES256GCM, |
| 2757 | SSL_AEAD, | 2757 | SSL_AEAD, |
| 2758 | SSL_TLSV1_2, | 2758 | SSL_TLSV1_2, |
| 2759 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2759 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2760 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2760 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2761 | 256, | 2761 | 256, |
| 2762 | 256, | 2762 | 256, |
| 2763 | }, | 2763 | }, |
| 2764 | 2764 | ||
| 2765 | /* Cipher C02F */ | 2765 | /* Cipher C02F */ |
| 2766 | { | 2766 | { |
| 2767 | 1, | 2767 | 1, |
| 2768 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256, | 2768 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256, |
| 2769 | TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, | 2769 | TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, |
| 2770 | SSL_kEECDH, | 2770 | SSL_kEECDH, |
| 2771 | SSL_aRSA, | 2771 | SSL_aRSA, |
| 2772 | SSL_AES128GCM, | 2772 | SSL_AES128GCM, |
| 2773 | SSL_AEAD, | 2773 | SSL_AEAD, |
| 2774 | SSL_TLSV1_2, | 2774 | SSL_TLSV1_2, |
| 2775 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2775 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2776 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2776 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2777 | 128, | 2777 | 128, |
| 2778 | 128, | 2778 | 128, |
| 2779 | }, | 2779 | }, |
| 2780 | 2780 | ||
| 2781 | /* Cipher C030 */ | 2781 | /* Cipher C030 */ |
| 2782 | { | 2782 | { |
| 2783 | 1, | 2783 | 1, |
| 2784 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384, | 2784 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384, |
| 2785 | TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384, | 2785 | TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384, |
| 2786 | SSL_kEECDH, | 2786 | SSL_kEECDH, |
| 2787 | SSL_aRSA, | 2787 | SSL_aRSA, |
| 2788 | SSL_AES256GCM, | 2788 | SSL_AES256GCM, |
| 2789 | SSL_AEAD, | 2789 | SSL_AEAD, |
| 2790 | SSL_TLSV1_2, | 2790 | SSL_TLSV1_2, |
| 2791 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2791 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2792 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2792 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2793 | 256, | 2793 | 256, |
| 2794 | 256, | 2794 | 256, |
| 2795 | }, | 2795 | }, |
| 2796 | 2796 | ||
| 2797 | /* Cipher C031 */ | 2797 | /* Cipher C031 */ |
| 2798 | { | 2798 | { |
| 2799 | 1, | 2799 | 1, |
| 2800 | TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256, | 2800 | TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256, |
| 2801 | TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256, | 2801 | TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256, |
| 2802 | SSL_kECDHr, | 2802 | SSL_kECDHr, |
| 2803 | SSL_aECDH, | 2803 | SSL_aECDH, |
| 2804 | SSL_AES128GCM, | 2804 | SSL_AES128GCM, |
| 2805 | SSL_AEAD, | 2805 | SSL_AEAD, |
| 2806 | SSL_TLSV1_2, | 2806 | SSL_TLSV1_2, |
| 2807 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2807 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2808 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2808 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
| 2809 | 128, | 2809 | 128, |
| 2810 | 128, | 2810 | 128, |
| 2811 | }, | 2811 | }, |
| 2812 | 2812 | ||
| 2813 | /* Cipher C032 */ | 2813 | /* Cipher C032 */ |
| 2814 | { | 2814 | { |
| 2815 | 1, | 2815 | 1, |
| 2816 | TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384, | 2816 | TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384, |
| 2817 | TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384, | 2817 | TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384, |
| 2818 | SSL_kECDHr, | 2818 | SSL_kECDHr, |
| 2819 | SSL_aECDH, | 2819 | SSL_aECDH, |
| 2820 | SSL_AES256GCM, | 2820 | SSL_AES256GCM, |
| 2821 | SSL_AEAD, | 2821 | SSL_AEAD, |
| 2822 | SSL_TLSV1_2, | 2822 | SSL_TLSV1_2, |
| 2823 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2823 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
| 2824 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2824 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
| 2825 | 256, | 2825 | 256, |
| 2826 | 256, | 2826 | 256, |
| 2827 | }, | 2827 | }, |
| 2828 | 2828 | ||
| 2829 | #endif /* OPENSSL_NO_ECDH */ | 2829 | #endif /* OPENSSL_NO_ECDH */ |
| @@ -2832,135 +2832,141 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
| 2832 | #ifdef TEMP_GOST_TLS | 2832 | #ifdef TEMP_GOST_TLS |
| 2833 | /* Cipher FF00 */ | 2833 | /* Cipher FF00 */ |
| 2834 | { | 2834 | { |
| 2835 | 1, | 2835 | 1, |
| 2836 | "GOST-MD5", | 2836 | "GOST-MD5", |
| 2837 | 0x0300ff00, | 2837 | 0x0300ff00, |
| 2838 | SSL_kRSA, | 2838 | SSL_kRSA, |
| 2839 | SSL_aRSA, | 2839 | SSL_aRSA, |
| 2840 | SSL_eGOST2814789CNT, | 2840 | SSL_eGOST2814789CNT, |
| 2841 | SSL_MD5, | 2841 | SSL_MD5, |
| 2842 | SSL_TLSV1, | 2842 | SSL_TLSV1, |
| 2843 | SSL_NOT_EXP|SSL_HIGH, | 2843 | SSL_NOT_EXP|SSL_HIGH, |
| 2844 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2844 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2845 | 256, | 2845 | 256, |
| 2846 | 256, | 2846 | 256, |
| 2847 | }, | 2847 | }, |
| 2848 | { | 2848 | { |
| 2849 | 1, | 2849 | 1, |
| 2850 | "GOST-GOST94", | 2850 | "GOST-GOST94", |
| 2851 | 0x0300ff01, | 2851 | 0x0300ff01, |
| 2852 | SSL_kRSA, | 2852 | SSL_kRSA, |
| 2853 | SSL_aRSA, | 2853 | SSL_aRSA, |
| 2854 | SSL_eGOST2814789CNT, | 2854 | SSL_eGOST2814789CNT, |
| 2855 | SSL_GOST94, | 2855 | SSL_GOST94, |
| 2856 | SSL_TLSV1, | 2856 | SSL_TLSV1, |
| 2857 | SSL_NOT_EXP|SSL_HIGH, | 2857 | SSL_NOT_EXP|SSL_HIGH, |
| 2858 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2858 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2859 | 256, | 2859 | 256, |
| 2860 | 256 | 2860 | 256 |
| 2861 | }, | 2861 | }, |
| 2862 | { | 2862 | { |
| 2863 | 1, | 2863 | 1, |
| 2864 | "GOST-GOST89MAC", | 2864 | "GOST-GOST89MAC", |
| 2865 | 0x0300ff02, | 2865 | 0x0300ff02, |
| 2866 | SSL_kRSA, | 2866 | SSL_kRSA, |
| 2867 | SSL_aRSA, | 2867 | SSL_aRSA, |
| 2868 | SSL_eGOST2814789CNT, | 2868 | SSL_eGOST2814789CNT, |
| 2869 | SSL_GOST89MAC, | 2869 | SSL_GOST89MAC, |
| 2870 | SSL_TLSV1, | 2870 | SSL_TLSV1, |
| 2871 | SSL_NOT_EXP|SSL_HIGH, | 2871 | SSL_NOT_EXP|SSL_HIGH, |
| 2872 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2872 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
| 2873 | 256, | 2873 | 256, |
| 2874 | 256 | 2874 | 256 |
| 2875 | }, | 2875 | }, |
| 2876 | { | 2876 | { |
| 2877 | 1, | 2877 | 1, |
| 2878 | "GOST-GOST89STREAM", | 2878 | "GOST-GOST89STREAM", |
| 2879 | 0x0300ff03, | 2879 | 0x0300ff03, |
| 2880 | SSL_kRSA, | 2880 | SSL_kRSA, |
| 2881 | SSL_aRSA, | 2881 | SSL_aRSA, |
| 2882 | SSL_eGOST2814789CNT, | 2882 | SSL_eGOST2814789CNT, |
| 2883 | SSL_GOST89MAC, | 2883 | SSL_GOST89MAC, |
| 2884 | SSL_TLSV1, | 2884 | SSL_TLSV1, |
| 2885 | SSL_NOT_EXP|SSL_HIGH, | 2885 | SSL_NOT_EXP|SSL_HIGH, |
| 2886 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF|TLS1_STREAM_MAC, | 2886 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF|TLS1_STREAM_MAC, |
| 2887 | 256, | 2887 | 256, |
| 2888 | 256 | 2888 | 256 |
| 2889 | }, | 2889 | }, |
| 2890 | #endif | 2890 | #endif |
| 2891 | 2891 | ||
| 2892 | /* end of list */ | 2892 | /* end of list */ |
| 2893 | }; | 2893 | }; |
| 2894 | 2894 | ||
| 2895 | SSL3_ENC_METHOD SSLv3_enc_data={ | 2895 | SSL3_ENC_METHOD SSLv3_enc_data = { |
| 2896 | ssl3_enc, | 2896 | ssl3_enc, |
| 2897 | n_ssl3_mac, | 2897 | n_ssl3_mac, |
| 2898 | ssl3_setup_key_block, | 2898 | ssl3_setup_key_block, |
| 2899 | ssl3_generate_master_secret, | 2899 | ssl3_generate_master_secret, |
| 2900 | ssl3_change_cipher_state, | 2900 | ssl3_change_cipher_state, |
| 2901 | ssl3_final_finish_mac, | 2901 | ssl3_final_finish_mac, |
| 2902 | MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH, | 2902 | MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH, |
| 2903 | ssl3_cert_verify_mac, | 2903 | ssl3_cert_verify_mac, |
| 2904 | SSL3_MD_CLIENT_FINISHED_CONST,4, | 2904 | SSL3_MD_CLIENT_FINISHED_CONST, 4, |
| 2905 | SSL3_MD_SERVER_FINISHED_CONST,4, | 2905 | SSL3_MD_SERVER_FINISHED_CONST, 4, |
| 2906 | ssl3_alert_code, | 2906 | ssl3_alert_code, |
| 2907 | (int (*)(SSL *, unsigned char *, size_t, const char *, | 2907 | (int (*)(SSL *, unsigned char *, size_t, const char *, |
| 2908 | size_t, const unsigned char *, size_t, | 2908 | size_t, const unsigned char *, size_t, |
| 2909 | int use_context))ssl_undefined_function, | 2909 | int use_context))ssl_undefined_function, |
| 2910 | }; | 2910 | }; |
| 2911 | 2911 | ||
| 2912 | long ssl3_default_timeout(void) | 2912 | long |
| 2913 | { | 2913 | ssl3_default_timeout(void) |
| 2914 | { | ||
| 2914 | /* 2 hours, the 24 hours mentioned in the SSLv3 spec | 2915 | /* 2 hours, the 24 hours mentioned in the SSLv3 spec |
| 2915 | * is way too long for http, the cache would over fill */ | 2916 | * is way too long for http, the cache would over fill */ |
| 2916 | return(60*60*2); | 2917 | return (60*60*2); |
| 2917 | } | 2918 | } |
| 2918 | 2919 | ||
| 2919 | int ssl3_num_ciphers(void) | 2920 | int |
| 2920 | { | 2921 | ssl3_num_ciphers(void) |
| 2921 | return(SSL3_NUM_CIPHERS); | 2922 | { |
| 2922 | } | 2923 | return (SSL3_NUM_CIPHERS); |
| 2923 | 2924 | } | |
| 2924 | const SSL_CIPHER *ssl3_get_cipher(unsigned int u) | 2925 | |
| 2925 | { | 2926 | const SSL_CIPHER |
| 2927 | *ssl3_get_cipher(unsigned int u) | ||
| 2928 | { | ||
| 2926 | if (u < SSL3_NUM_CIPHERS) | 2929 | if (u < SSL3_NUM_CIPHERS) |
| 2927 | return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u])); | 2930 | return (&(ssl3_ciphers[SSL3_NUM_CIPHERS - 1 - u])); |
| 2928 | else | 2931 | else |
| 2929 | return(NULL); | 2932 | return (NULL); |
| 2930 | } | 2933 | } |
| 2931 | 2934 | ||
| 2932 | int ssl3_pending(const SSL *s) | 2935 | int |
| 2933 | { | 2936 | ssl3_pending(const SSL *s) |
| 2937 | { | ||
| 2934 | if (s->rstate == SSL_ST_READ_BODY) | 2938 | if (s->rstate == SSL_ST_READ_BODY) |
| 2935 | return 0; | 2939 | return 0; |
| 2936 | 2940 | ||
| 2937 | return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0; | 2941 | return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0; |
| 2938 | } | 2942 | } |
| 2939 | 2943 | ||
| 2940 | int ssl3_new(SSL *s) | 2944 | int |
| 2941 | { | 2945 | ssl3_new(SSL *s) |
| 2946 | { | ||
| 2942 | SSL3_STATE *s3; | 2947 | SSL3_STATE *s3; |
| 2943 | 2948 | ||
| 2944 | if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err; | 2949 | if ((s3 = OPENSSL_malloc(sizeof *s3)) == NULL) goto err; |
| 2945 | memset(s3,0,sizeof *s3); | 2950 | memset(s3, 0, sizeof *s3); |
| 2946 | memset(s3->rrec.seq_num,0,sizeof(s3->rrec.seq_num)); | 2951 | memset(s3->rrec.seq_num, 0, sizeof(s3->rrec.seq_num)); |
| 2947 | memset(s3->wrec.seq_num,0,sizeof(s3->wrec.seq_num)); | 2952 | memset(s3->wrec.seq_num, 0, sizeof(s3->wrec.seq_num)); |
| 2948 | 2953 | ||
| 2949 | s->s3=s3; | 2954 | s->s3 = s3; |
| 2950 | 2955 | ||
| 2951 | #ifndef OPENSSL_NO_SRP | 2956 | #ifndef OPENSSL_NO_SRP |
| 2952 | SSL_SRP_CTX_init(s); | 2957 | SSL_SRP_CTX_init(s); |
| 2953 | #endif | 2958 | #endif |
| 2954 | s->method->ssl_clear(s); | 2959 | s->method->ssl_clear(s); |
| 2955 | return(1); | 2960 | return (1); |
| 2956 | err: | 2961 | err: |
| 2957 | return(0); | 2962 | return (0); |
| 2958 | } | 2963 | } |
| 2959 | 2964 | ||
| 2960 | void ssl3_free(SSL *s) | 2965 | void |
| 2961 | { | 2966 | ssl3_free(SSL *s) |
| 2962 | if(s == NULL) | 2967 | { |
| 2963 | return; | 2968 | if (s == NULL) |
| 2969 | return; | ||
| 2964 | 2970 | ||
| 2965 | #ifdef TLSEXT_TYPE_opaque_prf_input | 2971 | #ifdef TLSEXT_TYPE_opaque_prf_input |
| 2966 | if (s->s3->client_opaque_prf_input != NULL) | 2972 | if (s->s3->client_opaque_prf_input != NULL) |
| @@ -2986,22 +2992,24 @@ void ssl3_free(SSL *s) | |||
| 2986 | #endif | 2992 | #endif |
| 2987 | 2993 | ||
| 2988 | if (s->s3->tmp.ca_names != NULL) | 2994 | if (s->s3->tmp.ca_names != NULL) |
| 2989 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free); | 2995 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); |
| 2990 | if (s->s3->handshake_buffer) { | 2996 | if (s->s3->handshake_buffer) { |
| 2991 | BIO_free(s->s3->handshake_buffer); | 2997 | BIO_free(s->s3->handshake_buffer); |
| 2992 | } | 2998 | } |
| 2993 | if (s->s3->handshake_dgst) ssl3_free_digest_list(s); | 2999 | if (s->s3->handshake_dgst) |
| 3000 | ssl3_free_digest_list(s); | ||
| 2994 | #ifndef OPENSSL_NO_SRP | 3001 | #ifndef OPENSSL_NO_SRP |
| 2995 | SSL_SRP_CTX_free(s); | 3002 | SSL_SRP_CTX_free(s); |
| 2996 | #endif | 3003 | #endif |
| 2997 | OPENSSL_cleanse(s->s3,sizeof *s->s3); | 3004 | OPENSSL_cleanse(s->s3, sizeof *s->s3); |
| 2998 | OPENSSL_free(s->s3); | 3005 | OPENSSL_free(s->s3); |
| 2999 | s->s3=NULL; | 3006 | s->s3 = NULL; |
| 3000 | } | 3007 | } |
| 3001 | 3008 | ||
| 3002 | void ssl3_clear(SSL *s) | 3009 | void |
| 3003 | { | 3010 | ssl3_clear(SSL *s) |
| 3004 | unsigned char *rp,*wp; | 3011 | { |
| 3012 | unsigned char *rp, *wp; | ||
| 3005 | size_t rlen, wlen; | 3013 | size_t rlen, wlen; |
| 3006 | int init_extra; | 3014 | int init_extra; |
| 3007 | 3015 | ||
| @@ -3016,26 +3024,23 @@ void ssl3_clear(SSL *s) | |||
| 3016 | 3024 | ||
| 3017 | ssl3_cleanup_key_block(s); | 3025 | ssl3_cleanup_key_block(s); |
| 3018 | if (s->s3->tmp.ca_names != NULL) | 3026 | if (s->s3->tmp.ca_names != NULL) |
| 3019 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free); | 3027 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); |
| 3020 | 3028 | ||
| 3021 | if (s->s3->rrec.comp != NULL) | 3029 | if (s->s3->rrec.comp != NULL) { |
| 3022 | { | ||
| 3023 | OPENSSL_free(s->s3->rrec.comp); | 3030 | OPENSSL_free(s->s3->rrec.comp); |
| 3024 | s->s3->rrec.comp=NULL; | 3031 | s->s3->rrec.comp = NULL; |
| 3025 | } | 3032 | } |
| 3026 | #ifndef OPENSSL_NO_DH | 3033 | #ifndef OPENSSL_NO_DH |
| 3027 | if (s->s3->tmp.dh != NULL) | 3034 | if (s->s3->tmp.dh != NULL) { |
| 3028 | { | ||
| 3029 | DH_free(s->s3->tmp.dh); | 3035 | DH_free(s->s3->tmp.dh); |
| 3030 | s->s3->tmp.dh = NULL; | 3036 | s->s3->tmp.dh = NULL; |
| 3031 | } | 3037 | } |
| 3032 | #endif | 3038 | #endif |
| 3033 | #ifndef OPENSSL_NO_ECDH | 3039 | #ifndef OPENSSL_NO_ECDH |
| 3034 | if (s->s3->tmp.ecdh != NULL) | 3040 | if (s->s3->tmp.ecdh != NULL) { |
| 3035 | { | ||
| 3036 | EC_KEY_free(s->s3->tmp.ecdh); | 3041 | EC_KEY_free(s->s3->tmp.ecdh); |
| 3037 | s->s3->tmp.ecdh = NULL; | 3042 | s->s3->tmp.ecdh = NULL; |
| 3038 | } | 3043 | } |
| 3039 | #endif | 3044 | #endif |
| 3040 | #ifndef OPENSSL_NO_TLSEXT | 3045 | #ifndef OPENSSL_NO_TLSEXT |
| 3041 | #ifndef OPENSSL_NO_EC | 3046 | #ifndef OPENSSL_NO_EC |
| @@ -3046,7 +3051,7 @@ void ssl3_clear(SSL *s) | |||
| 3046 | rp = s->s3->rbuf.buf; | 3051 | rp = s->s3->rbuf.buf; |
| 3047 | wp = s->s3->wbuf.buf; | 3052 | wp = s->s3->wbuf.buf; |
| 3048 | rlen = s->s3->rbuf.len; | 3053 | rlen = s->s3->rbuf.len; |
| 3049 | wlen = s->s3->wbuf.len; | 3054 | wlen = s->s3->wbuf.len; |
| 3050 | init_extra = s->s3->init_extra; | 3055 | init_extra = s->s3->init_extra; |
| 3051 | if (s->s3->handshake_buffer) { | 3056 | if (s->s3->handshake_buffer) { |
| 3052 | BIO_free(s->s3->handshake_buffer); | 3057 | BIO_free(s->s3->handshake_buffer); |
| @@ -3054,104 +3059,100 @@ void ssl3_clear(SSL *s) | |||
| 3054 | } | 3059 | } |
| 3055 | if (s->s3->handshake_dgst) { | 3060 | if (s->s3->handshake_dgst) { |
| 3056 | ssl3_free_digest_list(s); | 3061 | ssl3_free_digest_list(s); |
| 3057 | } | 3062 | } |
| 3058 | memset(s->s3,0,sizeof *s->s3); | 3063 | memset(s->s3, 0, sizeof *s->s3); |
| 3059 | s->s3->rbuf.buf = rp; | 3064 | s->s3->rbuf.buf = rp; |
| 3060 | s->s3->wbuf.buf = wp; | 3065 | s->s3->wbuf.buf = wp; |
| 3061 | s->s3->rbuf.len = rlen; | 3066 | s->s3->rbuf.len = rlen; |
| 3062 | s->s3->wbuf.len = wlen; | 3067 | s->s3->wbuf.len = wlen; |
| 3063 | s->s3->init_extra = init_extra; | 3068 | s->s3->init_extra = init_extra; |
| 3064 | 3069 | ||
| 3065 | ssl_free_wbio_buffer(s); | 3070 | ssl_free_wbio_buffer(s); |
| 3066 | 3071 | ||
| 3067 | s->packet_length=0; | 3072 | s->packet_length = 0; |
| 3068 | s->s3->renegotiate=0; | 3073 | s->s3->renegotiate = 0; |
| 3069 | s->s3->total_renegotiations=0; | 3074 | s->s3->total_renegotiations = 0; |
| 3070 | s->s3->num_renegotiations=0; | 3075 | s->s3->num_renegotiations = 0; |
| 3071 | s->s3->in_read_app_data=0; | 3076 | s->s3->in_read_app_data = 0; |
| 3072 | s->version=SSL3_VERSION; | 3077 | s->version = SSL3_VERSION; |
| 3073 | 3078 | ||
| 3074 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) | 3079 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) |
| 3075 | if (s->next_proto_negotiated) | 3080 | if (s->next_proto_negotiated) { |
| 3076 | { | ||
| 3077 | OPENSSL_free(s->next_proto_negotiated); | 3081 | OPENSSL_free(s->next_proto_negotiated); |
| 3078 | s->next_proto_negotiated = NULL; | 3082 | s->next_proto_negotiated = NULL; |
| 3079 | s->next_proto_negotiated_len = 0; | 3083 | s->next_proto_negotiated_len = 0; |
| 3080 | } | ||
| 3081 | #endif | ||
| 3082 | } | 3084 | } |
| 3085 | #endif | ||
| 3086 | } | ||
| 3083 | 3087 | ||
| 3084 | #ifndef OPENSSL_NO_SRP | 3088 | #ifndef OPENSSL_NO_SRP |
| 3085 | static char * srp_password_from_info_cb(SSL *s, void *arg) | 3089 | static char * |
| 3086 | { | 3090 | srp_password_from_info_cb(SSL *s, void *arg) |
| 3087 | return BUF_strdup(s->srp_ctx.info) ; | 3091 | { |
| 3088 | } | 3092 | return BUF_strdup(s->srp_ctx.info); |
| 3093 | } | ||
| 3089 | #endif | 3094 | #endif |
| 3090 | 3095 | ||
| 3091 | long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | 3096 | long |
| 3092 | { | 3097 | ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) |
| 3093 | int ret=0; | 3098 | { |
| 3099 | int ret = 0; | ||
| 3094 | 3100 | ||
| 3095 | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) | 3101 | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) |
| 3096 | if ( | 3102 | if ( |
| 3097 | #ifndef OPENSSL_NO_RSA | 3103 | #ifndef OPENSSL_NO_RSA |
| 3098 | cmd == SSL_CTRL_SET_TMP_RSA || | 3104 | cmd == SSL_CTRL_SET_TMP_RSA || |
| 3099 | cmd == SSL_CTRL_SET_TMP_RSA_CB || | 3105 | cmd == SSL_CTRL_SET_TMP_RSA_CB || |
| 3100 | #endif | 3106 | #endif |
| 3101 | #ifndef OPENSSL_NO_DSA | 3107 | #ifndef OPENSSL_NO_DSA |
| 3102 | cmd == SSL_CTRL_SET_TMP_DH || | 3108 | cmd == SSL_CTRL_SET_TMP_DH || |
| 3103 | cmd == SSL_CTRL_SET_TMP_DH_CB || | 3109 | cmd == SSL_CTRL_SET_TMP_DH_CB || |
| 3104 | #endif | 3110 | #endif |
| 3105 | 0) | 3111 | 0) { |
| 3106 | { | 3112 | if (!ssl_cert_inst(&s->cert)) { |
| 3107 | if (!ssl_cert_inst(&s->cert)) | ||
| 3108 | { | ||
| 3109 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE); | 3113 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE); |
| 3110 | return(0); | 3114 | return (0); |
| 3111 | } | ||
| 3112 | } | 3115 | } |
| 3116 | } | ||
| 3113 | #endif | 3117 | #endif |
| 3114 | 3118 | ||
| 3115 | switch (cmd) | 3119 | switch (cmd) { |
| 3116 | { | ||
| 3117 | case SSL_CTRL_GET_SESSION_REUSED: | 3120 | case SSL_CTRL_GET_SESSION_REUSED: |
| 3118 | ret=s->hit; | 3121 | ret = s->hit; |
| 3119 | break; | 3122 | break; |
| 3120 | case SSL_CTRL_GET_CLIENT_CERT_REQUEST: | 3123 | case SSL_CTRL_GET_CLIENT_CERT_REQUEST: |
| 3121 | break; | 3124 | break; |
| 3122 | case SSL_CTRL_GET_NUM_RENEGOTIATIONS: | 3125 | case SSL_CTRL_GET_NUM_RENEGOTIATIONS: |
| 3123 | ret=s->s3->num_renegotiations; | 3126 | ret = s->s3->num_renegotiations; |
| 3124 | break; | 3127 | break; |
| 3125 | case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS: | 3128 | case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS: |
| 3126 | ret=s->s3->num_renegotiations; | 3129 | ret = s->s3->num_renegotiations; |
| 3127 | s->s3->num_renegotiations=0; | 3130 | s->s3->num_renegotiations = 0; |
| 3128 | break; | 3131 | break; |
| 3129 | case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS: | 3132 | case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS: |
| 3130 | ret=s->s3->total_renegotiations; | 3133 | ret = s->s3->total_renegotiations; |
| 3131 | break; | 3134 | break; |
| 3132 | case SSL_CTRL_GET_FLAGS: | 3135 | case SSL_CTRL_GET_FLAGS: |
| 3133 | ret=(int)(s->s3->flags); | 3136 | ret = (int)(s->s3->flags); |
| 3134 | break; | 3137 | break; |
| 3135 | #ifndef OPENSSL_NO_RSA | 3138 | #ifndef OPENSSL_NO_RSA |
| 3136 | case SSL_CTRL_NEED_TMP_RSA: | 3139 | case SSL_CTRL_NEED_TMP_RSA: |
| 3137 | if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) && | 3140 | if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) && |
| 3138 | ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || | 3141 | ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || |
| 3139 | (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8)))) | 3142 | (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512 / 8)))) |
| 3140 | ret = 1; | 3143 | ret = 1; |
| 3141 | break; | 3144 | break; |
| 3142 | case SSL_CTRL_SET_TMP_RSA: | 3145 | case SSL_CTRL_SET_TMP_RSA: |
| 3143 | { | 3146 | { |
| 3144 | RSA *rsa = (RSA *)parg; | 3147 | RSA *rsa = (RSA *)parg; |
| 3145 | if (rsa == NULL) | 3148 | if (rsa == NULL) { |
| 3146 | { | ||
| 3147 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); | 3149 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); |
| 3148 | return(ret); | 3150 | return (ret); |
| 3149 | } | 3151 | } |
| 3150 | if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) | 3152 | if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) { |
| 3151 | { | ||
| 3152 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB); | 3153 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB); |
| 3153 | return(ret); | 3154 | return (ret); |
| 3154 | } | 3155 | } |
| 3155 | if (s->cert->rsa_tmp != NULL) | 3156 | if (s->cert->rsa_tmp != NULL) |
| 3156 | RSA_free(s->cert->rsa_tmp); | 3157 | RSA_free(s->cert->rsa_tmp); |
| 3157 | s->cert->rsa_tmp = rsa; | 3158 | s->cert->rsa_tmp = rsa; |
| @@ -3160,8 +3161,8 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
| 3160 | break; | 3161 | break; |
| 3161 | case SSL_CTRL_SET_TMP_RSA_CB: | 3162 | case SSL_CTRL_SET_TMP_RSA_CB: |
| 3162 | { | 3163 | { |
| 3163 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3164 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
| 3164 | return(ret); | 3165 | return (ret); |
| 3165 | } | 3166 | } |
| 3166 | break; | 3167 | break; |
| 3167 | #endif | 3168 | #endif |
| @@ -3169,25 +3170,21 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
| 3169 | case SSL_CTRL_SET_TMP_DH: | 3170 | case SSL_CTRL_SET_TMP_DH: |
| 3170 | { | 3171 | { |
| 3171 | DH *dh = (DH *)parg; | 3172 | DH *dh = (DH *)parg; |
| 3172 | if (dh == NULL) | 3173 | if (dh == NULL) { |
| 3173 | { | ||
| 3174 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); | 3174 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); |
| 3175 | return(ret); | 3175 | return (ret); |
| 3176 | } | 3176 | } |
| 3177 | if ((dh = DHparams_dup(dh)) == NULL) | 3177 | if ((dh = DHparams_dup(dh)) == NULL) { |
| 3178 | { | ||
| 3179 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); | 3178 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); |
| 3180 | return(ret); | 3179 | return (ret); |
| 3181 | } | 3180 | } |
| 3182 | if (!(s->options & SSL_OP_SINGLE_DH_USE)) | 3181 | if (!(s->options & SSL_OP_SINGLE_DH_USE)) { |
| 3183 | { | 3182 | if (!DH_generate_key(dh)) { |
| 3184 | if (!DH_generate_key(dh)) | ||
| 3185 | { | ||
| 3186 | DH_free(dh); | 3183 | DH_free(dh); |
| 3187 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); | 3184 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); |
| 3188 | return(ret); | 3185 | return (ret); |
| 3189 | } | ||
| 3190 | } | 3186 | } |
| 3187 | } | ||
| 3191 | if (s->cert->dh_tmp != NULL) | 3188 | if (s->cert->dh_tmp != NULL) |
| 3192 | DH_free(s->cert->dh_tmp); | 3189 | DH_free(s->cert->dh_tmp); |
| 3193 | s->cert->dh_tmp = dh; | 3190 | s->cert->dh_tmp = dh; |
| @@ -3196,79 +3193,70 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
| 3196 | break; | 3193 | break; |
| 3197 | case SSL_CTRL_SET_TMP_DH_CB: | 3194 | case SSL_CTRL_SET_TMP_DH_CB: |
| 3198 | { | 3195 | { |
| 3199 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3196 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
| 3200 | return(ret); | 3197 | return (ret); |
| 3201 | } | 3198 | } |
| 3202 | break; | 3199 | break; |
| 3203 | #endif | 3200 | #endif |
| 3204 | #ifndef OPENSSL_NO_ECDH | 3201 | #ifndef OPENSSL_NO_ECDH |
| 3205 | case SSL_CTRL_SET_TMP_ECDH: | 3202 | case SSL_CTRL_SET_TMP_ECDH: |
| 3206 | { | 3203 | { |
| 3207 | EC_KEY *ecdh = NULL; | 3204 | EC_KEY *ecdh = NULL; |
| 3208 | 3205 | ||
| 3209 | if (parg == NULL) | 3206 | if (parg == NULL) { |
| 3210 | { | 3207 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); |
| 3211 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); | 3208 | return (ret); |
| 3212 | return(ret); | ||
| 3213 | } | 3209 | } |
| 3214 | if (!EC_KEY_up_ref((EC_KEY *)parg)) | 3210 | if (!EC_KEY_up_ref((EC_KEY *)parg)) { |
| 3215 | { | 3211 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_ECDH_LIB); |
| 3216 | SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB); | 3212 | return (ret); |
| 3217 | return(ret); | ||
| 3218 | } | 3213 | } |
| 3219 | ecdh = (EC_KEY *)parg; | 3214 | ecdh = (EC_KEY *)parg; |
| 3220 | if (!(s->options & SSL_OP_SINGLE_ECDH_USE)) | 3215 | if (!(s->options & SSL_OP_SINGLE_ECDH_USE)) { |
| 3221 | { | 3216 | if (!EC_KEY_generate_key(ecdh)) { |
| 3222 | if (!EC_KEY_generate_key(ecdh)) | 3217 | EC_KEY_free(ecdh); |
| 3223 | { | 3218 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_ECDH_LIB); |
| 3224 | EC_KEY_free(ecdh); | 3219 | return (ret); |
| 3225 | SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB); | ||
| 3226 | return(ret); | ||
| 3227 | } | 3220 | } |
| 3228 | } | 3221 | } |
| 3229 | if (s->cert->ecdh_tmp != NULL) | 3222 | if (s->cert->ecdh_tmp != NULL) |
| 3230 | EC_KEY_free(s->cert->ecdh_tmp); | 3223 | EC_KEY_free(s->cert->ecdh_tmp); |
| 3231 | s->cert->ecdh_tmp = ecdh; | 3224 | s->cert->ecdh_tmp = ecdh; |
| 3232 | ret = 1; | 3225 | ret = 1; |
| 3233 | } | 3226 | } |
| 3234 | break; | 3227 | break; |
| 3235 | case SSL_CTRL_SET_TMP_ECDH_CB: | 3228 | case SSL_CTRL_SET_TMP_ECDH_CB: |
| 3236 | { | 3229 | { |
| 3237 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3230 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
| 3238 | return(ret); | 3231 | return (ret); |
| 3239 | } | 3232 | } |
| 3240 | break; | 3233 | break; |
| 3241 | #endif /* !OPENSSL_NO_ECDH */ | 3234 | #endif /* !OPENSSL_NO_ECDH */ |
| 3242 | #ifndef OPENSSL_NO_TLSEXT | 3235 | #ifndef OPENSSL_NO_TLSEXT |
| 3243 | case SSL_CTRL_SET_TLSEXT_HOSTNAME: | 3236 | case SSL_CTRL_SET_TLSEXT_HOSTNAME: |
| 3244 | if (larg == TLSEXT_NAMETYPE_host_name) | 3237 | if (larg == TLSEXT_NAMETYPE_host_name) { |
| 3245 | { | 3238 | if (s->tlsext_hostname != NULL) |
| 3246 | if (s->tlsext_hostname != NULL) | ||
| 3247 | OPENSSL_free(s->tlsext_hostname); | 3239 | OPENSSL_free(s->tlsext_hostname); |
| 3248 | s->tlsext_hostname = NULL; | 3240 | s->tlsext_hostname = NULL; |
| 3249 | 3241 | ||
| 3250 | ret = 1; | 3242 | ret = 1; |
| 3251 | if (parg == NULL) | 3243 | if (parg == NULL) |
| 3252 | break; | 3244 | break; |
| 3253 | if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name) | 3245 | if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name) { |
| 3254 | { | ||
| 3255 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME); | 3246 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME); |
| 3256 | return 0; | 3247 | return 0; |
| 3257 | } | 3248 | } |
| 3258 | if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL) | 3249 | if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL) { |
| 3259 | { | ||
| 3260 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR); | 3250 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR); |
| 3261 | return 0; | 3251 | return 0; |
| 3262 | } | ||
| 3263 | } | 3252 | } |
| 3264 | else | 3253 | } else { |
| 3265 | { | ||
| 3266 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE); | 3254 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE); |
| 3267 | return 0; | 3255 | return 0; |
| 3268 | } | 3256 | } |
| 3269 | break; | 3257 | break; |
| 3270 | case SSL_CTRL_SET_TLSEXT_DEBUG_ARG: | 3258 | case SSL_CTRL_SET_TLSEXT_DEBUG_ARG: |
| 3271 | s->tlsext_debug_arg=parg; | 3259 | s->tlsext_debug_arg = parg; |
| 3272 | ret = 1; | 3260 | ret = 1; |
| 3273 | break; | 3261 | break; |
| 3274 | 3262 | ||
| @@ -3276,28 +3264,26 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
| 3276 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT: | 3264 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT: |
| 3277 | if (larg > 12288) /* actual internal limit is 2^16 for the complete hello message | 3265 | if (larg > 12288) /* actual internal limit is 2^16 for the complete hello message |
| 3278 | * (including the cert chain and everything) */ | 3266 | * (including the cert chain and everything) */ |
| 3279 | { | 3267 | { |
| 3280 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG); | 3268 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG); |
| 3281 | break; | 3269 | break; |
| 3282 | } | 3270 | } |
| 3283 | if (s->tlsext_opaque_prf_input != NULL) | 3271 | if (s->tlsext_opaque_prf_input != NULL) |
| 3284 | OPENSSL_free(s->tlsext_opaque_prf_input); | 3272 | OPENSSL_free(s->tlsext_opaque_prf_input); |
| 3285 | if ((size_t)larg == 0) | 3273 | if ((size_t)larg == 0) |
| 3286 | s->tlsext_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */ | 3274 | s->tlsext_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */ |
| 3287 | else | 3275 | else |
| 3288 | s->tlsext_opaque_prf_input = BUF_memdup(parg, (size_t)larg); | 3276 | s->tlsext_opaque_prf_input = BUF_memdup(parg, (size_t)larg); |
| 3289 | if (s->tlsext_opaque_prf_input != NULL) | 3277 | if (s->tlsext_opaque_prf_input != NULL) { |
| 3290 | { | ||
| 3291 | s->tlsext_opaque_prf_input_len = (size_t)larg; | 3278 | s->tlsext_opaque_prf_input_len = (size_t)larg; |
| 3292 | ret = 1; | 3279 | ret = 1; |
| 3293 | } | 3280 | } else |
| 3294 | else | ||
| 3295 | s->tlsext_opaque_prf_input_len = 0; | 3281 | s->tlsext_opaque_prf_input_len = 0; |
| 3296 | break; | 3282 | break; |
| 3297 | #endif | 3283 | #endif |
| 3298 | 3284 | ||
| 3299 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE: | 3285 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE: |
| 3300 | s->tlsext_status_type=larg; | 3286 | s->tlsext_status_type = larg; |
| 3301 | ret = 1; | 3287 | ret = 1; |
| 3302 | break; | 3288 | break; |
| 3303 | 3289 | ||
| @@ -3324,7 +3310,7 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
| 3324 | case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP: | 3310 | case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP: |
| 3325 | *(unsigned char **)parg = s->tlsext_ocsp_resp; | 3311 | *(unsigned char **)parg = s->tlsext_ocsp_resp; |
| 3326 | return s->tlsext_ocsp_resplen; | 3312 | return s->tlsext_ocsp_resplen; |
| 3327 | 3313 | ||
| 3328 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP: | 3314 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP: |
| 3329 | if (s->tlsext_ocsp_resp) | 3315 | if (s->tlsext_ocsp_resp) |
| 3330 | OPENSSL_free(s->tlsext_ocsp_resp); | 3316 | OPENSSL_free(s->tlsext_ocsp_resp); |
| @@ -3357,222 +3343,204 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
| 3357 | #endif /* !OPENSSL_NO_TLSEXT */ | 3343 | #endif /* !OPENSSL_NO_TLSEXT */ |
| 3358 | default: | 3344 | default: |
| 3359 | break; | 3345 | break; |
| 3360 | } | ||
| 3361 | return(ret); | ||
| 3362 | } | 3346 | } |
| 3347 | return (ret); | ||
| 3348 | } | ||
| 3363 | 3349 | ||
| 3364 | long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) | 3350 | long |
| 3365 | { | 3351 | ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) |
| 3366 | int ret=0; | 3352 | { |
| 3353 | int ret = 0; | ||
| 3367 | 3354 | ||
| 3368 | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) | 3355 | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) |
| 3369 | if ( | 3356 | if ( |
| 3370 | #ifndef OPENSSL_NO_RSA | 3357 | #ifndef OPENSSL_NO_RSA |
| 3371 | cmd == SSL_CTRL_SET_TMP_RSA_CB || | 3358 | cmd == SSL_CTRL_SET_TMP_RSA_CB || |
| 3372 | #endif | 3359 | #endif |
| 3373 | #ifndef OPENSSL_NO_DSA | 3360 | #ifndef OPENSSL_NO_DSA |
| 3374 | cmd == SSL_CTRL_SET_TMP_DH_CB || | 3361 | cmd == SSL_CTRL_SET_TMP_DH_CB || |
| 3375 | #endif | 3362 | #endif |
| 3376 | 0) | 3363 | 0) { |
| 3377 | { | 3364 | if (!ssl_cert_inst(&s->cert)) { |
| 3378 | if (!ssl_cert_inst(&s->cert)) | ||
| 3379 | { | ||
| 3380 | SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE); | 3365 | SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE); |
| 3381 | return(0); | 3366 | return (0); |
| 3382 | } | ||
| 3383 | } | 3367 | } |
| 3368 | } | ||
| 3384 | #endif | 3369 | #endif |
| 3385 | 3370 | ||
| 3386 | switch (cmd) | 3371 | switch (cmd) { |
| 3387 | { | ||
| 3388 | #ifndef OPENSSL_NO_RSA | 3372 | #ifndef OPENSSL_NO_RSA |
| 3389 | case SSL_CTRL_SET_TMP_RSA_CB: | 3373 | case SSL_CTRL_SET_TMP_RSA_CB: |
| 3390 | { | 3374 | { |
| 3391 | s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; | 3375 | s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; |
| 3392 | } | 3376 | } |
| 3393 | break; | 3377 | break; |
| 3394 | #endif | 3378 | #endif |
| 3395 | #ifndef OPENSSL_NO_DH | 3379 | #ifndef OPENSSL_NO_DH |
| 3396 | case SSL_CTRL_SET_TMP_DH_CB: | 3380 | case SSL_CTRL_SET_TMP_DH_CB: |
| 3397 | { | 3381 | { |
| 3398 | s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | 3382 | s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; |
| 3399 | } | 3383 | } |
| 3400 | break; | 3384 | break; |
| 3401 | #endif | 3385 | #endif |
| 3402 | #ifndef OPENSSL_NO_ECDH | 3386 | #ifndef OPENSSL_NO_ECDH |
| 3403 | case SSL_CTRL_SET_TMP_ECDH_CB: | 3387 | case SSL_CTRL_SET_TMP_ECDH_CB: |
| 3404 | { | 3388 | { |
| 3405 | s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; | 3389 | s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; |
| 3406 | } | 3390 | } |
| 3407 | break; | 3391 | break; |
| 3408 | #endif | 3392 | #endif |
| 3409 | #ifndef OPENSSL_NO_TLSEXT | 3393 | #ifndef OPENSSL_NO_TLSEXT |
| 3410 | case SSL_CTRL_SET_TLSEXT_DEBUG_CB: | 3394 | case SSL_CTRL_SET_TLSEXT_DEBUG_CB: |
| 3411 | s->tlsext_debug_cb=(void (*)(SSL *,int ,int, | 3395 | s->tlsext_debug_cb = (void (*)(SSL *, int , int, |
| 3412 | unsigned char *, int, void *))fp; | 3396 | unsigned char *, int, void *))fp; |
| 3413 | break; | 3397 | break; |
| 3414 | #endif | 3398 | #endif |
| 3415 | default: | 3399 | default: |
| 3416 | break; | 3400 | break; |
| 3417 | } | ||
| 3418 | return(ret); | ||
| 3419 | } | 3401 | } |
| 3402 | return (ret); | ||
| 3403 | } | ||
| 3420 | 3404 | ||
| 3421 | long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | 3405 | long |
| 3422 | { | 3406 | ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) |
| 3407 | { | ||
| 3423 | CERT *cert; | 3408 | CERT *cert; |
| 3424 | 3409 | ||
| 3425 | cert=ctx->cert; | 3410 | cert = ctx->cert; |
| 3426 | 3411 | ||
| 3427 | switch (cmd) | 3412 | switch (cmd) { |
| 3428 | { | ||
| 3429 | #ifndef OPENSSL_NO_RSA | 3413 | #ifndef OPENSSL_NO_RSA |
| 3430 | case SSL_CTRL_NEED_TMP_RSA: | 3414 | case SSL_CTRL_NEED_TMP_RSA: |
| 3431 | if ( (cert->rsa_tmp == NULL) && | 3415 | if ((cert->rsa_tmp == NULL) && |
| 3432 | ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || | 3416 | ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || |
| 3433 | (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8))) | 3417 | (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512 / 8))) |
| 3434 | ) | 3418 | ) |
| 3435 | return(1); | 3419 | return (1); |
| 3436 | else | 3420 | else |
| 3437 | return(0); | 3421 | return (0); |
| 3438 | /* break; */ | 3422 | /* break; */ |
| 3439 | case SSL_CTRL_SET_TMP_RSA: | 3423 | case SSL_CTRL_SET_TMP_RSA: |
| 3440 | { | 3424 | { |
| 3441 | RSA *rsa; | 3425 | RSA *rsa; |
| 3442 | int i; | 3426 | int i; |
| 3443 | 3427 | ||
| 3444 | rsa=(RSA *)parg; | 3428 | rsa = (RSA *)parg; |
| 3445 | i=1; | 3429 | i = 1; |
| 3446 | if (rsa == NULL) | 3430 | if (rsa == NULL) |
| 3447 | i=0; | 3431 | i = 0; |
| 3448 | else | 3432 | else { |
| 3449 | { | 3433 | if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) |
| 3450 | if ((rsa=RSAPrivateKey_dup(rsa)) == NULL) | 3434 | i = 0; |
| 3451 | i=0; | ||
| 3452 | } | 3435 | } |
| 3453 | if (!i) | 3436 | if (!i) { |
| 3454 | { | 3437 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_RSA_LIB); |
| 3455 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_RSA_LIB); | 3438 | return (0); |
| 3456 | return(0); | 3439 | } else { |
| 3457 | } | 3440 | if (cert->rsa_tmp != NULL) |
| 3458 | else | 3441 | RSA_free(cert->rsa_tmp); |
| 3459 | { | 3442 | cert->rsa_tmp = rsa; |
| 3460 | if (cert->rsa_tmp != NULL) | 3443 | return (1); |
| 3461 | RSA_free(cert->rsa_tmp); | ||
| 3462 | cert->rsa_tmp=rsa; | ||
| 3463 | return(1); | ||
| 3464 | } | 3444 | } |
| 3465 | } | 3445 | } |
| 3466 | /* break; */ | 3446 | /* break; */ |
| 3467 | case SSL_CTRL_SET_TMP_RSA_CB: | 3447 | case SSL_CTRL_SET_TMP_RSA_CB: |
| 3468 | { | 3448 | { |
| 3469 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3449 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
| 3470 | return(0); | 3450 | return (0); |
| 3471 | } | 3451 | } |
| 3472 | break; | 3452 | break; |
| 3473 | #endif | 3453 | #endif |
| 3474 | #ifndef OPENSSL_NO_DH | 3454 | #ifndef OPENSSL_NO_DH |
| 3475 | case SSL_CTRL_SET_TMP_DH: | 3455 | case SSL_CTRL_SET_TMP_DH: |
| 3476 | { | 3456 | { |
| 3477 | DH *new=NULL,*dh; | 3457 | DH *new = NULL, *dh; |
| 3478 | 3458 | ||
| 3479 | dh=(DH *)parg; | 3459 | dh = (DH *)parg; |
| 3480 | if ((new=DHparams_dup(dh)) == NULL) | 3460 | if ((new = DHparams_dup(dh)) == NULL) { |
| 3481 | { | 3461 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_DH_LIB); |
| 3482 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB); | ||
| 3483 | return 0; | ||
| 3484 | } | ||
| 3485 | if (!(ctx->options & SSL_OP_SINGLE_DH_USE)) | ||
| 3486 | { | ||
| 3487 | if (!DH_generate_key(new)) | ||
| 3488 | { | ||
| 3489 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB); | ||
| 3490 | DH_free(new); | ||
| 3491 | return 0; | 3462 | return 0; |
| 3463 | } | ||
| 3464 | if (!(ctx->options & SSL_OP_SINGLE_DH_USE)) { | ||
| 3465 | if (!DH_generate_key(new)) { | ||
| 3466 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_DH_LIB); | ||
| 3467 | DH_free(new); | ||
| 3468 | return 0; | ||
| 3492 | } | 3469 | } |
| 3493 | } | 3470 | } |
| 3494 | if (cert->dh_tmp != NULL) | 3471 | if (cert->dh_tmp != NULL) |
| 3495 | DH_free(cert->dh_tmp); | 3472 | DH_free(cert->dh_tmp); |
| 3496 | cert->dh_tmp=new; | 3473 | cert->dh_tmp = new; |
| 3497 | return 1; | 3474 | return 1; |
| 3498 | } | 3475 | } |
| 3499 | /*break; */ | 3476 | /*break; */ |
| 3500 | case SSL_CTRL_SET_TMP_DH_CB: | 3477 | case SSL_CTRL_SET_TMP_DH_CB: |
| 3501 | { | 3478 | { |
| 3502 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3479 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
| 3503 | return(0); | 3480 | return (0); |
| 3504 | } | 3481 | } |
| 3505 | break; | 3482 | break; |
| 3506 | #endif | 3483 | #endif |
| 3507 | #ifndef OPENSSL_NO_ECDH | 3484 | #ifndef OPENSSL_NO_ECDH |
| 3508 | case SSL_CTRL_SET_TMP_ECDH: | 3485 | case SSL_CTRL_SET_TMP_ECDH: |
| 3509 | { | 3486 | { |
| 3510 | EC_KEY *ecdh = NULL; | 3487 | EC_KEY *ecdh = NULL; |
| 3511 | 3488 | ||
| 3512 | if (parg == NULL) | 3489 | if (parg == NULL) { |
| 3513 | { | 3490 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_ECDH_LIB); |
| 3514 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB); | 3491 | return 0; |
| 3515 | return 0; | ||
| 3516 | } | ||
| 3517 | ecdh = EC_KEY_dup((EC_KEY *)parg); | ||
| 3518 | if (ecdh == NULL) | ||
| 3519 | { | ||
| 3520 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_EC_LIB); | ||
| 3521 | return 0; | ||
| 3522 | } | 3492 | } |
| 3523 | if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE)) | 3493 | ecdh = EC_KEY_dup((EC_KEY *)parg); |
| 3524 | { | 3494 | if (ecdh == NULL) { |
| 3525 | if (!EC_KEY_generate_key(ecdh)) | 3495 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_EC_LIB); |
| 3526 | { | ||
| 3527 | EC_KEY_free(ecdh); | ||
| 3528 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB); | ||
| 3529 | return 0; | 3496 | return 0; |
| 3497 | } | ||
| 3498 | if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE)) { | ||
| 3499 | if (!EC_KEY_generate_key(ecdh)) { | ||
| 3500 | EC_KEY_free(ecdh); | ||
| 3501 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_ECDH_LIB); | ||
| 3502 | return 0; | ||
| 3530 | } | 3503 | } |
| 3531 | } | 3504 | } |
| 3532 | 3505 | ||
| 3533 | if (cert->ecdh_tmp != NULL) | 3506 | if (cert->ecdh_tmp != NULL) { |
| 3534 | { | 3507 | EC_KEY_free(cert->ecdh_tmp); |
| 3535 | EC_KEY_free(cert->ecdh_tmp); | ||
| 3536 | } | 3508 | } |
| 3537 | cert->ecdh_tmp = ecdh; | 3509 | cert->ecdh_tmp = ecdh; |
| 3538 | return 1; | 3510 | return 1; |
| 3539 | } | 3511 | } |
| 3540 | /* break; */ | 3512 | /* break; */ |
| 3541 | case SSL_CTRL_SET_TMP_ECDH_CB: | 3513 | case SSL_CTRL_SET_TMP_ECDH_CB: |
| 3542 | { | 3514 | { |
| 3543 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3515 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
| 3544 | return(0); | 3516 | return (0); |
| 3545 | } | 3517 | } |
| 3546 | break; | 3518 | break; |
| 3547 | #endif /* !OPENSSL_NO_ECDH */ | 3519 | #endif /* !OPENSSL_NO_ECDH */ |
| 3548 | #ifndef OPENSSL_NO_TLSEXT | 3520 | #ifndef OPENSSL_NO_TLSEXT |
| 3549 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG: | 3521 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG: |
| 3550 | ctx->tlsext_servername_arg=parg; | 3522 | ctx->tlsext_servername_arg = parg; |
| 3551 | break; | 3523 | break; |
| 3552 | case SSL_CTRL_SET_TLSEXT_TICKET_KEYS: | 3524 | case SSL_CTRL_SET_TLSEXT_TICKET_KEYS: |
| 3553 | case SSL_CTRL_GET_TLSEXT_TICKET_KEYS: | 3525 | case SSL_CTRL_GET_TLSEXT_TICKET_KEYS: |
| 3554 | { | 3526 | { |
| 3555 | unsigned char *keys = parg; | 3527 | unsigned char *keys = parg; |
| 3556 | if (!keys) | 3528 | if (!keys) |
| 3557 | return 48; | 3529 | return 48; |
| 3558 | if (larg != 48) | 3530 | if (larg != 48) { |
| 3559 | { | 3531 | SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH); |
| 3560 | SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH); | 3532 | return 0; |
| 3561 | return 0; | ||
| 3562 | } | ||
| 3563 | if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) | ||
| 3564 | { | ||
| 3565 | memcpy(ctx->tlsext_tick_key_name, keys, 16); | ||
| 3566 | memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16); | ||
| 3567 | memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16); | ||
| 3568 | } | 3533 | } |
| 3569 | else | 3534 | if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) { |
| 3570 | { | 3535 | memcpy(ctx->tlsext_tick_key_name, keys, 16); |
| 3571 | memcpy(keys, ctx->tlsext_tick_key_name, 16); | 3536 | memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16); |
| 3572 | memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16); | 3537 | memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16); |
| 3573 | memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16); | 3538 | } else { |
| 3539 | memcpy(keys, ctx->tlsext_tick_key_name, 16); | ||
| 3540 | memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16); | ||
| 3541 | memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16); | ||
| 3574 | } | 3542 | } |
| 3575 | return 1; | 3543 | return 1; |
| 3576 | } | 3544 | } |
| 3577 | 3545 | ||
| 3578 | #ifdef TLSEXT_TYPE_opaque_prf_input | 3546 | #ifdef TLSEXT_TYPE_opaque_prf_input |
| @@ -3582,7 +3550,7 @@ long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
| 3582 | #endif | 3550 | #endif |
| 3583 | 3551 | ||
| 3584 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: | 3552 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: |
| 3585 | ctx->tlsext_status_arg=parg; | 3553 | ctx->tlsext_status_arg = parg; |
| 3586 | return 1; | 3554 | return 1; |
| 3587 | break; | 3555 | break; |
| 3588 | 3556 | ||
| @@ -3594,182 +3562,182 @@ long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
| 3594 | ctx->srp_ctx.login = NULL; | 3562 | ctx->srp_ctx.login = NULL; |
| 3595 | if (parg == NULL) | 3563 | if (parg == NULL) |
| 3596 | break; | 3564 | break; |
| 3597 | if (strlen((const char *)parg) > 255 || strlen((const char *)parg) < 1) | 3565 | if (strlen((const char *)parg) > 255 || strlen((const char *)parg) < 1) { |
| 3598 | { | ||
| 3599 | SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_SRP_USERNAME); | 3566 | SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_SRP_USERNAME); |
| 3600 | return 0; | 3567 | return 0; |
| 3601 | } | 3568 | } |
| 3602 | if ((ctx->srp_ctx.login = BUF_strdup((char *)parg)) == NULL) | 3569 | if ((ctx->srp_ctx.login = BUF_strdup((char *)parg)) == NULL) { |
| 3603 | { | ||
| 3604 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR); | 3570 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR); |
| 3605 | return 0; | 3571 | return 0; |
| 3606 | } | 3572 | } |
| 3607 | break; | 3573 | break; |
| 3608 | case SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD: | 3574 | case SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD: |
| 3609 | ctx->srp_ctx.SRP_give_srp_client_pwd_callback=srp_password_from_info_cb; | 3575 | ctx->srp_ctx.SRP_give_srp_client_pwd_callback = srp_password_from_info_cb; |
| 3610 | ctx->srp_ctx.info=parg; | 3576 | ctx->srp_ctx.info = parg; |
| 3611 | break; | 3577 | break; |
| 3612 | case SSL_CTRL_SET_SRP_ARG: | 3578 | case SSL_CTRL_SET_SRP_ARG: |
| 3613 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; | 3579 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; |
| 3614 | ctx->srp_ctx.SRP_cb_arg=parg; | 3580 | ctx->srp_ctx.SRP_cb_arg = parg; |
| 3615 | break; | 3581 | break; |
| 3616 | 3582 | ||
| 3617 | case SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH: | 3583 | case SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH: |
| 3618 | ctx->srp_ctx.strength=larg; | 3584 | ctx->srp_ctx.strength = larg; |
| 3619 | break; | 3585 | break; |
| 3620 | #endif | 3586 | #endif |
| 3621 | #endif /* !OPENSSL_NO_TLSEXT */ | 3587 | #endif /* !OPENSSL_NO_TLSEXT */ |
| 3622 | 3588 | ||
| 3623 | /* A Thawte special :-) */ | 3589 | /* A Thawte special :-) */ |
| 3624 | case SSL_CTRL_EXTRA_CHAIN_CERT: | 3590 | case SSL_CTRL_EXTRA_CHAIN_CERT: |
| 3625 | if (ctx->extra_certs == NULL) | 3591 | if (ctx->extra_certs == NULL) { |
| 3626 | { | 3592 | if ((ctx->extra_certs = sk_X509_new_null()) == NULL) |
| 3627 | if ((ctx->extra_certs=sk_X509_new_null()) == NULL) | 3593 | return (0); |
| 3628 | return(0); | 3594 | } |
| 3629 | } | ||
| 3630 | sk_X509_push(ctx->extra_certs,(X509 *)parg); | 3595 | sk_X509_push(ctx->extra_certs,(X509 *)parg); |
| 3631 | break; | 3596 | break; |
| 3632 | 3597 | ||
| 3633 | case SSL_CTRL_GET_EXTRA_CHAIN_CERTS: | 3598 | case SSL_CTRL_GET_EXTRA_CHAIN_CERTS: |
| 3634 | *(STACK_OF(X509) **)parg = ctx->extra_certs; | 3599 | *(STACK_OF(X509) **)parg = ctx->extra_certs; |
| 3635 | break; | 3600 | break; |
| 3636 | 3601 | ||
| 3637 | case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS: | 3602 | case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS: |
| 3638 | if (ctx->extra_certs) | 3603 | if (ctx->extra_certs) { |
| 3639 | { | ||
| 3640 | sk_X509_pop_free(ctx->extra_certs, X509_free); | 3604 | sk_X509_pop_free(ctx->extra_certs, X509_free); |
| 3641 | ctx->extra_certs = NULL; | 3605 | ctx->extra_certs = NULL; |
| 3642 | } | 3606 | } |
| 3643 | break; | 3607 | break; |
| 3644 | 3608 | ||
| 3645 | default: | 3609 | default: |
| 3646 | return(0); | 3610 | return (0); |
| 3647 | } | ||
| 3648 | return(1); | ||
| 3649 | } | 3611 | } |
| 3612 | return (1); | ||
| 3613 | } | ||
| 3650 | 3614 | ||
| 3651 | long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) | 3615 | long |
| 3652 | { | 3616 | ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) |
| 3617 | { | ||
| 3653 | CERT *cert; | 3618 | CERT *cert; |
| 3654 | 3619 | ||
| 3655 | cert=ctx->cert; | 3620 | cert = ctx->cert; |
| 3656 | 3621 | ||
| 3657 | switch (cmd) | 3622 | switch (cmd) { |
| 3658 | { | ||
| 3659 | #ifndef OPENSSL_NO_RSA | 3623 | #ifndef OPENSSL_NO_RSA |
| 3660 | case SSL_CTRL_SET_TMP_RSA_CB: | 3624 | case SSL_CTRL_SET_TMP_RSA_CB: |
| 3661 | { | 3625 | { |
| 3662 | cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; | 3626 | cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; |
| 3663 | } | 3627 | } |
| 3664 | break; | 3628 | break; |
| 3665 | #endif | 3629 | #endif |
| 3666 | #ifndef OPENSSL_NO_DH | 3630 | #ifndef OPENSSL_NO_DH |
| 3667 | case SSL_CTRL_SET_TMP_DH_CB: | 3631 | case SSL_CTRL_SET_TMP_DH_CB: |
| 3668 | { | 3632 | { |
| 3669 | cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | 3633 | cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; |
| 3670 | } | 3634 | } |
| 3671 | break; | 3635 | break; |
| 3672 | #endif | 3636 | #endif |
| 3673 | #ifndef OPENSSL_NO_ECDH | 3637 | #ifndef OPENSSL_NO_ECDH |
| 3674 | case SSL_CTRL_SET_TMP_ECDH_CB: | 3638 | case SSL_CTRL_SET_TMP_ECDH_CB: |
| 3675 | { | 3639 | { |
| 3676 | cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; | 3640 | cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; |
| 3677 | } | 3641 | } |
| 3678 | break; | 3642 | break; |
| 3679 | #endif | 3643 | #endif |
| 3680 | #ifndef OPENSSL_NO_TLSEXT | 3644 | #ifndef OPENSSL_NO_TLSEXT |
| 3681 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: | 3645 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: |
| 3682 | ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp; | 3646 | ctx->tlsext_servername_callback = (int (*)(SSL *, int *, void *))fp; |
| 3683 | break; | 3647 | break; |
| 3684 | 3648 | ||
| 3685 | #ifdef TLSEXT_TYPE_opaque_prf_input | 3649 | #ifdef TLSEXT_TYPE_opaque_prf_input |
| 3686 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB: | 3650 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB: |
| 3687 | ctx->tlsext_opaque_prf_input_callback = (int (*)(SSL *,void *, size_t, void *))fp; | 3651 | ctx->tlsext_opaque_prf_input_callback = (int (*)(SSL *, void *, size_t, void *))fp; |
| 3688 | break; | 3652 | break; |
| 3689 | #endif | 3653 | #endif |
| 3690 | 3654 | ||
| 3691 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: | 3655 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: |
| 3692 | ctx->tlsext_status_cb=(int (*)(SSL *,void *))fp; | 3656 | ctx->tlsext_status_cb = (int (*)(SSL *, void *))fp; |
| 3693 | break; | 3657 | break; |
| 3694 | 3658 | ||
| 3695 | case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB: | 3659 | case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB: |
| 3696 | ctx->tlsext_ticket_key_cb=(int (*)(SSL *,unsigned char *, | 3660 | ctx->tlsext_ticket_key_cb = (int (*)(SSL *, unsigned char *, |
| 3697 | unsigned char *, | 3661 | unsigned char *, EVP_CIPHER_CTX *, HMAC_CTX *, int))fp; |
| 3698 | EVP_CIPHER_CTX *, | ||
| 3699 | HMAC_CTX *, int))fp; | ||
| 3700 | break; | 3662 | break; |
| 3701 | 3663 | ||
| 3702 | #ifndef OPENSSL_NO_SRP | 3664 | #ifndef OPENSSL_NO_SRP |
| 3703 | case SSL_CTRL_SET_SRP_VERIFY_PARAM_CB: | 3665 | case SSL_CTRL_SET_SRP_VERIFY_PARAM_CB: |
| 3704 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; | 3666 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; |
| 3705 | ctx->srp_ctx.SRP_verify_param_callback=(int (*)(SSL *,void *))fp; | 3667 | ctx->srp_ctx.SRP_verify_param_callback = |
| 3668 | (int (*)(SSL *, void *))fp; | ||
| 3706 | break; | 3669 | break; |
| 3707 | case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB: | 3670 | case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB: |
| 3708 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; | 3671 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; |
| 3709 | ctx->srp_ctx.TLS_ext_srp_username_callback=(int (*)(SSL *,int *,void *))fp; | 3672 | ctx->srp_ctx.TLS_ext_srp_username_callback = |
| 3673 | (int (*)(SSL *, int *, void *))fp; | ||
| 3710 | break; | 3674 | break; |
| 3711 | case SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB: | 3675 | case SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB: |
| 3712 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; | 3676 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; |
| 3713 | ctx->srp_ctx.SRP_give_srp_client_pwd_callback=(char *(*)(SSL *,void *))fp; | 3677 | ctx->srp_ctx.SRP_give_srp_client_pwd_callback = |
| 3678 | (char *(*)(SSL *, void *))fp; | ||
| 3714 | break; | 3679 | break; |
| 3715 | #endif | 3680 | #endif |
| 3716 | #endif | 3681 | #endif |
| 3717 | default: | 3682 | default: |
| 3718 | return(0); | 3683 | return (0); |
| 3719 | } | ||
| 3720 | return(1); | ||
| 3721 | } | 3684 | } |
| 3685 | return (1); | ||
| 3686 | } | ||
| 3722 | 3687 | ||
| 3723 | /* This function needs to check if the ciphers required are actually | 3688 | /* This function needs to check if the ciphers required are actually |
| 3724 | * available */ | 3689 | * available */ |
| 3725 | const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p) | 3690 | const SSL_CIPHER |
| 3726 | { | 3691 | *ssl3_get_cipher_by_char(const unsigned char *p) |
| 3692 | { | ||
| 3727 | SSL_CIPHER c; | 3693 | SSL_CIPHER c; |
| 3728 | const SSL_CIPHER *cp; | 3694 | const SSL_CIPHER *cp; |
| 3729 | unsigned long id; | 3695 | unsigned long id; |
| 3730 | 3696 | ||
| 3731 | id=0x03000000L|((unsigned long)p[0]<<8L)|(unsigned long)p[1]; | 3697 | id = 0x03000000L | ((unsigned long)p[0] << 8L) | (unsigned long)p[1]; |
| 3732 | c.id=id; | 3698 | c.id = id; |
| 3733 | cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS); | 3699 | cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS); |
| 3734 | #ifdef DEBUG_PRINT_UNKNOWN_CIPHERSUITES | 3700 | #ifdef DEBUG_PRINT_UNKNOWN_CIPHERSUITES |
| 3735 | if (cp == NULL) fprintf(stderr, "Unknown cipher ID %x\n", (p[0] << 8) | p[1]); | 3701 | if (cp == NULL) |
| 3702 | fprintf(stderr, "Unknown cipher ID %x\n", (p[0] << 8) | p[1]); | ||
| 3736 | #endif | 3703 | #endif |
| 3737 | if (cp == NULL || cp->valid == 0) | 3704 | if (cp == NULL || cp->valid == 0) |
| 3738 | return NULL; | 3705 | return NULL; |
| 3739 | else | 3706 | else |
| 3740 | return cp; | 3707 | return cp; |
| 3741 | } | 3708 | } |
| 3742 | 3709 | ||
| 3743 | int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p) | 3710 | int |
| 3744 | { | 3711 | ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p) |
| 3712 | { | ||
| 3745 | long l; | 3713 | long l; |
| 3746 | 3714 | ||
| 3747 | if (p != NULL) | 3715 | if (p != NULL) { |
| 3748 | { | 3716 | l = c->id; |
| 3749 | l=c->id; | 3717 | if ((l & 0xff000000) != 0x03000000) |
| 3750 | if ((l & 0xff000000) != 0x03000000) return(0); | 3718 | return (0); |
| 3751 | p[0]=((unsigned char)(l>> 8L))&0xFF; | 3719 | p[0] = ((unsigned char)(l >> 8L)) & 0xFF; |
| 3752 | p[1]=((unsigned char)(l ))&0xFF; | 3720 | p[1] = ((unsigned char)(l)) & 0xFF; |
| 3753 | } | ||
| 3754 | return(2); | ||
| 3755 | } | 3721 | } |
| 3722 | return (2); | ||
| 3723 | } | ||
| 3756 | 3724 | ||
| 3757 | SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, | 3725 | SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, |
| 3758 | STACK_OF(SSL_CIPHER) *srvr) | 3726 | STACK_OF(SSL_CIPHER) *srvr) |
| 3759 | { | 3727 | { |
| 3760 | SSL_CIPHER *c,*ret=NULL; | 3728 | SSL_CIPHER *c, *ret = NULL; |
| 3761 | STACK_OF(SSL_CIPHER) *prio, *allow; | 3729 | STACK_OF(SSL_CIPHER) *prio, *allow; |
| 3762 | int i,ii,ok; | 3730 | int i, ii, ok; |
| 3763 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_EC) | 3731 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_EC) |
| 3764 | unsigned int j; | 3732 | unsigned int j; |
| 3765 | int ec_ok, ec_nid; | 3733 | int ec_ok, ec_nid; |
| 3766 | unsigned char ec_search1 = 0, ec_search2 = 0; | 3734 | unsigned char ec_search1 = 0, ec_search2 = 0; |
| 3767 | #endif | 3735 | #endif |
| 3768 | CERT *cert; | 3736 | CERT *cert; |
| 3769 | unsigned long alg_k,alg_a,mask_k,mask_a,emask_k,emask_a; | 3737 | unsigned long alg_k, alg_a, mask_k, mask_a, emask_k, emask_a; |
| 3770 | 3738 | ||
| 3771 | /* Let's see which ciphers we can support */ | 3739 | /* Let's see which ciphers we can support */ |
| 3772 | cert=s->cert; | 3740 | cert = s->cert; |
| 3773 | 3741 | ||
| 3774 | #if 0 | 3742 | #if 0 |
| 3775 | /* Do not set the compare functions, because this may lead to a | 3743 | /* Do not set the compare functions, because this may lead to a |
| @@ -3783,62 +3751,55 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, | |||
| 3783 | 3751 | ||
| 3784 | #ifdef CIPHER_DEBUG | 3752 | #ifdef CIPHER_DEBUG |
| 3785 | printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr); | 3753 | printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr); |
| 3786 | for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i) | 3754 | for (i = 0; i < sk_SSL_CIPHER_num(srvr); ++i) { |
| 3787 | { | 3755 | c = sk_SSL_CIPHER_value(srvr, i); |
| 3788 | c=sk_SSL_CIPHER_value(srvr,i); | 3756 | printf("%p:%s\n",(void *)c, c->name); |
| 3789 | printf("%p:%s\n",(void *)c,c->name); | 3757 | } |
| 3790 | } | ||
| 3791 | printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)clnt); | 3758 | printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)clnt); |
| 3792 | for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i) | 3759 | for (i = 0; i < sk_SSL_CIPHER_num(clnt); ++i) { |
| 3793 | { | 3760 | c = sk_SSL_CIPHER_value(clnt, i); |
| 3794 | c=sk_SSL_CIPHER_value(clnt,i); | 3761 | printf("%p:%s\n",(void *)c, c->name); |
| 3795 | printf("%p:%s\n",(void *)c,c->name); | 3762 | } |
| 3796 | } | ||
| 3797 | #endif | 3763 | #endif |
| 3798 | 3764 | ||
| 3799 | if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) | 3765 | if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) { |
| 3800 | { | ||
| 3801 | prio = srvr; | 3766 | prio = srvr; |
| 3802 | allow = clnt; | 3767 | allow = clnt; |
| 3803 | } | 3768 | } else { |
| 3804 | else | ||
| 3805 | { | ||
| 3806 | prio = clnt; | 3769 | prio = clnt; |
| 3807 | allow = srvr; | 3770 | allow = srvr; |
| 3808 | } | 3771 | } |
| 3809 | 3772 | ||
| 3810 | for (i=0; i<sk_SSL_CIPHER_num(prio); i++) | 3773 | for (i = 0; i < sk_SSL_CIPHER_num(prio); i++) { |
| 3811 | { | 3774 | c = sk_SSL_CIPHER_value(prio, i); |
| 3812 | c=sk_SSL_CIPHER_value(prio,i); | ||
| 3813 | 3775 | ||
| 3814 | /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */ | 3776 | /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */ |
| 3815 | if ((c->algorithm_ssl & SSL_TLSV1_2) && | 3777 | if ((c->algorithm_ssl & SSL_TLSV1_2) && |
| 3816 | (TLS1_get_version(s) < TLS1_2_VERSION)) | 3778 | (TLS1_get_version(s) < TLS1_2_VERSION)) |
| 3817 | continue; | 3779 | continue; |
| 3818 | 3780 | ||
| 3819 | ssl_set_cert_masks(cert,c); | 3781 | ssl_set_cert_masks(cert, c); |
| 3820 | mask_k = cert->mask_k; | 3782 | mask_k = cert->mask_k; |
| 3821 | mask_a = cert->mask_a; | 3783 | mask_a = cert->mask_a; |
| 3822 | emask_k = cert->export_mask_k; | 3784 | emask_k = cert->export_mask_k; |
| 3823 | emask_a = cert->export_mask_a; | 3785 | emask_a = cert->export_mask_a; |
| 3824 | #ifndef OPENSSL_NO_SRP | 3786 | #ifndef OPENSSL_NO_SRP |
| 3825 | mask_k=cert->mask_k | s->srp_ctx.srp_Mask; | 3787 | mask_k = cert->mask_k | s->srp_ctx.srp_Mask; |
| 3826 | emask_k=cert->export_mask_k | s->srp_ctx.srp_Mask; | 3788 | emask_k = cert->export_mask_k | s->srp_ctx.srp_Mask; |
| 3827 | #endif | 3789 | #endif |
| 3828 | 3790 | ||
| 3829 | #ifdef KSSL_DEBUG | 3791 | #ifdef KSSL_DEBUG |
| 3830 | /* printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);*/ | 3792 | /* printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);*/ |
| 3831 | #endif /* KSSL_DEBUG */ | 3793 | #endif /* KSSL_DEBUG */ |
| 3832 | 3794 | ||
| 3833 | alg_k=c->algorithm_mkey; | 3795 | alg_k = c->algorithm_mkey; |
| 3834 | alg_a=c->algorithm_auth; | 3796 | alg_a = c->algorithm_auth; |
| 3835 | 3797 | ||
| 3836 | #ifndef OPENSSL_NO_KRB5 | 3798 | #ifndef OPENSSL_NO_KRB5 |
| 3837 | if (alg_k & SSL_kKRB5) | 3799 | if (alg_k & SSL_kKRB5) { |
| 3838 | { | 3800 | if (!kssl_keytab_is_available(s->kssl_ctx) ) |
| 3839 | if ( !kssl_keytab_is_available(s->kssl_ctx) ) | 3801 | continue; |
| 3840 | continue; | 3802 | } |
| 3841 | } | ||
| 3842 | #endif /* OPENSSL_NO_KRB5 */ | 3803 | #endif /* OPENSSL_NO_KRB5 */ |
| 3843 | #ifndef OPENSSL_NO_PSK | 3804 | #ifndef OPENSSL_NO_PSK |
| 3844 | /* with PSK there must be server callback set */ | 3805 | /* with PSK there must be server callback set */ |
| @@ -3846,449 +3807,405 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, | |||
| 3846 | continue; | 3807 | continue; |
| 3847 | #endif /* OPENSSL_NO_PSK */ | 3808 | #endif /* OPENSSL_NO_PSK */ |
| 3848 | 3809 | ||
| 3849 | if (SSL_C_IS_EXPORT(c)) | 3810 | if (SSL_C_IS_EXPORT(c)) { |
| 3850 | { | ||
| 3851 | ok = (alg_k & emask_k) && (alg_a & emask_a); | 3811 | ok = (alg_k & emask_k) && (alg_a & emask_a); |
| 3852 | #ifdef CIPHER_DEBUG | 3812 | #ifdef CIPHER_DEBUG |
| 3853 | printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n",ok,alg_k,alg_a,emask_k,emask_a, | 3813 | printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n", ok, alg_k, alg_a, emask_k, emask_a, |
| 3854 | (void *)c,c->name); | 3814 | (void *)c, c->name); |
| 3855 | #endif | 3815 | #endif |
| 3856 | } | 3816 | } else { |
| 3857 | else | ||
| 3858 | { | ||
| 3859 | ok = (alg_k & mask_k) && (alg_a & mask_a); | 3817 | ok = (alg_k & mask_k) && (alg_a & mask_a); |
| 3860 | #ifdef CIPHER_DEBUG | 3818 | #ifdef CIPHER_DEBUG |
| 3861 | printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",ok,alg_k,alg_a,mask_k,mask_a,(void *)c, | 3819 | printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n", ok, alg_k, alg_a, mask_k, mask_a,(void *)c, |
| 3862 | c->name); | 3820 | c->name); |
| 3863 | #endif | 3821 | #endif |
| 3864 | } | 3822 | } |
| 3865 | 3823 | ||
| 3866 | #ifndef OPENSSL_NO_TLSEXT | 3824 | #ifndef OPENSSL_NO_TLSEXT |
| 3867 | #ifndef OPENSSL_NO_EC | 3825 | #ifndef OPENSSL_NO_EC |
| 3868 | if ( | 3826 | if ( |
| 3869 | /* if we are considering an ECC cipher suite that uses our certificate */ | 3827 | /* if we are considering an ECC cipher suite that uses our certificate */ |
| 3870 | (alg_a & SSL_aECDSA || alg_a & SSL_aECDH) | 3828 | (alg_a & SSL_aECDSA || alg_a & SSL_aECDH) |
| 3871 | /* and we have an ECC certificate */ | 3829 | /* and we have an ECC certificate */ |
| 3872 | && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL) | 3830 | && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL) |
| 3873 | /* and the client specified a Supported Point Formats extension */ | 3831 | /* and the client specified a Supported Point Formats extension */ |
| 3874 | && ((s->session->tlsext_ecpointformatlist_length > 0) && (s->session->tlsext_ecpointformatlist != NULL)) | 3832 | && ((s->session->tlsext_ecpointformatlist_length > 0) && (s->session->tlsext_ecpointformatlist != NULL)) |
| 3875 | /* and our certificate's point is compressed */ | 3833 | /* and our certificate's point is compressed */ |
| 3876 | && ( | 3834 | && ( |
| 3877 | (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info != NULL) | 3835 | (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info != NULL) |
| 3878 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key != NULL) | 3836 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key != NULL) |
| 3879 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key != NULL) | 3837 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key != NULL) |
| 3880 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data != NULL) | 3838 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data != NULL) |
| 3881 | && ( | 3839 | && ( |
| 3882 | (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED) | 3840 | (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED) |
| 3883 | || (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED + 1) | 3841 | || (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED + 1) |
| 3884 | ) | ||
| 3885 | ) | ||
| 3886 | ) | 3842 | ) |
| 3887 | { | 3843 | ) |
| 3844 | ) { | ||
| 3888 | ec_ok = 0; | 3845 | ec_ok = 0; |
| 3889 | /* if our certificate's curve is over a field type that the client does not support | 3846 | /* if our certificate's curve is over a field type that the client does not support |
| 3890 | * then do not allow this cipher suite to be negotiated */ | 3847 | * then do not allow this cipher suite to be negotiated */ |
| 3891 | if ( | 3848 | if ( |
| 3892 | (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL) | 3849 | (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL) |
| 3893 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL) | 3850 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL) |
| 3894 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL) | 3851 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL) |
| 3895 | && (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field) | 3852 | && (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field) |
| 3896 | ) | 3853 | ) { |
| 3897 | { | 3854 | for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++) { |
| 3898 | for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++) | 3855 | if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime) { |
| 3899 | { | ||
| 3900 | if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime) | ||
| 3901 | { | ||
| 3902 | ec_ok = 1; | 3856 | ec_ok = 1; |
| 3903 | break; | 3857 | break; |
| 3904 | } | ||
| 3905 | } | 3858 | } |
| 3906 | } | 3859 | } |
| 3907 | else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field) | 3860 | } else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field) { |
| 3908 | { | 3861 | for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++) { |
| 3909 | for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++) | 3862 | if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2) { |
| 3910 | { | ||
| 3911 | if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2) | ||
| 3912 | { | ||
| 3913 | ec_ok = 1; | 3863 | ec_ok = 1; |
| 3914 | break; | 3864 | break; |
| 3915 | } | ||
| 3916 | } | 3865 | } |
| 3917 | } | 3866 | } |
| 3918 | ok = ok && ec_ok; | ||
| 3919 | } | 3867 | } |
| 3868 | ok = ok && ec_ok; | ||
| 3869 | } | ||
| 3920 | if ( | 3870 | if ( |
| 3921 | /* if we are considering an ECC cipher suite that uses our certificate */ | 3871 | /* if we are considering an ECC cipher suite that uses our certificate */ |
| 3922 | (alg_a & SSL_aECDSA || alg_a & SSL_aECDH) | 3872 | (alg_a & SSL_aECDSA || alg_a & SSL_aECDH) |
| 3923 | /* and we have an ECC certificate */ | 3873 | /* and we have an ECC certificate */ |
| 3924 | && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL) | 3874 | && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL) |
| 3925 | /* and the client specified an EllipticCurves extension */ | 3875 | /* and the client specified an EllipticCurves extension */ |
| 3926 | && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL)) | 3876 | && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL)) |
| 3927 | ) | 3877 | ) { |
| 3928 | { | ||
| 3929 | ec_ok = 0; | 3878 | ec_ok = 0; |
| 3930 | if ( | 3879 | if ( |
| 3931 | (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL) | 3880 | (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL) |
| 3932 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL) | 3881 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL) |
| 3933 | ) | 3882 | ) { |
| 3934 | { | ||
| 3935 | ec_nid = EC_GROUP_get_curve_name(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group); | 3883 | ec_nid = EC_GROUP_get_curve_name(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group); |
| 3936 | if ((ec_nid == 0) | 3884 | if ((ec_nid == 0) |
| 3937 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL) | 3885 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL) |
| 3938 | ) | 3886 | ) { |
| 3939 | { | 3887 | if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field) { |
| 3940 | if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field) | ||
| 3941 | { | ||
| 3942 | ec_search1 = 0xFF; | 3888 | ec_search1 = 0xFF; |
| 3943 | ec_search2 = 0x01; | 3889 | ec_search2 = 0x01; |
| 3944 | } | 3890 | } else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field) { |
| 3945 | else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field) | ||
| 3946 | { | ||
| 3947 | ec_search1 = 0xFF; | 3891 | ec_search1 = 0xFF; |
| 3948 | ec_search2 = 0x02; | 3892 | ec_search2 = 0x02; |
| 3949 | } | ||
| 3950 | } | 3893 | } |
| 3951 | else | 3894 | } else { |
| 3952 | { | ||
| 3953 | ec_search1 = 0x00; | 3895 | ec_search1 = 0x00; |
| 3954 | ec_search2 = tls1_ec_nid2curve_id(ec_nid); | 3896 | ec_search2 = tls1_ec_nid2curve_id(ec_nid); |
| 3955 | } | 3897 | } |
| 3956 | if ((ec_search1 != 0) || (ec_search2 != 0)) | 3898 | if ((ec_search1 != 0) || (ec_search2 != 0)) { |
| 3957 | { | 3899 | for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++) { |
| 3958 | for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++) | 3900 | if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j + 1] == ec_search2)) { |
| 3959 | { | ||
| 3960 | if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j+1] == ec_search2)) | ||
| 3961 | { | ||
| 3962 | ec_ok = 1; | 3901 | ec_ok = 1; |
| 3963 | break; | 3902 | break; |
| 3964 | } | ||
| 3965 | } | 3903 | } |
| 3966 | } | 3904 | } |
| 3967 | } | 3905 | } |
| 3968 | ok = ok && ec_ok; | ||
| 3969 | } | 3906 | } |
| 3907 | ok = ok && ec_ok; | ||
| 3908 | } | ||
| 3970 | if ( | 3909 | if ( |
| 3971 | /* if we are considering an ECC cipher suite that uses an ephemeral EC key */ | 3910 | /* if we are considering an ECC cipher suite that uses an ephemeral EC key */ |
| 3972 | (alg_k & SSL_kEECDH) | 3911 | (alg_k & SSL_kEECDH) |
| 3973 | /* and we have an ephemeral EC key */ | 3912 | /* and we have an ephemeral EC key */ |
| 3974 | && (s->cert->ecdh_tmp != NULL) | 3913 | && (s->cert->ecdh_tmp != NULL) |
| 3975 | /* and the client specified an EllipticCurves extension */ | 3914 | /* and the client specified an EllipticCurves extension */ |
| 3976 | && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL)) | 3915 | && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL)) |
| 3977 | ) | 3916 | ) { |
| 3978 | { | ||
| 3979 | ec_ok = 0; | 3917 | ec_ok = 0; |
| 3980 | if (s->cert->ecdh_tmp->group != NULL) | 3918 | if (s->cert->ecdh_tmp->group != NULL) { |
| 3981 | { | ||
| 3982 | ec_nid = EC_GROUP_get_curve_name(s->cert->ecdh_tmp->group); | 3919 | ec_nid = EC_GROUP_get_curve_name(s->cert->ecdh_tmp->group); |
| 3983 | if ((ec_nid == 0) | 3920 | if ((ec_nid == 0) |
| 3984 | && (s->cert->ecdh_tmp->group->meth != NULL) | 3921 | && (s->cert->ecdh_tmp->group->meth != NULL) |
| 3985 | ) | 3922 | ) { |
| 3986 | { | 3923 | if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_prime_field) { |
| 3987 | if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_prime_field) | ||
| 3988 | { | ||
| 3989 | ec_search1 = 0xFF; | 3924 | ec_search1 = 0xFF; |
| 3990 | ec_search2 = 0x01; | 3925 | ec_search2 = 0x01; |
| 3991 | } | 3926 | } else if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_characteristic_two_field) { |
| 3992 | else if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_characteristic_two_field) | ||
| 3993 | { | ||
| 3994 | ec_search1 = 0xFF; | 3927 | ec_search1 = 0xFF; |
| 3995 | ec_search2 = 0x02; | 3928 | ec_search2 = 0x02; |
| 3996 | } | ||
| 3997 | } | 3929 | } |
| 3998 | else | 3930 | } else { |
| 3999 | { | ||
| 4000 | ec_search1 = 0x00; | 3931 | ec_search1 = 0x00; |
| 4001 | ec_search2 = tls1_ec_nid2curve_id(ec_nid); | 3932 | ec_search2 = tls1_ec_nid2curve_id(ec_nid); |
| 4002 | } | 3933 | } |
| 4003 | if ((ec_search1 != 0) || (ec_search2 != 0)) | 3934 | if ((ec_search1 != 0) || (ec_search2 != 0)) { |
| 4004 | { | 3935 | for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++) { |
| 4005 | for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++) | 3936 | if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j + 1] == ec_search2)) { |
| 4006 | { | ||
| 4007 | if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j+1] == ec_search2)) | ||
| 4008 | { | ||
| 4009 | ec_ok = 1; | 3937 | ec_ok = 1; |
| 4010 | break; | 3938 | break; |
| 4011 | } | ||
| 4012 | } | 3939 | } |
| 4013 | } | 3940 | } |
| 4014 | } | 3941 | } |
| 4015 | ok = ok && ec_ok; | ||
| 4016 | } | 3942 | } |
| 3943 | ok = ok && ec_ok; | ||
| 3944 | } | ||
| 4017 | #endif /* OPENSSL_NO_EC */ | 3945 | #endif /* OPENSSL_NO_EC */ |
| 4018 | #endif /* OPENSSL_NO_TLSEXT */ | 3946 | #endif /* OPENSSL_NO_TLSEXT */ |
| 4019 | 3947 | ||
| 4020 | if (!ok) continue; | 3948 | if (!ok) |
| 4021 | ii=sk_SSL_CIPHER_find(allow,c); | 3949 | continue; |
| 4022 | if (ii >= 0) | 3950 | ii = sk_SSL_CIPHER_find(allow, c); |
| 4023 | { | 3951 | if (ii >= 0) { |
| 4024 | #if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT) | 3952 | #if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT) |
| 4025 | if ((alg_k & SSL_kEECDH) && (alg_a & SSL_aECDSA) && s->s3->is_probably_safari) | 3953 | if ((alg_k & SSL_kEECDH) && (alg_a & SSL_aECDSA) && s->s3->is_probably_safari) { |
| 4026 | { | 3954 | if (!ret) |
| 4027 | if (!ret) ret=sk_SSL_CIPHER_value(allow,ii); | 3955 | ret = sk_SSL_CIPHER_value(allow, ii); |
| 4028 | continue; | 3956 | continue; |
| 4029 | } | 3957 | } |
| 4030 | #endif | 3958 | #endif |
| 4031 | ret=sk_SSL_CIPHER_value(allow,ii); | 3959 | ret = sk_SSL_CIPHER_value(allow, ii); |
| 4032 | break; | 3960 | break; |
| 4033 | } | ||
| 4034 | } | 3961 | } |
| 4035 | return(ret); | ||
| 4036 | } | 3962 | } |
| 3963 | return (ret); | ||
| 3964 | } | ||
| 4037 | 3965 | ||
| 4038 | int ssl3_get_req_cert_type(SSL *s, unsigned char *p) | 3966 | int |
| 4039 | { | 3967 | ssl3_get_req_cert_type(SSL *s, unsigned char *p) |
| 4040 | int ret=0; | 3968 | { |
| 3969 | int ret = 0; | ||
| 4041 | unsigned long alg_k; | 3970 | unsigned long alg_k; |
| 4042 | 3971 | ||
| 4043 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 3972 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; |
| 4044 | 3973 | ||
| 4045 | #ifndef OPENSSL_NO_GOST | 3974 | #ifndef OPENSSL_NO_GOST |
| 4046 | if (s->version >= TLS1_VERSION) | 3975 | if (s->version >= TLS1_VERSION) { |
| 4047 | { | 3976 | if (alg_k & SSL_kGOST) { |
| 4048 | if (alg_k & SSL_kGOST) | 3977 | p[ret++] = TLS_CT_GOST94_SIGN; |
| 4049 | { | 3978 | p[ret++] = TLS_CT_GOST01_SIGN; |
| 4050 | p[ret++]=TLS_CT_GOST94_SIGN; | 3979 | return (ret); |
| 4051 | p[ret++]=TLS_CT_GOST01_SIGN; | ||
| 4052 | return(ret); | ||
| 4053 | } | ||
| 4054 | } | 3980 | } |
| 3981 | } | ||
| 4055 | #endif | 3982 | #endif |
| 4056 | 3983 | ||
| 4057 | #ifndef OPENSSL_NO_DH | 3984 | #ifndef OPENSSL_NO_DH |
| 4058 | if (alg_k & (SSL_kDHr|SSL_kEDH)) | 3985 | if (alg_k & (SSL_kDHr|SSL_kEDH)) { |
| 4059 | { | ||
| 4060 | # ifndef OPENSSL_NO_RSA | 3986 | # ifndef OPENSSL_NO_RSA |
| 4061 | p[ret++]=SSL3_CT_RSA_FIXED_DH; | 3987 | p[ret++] = SSL3_CT_RSA_FIXED_DH; |
| 4062 | # endif | 3988 | # endif |
| 4063 | # ifndef OPENSSL_NO_DSA | 3989 | # ifndef OPENSSL_NO_DSA |
| 4064 | p[ret++]=SSL3_CT_DSS_FIXED_DH; | 3990 | p[ret++] = SSL3_CT_DSS_FIXED_DH; |
| 4065 | # endif | 3991 | # endif |
| 4066 | } | 3992 | } |
| 4067 | if ((s->version == SSL3_VERSION) && | 3993 | if ((s->version == SSL3_VERSION) && |
| 4068 | (alg_k & (SSL_kEDH|SSL_kDHd|SSL_kDHr))) | 3994 | (alg_k & (SSL_kEDH|SSL_kDHd|SSL_kDHr))) { |
| 4069 | { | ||
| 4070 | # ifndef OPENSSL_NO_RSA | 3995 | # ifndef OPENSSL_NO_RSA |
| 4071 | p[ret++]=SSL3_CT_RSA_EPHEMERAL_DH; | 3996 | p[ret++] = SSL3_CT_RSA_EPHEMERAL_DH; |
| 4072 | # endif | 3997 | # endif |
| 4073 | # ifndef OPENSSL_NO_DSA | 3998 | # ifndef OPENSSL_NO_DSA |
| 4074 | p[ret++]=SSL3_CT_DSS_EPHEMERAL_DH; | 3999 | p[ret++] = SSL3_CT_DSS_EPHEMERAL_DH; |
| 4075 | # endif | 4000 | # endif |
| 4076 | } | 4001 | } |
| 4077 | #endif /* !OPENSSL_NO_DH */ | 4002 | #endif /* !OPENSSL_NO_DH */ |
| 4078 | #ifndef OPENSSL_NO_RSA | 4003 | #ifndef OPENSSL_NO_RSA |
| 4079 | p[ret++]=SSL3_CT_RSA_SIGN; | 4004 | p[ret++] = SSL3_CT_RSA_SIGN; |
| 4080 | #endif | 4005 | #endif |
| 4081 | #ifndef OPENSSL_NO_DSA | 4006 | #ifndef OPENSSL_NO_DSA |
| 4082 | p[ret++]=SSL3_CT_DSS_SIGN; | 4007 | p[ret++] = SSL3_CT_DSS_SIGN; |
| 4083 | #endif | 4008 | #endif |
| 4084 | #ifndef OPENSSL_NO_ECDH | 4009 | #ifndef OPENSSL_NO_ECDH |
| 4085 | if ((alg_k & (SSL_kECDHr|SSL_kECDHe)) && (s->version >= TLS1_VERSION)) | 4010 | if ((alg_k & (SSL_kECDHr|SSL_kECDHe)) && (s->version >= TLS1_VERSION)) { |
| 4086 | { | 4011 | p[ret++] = TLS_CT_RSA_FIXED_ECDH; |
| 4087 | p[ret++]=TLS_CT_RSA_FIXED_ECDH; | 4012 | p[ret++] = TLS_CT_ECDSA_FIXED_ECDH; |
| 4088 | p[ret++]=TLS_CT_ECDSA_FIXED_ECDH; | 4013 | } |
| 4089 | } | ||
| 4090 | #endif | 4014 | #endif |
| 4091 | 4015 | ||
| 4092 | #ifndef OPENSSL_NO_ECDSA | 4016 | #ifndef OPENSSL_NO_ECDSA |
| 4093 | /* ECDSA certs can be used with RSA cipher suites as well | 4017 | /* ECDSA certs can be used with RSA cipher suites as well |
| 4094 | * so we don't need to check for SSL_kECDH or SSL_kEECDH | 4018 | * so we don't need to check for SSL_kECDH or SSL_kEECDH |
| 4095 | */ | 4019 | */ |
| 4096 | if (s->version >= TLS1_VERSION) | 4020 | if (s->version >= TLS1_VERSION) { |
| 4097 | { | 4021 | p[ret++] = TLS_CT_ECDSA_SIGN; |
| 4098 | p[ret++]=TLS_CT_ECDSA_SIGN; | ||
| 4099 | } | ||
| 4100 | #endif | ||
| 4101 | return(ret); | ||
| 4102 | } | 4022 | } |
| 4023 | #endif | ||
| 4024 | return (ret); | ||
| 4025 | } | ||
| 4103 | 4026 | ||
| 4104 | int ssl3_shutdown(SSL *s) | 4027 | int |
| 4105 | { | 4028 | ssl3_shutdown(SSL *s) |
| 4029 | { | ||
| 4106 | int ret; | 4030 | int ret; |
| 4107 | 4031 | ||
| 4108 | /* Don't do anything much if we have not done the handshake or | 4032 | /* Don't do anything much if we have not done the handshake or |
| 4109 | * we don't want to send messages :-) */ | 4033 | * we don't want to send messages :-) */ |
| 4110 | if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE)) | 4034 | if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE)) { |
| 4111 | { | 4035 | s->shutdown = (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); |
| 4112 | s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); | 4036 | return (1); |
| 4113 | return(1); | 4037 | } |
| 4114 | } | ||
| 4115 | 4038 | ||
| 4116 | if (!(s->shutdown & SSL_SENT_SHUTDOWN)) | 4039 | if (!(s->shutdown & SSL_SENT_SHUTDOWN)) { |
| 4117 | { | ||
| 4118 | s->shutdown|=SSL_SENT_SHUTDOWN; | 4040 | s->shutdown|=SSL_SENT_SHUTDOWN; |
| 4119 | #if 1 | 4041 | #if 1 |
| 4120 | ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY); | 4042 | ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_CLOSE_NOTIFY); |
| 4121 | #endif | 4043 | #endif |
| 4122 | /* our shutdown alert has been sent now, and if it still needs | 4044 | /* our shutdown alert has been sent now, and if it still needs |
| 4123 | * to be written, s->s3->alert_dispatch will be true */ | 4045 | * to be written, s->s3->alert_dispatch will be true */ |
| 4124 | if (s->s3->alert_dispatch) | 4046 | if (s->s3->alert_dispatch) |
| 4125 | return(-1); /* return WANT_WRITE */ | 4047 | return(-1); /* return WANT_WRITE */ |
| 4126 | } | 4048 | } else if (s->s3->alert_dispatch) { |
| 4127 | else if (s->s3->alert_dispatch) | ||
| 4128 | { | ||
| 4129 | /* resend it if not sent */ | 4049 | /* resend it if not sent */ |
| 4130 | #if 1 | 4050 | #if 1 |
| 4131 | ret=s->method->ssl_dispatch_alert(s); | 4051 | ret = s->method->ssl_dispatch_alert(s); |
| 4132 | if(ret == -1) | 4052 | if (ret == -1) { |
| 4133 | { | ||
| 4134 | /* we only get to return -1 here the 2nd/Nth | 4053 | /* we only get to return -1 here the 2nd/Nth |
| 4135 | * invocation, we must have already signalled | 4054 | * invocation, we must have already signalled |
| 4136 | * return 0 upon a previous invoation, | 4055 | * return 0 upon a previous invoation, |
| 4137 | * return WANT_WRITE */ | 4056 | * return WANT_WRITE */ |
| 4138 | return(ret); | 4057 | return (ret); |
| 4139 | } | ||
| 4140 | #endif | ||
| 4141 | } | 4058 | } |
| 4142 | else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) | 4059 | #endif |
| 4143 | { | 4060 | } else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) { |
| 4144 | /* If we are waiting for a close from our peer, we are closed */ | 4061 | /* If we are waiting for a close from our peer, we are closed */ |
| 4145 | s->method->ssl_read_bytes(s,0,NULL,0,0); | 4062 | s->method->ssl_read_bytes(s, 0, NULL, 0, 0); |
| 4146 | if(!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) | 4063 | if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) { |
| 4147 | { | ||
| 4148 | return(-1); /* return WANT_READ */ | 4064 | return(-1); /* return WANT_READ */ |
| 4149 | } | ||
| 4150 | } | 4065 | } |
| 4066 | } | ||
| 4151 | 4067 | ||
| 4152 | if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) && | 4068 | if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) && |
| 4153 | !s->s3->alert_dispatch) | 4069 | !s->s3->alert_dispatch) |
| 4154 | return(1); | 4070 | return (1); |
| 4155 | else | 4071 | else |
| 4156 | return(0); | 4072 | return (0); |
| 4157 | } | 4073 | } |
| 4158 | 4074 | ||
| 4159 | int ssl3_write(SSL *s, const void *buf, int len) | 4075 | int |
| 4160 | { | 4076 | ssl3_write(SSL *s, const void *buf, int len) |
| 4161 | int ret,n; | 4077 | { |
| 4078 | int ret, n; | ||
| 4162 | 4079 | ||
| 4163 | #if 0 | 4080 | #if 0 |
| 4164 | if (s->shutdown & SSL_SEND_SHUTDOWN) | 4081 | if (s->shutdown & SSL_SEND_SHUTDOWN) { |
| 4165 | { | 4082 | s->rwstate = SSL_NOTHING; |
| 4166 | s->rwstate=SSL_NOTHING; | 4083 | return (0); |
| 4167 | return(0); | 4084 | } |
| 4168 | } | ||
| 4169 | #endif | 4085 | #endif |
| 4170 | errno = 0; | 4086 | errno = 0; |
| 4171 | if (s->s3->renegotiate) ssl3_renegotiate_check(s); | 4087 | if (s->s3->renegotiate) |
| 4088 | ssl3_renegotiate_check(s); | ||
| 4172 | 4089 | ||
| 4173 | /* This is an experimental flag that sends the | 4090 | /* This is an experimental flag that sends the |
| 4174 | * last handshake message in the same packet as the first | 4091 | * last handshake message in the same packet as the first |
| 4175 | * use data - used to see if it helps the TCP protocol during | 4092 | * use data - used to see if it helps the TCP protocol during |
| 4176 | * session-id reuse */ | 4093 | * session-id reuse */ |
| 4177 | /* The second test is because the buffer may have been removed */ | 4094 | /* The second test is because the buffer may have been removed */ |
| 4178 | if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) | 4095 | if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) { |
| 4179 | { | ||
| 4180 | /* First time through, we write into the buffer */ | 4096 | /* First time through, we write into the buffer */ |
| 4181 | if (s->s3->delay_buf_pop_ret == 0) | 4097 | if (s->s3->delay_buf_pop_ret == 0) { |
| 4182 | { | 4098 | ret = ssl3_write_bytes(s, SSL3_RT_APPLICATION_DATA, |
| 4183 | ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA, | 4099 | buf, len); |
| 4184 | buf,len); | 4100 | if (ret <= 0) |
| 4185 | if (ret <= 0) return(ret); | 4101 | return (ret); |
| 4186 | 4102 | ||
| 4187 | s->s3->delay_buf_pop_ret=ret; | 4103 | s->s3->delay_buf_pop_ret = ret; |
| 4188 | } | 4104 | } |
| 4189 | 4105 | ||
| 4190 | s->rwstate=SSL_WRITING; | 4106 | s->rwstate = SSL_WRITING; |
| 4191 | n=BIO_flush(s->wbio); | 4107 | n = BIO_flush(s->wbio); |
| 4192 | if (n <= 0) return(n); | 4108 | if (n <= 0) |
| 4193 | s->rwstate=SSL_NOTHING; | 4109 | return (n); |
| 4110 | s->rwstate = SSL_NOTHING; | ||
| 4194 | 4111 | ||
| 4195 | /* We have flushed the buffer, so remove it */ | 4112 | /* We have flushed the buffer, so remove it */ |
| 4196 | ssl_free_wbio_buffer(s); | 4113 | ssl_free_wbio_buffer(s); |
| 4197 | s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER; | 4114 | s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER; |
| 4198 | 4115 | ||
| 4199 | ret=s->s3->delay_buf_pop_ret; | 4116 | ret = s->s3->delay_buf_pop_ret; |
| 4200 | s->s3->delay_buf_pop_ret=0; | 4117 | s->s3->delay_buf_pop_ret = 0; |
| 4201 | } | 4118 | } else { |
| 4202 | else | 4119 | ret = s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA, |
| 4203 | { | 4120 | buf, len); |
| 4204 | ret=s->method->ssl_write_bytes(s,SSL3_RT_APPLICATION_DATA, | 4121 | if (ret <= 0) |
| 4205 | buf,len); | 4122 | return (ret); |
| 4206 | if (ret <= 0) return(ret); | ||
| 4207 | } | ||
| 4208 | |||
| 4209 | return(ret); | ||
| 4210 | } | 4123 | } |
| 4211 | 4124 | ||
| 4212 | static int ssl3_read_internal(SSL *s, void *buf, int len, int peek) | 4125 | return (ret); |
| 4213 | { | 4126 | } |
| 4127 | |||
| 4128 | static int | ||
| 4129 | ssl3_read_internal(SSL *s, void *buf, int len, int peek) | ||
| 4130 | { | ||
| 4214 | int ret; | 4131 | int ret; |
| 4215 | 4132 | ||
| 4216 | errno = 0; | 4133 | errno = 0; |
| 4217 | if (s->s3->renegotiate) ssl3_renegotiate_check(s); | 4134 | if (s->s3->renegotiate) |
| 4218 | s->s3->in_read_app_data=1; | 4135 | ssl3_renegotiate_check(s); |
| 4219 | ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek); | 4136 | s->s3->in_read_app_data = 1; |
| 4220 | if ((ret == -1) && (s->s3->in_read_app_data == 2)) | 4137 | ret = s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len, peek); |
| 4221 | { | 4138 | if ((ret == -1) && (s->s3->in_read_app_data == 2)) { |
| 4222 | /* ssl3_read_bytes decided to call s->handshake_func, which | 4139 | /* ssl3_read_bytes decided to call s->handshake_func, which |
| 4223 | * called ssl3_read_bytes to read handshake data. | 4140 | * called ssl3_read_bytes to read handshake data. |
| 4224 | * However, ssl3_read_bytes actually found application data | 4141 | * However, ssl3_read_bytes actually found application data |
| 4225 | * and thinks that application data makes sense here; so disable | 4142 | * and thinks that application data makes sense here; so disable |
| 4226 | * handshake processing and try to read application data again. */ | 4143 | * handshake processing and try to read application data again. */ |
| 4227 | s->in_handshake++; | 4144 | s->in_handshake++; |
| 4228 | ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek); | 4145 | ret = s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len, peek); |
| 4229 | s->in_handshake--; | 4146 | s->in_handshake--; |
| 4230 | } | 4147 | } else |
| 4231 | else | 4148 | s->s3->in_read_app_data = 0; |
| 4232 | s->s3->in_read_app_data=0; | ||
| 4233 | 4149 | ||
| 4234 | return(ret); | 4150 | return (ret); |
| 4235 | } | 4151 | } |
| 4236 | 4152 | ||
| 4237 | int ssl3_read(SSL *s, void *buf, int len) | 4153 | int |
| 4238 | { | 4154 | ssl3_read(SSL *s, void *buf, int len) |
| 4155 | { | ||
| 4239 | return ssl3_read_internal(s, buf, len, 0); | 4156 | return ssl3_read_internal(s, buf, len, 0); |
| 4240 | } | 4157 | } |
| 4241 | 4158 | ||
| 4242 | int ssl3_peek(SSL *s, void *buf, int len) | 4159 | int |
| 4243 | { | 4160 | ssl3_peek(SSL *s, void *buf, int len) |
| 4161 | { | ||
| 4244 | return ssl3_read_internal(s, buf, len, 1); | 4162 | return ssl3_read_internal(s, buf, len, 1); |
| 4245 | } | 4163 | } |
| 4246 | 4164 | ||
| 4247 | int ssl3_renegotiate(SSL *s) | 4165 | int |
| 4248 | { | 4166 | ssl3_renegotiate(SSL *s) |
| 4167 | { | ||
| 4249 | if (s->handshake_func == NULL) | 4168 | if (s->handshake_func == NULL) |
| 4250 | return(1); | 4169 | return (1); |
| 4251 | 4170 | ||
| 4252 | if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) | 4171 | if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) |
| 4253 | return(0); | 4172 | return (0); |
| 4254 | 4173 | ||
| 4255 | s->s3->renegotiate=1; | 4174 | s->s3->renegotiate = 1; |
| 4256 | return(1); | 4175 | return (1); |
| 4257 | } | 4176 | } |
| 4258 | 4177 | ||
| 4259 | int ssl3_renegotiate_check(SSL *s) | 4178 | int |
| 4260 | { | 4179 | ssl3_renegotiate_check(SSL *s) |
| 4261 | int ret=0; | 4180 | { |
| 4181 | int ret = 0; | ||
| 4262 | 4182 | ||
| 4263 | if (s->s3->renegotiate) | 4183 | if (s->s3->renegotiate) { |
| 4264 | { | 4184 | if ((s->s3->rbuf.left == 0) && (s->s3->wbuf.left == 0) && |
| 4265 | if ( (s->s3->rbuf.left == 0) && | 4185 | !SSL_in_init(s)) { |
| 4266 | (s->s3->wbuf.left == 0) && | ||
| 4267 | !SSL_in_init(s)) | ||
| 4268 | { | ||
| 4269 | /* | 4186 | /* |
| 4270 | if we are the server, and we have sent a 'RENEGOTIATE' message, we | 4187 | if we are the server, and we have sent a 'RENEGOTIATE' message, we |
| 4271 | need to go to SSL_ST_ACCEPT. | 4188 | need to go to SSL_ST_ACCEPT. |
| 4272 | */ | 4189 | */ |
| 4273 | /* SSL_ST_ACCEPT */ | 4190 | /* SSL_ST_ACCEPT */ |
| 4274 | s->state=SSL_ST_RENEGOTIATE; | 4191 | s->state = SSL_ST_RENEGOTIATE; |
| 4275 | s->s3->renegotiate=0; | 4192 | s->s3->renegotiate = 0; |
| 4276 | s->s3->num_renegotiations++; | 4193 | s->s3->num_renegotiations++; |
| 4277 | s->s3->total_renegotiations++; | 4194 | s->s3->total_renegotiations++; |
| 4278 | ret=1; | 4195 | ret = 1; |
| 4279 | } | ||
| 4280 | } | 4196 | } |
| 4281 | return(ret); | ||
| 4282 | } | 4197 | } |
| 4198 | return (ret); | ||
| 4199 | } | ||
| 4283 | /* If we are using TLS v1.2 or later and default SHA1+MD5 algorithms switch | 4200 | /* If we are using TLS v1.2 or later and default SHA1+MD5 algorithms switch |
| 4284 | * to new SHA256 PRF and handshake macs | 4201 | * to new SHA256 PRF and handshake macs |
| 4285 | */ | 4202 | */ |
| 4286 | long ssl_get_algorithm2(SSL *s) | 4203 | long |
| 4287 | { | 4204 | ssl_get_algorithm2(SSL *s) |
| 4205 | { | ||
| 4288 | long alg2 = s->s3->tmp.new_cipher->algorithm2; | 4206 | long alg2 = s->s3->tmp.new_cipher->algorithm2; |
| 4289 | if (s->method->version == TLS1_2_VERSION && | 4207 | if (s->method->version == TLS1_2_VERSION && |
| 4290 | alg2 == (SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF)) | 4208 | alg2 == (SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF)) |
| 4291 | return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256; | 4209 | return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256; |
| 4292 | return alg2; | 4210 | return alg2; |
| 4293 | } | 4211 | } |
| 4294 | |||
diff --git a/src/lib/libssl/src/ssl/s3_meth.c b/src/lib/libssl/src/ssl/s3_meth.c index cdddb17b62..ff3b0d3303 100644 --- a/src/lib/libssl/src/ssl/s3_meth.c +++ b/src/lib/libssl/src/ssl/s3_meth.c | |||
| @@ -61,17 +61,15 @@ | |||
| 61 | #include "ssl_locl.h" | 61 | #include "ssl_locl.h" |
| 62 | 62 | ||
| 63 | static const SSL_METHOD *ssl3_get_method(int ver); | 63 | static const SSL_METHOD *ssl3_get_method(int ver); |
| 64 | static const SSL_METHOD *ssl3_get_method(int ver) | 64 | static const SSL_METHOD |
| 65 | { | 65 | *ssl3_get_method(int ver) |
| 66 | { | ||
| 66 | if (ver == SSL3_VERSION) | 67 | if (ver == SSL3_VERSION) |
| 67 | return(SSLv3_method()); | 68 | return (SSLv3_method()); |
| 68 | else | 69 | else |
| 69 | return(NULL); | 70 | return (NULL); |
| 70 | } | 71 | } |
| 71 | 72 | ||
| 72 | IMPLEMENT_ssl3_meth_func(SSLv3_method, | 73 | IMPLEMENT_ssl3_meth_func(SSLv3_method, |
| 73 | ssl3_accept, | 74 | ssl3_accept, ssl3_connect, ssl3_get_method) |
| 74 | ssl3_connect, | ||
| 75 | ssl3_get_method) | ||
| 76 | |||
| 77 | 75 | ||
diff --git a/src/lib/libssl/src/ssl/s3_pkt.c b/src/lib/libssl/src/ssl/s3_pkt.c index 6b55d21a3e..6c677d9f6b 100644 --- a/src/lib/libssl/src/ssl/s3_pkt.c +++ b/src/lib/libssl/src/ssl/s3_pkt.c | |||
| @@ -118,11 +118,12 @@ | |||
| 118 | #include <openssl/rand.h> | 118 | #include <openssl/rand.h> |
| 119 | 119 | ||
| 120 | static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, | 120 | static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, |
| 121 | unsigned int len, int create_empty_fragment); | 121 | unsigned int len, int create_empty_fragment); |
| 122 | static int ssl3_get_record(SSL *s); | 122 | static int ssl3_get_record(SSL *s); |
| 123 | 123 | ||
| 124 | int ssl3_read_n(SSL *s, int n, int max, int extend) | 124 | int |
| 125 | { | 125 | ssl3_read_n(SSL *s, int n, int max, int extend) |
| 126 | { | ||
| 126 | /* If extend == 0, obtain new n-byte packet; if extend == 1, increase | 127 | /* If extend == 0, obtain new n-byte packet; if extend == 1, increase |
| 127 | * packet by another n bytes. | 128 | * packet by another n bytes. |
| 128 | * The packet will be in the sub-array of s->s3->rbuf.buf specified | 129 | * The packet will be in the sub-array of s->s3->rbuf.buf specified |
| @@ -130,37 +131,35 @@ int ssl3_read_n(SSL *s, int n, int max, int extend) | |||
| 130 | * (If s->read_ahead is set, 'max' bytes may be stored in rbuf | 131 | * (If s->read_ahead is set, 'max' bytes may be stored in rbuf |
| 131 | * [plus s->packet_length bytes if extend == 1].) | 132 | * [plus s->packet_length bytes if extend == 1].) |
| 132 | */ | 133 | */ |
| 133 | int i,len,left; | 134 | int i, len, left; |
| 134 | long align=0; | 135 | long align = 0; |
| 135 | unsigned char *pkt; | 136 | unsigned char *pkt; |
| 136 | SSL3_BUFFER *rb; | 137 | SSL3_BUFFER *rb; |
| 137 | 138 | ||
| 138 | if (n <= 0) return n; | 139 | if (n <= 0) |
| 140 | return n; | ||
| 139 | 141 | ||
| 140 | rb = &(s->s3->rbuf); | 142 | rb = &(s->s3->rbuf); |
| 141 | if (rb->buf == NULL) | 143 | if (rb->buf == NULL) |
| 142 | if (!ssl3_setup_read_buffer(s)) | 144 | if (!ssl3_setup_read_buffer(s)) |
| 143 | return -1; | 145 | return -1; |
| 144 | 146 | ||
| 145 | left = rb->left; | 147 | left = rb->left; |
| 146 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 148 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
| 147 | align = (long)rb->buf + SSL3_RT_HEADER_LENGTH; | 149 | align = (long)rb->buf + SSL3_RT_HEADER_LENGTH; |
| 148 | align = (-align)&(SSL3_ALIGN_PAYLOAD-1); | 150 | align = (-align)&(SSL3_ALIGN_PAYLOAD - 1); |
| 149 | #endif | 151 | #endif |
| 150 | 152 | ||
| 151 | if (!extend) | 153 | if (!extend) { |
| 152 | { | ||
| 153 | /* start with empty packet ... */ | 154 | /* start with empty packet ... */ |
| 154 | if (left == 0) | 155 | if (left == 0) |
| 155 | rb->offset = align; | 156 | rb->offset = align; |
| 156 | else if (align != 0 && left >= SSL3_RT_HEADER_LENGTH) | 157 | else if (align != 0 && left >= SSL3_RT_HEADER_LENGTH) { |
| 157 | { | ||
| 158 | /* check if next packet length is large | 158 | /* check if next packet length is large |
| 159 | * enough to justify payload alignment... */ | 159 | * enough to justify payload alignment... */ |
| 160 | pkt = rb->buf + rb->offset; | 160 | pkt = rb->buf + rb->offset; |
| 161 | if (pkt[0] == SSL3_RT_APPLICATION_DATA | 161 | if (pkt[0] == SSL3_RT_APPLICATION_DATA |
| 162 | && (pkt[3]<<8|pkt[4]) >= 128) | 162 | && (pkt[3]<<8|pkt[4]) >= 128) { |
| 163 | { | ||
| 164 | /* Note that even if packet is corrupted | 163 | /* Note that even if packet is corrupted |
| 165 | * and its length field is insane, we can | 164 | * and its length field is insane, we can |
| 166 | * only be led to wrong decision about | 165 | * only be led to wrong decision about |
| @@ -168,109 +167,100 @@ int ssl3_read_n(SSL *s, int n, int max, int extend) | |||
| 168 | * Header values has no effect on memmove | 167 | * Header values has no effect on memmove |
| 169 | * arguments and therefore no buffer | 168 | * arguments and therefore no buffer |
| 170 | * overrun can be triggered. */ | 169 | * overrun can be triggered. */ |
| 171 | memmove (rb->buf+align,pkt,left); | 170 | memmove (rb->buf + align, pkt, left); |
| 172 | rb->offset = align; | 171 | rb->offset = align; |
| 173 | } | ||
| 174 | } | 172 | } |
| 173 | } | ||
| 175 | s->packet = rb->buf + rb->offset; | 174 | s->packet = rb->buf + rb->offset; |
| 176 | s->packet_length = 0; | 175 | s->packet_length = 0; |
| 177 | /* ... now we can act as if 'extend' was set */ | 176 | /* ... now we can act as if 'extend' was set */ |
| 178 | } | 177 | } |
| 179 | 178 | ||
| 180 | /* For DTLS/UDP reads should not span multiple packets | 179 | /* For DTLS/UDP reads should not span multiple packets |
| 181 | * because the read operation returns the whole packet | 180 | * because the read operation returns the whole packet |
| 182 | * at once (as long as it fits into the buffer). */ | 181 | * at once (as long as it fits into the buffer). */ |
| 183 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) | 182 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) { |
| 184 | { | ||
| 185 | if (left > 0 && n > left) | 183 | if (left > 0 && n > left) |
| 186 | n = left; | 184 | n = left; |
| 187 | } | 185 | } |
| 188 | 186 | ||
| 189 | /* if there is enough in the buffer from a previous read, take some */ | 187 | /* if there is enough in the buffer from a previous read, take some */ |
| 190 | if (left >= n) | 188 | if (left >= n) { |
| 191 | { | 189 | s->packet_length += n; |
| 192 | s->packet_length+=n; | 190 | rb->left = left - n; |
| 193 | rb->left=left-n; | 191 | rb->offset += n; |
| 194 | rb->offset+=n; | 192 | return (n); |
| 195 | return(n); | 193 | } |
| 196 | } | ||
| 197 | 194 | ||
| 198 | /* else we need to read more data */ | 195 | /* else we need to read more data */ |
| 199 | 196 | ||
| 200 | len = s->packet_length; | 197 | len = s->packet_length; |
| 201 | pkt = rb->buf+align; | 198 | pkt = rb->buf + align; |
| 202 | /* Move any available bytes to front of buffer: | 199 | /* Move any available bytes to front of buffer: |
| 203 | * 'len' bytes already pointed to by 'packet', | 200 | * 'len' bytes already pointed to by 'packet', |
| 204 | * 'left' extra ones at the end */ | 201 | * 'left' extra ones at the end */ |
| 205 | if (s->packet != pkt) /* len > 0 */ | 202 | if (s->packet != pkt) /* len > 0 */ |
| 206 | { | 203 | { |
| 207 | memmove(pkt, s->packet, len+left); | 204 | memmove(pkt, s->packet, len + left); |
| 208 | s->packet = pkt; | 205 | s->packet = pkt; |
| 209 | rb->offset = len + align; | 206 | rb->offset = len + align; |
| 210 | } | 207 | } |
| 211 | 208 | ||
| 212 | if (n > (int)(rb->len - rb->offset)) /* does not happen */ | 209 | if (n > (int)(rb->len - rb->offset)) /* does not happen */ |
| 213 | { | 210 | { |
| 214 | SSLerr(SSL_F_SSL3_READ_N,ERR_R_INTERNAL_ERROR); | 211 | SSLerr(SSL_F_SSL3_READ_N, ERR_R_INTERNAL_ERROR); |
| 215 | return -1; | 212 | return -1; |
| 216 | } | 213 | } |
| 217 | 214 | ||
| 218 | if (!s->read_ahead) | 215 | if (!s->read_ahead) |
| 219 | /* ignore max parameter */ | 216 | /* ignore max parameter */ |
| 220 | max = n; | 217 | max = n; |
| 221 | else | 218 | else { |
| 222 | { | ||
| 223 | if (max < n) | 219 | if (max < n) |
| 224 | max = n; | 220 | max = n; |
| 225 | if (max > (int)(rb->len - rb->offset)) | 221 | if (max > (int)(rb->len - rb->offset)) |
| 226 | max = rb->len - rb->offset; | 222 | max = rb->len - rb->offset; |
| 227 | } | 223 | } |
| 228 | 224 | ||
| 229 | while (left < n) | 225 | while (left < n) { |
| 230 | { | ||
| 231 | /* Now we have len+left bytes at the front of s->s3->rbuf.buf | 226 | /* Now we have len+left bytes at the front of s->s3->rbuf.buf |
| 232 | * and need to read in more until we have len+n (up to | 227 | * and need to read in more until we have len+n (up to |
| 233 | * len+max if possible) */ | 228 | * len+max if possible) */ |
| 234 | 229 | ||
| 235 | errno = 0; | 230 | errno = 0; |
| 236 | if (s->rbio != NULL) | 231 | if (s->rbio != NULL) { |
| 237 | { | 232 | s->rwstate = SSL_READING; |
| 238 | s->rwstate=SSL_READING; | 233 | i = BIO_read(s->rbio, pkt + len + left, max - left); |
| 239 | i=BIO_read(s->rbio,pkt+len+left, max-left); | 234 | } else { |
| 240 | } | 235 | SSLerr(SSL_F_SSL3_READ_N, SSL_R_READ_BIO_NOT_SET); |
| 241 | else | ||
| 242 | { | ||
| 243 | SSLerr(SSL_F_SSL3_READ_N,SSL_R_READ_BIO_NOT_SET); | ||
| 244 | i = -1; | 236 | i = -1; |
| 245 | } | 237 | } |
| 246 | 238 | ||
| 247 | if (i <= 0) | 239 | if (i <= 0) { |
| 248 | { | ||
| 249 | rb->left = left; | 240 | rb->left = left; |
| 250 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && | 241 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && |
| 251 | SSL_version(s) != DTLS1_VERSION && SSL_version(s) != DTLS1_BAD_VER) | 242 | SSL_version(s) != DTLS1_VERSION && SSL_version(s) != DTLS1_BAD_VER) |
| 252 | if (len+left == 0) | 243 | if (len + left == 0) |
| 253 | ssl3_release_read_buffer(s); | 244 | ssl3_release_read_buffer(s); |
| 254 | return(i); | 245 | return (i); |
| 255 | } | 246 | } |
| 256 | left+=i; | 247 | left += i; |
| 257 | /* reads should *never* span multiple packets for DTLS because | 248 | /* reads should *never* span multiple packets for DTLS because |
| 258 | * the underlying transport protocol is message oriented as opposed | 249 | * the underlying transport protocol is message oriented as opposed |
| 259 | * to byte oriented as in the TLS case. */ | 250 | * to byte oriented as in the TLS case. */ |
| 260 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) | 251 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) { |
| 261 | { | ||
| 262 | if (n > left) | 252 | if (n > left) |
| 263 | n = left; /* makes the while condition false */ | 253 | n = left; /* makes the while condition false */ |
| 264 | } | ||
| 265 | } | 254 | } |
| 255 | } | ||
| 266 | 256 | ||
| 267 | /* done reading, now the book-keeping */ | 257 | /* done reading, now the book-keeping */ |
| 268 | rb->offset += n; | 258 | rb->offset += n; |
| 269 | rb->left = left - n; | 259 | rb->left = left - n; |
| 270 | s->packet_length += n; | 260 | s->packet_length += n; |
| 271 | s->rwstate=SSL_NOTHING; | 261 | s->rwstate = SSL_NOTHING; |
| 272 | return(n); | 262 | return (n); |
| 273 | } | 263 | } |
| 274 | 264 | ||
| 275 | /* Call this to get a new input record. | 265 | /* Call this to get a new input record. |
| 276 | * It will return <= 0 if more data is needed, normally due to an error | 266 | * It will return <= 0 if more data is needed, normally due to an error |
| @@ -281,10 +271,11 @@ int ssl3_read_n(SSL *s, int n, int max, int extend) | |||
| 281 | * ssl->s3->rrec.length, - number of bytes | 271 | * ssl->s3->rrec.length, - number of bytes |
| 282 | */ | 272 | */ |
| 283 | /* used only by ssl3_read_bytes */ | 273 | /* used only by ssl3_read_bytes */ |
| 284 | static int ssl3_get_record(SSL *s) | 274 | static int |
| 285 | { | 275 | ssl3_get_record(SSL *s) |
| 286 | int ssl_major,ssl_minor,al; | 276 | { |
| 287 | int enc_err,n,i,ret= -1; | 277 | int ssl_major, ssl_minor, al; |
| 278 | int enc_err, n, i, ret = -1; | ||
| 288 | SSL3_RECORD *rr; | 279 | SSL3_RECORD *rr; |
| 289 | SSL_SESSION *sess; | 280 | SSL_SESSION *sess; |
| 290 | unsigned char *p; | 281 | unsigned char *p; |
| @@ -293,90 +284,83 @@ static int ssl3_get_record(SSL *s) | |||
| 293 | unsigned mac_size, orig_len; | 284 | unsigned mac_size, orig_len; |
| 294 | size_t extra; | 285 | size_t extra; |
| 295 | 286 | ||
| 296 | rr= &(s->s3->rrec); | 287 | rr = &(s->s3->rrec); |
| 297 | sess=s->session; | 288 | sess = s->session; |
| 298 | 289 | ||
| 299 | if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) | 290 | if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) |
| 300 | extra=SSL3_RT_MAX_EXTRA; | 291 | extra = SSL3_RT_MAX_EXTRA; |
| 301 | else | 292 | else |
| 302 | extra=0; | 293 | extra = 0; |
| 303 | if (extra && !s->s3->init_extra) | 294 | if (extra && !s->s3->init_extra) { |
| 304 | { | ||
| 305 | /* An application error: SLS_OP_MICROSOFT_BIG_SSLV3_BUFFER | 295 | /* An application error: SLS_OP_MICROSOFT_BIG_SSLV3_BUFFER |
| 306 | * set after ssl3_setup_buffers() was done */ | 296 | * set after ssl3_setup_buffers() was done */ |
| 307 | SSLerr(SSL_F_SSL3_GET_RECORD, ERR_R_INTERNAL_ERROR); | 297 | SSLerr(SSL_F_SSL3_GET_RECORD, ERR_R_INTERNAL_ERROR); |
| 308 | return -1; | 298 | return -1; |
| 309 | } | 299 | } |
| 310 | 300 | ||
| 311 | again: | 301 | again: |
| 312 | /* check if we have the header */ | 302 | /* check if we have the header */ |
| 313 | if ( (s->rstate != SSL_ST_READ_BODY) || | 303 | if ((s->rstate != SSL_ST_READ_BODY) || |
| 314 | (s->packet_length < SSL3_RT_HEADER_LENGTH)) | 304 | (s->packet_length < SSL3_RT_HEADER_LENGTH)) { |
| 315 | { | 305 | n = ssl3_read_n(s, SSL3_RT_HEADER_LENGTH, s->s3->rbuf.len, 0); |
| 316 | n=ssl3_read_n(s, SSL3_RT_HEADER_LENGTH, s->s3->rbuf.len, 0); | ||
| 317 | if (n <= 0) return(n); /* error or non-blocking */ | 306 | if (n <= 0) return(n); /* error or non-blocking */ |
| 318 | s->rstate=SSL_ST_READ_BODY; | 307 | s->rstate = SSL_ST_READ_BODY; |
| 319 | 308 | ||
| 320 | p=s->packet; | 309 | p = s->packet; |
| 321 | 310 | ||
| 322 | /* Pull apart the header into the SSL3_RECORD */ | 311 | /* Pull apart the header into the SSL3_RECORD */ |
| 323 | rr->type= *(p++); | 312 | rr->type= *(p++); |
| 324 | ssl_major= *(p++); | 313 | ssl_major= *(p++); |
| 325 | ssl_minor= *(p++); | 314 | ssl_minor= *(p++); |
| 326 | version=(ssl_major<<8)|ssl_minor; | 315 | version = (ssl_major << 8)|ssl_minor; |
| 327 | n2s(p,rr->length); | 316 | n2s(p, rr->length); |
| 328 | #if 0 | 317 | #if 0 |
| 329 | fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length); | 318 | fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length); |
| 330 | #endif | 319 | #endif |
| 331 | 320 | ||
| 332 | /* Lets check version */ | 321 | /* Lets check version */ |
| 333 | if (!s->first_packet) | 322 | if (!s->first_packet) { |
| 334 | { | 323 | if (version != s->version) { |
| 335 | if (version != s->version) | 324 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_WRONG_VERSION_NUMBER); |
| 336 | { | 325 | if ((s->version & 0xFF00) == (version & 0xFF00) && !s->enc_write_ctx && !s->write_hash) |
| 337 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_WRONG_VERSION_NUMBER); | 326 | /* Send back error using their minor version number :-) */ |
| 338 | if ((s->version & 0xFF00) == (version & 0xFF00) && !s->enc_write_ctx && !s->write_hash) | 327 | s->version = (unsigned short)version; |
| 339 | /* Send back error using their minor version number :-) */ | 328 | al = SSL_AD_PROTOCOL_VERSION; |
| 340 | s->version = (unsigned short)version; | ||
| 341 | al=SSL_AD_PROTOCOL_VERSION; | ||
| 342 | goto f_err; | 329 | goto f_err; |
| 343 | } | ||
| 344 | } | 330 | } |
| 331 | } | ||
| 345 | 332 | ||
| 346 | if ((version>>8) != SSL3_VERSION_MAJOR) | 333 | if ((version >> 8) != SSL3_VERSION_MAJOR) { |
| 347 | { | 334 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_WRONG_VERSION_NUMBER); |
| 348 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_WRONG_VERSION_NUMBER); | ||
| 349 | goto err; | 335 | goto err; |
| 350 | } | 336 | } |
| 351 | 337 | ||
| 352 | if (rr->length > s->s3->rbuf.len - SSL3_RT_HEADER_LENGTH) | 338 | if (rr->length > s->s3->rbuf.len - SSL3_RT_HEADER_LENGTH) { |
| 353 | { | 339 | al = SSL_AD_RECORD_OVERFLOW; |
| 354 | al=SSL_AD_RECORD_OVERFLOW; | 340 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_PACKET_LENGTH_TOO_LONG); |
| 355 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_PACKET_LENGTH_TOO_LONG); | ||
| 356 | goto f_err; | 341 | goto f_err; |
| 357 | } | 342 | } |
| 358 | 343 | ||
| 359 | /* now s->rstate == SSL_ST_READ_BODY */ | 344 | /* now s->rstate == SSL_ST_READ_BODY */ |
| 360 | } | 345 | } |
| 361 | 346 | ||
| 362 | /* s->rstate == SSL_ST_READ_BODY, get and decode the data */ | 347 | /* s->rstate == SSL_ST_READ_BODY, get and decode the data */ |
| 363 | 348 | ||
| 364 | if (rr->length > s->packet_length-SSL3_RT_HEADER_LENGTH) | 349 | if (rr->length > s->packet_length - SSL3_RT_HEADER_LENGTH) { |
| 365 | { | ||
| 366 | /* now s->packet_length == SSL3_RT_HEADER_LENGTH */ | 350 | /* now s->packet_length == SSL3_RT_HEADER_LENGTH */ |
| 367 | i=rr->length; | 351 | i = rr->length; |
| 368 | n=ssl3_read_n(s,i,i,1); | 352 | n = ssl3_read_n(s, i, i, 1); |
| 369 | if (n <= 0) return(n); /* error or non-blocking io */ | 353 | if (n <= 0) return(n); /* error or non-blocking io */ |
| 370 | /* now n == rr->length, | 354 | /* now n == rr->length, |
| 371 | * and s->packet_length == SSL3_RT_HEADER_LENGTH + rr->length */ | 355 | * and s->packet_length == SSL3_RT_HEADER_LENGTH + rr->length */ |
| 372 | } | 356 | } |
| 373 | 357 | ||
| 374 | s->rstate=SSL_ST_READ_HEADER; /* set state for later operations */ | 358 | s->rstate=SSL_ST_READ_HEADER; /* set state for later operations */ |
| 375 | 359 | ||
| 376 | /* At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length, | 360 | /* At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length, |
| 377 | * and we have that many bytes in s->packet | 361 | * and we have that many bytes in s->packet |
| 378 | */ | 362 | */ |
| 379 | rr->input= &(s->packet[SSL3_RT_HEADER_LENGTH]); | 363 | rr->input = &(s->packet[SSL3_RT_HEADER_LENGTH]); |
| 380 | 364 | ||
| 381 | /* ok, we can now read from 's->packet' data into 'rr' | 365 | /* ok, we can now read from 's->packet' data into 'rr' |
| 382 | * rr->input points at rr->length bytes, which | 366 | * rr->input points at rr->length bytes, which |
| @@ -389,47 +373,43 @@ fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length); | |||
| 389 | * rr->length bytes of encrypted compressed stuff. */ | 373 | * rr->length bytes of encrypted compressed stuff. */ |
| 390 | 374 | ||
| 391 | /* check is not needed I believe */ | 375 | /* check is not needed I believe */ |
| 392 | if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH+extra) | 376 | if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH + extra) { |
| 393 | { | 377 | al = SSL_AD_RECORD_OVERFLOW; |
| 394 | al=SSL_AD_RECORD_OVERFLOW; | 378 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_ENCRYPTED_LENGTH_TOO_LONG); |
| 395 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_ENCRYPTED_LENGTH_TOO_LONG); | ||
| 396 | goto f_err; | 379 | goto f_err; |
| 397 | } | 380 | } |
| 398 | 381 | ||
| 399 | /* decrypt in place in 'rr->input' */ | 382 | /* decrypt in place in 'rr->input' */ |
| 400 | rr->data=rr->input; | 383 | rr->data = rr->input; |
| 401 | 384 | ||
| 402 | enc_err = s->method->ssl3_enc->enc(s,0); | 385 | enc_err = s->method->ssl3_enc->enc(s, 0); |
| 403 | /* enc_err is: | 386 | /* enc_err is: |
| 404 | * 0: (in non-constant time) if the record is publically invalid. | 387 | * 0: (in non-constant time) if the record is publically invalid. |
| 405 | * 1: if the padding is valid | 388 | * 1: if the padding is valid |
| 406 | * -1: if the padding is invalid */ | 389 | * -1: if the padding is invalid */ |
| 407 | if (enc_err == 0) | 390 | if (enc_err == 0) { |
| 408 | { | 391 | al = SSL_AD_DECRYPTION_FAILED; |
| 409 | al=SSL_AD_DECRYPTION_FAILED; | 392 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_BLOCK_CIPHER_PAD_IS_WRONG); |
| 410 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_BLOCK_CIPHER_PAD_IS_WRONG); | ||
| 411 | goto f_err; | 393 | goto f_err; |
| 412 | } | 394 | } |
| 413 | 395 | ||
| 414 | #ifdef TLS_DEBUG | 396 | #ifdef TLS_DEBUG |
| 415 | printf("dec %d\n",rr->length); | 397 | printf("dec %d\n", rr->length); |
| 416 | { unsigned int z; for (z=0; z<rr->length; z++) printf("%02X%c",rr->data[z],((z+1)%16)?' ':'\n'); } | 398 | { unsigned int z; for (z = 0; z<rr->length; z++) printf("%02X%c", rr->data[z],((z+1)%16)?' ':'\n'); } |
| 417 | printf("\n"); | 399 | printf("\n"); |
| 418 | #endif | 400 | #endif |
| 419 | 401 | ||
| 420 | /* r->length is now the compressed data plus mac */ | 402 | /* r->length is now the compressed data plus mac */ |
| 421 | if ((sess != NULL) && | 403 | if ((sess != NULL) && (s->enc_read_ctx != NULL) && |
| 422 | (s->enc_read_ctx != NULL) && | 404 | (EVP_MD_CTX_md(s->read_hash) != NULL)) { |
| 423 | (EVP_MD_CTX_md(s->read_hash) != NULL)) | ||
| 424 | { | ||
| 425 | /* s->read_hash != NULL => mac_size != -1 */ | 405 | /* s->read_hash != NULL => mac_size != -1 */ |
| 426 | unsigned char *mac = NULL; | 406 | unsigned char *mac = NULL; |
| 427 | unsigned char mac_tmp[EVP_MAX_MD_SIZE]; | 407 | unsigned char mac_tmp[EVP_MAX_MD_SIZE]; |
| 428 | mac_size=EVP_MD_CTX_size(s->read_hash); | 408 | mac_size = EVP_MD_CTX_size(s->read_hash); |
| 429 | OPENSSL_assert(mac_size <= EVP_MAX_MD_SIZE); | 409 | OPENSSL_assert(mac_size <= EVP_MAX_MD_SIZE); |
| 430 | 410 | ||
| 431 | /* kludge: *_cbc_remove_padding passes padding length in rr->type */ | 411 | /* kludge: *_cbc_remove_padding passes padding length in rr->type */ |
| 432 | orig_len = rr->length+((unsigned int)rr->type>>8); | 412 | orig_len = rr->length + ((unsigned int)rr->type >> 8); |
| 433 | 413 | ||
| 434 | /* orig_len is the length of the record before any padding was | 414 | /* orig_len is the length of the record before any padding was |
| 435 | * removed. This is public information, as is the MAC in use, | 415 | * removed. This is public information, as is the MAC in use, |
| @@ -437,17 +417,15 @@ printf("\n"); | |||
| 437 | * amount of time if it's too short to possibly contain a MAC. | 417 | * amount of time if it's too short to possibly contain a MAC. |
| 438 | */ | 418 | */ |
| 439 | if (orig_len < mac_size || | 419 | if (orig_len < mac_size || |
| 440 | /* CBC records must have a padding length byte too. */ | 420 | /* CBC records must have a padding length byte too. */ |
| 441 | (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE && | 421 | (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE && |
| 442 | orig_len < mac_size+1)) | 422 | orig_len < mac_size + 1)) { |
| 443 | { | 423 | al = SSL_AD_DECODE_ERROR; |
| 444 | al=SSL_AD_DECODE_ERROR; | 424 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_LENGTH_TOO_SHORT); |
| 445 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_LENGTH_TOO_SHORT); | ||
| 446 | goto f_err; | 425 | goto f_err; |
| 447 | } | 426 | } |
| 448 | 427 | ||
| 449 | if (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE) | 428 | if (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE) { |
| 450 | { | ||
| 451 | /* We update the length so that the TLS header bytes | 429 | /* We update the length so that the TLS header bytes |
| 452 | * can be constructed correctly but we need to extract | 430 | * can be constructed correctly but we need to extract |
| 453 | * the MAC in constant time from within the record, | 431 | * the MAC in constant time from within the record, |
| @@ -456,60 +434,53 @@ printf("\n"); | |||
| 456 | mac = mac_tmp; | 434 | mac = mac_tmp; |
| 457 | ssl3_cbc_copy_mac(mac_tmp, rr, mac_size, orig_len); | 435 | ssl3_cbc_copy_mac(mac_tmp, rr, mac_size, orig_len); |
| 458 | rr->length -= mac_size; | 436 | rr->length -= mac_size; |
| 459 | } | 437 | } else { |
| 460 | else | ||
| 461 | { | ||
| 462 | /* In this case there's no padding, so |orig_len| | 438 | /* In this case there's no padding, so |orig_len| |
| 463 | * equals |rec->length| and we checked that there's | 439 | * equals |rec->length| and we checked that there's |
| 464 | * enough bytes for |mac_size| above. */ | 440 | * enough bytes for |mac_size| above. */ |
| 465 | rr->length -= mac_size; | 441 | rr->length -= mac_size; |
| 466 | mac = &rr->data[rr->length]; | 442 | mac = &rr->data[rr->length]; |
| 467 | } | 443 | } |
| 468 | 444 | ||
| 469 | i=s->method->ssl3_enc->mac(s,md,0 /* not send */); | 445 | i=s->method->ssl3_enc->mac(s,md,0 /* not send */); |
| 470 | if (i < 0 || mac == NULL || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0) | 446 | if (i < 0 || mac == NULL || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0) |
| 471 | enc_err = -1; | 447 | enc_err = -1; |
| 472 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+extra+mac_size) | 448 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + extra + mac_size) |
| 473 | enc_err = -1; | 449 | enc_err = -1; |
| 474 | } | 450 | } |
| 475 | 451 | ||
| 476 | if (enc_err < 0) | 452 | if (enc_err < 0) { |
| 477 | { | ||
| 478 | /* A separate 'decryption_failed' alert was introduced with TLS 1.0, | 453 | /* A separate 'decryption_failed' alert was introduced with TLS 1.0, |
| 479 | * SSL 3.0 only has 'bad_record_mac'. But unless a decryption | 454 | * SSL 3.0 only has 'bad_record_mac'. But unless a decryption |
| 480 | * failure is directly visible from the ciphertext anyway, | 455 | * failure is directly visible from the ciphertext anyway, |
| 481 | * we should not reveal which kind of error occured -- this | 456 | * we should not reveal which kind of error occured -- this |
| 482 | * might become visible to an attacker (e.g. via a logfile) */ | 457 | * might become visible to an attacker (e.g. via a logfile) */ |
| 483 | al=SSL_AD_BAD_RECORD_MAC; | 458 | al = SSL_AD_BAD_RECORD_MAC; |
| 484 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC); | 459 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC); |
| 485 | goto f_err; | 460 | goto f_err; |
| 486 | } | 461 | } |
| 487 | 462 | ||
| 488 | /* r->length is now just compressed */ | 463 | /* r->length is now just compressed */ |
| 489 | if (s->expand != NULL) | 464 | if (s->expand != NULL) { |
| 490 | { | 465 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + extra) { |
| 491 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+extra) | 466 | al = SSL_AD_RECORD_OVERFLOW; |
| 492 | { | 467 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_COMPRESSED_LENGTH_TOO_LONG); |
| 493 | al=SSL_AD_RECORD_OVERFLOW; | ||
| 494 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_COMPRESSED_LENGTH_TOO_LONG); | ||
| 495 | goto f_err; | 468 | goto f_err; |
| 496 | } | 469 | } |
| 497 | if (!ssl3_do_uncompress(s)) | 470 | if (!ssl3_do_uncompress(s)) { |
| 498 | { | 471 | al = SSL_AD_DECOMPRESSION_FAILURE; |
| 499 | al=SSL_AD_DECOMPRESSION_FAILURE; | 472 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_BAD_DECOMPRESSION); |
| 500 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_BAD_DECOMPRESSION); | ||
| 501 | goto f_err; | 473 | goto f_err; |
| 502 | } | ||
| 503 | } | 474 | } |
| 475 | } | ||
| 504 | 476 | ||
| 505 | if (rr->length > SSL3_RT_MAX_PLAIN_LENGTH+extra) | 477 | if (rr->length > SSL3_RT_MAX_PLAIN_LENGTH + extra) { |
| 506 | { | 478 | al = SSL_AD_RECORD_OVERFLOW; |
| 507 | al=SSL_AD_RECORD_OVERFLOW; | 479 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_DATA_LENGTH_TOO_LONG); |
| 508 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_DATA_LENGTH_TOO_LONG); | ||
| 509 | goto f_err; | 480 | goto f_err; |
| 510 | } | 481 | } |
| 511 | 482 | ||
| 512 | rr->off=0; | 483 | rr->off = 0; |
| 513 | /* So at this point the following is true | 484 | /* So at this point the following is true |
| 514 | * ssl->s3->rrec.type is the type of record | 485 | * ssl->s3->rrec.type is the type of record |
| 515 | * ssl->s3->rrec.length == number of bytes in record | 486 | * ssl->s3->rrec.length == number of bytes in record |
| @@ -519,178 +490,171 @@ printf("\n"); | |||
| 519 | */ | 490 | */ |
| 520 | 491 | ||
| 521 | /* we have pulled in a full packet so zero things */ | 492 | /* we have pulled in a full packet so zero things */ |
| 522 | s->packet_length=0; | 493 | s->packet_length = 0; |
| 523 | 494 | ||
| 524 | /* just read a 0 length packet */ | 495 | /* just read a 0 length packet */ |
| 525 | if (rr->length == 0) goto again; | 496 | if (rr->length == 0) |
| 497 | goto again; | ||
| 526 | 498 | ||
| 527 | #if 0 | 499 | #if 0 |
| 528 | fprintf(stderr, "Ultimate Record type=%d, Length=%d\n", rr->type, rr->length); | 500 | fprintf(stderr, "Ultimate Record type=%d, Length=%d\n", rr->type, rr->length); |
| 529 | #endif | 501 | #endif |
| 530 | 502 | ||
| 531 | return(1); | 503 | return (1); |
| 532 | 504 | ||
| 533 | f_err: | 505 | f_err: |
| 534 | ssl3_send_alert(s,SSL3_AL_FATAL,al); | 506 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
| 535 | err: | 507 | err: |
| 536 | return(ret); | 508 | return (ret); |
| 537 | } | 509 | } |
| 538 | 510 | ||
| 539 | int ssl3_do_uncompress(SSL *ssl) | 511 | int |
| 540 | { | 512 | ssl3_do_uncompress(SSL *ssl) |
| 513 | { | ||
| 541 | #ifndef OPENSSL_NO_COMP | 514 | #ifndef OPENSSL_NO_COMP |
| 542 | int i; | 515 | int i; |
| 543 | SSL3_RECORD *rr; | 516 | SSL3_RECORD *rr; |
| 544 | 517 | ||
| 545 | rr= &(ssl->s3->rrec); | 518 | rr = &(ssl->s3->rrec); |
| 546 | i=COMP_expand_block(ssl->expand,rr->comp, | 519 | i = COMP_expand_block(ssl->expand, rr->comp, |
| 547 | SSL3_RT_MAX_PLAIN_LENGTH,rr->data,(int)rr->length); | 520 | SSL3_RT_MAX_PLAIN_LENGTH, rr->data,(int)rr->length); |
| 548 | if (i < 0) | 521 | if (i < 0) |
| 549 | return(0); | 522 | return (0); |
| 550 | else | 523 | else |
| 551 | rr->length=i; | 524 | rr->length = i; |
| 552 | rr->data=rr->comp; | 525 | rr->data = rr->comp; |
| 553 | #endif | 526 | #endif |
| 554 | return(1); | 527 | return (1); |
| 555 | } | 528 | } |
| 556 | 529 | ||
| 557 | int ssl3_do_compress(SSL *ssl) | 530 | int |
| 558 | { | 531 | ssl3_do_compress(SSL *ssl) |
| 532 | { | ||
| 559 | #ifndef OPENSSL_NO_COMP | 533 | #ifndef OPENSSL_NO_COMP |
| 560 | int i; | 534 | int i; |
| 561 | SSL3_RECORD *wr; | 535 | SSL3_RECORD *wr; |
| 562 | 536 | ||
| 563 | wr= &(ssl->s3->wrec); | 537 | wr = &(ssl->s3->wrec); |
| 564 | i=COMP_compress_block(ssl->compress,wr->data, | 538 | i = COMP_compress_block(ssl->compress, wr->data, |
| 565 | SSL3_RT_MAX_COMPRESSED_LENGTH, | 539 | SSL3_RT_MAX_COMPRESSED_LENGTH, |
| 566 | wr->input,(int)wr->length); | 540 | wr->input,(int)wr->length); |
| 567 | if (i < 0) | 541 | if (i < 0) |
| 568 | return(0); | 542 | return (0); |
| 569 | else | 543 | else |
| 570 | wr->length=i; | 544 | wr->length = i; |
| 571 | 545 | ||
| 572 | wr->input=wr->data; | 546 | wr->input = wr->data; |
| 573 | #endif | 547 | #endif |
| 574 | return(1); | 548 | return (1); |
| 575 | } | 549 | } |
| 576 | 550 | ||
| 577 | /* Call this to write data in records of type 'type' | 551 | /* Call this to write data in records of type 'type' |
| 578 | * It will return <= 0 if not all data has been sent or non-blocking IO. | 552 | * It will return <= 0 if not all data has been sent or non-blocking IO. |
| 579 | */ | 553 | */ |
| 580 | int ssl3_write_bytes(SSL *s, int type, const void *buf_, int len) | 554 | int |
| 581 | { | 555 | ssl3_write_bytes(SSL *s, int type, const void *buf_, int len) |
| 582 | const unsigned char *buf=buf_; | 556 | { |
| 583 | unsigned int tot,n,nw; | 557 | const unsigned char *buf = buf_; |
| 558 | unsigned int tot, n, nw; | ||
| 584 | int i; | 559 | int i; |
| 585 | 560 | ||
| 586 | s->rwstate=SSL_NOTHING; | 561 | s->rwstate = SSL_NOTHING; |
| 587 | tot=s->s3->wnum; | 562 | tot = s->s3->wnum; |
| 588 | s->s3->wnum=0; | 563 | s->s3->wnum = 0; |
| 589 | 564 | ||
| 590 | if (SSL_in_init(s) && !s->in_handshake) | 565 | if (SSL_in_init(s) && !s->in_handshake) { |
| 591 | { | 566 | i = s->handshake_func(s); |
| 592 | i=s->handshake_func(s); | 567 | if (i < 0) |
| 593 | if (i < 0) return(i); | 568 | return (i); |
| 594 | if (i == 0) | 569 | if (i == 0) { |
| 595 | { | 570 | SSLerr(SSL_F_SSL3_WRITE_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); |
| 596 | SSLerr(SSL_F_SSL3_WRITE_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE); | ||
| 597 | return -1; | 571 | return -1; |
| 598 | } | ||
| 599 | } | 572 | } |
| 573 | } | ||
| 600 | 574 | ||
| 601 | n=(len-tot); | 575 | n = (len - tot); |
| 602 | for (;;) | 576 | for (;;) { |
| 603 | { | ||
| 604 | if (n > s->max_send_fragment) | 577 | if (n > s->max_send_fragment) |
| 605 | nw=s->max_send_fragment; | 578 | nw = s->max_send_fragment; |
| 606 | else | 579 | else |
| 607 | nw=n; | 580 | nw = n; |
| 608 | 581 | ||
| 609 | i=do_ssl3_write(s, type, &(buf[tot]), nw, 0); | 582 | i = do_ssl3_write(s, type, &(buf[tot]), nw, 0); |
| 610 | if (i <= 0) | 583 | if (i <= 0) { |
| 611 | { | 584 | s->s3->wnum = tot; |
| 612 | s->s3->wnum=tot; | ||
| 613 | return i; | 585 | return i; |
| 614 | } | 586 | } |
| 615 | 587 | ||
| 616 | if ((i == (int)n) || | 588 | if ((i == (int)n) || (type == SSL3_RT_APPLICATION_DATA && |
| 617 | (type == SSL3_RT_APPLICATION_DATA && | 589 | (s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE))) { |
| 618 | (s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE))) | ||
| 619 | { | ||
| 620 | /* next chunk of data should get another prepended empty fragment | 590 | /* next chunk of data should get another prepended empty fragment |
| 621 | * in ciphersuites with known-IV weakness: */ | 591 | * in ciphersuites with known-IV weakness: */ |
| 622 | s->s3->empty_fragment_done = 0; | 592 | s->s3->empty_fragment_done = 0; |
| 623 | |||
| 624 | return tot+i; | ||
| 625 | } | ||
| 626 | 593 | ||
| 627 | n-=i; | 594 | return tot + i; |
| 628 | tot+=i; | ||
| 629 | } | 595 | } |
| 630 | } | ||
| 631 | 596 | ||
| 632 | static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, | 597 | n -= i; |
| 633 | unsigned int len, int create_empty_fragment) | 598 | tot += i; |
| 634 | { | 599 | } |
| 635 | unsigned char *p,*plen; | 600 | } |
| 636 | int i,mac_size,clear=0; | 601 | |
| 637 | int prefix_len=0; | 602 | static int |
| 603 | do_ssl3_write(SSL *s, int type, const unsigned char *buf, | ||
| 604 | unsigned int len, int create_empty_fragment) | ||
| 605 | { | ||
| 606 | unsigned char *p, *plen; | ||
| 607 | int i, mac_size, clear = 0; | ||
| 608 | int prefix_len = 0; | ||
| 638 | int eivlen; | 609 | int eivlen; |
| 639 | long align=0; | 610 | long align = 0; |
| 640 | SSL3_RECORD *wr; | 611 | SSL3_RECORD *wr; |
| 641 | SSL3_BUFFER *wb=&(s->s3->wbuf); | 612 | SSL3_BUFFER *wb = &(s->s3->wbuf); |
| 642 | SSL_SESSION *sess; | 613 | SSL_SESSION *sess; |
| 643 | 614 | ||
| 644 | if (wb->buf == NULL) | 615 | if (wb->buf == NULL) |
| 645 | if (!ssl3_setup_write_buffer(s)) | 616 | if (!ssl3_setup_write_buffer(s)) |
| 646 | return -1; | 617 | return -1; |
| 647 | 618 | ||
| 648 | /* first check if there is a SSL3_BUFFER still being written | 619 | /* first check if there is a SSL3_BUFFER still being written |
| 649 | * out. This will happen with non blocking IO */ | 620 | * out. This will happen with non blocking IO */ |
| 650 | if (wb->left != 0) | 621 | if (wb->left != 0) |
| 651 | return(ssl3_write_pending(s,type,buf,len)); | 622 | return (ssl3_write_pending(s, type, buf, len)); |
| 652 | 623 | ||
| 653 | /* If we have an alert to send, lets send it */ | 624 | /* If we have an alert to send, lets send it */ |
| 654 | if (s->s3->alert_dispatch) | 625 | if (s->s3->alert_dispatch) { |
| 655 | { | 626 | i = s->method->ssl_dispatch_alert(s); |
| 656 | i=s->method->ssl_dispatch_alert(s); | ||
| 657 | if (i <= 0) | 627 | if (i <= 0) |
| 658 | return(i); | 628 | return (i); |
| 659 | /* if it went, fall through and send more stuff */ | 629 | /* if it went, fall through and send more stuff */ |
| 660 | } | 630 | } |
| 661 | 631 | ||
| 662 | if (len == 0 && !create_empty_fragment) | 632 | if (len == 0 && !create_empty_fragment) |
| 663 | return 0; | 633 | return 0; |
| 664 | 634 | ||
| 665 | wr= &(s->s3->wrec); | 635 | wr = &(s->s3->wrec); |
| 666 | sess=s->session; | 636 | sess = s->session; |
| 667 | 637 | ||
| 668 | if ( (sess == NULL) || | 638 | if ((sess == NULL) || (s->enc_write_ctx == NULL) || |
| 669 | (s->enc_write_ctx == NULL) || | 639 | (EVP_MD_CTX_md(s->write_hash) == NULL)) { |
| 670 | (EVP_MD_CTX_md(s->write_hash) == NULL)) | ||
| 671 | { | ||
| 672 | #if 1 | 640 | #if 1 |
| 673 | clear=s->enc_write_ctx?0:1; /* must be AEAD cipher */ | 641 | clear = s->enc_write_ctx ? 0 : 1; /* must be AEAD cipher */ |
| 674 | #else | 642 | #else |
| 675 | clear=1; | 643 | clear = 1; |
| 676 | #endif | 644 | #endif |
| 677 | mac_size=0; | 645 | mac_size = 0; |
| 678 | } | 646 | } else { |
| 679 | else | 647 | mac_size = EVP_MD_CTX_size(s->write_hash); |
| 680 | { | ||
| 681 | mac_size=EVP_MD_CTX_size(s->write_hash); | ||
| 682 | if (mac_size < 0) | 648 | if (mac_size < 0) |
| 683 | goto err; | 649 | goto err; |
| 684 | } | 650 | } |
| 685 | 651 | ||
| 686 | /* 'create_empty_fragment' is true only when this function calls itself */ | 652 | /* 'create_empty_fragment' is true only when this function calls itself */ |
| 687 | if (!clear && !create_empty_fragment && !s->s3->empty_fragment_done) | 653 | if (!clear && !create_empty_fragment && !s->s3->empty_fragment_done) { |
| 688 | { | ||
| 689 | /* countermeasure against known-IV weakness in CBC ciphersuites | 654 | /* countermeasure against known-IV weakness in CBC ciphersuites |
| 690 | * (see http://www.openssl.org/~bodo/tls-cbc.txt) */ | 655 | * (see http://www.openssl.org/~bodo/tls-cbc.txt) */ |
| 691 | 656 | ||
| 692 | if (s->s3->need_empty_fragments && type == SSL3_RT_APPLICATION_DATA) | 657 | if (s->s3->need_empty_fragments && type == SSL3_RT_APPLICATION_DATA) { |
| 693 | { | ||
| 694 | /* recursive function call with 'create_empty_fragment' set; | 658 | /* recursive function call with 'create_empty_fragment' set; |
| 695 | * this prepares and buffers the data for an empty fragment | 659 | * this prepares and buffers the data for an empty fragment |
| 696 | * (these 'prefix_len' bytes are sent out later | 660 | * (these 'prefix_len' bytes are sent out later |
| @@ -700,216 +664,195 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, | |||
| 700 | goto err; | 664 | goto err; |
| 701 | 665 | ||
| 702 | if (prefix_len > | 666 | if (prefix_len > |
| 703 | (SSL3_RT_HEADER_LENGTH + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD)) | 667 | (SSL3_RT_HEADER_LENGTH + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD)) { |
| 704 | { | ||
| 705 | /* insufficient space */ | 668 | /* insufficient space */ |
| 706 | SSLerr(SSL_F_DO_SSL3_WRITE, ERR_R_INTERNAL_ERROR); | 669 | SSLerr(SSL_F_DO_SSL3_WRITE, ERR_R_INTERNAL_ERROR); |
| 707 | goto err; | 670 | goto err; |
| 708 | } | ||
| 709 | } | 671 | } |
| 710 | |||
| 711 | s->s3->empty_fragment_done = 1; | ||
| 712 | } | 672 | } |
| 713 | 673 | ||
| 714 | if (create_empty_fragment) | 674 | s->s3->empty_fragment_done = 1; |
| 715 | { | 675 | } |
| 676 | |||
| 677 | if (create_empty_fragment) { | ||
| 716 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 678 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
| 717 | /* extra fragment would be couple of cipher blocks, | 679 | /* extra fragment would be couple of cipher blocks, |
| 718 | * which would be multiple of SSL3_ALIGN_PAYLOAD, so | 680 | * which would be multiple of SSL3_ALIGN_PAYLOAD, so |
| 719 | * if we want to align the real payload, then we can | 681 | * if we want to align the real payload, then we can |
| 720 | * just pretent we simply have two headers. */ | 682 | * just pretent we simply have two headers. */ |
| 721 | align = (long)wb->buf + 2*SSL3_RT_HEADER_LENGTH; | 683 | align = (long)wb->buf + 2*SSL3_RT_HEADER_LENGTH; |
| 722 | align = (-align)&(SSL3_ALIGN_PAYLOAD-1); | 684 | align = (-align)&(SSL3_ALIGN_PAYLOAD - 1); |
| 723 | #endif | 685 | #endif |
| 724 | p = wb->buf + align; | 686 | p = wb->buf + align; |
| 725 | wb->offset = align; | 687 | wb->offset = align; |
| 726 | } | 688 | } else if (prefix_len) { |
| 727 | else if (prefix_len) | ||
| 728 | { | ||
| 729 | p = wb->buf + wb->offset + prefix_len; | 689 | p = wb->buf + wb->offset + prefix_len; |
| 730 | } | 690 | } else { |
| 731 | else | ||
| 732 | { | ||
| 733 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 691 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
| 734 | align = (long)wb->buf + SSL3_RT_HEADER_LENGTH; | 692 | align = (long)wb->buf + SSL3_RT_HEADER_LENGTH; |
| 735 | align = (-align)&(SSL3_ALIGN_PAYLOAD-1); | 693 | align = (-align)&(SSL3_ALIGN_PAYLOAD - 1); |
| 736 | #endif | 694 | #endif |
| 737 | p = wb->buf + align; | 695 | p = wb->buf + align; |
| 738 | wb->offset = align; | 696 | wb->offset = align; |
| 739 | } | 697 | } |
| 740 | 698 | ||
| 741 | /* write the header */ | 699 | /* write the header */ |
| 742 | 700 | ||
| 743 | *(p++)=type&0xff; | 701 | *(p++) = type&0xff; |
| 744 | wr->type=type; | 702 | wr->type = type; |
| 745 | 703 | ||
| 746 | *(p++)=(s->version>>8); | 704 | *(p++) = (s->version >> 8); |
| 747 | /* Some servers hang if iniatial client hello is larger than 256 | 705 | /* Some servers hang if iniatial client hello is larger than 256 |
| 748 | * bytes and record version number > TLS 1.0 | 706 | * bytes and record version number > TLS 1.0 |
| 749 | */ | 707 | */ |
| 750 | if (s->state == SSL3_ST_CW_CLNT_HELLO_B | 708 | if (s->state == SSL3_ST_CW_CLNT_HELLO_B && !s->renegotiate && |
| 751 | && !s->renegotiate | 709 | TLS1_get_version(s) > TLS1_VERSION) |
| 752 | && TLS1_get_version(s) > TLS1_VERSION) | ||
| 753 | *(p++) = 0x1; | 710 | *(p++) = 0x1; |
| 754 | else | 711 | else |
| 755 | *(p++)=s->version&0xff; | 712 | *(p++) = s->version&0xff; |
| 756 | 713 | ||
| 757 | /* field where we are to write out packet length */ | 714 | /* field where we are to write out packet length */ |
| 758 | plen=p; | 715 | plen = p; |
| 759 | p+=2; | 716 | |
| 717 | p += 2; | ||
| 760 | /* Explicit IV length, block ciphers and TLS version 1.1 or later */ | 718 | /* Explicit IV length, block ciphers and TLS version 1.1 or later */ |
| 761 | if (s->enc_write_ctx && s->version >= TLS1_1_VERSION) | 719 | if (s->enc_write_ctx && s->version >= TLS1_1_VERSION) { |
| 762 | { | ||
| 763 | int mode = EVP_CIPHER_CTX_mode(s->enc_write_ctx); | 720 | int mode = EVP_CIPHER_CTX_mode(s->enc_write_ctx); |
| 764 | if (mode == EVP_CIPH_CBC_MODE) | 721 | if (mode == EVP_CIPH_CBC_MODE) { |
| 765 | { | ||
| 766 | eivlen = EVP_CIPHER_CTX_iv_length(s->enc_write_ctx); | 722 | eivlen = EVP_CIPHER_CTX_iv_length(s->enc_write_ctx); |
| 767 | if (eivlen <= 1) | 723 | if (eivlen <= 1) |
| 768 | eivlen = 0; | 724 | eivlen = 0; |
| 769 | } | 725 | } |
| 770 | /* Need explicit part of IV for GCM mode */ | 726 | /* Need explicit part of IV for GCM mode */ |
| 771 | else if (mode == EVP_CIPH_GCM_MODE) | 727 | else if (mode == EVP_CIPH_GCM_MODE) |
| 772 | eivlen = EVP_GCM_TLS_EXPLICIT_IV_LEN; | 728 | eivlen = EVP_GCM_TLS_EXPLICIT_IV_LEN; |
| 773 | else | 729 | else |
| 774 | eivlen = 0; | 730 | eivlen = 0; |
| 775 | } | 731 | } else |
| 776 | else | ||
| 777 | eivlen = 0; | 732 | eivlen = 0; |
| 778 | 733 | ||
| 779 | /* lets setup the record stuff. */ | 734 | /* lets setup the record stuff. */ |
| 780 | wr->data=p + eivlen; | 735 | wr->data = p + eivlen; |
| 781 | wr->length=(int)len; | 736 | wr->length = (int)len; |
| 782 | wr->input=(unsigned char *)buf; | 737 | wr->input = (unsigned char *)buf; |
| 783 | 738 | ||
| 784 | /* we now 'read' from wr->input, wr->length bytes into | 739 | /* we now 'read' from wr->input, wr->length bytes into |
| 785 | * wr->data */ | 740 | * wr->data */ |
| 786 | 741 | ||
| 787 | /* first we compress */ | 742 | /* first we compress */ |
| 788 | if (s->compress != NULL) | 743 | if (s->compress != NULL) { |
| 789 | { | 744 | if (!ssl3_do_compress(s)) { |
| 790 | if (!ssl3_do_compress(s)) | 745 | SSLerr(SSL_F_DO_SSL3_WRITE, SSL_R_COMPRESSION_FAILURE); |
| 791 | { | ||
| 792 | SSLerr(SSL_F_DO_SSL3_WRITE,SSL_R_COMPRESSION_FAILURE); | ||
| 793 | goto err; | 746 | goto err; |
| 794 | } | ||
| 795 | } | ||
| 796 | else | ||
| 797 | { | ||
| 798 | memcpy(wr->data,wr->input,wr->length); | ||
| 799 | wr->input=wr->data; | ||
| 800 | } | 747 | } |
| 748 | } else { | ||
| 749 | memcpy(wr->data, wr->input, wr->length); | ||
| 750 | wr->input = wr->data; | ||
| 751 | } | ||
| 801 | 752 | ||
| 802 | /* we should still have the output to wr->data and the input | 753 | /* we should still have the output to wr->data and the input |
| 803 | * from wr->input. Length should be wr->length. | 754 | * from wr->input. Length should be wr->length. |
| 804 | * wr->data still points in the wb->buf */ | 755 | * wr->data still points in the wb->buf */ |
| 805 | 756 | ||
| 806 | if (mac_size != 0) | 757 | if (mac_size != 0) { |
| 807 | { | 758 | if (s->method->ssl3_enc->mac(s, &(p[wr->length + eivlen]), 1) < 0) |
| 808 | if (s->method->ssl3_enc->mac(s,&(p[wr->length + eivlen]),1) < 0) | ||
| 809 | goto err; | 759 | goto err; |
| 810 | wr->length+=mac_size; | 760 | wr->length += mac_size; |
| 811 | } | 761 | } |
| 812 | 762 | ||
| 813 | wr->input=p; | 763 | wr->input = p; |
| 814 | wr->data=p; | 764 | wr->data = p; |
| 815 | 765 | ||
| 816 | if (eivlen) | 766 | if (eivlen) { |
| 817 | { | ||
| 818 | /* if (RAND_pseudo_bytes(p, eivlen) <= 0) | 767 | /* if (RAND_pseudo_bytes(p, eivlen) <= 0) |
| 819 | goto err; */ | 768 | goto err; |
| 769 | */ | ||
| 820 | wr->length += eivlen; | 770 | wr->length += eivlen; |
| 821 | } | 771 | } |
| 822 | 772 | ||
| 823 | /* ssl3_enc can only have an error on read */ | 773 | /* ssl3_enc can only have an error on read */ |
| 824 | s->method->ssl3_enc->enc(s,1); | 774 | s->method->ssl3_enc->enc(s, 1); |
| 825 | 775 | ||
| 826 | /* record length after mac and block padding */ | 776 | /* record length after mac and block padding */ |
| 827 | s2n(wr->length,plen); | 777 | s2n(wr->length, plen); |
| 828 | 778 | ||
| 829 | /* we should now have | 779 | /* we should now have |
| 830 | * wr->data pointing to the encrypted data, which is | 780 | * wr->data pointing to the encrypted data, which is |
| 831 | * wr->length long */ | 781 | * wr->length long */ |
| 832 | wr->type=type; /* not needed but helps for debugging */ | 782 | wr->type=type; /* not needed but helps for debugging */ |
| 833 | wr->length+=SSL3_RT_HEADER_LENGTH; | 783 | wr->length += SSL3_RT_HEADER_LENGTH; |
| 834 | 784 | ||
| 835 | if (create_empty_fragment) | 785 | if (create_empty_fragment) { |
| 836 | { | ||
| 837 | /* we are in a recursive call; | 786 | /* we are in a recursive call; |
| 838 | * just return the length, don't write out anything here | 787 | * just return the length, don't write out anything here |
| 839 | */ | 788 | */ |
| 840 | return wr->length; | 789 | return wr->length; |
| 841 | } | 790 | } |
| 842 | 791 | ||
| 843 | /* now let's set up wb */ | 792 | /* now let's set up wb */ |
| 844 | wb->left = prefix_len + wr->length; | 793 | wb->left = prefix_len + wr->length; |
| 845 | 794 | ||
| 846 | /* memorize arguments so that ssl3_write_pending can detect bad write retries later */ | 795 | /* memorize arguments so that ssl3_write_pending can detect bad write retries later */ |
| 847 | s->s3->wpend_tot=len; | 796 | s->s3->wpend_tot = len; |
| 848 | s->s3->wpend_buf=buf; | 797 | s->s3->wpend_buf = buf; |
| 849 | s->s3->wpend_type=type; | 798 | s->s3->wpend_type = type; |
| 850 | s->s3->wpend_ret=len; | 799 | s->s3->wpend_ret = len; |
| 851 | 800 | ||
| 852 | /* we now just need to write the buffer */ | 801 | /* we now just need to write the buffer */ |
| 853 | return ssl3_write_pending(s,type,buf,len); | 802 | return ssl3_write_pending(s, type, buf, len); |
| 854 | err: | 803 | err: |
| 855 | return -1; | 804 | return -1; |
| 856 | } | 805 | } |
| 857 | 806 | ||
| 858 | /* if s->s3->wbuf.left != 0, we need to call this */ | 807 | /* if s->s3->wbuf.left != 0, we need to call this */ |
| 859 | int ssl3_write_pending(SSL *s, int type, const unsigned char *buf, | 808 | int |
| 860 | unsigned int len) | 809 | ssl3_write_pending(SSL *s, int type, const unsigned char *buf, |
| 861 | { | 810 | unsigned int len) |
| 811 | { | ||
| 862 | int i; | 812 | int i; |
| 863 | SSL3_BUFFER *wb=&(s->s3->wbuf); | 813 | SSL3_BUFFER *wb = &(s->s3->wbuf); |
| 864 | 814 | ||
| 865 | /* XXXX */ | 815 | /* XXXX */ |
| 866 | if ((s->s3->wpend_tot > (int)len) | 816 | if ((s->s3->wpend_tot > (int)len) || ((s->s3->wpend_buf != buf) && |
| 867 | || ((s->s3->wpend_buf != buf) && | 817 | !(s->mode & SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER)) || |
| 868 | !(s->mode & SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER)) | 818 | (s->s3->wpend_type != type)) { |
| 869 | || (s->s3->wpend_type != type)) | 819 | SSLerr(SSL_F_SSL3_WRITE_PENDING, SSL_R_BAD_WRITE_RETRY); |
| 870 | { | 820 | return (-1); |
| 871 | SSLerr(SSL_F_SSL3_WRITE_PENDING,SSL_R_BAD_WRITE_RETRY); | 821 | } |
| 872 | return(-1); | ||
| 873 | } | ||
| 874 | 822 | ||
| 875 | for (;;) | 823 | for (;;) { |
| 876 | { | ||
| 877 | errno = 0; | 824 | errno = 0; |
| 878 | if (s->wbio != NULL) | 825 | if (s->wbio != NULL) { |
| 879 | { | 826 | s->rwstate = SSL_WRITING; |
| 880 | s->rwstate=SSL_WRITING; | 827 | i = BIO_write(s->wbio, |
| 881 | i=BIO_write(s->wbio, | 828 | (char *)&(wb->buf[wb->offset]), |
| 882 | (char *)&(wb->buf[wb->offset]), | 829 | (unsigned int)wb->left); |
| 883 | (unsigned int)wb->left); | 830 | } else { |
| 884 | } | 831 | SSLerr(SSL_F_SSL3_WRITE_PENDING, SSL_R_BIO_NOT_SET); |
| 885 | else | 832 | i = -1; |
| 886 | { | 833 | } |
| 887 | SSLerr(SSL_F_SSL3_WRITE_PENDING,SSL_R_BIO_NOT_SET); | 834 | if (i == wb->left) { |
| 888 | i= -1; | 835 | wb->left = 0; |
| 889 | } | 836 | wb->offset += i; |
| 890 | if (i == wb->left) | ||
| 891 | { | ||
| 892 | wb->left=0; | ||
| 893 | wb->offset+=i; | ||
| 894 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && | 837 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && |
| 895 | SSL_version(s) != DTLS1_VERSION && SSL_version(s) != DTLS1_BAD_VER) | 838 | SSL_version(s) != DTLS1_VERSION && |
| 839 | SSL_version(s) != DTLS1_BAD_VER) | ||
| 896 | ssl3_release_write_buffer(s); | 840 | ssl3_release_write_buffer(s); |
| 897 | s->rwstate=SSL_NOTHING; | 841 | s->rwstate = SSL_NOTHING; |
| 898 | return(s->s3->wpend_ret); | 842 | return (s->s3->wpend_ret); |
| 899 | } | 843 | } else if (i <= 0) { |
| 900 | else if (i <= 0) { | ||
| 901 | if (s->version == DTLS1_VERSION || | 844 | if (s->version == DTLS1_VERSION || |
| 902 | s->version == DTLS1_BAD_VER) { | 845 | s->version == DTLS1_BAD_VER) { |
| 903 | /* For DTLS, just drop it. That's kind of the whole | 846 | /* For DTLS, just drop it. That's kind of the whole |
| 904 | point in using a datagram service */ | 847 | point in using a datagram service */ |
| 905 | wb->left = 0; | 848 | wb->left = 0; |
| 906 | } | 849 | } |
| 907 | return(i); | 850 | return (i); |
| 908 | } | ||
| 909 | wb->offset+=i; | ||
| 910 | wb->left-=i; | ||
| 911 | } | 851 | } |
| 852 | wb->offset += i; | ||
| 853 | wb->left -= i; | ||
| 912 | } | 854 | } |
| 855 | } | ||
| 913 | 856 | ||
| 914 | /* Return up to 'len' payload bytes received in 'type' records. | 857 | /* Return up to 'len' payload bytes received in 'type' records. |
| 915 | * 'type' is one of the following: | 858 | * 'type' is one of the following: |
| @@ -938,39 +881,40 @@ int ssl3_write_pending(SSL *s, int type, const unsigned char *buf, | |||
| 938 | * Application data protocol | 881 | * Application data protocol |
| 939 | * none of our business | 882 | * none of our business |
| 940 | */ | 883 | */ |
| 941 | int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) | 884 | int |
| 942 | { | 885 | ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) |
| 943 | int al,i,j,ret; | 886 | { |
| 887 | int al, i, j, ret; | ||
| 944 | unsigned int n; | 888 | unsigned int n; |
| 945 | SSL3_RECORD *rr; | 889 | SSL3_RECORD *rr; |
| 946 | void (*cb)(const SSL *ssl,int type2,int val)=NULL; | 890 | void (*cb)(const SSL *ssl, int type2, int val) = NULL; |
| 947 | 891 | ||
| 948 | if (s->s3->rbuf.buf == NULL) /* Not initialized yet */ | 892 | if (s->s3->rbuf.buf == NULL) /* Not initialized yet */ |
| 949 | if (!ssl3_setup_read_buffer(s)) | 893 | if (!ssl3_setup_read_buffer(s)) |
| 950 | return(-1); | 894 | return (-1); |
| 951 | 895 | ||
| 952 | if ((type && (type != SSL3_RT_APPLICATION_DATA) && (type != SSL3_RT_HANDSHAKE) && type) || | 896 | if ((type && (type != SSL3_RT_APPLICATION_DATA) && |
| 953 | (peek && (type != SSL3_RT_APPLICATION_DATA))) | 897 | (type != SSL3_RT_HANDSHAKE) && type) || |
| 954 | { | 898 | (peek && (type != SSL3_RT_APPLICATION_DATA))) { |
| 955 | SSLerr(SSL_F_SSL3_READ_BYTES, ERR_R_INTERNAL_ERROR); | 899 | SSLerr(SSL_F_SSL3_READ_BYTES, ERR_R_INTERNAL_ERROR); |
| 956 | return -1; | 900 | return -1; |
| 957 | } | 901 | } |
| 958 | 902 | ||
| 959 | if ((type == SSL3_RT_HANDSHAKE) && (s->s3->handshake_fragment_len > 0)) | 903 | if ((type == SSL3_RT_HANDSHAKE) && (s->s3->handshake_fragment_len > 0)) |
| 960 | /* (partially) satisfy request from storage */ | 904 | /* (partially) satisfy request from storage */ |
| 961 | { | 905 | { |
| 962 | unsigned char *src = s->s3->handshake_fragment; | 906 | unsigned char *src = s->s3->handshake_fragment; |
| 963 | unsigned char *dst = buf; | 907 | unsigned char *dst = buf; |
| 964 | unsigned int k; | 908 | unsigned int k; |
| 965 | 909 | ||
| 966 | /* peek == 0 */ | 910 | /* peek == 0 */ |
| 967 | n = 0; | 911 | n = 0; |
| 968 | while ((len > 0) && (s->s3->handshake_fragment_len > 0)) | 912 | while ((len > 0) && (s->s3->handshake_fragment_len > 0)) { |
| 969 | { | ||
| 970 | *dst++ = *src++; | 913 | *dst++ = *src++; |
| 971 | len--; s->s3->handshake_fragment_len--; | 914 | len--; |
| 915 | s->s3->handshake_fragment_len--; | ||
| 972 | n++; | 916 | n++; |
| 973 | } | 917 | } |
| 974 | /* move any remaining fragment bytes: */ | 918 | /* move any remaining fragment bytes: */ |
| 975 | for (k = 0; k < s->s3->handshake_fragment_len; k++) | 919 | for (k = 0; k < s->s3->handshake_fragment_len; k++) |
| 976 | s->s3->handshake_fragment[k] = *src++; | 920 | s->s3->handshake_fragment[k] = *src++; |
| @@ -979,19 +923,18 @@ int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) | |||
| 979 | 923 | ||
| 980 | /* Now s->s3->handshake_fragment_len == 0 if type == SSL3_RT_HANDSHAKE. */ | 924 | /* Now s->s3->handshake_fragment_len == 0 if type == SSL3_RT_HANDSHAKE. */ |
| 981 | 925 | ||
| 982 | if (!s->in_handshake && SSL_in_init(s)) | 926 | if (!s->in_handshake && SSL_in_init(s)) { |
| 983 | { | ||
| 984 | /* type == SSL3_RT_APPLICATION_DATA */ | 927 | /* type == SSL3_RT_APPLICATION_DATA */ |
| 985 | i=s->handshake_func(s); | 928 | i = s->handshake_func(s); |
| 986 | if (i < 0) return(i); | 929 | if (i < 0) |
| 987 | if (i == 0) | 930 | return (i); |
| 988 | { | 931 | if (i == 0) { |
| 989 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE); | 932 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); |
| 990 | return(-1); | 933 | return (-1); |
| 991 | } | ||
| 992 | } | 934 | } |
| 935 | } | ||
| 993 | start: | 936 | start: |
| 994 | s->rwstate=SSL_NOTHING; | 937 | s->rwstate = SSL_NOTHING; |
| 995 | 938 | ||
| 996 | /* s->s3->rrec.type - is the type of record | 939 | /* s->s3->rrec.type - is the type of record |
| 997 | * s->s3->rrec.data, - data | 940 | * s->s3->rrec.data, - data |
| @@ -1000,67 +943,63 @@ start: | |||
| 1000 | rr = &(s->s3->rrec); | 943 | rr = &(s->s3->rrec); |
| 1001 | 944 | ||
| 1002 | /* get new packet if necessary */ | 945 | /* get new packet if necessary */ |
| 1003 | if ((rr->length == 0) || (s->rstate == SSL_ST_READ_BODY)) | 946 | if ((rr->length == 0) || (s->rstate == SSL_ST_READ_BODY)) { |
| 1004 | { | 947 | ret = ssl3_get_record(s); |
| 1005 | ret=ssl3_get_record(s); | 948 | if (ret <= 0) |
| 1006 | if (ret <= 0) return(ret); | 949 | return (ret); |
| 1007 | } | 950 | } |
| 1008 | 951 | ||
| 1009 | /* we now have a packet which can be read and processed */ | 952 | /* we now have a packet which can be read and processed */ |
| 1010 | 953 | ||
| 1011 | if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec, | 954 | if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec, |
| 1012 | * reset by ssl3_get_finished */ | 955 | * reset by ssl3_get_finished */ |
| 1013 | && (rr->type != SSL3_RT_HANDSHAKE)) | 956 | && (rr->type != SSL3_RT_HANDSHAKE)) { |
| 1014 | { | 957 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 1015 | al=SSL_AD_UNEXPECTED_MESSAGE; | 958 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_DATA_BETWEEN_CCS_AND_FINISHED); |
| 1016 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_DATA_BETWEEN_CCS_AND_FINISHED); | ||
| 1017 | goto f_err; | 959 | goto f_err; |
| 1018 | } | 960 | } |
| 1019 | 961 | ||
| 1020 | /* If the other end has shut down, throw anything we read away | 962 | /* If the other end has shut down, throw anything we read away |
| 1021 | * (even in 'peek' mode) */ | 963 | * (even in 'peek' mode) */ |
| 1022 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) | 964 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) { |
| 1023 | { | 965 | rr->length = 0; |
| 1024 | rr->length=0; | 966 | s->rwstate = SSL_NOTHING; |
| 1025 | s->rwstate=SSL_NOTHING; | 967 | return (0); |
| 1026 | return(0); | 968 | } |
| 1027 | } | ||
| 1028 | 969 | ||
| 1029 | 970 | ||
| 1030 | if (type == rr->type) /* SSL3_RT_APPLICATION_DATA or SSL3_RT_HANDSHAKE */ | 971 | if (type == rr->type) /* SSL3_RT_APPLICATION_DATA or SSL3_RT_HANDSHAKE */ |
| 1031 | { | 972 | { |
| 1032 | /* make sure that we are not getting application data when we | 973 | /* make sure that we are not getting application data when we |
| 1033 | * are doing a handshake for the first time */ | 974 | * are doing a handshake for the first time */ |
| 1034 | if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) && | 975 | if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) && |
| 1035 | (s->enc_read_ctx == NULL)) | 976 | (s->enc_read_ctx == NULL)) { |
| 1036 | { | 977 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 1037 | al=SSL_AD_UNEXPECTED_MESSAGE; | 978 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_APP_DATA_IN_HANDSHAKE); |
| 1038 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_APP_DATA_IN_HANDSHAKE); | ||
| 1039 | goto f_err; | 979 | goto f_err; |
| 1040 | } | 980 | } |
| 1041 | 981 | ||
| 1042 | if (len <= 0) return(len); | 982 | if (len <= 0) |
| 983 | return (len); | ||
| 1043 | 984 | ||
| 1044 | if ((unsigned int)len > rr->length) | 985 | if ((unsigned int)len > rr->length) |
| 1045 | n = rr->length; | 986 | n = rr->length; |
| 1046 | else | 987 | else |
| 1047 | n = (unsigned int)len; | 988 | n = (unsigned int)len; |
| 1048 | 989 | ||
| 1049 | memcpy(buf,&(rr->data[rr->off]),n); | 990 | memcpy(buf, &(rr->data[rr->off]), n); |
| 1050 | if (!peek) | 991 | if (!peek) { |
| 1051 | { | 992 | rr->length -= n; |
| 1052 | rr->length-=n; | 993 | rr->off += n; |
| 1053 | rr->off+=n; | 994 | if (rr->length == 0) { |
| 1054 | if (rr->length == 0) | 995 | s->rstate = SSL_ST_READ_HEADER; |
| 1055 | { | 996 | rr->off = 0; |
| 1056 | s->rstate=SSL_ST_READ_HEADER; | ||
| 1057 | rr->off=0; | ||
| 1058 | if (s->mode & SSL_MODE_RELEASE_BUFFERS) | 997 | if (s->mode & SSL_MODE_RELEASE_BUFFERS) |
| 1059 | ssl3_release_read_buffer(s); | 998 | ssl3_release_read_buffer(s); |
| 1060 | } | ||
| 1061 | } | 999 | } |
| 1062 | return(n); | ||
| 1063 | } | 1000 | } |
| 1001 | return (n); | ||
| 1002 | } | ||
| 1064 | 1003 | ||
| 1065 | 1004 | ||
| 1066 | /* If we get here, then type != rr->type; if we have a handshake | 1005 | /* If we get here, then type != rr->type; if we have a handshake |
| @@ -1069,137 +1008,122 @@ start: | |||
| 1069 | /* In case of record types for which we have 'fragment' storage, | 1008 | /* In case of record types for which we have 'fragment' storage, |
| 1070 | * fill that so that we can process the data at a fixed place. | 1009 | * fill that so that we can process the data at a fixed place. |
| 1071 | */ | 1010 | */ |
| 1072 | { | 1011 | { |
| 1073 | unsigned int dest_maxlen = 0; | 1012 | unsigned int dest_maxlen = 0; |
| 1074 | unsigned char *dest = NULL; | 1013 | unsigned char *dest = NULL; |
| 1075 | unsigned int *dest_len = NULL; | 1014 | unsigned int *dest_len = NULL; |
| 1076 | 1015 | ||
| 1077 | if (rr->type == SSL3_RT_HANDSHAKE) | 1016 | if (rr->type == SSL3_RT_HANDSHAKE) { |
| 1078 | { | ||
| 1079 | dest_maxlen = sizeof s->s3->handshake_fragment; | 1017 | dest_maxlen = sizeof s->s3->handshake_fragment; |
| 1080 | dest = s->s3->handshake_fragment; | 1018 | dest = s->s3->handshake_fragment; |
| 1081 | dest_len = &s->s3->handshake_fragment_len; | 1019 | dest_len = &s->s3->handshake_fragment_len; |
| 1082 | } | 1020 | } else if (rr->type == SSL3_RT_ALERT) { |
| 1083 | else if (rr->type == SSL3_RT_ALERT) | ||
| 1084 | { | ||
| 1085 | dest_maxlen = sizeof s->s3->alert_fragment; | 1021 | dest_maxlen = sizeof s->s3->alert_fragment; |
| 1086 | dest = s->s3->alert_fragment; | 1022 | dest = s->s3->alert_fragment; |
| 1087 | dest_len = &s->s3->alert_fragment_len; | 1023 | dest_len = &s->s3->alert_fragment_len; |
| 1088 | } | 1024 | } |
| 1089 | #ifndef OPENSSL_NO_HEARTBEATS | 1025 | #ifndef OPENSSL_NO_HEARTBEATS |
| 1090 | else if (rr->type == TLS1_RT_HEARTBEAT) | 1026 | else if (rr->type == TLS1_RT_HEARTBEAT) { |
| 1091 | { | ||
| 1092 | tls1_process_heartbeat(s); | 1027 | tls1_process_heartbeat(s); |
| 1093 | 1028 | ||
| 1094 | /* Exit and notify application to read again */ | 1029 | /* Exit and notify application to read again */ |
| 1095 | rr->length = 0; | 1030 | rr->length = 0; |
| 1096 | s->rwstate=SSL_READING; | 1031 | s->rwstate = SSL_READING; |
| 1097 | BIO_clear_retry_flags(SSL_get_rbio(s)); | 1032 | BIO_clear_retry_flags(SSL_get_rbio(s)); |
| 1098 | BIO_set_retry_read(SSL_get_rbio(s)); | 1033 | BIO_set_retry_read(SSL_get_rbio(s)); |
| 1099 | return(-1); | 1034 | return (-1); |
| 1100 | } | 1035 | } |
| 1101 | #endif | 1036 | #endif |
| 1102 | 1037 | ||
| 1103 | if (dest_maxlen > 0) | 1038 | if (dest_maxlen > 0) { |
| 1104 | { | ||
| 1105 | n = dest_maxlen - *dest_len; /* available space in 'dest' */ | 1039 | n = dest_maxlen - *dest_len; /* available space in 'dest' */ |
| 1106 | if (rr->length < n) | 1040 | if (rr->length < n) |
| 1107 | n = rr->length; /* available bytes */ | 1041 | n = rr->length; /* available bytes */ |
| 1108 | 1042 | ||
| 1109 | /* now move 'n' bytes: */ | 1043 | /* now move 'n' bytes: */ |
| 1110 | while (n-- > 0) | 1044 | while (n-- > 0) { |
| 1111 | { | ||
| 1112 | dest[(*dest_len)++] = rr->data[rr->off++]; | 1045 | dest[(*dest_len)++] = rr->data[rr->off++]; |
| 1113 | rr->length--; | 1046 | rr->length--; |
| 1114 | } | 1047 | } |
| 1115 | 1048 | ||
| 1116 | if (*dest_len < dest_maxlen) | 1049 | if (*dest_len < dest_maxlen) |
| 1117 | goto start; /* fragment was too small */ | 1050 | goto start; /* fragment was too small */ |
| 1118 | } | ||
| 1119 | } | 1051 | } |
| 1052 | } | ||
| 1120 | 1053 | ||
| 1121 | /* s->s3->handshake_fragment_len == 4 iff rr->type == SSL3_RT_HANDSHAKE; | 1054 | /* s->s3->handshake_fragment_len == 4 iff rr->type == SSL3_RT_HANDSHAKE; |
| 1122 | * s->s3->alert_fragment_len == 2 iff rr->type == SSL3_RT_ALERT. | 1055 | * s->s3->alert_fragment_len == 2 iff rr->type == SSL3_RT_ALERT. |
| 1123 | * (Possibly rr is 'empty' now, i.e. rr->length may be 0.) */ | 1056 | * (Possibly rr is 'empty' now, i.e. rr->length may be 0.) */ |
| 1124 | 1057 | ||
| 1125 | /* If we are a client, check for an incoming 'Hello Request': */ | 1058 | /* If we are a client, check for an incoming 'Hello Request': */ |
| 1126 | if ((!s->server) && | 1059 | if ((!s->server) && (s->s3->handshake_fragment_len >= 4) && |
| 1127 | (s->s3->handshake_fragment_len >= 4) && | 1060 | (s->s3->handshake_fragment[0] == SSL3_MT_HELLO_REQUEST) && |
| 1128 | (s->s3->handshake_fragment[0] == SSL3_MT_HELLO_REQUEST) && | 1061 | (s->session != NULL) && (s->session->cipher != NULL)) { |
| 1129 | (s->session != NULL) && (s->session->cipher != NULL)) | ||
| 1130 | { | ||
| 1131 | s->s3->handshake_fragment_len = 0; | 1062 | s->s3->handshake_fragment_len = 0; |
| 1132 | 1063 | ||
| 1133 | if ((s->s3->handshake_fragment[1] != 0) || | 1064 | if ((s->s3->handshake_fragment[1] != 0) || |
| 1134 | (s->s3->handshake_fragment[2] != 0) || | 1065 | (s->s3->handshake_fragment[2] != 0) || |
| 1135 | (s->s3->handshake_fragment[3] != 0)) | 1066 | (s->s3->handshake_fragment[3] != 0)) { |
| 1136 | { | 1067 | al = SSL_AD_DECODE_ERROR; |
| 1137 | al=SSL_AD_DECODE_ERROR; | 1068 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_BAD_HELLO_REQUEST); |
| 1138 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_BAD_HELLO_REQUEST); | ||
| 1139 | goto f_err; | 1069 | goto f_err; |
| 1140 | } | 1070 | } |
| 1141 | 1071 | ||
| 1142 | if (s->msg_callback) | 1072 | if (s->msg_callback) |
| 1143 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->s3->handshake_fragment, 4, s, s->msg_callback_arg); | 1073 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->s3->handshake_fragment, 4, s, s->msg_callback_arg); |
| 1144 | 1074 | ||
| 1145 | if (SSL_is_init_finished(s) && | 1075 | if (SSL_is_init_finished(s) && |
| 1146 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && | 1076 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && |
| 1147 | !s->s3->renegotiate) | 1077 | !s->s3->renegotiate) { |
| 1148 | { | ||
| 1149 | ssl3_renegotiate(s); | 1078 | ssl3_renegotiate(s); |
| 1150 | if (ssl3_renegotiate_check(s)) | 1079 | if (ssl3_renegotiate_check(s)) { |
| 1151 | { | 1080 | i = s->handshake_func(s); |
| 1152 | i=s->handshake_func(s); | 1081 | if (i < 0) |
| 1153 | if (i < 0) return(i); | 1082 | return (i); |
| 1154 | if (i == 0) | 1083 | if (i == 0) { |
| 1155 | { | 1084 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); |
| 1156 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE); | 1085 | return (-1); |
| 1157 | return(-1); | 1086 | } |
| 1158 | } | ||
| 1159 | 1087 | ||
| 1160 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) | 1088 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) { |
| 1161 | { | ||
| 1162 | if (s->s3->rbuf.left == 0) /* no read-ahead left? */ | 1089 | if (s->s3->rbuf.left == 0) /* no read-ahead left? */ |
| 1163 | { | 1090 | { |
| 1164 | BIO *bio; | 1091 | BIO *bio; |
| 1165 | /* In the case where we try to read application data, | 1092 | /* In the case where we try to read application data, |
| 1166 | * but we trigger an SSL handshake, we return -1 with | 1093 | * but we trigger an SSL handshake, we return -1 with |
| 1167 | * the retry option set. Otherwise renegotiation may | 1094 | * the retry option set. Otherwise renegotiation may |
| 1168 | * cause nasty problems in the blocking world */ | 1095 | * cause nasty problems in the blocking world */ |
| 1169 | s->rwstate=SSL_READING; | 1096 | s->rwstate = SSL_READING; |
| 1170 | bio=SSL_get_rbio(s); | 1097 | bio = SSL_get_rbio(s); |
| 1171 | BIO_clear_retry_flags(bio); | 1098 | BIO_clear_retry_flags(bio); |
| 1172 | BIO_set_retry_read(bio); | 1099 | BIO_set_retry_read(bio); |
| 1173 | return(-1); | 1100 | return (-1); |
| 1174 | } | ||
| 1175 | } | 1101 | } |
| 1176 | } | 1102 | } |
| 1177 | } | 1103 | } |
| 1104 | } | ||
| 1178 | /* we either finished a handshake or ignored the request, | 1105 | /* we either finished a handshake or ignored the request, |
| 1179 | * now try again to obtain the (application) data we were asked for */ | 1106 | * now try again to obtain the (application) data we were asked for */ |
| 1180 | goto start; | 1107 | goto start; |
| 1181 | } | 1108 | } |
| 1182 | /* If we are a server and get a client hello when renegotiation isn't | 1109 | /* If we are a server and get a client hello when renegotiation isn't |
| 1183 | * allowed send back a no renegotiation alert and carry on. | 1110 | * allowed send back a no renegotiation alert and carry on. |
| 1184 | * WARNING: experimental code, needs reviewing (steve) | 1111 | * WARNING: experimental code, needs reviewing (steve) |
| 1185 | */ | 1112 | */ |
| 1186 | if (s->server && | 1113 | if (s->server && |
| 1187 | SSL_is_init_finished(s) && | 1114 | SSL_is_init_finished(s) && |
| 1188 | !s->s3->send_connection_binding && | 1115 | !s->s3->send_connection_binding && |
| 1189 | (s->version > SSL3_VERSION) && | 1116 | (s->version > SSL3_VERSION) && |
| 1190 | (s->s3->handshake_fragment_len >= 4) && | 1117 | (s->s3->handshake_fragment_len >= 4) && |
| 1191 | (s->s3->handshake_fragment[0] == SSL3_MT_CLIENT_HELLO) && | 1118 | (s->s3->handshake_fragment[0] == SSL3_MT_CLIENT_HELLO) && |
| 1192 | (s->session != NULL) && (s->session->cipher != NULL) && | 1119 | (s->session != NULL) && (s->session->cipher != NULL) && |
| 1193 | !(s->ctx->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) | 1120 | !(s->ctx->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) { |
| 1194 | |||
| 1195 | { | ||
| 1196 | /*s->s3->handshake_fragment_len = 0;*/ | 1121 | /*s->s3->handshake_fragment_len = 0;*/ |
| 1197 | rr->length = 0; | 1122 | rr->length = 0; |
| 1198 | ssl3_send_alert(s,SSL3_AL_WARNING, SSL_AD_NO_RENEGOTIATION); | 1123 | ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_NO_RENEGOTIATION); |
| 1199 | goto start; | 1124 | goto start; |
| 1200 | } | 1125 | } |
| 1201 | if (s->s3->alert_fragment_len >= 2) | 1126 | if (s->s3->alert_fragment_len >= 2) { |
| 1202 | { | ||
| 1203 | int alert_level = s->s3->alert_fragment[0]; | 1127 | int alert_level = s->s3->alert_fragment[0]; |
| 1204 | int alert_descr = s->s3->alert_fragment[1]; | 1128 | int alert_descr = s->s3->alert_fragment[1]; |
| 1205 | 1129 | ||
| @@ -1209,24 +1133,22 @@ start: | |||
| 1209 | s->msg_callback(0, s->version, SSL3_RT_ALERT, s->s3->alert_fragment, 2, s, s->msg_callback_arg); | 1133 | s->msg_callback(0, s->version, SSL3_RT_ALERT, s->s3->alert_fragment, 2, s, s->msg_callback_arg); |
| 1210 | 1134 | ||
| 1211 | if (s->info_callback != NULL) | 1135 | if (s->info_callback != NULL) |
| 1212 | cb=s->info_callback; | 1136 | cb = s->info_callback; |
| 1213 | else if (s->ctx->info_callback != NULL) | 1137 | else if (s->ctx->info_callback != NULL) |
| 1214 | cb=s->ctx->info_callback; | 1138 | cb = s->ctx->info_callback; |
| 1215 | 1139 | ||
| 1216 | if (cb != NULL) | 1140 | if (cb != NULL) { |
| 1217 | { | ||
| 1218 | j = (alert_level << 8) | alert_descr; | 1141 | j = (alert_level << 8) | alert_descr; |
| 1219 | cb(s, SSL_CB_READ_ALERT, j); | 1142 | cb(s, SSL_CB_READ_ALERT, j); |
| 1220 | } | 1143 | } |
| 1221 | 1144 | ||
| 1222 | if (alert_level == 1) /* warning */ | 1145 | if (alert_level == 1) /* warning */ |
| 1223 | { | 1146 | { |
| 1224 | s->s3->warn_alert = alert_descr; | 1147 | s->s3->warn_alert = alert_descr; |
| 1225 | if (alert_descr == SSL_AD_CLOSE_NOTIFY) | 1148 | if (alert_descr == SSL_AD_CLOSE_NOTIFY) { |
| 1226 | { | ||
| 1227 | s->shutdown |= SSL_RECEIVED_SHUTDOWN; | 1149 | s->shutdown |= SSL_RECEIVED_SHUTDOWN; |
| 1228 | return(0); | 1150 | return (0); |
| 1229 | } | 1151 | } |
| 1230 | /* This is a warning but we receive it if we requested | 1152 | /* This is a warning but we receive it if we requested |
| 1231 | * renegotiation and the peer denied it. Terminate with | 1153 | * renegotiation and the peer denied it. Terminate with |
| 1232 | * a fatal alert because if application tried to | 1154 | * a fatal alert because if application tried to |
| @@ -1236,139 +1158,126 @@ start: | |||
| 1236 | * In future we might have a renegotiation where we | 1158 | * In future we might have a renegotiation where we |
| 1237 | * don't care if the peer refused it where we carry on. | 1159 | * don't care if the peer refused it where we carry on. |
| 1238 | */ | 1160 | */ |
| 1239 | else if (alert_descr == SSL_AD_NO_RENEGOTIATION) | 1161 | else if (alert_descr == SSL_AD_NO_RENEGOTIATION) { |
| 1240 | { | ||
| 1241 | al = SSL_AD_HANDSHAKE_FAILURE; | 1162 | al = SSL_AD_HANDSHAKE_FAILURE; |
| 1242 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_NO_RENEGOTIATION); | 1163 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_NO_RENEGOTIATION); |
| 1243 | goto f_err; | 1164 | goto f_err; |
| 1244 | } | 1165 | } |
| 1245 | #ifdef SSL_AD_MISSING_SRP_USERNAME | 1166 | #ifdef SSL_AD_MISSING_SRP_USERNAME |
| 1246 | else if (alert_descr == SSL_AD_MISSING_SRP_USERNAME) | 1167 | else if (alert_descr == SSL_AD_MISSING_SRP_USERNAME) |
| 1247 | return(0); | 1168 | return (0); |
| 1248 | #endif | 1169 | #endif |
| 1249 | } | 1170 | } else if (alert_level == 2) /* fatal */ |
| 1250 | else if (alert_level == 2) /* fatal */ | 1171 | { |
| 1251 | { | ||
| 1252 | char tmp[16]; | 1172 | char tmp[16]; |
| 1253 | 1173 | ||
| 1254 | s->rwstate=SSL_NOTHING; | 1174 | s->rwstate = SSL_NOTHING; |
| 1255 | s->s3->fatal_alert = alert_descr; | 1175 | s->s3->fatal_alert = alert_descr; |
| 1256 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_AD_REASON_OFFSET + alert_descr); | 1176 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_AD_REASON_OFFSET + alert_descr); |
| 1257 | BIO_snprintf(tmp,sizeof tmp,"%d",alert_descr); | 1177 | BIO_snprintf(tmp, sizeof tmp, "%d", alert_descr); |
| 1258 | ERR_add_error_data(2,"SSL alert number ",tmp); | 1178 | ERR_add_error_data(2, "SSL alert number ", tmp); |
| 1259 | s->shutdown|=SSL_RECEIVED_SHUTDOWN; | 1179 | s->shutdown|=SSL_RECEIVED_SHUTDOWN; |
| 1260 | SSL_CTX_remove_session(s->ctx,s->session); | 1180 | SSL_CTX_remove_session(s->ctx, s->session); |
| 1261 | return(0); | 1181 | return (0); |
| 1262 | } | 1182 | } else { |
| 1263 | else | 1183 | al = SSL_AD_ILLEGAL_PARAMETER; |
| 1264 | { | 1184 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_UNKNOWN_ALERT_TYPE); |
| 1265 | al=SSL_AD_ILLEGAL_PARAMETER; | ||
| 1266 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNKNOWN_ALERT_TYPE); | ||
| 1267 | goto f_err; | 1185 | goto f_err; |
| 1268 | } | 1186 | } |
| 1269 | 1187 | ||
| 1270 | goto start; | 1188 | goto start; |
| 1271 | } | 1189 | } |
| 1272 | 1190 | ||
| 1273 | if (s->shutdown & SSL_SENT_SHUTDOWN) /* but we have not received a shutdown */ | 1191 | if (s->shutdown & SSL_SENT_SHUTDOWN) /* but we have not received a shutdown */ |
| 1274 | { | 1192 | { |
| 1275 | s->rwstate=SSL_NOTHING; | 1193 | s->rwstate = SSL_NOTHING; |
| 1276 | rr->length=0; | 1194 | rr->length = 0; |
| 1277 | return(0); | 1195 | return (0); |
| 1278 | } | 1196 | } |
| 1279 | 1197 | ||
| 1280 | if (rr->type == SSL3_RT_CHANGE_CIPHER_SPEC) | 1198 | if (rr->type == SSL3_RT_CHANGE_CIPHER_SPEC) { |
| 1281 | { | ||
| 1282 | /* 'Change Cipher Spec' is just a single byte, so we know | 1199 | /* 'Change Cipher Spec' is just a single byte, so we know |
| 1283 | * exactly what the record payload has to look like */ | 1200 | * exactly what the record payload has to look like */ |
| 1284 | if ( (rr->length != 1) || (rr->off != 0) || | 1201 | if ((rr->length != 1) || (rr->off != 0) || |
| 1285 | (rr->data[0] != SSL3_MT_CCS)) | 1202 | (rr->data[0] != SSL3_MT_CCS)) { |
| 1286 | { | 1203 | al = SSL_AD_ILLEGAL_PARAMETER; |
| 1287 | al=SSL_AD_ILLEGAL_PARAMETER; | 1204 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_BAD_CHANGE_CIPHER_SPEC); |
| 1288 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_BAD_CHANGE_CIPHER_SPEC); | ||
| 1289 | goto f_err; | 1205 | goto f_err; |
| 1290 | } | 1206 | } |
| 1291 | 1207 | ||
| 1292 | /* Check we have a cipher to change to */ | 1208 | /* Check we have a cipher to change to */ |
| 1293 | if (s->s3->tmp.new_cipher == NULL) | 1209 | if (s->s3->tmp.new_cipher == NULL) { |
| 1294 | { | 1210 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 1295 | al=SSL_AD_UNEXPECTED_MESSAGE; | 1211 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_CCS_RECEIVED_EARLY); |
| 1296 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_CCS_RECEIVED_EARLY); | ||
| 1297 | goto f_err; | 1212 | goto f_err; |
| 1298 | } | 1213 | } |
| 1299 | 1214 | ||
| 1300 | rr->length=0; | 1215 | rr->length = 0; |
| 1301 | 1216 | ||
| 1302 | if (s->msg_callback) | 1217 | if (s->msg_callback) |
| 1303 | s->msg_callback(0, s->version, SSL3_RT_CHANGE_CIPHER_SPEC, rr->data, 1, s, s->msg_callback_arg); | 1218 | s->msg_callback(0, s->version, SSL3_RT_CHANGE_CIPHER_SPEC, rr->data, 1, s, s->msg_callback_arg); |
| 1304 | 1219 | ||
| 1305 | s->s3->change_cipher_spec=1; | 1220 | s->s3->change_cipher_spec = 1; |
| 1306 | if (!ssl3_do_change_cipher_spec(s)) | 1221 | if (!ssl3_do_change_cipher_spec(s)) |
| 1307 | goto err; | 1222 | goto err; |
| 1308 | else | 1223 | else |
| 1309 | goto start; | 1224 | goto start; |
| 1310 | } | 1225 | } |
| 1311 | 1226 | ||
| 1312 | /* Unexpected handshake message (Client Hello, or protocol violation) */ | 1227 | /* Unexpected handshake message (Client Hello, or protocol violation) */ |
| 1313 | if ((s->s3->handshake_fragment_len >= 4) && !s->in_handshake) | 1228 | if ((s->s3->handshake_fragment_len >= 4) && !s->in_handshake) { |
| 1314 | { | ||
| 1315 | if (((s->state&SSL_ST_MASK) == SSL_ST_OK) && | 1229 | if (((s->state&SSL_ST_MASK) == SSL_ST_OK) && |
| 1316 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)) | 1230 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)) { |
| 1317 | { | ||
| 1318 | #if 0 /* worked only because C operator preferences are not as expected (and | 1231 | #if 0 /* worked only because C operator preferences are not as expected (and |
| 1319 | * because this is not really needed for clients except for detecting | 1232 | * because this is not really needed for clients except for detecting |
| 1320 | * protocol violations): */ | 1233 | * protocol violations): */ |
| 1321 | s->state=SSL_ST_BEFORE|(s->server) | 1234 | s->state = SSL_ST_BEFORE | |
| 1322 | ?SSL_ST_ACCEPT | 1235 | (s->server) ? SSL_ST_ACCEPT : SSL_ST_CONNECT; |
| 1323 | :SSL_ST_CONNECT; | ||
| 1324 | #else | 1236 | #else |
| 1325 | s->state = s->server ? SSL_ST_ACCEPT : SSL_ST_CONNECT; | 1237 | s->state = s->server ? SSL_ST_ACCEPT : SSL_ST_CONNECT; |
| 1326 | #endif | 1238 | #endif |
| 1327 | s->renegotiate=1; | 1239 | s->renegotiate = 1; |
| 1328 | s->new_session=1; | 1240 | s->new_session = 1; |
| 1329 | } | 1241 | } |
| 1330 | i=s->handshake_func(s); | 1242 | i = s->handshake_func(s); |
| 1331 | if (i < 0) return(i); | 1243 | if (i < 0) |
| 1332 | if (i == 0) | 1244 | return (i); |
| 1333 | { | 1245 | if (i == 0) { |
| 1334 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE); | 1246 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); |
| 1335 | return(-1); | 1247 | return (-1); |
| 1336 | } | 1248 | } |
| 1337 | 1249 | ||
| 1338 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) | 1250 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) { |
| 1339 | { | ||
| 1340 | if (s->s3->rbuf.left == 0) /* no read-ahead left? */ | 1251 | if (s->s3->rbuf.left == 0) /* no read-ahead left? */ |
| 1341 | { | 1252 | { |
| 1342 | BIO *bio; | 1253 | BIO *bio; |
| 1343 | /* In the case where we try to read application data, | 1254 | /* In the case where we try to read application data, |
| 1344 | * but we trigger an SSL handshake, we return -1 with | 1255 | * but we trigger an SSL handshake, we return -1 with |
| 1345 | * the retry option set. Otherwise renegotiation may | 1256 | * the retry option set. Otherwise renegotiation may |
| 1346 | * cause nasty problems in the blocking world */ | 1257 | * cause nasty problems in the blocking world */ |
| 1347 | s->rwstate=SSL_READING; | 1258 | s->rwstate = SSL_READING; |
| 1348 | bio=SSL_get_rbio(s); | 1259 | bio = SSL_get_rbio(s); |
| 1349 | BIO_clear_retry_flags(bio); | 1260 | BIO_clear_retry_flags(bio); |
| 1350 | BIO_set_retry_read(bio); | 1261 | BIO_set_retry_read(bio); |
| 1351 | return(-1); | 1262 | return (-1); |
| 1352 | } | ||
| 1353 | } | 1263 | } |
| 1354 | goto start; | ||
| 1355 | } | 1264 | } |
| 1265 | goto start; | ||
| 1266 | } | ||
| 1356 | 1267 | ||
| 1357 | switch (rr->type) | 1268 | switch (rr->type) { |
| 1358 | { | ||
| 1359 | default: | 1269 | default: |
| 1360 | #ifndef OPENSSL_NO_TLS | 1270 | #ifndef OPENSSL_NO_TLS |
| 1361 | /* TLS up to v1.1 just ignores unknown message types: | 1271 | /* TLS up to v1.1 just ignores unknown message types: |
| 1362 | * TLS v1.2 give an unexpected message alert. | 1272 | * TLS v1.2 give an unexpected message alert. |
| 1363 | */ | 1273 | */ |
| 1364 | if (s->version >= TLS1_VERSION && s->version <= TLS1_1_VERSION) | 1274 | if (s->version >= TLS1_VERSION && s->version <= TLS1_1_VERSION) { |
| 1365 | { | ||
| 1366 | rr->length = 0; | 1275 | rr->length = 0; |
| 1367 | goto start; | 1276 | goto start; |
| 1368 | } | 1277 | } |
| 1369 | #endif | 1278 | #endif |
| 1370 | al=SSL_AD_UNEXPECTED_MESSAGE; | 1279 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 1371 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNEXPECTED_RECORD); | 1280 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_UNEXPECTED_RECORD); |
| 1372 | goto f_err; | 1281 | goto f_err; |
| 1373 | case SSL3_RT_CHANGE_CIPHER_SPEC: | 1282 | case SSL3_RT_CHANGE_CIPHER_SPEC: |
| 1374 | case SSL3_RT_ALERT: | 1283 | case SSL3_RT_ALERT: |
| @@ -1376,8 +1285,8 @@ start: | |||
| 1376 | /* we already handled all of these, with the possible exception | 1285 | /* we already handled all of these, with the possible exception |
| 1377 | * of SSL3_RT_HANDSHAKE when s->in_handshake is set, but that | 1286 | * of SSL3_RT_HANDSHAKE when s->in_handshake is set, but that |
| 1378 | * should not happen when type != rr->type */ | 1287 | * should not happen when type != rr->type */ |
| 1379 | al=SSL_AD_UNEXPECTED_MESSAGE; | 1288 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 1380 | SSLerr(SSL_F_SSL3_READ_BYTES,ERR_R_INTERNAL_ERROR); | 1289 | SSLerr(SSL_F_SSL3_READ_BYTES, ERR_R_INTERNAL_ERROR); |
| 1381 | goto f_err; | 1290 | goto f_err; |
| 1382 | case SSL3_RT_APPLICATION_DATA: | 1291 | case SSL3_RT_APPLICATION_DATA: |
| 1383 | /* At this point, we were expecting handshake data, | 1292 | /* At this point, we were expecting handshake data, |
| @@ -1388,123 +1297,116 @@ start: | |||
| 1388 | * we will indulge it. | 1297 | * we will indulge it. |
| 1389 | */ | 1298 | */ |
| 1390 | if (s->s3->in_read_app_data && | 1299 | if (s->s3->in_read_app_data && |
| 1391 | (s->s3->total_renegotiations != 0) && | 1300 | (s->s3->total_renegotiations != 0) && |
| 1392 | (( | 1301 | (( |
| 1393 | (s->state & SSL_ST_CONNECT) && | 1302 | (s->state & SSL_ST_CONNECT) && |
| 1394 | (s->state >= SSL3_ST_CW_CLNT_HELLO_A) && | 1303 | (s->state >= SSL3_ST_CW_CLNT_HELLO_A) && |
| 1395 | (s->state <= SSL3_ST_CR_SRVR_HELLO_A) | 1304 | (s->state <= SSL3_ST_CR_SRVR_HELLO_A) |
| 1396 | ) || ( | 1305 | ) || ( |
| 1397 | (s->state & SSL_ST_ACCEPT) && | 1306 | (s->state & SSL_ST_ACCEPT) && |
| 1398 | (s->state <= SSL3_ST_SW_HELLO_REQ_A) && | 1307 | (s->state <= SSL3_ST_SW_HELLO_REQ_A) && |
| 1399 | (s->state >= SSL3_ST_SR_CLNT_HELLO_A) | 1308 | (s->state >= SSL3_ST_SR_CLNT_HELLO_A) |
| 1400 | ) | 1309 | ) |
| 1401 | )) | 1310 | )) { |
| 1402 | { | 1311 | s->s3->in_read_app_data = 2; |
| 1403 | s->s3->in_read_app_data=2; | 1312 | return (-1); |
| 1404 | return(-1); | 1313 | } else { |
| 1405 | } | 1314 | al = SSL_AD_UNEXPECTED_MESSAGE; |
| 1406 | else | 1315 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_UNEXPECTED_RECORD); |
| 1407 | { | ||
| 1408 | al=SSL_AD_UNEXPECTED_MESSAGE; | ||
| 1409 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNEXPECTED_RECORD); | ||
| 1410 | goto f_err; | 1316 | goto f_err; |
| 1411 | } | ||
| 1412 | } | 1317 | } |
| 1318 | } | ||
| 1413 | /* not reached */ | 1319 | /* not reached */ |
| 1414 | 1320 | ||
| 1415 | f_err: | 1321 | f_err: |
| 1416 | ssl3_send_alert(s,SSL3_AL_FATAL,al); | 1322 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
| 1417 | err: | 1323 | err: |
| 1418 | return(-1); | 1324 | return (-1); |
| 1419 | } | 1325 | } |
| 1420 | 1326 | ||
| 1421 | int ssl3_do_change_cipher_spec(SSL *s) | 1327 | int |
| 1422 | { | 1328 | ssl3_do_change_cipher_spec(SSL *s) |
| 1329 | { | ||
| 1423 | int i; | 1330 | int i; |
| 1424 | const char *sender; | 1331 | const char *sender; |
| 1425 | int slen; | 1332 | int slen; |
| 1426 | 1333 | ||
| 1427 | if (s->state & SSL_ST_ACCEPT) | 1334 | if (s->state & SSL_ST_ACCEPT) |
| 1428 | i=SSL3_CHANGE_CIPHER_SERVER_READ; | 1335 | i = SSL3_CHANGE_CIPHER_SERVER_READ; |
| 1429 | else | 1336 | else |
| 1430 | i=SSL3_CHANGE_CIPHER_CLIENT_READ; | 1337 | i = SSL3_CHANGE_CIPHER_CLIENT_READ; |
| 1431 | 1338 | ||
| 1432 | if (s->s3->tmp.key_block == NULL) | 1339 | if (s->s3->tmp.key_block == NULL) { |
| 1433 | { | 1340 | if (s->session == NULL) { |
| 1434 | if (s->session == NULL) | ||
| 1435 | { | ||
| 1436 | /* might happen if dtls1_read_bytes() calls this */ | 1341 | /* might happen if dtls1_read_bytes() calls this */ |
| 1437 | SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC,SSL_R_CCS_RECEIVED_EARLY); | 1342 | SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC, SSL_R_CCS_RECEIVED_EARLY); |
| 1438 | return (0); | 1343 | return (0); |
| 1439 | } | ||
| 1440 | |||
| 1441 | s->session->cipher=s->s3->tmp.new_cipher; | ||
| 1442 | if (!s->method->ssl3_enc->setup_key_block(s)) return(0); | ||
| 1443 | } | 1344 | } |
| 1444 | 1345 | ||
| 1445 | if (!s->method->ssl3_enc->change_cipher_state(s,i)) | 1346 | s->session->cipher = s->s3->tmp.new_cipher; |
| 1446 | return(0); | 1347 | if (!s->method->ssl3_enc->setup_key_block(s)) |
| 1348 | return (0); | ||
| 1349 | } | ||
| 1350 | |||
| 1351 | if (!s->method->ssl3_enc->change_cipher_state(s, i)) | ||
| 1352 | return (0); | ||
| 1447 | 1353 | ||
| 1448 | /* we have to record the message digest at | 1354 | /* we have to record the message digest at |
| 1449 | * this point so we can get it before we read | 1355 | * this point so we can get it before we read |
| 1450 | * the finished message */ | 1356 | * the finished message */ |
| 1451 | if (s->state & SSL_ST_CONNECT) | 1357 | if (s->state & SSL_ST_CONNECT) { |
| 1452 | { | 1358 | sender = s->method->ssl3_enc->server_finished_label; |
| 1453 | sender=s->method->ssl3_enc->server_finished_label; | 1359 | slen = s->method->ssl3_enc->server_finished_label_len; |
| 1454 | slen=s->method->ssl3_enc->server_finished_label_len; | 1360 | } else { |
| 1455 | } | 1361 | sender = s->method->ssl3_enc->client_finished_label; |
| 1456 | else | 1362 | slen = s->method->ssl3_enc->client_finished_label_len; |
| 1457 | { | 1363 | } |
| 1458 | sender=s->method->ssl3_enc->client_finished_label; | ||
| 1459 | slen=s->method->ssl3_enc->client_finished_label_len; | ||
| 1460 | } | ||
| 1461 | 1364 | ||
| 1462 | i = s->method->ssl3_enc->final_finish_mac(s, | 1365 | i = s->method->ssl3_enc->final_finish_mac(s, |
| 1463 | sender,slen,s->s3->tmp.peer_finish_md); | 1366 | sender, slen, s->s3->tmp.peer_finish_md); |
| 1464 | if (i == 0) | 1367 | if (i == 0) { |
| 1465 | { | ||
| 1466 | SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC, ERR_R_INTERNAL_ERROR); | 1368 | SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC, ERR_R_INTERNAL_ERROR); |
| 1467 | return 0; | 1369 | return 0; |
| 1468 | } | 1370 | } |
| 1469 | s->s3->tmp.peer_finish_md_len = i; | 1371 | s->s3->tmp.peer_finish_md_len = i; |
| 1470 | 1372 | ||
| 1471 | return(1); | 1373 | return (1); |
| 1472 | } | 1374 | } |
| 1473 | 1375 | ||
| 1474 | int ssl3_send_alert(SSL *s, int level, int desc) | 1376 | int |
| 1475 | { | 1377 | ssl3_send_alert(SSL *s, int level, int desc) |
| 1378 | { | ||
| 1476 | /* Map tls/ssl alert value to correct one */ | 1379 | /* Map tls/ssl alert value to correct one */ |
| 1477 | desc=s->method->ssl3_enc->alert_value(desc); | 1380 | desc = s->method->ssl3_enc->alert_value(desc); |
| 1478 | if (s->version == SSL3_VERSION && desc == SSL_AD_PROTOCOL_VERSION) | 1381 | if (s->version == SSL3_VERSION && desc == SSL_AD_PROTOCOL_VERSION) |
| 1479 | desc = SSL_AD_HANDSHAKE_FAILURE; /* SSL 3.0 does not have protocol_version alerts */ | 1382 | desc = SSL_AD_HANDSHAKE_FAILURE; /* SSL 3.0 does not have protocol_version alerts */ |
| 1480 | if (desc < 0) return -1; | 1383 | if (desc < 0) |
| 1384 | return -1; | ||
| 1481 | /* If a fatal one, remove from cache */ | 1385 | /* If a fatal one, remove from cache */ |
| 1482 | if ((level == 2) && (s->session != NULL)) | 1386 | if ((level == 2) && (s->session != NULL)) |
| 1483 | SSL_CTX_remove_session(s->ctx,s->session); | 1387 | SSL_CTX_remove_session(s->ctx, s->session); |
| 1484 | 1388 | ||
| 1485 | s->s3->alert_dispatch=1; | 1389 | s->s3->alert_dispatch = 1; |
| 1486 | s->s3->send_alert[0]=level; | 1390 | s->s3->send_alert[0] = level; |
| 1487 | s->s3->send_alert[1]=desc; | 1391 | s->s3->send_alert[1] = desc; |
| 1488 | if (s->s3->wbuf.left == 0) /* data still being written out? */ | 1392 | if (s->s3->wbuf.left == 0) /* data still being written out? */ |
| 1489 | return s->method->ssl_dispatch_alert(s); | 1393 | return s->method->ssl_dispatch_alert(s); |
| 1490 | /* else data is still being written out, we will get written | 1394 | /* else data is still being written out, we will get written |
| 1491 | * some time in the future */ | 1395 | * some time in the future */ |
| 1492 | return -1; | 1396 | return -1; |
| 1493 | } | 1397 | } |
| 1494 | 1398 | ||
| 1495 | int ssl3_dispatch_alert(SSL *s) | 1399 | int |
| 1496 | { | 1400 | ssl3_dispatch_alert(SSL *s) |
| 1497 | int i,j; | 1401 | { |
| 1498 | void (*cb)(const SSL *ssl,int type,int val)=NULL; | 1402 | int i, j; |
| 1403 | void (*cb)(const SSL *ssl, int type, int val) = NULL; | ||
| 1499 | 1404 | ||
| 1500 | s->s3->alert_dispatch=0; | 1405 | s->s3->alert_dispatch = 0; |
| 1501 | i = do_ssl3_write(s, SSL3_RT_ALERT, &s->s3->send_alert[0], 2, 0); | 1406 | i = do_ssl3_write(s, SSL3_RT_ALERT, &s->s3->send_alert[0], 2, 0); |
| 1502 | if (i <= 0) | 1407 | if (i <= 0) { |
| 1503 | { | 1408 | s->s3->alert_dispatch = 1; |
| 1504 | s->s3->alert_dispatch=1; | 1409 | } else { |
| 1505 | } | ||
| 1506 | else | ||
| 1507 | { | ||
| 1508 | /* Alert sent to BIO. If it is important, flush it now. | 1410 | /* Alert sent to BIO. If it is important, flush it now. |
| 1509 | * If the message does not get sent due to non-blocking IO, | 1411 | * If the message does not get sent due to non-blocking IO, |
| 1510 | * we will not worry too much. */ | 1412 | * we will not worry too much. */ |
| @@ -1515,15 +1417,14 @@ int ssl3_dispatch_alert(SSL *s) | |||
| 1515 | s->msg_callback(1, s->version, SSL3_RT_ALERT, s->s3->send_alert, 2, s, s->msg_callback_arg); | 1417 | s->msg_callback(1, s->version, SSL3_RT_ALERT, s->s3->send_alert, 2, s, s->msg_callback_arg); |
| 1516 | 1418 | ||
| 1517 | if (s->info_callback != NULL) | 1419 | if (s->info_callback != NULL) |
| 1518 | cb=s->info_callback; | 1420 | cb = s->info_callback; |
| 1519 | else if (s->ctx->info_callback != NULL) | 1421 | else if (s->ctx->info_callback != NULL) |
| 1520 | cb=s->ctx->info_callback; | 1422 | cb = s->ctx->info_callback; |
| 1521 | 1423 | ||
| 1522 | if (cb != NULL) | 1424 | if (cb != NULL) { |
| 1523 | { | 1425 | j = (s->s3->send_alert[0]<<8)|s->s3->send_alert[1]; |
| 1524 | j=(s->s3->send_alert[0]<<8)|s->s3->send_alert[1]; | 1426 | cb(s, SSL_CB_WRITE_ALERT, j); |
| 1525 | cb(s,SSL_CB_WRITE_ALERT,j); | ||
| 1526 | } | ||
| 1527 | } | 1427 | } |
| 1528 | return(i); | ||
| 1529 | } | 1428 | } |
| 1429 | return (i); | ||
| 1430 | } | ||
