| Function silc_message_payload_encode
 
 SYNOPSIS
 
    SilcBuffer silc_message_payload_encode(SilcMessageFlags flags,
                                           const unsigned char *data,
                                           SilcUInt32 data_len,
                                           SilcBool generate_iv,
                                           SilcBool private_message,
                                           SilcCipher cipher,
                                           SilcHmac hmac,
                                           SilcRng rng,
                                           SilcPublicKey public_key,
                                           SilcPrivateKey private_key,
                                           SilcHash hash,
                                           SilcID *sender_id,
                                           SilcID *receiver_id,
                                           SilcBuffer buffer);
DESCRIPTION
    Encodes a Message Payload into a buffer and returns it.  This is
    used to encode channel messages and private messages into a packet.
    If `private_message' is FALSE then this encodes channel message, if
    it is TRUE this encodes private message.  If `private_message' is
    TRUE then `generate_iv' MUST be FALSE if the private message key
    `cipher' is not static key (pre-shared key).  If it is static key
    then protocol dictates that IV must be present in the Message Payload
    and `generate_iv' must be TRUE.  The caller must know whether the key
    is static or not for private messages.  If the key was generated with
    Key Agreement protocol then `generate_iv' is always FALSE.  For
    channel messages `generate_iv' is always set to TRUE value.
    The `cipher' is the cipher used to encrypt the message and `hmac'
    is used to compute the MAC for the payload.  If encoding private
    message that will be encrypted with session keys (no private message
    key) then `cipher' and `hmac' is NULL and this merely encodes the
    payload buffer, and the caller must encrypt the packet later.
    If `rng' is NULL then global RNG is used, if non-NULL then the
    `rng' is used (for IV and padding generation).
    The `public_key', `private_key' and `hash' are provided only if the
    flags includes SILC_MESSAGE_FLAG_SIGNED, in which case the message
    will be digitally signed.  If `public_key' is non-NULL then it will
    be included in the message.  The `private_message' and `hash' MUST
    be provided.  The `hash' SHOULD be SHA1.
    The `sender_id' is the ID message sender and `receiver_id' is ID of
    message receiver.
    If the `buffer' is non-NULL then the payload will be encoded into
    that buffer.  The same buffer is returned.  Otherwise new buffer is
    allocated and returned.  The `buffer' will be automatically enlarged
    if the payload does not fit to it.
 
 
 
 |