X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcclient%2Fclient_prvmsg.c;h=aff49a2362f63d4d0318b5f72026dd2917e46a58;hb=054c9b2c9b21c3cbe87e53c0e0bacb2bff918e68;hp=d447e0af24f2abd8c51888a549fd721b884c27df;hpb=61af85976e943396cf2cbe9bdaee3e4119c74aec;p=crypto.git diff --git a/lib/silcclient/client_prvmsg.c b/lib/silcclient/client_prvmsg.c index d447e0af..aff49a23 100644 --- a/lib/silcclient/client_prvmsg.c +++ b/lib/silcclient/client_prvmsg.c @@ -53,11 +53,12 @@ void silc_client_send_private_message(SilcClient client, SILC_LOG_DEBUG(("Sending private message")); /* Encode private message payload */ - buffer = silc_private_message_payload_encode(flags, - data_len, data, - client_entry->send_key, - client_entry->hmac_send, - client->rng); + buffer = silc_message_payload_encode(flags, data, data_len, + !client_entry->send_key ? FALSE : + !client_entry->generated, + TRUE, client_entry->send_key, + client_entry->hmac_send, + client->rng); /* If we don't have private message specific key then private messages are just as any normal packet thus call normal packet sending. If @@ -153,7 +154,7 @@ void silc_client_private_message(SilcClient client, SilcPacketContext *packet) { SilcClientConnection conn = (SilcClientConnection)sock->user_data; - SilcPrivateMessagePayload payload = NULL; + SilcMessagePayload payload = NULL; SilcClientID *remote_id = NULL; SilcClientEntry remote_client; SilcMessageFlags flags; @@ -197,18 +198,19 @@ void silc_client_private_message(SilcClient client, } /* Parse the payload and decrypt it also if private message key is set */ - payload = silc_private_message_payload_parse(packet->buffer->data, - packet->buffer->len, - cipher, hmac); + payload = silc_message_payload_parse(packet->buffer->data, + packet->buffer->len, TRUE, + !remote_client->generated, + cipher, hmac); if (!payload) { silc_free(remote_id); return; } - flags = silc_private_message_get_flags(payload); + flags = silc_message_get_flags(payload); /* Pass the private message to application */ - message = silc_private_message_get_message(payload, &message_len); + message = silc_message_get_data(payload, &message_len); client->internal->ops->private_message(client, conn, remote_client, flags, message, message_len); @@ -230,7 +232,7 @@ void silc_client_private_message(SilcClient client, out: if (payload) - silc_private_message_payload_free(payload); + silc_message_payload_free(payload); silc_free(remote_id); } @@ -452,6 +454,8 @@ bool silc_client_add_private_message_key_ske(SilcClient client, if (!silc_hmac_is_supported(hmac)) return FALSE; + client_entry->generated = TRUE; + /* Allocate the cipher and HMAC */ silc_cipher_alloc(cipher, &client_entry->send_key); silc_cipher_alloc(cipher, &client_entry->receive_key);