/* Pre-shared secret session resumption functions */
int SSL_set_session_secret_cb(SSL *s, tls_session_secret_cb_fn tls_session_secret_cb, void *arg);
-int SSL_tls1_key_exporter(SSL *s, unsigned char *label, int label_len,
- unsigned char *context, int context_len,
- unsigned char *out, int olen);
+int SSL_tls1_key_exporter(SSL *s,
+ const unsigned char *label, int label_len,
+ const unsigned char *context, int context_len,
+ unsigned char *out, int olen);
void SSL_set_debug(SSL *s, int debug);
int SSL_cache_hit(SSL *s);
}
}
-int SSL_tls1_key_exporter(SSL *s, unsigned char *label, int label_len,
- unsigned char *context, int context_len,
- unsigned char *out, int olen)
+int SSL_tls1_key_exporter(SSL *s,
+ const unsigned char *label, int label_len,
+ const unsigned char *context, int context_len,
+ unsigned char *out, int olen)
{
unsigned char *tmp;
int rv;
+ unsigned char context_len_16[2];
+
+ if (context_len > 0xffff)
+ return 0;
tmp = OPENSSL_malloc(olen);
if (!tmp)
return 0;
+
+ context_len_16[0] = context_len >> 8;
+ context_len_16[1] = context_len;
rv = tls1_PRF(ssl_get_algorithm2(s),
label, label_len,
s->s3->client_random,SSL3_RANDOM_SIZE,
s->s3->server_random,SSL3_RANDOM_SIZE,
- context, context_len, NULL, 0,
+ context_len_16, sizeof(context_len_16),
+ context, context_len,
s->session->master_key, s->session->master_key_length,
out, tmp, olen);