Function silc_message_payload_encode
SYNOPSIS
SilcBuffer silc_message_payload_encode(SilcMessageFlags flags,
const unsigned char *data,
SilcUInt32 data_len,
bool generate_iv,
bool private_message,
SilcCipher cipher,
SilcHmac hmac,
SilcRng rng);
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).
|