mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-06-20 03:44:15 +08:00
Update tlcp.c
This commit is contained in:
266
src/tlcp.c
266
src/tlcp.c
@@ -96,7 +96,6 @@ int tlcp_record_set_handshake_server_key_exchange_pke(uint8_t *record, size_t *r
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int tlcp_record_get_handshake_server_key_exchange_pke(const uint8_t *record,
|
int tlcp_record_get_handshake_server_key_exchange_pke(const uint8_t *record,
|
||||||
const uint8_t **sig, size_t *siglen)
|
const uint8_t **sig, size_t *siglen)
|
||||||
{
|
{
|
||||||
@@ -150,27 +149,6 @@ int tlcp_server_key_exchange_pke_print(FILE *fp, const uint8_t *data, size_t dat
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Client Server
|
|
||||||
|
|
||||||
ClientHello -------->
|
|
||||||
ServerHello
|
|
||||||
Certificate
|
|
||||||
ServerKeyExchange
|
|
||||||
CertificateRequest*
|
|
||||||
<-------- ServerHelloDone
|
|
||||||
Certificate*
|
|
||||||
ClientKeyExchange
|
|
||||||
CertificateVerify*
|
|
||||||
[ChangeCipherSpec]
|
|
||||||
Finished -------->
|
|
||||||
[ChangeCipherSpec]
|
|
||||||
<-------- Finished
|
|
||||||
Application Data <-------> Application Data
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
int tlcp_send_client_hello(TLS_CONNECT *conn)
|
int tlcp_send_client_hello(TLS_CONNECT *conn)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@@ -191,7 +169,6 @@ int tlcp_send_client_hello(TLS_CONNECT *conn)
|
|||||||
error_print();
|
error_print();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
// offset = 0, recordlen > 0
|
|
||||||
|
|
||||||
tls_trace("send ClientHello\n");
|
tls_trace("send ClientHello\n");
|
||||||
tlcp_record_print(stderr, 0, 0, conn->record, conn->recordlen);
|
tlcp_record_print(stderr, 0, 0, conn->record, conn->recordlen);
|
||||||
@@ -213,8 +190,6 @@ int tlcp_send_client_hello(TLS_CONNECT *conn)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int tlcp_recv_client_hello(TLS_CONNECT *conn)
|
int tlcp_recv_client_hello(TLS_CONNECT *conn)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@@ -569,6 +544,207 @@ int tlcp_recv_client_key_exchange(TLS_CONNECT *conn)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int tlcp_recv_server_hello(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_recv_server_hello(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_recv_server_certificate(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_recv_server_certificate(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_recv_certificate_request(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_recv_certificate_request(conn)) != 1) {
|
||||||
|
if (ret == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_recv_server_hello_done(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_recv_server_hello_done(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_send_client_certificate(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_send_client_certificate(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_send_certificate_verify(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_send_certificate_verify(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_send_change_cipher_spec(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_send_change_cipher_spec(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_send_client_finished(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_send_client_finished(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_recv_change_cipher_spec(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_recv_change_cipher_spec(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_recv_server_finished(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_recv_server_finished(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_send_server_hello(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_send_server_hello(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_send_server_certificate(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_send_server_certificate(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_send_certificate_request(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_send_certificate_request(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_send_server_hello_done(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_send_server_hello_done(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_recv_client_certificate(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_recv_client_certificate(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_recv_certificate_verify(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_recv_certificate_verify(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_recv_client_finished(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_recv_client_finished(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tlcp_send_server_finished(TLS_CONNECT *conn)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = tls_send_server_finished(conn)) != 1) {
|
||||||
|
error_print();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Client Server
|
Client Server
|
||||||
|
|
||||||
@@ -602,12 +778,12 @@ int tlcp_do_client_handshake(TLS_CONNECT *conn)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_server_hello:
|
case TLS_state_server_hello:
|
||||||
ret = tls_recv_server_hello(conn);
|
ret = tlcp_recv_server_hello(conn);
|
||||||
next_state = TLS_state_server_certificate;
|
next_state = TLS_state_server_certificate;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_server_certificate:
|
case TLS_state_server_certificate:
|
||||||
ret = tls_recv_server_certificate(conn);
|
ret = tlcp_recv_server_certificate(conn);
|
||||||
next_state = TLS_state_server_key_exchange;
|
next_state = TLS_state_server_key_exchange;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -617,20 +793,20 @@ int tlcp_do_client_handshake(TLS_CONNECT *conn)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_certificate_request:
|
case TLS_state_certificate_request:
|
||||||
ret = tls_recv_certificate_request(conn);
|
ret = tlcp_recv_certificate_request(conn);
|
||||||
if (ret == 1) conn->client_certificate_verify = 1;
|
if (ret == 1) conn->client_certificate_verify = 1;
|
||||||
next_state = TLS_state_server_hello_done;
|
next_state = TLS_state_server_hello_done;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_server_hello_done:
|
case TLS_state_server_hello_done:
|
||||||
ret = tls_recv_server_hello_done(conn);
|
ret = tlcp_recv_server_hello_done(conn);
|
||||||
if (conn->client_certificate_verify)
|
if (conn->client_certificate_verify)
|
||||||
next_state = TLS_state_client_certificate;
|
next_state = TLS_state_client_certificate;
|
||||||
else next_state = TLS_state_client_key_exchange;
|
else next_state = TLS_state_client_key_exchange;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_client_certificate:
|
case TLS_state_client_certificate:
|
||||||
ret = tls_send_client_certificate(conn);
|
ret = tlcp_send_client_certificate(conn);
|
||||||
next_state = TLS_state_client_key_exchange;
|
next_state = TLS_state_client_key_exchange;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -647,26 +823,26 @@ int tlcp_do_client_handshake(TLS_CONNECT *conn)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_certificate_verify:
|
case TLS_state_certificate_verify:
|
||||||
ret = tls_send_certificate_verify(conn);
|
ret = tlcp_send_certificate_verify(conn);
|
||||||
next_state = TLS_state_client_change_cipher_spec;
|
next_state = TLS_state_client_change_cipher_spec;
|
||||||
|
|
||||||
case TLS_state_client_change_cipher_spec:
|
case TLS_state_client_change_cipher_spec:
|
||||||
ret = tls_send_change_cipher_spec(conn);
|
ret = tlcp_send_change_cipher_spec(conn);
|
||||||
next_state = TLS_state_client_finished;
|
next_state = TLS_state_client_finished;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_client_finished:
|
case TLS_state_client_finished:
|
||||||
ret = tls_send_client_finished(conn);
|
ret = tlcp_send_client_finished(conn);
|
||||||
next_state = TLS_state_server_change_cipher_spec;
|
next_state = TLS_state_server_change_cipher_spec;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_server_change_cipher_spec:
|
case TLS_state_server_change_cipher_spec:
|
||||||
ret = tls_recv_change_cipher_spec(conn);
|
ret = tlcp_recv_change_cipher_spec(conn);
|
||||||
next_state = TLS_state_server_finished;
|
next_state = TLS_state_server_finished;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_server_finished:
|
case TLS_state_server_finished:
|
||||||
ret = tls_recv_server_finished(conn);
|
ret = tlcp_recv_server_finished(conn);
|
||||||
next_state = TLS_state_handshake_over;
|
next_state = TLS_state_handshake_over;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -706,12 +882,12 @@ int tlcp_do_server_handshake(TLS_CONNECT *conn)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_server_hello:
|
case TLS_state_server_hello:
|
||||||
ret = tls_send_server_hello(conn);
|
ret = tlcp_send_server_hello(conn);
|
||||||
next_state = TLS_state_server_certificate;
|
next_state = TLS_state_server_certificate;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_server_certificate:
|
case TLS_state_server_certificate:
|
||||||
ret = tls_send_server_certificate(conn);
|
ret = tlcp_send_server_certificate(conn);
|
||||||
next_state = TLS_state_server_key_exchange;
|
next_state = TLS_state_server_key_exchange;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -723,19 +899,19 @@ int tlcp_do_server_handshake(TLS_CONNECT *conn)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_certificate_request:
|
case TLS_state_certificate_request:
|
||||||
ret = tls_send_certificate_request(conn);
|
ret = tlcp_send_certificate_request(conn);
|
||||||
next_state = TLS_state_server_hello_done;
|
next_state = TLS_state_server_hello_done;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_server_hello_done:
|
case TLS_state_server_hello_done:
|
||||||
ret = tls_send_server_hello_done(conn);
|
ret = tlcp_send_server_hello_done(conn);
|
||||||
if (conn->client_certificate_verify)
|
if (conn->client_certificate_verify)
|
||||||
next_state = TLS_state_client_certificate;
|
next_state = TLS_state_client_certificate;
|
||||||
else next_state = TLS_state_client_key_exchange;
|
else next_state = TLS_state_client_key_exchange;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_client_certificate:
|
case TLS_state_client_certificate:
|
||||||
ret = tls_recv_client_certificate(conn);
|
ret = tlcp_recv_client_certificate(conn);
|
||||||
next_state = TLS_state_client_key_exchange;
|
next_state = TLS_state_client_key_exchange;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -747,7 +923,7 @@ int tlcp_do_server_handshake(TLS_CONNECT *conn)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_certificate_verify:
|
case TLS_state_certificate_verify:
|
||||||
ret = tls_recv_certificate_verify(conn);
|
ret = tlcp_recv_certificate_verify(conn);
|
||||||
next_state = TLS_state_generate_keys;
|
next_state = TLS_state_generate_keys;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -757,22 +933,22 @@ int tlcp_do_server_handshake(TLS_CONNECT *conn)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_client_change_cipher_spec:
|
case TLS_state_client_change_cipher_spec:
|
||||||
ret = tls_recv_change_cipher_spec(conn);
|
ret = tlcp_recv_change_cipher_spec(conn);
|
||||||
next_state = TLS_state_client_finished;
|
next_state = TLS_state_client_finished;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_client_finished:
|
case TLS_state_client_finished:
|
||||||
ret = tls_recv_client_finished(conn);
|
ret = tlcp_recv_client_finished(conn);
|
||||||
next_state = TLS_state_server_change_cipher_spec;
|
next_state = TLS_state_server_change_cipher_spec;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_server_change_cipher_spec:
|
case TLS_state_server_change_cipher_spec:
|
||||||
ret = tls_send_change_cipher_spec(conn);
|
ret = tlcp_send_change_cipher_spec(conn);
|
||||||
next_state = TLS_state_server_finished;
|
next_state = TLS_state_server_finished;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_state_server_finished:
|
case TLS_state_server_finished:
|
||||||
ret = tls_send_server_finished(conn);
|
ret = tlcp_send_server_finished(conn);
|
||||||
next_state = TLS_state_handshake_over;
|
next_state = TLS_state_handshake_over;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user