Function silc_packet_assemble
SYNOPSIS
void silc_packet_assemble(SilcPacketContext *ctx);
DESCRIPTION
Assembles a new packet to be ready for send out. The buffer sent as
argument must include the data to be sent and it must not be encrypted.
The packet also must have enough free space so that the SILC header
and padding maybe added to the packet. The packet is encrypted after
this function has returned.
The buffer sent as argument should be something like following:
--------------------------------------------
| head | data | tail |
--------------------------------------------
^ ^
58 bytes x bytes
So that the SILC header and 1 - 16 bytes of padding can fit to
the buffer. After assembly the buffer might look like this:
--------------------------------------------
| data | |
--------------------------------------------
^ ^
Start of assembled packet
Packet construct is as follows (* = won't be encrypted):
n bytes SILC Header
2 bytes Payload length (*)
1 byte Flags
1 byte Packet type
2 bytes Source ID Length
2 bytes Destination ID Length
1 byte Source ID Type
n bytes Source ID
1 byte Destination ID Type
n bytes Destination ID
1 - 16 bytes Padding
n bytes Data payload
All fields in the packet will be authenticated by MAC. The MAC is
not computed here, it must be computed separately before encrypting
the packet.
|