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,
SilcPublicKey public_key,
SilcPrivateKey private_key,
SilcHash hash);
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.
|