mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-05-29 19:56:16 +08:00
Fix KeyUpdate bug
This commit is contained in:
@@ -803,6 +803,7 @@ typedef struct {
|
||||
|
||||
|
||||
// KeyUpdate
|
||||
int key_update;
|
||||
size_t key_update_seq_num_limit;
|
||||
size_t key_update_data_size_limit;
|
||||
|
||||
@@ -896,7 +897,11 @@ int tls_ctx_add_certificate_list_and_key(TLS_CTX *ctx, const char *chainfile,
|
||||
const uint8_t *entity_signed_certificate_timestamp_list, size_t entity_signed_certificate_timestamp_list_len, // optional
|
||||
const char *keyfile, const char *keypass);
|
||||
|
||||
int tls_ctx_set_key_update_seq_num_limit(TLS_CTX *ctx, size_t max_seq_num);
|
||||
|
||||
// KeyUpdate
|
||||
#define TLS13_DEFAULT_KEY_UPDATE_SEQ_NUM_LIMIT (1 << 20)
|
||||
int tls13_ctx_enable_key_update(TLS_CTX *ctx, int enable);
|
||||
int tls13_ctx_set_key_update_seq_num_limit(TLS_CTX *ctx, size_t max_seq_num);
|
||||
|
||||
|
||||
|
||||
|
||||
32
src/tls13.c
32
src/tls13.c
@@ -1058,7 +1058,8 @@ int tls13_send(TLS_CONNECT *conn, const uint8_t *data, size_t datalen, size_t *s
|
||||
}
|
||||
|
||||
// check if KeyUpdate
|
||||
if (GETU64(seq_num) >= conn->ctx->key_update_seq_num_limit) {
|
||||
if (conn->ctx->key_update
|
||||
&& GETU64(seq_num) >= conn->ctx->key_update_seq_num_limit) {
|
||||
if (!conn->key_update) {
|
||||
conn->key_update = 1;
|
||||
request_update = 1;
|
||||
@@ -1289,7 +1290,7 @@ int tls13_do_recv(TLS_CONNECT *conn)
|
||||
|
||||
seq_num = GETU64(conn->client_seq_num);
|
||||
|
||||
if (seq_num > 2 && update_requested) {
|
||||
if (seq_num > 2 && update_requested && conn->ctx->key_update) {
|
||||
conn->key_update = 1;
|
||||
}
|
||||
|
||||
@@ -1303,7 +1304,7 @@ int tls13_do_recv(TLS_CONNECT *conn)
|
||||
|
||||
seq_num = GETU64(conn->server_seq_num);
|
||||
|
||||
if (seq_num > 2 && update_requested) {
|
||||
if (seq_num > 2 && update_requested && conn->ctx->key_update) {
|
||||
fprintf(stderr, "server prepare key_update\n");
|
||||
conn->key_update = 1;
|
||||
}
|
||||
@@ -3465,6 +3466,31 @@ int tls13_key_update_print(FILE *fp, int fmt, int ind, const uint8_t *d, size_t
|
||||
return 1;
|
||||
}
|
||||
|
||||
int tls13_ctx_enable_key_update(TLS_CTX *ctx, int enable)
|
||||
{
|
||||
if (!ctx) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
ctx->key_update = enable ? 1 : 0;
|
||||
ctx->key_update_seq_num_limit = TLS13_DEFAULT_KEY_UPDATE_SEQ_NUM_LIMIT;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int tls13_ctx_set_key_update_seq_num_limit(TLS_CTX *ctx, size_t max_seq_num)
|
||||
{
|
||||
if (!ctx || !max_seq_num) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (!ctx->key_update) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
ctx->key_update_seq_num_limit = max_seq_num;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// ChangeCipherSpec
|
||||
|
||||
int tls13_ctx_enable_change_cipher_spec(TLS_CTX *ctx, int enable)
|
||||
|
||||
@@ -408,7 +408,11 @@ bad:
|
||||
|
||||
// KeyUpdate
|
||||
if (key_update_seq_num > 0) {
|
||||
if (tls_ctx_set_key_update_seq_num_limit(&ctx, key_update_seq_num) != 1) {
|
||||
if (tls13_ctx_enable_key_update(&ctx, 1) != 1) {
|
||||
error_print();
|
||||
goto end;
|
||||
}
|
||||
if (tls13_ctx_set_key_update_seq_num_limit(&ctx, key_update_seq_num) != 1) {
|
||||
error_print();
|
||||
goto end;
|
||||
}
|
||||
|
||||
@@ -418,7 +418,11 @@ bad:
|
||||
|
||||
// KeyUpdate
|
||||
if (key_update_seq_num > 0) {
|
||||
if (tls_ctx_set_key_update_seq_num_limit(&ctx, key_update_seq_num) != 1) {
|
||||
if (tls13_ctx_enable_key_update(&ctx, 1) != 1) {
|
||||
error_print();
|
||||
goto end;
|
||||
}
|
||||
if (tls13_ctx_set_key_update_seq_num_limit(&ctx, key_update_seq_num) != 1) {
|
||||
error_print();
|
||||
goto end;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user