5 Author: Pekka Riikonen <priikone@silcnet.org>
7 Copyright (C) 1997 - 2001 Pekka Riikonen
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
21 /****h* silccore/SILC Private Message Interface
25 * Implementation of the SILC Private Message Payload that is used to
26 * deliver private messages.
33 /****s* silccore/SilcPrivateAPI/SilcPrivateMessagePayload
37 * typedef struct SilcPrivateMessagePayloadStruct
38 * *SilcPrivateMessagePayload;
43 * This context is the actual Private Message Payload and is allocated
44 * by silc_private_message_payload_parse and given as argument usually
45 * to all silc_private_message_* functions. It is freed by the
46 * silc_private_message_payload_free function.
49 typedef struct SilcPrivateMessagePayloadStruct *SilcPrivateMessagePayload;
53 /****f* silccore/SilcPrivateAPI/silc_private_message_payload_parse
57 * SilcPrivateMessagePayload
58 * silc_private_message_payload_parse(unsigned char *payload,
59 * SilcUInt32 payload_len,
65 * Parses private message payload returning new private mesage payload
66 * structure. This also decrypts the message if the `cipher' is provided.
67 * The data integrity is checked with `hmac'.
70 SilcPrivateMessagePayload
71 silc_private_message_payload_parse(unsigned char *payload,
72 SilcUInt32 payload_len,
76 /****f* silccore/SilcPrivateAPI/silc_private_message_payload_encode
80 * SilcBuffer silc_private_message_payload_encode(SilcUInt16 flags,
81 * SilcUInt16 data_len,
82 * const unsigned char *data,
89 * Encodes private message payload into a buffer and returns it. If
90 * the `cipher' is provided the packet is also encrypted here. It is
91 * provided if the private message private keys are used. If the `rng'
92 * is NULL then global RNG is used, if non-NULL then `rng' is used.
93 * The MAC for the message is computed with `hmac'.
96 SilcBuffer silc_private_message_payload_encode(SilcUInt16 flags,
98 const unsigned char *data,
103 /****f* silccore/SilcPrivateAPI/silc_private_message_payload_free
108 * silc_private_message_payload_free(SilcPrivateMessagePayload payload);
112 * Frees Private Message Payload
115 void silc_private_message_payload_free(SilcPrivateMessagePayload payload);
117 /****f* silccore/SilcPrivateAPI/silc_private_message_get_flags
122 * silc_private_message_get_flags(SilcPrivateMessagePayload payload);
126 * Returns flags from the payload. Message flags may indicate some
127 * status of the message. Private message flags are equivalent to the
128 * channel message flags.
132 silc_private_message_get_flags(SilcPrivateMessagePayload payload);
134 /****f* silccore/SilcPrivateAPI/silc_private_message_get_message
139 * silc_private_message_get_message(SilcPrivateMessagePayload payload,
140 * SilcUInt32 *message_len);
144 * Returns the actual private message. The caller must not free it.
148 silc_private_message_get_message(SilcPrivateMessagePayload payload,
149 SilcUInt32 *message_len);
151 /****f* silccore/SilcPrivateAPI/silc_private_message_get_mac
156 * silc_private_message_get_mac(SilcPrivateMessagePayload payload);
160 * Returns the MAC from the payload. The caller knows its length.
161 * The caller must not free it.
165 silc_private_message_get_mac(SilcPrivateMessagePayload payload);