-/****h* silccore/silcchannel.h
- *
- * NAME
- *
- * silcchannel.h
- *
- * COPYRIGHT
- *
- * Author: Pekka Riikonen <priikone@poseidon.pspt.fi>
- *
- * Copyright (C) 1997 - 2001 Pekka Riikonen
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+/*
+
+ silcchannel.h
+
+ Author: Pekka Riikonen <priikone@silcnet.org>
+
+ Copyright (C) 1997 - 2001 Pekka Riikonen
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+*/
+
+/****h* silccore/SILC Channel Interface
*
* DESCRIPTION
*
*
* NAME
*
- * typedef uint16 SilcMessageFlags;
+ * typedef SilcUInt16 SilcMessageFlags;
*
* DESCRIPTION
*
*
* SOURCE
*/
-typedef uint16 SilcMessageFlags;
+typedef SilcUInt16 SilcMessageFlags;
/* The message flags (shared by both channel and private messages) */
-#define SILC_MESSAGE_FLAG_NONE 0x0000
-#define SILC_MESSAGE_FLAG_AUTOREPLY 0x0001
-#define SILC_MESSAGE_FLAG_NOREPLY 0x0002
-#define SILC_MESSAGE_FLAG_ACTION 0x0004
-#define SILC_MESSAGE_FLAG_NOTICE 0x0008
-#define SILC_MESSAGE_FLAG_REQUEST 0x0010
-#define SILC_MESSAGE_FLAG_RESERVED 0x0020 /* to 0x0200 */
-#define SILC_MESSAGE_FLAG_PRIVATE 0x0400 /* to 0x8000 */
+#define SILC_MESSAGE_FLAG_NONE 0x0000 /* No flags */
+#define SILC_MESSAGE_FLAG_AUTOREPLY 0x0001 /* Automatically replied */
+#define SILC_MESSAGE_FLAG_NOREPLY 0x0002 /* Send no reply to this */
+#define SILC_MESSAGE_FLAG_ACTION 0x0004 /* Action message */
+#define SILC_MESSAGE_FLAG_NOTICE 0x0008 /* Notice message */
+#define SILC_MESSAGE_FLAG_REQUEST 0x0010 /* A request */
+#define SILC_MESSAGE_FLAG_SIGNED 0x0020 /* Message is signed */
+#define SILC_MESSAGE_FLAG_REPLY 0x0040 /* A reply */
+#define SILC_MESSAGE_FLAG_DATA 0x0080 /* MIME object */
+#define SILC_MESSAGE_FLAG_UTF8 0x0100 /* UTF-8 string */
+#define SILC_MESSAGE_FLAG_RESERVED 0x0200 /* to 0x0800 */
+#define SILC_MESSAGE_FLAG_PRIVATE 0x1000 /* to 0x8000 */
/***/
/* Prototypes */
*
* SYNOPSIS
*
- * SilcChannelPayload silc_channel_payload_parse(SilcBuffer buffer);
+ * SilcChannelPayload
+ * silc_channel_payload_parse(const unsigned char *payload,
+ * SilcUInt32 payload_len);
*
* DESCRIPTION
*
* `buffer' is the raw payload buffer.
*
***/
-SilcChannelPayload silc_channel_payload_parse(SilcBuffer buffer);
+SilcChannelPayload silc_channel_payload_parse(const unsigned char *payload,
+ SilcUInt32 payload_len);
/****f* silccore/SilcChannelAPI/silc_channel_payload_parse_list
*
* SYNOPSIS
*
- * SilcDList silc_channel_payload_parse_list(SilcBuffer buffer);
+ * SilcDList
+ * silc_channel_payload_parse_list(const unsigned char *payload,
+ * SilcUInt32 payload_len);
*
* DESCRIPTION
*
* now includes multiple Channel Payloads one after the other.
*
***/
-SilcDList silc_channel_payload_parse_list(SilcBuffer buffer);
+SilcDList silc_channel_payload_parse_list(const unsigned char *payload,
+ SilcUInt32 payload_len);
/****f* silccore/SilcChannelAPI/silc_channel_payload_encode
*
* SYNOPSIS
*
- * SilcBuffer silc_channel_payload_encode(unsigned char *channel_name,
- * uint16 channel_name_len,
- * unsigned char *channel_id,
- * uint32 channel_id_len,
- * uint32 mode);
+ * SilcBuffer silc_channel_payload_encode(const unsigned char *channel_name,
+ * SilcUInt16 channel_name_len,
+ * const unsigned char *channel_id,
+ * SilcUInt32 channel_id_len,
+ * SilcUInt32 mode);
*
* DESCRIPTION
*
* Encode new channel payload and returns it as buffer.
*
***/
-SilcBuffer silc_channel_payload_encode(unsigned char *channel_name,
- uint16 channel_name_len,
- unsigned char *channel_id,
- uint32 channel_id_len,
- uint32 mode);
+SilcBuffer silc_channel_payload_encode(const unsigned char *channel_name,
+ SilcUInt16 channel_name_len,
+ const unsigned char *channel_id,
+ SilcUInt32 channel_id_len,
+ SilcUInt32 mode);
/****f* silccore/SilcChannelAPI/silc_channel_payload_free
*
* SYNOPSIS
*
* unsigned char *silc_channel_get_name(SilcChannelPayload payload,
- * uint32 *channel_name_len);
+ * SilcUInt32 *channel_name_len);
*
* DESCRIPTION
*
*
***/
unsigned char *silc_channel_get_name(SilcChannelPayload payload,
- uint32 *channel_name_len);
+ SilcUInt32 *channel_name_len);
/****f* silccore/SilcChannelAPI/silc_channel_get_id
*
* SYNOPSIS
*
* unsigned char *silc_channel_get_id(SilcChannelPayload payload,
- * uint32 *channel_id_len);
+ * SilcUInt32 *channel_id_len);
*
* DESCRIPTION
*
*
***/
unsigned char *silc_channel_get_id(SilcChannelPayload payload,
- uint32 *channel_id_len);
+ SilcUInt32 *channel_id_len);
/****f* silccore/SilcChannelAPI/silc_channel_get_id_parse
*
*
* SYNOPSIS
*
- * uint32 silc_channel_get_mode(SilcChannelPayload payload);
+ * SilcUInt32 silc_channel_get_mode(SilcChannelPayload payload);
*
* DESCRIPTION
*
* dictates what the usage of the mode is in different circumstances.
*
***/
-uint32 silc_channel_get_mode(SilcChannelPayload payload);
+SilcUInt32 silc_channel_get_mode(SilcChannelPayload payload);
/****f* silccore/SilcChannelAPI/silc_channel_message_payload_decrypt
*
* SYNOPSIS
*
- * int silc_channel_message_payload_decrypt(unsigned char *data,
- * size_t data_len,
- * SilcCipher cipher,
- * SilcHmac hmac);
+ * bool silc_channel_message_payload_decrypt(unsigned char *data,
+ * size_t data_len,
+ * SilcCipher cipher,
+ * SilcHmac hmac);
*
* DESCRIPTION
*
* not verified.
*
***/
-int silc_channel_message_payload_decrypt(unsigned char *data,
- size_t data_len,
- SilcCipher cipher,
- SilcHmac hmac);
+bool silc_channel_message_payload_decrypt(unsigned char *data,
+ size_t data_len,
+ SilcCipher cipher,
+ SilcHmac hmac);
/****f* silccore/SilcChannelAPI/silc_channel_message_payload_parse
*
* SYNOPSIS
*
* SilcChannelMessagePayload
- * silc_channel_message_payload_parse(SilcBuffer buffer,
+ * silc_channel_message_payload_parse(const unsigned char *payload,
+ * SilcUInt32 payload_len,
* SilcCipher cipher,
* SilcHmac hmac);
*
*
***/
SilcChannelMessagePayload
-silc_channel_message_payload_parse(SilcBuffer buffer,
+silc_channel_message_payload_parse(unsigned char *payload,
+ SilcUInt32 payload_len,
SilcCipher cipher,
SilcHmac hmac);
+/****f* silccore/SilcChannelAPI/silc_channel_message_payload_encrypt
+ *
+ * SYNOPSIS
+ *
+ * bool silc_channel_message_payload_encrypt(unsigned char *data,
+ * SilcUInt32 data_len,
+ * SilcUInt32 true_len,
+ * unsigned char *iv,
+ * SilcUInt32 iv_len,
+ * SilcCipher cipher,
+ * SilcHmac hmac);
+ *
+ * DESCRIPTION
+ *
+ * This function is used to encrypt the Channel Messsage Payload which is
+ * the `data' and `data_len'. The `data_len' is the data length which is
+ * used to create MAC out of. The `true_len' is the true length of `data'
+ * message payload and is used assemble rest of the packet after MAC
+ * creation. The `true_len' length packet will then be encrypted.
+ *
+ * This is usually used by the Channel Message interface itself but can
+ * be called by the appliation if separate encryption process is required.
+ * For example server might need to call this directly in some
+ * circumstances. The `cipher' is used to encrypt the payload.
+ *
+ ***/
+bool silc_channel_message_payload_encrypt(unsigned char *data,
+ SilcUInt32 data_len,
+ SilcUInt32 true_len,
+ unsigned char *iv,
+ SilcUInt32 iv_len,
+ SilcCipher cipher,
+ SilcHmac hmac);
+
/****f* silccore/SilcChannelAPI/silc_channel_message_payload_encode
*
* SYNOPSIS
*
- * SilcBuffer silc_channel_message_payload_encode(uint16 flags,
- * uint16 data_len,
- * unsigned char *data,
- * uint16 iv_len,
+ * SilcBuffer silc_channel_message_payload_encode(SilcUInt16 flags,
+ * SilcUInt16 data_len,
+ * const unsigned char *data,
+ * SilcUInt16 iv_len,
* unsigned char *iv,
* SilcCipher cipher,
- * SilcHmac hmac);
+ * SilcHmac hmac.
+ * SilcRng rng);
*
* DESCRIPTION
*
* must be applied to the payload. The function generates the padding
* automatically from random data. The `cipher' is the cipher used
* encrypt the payload and `hmac' is used to compute the MAC for the
- * payload.
+ * payload. If `rng' is NULL then global RNG is used, if non-NULL then
+ * the `rng' is used.
*
***/
-SilcBuffer silc_channel_message_payload_encode(uint16 flags,
- uint16 data_len,
- unsigned char *data,
- uint16 iv_len,
+SilcBuffer silc_channel_message_payload_encode(SilcUInt16 flags,
+ SilcUInt16 data_len,
+ const unsigned char *data,
+ SilcUInt16 iv_len,
unsigned char *iv,
SilcCipher cipher,
- SilcHmac hmac);
+ SilcHmac hmac,
+ SilcRng rng);
/****f* silccore/SilcChannelAPI/silc_channel_message_payload_free
*
*
* unsigned char *
* silc_channel_message_get_data(SilcChannelMessagePayload payload,
- * uint32 *data_len);
+ * SilcUInt32 *data_len);
*
* DESCRIPTION
*
*
***/
unsigned char *silc_channel_message_get_data(SilcChannelMessagePayload payload,
- uint32 *data_len);
+ SilcUInt32 *data_len);
/****f* silccore/SilcChannelAPI/silc_channel_message_get_mac
*
*
* SYNOPSIS
*
- * SilcChannelKeyPayload silc_channel_key_payload_parse(SilcBuffer buffer);
+ * SilcChannelKeyPayload
+ * silc_channel_key_payload_parse(const unsigned char *payload,
+ * uin32 payload_len);
*
* DESCRIPTION
*
* structure.
*
***/
-SilcChannelKeyPayload silc_channel_key_payload_parse(SilcBuffer buffer);
+SilcChannelKeyPayload
+silc_channel_key_payload_parse(const unsigned char *payload,
+ SilcUInt32 payload_len);
/****f* silccore/SilcChannelAPI/silc_channel_key_payload_encode
*
* SYNOPSIS
*
- * SilcBuffer silc_channel_key_payload_encode(uint16 id_len,
- * unsigned char *id,
- * uint16 cipher_len,
- * unsigned char *cipher,
- * uint16 key_len,
- * unsigned char *key);
+ * SilcBuffer silc_channel_key_payload_encode(SilcUInt16 id_len,
+ * const unsigned char *id,
+ * SilcUInt16 cipher_len,
+ * const unsigned char *cipher,
+ * SilcUInt16 key_len,
+ * const unsigned char *key);
*
* DESCRIPTION
*
* to add channel key payload into a packet.
*
***/
-SilcBuffer silc_channel_key_payload_encode(uint16 id_len,
- unsigned char *id,
- uint16 cipher_len,
- unsigned char *cipher,
- uint16 key_len,
- unsigned char *key);
+SilcBuffer silc_channel_key_payload_encode(SilcUInt16 id_len,
+ const unsigned char *id,
+ SilcUInt16 cipher_len,
+ const unsigned char *cipher,
+ SilcUInt16 key_len,
+ const unsigned char *key);
/****f* silccore/SilcChannelAPI/silc_channel_key_payload_free
*
* SYNOPSIS
*
* unsigned char *silc_channel_key_get_id(SilcChannelKeyPayload payload,
- * uint32 *id_len);
+ * SilcUInt32 *id_len);
*
* DESCRIPTION
*
*
***/
unsigned char *silc_channel_key_get_id(SilcChannelKeyPayload payload,
- uint32 *id_len);
+ SilcUInt32 *id_len);
/****f* silccore/SilcChannelAPI/silc_channel_key_get_cipher
*
* SYNOPSIS
*
* unsigned char *silc_channel_key_get_cipher(SilcChannelKeyPayload payload,
- * uint32 *cipher_len);
+ * SilcUInt32 *cipher_len);
*
* DESCRIPTION
*
*
***/
unsigned char *silc_channel_key_get_cipher(SilcChannelKeyPayload payload,
- uint32 *cipher_len);
+ SilcUInt32 *cipher_len);
/****f* silccore/SilcChannelAPI/silc_channel_key_get_key
*
* SYNOPSIS
*
* unsigned char *silc_channel_key_get_key(SilcChannelKeyPayload payload,
- * uint32 *key_len);
+ * SilcUInt32 *key_len);
*
* DESCRIPTION
*
*
***/
unsigned char *silc_channel_key_get_key(SilcChannelKeyPayload payload,
- uint32 *key_len);
+ SilcUInt32 *key_len);
#endif