X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcclient%2Fprotocol.c;h=4bf277c8a2e5759eb330a1b1e343fc487a097cf9;hb=a818c5b5411bbc4436d1c5f011236985c96bb787;hp=41daced5cab0a1e734df60b23af793ab2fad3e9c;hpb=6394d86063413bc1c473723f3ef971840195bcd3;p=silc.git diff --git a/lib/silcclient/protocol.c b/lib/silcclient/protocol.c index 41daced5..4bf277c8 100644 --- a/lib/silcclient/protocol.c +++ b/lib/silcclient/protocol.c @@ -22,7 +22,8 @@ */ /* $Id$ */ -#include "clientlibincludes.h" +#include "silcincludes.h" +#include "silcclient.h" #include "client_internal.h" SILC_TASK_CALLBACK(silc_client_protocol_connection_auth); @@ -77,7 +78,7 @@ static void silc_client_verify_key_cb(bool success, void *context) void silc_client_protocol_ke_verify_key(SilcSKE ske, unsigned char *pk_data, - uint32 pk_len, + SilcUInt32 pk_len, SilcSKEPKType pk_type, void *context, SilcSKEVerifyCbCompletion completion, @@ -151,11 +152,8 @@ void silc_client_protocol_ke_set_keys(SilcSKE ske, /* Rekey stuff */ conn->rekey = silc_calloc(1, sizeof(*conn->rekey)); - conn->rekey->send_enc_key = - silc_calloc(keymat->enc_key_len / 8, - sizeof(*conn->rekey->send_enc_key)); - memcpy(conn->rekey->send_enc_key, - keymat->send_enc_key, keymat->enc_key_len / 8); + conn->rekey->send_enc_key = silc_memdup(keymat->send_enc_key, + keymat->enc_key_len / 8); conn->rekey->enc_key_len = keymat->enc_key_len / 8; if (ske->start_payload->flags & SILC_SKE_SP_FLAG_PFS) @@ -169,7 +167,7 @@ void silc_client_protocol_ke_set_keys(SilcSKE ske, /* Checks the version string of the server. */ SilcSKEStatus silc_ske_check_version(SilcSKE ske, unsigned char *version, - uint32 len, void *context) + SilcUInt32 len, void *context) { SilcClientConnection conn = (SilcClientConnection)ske->sock->user_data; SilcClient client = (SilcClient)ske->user_data; @@ -299,10 +297,7 @@ SILC_TASK_CALLBACK(silc_client_protocol_key_exchange) SilcSKE ske; /* Allocate Key Exchange object */ - ske = silc_ske_alloc(); - ctx->ske = ske; - ske->rng = client->rng; - ske->user_data = (void *)client; + ctx->ske = ske = silc_ske_alloc(client->rng, client); silc_ske_set_callbacks(ske, ctx->send_packet, NULL, ctx->verify, @@ -360,9 +355,7 @@ SILC_TASK_CALLBACK(silc_client_protocol_key_exchange) */ if (ctx->responder == TRUE) { /* Sends the selected security properties to the initiator. */ - status = - silc_ske_responder_phase_1(ctx->ske, - ctx->ske->start_payload); + status = silc_ske_responder_phase_1(ctx->ske); } else { /* Call Phase-1 function. This processes the Key Exchange Start paylaod reply we just got from the responder. The callback @@ -405,7 +398,8 @@ SILC_TASK_CALLBACK(silc_client_protocol_key_exchange) Key Exhange 1 Payload to the responder. */ status = silc_ske_initiator_phase_2(ctx->ske, client->public_key, - client->private_key); + client->private_key, + SILC_SKE_PK_TYPE_SILC); protocol->state++; } @@ -555,7 +549,7 @@ static int silc_client_get_public_key_auth(SilcClient client, SilcClientConnection conn, unsigned char *auth_data, - uint32 *auth_data_len, + SilcUInt32 *auth_data_len, SilcSKE ske) { int len; @@ -591,7 +585,7 @@ silc_client_get_public_key_auth(SilcClient client, static void silc_client_conn_auth_continue(unsigned char *auth_data, - uint32 auth_data_len, void *context) + SilcUInt32 auth_data_len, void *context) { SilcProtocol protocol = (SilcProtocol)context; SilcClientConnAuthInternalContext *ctx = @@ -643,7 +637,7 @@ SILC_TASK_CALLBACK(silc_client_protocol_connection_auth) * to be authenticated. */ unsigned char *auth_data = NULL; - uint32 auth_data_len = 0; + SilcUInt32 auth_data_len = 0; unsigned char sign[1024]; switch(ctx->auth_meth) { @@ -789,11 +783,8 @@ silc_client_protocol_rekey_validate(SilcClient client, if (!send) { memset(conn->rekey->send_enc_key, 0, conn->rekey->enc_key_len); silc_free(conn->rekey->send_enc_key); - conn->rekey->send_enc_key = - silc_calloc(keymat->enc_key_len / 8, - sizeof(*conn->rekey->send_enc_key)); - memcpy(conn->rekey->send_enc_key, keymat->send_enc_key, - keymat->enc_key_len / 8); + conn->rekey->send_enc_key = silc_memdup(keymat->send_enc_key, + keymat->enc_key_len / 8); conn->rekey->enc_key_len = keymat->enc_key_len / 8; } } @@ -808,8 +799,8 @@ silc_client_protocol_rekey_generate(SilcClient client, { SilcClientConnection conn = (SilcClientConnection)ctx->sock->user_data; SilcSKEKeyMaterial *keymat; - uint32 key_len = silc_cipher_get_key_len(conn->send_key); - uint32 hash_len = conn->hash->hash->hash_len; + SilcUInt32 key_len = silc_cipher_get_key_len(conn->send_key); + SilcUInt32 hash_len = conn->hash->hash->hash_len; SILC_LOG_DEBUG(("Generating new %s session keys (no PFS)", send ? "sending" : "receiving")); @@ -837,10 +828,10 @@ silc_client_protocol_rekey_generate_pfs(SilcClient client, { SilcClientConnection conn = (SilcClientConnection)ctx->sock->user_data; SilcSKEKeyMaterial *keymat; - uint32 key_len = silc_cipher_get_key_len(conn->send_key); - uint32 hash_len = conn->hash->hash->hash_len; + SilcUInt32 key_len = silc_cipher_get_key_len(conn->send_key); + SilcUInt32 hash_len = conn->hash->hash->hash_len; unsigned char *tmpbuf; - uint32 klen; + SilcUInt32 klen; SILC_LOG_DEBUG(("Generating new %s session keys (with PFS)", send ? "sending" : "receiving")); @@ -922,8 +913,7 @@ SILC_TASK_CALLBACK(silc_client_protocol_rekey) silc_protocol_execute(protocol, client->schedule, 0, 300000); } - ctx->ske = silc_ske_alloc(); - ctx->ske->rng = client->rng; + ctx->ske = silc_ske_alloc(client->rng, client); ctx->ske->prop = silc_calloc(1, sizeof(*ctx->ske->prop)); silc_ske_group_get_by_number(conn->rekey->ske_group, &ctx->ske->prop->group); @@ -979,8 +969,7 @@ SILC_TASK_CALLBACK(silc_client_protocol_rekey) * Use Perfect Forward Secrecy, ie. negotiate the key material * using the SKE protocol. */ - ctx->ske = silc_ske_alloc(); - ctx->ske->rng = client->rng; + ctx->ske = silc_ske_alloc(client->rng, client); ctx->ske->prop = silc_calloc(1, sizeof(*ctx->ske->prop)); silc_ske_group_get_by_number(conn->rekey->ske_group, &ctx->ske->prop->group); @@ -990,7 +979,7 @@ SILC_TASK_CALLBACK(silc_client_protocol_rekey) NULL, NULL, NULL, silc_ske_check_version, context); - status = silc_ske_initiator_phase_2(ctx->ske, NULL, NULL); + status = silc_ske_initiator_phase_2(ctx->ske, NULL, NULL, 0); if (status != SILC_SKE_STATUS_OK) { SILC_LOG_WARNING(("Error (type %d) during Re-key (PFS)", status));