1 .pl 10.0i
2 .po 0
3 .ll 7.2i
4 .lt 7.2i
5 .nr LL 7.2i
6 .nr LT 7.2i
7 .ds LF Riikonen
8 .ds RF FORMFEED[Page %]
9 .ds CF
10 .ds LH Internet Draft
11 .ds RH 6 October 2000
12 .ds CH
13 .na
14 .hy 0
15 .in 0
16 .nf
17 Network Working Group P. Riikonen
18 Internet-Draft
19 draft-riikonen-silc-pp-01.txt 6 October 2000
20 Expires: 6 Jun 2001
21
22 .in 3
23
24 .ce 2
25 SILC Packet Protocol
26 <draft-riikonen-silc-pp-01.txt>
27
28 .ti 0
29 Status of this Memo
30
31 This document is an Internet-Draft and is in full conformance with
32 all provisions of Section 10 of RFC 2026. Internet-Drafts are
33 working documents of the Internet Engineering Task Force (IETF), its
34 areas, and its working groups. Note that other groups may also
35 distribute working documents as Internet-Drafts.
36
37 Internet-Drafts are draft documents valid for a maximum of six months
38 and may be updated, replaced, or obsoleted by other documents at any
39 time. It is inappropriate to use Internet-Drafts as reference
40 material or to cite them other than as "work in progress."
41
42 The list of current Internet-Drafts can be accessed at
43 http://www.ietf.org/ietf/1id-abstracts.txt
44
45 The list of Internet-Draft Shadow Directories can be accessed at
46 http://www.ietf.org/shadow.html
47
48 The distribution of this memo is unlimited.
49
50
51 .ti 0
52 Abstract
53
54 This memo describes a Packet Protocol used in the Secure Internet Live
55 Conferencing (SILC) protocol specified in the Secure Internet Live
56 Conferencing, Protocol Specification Internet Draft [SILC1]. This
57 protocol describes the packet types and packet payloads which defines
58 the contents of the packets. The protocol provides secure binary packet
59 protocol that assures that the contents of the packets are secured and
60 authenticated.
61
62
63
64
65
66
67
68
69
70 .ti 0
71 Table of Contents
72
73 .nf
74 1 Introduction .................................................. 3
75 2 SILC Packet Protocol .......................................... 4
76 2.1 SILC Packet ............................................... 4
77 2.2 SILC Packet Header ........................................ 5
78 2.3 SILC Packet Types ......................................... 7
79 2.3.1 SILC Packet Payloads ................................ 15
80 2.3.2 Generic payloads .................................... 16
81 2.3.2.1 ID Payload .................................. 16
82 2.3.2.2 Argument Payload ............................ 16
83 2.3.2.3 Channel Payload ............................. XXX
84 2.3.3 Disconnect Payload .................................. 17
85 2.3.4 Success Payload ..................................... 18
86 2.3.5 Failure Payload ..................................... 18
87 2.3.6 Reject Payload ...................................... 19
88 2.3.7 Notify Payload ...................................... 20
89 2.3.8 Error Payload ....................................... 21
90 2.3.9 Channel Message Payload ............................. 22
91 2.3.10 Channel Key Payload ................................ 24
92 2.3.11 Private Message Payload ............................ 26
93 2.3.12 Private Message Key Payload ........................ 27
94 2.3.13 Command Payload .................................... 28
95 2.3.14 Command Reply Payload .............................. 29
96 2.3.15 Connection Auth Request Payload .................... 29
97 2.3.16 New ID Payload ..................................... 30
98 2.3.17 New Client Payload ................................. 31
99 2.3.18 New Server Payload ................................. 32
100 2.3.19 New Channel Payload ................................ 33
101 2.3.20 Key Agreement Payload .............................. XXX
102 2.4 SILC ID Types ............................................. 39
103 2.5 Packet Encryption And Decryption .......................... 39
104 2.5.1 Normal Packet Encryption And Decryption ............. 39
105 2.5.2 Channel Message Encryption And Decryption ........... 40
106 2.5.3 Private Message Encryption And Decryption ........... 41
107 2.6 Packet MAC Generation ..................................... 41
108 2.7 Packet Padding Generation ................................. 42
109 2.8 Packet Compression ........................................ 42
110 2.9 Packet Sending ............................................ 43
111 2.10 Packet Reception ......................................... 43
112 2.11 Packet Routing ........................................... 44
113 2.12 Packet Broadcasting ...................................... 45
114 2.13 Packet Tunneling ......................................... 45
115 3 Security Considerations ....................................... 46
116 4 References .................................................... 46
117 5 Author's Address .............................................. 47
118
119 .ti 0
120 List of Figures
121
122 .nf
123 Figure 1: Typical SILC Packet
124 Figure 2: SILC Packet Header
125 Figure 3: ID Payload
126 Figure 4: Argument Payload
127 Figure 5: Channel Payload
128 Figure 6: Disconnect Payload
129 Figure 7: Success Payload
130 Figure 8: Failure Payload
131 Figure 9: Reject Payload
132 Figure 10: Notify Payload
133 Figure 11: Error Payload
134 Figure 12: Channel Message Payload
135 Figure 13: Channel Key Payload
136 Figure 14: Private Message Payload
137 Figure 15: Private Message Key Payload
138 Figure 16: Command Payload
139 Figure 17: Connection Auth Request Payload
140 Figure 18: New Client Payload
141 Figure 19: New Server Payload
142 Figure 20: Key Agreement Payload
143 Figure 21: Cell Routers Payload
144
145
146 .ti 0
147 1. Introduction
148
149 This document describes a Packet Protocol used in the Secure Internet
150 Live Conferencing (SILC) protocol specified in the Secure Internet Live
151 Conferencing, Protocol Specification Internet Draft [SILC1]. This
152 protocol describes the packet types and packet payloads which defines
153 the contents of the packets. The protocol provides secure binary packet
154 protocol that assures that the contents of the packets are secured and
155 authenticated.
156
157 The basis of SILC protocol relies in the SILC packets and it is with
158 out a doubt the most important part of the protocol. It is also probably
159 the most complicated part of the protocol. Packets are used all the
160 time in the SILC network to send messages, commands and other information.
161 All packets in SILC network are always encrypted and their integrity
162 is assured by computed MACs. The protocol defines several packet types
163 and packet payloads. Each packet type usually has a specific packet
164 payload that actually defines the contents of the packet. Each packet
165 also includes a default SILC Packet Header that provides sufficient
166 information about the origin of the packet and destination of the
167 packet.
168
169
170 .ti 0
171 2 SILC Packet Protocol
172
173 .ti 0
174 2.1 SILC Packet
175
176 SILC packets deliver messages from sender to receiver securely by
177 encrypting important fields of the packet. The packet consists of
178 default SILC Packet Header, Padding, Packet Payload data, and, packet
179 MAC.
180
181 The following diagram illustrates typical SILC packet.
182
183
184 .in 5
185 .nf
186 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
187 | n bytes | 1 - n bytes | n bytes | n bytes
188 | SILC Header | Padding | Data Payload | MAC
189 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
190 .in 3
191
192 .ce
193 Figure 1: Typical SILC Packet
194
195
196 SILC Header is always the first part of the packet and its purpose
197 is to provide information about the packet. It provides for example
198 the packet type, origin of the packet and the destination of the packet.
199 The header is variable in length and first two (2) bytes of the
200 header (thus first two bytes of the packet) are not encrypted. The
201 first two (2) bytes are the length of the packet which is not encrypted.
202 See The following section for description of SILC Packet header. Packets
203 without SILC header or with malformed SILC header must be dropped.
204
205 Padding follows the packet header. The purpose of the padding is to
206 make the packet multiple by eight (8) or by the block size of the
207 cipher used in the encryption, which ever is larger. The maximum
208 length of padding is currently 16 bytes. The padding is always
209 encrypted.
210
211 Data payload area follows padding and it is the actual data of the
212 packet. The packet data is the packet payloads defined in this
213 protocol. The data payload area is always encrypted.
214
215 The last part of SILC packet is the packet MAC that assures the
216 integrity of the packet. The MAC is always computed from the packet
217 before the encryption is applied to the packet. If compression is used
218 in the packet the MAC is computed after the compression has been
219 applied. The compression, on the other hand, is always applied before
220 encryption.
221
222 All fields in all packet payloads are always in MSB (most significant
223 byte first) order.
224
225
226 .ti 0
227 2.2 SILC Packet Header
228
229 The default SILC packet header is applied to all SILC packets and it is
230 variable in length. The purpose of SILC Packet header is to provide
231 detailed information about the packet. The receiver of the packet uses
232 the packet header to parse the packet and gain other relevant parameters
233 of the packet.
234
235 The following diagram represents the default SILC header format.
236 (*) indicates that this field is never encrypted. Other fields are
237 always encrypted.
238
239
240 .in 5
241 .nf
242 1 2 3
243 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
244 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
245 | Payload Length * | Flags | Packet Type |
246 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
247 | Source ID Length | Destination ID Length |
248 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
249 | Src ID Type | |
250 +-+-+-+-+-+-+-+-+ +
251 | |
252 ~ Source ID ~
253 | |
254 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
255 | Dst ID Type | |
256 +-+-+-+-+-+-+-+-+ +
257 | |
258 ~ Destination ID ~
259 | |
260 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
261 .in 3
262
263 .ce
264 Figure 2: SILC Packet Header
265
266
267 .in 6
268 o Payload Length (2 bytes) - Is the length of the packet
269 not including the padding of the packet. This field must
270 not be encrypted but must always be authenticated.
271
272 o Flags (1 byte) - Indicates flags to be used in packet
273 processing. Several flags may be set by ORing the flags
274 together.
275
276 The following flags are reserved for this field:
277
278
279 No flags 0x00
280
281 In this case the field is ignored.
282
283
284 Private Message Key 0x01
285
286 Indicates that the packet must include private
287 message that is encrypted using private key set by
288 client. Servers does not know anything about this
289 key and this causes that the private message is
290 not handled by the server at all, it is just
291 passed along. See section 2.5.3 Private Message
292 Encryption And Decryption for more information.
293
294
295 List 0x02
296
297 Indicates that the packet consists of list of
298 packet payloads indicated by the Packet Type field.
299 The payloads are added one after the other. Note that
300 there are packet types that must not be used as
301 list. Parsing of list packet is done by calculating
302 the length of each payload and parsing them one by
303 one.
304
305
306 Broadcast 0x04
307
308 Marks the packet to be broadcasted. Client cannot
309 send broadcast packet and normal server cannot send
310 broadcast packet. Only router server may send broadcast
311 packet. The router receiving of packet with this flag
312 set must send (broadcast) the packet to its primary
313 route. If router has several router connections the
314 packet may be sent only to the primary route. See
315 section 2.13 Packet Broadcasting for description of
316 packet broadcasting.
317
318
319 Tunneled 0x08
320
321 Marks that the packet is tunneled. Tunneling means
322 that extra SILC Packet Header has been applied to the
323 original packet. The outer header has this flag
324 set. See section 2.14 Packet Tunneling for more
325 information.
326 .in 3
327
328
329
330 o Packet Type (1 byte) - Is the type of the packet. Receiver
331 uses this field to parse the packet. See section 2.3
332 SILC Packets for list of defined packet types.
333
334 o Source ID Length (2 bytes) - Indicates the length of the
335 Source ID field in the header, not including this or any
336 other fields.
337
338 o Destination ID Length (2 bytes) - Indicates the length of the
339 Destination ID field in the header, not including this or
340 any other fields.
341
342 o Src ID Type (1 byte) - Indicates the type of ID in the
343 Source ID field. See section 2.4 SILC ID Types for
344 defined ID types.
345
346 o Source ID (variable length) - The actual source ID that
347 indicates who is the original sender of the packet.
348
349 o Dst ID Type (1 byte) - Indicates the type of ID in the
350 Destination ID field. See section 2.4 SILC ID Types for
351 defined ID types.
352
353 o Destination ID (variable length) - The actual source ID that
354 indicates who is the end receiver of the packet.
355
356
357 .ti 0
358 2.3 SILC Packet Types
359
360 SILC packet types defines the contents of the packet and it is used by
361 the receiver to parse the packet. The packet type is 8 bits, as a one
362 byte, in length. The range for the packet types are from 0 - 255,
363 where 0 is never sent and 255 is currently reserved for future
364 extensions and must not be defined to any other purpose. Every SILC
365 specification compliant implementation should support all of these packet
366 types.
367
368 The below list of the SILC Packet types includes reference to the packet
369 payload as well. Packet payloads are the actual packet, that is, the data
370 that the packet consists of. Each packet type defines packet payload
371 which usually may only be sent with the specific packet type.
372
373 Most of the packets are packets that must be destined directly to entity
374 that is connected to the sender. It is not allowed, for example, for
375 router to send disconnect packet to client that is not directly connected
376 to the router. However, there are some special packet types that may
377 be destined to some entity that the sender has not direct connection
378 with. These packets are for example private message packets, channel
379 message packets, command packets and some other packets that may be
380 broadcasted in the SILC network. If the packet is allowed to be sent to
381 indirectly connected entity it is mentioned separately in the packet
382 description (unless it is obvious as in private and channel message
383 packets). Other packets must not be sent or accepted, if sent, to
384 indirectly connected entities.
385
386 List of SILC Packet types are defined as follows.
387
388 .in 1
389 0 SILC_PACKET_NONE
390
391 This type is reserved and it is never sent.
392
393
394 1 SILC_PACKET_DISCONNECT
395
396 This packet is sent to disconnect the remote end. Reason of
397 the disconnection is sent inside the packet payload. Client
398 usually does not send this packet.
399
400 This packet must not be sent as list and the List flag must
401 not be set.
402
403 Payload of the packet: See section 2.3.3 Disconnect Payload
404
405
406 2 SILC_PACKET_SUCCESS
407
408 This packet is sent upon successful execution of some protocol.
409 The status of the success is sent in the packet.
410
411 This packet must not be sent as list and the List flag must
412 not be set.
413
414 Payload of the packet: See section 2.3.4 Success Payload
415
416
417 3 SILC_PACKET_FAILURE
418
419 This packet is sent upon failure of some protocol. The status
420 of the failure is sent in the packet.
421
422 This packet must not be sent as list and the List flag must
423 not be set.
424
425 Payload of the packet: See section 2.3.5 Failure Payload
426
427
428 4 SILC_PACKET_REJECT
429
430 This packet may be sent upon rejection of some protocol.
431 The status of the rejection is sent in the packet.
432
433 This packet must not be sent as list and the List flag must
434 not be set.
435
436 Payload of the packet: See section 2.3.6 Reject Payload
437
438
439 5 SILC_PACKET_NOTIFY
440
441 This packet is used to send notify message, usually from
442 server to client, although it may be sent from server to another
443 server as well. Client never sends this packet. Server may
444 send this packet to channel as well when the packet is
445 distributed to all clients on the channel.
446
447 Payload of the packet: See section 2.3.7 Notify Payload.
448
449
450 6 SILC_PACKET_ERROR
451
452 This packet is sent when an error occurs. Server may
453 send this packet. Client never sends this packet. The
454 client may entirely ignore the packet, however, server is
455 most likely to take action anyway. This packet may be sent
456 to entity that is indirectly connected to the sender.
457
458 This packet must not be sent as list and the List flag must
459 not be set.
460
461 Payload of the packet: See section 2.3.8 Error Payload.
462
463
464 7 SILC_PACKET_CHANNEL_MESSAGE
465
466 This packet is used to send messages to channels. The packet
467 includes Channel ID of the channel and the actual message to
468 the channel. Messages sent to the channel are always protected
469 by channel specific keys. Channel Keys are distributed by
470 SILC_PACKET_CHANNEL_KEY packet.
471
472 This packet must not be sent as list and the List flag must
473 not be set.
474
475 Payload of the packet: See section 2.3.9 Channel Message
476 Payload
477
478
479 8 SILC_PACKET_CHANNEL_KEY
480
481 This packet is used to distribute new key for particular
482 channel. Each channel has their own independent keys that
483 is used to protect the traffic on the channel. Only server
484 may send this packet. This packet may be sent to entity
485 that is indirectly connected to the sender.
486
487 This packet must not be sent as list and the List flag must
488 not be set.
489
490 Payload of the packet: See section 2.3.10 Channel Key Payload
491
492
493 9 SILC_PACKET_PRIVATE_MESSAGE
494
495 This packet is used to send private messages from client
496 to another client. By default, private messages are protected
497 by session keys established by normal key exchange protocol.
498 However, it is possible to use specific key to protect private
499 messages. SILC_PACKET_PRIVATE_MESSAGE_KEY packet is used to
500 agree the key with the remote client. Pre-shared key may be
501 used as well if both of the client knows it, however, it needs
502 to be agreed outside SILC. See more of this in [SILC1].
503
504 This packet must not be sent as list and the List flag must
505 not be set.
506
507 Payload of the packet: See section 2.3.11 Private Message
508 Payload
509
510
511 10 SILC_PACKET_PRIVATE_MESSAGE_KEY
512
513 This packet is used to agree about a key to be used to protect
514 the private messages between two clients. If this is not sent
515 the normal session key is used to protect the private messages
516 inside SILC network. Agreeing to use specific key to protect
517 private messages adds security, as no server between the two
518 clients will be able to decrypt the private message. However,
519 servers inside SILC network are considered to be trusted, thus
520 using normal session key to protect private messages does not
521 degree security. Whether to agree to use specific keys by
522 default or to use normal session keys by default, is
523 implementation specific issue. See more of this in [SILC1].
524
525 This packet must not be sent as list and the List flag must
526 not be set.
527
528 Payload of the packet: See section 2.3.12 Private Message
529 Key Payload
530
531
532 11 SILC_PACKET_COMMAND
533
534 This packet is used to send commands from client to server.
535 Server may send this packet to other servers as well. All
536 commands are listed in their own section SILC Command Types
537 in [SILC1]. The contents of this packet is command specific.
538 This packet may be sent to entity that is indirectly connected
539 to the sender.
540
541 This packet must not be sent as list and the List flag must
542 not be set.
543
544 Payload of the packet: See section 2.3.13 Command Payload
545
546
547 12 SILC_PACKET_COMMAND_REPLY
548
549 This packet is send as reply to the SILC_PACKET_COMMAND packet.
550 The contents of this packet is command specific. This packet
551 maybe sent to entity that is indirectly connected to the sender.
552
553 This packet must not be sent as list and the List flag must
554 not be set.
555
556 Payload of the packet: See section 2.3.14 Command Reply
557 Payload and section 2.3.13 Command
558 Payload
559
560
561 13 SILC_PACKET_KEY_EXCHANGE
562
563 This packet is used to start SILC Key Exchange Protocol,
564 described in detail in [SILC3].
565
566 This packet must not be sent as list and the List flag must
567 not be set.
568
569 Payload of the packet: Payload of this packet is described
570 in the section SILC Key Exchange
571 Protocol and its sub sections in
572 [SILC3].
573
574
575 14 SILC_PACKET_KEY_EXCHANGE_1
576
577 This packet is used as part of the SILC Key Exchange Protocol.
578
579 This packet must not be sent as list and the List flag must
580 not be set.
581
582 Payload of the packet: Payload of this packet is described
583 in the section SILC Key Exchange
584 Protocol and its sub sections in
585 [SILC3].
586
587
588 15 SILC_PACKET_KEY_EXCHANGE_2
589
590 This packet is used as part of the SILC Key Exchange Protocol.
591
592 This packet must not be sent as list and the List flag must
593 not be set.
594
595 Payload of the packet: Payload of this packet is described
596 in the section SILC Key Exchange
597 Protocol and its sub sections in
598 [SILC3].
599
600
601 16 SILC_PACKET_CONNECTION_AUTH_REQUEST
602
603 This packet is used to request the authentication method to
604 be used in the SILC Connection Authentication Protocol. If
605 initiator of the protocol does not know the mandatory
606 authentication method this packet may be used to determine it.
607
608 The party receiving this payload must respond with the same
609 packet including the mandatory authentication method.
610
611 This packet must not be sent as list and the List flag must
612 not be set.
613
614 Payload of the packet: See section 2.3.15 Connection Auth
615 Request Payload
616
617
618 17 SILC_PACKET_CONNECTION_AUTH
619
620 This packet is used to start and perform the SILC Connection
621 Authentication Protocol. This protocol is used to authenticate
622 the connecting party. The protocol is described in detail in
623 [SILC3].
624
625 This packet must not be sent as list and the List flag must
626 not be set.
627
628 Payload of the packet: Payload of this packet is described
629 in the section SILC Authentication
630 Protocol and it sub sections in [SILC].
631
632
633 18 SILC_PACKET_NEW_ID
634
635 This packet is used to distribute new ID's from server to
636 router and from router to all routers in the SILC network.
637 This is used when for example new client is registered to
638 SILC network. The newly created ID's of these operations are
639 distributed by this packet. Only server may send this packet,
640 however, client must be able to receive this packet.
641
642 Payload of the packet: See section 2.3.16 New ID Payload
643
644
645 19 SILC_PACKET_NEW_CLIENT
646
647 This packet is used by client to register itself to the
648 SILC network. This is sent after key exchange and
649 authentication protocols has been completed. Client sends
650 various information about itself in this packet.
651
652 This packet must not be sent as list and the List flag must
653 not be set.
654
655 Payload of the packet: See section 2.3.17 New Client Payload
656
657
658 20 SILC_PACKET_NEW_SERVER
659
660 This packet is used by server to register itself to the
661 SILC network. This is sent after key exchange and
662 authentication protocols has been completed. Server sends
663 this to the router it connected to, or, if router was
664 connecting, to the connected router. Server sends
665 its Server ID and other information in this packet.
666 Client must not send or receive this packet.
667
668 This packet must not be sent as list and the List flag must
669 not be set.
670
671 Payload of the packet: See section 2.3.18 New Server Payload
672
673
674 21 SILC_PACKET_NEW_CHANNEL
675
676 This packet is used to notify routers about newly created
677 channel. Channels are always created by the router and it must
678 notify other routers about the created channel. Router sends
679 this packet to its primary route. Client must not send this
680 packet. This packet maybe sent to entity that is indirectly
681 connected to the sender.
682
683 Payload of the packet: See section 2.3.19 New Channel Payload
684
685
686 22 SILC_PACKET_REKEY
687
688 This packet is used to indicate that re-key must be performed
689 for session keys. See section Session Key Regeneration in
690 [SILC1] for more information. This packet does not have
691 a payload.
692
693 This packet must not be sent as list and the List flag must
694 not be set.
695
696
697 23 SILC_PACKET_REKEY_DONE
698
699 This packet is used to indicate that re-key is performed and
700 new keys must be used hereafter. This is sent only if re-key
701 was done without PFS option. If PFS is set, this is not sent
702 as SILC Key Exchange protocol is executed. This packet does
703 not have a payload.
704
705 This packet must not be sent as list and the List flag must
706 not be set.
707
708
709 24 SILC_PACKET_HEARTBEAT
710
711 This packet is used by clients, servers and routers to keep the
712 connection alive. It is recommended that all servers implement
713 keepalive actions and perform it to both direction in a link.
714 This packet does not have a payload.
715
716 This packet must not be sent as list and the List flag must
717 not be set.
718
719
720 25 SILC_PACKET_KEY_AGREEMENT
721
722 This packet is used by clients to request key negotiation
723 between another client in the SILC network. If the negotiation
724 is started it is performed using the SKE protocol. The result of
725 the negotiation, the secret key material, can be used for
726 example as private message key. The server and router must not
727 send this packet.
728
729 Payload of the packet: See section 2.3.20 Key Agreement Payload
730
731
732 26 SILC_PACKET_CELL_ROUTERS
733
734 This packet is used by primary router in the cell to notify its
735 primary router what other routers (backup routers) exist in the
736 cell. In case of failure of the primary router in the cell the
737 first router in the list will act as primary router of the cell.
738 This packet may be sent at anytime after connection has been
739 registered to the primary router. The client must not send this
740 packet.
741
742 Payload of the packet: See section 2.3.21 Cell Routers Payload
743
744
745 27 - 199
746
747 Currently undefined commands.
748
749
750 200 - 254
751
752 These packet types are reserved for private use and they will not
753 be defined by this document.
754
755
756 255 SILC_PACKET_MAX
757
758 This type is reserved for future extensions and currently it
759 is not sent.
760 .in 3
761
762
763 .ti 0
764 2.3.1 SILC Packet Payloads
765
766 All payloads resides in the main data area of the SILC packet. However
767 all payloads must be at the start of the data area after the default
768 SILC packet header and padding. All fields in the packet payload are
769 always encrypted, as, they reside in the data area of the packet which
770 is always encrypted.
771
772 Payloads described in this section are common payloads that must be
773 accepted anytime during SILC session. Most of the payloads may only
774 be sent with specific packet type which is defined in the description
775 of the payload.
776
777 There are a lot of other payloads in the SILC as well. However, they
778 are not common in the sense that they could be sent at any time.
779 These payloads are not described in this section. These are payloads
780 such as SILC Key Exchange payloads and so on. These are described
781 in [SILC1] and [SILC3].
782
783
784 .ti 0
785 2.3.2 Generic payloads
786
787 This section describes generic payloads that are not associated to any
788 specific packet type. They can be used for example inside some other
789 packet payloads.
790
791
792 .ti 0
793 2.3.2.1 ID Payload
794
795 This payload can be used to send an ID. ID's are variable length thus
796 this payload provides a way to send variable length ID's.
797
798 The following diagram represents the ID Payload.
799
800 .in 5
801 .nf
802 1 2 3
803 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
804 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
805 | ID Type | ID Length |
806 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
807 | |
808 ~ ID Data ~
809 | |
810 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
811 .in 3
812
813 .ce
814 Figure 3: ID Payload
815
816
817 .in 6
818 o ID Type (2 bytes) - Indicates the type of the ID. See
819 section 2.4 SILC ID Types for list of defined ID types.
820
821 o ID Length (2 bytes) - Length of the ID Data area not
822 including the length of any other fields in the payload.
823
824 o ID Data (variable length) - The actual ID data.
825 .in 3
826
827
828 .ti 0
829 2.3.2.2 Argument Payload
830
831 Argument Payload is used to set arguments for any packet payload that
832 needs and supports arguments, such as commands. Number of arguments
833 associated with a packet must be indicated by the packet payload who
834 needs the arguments. Argument Payloads must always reside right after
835 the packet payload needing the arguments. Incorrect amount of argument
836 payloads must cause rejection of the packet. The following diagram represents
837 the Argument Payload.
838
839 The following diagram represents the Argument Payload.
840
841 .in 5
842 .nf
843 1 2 3
844 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
845 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
846 | Payload Length | Argument Type | |
847 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
848 | |
849 ~ Argument Data ~
850 | |
851 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
852 .in 3
853
854 .ce
855 Figure 4: Argument Payload
856
857
858 .in 6
859 o Payload Length (2 bytes) - Length of the argument payload data
860 area not including the length of any other fields in the
861 payload.
862
863 o Argument Type (1 byte) - Indicates the type of the argument.
864 Every argument may have a specific type that must be defined
865 by the packet payload needing the argument. For example
866 every command specify a number for each argument that maybe
867 associated with the command. By using this number the receiver
868 of the packet knows what type of argument this is. If there is
869 no specific argument type this field is set to zero (0).
870
871 o Argument Data (variable length) - Argument data.
872 .in 3
873
874
875 .ti 0
876 2.3.2.3 Channel Payload
877
878 Generic Channel Payload may be used information about channel, its name,
879 the Channel ID and a mode.
880
881 The following diagram represents the Channel Payload Payload.
882
883
884 .in 5
885 .nf
886 1 2 3
887 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
888 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
889 | Channel Name Length | |
890 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
891 | |
892 ~ Channel Name ~
893 | |
894 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
895 | Channel ID Length | |
896 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
897 | |
898 ~ Channel ID ~
899 | |
900 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
901 | Mode Mask |
902 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
903 .in 3
904
905 .ce
906 Figure 5: New Channel Payload
907
908
909 .in 6
910 o Channel Name Length (2 bytes) - Length of the channel name
911 field.
912
913 o Channel Name (variable length) - The name of the channel.
914
915 o Channel ID Length (2 bytes) - Length of the Channel ID field.
916
917 o Channel ID (variable length) - The Channel ID.
918
919 o Mode Mask (4 bytes) - A mode. This can be the mode of the
920 channel but it can also be the mode of the client on the
921 channel. The contents of this field is dependent of the
922 usage of this payload. The usage is defined separately
923 when this payload is used. This is a 32 bit MSB first value.
924 .in 3
925
926
927 .ti 0
928 2.3.3 Disconnect Payload
929
930 Disconnect payload is sent upon disconnection. The payload is simple;
931 reason of disconnection is sent to the disconnected party.
932
933 The payload may only be sent with SILC_PACKET_DISCONNECT packet. It
934 must not be sent in any other packet type. The following diagram represents
935 the Disconnect Payload.
936
937
938
939
940
941
942
943 .in 5
944 .nf
945 1 2 3
946 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
947 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
948 | |
949 ~ Disconnect Message ~
950 | |
951 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
952 .in 3
953
954 .ce
955 Figure 6: Disconnect Payload
956
957
958
959
960 .in 6
961 o Disconnect Message (variable length) - Human readable
962 reason of the disconnection.
963 .in 3
964
965
966 .ti 0
967 2.3.4 Success Payload
968
969 Success payload is sent when some protocol execution is successfully
970 completed. The payload is simple; indication of the success is sent.
971 This maybe any data, including binary or human readable data.
972
973 .in 5
974 .nf
975 1 2 3
976 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
977 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
978 | |
979 ~ Success Indication ~
980 | |
981 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
982 .in 3
983
984 .ce
985 Figure 7: Success Payload
986
987
988 .in 6
989 o Success Indication (variable length) - Indication of
990 the success. This maybe for example some flag that
991 indicates the protocol and the success status or human
992 readable success message. The true length of this
993 payload is available by calculating it from the SILC
994 Packet Header.
995 .in 3
996
997
998 .ti 0
999 2.3.5 Failure Payload
1000
1001 This is opposite of Success Payload. Indication of failure of
1002 some protocol is sent in the payload.
1003
1004
1005 .in 5
1006 .nf
1007 1 2 3
1008 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1009 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1010 | |
1011 ~ Failure Indication ~
1012 | |
1013 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1014 .in 3
1015
1016 .ce
1017 Figure 8: Failure Payload
1018
1019
1020 .in 6
1021 o Failure Indication (variable length) - Indication of
1022 the failure. This maybe for example some flag that
1023 indicates the protocol and the failure status or human
1024 readable failure message. The true length of this
1025 payload is available by calculating it from the SILC
1026 Packet Header.
1027 .in 3
1028
1029
1030 .ti 0
1031 2.3.6 Reject Payload
1032
1033 This payload is sent when some protocol is rejected to be executed.
1034 Other operations may send this as well that was rejected. The
1035 indication of the rejection is sent in the payload. The indication
1036 may be binary or human readable data.
1037
1038
1039 .in 5
1040 .nf
1041 1 2 3
1042 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1043 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1044 | |
1045 ~ Reject Indication ~
1046 | |
1047 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1048 .in 3
1049
1050 .ce
1051 Figure 9: Reject Payload
1052
1053
1054 .in 6
1055 o Reject Indication (variable length) - Indication of
1056 the rejection. This maybe for example some flag that
1057 indicates the protocol and the rejection status or human
1058 readable rejection message. The true length of this
1059 payload is available by calculating it from the SILC
1060 Packet Header.
1061 .in 3
1062
1063
1064
1065
1066
1067 .ti 0
1068 2.3.7 Notify Payload
1069
1070 Notify payload is used to send notify messages. The payload is usually
1071 sent from server to client, however, server may send it to another
1072 server as well. This payload may also be sent to a channel. Client must
1073 not send this payload. The receiver of this payload may totally ignore the
1074 contents of the payload, however, notify message should be audited.
1075
1076 The payload may only be sent with SILC_PACKET_NOTIFY packet. It must
1077 not be sent in any other packet type. The following diagram represents the
1078 Notify Payload.
1079
1080 .in 5
1081 .nf
1082 1 2 3
1083 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1084 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1085 | Notify Type | Payload Length |
1086 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1087 | Argument Nums |
1088 +-+-+-+-+-+-+-+-+
1089 .in 3
1090
1091 .ce
1092 Figure 10: Notify Payload
1093
1094
1095 .in 6
1096 o Notify Type (2 bytes) - Indicates the type of the notify
1097 message.
1098
1099 o Payload Length (2 bytes) - Length of the entire Notify Payload
1100 including any associated Argument Payloads.
1101
1102 o Argument Nums (2 bytes) - Indicates the number of Argument
1103 Payloads associated to this payload. Notify types may define
1104 arguments to be send along the notify message.
1105 .in 3
1106
1107 The following list of currently defined notify types. The format for notify
1108 arguments is same as in SILC commands described in [SILC1]. Also, all
1109 ID's sent in arguments are sent inside ID Payload.
1110
1111 .in 6
1112 0 SILC_NOTIFY_TYPE_NONE
1113
1114 If no specific notify type apply for the notify message this type
1115 may be used.
1116
1117 Max Arguments: 1
1118 Arguments: (1) <message>
1119
1120 The <message> is implementation specific free text string. Receiver
1121 may ignore this message.
1122
1123
1124 1 SILC_NOTIFY_TYPE_INVITE
1125
1126 Sent when an client is invited to a channel. This is also sent
1127 when the invite list of the channel is changed. This notify type
1128 is sent between routers and if an client was invited to the
1129 client as well. In this case the packet is destined to the client.
1130
1131 Max Arguments: 5
1132 Arguments: (1) <Channel ID> (2) <channel name>
1133 (3) [<sender Client ID>] (4) [<adding client>]
1134 (5) [<removing client>]
1135
1136 The <Channel ID> is the channel. The <channel name> is the name
1137 of the channel and is provided because the client which receives
1138 this notify packet may not have a way to resolve the name of the
1139 channel from the <Channel ID>. The <sender Client ID> is the
1140 Client ID who invited the client to the channel. The <adding client>
1141 and the <removing client> indicates the added or removed client
1142 from the channel's invite list. The format of the <adding client
1143 and the <removing client> is defined in the [SILC1] with
1144 SILC_COMMAND_INVITE command.
1145
1146 The <adding client> and <removing clien