- /* Encode the Message Payload */
- silc_buffer_pull_tail(buffer, 6 + data_len + pad_len);
- silc_buffer_format(buffer,
- SILC_STR_UI_SHORT(flags),
- SILC_STR_UI_SHORT(data_len),
- SILC_STR_UI_XNSTRING(data, data_len),
- SILC_STR_UI_SHORT(pad_len),
- SILC_STR_UI_XNSTRING(pad, pad_len),
- SILC_STR_END);
-
- memset(pad, 0, sizeof(pad));
-
- /* Sign the message if wanted */
- if (flags & SILC_MESSAGE_FLAG_SIGNED && private_key && hash) {
- sig = silc_message_signed_payload_encode(buffer->data,
- silc_buffer_len(buffer),
- public_key, private_key, hash);
- if (sig) {
- buffer = silc_buffer_realloc(buffer, silc_buffer_truelen(buffer) +
- silc_buffer_len(sig));
- if (buffer) {
- silc_buffer_pull(buffer, 6 + data_len + pad_len);
- silc_buffer_pull_tail(buffer, silc_buffer_len(sig));
- silc_buffer_put(buffer, sig->data, silc_buffer_len(sig));
- silc_buffer_push(buffer, 6 + data_len + pad_len);
- }
- }
- }
-
- /* Put IV */
- silc_buffer_pull(buffer, 6 + data_len + pad_len +
- (sig ? silc_buffer_len(sig) : 0));
- silc_buffer_pull_tail(buffer, iv_len);
- silc_buffer_format(buffer,
- SILC_STR_UI_XNSTRING(iv, iv_len),
- SILC_STR_END);
- silc_buffer_push(buffer, 6 + data_len + pad_len +
- (sig ? silc_buffer_len(sig) : 0));