int ssl3_do_change_cipher_spec(SSL *s)
{
int i;
+ size_t finish_md_len;
const char *sender;
- int slen;
+ size_t slen;
if (s->server)
i = SSL3_CHANGE_CIPHER_SERVER_READ;
slen = s->method->ssl3_enc->client_finished_label_len;
}
- i = s->method->ssl3_enc->final_finish_mac(s,
- sender, slen,
- s->s3->tmp.peer_finish_md);
- if (i == 0) {
+ finish_md_len = s->method->ssl3_enc->final_finish_mac(s, sender, slen,
+ s->s3->tmp.peer_finish_md);
+ if (finish_md_len == 0) {
SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC, ERR_R_INTERNAL_ERROR);
return 0;
}
- s->s3->tmp.peer_finish_md_len = i;
+ s->s3->tmp.peer_finish_md_len = finish_md_len;
return (1);
}
int ssl3_send_alert(SSL *s, int level, int desc)
{
/* Map tls/ssl alert value to correct one */
- desc = s->method->ssl3_enc->alert_value(desc);
+ if (SSL_TREAT_AS_TLS13(s))
+ desc = tls13_alert_code(desc);
+ else
+ desc = s->method->ssl3_enc->alert_value(desc);
if (s->version == SSL3_VERSION && desc == SSL_AD_PROTOCOL_VERSION)
desc = SSL_AD_HANDSHAKE_FAILURE; /* SSL 3.0 does not have
* protocol_version alerts */
int ssl3_dispatch_alert(SSL *s)
{
int i, j;
- unsigned int alertlen;
+ size_t alertlen;
void (*cb) (const SSL *ssl, int type, int val) = NULL;
+ size_t written;
s->s3->alert_dispatch = 0;
alertlen = 2;
- i = do_ssl3_write(s, SSL3_RT_ALERT, &s->s3->send_alert[0], &alertlen, 1, 0);
+ i = do_ssl3_write(s, SSL3_RT_ALERT, &s->s3->send_alert[0], &alertlen, 1, 0,
+ &written);
if (i <= 0) {
s->s3->alert_dispatch = 1;
} else {
cb(s, SSL_CB_WRITE_ALERT, j);
}
}
- return (i);
+ return i;
}