Fix return value and secret clean bug

This commit is contained in:
Zhi Guan
2022-12-28 16:46:55 +08:00
parent 6ef810f51f
commit 49962a267f
3 changed files with 32 additions and 5 deletions

View File

@@ -567,7 +567,7 @@ int tlcp_do_connect(TLS_CONNECT *conn)
end: end:
gmssl_secure_clear(&sign_ctx, sizeof(sign_ctx)); gmssl_secure_clear(&sign_ctx, sizeof(sign_ctx));
gmssl_secure_clear(pre_master_secret, sizeof(pre_master_secret)); gmssl_secure_clear(pre_master_secret, sizeof(pre_master_secret));
return 1; return ret;
} }
int tlcp_do_accept(TLS_CONNECT *conn) int tlcp_do_accept(TLS_CONNECT *conn)

View File

@@ -647,7 +647,7 @@ int tls12_do_connect(TLS_CONNECT *conn)
end: end:
gmssl_secure_clear(&sign_ctx, sizeof(sign_ctx)); gmssl_secure_clear(&sign_ctx, sizeof(sign_ctx));
gmssl_secure_clear(pre_master_secret, sizeof(pre_master_secret)); gmssl_secure_clear(pre_master_secret, sizeof(pre_master_secret));
return 1; return ret;
} }
int tls12_do_accept(TLS_CONNECT *conn) int tls12_do_accept(TLS_CONNECT *conn)

View File

@@ -1415,6 +1415,7 @@ TLS 1.3的区别:
int tls13_do_connect(TLS_CONNECT *conn) int tls13_do_connect(TLS_CONNECT *conn)
{ {
int ret = -1;
uint8_t *record = conn->record; uint8_t *record = conn->record;
uint8_t *enced_record = conn->enced_record; uint8_t *enced_record = conn->enced_record;
size_t recordlen; size_t recordlen;
@@ -1876,13 +1877,27 @@ int tls13_do_connect(TLS_CONNECT *conn)
format_print(stderr, 0, 0, "\n"); format_print(stderr, 0, 0, "\n");
*/ */
fprintf(stderr, "Connection established\n"); fprintf(stderr, "Connection established\n");
ret = 1;
end: end:
return 1; gmssl_secure_clear(&client_ecdhe, sizeof(client_ecdhe));
gmssl_secure_clear(&server_sign_key, sizeof(server_sign_key));
gmssl_secure_clear(psk, sizeof(psk));
gmssl_secure_clear(early_secret, sizeof(early_secret));
gmssl_secure_clear(handshake_secret, sizeof(handshake_secret));
gmssl_secure_clear(master_secret, sizeof(master_secret));
gmssl_secure_clear(client_handshake_traffic_secret, sizeof(client_handshake_traffic_secret));
gmssl_secure_clear(server_handshake_traffic_secret, sizeof(server_handshake_traffic_secret));
gmssl_secure_clear(client_application_traffic_secret, sizeof(client_application_traffic_secret));
gmssl_secure_clear(server_application_traffic_secret, sizeof(server_application_traffic_secret));
gmssl_secure_clear(client_write_key, sizeof(client_write_key));
gmssl_secure_clear(server_write_key, sizeof(server_write_key));
return ret;
} }
int tls13_do_accept(TLS_CONNECT *conn) int tls13_do_accept(TLS_CONNECT *conn)
{ {
int ret = -1;
uint8_t *record = conn->record; uint8_t *record = conn->record;
size_t recordlen; size_t recordlen;
uint8_t enced_record[25600]; uint8_t enced_record[25600];
@@ -2320,7 +2335,19 @@ int tls13_do_accept(TLS_CONNECT *conn)
*/ */
fprintf(stderr, "Connection Established!\n\n"); fprintf(stderr, "Connection Established!\n\n");
ret = 1;
end: end:
return 1; gmssl_secure_clear(&server_ecdhe, sizeof(server_ecdhe));
gmssl_secure_clear(&client_sign_key, sizeof(client_sign_key));
gmssl_secure_clear(psk, sizeof(psk));
gmssl_secure_clear(early_secret, sizeof(early_secret));
gmssl_secure_clear(handshake_secret, sizeof(handshake_secret));
gmssl_secure_clear(master_secret, sizeof(master_secret));
gmssl_secure_clear(client_handshake_traffic_secret, sizeof(client_handshake_traffic_secret));
gmssl_secure_clear(server_handshake_traffic_secret, sizeof(server_handshake_traffic_secret));
gmssl_secure_clear(client_application_traffic_secret, sizeof(client_application_traffic_secret));
gmssl_secure_clear(server_application_traffic_secret, sizeof(server_application_traffic_secret));
gmssl_secure_clear(client_write_key, sizeof(client_write_key));
gmssl_secure_clear(server_write_key, sizeof(server_write_key));
return ret;
} }